[{"data":1,"prerenderedAt":173559},["ShallowReactive",2],{"wiki-\u002Fwiki\u002F2025-01-27-linux-ji-ben-cao-zuo\u002Fch2-linux-zhuang-ji-jiao-cheng":3,"wiki-doc-nav":798},{"id":4,"title":5,"body":6,"description":791,"extension":792,"meta":793,"navigation":487,"path":794,"seo":795,"stem":796,"__hash__":797},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程.md","2. Linux装机教程",{"type":7,"value":8,"toc":778},"minimark",[9,13,18,22,30,34,39,45,52,57,62,67,72,75,78,81,84,88,91,96,99,104,107,112,120,123,126,129,132,135,146,150,155,160,165,169,174,178,183,187,191,198,201,247,252,256,260,265,273,278,289,294,305,310,315,348,352,355,360,363,388,392,397,400,405,410,430,435,438,453,457,518,521,526,530,533,548,551,554,559,563,567,570,574,579,582,587,592,596,603,611,614,621,626,631,634,639,646,651,658,662,664,669,673,676,679,684,687,692,695,700,705,710,714,719,723,774],[10,11,5],"h1",{"id":12},"_2-linux装机教程",[14,15,17],"h2",{"id":16},"_21-实体机","2.1 实体机",[19,20,21],"p",{},"使用清华源：（Ubuntu24.04）",[19,23,24],{},[25,26,27],"a",{"href":27,"rel":28},"https:\u002F\u002Fmirrors.tuna.tsinghua.edu.cn\u002Fubuntu-releases\u002F24.04\u002F",[29],"nofollow",[14,31,33],{"id":32},"_22-普通虚拟机","2.2 普通虚拟机",[35,36,38],"h3",{"id":37},"_221-下载virtualbox虚拟机","2.2.1 下载VirtualBox虚拟机",[19,40,41],{},[25,42,43],{"href":43,"rel":44},"https:\u002F\u002Fwww.virtualbox.org\u002Fwiki\u002FDownload_Old_Builds_7_0",[29],[19,46,47],{},[48,49],"img",{"alt":50,"src":51},"","\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-001.png",[19,53,54],{},[48,55],{"alt":50,"src":56},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-002.png",[19,58,59],{},[48,60],{"alt":50,"src":61},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-003.png",[19,63,64],{},[48,65],{"alt":50,"src":66},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-004.png",[19,68,69],{},[48,70],{"alt":50,"src":71},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-005.png",[19,73,74],{},"内存4G（4096MB）；",[19,76,77],{},"CPU给4个核；",[19,79,80],{},"硬盘动态分配60G；",[19,82,83],{},"除了上面这三项，其它的默认即可，最后点击“Finish”。",[35,85,87],{"id":86},"_222-安装ubuntu","2.2.2 安装Ubuntu",[19,89,90],{},"按照1.1的步骤下载Ubuntu",[19,92,93],{},[48,94],{"alt":50,"src":95},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-006.png",[19,97,98],{},"点击启动(绿色大箭头)，过一段时间出现下图中的小界面，往下拉选择中文简体，然后点击“安装Ubuntu”",[19,100,101],{},[48,102],{"alt":50,"src":103},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-007.png",[19,105,106],{},"键盘布局默认“Chinese”并点击“继续”，如果找不到“继续”就用Alt+F7，然后往上拖鼠标即可看到（注意拖鼠标的过程中不要点击鼠标，拖到目标位置后再点击鼠标）。",[19,108,109],{},[48,110],{"alt":50,"src":111},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-008.png",[19,113,114,115,119],{},"选择“正常安装”(找不到都用Alt+F7)， ",[116,117,118],"strong",{},"不选"," “安装Ubuntu时下载更新”，其余都默认并继续",[19,121,122],{},"清除整个磁盘并安装Ubuntu，现在安装。(不会清除windows的磁盘，放心安装)",[19,124,125],{},"将改动写入磁盘吗 继续",[19,127,128],{},"选择东八区（shanghai，大致在地图上点一下），继续",[19,130,131],{},"姓名、计算机名、用户名、密码都自己设置，越简单越好(密码需牢记)。 自动登录 继续",[19,133,134],{},"就开始安装了,比较耗时，只要Skip高亮了就点击之（这样省时，光标是圆圈也能点击）",[19,136,137,138,141,142,145],{},"安装完成后，现在重启，重启过程中根据提示按回车键。 进入系统后不要升级，且第一次进系统需设置一些信息，根据提示 ",[116,139,140],{},"除了"," 选不发送系统信息与不升级之外， ",[116,143,144],{},"其它"," 都跳过或前进）",[35,147,149],{"id":148},"_223-增强虚拟机体验感","2.2.3 增强虚拟机体验感",[151,152,154],"h4",{"id":153},"_2231-全屏","2.2.3.1 全屏",[19,156,157],{},[48,158],{"alt":50,"src":159},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-009.png",[19,161,162],{},[48,163],{"alt":50,"src":164},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-010.png",[151,166,168],{"id":167},"_2232-文件交换","2.2.3.2 文件交换",[19,170,171],{},[48,172],{"alt":50,"src":173},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-011.png",[151,175,177],{"id":176},"_2233-新建文本文档","2.2.3.3 新建文本文档",[19,179,180],{},[48,181],{"alt":50,"src":182},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-012.png",[14,184,186],{"id":185},"_23-windows-subsystem-for-linux-2windows的linux子系统2","2.3 Windows Subsystem For Linux 2(Windows的Linux子系统2)",[35,188,190],{"id":189},"_231-简介与优缺点","2.3.1 简介与优缺点",[192,193,194],"ol",{},[195,196,197],"li",{},"什么情况下推荐？",[19,199,200],{},"无多余硬盘，没法实体装Linux。此时最优选择就是WSL2。而非VMware等虚拟机。",[192,202,204],{"start":203},2,[195,205,206,207],{},"优缺点：",[192,208,209,239],{},[195,210,211,212],{},"优点：",[192,213,214,217,224,227,230,233,236],{},[195,215,216],{},"WSL2是最好的Linux发行版;(bushi)",[195,218,219,220,223],{},"性能损耗极低。且比在Windows上跑深度性能 ",[116,221,222],{},"强非常非常多;"," （如下图，时间的数值越低证明性能越高）",[195,225,226],{},"非常方便调用USB设备，可以USB直通;",[195,228,229],{},"非常方便使用英伟达显卡的CUDA与cuDNN;",[195,231,232],{},"非常方便Win与WSL2互相传文件等协同操作;",[195,234,235],{},"WSL2中甚至可以在Linux的终端中使用Windows软件;",[195,237,238],{},"非常方便使用Windows的VScode远程开发;",[195,240,241,242],{},"缺点：",[192,243,244],{},[195,245,246],{},"无法调用本机摄像头，或说调用本机摄像头会巨麻烦。（虽无法调用本机摄像头，但是可以使用USB的摄像头）",[19,248,249],{},[48,250],{"alt":50,"src":251},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-013.png",[35,253,255],{"id":254},"_232-安装教程","2.3.2 安装教程",[151,257,259],{"id":258},"_2321-启动wsl2子系统和虚拟平台","2.3.2.1 启动WSL2子系统和虚拟平台",[192,261,262],{},[195,263,264],{},"方法一(图形界面)",[19,266,267,268,272],{},"用Win+R输入",[269,270,271],"code",{},"appwiz.cpl","：",[19,274,275],{},[48,276],{"alt":50,"src":277},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-014.png",[19,279,280,281,284,285,288],{},"点击OK进入 ",[116,282,283],{},"程序和功能\u002FPrograms and Features"," 界面，点击 ",[116,286,287],{},"启用或关闭Windows功能\u002FTurn Windows features on or off"," ：",[19,290,291],{},[48,292],{"alt":50,"src":293},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-015.png",[19,295,296,297,300,301,304],{},"选择 ",[116,298,299],{},"适用于Linux的Windows子系统\u002FWindows Subsystem for Linux"," 和 ",[116,302,303],{},"虚拟机平台\u002FVirtual Machine Platform"," 功能：",[19,306,307],{},[48,308],{"alt":50,"src":309},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-016.png",[192,311,312],{"start":203},[195,313,314],{},"方法二(命令行)",[316,317,321],"pre",{"className":318,"code":319,"language":320,"meta":50,"style":50},"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",[269,322,323,331,336,342],{"__ignoreMap":50},[324,325,328],"span",{"class":326,"line":327},"line",1,[324,329,330],{},"# 开启 Linux 子系统\n",[324,332,333],{"class":326,"line":203},[324,334,335],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:Microsoft-Windows-Subsystem-Linux \u002Fall \u002Fnorestart\n",[324,337,339],{"class":326,"line":338},3,[324,340,341],{},"# 开启虚拟机平台\n",[324,343,345],{"class":326,"line":344},4,[324,346,347],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:VirtualMachinePlatform \u002Fall \u002Fnorestart\n",[151,349,351],{"id":350},"_2322-将wsl2设置为默认版本","2.3.2.2 将WSL2设置为默认版本",[19,353,354],{},"用管理员权限打开powershell",[19,356,357],{},[48,358],{"alt":50,"src":359},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-017.png",[19,361,362],{},"升级WSL并设置默认版本为WSL2",[316,364,366],{"className":318,"code":365,"language":320,"meta":50,"style":50},"# 更新 wsl\nwsl --update\n# 将 wsl 版本设置为 wsl2\nwsl --set-default-version 2\n",[269,367,368,373,378,383],{"__ignoreMap":50},[324,369,370],{"class":326,"line":327},[324,371,372],{},"# 更新 wsl\n",[324,374,375],{"class":326,"line":203},[324,376,377],{},"wsl --update\n",[324,379,380],{"class":326,"line":338},[324,381,382],{},"# 将 wsl 版本设置为 wsl2\n",[324,384,385],{"class":326,"line":344},[324,386,387],{},"wsl --set-default-version 2\n",[151,389,391],{"id":390},"_2323-安装linux发行版","2.3.2.3 安装Linux发行版",[192,393,394],{},[195,395,396],{},"方式一(商店下载)",[19,398,399],{},"直接打开Microsoft Store搜索对应的发行版下载即可(比如Ubuntu 24.04 LTS)",[19,401,402],{},[48,403],{"alt":50,"src":404},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-018.png",[192,406,407],{"start":203},[195,408,409],{},"方式二(命令行安装)",[316,411,413],{"className":318,"code":412,"language":320,"meta":50,"style":50},"# 列出可安装的 Linux 版本\n#（需要科学手段）\nwsl --list --online\n",[269,414,415,420,425],{"__ignoreMap":50},[324,416,417],{"class":326,"line":327},[324,418,419],{},"# 列出可安装的 Linux 版本\n",[324,421,422],{"class":326,"line":203},[324,423,424],{},"#（需要科学手段）\n",[324,426,427],{"class":326,"line":338},[324,428,429],{},"wsl --list --online\n",[19,431,432],{},[48,433],{"alt":50,"src":434},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-019.png",[19,436,437],{},"选择对应发行版并安装",[316,439,441],{"className":318,"code":440,"language":320,"meta":50,"style":50},"# Ubuntu安装完毕后需要重启系统\nwsl --install -d Ubuntu-24.04\n",[269,442,443,448],{"__ignoreMap":50},[324,444,445],{"class":326,"line":327},[324,446,447],{},"# Ubuntu安装完毕后需要重启系统\n",[324,449,450],{"class":326,"line":203},[324,451,452],{},"wsl --install -d Ubuntu-24.04\n",[151,454,456],{"id":455},"_2324-查看系统状态","2.3.2.4 查看系统状态",[316,458,460],{"className":318,"code":459,"language":320,"meta":50,"style":50},"# 查看 wsl\nwsl -l\n# 查看 wsl 运行版本或模式\nwsl -l -v\n\n\n# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\nwsl --set-version \u003Cdistro> 2\n# 选择要注销的版本 （如果想卸载再用此命令）\nwsl --unregister \u003Cdistro>\n",[269,461,462,467,472,477,482,489,494,500,506,512],{"__ignoreMap":50},[324,463,464],{"class":326,"line":327},[324,465,466],{},"# 查看 wsl\n",[324,468,469],{"class":326,"line":203},[324,470,471],{},"wsl -l\n",[324,473,474],{"class":326,"line":338},[324,475,476],{},"# 查看 wsl 运行版本或模式\n",[324,478,479],{"class":326,"line":344},[324,480,481],{},"wsl -l -v\n",[324,483,485],{"class":326,"line":484},5,[324,486,488],{"emptyLinePlaceholder":487},true,"\n",[324,490,492],{"class":326,"line":491},6,[324,493,488],{"emptyLinePlaceholder":487},[324,495,497],{"class":326,"line":496},7,[324,498,499],{},"# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\n",[324,501,503],{"class":326,"line":502},8,[324,504,505],{},"wsl --set-version \u003Cdistro> 2\n",[324,507,509],{"class":326,"line":508},9,[324,510,511],{},"# 选择要注销的版本 （如果想卸载再用此命令）\n",[324,513,515],{"class":326,"line":514},10,[324,516,517],{},"wsl --unregister \u003Cdistro>\n",[19,519,520],{},"输出Version为2即正常",[19,522,523],{},[48,524],{"alt":50,"src":525},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-020.png",[151,527,529],{"id":528},"_2325-设置用户名与密码","2.3.2.5 设置用户名与密码",[19,531,532],{},"直接在Powershell里输入wsl命令进入子系统",[316,534,536],{"className":318,"code":535,"language":320,"meta":50,"style":50},"# 进入子系统\nwsl\n",[269,537,538,543],{"__ignoreMap":50},[324,539,540],{"class":326,"line":327},[324,541,542],{},"# 进入子系统\n",[324,544,545],{"class":326,"line":203},[324,546,547],{},"wsl\n",[19,549,550],{},"输入用户名(随便设置，建议字母+数字，或者纯字母)",[19,552,553],{},"输入密码(建议低于6位的数字，并且在输入密码时，终端上不会显示输入的字符，但是已经正常输入了)",[19,555,556],{},[48,557],{"alt":50,"src":558},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-021.png",[35,560,562],{"id":561},"_233-配置各种环境","2.3.3 配置各种环境",[151,564,566],{"id":565},"_2331-换源","2.3.3.1 换源",[19,568,569],{},"(同实体机LINUX，往下找教程)",[151,571,573],{"id":572},"_2332-英伟达显卡","2.3.3.2 英伟达显卡",[575,576,578],"h5",{"id":577},"_23321-显卡驱动","2.3.3.2.1 显卡驱动",[19,580,581],{},"不用安装，只要你的Windows安装了驱动，你的WSL2就已经安装好驱动了。",[19,583,584],{},[48,585],{"alt":50,"src":586},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-022.png",[19,588,589],{},[48,590],{"alt":50,"src":591},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-023.png",[575,593,595],{"id":594},"_23322-cuda","2.3.3.2.2 CUDA",[19,597,598,599],{},"前往 NVIDIA CUDA Toolkit 下载页面：",[25,600,601],{"href":601,"rel":602},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcuda-downloads",[29],[19,604,605,608],{},[48,606],{"alt":50,"src":607},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-024.png",[48,609],{"alt":50,"src":610},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-025.png",[19,612,613],{},"在下方的网站，选择合适的版本。",[19,615,616,617],{},"WSL2 专属 CUDA 指南：",[25,618,619],{"href":619,"rel":620},"https:\u002F\u002Fdocs.nvidia.com\u002Fcuda\u002Fwsl-user-guide\u002Findex.html",[29],[19,622,623],{},[116,624,625],{},"(同实体机LINUX，往下找教程，唯一与实体机不同的地方如下图)",[19,627,628],{},[48,629],{"alt":50,"src":630},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-026.png",[19,632,633],{},"挨行敲一遍",[19,635,636],{},[48,637],{"alt":50,"src":638},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-027.png",[19,640,641,642,645],{},"敲完后，输入",[269,643,644],{},"nvcc -V","检测是否安装成功，如果出现下图，证明没配置环境。",[19,647,648],{},[48,649],{"alt":50,"src":650},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-028.png",[19,652,653,654,657],{},"（请详看下方教程的",[116,655,656],{},"安装CUDA的配置环境来看","如何配置环境）",[575,659,661],{"id":660},"_23323-cudnn","2.3.3.2.3 cuDNN",[19,663,569],{},[19,665,666],{},[48,667],{"alt":50,"src":668},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-029.png",[151,670,672],{"id":671},"_2333-vscode远程开发","2.3.3.3 VScode远程开发",[19,674,675],{},"(一定要把工程放在Linux中开发，别放在Win磁盘中，否则I\u002FO效率会很低)",[19,677,678],{},"安装该插件(WSL2有自己的远程开发插件，无需使用SSH）。",[19,680,681],{},[48,682],{"alt":50,"src":683},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-030.png",[19,685,686],{},"连接WSL2",[19,688,689],{},[48,690],{"alt":50,"src":691},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-031.png",[19,693,694],{},"远程开发成功。",[19,696,697],{},[48,698],{"alt":50,"src":699},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-032.png",[19,701,702],{},[48,703],{"alt":50,"src":704},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-033.png",[19,706,707],{},[48,708],{"alt":50,"src":709},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-034.png",[151,711,713],{"id":712},"_2334-linux终端使用windows软件","2.3.3.4 Linux终端使用Windows软件",[19,715,716],{},[48,717],{"alt":50,"src":718},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-035.png",[151,720,722],{"id":721},"_2335-opengl有问题","2.3.3.5 OpenGL有问题",[316,724,728],{"className":725,"code":726,"language":727,"meta":50,"style":50},"language-Bash shiki shiki-themes github-light github-dark","sudo apt update\nsudo apt upgrade\nsudo apt install mesa-utils\n\n#然后重启wsl2即可\n","Bash",[269,729,730,743,752,764,768],{"__ignoreMap":50},[324,731,732,736,740],{"class":326,"line":327},[324,733,735],{"class":734},"sScJk","sudo",[324,737,739],{"class":738},"sZZnC"," apt",[324,741,742],{"class":738}," update\n",[324,744,745,747,749],{"class":326,"line":203},[324,746,735],{"class":734},[324,748,739],{"class":738},[324,750,751],{"class":738}," upgrade\n",[324,753,754,756,758,761],{"class":326,"line":338},[324,755,735],{"class":734},[324,757,739],{"class":738},[324,759,760],{"class":738}," install",[324,762,763],{"class":738}," mesa-utils\n",[324,765,766],{"class":326,"line":344},[324,767,488],{"emptyLinePlaceholder":487},[324,769,770],{"class":326,"line":484},[324,771,773],{"class":772},"sJ8bj","#然后重启wsl2即可\n",[775,776,777],"style",{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-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":50,"searchDepth":203,"depth":203,"links":779},[780,781,786],{"id":16,"depth":203,"text":17},{"id":32,"depth":203,"text":33,"children":782},[783,784,785],{"id":37,"depth":338,"text":38},{"id":86,"depth":338,"text":87},{"id":148,"depth":338,"text":149},{"id":185,"depth":203,"text":186,"children":787},[788,789,790],{"id":189,"depth":338,"text":190},{"id":254,"depth":338,"text":255},{"id":561,"depth":338,"text":562},null,"md",{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch2-linux",{"title":5,"description":791},"wiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程","z8-bvEu-95_o87t1vYlvhP_0vkUfK8DDJy87xhuIF4E",[799,5891,6999,8419,11408,12759,14248,15337,24098,24110,24707,24733,24857,25098,25163,25181,25194,25241,25363,25532,25731,25911,26116,26252,26347,26384,26397,26707,27446,28154,28175,29195,30826,30977,30990,31002,31303,51115,51130,51147,51180,54052,77400,93545,93566,93679,93800,94570,95233,95594,95632,95738,95838,95881,95907,95968,97622,97723,97748,98239,98739,99819,100102,100844,101346,101358,103373,105037,106540,108238,110155,112074,114096,117566,117998,118457,119001,121945,122293,122315,122671,125978,125990,126393,126416,126563,126730,126935,127236,127793,128450,130381,131979,132628,134122,135553,136788,138482,140234,142644,142760,143695,143906,144791,146026,146254,146267,147422,149834,152202,155523,158000,159644,161421,163434,166486,168666,171193,173387],{"id":800,"title":801,"body":802,"description":50,"extension":792,"meta":5886,"navigation":487,"path":5887,"seo":5888,"stem":5889,"__hash__":5890},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch1-基本认识.md","1.基础入门",{"type":7,"value":803,"toc":5858},[804,807,811,814,818,829,833,837,840,843,846,849,852,882,886,889,892,895,898,950,954,972,974,988,991,999,1002,1863,1870,1887,1891,1977,1981,1987,2073,2077,2115,2119,2183,2187,2191,2197,2208,2212,2217,2221,2226,2230,2235,2239,2243,2248,2518,2523,2661,2666,2922,2925,2933,2937,2942,3045,3048,3353,3362,3463,3466,3469,3472,3475,3735,3740,3880,3883,4062,4065,4193,4196,4348,4352,4357,4360,4371,4379,4382,4489,4493,4497,4502,4552,4557,4562,4586,4591,4644,4647,4652,4829,4834,5119,5124,5521,5525,5530,5587,5592,5600,5603,5743,5746,5855],[10,805,801],{"id":806},"_1基础入门",[14,808,810],{"id":809},"_11注释","1.1注释",[19,812,813],{},"\u002F\u002F或者\u002F* *\u002F",[14,815,817],{"id":816},"_12命名","1.2命名",[192,819,820,823,826],{},[195,821,822],{},"字母数字下划线",[195,824,825],{},"开头必须是字母或_",[195,827,828],{},"不能使用关键词",[14,830,832],{"id":831},"_13数据类型","1.3数据类型",[35,834,836],{"id":835},"_131整形","1.3.1整形",[19,838,839],{},"short 短整形 2",[19,841,842],{},"int 整形 4",[19,844,845],{},"long 长整形 win4 linux32位4 linux64位8",[19,847,848],{},"long long 长长整形 8",[19,850,851],{},"利用sizeof可以求数据类型占用的内存空间大小",[316,853,857],{"className":854,"code":855,"language":856,"meta":50,"style":50},"language-c++ shiki shiki-themes github-light github-dark","sizeof(int)\nsizeof(num)\n","c++",[269,858,859,875],{"__ignoreMap":50},[324,860,861,865,869,872],{"class":326,"line":327},[324,862,864],{"class":863},"szBVR","sizeof",[324,866,868],{"class":867},"sVt8B","(",[324,870,871],{"class":863},"int",[324,873,874],{"class":867},")\n",[324,876,877,879],{"class":326,"line":203},[324,878,864],{"class":863},[324,880,881],{"class":867},"(num)\n",[35,883,885],{"id":884},"_132浮点型","1.3.2浮点型",[19,887,888],{},"float 单精度 4节 7位有效数字",[19,890,891],{},"double 双精度 8节 15-16有效数字",[19,893,894],{},"默认情况下，输出一个小数，会显示6位有效数字",[19,896,897],{},"注意点：",[316,899,901],{"className":854,"code":900,"language":856,"meta":50,"style":50},"float f1=3.14f; \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\nfloat f2=3e2; \u002F\u002F科学记数法\n",[269,902,903,927],{"__ignoreMap":50},[324,904,905,908,911,914,918,921,924],{"class":326,"line":327},[324,906,907],{"class":863},"float",[324,909,910],{"class":867}," f1",[324,912,913],{"class":863},"=",[324,915,917],{"class":916},"sj4cs","3.14",[324,919,920],{"class":863},"f",[324,922,923],{"class":867},";",[324,925,926],{"class":772}," \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\n",[324,928,929,931,934,936,939,942,945,947],{"class":326,"line":203},[324,930,907],{"class":863},[324,932,933],{"class":867}," f2",[324,935,913],{"class":863},[324,937,938],{"class":916},"3",[324,940,941],{"class":863},"e",[324,943,944],{"class":916},"2",[324,946,923],{"class":867},[324,948,949],{"class":772}," \u002F\u002F科学记数法\n",[35,951,953],{"id":952},"_133字符型","1.3.3字符型",[316,955,957],{"className":854,"code":956,"language":856,"meta":50,"style":50},"char ch='a'\n",[269,958,959],{"__ignoreMap":50},[324,960,961,964,967,969],{"class":326,"line":327},[324,962,963],{"class":863},"char",[324,965,966],{"class":867}," ch",[324,968,913],{"class":863},[324,970,971],{"class":738},"'a'\n",[19,973,897],{},[192,975,976,979,982,985],{},[195,977,978],{},"在显示字符型变量时，只能单引号，双引号x",[195,980,981],{},"单引号内只能一个字符，不能字符串",[195,983,984],{},"c和c++字符型变量只占用一个字符",[195,986,987],{},"字符型变量并不是把字符本身放到内存中存储，而是将对应的ASCII编码放入到存储单元",[19,989,990],{},"ASCII码大致由以下两部分组成：",[192,992,993,996],{},[195,994,995],{},"ASCII非打印控制字符：ASCII表上的数字0-31分配给了控制字符，用于控制像打印机等一些外围设备",[195,997,998],{},"ASCII打印字符：数字32-126分配给了能在键盘上找到的字符，当查看或打印文档时就会出现（65A；97a）",[19,1000,1001],{},"ASCII码表格：",[1003,1004,1005,1048],"table",{},[1006,1007,1008],"thead",{},[1009,1010,1011,1018,1023,1027,1032,1036,1040,1044],"tr",{},[1012,1013,1014,1017],"th",{},[116,1015,1016],{},"ASCII","值",[1012,1019,1020],{},[116,1021,1022],{},"控制字符",[1012,1024,1025,1017],{},[116,1026,1016],{},[1012,1028,1029],{},[116,1030,1031],{},"字符",[1012,1033,1034,1017],{},[116,1035,1016],{},[1012,1037,1038],{},[116,1039,1031],{},[1012,1041,1042,1017],{},[116,1043,1016],{},[1012,1045,1046],{},[116,1047,1031],{},[1049,1050,1051,1078,1103,1128,1153,1179,1204,1229,1255,1280,1306,1332,1358,1383,1409,1435,1461,1485,1510,1535,1560,1585,1610,1635,1660,1685,1710,1736,1761,1786,1811,1837],"tbody",{},[1009,1052,1053,1057,1060,1063,1066,1069,1072,1075],{},[1054,1055,1056],"td",{},"0",[1054,1058,1059],{},"NUT",[1054,1061,1062],{},"32",[1054,1064,1065],{},"(space)",[1054,1067,1068],{},"64",[1054,1070,1071],{},"@",[1054,1073,1074],{},"96",[1054,1076,1077],{},"、",[1009,1079,1080,1083,1086,1089,1092,1095,1098,1101],{},[1054,1081,1082],{},"1",[1054,1084,1085],{},"SOH",[1054,1087,1088],{},"33",[1054,1090,1091],{},"!",[1054,1093,1094],{},"65",[1054,1096,1097],{},"A",[1054,1099,1100],{},"97",[1054,1102,25],{},[1009,1104,1105,1107,1110,1113,1116,1119,1122,1125],{},[1054,1106,944],{},[1054,1108,1109],{},"STX",[1054,1111,1112],{},"34",[1054,1114,1115],{},"\"",[1054,1117,1118],{},"66",[1054,1120,1121],{},"B",[1054,1123,1124],{},"98",[1054,1126,1127],{},"b",[1009,1129,1130,1132,1135,1138,1141,1144,1147,1150],{},[1054,1131,938],{},[1054,1133,1134],{},"ETX",[1054,1136,1137],{},"35",[1054,1139,1140],{},"#",[1054,1142,1143],{},"67",[1054,1145,1146],{},"C",[1054,1148,1149],{},"99",[1054,1151,1152],{},"c",[1009,1154,1155,1158,1161,1164,1167,1170,1173,1176],{},[1054,1156,1157],{},"4",[1054,1159,1160],{},"EOT",[1054,1162,1163],{},"36",[1054,1165,1166],{},"$",[1054,1168,1169],{},"68",[1054,1171,1172],{},"D",[1054,1174,1175],{},"100",[1054,1177,1178],{},"d",[1009,1180,1181,1184,1187,1190,1193,1196,1199,1202],{},[1054,1182,1183],{},"5",[1054,1185,1186],{},"ENQ",[1054,1188,1189],{},"37",[1054,1191,1192],{},"%",[1054,1194,1195],{},"69",[1054,1197,1198],{},"E",[1054,1200,1201],{},"101",[1054,1203,941],{},[1009,1205,1206,1209,1212,1215,1218,1221,1224,1227],{},[1054,1207,1208],{},"6",[1054,1210,1211],{},"ACK",[1054,1213,1214],{},"38",[1054,1216,1217],{},"&",[1054,1219,1220],{},"70",[1054,1222,1223],{},"F",[1054,1225,1226],{},"102",[1054,1228,920],{},[1009,1230,1231,1234,1237,1240,1243,1246,1249,1252],{},[1054,1232,1233],{},"7",[1054,1235,1236],{},"BEL",[1054,1238,1239],{},"39",[1054,1241,1242],{},",",[1054,1244,1245],{},"71",[1054,1247,1248],{},"G",[1054,1250,1251],{},"103",[1054,1253,1254],{},"g",[1009,1256,1257,1260,1263,1266,1268,1271,1274,1277],{},[1054,1258,1259],{},"8",[1054,1261,1262],{},"BS",[1054,1264,1265],{},"40",[1054,1267,868],{},[1054,1269,1270],{},"72",[1054,1272,1273],{},"H",[1054,1275,1276],{},"104",[1054,1278,1279],{},"h",[1009,1281,1282,1285,1288,1291,1294,1297,1300,1303],{},[1054,1283,1284],{},"9",[1054,1286,1287],{},"HT",[1054,1289,1290],{},"41",[1054,1292,1293],{},")",[1054,1295,1296],{},"73",[1054,1298,1299],{},"I",[1054,1301,1302],{},"105",[1054,1304,1305],{},"i",[1009,1307,1308,1311,1314,1317,1320,1323,1326,1329],{},[1054,1309,1310],{},"10",[1054,1312,1313],{},"LF",[1054,1315,1316],{},"42",[1054,1318,1319],{},"*",[1054,1321,1322],{},"74",[1054,1324,1325],{},"J",[1054,1327,1328],{},"106",[1054,1330,1331],{},"j",[1009,1333,1334,1337,1340,1343,1346,1349,1352,1355],{},[1054,1335,1336],{},"11",[1054,1338,1339],{},"VT",[1054,1341,1342],{},"43",[1054,1344,1345],{},"+",[1054,1347,1348],{},"75",[1054,1350,1351],{},"K",[1054,1353,1354],{},"107",[1054,1356,1357],{},"k",[1009,1359,1360,1363,1366,1369,1371,1374,1377,1380],{},[1054,1361,1362],{},"12",[1054,1364,1365],{},"FF",[1054,1367,1368],{},"44",[1054,1370,1242],{},[1054,1372,1373],{},"76",[1054,1375,1376],{},"L",[1054,1378,1379],{},"108",[1054,1381,1382],{},"l",[1009,1384,1385,1388,1391,1394,1397,1400,1403,1406],{},[1054,1386,1387],{},"13",[1054,1389,1390],{},"CR",[1054,1392,1393],{},"45",[1054,1395,1396],{},"-",[1054,1398,1399],{},"77",[1054,1401,1402],{},"M",[1054,1404,1405],{},"109",[1054,1407,1408],{},"m",[1009,1410,1411,1414,1417,1420,1423,1426,1429,1432],{},[1054,1412,1413],{},"14",[1054,1415,1416],{},"SO",[1054,1418,1419],{},"46",[1054,1421,1422],{},".",[1054,1424,1425],{},"78",[1054,1427,1428],{},"N",[1054,1430,1431],{},"110",[1054,1433,1434],{},"n",[1009,1436,1437,1440,1443,1446,1449,1452,1455,1458],{},[1054,1438,1439],{},"15",[1054,1441,1442],{},"SI",[1054,1444,1445],{},"47",[1054,1447,1448],{},"\u002F",[1054,1450,1451],{},"79",[1054,1453,1454],{},"O",[1054,1456,1457],{},"111",[1054,1459,1460],{},"o",[1009,1462,1463,1466,1469,1472,1474,1477,1480,1483],{},[1054,1464,1465],{},"16",[1054,1467,1468],{},"DLE",[1054,1470,1471],{},"48",[1054,1473,1056],{},[1054,1475,1476],{},"80",[1054,1478,1479],{},"P",[1054,1481,1482],{},"112",[1054,1484,19],{},[1009,1486,1487,1490,1493,1496,1498,1501,1504,1507],{},[1054,1488,1489],{},"17",[1054,1491,1492],{},"DCI",[1054,1494,1495],{},"49",[1054,1497,1082],{},[1054,1499,1500],{},"81",[1054,1502,1503],{},"Q",[1054,1505,1506],{},"113",[1054,1508,1509],{},"q",[1009,1511,1512,1515,1518,1521,1523,1526,1529,1532],{},[1054,1513,1514],{},"18",[1054,1516,1517],{},"DC2",[1054,1519,1520],{},"50",[1054,1522,944],{},[1054,1524,1525],{},"82",[1054,1527,1528],{},"R",[1054,1530,1531],{},"114",[1054,1533,1534],{},"r",[1009,1536,1537,1540,1543,1546,1548,1551,1554,1557],{},[1054,1538,1539],{},"19",[1054,1541,1542],{},"DC3",[1054,1544,1545],{},"51",[1054,1547,938],{},[1054,1549,1550],{},"83",[1054,1552,1553],{},"S",[1054,1555,1556],{},"115",[1054,1558,1559],{},"s",[1009,1561,1562,1565,1568,1571,1573,1576,1579,1582],{},[1054,1563,1564],{},"20",[1054,1566,1567],{},"DC4",[1054,1569,1570],{},"52",[1054,1572,1157],{},[1054,1574,1575],{},"84",[1054,1577,1578],{},"T",[1054,1580,1581],{},"116",[1054,1583,1584],{},"t",[1009,1586,1587,1590,1593,1596,1598,1601,1604,1607],{},[1054,1588,1589],{},"21",[1054,1591,1592],{},"NAK",[1054,1594,1595],{},"53",[1054,1597,1183],{},[1054,1599,1600],{},"85",[1054,1602,1603],{},"U",[1054,1605,1606],{},"117",[1054,1608,1609],{},"u",[1009,1611,1612,1615,1618,1621,1623,1626,1629,1632],{},[1054,1613,1614],{},"22",[1054,1616,1617],{},"SYN",[1054,1619,1620],{},"54",[1054,1622,1208],{},[1054,1624,1625],{},"86",[1054,1627,1628],{},"V",[1054,1630,1631],{},"118",[1054,1633,1634],{},"v",[1009,1636,1637,1640,1643,1646,1648,1651,1654,1657],{},[1054,1638,1639],{},"23",[1054,1641,1642],{},"TB",[1054,1644,1645],{},"55",[1054,1647,1233],{},[1054,1649,1650],{},"87",[1054,1652,1653],{},"W",[1054,1655,1656],{},"119",[1054,1658,1659],{},"w",[1009,1661,1662,1665,1668,1671,1673,1676,1679,1682],{},[1054,1663,1664],{},"24",[1054,1666,1667],{},"CAN",[1054,1669,1670],{},"56",[1054,1672,1259],{},[1054,1674,1675],{},"88",[1054,1677,1678],{},"X",[1054,1680,1681],{},"120",[1054,1683,1684],{},"x",[1009,1686,1687,1690,1693,1696,1698,1701,1704,1707],{},[1054,1688,1689],{},"25",[1054,1691,1692],{},"EM",[1054,1694,1695],{},"57",[1054,1697,1284],{},[1054,1699,1700],{},"89",[1054,1702,1703],{},"Y",[1054,1705,1706],{},"121",[1054,1708,1709],{},"y",[1009,1711,1712,1715,1718,1721,1724,1727,1730,1733],{},[1054,1713,1714],{},"26",[1054,1716,1717],{},"SUB",[1054,1719,1720],{},"58",[1054,1722,1723],{},":",[1054,1725,1726],{},"90",[1054,1728,1729],{},"Z",[1054,1731,1732],{},"122",[1054,1734,1735],{},"z",[1009,1737,1738,1741,1744,1747,1749,1752,1755,1758],{},[1054,1739,1740],{},"27",[1054,1742,1743],{},"ESC",[1054,1745,1746],{},"59",[1054,1748,923],{},[1054,1750,1751],{},"91",[1054,1753,1754],{},"[",[1054,1756,1757],{},"123",[1054,1759,1760],{},"{",[1009,1762,1763,1766,1769,1772,1775,1778,1780,1783],{},[1054,1764,1765],{},"28",[1054,1767,1768],{},"FS",[1054,1770,1771],{},"60",[1054,1773,1774],{},"\u003C",[1054,1776,1777],{},"92",[1054,1779,1448],{},[1054,1781,1782],{},"124",[1054,1784,1785],{},"|",[1009,1787,1788,1791,1794,1797,1799,1802,1805,1808],{},[1054,1789,1790],{},"29",[1054,1792,1793],{},"GS",[1054,1795,1796],{},"61",[1054,1798,913],{},[1054,1800,1801],{},"93",[1054,1803,1804],{},"]",[1054,1806,1807],{},"125",[1054,1809,1810],{},"}",[1009,1812,1813,1816,1819,1822,1825,1828,1831,1834],{},[1054,1814,1815],{},"30",[1054,1817,1818],{},"RS",[1054,1820,1821],{},"62",[1054,1823,1824],{},">",[1054,1826,1827],{},"94",[1054,1829,1830],{},"^",[1054,1832,1833],{},"126",[1054,1835,1836],{},"`",[1009,1838,1839,1842,1845,1848,1851,1854,1857,1860],{},[1054,1840,1841],{},"31",[1054,1843,1844],{},"US",[1054,1846,1847],{},"63",[1054,1849,1850],{},"?",[1054,1852,1853],{},"95",[1054,1855,1856],{},"_",[1054,1858,1859],{},"127",[1054,1861,1862],{},"DEL",[19,1864,1865,1866,1869],{},"ASCII 码大致由以下",[116,1867,1868],{},"两部分组","成：",[1871,1872,1873,1880],"ul",{},[195,1874,1875,1876,1879],{},"ASCII 非打印控制字符： ASCII 表上的数字 ",[116,1877,1878],{},"0-31"," 分配给了控制字符，用于控制像打印机等一些外围设备。",[195,1881,1882,1883,1886],{},"ASCII 打印字符：数字 ",[116,1884,1885],{},"32-126"," 分配给了能在键盘上找到的字符，当查看或打印文档时就会出现。",[35,1888,1890],{"id":1889},"_134转义字符","1.3.4转义字符",[316,1892,1894],{"className":854,"code":1893,"language":856,"meta":50,"style":50},"\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",[269,1895,1896,1901,1917,1931,1936,1949,1954],{"__ignoreMap":50},[324,1897,1898],{"class":326,"line":327},[324,1899,1900],{"class":772},"\u002F\u002F换行符\n",[324,1902,1903,1906,1909,1912,1914],{"class":326,"line":203},[324,1904,1905],{"class":867},"cout ",[324,1907,1908],{"class":863},"\u003C\u003C",[324,1910,1911],{"class":738},"\"hello world\u002Fn\"",[324,1913,923],{"class":867},[324,1915,1916],{"class":772}," \u002F\u002F就等同于如下：\n",[324,1918,1919,1921,1923,1926,1928],{"class":326,"line":338},[324,1920,1905],{"class":867},[324,1922,1908],{"class":863},[324,1924,1925],{"class":738},"\"hello world\"",[324,1927,1908],{"class":863},[324,1929,1930],{"class":867},"endl;\n",[324,1932,1933],{"class":326,"line":344},[324,1934,1935],{"class":772},"\u002F\u002F反斜杠\n",[324,1937,1938,1940,1942,1945,1947],{"class":326,"line":484},[324,1939,1905],{"class":867},[324,1941,1908],{"class":863},[324,1943,1944],{"class":738},"\"\u002F\u002F\"",[324,1946,1908],{"class":863},[324,1948,1930],{"class":867},[324,1950,1951],{"class":326,"line":491},[324,1952,1953],{"class":772},"\u002F\u002F水平制表符\n",[324,1955,1956,1958,1960,1963,1966,1969,1971,1974],{"class":326,"line":496},[324,1957,1905],{"class":867},[324,1959,1908],{"class":863},[324,1961,1962],{"class":738},"\"aaaa",[324,1964,1965],{"class":916},"\\t",[324,1967,1968],{"class":738},"helloworld\"",[324,1970,1908],{"class":863},[324,1972,1973],{"class":867},"endl;",[324,1975,1976],{"class":772}," \u002F\u002F输出窗口时有对齐效果\n",[35,1978,1980],{"id":1979},"_135字符串型","1.3.5字符串型",[19,1982,1983,1984,1986],{},"char 变量名",[324,1985],{},"=\"字符串值\"",[316,1988,1990],{"className":854,"code":1989,"language":856,"meta":50,"style":50},"\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",[269,1991,1992,1997,2002,2007,2012,2026,2039,2044,2049,2060],{"__ignoreMap":50},[324,1993,1994],{"class":326,"line":327},[324,1995,1996],{"class":772},"\u002F\u002Fc风格字符串\n",[324,1998,1999],{"class":326,"line":203},[324,2000,2001],{"class":772},"\u002F\u002F注意事项：\n",[324,2003,2004],{"class":326,"line":338},[324,2005,2006],{"class":772},"\u002F\u002F1.char字符串名[]\n",[324,2008,2009],{"class":326,"line":344},[324,2010,2011],{"class":772},"\u002F\u002F2.等号后面要用双引号，包含起来字符串\n",[324,2013,2014,2016,2019,2021,2023],{"class":326,"line":484},[324,2015,963],{"class":863},[324,2017,2018],{"class":867}," str[]",[324,2020,913],{"class":863},[324,2022,1925],{"class":738},[324,2024,2025],{"class":867},";\n",[324,2027,2028,2030,2032,2035,2037],{"class":326,"line":491},[324,2029,1905],{"class":867},[324,2031,1908],{"class":863},[324,2033,2034],{"class":867},"str",[324,2036,1908],{"class":863},[324,2038,1930],{"class":867},[324,2040,2041],{"class":326,"line":496},[324,2042,2043],{"class":772},"\u002F\u002Fc++风格字符串\n",[324,2045,2046],{"class":326,"line":502},[324,2047,2048],{"class":772},"\u002F\u002F需要先引用一个头文件 #include\u003Cstring>\n",[324,2050,2051,2054,2056,2058],{"class":326,"line":508},[324,2052,2053],{"class":867},"string str2",[324,2055,913],{"class":863},[324,2057,1925],{"class":738},[324,2059,2025],{"class":867},[324,2061,2062,2064,2066,2069,2071],{"class":326,"line":514},[324,2063,1905],{"class":867},[324,2065,1908],{"class":863},[324,2067,2068],{"class":867},"str2",[324,2070,1908],{"class":863},[324,2072,1930],{"class":867},[35,2074,2076],{"id":2075},"_136布尔类型bool","1.3.6布尔类型bool",[316,2078,2080],{"className":854,"code":2079,"language":856,"meta":50,"style":50},"bool flag=true;\ncout\u003C\u003Csizeof(flag)\u003C\u003Cendl; \u002F\u002F查看布尔占内存空间\n",[269,2081,2082,2097],{"__ignoreMap":50},[324,2083,2084,2087,2090,2092,2095],{"class":326,"line":327},[324,2085,2086],{"class":863},"bool",[324,2088,2089],{"class":867}," flag",[324,2091,913],{"class":863},[324,2093,2094],{"class":916},"true",[324,2096,2025],{"class":867},[324,2098,2099,2102,2105,2108,2110,2112],{"class":326,"line":203},[324,2100,2101],{"class":867},"cout",[324,2103,2104],{"class":863},"\u003C\u003Csizeof",[324,2106,2107],{"class":867},"(flag)",[324,2109,1908],{"class":863},[324,2111,1973],{"class":867},[324,2113,2114],{"class":772}," \u002F\u002F查看布尔占内存空间\n",[14,2116,2118],{"id":2117},"_14键盘输入cin","1.4键盘输入cin",[316,2120,2122],{"className":854,"code":2121,"language":856,"meta":50,"style":50},"int a=0;\ncout\u003C\u003C\"请给整型变量a赋值\"\u003C\u003Ca\u003C\u003Cendl;\ncin >> a;\ncout \u003C\u003C \"整型变量a=\" \u003C\u003Ca\u003C\u003Cendl; \n",[269,2123,2124,2137,2154,2165],{"__ignoreMap":50},[324,2125,2126,2128,2131,2133,2135],{"class":326,"line":327},[324,2127,871],{"class":863},[324,2129,2130],{"class":867}," a",[324,2132,913],{"class":863},[324,2134,1056],{"class":916},[324,2136,2025],{"class":867},[324,2138,2139,2141,2143,2146,2148,2150,2152],{"class":326,"line":203},[324,2140,2101],{"class":867},[324,2142,1908],{"class":863},[324,2144,2145],{"class":738},"\"请给整型变量a赋值\"",[324,2147,1908],{"class":863},[324,2149,25],{"class":867},[324,2151,1908],{"class":863},[324,2153,1930],{"class":867},[324,2155,2156,2159,2162],{"class":326,"line":338},[324,2157,2158],{"class":867},"cin ",[324,2160,2161],{"class":863},">>",[324,2163,2164],{"class":867}," a;\n",[324,2166,2167,2169,2171,2174,2177,2179,2181],{"class":326,"line":344},[324,2168,1905],{"class":867},[324,2170,1908],{"class":863},[324,2172,2173],{"class":738}," \"整型变量a=\"",[324,2175,2176],{"class":863}," \u003C\u003C",[324,2178,25],{"class":867},[324,2180,1908],{"class":863},[324,2182,1930],{"class":867},[14,2184,2186],{"id":2185},"_15运算符","1.5运算符",[35,2188,2190],{"id":2189},"_151算术运算符","1.5.1算术运算符",[19,2192,2193,2196],{},[48,2194],{"alt":50,"src":2195},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-001.png","\n注意：",[192,2198,2199,2202,2205],{},[195,2200,2201],{},"两个整数相除，结果依然是整数，小数部分被去除掉了",[195,2203,2204],{},"两个小数不可以做取模运算",[195,2206,2207],{},"前置递增++a;后置递增a++，两者区别：前置递增先让变量+1,再进行表达式计算；后置递增是先让表达式运算，再让变量+1",[35,2209,2211],{"id":2210},"_152赋值运算符","1.5.2赋值运算符",[19,2213,2214],{},[48,2215],{"alt":50,"src":2216},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-002.png",[35,2218,2220],{"id":2219},"_153比较运算符","1.5.3比较运算符",[19,2222,2223],{},[48,2224],{"alt":50,"src":2225},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-003.png",[35,2227,2229],{"id":2228},"_154逻辑运算符","1.5.4逻辑运算符",[19,2231,2232],{},[48,2233],{"alt":50,"src":2234},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-004.png",[14,2236,2238],{"id":2237},"_16程序流程结构","1.6程序流程结构",[35,2240,2242],{"id":2241},"_161选择结构","1.6.1选择结构",[192,2244,2245],{},[195,2246,2247],{},"if语句\n单行、多行、多条件if语句",[316,2249,2251],{"className":854,"code":2250,"language":856,"meta":50,"style":50},"\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",[269,2252,2253,2258,2273,2278,2292,2297,2302,2311,2324,2328,2341,2346,2352,2357,2371,2376,2382,2403,2408,2422,2427,2456,2461,2478,2483,2488,2493,2507,2512],{"__ignoreMap":50},[324,2254,2255],{"class":326,"line":327},[324,2256,2257],{"class":772},"\u002F\u002F单行格式if语句：if (条件){条件满足执行的语句}\n",[324,2259,2260,2263,2266,2268,2271],{"class":326,"line":203},[324,2261,2262],{"class":863},"if",[324,2264,2265],{"class":867},"(score",[324,2267,1824],{"class":863},[324,2269,2270],{"class":916},"600",[324,2272,874],{"class":867},[324,2274,2275],{"class":326,"line":338},[324,2276,2277],{"class":867},"{\n",[324,2279,2280,2283,2285,2288,2290],{"class":326,"line":344},[324,2281,2282],{"class":867},"    cout",[324,2284,1908],{"class":863},[324,2286,2287],{"class":738},"'这是单行if语句'",[324,2289,1908],{"class":863},[324,2291,1930],{"class":867},[324,2293,2294],{"class":326,"line":484},[324,2295,2296],{"class":867},"}\n",[324,2298,2299],{"class":326,"line":491},[324,2300,2301],{"class":772},"\u002F\u002F多行格式if语句：if (条件){条件满足执行的语句}else{条件不满足执行的语句}\n",[324,2303,2304,2306,2308],{"class":326,"line":496},[324,2305,2158],{"class":867},[324,2307,2161],{"class":863},[324,2309,2310],{"class":867}," score\n",[324,2312,2313,2315,2317,2320,2322],{"class":326,"line":502},[324,2314,2262],{"class":863},[324,2316,2265],{"class":867},[324,2318,2319],{"class":863},"\u003C=",[324,2321,2270],{"class":916},[324,2323,874],{"class":867},[324,2325,2326],{"class":326,"line":508},[324,2327,2277],{"class":867},[324,2329,2330,2332,2334,2337,2339],{"class":326,"line":514},[324,2331,2282],{"class":867},[324,2333,2161],{"class":863},[324,2335,2336],{"class":738},"\"小于等于600\"",[324,2338,1908],{"class":863},[324,2340,1930],{"class":867},[324,2342,2344],{"class":326,"line":2343},11,[324,2345,2296],{"class":867},[324,2347,2349],{"class":326,"line":2348},12,[324,2350,2351],{"class":863},"else\n",[324,2353,2355],{"class":326,"line":2354},13,[324,2356,2277],{"class":867},[324,2358,2360,2362,2364,2367,2369],{"class":326,"line":2359},14,[324,2361,2282],{"class":867},[324,2363,2161],{"class":863},[324,2365,2366],{"class":738},"\"大于600\"",[324,2368,2161],{"class":863},[324,2370,1930],{"class":867},[324,2372,2374],{"class":326,"line":2373},15,[324,2375,2296],{"class":867},[324,2377,2379],{"class":326,"line":2378},16,[324,2380,2381],{"class":772},"\u002F\u002F多条件格式if语句：if (条件){条件1满足执行的语句}else if{条件2满足执行的语句}····else{条件不满足执行的语句}\n",[324,2383,2385,2387,2390,2392,2394,2397,2399,2401],{"class":326,"line":2384},17,[324,2386,2262],{"class":863},[324,2388,2389],{"class":867}," (",[324,2391,1056],{"class":916},[324,2393,1774],{"class":863},[324,2395,2396],{"class":867},"num",[324,2398,1774],{"class":863},[324,2400,1175],{"class":916},[324,2402,874],{"class":867},[324,2404,2406],{"class":326,"line":2405},18,[324,2407,2277],{"class":867},[324,2409,2411,2413,2415,2418,2420],{"class":326,"line":2410},19,[324,2412,2282],{"class":867},[324,2414,1908],{"class":863},[324,2416,2417],{"class":738},"\"小于100\"",[324,2419,1908],{"class":863},[324,2421,1930],{"class":867},[324,2423,2425],{"class":326,"line":2424},20,[324,2426,2296],{"class":867},[324,2428,2430,2433,2436,2439,2442,2444,2447,2449,2451,2454],{"class":326,"line":2429},21,[324,2431,2432],{"class":863},"else",[324,2434,2435],{"class":863}," if",[324,2437,2438],{"class":867}," (nmu",[324,2440,2441],{"class":863},">=",[324,2443,1175],{"class":916},[324,2445,2446],{"class":863},"&&",[324,2448,2396],{"class":867},[324,2450,1774],{"class":863},[324,2452,2453],{"class":916},"200",[324,2455,874],{"class":867},[324,2457,2459],{"class":326,"line":2458},22,[324,2460,2277],{"class":867},[324,2462,2464,2466,2468,2471,2473,2475],{"class":326,"line":2463},23,[324,2465,2282],{"class":867},[324,2467,1908],{"class":863},[324,2469,2470],{"class":738},"\"不小于100且小于200\"",[324,2472,1908],{"class":863},[324,2474,1973],{"class":867},[324,2476,2477],{"class":772}," \u002F\u002F可以无限else if,python中是elif：\n",[324,2479,2481],{"class":326,"line":2480},24,[324,2482,2296],{"class":867},[324,2484,2486],{"class":326,"line":2485},25,[324,2487,2351],{"class":863},[324,2489,2491],{"class":326,"line":2490},26,[324,2492,2277],{"class":867},[324,2494,2496,2498,2500,2503,2505],{"class":326,"line":2495},27,[324,2497,2282],{"class":867},[324,2499,1908],{"class":863},[324,2501,2502],{"class":738},"\"不小于200\"",[324,2504,1908],{"class":863},[324,2506,1930],{"class":867},[324,2508,2510],{"class":326,"line":2509},28,[324,2511,2296],{"class":867},[324,2513,2515],{"class":326,"line":2514},29,[324,2516,2517],{"class":772},"\u002F\u002F 嵌套if语句(if套if,注意条件即可)\n",[192,2519,2520],{"start":203},[195,2521,2522],{},"三目运算符",[316,2524,2526],{"className":854,"code":2525,"language":856,"meta":50,"style":50},"\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",[269,2527,2528,2533,2538,2564,2586,2603,2608,2631,2646],{"__ignoreMap":50},[324,2529,2530],{"class":326,"line":327},[324,2531,2532],{"class":772},"\u002F\u002F创建三个变量a,b,c\n",[324,2534,2535],{"class":326,"line":203},[324,2536,2537],{"class":772},"\u002F\u002F将a和b做比较，将变量大的值赋值给变量c\n",[324,2539,2540,2542,2544,2546,2548,2551,2553,2555,2558,2560,2562],{"class":326,"line":338},[324,2541,871],{"class":863},[324,2543,2130],{"class":867},[324,2545,913],{"class":863},[324,2547,1564],{"class":916},[324,2549,2550],{"class":867},",b",[324,2552,913],{"class":863},[324,2554,1310],{"class":916},[324,2556,2557],{"class":867},",c",[324,2559,913],{"class":863},[324,2561,1056],{"class":916},[324,2563,2025],{"class":867},[324,2565,2566,2568,2570,2573,2575,2577,2579,2581,2583],{"class":326,"line":344},[324,2567,1152],{"class":867},[324,2569,913],{"class":863},[324,2571,2572],{"class":867},"(a",[324,2574,1824],{"class":863},[324,2576,1127],{"class":867},[324,2578,1850],{"class":863},[324,2580,25],{"class":867},[324,2582,1723],{"class":863},[324,2584,2585],{"class":867},"b)\n",[324,2587,2588,2590,2592,2595,2597,2599,2601],{"class":326,"line":484},[324,2589,2101],{"class":867},[324,2591,1908],{"class":863},[324,2593,2594],{"class":738},"\"c=\"",[324,2596,1908],{"class":863},[324,2598,1152],{"class":867},[324,2600,1908],{"class":863},[324,2602,1930],{"class":867},[324,2604,2605],{"class":326,"line":491},[324,2606,2607],{"class":772},"\u002F\u002F在c++中三目运算符返回的是变量，可以继续赋值\n",[324,2609,2610,2612,2614,2616,2618,2620,2622,2625,2627,2629],{"class":326,"line":496},[324,2611,2572],{"class":867},[324,2613,1824],{"class":863},[324,2615,1127],{"class":867},[324,2617,1850],{"class":863},[324,2619,25],{"class":867},[324,2621,1723],{"class":863},[324,2623,2624],{"class":867},"b)",[324,2626,913],{"class":863},[324,2628,1175],{"class":916},[324,2630,2025],{"class":867},[324,2632,2633,2635,2637,2639,2641,2643],{"class":326,"line":502},[324,2634,2101],{"class":867},[324,2636,1908],{"class":863},[324,2638,25],{"class":867},[324,2640,1908],{"class":863},[324,2642,1973],{"class":867},[324,2644,2645],{"class":772}," \u002F\u002F100  a是大于b的，将100赋值给了a\n",[324,2647,2648,2650,2652,2654,2656,2658],{"class":326,"line":508},[324,2649,2101],{"class":867},[324,2651,1908],{"class":863},[324,2653,1127],{"class":867},[324,2655,1908],{"class":863},[324,2657,1973],{"class":867},[324,2659,2660],{"class":772}," \u002F\u002F10   a>b,b还是原值\n",[192,2662,2663],{"start":338},[195,2664,2665],{},"switch语句\n执行多条件分支语句\n注意：python没有switch语句\nswitch(表达式)\n{\ncase 结果1:执行语句;break;\ncase 结果2:执行语句;break;\ncase 结果3:执行语句;break;\n···\ndefault:执行语句;break;\n}\n不写break就会一直往下执行",[316,2667,2669],{"className":854,"code":2668,"language":856,"meta":50,"style":50},"\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",[269,2670,2671,2676,2684,2697,2707,2711,2725,2738,2748,2756,2761,2786,2807,2829,2850,2872,2893,2913,2918],{"__ignoreMap":50},[324,2672,2673],{"class":326,"line":327},[324,2674,2675],{"class":772},"\u002F\u002F案例-电影打分\n",[324,2677,2678,2681],{"class":326,"line":203},[324,2679,2680],{"class":863},"#include",[324,2682,2683],{"class":738},"\u003Ciostream>\n",[324,2685,2686,2689,2692,2695],{"class":326,"line":338},[324,2687,2688],{"class":863},"using",[324,2690,2691],{"class":863}," namespace",[324,2693,2694],{"class":734}," std",[324,2696,2025],{"class":867},[324,2698,2699,2701,2704],{"class":326,"line":344},[324,2700,871],{"class":863},[324,2702,2703],{"class":734}," main",[324,2705,2706],{"class":867},"()\n",[324,2708,2709],{"class":326,"line":484},[324,2710,2277],{"class":867},[324,2712,2713,2716,2719,2721,2723],{"class":326,"line":491},[324,2714,2715],{"class":863},"    int",[324,2717,2718],{"class":867}," score",[324,2720,913],{"class":863},[324,2722,1056],{"class":916},[324,2724,2025],{"class":867},[324,2726,2727,2729,2731,2734,2736],{"class":326,"line":496},[324,2728,2282],{"class":867},[324,2730,1908],{"class":863},[324,2732,2733],{"class":738},"\"电影打分：\"",[324,2735,1908],{"class":863},[324,2737,1930],{"class":867},[324,2739,2740,2743,2745],{"class":326,"line":502},[324,2741,2742],{"class":867},"    cin",[324,2744,2161],{"class":863},[324,2746,2747],{"class":867},"score;\n",[324,2749,2750,2753],{"class":326,"line":508},[324,2751,2752],{"class":863},"    switch",[324,2754,2755],{"class":867},"(score)\n",[324,2757,2758],{"class":326,"line":514},[324,2759,2760],{"class":867},"    {\n",[324,2762,2763,2766,2769,2772,2774,2777,2779,2781,2784],{"class":326,"line":2343},[324,2764,2765],{"class":863},"        case",[324,2767,2768],{"class":916}," 10",[324,2770,2771],{"class":867},":cout",[324,2773,1908],{"class":863},[324,2775,2776],{"class":738},"\"经典\"",[324,2778,1908],{"class":863},[324,2780,1973],{"class":867},[324,2782,2783],{"class":863},"break",[324,2785,2025],{"class":867},[324,2787,2788,2790,2793,2795,2797,2799,2801,2803,2805],{"class":326,"line":2348},[324,2789,2765],{"class":863},[324,2791,2792],{"class":916}," 9",[324,2794,2771],{"class":867},[324,2796,1908],{"class":863},[324,2798,2776],{"class":738},[324,2800,1908],{"class":863},[324,2802,1973],{"class":867},[324,2804,2783],{"class":863},[324,2806,2025],{"class":867},[324,2808,2809,2811,2814,2816,2818,2821,2823,2825,2827],{"class":326,"line":2354},[324,2810,2765],{"class":863},[324,2812,2813],{"class":916}," 8",[324,2815,2771],{"class":867},[324,2817,1908],{"class":863},[324,2819,2820],{"class":738},"\"非常好\"",[324,2822,1908],{"class":863},[324,2824,1973],{"class":867},[324,2826,2783],{"class":863},[324,2828,2025],{"class":867},[324,2830,2831,2833,2836,2838,2840,2842,2844,2846,2848],{"class":326,"line":2359},[324,2832,2765],{"class":863},[324,2834,2835],{"class":916}," 7",[324,2837,2771],{"class":867},[324,2839,1908],{"class":863},[324,2841,2820],{"class":738},[324,2843,1908],{"class":863},[324,2845,1973],{"class":867},[324,2847,2783],{"class":863},[324,2849,2025],{"class":867},[324,2851,2852,2854,2857,2859,2861,2864,2866,2868,2870],{"class":326,"line":2373},[324,2853,2765],{"class":863},[324,2855,2856],{"class":916}," 6",[324,2858,2771],{"class":867},[324,2860,1908],{"class":863},[324,2862,2863],{"class":738},"\"一般\"",[324,2865,1908],{"class":863},[324,2867,1973],{"class":867},[324,2869,2783],{"class":863},[324,2871,2025],{"class":867},[324,2873,2874,2876,2879,2881,2883,2885,2887,2889,2891],{"class":326,"line":2378},[324,2875,2765],{"class":863},[324,2877,2878],{"class":916}," 5",[324,2880,2771],{"class":867},[324,2882,1908],{"class":863},[324,2884,2863],{"class":738},[324,2886,1908],{"class":863},[324,2888,1973],{"class":867},[324,2890,2783],{"class":863},[324,2892,2025],{"class":867},[324,2894,2895,2898,2900,2902,2905,2907,2909,2911],{"class":326,"line":2384},[324,2896,2897],{"class":863},"        default",[324,2899,2771],{"class":867},[324,2901,1908],{"class":863},[324,2903,2904],{"class":738},"\"烂片\"",[324,2906,1908],{"class":863},[324,2908,1973],{"class":867},[324,2910,2783],{"class":863},[324,2912,2025],{"class":867},[324,2914,2915],{"class":326,"line":2405},[324,2916,2917],{"class":867},"    }\n",[324,2919,2920],{"class":326,"line":2410},[324,2921,2296],{"class":867},[19,2923,2924],{},"if和switch区别：",[1871,2926,2927,2930],{},[195,2928,2929],{},"switch缺点：判断时候只能是整行或者字符型，不可以是一个区间",[195,2931,2932],{},"switch优点：结构清晰，执行效率高",[35,2934,2936],{"id":2935},"_162循环结构","1.6.2循环结构",[192,2938,2939],{},[195,2940,2941],{},"while循环结构\n满足循环条件，执行循环语句\n语法：while(循环条件){循环语句}",[316,2943,2945],{"className":854,"code":2944,"language":856,"meta":50,"style":50},"\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",[269,2946,2947,2952,2960,2964,2977,2991,2995,3015,3025,3029,3041],{"__ignoreMap":50},[324,2948,2949],{"class":326,"line":327},[324,2950,2951],{"class":772},"\u002F\u002F打印0-9数字\n",[324,2953,2954,2956,2958],{"class":326,"line":203},[324,2955,871],{"class":863},[324,2957,2703],{"class":734},[324,2959,2706],{"class":867},[324,2961,2962],{"class":326,"line":338},[324,2963,2277],{"class":867},[324,2965,2966,2968,2971,2973,2975],{"class":326,"line":344},[324,2967,2715],{"class":863},[324,2969,2970],{"class":867}," num",[324,2972,913],{"class":863},[324,2974,1056],{"class":916},[324,2976,2025],{"class":867},[324,2978,2979,2982,2985,2987,2989],{"class":326,"line":484},[324,2980,2981],{"class":863},"    while",[324,2983,2984],{"class":867},"(num",[324,2986,1774],{"class":863},[324,2988,1310],{"class":916},[324,2990,874],{"class":867},[324,2992,2993],{"class":326,"line":491},[324,2994,2760],{"class":867},[324,2996,2997,3000,3003,3005,3007,3009,3012],{"class":326,"line":496},[324,2998,2999],{"class":734},"       std",[324,3001,3002],{"class":867},"::cout",[324,3004,1908],{"class":863},[324,3006,2396],{"class":867},[324,3008,1908],{"class":863},[324,3010,3011],{"class":734},"std",[324,3013,3014],{"class":867},"::endl;\n",[324,3016,3017,3020,3023],{"class":326,"line":502},[324,3018,3019],{"class":867},"        num",[324,3021,3022],{"class":863},"++",[324,3024,2025],{"class":867},[324,3026,3027],{"class":326,"line":508},[324,3028,2917],{"class":867},[324,3030,3031,3034,3036,3039],{"class":326,"line":514},[324,3032,3033],{"class":734},"    system",[324,3035,868],{"class":867},[324,3037,3038],{"class":738},"\"pause\"",[324,3040,874],{"class":867},[324,3042,3043],{"class":326,"line":2343},[324,3044,2296],{"class":867},[19,3046,3047],{},"注意：写好循环条件，避免死循环情况",[316,3049,3051],{"className":854,"code":3050,"language":856,"meta":50,"style":50},"\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",[269,3052,3053,3058,3065,3072,3082,3090,3094,3099,3126,3130,3135,3143,3170,3175,3180,3193,3203,3207,3217,3222,3235,3240,3254,3259,3274,3278,3291,3295,3300,3304,3318,3326,3331,3337,3343,3348],{"__ignoreMap":50},[324,3054,3055],{"class":326,"line":327},[324,3056,3057],{"class":772},"\u002F\u002F循环结构-猜数字\n",[324,3059,3060,3062],{"class":326,"line":203},[324,3061,2680],{"class":863},[324,3063,3064],{"class":738}," \u003Ciostream>\n",[324,3066,3067,3069],{"class":326,"line":338},[324,3068,2680],{"class":863},[324,3070,3071],{"class":738}," \u003Cctime>\n",[324,3073,3074,3076,3078,3080],{"class":326,"line":344},[324,3075,2688],{"class":863},[324,3077,2691],{"class":863},[324,3079,2694],{"class":734},[324,3081,2025],{"class":867},[324,3083,3084,3086,3088],{"class":326,"line":484},[324,3085,871],{"class":863},[324,3087,2703],{"class":734},[324,3089,2706],{"class":867},[324,3091,3092],{"class":326,"line":491},[324,3093,2277],{"class":867},[324,3095,3096],{"class":326,"line":496},[324,3097,3098],{"class":772},"    \u002F\u002F添加随机数种子，利用当前系统时间生成随机数，防止每次随机数相同\n",[324,3100,3101,3104,3107,3110,3113,3115,3118,3120,3123],{"class":326,"line":502},[324,3102,3103],{"class":734},"    srand",[324,3105,3106],{"class":867},"((",[324,3108,3109],{"class":863},"unsigned",[324,3111,3112],{"class":863}," int",[324,3114,1293],{"class":867},[324,3116,3117],{"class":734},"time",[324,3119,868],{"class":867},[324,3121,3122],{"class":916},"NULL",[324,3124,3125],{"class":867},"));\n",[324,3127,3128],{"class":326,"line":508},[324,3129,488],{"emptyLinePlaceholder":487},[324,3131,3132],{"class":326,"line":514},[324,3133,3134],{"class":772},"    \u002F\u002F1.系统生成随机数\n",[324,3136,3137,3140],{"class":326,"line":2343},[324,3138,3139],{"class":772},"    \u002F\u002Frand()%100",[324,3141,3142],{"class":772}," \u002F\u002F生成0-99的随机数\n",[324,3144,3145,3147,3149,3151,3154,3157,3159,3161,3163,3165,3167],{"class":326,"line":2348},[324,3146,2715],{"class":863},[324,3148,2970],{"class":867},[324,3150,913],{"class":863},[324,3152,3153],{"class":734},"rand",[324,3155,3156],{"class":867},"()",[324,3158,1192],{"class":863},[324,3160,1175],{"class":916},[324,3162,1345],{"class":863},[324,3164,1082],{"class":916},[324,3166,923],{"class":867},[324,3168,3169],{"class":772}," \u002F\u002F这是个伪随机数，每次都不同，要想每次不同就添加随机数种子\n",[324,3171,3172],{"class":326,"line":2354},[324,3173,3174],{"class":772},"    \u002F\u002Fcout\u003C\u003C\"系统生成了一个1-100之间的随机数，请你来猜：\"\u003C\u003Cendl;\n",[324,3176,3177],{"class":326,"line":2359},[324,3178,3179],{"class":772},"    \u002F\u002F2.玩家猜测\n",[324,3181,3182,3184,3187,3189,3191],{"class":326,"line":2373},[324,3183,2715],{"class":863},[324,3185,3186],{"class":867}," val",[324,3188,913],{"class":863},[324,3190,1056],{"class":916},[324,3192,2025],{"class":867},[324,3194,3195,3197,3199,3201],{"class":326,"line":2378},[324,3196,2981],{"class":863},[324,3198,2389],{"class":867},[324,3200,1082],{"class":916},[324,3202,874],{"class":867},[324,3204,3205],{"class":326,"line":2384},[324,3206,2760],{"class":867},[324,3208,3209,3212,3214],{"class":326,"line":2405},[324,3210,3211],{"class":867},"        cin",[324,3213,2161],{"class":863},[324,3215,3216],{"class":867},"val;\n",[324,3218,3219],{"class":326,"line":2410},[324,3220,3221],{"class":772},"        \u002F\u002F3.判断玩家猜测\n",[324,3223,3224,3227,3230,3232],{"class":326,"line":2424},[324,3225,3226],{"class":863},"        if",[324,3228,3229],{"class":867},"(val",[324,3231,1774],{"class":863},[324,3233,3234],{"class":867},"num) \n",[324,3236,3237],{"class":326,"line":2429},[324,3238,3239],{"class":867},"        {\n",[324,3241,3242,3245,3247,3250,3252],{"class":326,"line":2458},[324,3243,3244],{"class":867},"            cout",[324,3246,1908],{"class":863},[324,3248,3249],{"class":738},"\"猜小了！\"",[324,3251,1908],{"class":863},[324,3253,1930],{"class":867},[324,3255,3256],{"class":326,"line":2463},[324,3257,3258],{"class":867},"        }\n",[324,3260,3261,3264,3266,3269,3271],{"class":326,"line":2480},[324,3262,3263],{"class":863},"        else",[324,3265,2435],{"class":863},[324,3267,3268],{"class":867}," (val",[324,3270,1824],{"class":863},[324,3272,3273],{"class":867},"num)\n",[324,3275,3276],{"class":326,"line":2485},[324,3277,3239],{"class":867},[324,3279,3280,3282,3284,3287,3289],{"class":326,"line":2490},[324,3281,3244],{"class":867},[324,3283,1908],{"class":863},[324,3285,3286],{"class":738},"\"猜大了！\"",[324,3288,1908],{"class":863},[324,3290,1930],{"class":867},[324,3292,3293],{"class":326,"line":2495},[324,3294,3258],{"class":867},[324,3296,3297],{"class":326,"line":2509},[324,3298,3299],{"class":863},"        else\n",[324,3301,3302],{"class":326,"line":2514},[324,3303,3239],{"class":867},[324,3305,3307,3309,3311,3314,3316],{"class":326,"line":3306},30,[324,3308,3244],{"class":867},[324,3310,1908],{"class":863},[324,3312,3313],{"class":738},"\"猜对了！\"",[324,3315,1908],{"class":863},[324,3317,1930],{"class":867},[324,3319,3321,3324],{"class":326,"line":3320},31,[324,3322,3323],{"class":863},"            break",[324,3325,2025],{"class":867},[324,3327,3329],{"class":326,"line":3328},32,[324,3330,3258],{"class":867},[324,3332,3334],{"class":326,"line":3333},33,[324,3335,3336],{"class":772},"        \u002F\u002F猜对 退出游戏\n",[324,3338,3340],{"class":326,"line":3339},34,[324,3341,3342],{"class":772},"        \u002F\u002F猜错 提示猜的结果 过大或者过小 重新返回第二步\n",[324,3344,3346],{"class":326,"line":3345},35,[324,3347,2917],{"class":867},[324,3349,3351],{"class":326,"line":3350},36,[324,3352,2296],{"class":867},[192,3354,3355],{"start":203},[195,3356,3357,3358,3361],{},"do...while循环结构\n语法： do{循环语句}while(循环条件)；\n与while的区别在于",[116,3359,3360],{},"do...while会先执行一次循环语句","，在判断循环语句",[316,3363,3365],{"className":854,"code":3364,"language":856,"meta":50,"style":50},"\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",[269,3366,3367,3372,3380,3384,3396,3404,3408,3425,3432,3436,3449,3459],{"__ignoreMap":50},[324,3368,3369],{"class":326,"line":327},[324,3370,3371],{"class":772},"\u002F\u002F在屏幕中输出0-9这10个数字\n",[324,3373,3374,3376,3378],{"class":326,"line":203},[324,3375,871],{"class":863},[324,3377,2703],{"class":734},[324,3379,2706],{"class":867},[324,3381,3382],{"class":326,"line":338},[324,3383,2277],{"class":867},[324,3385,3386,3388,3390,3392,3394],{"class":326,"line":344},[324,3387,2715],{"class":863},[324,3389,2970],{"class":867},[324,3391,913],{"class":863},[324,3393,1056],{"class":916},[324,3395,2025],{"class":867},[324,3397,3398,3401],{"class":326,"line":484},[324,3399,3400],{"class":863},"    do",[324,3402,3403],{"class":867}," \n",[324,3405,3406],{"class":326,"line":491},[324,3407,2760],{"class":867},[324,3409,3410,3413,3415,3417,3419,3421,3423],{"class":326,"line":496},[324,3411,3412],{"class":734},"        std",[324,3414,3002],{"class":867},[324,3416,1908],{"class":863},[324,3418,2396],{"class":867},[324,3420,1908],{"class":863},[324,3422,3011],{"class":734},[324,3424,3014],{"class":867},[324,3426,3427,3429],{"class":326,"line":502},[324,3428,3019],{"class":867},[324,3430,3431],{"class":863},"++\n",[324,3433,3434],{"class":326,"line":508},[324,3435,2917],{"class":867},[324,3437,3438,3440,3442,3444,3446],{"class":326,"line":514},[324,3439,2981],{"class":863},[324,3441,2984],{"class":867},[324,3443,1774],{"class":863},[324,3445,1310],{"class":916},[324,3447,3448],{"class":867},");\n",[324,3450,3451,3453,3455,3457],{"class":326,"line":2343},[324,3452,3033],{"class":734},[324,3454,868],{"class":867},[324,3456,3038],{"class":738},[324,3458,3448],{"class":867},[324,3460,3461],{"class":326,"line":2348},[324,3462,2296],{"class":867},[19,3464,3465],{},"案例-水仙花数",[19,3467,3468],{},"描述：水仙花数是指一个3位数，它的每个位上的数字的3次幂之和等于它本身",[19,3470,3471],{},"例如：1^3+5^3+3^3=153",[19,3473,3474],{},"请用do...while语句，求出所有3位数的水仙花数",[316,3476,3478],{"className":854,"code":3477,"language":856,"meta":50,"style":50},"#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",[269,3479,3480,3486,3496,3504,3508,3513,3525,3531,3535,3540,3556,3572,3588,3603,3622,3637,3685,3689,3701,3705,3713,3717,3731],{"__ignoreMap":50},[324,3481,3482,3484],{"class":326,"line":327},[324,3483,2680],{"class":863},[324,3485,3064],{"class":738},[324,3487,3488,3490,3492,3494],{"class":326,"line":203},[324,3489,2688],{"class":863},[324,3491,2691],{"class":863},[324,3493,2694],{"class":734},[324,3495,2025],{"class":867},[324,3497,3498,3500,3502],{"class":326,"line":338},[324,3499,871],{"class":863},[324,3501,2703],{"class":734},[324,3503,2706],{"class":867},[324,3505,3506],{"class":326,"line":344},[324,3507,2277],{"class":867},[324,3509,3510],{"class":326,"line":484},[324,3511,3512],{"class":772},"    \u002F\u002F1.先打印所有三位数字\n",[324,3514,3515,3517,3519,3521,3523],{"class":326,"line":491},[324,3516,2715],{"class":863},[324,3518,2970],{"class":867},[324,3520,913],{"class":863},[324,3522,1175],{"class":916},[324,3524,2025],{"class":867},[324,3526,3527,3529],{"class":326,"line":496},[324,3528,3400],{"class":863},[324,3530,3403],{"class":867},[324,3532,3533],{"class":326,"line":502},[324,3534,2760],{"class":867},[324,3536,3537],{"class":326,"line":508},[324,3538,3539],{"class":772},"        \u002F\u002F2.从所有三位数字中找到水仙花数\n",[324,3541,3542,3545,3547,3549,3551,3553],{"class":326,"line":514},[324,3543,3544],{"class":863},"        int",[324,3546,2130],{"class":867},[324,3548,913],{"class":863},[324,3550,1056],{"class":916},[324,3552,923],{"class":867},[324,3554,3555],{"class":772}," \u002F\u002F个位\n",[324,3557,3558,3560,3563,3565,3567,3569],{"class":326,"line":2343},[324,3559,3544],{"class":863},[324,3561,3562],{"class":867}," b",[324,3564,913],{"class":863},[324,3566,1056],{"class":916},[324,3568,923],{"class":867},[324,3570,3571],{"class":772}," \u002F\u002F十位\n",[324,3573,3574,3576,3579,3581,3583,3585],{"class":326,"line":2348},[324,3575,3544],{"class":863},[324,3577,3578],{"class":867}," c",[324,3580,913],{"class":863},[324,3582,1056],{"class":916},[324,3584,923],{"class":867},[324,3586,3587],{"class":772}," \u002F\u002F百位\n",[324,3589,3590,3593,3595,3597,3599,3601],{"class":326,"line":2354},[324,3591,3592],{"class":867},"        a",[324,3594,913],{"class":863},[324,3596,2396],{"class":867},[324,3598,1192],{"class":863},[324,3600,1310],{"class":916},[324,3602,2025],{"class":867},[324,3604,3605,3608,3610,3612,3614,3616,3618,3620],{"class":326,"line":2359},[324,3606,3607],{"class":867},"        b",[324,3609,913],{"class":863},[324,3611,2396],{"class":867},[324,3613,1448],{"class":863},[324,3615,1310],{"class":916},[324,3617,1192],{"class":863},[324,3619,1310],{"class":916},[324,3621,2025],{"class":867},[324,3623,3624,3627,3629,3631,3633,3635],{"class":326,"line":2373},[324,3625,3626],{"class":867},"        c",[324,3628,913],{"class":863},[324,3630,2396],{"class":867},[324,3632,1448],{"class":863},[324,3634,1175],{"class":916},[324,3636,2025],{"class":867},[324,3638,3639,3641,3643,3645,3647,3649,3651,3653,3655,3657,3659,3661,3663,3665,3667,3669,3671,3673,3676,3679,3682],{"class":326,"line":2378},[324,3640,3226],{"class":863},[324,3642,2572],{"class":867},[324,3644,1319],{"class":863},[324,3646,25],{"class":867},[324,3648,1319],{"class":863},[324,3650,25],{"class":867},[324,3652,1345],{"class":863},[324,3654,1127],{"class":867},[324,3656,1319],{"class":863},[324,3658,1127],{"class":867},[324,3660,1319],{"class":863},[324,3662,1127],{"class":867},[324,3664,1345],{"class":863},[324,3666,1152],{"class":867},[324,3668,1319],{"class":863},[324,3670,1152],{"class":867},[324,3672,1319],{"class":863},[324,3674,3675],{"class":867},"c ",[324,3677,3678],{"class":863},"==",[324,3680,3681],{"class":867}," num)",[324,3683,3684],{"class":772}," \u002F\u002F如果是水仙花数，才打印\n",[324,3686,3687],{"class":326,"line":2384},[324,3688,3239],{"class":867},[324,3690,3691,3693,3695,3697,3699],{"class":326,"line":2405},[324,3692,3244],{"class":867},[324,3694,1908],{"class":863},[324,3696,2396],{"class":867},[324,3698,1908],{"class":863},[324,3700,1930],{"class":867},[324,3702,3703],{"class":326,"line":2410},[324,3704,3258],{"class":867},[324,3706,3707,3709,3711],{"class":326,"line":2424},[324,3708,3019],{"class":867},[324,3710,3022],{"class":863},[324,3712,2025],{"class":867},[324,3714,3715],{"class":326,"line":2429},[324,3716,2917],{"class":867},[324,3718,3719,3721,3724,3726,3729],{"class":326,"line":2458},[324,3720,2981],{"class":863},[324,3722,3723],{"class":867}," (num ",[324,3725,1774],{"class":863},[324,3727,3728],{"class":916}," 1000",[324,3730,3448],{"class":867},[324,3732,3733],{"class":326,"line":2463},[324,3734,2296],{"class":867},[192,3736,3737],{"start":338},[195,3738,3739],{},"for循环语句\n语法：for(起始表达式；条件表达式；末尾循环体){循环语句;}",[316,3741,3743],{"className":854,"code":3742,"language":856,"meta":50,"style":50},"\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",[269,3744,3745,3750,3779,3783,3795,3799,3804,3815,3822,3826,3840,3844,3851,3855,3867,3876],{"__ignoreMap":50},[324,3746,3747],{"class":326,"line":327},[324,3748,3749],{"class":772},"\u002F\u002F从数字0-9打印\n",[324,3751,3752,3755,3757,3759,3762,3764,3766,3769,3771,3773,3775,3777],{"class":326,"line":203},[324,3753,3754],{"class":863},"for",[324,3756,868],{"class":867},[324,3758,871],{"class":863},[324,3760,3761],{"class":867}," i",[324,3763,913],{"class":863},[324,3765,1056],{"class":916},[324,3767,3768],{"class":867},";i",[324,3770,1774],{"class":863},[324,3772,1310],{"class":916},[324,3774,3768],{"class":867},[324,3776,3022],{"class":863},[324,3778,874],{"class":867},[324,3780,3781],{"class":326,"line":338},[324,3782,2277],{"class":867},[324,3784,3785,3787,3789,3791,3793],{"class":326,"line":344},[324,3786,2282],{"class":867},[324,3788,1908],{"class":863},[324,3790,1305],{"class":867},[324,3792,1908],{"class":863},[324,3794,1930],{"class":867},[324,3796,3797],{"class":326,"line":484},[324,3798,2296],{"class":867},[324,3800,3801],{"class":326,"line":491},[324,3802,3803],{"class":772},"\u002F\u002F上式可以进行拆分\n",[324,3805,3806,3808,3810,3812],{"class":326,"line":496},[324,3807,871],{"class":863},[324,3809,3761],{"class":867},[324,3811,913],{"class":863},[324,3813,3814],{"class":916},"0\n",[324,3816,3817,3819],{"class":326,"line":502},[324,3818,3754],{"class":863},[324,3820,3821],{"class":867},"(;;;)\n",[324,3823,3824],{"class":326,"line":508},[324,3825,2277],{"class":867},[324,3827,3828,3831,3834,3836,3838],{"class":326,"line":514},[324,3829,3830],{"class":863},"    if",[324,3832,3833],{"class":867},"(i",[324,3835,2441],{"class":863},[324,3837,1310],{"class":916},[324,3839,874],{"class":867},[324,3841,3842],{"class":326,"line":2343},[324,3843,2760],{"class":867},[324,3845,3846,3849],{"class":326,"line":2348},[324,3847,3848],{"class":863},"        break",[324,3850,2025],{"class":867},[324,3852,3853],{"class":326,"line":2354},[324,3854,2917],{"class":867},[324,3856,3857,3859,3861,3863,3865],{"class":326,"line":2359},[324,3858,2282],{"class":867},[324,3860,1908],{"class":863},[324,3862,1305],{"class":867},[324,3864,1908],{"class":863},[324,3866,1930],{"class":867},[324,3868,3869,3872,3874],{"class":326,"line":2373},[324,3870,3871],{"class":867},"    i",[324,3873,3022],{"class":863},[324,3875,2025],{"class":867},[324,3877,3878],{"class":326,"line":2378},[324,3879,2296],{"class":867},[19,3881,3882],{},"小练习",[316,3884,3886],{"className":854,"code":3885,"language":856,"meta":50,"style":50},"#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",[269,3887,3888,3894,3904,3912,3916,3921,3926,3954,3958,3963,3968,4009,4013,4026,4030,4034,4038,4050,4054,4058],{"__ignoreMap":50},[324,3889,3890,3892],{"class":326,"line":327},[324,3891,2680],{"class":863},[324,3893,2683],{"class":738},[324,3895,3896,3898,3900,3902],{"class":326,"line":203},[324,3897,2688],{"class":863},[324,3899,2691],{"class":863},[324,3901,2694],{"class":734},[324,3903,2025],{"class":867},[324,3905,3906,3908,3910],{"class":326,"line":338},[324,3907,871],{"class":863},[324,3909,2703],{"class":734},[324,3911,2706],{"class":867},[324,3913,3914],{"class":326,"line":344},[324,3915,2277],{"class":867},[324,3917,3918],{"class":326,"line":484},[324,3919,3920],{"class":772},"    \u002F\u002F敲桌子案例\n",[324,3922,3923],{"class":326,"line":491},[324,3924,3925],{"class":772},"    \u002F\u002F1.先输出1-100的数字\n",[324,3927,3928,3931,3933,3935,3937,3939,3941,3944,3946,3948,3950,3952],{"class":326,"line":496},[324,3929,3930],{"class":863},"    for",[324,3932,868],{"class":867},[324,3934,871],{"class":863},[324,3936,3761],{"class":867},[324,3938,913],{"class":863},[324,3940,1082],{"class":916},[324,3942,3943],{"class":867},"; i",[324,3945,2319],{"class":863},[324,3947,1175],{"class":916},[324,3949,3943],{"class":867},[324,3951,3022],{"class":863},[324,3953,874],{"class":867},[324,3955,3956],{"class":326,"line":502},[324,3957,2760],{"class":867},[324,3959,3960],{"class":326,"line":508},[324,3961,3962],{"class":772},"        \u002F\u002F2.从100个数字中找到特殊数字，打印敲桌子\n",[324,3964,3965],{"class":326,"line":514},[324,3966,3967],{"class":772},"        \u002F\u002F如果是7的倍数、个为有7、或者十位有7,打印敲桌子\n",[324,3969,3970,3972,3974,3976,3978,3980,3982,3985,3987,3989,3991,3993,3995,3997,3999,4001,4003,4005,4007],{"class":326,"line":2343},[324,3971,3226],{"class":863},[324,3973,3833],{"class":867},[324,3975,1192],{"class":863},[324,3977,1233],{"class":916},[324,3979,3678],{"class":863},[324,3981,1056],{"class":916},[324,3983,3984],{"class":863}," ||",[324,3986,3761],{"class":867},[324,3988,1192],{"class":863},[324,3990,1310],{"class":916},[324,3992,3678],{"class":863},[324,3994,1233],{"class":916},[324,3996,3984],{"class":863},[324,3998,3761],{"class":867},[324,4000,1448],{"class":863},[324,4002,1310],{"class":916},[324,4004,3678],{"class":863},[324,4006,1233],{"class":916},[324,4008,874],{"class":867},[324,4010,4011],{"class":326,"line":2348},[324,4012,3239],{"class":867},[324,4014,4015,4017,4019,4022,4024],{"class":326,"line":2354},[324,4016,3244],{"class":867},[324,4018,1908],{"class":863},[324,4020,4021],{"class":738},"\"敲桌子\"",[324,4023,1908],{"class":863},[324,4025,1930],{"class":867},[324,4027,4028],{"class":326,"line":2359},[324,4029,3258],{"class":867},[324,4031,4032],{"class":326,"line":2373},[324,4033,3299],{"class":863},[324,4035,4036],{"class":326,"line":2378},[324,4037,3239],{"class":867},[324,4039,4040,4042,4044,4046,4048],{"class":326,"line":2384},[324,4041,3244],{"class":867},[324,4043,1908],{"class":863},[324,4045,1305],{"class":867},[324,4047,1908],{"class":863},[324,4049,1930],{"class":867},[324,4051,4052],{"class":326,"line":2405},[324,4053,3258],{"class":867},[324,4055,4056],{"class":326,"line":2410},[324,4057,2917],{"class":867},[324,4059,4060],{"class":326,"line":2424},[324,4061,2296],{"class":867},[19,4063,4064],{},"嵌套实现星图",[316,4066,4068],{"className":854,"code":4067,"language":856,"meta":50,"style":50},"#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",[269,4069,4070,4076,4086,4094,4098,4124,4128,4157,4161,4172,4176,4185,4189],{"__ignoreMap":50},[324,4071,4072,4074],{"class":326,"line":327},[324,4073,2680],{"class":863},[324,4075,2683],{"class":738},[324,4077,4078,4080,4082,4084],{"class":326,"line":203},[324,4079,2688],{"class":863},[324,4081,2691],{"class":863},[324,4083,2694],{"class":734},[324,4085,2025],{"class":867},[324,4087,4088,4090,4092],{"class":326,"line":338},[324,4089,871],{"class":863},[324,4091,2703],{"class":734},[324,4093,2706],{"class":867},[324,4095,4096],{"class":326,"line":344},[324,4097,2277],{"class":867},[324,4099,4100,4102,4104,4106,4108,4110,4112,4114,4116,4118,4120,4122],{"class":326,"line":484},[324,4101,3930],{"class":863},[324,4103,2389],{"class":867},[324,4105,871],{"class":863},[324,4107,3761],{"class":867},[324,4109,913],{"class":863},[324,4111,1056],{"class":916},[324,4113,3768],{"class":867},[324,4115,1774],{"class":863},[324,4117,1310],{"class":916},[324,4119,3768],{"class":867},[324,4121,3022],{"class":863},[324,4123,874],{"class":867},[324,4125,4126],{"class":326,"line":491},[324,4127,2760],{"class":867},[324,4129,4130,4133,4135,4137,4140,4142,4144,4147,4149,4151,4153,4155],{"class":326,"line":496},[324,4131,4132],{"class":863},"        for",[324,4134,2389],{"class":867},[324,4136,871],{"class":863},[324,4138,4139],{"class":867}," j",[324,4141,913],{"class":863},[324,4143,1056],{"class":916},[324,4145,4146],{"class":867},";j",[324,4148,1774],{"class":863},[324,4150,1310],{"class":916},[324,4152,4146],{"class":867},[324,4154,3022],{"class":863},[324,4156,874],{"class":867},[324,4158,4159],{"class":326,"line":502},[324,4160,3239],{"class":867},[324,4162,4163,4165,4167,4170],{"class":326,"line":508},[324,4164,3244],{"class":867},[324,4166,1908],{"class":863},[324,4168,4169],{"class":738},"\"*\"",[324,4171,2025],{"class":867},[324,4173,4174],{"class":326,"line":514},[324,4175,3258],{"class":867},[324,4177,4178,4181,4183],{"class":326,"line":2343},[324,4179,4180],{"class":867},"        cout",[324,4182,1908],{"class":863},[324,4184,1930],{"class":867},[324,4186,4187],{"class":326,"line":2348},[324,4188,2917],{"class":867},[324,4190,4191],{"class":326,"line":2354},[324,4192,2296],{"class":867},[19,4194,4195],{},"乘法口诀表",[316,4197,4199],{"className":854,"code":4198,"language":856,"meta":50,"style":50},"#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",[269,4200,4201,4207,4217,4225,4229,4255,4259,4284,4288,4328,4332,4340,4344],{"__ignoreMap":50},[324,4202,4203,4205],{"class":326,"line":327},[324,4204,2680],{"class":863},[324,4206,3064],{"class":738},[324,4208,4209,4211,4213,4215],{"class":326,"line":203},[324,4210,2688],{"class":863},[324,4212,2691],{"class":863},[324,4214,2694],{"class":734},[324,4216,2025],{"class":867},[324,4218,4219,4221,4223],{"class":326,"line":338},[324,4220,871],{"class":863},[324,4222,2703],{"class":734},[324,4224,2706],{"class":867},[324,4226,4227],{"class":326,"line":344},[324,4228,2277],{"class":867},[324,4230,4231,4233,4235,4237,4239,4241,4243,4245,4247,4249,4251,4253],{"class":326,"line":484},[324,4232,3930],{"class":863},[324,4234,868],{"class":867},[324,4236,871],{"class":863},[324,4238,3761],{"class":867},[324,4240,913],{"class":863},[324,4242,1082],{"class":916},[324,4244,3768],{"class":867},[324,4246,1774],{"class":863},[324,4248,1310],{"class":916},[324,4250,3768],{"class":867},[324,4252,3022],{"class":863},[324,4254,874],{"class":867},[324,4256,4257],{"class":326,"line":491},[324,4258,2760],{"class":867},[324,4260,4261,4263,4265,4267,4269,4271,4273,4275,4277,4280,4282],{"class":326,"line":496},[324,4262,4132],{"class":863},[324,4264,868],{"class":867},[324,4266,871],{"class":863},[324,4268,4139],{"class":867},[324,4270,913],{"class":863},[324,4272,1082],{"class":916},[324,4274,4146],{"class":867},[324,4276,2319],{"class":863},[324,4278,4279],{"class":867},"i;j",[324,4281,3022],{"class":863},[324,4283,874],{"class":867},[324,4285,4286],{"class":326,"line":502},[324,4287,3239],{"class":867},[324,4289,4290,4292,4294,4296,4298,4300,4302,4304,4306,4309,4311,4313,4315,4317,4319,4322,4324,4326],{"class":326,"line":508},[324,4291,3244],{"class":867},[324,4293,1908],{"class":863},[324,4295,1331],{"class":867},[324,4297,1908],{"class":863},[324,4299,4169],{"class":738},[324,4301,1908],{"class":863},[324,4303,1305],{"class":867},[324,4305,1908],{"class":863},[324,4307,4308],{"class":738},"\"=\"",[324,4310,1908],{"class":863},[324,4312,1305],{"class":867},[324,4314,1319],{"class":863},[324,4316,1331],{"class":867},[324,4318,1908],{"class":863},[324,4320,4321],{"class":738},"'",[324,4323,1965],{"class":916},[324,4325,4321],{"class":738},[324,4327,2025],{"class":867},[324,4329,4330],{"class":326,"line":514},[324,4331,3258],{"class":867},[324,4333,4334,4336,4338],{"class":326,"line":2343},[324,4335,4180],{"class":867},[324,4337,1908],{"class":863},[324,4339,1930],{"class":867},[324,4341,4342],{"class":326,"line":2348},[324,4343,2917],{"class":867},[324,4345,4346],{"class":326,"line":2354},[324,4347,2296],{"class":867},[35,4349,4351],{"id":4350},"_163跳出语句","1.6.3跳出语句",[192,4353,4354],{},[195,4355,4356],{},"break语句\n作用：用于跳出选择结构或者循环结构",[19,4358,4359],{},"break使用时机：",[1871,4361,4362,4365,4368],{},[195,4363,4364],{},"出现在switch条件语句中，作用是终止case并跳出switch",[195,4366,4367],{},"出现在循环结构中，作用是跳出当前的循环结构",[195,4369,4370],{},"出现在嵌套循环中，跳出最近的内层循环语句",[192,4372,4373,4376],{"start":203},[195,4374,4375],{},"continue语句\n作用：在循环语句中，跳过本次循环中余下尚未执行的语句，继续执行下一次循环",[195,4377,4378],{},"goto语句\n语法：goto 标记;",[19,4380,4381],{},"解释：如果标记的名称存在，执行到goto语句时，会跳转到标记的位置（类似于html中的a标签）",[316,4383,4385],{"className":854,"code":4384,"language":856,"meta":50,"style":50},"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",[269,4386,4387,4395,4399,4412,4422,4435,4448,4461,4469,4485],{"__ignoreMap":50},[324,4388,4389,4391,4393],{"class":326,"line":327},[324,4390,871],{"class":863},[324,4392,2703],{"class":734},[324,4394,2706],{"class":867},[324,4396,4397],{"class":326,"line":203},[324,4398,2277],{"class":867},[324,4400,4401,4403,4405,4408,4410],{"class":326,"line":338},[324,4402,2282],{"class":867},[324,4404,1908],{"class":863},[324,4406,4407],{"class":738},"\"1\"",[324,4409,1908],{"class":863},[324,4411,1930],{"class":867},[324,4413,4414,4417,4420],{"class":326,"line":344},[324,4415,4416],{"class":863},"    goto",[324,4418,4419],{"class":734}," FLAG",[324,4421,2025],{"class":867},[324,4423,4424,4426,4428,4431,4433],{"class":326,"line":484},[324,4425,2282],{"class":867},[324,4427,1908],{"class":863},[324,4429,4430],{"class":738},"\"2\"",[324,4432,1908],{"class":863},[324,4434,1930],{"class":867},[324,4436,4437,4439,4441,4444,4446],{"class":326,"line":491},[324,4438,2282],{"class":867},[324,4440,1908],{"class":863},[324,4442,4443],{"class":738},"\"3\"",[324,4445,1908],{"class":863},[324,4447,1930],{"class":867},[324,4449,4450,4452,4454,4457,4459],{"class":326,"line":496},[324,4451,2282],{"class":867},[324,4453,1908],{"class":863},[324,4455,4456],{"class":738},"\"4\"",[324,4458,1908],{"class":863},[324,4460,1930],{"class":867},[324,4462,4463,4466],{"class":326,"line":502},[324,4464,4465],{"class":734},"    FLAG",[324,4467,4468],{"class":867},":\n",[324,4470,4471,4473,4475,4478,4480,4482],{"class":326,"line":508},[324,4472,2282],{"class":867},[324,4474,1908],{"class":863},[324,4476,4477],{"class":738},"\"5\"",[324,4479,1908],{"class":863},[324,4481,1973],{"class":867},[324,4483,4484],{"class":772},"\u002F\u002F跳过了2,3,4,直接到5\n",[324,4486,4487],{"class":326,"line":514},[324,4488,2296],{"class":867},[14,4490,4492],{"id":4491},"_17数组","1.7数组",[35,4494,4496],{"id":4495},"_171一维数组","1.7.1一维数组",[192,4498,4499],{},[195,4500,4501],{},"一维数组定义方式",[1003,4503,4504,4514],{},[1006,4505,4506],{},[1009,4507,4508,4511],{},[1012,4509,4510],{},"方式",[1012,4512,4513],{},"注意事项",[1049,4515,4516,4530,4540],{},[1009,4517,4518,4524],{},[1054,4519,4520,4521,923],{},"数据类型 数组名",[324,4522,4523],{},"数组长度",[1054,4525,4526,4527,4529],{},"这种方式是先定义再arr",[324,4528,1305],{},"赋值",[1009,4531,4532,4537],{},[1054,4533,4520,4534,4536],{},[324,4535,4523],{},"={值1,值2....};",[1054,4538,4539],{},"如果在初始化数据时，没有全部填写完，会用0来填补剩余数据",[1009,4541,4542,4546],{},[1054,4543,4520,4544,4536],{},[324,4545],{},[1054,4547,4548,4549,4551],{},"int arr",[324,4550],{},";这是不正确的，按照这样的方式定义必须有初始长度",[192,4553,4554],{"start":203},[195,4555,4556],{},"一维数组数组名\n用途：",[1871,4558,4559],{},[195,4560,4561],{},"1.可以统计整个数组在内存中的长度：",[316,4563,4565],{"className":854,"code":4564,"language":856,"meta":50,"style":50},"sizeof(arr);\nsizeof(arr[0]);\n",[269,4566,4567,4574],{"__ignoreMap":50},[324,4568,4569,4571],{"class":326,"line":327},[324,4570,864],{"class":863},[324,4572,4573],{"class":867},"(arr);\n",[324,4575,4576,4578,4581,4583],{"class":326,"line":203},[324,4577,864],{"class":863},[324,4579,4580],{"class":867},"(arr[",[324,4582,1056],{"class":916},[324,4584,4585],{"class":867},"]);\n",[1871,4587,4588],{},[195,4589,4590],{},"2.可以获取数组在内存中的首地址:",[316,4592,4594],{"className":854,"code":4593,"language":856,"meta":50,"style":50},"\u002F\u002F查看16进制的首地址\ncout\u003C\u003Carr\u003C\u003Cendl;\n\u002F\u002F看10进制数\ncout\u003C\u003C(int)&arr[0]\u003C\u003Cendl;\n",[269,4595,4596,4601,4614,4619],{"__ignoreMap":50},[324,4597,4598],{"class":326,"line":327},[324,4599,4600],{"class":772},"\u002F\u002F查看16进制的首地址\n",[324,4602,4603,4605,4607,4610,4612],{"class":326,"line":203},[324,4604,2101],{"class":867},[324,4606,1908],{"class":863},[324,4608,4609],{"class":867},"arr",[324,4611,1908],{"class":863},[324,4613,1930],{"class":867},[324,4615,4616],{"class":326,"line":338},[324,4617,4618],{"class":772},"\u002F\u002F看10进制数\n",[324,4620,4621,4623,4625,4627,4629,4631,4633,4636,4638,4640,4642],{"class":326,"line":344},[324,4622,2101],{"class":867},[324,4624,1908],{"class":863},[324,4626,868],{"class":867},[324,4628,871],{"class":863},[324,4630,1293],{"class":867},[324,4632,1217],{"class":863},[324,4634,4635],{"class":867},"arr[",[324,4637,1056],{"class":916},[324,4639,1804],{"class":867},[324,4641,1908],{"class":863},[324,4643,1930],{"class":867},[19,4645,4646],{},"数组名是常量，不可以进行赋值操作\n3. 小案例",[1871,4648,4649],{},[195,4650,4651],{},"1️⃣五只小猪称体重",[316,4653,4655],{"className":854,"code":4654,"language":856,"meta":50,"style":50},"#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",[269,4656,4657,4663,4673,4681,4685,4725,4738,4764,4768,4780,4784,4794,4798,4802,4815,4825],{"__ignoreMap":50},[324,4658,4659,4661],{"class":326,"line":327},[324,4660,2680],{"class":863},[324,4662,2683],{"class":738},[324,4664,4665,4667,4669,4671],{"class":326,"line":203},[324,4666,2688],{"class":863},[324,4668,2691],{"class":863},[324,4670,2694],{"class":734},[324,4672,2025],{"class":867},[324,4674,4675,4677,4679],{"class":326,"line":338},[324,4676,871],{"class":863},[324,4678,2703],{"class":734},[324,4680,2706],{"class":867},[324,4682,4683],{"class":326,"line":344},[324,4684,2277],{"class":867},[324,4686,4687,4689,4692,4694,4696,4698,4700,4703,4705,4708,4710,4712,4714,4717,4719,4722],{"class":326,"line":484},[324,4688,2715],{"class":863},[324,4690,4691],{"class":867}," arr[",[324,4693,1183],{"class":916},[324,4695,1804],{"class":867},[324,4697,913],{"class":863},[324,4699,1760],{"class":867},[324,4701,4702],{"class":916},"300",[324,4704,1242],{"class":867},[324,4706,4707],{"class":916},"350",[324,4709,1242],{"class":867},[324,4711,2453],{"class":916},[324,4713,1242],{"class":867},[324,4715,4716],{"class":916},"400",[324,4718,1242],{"class":867},[324,4720,4721],{"class":916},"250",[324,4723,4724],{"class":867},"};\n",[324,4726,4727,4729,4732,4734,4736],{"class":326,"line":491},[324,4728,2715],{"class":863},[324,4730,4731],{"class":867}," tmp",[324,4733,913],{"class":863},[324,4735,1056],{"class":916},[324,4737,2025],{"class":867},[324,4739,4740,4742,4744,4746,4748,4750,4752,4754,4756,4758,4760,4762],{"class":326,"line":496},[324,4741,3930],{"class":863},[324,4743,2389],{"class":867},[324,4745,871],{"class":863},[324,4747,3761],{"class":867},[324,4749,913],{"class":863},[324,4751,1056],{"class":916},[324,4753,3768],{"class":867},[324,4755,1774],{"class":863},[324,4757,1183],{"class":916},[324,4759,3768],{"class":867},[324,4761,3022],{"class":863},[324,4763,874],{"class":867},[324,4765,4766],{"class":326,"line":502},[324,4767,2760],{"class":867},[324,4769,4770,4772,4775,4777],{"class":326,"line":508},[324,4771,3226],{"class":863},[324,4773,4774],{"class":867},"(tmp",[324,4776,1774],{"class":863},[324,4778,4779],{"class":867},"arr[i])\n",[324,4781,4782],{"class":326,"line":514},[324,4783,3239],{"class":867},[324,4785,4786,4789,4791],{"class":326,"line":2343},[324,4787,4788],{"class":867},"            tmp",[324,4790,913],{"class":863},[324,4792,4793],{"class":867},"arr[i];\n",[324,4795,4796],{"class":326,"line":2348},[324,4797,3258],{"class":867},[324,4799,4800],{"class":326,"line":2354},[324,4801,2917],{"class":867},[324,4803,4804,4806,4808,4811,4813],{"class":326,"line":2359},[324,4805,2282],{"class":867},[324,4807,1908],{"class":863},[324,4809,4810],{"class":867},"tmp",[324,4812,1908],{"class":863},[324,4814,1930],{"class":867},[324,4816,4817,4820,4823],{"class":326,"line":2373},[324,4818,4819],{"class":863},"    return",[324,4821,4822],{"class":916}," 0",[324,4824,2025],{"class":867},[324,4826,4827],{"class":326,"line":2378},[324,4828,2296],{"class":867},[1871,4830,4831],{},[195,4832,4833],{},"2️⃣数组元素逆置",[316,4835,4837],{"className":854,"code":4836,"language":856,"meta":50,"style":50},"\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",[269,4838,4839,4844,4850,4860,4868,4872,4907,4923,4955,4968,4973,4978,4990,5000,5010,5015,5024,5034,5039,5044,5071,5075,5091,5095,5106,5115],{"__ignoreMap":50},[324,4840,4841],{"class":326,"line":327},[324,4842,4843],{"class":772},"\u002F\u002F元素逆置\n",[324,4845,4846,4848],{"class":326,"line":203},[324,4847,2680],{"class":863},[324,4849,2683],{"class":738},[324,4851,4852,4854,4856,4858],{"class":326,"line":338},[324,4853,2688],{"class":863},[324,4855,2691],{"class":863},[324,4857,2694],{"class":734},[324,4859,2025],{"class":867},[324,4861,4862,4864,4866],{"class":326,"line":344},[324,4863,871],{"class":863},[324,4865,2703],{"class":734},[324,4867,2706],{"class":867},[324,4869,4870],{"class":326,"line":484},[324,4871,2277],{"class":867},[324,4873,4874,4877,4879,4881,4883,4885,4887,4889,4891,4893,4895,4897,4899,4901,4903,4905],{"class":326,"line":491},[324,4875,4876],{"class":863},"   int",[324,4878,4691],{"class":867},[324,4880,1183],{"class":916},[324,4882,1804],{"class":867},[324,4884,913],{"class":863},[324,4886,1760],{"class":867},[324,4888,1082],{"class":916},[324,4890,1242],{"class":867},[324,4892,944],{"class":916},[324,4894,1242],{"class":867},[324,4896,938],{"class":916},[324,4898,1242],{"class":867},[324,4900,1157],{"class":916},[324,4902,1242],{"class":867},[324,4904,1183],{"class":916},[324,4906,4724],{"class":867},[324,4908,4909,4911,4914,4916,4918,4920],{"class":326,"line":496},[324,4910,4876],{"class":863},[324,4912,4913],{"class":867}," start",[324,4915,913],{"class":863},[324,4917,1056],{"class":916},[324,4919,923],{"class":867},[324,4921,4922],{"class":772},"\u002F\u002F起始下标\n",[324,4924,4925,4927,4930,4933,4936,4939,4941,4943,4946,4948,4950,4952],{"class":326,"line":502},[324,4926,4876],{"class":863},[324,4928,4929],{"class":867}," end",[324,4931,4932],{"class":863},"=sizeof",[324,4934,4935],{"class":867},"(arr)",[324,4937,4938],{"class":863},"\u002Fsizeof",[324,4940,4580],{"class":867},[324,4942,1056],{"class":916},[324,4944,4945],{"class":867},"])",[324,4947,1396],{"class":863},[324,4949,1082],{"class":916},[324,4951,923],{"class":867},[324,4953,4954],{"class":772},"\u002F\u002F结束下标\n",[324,4956,4957,4960,4963,4965],{"class":326,"line":508},[324,4958,4959],{"class":863},"   while",[324,4961,4962],{"class":867}," (start",[324,4964,1774],{"class":863},[324,4966,4967],{"class":867},"end)\n",[324,4969,4970],{"class":326,"line":514},[324,4971,4972],{"class":867},"   {\n",[324,4974,4975],{"class":326,"line":2343},[324,4976,4977],{"class":772},"    \u002F\u002F实现元素互换代码\n",[324,4979,4980,4982,4985,4987],{"class":326,"line":2348},[324,4981,2715],{"class":863},[324,4983,4984],{"class":867}," temp",[324,4986,913],{"class":863},[324,4988,4989],{"class":867},"arr[start];\n",[324,4991,4992,4995,4997],{"class":326,"line":2354},[324,4993,4994],{"class":867},"    arr[start]",[324,4996,913],{"class":863},[324,4998,4999],{"class":867},"arr[end];\n",[324,5001,5002,5005,5007],{"class":326,"line":2359},[324,5003,5004],{"class":867},"    arr[end]",[324,5006,913],{"class":863},[324,5008,5009],{"class":867},"temp;\n",[324,5011,5012],{"class":326,"line":2373},[324,5013,5014],{"class":772},"    \u002F\u002F下标更新\n",[324,5016,5017,5020,5022],{"class":326,"line":2378},[324,5018,5019],{"class":867},"    start",[324,5021,3022],{"class":863},[324,5023,2025],{"class":867},[324,5025,5026,5029,5032],{"class":326,"line":2384},[324,5027,5028],{"class":867},"    end",[324,5030,5031],{"class":863},"--",[324,5033,2025],{"class":867},[324,5035,5036],{"class":326,"line":2405},[324,5037,5038],{"class":867},"   }\n",[324,5040,5041],{"class":326,"line":2410},[324,5042,5043],{"class":772},"   \u002F\u002F输出逆置后的数组\n",[324,5045,5046,5049,5051,5053,5055,5057,5059,5061,5063,5065,5067,5069],{"class":326,"line":2424},[324,5047,5048],{"class":863},"   for",[324,5050,2389],{"class":867},[324,5052,871],{"class":863},[324,5054,3761],{"class":867},[324,5056,913],{"class":863},[324,5058,1056],{"class":916},[324,5060,3768],{"class":867},[324,5062,1774],{"class":863},[324,5064,1183],{"class":916},[324,5066,3768],{"class":867},[324,5068,3022],{"class":863},[324,5070,874],{"class":867},[324,5072,5073],{"class":326,"line":2429},[324,5074,4972],{"class":867},[324,5076,5077,5079,5081,5084,5086,5089],{"class":326,"line":2458},[324,5078,2282],{"class":867},[324,5080,1908],{"class":863},[324,5082,5083],{"class":867},"arr[i]",[324,5085,1908],{"class":863},[324,5087,5088],{"class":738},"\" \"",[324,5090,2025],{"class":867},[324,5092,5093],{"class":326,"line":2463},[324,5094,5038],{"class":867},[324,5096,5097,5100,5102,5104],{"class":326,"line":2480},[324,5098,5099],{"class":734},"   system",[324,5101,868],{"class":867},[324,5103,3038],{"class":738},[324,5105,3448],{"class":867},[324,5107,5108,5111,5113],{"class":326,"line":2485},[324,5109,5110],{"class":863},"   return",[324,5112,4822],{"class":916},[324,5114,2025],{"class":867},[324,5116,5117],{"class":326,"line":2490},[324,5118,2296],{"class":867},[1871,5120,5121],{},[195,5122,5123],{},"3️⃣冒泡排序\n对数组元素进行排序，做法：\n比较相邻的元素，如果第一个比第二个大，就交换他们；对每一对相邻元素做同样的工作，执行完毕后，找到第一个最大值；重复以上的步骤，每次比较次数-1,直到不需要比较",[316,5125,5127],{"className":854,"code":5126,"language":856,"meta":50,"style":50},"\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",[269,5128,5129,5134,5140,5150,5158,5162,5214,5227,5253,5257,5271,5275,5280,5285,5315,5319,5324,5358,5362,5367,5387,5392,5404,5420,5435,5440,5444,5448,5461,5487,5491,5505,5509,5517],{"__ignoreMap":50},[324,5130,5131],{"class":326,"line":327},[324,5132,5133],{"class":772},"\u002F\u002F冒泡排序,升序\n",[324,5135,5136,5138],{"class":326,"line":203},[324,5137,2680],{"class":863},[324,5139,2683],{"class":738},[324,5141,5142,5144,5146,5148],{"class":326,"line":338},[324,5143,2688],{"class":863},[324,5145,2691],{"class":863},[324,5147,2694],{"class":734},[324,5149,2025],{"class":867},[324,5151,5152,5154,5156],{"class":326,"line":344},[324,5153,871],{"class":863},[324,5155,2703],{"class":734},[324,5157,2706],{"class":867},[324,5159,5160],{"class":326,"line":484},[324,5161,2277],{"class":867},[324,5163,5164,5166,5168,5170,5173,5175,5178,5180,5182,5184,5186,5188,5190,5192,5194,5196,5198,5200,5202,5204,5206,5208,5210,5212],{"class":326,"line":491},[324,5165,2715],{"class":863},[324,5167,4691],{"class":867},[324,5169,1284],{"class":916},[324,5171,5172],{"class":867},"] ",[324,5174,913],{"class":863},[324,5176,5177],{"class":867}," {",[324,5179,1157],{"class":916},[324,5181,1242],{"class":867},[324,5183,944],{"class":916},[324,5185,1242],{"class":867},[324,5187,1259],{"class":916},[324,5189,1242],{"class":867},[324,5191,1056],{"class":916},[324,5193,1242],{"class":867},[324,5195,1183],{"class":916},[324,5197,1242],{"class":867},[324,5199,1233],{"class":916},[324,5201,1242],{"class":867},[324,5203,1082],{"class":916},[324,5205,1242],{"class":867},[324,5207,938],{"class":916},[324,5209,1242],{"class":867},[324,5211,1284],{"class":916},[324,5213,4724],{"class":867},[324,5215,5216,5218,5220,5223,5225],{"class":326,"line":496},[324,5217,2282],{"class":867},[324,5219,1908],{"class":863},[324,5221,5222],{"class":738},"\"排序前：\"",[324,5224,1908],{"class":863},[324,5226,1930],{"class":867},[324,5228,5229,5231,5233,5235,5237,5239,5241,5243,5245,5247,5249,5251],{"class":326,"line":502},[324,5230,3930],{"class":863},[324,5232,2389],{"class":867},[324,5234,871],{"class":863},[324,5236,3761],{"class":867},[324,5238,913],{"class":863},[324,5240,1056],{"class":916},[324,5242,3768],{"class":867},[324,5244,1774],{"class":863},[324,5246,1284],{"class":916},[324,5248,3768],{"class":867},[324,5250,3022],{"class":863},[324,5252,874],{"class":867},[324,5254,5255],{"class":326,"line":508},[324,5256,2760],{"class":867},[324,5258,5259,5261,5263,5265,5267,5269],{"class":326,"line":514},[324,5260,4180],{"class":867},[324,5262,1908],{"class":863},[324,5264,5083],{"class":867},[324,5266,1908],{"class":863},[324,5268,5088],{"class":738},[324,5270,2025],{"class":867},[324,5272,5273],{"class":326,"line":2343},[324,5274,2917],{"class":867},[324,5276,5277],{"class":326,"line":2348},[324,5278,5279],{"class":772},"    \u002F\u002F开始冒泡排序\n",[324,5281,5282],{"class":326,"line":2354},[324,5283,5284],{"class":772},"    \u002F\u002F总共排序轮数为 元素个数-1\n",[324,5286,5287,5289,5291,5293,5295,5297,5299,5301,5303,5305,5307,5309,5311,5313],{"class":326,"line":2359},[324,5288,3930],{"class":863},[324,5290,2389],{"class":867},[324,5292,871],{"class":863},[324,5294,3761],{"class":867},[324,5296,913],{"class":863},[324,5298,1056],{"class":916},[324,5300,3768],{"class":867},[324,5302,1774],{"class":863},[324,5304,1284],{"class":916},[324,5306,1396],{"class":863},[324,5308,1082],{"class":916},[324,5310,3768],{"class":867},[324,5312,3022],{"class":863},[324,5314,874],{"class":867},[324,5316,5317],{"class":326,"line":2373},[324,5318,2760],{"class":867},[324,5320,5321],{"class":326,"line":2378},[324,5322,5323],{"class":772},"        \u002F\u002F内层循环对比 次数=元素个数-1-当前轮数\n",[324,5325,5326,5328,5330,5332,5334,5336,5338,5340,5342,5344,5346,5348,5350,5352,5354,5356],{"class":326,"line":2384},[324,5327,4132],{"class":863},[324,5329,2389],{"class":867},[324,5331,871],{"class":863},[324,5333,4139],{"class":867},[324,5335,913],{"class":863},[324,5337,1056],{"class":916},[324,5339,4146],{"class":867},[324,5341,1774],{"class":863},[324,5343,1284],{"class":916},[324,5345,1396],{"class":863},[324,5347,1305],{"class":867},[324,5349,1396],{"class":863},[324,5351,1082],{"class":916},[324,5353,4146],{"class":867},[324,5355,3022],{"class":863},[324,5357,874],{"class":867},[324,5359,5360],{"class":326,"line":2405},[324,5361,3239],{"class":867},[324,5363,5364],{"class":326,"line":2410},[324,5365,5366],{"class":772},"            \u002F\u002F如果前一个元素大于后一个元素，则交换它们\n",[324,5368,5369,5372,5375,5377,5380,5382,5384],{"class":326,"line":2424},[324,5370,5371],{"class":863},"            if",[324,5373,5374],{"class":867},"(arr[j]",[324,5376,1824],{"class":863},[324,5378,5379],{"class":867},"arr[j",[324,5381,1345],{"class":863},[324,5383,1082],{"class":916},[324,5385,5386],{"class":867},"])\n",[324,5388,5389],{"class":326,"line":2429},[324,5390,5391],{"class":867},"            {\n",[324,5393,5394,5397,5399,5401],{"class":326,"line":2458},[324,5395,5396],{"class":863},"                int",[324,5398,4984],{"class":867},[324,5400,913],{"class":863},[324,5402,5403],{"class":867},"arr[j];\n",[324,5405,5406,5409,5411,5413,5415,5417],{"class":326,"line":2463},[324,5407,5408],{"class":867},"                arr[j]",[324,5410,913],{"class":863},[324,5412,5379],{"class":867},[324,5414,1345],{"class":863},[324,5416,1082],{"class":916},[324,5418,5419],{"class":867},"];\n",[324,5421,5422,5425,5427,5429,5431,5433],{"class":326,"line":2480},[324,5423,5424],{"class":867},"                arr[j",[324,5426,1345],{"class":863},[324,5428,1082],{"class":916},[324,5430,1804],{"class":867},[324,5432,913],{"class":863},[324,5434,5009],{"class":867},[324,5436,5437],{"class":326,"line":2485},[324,5438,5439],{"class":867},"            }\n",[324,5441,5442],{"class":326,"line":2490},[324,5443,3258],{"class":867},[324,5445,5446],{"class":326,"line":2495},[324,5447,2917],{"class":867},[324,5449,5450,5452,5454,5457,5459],{"class":326,"line":2509},[324,5451,2282],{"class":867},[324,5453,1908],{"class":863},[324,5455,5456],{"class":738},"\"排序后：\"",[324,5458,1908],{"class":863},[324,5460,1930],{"class":867},[324,5462,5463,5465,5467,5469,5471,5473,5475,5477,5479,5481,5483,5485],{"class":326,"line":2514},[324,5464,3930],{"class":863},[324,5466,2389],{"class":867},[324,5468,871],{"class":863},[324,5470,3761],{"class":867},[324,5472,913],{"class":863},[324,5474,1056],{"class":916},[324,5476,3768],{"class":867},[324,5478,1774],{"class":863},[324,5480,1284],{"class":916},[324,5482,3768],{"class":867},[324,5484,3022],{"class":863},[324,5486,874],{"class":867},[324,5488,5489],{"class":326,"line":3306},[324,5490,2760],{"class":867},[324,5492,5493,5495,5497,5499,5501,5503],{"class":326,"line":3320},[324,5494,4180],{"class":867},[324,5496,1908],{"class":863},[324,5498,5083],{"class":867},[324,5500,1908],{"class":863},[324,5502,5088],{"class":738},[324,5504,2025],{"class":867},[324,5506,5507],{"class":326,"line":3328},[324,5508,2917],{"class":867},[324,5510,5511,5513,5515],{"class":326,"line":3333},[324,5512,4819],{"class":863},[324,5514,4822],{"class":916},[324,5516,2025],{"class":867},[324,5518,5519],{"class":326,"line":3339},[324,5520,2296],{"class":867},[35,5522,5524],{"id":5523},"_172二维数组","1.7.2二维数组",[192,5526,5527],{},[195,5528,5529],{},"二维数组的四种定义方式",[1003,5531,5532,5541],{},[1006,5533,5534],{},[1009,5535,5536,5539],{},[1012,5537,5538],{},"序号",[1012,5540,4510],{},[1049,5542,5543,5553,5562,5571,5580],{},[1009,5544,5545,5547],{},[1054,5546,1082],{},[1054,5548,5549,5550,923],{},"数据类型 数组名[行数]",[324,5551,5552],{},"列数",[1009,5554,5555,5557],{},[1054,5556,944],{},[1054,5558,5549,5559,5561],{},[324,5560,5552],{},"={ {数据1,数据2}，{数据3，数据4}... }",[1009,5563,5564,5566],{},[1054,5565,938],{},[1054,5567,5549,5568,5570],{},[324,5569,5552],{},"={数据1,数据2,数据3...}",[1009,5572,5573,5575],{},[1054,5574,1157],{},[1054,5576,5577,5578,5570],{},"数据类型 数组名[]",[324,5579,5552],{},[1009,5581,5582,5585],{},[1054,5583,5584],{},"注意：不能只省略列数",[1054,5586],{},[192,5588,5589],{"start":203},[195,5590,5591],{},"二维数组数组名",[1871,5593,5594,5597],{},[195,5595,5596],{},"1.查看二维数组所占内存空间",[195,5598,5599],{},"2.获取二维数组首地址",[19,5601,5602],{},"已知二维数组，求二维数组的行数与列数",[316,5604,5606],{"className":854,"code":5605,"language":856,"meta":50,"style":50},"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",[269,5607,5608,5616,5620,5638,5642,5660,5676,5681,5706,5739],{"__ignoreMap":50},[324,5609,5610,5612,5614],{"class":326,"line":327},[324,5611,871],{"class":863},[324,5613,2703],{"class":734},[324,5615,2706],{"class":867},[324,5617,5618],{"class":326,"line":203},[324,5619,2277],{"class":867},[324,5621,5622,5624,5626,5628,5631,5633,5635],{"class":326,"line":338},[324,5623,2715],{"class":863},[324,5625,4691],{"class":867},[324,5627,944],{"class":916},[324,5629,5630],{"class":867},"][",[324,5632,938],{"class":916},[324,5634,1804],{"class":867},[324,5636,5637],{"class":863},"=\n",[324,5639,5640],{"class":326,"line":344},[324,5641,2760],{"class":867},[324,5643,5644,5647,5649,5651,5653,5655,5657],{"class":326,"line":484},[324,5645,5646],{"class":867},"        {",[324,5648,1082],{"class":916},[324,5650,1242],{"class":867},[324,5652,944],{"class":916},[324,5654,1242],{"class":867},[324,5656,938],{"class":916},[324,5658,5659],{"class":867},"},\n",[324,5661,5662,5664,5666,5668,5670,5672,5674],{"class":326,"line":491},[324,5663,5646],{"class":867},[324,5665,1157],{"class":916},[324,5667,1242],{"class":867},[324,5669,1183],{"class":916},[324,5671,1242],{"class":867},[324,5673,1208],{"class":916},[324,5675,2296],{"class":867},[324,5677,5678],{"class":326,"line":496},[324,5679,5680],{"class":867},"    };\n",[324,5682,5683,5685,5687,5690,5692,5694,5696,5698,5700,5702,5704],{"class":326,"line":502},[324,5684,2282],{"class":867},[324,5686,1908],{"class":863},[324,5688,5689],{"class":738},"\"二维数组的行数\"",[324,5691,2104],{"class":863},[324,5693,4935],{"class":867},[324,5695,4938],{"class":863},[324,5697,4580],{"class":867},[324,5699,1056],{"class":916},[324,5701,4945],{"class":867},[324,5703,1908],{"class":863},[324,5705,1930],{"class":867},[324,5707,5708,5710,5712,5715,5717,5719,5721,5723,5725,5727,5729,5731,5733,5735,5737],{"class":326,"line":508},[324,5709,2282],{"class":867},[324,5711,1908],{"class":863},[324,5713,5714],{"class":738},"\"二维数组的列数\"",[324,5716,2104],{"class":863},[324,5718,4580],{"class":867},[324,5720,1056],{"class":916},[324,5722,4945],{"class":867},[324,5724,4938],{"class":863},[324,5726,4580],{"class":867},[324,5728,1056],{"class":916},[324,5730,5630],{"class":867},[324,5732,1056],{"class":916},[324,5734,4945],{"class":867},[324,5736,1908],{"class":863},[324,5738,1930],{"class":867},[324,5740,5741],{"class":326,"line":514},[324,5742,2296],{"class":867},[19,5744,5745],{},"查看二维数组首地址",[316,5747,5749],{"className":854,"code":5748,"language":856,"meta":50,"style":50},"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",[269,5750,5751,5768,5794,5819],{"__ignoreMap":50},[324,5752,5753,5755,5757,5760,5762,5764,5766],{"class":326,"line":327},[324,5754,2101],{"class":867},[324,5756,1908],{"class":863},[324,5758,5759],{"class":738},"\"二维数组首地址：\"",[324,5761,1908],{"class":863},[324,5763,4609],{"class":867},[324,5765,1908],{"class":863},[324,5767,1930],{"class":867},[324,5769,5770,5772,5774,5777,5779,5781,5783,5786,5788,5790,5792],{"class":326,"line":203},[324,5771,2101],{"class":867},[324,5773,1908],{"class":863},[324,5775,5776],{"class":738},"\"二维数组第一行的首地址：\"",[324,5778,1908],{"class":863},[324,5780,868],{"class":867},[324,5782,871],{"class":863},[324,5784,5785],{"class":867},")arr[",[324,5787,1056],{"class":916},[324,5789,1804],{"class":867},[324,5791,1908],{"class":863},[324,5793,1930],{"class":867},[324,5795,5796,5798,5800,5803,5805,5807,5809,5811,5813,5815,5817],{"class":326,"line":338},[324,5797,2101],{"class":867},[324,5799,1908],{"class":863},[324,5801,5802],{"class":738},"\"二维数组第二行的首地址：\"",[324,5804,1908],{"class":863},[324,5806,868],{"class":867},[324,5808,871],{"class":863},[324,5810,5785],{"class":867},[324,5812,1082],{"class":916},[324,5814,1804],{"class":867},[324,5816,1908],{"class":863},[324,5818,1930],{"class":867},[324,5820,5821,5823,5825,5828,5830,5832,5834,5836,5838,5840,5842,5844,5846,5848,5850,5852],{"class":326,"line":344},[324,5822,2101],{"class":867},[324,5824,1908],{"class":863},[324,5826,5827],{"class":738},"\"二维数组第一个元素的首地址:\"",[324,5829,1908],{"class":863},[324,5831,868],{"class":867},[324,5833,871],{"class":863},[324,5835,1293],{"class":867},[324,5837,1217],{"class":863},[324,5839,4635],{"class":867},[324,5841,1056],{"class":916},[324,5843,5630],{"class":867},[324,5845,1056],{"class":916},[324,5847,1804],{"class":867},[324,5849,1908],{"class":863},[324,5851,1973],{"class":867},[324,5853,5854],{"class":772},"\u002F\u002F对于数，要加取址符\n",[775,5856,5857],{},"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":50,"searchDepth":203,"depth":203,"links":5859},[5860,5861,5862,5870,5871,5877,5882],{"id":809,"depth":203,"text":810},{"id":816,"depth":203,"text":817},{"id":831,"depth":203,"text":832,"children":5863},[5864,5865,5866,5867,5868,5869],{"id":835,"depth":338,"text":836},{"id":884,"depth":338,"text":885},{"id":952,"depth":338,"text":953},{"id":1889,"depth":338,"text":1890},{"id":1979,"depth":338,"text":1980},{"id":2075,"depth":338,"text":2076},{"id":2117,"depth":203,"text":2118},{"id":2185,"depth":203,"text":2186,"children":5872},[5873,5874,5875,5876],{"id":2189,"depth":338,"text":2190},{"id":2210,"depth":338,"text":2211},{"id":2219,"depth":338,"text":2220},{"id":2228,"depth":338,"text":2229},{"id":2237,"depth":203,"text":2238,"children":5878},[5879,5880,5881],{"id":2241,"depth":338,"text":2242},{"id":2935,"depth":338,"text":2936},{"id":4350,"depth":338,"text":4351},{"id":4491,"depth":203,"text":4492,"children":5883},[5884,5885],{"id":4495,"depth":338,"text":4496},{"id":5523,"depth":338,"text":5524},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch1",{"title":801,"description":50},"wiki\u002F2026-05-24-c++学习\u002Fch1-基本认识","1r5xXbZS-drkqvsSKedLALMb9rI8Aqwv0jRzCBXrWss",{"id":5892,"title":5893,"body":5894,"description":50,"extension":792,"meta":6994,"navigation":487,"path":6995,"seo":6996,"stem":6997,"__hash__":6998},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch2-函数.md","2.函数",{"type":7,"value":5895,"toc":6986},[5896,5899,5903,5911,5919,5922,5988,5992,5995,6071,6075,6078,6081,6084,6297,6301,6306,6370,6375,6442,6447,6538,6541,6646,6650,6653,6659,6803,6807,6810,6824,6827,6872,6875,6983],[10,5897,5893],{"id":5898},"_2函数",[14,5900,5902],{"id":5901},"_21函数概述","2.1函数概述",[192,5904,5905,5908],{},[195,5906,5907],{},"函数的定义一般主要有5个步骤：返回值类型、函数名、参数表列、函数体语句、return表达式",[195,5909,5910],{},"语法：",[316,5912,5917],{"className":5913,"code":5915,"language":5916,"meta":50},[5914],"language-text","返回值类型 函数名 （参数列表）\n{\n    函数体语句\n    return 表达式\n}\n","text",[269,5918,5915],{"__ignoreMap":50},[19,5920,5921],{},"小案例",[316,5923,5925],{"className":854,"code":5924,"language":856,"meta":50,"style":50},"\u002F\u002Fnum1,num2形参\nint add(int num1,int num2)\n{\n    int sum=num1+num2;\n    return sum;\n}\n",[269,5926,5927,5932,5956,5960,5977,5984],{"__ignoreMap":50},[324,5928,5929],{"class":326,"line":327},[324,5930,5931],{"class":772},"\u002F\u002Fnum1,num2形参\n",[324,5933,5934,5936,5939,5941,5943,5947,5949,5951,5954],{"class":326,"line":203},[324,5935,871],{"class":863},[324,5937,5938],{"class":734}," add",[324,5940,868],{"class":867},[324,5942,871],{"class":863},[324,5944,5946],{"class":5945},"s4XuR"," num1",[324,5948,1242],{"class":867},[324,5950,871],{"class":863},[324,5952,5953],{"class":5945}," num2",[324,5955,874],{"class":867},[324,5957,5958],{"class":326,"line":338},[324,5959,2277],{"class":867},[324,5961,5962,5964,5967,5969,5972,5974],{"class":326,"line":344},[324,5963,2715],{"class":863},[324,5965,5966],{"class":867}," sum",[324,5968,913],{"class":863},[324,5970,5971],{"class":867},"num1",[324,5973,1345],{"class":863},[324,5975,5976],{"class":867},"num2;\n",[324,5978,5979,5981],{"class":326,"line":484},[324,5980,4819],{"class":863},[324,5982,5983],{"class":867}," sum;\n",[324,5985,5986],{"class":326,"line":491},[324,5987,2296],{"class":867},[14,5989,5991],{"id":5990},"_22函数调用","2.2函数调用",[19,5993,5994],{},"调用刚刚写的求和函数",[316,5996,5998],{"className":854,"code":5997,"language":856,"meta":50,"style":50},"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",[269,5999,6000,6008,6012,6017,6029,6041,6050,6055,6067],{"__ignoreMap":50},[324,6001,6002,6004,6006],{"class":326,"line":327},[324,6003,871],{"class":863},[324,6005,2703],{"class":734},[324,6007,2706],{"class":867},[324,6009,6010],{"class":326,"line":203},[324,6011,2277],{"class":867},[324,6013,6014],{"class":326,"line":338},[324,6015,6016],{"class":772},"    \u002F\u002Fa,b实参\n",[324,6018,6019,6021,6023,6025,6027],{"class":326,"line":344},[324,6020,2715],{"class":863},[324,6022,2130],{"class":867},[324,6024,913],{"class":863},[324,6026,1056],{"class":916},[324,6028,2025],{"class":867},[324,6030,6031,6033,6035,6037,6039],{"class":326,"line":484},[324,6032,2715],{"class":863},[324,6034,3562],{"class":867},[324,6036,913],{"class":863},[324,6038,1056],{"class":916},[324,6040,2025],{"class":867},[324,6042,6043,6045,6047],{"class":326,"line":491},[324,6044,2742],{"class":867},[324,6046,2161],{"class":863},[324,6048,6049],{"class":867},"a,b;\n",[324,6051,6052],{"class":326,"line":496},[324,6053,6054],{"class":772},"    \u002F\u002F调用函数时，实参值传给了形参\n",[324,6056,6057,6059,6061,6064],{"class":326,"line":502},[324,6058,2282],{"class":867},[324,6060,1908],{"class":863},[324,6062,6063],{"class":734},"add",[324,6065,6066],{"class":867},"(a,b);\n",[324,6068,6069],{"class":326,"line":508},[324,6070,2296],{"class":867},[14,6072,6074],{"id":6073},"_23值传递","2.3值传递",[19,6076,6077],{},"值传递就是函数调用时实参将数值传给形参",[19,6079,6080],{},"值传递时，如果形参发生任何改变，不会影响实参",[19,6082,6083],{},"如果函数不需要返回值，声明的时候可以写void,此时函数返回值可以写return；或者直接不写",[316,6085,6087],{"className":854,"code":6086,"language":856,"meta":50,"style":50},"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",[269,6088,6089,6111,6115,6128,6145,6163,6174,6183,6192,6205,6221,6237,6246,6250,6258,6262,6274,6286,6293],{"__ignoreMap":50},[324,6090,6091,6094,6097,6099,6101,6103,6105,6107,6109],{"class":326,"line":327},[324,6092,6093],{"class":863},"void",[324,6095,6096],{"class":734}," swap",[324,6098,868],{"class":867},[324,6100,871],{"class":863},[324,6102,5946],{"class":5945},[324,6104,1242],{"class":867},[324,6106,871],{"class":863},[324,6108,5953],{"class":5945},[324,6110,874],{"class":867},[324,6112,6113],{"class":326,"line":203},[324,6114,2277],{"class":867},[324,6116,6117,6119,6121,6124,6126],{"class":326,"line":338},[324,6118,2282],{"class":867},[324,6120,1908],{"class":863},[324,6122,6123],{"class":738},"\"交换前：\"",[324,6125,1908],{"class":863},[324,6127,1930],{"class":867},[324,6129,6130,6132,6134,6137,6139,6141,6143],{"class":326,"line":344},[324,6131,2282],{"class":867},[324,6133,1908],{"class":863},[324,6135,6136],{"class":738},"\"num1=\"",[324,6138,1908],{"class":863},[324,6140,5971],{"class":867},[324,6142,1908],{"class":863},[324,6144,1930],{"class":867},[324,6146,6147,6149,6151,6154,6156,6159,6161],{"class":326,"line":484},[324,6148,2282],{"class":867},[324,6150,1908],{"class":863},[324,6152,6153],{"class":738},"\"num2=\"",[324,6155,1908],{"class":863},[324,6157,6158],{"class":867},"num2",[324,6160,1908],{"class":863},[324,6162,1930],{"class":867},[324,6164,6165,6167,6169,6171],{"class":326,"line":491},[324,6166,2715],{"class":863},[324,6168,4984],{"class":867},[324,6170,913],{"class":863},[324,6172,6173],{"class":867},"num1;\n",[324,6175,6176,6179,6181],{"class":326,"line":496},[324,6177,6178],{"class":867},"    num1",[324,6180,913],{"class":863},[324,6182,5976],{"class":867},[324,6184,6185,6188,6190],{"class":326,"line":502},[324,6186,6187],{"class":867},"    num2",[324,6189,913],{"class":863},[324,6191,5009],{"class":867},[324,6193,6194,6196,6198,6201,6203],{"class":326,"line":508},[324,6195,2282],{"class":867},[324,6197,1908],{"class":863},[324,6199,6200],{"class":738},"\"交换后：\"",[324,6202,1908],{"class":863},[324,6204,1930],{"class":867},[324,6206,6207,6209,6211,6213,6215,6217,6219],{"class":326,"line":514},[324,6208,2282],{"class":867},[324,6210,1908],{"class":863},[324,6212,6136],{"class":738},[324,6214,1908],{"class":863},[324,6216,5971],{"class":867},[324,6218,1908],{"class":863},[324,6220,1930],{"class":867},[324,6222,6223,6225,6227,6229,6231,6233,6235],{"class":326,"line":2343},[324,6224,2282],{"class":867},[324,6226,1908],{"class":863},[324,6228,6153],{"class":738},[324,6230,1908],{"class":863},[324,6232,6158],{"class":867},[324,6234,1908],{"class":863},[324,6236,1930],{"class":867},[324,6238,6239,6241,6243],{"class":326,"line":2348},[324,6240,4819],{"class":863},[324,6242,923],{"class":867},[324,6244,6245],{"class":772},"\u002F\u002F或者不写\n",[324,6247,6248],{"class":326,"line":2354},[324,6249,2296],{"class":867},[324,6251,6252,6254,6256],{"class":326,"line":2359},[324,6253,871],{"class":863},[324,6255,2703],{"class":734},[324,6257,2706],{"class":867},[324,6259,6260],{"class":326,"line":2373},[324,6261,2277],{"class":867},[324,6263,6264,6266,6268,6270,6272],{"class":326,"line":2378},[324,6265,2715],{"class":863},[324,6267,2130],{"class":867},[324,6269,913],{"class":863},[324,6271,1310],{"class":916},[324,6273,2025],{"class":867},[324,6275,6276,6278,6280,6282,6284],{"class":326,"line":2384},[324,6277,2715],{"class":863},[324,6279,3562],{"class":867},[324,6281,913],{"class":863},[324,6283,1564],{"class":916},[324,6285,2025],{"class":867},[324,6287,6288,6291],{"class":326,"line":2405},[324,6289,6290],{"class":734},"    swap",[324,6292,6066],{"class":867},[324,6294,6295],{"class":326,"line":2410},[324,6296,2296],{"class":867},[14,6298,6300],{"id":6299},"_24函数的常见形式","2.4函数的常见形式",[192,6302,6303],{},[195,6304,6305],{},"无参无返",[316,6307,6309],{"className":854,"code":6308,"language":856,"meta":50,"style":50},"void test01()\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    \u002F\u002F函数调用\n    test01();\n}\n",[269,6310,6311,6320,6324,6337,6341,6349,6353,6358,6366],{"__ignoreMap":50},[324,6312,6313,6315,6318],{"class":326,"line":327},[324,6314,6093],{"class":863},[324,6316,6317],{"class":734}," test01",[324,6319,2706],{"class":867},[324,6321,6322],{"class":326,"line":203},[324,6323,2277],{"class":867},[324,6325,6326,6328,6330,6333,6335],{"class":326,"line":338},[324,6327,2282],{"class":867},[324,6329,1908],{"class":863},[324,6331,6332],{"class":738},"\"你好\"",[324,6334,1908],{"class":863},[324,6336,1930],{"class":867},[324,6338,6339],{"class":326,"line":344},[324,6340,2296],{"class":867},[324,6342,6343,6345,6347],{"class":326,"line":484},[324,6344,871],{"class":863},[324,6346,2703],{"class":734},[324,6348,2706],{"class":867},[324,6350,6351],{"class":326,"line":491},[324,6352,2277],{"class":867},[324,6354,6355],{"class":326,"line":496},[324,6356,6357],{"class":772},"    \u002F\u002F函数调用\n",[324,6359,6360,6363],{"class":326,"line":502},[324,6361,6362],{"class":734},"    test01",[324,6364,6365],{"class":867},"();\n",[324,6367,6368],{"class":326,"line":508},[324,6369,2296],{"class":867},[192,6371,6372],{"start":203},[195,6373,6374],{},"有参无返",[316,6376,6378],{"className":854,"code":6377,"language":856,"meta":50,"style":50},"void test02(int a)\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    test02(100);\n}\n",[269,6379,6380,6395,6399,6411,6415,6423,6427,6438],{"__ignoreMap":50},[324,6381,6382,6384,6387,6389,6391,6393],{"class":326,"line":327},[324,6383,6093],{"class":863},[324,6385,6386],{"class":734}," test02",[324,6388,868],{"class":867},[324,6390,871],{"class":863},[324,6392,2130],{"class":5945},[324,6394,874],{"class":867},[324,6396,6397],{"class":326,"line":203},[324,6398,2277],{"class":867},[324,6400,6401,6403,6405,6407,6409],{"class":326,"line":338},[324,6402,2282],{"class":867},[324,6404,1908],{"class":863},[324,6406,6332],{"class":738},[324,6408,1908],{"class":863},[324,6410,1930],{"class":867},[324,6412,6413],{"class":326,"line":344},[324,6414,2296],{"class":867},[324,6416,6417,6419,6421],{"class":326,"line":484},[324,6418,871],{"class":863},[324,6420,2703],{"class":734},[324,6422,2706],{"class":867},[324,6424,6425],{"class":326,"line":491},[324,6426,2277],{"class":867},[324,6428,6429,6432,6434,6436],{"class":326,"line":496},[324,6430,6431],{"class":734},"    test02",[324,6433,868],{"class":867},[324,6435,1175],{"class":916},[324,6437,3448],{"class":867},[324,6439,6440],{"class":326,"line":502},[324,6441,2296],{"class":867},[192,6443,6444],{"start":338},[195,6445,6446],{},"无参有返",[316,6448,6450],{"className":854,"code":6449,"language":856,"meta":50,"style":50},"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",[269,6451,6452,6461,6465,6477,6486,6490,6498,6502,6515,6534],{"__ignoreMap":50},[324,6453,6454,6456,6459],{"class":326,"line":327},[324,6455,871],{"class":863},[324,6457,6458],{"class":734}," test03",[324,6460,2706],{"class":867},[324,6462,6463],{"class":326,"line":203},[324,6464,2277],{"class":867},[324,6466,6467,6469,6471,6473,6475],{"class":326,"line":338},[324,6468,2282],{"class":867},[324,6470,1908],{"class":863},[324,6472,6332],{"class":738},[324,6474,1908],{"class":863},[324,6476,1930],{"class":867},[324,6478,6479,6481,6484],{"class":326,"line":344},[324,6480,4819],{"class":863},[324,6482,6483],{"class":916}," 100",[324,6485,2025],{"class":867},[324,6487,6488],{"class":326,"line":484},[324,6489,2296],{"class":867},[324,6491,6492,6494,6496],{"class":326,"line":491},[324,6493,871],{"class":863},[324,6495,2703],{"class":734},[324,6497,2706],{"class":867},[324,6499,6500],{"class":326,"line":496},[324,6501,2277],{"class":867},[324,6503,6504,6506,6508,6510,6513],{"class":326,"line":502},[324,6505,2715],{"class":863},[324,6507,5946],{"class":867},[324,6509,913],{"class":863},[324,6511,6512],{"class":734},"test03",[324,6514,6365],{"class":867},[324,6516,6517,6519,6521,6523,6525,6527,6529,6531],{"class":326,"line":508},[324,6518,2282],{"class":867},[324,6520,1908],{"class":863},[324,6522,6136],{"class":738},[324,6524,1908],{"class":863},[324,6526,5971],{"class":867},[324,6528,1908],{"class":863},[324,6530,1973],{"class":867},[324,6532,6533],{"class":772}," \u002F\u002F100\n",[324,6535,6536],{"class":326,"line":514},[324,6537,2296],{"class":867},[19,6539,6540],{},"4.有参有返",[316,6542,6544],{"className":854,"code":6543,"language":856,"meta":50,"style":50},"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",[269,6545,6546,6561,6565,6578,6584,6588,6597,6601,6613,6627,6642],{"__ignoreMap":50},[324,6547,6548,6550,6553,6555,6557,6559],{"class":326,"line":327},[324,6549,871],{"class":863},[324,6551,6552],{"class":734}," test04",[324,6554,868],{"class":867},[324,6556,871],{"class":863},[324,6558,2130],{"class":5945},[324,6560,874],{"class":867},[324,6562,6563],{"class":326,"line":203},[324,6564,2277],{"class":867},[324,6566,6567,6569,6571,6574,6576],{"class":326,"line":338},[324,6568,2282],{"class":867},[324,6570,1908],{"class":863},[324,6572,6573],{"class":738},"\"hello\"",[324,6575,1908],{"class":863},[324,6577,1930],{"class":867},[324,6579,6580,6582],{"class":326,"line":344},[324,6581,4819],{"class":863},[324,6583,2164],{"class":867},[324,6585,6586],{"class":326,"line":484},[324,6587,2296],{"class":867},[324,6589,6590,6592,6595],{"class":326,"line":491},[324,6591,871],{"class":863},[324,6593,6594],{"class":734}," mian",[324,6596,2706],{"class":867},[324,6598,6599],{"class":326,"line":496},[324,6600,2277],{"class":867},[324,6602,6603,6605,6607,6609,6611],{"class":326,"line":502},[324,6604,2715],{"class":863},[324,6606,3562],{"class":867},[324,6608,913],{"class":863},[324,6610,1082],{"class":916},[324,6612,2025],{"class":867},[324,6614,6615,6617,6619,6621,6624],{"class":326,"line":508},[324,6616,2715],{"class":863},[324,6618,3578],{"class":867},[324,6620,913],{"class":863},[324,6622,6623],{"class":734},"test04",[324,6625,6626],{"class":867},"(b);\n",[324,6628,6629,6631,6633,6635,6637,6639],{"class":326,"line":514},[324,6630,2282],{"class":867},[324,6632,1908],{"class":863},[324,6634,1152],{"class":867},[324,6636,1908],{"class":863},[324,6638,1973],{"class":867},[324,6640,6641],{"class":772}," \u002F\u002F1\n",[324,6643,6644],{"class":326,"line":2343},[324,6645,2296],{"class":867},[14,6647,6649],{"id":6648},"_25函数的声明","2.5函数的声明",[19,6651,6652],{},"作用：告诉编译器函数名称以及如何调用函数，函数的实际主体可以单独定义",[19,6654,6655,6656],{},"函数的",[116,6657,6658],{},"声明可以多次，但是函数的定义只能有一次",[316,6660,6662],{"className":854,"code":6661,"language":856,"meta":50,"style":50},"\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",[269,6663,6664,6669,6674,6699,6708,6712,6724,6736,6752,6756,6776,6780,6799],{"__ignoreMap":50},[324,6665,6666],{"class":326,"line":327},[324,6667,6668],{"class":772},"\u002F\u002F函数声明\n",[324,6670,6671],{"class":326,"line":203},[324,6672,6673],{"class":772},"\u002F\u002F比较函数，实现两个整型数字进行比较，返回较大的值\n",[324,6675,6676,6678,6681,6683,6685,6687,6689,6691,6693,6696],{"class":326,"line":338},[324,6677,871],{"class":863},[324,6679,6680],{"class":734}," max",[324,6682,868],{"class":867},[324,6684,871],{"class":863},[324,6686,2130],{"class":5945},[324,6688,1242],{"class":867},[324,6690,871],{"class":863},[324,6692,3562],{"class":5945},[324,6694,6695],{"class":867},");",[324,6697,6698],{"class":772},"\u002F\u002F这样函数就可以写在后面，不报错了\n",[324,6700,6701,6703,6705],{"class":326,"line":344},[324,6702,871],{"class":863},[324,6704,2703],{"class":734},[324,6706,6707],{"class":867},"() \n",[324,6709,6710],{"class":326,"line":484},[324,6711,2277],{"class":867},[324,6713,6714,6716,6718,6720,6722],{"class":326,"line":491},[324,6715,2715],{"class":863},[324,6717,2130],{"class":867},[324,6719,913],{"class":863},[324,6721,1310],{"class":916},[324,6723,2025],{"class":867},[324,6725,6726,6728,6730,6732,6734],{"class":326,"line":496},[324,6727,2715],{"class":863},[324,6729,3562],{"class":867},[324,6731,913],{"class":863},[324,6733,1564],{"class":916},[324,6735,2025],{"class":867},[324,6737,6738,6740,6742,6745,6748,6750],{"class":326,"line":502},[324,6739,2282],{"class":867},[324,6741,1908],{"class":863},[324,6743,6744],{"class":734},"max",[324,6746,6747],{"class":867},"(a,b)",[324,6749,1908],{"class":863},[324,6751,1930],{"class":867},[324,6753,6754],{"class":326,"line":508},[324,6755,2296],{"class":867},[324,6757,6758,6760,6762,6764,6766,6768,6770,6772,6774],{"class":326,"line":514},[324,6759,871],{"class":863},[324,6761,6680],{"class":734},[324,6763,868],{"class":867},[324,6765,871],{"class":863},[324,6767,2130],{"class":5945},[324,6769,1242],{"class":867},[324,6771,871],{"class":863},[324,6773,3562],{"class":5945},[324,6775,874],{"class":867},[324,6777,6778],{"class":326,"line":2343},[324,6779,2277],{"class":867},[324,6781,6782,6784,6786,6788,6790,6792,6794,6796],{"class":326,"line":2348},[324,6783,4819],{"class":863},[324,6785,2130],{"class":867},[324,6787,1824],{"class":863},[324,6789,1127],{"class":867},[324,6791,1850],{"class":863},[324,6793,25],{"class":867},[324,6795,1723],{"class":863},[324,6797,6798],{"class":867},"b;\n",[324,6800,6801],{"class":326,"line":2354},[324,6802,2296],{"class":867},[14,6804,6806],{"id":6805},"_26函数的分文件编写","2.6函数的分文件编写",[19,6808,6809],{},"4个步骤：",[1871,6811,6812,6815,6818,6821],{},[195,6813,6814],{},"1.创建后缀名为.h的头文件",[195,6816,6817],{},"2.创建后缀名为.cpp的源文件",[195,6819,6820],{},"3.在头文件中写函数的定义",[195,6822,6823],{},"4.在源文件中写函数的定义\n示例：",[19,6825,6826],{},"头文件：swap.h",[316,6828,6830],{"className":854,"code":6829,"language":856,"meta":50,"style":50},"#include\u003Ciostream>\nusing namespace std;\n\u002F\u002F函数声明\nvoid swap(int a,int b);\n",[269,6831,6832,6838,6848,6852],{"__ignoreMap":50},[324,6833,6834,6836],{"class":326,"line":327},[324,6835,2680],{"class":863},[324,6837,2683],{"class":738},[324,6839,6840,6842,6844,6846],{"class":326,"line":203},[324,6841,2688],{"class":863},[324,6843,2691],{"class":863},[324,6845,2694],{"class":734},[324,6847,2025],{"class":867},[324,6849,6850],{"class":326,"line":338},[324,6851,6668],{"class":772},[324,6853,6854,6856,6858,6860,6862,6864,6866,6868,6870],{"class":326,"line":344},[324,6855,6093],{"class":863},[324,6857,6096],{"class":734},[324,6859,868],{"class":867},[324,6861,871],{"class":863},[324,6863,2130],{"class":5945},[324,6865,1242],{"class":867},[324,6867,871],{"class":863},[324,6869,3562],{"class":5945},[324,6871,3448],{"class":867},[19,6873,6874],{},"源文件：swap.cpp",[316,6876,6878],{"className":854,"code":6877,"language":856,"meta":50,"style":50},"#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",[269,6879,6880,6887,6892,6912,6916,6927,6936,6945,6962,6979],{"__ignoreMap":50},[324,6881,6882,6884],{"class":326,"line":327},[324,6883,2680],{"class":863},[324,6885,6886],{"class":738}," \"swap.h\"\n",[324,6888,6889],{"class":326,"line":203},[324,6890,6891],{"class":772},"\u002F\u002F函数的定义\n",[324,6893,6894,6896,6898,6900,6902,6904,6906,6908,6910],{"class":326,"line":338},[324,6895,6093],{"class":863},[324,6897,6096],{"class":734},[324,6899,868],{"class":867},[324,6901,871],{"class":863},[324,6903,2130],{"class":5945},[324,6905,1242],{"class":867},[324,6907,871],{"class":863},[324,6909,3562],{"class":5945},[324,6911,874],{"class":867},[324,6913,6914],{"class":326,"line":344},[324,6915,2277],{"class":867},[324,6917,6918,6920,6922,6924],{"class":326,"line":484},[324,6919,2715],{"class":863},[324,6921,4984],{"class":867},[324,6923,913],{"class":863},[324,6925,6926],{"class":867},"a;\n",[324,6928,6929,6932,6934],{"class":326,"line":491},[324,6930,6931],{"class":867},"    a",[324,6933,913],{"class":863},[324,6935,6798],{"class":867},[324,6937,6938,6941,6943],{"class":326,"line":496},[324,6939,6940],{"class":867},"    b",[324,6942,913],{"class":863},[324,6944,5009],{"class":867},[324,6946,6947,6949,6951,6954,6956,6958,6960],{"class":326,"line":502},[324,6948,2282],{"class":867},[324,6950,1908],{"class":863},[324,6952,6953],{"class":738},"\"a=\"",[324,6955,1908],{"class":863},[324,6957,25],{"class":867},[324,6959,1908],{"class":863},[324,6961,1930],{"class":867},[324,6963,6964,6966,6968,6971,6973,6975,6977],{"class":326,"line":508},[324,6965,2282],{"class":867},[324,6967,1908],{"class":863},[324,6969,6970],{"class":738},"\"b=\"",[324,6972,1908],{"class":863},[324,6974,1127],{"class":867},[324,6976,1908],{"class":863},[324,6978,1930],{"class":867},[324,6980,6981],{"class":326,"line":514},[324,6982,2296],{"class":867},[775,6984,6985],{},"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":50,"searchDepth":203,"depth":203,"links":6987},[6988,6989,6990,6991,6992,6993],{"id":5901,"depth":203,"text":5902},{"id":5990,"depth":203,"text":5991},{"id":6073,"depth":203,"text":6074},{"id":6299,"depth":203,"text":6300},{"id":6648,"depth":203,"text":6649},{"id":6805,"depth":203,"text":6806},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch2",{"title":5893,"description":50},"wiki\u002F2026-05-24-c++学习\u002Fch2-函数","u7fvjnBVwC9MwO8e-TA4xJeO-qzH_msHECf1fhCEVWc",{"id":7000,"title":7001,"body":7002,"description":7009,"extension":792,"meta":8414,"navigation":487,"path":8415,"seo":8416,"stem":8417,"__hash__":8418},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch3-指针.md","3.指针",{"type":7,"value":7003,"toc":8404},[7004,7007,7010,7014,7176,7180,7183,7186,7189,7192,7332,7336,7339,7342,7345,7410,7414,7419,7486,7489,7493,7496,7507,7512,7532,7535,7540,7559,7562,7566,7585,7588,7592,7827,7831,7834,7837,7840,8002,8005,8009,8012,8018,8401],[10,7005,7001],{"id":7006},"_3指针",[19,7008,7009],{},"通过指针保存一个地址，指针就是个地址",[14,7011,7013],{"id":7012},"_31定义指针","3.1定义指针",[316,7015,7017],{"className":854,"code":7016,"language":856,"meta":50,"style":50},"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",[269,7018,7019,7027,7031,7036,7048,7053,7061,7071,7089,7109,7113,7118,7123,7128,7142,7158,7172],{"__ignoreMap":50},[324,7020,7021,7023,7025],{"class":326,"line":327},[324,7022,871],{"class":863},[324,7024,2703],{"class":734},[324,7026,2706],{"class":867},[324,7028,7029],{"class":326,"line":203},[324,7030,2277],{"class":867},[324,7032,7033],{"class":326,"line":338},[324,7034,7035],{"class":772},"    \u002F\u002F1.定义指针\n",[324,7037,7038,7040,7042,7044,7046],{"class":326,"line":344},[324,7039,2715],{"class":863},[324,7041,2130],{"class":867},[324,7043,913],{"class":863},[324,7045,1310],{"class":916},[324,7047,2025],{"class":867},[324,7049,7050],{"class":326,"line":484},[324,7051,7052],{"class":772},"    \u002F\u002F指针定义语法：数据类型*指针变量名;\n",[324,7054,7055,7058],{"class":326,"line":491},[324,7056,7057],{"class":863},"    int*",[324,7059,7060],{"class":867},"p;\n",[324,7062,7063,7066,7069],{"class":326,"line":496},[324,7064,7065],{"class":867},"    p",[324,7067,7068],{"class":863},"=&",[324,7070,6926],{"class":867},[324,7072,7073,7075,7077,7080,7083,7085,7087],{"class":326,"line":502},[324,7074,2282],{"class":867},[324,7076,1908],{"class":863},[324,7078,7079],{"class":738},"\"a的地址为：\"",[324,7081,7082],{"class":863},"\u003C\u003C&",[324,7084,25],{"class":867},[324,7086,1908],{"class":863},[324,7088,1930],{"class":867},[324,7090,7091,7093,7095,7098,7100,7102,7104,7106],{"class":326,"line":508},[324,7092,2282],{"class":867},[324,7094,1908],{"class":863},[324,7096,7097],{"class":738},"\"指针p为：\"",[324,7099,1908],{"class":863},[324,7101,19],{"class":867},[324,7103,1908],{"class":863},[324,7105,1973],{"class":867},[324,7107,7108],{"class":772},"\u002F\u002F指针p表示的就是a的地址\n",[324,7110,7111],{"class":326,"line":514},[324,7112,488],{"emptyLinePlaceholder":487},[324,7114,7115],{"class":326,"line":2343},[324,7116,7117],{"class":772},"    \u002F\u002F2.使用指针\n",[324,7119,7120],{"class":326,"line":2348},[324,7121,7122],{"class":772},"    \u002F\u002F可以通过解引用的方式来找到指针指向的内存\n",[324,7124,7125],{"class":326,"line":2354},[324,7126,7127],{"class":772},"    \u002F\u002F指针前加*代表解引用，找到指针指向的内存中的数据\n",[324,7129,7130,7133,7135,7137,7140],{"class":326,"line":2359},[324,7131,7132],{"class":863},"    *",[324,7134,19],{"class":867},[324,7136,913],{"class":863},[324,7138,7139],{"class":916},"1000",[324,7141,2025],{"class":867},[324,7143,7144,7146,7149,7151,7153,7155],{"class":326,"line":2373},[324,7145,2282],{"class":867},[324,7147,7148],{"class":863},"\u003C\u003C*",[324,7150,19],{"class":867},[324,7152,1908],{"class":863},[324,7154,1973],{"class":867},[324,7156,7157],{"class":772},"\u002F\u002F1000\n",[324,7159,7160,7162,7164,7166,7168,7170],{"class":326,"line":2378},[324,7161,2282],{"class":867},[324,7163,1908],{"class":863},[324,7165,25],{"class":867},[324,7167,1908],{"class":863},[324,7169,1973],{"class":867},[324,7171,7157],{"class":772},[324,7173,7174],{"class":326,"line":2384},[324,7175,2296],{"class":867},[14,7177,7179],{"id":7178},"_32指针所占的内存空间","3.2指针所占的内存空间",[19,7181,7182],{},"要注意：指针也是一种数据类型，也是要占内存空间的",[19,7184,7185],{},"在32位操作系统下：占用4个字节空间",[19,7187,7188],{},"在64位操作系统下：占用8个字节空间",[19,7190,7191],{},"上方是不管啥数据类型的",[316,7193,7195],{"className":854,"code":7194,"language":856,"meta":50,"style":50},"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",[269,7196,7197,7205,7209,7214,7226,7231,7236,7241,7254,7276,7302,7328],{"__ignoreMap":50},[324,7198,7199,7201,7203],{"class":326,"line":327},[324,7200,871],{"class":863},[324,7202,2703],{"class":734},[324,7204,2706],{"class":867},[324,7206,7207],{"class":326,"line":203},[324,7208,2277],{"class":867},[324,7210,7211],{"class":326,"line":338},[324,7212,7213],{"class":772},"    \u002F\u002F指针所占内存空间\n",[324,7215,7216,7218,7220,7222,7224],{"class":326,"line":344},[324,7217,2715],{"class":863},[324,7219,2130],{"class":867},[324,7221,913],{"class":863},[324,7223,1310],{"class":916},[324,7225,2025],{"class":867},[324,7227,7228],{"class":326,"line":484},[324,7229,7230],{"class":772},"    \u002F\u002Fint *p;\n",[324,7232,7233],{"class":326,"line":491},[324,7234,7235],{"class":772},"    \u002F\u002Fp=&a;\n",[324,7237,7238],{"class":326,"line":496},[324,7239,7240],{"class":772},"    \u002F\u002F上述可以写为以下：\n",[324,7242,7243,7245,7248,7250,7252],{"class":326,"line":502},[324,7244,2715],{"class":863},[324,7246,7247],{"class":863}," *",[324,7249,19],{"class":867},[324,7251,7068],{"class":863},[324,7253,6926],{"class":867},[324,7255,7256,7259,7261,7264,7266,7269,7271,7273],{"class":326,"line":508},[324,7257,7258],{"class":867},"    cout ",[324,7260,1908],{"class":863},[324,7262,7263],{"class":738},"\"sizeof(int *)\"",[324,7265,2104],{"class":863},[324,7267,7268],{"class":867},"(p)",[324,7270,1908],{"class":863},[324,7272,1973],{"class":867},[324,7274,7275],{"class":772},"\u002F\u002F因为是看数据类型，写int *也可以，因为是int *类型   4字节(32位的话)\n",[324,7277,7278,7280,7282,7284,7286,7288,7290,7292,7294,7296,7299],{"class":326,"line":514},[324,7279,7258],{"class":867},[324,7281,1908],{"class":863},[324,7283,7263],{"class":738},[324,7285,2104],{"class":863},[324,7287,868],{"class":867},[324,7289,871],{"class":863},[324,7291,7247],{"class":863},[324,7293,1293],{"class":867},[324,7295,1908],{"class":863},[324,7297,7298],{"class":867},"endl",[324,7300,7301],{"class":772},"  \u002F\u002F4字节(32位的话)\n",[324,7303,7304,7306,7308,7311,7313,7315,7317,7319,7321,7323,7325],{"class":326,"line":2343},[324,7305,7258],{"class":867},[324,7307,1908],{"class":863},[324,7309,7310],{"class":738},"\"sizeof(char *)\"",[324,7312,2104],{"class":863},[324,7314,868],{"class":867},[324,7316,963],{"class":863},[324,7318,7247],{"class":863},[324,7320,1293],{"class":867},[324,7322,1908],{"class":863},[324,7324,1973],{"class":867},[324,7326,7327],{"class":772}," \u002F\u002F4字节(32位的话)\n",[324,7329,7330],{"class":326,"line":2348},[324,7331,2296],{"class":867},[14,7333,7335],{"id":7334},"_33空指针","3.3空指针",[19,7337,7338],{},"空指针：指针变量指向内存中编号为0的空间",[19,7340,7341],{},"用途：初始化指针变量",[19,7343,7344],{},"注意：空指针指向的内存是不可以访问的",[316,7346,7348],{"className":854,"code":7347,"language":856,"meta":50,"style":50},"int main()\n{\n    \u002F\u002F1.空指针用于给指针变量进行初始化\n    int *p=NULL;\n    \u002F\u002F2.空指针不能进行访问\n    *p=100;\u002F\u002F直接报错，压根不能访问\n    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n}\n",[269,7349,7350,7358,7362,7367,7381,7386,7401,7406],{"__ignoreMap":50},[324,7351,7352,7354,7356],{"class":326,"line":327},[324,7353,871],{"class":863},[324,7355,2703],{"class":734},[324,7357,2706],{"class":867},[324,7359,7360],{"class":326,"line":203},[324,7361,2277],{"class":867},[324,7363,7364],{"class":326,"line":338},[324,7365,7366],{"class":772},"    \u002F\u002F1.空指针用于给指针变量进行初始化\n",[324,7368,7369,7371,7373,7375,7377,7379],{"class":326,"line":344},[324,7370,2715],{"class":863},[324,7372,7247],{"class":863},[324,7374,19],{"class":867},[324,7376,913],{"class":863},[324,7378,3122],{"class":916},[324,7380,2025],{"class":867},[324,7382,7383],{"class":326,"line":484},[324,7384,7385],{"class":772},"    \u002F\u002F2.空指针不能进行访问\n",[324,7387,7388,7390,7392,7394,7396,7398],{"class":326,"line":491},[324,7389,7132],{"class":863},[324,7391,19],{"class":867},[324,7393,913],{"class":863},[324,7395,1175],{"class":916},[324,7397,923],{"class":867},[324,7399,7400],{"class":772},"\u002F\u002F直接报错，压根不能访问\n",[324,7402,7403],{"class":326,"line":496},[324,7404,7405],{"class":772},"    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n",[324,7407,7408],{"class":326,"line":502},[324,7409,2296],{"class":867},[14,7411,7413],{"id":7412},"_34野指针","3.4野指针",[19,7415,7416],{},[116,7417,7418],{},"指针变量指向非法的内存空间",[316,7420,7422],{"className":854,"code":7421,"language":856,"meta":50,"style":50},"int main()\n{\n    int *p=(int *)0x1100; \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n    \u002F\u002F访问野指针报错\n    cout\u003C\u003C*p\u003C\u003Cendl;\n}\n",[269,7423,7424,7432,7436,7465,7470,7482],{"__ignoreMap":50},[324,7425,7426,7428,7430],{"class":326,"line":327},[324,7427,871],{"class":863},[324,7429,2703],{"class":734},[324,7431,2706],{"class":867},[324,7433,7434],{"class":326,"line":203},[324,7435,2277],{"class":867},[324,7437,7438,7440,7442,7444,7446,7448,7450,7452,7454,7457,7460,7462],{"class":326,"line":338},[324,7439,2715],{"class":863},[324,7441,7247],{"class":863},[324,7443,19],{"class":867},[324,7445,913],{"class":863},[324,7447,868],{"class":867},[324,7449,871],{"class":863},[324,7451,7247],{"class":863},[324,7453,1293],{"class":867},[324,7455,7456],{"class":863},"0x",[324,7458,7459],{"class":916},"1100",[324,7461,923],{"class":867},[324,7463,7464],{"class":772}," \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n",[324,7466,7467],{"class":326,"line":344},[324,7468,7469],{"class":772},"    \u002F\u002F访问野指针报错\n",[324,7471,7472,7474,7476,7478,7480],{"class":326,"line":484},[324,7473,2282],{"class":867},[324,7475,7148],{"class":863},[324,7477,19],{"class":867},[324,7479,1908],{"class":863},[324,7481,1930],{"class":867},[324,7483,7484],{"class":326,"line":491},[324,7485,2296],{"class":867},[19,7487,7488],{},"空指针和野指针都不是我们申请的空间，因此不要访问",[14,7490,7492],{"id":7491},"_35const修饰指针","3.5const修饰指针",[19,7494,7495],{},"三种情况：",[1871,7497,7498,7501,7504],{},[195,7499,7500],{},"const修饰指针 常量指针",[195,7502,7503],{},"const修饰常量 指针常量",[195,7505,7506],{},"const即修饰指针，又修饰常量",[192,7508,7509],{},[195,7510,7511],{},"常量指针",[316,7513,7515],{"className":854,"code":7514,"language":856,"meta":50,"style":50},"const int *p=&a;\n",[269,7516,7517],{"__ignoreMap":50},[324,7518,7519,7522,7524,7526,7528,7530],{"class":326,"line":327},[324,7520,7521],{"class":863},"const",[324,7523,3112],{"class":863},[324,7525,7247],{"class":863},[324,7527,19],{"class":867},[324,7529,7068],{"class":863},[324,7531,6926],{"class":867},[19,7533,7534],{},"指针的指向可以修改，但是指针指向的值不可以修改，改为指向地址后，这个地址存的值还是这个值",[192,7536,7537],{"start":203},[195,7538,7539],{},"指针常量",[316,7541,7543],{"className":854,"code":7542,"language":856,"meta":50,"style":50},"int *const p=&a;\n",[269,7544,7545],{"__ignoreMap":50},[324,7546,7547,7549,7552,7555,7557],{"class":326,"line":327},[324,7548,871],{"class":863},[324,7550,7551],{"class":863}," *const",[324,7553,7554],{"class":867}," p",[324,7556,7068],{"class":863},[324,7558,6926],{"class":867},[19,7560,7561],{},"指针的指向不可以改，指针指向的值可以改",[192,7563,7564],{"start":338},[195,7565,7506],{},[316,7567,7569],{"className":854,"code":7568,"language":856,"meta":50,"style":50},"const int *const p=&a;\n",[269,7570,7571],{"__ignoreMap":50},[324,7572,7573,7575,7577,7579,7581,7583],{"class":326,"line":327},[324,7574,7521],{"class":863},[324,7576,3112],{"class":863},[324,7578,7551],{"class":863},[324,7580,7554],{"class":867},[324,7582,7068],{"class":863},[324,7584,6926],{"class":867},[19,7586,7587],{},"指针的指向和指针指向的值都不可以改变",[14,7589,7591],{"id":7590},"_36指针和数组","3.6指针和数组",[316,7593,7595],{"className":854,"code":7594,"language":856,"meta":50,"style":50},"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",[269,7596,7597,7605,7609,7614,7668,7689,7705,7721,7732,7749,7754,7768,7794,7798,7810,7819,7823],{"__ignoreMap":50},[324,7598,7599,7601,7603],{"class":326,"line":327},[324,7600,871],{"class":863},[324,7602,2703],{"class":734},[324,7604,2706],{"class":867},[324,7606,7607],{"class":326,"line":203},[324,7608,2277],{"class":867},[324,7610,7611],{"class":326,"line":338},[324,7612,7613],{"class":772},"    \u002F\u002F利用指针访问数组中的元素\n",[324,7615,7616,7618,7620,7622,7624,7626,7628,7630,7632,7634,7636,7638,7640,7642,7644,7646,7648,7650,7652,7654,7656,7658,7660,7662,7664,7666],{"class":326,"line":344},[324,7617,2715],{"class":863},[324,7619,4691],{"class":867},[324,7621,1310],{"class":916},[324,7623,1804],{"class":867},[324,7625,913],{"class":863},[324,7627,1760],{"class":867},[324,7629,1082],{"class":916},[324,7631,1242],{"class":867},[324,7633,944],{"class":916},[324,7635,1242],{"class":867},[324,7637,938],{"class":916},[324,7639,1242],{"class":867},[324,7641,1157],{"class":916},[324,7643,1242],{"class":867},[324,7645,1183],{"class":916},[324,7647,1242],{"class":867},[324,7649,1208],{"class":916},[324,7651,1242],{"class":867},[324,7653,1233],{"class":916},[324,7655,1242],{"class":867},[324,7657,1259],{"class":916},[324,7659,1242],{"class":867},[324,7661,1284],{"class":916},[324,7663,1242],{"class":867},[324,7665,1310],{"class":916},[324,7667,4724],{"class":867},[324,7669,7670,7672,7674,7677,7679,7681,7683,7685,7687],{"class":326,"line":484},[324,7671,2282],{"class":867},[324,7673,1908],{"class":863},[324,7675,7676],{"class":738},"\"数组的第一个元素为：\"",[324,7678,1908],{"class":863},[324,7680,4635],{"class":867},[324,7682,1056],{"class":916},[324,7684,1804],{"class":867},[324,7686,1908],{"class":863},[324,7688,1930],{"class":867},[324,7690,7691,7693,7695,7697,7699,7702],{"class":326,"line":491},[324,7692,2715],{"class":863},[324,7694,7247],{"class":863},[324,7696,19],{"class":867},[324,7698,913],{"class":863},[324,7700,7701],{"class":867},"arr;",[324,7703,7704],{"class":772},"\u002F\u002F注意数才要加取地址符号&\n",[324,7706,7707,7709,7711,7713,7715,7717,7719],{"class":326,"line":496},[324,7708,2282],{"class":867},[324,7710,1908],{"class":863},[324,7712,7676],{"class":738},[324,7714,7148],{"class":863},[324,7716,19],{"class":867},[324,7718,1908],{"class":863},[324,7720,1930],{"class":867},[324,7722,7723,7725,7727,7729],{"class":326,"line":502},[324,7724,7065],{"class":867},[324,7726,3022],{"class":863},[324,7728,923],{"class":867},[324,7730,7731],{"class":772}," \u002F\u002F让指针向后偏移4个字节\n",[324,7733,7734,7736,7738,7741,7743,7745,7747],{"class":326,"line":508},[324,7735,2282],{"class":867},[324,7737,1908],{"class":863},[324,7739,7740],{"class":738},"\"数组的第二个元素为：\"",[324,7742,7148],{"class":863},[324,7744,19],{"class":867},[324,7746,1908],{"class":863},[324,7748,1930],{"class":867},[324,7750,7751],{"class":326,"line":514},[324,7752,7753],{"class":772},"    \u002F\u002F利用指针遍历数组\n",[324,7755,7756,7758,7760,7763,7765],{"class":326,"line":2343},[324,7757,2715],{"class":863},[324,7759,7247],{"class":863},[324,7761,7762],{"class":867},"p2",[324,7764,913],{"class":863},[324,7766,7767],{"class":867},"arr;\n",[324,7769,7770,7772,7774,7776,7778,7780,7782,7784,7786,7788,7790,7792],{"class":326,"line":2348},[324,7771,3930],{"class":863},[324,7773,2389],{"class":867},[324,7775,871],{"class":863},[324,7777,3761],{"class":867},[324,7779,913],{"class":863},[324,7781,1056],{"class":916},[324,7783,3768],{"class":867},[324,7785,1774],{"class":863},[324,7787,1310],{"class":916},[324,7789,3768],{"class":867},[324,7791,3022],{"class":863},[324,7793,874],{"class":867},[324,7795,7796],{"class":326,"line":2354},[324,7797,2760],{"class":867},[324,7799,7800,7802,7804,7806,7808],{"class":326,"line":2359},[324,7801,4180],{"class":867},[324,7803,7148],{"class":863},[324,7805,7762],{"class":867},[324,7807,1908],{"class":863},[324,7809,1930],{"class":867},[324,7811,7812,7815,7817],{"class":326,"line":2373},[324,7813,7814],{"class":867},"        p2",[324,7816,3022],{"class":863},[324,7818,2025],{"class":867},[324,7820,7821],{"class":326,"line":2378},[324,7822,2917],{"class":867},[324,7824,7825],{"class":326,"line":2384},[324,7826,2296],{"class":867},[14,7828,7830],{"id":7829},"_37指针和函数","3.7指针和函数",[19,7832,7833],{},"利用指针做函数参数，可以修改实参的值",[19,7835,7836],{},"值传递：只改变形参，不改变实参",[19,7838,7839],{},"地址传递：",[316,7841,7843],{"className":854,"code":7842,"language":856,"meta":50,"style":50},"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",[269,7844,7845,7870,7874,7886,7897,7907,7911,7919,7923,7935,7947,7952,7968,7983,7998],{"__ignoreMap":50},[324,7846,7847,7849,7851,7853,7855,7857,7860,7862,7864,7866,7868],{"class":326,"line":327},[324,7848,6093],{"class":863},[324,7850,6096],{"class":734},[324,7852,868],{"class":867},[324,7854,871],{"class":863},[324,7856,7247],{"class":863},[324,7858,7859],{"class":5945},"p1",[324,7861,1242],{"class":867},[324,7863,871],{"class":863},[324,7865,7247],{"class":863},[324,7867,7762],{"class":5945},[324,7869,874],{"class":867},[324,7871,7872],{"class":326,"line":203},[324,7873,2277],{"class":867},[324,7875,7876,7878,7880,7883],{"class":326,"line":338},[324,7877,2715],{"class":863},[324,7879,4984],{"class":867},[324,7881,7882],{"class":863},"=*",[324,7884,7885],{"class":867},"p1;\n",[324,7887,7888,7890,7892,7894],{"class":326,"line":344},[324,7889,7132],{"class":863},[324,7891,7859],{"class":867},[324,7893,7882],{"class":863},[324,7895,7896],{"class":867},"p2;\n",[324,7898,7899,7901,7903,7905],{"class":326,"line":484},[324,7900,7132],{"class":863},[324,7902,7762],{"class":867},[324,7904,913],{"class":863},[324,7906,5009],{"class":867},[324,7908,7909],{"class":326,"line":491},[324,7910,2296],{"class":867},[324,7912,7913,7915,7917],{"class":326,"line":496},[324,7914,871],{"class":863},[324,7916,2703],{"class":734},[324,7918,2706],{"class":867},[324,7920,7921],{"class":326,"line":502},[324,7922,2277],{"class":867},[324,7924,7925,7927,7929,7931,7933],{"class":326,"line":508},[324,7926,2715],{"class":863},[324,7928,2130],{"class":867},[324,7930,913],{"class":863},[324,7932,1310],{"class":916},[324,7934,2025],{"class":867},[324,7936,7937,7939,7941,7943,7945],{"class":326,"line":514},[324,7938,2715],{"class":863},[324,7940,3562],{"class":867},[324,7942,913],{"class":863},[324,7944,1564],{"class":916},[324,7946,2025],{"class":867},[324,7948,7949],{"class":326,"line":2343},[324,7950,7951],{"class":772},"    \u002F\u002F地址传递\n",[324,7953,7954,7956,7958,7960,7963,7965],{"class":326,"line":2348},[324,7955,6290],{"class":734},[324,7957,868],{"class":867},[324,7959,1217],{"class":863},[324,7961,7962],{"class":867},"a,",[324,7964,1217],{"class":863},[324,7966,7967],{"class":867},"b);\n",[324,7969,7970,7972,7974,7976,7978,7980],{"class":326,"line":2354},[324,7971,2282],{"class":867},[324,7973,1908],{"class":863},[324,7975,25],{"class":867},[324,7977,1908],{"class":863},[324,7979,1973],{"class":867},[324,7981,7982],{"class":772},"\u002F\u002F20\n",[324,7984,7985,7987,7989,7991,7993,7995],{"class":326,"line":2359},[324,7986,2282],{"class":867},[324,7988,1908],{"class":863},[324,7990,1127],{"class":867},[324,7992,1908],{"class":863},[324,7994,1973],{"class":867},[324,7996,7997],{"class":772},"\u002F\u002F10\n",[324,7999,8000],{"class":326,"line":2373},[324,8001,2296],{"class":867},[19,8003,8004],{},"总结：不想修改实参，就用值传递；想修改实参，就用值传递",[14,8006,8008],{"id":8007},"_38指针数组函数组合案例","3.8指针，数组，函数组合案例",[19,8010,8011],{},"案例描述：封装一个函数，利用冒泡排序，实现对整数数组的升序排序",[19,8013,8014,8015,8017],{},"例如数组：int arr",[324,8016,1310],{},"={4,3,6,9,1,2,10,8,7,5}",[316,8019,8021],{"className":854,"code":8020,"language":856,"meta":50,"style":50},"#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",[269,8022,8023,8029,8039,8063,8067,8098,8102,8136,8140,8158,8162,8173,8188,8203,8207,8211,8215,8219,8223,8231,8235,8240,8294,8306,8318,8323,8331,8335,8340,8365,8369,8384,8393,8397],{"__ignoreMap":50},[324,8024,8025,8027],{"class":326,"line":327},[324,8026,2680],{"class":863},[324,8028,2683],{"class":738},[324,8030,8031,8033,8035,8037],{"class":326,"line":203},[324,8032,2688],{"class":863},[324,8034,2691],{"class":863},[324,8036,2694],{"class":734},[324,8038,2025],{"class":867},[324,8040,8041,8043,8046,8048,8050,8052,8054,8056,8058,8061],{"class":326,"line":338},[324,8042,6093],{"class":863},[324,8044,8045],{"class":734}," bubbleSort",[324,8047,868],{"class":867},[324,8049,871],{"class":863},[324,8051,7247],{"class":863},[324,8053,19],{"class":5945},[324,8055,1242],{"class":867},[324,8057,871],{"class":863},[324,8059,8060],{"class":5945}," len",[324,8062,874],{"class":867},[324,8064,8065],{"class":326,"line":344},[324,8066,2277],{"class":867},[324,8068,8069,8071,8073,8075,8077,8079,8081,8083,8085,8088,8090,8092,8094,8096],{"class":326,"line":484},[324,8070,3930],{"class":863},[324,8072,868],{"class":867},[324,8074,871],{"class":863},[324,8076,3761],{"class":867},[324,8078,913],{"class":863},[324,8080,1056],{"class":916},[324,8082,3768],{"class":867},[324,8084,1774],{"class":863},[324,8086,8087],{"class":867},"len",[324,8089,1396],{"class":863},[324,8091,1082],{"class":916},[324,8093,3768],{"class":867},[324,8095,3022],{"class":863},[324,8097,874],{"class":867},[324,8099,8100],{"class":326,"line":491},[324,8101,2760],{"class":867},[324,8103,8104,8106,8108,8110,8112,8114,8116,8118,8120,8122,8124,8126,8128,8130,8132,8134],{"class":326,"line":496},[324,8105,4132],{"class":863},[324,8107,868],{"class":867},[324,8109,871],{"class":863},[324,8111,4139],{"class":867},[324,8113,913],{"class":863},[324,8115,1056],{"class":916},[324,8117,4146],{"class":867},[324,8119,1774],{"class":863},[324,8121,8087],{"class":867},[324,8123,1396],{"class":863},[324,8125,1305],{"class":867},[324,8127,1396],{"class":863},[324,8129,1082],{"class":916},[324,8131,4146],{"class":867},[324,8133,3022],{"class":863},[324,8135,874],{"class":867},[324,8137,8138],{"class":326,"line":502},[324,8139,3239],{"class":867},[324,8141,8142,8144,8147,8149,8152,8154,8156],{"class":326,"line":508},[324,8143,5371],{"class":863},[324,8145,8146],{"class":867},"(p[j]",[324,8148,1824],{"class":863},[324,8150,8151],{"class":867},"p[j",[324,8153,1345],{"class":863},[324,8155,1082],{"class":916},[324,8157,5386],{"class":867},[324,8159,8160],{"class":326,"line":514},[324,8161,5391],{"class":867},[324,8163,8164,8166,8168,8170],{"class":326,"line":2343},[324,8165,5396],{"class":863},[324,8167,4984],{"class":867},[324,8169,913],{"class":863},[324,8171,8172],{"class":867},"p[j];\n",[324,8174,8175,8178,8180,8182,8184,8186],{"class":326,"line":2348},[324,8176,8177],{"class":867},"                p[j]",[324,8179,913],{"class":863},[324,8181,8151],{"class":867},[324,8183,1345],{"class":863},[324,8185,1082],{"class":916},[324,8187,5419],{"class":867},[324,8189,8190,8193,8195,8197,8199,8201],{"class":326,"line":2354},[324,8191,8192],{"class":867},"                p[j",[324,8194,1345],{"class":863},[324,8196,1082],{"class":916},[324,8198,1804],{"class":867},[324,8200,913],{"class":863},[324,8202,5009],{"class":867},[324,8204,8205],{"class":326,"line":2359},[324,8206,5439],{"class":867},[324,8208,8209],{"class":326,"line":2373},[324,8210,3258],{"class":867},[324,8212,8213],{"class":326,"line":2378},[324,8214,2917],{"class":867},[324,8216,8217],{"class":326,"line":2384},[324,8218,2296],{"class":867},[324,8220,8221],{"class":326,"line":2405},[324,8222,488],{"emptyLinePlaceholder":487},[324,8224,8225,8227,8229],{"class":326,"line":2410},[324,8226,871],{"class":863},[324,8228,2703],{"class":734},[324,8230,2706],{"class":867},[324,8232,8233],{"class":326,"line":2424},[324,8234,2277],{"class":867},[324,8236,8237],{"class":326,"line":2429},[324,8238,8239],{"class":772},"    \u002F\u002F 1.创建数组\n",[324,8241,8242,8244,8246,8248,8250,8252,8254,8256,8258,8260,8262,8264,8266,8268,8270,8272,8274,8276,8278,8280,8282,8284,8286,8288,8290,8292],{"class":326,"line":2458},[324,8243,2715],{"class":863},[324,8245,4691],{"class":867},[324,8247,1310],{"class":916},[324,8249,1804],{"class":867},[324,8251,913],{"class":863},[324,8253,1760],{"class":867},[324,8255,1157],{"class":916},[324,8257,1242],{"class":867},[324,8259,938],{"class":916},[324,8261,1242],{"class":867},[324,8263,1208],{"class":916},[324,8265,1242],{"class":867},[324,8267,1284],{"class":916},[324,8269,1242],{"class":867},[324,8271,1082],{"class":916},[324,8273,1242],{"class":867},[324,8275,944],{"class":916},[324,8277,1242],{"class":867},[324,8279,1310],{"class":916},[324,8281,1242],{"class":867},[324,8283,1259],{"class":916},[324,8285,1242],{"class":867},[324,8287,1233],{"class":916},[324,8289,1242],{"class":867},[324,8291,1183],{"class":916},[324,8293,4724],{"class":867},[324,8295,8296,8298,8300,8302,8304],{"class":326,"line":2463},[324,8297,2715],{"class":863},[324,8299,8060],{"class":867},[324,8301,913],{"class":863},[324,8303,1310],{"class":916},[324,8305,2025],{"class":867},[324,8307,8308,8310,8312,8314,8316],{"class":326,"line":2480},[324,8309,2715],{"class":863},[324,8311,7247],{"class":863},[324,8313,19],{"class":867},[324,8315,913],{"class":863},[324,8317,7767],{"class":867},[324,8319,8320],{"class":326,"line":2485},[324,8321,8322],{"class":772},"    \u002F\u002F 2.创建函数，实现冒泡排序\n",[324,8324,8325,8328],{"class":326,"line":2490},[324,8326,8327],{"class":734},"    bubbleSort",[324,8329,8330],{"class":867},"(p,len);\n",[324,8332,8333],{"class":326,"line":2495},[324,8334,488],{"emptyLinePlaceholder":487},[324,8336,8337],{"class":326,"line":2509},[324,8338,8339],{"class":772},"    \u002F\u002F 3.打印排序后的数组\n",[324,8341,8342,8344,8346,8348,8350,8352,8354,8356,8358,8361,8363],{"class":326,"line":2514},[324,8343,3930],{"class":863},[324,8345,2389],{"class":867},[324,8347,871],{"class":863},[324,8349,3761],{"class":867},[324,8351,913],{"class":863},[324,8353,1056],{"class":916},[324,8355,3943],{"class":867},[324,8357,1774],{"class":863},[324,8359,8360],{"class":867},"len; i",[324,8362,3022],{"class":863},[324,8364,874],{"class":867},[324,8366,8367],{"class":326,"line":3306},[324,8368,2760],{"class":867},[324,8370,8371,8373,8375,8377,8379,8382],{"class":326,"line":3320},[324,8372,4180],{"class":867},[324,8374,7148],{"class":863},[324,8376,19],{"class":867},[324,8378,1908],{"class":863},[324,8380,8381],{"class":738},"\"\"",[324,8383,2025],{"class":867},[324,8385,8386,8389,8391],{"class":326,"line":3328},[324,8387,8388],{"class":867},"        p",[324,8390,3022],{"class":863},[324,8392,2025],{"class":867},[324,8394,8395],{"class":326,"line":3333},[324,8396,2917],{"class":867},[324,8398,8399],{"class":326,"line":3339},[324,8400,2296],{"class":867},[775,8402,8403],{},"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":50,"searchDepth":203,"depth":203,"links":8405},[8406,8407,8408,8409,8410,8411,8412,8413],{"id":7012,"depth":203,"text":7013},{"id":7178,"depth":203,"text":7179},{"id":7334,"depth":203,"text":7335},{"id":7412,"depth":203,"text":7413},{"id":7491,"depth":203,"text":7492},{"id":7590,"depth":203,"text":7591},{"id":7829,"depth":203,"text":7830},{"id":8007,"depth":203,"text":8008},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch3",{"title":7001,"description":7009},"wiki\u002F2026-05-24-c++学习\u002Fch3-指针","LotROpzxgkxZVFDdc0uLdT7FhfhATX3FzlZsglMj7hQ",{"id":8420,"title":8421,"body":8422,"description":8429,"extension":792,"meta":11403,"navigation":487,"path":11404,"seo":11405,"stem":11406,"__hash__":11407},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch4-结构体.md","4.结构体",{"type":7,"value":8423,"toc":11394},[8424,8427,8430,8434,8437,8440,8451,8789,8792,8796,8799,8806,9061,9065,9068,9071,9226,9230,9233,9236,9442,9446,9449,9752,9755,9763,9767,9770,9921,9923,9934,9991,9995,10000,10657,10665,10668,10762,10765,11385,11391],[10,8425,8421],{"id":8426},"_4结构体",[19,8428,8429],{},"结构体属于用户自定义的数据类型，允许用户存储不同的数据类型",[14,8431,8433],{"id":8432},"_41结构体定义与使用","4.1结构体定义与使用",[19,8435,8436],{},"语法：struct 结构体名 {结构体成员列表}；",[19,8438,8439],{},"通过结构体创建变量的方式：",[1871,8441,8442,8445,8448],{},[195,8443,8444],{},"struct 结构体名 变量名",[195,8446,8447],{},"struct 结构体名 变量名={成员1值，成员2值...}",[195,8449,8450],{},"定义结构体时顺便创建变量",[316,8452,8454],{"className":854,"code":8453,"language":856,"meta":50,"style":50},"#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",[269,8455,8456,8462,8472,8479,8484,8492,8496,8501,8505,8510,8515,8520,8527,8532,8539,8543,8550,8554,8558,8562,8566,8570,8574,8580,8584,8590,8598,8606,8610,8615,8620,8631,8636,8648,8659,8670,8675,8699,8704,8710,8737,8742,8748,8760,8772,8784],{"__ignoreMap":50},[324,8457,8458,8460],{"class":326,"line":327},[324,8459,2680],{"class":863},[324,8461,2683],{"class":738},[324,8463,8464,8466,8468,8470],{"class":326,"line":203},[324,8465,2688],{"class":863},[324,8467,2691],{"class":863},[324,8469,2694],{"class":734},[324,8471,2025],{"class":867},[324,8473,8474,8476],{"class":326,"line":338},[324,8475,2680],{"class":863},[324,8477,8478],{"class":738},"\u003Cstring>\n",[324,8480,8481],{"class":326,"line":344},[324,8482,8483],{"class":772},"\u002F\u002F1.创建学生数据类型：学生包括：（姓名，年龄，分数）\n",[324,8485,8486,8489],{"class":326,"line":484},[324,8487,8488],{"class":863},"struct",[324,8490,8491],{"class":734}," Student\n",[324,8493,8494],{"class":326,"line":491},[324,8495,2277],{"class":867},[324,8497,8498],{"class":326,"line":496},[324,8499,8500],{"class":772},"    \u002F\u002F成员列表\n",[324,8502,8503],{"class":326,"line":502},[324,8504,488],{"emptyLinePlaceholder":487},[324,8506,8507],{"class":326,"line":508},[324,8508,8509],{"class":772},"    \u002F\u002F姓名\n",[324,8511,8512],{"class":326,"line":514},[324,8513,8514],{"class":867},"    string name;\n",[324,8516,8517],{"class":326,"line":2343},[324,8518,8519],{"class":772},"    \u002F\u002F年龄\n",[324,8521,8522,8524],{"class":326,"line":2348},[324,8523,2715],{"class":863},[324,8525,8526],{"class":867}," age;\n",[324,8528,8529],{"class":326,"line":2354},[324,8530,8531],{"class":772},"    \u002F\u002F分数\n",[324,8533,8534,8536],{"class":326,"line":2359},[324,8535,2715],{"class":863},[324,8537,8538],{"class":867}," score;\n",[324,8540,8541],{"class":326,"line":2373},[324,8542,4724],{"class":867},[324,8544,8545,8547],{"class":326,"line":2378},[324,8546,8488],{"class":863},[324,8548,8549],{"class":734}," School\n",[324,8551,8552],{"class":326,"line":2384},[324,8553,2277],{"class":867},[324,8555,8556],{"class":326,"line":2405},[324,8557,8500],{"class":772},[324,8559,8560],{"class":326,"line":2410},[324,8561,488],{"emptyLinePlaceholder":487},[324,8563,8564],{"class":326,"line":2424},[324,8565,8509],{"class":772},[324,8567,8568],{"class":326,"line":2429},[324,8569,8514],{"class":867},[324,8571,8572],{"class":326,"line":2458},[324,8573,8519],{"class":772},[324,8575,8576,8578],{"class":326,"line":2463},[324,8577,2715],{"class":863},[324,8579,8526],{"class":867},[324,8581,8582],{"class":326,"line":2480},[324,8583,8531],{"class":772},[324,8585,8586,8588],{"class":326,"line":2485},[324,8587,2715],{"class":863},[324,8589,8538],{"class":867},[324,8591,8592,8595],{"class":326,"line":2490},[324,8593,8594],{"class":867},"} s3;",[324,8596,8597],{"class":772}," \u002F\u002F创建结构体时就创建了变量\n",[324,8599,8600,8602,8604],{"class":326,"line":2495},[324,8601,871],{"class":863},[324,8603,2703],{"class":734},[324,8605,2706],{"class":867},[324,8607,8608],{"class":326,"line":2509},[324,8609,2277],{"class":867},[324,8611,8612],{"class":326,"line":2514},[324,8613,8614],{"class":772},"    \u002F\u002F2.通过学生类型创建具体学生\n",[324,8616,8617],{"class":326,"line":3306},[324,8618,8619],{"class":772},"    \u002F\u002F2.1 struct Student s1;\n",[324,8621,8622,8625,8628],{"class":326,"line":3320},[324,8623,8624],{"class":863},"    struct",[324,8626,8627],{"class":734}," Student",[324,8629,8630],{"class":867}," s1;\n",[324,8632,8633],{"class":326,"line":3328},[324,8634,8635],{"class":772},"    \u002F\u002F给s1属性赋值，通过访问结构体变量中的属性\n",[324,8637,8638,8641,8643,8646],{"class":326,"line":3333},[324,8639,8640],{"class":867},"    s1.name",[324,8642,913],{"class":863},[324,8644,8645],{"class":738},"\"张三\"",[324,8647,2025],{"class":867},[324,8649,8650,8653,8655,8657],{"class":326,"line":3339},[324,8651,8652],{"class":867},"    s1.age",[324,8654,913],{"class":863},[324,8656,1514],{"class":916},[324,8658,2025],{"class":867},[324,8660,8661,8664,8666,8668],{"class":326,"line":3345},[324,8662,8663],{"class":867},"    s1.score",[324,8665,913],{"class":863},[324,8667,1118],{"class":916},[324,8669,2025],{"class":867},[324,8671,8672],{"class":326,"line":3350},[324,8673,8674],{"class":772},"    \u002F\u002F输出结果\n",[324,8676,8678,8680,8682,8685,8687,8690,8692,8695,8697],{"class":326,"line":8677},37,[324,8679,2282],{"class":867},[324,8681,1908],{"class":863},[324,8683,8684],{"class":867},"s1.name",[324,8686,1908],{"class":863},[324,8688,8689],{"class":867},"s1.age",[324,8691,1908],{"class":863},[324,8693,8694],{"class":867},"s1.score",[324,8696,1908],{"class":863},[324,8698,1930],{"class":867},[324,8700,8702],{"class":326,"line":8701},38,[324,8703,488],{"emptyLinePlaceholder":487},[324,8705,8707],{"class":326,"line":8706},39,[324,8708,8709],{"class":772},"    \u002F\u002F2.2 struct Student s2={...}\n",[324,8711,8713,8715,8717,8720,8722,8724,8727,8729,8731,8733,8735],{"class":326,"line":8712},40,[324,8714,8624],{"class":863},[324,8716,8627],{"class":734},[324,8718,8719],{"class":867}," s2",[324,8721,913],{"class":863},[324,8723,1760],{"class":867},[324,8725,8726],{"class":738},"\"王五\"",[324,8728,1242],{"class":867},[324,8730,1514],{"class":916},[324,8732,1242],{"class":867},[324,8734,1118],{"class":916},[324,8736,4724],{"class":867},[324,8738,8740],{"class":326,"line":8739},41,[324,8741,488],{"emptyLinePlaceholder":487},[324,8743,8745],{"class":326,"line":8744},42,[324,8746,8747],{"class":772},"    \u002F\u002F2.3在定义结构体时顺便创建结构体变量\n",[324,8749,8751,8754,8756,8758],{"class":326,"line":8750},43,[324,8752,8753],{"class":867},"    s3.name",[324,8755,913],{"class":863},[324,8757,4407],{"class":738},[324,8759,2025],{"class":867},[324,8761,8763,8766,8768,8770],{"class":326,"line":8762},44,[324,8764,8765],{"class":867},"    s3.age",[324,8767,913],{"class":863},[324,8769,1514],{"class":916},[324,8771,2025],{"class":867},[324,8773,8775,8778,8780,8782],{"class":326,"line":8774},45,[324,8776,8777],{"class":867},"    s3.score",[324,8779,913],{"class":863},[324,8781,1564],{"class":916},[324,8783,2025],{"class":867},[324,8785,8787],{"class":326,"line":8786},46,[324,8788,2296],{"class":867},[19,8790,8791],{},"注意：结构体定义时关键词struct不可以省略，但是创建是可以省略",[14,8793,8795],{"id":8794},"_42结构体数组","4.2结构体数组",[19,8797,8798],{},"将自定义的结构体放入到数组中方便维护",[19,8800,8801,8802,8805],{},"语法：struct 结构体名 数组名",[324,8803,8804],{},"元素个数","={ {}，{},...{} };",[316,8807,8809],{"className":854,"code":8808,"language":856,"meta":50,"style":50},"#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",[269,8810,8811,8817,8827,8833,8838,8844,8848,8852,8858,8864,8868,8872,8880,8884,8889,8904,8908,8924,8940,8944,8949,8965,8980,8995,9000,9026,9030,9053,9057],{"__ignoreMap":50},[324,8812,8813,8815],{"class":326,"line":327},[324,8814,2680],{"class":863},[324,8816,2683],{"class":738},[324,8818,8819,8821,8823,8825],{"class":326,"line":203},[324,8820,2688],{"class":863},[324,8822,2691],{"class":863},[324,8824,2694],{"class":734},[324,8826,2025],{"class":867},[324,8828,8829,8831],{"class":326,"line":338},[324,8830,2680],{"class":863},[324,8832,8478],{"class":738},[324,8834,8835],{"class":326,"line":344},[324,8836,8837],{"class":772},"\u002F\u002F1.定义结构体\n",[324,8839,8840,8842],{"class":326,"line":484},[324,8841,8488],{"class":863},[324,8843,8491],{"class":734},[324,8845,8846],{"class":326,"line":491},[324,8847,2277],{"class":867},[324,8849,8850],{"class":326,"line":496},[324,8851,8514],{"class":867},[324,8853,8854,8856],{"class":326,"line":502},[324,8855,2715],{"class":863},[324,8857,8526],{"class":867},[324,8859,8860,8862],{"class":326,"line":508},[324,8861,2715],{"class":863},[324,8863,8538],{"class":867},[324,8865,8866],{"class":326,"line":514},[324,8867,488],{"emptyLinePlaceholder":487},[324,8869,8870],{"class":326,"line":2343},[324,8871,4724],{"class":867},[324,8873,8874,8876,8878],{"class":326,"line":2348},[324,8875,871],{"class":863},[324,8877,2703],{"class":734},[324,8879,2706],{"class":867},[324,8881,8882],{"class":326,"line":2354},[324,8883,2277],{"class":867},[324,8885,8886],{"class":326,"line":2359},[324,8887,8888],{"class":772},"    \u002F\u002F2.创建结构体数组\n",[324,8890,8891,8893,8895,8898,8900,8902],{"class":326,"line":2373},[324,8892,8624],{"class":863},[324,8894,8627],{"class":734},[324,8896,8897],{"class":867}," stuArray[",[324,8899,944],{"class":916},[324,8901,1804],{"class":867},[324,8903,5637],{"class":863},[324,8905,8906],{"class":326,"line":2378},[324,8907,2760],{"class":867},[324,8909,8910,8912,8914,8916,8918,8920,8922],{"class":326,"line":2384},[324,8911,5646],{"class":867},[324,8913,8645],{"class":738},[324,8915,1242],{"class":867},[324,8917,1514],{"class":916},[324,8919,1242],{"class":867},[324,8921,1175],{"class":916},[324,8923,5659],{"class":867},[324,8925,8926,8928,8930,8932,8934,8936,8938],{"class":326,"line":2405},[324,8927,5646],{"class":867},[324,8929,4407],{"class":738},[324,8931,1242],{"class":867},[324,8933,1439],{"class":916},[324,8935,1242],{"class":867},[324,8937,1439],{"class":916},[324,8939,2296],{"class":867},[324,8941,8942],{"class":326,"line":2410},[324,8943,2917],{"class":867},[324,8945,8946],{"class":326,"line":2424},[324,8947,8948],{"class":772},"    \u002F\u002F3.给结构体数组中的元素赋值\n",[324,8950,8951,8954,8956,8959,8961,8963],{"class":326,"line":2429},[324,8952,8953],{"class":867},"    stuArray[",[324,8955,1082],{"class":916},[324,8957,8958],{"class":867},"].name",[324,8960,913],{"class":863},[324,8962,4430],{"class":738},[324,8964,2025],{"class":867},[324,8966,8967,8969,8971,8974,8976,8978],{"class":326,"line":2458},[324,8968,8953],{"class":867},[324,8970,1082],{"class":916},[324,8972,8973],{"class":867},"].age",[324,8975,913],{"class":863},[324,8977,944],{"class":916},[324,8979,2025],{"class":867},[324,8981,8982,8984,8986,8989,8991,8993],{"class":326,"line":2463},[324,8983,8953],{"class":867},[324,8985,1082],{"class":916},[324,8987,8988],{"class":867},"].score",[324,8990,913],{"class":863},[324,8992,944],{"class":916},[324,8994,2025],{"class":867},[324,8996,8997],{"class":326,"line":2480},[324,8998,8999],{"class":772},"    \u002F\u002F4.遍历结构体数组\n",[324,9001,9002,9004,9006,9008,9010,9012,9014,9016,9018,9020,9022,9024],{"class":326,"line":2485},[324,9003,3930],{"class":863},[324,9005,2389],{"class":867},[324,9007,871],{"class":863},[324,9009,3761],{"class":867},[324,9011,913],{"class":863},[324,9013,1056],{"class":916},[324,9015,3768],{"class":867},[324,9017,1774],{"class":863},[324,9019,944],{"class":916},[324,9021,3768],{"class":867},[324,9023,3022],{"class":863},[324,9025,874],{"class":867},[324,9027,9028],{"class":326,"line":2490},[324,9029,2760],{"class":867},[324,9031,9032,9034,9036,9039,9041,9044,9046,9049,9051],{"class":326,"line":2495},[324,9033,4180],{"class":867},[324,9035,1908],{"class":863},[324,9037,9038],{"class":867},"stuArray[i].name",[324,9040,1908],{"class":863},[324,9042,9043],{"class":867},"stuArray[i].age",[324,9045,1908],{"class":863},[324,9047,9048],{"class":867},"stuArray[i].score",[324,9050,1908],{"class":863},[324,9052,1930],{"class":867},[324,9054,9055],{"class":326,"line":2509},[324,9056,2917],{"class":867},[324,9058,9059],{"class":326,"line":2514},[324,9060,2296],{"class":867},[14,9062,9064],{"id":9063},"_43结构体指针","4.3结构体指针",[19,9066,9067],{},"作用：通过指针访问结构体中的成员",[19,9069,9070],{},"利用操作符->可以通过结构体指针访问结构体属性",[316,9072,9074],{"className":854,"code":9073,"language":856,"meta":50,"style":50},"#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",[269,9075,9076,9082,9092,9098,9102,9108,9112,9116,9122,9128,9132,9140,9144,9149,9174,9179,9194,9199,9222],{"__ignoreMap":50},[324,9077,9078,9080],{"class":326,"line":327},[324,9079,2680],{"class":863},[324,9081,2683],{"class":738},[324,9083,9084,9086,9088,9090],{"class":326,"line":203},[324,9085,2688],{"class":863},[324,9087,2691],{"class":863},[324,9089,2694],{"class":734},[324,9091,2025],{"class":867},[324,9093,9094,9096],{"class":326,"line":338},[324,9095,2680],{"class":863},[324,9097,8478],{"class":738},[324,9099,9100],{"class":326,"line":344},[324,9101,8837],{"class":772},[324,9103,9104,9106],{"class":326,"line":484},[324,9105,8488],{"class":863},[324,9107,8491],{"class":734},[324,9109,9110],{"class":326,"line":491},[324,9111,2277],{"class":867},[324,9113,9114],{"class":326,"line":496},[324,9115,8514],{"class":867},[324,9117,9118,9120],{"class":326,"line":502},[324,9119,2715],{"class":863},[324,9121,8526],{"class":867},[324,9123,9124,9126],{"class":326,"line":508},[324,9125,2715],{"class":863},[324,9127,8538],{"class":867},[324,9129,9130],{"class":326,"line":514},[324,9131,4724],{"class":867},[324,9133,9134,9136,9138],{"class":326,"line":2343},[324,9135,871],{"class":863},[324,9137,2703],{"class":734},[324,9139,2706],{"class":867},[324,9141,9142],{"class":326,"line":2348},[324,9143,2277],{"class":867},[324,9145,9146],{"class":326,"line":2354},[324,9147,9148],{"class":772},"    \u002F\u002F创建学生结构体变量\n",[324,9150,9151,9153,9155,9158,9160,9162,9164,9166,9168,9170,9172],{"class":326,"line":2359},[324,9152,8624],{"class":863},[324,9154,8627],{"class":734},[324,9156,9157],{"class":867}," s",[324,9159,913],{"class":863},[324,9161,1760],{"class":867},[324,9163,8645],{"class":738},[324,9165,1242],{"class":867},[324,9167,1514],{"class":916},[324,9169,1242],{"class":867},[324,9171,2453],{"class":916},[324,9173,4724],{"class":867},[324,9175,9176],{"class":326,"line":2373},[324,9177,9178],{"class":772},"    \u002F\u002F通过指针指向结构体变量\n",[324,9180,9181,9183,9185,9187,9189,9191],{"class":326,"line":2378},[324,9182,8624],{"class":863},[324,9184,8627],{"class":734},[324,9186,7247],{"class":863},[324,9188,19],{"class":867},[324,9190,7068],{"class":863},[324,9192,9193],{"class":867},"s\n",[324,9195,9196],{"class":326,"line":2384},[324,9197,9198],{"class":772},"    \u002F\u002F通过指针访问结构体变量中的数据\n",[324,9200,9201,9203,9205,9208,9210,9213,9215,9218,9220],{"class":326,"line":2405},[324,9202,2282],{"class":867},[324,9204,1908],{"class":863},[324,9206,9207],{"class":867},"p->name",[324,9209,1908],{"class":863},[324,9211,9212],{"class":867},"p->age",[324,9214,1908],{"class":863},[324,9216,9217],{"class":867},"p->score",[324,9219,1908],{"class":863},[324,9221,1930],{"class":867},[324,9223,9224],{"class":326,"line":2410},[324,9225,2296],{"class":867},[14,9227,9229],{"id":9228},"_44结构体嵌套结构体","4.4结构体嵌套结构体",[19,9231,9232],{},"作用：结构体中的成员可以是另一个结构体",[19,9234,9235],{},"例如：每个老师辅导一个学员，一个老师的结构体中，记录一个学生的结构体",[316,9237,9239],{"className":854,"code":9238,"language":856,"meta":50,"style":50},"#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",[269,9240,9241,9247,9257,9263,9268,9276,9280,9284,9290,9296,9300,9305,9312,9316,9323,9327,9333,9338,9342,9350,9354,9359,9364,9369,9380,9392,9403,9416,9427,9438],{"__ignoreMap":50},[324,9242,9243,9245],{"class":326,"line":327},[324,9244,2680],{"class":863},[324,9246,2683],{"class":738},[324,9248,9249,9251,9253,9255],{"class":326,"line":203},[324,9250,2688],{"class":863},[324,9252,2691],{"class":863},[324,9254,2694],{"class":734},[324,9256,2025],{"class":867},[324,9258,9259,9261],{"class":326,"line":338},[324,9260,2680],{"class":863},[324,9262,8478],{"class":738},[324,9264,9265],{"class":326,"line":344},[324,9266,9267],{"class":772},"\u002F\u002F定义学生结构体\n",[324,9269,9270,9272,9274],{"class":326,"line":484},[324,9271,8488],{"class":863},[324,9273,8627],{"class":734},[324,9275,3403],{"class":867},[324,9277,9278],{"class":326,"line":491},[324,9279,2277],{"class":867},[324,9281,9282],{"class":326,"line":496},[324,9283,8514],{"class":867},[324,9285,9286,9288],{"class":326,"line":502},[324,9287,2715],{"class":863},[324,9289,8526],{"class":867},[324,9291,9292,9294],{"class":326,"line":508},[324,9293,2715],{"class":863},[324,9295,8538],{"class":867},[324,9297,9298],{"class":326,"line":514},[324,9299,2296],{"class":867},[324,9301,9302],{"class":326,"line":2343},[324,9303,9304],{"class":772},"\u002F\u002F定义老师结构体\n",[324,9306,9307,9309],{"class":326,"line":2348},[324,9308,8488],{"class":863},[324,9310,9311],{"class":734}," Teacher\n",[324,9313,9314],{"class":326,"line":2354},[324,9315,2277],{"class":867},[324,9317,9318,9320],{"class":326,"line":2359},[324,9319,2715],{"class":863},[324,9321,9322],{"class":867}," id;\n",[324,9324,9325],{"class":326,"line":2373},[324,9326,8514],{"class":867},[324,9328,9329,9331],{"class":326,"line":2378},[324,9330,2715],{"class":863},[324,9332,8526],{"class":867},[324,9334,9335],{"class":326,"line":2384},[324,9336,9337],{"class":867},"    Student stu;\n",[324,9339,9340],{"class":326,"line":2405},[324,9341,2296],{"class":867},[324,9343,9344,9346,9348],{"class":326,"line":2410},[324,9345,871],{"class":863},[324,9347,2703],{"class":734},[324,9349,6707],{"class":867},[324,9351,9352],{"class":326,"line":2424},[324,9353,2277],{"class":867},[324,9355,9356],{"class":326,"line":2429},[324,9357,9358],{"class":772},"    \u002F\u002F结构体嵌套结构体\n",[324,9360,9361],{"class":326,"line":2458},[324,9362,9363],{"class":772},"    \u002F\u002F创建老师\n",[324,9365,9366],{"class":326,"line":2463},[324,9367,9368],{"class":867},"    Teacher t;\n",[324,9370,9371,9374,9376,9378],{"class":326,"line":2480},[324,9372,9373],{"class":867},"    t.id",[324,9375,913],{"class":863},[324,9377,1175],{"class":916},[324,9379,2025],{"class":867},[324,9381,9382,9385,9387,9390],{"class":326,"line":2485},[324,9383,9384],{"class":867},"    t.name",[324,9386,913],{"class":863},[324,9388,9389],{"class":738},"\"老王\"",[324,9391,2025],{"class":867},[324,9393,9394,9397,9399,9401],{"class":326,"line":2490},[324,9395,9396],{"class":867},"    t.age",[324,9398,913],{"class":863},[324,9400,1514],{"class":916},[324,9402,2025],{"class":867},[324,9404,9405,9408,9410,9413],{"class":326,"line":2495},[324,9406,9407],{"class":867},"    t.stu.name",[324,9409,913],{"class":863},[324,9411,9412],{"class":738},"\"小王\"",[324,9414,9415],{"class":867},"；\n",[324,9417,9418,9421,9423,9425],{"class":326,"line":2509},[324,9419,9420],{"class":867},"    t.stu.age",[324,9422,913],{"class":863},[324,9424,1564],{"class":916},[324,9426,2025],{"class":867},[324,9428,9429,9432,9434,9436],{"class":326,"line":2514},[324,9430,9431],{"class":867},"    t.stu.score",[324,9433,913],{"class":863},[324,9435,1208],{"class":916},[324,9437,2025],{"class":867},[324,9439,9440],{"class":326,"line":3306},[324,9441,2296],{"class":867},[14,9443,9445],{"id":9444},"_45结构体做函数参数","4.5结构体做函数参数",[19,9447,9448],{},"案例学习:将学生传入到一个参数中，打印学生身上的所有信息",[316,9450,9452],{"className":854,"code":9451,"language":856,"meta":50,"style":50},"#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",[269,9453,9454,9460,9470,9476,9482,9486,9490,9496,9502,9506,9511,9516,9533,9537,9570,9574,9579,9598,9602,9633,9637,9645,9649,9658,9670,9682,9694,9707,9715,9728,9740,9748],{"__ignoreMap":50},[324,9455,9456,9458],{"class":326,"line":327},[324,9457,2680],{"class":863},[324,9459,2683],{"class":738},[324,9461,9462,9464,9466,9468],{"class":326,"line":203},[324,9463,2688],{"class":863},[324,9465,2691],{"class":863},[324,9467,2694],{"class":734},[324,9469,2025],{"class":867},[324,9471,9472,9474],{"class":326,"line":338},[324,9473,2680],{"class":863},[324,9475,8478],{"class":738},[324,9477,9478,9480],{"class":326,"line":344},[324,9479,8488],{"class":863},[324,9481,8491],{"class":734},[324,9483,9484],{"class":326,"line":484},[324,9485,2277],{"class":867},[324,9487,9488],{"class":326,"line":491},[324,9489,8514],{"class":867},[324,9491,9492,9494],{"class":326,"line":496},[324,9493,2715],{"class":863},[324,9495,8526],{"class":867},[324,9497,9498,9500],{"class":326,"line":502},[324,9499,2715],{"class":863},[324,9501,8538],{"class":867},[324,9503,9504],{"class":326,"line":508},[324,9505,4724],{"class":867},[324,9507,9508],{"class":326,"line":514},[324,9509,9510],{"class":772},"\u002F\u002F打印学生信息的函数\n",[324,9512,9513],{"class":326,"line":2343},[324,9514,9515],{"class":772},"\u002F\u002F值传递\n",[324,9517,9518,9520,9523,9525,9527,9529,9531],{"class":326,"line":2348},[324,9519,6093],{"class":863},[324,9521,9522],{"class":734}," printStudent1",[324,9524,868],{"class":867},[324,9526,8488],{"class":863},[324,9528,8627],{"class":734},[324,9530,9157],{"class":5945},[324,9532,874],{"class":867},[324,9534,9535],{"class":326,"line":2354},[324,9536,2277],{"class":867},[324,9538,9539,9541,9543,9546,9548,9551,9553,9556,9558,9560,9562,9565,9567],{"class":326,"line":2359},[324,9540,7258],{"class":867},[324,9542,1908],{"class":863},[324,9544,9545],{"class":867}," s.name ",[324,9547,1908],{"class":863},[324,9549,9550],{"class":738}," \" \"",[324,9552,2176],{"class":863},[324,9554,9555],{"class":867}," s.age ",[324,9557,1908],{"class":863},[324,9559,9550],{"class":738},[324,9561,2176],{"class":863},[324,9563,9564],{"class":867}," s.score ",[324,9566,1908],{"class":863},[324,9568,9569],{"class":867}," endl;\n",[324,9571,9572],{"class":326,"line":2373},[324,9573,2296],{"class":867},[324,9575,9576],{"class":326,"line":2378},[324,9577,9578],{"class":772},"\u002F\u002F地址传递\n",[324,9580,9581,9583,9586,9588,9590,9592,9594,9596],{"class":326,"line":2384},[324,9582,6093],{"class":863},[324,9584,9585],{"class":734}," printStudent2",[324,9587,868],{"class":867},[324,9589,8488],{"class":863},[324,9591,8627],{"class":734},[324,9593,7247],{"class":863},[324,9595,1559],{"class":5945},[324,9597,874],{"class":867},[324,9599,9600],{"class":326,"line":2405},[324,9601,2277],{"class":867},[324,9603,9604,9606,9608,9611,9613,9615,9617,9620,9622,9624,9626,9629,9631],{"class":326,"line":2410},[324,9605,7258],{"class":867},[324,9607,1908],{"class":863},[324,9609,9610],{"class":867}," s->name ",[324,9612,1908],{"class":863},[324,9614,9550],{"class":738},[324,9616,2176],{"class":863},[324,9618,9619],{"class":867}," s->age ",[324,9621,1908],{"class":863},[324,9623,9550],{"class":738},[324,9625,2176],{"class":863},[324,9627,9628],{"class":867}," s->score ",[324,9630,1908],{"class":863},[324,9632,9569],{"class":867},[324,9634,9635],{"class":326,"line":2424},[324,9636,2296],{"class":867},[324,9638,9639,9641,9643],{"class":326,"line":2429},[324,9640,871],{"class":863},[324,9642,2703],{"class":734},[324,9644,2706],{"class":867},[324,9646,9647],{"class":326,"line":2458},[324,9648,2277],{"class":867},[324,9650,9651,9653,9655],{"class":326,"line":2463},[324,9652,8624],{"class":863},[324,9654,8627],{"class":734},[324,9656,9657],{"class":867}," s;\n",[324,9659,9660,9663,9665,9668],{"class":326,"line":2480},[324,9661,9662],{"class":867},"    s.name ",[324,9664,913],{"class":863},[324,9666,9667],{"class":738}," \"张三\"",[324,9669,2025],{"class":867},[324,9671,9672,9675,9677,9680],{"class":326,"line":2485},[324,9673,9674],{"class":867},"    s.age ",[324,9676,913],{"class":863},[324,9678,9679],{"class":916}," 20",[324,9681,2025],{"class":867},[324,9683,9684,9687,9689,9692],{"class":326,"line":2490},[324,9685,9686],{"class":867},"    s.score ",[324,9688,913],{"class":863},[324,9690,9691],{"class":916}," 85",[324,9693,2025],{"class":867},[324,9695,9696,9698,9700,9703,9705],{"class":326,"line":2495},[324,9697,2282],{"class":867},[324,9699,1908],{"class":863},[324,9701,9702],{"class":738},"\"值传递:\"",[324,9704,1908],{"class":863},[324,9706,1930],{"class":867},[324,9708,9709,9712],{"class":326,"line":2509},[324,9710,9711],{"class":734},"    printStudent1",[324,9713,9714],{"class":867},"(s);\n",[324,9716,9717,9719,9721,9724,9726],{"class":326,"line":2514},[324,9718,2282],{"class":867},[324,9720,1908],{"class":863},[324,9722,9723],{"class":738},"\"地址传递:\"",[324,9725,1908],{"class":863},[324,9727,1930],{"class":867},[324,9729,9730,9733,9735,9737],{"class":326,"line":3306},[324,9731,9732],{"class":734},"    printStudent2",[324,9734,868],{"class":867},[324,9736,1217],{"class":863},[324,9738,9739],{"class":867},"s); \n",[324,9741,9742,9744,9746],{"class":326,"line":3320},[324,9743,4819],{"class":863},[324,9745,4822],{"class":916},[324,9747,2025],{"class":867},[324,9749,9750],{"class":326,"line":3328},[324,9751,2296],{"class":867},[19,9753,9754],{},"注意：",[1871,9756,9757,9760],{},[195,9758,9759],{},"1.先定义结构体，不要在函数中写结构体的定义",[195,9761,9762],{},"2.不想修改主函数中的数据，就用值传递；反之用地址传递",[14,9764,9766],{"id":9765},"_46结构体中const使用场景","4.6结构体中const使用场景",[19,9768,9769],{},"用const防止误操作",[316,9771,9773],{"className":854,"code":9772,"language":856,"meta":50,"style":50},"#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",[269,9774,9775,9781,9791,9797,9802,9806,9810,9816,9822,9826,9842,9846,9869,9873,9881,9885,9906,9913,9917],{"__ignoreMap":50},[324,9776,9777,9779],{"class":326,"line":327},[324,9778,2680],{"class":863},[324,9780,2683],{"class":738},[324,9782,9783,9785,9787,9789],{"class":326,"line":203},[324,9784,2688],{"class":863},[324,9786,2691],{"class":863},[324,9788,2694],{"class":734},[324,9790,2025],{"class":867},[324,9792,9793,9795],{"class":326,"line":338},[324,9794,2680],{"class":863},[324,9796,8478],{"class":738},[324,9798,9799],{"class":326,"line":344},[324,9800,9801],{"class":867},"sctuct Student\n",[324,9803,9804],{"class":326,"line":484},[324,9805,2277],{"class":867},[324,9807,9808],{"class":326,"line":491},[324,9809,8514],{"class":867},[324,9811,9812,9814],{"class":326,"line":496},[324,9813,2715],{"class":863},[324,9815,8526],{"class":867},[324,9817,9818,9820],{"class":326,"line":502},[324,9819,2715],{"class":863},[324,9821,8538],{"class":867},[324,9823,9824],{"class":326,"line":508},[324,9825,4724],{"class":867},[324,9827,9828,9830,9833,9835,9838,9840],{"class":326,"line":514},[324,9829,6093],{"class":863},[324,9831,9832],{"class":734}," printStudents",[324,9834,868],{"class":867},[324,9836,9837],{"class":734},"student",[324,9839,9157],{"class":5945},[324,9841,874],{"class":867},[324,9843,9844],{"class":326,"line":2343},[324,9845,2277],{"class":867},[324,9847,9848,9850,9852,9855,9857,9860,9862,9865,9867],{"class":326,"line":2348},[324,9849,2282],{"class":867},[324,9851,1908],{"class":863},[324,9853,9854],{"class":867},"s.name",[324,9856,1908],{"class":863},[324,9858,9859],{"class":867},"s.age",[324,9861,1908],{"class":863},[324,9863,9864],{"class":867},"s.score",[324,9866,1908],{"class":863},[324,9868,1930],{"class":867},[324,9870,9871],{"class":326,"line":2354},[324,9872,2296],{"class":867},[324,9874,9875,9877,9879],{"class":326,"line":2359},[324,9876,871],{"class":863},[324,9878,2703],{"class":734},[324,9880,6707],{"class":867},[324,9882,9883],{"class":326,"line":2373},[324,9884,2277],{"class":867},[324,9886,9887,9890,9892,9894,9896,9898,9900,9902,9904],{"class":326,"line":2378},[324,9888,9889],{"class":867},"    Student s",[324,9891,913],{"class":863},[324,9893,1760],{"class":867},[324,9895,8645],{"class":738},[324,9897,1242],{"class":867},[324,9899,1514],{"class":916},[324,9901,1242],{"class":867},[324,9903,1514],{"class":916},[324,9905,4724],{"class":867},[324,9907,9908,9911],{"class":326,"line":2384},[324,9909,9910],{"class":734},"    printStudent",[324,9912,9714],{"class":867},[324,9914,9915],{"class":326,"line":2405},[324,9916,488],{"emptyLinePlaceholder":487},[324,9918,9919],{"class":326,"line":2410},[324,9920,2296],{"class":867},[19,9922,9754],{},[1871,9924,9925,9928,9931],{},[195,9926,9927],{},"1.值传递时形参会copy一份实参的数值，所以实参数据多时，就会比较浪费内存",[195,9929,9930],{},"2.将函数中的形参改为指针，可以减少内存空间，而且不会复制新的副本出来",[195,9932,9933],{},"3.在结构体形参前边加上const后，函数中就没法改参数信息了（加入const之后，一旦有修改的操作就会报错，可以防止我们的误操作）",[316,9935,9937],{"className":854,"code":9936,"language":856,"meta":50,"style":50},"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",[269,9938,9939,9958,9962,9967,9987],{"__ignoreMap":50},[324,9940,9941,9943,9945,9947,9949,9952,9954,9956],{"class":326,"line":327},[324,9942,6093],{"class":863},[324,9944,9832],{"class":734},[324,9946,868],{"class":867},[324,9948,7521],{"class":863},[324,9950,9951],{"class":734}," student",[324,9953,7247],{"class":863},[324,9955,1559],{"class":5945},[324,9957,874],{"class":867},[324,9959,9960],{"class":326,"line":203},[324,9961,2277],{"class":867},[324,9963,9964],{"class":326,"line":338},[324,9965,9966],{"class":772},"    \u002F\u002F s->age=18;\u002F\u002F提示❎无，不可以这样做\n",[324,9968,9969,9971,9973,9975,9977,9979,9981,9983,9985],{"class":326,"line":344},[324,9970,2282],{"class":867},[324,9972,1908],{"class":863},[324,9974,9854],{"class":867},[324,9976,1908],{"class":863},[324,9978,9859],{"class":867},[324,9980,1908],{"class":863},[324,9982,9864],{"class":867},[324,9984,1908],{"class":863},[324,9986,1930],{"class":867},[324,9988,9989],{"class":326,"line":484},[324,9990,2296],{"class":867},[14,9992,9994],{"id":9993},"_47案例","4.7案例",[192,9996,9997],{},[195,9998,9999],{},"案例说明：学校正在做毕设项目，每名老师带领5个学生，总共有3名老师，需求如下：设计学生和老师的结构体，其中在老师的结构体中，有老师姓名和一个存放5名学生的数组，作为成员学生的成员有姓名、考试分数，创建数组存放3名老师，通过函数给每个老师及所带的学生赋值，最终打印出老师数据以及老师所带的学生数据。",[316,10001,10003],{"className":854,"code":10002,"language":856,"meta":50,"style":50},"#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",[269,10004,10005,10011,10021,10027,10034,10038,10044,10048,10053,10059,10065,10069,10073,10079,10083,10088,10093,10106,10110,10115,10141,10145,10157,10184,10188,10200,10210,10214,10219,10248,10252,10264,10273,10300,10311,10321,10325,10329,10333,10338,10362,10366,10390,10394,10413,10439,10443,10468,10491,10515,10520,10525,10530,10539,10544,10550,10571,10577,10591,10597,10624,10633,10639,10647,10652],{"__ignoreMap":50},[324,10006,10007,10009],{"class":326,"line":327},[324,10008,2680],{"class":863},[324,10010,2683],{"class":738},[324,10012,10013,10015,10017,10019],{"class":326,"line":203},[324,10014,2688],{"class":863},[324,10016,2691],{"class":863},[324,10018,2694],{"class":734},[324,10020,2025],{"class":867},[324,10022,10023,10025],{"class":326,"line":338},[324,10024,2680],{"class":863},[324,10026,8478],{"class":738},[324,10028,10029,10031],{"class":326,"line":344},[324,10030,2680],{"class":863},[324,10032,10033],{"class":738},"\u003Cctime>\n",[324,10035,10036],{"class":326,"line":484},[324,10037,9267],{"class":772},[324,10039,10040,10042],{"class":326,"line":491},[324,10041,8488],{"class":863},[324,10043,8491],{"class":734},[324,10045,10046],{"class":326,"line":496},[324,10047,2277],{"class":867},[324,10049,10050],{"class":326,"line":502},[324,10051,10052],{"class":867},"    string sName;\n",[324,10054,10055,10057],{"class":326,"line":508},[324,10056,2715],{"class":863},[324,10058,8526],{"class":867},[324,10060,10061,10063],{"class":326,"line":514},[324,10062,2715],{"class":863},[324,10064,8538],{"class":867},[324,10066,10067],{"class":326,"line":2343},[324,10068,4724],{"class":867},[324,10070,10071],{"class":326,"line":2348},[324,10072,9304],{"class":772},[324,10074,10075,10077],{"class":326,"line":2354},[324,10076,8488],{"class":863},[324,10078,9311],{"class":734},[324,10080,10081],{"class":326,"line":2359},[324,10082,2277],{"class":867},[324,10084,10085],{"class":326,"line":2373},[324,10086,10087],{"class":867},"    string tName;\n",[324,10089,10090],{"class":326,"line":2378},[324,10091,10092],{"class":772},"    \u002F\u002F学生数组\n",[324,10094,10095,10097,10099,10102,10104],{"class":326,"line":2384},[324,10096,8624],{"class":863},[324,10098,8627],{"class":734},[324,10100,10101],{"class":867}," sArray[",[324,10103,1183],{"class":916},[324,10105,5419],{"class":867},[324,10107,10108],{"class":326,"line":2405},[324,10109,4724],{"class":867},[324,10111,10112],{"class":326,"line":2410},[324,10113,10114],{"class":772},"\u002F\u002F给老师和学生赋值的函数\n",[324,10116,10117,10119,10122,10124,10126,10129,10132,10135,10137,10139],{"class":326,"line":2424},[324,10118,6093],{"class":863},[324,10120,10121],{"class":734}," allocateSpace",[324,10123,868],{"class":867},[324,10125,8488],{"class":863},[324,10127,10128],{"class":734}," Teacher",[324,10130,10131],{"class":5945}," tArray",[324,10133,10134],{"class":867},"[],",[324,10136,871],{"class":863},[324,10138,8060],{"class":5945},[324,10140,874],{"class":867},[324,10142,10143],{"class":326,"line":2429},[324,10144,2277],{"class":867},[324,10146,10147,10150,10152,10155],{"class":326,"line":2458},[324,10148,10149],{"class":867},"    string nameSeed",[324,10151,913],{"class":863},[324,10153,10154],{"class":738},"\"ABCDE\"",[324,10156,2025],{"class":867},[324,10158,10159,10161,10163,10165,10168,10170,10172,10175,10177,10180,10182],{"class":326,"line":2463},[324,10160,3930],{"class":863},[324,10162,2389],{"class":867},[324,10164,871],{"class":863},[324,10166,10167],{"class":867}," i ",[324,10169,913],{"class":863},[324,10171,4822],{"class":916},[324,10173,10174],{"class":867},"; i ",[324,10176,1774],{"class":863},[324,10178,10179],{"class":867}," len; i",[324,10181,3022],{"class":863},[324,10183,874],{"class":867},[324,10185,10186],{"class":326,"line":2480},[324,10187,2760],{"class":867},[324,10189,10190,10193,10195,10198],{"class":326,"line":2485},[324,10191,10192],{"class":867},"        tArray[i].tName ",[324,10194,913],{"class":863},[324,10196,10197],{"class":738}," \"Teacher_\"",[324,10199,2025],{"class":867},[324,10201,10202,10204,10207],{"class":326,"line":2490},[324,10203,10192],{"class":867},[324,10205,10206],{"class":863},"+=",[324,10208,10209],{"class":867},"nameSeed[i];\n",[324,10211,10212],{"class":326,"line":2495},[324,10213,488],{"emptyLinePlaceholder":487},[324,10215,10216],{"class":326,"line":2509},[324,10217,10218],{"class":772},"        \u002F\u002F通过循环给每名老师带的学生赋值\n",[324,10220,10221,10223,10225,10227,10230,10232,10234,10237,10239,10241,10244,10246],{"class":326,"line":2514},[324,10222,4132],{"class":863},[324,10224,2389],{"class":867},[324,10226,871],{"class":863},[324,10228,10229],{"class":867}," j ",[324,10231,913],{"class":863},[324,10233,4822],{"class":916},[324,10235,10236],{"class":867},"; j ",[324,10238,1774],{"class":863},[324,10240,2878],{"class":916},[324,10242,10243],{"class":867},"; j",[324,10245,3022],{"class":863},[324,10247,874],{"class":867},[324,10249,10250],{"class":326,"line":3306},[324,10251,3239],{"class":867},[324,10253,10254,10257,10259,10262],{"class":326,"line":3320},[324,10255,10256],{"class":867},"            tArray[i].sArray[j].sName ",[324,10258,913],{"class":863},[324,10260,10261],{"class":738}," \"Student_\"",[324,10263,2025],{"class":867},[324,10265,10266,10268,10270],{"class":326,"line":3328},[324,10267,10256],{"class":867},[324,10269,10206],{"class":863},[324,10271,10272],{"class":867}," nameSeed[j];\n",[324,10274,10275,10278,10281,10283,10285,10287,10289,10291,10293,10295,10297],{"class":326,"line":3333},[324,10276,10277],{"class":863},"            int",[324,10279,10280],{"class":867}," random",[324,10282,913],{"class":863},[324,10284,3153],{"class":734},[324,10286,3156],{"class":867},[324,10288,1192],{"class":863},[324,10290,1771],{"class":916},[324,10292,1345],{"class":863},[324,10294,1265],{"class":916},[324,10296,923],{"class":867},[324,10298,10299],{"class":772},"\u002F\u002F40~99\n",[324,10301,10302,10305,10307,10309],{"class":326,"line":3339},[324,10303,10304],{"class":867},"            tArray[i].sArray[j].age ",[324,10306,913],{"class":863},[324,10308,9679],{"class":916},[324,10310,2025],{"class":867},[324,10312,10313,10316,10318],{"class":326,"line":3345},[324,10314,10315],{"class":867},"            tArray[i].sArray[j].score ",[324,10317,913],{"class":863},[324,10319,10320],{"class":867}," random;\n",[324,10322,10323],{"class":326,"line":3350},[324,10324,3258],{"class":867},[324,10326,10327],{"class":326,"line":8677},[324,10328,2917],{"class":867},[324,10330,10331],{"class":326,"line":8701},[324,10332,2296],{"class":867},[324,10334,10335],{"class":326,"line":8706},[324,10336,10337],{"class":772},"\u002F\u002F打印所有信息的函数\n",[324,10339,10340,10342,10345,10347,10349,10351,10353,10356,10358,10360],{"class":326,"line":8712},[324,10341,6093],{"class":863},[324,10343,10344],{"class":734}," printInfo",[324,10346,868],{"class":867},[324,10348,8488],{"class":863},[324,10350,10128],{"class":734},[324,10352,10131],{"class":5945},[324,10354,10355],{"class":867},"[], ",[324,10357,871],{"class":863},[324,10359,8060],{"class":5945},[324,10361,874],{"class":867},[324,10363,10364],{"class":326,"line":8739},[324,10365,2277],{"class":867},[324,10367,10368,10370,10372,10374,10376,10378,10380,10382,10384,10386,10388],{"class":326,"line":8744},[324,10369,3930],{"class":863},[324,10371,2389],{"class":867},[324,10373,871],{"class":863},[324,10375,10167],{"class":867},[324,10377,913],{"class":863},[324,10379,4822],{"class":916},[324,10381,10174],{"class":867},[324,10383,1774],{"class":863},[324,10385,10179],{"class":867},[324,10387,3022],{"class":863},[324,10389,874],{"class":867},[324,10391,10392],{"class":326,"line":8750},[324,10393,2760],{"class":867},[324,10395,10396,10399,10401,10404,10406,10409,10411],{"class":326,"line":8762},[324,10397,10398],{"class":867},"        cout ",[324,10400,1908],{"class":863},[324,10402,10403],{"class":738}," \"Teacher: \"",[324,10405,2176],{"class":863},[324,10407,10408],{"class":867}," tArray[i].tName ",[324,10410,1908],{"class":863},[324,10412,9569],{"class":867},[324,10414,10415,10417,10419,10421,10423,10425,10427,10429,10431,10433,10435,10437],{"class":326,"line":8774},[324,10416,4132],{"class":863},[324,10418,2389],{"class":867},[324,10420,871],{"class":863},[324,10422,10229],{"class":867},[324,10424,913],{"class":863},[324,10426,4822],{"class":916},[324,10428,10236],{"class":867},[324,10430,1774],{"class":863},[324,10432,2878],{"class":916},[324,10434,10243],{"class":867},[324,10436,3022],{"class":863},[324,10438,874],{"class":867},[324,10440,10441],{"class":326,"line":8786},[324,10442,3239],{"class":867},[324,10444,10446,10449,10451,10454,10456,10459,10461,10464,10466],{"class":326,"line":10445},47,[324,10447,10448],{"class":867},"            cout ",[324,10450,1908],{"class":863},[324,10452,10453],{"class":738}," \"",[324,10455,1965],{"class":916},[324,10457,10458],{"class":738},"Student: \"",[324,10460,2176],{"class":863},[324,10462,10463],{"class":867}," tArray[i].sArray[j].sName",[324,10465,1908],{"class":863},[324,10467,1930],{"class":867},[324,10469,10471,10473,10475,10477,10479,10482,10484,10487,10489],{"class":326,"line":10470},48,[324,10472,10448],{"class":867},[324,10474,1908],{"class":863},[324,10476,10453],{"class":738},[324,10478,1965],{"class":916},[324,10480,10481],{"class":738},"Age: \"",[324,10483,2176],{"class":863},[324,10485,10486],{"class":867}," tArray[i].sArray[j].age ",[324,10488,1908],{"class":863},[324,10490,9569],{"class":867},[324,10492,10494,10496,10498,10500,10502,10505,10507,10510,10512],{"class":326,"line":10493},49,[324,10495,10448],{"class":867},[324,10497,1908],{"class":863},[324,10499,10453],{"class":738},[324,10501,1965],{"class":916},[324,10503,10504],{"class":738},"Score: \"",[324,10506,2176],{"class":863},[324,10508,10509],{"class":867}," tArray[i].sArray[j].score ",[324,10511,1908],{"class":863},[324,10513,10514],{"class":867}," endl;   \n",[324,10516,10518],{"class":326,"line":10517},50,[324,10519,3258],{"class":867},[324,10521,10523],{"class":326,"line":10522},51,[324,10524,2917],{"class":867},[324,10526,10528],{"class":326,"line":10527},52,[324,10529,2296],{"class":867},[324,10531,10533,10535,10537],{"class":326,"line":10532},53,[324,10534,871],{"class":863},[324,10536,2703],{"class":734},[324,10538,2706],{"class":867},[324,10540,10542],{"class":326,"line":10541},54,[324,10543,2277],{"class":867},[324,10545,10547],{"class":326,"line":10546},55,[324,10548,10549],{"class":772},"    \u002F\u002F随机数种子\n",[324,10551,10553,10555,10557,10559,10561,10563,10565,10567,10569],{"class":326,"line":10552},56,[324,10554,3103],{"class":734},[324,10556,3106],{"class":867},[324,10558,3109],{"class":863},[324,10560,3112],{"class":863},[324,10562,1293],{"class":867},[324,10564,3117],{"class":734},[324,10566,868],{"class":867},[324,10568,3122],{"class":916},[324,10570,3125],{"class":867},[324,10572,10574],{"class":326,"line":10573},57,[324,10575,10576],{"class":772},"    \u002F\u002F1.创建3名老师的数组\n",[324,10578,10580,10582,10584,10587,10589],{"class":326,"line":10579},58,[324,10581,8624],{"class":863},[324,10583,10128],{"class":734},[324,10585,10586],{"class":867}," tArray[",[324,10588,938],{"class":916},[324,10590,5419],{"class":867},[324,10592,10594],{"class":326,"line":10593},59,[324,10595,10596],{"class":772},"    \u002F\u002F2.通过函数给3名老师的信息赋值，并给老师带的学生信息赋值\n",[324,10598,10600,10602,10605,10607,10610,10613,10615,10617,10620,10622],{"class":326,"line":10599},60,[324,10601,2715],{"class":863},[324,10603,10604],{"class":867}," len ",[324,10606,913],{"class":863},[324,10608,10609],{"class":863}," sizeof",[324,10611,10612],{"class":867},"(tArray) ",[324,10614,1448],{"class":863},[324,10616,10609],{"class":863},[324,10618,10619],{"class":867},"(tArray[",[324,10621,1056],{"class":916},[324,10623,4585],{"class":867},[324,10625,10627,10630],{"class":326,"line":10626},61,[324,10628,10629],{"class":734},"    allocateSpace",[324,10631,10632],{"class":867},"(tArray, len);\n",[324,10634,10636],{"class":326,"line":10635},62,[324,10637,10638],{"class":772},"    \u002F\u002F3.打印所有老师及所带的学生信息\n",[324,10640,10642,10645],{"class":326,"line":10641},63,[324,10643,10644],{"class":734},"    printInfo",[324,10646,10632],{"class":867},[324,10648,10650],{"class":326,"line":10649},64,[324,10651,488],{"emptyLinePlaceholder":487},[324,10653,10655],{"class":326,"line":10654},65,[324,10656,2296],{"class":867},[192,10658,10659],{"start":203},[195,10660,10661,10664],{},[116,10662,10663],{},"案例描述：","：设计一个英雄的结构体，包括成员姓名，年龄，性别;创建结构体数组，数组中存放5名英雄。通过冒泡排序的算法，将数组中的英雄按照年龄进行升序排序，最终打印排序后的结果。",[19,10666,10667],{},"五名英雄信息如下：",[316,10669,10673],{"className":10670,"code":10671,"language":10672,"meta":50,"style":50},"language-C++ shiki shiki-themes github-light github-dark","        {\"刘备\",23,\"男\"},\n        {\"关羽\",22,\"男\"},\n        {\"张飞\",20,\"男\"},\n        {\"赵云\",21,\"男\"},\n        {\"貂蝉\",19,\"女\"},\n","C++",[269,10674,10675,10693,10710,10727,10744],{"__ignoreMap":50},[324,10676,10677,10679,10682,10684,10686,10688,10691],{"class":326,"line":327},[324,10678,5646],{"class":867},[324,10680,10681],{"class":738},"\"刘备\"",[324,10683,1242],{"class":867},[324,10685,1639],{"class":916},[324,10687,1242],{"class":867},[324,10689,10690],{"class":738},"\"男\"",[324,10692,5659],{"class":867},[324,10694,10695,10697,10700,10702,10704,10706,10708],{"class":326,"line":203},[324,10696,5646],{"class":867},[324,10698,10699],{"class":738},"\"关羽\"",[324,10701,1242],{"class":867},[324,10703,1614],{"class":916},[324,10705,1242],{"class":867},[324,10707,10690],{"class":738},[324,10709,5659],{"class":867},[324,10711,10712,10714,10717,10719,10721,10723,10725],{"class":326,"line":338},[324,10713,5646],{"class":867},[324,10715,10716],{"class":738},"\"张飞\"",[324,10718,1242],{"class":867},[324,10720,1564],{"class":916},[324,10722,1242],{"class":867},[324,10724,10690],{"class":738},[324,10726,5659],{"class":867},[324,10728,10729,10731,10734,10736,10738,10740,10742],{"class":326,"line":344},[324,10730,5646],{"class":867},[324,10732,10733],{"class":738},"\"赵云\"",[324,10735,1242],{"class":867},[324,10737,1589],{"class":916},[324,10739,1242],{"class":867},[324,10741,10690],{"class":738},[324,10743,5659],{"class":867},[324,10745,10746,10748,10751,10753,10755,10757,10760],{"class":326,"line":484},[324,10747,5646],{"class":867},[324,10749,10750],{"class":738},"\"貂蝉\"",[324,10752,1242],{"class":867},[324,10754,1539],{"class":916},[324,10756,1242],{"class":867},[324,10758,10759],{"class":738},"\"女\"",[324,10761,5659],{"class":867},[19,10763,10764],{},"代码：",[316,10766,10768],{"className":854,"code":10767,"language":856,"meta":50,"style":50},"#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",[269,10769,10770,10776,10786,10792,10799,10803,10807,10813,10818,10822,10827,10850,10854,10879,10883,10916,10921,10950,10955,10970,10996,11016,11021,11026,11030,11034,11039,11061,11065,11089,11093,11155,11159,11163,11171,11175,11180,11191,11195,11211,11227,11243,11259,11275,11279,11299,11321,11326,11339,11346,11351,11357,11362,11375,11381],{"__ignoreMap":50},[324,10771,10772,10774],{"class":326,"line":327},[324,10773,2680],{"class":863},[324,10775,2683],{"class":738},[324,10777,10778,10780,10782,10784],{"class":326,"line":203},[324,10779,2688],{"class":863},[324,10781,2691],{"class":863},[324,10783,2694],{"class":734},[324,10785,2025],{"class":867},[324,10787,10788,10790],{"class":326,"line":338},[324,10789,2680],{"class":863},[324,10791,8478],{"class":738},[324,10793,10794,10796],{"class":326,"line":344},[324,10795,8488],{"class":863},[324,10797,10798],{"class":734}," Sanguo\n",[324,10800,10801],{"class":326,"line":484},[324,10802,2277],{"class":867},[324,10804,10805],{"class":326,"line":491},[324,10806,8514],{"class":867},[324,10808,10809,10811],{"class":326,"line":496},[324,10810,2715],{"class":863},[324,10812,8526],{"class":867},[324,10814,10815],{"class":326,"line":502},[324,10816,10817],{"class":867},"    string gender;\n",[324,10819,10820],{"class":326,"line":508},[324,10821,4724],{"class":867},[324,10823,10824],{"class":326,"line":514},[324,10825,10826],{"class":772},"\u002F\u002F定义排序函数\n",[324,10828,10829,10831,10833,10835,10838,10840,10842,10844,10846,10848],{"class":326,"line":2343},[324,10830,6093],{"class":863},[324,10832,8045],{"class":734},[324,10834,868],{"class":867},[324,10836,10837],{"class":734},"Sanguo",[324,10839,7247],{"class":863},[324,10841,1559],{"class":5945},[324,10843,1242],{"class":867},[324,10845,871],{"class":863},[324,10847,8060],{"class":5945},[324,10849,874],{"class":867},[324,10851,10852],{"class":326,"line":2348},[324,10853,2277],{"class":867},[324,10855,10856,10858,10860,10862,10864,10866,10868,10870,10872,10875,10877],{"class":326,"line":2354},[324,10857,3930],{"class":863},[324,10859,868],{"class":867},[324,10861,871],{"class":863},[324,10863,3761],{"class":867},[324,10865,913],{"class":863},[324,10867,1056],{"class":916},[324,10869,3768],{"class":867},[324,10871,1774],{"class":863},[324,10873,10874],{"class":867},"len;i",[324,10876,3022],{"class":863},[324,10878,874],{"class":867},[324,10880,10881],{"class":326,"line":2359},[324,10882,2760],{"class":867},[324,10884,10885,10888,10890,10892,10894,10896,10898,10900,10902,10904,10906,10908,10910,10912,10914],{"class":326,"line":2373},[324,10886,10887],{"class":863},"     for",[324,10889,2389],{"class":867},[324,10891,871],{"class":863},[324,10893,4139],{"class":867},[324,10895,913],{"class":863},[324,10897,1056],{"class":916},[324,10899,4146],{"class":867},[324,10901,1774],{"class":863},[324,10903,8087],{"class":867},[324,10905,1396],{"class":863},[324,10907,1082],{"class":916},[324,10909,1396],{"class":863},[324,10911,4279],{"class":867},[324,10913,3022],{"class":863},[324,10915,874],{"class":867},[324,10917,10918],{"class":326,"line":2378},[324,10919,10920],{"class":867},"     {\n",[324,10922,10923,10926,10929,10931,10934,10936,10939,10941,10943,10945,10947],{"class":326,"line":2384},[324,10924,10925],{"class":863},"         if",[324,10927,10928],{"class":867}," ((s",[324,10930,1345],{"class":863},[324,10932,10933],{"class":867},"j)->age ",[324,10935,1824],{"class":863},[324,10937,10938],{"class":867}," (s",[324,10940,1345],{"class":863},[324,10942,1331],{"class":867},[324,10944,1345],{"class":863},[324,10946,1082],{"class":916},[324,10948,10949],{"class":867},")->age)\n",[324,10951,10952],{"class":326,"line":2405},[324,10953,10954],{"class":867},"         {\n",[324,10956,10957,10960,10962,10965,10967],{"class":326,"line":2410},[324,10958,10959],{"class":867},"             Sanguo temp",[324,10961,7882],{"class":863},[324,10963,10964],{"class":867},"(s",[324,10966,1345],{"class":863},[324,10968,10969],{"class":867},"j);\n",[324,10971,10972,10975,10977,10979,10982,10984,10986,10988,10990,10992,10994],{"class":326,"line":2424},[324,10973,10974],{"class":863},"             *",[324,10976,10964],{"class":867},[324,10978,1345],{"class":863},[324,10980,10981],{"class":867},"j)",[324,10983,7882],{"class":863},[324,10985,10964],{"class":867},[324,10987,1345],{"class":863},[324,10989,1331],{"class":867},[324,10991,1345],{"class":863},[324,10993,1082],{"class":916},[324,10995,3448],{"class":867},[324,10997,10998,11000,11002,11004,11006,11008,11010,11012,11014],{"class":326,"line":2429},[324,10999,10974],{"class":863},[324,11001,10964],{"class":867},[324,11003,1345],{"class":863},[324,11005,1331],{"class":867},[324,11007,1345],{"class":863},[324,11009,1082],{"class":916},[324,11011,1293],{"class":867},[324,11013,913],{"class":863},[324,11015,5009],{"class":867},[324,11017,11018],{"class":326,"line":2458},[324,11019,11020],{"class":867},"         }\n",[324,11022,11023],{"class":326,"line":2463},[324,11024,11025],{"class":867},"     }\n",[324,11027,11028],{"class":326,"line":2480},[324,11029,2917],{"class":867},[324,11031,11032],{"class":326,"line":2485},[324,11033,2296],{"class":867},[324,11035,11036],{"class":326,"line":2490},[324,11037,11038],{"class":772},"\u002F\u002F定义打印函数\n",[324,11040,11041,11043,11045,11047,11049,11051,11053,11055,11057,11059],{"class":326,"line":2495},[324,11042,6093],{"class":863},[324,11044,10344],{"class":734},[324,11046,868],{"class":867},[324,11048,10837],{"class":734},[324,11050,7247],{"class":863},[324,11052,1559],{"class":5945},[324,11054,1242],{"class":867},[324,11056,871],{"class":863},[324,11058,8060],{"class":5945},[324,11060,874],{"class":867},[324,11062,11063],{"class":326,"line":2509},[324,11064,2277],{"class":867},[324,11066,11067,11069,11071,11073,11075,11077,11079,11081,11083,11085,11087],{"class":326,"line":2514},[324,11068,3930],{"class":863},[324,11070,2389],{"class":867},[324,11072,871],{"class":863},[324,11074,3761],{"class":867},[324,11076,913],{"class":863},[324,11078,1056],{"class":916},[324,11080,3768],{"class":867},[324,11082,1774],{"class":863},[324,11084,10874],{"class":867},[324,11086,3022],{"class":863},[324,11088,874],{"class":867},[324,11090,11091],{"class":326,"line":3306},[324,11092,2760],{"class":867},[324,11094,11095,11097,11099,11101,11103,11106,11108,11110,11112,11115,11117,11119,11121,11124,11126,11128,11130,11133,11135,11137,11139,11142,11144,11146,11148,11151,11153],{"class":326,"line":3320},[324,11096,4180],{"class":867},[324,11098,1908],{"class":863},[324,11100,1115],{"class":738},[324,11102,1965],{"class":916},[324,11104,11105],{"class":738},"姓名：\"",[324,11107,1908],{"class":863},[324,11109,10964],{"class":867},[324,11111,1345],{"class":863},[324,11113,11114],{"class":867},"i)->name",[324,11116,1908],{"class":863},[324,11118,1115],{"class":738},[324,11120,1965],{"class":916},[324,11122,11123],{"class":738},"年龄：\"",[324,11125,1908],{"class":863},[324,11127,10964],{"class":867},[324,11129,1345],{"class":863},[324,11131,11132],{"class":867},"i)->age",[324,11134,1908],{"class":863},[324,11136,1115],{"class":738},[324,11138,1965],{"class":916},[324,11140,11141],{"class":738},"性别：\"",[324,11143,1908],{"class":863},[324,11145,10964],{"class":867},[324,11147,1345],{"class":863},[324,11149,11150],{"class":867},"i)->gender",[324,11152,1908],{"class":863},[324,11154,1930],{"class":867},[324,11156,11157],{"class":326,"line":3328},[324,11158,2917],{"class":867},[324,11160,11161],{"class":326,"line":3333},[324,11162,2296],{"class":867},[324,11164,11165,11167,11169],{"class":326,"line":3339},[324,11166,871],{"class":863},[324,11168,2703],{"class":734},[324,11170,2706],{"class":867},[324,11172,11173],{"class":326,"line":3345},[324,11174,2277],{"class":867},[324,11176,11177],{"class":326,"line":3350},[324,11178,11179],{"class":772},"    \u002F\u002F定义结构体变量\n",[324,11181,11182,11185,11187,11189],{"class":326,"line":8677},[324,11183,11184],{"class":867},"    Sanguo s1[",[324,11186,1183],{"class":916},[324,11188,1804],{"class":867},[324,11190,5637],{"class":863},[324,11192,11193],{"class":326,"line":8701},[324,11194,2760],{"class":867},[324,11196,11197,11199,11201,11203,11205,11207,11209],{"class":326,"line":8706},[324,11198,5646],{"class":867},[324,11200,10681],{"class":738},[324,11202,1242],{"class":867},[324,11204,1639],{"class":916},[324,11206,1242],{"class":867},[324,11208,10690],{"class":738},[324,11210,5659],{"class":867},[324,11212,11213,11215,11217,11219,11221,11223,11225],{"class":326,"line":8712},[324,11214,5646],{"class":867},[324,11216,10699],{"class":738},[324,11218,1242],{"class":867},[324,11220,1614],{"class":916},[324,11222,1242],{"class":867},[324,11224,10690],{"class":738},[324,11226,5659],{"class":867},[324,11228,11229,11231,11233,11235,11237,11239,11241],{"class":326,"line":8739},[324,11230,5646],{"class":867},[324,11232,10716],{"class":738},[324,11234,1242],{"class":867},[324,11236,1564],{"class":916},[324,11238,1242],{"class":867},[324,11240,10690],{"class":738},[324,11242,5659],{"class":867},[324,11244,11245,11247,11249,11251,11253,11255,11257],{"class":326,"line":8744},[324,11246,5646],{"class":867},[324,11248,10733],{"class":738},[324,11250,1242],{"class":867},[324,11252,1589],{"class":916},[324,11254,1242],{"class":867},[324,11256,10690],{"class":738},[324,11258,5659],{"class":867},[324,11260,11261,11263,11265,11267,11269,11271,11273],{"class":326,"line":8750},[324,11262,5646],{"class":867},[324,11264,10750],{"class":738},[324,11266,1242],{"class":867},[324,11268,1539],{"class":916},[324,11270,1242],{"class":867},[324,11272,10759],{"class":738},[324,11274,5659],{"class":867},[324,11276,11277],{"class":326,"line":8762},[324,11278,5680],{"class":867},[324,11280,11281,11283,11285,11287,11290,11292,11295,11297],{"class":326,"line":8774},[324,11282,2715],{"class":863},[324,11284,8060],{"class":867},[324,11286,4932],{"class":863},[324,11288,11289],{"class":867},"(s1)",[324,11291,4938],{"class":863},[324,11293,11294],{"class":867},"(s1[",[324,11296,1056],{"class":916},[324,11298,4585],{"class":867},[324,11300,11301,11304,11306,11309,11311,11314,11317,11319],{"class":326,"line":8786},[324,11302,11303],{"class":867},"    Sanguo ",[324,11305,1319],{"class":863},[324,11307,11308],{"class":867},"s ",[324,11310,913],{"class":863},[324,11312,11313],{"class":863}," &",[324,11315,11316],{"class":867},"s1[",[324,11318,1056],{"class":916},[324,11320,5419],{"class":867},[324,11322,11323],{"class":326,"line":10445},[324,11324,11325],{"class":772},"    \u002F\u002F排序前：\n",[324,11327,11328,11330,11332,11335,11337],{"class":326,"line":10470},[324,11329,7258],{"class":867},[324,11331,1908],{"class":863},[324,11333,11334],{"class":738}," \"排序前：\"",[324,11336,2176],{"class":863},[324,11338,9569],{"class":867},[324,11340,11341,11343],{"class":326,"line":10493},[324,11342,10644],{"class":734},[324,11344,11345],{"class":867},"(s,len);\n",[324,11347,11348],{"class":326,"line":10517},[324,11349,11350],{"class":772},"    \u002F\u002F调用排序函数\n",[324,11352,11353,11355],{"class":326,"line":10522},[324,11354,8327],{"class":734},[324,11356,11345],{"class":867},[324,11358,11359],{"class":326,"line":10527},[324,11360,11361],{"class":772},"    \u002F\u002F排序后\n",[324,11363,11364,11366,11368,11371,11373],{"class":326,"line":10532},[324,11365,7258],{"class":867},[324,11367,1908],{"class":863},[324,11369,11370],{"class":738}," \"排序后：\"",[324,11372,2176],{"class":863},[324,11374,9569],{"class":867},[324,11376,11377,11379],{"class":326,"line":10541},[324,11378,10644],{"class":734},[324,11380,11345],{"class":867},[324,11382,11383],{"class":326,"line":10546},[324,11384,2296],{"class":867},[19,11386,11387,11388,11390],{},"注意：使用指针时直接用传首地址**&s",[324,11389,1056],{},"**",[775,11392,11393],{},"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":50,"searchDepth":203,"depth":203,"links":11395},[11396,11397,11398,11399,11400,11401,11402],{"id":8432,"depth":203,"text":8433},{"id":8794,"depth":203,"text":8795},{"id":9063,"depth":203,"text":9064},{"id":9228,"depth":203,"text":9229},{"id":9444,"depth":203,"text":9445},{"id":9765,"depth":203,"text":9766},{"id":9993,"depth":203,"text":9994},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch4",{"title":8421,"description":8429},"wiki\u002F2026-05-24-c++学习\u002Fch4-结构体","9PmekB_EowSYIB-KISKoLIyOoICqlLJlAWgdT5pQ-Ns",{"id":11409,"title":11410,"body":11411,"description":50,"extension":792,"meta":12754,"navigation":487,"path":12755,"seo":12756,"stem":12757,"__hash__":12758},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型.md","5.程序内存模型",{"type":7,"value":11412,"toc":12748},[11413,11416,11420,11426,11440,11445,11448,11452,11459,11465,11468,11475,11481,11486,11489,11492,11495,12059,12062,12076,12080,12085,12101,12241,12244,12250,12253,12258,12266,12374,12377,12382,12385,12390,12393,12399,12402,12745],[10,11414,11410],{"id":11415},"_5程序内存模型",[14,11417,11419],{"id":11418},"_51内存分区模型","5.1内存分区模型",[19,11421,11422,11423],{},"C++程序在执行时，将内存大方向划分为",[116,11424,11425],{},"4个区域",[1871,11427,11428,11431,11434,11437],{},[195,11429,11430],{},"代码区：存放函数体的二进制代码，由操作系统进行管理的",[195,11432,11433],{},"全局区：存放全局变量和静态变量以及常量",[195,11435,11436],{},"栈区：由编译器自动分配释放, 存放函数的参数值,局部变量等",[195,11438,11439],{},"堆区：由程序员分配和释放,若程序员不释放,程序结束时由操作系统回收",[19,11441,11442],{},[116,11443,11444],{},"内存四区意义：",[19,11446,11447],{},"不同区域存放的数据，赋予不同的生命周期, 给我们更大的灵活编程",[35,11449,11451],{"id":11450},"_511程序运行前","5.1.1程序运行前",[19,11453,11454,11455,11458],{},"​\t在程序编译后，生成了exe可执行程序，",[116,11456,11457],{},"未执行该程序前","分为两个区域",[19,11460,11461,11462],{},"​\t",[116,11463,11464],{},"代码区：",[19,11466,11467],{},"​\t\t存放 CPU 执行的机器指令",[19,11469,11470,11471,11474],{},"​\t\t代码区是",[116,11472,11473],{},"共享","的，共享的目的是对于频繁被执行的程序，只需要在内存中有一份代码即可",[19,11476,11470,11477,11480],{},[116,11478,11479],{},"只读","的，使其只读的原因是防止程序意外地修改了它的指令",[19,11482,11461,11483],{},[116,11484,11485],{},"全局区：",[19,11487,11488],{},"​\t\t全局变量和静态变量存放在此.",[19,11490,11491],{},"​\t\t全局区还包含了常量区, 字符串常量和其他常量也存放在此.",[19,11493,11494],{},"​\t\t该区域的数据在程序结束后由操作系统释放",[316,11496,11498],{"className":854,"code":11497,"language":856,"meta":50,"style":50},"\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",[269,11499,11500,11505,11518,11531,11535,11540,11555,11570,11574,11583,11587,11592,11605,11618,11622,11627,11653,11679,11683,11710,11736,11740,11745,11761,11776,11780,11806,11832,11836,11861,11886,11890,11916,11942,11946,11962,11977,12003,12029,12033,12043,12047,12055],{"__ignoreMap":50},[324,11501,11502],{"class":326,"line":327},[324,11503,11504],{"class":772},"\u002F\u002F全局变量\n",[324,11506,11507,11509,11512,11514,11516],{"class":326,"line":203},[324,11508,871],{"class":863},[324,11510,11511],{"class":867}," g_a ",[324,11513,913],{"class":863},[324,11515,2768],{"class":916},[324,11517,2025],{"class":867},[324,11519,11520,11522,11525,11527,11529],{"class":326,"line":338},[324,11521,871],{"class":863},[324,11523,11524],{"class":867}," g_b ",[324,11526,913],{"class":863},[324,11528,2768],{"class":916},[324,11530,2025],{"class":867},[324,11532,11533],{"class":326,"line":344},[324,11534,488],{"emptyLinePlaceholder":487},[324,11536,11537],{"class":326,"line":484},[324,11538,11539],{"class":772},"\u002F\u002F全局常量\n",[324,11541,11542,11544,11546,11549,11551,11553],{"class":326,"line":491},[324,11543,7521],{"class":863},[324,11545,3112],{"class":863},[324,11547,11548],{"class":867}," c_g_a ",[324,11550,913],{"class":863},[324,11552,2768],{"class":916},[324,11554,2025],{"class":867},[324,11556,11557,11559,11561,11564,11566,11568],{"class":326,"line":496},[324,11558,7521],{"class":863},[324,11560,3112],{"class":863},[324,11562,11563],{"class":867}," c_g_b ",[324,11565,913],{"class":863},[324,11567,2768],{"class":916},[324,11569,2025],{"class":867},[324,11571,11572],{"class":326,"line":502},[324,11573,488],{"emptyLinePlaceholder":487},[324,11575,11576,11578,11580],{"class":326,"line":508},[324,11577,871],{"class":863},[324,11579,2703],{"class":734},[324,11581,11582],{"class":867},"() {\n",[324,11584,11585],{"class":326,"line":514},[324,11586,488],{"emptyLinePlaceholder":487},[324,11588,11589],{"class":326,"line":2343},[324,11590,11591],{"class":772},"    \u002F\u002F局部变量\n",[324,11593,11594,11596,11599,11601,11603],{"class":326,"line":2348},[324,11595,2715],{"class":863},[324,11597,11598],{"class":867}," a ",[324,11600,913],{"class":863},[324,11602,2768],{"class":916},[324,11604,2025],{"class":867},[324,11606,11607,11609,11612,11614,11616],{"class":326,"line":2354},[324,11608,2715],{"class":863},[324,11610,11611],{"class":867}," b ",[324,11613,913],{"class":863},[324,11615,2768],{"class":916},[324,11617,2025],{"class":867},[324,11619,11620],{"class":326,"line":2359},[324,11621,488],{"emptyLinePlaceholder":487},[324,11623,11624],{"class":326,"line":2373},[324,11625,11626],{"class":772},"    \u002F\u002F打印地址\n",[324,11628,11629,11631,11633,11636,11638,11640,11642,11644,11646,11649,11651],{"class":326,"line":2378},[324,11630,7258],{"class":867},[324,11632,1908],{"class":863},[324,11634,11635],{"class":738}," \"局部变量a地址为： \"",[324,11637,2176],{"class":863},[324,11639,2389],{"class":867},[324,11641,871],{"class":863},[324,11643,1293],{"class":867},[324,11645,1217],{"class":863},[324,11647,11648],{"class":867},"a ",[324,11650,1908],{"class":863},[324,11652,9569],{"class":867},[324,11654,11655,11657,11659,11662,11664,11666,11668,11670,11672,11675,11677],{"class":326,"line":2384},[324,11656,7258],{"class":867},[324,11658,1908],{"class":863},[324,11660,11661],{"class":738}," \"局部变量b地址为： \"",[324,11663,2176],{"class":863},[324,11665,2389],{"class":867},[324,11667,871],{"class":863},[324,11669,1293],{"class":867},[324,11671,1217],{"class":863},[324,11673,11674],{"class":867},"b ",[324,11676,1908],{"class":863},[324,11678,9569],{"class":867},[324,11680,11681],{"class":326,"line":2405},[324,11682,488],{"emptyLinePlaceholder":487},[324,11684,11685,11687,11689,11692,11694,11697,11699,11701,11703,11706,11708],{"class":326,"line":2410},[324,11686,7258],{"class":867},[324,11688,1908],{"class":863},[324,11690,11691],{"class":738}," \"全局变量g_a地址为： \"",[324,11693,2176],{"class":863},[324,11695,11696],{"class":867},"  (",[324,11698,871],{"class":863},[324,11700,1293],{"class":867},[324,11702,1217],{"class":863},[324,11704,11705],{"class":867},"g_a ",[324,11707,1908],{"class":863},[324,11709,9569],{"class":867},[324,11711,11712,11714,11716,11719,11721,11723,11725,11727,11729,11732,11734],{"class":326,"line":2424},[324,11713,7258],{"class":867},[324,11715,1908],{"class":863},[324,11717,11718],{"class":738}," \"全局变量g_b地址为： \"",[324,11720,2176],{"class":863},[324,11722,11696],{"class":867},[324,11724,871],{"class":863},[324,11726,1293],{"class":867},[324,11728,1217],{"class":863},[324,11730,11731],{"class":867},"g_b ",[324,11733,1908],{"class":863},[324,11735,9569],{"class":867},[324,11737,11738],{"class":326,"line":2429},[324,11739,488],{"emptyLinePlaceholder":487},[324,11741,11742],{"class":326,"line":2458},[324,11743,11744],{"class":772},"    \u002F\u002F静态变量\n",[324,11746,11747,11750,11752,11755,11757,11759],{"class":326,"line":2463},[324,11748,11749],{"class":863},"    static",[324,11751,3112],{"class":863},[324,11753,11754],{"class":867}," s_a ",[324,11756,913],{"class":863},[324,11758,2768],{"class":916},[324,11760,2025],{"class":867},[324,11762,11763,11765,11767,11770,11772,11774],{"class":326,"line":2480},[324,11764,11749],{"class":863},[324,11766,3112],{"class":863},[324,11768,11769],{"class":867}," s_b ",[324,11771,913],{"class":863},[324,11773,2768],{"class":916},[324,11775,2025],{"class":867},[324,11777,11778],{"class":326,"line":2485},[324,11779,488],{"emptyLinePlaceholder":487},[324,11781,11782,11784,11786,11789,11791,11793,11795,11797,11799,11802,11804],{"class":326,"line":2490},[324,11783,7258],{"class":867},[324,11785,1908],{"class":863},[324,11787,11788],{"class":738}," \"静态变量s_a地址为： \"",[324,11790,2176],{"class":863},[324,11792,2389],{"class":867},[324,11794,871],{"class":863},[324,11796,1293],{"class":867},[324,11798,1217],{"class":863},[324,11800,11801],{"class":867},"s_a ",[324,11803,1908],{"class":863},[324,11805,9569],{"class":867},[324,11807,11808,11810,11812,11815,11817,11819,11821,11823,11825,11828,11830],{"class":326,"line":2495},[324,11809,7258],{"class":867},[324,11811,1908],{"class":863},[324,11813,11814],{"class":738}," \"静态变量s_b地址为： \"",[324,11816,2176],{"class":863},[324,11818,2389],{"class":867},[324,11820,871],{"class":863},[324,11822,1293],{"class":867},[324,11824,1217],{"class":863},[324,11826,11827],{"class":867},"s_b ",[324,11829,1908],{"class":863},[324,11831,9569],{"class":867},[324,11833,11834],{"class":326,"line":2509},[324,11835,488],{"emptyLinePlaceholder":487},[324,11837,11838,11840,11842,11845,11847,11849,11851,11853,11855,11857,11859],{"class":326,"line":2514},[324,11839,7258],{"class":867},[324,11841,1908],{"class":863},[324,11843,11844],{"class":738}," \"字符串常量地址为： \"",[324,11846,2176],{"class":863},[324,11848,2389],{"class":867},[324,11850,871],{"class":863},[324,11852,1293],{"class":867},[324,11854,1217],{"class":863},[324,11856,1925],{"class":738},[324,11858,2176],{"class":863},[324,11860,9569],{"class":867},[324,11862,11863,11865,11867,11869,11871,11873,11875,11877,11879,11882,11884],{"class":326,"line":3306},[324,11864,7258],{"class":867},[324,11866,1908],{"class":863},[324,11868,11844],{"class":738},[324,11870,2176],{"class":863},[324,11872,2389],{"class":867},[324,11874,871],{"class":863},[324,11876,1293],{"class":867},[324,11878,1217],{"class":863},[324,11880,11881],{"class":738},"\"hello world1\"",[324,11883,2176],{"class":863},[324,11885,9569],{"class":867},[324,11887,11888],{"class":326,"line":3320},[324,11889,488],{"emptyLinePlaceholder":487},[324,11891,11892,11894,11896,11899,11901,11903,11905,11907,11909,11912,11914],{"class":326,"line":3328},[324,11893,7258],{"class":867},[324,11895,1908],{"class":863},[324,11897,11898],{"class":738}," \"全局常量c_g_a地址为： \"",[324,11900,2176],{"class":863},[324,11902,2389],{"class":867},[324,11904,871],{"class":863},[324,11906,1293],{"class":867},[324,11908,1217],{"class":863},[324,11910,11911],{"class":867},"c_g_a ",[324,11913,1908],{"class":863},[324,11915,9569],{"class":867},[324,11917,11918,11920,11922,11925,11927,11929,11931,11933,11935,11938,11940],{"class":326,"line":3333},[324,11919,7258],{"class":867},[324,11921,1908],{"class":863},[324,11923,11924],{"class":738}," \"全局常量c_g_b地址为： \"",[324,11926,2176],{"class":863},[324,11928,2389],{"class":867},[324,11930,871],{"class":863},[324,11932,1293],{"class":867},[324,11934,1217],{"class":863},[324,11936,11937],{"class":867},"c_g_b ",[324,11939,1908],{"class":863},[324,11941,9569],{"class":867},[324,11943,11944],{"class":326,"line":3339},[324,11945,488],{"emptyLinePlaceholder":487},[324,11947,11948,11951,11953,11956,11958,11960],{"class":326,"line":3345},[324,11949,11950],{"class":863},"    const",[324,11952,3112],{"class":863},[324,11954,11955],{"class":867}," c_l_a ",[324,11957,913],{"class":863},[324,11959,2768],{"class":916},[324,11961,2025],{"class":867},[324,11963,11964,11966,11968,11971,11973,11975],{"class":326,"line":3350},[324,11965,11950],{"class":863},[324,11967,3112],{"class":863},[324,11969,11970],{"class":867}," c_l_b ",[324,11972,913],{"class":863},[324,11974,2768],{"class":916},[324,11976,2025],{"class":867},[324,11978,11979,11981,11983,11986,11988,11990,11992,11994,11996,11999,12001],{"class":326,"line":8677},[324,11980,7258],{"class":867},[324,11982,1908],{"class":863},[324,11984,11985],{"class":738}," \"局部常量c_l_a地址为： \"",[324,11987,2176],{"class":863},[324,11989,2389],{"class":867},[324,11991,871],{"class":863},[324,11993,1293],{"class":867},[324,11995,1217],{"class":863},[324,11997,11998],{"class":867},"c_l_a ",[324,12000,1908],{"class":863},[324,12002,9569],{"class":867},[324,12004,12005,12007,12009,12012,12014,12016,12018,12020,12022,12025,12027],{"class":326,"line":8701},[324,12006,7258],{"class":867},[324,12008,1908],{"class":863},[324,12010,12011],{"class":738}," \"局部常量c_l_b地址为： \"",[324,12013,2176],{"class":863},[324,12015,2389],{"class":867},[324,12017,871],{"class":863},[324,12019,1293],{"class":867},[324,12021,1217],{"class":863},[324,12023,12024],{"class":867},"c_l_b ",[324,12026,1908],{"class":863},[324,12028,9569],{"class":867},[324,12030,12031],{"class":326,"line":8706},[324,12032,488],{"emptyLinePlaceholder":487},[324,12034,12035,12037,12039,12041],{"class":326,"line":8712},[324,12036,3033],{"class":734},[324,12038,868],{"class":867},[324,12040,3038],{"class":738},[324,12042,3448],{"class":867},[324,12044,12045],{"class":326,"line":8739},[324,12046,488],{"emptyLinePlaceholder":487},[324,12048,12049,12051,12053],{"class":326,"line":8744},[324,12050,4819],{"class":863},[324,12052,4822],{"class":916},[324,12054,2025],{"class":867},[324,12056,12057],{"class":326,"line":8750},[324,12058,2296],{"class":867},[19,12060,12061],{},"总结：",[1871,12063,12064,12067,12070,12073],{},[195,12065,12066],{},"c++中程序运行前分为全局区和代码区",[195,12068,12069],{},"代码区特点是共享和只读",[195,12071,12072],{},"全局区中存放全局变量、静态变量、常量",[195,12074,12075],{},"常量区中存放const修饰的全局常量和字符串常量",[35,12077,12079],{"id":12078},"_512程序运行后","5.1.2程序运行后",[192,12081,12082],{},[195,12083,12084],{},"栈区：",[1871,12086,12087,12094],{},[195,12088,12089,12090,12093],{},"由编译器自动分配释放, 存放",[116,12091,12092],{},"函数的参数值,局部变量","等",[195,12095,12096,12097,12100],{},"注意事项：",[116,12098,12099],{},"不要返回局部变量的地址","，栈区开辟的数据由编译器自动释放，执行完这部分就会释放",[316,12102,12104],{"className":854,"code":12103,"language":856,"meta":50,"style":50},"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",[269,12105,12106,12117,12121,12136,12148,12152,12156,12164,12169,12184,12202,12219,12229,12237],{"__ignoreMap":50},[324,12107,12108,12110,12112,12115],{"class":326,"line":327},[324,12109,871],{"class":863},[324,12111,7247],{"class":863},[324,12113,12114],{"class":734}," func",[324,12116,2706],{"class":867},[324,12118,12119],{"class":326,"line":203},[324,12120,2277],{"class":867},[324,12122,12123,12125,12127,12129,12131,12133],{"class":326,"line":338},[324,12124,2715],{"class":863},[324,12126,11598],{"class":867},[324,12128,913],{"class":863},[324,12130,2768],{"class":916},[324,12132,923],{"class":867},[324,12134,12135],{"class":772}," \u002F\u002F局部变量 存放在栈区，栈区的数据在函数执行完自动释放\n",[324,12137,12138,12140,12142,12145],{"class":326,"line":344},[324,12139,4819],{"class":863},[324,12141,11313],{"class":863},[324,12143,12144],{"class":867},"a;",[324,12146,12147],{"class":772}," \u002F\u002F放回局部变量的地址\n",[324,12149,12150],{"class":326,"line":484},[324,12151,2296],{"class":867},[324,12153,12154],{"class":326,"line":491},[324,12155,488],{"emptyLinePlaceholder":487},[324,12157,12158,12160,12162],{"class":326,"line":496},[324,12159,871],{"class":863},[324,12161,2703],{"class":734},[324,12163,11582],{"class":867},[324,12165,12166],{"class":326,"line":502},[324,12167,12168],{"class":772},"    \u002F\u002F接受func的返回值\n",[324,12170,12171,12173,12175,12178,12180,12182],{"class":326,"line":508},[324,12172,2715],{"class":863},[324,12174,7247],{"class":863},[324,12176,12177],{"class":867},"p ",[324,12179,913],{"class":863},[324,12181,12114],{"class":734},[324,12183,6365],{"class":867},[324,12185,12186,12188,12190,12192,12194,12196,12199],{"class":326,"line":514},[324,12187,7258],{"class":867},[324,12189,1908],{"class":863},[324,12191,7247],{"class":863},[324,12193,12177],{"class":867},[324,12195,1908],{"class":863},[324,12197,12198],{"class":867}," endl;",[324,12200,12201],{"class":772}," \u002F\u002F第一次打印正确的数字，是因为编辑器做了保留\n",[324,12203,12204,12206,12208,12210,12212,12214,12216],{"class":326,"line":2343},[324,12205,7258],{"class":867},[324,12207,1908],{"class":863},[324,12209,7247],{"class":863},[324,12211,12177],{"class":867},[324,12213,1908],{"class":863},[324,12215,12198],{"class":867},[324,12217,12218],{"class":772}," \u002F\u002F第二次这个数据不再保留\n",[324,12220,12221,12223,12225,12227],{"class":326,"line":2348},[324,12222,3033],{"class":734},[324,12224,868],{"class":867},[324,12226,3038],{"class":738},[324,12228,3448],{"class":867},[324,12230,12231,12233,12235],{"class":326,"line":2354},[324,12232,4819],{"class":863},[324,12234,4822],{"class":916},[324,12236,2025],{"class":867},[324,12238,12239],{"class":326,"line":2359},[324,12240,2296],{"class":867},[19,12242,12243],{},"输出结果：",[19,12245,12246],{},[48,12247],{"alt":12248,"src":12249},"alt text","\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-005.png",[19,12251,12252],{},"总结：不要返回局部变量的地址",[192,12254,12255],{"start":203},[195,12256,12257],{},"堆区",[1871,12259,12260,12263],{},[195,12261,12262],{},"有程序员分配释放，若程序员不释放，程序结束时由操作系统回收",[195,12264,12265],{},"在c++中主要利用new在堆区开辟内存",[316,12267,12269],{"className":854,"code":12268,"language":856,"meta":50,"style":50},"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",[269,12270,12271,12286,12290,12295,12316,12323,12327,12335,12339,12344,12358,12370],{"__ignoreMap":50},[324,12272,12273,12275,12278,12281,12283],{"class":326,"line":327},[324,12274,871],{"class":863},[324,12276,12277],{"class":863},"  *",[324,12279,12280],{"class":734},"func",[324,12282,3156],{"class":867},[324,12284,12285],{"class":772},"  \u002F\u002F函数返回指针\n",[324,12287,12288],{"class":326,"line":203},[324,12289,2277],{"class":867},[324,12291,12292],{"class":326,"line":338},[324,12293,12294],{"class":772},"    \u002F\u002F利用new关键词  可以将数据开辟到堆区\n",[324,12296,12297,12299,12301,12303,12305,12308,12310,12312,12314],{"class":326,"line":344},[324,12298,4876],{"class":863},[324,12300,7247],{"class":863},[324,12302,19],{"class":867},[324,12304,913],{"class":863},[324,12306,12307],{"class":863}," new",[324,12309,3112],{"class":863},[324,12311,868],{"class":867},[324,12313,1310],{"class":916},[324,12315,3448],{"class":867},[324,12317,12318,12320],{"class":326,"line":484},[324,12319,5110],{"class":863},[324,12321,12322],{"class":867}," p;\n",[324,12324,12325],{"class":326,"line":491},[324,12326,2296],{"class":867},[324,12328,12329,12331,12333],{"class":326,"line":496},[324,12330,871],{"class":863},[324,12332,2703],{"class":734},[324,12334,2706],{"class":867},[324,12336,12337],{"class":326,"line":502},[324,12338,2277],{"class":867},[324,12340,12341],{"class":326,"line":508},[324,12342,12343],{"class":772},"    \u002F\u002F在堆区开辟数据\n",[324,12345,12346,12348,12350,12352,12354,12356],{"class":326,"line":514},[324,12347,2715],{"class":863},[324,12349,7247],{"class":863},[324,12351,19],{"class":867},[324,12353,913],{"class":863},[324,12355,12280],{"class":734},[324,12357,6365],{"class":867},[324,12359,12360,12362,12364,12366,12368],{"class":326,"line":2343},[324,12361,2282],{"class":867},[324,12363,7148],{"class":863},[324,12365,19],{"class":867},[324,12367,1908],{"class":863},[324,12369,1930],{"class":867},[324,12371,12372],{"class":326,"line":2348},[324,12373,2296],{"class":867},[19,12375,12376],{},"图片展示：",[19,12378,12379],{},[48,12380],{"alt":12248,"src":12381},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-006.png",[19,12383,12384],{},"堆区内存由程序员管生死！！！",[192,12386,12387],{"start":338},[195,12388,12389],{},"new操作符\n​C++中利用==new==操作符在堆区开辟数据",[19,12391,12392],{},"​堆区开辟的数据，由程序员手动开辟，手动释放，释放利用操作符 ==delete==",[19,12394,12395,12396],{},"​语法：",[269,12397,12398],{}," new 数据类型",[19,12400,12401],{},"​利用new创建的数据，会返回该数据对应的类型的指针",[316,12403,12405],{"className":854,"code":12404,"language":856,"meta":50,"style":50},"\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",[269,12406,12407,12412,12422,12426,12431,12436,12458,12462,12470,12474,12488,12500,12512,12524,12529,12534,12545,12549,12554,12562,12566,12571,12593,12619,12623,12641,12645,12671,12675,12687,12691,12696,12701,12709,12713,12717,12725,12729,12735,12741],{"__ignoreMap":50},[324,12408,12409],{"class":326,"line":327},[324,12410,12411],{"class":772},"\u002F\u002F1.new的基本语法\n",[324,12413,12414,12416,12418,12420],{"class":326,"line":203},[324,12415,871],{"class":863},[324,12417,7247],{"class":863},[324,12419,12280],{"class":734},[324,12421,2706],{"class":867},[324,12423,12424],{"class":326,"line":338},[324,12425,2277],{"class":867},[324,12427,12428],{"class":326,"line":344},[324,12429,12430],{"class":772},"    \u002F\u002F在堆区创建整型数据\n",[324,12432,12433],{"class":326,"line":484},[324,12434,12435],{"class":772},"    \u002F\u002Fnew返回的是该数据类型的指针\n",[324,12437,12438,12440,12442,12444,12447,12449,12451,12453,12455],{"class":326,"line":491},[324,12439,2715],{"class":863},[324,12441,7247],{"class":863},[324,12443,19],{"class":867},[324,12445,12446],{"class":863},"=new",[324,12448,3112],{"class":863},[324,12450,868],{"class":867},[324,12452,1310],{"class":916},[324,12454,6695],{"class":867},[324,12456,12457],{"class":772},"\u002F\u002Fnew啥类型就返回啥类型数据的指针\n",[324,12459,12460],{"class":326,"line":496},[324,12461,2296],{"class":867},[324,12463,12464,12466,12468],{"class":326,"line":502},[324,12465,6093],{"class":863},[324,12467,6317],{"class":734},[324,12469,2706],{"class":867},[324,12471,12472],{"class":326,"line":508},[324,12473,2277],{"class":867},[324,12475,12476,12478,12480,12482,12484,12486],{"class":326,"line":514},[324,12477,2715],{"class":863},[324,12479,7247],{"class":863},[324,12481,19],{"class":867},[324,12483,913],{"class":863},[324,12485,12280],{"class":734},[324,12487,6365],{"class":867},[324,12489,12490,12492,12494,12496,12498],{"class":326,"line":2343},[324,12491,2282],{"class":867},[324,12493,7148],{"class":863},[324,12495,19],{"class":867},[324,12497,1908],{"class":863},[324,12499,1930],{"class":867},[324,12501,12502,12504,12506,12508,12510],{"class":326,"line":2348},[324,12503,2282],{"class":867},[324,12505,7148],{"class":863},[324,12507,19],{"class":867},[324,12509,1908],{"class":863},[324,12511,1930],{"class":867},[324,12513,12514,12516,12518,12520,12522],{"class":326,"line":2354},[324,12515,2282],{"class":867},[324,12517,7148],{"class":863},[324,12519,19],{"class":867},[324,12521,1908],{"class":863},[324,12523,1930],{"class":867},[324,12525,12526],{"class":326,"line":2359},[324,12527,12528],{"class":772},"    \u002F\u002F堆区的数据 由程序员管理开辟，程序员管理释放\n",[324,12530,12531],{"class":326,"line":2373},[324,12532,12533],{"class":772},"    \u002F\u002F如果想释放堆区的数据，利用关键词 delete\n",[324,12535,12536,12539,12542],{"class":326,"line":2378},[324,12537,12538],{"class":863},"    delete",[324,12540,12541],{"class":867}," p;",[324,12543,12544],{"class":772},"\u002F\u002F删除这块地址\n",[324,12546,12547],{"class":326,"line":2384},[324,12548,2296],{"class":867},[324,12550,12551],{"class":326,"line":2405},[324,12552,12553],{"class":772},"\u002F\u002F2.在堆区利用new开辟数组\n",[324,12555,12556,12558,12560],{"class":326,"line":2410},[324,12557,6093],{"class":863},[324,12559,6386],{"class":734},[324,12561,2706],{"class":867},[324,12563,12564],{"class":326,"line":2424},[324,12565,2277],{"class":867},[324,12567,12568],{"class":326,"line":2429},[324,12569,12570],{"class":772},"    \u002F\u002F创建10整数数据的数组，在堆区\n",[324,12572,12573,12575,12577,12579,12581,12583,12585,12587,12590],{"class":326,"line":2458},[324,12574,2715],{"class":863},[324,12576,7247],{"class":863},[324,12578,4609],{"class":867},[324,12580,12446],{"class":863},[324,12582,3112],{"class":863},[324,12584,1754],{"class":867},[324,12586,1310],{"class":916},[324,12588,12589],{"class":867},"];",[324,12591,12592],{"class":772},"\u002F\u002F10代表数组有10个元素\n",[324,12594,12595,12597,12599,12601,12603,12605,12607,12609,12611,12613,12615,12617],{"class":326,"line":2463},[324,12596,3930],{"class":863},[324,12598,2389],{"class":867},[324,12600,871],{"class":863},[324,12602,3761],{"class":867},[324,12604,913],{"class":863},[324,12606,1056],{"class":916},[324,12608,3768],{"class":867},[324,12610,1774],{"class":863},[324,12612,1310],{"class":916},[324,12614,3768],{"class":867},[324,12616,3022],{"class":863},[324,12618,874],{"class":867},[324,12620,12621],{"class":326,"line":2480},[324,12622,2760],{"class":867},[324,12624,12625,12628,12630,12632,12634,12636,12638],{"class":326,"line":2485},[324,12626,12627],{"class":867},"        arr[i]",[324,12629,913],{"class":863},[324,12631,1305],{"class":867},[324,12633,1345],{"class":863},[324,12635,1175],{"class":916},[324,12637,923],{"class":867},[324,12639,12640],{"class":772},"\u002F\u002F给10个元素赋值100～109\n",[324,12642,12643],{"class":326,"line":2490},[324,12644,2917],{"class":867},[324,12646,12647,12649,12651,12653,12655,12657,12659,12661,12663,12665,12667,12669],{"class":326,"line":2495},[324,12648,3930],{"class":863},[324,12650,2389],{"class":867},[324,12652,871],{"class":863},[324,12654,3761],{"class":867},[324,12656,913],{"class":863},[324,12658,1056],{"class":916},[324,12660,3768],{"class":867},[324,12662,1774],{"class":863},[324,12664,1310],{"class":916},[324,12666,3768],{"class":867},[324,12668,3022],{"class":863},[324,12670,874],{"class":867},[324,12672,12673],{"class":326,"line":2509},[324,12674,2760],{"class":867},[324,12676,12677,12679,12681,12683,12685],{"class":326,"line":2514},[324,12678,4180],{"class":867},[324,12680,1908],{"class":863},[324,12682,5083],{"class":867},[324,12684,1908],{"class":863},[324,12686,1930],{"class":867},[324,12688,12689],{"class":326,"line":3306},[324,12690,2917],{"class":867},[324,12692,12693],{"class":326,"line":3320},[324,12694,12695],{"class":772},"    \u002F\u002F释放堆区数组\n",[324,12697,12698],{"class":326,"line":3328},[324,12699,12700],{"class":772},"    \u002F\u002F释放数组的时候 要加[]才可以\n",[324,12702,12703,12706],{"class":326,"line":3333},[324,12704,12705],{"class":863},"    delete[]",[324,12707,12708],{"class":867}," arr;\n",[324,12710,12711],{"class":326,"line":3339},[324,12712,2296],{"class":867},[324,12714,12715],{"class":326,"line":3345},[324,12716,488],{"emptyLinePlaceholder":487},[324,12718,12719,12721,12723],{"class":326,"line":3350},[324,12720,871],{"class":863},[324,12722,2703],{"class":734},[324,12724,2706],{"class":867},[324,12726,12727],{"class":326,"line":8677},[324,12728,2277],{"class":867},[324,12730,12731,12733],{"class":326,"line":8701},[324,12732,6362],{"class":734},[324,12734,6365],{"class":867},[324,12736,12737,12739],{"class":326,"line":8706},[324,12738,6431],{"class":734},[324,12740,6365],{"class":867},[324,12742,12743],{"class":326,"line":8712},[324,12744,2296],{"class":867},[775,12746,12747],{},"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":50,"searchDepth":203,"depth":203,"links":12749},[12750],{"id":11418,"depth":203,"text":11419,"children":12751},[12752,12753],{"id":11450,"depth":338,"text":11451},{"id":12078,"depth":338,"text":12079},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch5",{"title":11410,"description":50},"wiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型","0YdYp-3ZJdvtzoCrG1guRSWnTqjqRMbmStt7z9sZDAA",{"id":12760,"title":12761,"body":12762,"description":50,"extension":792,"meta":14243,"navigation":487,"path":14244,"seo":14245,"stem":14246,"__hash__":14247},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch6-引用.md","6.引用",{"type":7,"value":12763,"toc":14235},[12764,12767,12771,12774,12777,12946,12950,12955,12972,12977,13129,13133,13136,13139,13533,13537,13540,13545,13548,13860,13864,13870,14030,14032,14040,14044,14047,14054,14232],[10,12765,12761],{"id":12766},"_6引用",[14,12768,12770],{"id":12769},"_61引用基本用法","6.1引用基本用法",[19,12772,12773],{},"引用的本质：给变量起别名",[19,12775,12776],{},"语法：数据类型 &别名=原名",[316,12778,12780],{"className":854,"code":12779,"language":856,"meta":50,"style":50},"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",[269,12781,12782,12790,12794,12806,12818,12822,12841,12860,12864,12875,12879,12898,12916,12920,12930,12934,12942],{"__ignoreMap":50},[324,12783,12784,12786,12788],{"class":326,"line":327},[324,12785,871],{"class":863},[324,12787,2703],{"class":734},[324,12789,11582],{"class":867},[324,12791,12792],{"class":326,"line":203},[324,12793,488],{"emptyLinePlaceholder":487},[324,12795,12796,12798,12800,12802,12804],{"class":326,"line":338},[324,12797,2715],{"class":863},[324,12799,11598],{"class":867},[324,12801,913],{"class":863},[324,12803,2768],{"class":916},[324,12805,2025],{"class":867},[324,12807,12808,12810,12812,12814,12816],{"class":326,"line":344},[324,12809,2715],{"class":863},[324,12811,11313],{"class":863},[324,12813,11674],{"class":867},[324,12815,913],{"class":863},[324,12817,2164],{"class":867},[324,12819,12820],{"class":326,"line":484},[324,12821,488],{"emptyLinePlaceholder":487},[324,12823,12824,12826,12828,12831,12833,12835,12837,12839],{"class":326,"line":491},[324,12825,7258],{"class":867},[324,12827,1908],{"class":863},[324,12829,12830],{"class":738}," \"a = \"",[324,12832,2176],{"class":863},[324,12834,11598],{"class":867},[324,12836,1908],{"class":863},[324,12838,12198],{"class":867},[324,12840,7997],{"class":772},[324,12842,12843,12845,12847,12850,12852,12854,12856,12858],{"class":326,"line":496},[324,12844,7258],{"class":867},[324,12846,1908],{"class":863},[324,12848,12849],{"class":738}," \"b = \"",[324,12851,2176],{"class":863},[324,12853,11611],{"class":867},[324,12855,1908],{"class":863},[324,12857,12198],{"class":867},[324,12859,7997],{"class":772},[324,12861,12862],{"class":326,"line":502},[324,12863,488],{"emptyLinePlaceholder":487},[324,12865,12866,12869,12871,12873],{"class":326,"line":508},[324,12867,12868],{"class":867},"    b ",[324,12870,913],{"class":863},[324,12872,6483],{"class":916},[324,12874,2025],{"class":867},[324,12876,12877],{"class":326,"line":514},[324,12878,488],{"emptyLinePlaceholder":487},[324,12880,12881,12883,12885,12887,12889,12891,12893,12895],{"class":326,"line":2343},[324,12882,7258],{"class":867},[324,12884,1908],{"class":863},[324,12886,12830],{"class":738},[324,12888,2176],{"class":863},[324,12890,11598],{"class":867},[324,12892,1908],{"class":863},[324,12894,12198],{"class":867},[324,12896,12897],{"class":772},"\u002F\u002F100\n",[324,12899,12900,12902,12904,12906,12908,12910,12912,12914],{"class":326,"line":2348},[324,12901,7258],{"class":867},[324,12903,1908],{"class":863},[324,12905,12849],{"class":738},[324,12907,2176],{"class":863},[324,12909,11611],{"class":867},[324,12911,1908],{"class":863},[324,12913,12198],{"class":867},[324,12915,12897],{"class":772},[324,12917,12918],{"class":326,"line":2354},[324,12919,488],{"emptyLinePlaceholder":487},[324,12921,12922,12924,12926,12928],{"class":326,"line":2359},[324,12923,3033],{"class":734},[324,12925,868],{"class":867},[324,12927,3038],{"class":738},[324,12929,3448],{"class":867},[324,12931,12932],{"class":326,"line":2373},[324,12933,488],{"emptyLinePlaceholder":487},[324,12935,12936,12938,12940],{"class":326,"line":2378},[324,12937,4819],{"class":863},[324,12939,4822],{"class":916},[324,12941,2025],{"class":867},[324,12943,12944],{"class":326,"line":2384},[324,12945,2296],{"class":867},[14,12947,12949],{"id":12948},"_62引用的注意事项","6.2引用的注意事项",[192,12951,12952],{},[195,12953,12954],{},"引用必须要初始化",[316,12956,12958],{"className":854,"code":12957,"language":856,"meta":50,"style":50},"int &b;\u002F\u002F非常错误！\n",[269,12959,12960],{"__ignoreMap":50},[324,12961,12962,12964,12966,12969],{"class":326,"line":327},[324,12963,871],{"class":863},[324,12965,11313],{"class":863},[324,12967,12968],{"class":867},"b;",[324,12970,12971],{"class":772},"\u002F\u002F非常错误！\n",[192,12973,12974],{"start":203},[195,12975,12976],{},"引用一旦初始化后，就不可以更改了，引用a了，就不能引用b了",[316,12978,12980],{"className":854,"code":12979,"language":856,"meta":50,"style":50},"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",[269,12981,12982,12990,13002,13014,13022,13038,13051,13069,13087,13107,13117,13125],{"__ignoreMap":50},[324,12983,12984,12986,12988],{"class":326,"line":327},[324,12985,871],{"class":863},[324,12987,2703],{"class":734},[324,12989,11582],{"class":867},[324,12991,12992,12994,12996,12998,13000],{"class":326,"line":203},[324,12993,2715],{"class":863},[324,12995,11598],{"class":867},[324,12997,913],{"class":863},[324,12999,2768],{"class":916},[324,13001,2025],{"class":867},[324,13003,13004,13006,13008,13010,13012],{"class":326,"line":338},[324,13005,2715],{"class":863},[324,13007,11611],{"class":867},[324,13009,913],{"class":863},[324,13011,9679],{"class":916},[324,13013,2025],{"class":867},[324,13015,13016,13019],{"class":326,"line":344},[324,13017,13018],{"class":772},"    \u002F\u002Fint &c;",[324,13020,13021],{"class":772}," \u002F\u002F错误，引用必须初始化\n",[324,13023,13024,13026,13028,13030,13032,13035],{"class":326,"line":484},[324,13025,2715],{"class":863},[324,13027,11313],{"class":863},[324,13029,3675],{"class":867},[324,13031,913],{"class":863},[324,13033,13034],{"class":867}," a;",[324,13036,13037],{"class":772}," \u002F\u002F一旦初始化后，就不可以更改\n",[324,13039,13040,13043,13045,13048],{"class":326,"line":491},[324,13041,13042],{"class":867},"    c ",[324,13044,913],{"class":863},[324,13046,13047],{"class":867}," b;",[324,13049,13050],{"class":772}," \u002F\u002F这是赋值操作，不是更改引用\n",[324,13052,13053,13055,13057,13059,13061,13063,13065,13067],{"class":326,"line":496},[324,13054,7258],{"class":867},[324,13056,1908],{"class":863},[324,13058,12830],{"class":738},[324,13060,2176],{"class":863},[324,13062,11598],{"class":867},[324,13064,1908],{"class":863},[324,13066,12198],{"class":867},[324,13068,7982],{"class":772},[324,13070,13071,13073,13075,13077,13079,13081,13083,13085],{"class":326,"line":502},[324,13072,7258],{"class":867},[324,13074,1908],{"class":863},[324,13076,12849],{"class":738},[324,13078,2176],{"class":863},[324,13080,11611],{"class":867},[324,13082,1908],{"class":863},[324,13084,12198],{"class":867},[324,13086,7982],{"class":772},[324,13088,13089,13091,13093,13096,13098,13101,13103,13105],{"class":326,"line":508},[324,13090,7258],{"class":867},[324,13092,1908],{"class":863},[324,13094,13095],{"class":738}," \"c = \"",[324,13097,2176],{"class":863},[324,13099,13100],{"class":867}," c ",[324,13102,1908],{"class":863},[324,13104,12198],{"class":867},[324,13106,7982],{"class":772},[324,13108,13109,13111,13113,13115],{"class":326,"line":514},[324,13110,3033],{"class":734},[324,13112,868],{"class":867},[324,13114,3038],{"class":738},[324,13116,3448],{"class":867},[324,13118,13119,13121,13123],{"class":326,"line":2343},[324,13120,4819],{"class":863},[324,13122,4822],{"class":916},[324,13124,2025],{"class":867},[324,13126,13127],{"class":326,"line":2348},[324,13128,2296],{"class":867},[14,13130,13132],{"id":13131},"_63引用做函数参数","6.3引用做函数参数",[19,13134,13135],{},"作用：函数传参时，可以利用引用的技术让形参修饰实参",[19,13137,13138],{},"优点：可以简化指针修改实参",[316,13140,13142],{"className":854,"code":13141,"language":856,"meta":50,"style":50},"\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",[269,13143,13144,13149,13172,13183,13193,13202,13206,13210,13215,13237,13249,13261,13271,13275,13279,13284,13306,13316,13324,13332,13336,13340,13348,13352,13364,13376,13380,13391,13417,13421,13441,13465,13469,13479,13503,13507,13517,13521,13529],{"__ignoreMap":50},[324,13145,13146],{"class":326,"line":327},[324,13147,13148],{"class":772},"\u002F\u002F1. 值传递\n",[324,13150,13151,13153,13156,13158,13160,13162,13165,13167,13169],{"class":326,"line":203},[324,13152,6093],{"class":863},[324,13154,13155],{"class":734}," mySwap01",[324,13157,868],{"class":867},[324,13159,871],{"class":863},[324,13161,2130],{"class":5945},[324,13163,13164],{"class":867},", ",[324,13166,871],{"class":863},[324,13168,3562],{"class":5945},[324,13170,13171],{"class":867},") {\n",[324,13173,13174,13176,13179,13181],{"class":326,"line":338},[324,13175,2715],{"class":863},[324,13177,13178],{"class":867}," temp ",[324,13180,913],{"class":863},[324,13182,2164],{"class":867},[324,13184,13185,13188,13190],{"class":326,"line":344},[324,13186,13187],{"class":867},"    a ",[324,13189,913],{"class":863},[324,13191,13192],{"class":867}," b;\n",[324,13194,13195,13197,13199],{"class":326,"line":484},[324,13196,12868],{"class":867},[324,13198,913],{"class":863},[324,13200,13201],{"class":867}," temp;\n",[324,13203,13204],{"class":326,"line":491},[324,13205,2296],{"class":867},[324,13207,13208],{"class":326,"line":496},[324,13209,488],{"emptyLinePlaceholder":487},[324,13211,13212],{"class":326,"line":502},[324,13213,13214],{"class":772},"\u002F\u002F2. 地址传递\n",[324,13216,13217,13219,13222,13224,13227,13229,13231,13233,13235],{"class":326,"line":508},[324,13218,6093],{"class":863},[324,13220,13221],{"class":734}," mySwap02",[324,13223,868],{"class":867},[324,13225,13226],{"class":863},"int*",[324,13228,2130],{"class":5945},[324,13230,13164],{"class":867},[324,13232,13226],{"class":863},[324,13234,3562],{"class":5945},[324,13236,13171],{"class":867},[324,13238,13239,13241,13243,13245,13247],{"class":326,"line":514},[324,13240,2715],{"class":863},[324,13242,13178],{"class":867},[324,13244,913],{"class":863},[324,13246,7247],{"class":863},[324,13248,6926],{"class":867},[324,13250,13251,13253,13255,13257,13259],{"class":326,"line":2343},[324,13252,7132],{"class":863},[324,13254,11648],{"class":867},[324,13256,913],{"class":863},[324,13258,7247],{"class":863},[324,13260,6798],{"class":867},[324,13262,13263,13265,13267,13269],{"class":326,"line":2348},[324,13264,7132],{"class":863},[324,13266,11674],{"class":867},[324,13268,913],{"class":863},[324,13270,13201],{"class":867},[324,13272,13273],{"class":326,"line":2354},[324,13274,2296],{"class":867},[324,13276,13277],{"class":326,"line":2359},[324,13278,488],{"emptyLinePlaceholder":487},[324,13280,13281],{"class":326,"line":2373},[324,13282,13283],{"class":772},"\u002F\u002F3. 引用传递\n",[324,13285,13286,13288,13291,13293,13296,13298,13300,13302,13304],{"class":326,"line":2378},[324,13287,6093],{"class":863},[324,13289,13290],{"class":734}," mySwap03",[324,13292,868],{"class":867},[324,13294,13295],{"class":863},"int&",[324,13297,2130],{"class":5945},[324,13299,13164],{"class":867},[324,13301,13295],{"class":863},[324,13303,3562],{"class":5945},[324,13305,13171],{"class":867},[324,13307,13308,13310,13312,13314],{"class":326,"line":2384},[324,13309,2715],{"class":863},[324,13311,13178],{"class":867},[324,13313,913],{"class":863},[324,13315,2164],{"class":867},[324,13317,13318,13320,13322],{"class":326,"line":2405},[324,13319,13187],{"class":867},[324,13321,913],{"class":863},[324,13323,13192],{"class":867},[324,13325,13326,13328,13330],{"class":326,"line":2410},[324,13327,12868],{"class":867},[324,13329,913],{"class":863},[324,13331,13201],{"class":867},[324,13333,13334],{"class":326,"line":2424},[324,13335,2296],{"class":867},[324,13337,13338],{"class":326,"line":2429},[324,13339,488],{"emptyLinePlaceholder":487},[324,13341,13342,13344,13346],{"class":326,"line":2458},[324,13343,871],{"class":863},[324,13345,2703],{"class":734},[324,13347,11582],{"class":867},[324,13349,13350],{"class":326,"line":2463},[324,13351,488],{"emptyLinePlaceholder":487},[324,13353,13354,13356,13358,13360,13362],{"class":326,"line":2480},[324,13355,2715],{"class":863},[324,13357,11598],{"class":867},[324,13359,913],{"class":863},[324,13361,2768],{"class":916},[324,13363,2025],{"class":867},[324,13365,13366,13368,13370,13372,13374],{"class":326,"line":2485},[324,13367,2715],{"class":863},[324,13369,11611],{"class":867},[324,13371,913],{"class":863},[324,13373,9679],{"class":916},[324,13375,2025],{"class":867},[324,13377,13378],{"class":326,"line":2490},[324,13379,488],{"emptyLinePlaceholder":487},[324,13381,13382,13385,13388],{"class":326,"line":2495},[324,13383,13384],{"class":734},"    mySwap01",[324,13386,13387],{"class":867},"(a, b);",[324,13389,13390],{"class":772},"\u002F\u002F值传递，形参不会修饰实参\n",[324,13392,13393,13395,13397,13400,13402,13404,13406,13409,13411,13413,13415],{"class":326,"line":2509},[324,13394,7258],{"class":867},[324,13396,1908],{"class":863},[324,13398,13399],{"class":738}," \"a:\"",[324,13401,2176],{"class":863},[324,13403,11598],{"class":867},[324,13405,1908],{"class":863},[324,13407,13408],{"class":738}," \" b:\"",[324,13410,2176],{"class":863},[324,13412,11611],{"class":867},[324,13414,1908],{"class":863},[324,13416,9569],{"class":867},[324,13418,13419],{"class":326,"line":2514},[324,13420,488],{"emptyLinePlaceholder":487},[324,13422,13423,13426,13428,13430,13433,13435,13438],{"class":326,"line":3306},[324,13424,13425],{"class":734},"    mySwap02",[324,13427,868],{"class":867},[324,13429,1217],{"class":863},[324,13431,13432],{"class":867},"a, ",[324,13434,1217],{"class":863},[324,13436,13437],{"class":867},"b);",[324,13439,13440],{"class":772},"\u002F\u002F地址传递，形参会修饰实参\n",[324,13442,13443,13445,13447,13449,13451,13453,13455,13457,13459,13461,13463],{"class":326,"line":3320},[324,13444,7258],{"class":867},[324,13446,1908],{"class":863},[324,13448,13399],{"class":738},[324,13450,2176],{"class":863},[324,13452,11598],{"class":867},[324,13454,1908],{"class":863},[324,13456,13408],{"class":738},[324,13458,2176],{"class":863},[324,13460,11611],{"class":867},[324,13462,1908],{"class":863},[324,13464,9569],{"class":867},[324,13466,13467],{"class":326,"line":3328},[324,13468,488],{"emptyLinePlaceholder":487},[324,13470,13471,13474,13476],{"class":326,"line":3333},[324,13472,13473],{"class":734},"    mySwap03",[324,13475,13387],{"class":867},[324,13477,13478],{"class":772},"\u002F\u002F引用传递，形参会修饰实参\n",[324,13480,13481,13483,13485,13487,13489,13491,13493,13495,13497,13499,13501],{"class":326,"line":3339},[324,13482,7258],{"class":867},[324,13484,1908],{"class":863},[324,13486,13399],{"class":738},[324,13488,2176],{"class":863},[324,13490,11598],{"class":867},[324,13492,1908],{"class":863},[324,13494,13408],{"class":738},[324,13496,2176],{"class":863},[324,13498,11611],{"class":867},[324,13500,1908],{"class":863},[324,13502,9569],{"class":867},[324,13504,13505],{"class":326,"line":3345},[324,13506,488],{"emptyLinePlaceholder":487},[324,13508,13509,13511,13513,13515],{"class":326,"line":3350},[324,13510,3033],{"class":734},[324,13512,868],{"class":867},[324,13514,3038],{"class":738},[324,13516,3448],{"class":867},[324,13518,13519],{"class":326,"line":8677},[324,13520,488],{"emptyLinePlaceholder":487},[324,13522,13523,13525,13527],{"class":326,"line":8701},[324,13524,4819],{"class":863},[324,13526,4822],{"class":916},[324,13528,2025],{"class":867},[324,13530,13531],{"class":326,"line":8706},[324,13532,2296],{"class":867},[14,13534,13536],{"id":13535},"_64引用做函数的返回值","6.4引用做函数的返回值",[19,13538,13539],{},"作用：引用是可以作为函数的返回值存在的",[19,13541,9754,13542],{},[116,13543,13544],{},"不要返回局部变量引用",[19,13546,13547],{},"用法：函数调用作为左值",[316,13549,13551],{"className":10670,"code":13550,"language":10672,"meta":50,"style":50},"\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",[269,13552,13553,13558,13566,13581,13587,13591,13595,13600,13608,13625,13631,13635,13639,13647,13651,13656,13670,13690,13709,13713,13718,13731,13751,13769,13773,13789,13793,13812,13830,13834,13844,13848,13856],{"__ignoreMap":50},[324,13554,13555],{"class":326,"line":327},[324,13556,13557],{"class":772},"\u002F\u002F返回局部变量引用\n",[324,13559,13560,13562,13564],{"class":326,"line":203},[324,13561,13295],{"class":863},[324,13563,6317],{"class":734},[324,13565,11582],{"class":867},[324,13567,13568,13570,13572,13574,13576,13578],{"class":326,"line":338},[324,13569,2715],{"class":863},[324,13571,11598],{"class":867},[324,13573,913],{"class":863},[324,13575,2768],{"class":916},[324,13577,923],{"class":867},[324,13579,13580],{"class":772}," \u002F\u002F局部变量\n",[324,13582,13583,13585],{"class":326,"line":344},[324,13584,4819],{"class":863},[324,13586,2164],{"class":867},[324,13588,13589],{"class":326,"line":484},[324,13590,2296],{"class":867},[324,13592,13593],{"class":326,"line":491},[324,13594,488],{"emptyLinePlaceholder":487},[324,13596,13597],{"class":326,"line":496},[324,13598,13599],{"class":772},"\u002F\u002F返回静态变量引用\n",[324,13601,13602,13604,13606],{"class":326,"line":502},[324,13603,13295],{"class":863},[324,13605,6386],{"class":734},[324,13607,11582],{"class":867},[324,13609,13610,13612,13614,13616,13618,13620,13622],{"class":326,"line":508},[324,13611,11749],{"class":863},[324,13613,3112],{"class":863},[324,13615,11598],{"class":867},[324,13617,913],{"class":863},[324,13619,9679],{"class":916},[324,13621,923],{"class":867},[324,13623,13624],{"class":772},"\u002F\u002F静态变量，存放在全局区，全局区上的数据在程序结束后系统释放\n",[324,13626,13627,13629],{"class":326,"line":514},[324,13628,4819],{"class":863},[324,13630,2164],{"class":867},[324,13632,13633],{"class":326,"line":2343},[324,13634,2296],{"class":867},[324,13636,13637],{"class":326,"line":2348},[324,13638,488],{"emptyLinePlaceholder":487},[324,13640,13641,13643,13645],{"class":326,"line":2354},[324,13642,871],{"class":863},[324,13644,2703],{"class":734},[324,13646,11582],{"class":867},[324,13648,13649],{"class":326,"line":2359},[324,13650,488],{"emptyLinePlaceholder":487},[324,13652,13653],{"class":326,"line":2373},[324,13654,13655],{"class":772},"    \u002F\u002F不能返回局部变量的引用\n",[324,13657,13658,13661,13664,13666,13668],{"class":326,"line":2378},[324,13659,13660],{"class":863},"    int&",[324,13662,13663],{"class":867}," ref ",[324,13665,913],{"class":863},[324,13667,6317],{"class":734},[324,13669,6365],{"class":867},[324,13671,13672,13674,13676,13679,13681,13683,13685,13687],{"class":326,"line":2384},[324,13673,7258],{"class":867},[324,13675,1908],{"class":863},[324,13677,13678],{"class":738}," \"ref = \"",[324,13680,2176],{"class":863},[324,13682,13663],{"class":867},[324,13684,1908],{"class":863},[324,13686,12198],{"class":867},[324,13688,13689],{"class":772},"\u002F\u002F10 第一次正确，是因为编译器做了保留\n",[324,13691,13692,13694,13696,13698,13700,13702,13704,13706],{"class":326,"line":2405},[324,13693,7258],{"class":867},[324,13695,1908],{"class":863},[324,13697,13678],{"class":738},[324,13699,2176],{"class":863},[324,13701,13663],{"class":867},[324,13703,1908],{"class":863},[324,13705,12198],{"class":867},[324,13707,13708],{"class":772},"\u002F\u002F乱码状态 第二次结果错误，因为a的内存已经释放\n",[324,13710,13711],{"class":326,"line":2410},[324,13712,488],{"emptyLinePlaceholder":487},[324,13714,13715],{"class":326,"line":2424},[324,13716,13717],{"class":772},"    \u002F\u002F如果函数做左值，那么必须返回引用\n",[324,13719,13720,13722,13725,13727,13729],{"class":326,"line":2429},[324,13721,13660],{"class":863},[324,13723,13724],{"class":867}," ref2 ",[324,13726,913],{"class":863},[324,13728,6386],{"class":734},[324,13730,6365],{"class":867},[324,13732,13733,13735,13737,13740,13742,13744,13746,13748],{"class":326,"line":2458},[324,13734,7258],{"class":867},[324,13736,1908],{"class":863},[324,13738,13739],{"class":738}," \"ref2 = \"",[324,13741,2176],{"class":863},[324,13743,13724],{"class":867},[324,13745,1908],{"class":863},[324,13747,12198],{"class":867},[324,13749,13750],{"class":772}," \u002F\u002F20\n",[324,13752,13753,13755,13757,13759,13761,13763,13765,13767],{"class":326,"line":2463},[324,13754,7258],{"class":867},[324,13756,1908],{"class":863},[324,13758,13739],{"class":738},[324,13760,2176],{"class":863},[324,13762,13724],{"class":867},[324,13764,1908],{"class":863},[324,13766,12198],{"class":867},[324,13768,13750],{"class":772},[324,13770,13771],{"class":326,"line":2480},[324,13772,488],{"emptyLinePlaceholder":487},[324,13774,13775,13777,13780,13782,13784,13786],{"class":326,"line":2485},[324,13776,6431],{"class":734},[324,13778,13779],{"class":867},"() ",[324,13781,913],{"class":863},[324,13783,3728],{"class":916},[324,13785,923],{"class":867},[324,13787,13788],{"class":772},"\u002F\u002F如果函数的返回值是引用，这个函数调用可以作为左值\n",[324,13790,13791],{"class":326,"line":2490},[324,13792,488],{"emptyLinePlaceholder":487},[324,13794,13795,13797,13799,13801,13803,13805,13807,13809],{"class":326,"line":2495},[324,13796,7258],{"class":867},[324,13798,1908],{"class":863},[324,13800,13739],{"class":738},[324,13802,2176],{"class":863},[324,13804,13724],{"class":867},[324,13806,1908],{"class":863},[324,13808,12198],{"class":867},[324,13810,13811],{"class":772}," \u002F\u002F1000\n",[324,13813,13814,13816,13818,13820,13822,13824,13826,13828],{"class":326,"line":2509},[324,13815,7258],{"class":867},[324,13817,1908],{"class":863},[324,13819,13739],{"class":738},[324,13821,2176],{"class":863},[324,13823,13724],{"class":867},[324,13825,1908],{"class":863},[324,13827,12198],{"class":867},[324,13829,13811],{"class":772},[324,13831,13832],{"class":326,"line":2514},[324,13833,488],{"emptyLinePlaceholder":487},[324,13835,13836,13838,13840,13842],{"class":326,"line":3306},[324,13837,3033],{"class":734},[324,13839,868],{"class":867},[324,13841,3038],{"class":738},[324,13843,3448],{"class":867},[324,13845,13846],{"class":326,"line":3320},[324,13847,488],{"emptyLinePlaceholder":487},[324,13849,13850,13852,13854],{"class":326,"line":3328},[324,13851,4819],{"class":863},[324,13853,4822],{"class":916},[324,13855,2025],{"class":867},[324,13857,13858],{"class":326,"line":3333},[324,13859,2296],{"class":867},[14,13861,13863],{"id":13862},"_65引用的本质","6.5引用的本质",[19,13865,13866,13867],{},"本质：",[116,13868,13869],{},"引用的本质在c++内部实现是一个指针常量.",[316,13871,13873],{"className":854,"code":13872,"language":856,"meta":50,"style":50},"\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",[269,13874,13875,13880,13896,13910,13914,13923,13935,13940,13945,13956,13969,13973,13989,14006,14010,14018,14026],{"__ignoreMap":50},[324,13876,13877],{"class":326,"line":327},[324,13878,13879],{"class":772},"\u002F\u002F发现是引用，转换为 int* const ref = &a;\n",[324,13881,13882,13884,13886,13888,13890,13893],{"class":326,"line":203},[324,13883,6093],{"class":863},[324,13885,12114],{"class":734},[324,13887,868],{"class":867},[324,13889,13295],{"class":863},[324,13891,13892],{"class":5945}," ref",[324,13894,13895],{"class":867},"){\n",[324,13897,13898,13901,13903,13905,13907],{"class":326,"line":338},[324,13899,13900],{"class":867},"    ref ",[324,13902,913],{"class":863},[324,13904,6483],{"class":916},[324,13906,923],{"class":867},[324,13908,13909],{"class":772}," \u002F\u002F ref是引用，转换为*ref = 100\n",[324,13911,13912],{"class":326,"line":344},[324,13913,2296],{"class":867},[324,13915,13916,13918,13920],{"class":326,"line":484},[324,13917,871],{"class":863},[324,13919,2703],{"class":734},[324,13921,13922],{"class":867},"(){\n",[324,13924,13925,13927,13929,13931,13933],{"class":326,"line":491},[324,13926,2715],{"class":863},[324,13928,11598],{"class":867},[324,13930,913],{"class":863},[324,13932,2768],{"class":916},[324,13934,2025],{"class":867},[324,13936,13937],{"class":326,"line":496},[324,13938,13939],{"class":867},"    \n",[324,13941,13942],{"class":326,"line":502},[324,13943,13944],{"class":772},"    \u002F\u002F自动转换为 int* const ref = &a; 指针常量是指针指向不可改，也说明为什么引用不可更改\n",[324,13946,13947,13949,13951,13953],{"class":326,"line":508},[324,13948,13660],{"class":863},[324,13950,13663],{"class":867},[324,13952,913],{"class":863},[324,13954,13955],{"class":867}," a; \n",[324,13957,13958,13960,13962,13964,13966],{"class":326,"line":514},[324,13959,13900],{"class":867},[324,13961,913],{"class":863},[324,13963,9679],{"class":916},[324,13965,923],{"class":867},[324,13967,13968],{"class":772}," \u002F\u002F内部发现ref是引用，自动帮我们转换为: *ref = 20;\n",[324,13970,13971],{"class":326,"line":2343},[324,13972,13939],{"class":867},[324,13974,13975,13977,13979,13981,13983,13985,13987],{"class":326,"line":2348},[324,13976,7258],{"class":867},[324,13978,1908],{"class":863},[324,13980,13399],{"class":738},[324,13982,2176],{"class":863},[324,13984,11598],{"class":867},[324,13986,1908],{"class":863},[324,13988,9569],{"class":867},[324,13990,13991,13993,13995,13998,14000,14002,14004],{"class":326,"line":2354},[324,13992,7258],{"class":867},[324,13994,1908],{"class":863},[324,13996,13997],{"class":738}," \"ref:\"",[324,13999,2176],{"class":863},[324,14001,13663],{"class":867},[324,14003,1908],{"class":863},[324,14005,9569],{"class":867},[324,14007,14008],{"class":326,"line":2359},[324,14009,13939],{"class":867},[324,14011,14012,14015],{"class":326,"line":2373},[324,14013,14014],{"class":734},"    func",[324,14016,14017],{"class":867},"(a);\n",[324,14019,14020,14022,14024],{"class":326,"line":2378},[324,14021,4819],{"class":863},[324,14023,4822],{"class":916},[324,14025,2025],{"class":867},[324,14027,14028],{"class":326,"line":2384},[324,14029,2296],{"class":867},[19,14031,12061],{},[192,14033,14034,14037],{},[195,14035,14036],{},"引用的本质，就是一个指针常量",[195,14038,14039],{},"引用一旦初始化，就不可以发生改变",[14,14041,14043],{"id":14042},"_66常量引用","6.6常量引用",[19,14045,14046],{},"作用：常量引用主要用来修饰形参",[19,14048,14049,14050,14053],{},"在函数形参列表中，可以加",[116,14051,14052],{},"const修饰形参","，防止形参改变实参",[316,14055,14057],{"className":854,"code":14056,"language":856,"meta":50,"style":50},"\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",[269,14058,14059,14064,14069,14088,14093,14106,14110,14114,14122,14126,14131,14136,14150,14154,14162,14174,14178,14183,14195,14202,14206,14216,14220,14228],{"__ignoreMap":50},[324,14060,14061],{"class":326,"line":327},[324,14062,14063],{"class":772},"\u002F\u002F引用使用的场景，通常用来修饰形参\n",[324,14065,14066],{"class":326,"line":203},[324,14067,14068],{"class":772},"\u002F\u002F加上const就不能修改实参的\n",[324,14070,14071,14073,14076,14078,14080,14083,14086],{"class":326,"line":338},[324,14072,6093],{"class":863},[324,14074,14075],{"class":734}," showValue",[324,14077,868],{"class":867},[324,14079,7521],{"class":863},[324,14081,14082],{"class":863}," int&",[324,14084,14085],{"class":5945}," v",[324,14087,13171],{"class":867},[324,14089,14090],{"class":326,"line":344},[324,14091,14092],{"class":772},"    \u002F\u002Fv += 100;\n",[324,14094,14095,14097,14099,14102,14104],{"class":326,"line":484},[324,14096,7258],{"class":867},[324,14098,1908],{"class":863},[324,14100,14101],{"class":867}," v ",[324,14103,1908],{"class":863},[324,14105,9569],{"class":867},[324,14107,14108],{"class":326,"line":491},[324,14109,2296],{"class":867},[324,14111,14112],{"class":326,"line":496},[324,14113,488],{"emptyLinePlaceholder":487},[324,14115,14116,14118,14120],{"class":326,"line":502},[324,14117,871],{"class":863},[324,14119,2703],{"class":734},[324,14121,11582],{"class":867},[324,14123,14124],{"class":326,"line":508},[324,14125,488],{"emptyLinePlaceholder":487},[324,14127,14128],{"class":326,"line":514},[324,14129,14130],{"class":772},"    \u002F\u002Fint& ref = 10;  引用本身需要一个合法的内存空间，因此这行错误\n",[324,14132,14133],{"class":326,"line":2343},[324,14134,14135],{"class":772},"    \u002F\u002F加入const就可以了，编译器优化代码，int temp = 10; const int& ref = temp;\n",[324,14137,14138,14140,14142,14144,14146,14148],{"class":326,"line":2348},[324,14139,11950],{"class":863},[324,14141,14082],{"class":863},[324,14143,13663],{"class":867},[324,14145,913],{"class":863},[324,14147,2768],{"class":916},[324,14149,2025],{"class":867},[324,14151,14152],{"class":326,"line":2354},[324,14153,488],{"emptyLinePlaceholder":487},[324,14155,14156,14159],{"class":326,"line":2359},[324,14157,14158],{"class":772},"    \u002F\u002Fref = 100;",[324,14160,14161],{"class":772},"  \u002F\u002F加入const后不可以修改变量\n",[324,14163,14164,14166,14168,14170,14172],{"class":326,"line":2373},[324,14165,7258],{"class":867},[324,14167,1908],{"class":863},[324,14169,13663],{"class":867},[324,14171,1908],{"class":863},[324,14173,9569],{"class":867},[324,14175,14176],{"class":326,"line":2378},[324,14177,488],{"emptyLinePlaceholder":487},[324,14179,14180],{"class":326,"line":2384},[324,14181,14182],{"class":772},"    \u002F\u002F函数中利用常量引用防止误操作修改实参\n",[324,14184,14185,14187,14189,14191,14193],{"class":326,"line":2405},[324,14186,2715],{"class":863},[324,14188,11598],{"class":867},[324,14190,913],{"class":863},[324,14192,2768],{"class":916},[324,14194,2025],{"class":867},[324,14196,14197,14200],{"class":326,"line":2410},[324,14198,14199],{"class":734},"    showValue",[324,14201,14017],{"class":867},[324,14203,14204],{"class":326,"line":2424},[324,14205,488],{"emptyLinePlaceholder":487},[324,14207,14208,14210,14212,14214],{"class":326,"line":2429},[324,14209,3033],{"class":734},[324,14211,868],{"class":867},[324,14213,3038],{"class":738},[324,14215,3448],{"class":867},[324,14217,14218],{"class":326,"line":2458},[324,14219,488],{"emptyLinePlaceholder":487},[324,14221,14222,14224,14226],{"class":326,"line":2463},[324,14223,4819],{"class":863},[324,14225,4822],{"class":916},[324,14227,2025],{"class":867},[324,14229,14230],{"class":326,"line":2480},[324,14231,2296],{"class":867},[775,14233,14234],{},"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":50,"searchDepth":203,"depth":203,"links":14236},[14237,14238,14239,14240,14241,14242],{"id":12769,"depth":203,"text":12770},{"id":12948,"depth":203,"text":12949},{"id":13131,"depth":203,"text":13132},{"id":13535,"depth":203,"text":13536},{"id":13862,"depth":203,"text":13863},{"id":14042,"depth":203,"text":14043},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch6",{"title":12761,"description":50},"wiki\u002F2026-05-24-c++学习\u002Fch6-引用","3b9GaOu4dJ6AA4pEN3OBkRN5PfpCvI4JUz7VlaaP6b0",{"id":14249,"title":14250,"body":14251,"description":50,"extension":792,"meta":15332,"navigation":487,"path":15333,"seo":15334,"stem":15335,"__hash__":15336},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch7-函数高级.md","7.函数(高级部分)",{"type":7,"value":14252,"toc":15324},[14253,14256,14260,14263,14268,14500,14502,14513,14517,14520,14528,14632,14635,14639,14642,14646,14649,14654,14676,14682,15009,15012,15016,15024,15321],[10,14254,14250],{"id":14255},"_7函数高级部分",[14,14257,14259],{"id":14258},"_71函数默认参数","7.1函数默认参数",[19,14261,14262],{},"在C++中，函数的形参列表中的形参是可以有默认值的。",[19,14264,5910,14265],{},[269,14266,14267],{}," 返回值类型  函数名 （参数= 默认值）{}",[316,14269,14271],{"className":854,"code":14270,"language":856,"meta":50,"style":50},"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",[269,14272,14273,14308,14323,14327,14331,14336,14341,14370,14390,14400,14404,14408,14416,14420,14448,14470,14474,14484,14488,14496],{"__ignoreMap":50},[324,14274,14275,14277,14279,14281,14283,14285,14287,14289,14291,14294,14296,14298,14300,14302,14304,14306],{"class":326,"line":327},[324,14276,871],{"class":863},[324,14278,12114],{"class":734},[324,14280,868],{"class":867},[324,14282,871],{"class":863},[324,14284,2130],{"class":5945},[324,14286,13164],{"class":867},[324,14288,871],{"class":863},[324,14290,3562],{"class":5945},[324,14292,14293],{"class":863}," =",[324,14295,2768],{"class":916},[324,14297,13164],{"class":867},[324,14299,871],{"class":863},[324,14301,3578],{"class":5945},[324,14303,14293],{"class":863},[324,14305,2768],{"class":916},[324,14307,13171],{"class":867},[324,14309,14310,14312,14314,14316,14318,14320],{"class":326,"line":203},[324,14311,4819],{"class":863},[324,14313,11598],{"class":867},[324,14315,1345],{"class":863},[324,14317,11611],{"class":867},[324,14319,1345],{"class":863},[324,14321,14322],{"class":867}," c;\n",[324,14324,14325],{"class":326,"line":338},[324,14326,2296],{"class":867},[324,14328,14329],{"class":326,"line":344},[324,14330,488],{"emptyLinePlaceholder":487},[324,14332,14333],{"class":326,"line":484},[324,14334,14335],{"class":772},"\u002F\u002F1. 如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值\n",[324,14337,14338],{"class":326,"line":491},[324,14339,14340],{"class":772},"\u002F\u002F2. 如果函数声明有默认值，函数实现的时候就不能有默认参数\n",[324,14342,14343,14345,14348,14350,14352,14354,14356,14358,14360,14362,14364,14366,14368],{"class":326,"line":496},[324,14344,871],{"class":863},[324,14346,14347],{"class":734}," func2",[324,14349,868],{"class":867},[324,14351,871],{"class":863},[324,14353,2130],{"class":5945},[324,14355,14293],{"class":863},[324,14357,2768],{"class":916},[324,14359,13164],{"class":867},[324,14361,871],{"class":863},[324,14363,3562],{"class":5945},[324,14365,14293],{"class":863},[324,14367,2768],{"class":916},[324,14369,3448],{"class":867},[324,14371,14372,14374,14376,14378,14380,14382,14384,14386,14388],{"class":326,"line":502},[324,14373,871],{"class":863},[324,14375,14347],{"class":734},[324,14377,868],{"class":867},[324,14379,871],{"class":863},[324,14381,2130],{"class":5945},[324,14383,13164],{"class":867},[324,14385,871],{"class":863},[324,14387,3562],{"class":5945},[324,14389,13171],{"class":867},[324,14391,14392,14394,14396,14398],{"class":326,"line":508},[324,14393,4819],{"class":863},[324,14395,11598],{"class":867},[324,14397,1345],{"class":863},[324,14399,13192],{"class":867},[324,14401,14402],{"class":326,"line":514},[324,14403,2296],{"class":867},[324,14405,14406],{"class":326,"line":2343},[324,14407,488],{"emptyLinePlaceholder":487},[324,14409,14410,14412,14414],{"class":326,"line":2348},[324,14411,871],{"class":863},[324,14413,2703],{"class":734},[324,14415,11582],{"class":867},[324,14417,14418],{"class":326,"line":2354},[324,14419,488],{"emptyLinePlaceholder":487},[324,14421,14422,14424,14426,14429,14431,14433,14435,14437,14439,14441,14444,14446],{"class":326,"line":2359},[324,14423,7258],{"class":867},[324,14425,1908],{"class":863},[324,14427,14428],{"class":738}," \"ret = \"",[324,14430,2176],{"class":863},[324,14432,12114],{"class":734},[324,14434,868],{"class":867},[324,14436,1564],{"class":916},[324,14438,13164],{"class":867},[324,14440,1564],{"class":916},[324,14442,14443],{"class":867},") ",[324,14445,1908],{"class":863},[324,14447,9569],{"class":867},[324,14449,14450,14452,14454,14456,14458,14460,14462,14464,14466,14468],{"class":326,"line":2373},[324,14451,7258],{"class":867},[324,14453,1908],{"class":863},[324,14455,14428],{"class":738},[324,14457,2176],{"class":863},[324,14459,12114],{"class":734},[324,14461,868],{"class":867},[324,14463,1175],{"class":916},[324,14465,14443],{"class":867},[324,14467,1908],{"class":863},[324,14469,9569],{"class":867},[324,14471,14472],{"class":326,"line":2378},[324,14473,488],{"emptyLinePlaceholder":487},[324,14475,14476,14478,14480,14482],{"class":326,"line":2384},[324,14477,3033],{"class":734},[324,14479,868],{"class":867},[324,14481,3038],{"class":738},[324,14483,3448],{"class":867},[324,14485,14486],{"class":326,"line":2405},[324,14487,488],{"emptyLinePlaceholder":487},[324,14489,14490,14492,14494],{"class":326,"line":2410},[324,14491,4819],{"class":863},[324,14493,4822],{"class":916},[324,14495,2025],{"class":867},[324,14497,14498],{"class":326,"line":2424},[324,14499,2296],{"class":867},[19,14501,12061],{},[192,14503,14504,14507,14510],{},[195,14505,14506],{},"我传就用我；没传就用你",[195,14508,14509],{},"如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值；前边有没有无所谓",[195,14511,14512],{},"如果函数声明有默认值，函数实现的时候就不能有默认参数",[14,14514,14516],{"id":14515},"_72函数的占位参数","7.2函数的占位参数",[19,14518,14519],{},"C++中函数的形参列表里可以有占位参数，用来做占位，调用函数时必须填补该位置",[19,14521,14522,14524,14525],{},[116,14523,5910],{}," ",[269,14526,14527],{},"返回值类型 函数名 (数据类型){}",[316,14529,14531],{"className":854,"code":14530,"language":856,"meta":50,"style":50},"\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",[269,14532,14533,14538,14556,14569,14573,14581,14585,14602,14606,14616,14620,14628],{"__ignoreMap":50},[324,14534,14535],{"class":326,"line":327},[324,14536,14537],{"class":772},"\u002F\u002F函数占位参数 ，占位参数也可以有默认参数\n",[324,14539,14540,14542,14544,14546,14548,14550,14552,14554],{"class":326,"line":203},[324,14541,6093],{"class":863},[324,14543,12114],{"class":734},[324,14545,868],{"class":867},[324,14547,871],{"class":863},[324,14549,2130],{"class":5945},[324,14551,13164],{"class":867},[324,14553,871],{"class":863},[324,14555,13171],{"class":867},[324,14557,14558,14560,14562,14565,14567],{"class":326,"line":338},[324,14559,7258],{"class":867},[324,14561,1908],{"class":863},[324,14563,14564],{"class":738}," \"this is func\"",[324,14566,2176],{"class":863},[324,14568,9569],{"class":867},[324,14570,14571],{"class":326,"line":344},[324,14572,2296],{"class":867},[324,14574,14575,14577,14579],{"class":326,"line":484},[324,14576,871],{"class":863},[324,14578,2703],{"class":734},[324,14580,11582],{"class":867},[324,14582,14583],{"class":326,"line":491},[324,14584,488],{"emptyLinePlaceholder":487},[324,14586,14587,14589,14591,14593,14595,14597,14599],{"class":326,"line":496},[324,14588,14014],{"class":734},[324,14590,868],{"class":867},[324,14592,1310],{"class":916},[324,14594,1242],{"class":867},[324,14596,1310],{"class":916},[324,14598,6695],{"class":867},[324,14600,14601],{"class":772}," \u002F\u002F占位参数必须填补，现在还没法在函数中使用，后面就会用到！\n",[324,14603,14604],{"class":326,"line":502},[324,14605,488],{"emptyLinePlaceholder":487},[324,14607,14608,14610,14612,14614],{"class":326,"line":508},[324,14609,3033],{"class":734},[324,14611,868],{"class":867},[324,14613,3038],{"class":738},[324,14615,3448],{"class":867},[324,14617,14618],{"class":326,"line":514},[324,14619,488],{"emptyLinePlaceholder":487},[324,14621,14622,14624,14626],{"class":326,"line":2343},[324,14623,4819],{"class":863},[324,14625,4822],{"class":916},[324,14627,2025],{"class":867},[324,14629,14630],{"class":326,"line":2348},[324,14631,2296],{"class":867},[19,14633,14634],{},"注意：就是只填写数据类型作为占位，调用的时候必须传对应数据",[14,14636,14638],{"id":14637},"_73函数重载","7.3函数重载",[19,14640,14641],{},"意思是函数名是可以相同的",[35,14643,14645],{"id":14644},"_731基本语法","7.3.1基本语法",[19,14647,14648],{},"作用：函数名可以相同，提高复用性",[19,14650,14651],{},[116,14652,14653],{},"函数重载满足条件：",[1871,14655,14656,14659,14662],{},[195,14657,14658],{},"同一个作用域下",[195,14660,14661],{},"函数名称相同",[195,14663,14664,14665,14668,14669,14672,14673],{},"函数参数",[116,14666,14667],{},"类型不同","  或者 ",[116,14670,14671],{},"个数不同"," 或者 ",[116,14674,14675],{},"顺序不同",[19,14677,14678,14681],{},[116,14679,14680],{},"注意:","  函数的返回值不可以作为函数重载的条件",[316,14683,14685],{"className":10670,"code":14684,"language":10672,"meta":50,"style":50},"\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",[269,14686,14687,14692,14700,14704,14717,14721,14735,14739,14752,14756,14771,14775,14788,14792,14813,14817,14830,14834,14854,14858,14871,14875,14879,14884,14889,14894,14899,14904,14908,14912,14920,14924,14930,14940,14950,14964,14979,14983,14993,14997,15005],{"__ignoreMap":50},[324,14688,14689],{"class":326,"line":327},[324,14690,14691],{"class":772},"\u002F\u002F函数重载需要函数都在同一个作用域下\n",[324,14693,14694,14696,14698],{"class":326,"line":203},[324,14695,6093],{"class":863},[324,14697,12114],{"class":734},[324,14699,2706],{"class":867},[324,14701,14702],{"class":326,"line":338},[324,14703,2277],{"class":867},[324,14705,14706,14708,14710,14713,14715],{"class":326,"line":344},[324,14707,7258],{"class":867},[324,14709,1908],{"class":863},[324,14711,14712],{"class":738}," \"func 的调用！\"",[324,14714,2176],{"class":863},[324,14716,9569],{"class":867},[324,14718,14719],{"class":326,"line":484},[324,14720,2296],{"class":867},[324,14722,14723,14725,14727,14729,14731,14733],{"class":326,"line":491},[324,14724,6093],{"class":863},[324,14726,12114],{"class":734},[324,14728,868],{"class":867},[324,14730,871],{"class":863},[324,14732,2130],{"class":5945},[324,14734,874],{"class":867},[324,14736,14737],{"class":326,"line":496},[324,14738,2277],{"class":867},[324,14740,14741,14743,14745,14748,14750],{"class":326,"line":502},[324,14742,7258],{"class":867},[324,14744,1908],{"class":863},[324,14746,14747],{"class":738}," \"func (int a) 的调用！\"",[324,14749,2176],{"class":863},[324,14751,9569],{"class":867},[324,14753,14754],{"class":326,"line":508},[324,14755,2296],{"class":867},[324,14757,14758,14760,14762,14764,14767,14769],{"class":326,"line":514},[324,14759,6093],{"class":863},[324,14761,12114],{"class":734},[324,14763,868],{"class":867},[324,14765,14766],{"class":863},"double",[324,14768,2130],{"class":5945},[324,14770,874],{"class":867},[324,14772,14773],{"class":326,"line":2343},[324,14774,2277],{"class":867},[324,14776,14777,14779,14781,14784,14786],{"class":326,"line":2348},[324,14778,7258],{"class":867},[324,14780,1908],{"class":863},[324,14782,14783],{"class":738}," \"func (double a)的调用！\"",[324,14785,2176],{"class":863},[324,14787,9569],{"class":867},[324,14789,14790],{"class":326,"line":2354},[324,14791,2296],{"class":867},[324,14793,14794,14796,14798,14800,14802,14804,14807,14809,14811],{"class":326,"line":2359},[324,14795,6093],{"class":863},[324,14797,12114],{"class":734},[324,14799,868],{"class":867},[324,14801,871],{"class":863},[324,14803,2130],{"class":5945},[324,14805,14806],{"class":867}," ,",[324,14808,14766],{"class":863},[324,14810,3562],{"class":5945},[324,14812,874],{"class":867},[324,14814,14815],{"class":326,"line":2373},[324,14816,2277],{"class":867},[324,14818,14819,14821,14823,14826,14828],{"class":326,"line":2378},[324,14820,7258],{"class":867},[324,14822,1908],{"class":863},[324,14824,14825],{"class":738}," \"func (int a ,double b) 的调用！\"",[324,14827,2176],{"class":863},[324,14829,9569],{"class":867},[324,14831,14832],{"class":326,"line":2384},[324,14833,2296],{"class":867},[324,14835,14836,14838,14840,14842,14844,14846,14848,14850,14852],{"class":326,"line":2405},[324,14837,6093],{"class":863},[324,14839,12114],{"class":734},[324,14841,868],{"class":867},[324,14843,14766],{"class":863},[324,14845,2130],{"class":5945},[324,14847,14806],{"class":867},[324,14849,871],{"class":863},[324,14851,3562],{"class":5945},[324,14853,874],{"class":867},[324,14855,14856],{"class":326,"line":2410},[324,14857,2277],{"class":867},[324,14859,14860,14862,14864,14867,14869],{"class":326,"line":2424},[324,14861,7258],{"class":867},[324,14863,1908],{"class":863},[324,14865,14866],{"class":738}," \"func (double a ,int b)的调用！\"",[324,14868,2176],{"class":863},[324,14870,9569],{"class":867},[324,14872,14873],{"class":326,"line":2429},[324,14874,2296],{"class":867},[324,14876,14877],{"class":326,"line":2458},[324,14878,488],{"emptyLinePlaceholder":487},[324,14880,14881],{"class":326,"line":2463},[324,14882,14883],{"class":772},"\u002F\u002F函数返回值不可以作为函数重载条件\n",[324,14885,14886],{"class":326,"line":2480},[324,14887,14888],{"class":772},"\u002F\u002Fint func(double a, int b)\n",[324,14890,14891],{"class":326,"line":2485},[324,14892,14893],{"class":772},"\u002F\u002F{\n",[324,14895,14896],{"class":326,"line":2490},[324,14897,14898],{"class":772},"\u002F\u002F  cout \u003C\u003C \"func (double a ,int b)的调用！\" \u003C\u003C endl;\n",[324,14900,14901],{"class":326,"line":2495},[324,14902,14903],{"class":772},"\u002F\u002F}\n",[324,14905,14906],{"class":326,"line":2509},[324,14907,488],{"emptyLinePlaceholder":487},[324,14909,14910],{"class":326,"line":2514},[324,14911,488],{"emptyLinePlaceholder":487},[324,14913,14914,14916,14918],{"class":326,"line":3306},[324,14915,871],{"class":863},[324,14917,2703],{"class":734},[324,14919,11582],{"class":867},[324,14921,14922],{"class":326,"line":3320},[324,14923,488],{"emptyLinePlaceholder":487},[324,14925,14926,14928],{"class":326,"line":3328},[324,14927,14014],{"class":734},[324,14929,6365],{"class":867},[324,14931,14932,14934,14936,14938],{"class":326,"line":3333},[324,14933,14014],{"class":734},[324,14935,868],{"class":867},[324,14937,1310],{"class":916},[324,14939,3448],{"class":867},[324,14941,14942,14944,14946,14948],{"class":326,"line":3339},[324,14943,14014],{"class":734},[324,14945,868],{"class":867},[324,14947,917],{"class":916},[324,14949,3448],{"class":867},[324,14951,14952,14954,14956,14958,14960,14962],{"class":326,"line":3345},[324,14953,14014],{"class":734},[324,14955,868],{"class":867},[324,14957,1310],{"class":916},[324,14959,1242],{"class":867},[324,14961,917],{"class":916},[324,14963,3448],{"class":867},[324,14965,14966,14968,14970,14972,14975,14977],{"class":326,"line":3350},[324,14967,14014],{"class":734},[324,14969,868],{"class":867},[324,14971,917],{"class":916},[324,14973,14974],{"class":867}," , ",[324,14976,1310],{"class":916},[324,14978,3448],{"class":867},[324,14980,14981],{"class":326,"line":8677},[324,14982,13939],{"class":867},[324,14984,14985,14987,14989,14991],{"class":326,"line":8701},[324,14986,3033],{"class":734},[324,14988,868],{"class":867},[324,14990,3038],{"class":738},[324,14992,3448],{"class":867},[324,14994,14995],{"class":326,"line":8706},[324,14996,488],{"emptyLinePlaceholder":487},[324,14998,14999,15001,15003],{"class":326,"line":8712},[324,15000,4819],{"class":863},[324,15002,4822],{"class":916},[324,15004,2025],{"class":867},[324,15006,15007],{"class":326,"line":8739},[324,15008,2296],{"class":867},[19,15010,15011],{},"重点：函数返回值不可以作为函数重载条件！",[35,15013,15015],{"id":15014},"_732注意事项","7.3.2注意事项",[1871,15017,15018,15021],{},[195,15019,15020],{},"引用作为重载条件!!!",[195,15022,15023],{},"函数重载碰到函数默认参数",[316,15025,15027],{"className":854,"code":15026,"language":856,"meta":50,"style":50},"\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",[269,15028,15029,15034,15039,15043,15059,15063,15076,15080,15084,15102,15106,15119,15123,15127,15131,15136,15140,15164,15168,15181,15185,15189,15203,15207,15220,15224,15228,15236,15240,15252,15262,15275,15279,15283,15291,15295,15305,15309,15317],{"__ignoreMap":50},[324,15030,15031],{"class":326,"line":327},[324,15032,15033],{"class":772},"\u002F\u002F函数重载注意事项\n",[324,15035,15036],{"class":326,"line":203},[324,15037,15038],{"class":772},"\u002F\u002F1、引用作为重载条件\n",[324,15040,15041],{"class":326,"line":338},[324,15042,488],{"emptyLinePlaceholder":487},[324,15044,15045,15047,15049,15051,15053,15055,15057],{"class":326,"line":344},[324,15046,6093],{"class":863},[324,15048,12114],{"class":734},[324,15050,868],{"class":867},[324,15052,871],{"class":863},[324,15054,11313],{"class":863},[324,15056,25],{"class":5945},[324,15058,874],{"class":867},[324,15060,15061],{"class":326,"line":484},[324,15062,2277],{"class":867},[324,15064,15065,15067,15069,15072,15074],{"class":326,"line":491},[324,15066,7258],{"class":867},[324,15068,1908],{"class":863},[324,15070,15071],{"class":738}," \"func (int &a) 调用 \"",[324,15073,2176],{"class":863},[324,15075,9569],{"class":867},[324,15077,15078],{"class":326,"line":496},[324,15079,2296],{"class":867},[324,15081,15082],{"class":326,"line":502},[324,15083,488],{"emptyLinePlaceholder":487},[324,15085,15086,15088,15090,15092,15094,15096,15098,15100],{"class":326,"line":508},[324,15087,6093],{"class":863},[324,15089,12114],{"class":734},[324,15091,868],{"class":867},[324,15093,7521],{"class":863},[324,15095,3112],{"class":863},[324,15097,11313],{"class":863},[324,15099,25],{"class":5945},[324,15101,874],{"class":867},[324,15103,15104],{"class":326,"line":514},[324,15105,2277],{"class":867},[324,15107,15108,15110,15112,15115,15117],{"class":326,"line":2343},[324,15109,7258],{"class":867},[324,15111,1908],{"class":863},[324,15113,15114],{"class":738}," \"func (const int &a) 调用 \"",[324,15116,2176],{"class":863},[324,15118,9569],{"class":867},[324,15120,15121],{"class":326,"line":2348},[324,15122,2296],{"class":867},[324,15124,15125],{"class":326,"line":2354},[324,15126,488],{"emptyLinePlaceholder":487},[324,15128,15129],{"class":326,"line":2359},[324,15130,488],{"emptyLinePlaceholder":487},[324,15132,15133],{"class":326,"line":2373},[324,15134,15135],{"class":772},"\u002F\u002F2、函数重载碰到函数默认参数\n",[324,15137,15138],{"class":326,"line":2378},[324,15139,488],{"emptyLinePlaceholder":487},[324,15141,15142,15144,15146,15148,15150,15152,15154,15156,15158,15160,15162],{"class":326,"line":2384},[324,15143,6093],{"class":863},[324,15145,14347],{"class":734},[324,15147,868],{"class":867},[324,15149,871],{"class":863},[324,15151,2130],{"class":5945},[324,15153,13164],{"class":867},[324,15155,871],{"class":863},[324,15157,3562],{"class":5945},[324,15159,14293],{"class":863},[324,15161,2768],{"class":916},[324,15163,874],{"class":867},[324,15165,15166],{"class":326,"line":2405},[324,15167,2277],{"class":867},[324,15169,15170,15172,15174,15177,15179],{"class":326,"line":2410},[324,15171,7258],{"class":867},[324,15173,1908],{"class":863},[324,15175,15176],{"class":738}," \"func2(int a, int b = 10) 调用\"",[324,15178,2176],{"class":863},[324,15180,9569],{"class":867},[324,15182,15183],{"class":326,"line":2424},[324,15184,2296],{"class":867},[324,15186,15187],{"class":326,"line":2429},[324,15188,488],{"emptyLinePlaceholder":487},[324,15190,15191,15193,15195,15197,15199,15201],{"class":326,"line":2458},[324,15192,6093],{"class":863},[324,15194,14347],{"class":734},[324,15196,868],{"class":867},[324,15198,871],{"class":863},[324,15200,2130],{"class":5945},[324,15202,874],{"class":867},[324,15204,15205],{"class":326,"line":2463},[324,15206,2277],{"class":867},[324,15208,15209,15211,15213,15216,15218],{"class":326,"line":2480},[324,15210,7258],{"class":867},[324,15212,1908],{"class":863},[324,15214,15215],{"class":738}," \"func2(int a) 调用\"",[324,15217,2176],{"class":863},[324,15219,9569],{"class":867},[324,15221,15222],{"class":326,"line":2485},[324,15223,2296],{"class":867},[324,15225,15226],{"class":326,"line":2490},[324,15227,488],{"emptyLinePlaceholder":487},[324,15229,15230,15232,15234],{"class":326,"line":2495},[324,15231,871],{"class":863},[324,15233,2703],{"class":734},[324,15235,11582],{"class":867},[324,15237,15238],{"class":326,"line":2509},[324,15239,13939],{"class":867},[324,15241,15242,15244,15246,15248,15250],{"class":326,"line":2514},[324,15243,2715],{"class":863},[324,15245,11598],{"class":867},[324,15247,913],{"class":863},[324,15249,2768],{"class":916},[324,15251,2025],{"class":867},[324,15253,15254,15256,15259],{"class":326,"line":3306},[324,15255,14014],{"class":734},[324,15257,15258],{"class":867},"(a);",[324,15260,15261],{"class":772}," \u002F\u002F调用无const   因为a本身是个变量，可读可写\n",[324,15263,15264,15266,15268,15270,15272],{"class":326,"line":3320},[324,15265,14014],{"class":734},[324,15267,868],{"class":867},[324,15269,1310],{"class":916},[324,15271,6695],{"class":867},[324,15273,15274],{"class":772},"\u002F\u002F调用有const   10是个常量\n",[324,15276,15277],{"class":326,"line":3328},[324,15278,488],{"emptyLinePlaceholder":487},[324,15280,15281],{"class":326,"line":3333},[324,15282,488],{"emptyLinePlaceholder":487},[324,15284,15285,15288],{"class":326,"line":3339},[324,15286,15287],{"class":772},"    \u002F\u002Ffunc2(10);",[324,15289,15290],{"class":772}," \u002F\u002F碰到默认参数产生歧义，需要避免\n",[324,15292,15293],{"class":326,"line":3345},[324,15294,488],{"emptyLinePlaceholder":487},[324,15296,15297,15299,15301,15303],{"class":326,"line":3350},[324,15298,3033],{"class":734},[324,15300,868],{"class":867},[324,15302,3038],{"class":738},[324,15304,3448],{"class":867},[324,15306,15307],{"class":326,"line":8677},[324,15308,488],{"emptyLinePlaceholder":487},[324,15310,15311,15313,15315],{"class":326,"line":8701},[324,15312,4819],{"class":863},[324,15314,4822],{"class":916},[324,15316,2025],{"class":867},[324,15318,15319],{"class":326,"line":8706},[324,15320,2296],{"class":867},[775,15322,15323],{},"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":50,"searchDepth":203,"depth":203,"links":15325},[15326,15327,15328],{"id":14258,"depth":203,"text":14259},{"id":14515,"depth":203,"text":14516},{"id":14637,"depth":203,"text":14638,"children":15329},[15330,15331],{"id":14644,"depth":338,"text":14645},{"id":15014,"depth":338,"text":15015},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch7",{"title":14250,"description":50},"wiki\u002F2026-05-24-c++学习\u002Fch7-函数高级","JeAg03-_IoVFCkdwiBEVx1i5FNY-l3QWmylt1RpVnus",{"id":15338,"title":15339,"body":15340,"description":24092,"extension":792,"meta":24093,"navigation":487,"path":24094,"seo":24095,"stem":24096,"__hash__":24097},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch8-类和对象.md","8.类和对象",{"type":7,"value":15341,"toc":24073},[15342,15345,15351,15358,15363,15366,15369,15372,15376,15380,15383,15386,15394,15399,15402,15409,15414,15573,15576,15829,15832,15835,15838,15843,15846,15849,15860,15865,16101,16105,16115,16118,16126,16273,16277,16280,16283,16287,16732,16736,16744,16752,17664,17671,17676,18304,18307,18310,18313,18432,18435,18522,18525,18651,18654,18748,18751,19104,19108,19116,19120,19127,19130,19133,19144,19150,19155,19167,19175,19195,19203,19220,19406,19409,19413,19416,19419,19422,19425,19428,19431,19434,19894,19900,19904,19907,19918,20505,20508,20997,21001,21004,21007,21010,21013,21016,21024,21420,21424,21427,21430,21877,21880,21883,21888,21891,21896,21899,21903,21906,21908,21914,21917,22223,22233,22274,22278,22281,22283,22316,22319,22626,22628,22643,22646,22669,22678,22684,22687,22691,22694,22697,22702,22713,22718,22726,22730,22860,22863,22866,23041,23046,23258,23262,23265,23379,23384,23623,23627,23631,23634,23637,23641,23746,23749,23752,23755,23759,23870,23873,23876,23881,23933,23936,23939,23944,23990,23993,23998,24066,24068,24071],[10,15343,15339],{"id":15344},"_8类和对象",[19,15346,15347,15348],{},"C++面向对象的三大特性为",[116,15349,15350],{},"封装、继承、多态",[19,15352,15353,15354,15357],{},"C++认为",[116,15355,15356],{},"万事万物都皆为对象","，对象上有其属性和行为",[19,15359,15360],{},[116,15361,15362],{},"例如：",[19,15364,15365],{},"​\t人可以作为对象，属性有姓名、年龄、身高、体重...，行为有走、跑、跳、吃饭、唱歌...",[19,15367,15368],{},"​\t车也可以作为对象，属性有轮胎、方向盘、车灯...,行为有载人、放音乐、放空调...",[19,15370,15371],{},"​\t具有相同性质的对象，我们可以抽象称为类，人属于人类，车属于车类",[14,15373,15375],{"id":15374},"_81封装","8.1封装",[35,15377,15379],{"id":15378},"_811封装的意义","8.1.1封装的意义",[19,15381,15382],{},"封装是C++面向对象三大特性之一",[19,15384,15385],{},"封装的意义：",[1871,15387,15388,15391],{},[195,15389,15390],{},"将属性和行为作为一个整体，表现生活中的事物",[195,15392,15393],{},"将属性和行为加以权限控制",[19,15395,15396],{},[116,15397,15398],{},"封装意义一：",[19,15400,15401],{},"​\t在设计类的时候，属性和行为写在一起，表现事物",[19,15403,15404,14524,15406],{},[116,15405,5910],{},[269,15407,15408],{},"class 类名{   访问权限： 属性  \u002F 行为  };",[192,15410,15411],{},[195,15412,15413],{},"**示例1：**设计一个圆类，求圆的周长",[316,15415,15417],{"className":854,"code":15416,"language":856,"meta":50,"style":50},"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",[269,15418,15419,15427,15431,15436,15441,15446,15451,15458,15463,15473,15477,15495,15499,15503,15511,15515,15520,15525,15530,15535,15546,15569],{"__ignoreMap":50},[324,15420,15421,15424],{"class":326,"line":327},[324,15422,15423],{"class":863},"class",[324,15425,15426],{"class":734}," Circle\n",[324,15428,15429],{"class":326,"line":203},[324,15430,2277],{"class":867},[324,15432,15433],{"class":326,"line":338},[324,15434,15435],{"class":772},"    \u002F\u002F访问权限\n",[324,15437,15438],{"class":326,"line":344},[324,15439,15440],{"class":772},"    \u002F\u002F公共权限\n",[324,15442,15443],{"class":326,"line":484},[324,15444,15445],{"class":863},"public:\n",[324,15447,15448],{"class":326,"line":491},[324,15449,15450],{"class":772},"    \u002F\u002F属性\n",[324,15452,15453,15455],{"class":326,"line":496},[324,15454,2715],{"class":863},[324,15456,15457],{"class":867}," m_r;\n",[324,15459,15460],{"class":326,"line":502},[324,15461,15462],{"class":772},"    \u002F\u002F行为\n",[324,15464,15465,15468,15471],{"class":326,"line":508},[324,15466,15467],{"class":863},"    double",[324,15469,15470],{"class":734}," calculateZC",[324,15472,2706],{"class":867},[324,15474,15475],{"class":326,"line":514},[324,15476,2760],{"class":867},[324,15478,15479,15482,15485,15487,15490,15492],{"class":326,"line":2343},[324,15480,15481],{"class":863},"        return",[324,15483,15484],{"class":916}," 2",[324,15486,1319],{"class":863},[324,15488,15489],{"class":867},"PI",[324,15491,1319],{"class":863},[324,15493,15494],{"class":867},"m_r;\n",[324,15496,15497],{"class":326,"line":2348},[324,15498,2917],{"class":867},[324,15500,15501],{"class":326,"line":2354},[324,15502,4724],{"class":867},[324,15504,15505,15507,15509],{"class":326,"line":2359},[324,15506,871],{"class":863},[324,15508,2703],{"class":734},[324,15510,2706],{"class":867},[324,15512,15513],{"class":326,"line":2373},[324,15514,2277],{"class":867},[324,15516,15517],{"class":326,"line":2378},[324,15518,15519],{"class":772},"    \u002F\u002F通过圆类 创建具体的圆(对象)\n",[324,15521,15522],{"class":326,"line":2384},[324,15523,15524],{"class":772},"    \u002F\u002F实例化（通过一个类 创建一个对象的过程）\n",[324,15526,15527],{"class":326,"line":2405},[324,15528,15529],{"class":867},"    Circle c1;\n",[324,15531,15532],{"class":326,"line":2410},[324,15533,15534],{"class":772},"    \u002F\u002F给圆对象 的属性进行赋值\n",[324,15536,15537,15540,15542,15544],{"class":326,"line":2424},[324,15538,15539],{"class":867},"    c1.m_r",[324,15541,913],{"class":863},[324,15543,1310],{"class":916},[324,15545,2025],{"class":867},[324,15547,15548,15550,15552,15555,15557,15560,15563,15565,15567],{"class":326,"line":2429},[324,15549,2282],{"class":867},[324,15551,1908],{"class":863},[324,15553,15554],{"class":738},"\"圆的周长\"",[324,15556,1908],{"class":863},[324,15558,15559],{"class":867},"c1.",[324,15561,15562],{"class":734},"calculateZC",[324,15564,3156],{"class":867},[324,15566,1908],{"class":863},[324,15568,1930],{"class":867},[324,15570,15571],{"class":326,"line":2458},[324,15572,2296],{"class":867},[19,15574,15575],{},"案例：设计一个学生类，属性有姓名和学号，可以给姓名和学号赋值，可以显示学生的姓名和学号",[316,15577,15579],{"className":854,"code":15578,"language":856,"meta":50,"style":50},"#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",[269,15580,15581,15587,15597,15603,15609,15613,15617,15622,15629,15634,15652,15656,15666,15670,15675,15691,15695,15705,15709,15714,15722,15726,15758,15762,15766,15774,15778,15783,15788,15802,15816,15825],{"__ignoreMap":50},[324,15582,15583,15585],{"class":326,"line":327},[324,15584,2680],{"class":863},[324,15586,2683],{"class":738},[324,15588,15589,15591,15593,15595],{"class":326,"line":203},[324,15590,2688],{"class":863},[324,15592,2691],{"class":863},[324,15594,2694],{"class":734},[324,15596,2025],{"class":867},[324,15598,15599,15601],{"class":326,"line":338},[324,15600,2680],{"class":863},[324,15602,8478],{"class":738},[324,15604,15605,15607],{"class":326,"line":344},[324,15606,15423],{"class":863},[324,15608,8491],{"class":734},[324,15610,15611],{"class":326,"line":484},[324,15612,2277],{"class":867},[324,15614,15615],{"class":326,"line":491},[324,15616,15445],{"class":863},[324,15618,15619],{"class":326,"line":496},[324,15620,15621],{"class":867},"    string m_name;\n",[324,15623,15624,15626],{"class":326,"line":502},[324,15625,2715],{"class":863},[324,15627,15628],{"class":867}," m_id;\n",[324,15630,15631],{"class":326,"line":508},[324,15632,15633],{"class":772},"    \u002F\u002F赋值姓名\n",[324,15635,15636,15639,15642,15644,15647,15650],{"class":326,"line":514},[324,15637,15638],{"class":863},"    void",[324,15640,15641],{"class":734}," setName",[324,15643,868],{"class":867},[324,15645,15646],{"class":734},"string",[324,15648,15649],{"class":5945}," name",[324,15651,874],{"class":867},[324,15653,15654],{"class":326,"line":2343},[324,15655,2760],{"class":867},[324,15657,15658,15661,15663],{"class":326,"line":2348},[324,15659,15660],{"class":867},"        m_name",[324,15662,913],{"class":863},[324,15664,15665],{"class":867},"name;\n",[324,15667,15668],{"class":326,"line":2354},[324,15669,2917],{"class":867},[324,15671,15672],{"class":326,"line":2359},[324,15673,15674],{"class":772},"    \u002F\u002F赋值学号\n",[324,15676,15677,15679,15682,15684,15686,15689],{"class":326,"line":2373},[324,15678,15638],{"class":863},[324,15680,15681],{"class":734}," setId",[324,15683,868],{"class":867},[324,15685,871],{"class":863},[324,15687,15688],{"class":5945}," id",[324,15690,874],{"class":867},[324,15692,15693],{"class":326,"line":2378},[324,15694,2760],{"class":867},[324,15696,15697,15700,15702],{"class":326,"line":2384},[324,15698,15699],{"class":867},"        m_id",[324,15701,913],{"class":863},[324,15703,15704],{"class":867},"id;\n",[324,15706,15707],{"class":326,"line":2405},[324,15708,2917],{"class":867},[324,15710,15711],{"class":326,"line":2410},[324,15712,15713],{"class":772},"    \u002F\u002F打印学生信息\n",[324,15715,15716,15718,15720],{"class":326,"line":2424},[324,15717,15638],{"class":863},[324,15719,10344],{"class":734},[324,15721,2706],{"class":867},[324,15723,15724],{"class":326,"line":2429},[324,15725,2760],{"class":867},[324,15727,15728,15730,15732,15735,15737,15740,15742,15744,15746,15749,15751,15754,15756],{"class":326,"line":2458},[324,15729,4180],{"class":867},[324,15731,1908],{"class":863},[324,15733,15734],{"class":738},"\"姓名：\"",[324,15736,1908],{"class":863},[324,15738,15739],{"class":867},"m_name",[324,15741,1908],{"class":863},[324,15743,5088],{"class":738},[324,15745,1908],{"class":863},[324,15747,15748],{"class":738},"\"学号：\"",[324,15750,1908],{"class":863},[324,15752,15753],{"class":867},"m_id",[324,15755,1908],{"class":863},[324,15757,1930],{"class":867},[324,15759,15760],{"class":326,"line":2463},[324,15761,2917],{"class":867},[324,15763,15764],{"class":326,"line":2480},[324,15765,4724],{"class":867},[324,15767,15768,15770,15772],{"class":326,"line":2485},[324,15769,871],{"class":863},[324,15771,2703],{"class":734},[324,15773,2706],{"class":867},[324,15775,15776],{"class":326,"line":2490},[324,15777,2277],{"class":867},[324,15779,15780],{"class":326,"line":2495},[324,15781,15782],{"class":772},"    \u002F\u002F实例化\n",[324,15784,15785],{"class":326,"line":2509},[324,15786,15787],{"class":867},"    Student s1;\n",[324,15789,15790,15793,15796,15798,15800],{"class":326,"line":2514},[324,15791,15792],{"class":867},"    s1.",[324,15794,15795],{"class":734},"setName",[324,15797,868],{"class":867},[324,15799,8645],{"class":738},[324,15801,3448],{"class":867},[324,15803,15804,15806,15809,15811,15814],{"class":326,"line":3306},[324,15805,15792],{"class":867},[324,15807,15808],{"class":734},"setId",[324,15810,868],{"class":867},[324,15812,15813],{"class":916},"123456",[324,15815,3448],{"class":867},[324,15817,15818,15820,15823],{"class":326,"line":3320},[324,15819,15792],{"class":867},[324,15821,15822],{"class":734},"printInfo",[324,15824,6365],{"class":867},[324,15826,15827],{"class":326,"line":3328},[324,15828,2296],{"class":867},[19,15830,15831],{},"类中的属性和行为统称为成员",[19,15833,15834],{},"属性：成员属性(成员变量)",[19,15836,15837],{},"方法：成员函数(成员方法)",[19,15839,15840],{},[116,15841,15842],{},"封装意义二：",[19,15844,15845],{},"类在设计时，可以把属性和行为放在不同的权限下，加以控制",[19,15847,15848],{},"访问权限有三种：",[192,15850,15851,15854,15857],{},[195,15852,15853],{},"public        公共权限",[195,15855,15856],{},"protected 保护权限",[195,15858,15859],{},"private      私有权限",[19,15861,15862],{},[116,15863,15864],{},"示例：",[316,15866,15868],{"className":10670,"code":15867,"language":10672,"meta":50,"style":50},"\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",[269,15869,15870,15875,15880,15885,15890,15894,15901,15905,15910,15914,15919,15923,15928,15933,15938,15942,15947,15952,15959,15963,15967,15975,15979,15990,16002,16014,16018,16022,16026,16034,16038,16043,16055,16063,16071,16075,16085,16089,16097],{"__ignoreMap":50},[324,15871,15872],{"class":326,"line":327},[324,15873,15874],{"class":772},"\u002F\u002F三种权限\n",[324,15876,15877],{"class":326,"line":203},[324,15878,15879],{"class":772},"\u002F\u002F公共权限  public     类内可以访问  类外可以访问\n",[324,15881,15882],{"class":326,"line":338},[324,15883,15884],{"class":772},"\u002F\u002F保护权限  protected  类内可以访问  类外不可以访问  儿子可以访问父亲中的保护内容\n",[324,15886,15887],{"class":326,"line":344},[324,15888,15889],{"class":772},"\u002F\u002F私有权限  private    类内可以访问  类外不可以访问  儿子不可以访问父亲中的保护内容\n",[324,15891,15892],{"class":326,"line":484},[324,15893,488],{"emptyLinePlaceholder":487},[324,15895,15896,15898],{"class":326,"line":491},[324,15897,15423],{"class":863},[324,15899,15900],{"class":734}," Person\n",[324,15902,15903],{"class":326,"line":496},[324,15904,2277],{"class":867},[324,15906,15907],{"class":326,"line":502},[324,15908,15909],{"class":772},"    \u002F\u002F姓名  公共权限\n",[324,15911,15912],{"class":326,"line":508},[324,15913,15445],{"class":863},[324,15915,15916],{"class":326,"line":514},[324,15917,15918],{"class":867},"    string m_Name;\n",[324,15920,15921],{"class":326,"line":2343},[324,15922,488],{"emptyLinePlaceholder":487},[324,15924,15925],{"class":326,"line":2348},[324,15926,15927],{"class":772},"    \u002F\u002F汽车  保护权限\n",[324,15929,15930],{"class":326,"line":2354},[324,15931,15932],{"class":863},"protected:\n",[324,15934,15935],{"class":326,"line":2359},[324,15936,15937],{"class":867},"    string m_Car;\n",[324,15939,15940],{"class":326,"line":2373},[324,15941,488],{"emptyLinePlaceholder":487},[324,15943,15944],{"class":326,"line":2378},[324,15945,15946],{"class":772},"    \u002F\u002F银行卡密码  私有权限\n",[324,15948,15949],{"class":326,"line":2384},[324,15950,15951],{"class":863},"private:\n",[324,15953,15954,15956],{"class":326,"line":2405},[324,15955,2715],{"class":863},[324,15957,15958],{"class":867}," m_Password;\n",[324,15960,15961],{"class":326,"line":2410},[324,15962,488],{"emptyLinePlaceholder":487},[324,15964,15965],{"class":326,"line":2424},[324,15966,15445],{"class":863},[324,15968,15969,15971,15973],{"class":326,"line":2429},[324,15970,15638],{"class":863},[324,15972,12114],{"class":734},[324,15974,2706],{"class":867},[324,15976,15977],{"class":326,"line":2458},[324,15978,2760],{"class":867},[324,15980,15981,15984,15986,15988],{"class":326,"line":2463},[324,15982,15983],{"class":867},"        m_Name ",[324,15985,913],{"class":863},[324,15987,9667],{"class":738},[324,15989,2025],{"class":867},[324,15991,15992,15995,15997,16000],{"class":326,"line":2480},[324,15993,15994],{"class":867},"        m_Car ",[324,15996,913],{"class":863},[324,15998,15999],{"class":738}," \"拖拉机\"",[324,16001,2025],{"class":867},[324,16003,16004,16007,16009,16012],{"class":326,"line":2485},[324,16005,16006],{"class":867},"        m_Password ",[324,16008,913],{"class":863},[324,16010,16011],{"class":916}," 123456",[324,16013,2025],{"class":867},[324,16015,16016],{"class":326,"line":2490},[324,16017,2917],{"class":867},[324,16019,16020],{"class":326,"line":2495},[324,16021,4724],{"class":867},[324,16023,16024],{"class":326,"line":2509},[324,16025,488],{"emptyLinePlaceholder":487},[324,16027,16028,16030,16032],{"class":326,"line":2514},[324,16029,871],{"class":863},[324,16031,2703],{"class":734},[324,16033,11582],{"class":867},[324,16035,16036],{"class":326,"line":3306},[324,16037,488],{"emptyLinePlaceholder":487},[324,16039,16040],{"class":326,"line":3320},[324,16041,16042],{"class":867},"    Person p;\n",[324,16044,16045,16048,16050,16053],{"class":326,"line":3328},[324,16046,16047],{"class":867},"    p.m_Name ",[324,16049,913],{"class":863},[324,16051,16052],{"class":738}," \"李四\"",[324,16054,2025],{"class":867},[324,16056,16057,16060],{"class":326,"line":3333},[324,16058,16059],{"class":772},"    \u002F\u002Fp.m_Car = \"奔驰\";",[324,16061,16062],{"class":772},"  \u002F\u002F保护权限类外访问不到\n",[324,16064,16065,16068],{"class":326,"line":3339},[324,16066,16067],{"class":772},"    \u002F\u002Fp.m_Password = 123;",[324,16069,16070],{"class":772}," \u002F\u002F私有权限类外访问不到\n",[324,16072,16073],{"class":326,"line":3345},[324,16074,488],{"emptyLinePlaceholder":487},[324,16076,16077,16079,16081,16083],{"class":326,"line":3350},[324,16078,3033],{"class":734},[324,16080,868],{"class":867},[324,16082,3038],{"class":738},[324,16084,3448],{"class":867},[324,16086,16087],{"class":326,"line":8677},[324,16088,488],{"emptyLinePlaceholder":487},[324,16090,16091,16093,16095],{"class":326,"line":8701},[324,16092,4819],{"class":863},[324,16094,4822],{"class":916},[324,16096,2025],{"class":867},[324,16098,16099],{"class":326,"line":8706},[324,16100,2296],{"class":867},[35,16102,16104],{"id":16103},"_812封装c中的class和struct的区别","8.1.2封装c++中的class和struct的区别",[19,16106,16107,16108,16111,16112],{},"在C++中 struct和class唯一的",[116,16109,16110],{},"区别","就在于 ",[116,16113,16114],{},"默认的访问权限不同",[19,16116,16117],{},"区别：",[1871,16119,16120,16123],{},[195,16121,16122],{},"struct 默认权限为公共",[195,16124,16125],{},"class   默认权限为私有",[316,16127,16129],{"className":10670,"code":16128,"language":10672,"meta":50,"style":50},"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",[269,16130,16131,16138,16142,16152,16156,16160,16167,16171,16181,16185,16189,16197,16201,16206,16220,16224,16229,16243,16247,16257,16261,16269],{"__ignoreMap":50},[324,16132,16133,16135],{"class":326,"line":327},[324,16134,15423],{"class":863},[324,16136,16137],{"class":734}," C1\n",[324,16139,16140],{"class":326,"line":203},[324,16141,2277],{"class":867},[324,16143,16144,16146,16149],{"class":326,"line":338},[324,16145,2715],{"class":863},[324,16147,16148],{"class":867},"  m_A;",[324,16150,16151],{"class":772}," \u002F\u002F默认是私有权限\n",[324,16153,16154],{"class":326,"line":344},[324,16155,4724],{"class":867},[324,16157,16158],{"class":326,"line":484},[324,16159,488],{"emptyLinePlaceholder":487},[324,16161,16162,16164],{"class":326,"line":491},[324,16163,8488],{"class":863},[324,16165,16166],{"class":734}," C2\n",[324,16168,16169],{"class":326,"line":496},[324,16170,2277],{"class":867},[324,16172,16173,16175,16178],{"class":326,"line":502},[324,16174,2715],{"class":863},[324,16176,16177],{"class":867}," m_A;",[324,16179,16180],{"class":772},"  \u002F\u002F默认是公共权限\n",[324,16182,16183],{"class":326,"line":508},[324,16184,4724],{"class":867},[324,16186,16187],{"class":326,"line":514},[324,16188,488],{"emptyLinePlaceholder":487},[324,16190,16191,16193,16195],{"class":326,"line":2343},[324,16192,871],{"class":863},[324,16194,2703],{"class":734},[324,16196,11582],{"class":867},[324,16198,16199],{"class":326,"line":2348},[324,16200,488],{"emptyLinePlaceholder":487},[324,16202,16203],{"class":326,"line":2354},[324,16204,16205],{"class":867},"    C1 c1;\n",[324,16207,16208,16211,16213,16215,16217],{"class":326,"line":2359},[324,16209,16210],{"class":867},"    c1.m_A ",[324,16212,913],{"class":863},[324,16214,2768],{"class":916},[324,16216,923],{"class":867},[324,16218,16219],{"class":772}," \u002F\u002F错误，访问权限是私有\n",[324,16221,16222],{"class":326,"line":2373},[324,16223,488],{"emptyLinePlaceholder":487},[324,16225,16226],{"class":326,"line":2378},[324,16227,16228],{"class":867},"    C2 c2;\n",[324,16230,16231,16234,16236,16238,16240],{"class":326,"line":2384},[324,16232,16233],{"class":867},"    c2.m_A ",[324,16235,913],{"class":863},[324,16237,2768],{"class":916},[324,16239,923],{"class":867},[324,16241,16242],{"class":772}," \u002F\u002F正确，访问权限是公共\n",[324,16244,16245],{"class":326,"line":2405},[324,16246,488],{"emptyLinePlaceholder":487},[324,16248,16249,16251,16253,16255],{"class":326,"line":2410},[324,16250,3033],{"class":734},[324,16252,868],{"class":867},[324,16254,3038],{"class":738},[324,16256,3448],{"class":867},[324,16258,16259],{"class":326,"line":2424},[324,16260,488],{"emptyLinePlaceholder":487},[324,16262,16263,16265,16267],{"class":326,"line":2429},[324,16264,4819],{"class":863},[324,16266,4822],{"class":916},[324,16268,2025],{"class":867},[324,16270,16271],{"class":326,"line":2458},[324,16272,2296],{"class":867},[35,16274,16276],{"id":16275},"_813成员属性设置为私有","8.1.3成员属性设置为私有",[19,16278,16279],{},"**优点1：**将所有成员属性设置为私有，可以自己控制读写权限",[19,16281,16282],{},"**优点2：**对于写权限，我们可以检测数据的有效性",[19,16284,16285],{},[116,16286,15864],{},[316,16288,16290],{"className":10670,"code":16289,"language":10672,"meta":50,"style":50},"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",[269,16291,16292,16302,16306,16310,16315,16329,16338,16342,16352,16356,16363,16367,16371,16375,16380,16389,16396,16400,16405,16421,16444,16457,16464,16468,16477,16481,16485,16490,16506,16516,16520,16524,16528,16536,16540,16550,16554,16562,16566,16570,16578,16582,16586,16591,16604,16627,16631,16636,16649,16671,16675,16680,16694,16702,16706,16716,16720,16728],{"__ignoreMap":50},[324,16293,16294,16296,16299],{"class":326,"line":327},[324,16295,15423],{"class":863},[324,16297,16298],{"class":734}," Person",[324,16300,16301],{"class":867}," {\n",[324,16303,16304],{"class":326,"line":203},[324,16305,15445],{"class":863},[324,16307,16308],{"class":326,"line":338},[324,16309,488],{"emptyLinePlaceholder":487},[324,16311,16312],{"class":326,"line":344},[324,16313,16314],{"class":772},"    \u002F\u002F姓名设置可读可写\n",[324,16316,16317,16319,16321,16323,16325,16327],{"class":326,"line":484},[324,16318,15638],{"class":863},[324,16320,15641],{"class":734},[324,16322,868],{"class":867},[324,16324,15646],{"class":734},[324,16326,15649],{"class":5945},[324,16328,13171],{"class":867},[324,16330,16331,16333,16335],{"class":326,"line":491},[324,16332,15983],{"class":867},[324,16334,913],{"class":863},[324,16336,16337],{"class":867}," name;\n",[324,16339,16340],{"class":326,"line":496},[324,16341,2917],{"class":867},[324,16343,16344,16347,16350],{"class":326,"line":502},[324,16345,16346],{"class":734},"    string",[324,16348,16349],{"class":734}," getName",[324,16351,2706],{"class":867},[324,16353,16354],{"class":326,"line":508},[324,16355,2760],{"class":867},[324,16357,16358,16360],{"class":326,"line":514},[324,16359,15481],{"class":863},[324,16361,16362],{"class":867}," m_Name;\n",[324,16364,16365],{"class":326,"line":2343},[324,16366,2917],{"class":867},[324,16368,16369],{"class":326,"line":2348},[324,16370,488],{"emptyLinePlaceholder":487},[324,16372,16373],{"class":326,"line":2354},[324,16374,488],{"emptyLinePlaceholder":487},[324,16376,16377],{"class":326,"line":2359},[324,16378,16379],{"class":772},"    \u002F\u002F获取年龄 \n",[324,16381,16382,16384,16387],{"class":326,"line":2373},[324,16383,2715],{"class":863},[324,16385,16386],{"class":734}," getAge",[324,16388,11582],{"class":867},[324,16390,16391,16393],{"class":326,"line":2378},[324,16392,15481],{"class":863},[324,16394,16395],{"class":867}," m_Age;\n",[324,16397,16398],{"class":326,"line":2384},[324,16399,2917],{"class":867},[324,16401,16402],{"class":326,"line":2405},[324,16403,16404],{"class":772},"    \u002F\u002F设置年龄\n",[324,16406,16407,16409,16412,16414,16416,16419],{"class":326,"line":2410},[324,16408,15638],{"class":863},[324,16410,16411],{"class":734}," setAge",[324,16413,868],{"class":867},[324,16415,871],{"class":863},[324,16417,16418],{"class":5945}," age",[324,16420,13171],{"class":867},[324,16422,16423,16425,16428,16430,16432,16434,16437,16439,16442],{"class":326,"line":2424},[324,16424,3226],{"class":863},[324,16426,16427],{"class":867}," (age ",[324,16429,1774],{"class":863},[324,16431,4822],{"class":916},[324,16433,3984],{"class":863},[324,16435,16436],{"class":867}," age ",[324,16438,1824],{"class":863},[324,16440,16441],{"class":916}," 150",[324,16443,13171],{"class":867},[324,16445,16446,16448,16450,16453,16455],{"class":326,"line":2429},[324,16447,10448],{"class":867},[324,16449,1908],{"class":863},[324,16451,16452],{"class":738}," \"你个老妖精!\"",[324,16454,2176],{"class":863},[324,16456,9569],{"class":867},[324,16458,16459,16462],{"class":326,"line":2458},[324,16460,16461],{"class":863},"            return",[324,16463,2025],{"class":867},[324,16465,16466],{"class":326,"line":2463},[324,16467,3258],{"class":867},[324,16469,16470,16473,16475],{"class":326,"line":2480},[324,16471,16472],{"class":867},"        m_Age ",[324,16474,913],{"class":863},[324,16476,8526],{"class":867},[324,16478,16479],{"class":326,"line":2485},[324,16480,2917],{"class":867},[324,16482,16483],{"class":326,"line":2490},[324,16484,488],{"emptyLinePlaceholder":487},[324,16486,16487],{"class":326,"line":2495},[324,16488,16489],{"class":772},"    \u002F\u002F情人设置为只写\n",[324,16491,16492,16494,16497,16499,16501,16504],{"class":326,"line":2509},[324,16493,15638],{"class":863},[324,16495,16496],{"class":734}," setLover",[324,16498,868],{"class":867},[324,16500,15646],{"class":734},[324,16502,16503],{"class":5945}," lover",[324,16505,13171],{"class":867},[324,16507,16508,16511,16513],{"class":326,"line":2514},[324,16509,16510],{"class":867},"        m_Lover ",[324,16512,913],{"class":863},[324,16514,16515],{"class":867}," lover;\n",[324,16517,16518],{"class":326,"line":3306},[324,16519,2917],{"class":867},[324,16521,16522],{"class":326,"line":3320},[324,16523,488],{"emptyLinePlaceholder":487},[324,16525,16526],{"class":326,"line":3328},[324,16527,15951],{"class":863},[324,16529,16530,16533],{"class":326,"line":3333},[324,16531,16532],{"class":867},"    string m_Name;",[324,16534,16535],{"class":772}," \u002F\u002F可读可写  姓名\n",[324,16537,16538],{"class":326,"line":3339},[324,16539,13939],{"class":867},[324,16541,16542,16544,16547],{"class":326,"line":3345},[324,16543,2715],{"class":863},[324,16545,16546],{"class":867}," m_Age;",[324,16548,16549],{"class":772}," \u002F\u002F只读  年龄\n",[324,16551,16552],{"class":326,"line":3350},[324,16553,488],{"emptyLinePlaceholder":487},[324,16555,16556,16559],{"class":326,"line":8677},[324,16557,16558],{"class":867},"    string m_Lover;",[324,16560,16561],{"class":772}," \u002F\u002F只写  情人\n",[324,16563,16564],{"class":326,"line":8701},[324,16565,4724],{"class":867},[324,16567,16568],{"class":326,"line":8706},[324,16569,488],{"emptyLinePlaceholder":487},[324,16571,16572,16574,16576],{"class":326,"line":8712},[324,16573,871],{"class":863},[324,16575,2703],{"class":734},[324,16577,11582],{"class":867},[324,16579,16580],{"class":326,"line":8739},[324,16581,488],{"emptyLinePlaceholder":487},[324,16583,16584],{"class":326,"line":8744},[324,16585,16042],{"class":867},[324,16587,16588],{"class":326,"line":8750},[324,16589,16590],{"class":772},"    \u002F\u002F姓名设置\n",[324,16592,16593,16596,16598,16600,16602],{"class":326,"line":8762},[324,16594,16595],{"class":867},"    p.",[324,16597,15795],{"class":734},[324,16599,868],{"class":867},[324,16601,8645],{"class":738},[324,16603,3448],{"class":867},[324,16605,16606,16608,16610,16613,16615,16618,16621,16623,16625],{"class":326,"line":8774},[324,16607,7258],{"class":867},[324,16609,1908],{"class":863},[324,16611,16612],{"class":738}," \"姓名： \"",[324,16614,2176],{"class":863},[324,16616,16617],{"class":867}," p.",[324,16619,16620],{"class":734},"getName",[324,16622,13779],{"class":867},[324,16624,1908],{"class":863},[324,16626,9569],{"class":867},[324,16628,16629],{"class":326,"line":8786},[324,16630,488],{"emptyLinePlaceholder":487},[324,16632,16633],{"class":326,"line":10445},[324,16634,16635],{"class":772},"    \u002F\u002F年龄设置\n",[324,16637,16638,16640,16643,16645,16647],{"class":326,"line":10470},[324,16639,16595],{"class":867},[324,16641,16642],{"class":734},"setAge",[324,16644,868],{"class":867},[324,16646,1520],{"class":916},[324,16648,3448],{"class":867},[324,16650,16651,16653,16655,16658,16660,16662,16665,16667,16669],{"class":326,"line":10493},[324,16652,7258],{"class":867},[324,16654,1908],{"class":863},[324,16656,16657],{"class":738}," \"年龄： \"",[324,16659,2176],{"class":863},[324,16661,16617],{"class":867},[324,16663,16664],{"class":734},"getAge",[324,16666,13779],{"class":867},[324,16668,1908],{"class":863},[324,16670,9569],{"class":867},[324,16672,16673],{"class":326,"line":10517},[324,16674,488],{"emptyLinePlaceholder":487},[324,16676,16677],{"class":326,"line":10522},[324,16678,16679],{"class":772},"    \u002F\u002F情人设置\n",[324,16681,16682,16684,16687,16689,16692],{"class":326,"line":10527},[324,16683,16595],{"class":867},[324,16685,16686],{"class":734},"setLover",[324,16688,868],{"class":867},[324,16690,16691],{"class":738},"\"苍井\"",[324,16693,3448],{"class":867},[324,16695,16696,16699],{"class":326,"line":10532},[324,16697,16698],{"class":772},"    \u002F\u002Fcout \u003C\u003C \"情人： \" \u003C\u003C p.m_Lover \u003C\u003C endl;",[324,16700,16701],{"class":772},"  \u002F\u002F只写属性，不可以读取\n",[324,16703,16704],{"class":326,"line":10541},[324,16705,488],{"emptyLinePlaceholder":487},[324,16707,16708,16710,16712,16714],{"class":326,"line":10546},[324,16709,3033],{"class":734},[324,16711,868],{"class":867},[324,16713,3038],{"class":738},[324,16715,3448],{"class":867},[324,16717,16718],{"class":326,"line":10552},[324,16719,488],{"emptyLinePlaceholder":487},[324,16721,16722,16724,16726],{"class":326,"line":10573},[324,16723,4819],{"class":863},[324,16725,4822],{"class":916},[324,16727,2025],{"class":867},[324,16729,16730],{"class":326,"line":10579},[324,16731,2296],{"class":867},[35,16733,16735],{"id":16734},"_814封装案例","8.1.4封装案例",[192,16737,16738],{},[195,16739,16740,16743],{},[116,16741,16742],{},"练习案例1：设计立方体类","\n设计立方体类(Cube)",[1871,16745,16746,16749],{},[195,16747,16748],{},"求出立方体的面积和体积",[195,16750,16751],{},"分别用全局函数和成员函数判断两个立方体是否相等。",[316,16753,16755],{"className":854,"code":16754,"language":856,"meta":50,"style":50},"#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",[269,16756,16757,16763,16773,16780,16784,16788,16793,16823,16827,16837,16847,16857,16861,16870,16874,16910,16914,16923,16927,16943,16947,16952,16961,16965,16972,16976,16985,16989,16996,17000,17009,17013,17020,17024,17029,17046,17050,17096,17100,17109,17113,17117,17121,17130,17134,17138,17143,17147,17153,17159,17165,17169,17173,17178,17200,17204,17258,17262,17270,17274,17279,17284,17297,17304,17320,17331,17337,17360,17366,17389,17403,17423,17429,17440,17463,17485,17490,17496,17510,17523,17528,17542,17547,17553,17558,17572,17577,17582,17596,17608,17613,17626,17631,17636,17641,17654,17659],{"__ignoreMap":50},[324,16758,16759,16761],{"class":326,"line":327},[324,16760,2680],{"class":863},[324,16762,2683],{"class":738},[324,16764,16765,16767,16769,16771],{"class":326,"line":203},[324,16766,2688],{"class":863},[324,16768,2691],{"class":863},[324,16770,2694],{"class":734},[324,16772,2025],{"class":867},[324,16774,16775,16777],{"class":326,"line":338},[324,16776,15423],{"class":863},[324,16778,16779],{"class":734}," Cube\n",[324,16781,16782],{"class":326,"line":344},[324,16783,2277],{"class":867},[324,16785,16786],{"class":326,"line":484},[324,16787,15445],{"class":863},[324,16789,16790],{"class":326,"line":491},[324,16791,16792],{"class":772},"    \u002F\u002F输入长宽高\n",[324,16794,16795,16797,16800,16802,16804,16807,16809,16811,16814,16816,16818,16821],{"class":326,"line":496},[324,16796,15638],{"class":863},[324,16798,16799],{"class":734}," setLwh",[324,16801,868],{"class":867},[324,16803,871],{"class":863},[324,16805,16806],{"class":5945}," l",[324,16808,1242],{"class":867},[324,16810,871],{"class":863},[324,16812,16813],{"class":5945}," w",[324,16815,1242],{"class":867},[324,16817,871],{"class":863},[324,16819,16820],{"class":5945}," h",[324,16822,874],{"class":867},[324,16824,16825],{"class":326,"line":502},[324,16826,2760],{"class":867},[324,16828,16829,16832,16834],{"class":326,"line":508},[324,16830,16831],{"class":867},"        m_L",[324,16833,913],{"class":863},[324,16835,16836],{"class":867},"l;\n",[324,16838,16839,16842,16844],{"class":326,"line":514},[324,16840,16841],{"class":867},"        m_W",[324,16843,913],{"class":863},[324,16845,16846],{"class":867},"w;\n",[324,16848,16849,16852,16854],{"class":326,"line":2343},[324,16850,16851],{"class":867},"        m_H",[324,16853,913],{"class":863},[324,16855,16856],{"class":867},"h;\n",[324,16858,16859],{"class":326,"line":2348},[324,16860,2917],{"class":867},[324,16862,16863,16865,16868],{"class":326,"line":2354},[324,16864,2715],{"class":863},[324,16866,16867],{"class":734}," mianji",[324,16869,2706],{"class":867},[324,16871,16872],{"class":326,"line":2359},[324,16873,2760],{"class":867},[324,16875,16876,16878,16880,16882,16885,16887,16890,16892,16895,16897,16900,16902,16905,16907],{"class":326,"line":2373},[324,16877,15481],{"class":863},[324,16879,15484],{"class":916},[324,16881,1319],{"class":863},[324,16883,16884],{"class":867},"(m_L",[324,16886,1319],{"class":863},[324,16888,16889],{"class":867},"m_W ",[324,16891,1345],{"class":863},[324,16893,16894],{"class":867}," m_L",[324,16896,1319],{"class":863},[324,16898,16899],{"class":867},"m_H ",[324,16901,1345],{"class":863},[324,16903,16904],{"class":867}," m_W",[324,16906,1319],{"class":863},[324,16908,16909],{"class":867},"m_H);\n",[324,16911,16912],{"class":326,"line":2378},[324,16913,2917],{"class":867},[324,16915,16916,16918,16921],{"class":326,"line":2384},[324,16917,2715],{"class":863},[324,16919,16920],{"class":734}," tiji",[324,16922,2706],{"class":867},[324,16924,16925],{"class":326,"line":2405},[324,16926,2760],{"class":867},[324,16928,16929,16931,16933,16935,16938,16940],{"class":326,"line":2410},[324,16930,15481],{"class":863},[324,16932,16894],{"class":867},[324,16934,1319],{"class":863},[324,16936,16937],{"class":867},"m_W",[324,16939,1319],{"class":863},[324,16941,16942],{"class":867},"m_H;\n",[324,16944,16945],{"class":326,"line":2424},[324,16946,2917],{"class":867},[324,16948,16949],{"class":326,"line":2429},[324,16950,16951],{"class":772},"    \u002F\u002F获取长宽高\n",[324,16953,16954,16956,16959],{"class":326,"line":2458},[324,16955,2715],{"class":863},[324,16957,16958],{"class":734}," getLength",[324,16960,2706],{"class":867},[324,16962,16963],{"class":326,"line":2463},[324,16964,2760],{"class":867},[324,16966,16967,16969],{"class":326,"line":2480},[324,16968,15481],{"class":863},[324,16970,16971],{"class":867}," m_L;\n",[324,16973,16974],{"class":326,"line":2485},[324,16975,2917],{"class":867},[324,16977,16978,16980,16983],{"class":326,"line":2490},[324,16979,2715],{"class":863},[324,16981,16982],{"class":734}," getWidth",[324,16984,2706],{"class":867},[324,16986,16987],{"class":326,"line":2495},[324,16988,2760],{"class":867},[324,16990,16991,16993],{"class":326,"line":2509},[324,16992,15481],{"class":863},[324,16994,16995],{"class":867}," m_W;\n",[324,16997,16998],{"class":326,"line":2514},[324,16999,2917],{"class":867},[324,17001,17002,17004,17007],{"class":326,"line":3306},[324,17003,2715],{"class":863},[324,17005,17006],{"class":734}," getHeight",[324,17008,2706],{"class":867},[324,17010,17011],{"class":326,"line":3320},[324,17012,2760],{"class":867},[324,17014,17015,17017],{"class":326,"line":3328},[324,17016,15481],{"class":863},[324,17018,17019],{"class":867}," m_H;\n",[324,17021,17022],{"class":326,"line":3333},[324,17023,2917],{"class":867},[324,17025,17026],{"class":326,"line":3339},[324,17027,17028],{"class":772},"    \u002F\u002F成员函数判断两个立方体是否相等\n",[324,17030,17031,17034,17037,17039,17042,17044],{"class":326,"line":3345},[324,17032,17033],{"class":863},"    bool",[324,17035,17036],{"class":734}," isEqual",[324,17038,868],{"class":867},[324,17040,17041],{"class":734},"Cube",[324,17043,3578],{"class":5945},[324,17045,874],{"class":867},[324,17047,17048],{"class":326,"line":3350},[324,17049,2760],{"class":867},[324,17051,17052,17054,17057,17060,17062,17064,17067,17069,17072,17075,17077,17079,17082,17084,17086,17089,17091,17093],{"class":326,"line":8677},[324,17053,3226],{"class":863},[324,17055,17056],{"class":867}," (c.",[324,17058,17059],{"class":734},"getLength",[324,17061,13779],{"class":867},[324,17063,3678],{"class":863},[324,17065,17066],{"class":867}," m_L ",[324,17068,2446],{"class":863},[324,17070,17071],{"class":867}," c.",[324,17073,17074],{"class":734},"getWidth",[324,17076,13779],{"class":867},[324,17078,3678],{"class":863},[324,17080,17081],{"class":867}," m_W ",[324,17083,2446],{"class":863},[324,17085,17071],{"class":867},[324,17087,17088],{"class":734},"getHeight",[324,17090,13779],{"class":867},[324,17092,3678],{"class":863},[324,17094,17095],{"class":867}," m_H)\n",[324,17097,17098],{"class":326,"line":8701},[324,17099,3239],{"class":867},[324,17101,17102,17104,17107],{"class":326,"line":8706},[324,17103,16461],{"class":863},[324,17105,17106],{"class":916}," true",[324,17108,2025],{"class":867},[324,17110,17111],{"class":326,"line":8712},[324,17112,3258],{"class":867},[324,17114,17115],{"class":326,"line":8739},[324,17116,3299],{"class":863},[324,17118,17119],{"class":326,"line":8744},[324,17120,3239],{"class":867},[324,17122,17123,17125,17128],{"class":326,"line":8750},[324,17124,16461],{"class":863},[324,17126,17127],{"class":916}," false",[324,17129,2025],{"class":867},[324,17131,17132],{"class":326,"line":8762},[324,17133,3258],{"class":867},[324,17135,17136],{"class":326,"line":8774},[324,17137,2917],{"class":867},[324,17139,17140],{"class":326,"line":8786},[324,17141,17142],{"class":772},"    \u002F\u002F私有属性\n",[324,17144,17145],{"class":326,"line":10445},[324,17146,15951],{"class":863},[324,17148,17149,17151],{"class":326,"line":10470},[324,17150,2715],{"class":863},[324,17152,16971],{"class":867},[324,17154,17155,17157],{"class":326,"line":10493},[324,17156,2715],{"class":863},[324,17158,16995],{"class":867},[324,17160,17161,17163],{"class":326,"line":10517},[324,17162,2715],{"class":863},[324,17164,17019],{"class":867},[324,17166,17167],{"class":326,"line":10522},[324,17168,488],{"emptyLinePlaceholder":487},[324,17170,17171],{"class":326,"line":10527},[324,17172,4724],{"class":867},[324,17174,17175],{"class":326,"line":10532},[324,17176,17177],{"class":772},"\u002F\u002F全局函数判断两个立方体是否相等\n",[324,17179,17180,17182,17184,17186,17188,17191,17193,17195,17198],{"class":326,"line":10541},[324,17181,2086],{"class":863},[324,17183,17036],{"class":734},[324,17185,868],{"class":867},[324,17187,17041],{"class":734},[324,17189,17190],{"class":5945}," c1",[324,17192,1242],{"class":867},[324,17194,17041],{"class":734},[324,17196,17197],{"class":5945}," c2",[324,17199,874],{"class":867},[324,17201,17202],{"class":326,"line":10546},[324,17203,2277],{"class":867},[324,17205,17206,17208,17211,17213,17215,17217,17220,17222,17225,17227,17229,17231,17233,17235,17237,17239,17241,17243,17245,17247,17249,17251,17253,17255],{"class":326,"line":10552},[324,17207,4819],{"class":863},[324,17209,17210],{"class":867}," (c1.",[324,17212,17059],{"class":734},[324,17214,13779],{"class":867},[324,17216,3678],{"class":863},[324,17218,17219],{"class":867}," c2.",[324,17221,17059],{"class":734},[324,17223,17224],{"class":867},"()) ",[324,17226,2446],{"class":863},[324,17228,17210],{"class":867},[324,17230,17074],{"class":734},[324,17232,13779],{"class":867},[324,17234,3678],{"class":863},[324,17236,17219],{"class":867},[324,17238,17074],{"class":734},[324,17240,17224],{"class":867},[324,17242,2446],{"class":863},[324,17244,17210],{"class":867},[324,17246,17088],{"class":734},[324,17248,13779],{"class":867},[324,17250,3678],{"class":863},[324,17252,17219],{"class":867},[324,17254,17088],{"class":734},[324,17256,17257],{"class":867},"());\n",[324,17259,17260],{"class":326,"line":10573},[324,17261,2296],{"class":867},[324,17263,17264,17266,17268],{"class":326,"line":10579},[324,17265,871],{"class":863},[324,17267,2703],{"class":734},[324,17269,2706],{"class":867},[324,17271,17272],{"class":326,"line":10593},[324,17273,2277],{"class":867},[324,17275,17276],{"class":326,"line":10599},[324,17277,17278],{"class":867},"    Cube c1;\n",[324,17280,17281],{"class":326,"line":10626},[324,17282,17283],{"class":772},"    \u002F\u002F输入立方体的长宽高\n",[324,17285,17286,17288,17290,17293,17295],{"class":326,"line":10635},[324,17287,2282],{"class":867},[324,17289,1908],{"class":863},[324,17291,17292],{"class":738},"\"请输入第一个立方体的长、宽、高：\"",[324,17294,1908],{"class":863},[324,17296,1930],{"class":867},[324,17298,17299,17301],{"class":326,"line":10641},[324,17300,2715],{"class":863},[324,17302,17303],{"class":867}," l,w,h,l1,w1,h1;\n",[324,17305,17306,17308,17310,17312,17314,17316,17318],{"class":326,"line":10649},[324,17307,2742],{"class":867},[324,17309,2161],{"class":863},[324,17311,1382],{"class":867},[324,17313,2161],{"class":863},[324,17315,1659],{"class":867},[324,17317,2161],{"class":863},[324,17319,16856],{"class":867},[324,17321,17322,17325,17328],{"class":326,"line":10654},[324,17323,17324],{"class":867},"    c1.",[324,17326,17327],{"class":734},"setLwh",[324,17329,17330],{"class":867},"(l,w,h);\n",[324,17332,17334],{"class":326,"line":17333},66,[324,17335,17336],{"class":772},"    \u002F\u002F面积\n",[324,17338,17340,17342,17344,17347,17349,17351,17354,17356,17358],{"class":326,"line":17339},67,[324,17341,2282],{"class":867},[324,17343,1908],{"class":863},[324,17345,17346],{"class":738},"\"立方体的表面积为：\"",[324,17348,1908],{"class":863},[324,17350,15559],{"class":867},[324,17352,17353],{"class":734},"mianji",[324,17355,3156],{"class":867},[324,17357,1908],{"class":863},[324,17359,1930],{"class":867},[324,17361,17363],{"class":326,"line":17362},68,[324,17364,17365],{"class":772},"    \u002F\u002F体积\n",[324,17367,17369,17371,17373,17376,17378,17380,17383,17385,17387],{"class":326,"line":17368},69,[324,17370,2282],{"class":867},[324,17372,1908],{"class":863},[324,17374,17375],{"class":738},"\"立方体的体积为：\"",[324,17377,1908],{"class":863},[324,17379,15559],{"class":867},[324,17381,17382],{"class":734},"tiji",[324,17384,3156],{"class":867},[324,17386,1908],{"class":863},[324,17388,1930],{"class":867},[324,17390,17392,17394,17396,17399,17401],{"class":326,"line":17391},70,[324,17393,2282],{"class":867},[324,17395,1908],{"class":863},[324,17397,17398],{"class":738},"\"请输入第二个立方体的长、宽、高：\"",[324,17400,1908],{"class":863},[324,17402,1930],{"class":867},[324,17404,17406,17408,17410,17413,17415,17418,17420],{"class":326,"line":17405},71,[324,17407,2742],{"class":867},[324,17409,2161],{"class":863},[324,17411,17412],{"class":867},"l1",[324,17414,2161],{"class":863},[324,17416,17417],{"class":867},"w1",[324,17419,2161],{"class":863},[324,17421,17422],{"class":867},"h1;\n",[324,17424,17426],{"class":326,"line":17425},72,[324,17427,17428],{"class":867},"    Cube c2;\n",[324,17430,17432,17435,17437],{"class":326,"line":17431},73,[324,17433,17434],{"class":867},"    c2.",[324,17436,17327],{"class":734},[324,17438,17439],{"class":867},"(l1,w1,h1);\n",[324,17441,17443,17445,17447,17450,17452,17455,17457,17459,17461],{"class":326,"line":17442},74,[324,17444,2282],{"class":867},[324,17446,1908],{"class":863},[324,17448,17449],{"class":738},"\"第二个立方体的表面积为：\"",[324,17451,1908],{"class":863},[324,17453,17454],{"class":867},"c2.",[324,17456,17353],{"class":734},[324,17458,3156],{"class":867},[324,17460,1908],{"class":863},[324,17462,1930],{"class":867},[324,17464,17466,17468,17470,17473,17475,17477,17479,17481,17483],{"class":326,"line":17465},75,[324,17467,2282],{"class":867},[324,17469,1908],{"class":863},[324,17471,17472],{"class":738},"\"第二个立方体的体积为：\"",[324,17474,1908],{"class":863},[324,17476,17454],{"class":867},[324,17478,17382],{"class":734},[324,17480,3156],{"class":867},[324,17482,1908],{"class":863},[324,17484,1930],{"class":867},[324,17486,17488],{"class":326,"line":17487},76,[324,17489,488],{"emptyLinePlaceholder":487},[324,17491,17493],{"class":326,"line":17492},77,[324,17494,17495],{"class":772},"    \u002F\u002F判断两个立方体的表面积和体积是否相等\n",[324,17497,17499,17501,17503,17506,17508],{"class":326,"line":17498},78,[324,17500,2282],{"class":867},[324,17502,1908],{"class":863},[324,17504,17505],{"class":738},"\"内部函数判断结果：\"",[324,17507,1908],{"class":863},[324,17509,1930],{"class":867},[324,17511,17513,17515,17517,17520],{"class":326,"line":17512},79,[324,17514,3830],{"class":863},[324,17516,17210],{"class":867},[324,17518,17519],{"class":734},"isEqual",[324,17521,17522],{"class":867},"(c2))\n",[324,17524,17526],{"class":326,"line":17525},80,[324,17527,2760],{"class":867},[324,17529,17531,17533,17535,17538,17540],{"class":326,"line":17530},81,[324,17532,4180],{"class":867},[324,17534,1908],{"class":863},[324,17536,17537],{"class":738},"\"两个立方体相等\"",[324,17539,1908],{"class":863},[324,17541,1930],{"class":867},[324,17543,17545],{"class":326,"line":17544},82,[324,17546,2917],{"class":867},[324,17548,17550],{"class":326,"line":17549},83,[324,17551,17552],{"class":863},"    else\n",[324,17554,17556],{"class":326,"line":17555},84,[324,17557,2760],{"class":867},[324,17559,17561,17563,17565,17568,17570],{"class":326,"line":17560},85,[324,17562,4180],{"class":867},[324,17564,1908],{"class":863},[324,17566,17567],{"class":738},"\"两个立方体不相等\"",[324,17569,1908],{"class":863},[324,17571,1930],{"class":867},[324,17573,17575],{"class":326,"line":17574},86,[324,17576,2917],{"class":867},[324,17578,17580],{"class":326,"line":17579},87,[324,17581,488],{"emptyLinePlaceholder":487},[324,17583,17585,17587,17589,17592,17594],{"class":326,"line":17584},88,[324,17586,2282],{"class":867},[324,17588,1908],{"class":863},[324,17590,17591],{"class":738},"\"全局函数判断结果：\"",[324,17593,1908],{"class":863},[324,17595,1930],{"class":867},[324,17597,17599,17601,17603,17605],{"class":326,"line":17598},89,[324,17600,3830],{"class":863},[324,17602,2389],{"class":867},[324,17604,17519],{"class":734},[324,17606,17607],{"class":867},"(c1, c2))\n",[324,17609,17611],{"class":326,"line":17610},90,[324,17612,2760],{"class":867},[324,17614,17616,17618,17620,17622,17624],{"class":326,"line":17615},91,[324,17617,4180],{"class":867},[324,17619,1908],{"class":863},[324,17621,17537],{"class":738},[324,17623,1908],{"class":863},[324,17625,1930],{"class":867},[324,17627,17629],{"class":326,"line":17628},92,[324,17630,2917],{"class":867},[324,17632,17634],{"class":326,"line":17633},93,[324,17635,17552],{"class":863},[324,17637,17639],{"class":326,"line":17638},94,[324,17640,2760],{"class":867},[324,17642,17644,17646,17648,17650,17652],{"class":326,"line":17643},95,[324,17645,4180],{"class":867},[324,17647,1908],{"class":863},[324,17649,17567],{"class":738},[324,17651,1908],{"class":863},[324,17653,1930],{"class":867},[324,17655,17657],{"class":326,"line":17656},96,[324,17658,2917],{"class":867},[324,17660,17662],{"class":326,"line":17661},97,[324,17663,2296],{"class":867},[192,17665,17666],{"start":203},[195,17667,17668],{},[116,17669,17670],{},"练习案例2：点和圆的关系",[1871,17672,17673],{},[195,17674,17675],{},"设计一个圆形类（Circle），和一个点类（Point），计算点和圆的关系。",[316,17677,17679],{"className":854,"code":17678,"language":856,"meta":50,"style":50},"#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",[269,17680,17681,17687,17697,17704,17711,17715,17719,17724,17758,17763,17779,17793,17797,17801,17808,17815,17819,17825,17829,17833,17837,17859,17882,17887,17901,17916,17920,17924,17930,17935,17940,17944,17970,17974,18004,18032,18060,18077,18081,18094,18098,18102,18106,18119,18123,18127,18135,18139,18143,18147,18152,18156,18167,18174,18183,18193,18204,18211,18224,18235,18245,18256,18263,18277,18282,18292,18300],{"__ignoreMap":50},[324,17682,17683,17685],{"class":326,"line":327},[324,17684,2680],{"class":863},[324,17686,2683],{"class":738},[324,17688,17689,17691,17693,17695],{"class":326,"line":203},[324,17690,2688],{"class":863},[324,17692,2691],{"class":863},[324,17694,2694],{"class":734},[324,17696,2025],{"class":867},[324,17698,17699,17701],{"class":326,"line":338},[324,17700,2680],{"class":863},[324,17702,17703],{"class":738},"\u003Ccmath>\n",[324,17705,17706,17708],{"class":326,"line":344},[324,17707,15423],{"class":863},[324,17709,17710],{"class":734}," Point\n",[324,17712,17713],{"class":326,"line":484},[324,17714,2277],{"class":867},[324,17716,17717],{"class":326,"line":491},[324,17718,15445],{"class":863},[324,17720,17721],{"class":326,"line":496},[324,17722,17723],{"class":772},"    \u002F\u002F赋值\n",[324,17725,17726,17728,17731,17733,17735,17738,17740,17742,17745,17748,17750,17753,17755],{"class":326,"line":502},[324,17727,15638],{"class":863},[324,17729,17730],{"class":734}," setPoint",[324,17732,868],{"class":867},[324,17734,14766],{"class":863},[324,17736,17737],{"class":5945}," x",[324,17739,13164],{"class":867},[324,17741,14766],{"class":863},[324,17743,17744],{"class":5945}," y",[324,17746,17747],{"class":867},") { m_x ",[324,17749,913],{"class":863},[324,17751,17752],{"class":867}," x; m_y ",[324,17754,913],{"class":863},[324,17756,17757],{"class":867}," y; }\n",[324,17759,17760],{"class":326,"line":508},[324,17761,17762],{"class":772},"    \u002F\u002F获取坐标\n",[324,17764,17765,17767,17770,17773,17776],{"class":326,"line":514},[324,17766,15467],{"class":863},[324,17768,17769],{"class":734}," getX",[324,17771,17772],{"class":867},"() { ",[324,17774,17775],{"class":863},"return",[324,17777,17778],{"class":867}," m_x; }\n",[324,17780,17781,17783,17786,17788,17790],{"class":326,"line":2343},[324,17782,15467],{"class":863},[324,17784,17785],{"class":734}," getY",[324,17787,17772],{"class":867},[324,17789,17775],{"class":863},[324,17791,17792],{"class":867}," m_y; }\n",[324,17794,17795],{"class":326,"line":2348},[324,17796,488],{"emptyLinePlaceholder":487},[324,17798,17799],{"class":326,"line":2354},[324,17800,15951],{"class":863},[324,17802,17803,17805],{"class":326,"line":2359},[324,17804,15467],{"class":863},[324,17806,17807],{"class":867}," m_x;\n",[324,17809,17810,17812],{"class":326,"line":2373},[324,17811,15467],{"class":863},[324,17813,17814],{"class":867}," m_y;\n",[324,17816,17817],{"class":326,"line":2378},[324,17818,4724],{"class":867},[324,17820,17821,17823],{"class":326,"line":2384},[324,17822,15423],{"class":863},[324,17824,15426],{"class":734},[324,17826,17827],{"class":326,"line":2405},[324,17828,2277],{"class":867},[324,17830,17831],{"class":326,"line":2410},[324,17832,15445],{"class":863},[324,17834,17835],{"class":326,"line":2424},[324,17836,17723],{"class":772},[324,17838,17839,17841,17844,17846,17848,17851,17854,17856],{"class":326,"line":2429},[324,17840,15638],{"class":863},[324,17842,17843],{"class":734}," setRadius",[324,17845,868],{"class":867},[324,17847,14766],{"class":863},[324,17849,17850],{"class":5945}," r",[324,17852,17853],{"class":867},") { m_r ",[324,17855,913],{"class":863},[324,17857,17858],{"class":867}," r; }\n",[324,17860,17861,17863,17866,17868,17871,17874,17877,17879],{"class":326,"line":2458},[324,17862,15638],{"class":863},[324,17864,17865],{"class":734}," setCenter",[324,17867,868],{"class":867},[324,17869,17870],{"class":734},"Point",[324,17872,17873],{"class":5945}," center",[324,17875,17876],{"class":867},") { m_center ",[324,17878,913],{"class":863},[324,17880,17881],{"class":867}," center; }\n",[324,17883,17884],{"class":326,"line":2463},[324,17885,17886],{"class":772},"    \u002F\u002F获取属性\n",[324,17888,17889,17891,17894,17896,17898],{"class":326,"line":2480},[324,17890,15467],{"class":863},[324,17892,17893],{"class":734}," getRadius",[324,17895,17772],{"class":867},[324,17897,17775],{"class":863},[324,17899,17900],{"class":867}," m_r; }\n",[324,17902,17903,17906,17909,17911,17913],{"class":326,"line":2485},[324,17904,17905],{"class":734},"    Point",[324,17907,17908],{"class":734}," getCenter",[324,17910,17772],{"class":867},[324,17912,17775],{"class":863},[324,17914,17915],{"class":867}," m_center; }\n",[324,17917,17918],{"class":326,"line":2490},[324,17919,488],{"emptyLinePlaceholder":487},[324,17921,17922],{"class":326,"line":2495},[324,17923,15951],{"class":863},[324,17925,17926,17928],{"class":326,"line":2509},[324,17927,15467],{"class":863},[324,17929,15457],{"class":867},[324,17931,17932],{"class":326,"line":2514},[324,17933,17934],{"class":772},"    \u002F\u002F在类中可以让另一个类作为本来的成员\n",[324,17936,17937],{"class":326,"line":3306},[324,17938,17939],{"class":867},"    Point m_center;\n",[324,17941,17942],{"class":326,"line":3320},[324,17943,4724],{"class":867},[324,17945,17946,17948,17951,17953,17956,17958,17960,17962,17964,17966,17968],{"class":326,"line":3328},[324,17947,6093],{"class":863},[324,17949,17950],{"class":734}," isInCircle",[324,17952,868],{"class":867},[324,17954,17955],{"class":734},"Circle",[324,17957,11313],{"class":863},[324,17959,1152],{"class":5945},[324,17961,1242],{"class":867},[324,17963,17870],{"class":734},[324,17965,11313],{"class":863},[324,17967,19],{"class":5945},[324,17969,874],{"class":867},[324,17971,17972],{"class":326,"line":3333},[324,17973,2277],{"class":867},[324,17975,17976,17978,17981,17983,17985,17988,17991,17994,17996,17998,18000,18002],{"class":326,"line":3339},[324,17977,15467],{"class":863},[324,17979,17980],{"class":867}," dx ",[324,17982,913],{"class":863},[324,17984,17071],{"class":867},[324,17986,17987],{"class":734},"getCenter",[324,17989,17990],{"class":867},"().",[324,17992,17993],{"class":734},"getX",[324,17995,13779],{"class":867},[324,17997,1396],{"class":863},[324,17999,16617],{"class":867},[324,18001,17993],{"class":734},[324,18003,6365],{"class":867},[324,18005,18006,18008,18011,18013,18015,18017,18019,18022,18024,18026,18028,18030],{"class":326,"line":3345},[324,18007,15467],{"class":863},[324,18009,18010],{"class":867}," dy ",[324,18012,913],{"class":863},[324,18014,17071],{"class":867},[324,18016,17987],{"class":734},[324,18018,17990],{"class":867},[324,18020,18021],{"class":734},"getY",[324,18023,13779],{"class":867},[324,18025,1396],{"class":863},[324,18027,16617],{"class":867},[324,18029,18021],{"class":734},[324,18031,6365],{"class":867},[324,18033,18034,18036,18039,18041,18044,18047,18049,18051,18053,18055,18057],{"class":326,"line":3350},[324,18035,15467],{"class":863},[324,18037,18038],{"class":867}," distance ",[324,18040,913],{"class":863},[324,18042,18043],{"class":734}," sqrt",[324,18045,18046],{"class":867},"(dx ",[324,18048,1319],{"class":863},[324,18050,17980],{"class":867},[324,18052,1345],{"class":863},[324,18054,18010],{"class":867},[324,18056,1319],{"class":863},[324,18058,18059],{"class":867}," dy);\n",[324,18061,18062,18064,18067,18069,18071,18074],{"class":326,"line":8677},[324,18063,3830],{"class":863},[324,18065,18066],{"class":867}," (distance ",[324,18068,1774],{"class":863},[324,18070,17071],{"class":867},[324,18072,18073],{"class":734},"getRadius",[324,18075,18076],{"class":867},"())\n",[324,18078,18079],{"class":326,"line":8701},[324,18080,2760],{"class":867},[324,18082,18083,18085,18087,18090,18092],{"class":326,"line":8706},[324,18084,10398],{"class":867},[324,18086,1908],{"class":863},[324,18088,18089],{"class":738}," \"点在圆内\"",[324,18091,2176],{"class":863},[324,18093,9569],{"class":867},[324,18095,18096],{"class":326,"line":8712},[324,18097,2917],{"class":867},[324,18099,18100],{"class":326,"line":8739},[324,18101,17552],{"class":863},[324,18103,18104],{"class":326,"line":8744},[324,18105,2760],{"class":867},[324,18107,18108,18110,18112,18115,18117],{"class":326,"line":8750},[324,18109,10398],{"class":867},[324,18111,1908],{"class":863},[324,18113,18114],{"class":738}," \"点在圆外\"",[324,18116,2176],{"class":863},[324,18118,9569],{"class":867},[324,18120,18121],{"class":326,"line":8762},[324,18122,2917],{"class":867},[324,18124,18125],{"class":326,"line":8774},[324,18126,2296],{"class":867},[324,18128,18129,18131,18133],{"class":326,"line":8786},[324,18130,871],{"class":863},[324,18132,2703],{"class":734},[324,18134,2706],{"class":867},[324,18136,18137],{"class":326,"line":10445},[324,18138,2277],{"class":867},[324,18140,18141],{"class":326,"line":10470},[324,18142,15782],{"class":772},[324,18144,18145],{"class":326,"line":10493},[324,18146,15529],{"class":867},[324,18148,18149],{"class":326,"line":10517},[324,18150,18151],{"class":867},"    Point p1;\n",[324,18153,18154],{"class":326,"line":10522},[324,18155,17723],{"class":772},[324,18157,18158,18160,18162,18165],{"class":326,"line":10527},[324,18159,2282],{"class":867},[324,18161,1908],{"class":863},[324,18163,18164],{"class":738},"\"请输入圆的半径：\"",[324,18166,2025],{"class":867},[324,18168,18169,18171],{"class":326,"line":10532},[324,18170,15467],{"class":863},[324,18172,18173],{"class":867}," r;\n",[324,18175,18176,18178,18180],{"class":326,"line":10541},[324,18177,2742],{"class":867},[324,18179,2161],{"class":863},[324,18181,18182],{"class":867},"r;\n",[324,18184,18185,18187,18190],{"class":326,"line":10546},[324,18186,17324],{"class":867},[324,18188,18189],{"class":734},"setRadius",[324,18191,18192],{"class":867},"(r);\n",[324,18194,18195,18197,18199,18202],{"class":326,"line":10552},[324,18196,2282],{"class":867},[324,18198,1908],{"class":863},[324,18200,18201],{"class":738},"\"请输入圆心坐标：\"",[324,18203,2025],{"class":867},[324,18205,18206,18208],{"class":326,"line":10573},[324,18207,15467],{"class":863},[324,18209,18210],{"class":867}," x, y;\n",[324,18212,18213,18215,18217,18219,18221],{"class":326,"line":10579},[324,18214,2742],{"class":867},[324,18216,2161],{"class":863},[324,18218,1684],{"class":867},[324,18220,2161],{"class":863},[324,18222,18223],{"class":867},"y;\n",[324,18225,18226,18229,18232],{"class":326,"line":10593},[324,18227,18228],{"class":867},"    p1.",[324,18230,18231],{"class":734},"setPoint",[324,18233,18234],{"class":867},"(x, y);\n",[324,18236,18237,18239,18242],{"class":326,"line":10599},[324,18238,17324],{"class":867},[324,18240,18241],{"class":734},"setCenter",[324,18243,18244],{"class":867},"(p1);\n",[324,18246,18247,18249,18251,18254],{"class":326,"line":10626},[324,18248,2282],{"class":867},[324,18250,1908],{"class":863},[324,18252,18253],{"class":738},"\"请输入测试点坐标：\"",[324,18255,2025],{"class":867},[324,18257,18258,18260],{"class":326,"line":10635},[324,18259,15467],{"class":863},[324,18261,18262],{"class":867}," x1, y1;\n",[324,18264,18265,18267,18269,18272,18274],{"class":326,"line":10641},[324,18266,2742],{"class":867},[324,18268,2161],{"class":863},[324,18270,18271],{"class":867},"x1",[324,18273,2161],{"class":863},[324,18275,18276],{"class":867},"y1;\n",[324,18278,18279],{"class":326,"line":10649},[324,18280,18281],{"class":867},"    Point p2;\n",[324,18283,18284,18287,18289],{"class":326,"line":10654},[324,18285,18286],{"class":867},"    p2.",[324,18288,18231],{"class":734},[324,18290,18291],{"class":867},"(x1, y1);\n",[324,18293,18294,18297],{"class":326,"line":17333},[324,18295,18296],{"class":734},"    isInCircle",[324,18298,18299],{"class":867},"(c1, p2);\n",[324,18301,18302],{"class":326,"line":17339},[324,18303,2296],{"class":867},[19,18305,18306],{},"在类中可以让另一个类作为本来的成员",[19,18308,18309],{},"这个案例非常重要的一点在于类和对象封装成一个单独文件",[19,18311,18312],{},"创建point.h",[316,18314,18316],{"className":854,"code":18315,"language":856,"meta":50,"style":50},"#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",[269,18317,18318,18329,18335,18345,18351,18355,18360,18364,18368,18388,18392,18400,18408,18412,18416,18422,18428],{"__ignoreMap":50},[324,18319,18320,18323,18326],{"class":326,"line":327},[324,18321,18322],{"class":863},"#pragma",[324,18324,18325],{"class":734}," once",[324,18327,18328],{"class":772}," \u002F\u002F防止头文件重复包含\n",[324,18330,18331,18333],{"class":326,"line":203},[324,18332,2680],{"class":863},[324,18334,2683],{"class":738},[324,18336,18337,18339,18341,18343],{"class":326,"line":338},[324,18338,2688],{"class":863},[324,18340,2691],{"class":863},[324,18342,2694],{"class":734},[324,18344,2025],{"class":867},[324,18346,18347,18349],{"class":326,"line":344},[324,18348,15423],{"class":863},[324,18350,17710],{"class":734},[324,18352,18353],{"class":326,"line":484},[324,18354,2277],{"class":867},[324,18356,18357],{"class":326,"line":491},[324,18358,18359],{"class":772},"\u002F\u002F做好声明与变量定义就可以\n",[324,18361,18362],{"class":326,"line":496},[324,18363,15445],{"class":863},[324,18365,18366],{"class":326,"line":502},[324,18367,17723],{"class":772},[324,18369,18370,18372,18374,18376,18378,18380,18382,18384,18386],{"class":326,"line":508},[324,18371,15638],{"class":863},[324,18373,17730],{"class":734},[324,18375,868],{"class":867},[324,18377,14766],{"class":863},[324,18379,17737],{"class":5945},[324,18381,13164],{"class":867},[324,18383,14766],{"class":863},[324,18385,17744],{"class":5945},[324,18387,3448],{"class":867},[324,18389,18390],{"class":326,"line":514},[324,18391,17762],{"class":772},[324,18393,18394,18396,18398],{"class":326,"line":2343},[324,18395,15467],{"class":863},[324,18397,17769],{"class":734},[324,18399,6365],{"class":867},[324,18401,18402,18404,18406],{"class":326,"line":2348},[324,18403,15467],{"class":863},[324,18405,17785],{"class":734},[324,18407,6365],{"class":867},[324,18409,18410],{"class":326,"line":2354},[324,18411,488],{"emptyLinePlaceholder":487},[324,18413,18414],{"class":326,"line":2359},[324,18415,15951],{"class":863},[324,18417,18418,18420],{"class":326,"line":2373},[324,18419,15467],{"class":863},[324,18421,17807],{"class":867},[324,18423,18424,18426],{"class":326,"line":2378},[324,18425,15467],{"class":863},[324,18427,17814],{"class":867},[324,18429,18430],{"class":326,"line":2384},[324,18431,4724],{"class":867},[19,18433,18434],{},"创建point.cpp",[316,18436,18438],{"className":854,"code":18437,"language":856,"meta":50,"style":50},"#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",[269,18439,18440,18447,18452,18486,18490,18506],{"__ignoreMap":50},[324,18441,18442,18444],{"class":326,"line":327},[324,18443,2680],{"class":863},[324,18445,18446],{"class":738},"\u003Cpoint.h>\n",[324,18448,18449],{"class":326,"line":203},[324,18450,18451],{"class":772},"\u002F\u002F此时如果不给予他作用域就会报错，所以要加Point::\n",[324,18453,18454,18456,18459,18462,18464,18466,18468,18470,18472,18474,18476,18478,18480,18482,18484],{"class":326,"line":338},[324,18455,15638],{"class":863},[324,18457,18458],{"class":734}," Point",[324,18460,18461],{"class":867},"::",[324,18463,18231],{"class":734},[324,18465,868],{"class":867},[324,18467,14766],{"class":863},[324,18469,17737],{"class":5945},[324,18471,13164],{"class":867},[324,18473,14766],{"class":863},[324,18475,17744],{"class":5945},[324,18477,17747],{"class":867},[324,18479,913],{"class":863},[324,18481,17752],{"class":867},[324,18483,913],{"class":863},[324,18485,17757],{"class":867},[324,18487,18488],{"class":326,"line":344},[324,18489,17762],{"class":772},[324,18491,18492,18494,18496,18498,18500,18502,18504],{"class":326,"line":484},[324,18493,15467],{"class":863},[324,18495,18458],{"class":734},[324,18497,18461],{"class":867},[324,18499,17993],{"class":734},[324,18501,17772],{"class":867},[324,18503,17775],{"class":863},[324,18505,17778],{"class":867},[324,18507,18508,18510,18512,18514,18516,18518,18520],{"class":326,"line":491},[324,18509,15467],{"class":863},[324,18511,18458],{"class":734},[324,18513,18461],{"class":867},[324,18515,18021],{"class":734},[324,18517,17772],{"class":867},[324,18519,17775],{"class":863},[324,18521,17792],{"class":867},[19,18523,18524],{},"创建circle.h",[316,18526,18528],{"className":854,"code":18527,"language":856,"meta":50,"style":50},"#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",[269,18529,18530,18537,18543,18553,18559,18565,18569,18573,18577,18591,18605,18609,18617,18625,18629,18633,18639,18643,18647],{"__ignoreMap":50},[324,18531,18532,18534],{"class":326,"line":327},[324,18533,18322],{"class":863},[324,18535,18536],{"class":734}," once\n",[324,18538,18539,18541],{"class":326,"line":203},[324,18540,2680],{"class":863},[324,18542,2683],{"class":738},[324,18544,18545,18547,18549,18551],{"class":326,"line":338},[324,18546,2688],{"class":863},[324,18548,2691],{"class":863},[324,18550,2694],{"class":734},[324,18552,2025],{"class":867},[324,18554,18555,18557],{"class":326,"line":344},[324,18556,2680],{"class":863},[324,18558,18446],{"class":738},[324,18560,18561,18563],{"class":326,"line":484},[324,18562,15423],{"class":863},[324,18564,15426],{"class":734},[324,18566,18567],{"class":326,"line":491},[324,18568,2277],{"class":867},[324,18570,18571],{"class":326,"line":496},[324,18572,15445],{"class":863},[324,18574,18575],{"class":326,"line":502},[324,18576,17723],{"class":772},[324,18578,18579,18581,18583,18585,18587,18589],{"class":326,"line":508},[324,18580,15638],{"class":863},[324,18582,17843],{"class":734},[324,18584,868],{"class":867},[324,18586,14766],{"class":863},[324,18588,17850],{"class":5945},[324,18590,3448],{"class":867},[324,18592,18593,18595,18597,18599,18601,18603],{"class":326,"line":514},[324,18594,15638],{"class":863},[324,18596,17865],{"class":734},[324,18598,868],{"class":867},[324,18600,17870],{"class":734},[324,18602,17873],{"class":5945},[324,18604,3448],{"class":867},[324,18606,18607],{"class":326,"line":2343},[324,18608,17886],{"class":772},[324,18610,18611,18613,18615],{"class":326,"line":2348},[324,18612,15467],{"class":863},[324,18614,17893],{"class":734},[324,18616,6365],{"class":867},[324,18618,18619,18621,18623],{"class":326,"line":2354},[324,18620,17905],{"class":734},[324,18622,17908],{"class":734},[324,18624,6365],{"class":867},[324,18626,18627],{"class":326,"line":2359},[324,18628,488],{"emptyLinePlaceholder":487},[324,18630,18631],{"class":326,"line":2373},[324,18632,15951],{"class":863},[324,18634,18635,18637],{"class":326,"line":2378},[324,18636,15467],{"class":863},[324,18638,15457],{"class":867},[324,18640,18641],{"class":326,"line":2384},[324,18642,17934],{"class":772},[324,18644,18645],{"class":326,"line":2405},[324,18646,17939],{"class":867},[324,18648,18649],{"class":326,"line":2410},[324,18650,4724],{"class":867},[19,18652,18653],{},"创建circle.cpp",[316,18655,18657],{"className":854,"code":18656,"language":856,"meta":50,"style":50},"#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",[269,18658,18659,18666,18689,18711,18716,18732],{"__ignoreMap":50},[324,18660,18661,18663],{"class":326,"line":327},[324,18662,2680],{"class":863},[324,18664,18665],{"class":738},"\u003Ccircle.h>\n",[324,18667,18668,18670,18673,18675,18677,18679,18681,18683,18685,18687],{"class":326,"line":203},[324,18669,6093],{"class":863},[324,18671,18672],{"class":734}," Circle",[324,18674,18461],{"class":867},[324,18676,18189],{"class":734},[324,18678,868],{"class":867},[324,18680,14766],{"class":863},[324,18682,17850],{"class":5945},[324,18684,17853],{"class":867},[324,18686,913],{"class":863},[324,18688,17858],{"class":867},[324,18690,18691,18693,18695,18697,18699,18701,18703,18705,18707,18709],{"class":326,"line":338},[324,18692,6093],{"class":863},[324,18694,18672],{"class":734},[324,18696,18461],{"class":867},[324,18698,18241],{"class":734},[324,18700,868],{"class":867},[324,18702,17870],{"class":734},[324,18704,17873],{"class":5945},[324,18706,17876],{"class":867},[324,18708,913],{"class":863},[324,18710,17881],{"class":867},[324,18712,18713],{"class":326,"line":344},[324,18714,18715],{"class":772},"\u002F\u002F获取属性\n",[324,18717,18718,18720,18722,18724,18726,18728,18730],{"class":326,"line":484},[324,18719,14766],{"class":863},[324,18721,18672],{"class":734},[324,18723,18461],{"class":867},[324,18725,18073],{"class":734},[324,18727,17772],{"class":867},[324,18729,17775],{"class":863},[324,18731,17900],{"class":867},[324,18733,18734,18736,18738,18740,18742,18744,18746],{"class":326,"line":491},[324,18735,17870],{"class":734},[324,18737,18672],{"class":734},[324,18739,18461],{"class":867},[324,18741,17987],{"class":734},[324,18743,17772],{"class":867},[324,18745,17775],{"class":863},[324,18747,17915],{"class":867},[19,18749,18750],{},"使用封装的类",[316,18752,18754],{"className":854,"code":18753,"language":856,"meta":50,"style":50},"#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",[269,18755,18756,18762,18772,18778,18784,18808,18812,18838,18864,18888,18902,18906,18918,18922,18926,18930,18942,18946,18950,18958,18962,18966,18970,18974,18978,18988,18994,19002,19010,19020,19026,19038,19046,19054,19064,19070,19082,19086,19094,19100],{"__ignoreMap":50},[324,18757,18758,18760],{"class":326,"line":327},[324,18759,2680],{"class":863},[324,18761,2683],{"class":738},[324,18763,18764,18766,18768,18770],{"class":326,"line":203},[324,18765,2688],{"class":863},[324,18767,2691],{"class":863},[324,18769,2694],{"class":734},[324,18771,2025],{"class":867},[324,18773,18774,18776],{"class":326,"line":338},[324,18775,2680],{"class":863},[324,18777,18665],{"class":738},[324,18779,18780,18782],{"class":326,"line":344},[324,18781,2680],{"class":863},[324,18783,18446],{"class":738},[324,18785,18786,18788,18790,18792,18794,18796,18798,18800,18802,18804,18806],{"class":326,"line":484},[324,18787,6093],{"class":863},[324,18789,17950],{"class":734},[324,18791,868],{"class":867},[324,18793,17955],{"class":734},[324,18795,11313],{"class":863},[324,18797,1152],{"class":5945},[324,18799,1242],{"class":867},[324,18801,17870],{"class":734},[324,18803,11313],{"class":863},[324,18805,19],{"class":5945},[324,18807,874],{"class":867},[324,18809,18810],{"class":326,"line":491},[324,18811,2277],{"class":867},[324,18813,18814,18816,18818,18820,18822,18824,18826,18828,18830,18832,18834,18836],{"class":326,"line":496},[324,18815,15467],{"class":863},[324,18817,17980],{"class":867},[324,18819,913],{"class":863},[324,18821,17071],{"class":867},[324,18823,17987],{"class":734},[324,18825,17990],{"class":867},[324,18827,17993],{"class":734},[324,18829,13779],{"class":867},[324,18831,1396],{"class":863},[324,18833,16617],{"class":867},[324,18835,17993],{"class":734},[324,18837,6365],{"class":867},[324,18839,18840,18842,18844,18846,18848,18850,18852,18854,18856,18858,18860,18862],{"class":326,"line":502},[324,18841,15467],{"class":863},[324,18843,18010],{"class":867},[324,18845,913],{"class":863},[324,18847,17071],{"class":867},[324,18849,17987],{"class":734},[324,18851,17990],{"class":867},[324,18853,18021],{"class":734},[324,18855,13779],{"class":867},[324,18857,1396],{"class":863},[324,18859,16617],{"class":867},[324,18861,18021],{"class":734},[324,18863,6365],{"class":867},[324,18865,18866,18868,18870,18872,18874,18876,18878,18880,18882,18884,18886],{"class":326,"line":508},[324,18867,15467],{"class":863},[324,18869,18038],{"class":867},[324,18871,913],{"class":863},[324,18873,18043],{"class":734},[324,18875,18046],{"class":867},[324,18877,1319],{"class":863},[324,18879,17980],{"class":867},[324,18881,1345],{"class":863},[324,18883,18010],{"class":867},[324,18885,1319],{"class":863},[324,18887,18059],{"class":867},[324,18889,18890,18892,18894,18896,18898,18900],{"class":326,"line":514},[324,18891,3830],{"class":863},[324,18893,18066],{"class":867},[324,18895,1774],{"class":863},[324,18897,17071],{"class":867},[324,18899,18073],{"class":734},[324,18901,18076],{"class":867},[324,18903,18904],{"class":326,"line":2343},[324,18905,2760],{"class":867},[324,18907,18908,18910,18912,18914,18916],{"class":326,"line":2348},[324,18909,10398],{"class":867},[324,18911,1908],{"class":863},[324,18913,18089],{"class":738},[324,18915,2176],{"class":863},[324,18917,9569],{"class":867},[324,18919,18920],{"class":326,"line":2354},[324,18921,2917],{"class":867},[324,18923,18924],{"class":326,"line":2359},[324,18925,17552],{"class":863},[324,18927,18928],{"class":326,"line":2373},[324,18929,2760],{"class":867},[324,18931,18932,18934,18936,18938,18940],{"class":326,"line":2378},[324,18933,10398],{"class":867},[324,18935,1908],{"class":863},[324,18937,18114],{"class":738},[324,18939,2176],{"class":863},[324,18941,9569],{"class":867},[324,18943,18944],{"class":326,"line":2384},[324,18945,2917],{"class":867},[324,18947,18948],{"class":326,"line":2405},[324,18949,2296],{"class":867},[324,18951,18952,18954,18956],{"class":326,"line":2410},[324,18953,871],{"class":863},[324,18955,2703],{"class":734},[324,18957,2706],{"class":867},[324,18959,18960],{"class":326,"line":2424},[324,18961,2277],{"class":867},[324,18963,18964],{"class":326,"line":2429},[324,18965,15782],{"class":772},[324,18967,18968],{"class":326,"line":2458},[324,18969,15529],{"class":867},[324,18971,18972],{"class":326,"line":2463},[324,18973,18151],{"class":867},[324,18975,18976],{"class":326,"line":2480},[324,18977,17723],{"class":772},[324,18979,18980,18982,18984,18986],{"class":326,"line":2485},[324,18981,2282],{"class":867},[324,18983,1908],{"class":863},[324,18985,18164],{"class":738},[324,18987,2025],{"class":867},[324,18989,18990,18992],{"class":326,"line":2490},[324,18991,15467],{"class":863},[324,18993,18173],{"class":867},[324,18995,18996,18998,19000],{"class":326,"line":2495},[324,18997,2742],{"class":867},[324,18999,2161],{"class":863},[324,19001,18182],{"class":867},[324,19003,19004,19006,19008],{"class":326,"line":2509},[324,19005,17324],{"class":867},[324,19007,18189],{"class":734},[324,19009,18192],{"class":867},[324,19011,19012,19014,19016,19018],{"class":326,"line":2514},[324,19013,2282],{"class":867},[324,19015,1908],{"class":863},[324,19017,18201],{"class":738},[324,19019,2025],{"class":867},[324,19021,19022,19024],{"class":326,"line":3306},[324,19023,15467],{"class":863},[324,19025,18210],{"class":867},[324,19027,19028,19030,19032,19034,19036],{"class":326,"line":3320},[324,19029,2742],{"class":867},[324,19031,2161],{"class":863},[324,19033,1684],{"class":867},[324,19035,2161],{"class":863},[324,19037,18223],{"class":867},[324,19039,19040,19042,19044],{"class":326,"line":3328},[324,19041,18228],{"class":867},[324,19043,18231],{"class":734},[324,19045,18234],{"class":867},[324,19047,19048,19050,19052],{"class":326,"line":3333},[324,19049,17324],{"class":867},[324,19051,18241],{"class":734},[324,19053,18244],{"class":867},[324,19055,19056,19058,19060,19062],{"class":326,"line":3339},[324,19057,2282],{"class":867},[324,19059,1908],{"class":863},[324,19061,18253],{"class":738},[324,19063,2025],{"class":867},[324,19065,19066,19068],{"class":326,"line":3345},[324,19067,15467],{"class":863},[324,19069,18262],{"class":867},[324,19071,19072,19074,19076,19078,19080],{"class":326,"line":3350},[324,19073,2742],{"class":867},[324,19075,2161],{"class":863},[324,19077,18271],{"class":867},[324,19079,2161],{"class":863},[324,19081,18276],{"class":867},[324,19083,19084],{"class":326,"line":8677},[324,19085,18281],{"class":867},[324,19087,19088,19090,19092],{"class":326,"line":8701},[324,19089,18286],{"class":867},[324,19091,18231],{"class":734},[324,19093,18291],{"class":867},[324,19095,19096,19098],{"class":326,"line":8706},[324,19097,18296],{"class":734},[324,19099,18299],{"class":867},[324,19101,19102],{"class":326,"line":8712},[324,19103,2296],{"class":867},[14,19105,19107],{"id":19106},"_82对象的初始化清理","8.2对象的初始化清理",[1871,19109,19110,19113],{},[195,19111,19112],{},"生活中我们买的电子产品都基本会有出厂设置，在某一天我们不用时候也会删除一些自己信息数据保证安全",[195,19114,19115],{},"C++中的面向对象来源于生活，每个对象也都会有初始设置以及 对象销毁前的清理数据的设置。",[35,19117,19119],{"id":19118},"_821构造函数和析构函数","8.2.1构造函数和析构函数",[19,19121,19122,19123,19126],{},"对象的",[116,19124,19125],{},"初始化和清理","也是两个非常重要的安全问题",[19,19128,19129],{},"​\t一个对象或者变量没有初始状态，对其使用后果是未知",[19,19131,19132],{},"​\t同样的使用完一个对象或变量，没有及时清理，也会造成一定的安全问题",[19,19134,19135,19136,19139,19140,19143],{},"c++利用了",[116,19137,19138],{},"构造函数","和",[116,19141,19142],{},"析构函数","解决上述问题，这两个函数将会被编译器自动调用，完成对象初始化和清理工作。",[19,19145,19146,19147],{},"对象的初始化和清理工作是编译器强制要我们做的事情，因此如果",[116,19148,19149],{},"我们不提供构造和析构，编译器会提供",[19,19151,19152],{},[116,19153,19154],{},"编译器提供的构造函数和析构函数是空实现。",[1871,19156,19157,19160],{},[195,19158,19159],{},"构造函数：主要作用在于创建对象时为对象的成员属性赋值，构造函数由编译器自动调用，无须手动调用。",[195,19161,19162,19163,19166],{},"析构函数：主要作用在于对象",[116,19164,19165],{},"销毁前","系统自动调用，执行一些清理工作。",[19,19168,19169,19172],{},[116,19170,19171],{},"构造函数语法：",[269,19173,19174],{},"类名(){}",[192,19176,19177,19180,19183,19186,19189],{},[195,19178,19179],{},"构造函数，没有返回值也不写void",[195,19181,19182],{},"函数名称与类名相同",[195,19184,19185],{},"构造函数可以有参数，因此可以发生重载",[195,19187,19188],{},"程序在调用对象时候会自动调用构造，无须手动调用,而且只会调用一次",[195,19190,19191,19192,1293],{},"构造函数在程序运行时会自动调用，如果自己定义的话就用自己；否则就用编译器给我们生成的(例如",[269,19193,19194],{},"Person(){}",[19,19196,19197,14524,19200],{},[116,19198,19199],{},"析构函数语法：",[269,19201,19202],{},"~类名(){}",[192,19204,19205,19208,19211,19217],{},[195,19206,19207],{},"析构函数，没有返回值也不写void",[195,19209,19210],{},"函数名称与类名相同,在名称前加上符号  ~",[195,19212,19213,19214],{},"析构函数不可以有参数，因此",[116,19215,19216],{},"不可以发生重载",[195,19218,19219],{},"程序在对象销毁前会自动调用析构，无须手动调用,而且只会调用一次",[316,19221,19223],{"className":854,"code":19222,"language":856,"meta":50,"style":50},"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",[269,19224,19225,19231,19235,19239,19244,19251,19255,19268,19272,19277,19284,19288,19301,19305,19309,19313,19317,19325,19329,19337,19341,19345,19353,19357,19362,19366,19373,19377,19390,19394,19402],{"__ignoreMap":50},[324,19226,19227,19229],{"class":326,"line":327},[324,19228,15423],{"class":863},[324,19230,15900],{"class":734},[324,19232,19233],{"class":326,"line":203},[324,19234,2277],{"class":867},[324,19236,19237],{"class":326,"line":338},[324,19238,15445],{"class":863},[324,19240,19241],{"class":326,"line":344},[324,19242,19243],{"class":772},"    \u002F\u002F构造函数\n",[324,19245,19246,19249],{"class":326,"line":484},[324,19247,19248],{"class":734},"    Person",[324,19250,2706],{"class":867},[324,19252,19253],{"class":326,"line":491},[324,19254,2760],{"class":867},[324,19256,19257,19259,19261,19264,19266],{"class":326,"line":496},[324,19258,10398],{"class":867},[324,19260,1908],{"class":863},[324,19262,19263],{"class":738}," \"Person的构造函数调用\"",[324,19265,2176],{"class":863},[324,19267,9569],{"class":867},[324,19269,19270],{"class":326,"line":502},[324,19271,2917],{"class":867},[324,19273,19274],{"class":326,"line":508},[324,19275,19276],{"class":772},"    \u002F\u002F析构函数\n",[324,19278,19279,19282],{"class":326,"line":514},[324,19280,19281],{"class":734},"    ~Person",[324,19283,2706],{"class":867},[324,19285,19286],{"class":326,"line":2343},[324,19287,2760],{"class":867},[324,19289,19290,19292,19294,19297,19299],{"class":326,"line":2348},[324,19291,10398],{"class":867},[324,19293,1908],{"class":863},[324,19295,19296],{"class":738}," \"Person的析构函数调用\"",[324,19298,2176],{"class":863},[324,19300,9569],{"class":867},[324,19302,19303],{"class":326,"line":2354},[324,19304,2917],{"class":867},[324,19306,19307],{"class":326,"line":2359},[324,19308,488],{"emptyLinePlaceholder":487},[324,19310,19311],{"class":326,"line":2373},[324,19312,4724],{"class":867},[324,19314,19315],{"class":326,"line":2378},[324,19316,488],{"emptyLinePlaceholder":487},[324,19318,19319,19321,19323],{"class":326,"line":2384},[324,19320,6093],{"class":863},[324,19322,6317],{"class":734},[324,19324,2706],{"class":867},[324,19326,19327],{"class":326,"line":2405},[324,19328,2277],{"class":867},[324,19330,19331,19334],{"class":326,"line":2410},[324,19332,19333],{"class":867},"    Person p;",[324,19335,19336],{"class":772},"\u002F\u002F在栈上的数据，test01执行完毕后，释放这个\n",[324,19338,19339],{"class":326,"line":2424},[324,19340,2296],{"class":867},[324,19342,19343],{"class":326,"line":2429},[324,19344,488],{"emptyLinePlaceholder":487},[324,19346,19347,19349,19351],{"class":326,"line":2458},[324,19348,871],{"class":863},[324,19350,2703],{"class":734},[324,19352,11582],{"class":867},[324,19354,19355],{"class":326,"line":2463},[324,19356,13939],{"class":867},[324,19358,19359],{"class":326,"line":2480},[324,19360,19361],{"class":772},"    \u002F\u002F test01();  调用这个会有构造和析构函数的调用\n",[324,19363,19364],{"class":326,"line":2485},[324,19365,488],{"emptyLinePlaceholder":487},[324,19367,19368,19370],{"class":326,"line":2490},[324,19369,19333],{"class":867},[324,19371,19372],{"class":772},"\u002F\u002F只有构造函数\n",[324,19374,19375],{"class":326,"line":2495},[324,19376,488],{"emptyLinePlaceholder":487},[324,19378,19379,19381,19383,19385,19387],{"class":326,"line":2509},[324,19380,3033],{"class":734},[324,19382,868],{"class":867},[324,19384,3038],{"class":738},[324,19386,6695],{"class":867},[324,19388,19389],{"class":772},"\u002F\u002F按键后程序才会结束，就会出现析构函数的调用，但是窗口很快就关了\n",[324,19391,19392],{"class":326,"line":2514},[324,19393,488],{"emptyLinePlaceholder":487},[324,19395,19396,19398,19400],{"class":326,"line":3306},[324,19397,4819],{"class":863},[324,19399,4822],{"class":916},[324,19401,2025],{"class":867},[324,19403,19404],{"class":326,"line":3320},[324,19405,2296],{"class":867},[19,19407,19408],{},"构造和析构都是必须有的实现，如果我们自己不提供，编译器会提供一个空实现的构造和析构",[35,19410,19412],{"id":19411},"_822构造函数的分类及调用","8.2.2构造函数的分类及调用",[19,19414,19415],{},"两种分类方式：",[19,19417,19418],{},"​\t按参数分为： 有参构造和无参构造",[19,19420,19421],{},"​\t按类型分为： 普通构造和拷贝构造",[19,19423,19424],{},"三种调用方式：",[19,19426,19427],{},"​\t括号法",[19,19429,19430],{},"​\t显示法",[19,19432,19433],{},"​\t隐式转换法",[316,19435,19437],{"className":854,"code":19436,"language":856,"meta":50,"style":50},"#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",[269,19438,19439,19445,19455,19460,19465,19470,19475,19479,19487,19491,19495,19499,19505,19509,19522,19526,19538,19542,19551,19564,19568,19572,19578,19582,19595,19599,19604,19620,19624,19629,19638,19651,19655,19661,19665,19670,19678,19682,19687,19691,19699,19703,19708,19713,19718,19723,19728,19732,19737,19742,19747,19752,19756,19761,19766,19782,19794,19799,19803,19808,19813,19818,19822,19827,19841,19854,19858,19866,19870,19876,19882,19890],{"__ignoreMap":50},[324,19440,19441,19443],{"class":326,"line":327},[324,19442,2680],{"class":863},[324,19444,2683],{"class":738},[324,19446,19447,19449,19451,19453],{"class":326,"line":203},[324,19448,2688],{"class":863},[324,19450,2691],{"class":863},[324,19452,2694],{"class":734},[324,19454,2025],{"class":867},[324,19456,19457],{"class":326,"line":338},[324,19458,19459],{"class":772},"\u002F\u002F1.构造函数的分类及调用\n",[324,19461,19462],{"class":326,"line":344},[324,19463,19464],{"class":772},"\u002F\u002F分类\n",[324,19466,19467],{"class":326,"line":484},[324,19468,19469],{"class":772},"\u002F\u002F  按照参数分类 无参数构造(默认构造)  有参构造\n",[324,19471,19472],{"class":326,"line":491},[324,19473,19474],{"class":772},"\u002F\u002F  按照类型分类 普通构造 拷贝构造\n",[324,19476,19477],{"class":326,"line":496},[324,19478,488],{"emptyLinePlaceholder":487},[324,19480,19481,19483,19485],{"class":326,"line":502},[324,19482,15423],{"class":863},[324,19484,16298],{"class":734},[324,19486,3403],{"class":867},[324,19488,19489],{"class":326,"line":508},[324,19490,2277],{"class":867},[324,19492,19493],{"class":326,"line":514},[324,19494,15445],{"class":863},[324,19496,19497],{"class":326,"line":2343},[324,19498,19243],{"class":772},[324,19500,19501,19503],{"class":326,"line":2348},[324,19502,19248],{"class":734},[324,19504,2706],{"class":867},[324,19506,19507],{"class":326,"line":2354},[324,19508,2760],{"class":867},[324,19510,19511,19513,19515,19518,19520],{"class":326,"line":2359},[324,19512,4180],{"class":867},[324,19514,1908],{"class":863},[324,19516,19517],{"class":738},"\"Person构造函数无参构造\"",[324,19519,1908],{"class":863},[324,19521,1930],{"class":867},[324,19523,19524],{"class":326,"line":2373},[324,19525,2917],{"class":867},[324,19527,19528,19530,19532,19534,19536],{"class":326,"line":2378},[324,19529,19248],{"class":734},[324,19531,868],{"class":867},[324,19533,871],{"class":863},[324,19535,2130],{"class":5945},[324,19537,874],{"class":867},[324,19539,19540],{"class":326,"line":2384},[324,19541,2760],{"class":867},[324,19543,19544,19547,19549],{"class":326,"line":2405},[324,19545,19546],{"class":867},"        age",[324,19548,913],{"class":863},[324,19550,6926],{"class":867},[324,19552,19553,19555,19557,19560,19562],{"class":326,"line":2410},[324,19554,4180],{"class":867},[324,19556,1908],{"class":863},[324,19558,19559],{"class":738},"\"Person构造函数有参构造\"",[324,19561,1908],{"class":863},[324,19563,1930],{"class":867},[324,19565,19566],{"class":326,"line":2424},[324,19567,2917],{"class":867},[324,19569,19570],{"class":326,"line":2429},[324,19571,19276],{"class":772},[324,19573,19574,19576],{"class":326,"line":2458},[324,19575,19281],{"class":734},[324,19577,2706],{"class":867},[324,19579,19580],{"class":326,"line":2463},[324,19581,2760],{"class":867},[324,19583,19584,19586,19588,19591,19593],{"class":326,"line":2480},[324,19585,4180],{"class":867},[324,19587,1908],{"class":863},[324,19589,19590],{"class":738},"\"Person析构函数被调用\"",[324,19592,1908],{"class":863},[324,19594,1930],{"class":867},[324,19596,19597],{"class":326,"line":2485},[324,19598,2917],{"class":867},[324,19600,19601],{"class":326,"line":2490},[324,19602,19603],{"class":772},"    \u002F\u002F拷贝构造函数\n",[324,19605,19606,19608,19610,19612,19614,19616,19618],{"class":326,"line":2495},[324,19607,19248],{"class":734},[324,19609,868],{"class":867},[324,19611,7521],{"class":863},[324,19613,16298],{"class":734},[324,19615,11313],{"class":863},[324,19617,19],{"class":5945},[324,19619,874],{"class":867},[324,19621,19622],{"class":326,"line":2509},[324,19623,2760],{"class":867},[324,19625,19626],{"class":326,"line":2514},[324,19627,19628],{"class":772},"        \u002F\u002F将传入对象的age赋值给当前对象的age\n",[324,19630,19631,19633,19635],{"class":326,"line":3306},[324,19632,19546],{"class":867},[324,19634,913],{"class":863},[324,19636,19637],{"class":867},"p.age;\n",[324,19639,19640,19642,19644,19647,19649],{"class":326,"line":3320},[324,19641,4180],{"class":867},[324,19643,1908],{"class":863},[324,19645,19646],{"class":738},"\"Person拷贝构造函数被调用\"",[324,19648,1908],{"class":863},[324,19650,1930],{"class":867},[324,19652,19653],{"class":326,"line":3328},[324,19654,2917],{"class":867},[324,19656,19657,19659],{"class":326,"line":3333},[324,19658,2715],{"class":863},[324,19660,8526],{"class":867},[324,19662,19663],{"class":326,"line":3339},[324,19664,4724],{"class":867},[324,19666,19667],{"class":326,"line":3345},[324,19668,19669],{"class":772},"\u002F\u002F调用\n",[324,19671,19672,19674,19676],{"class":326,"line":3350},[324,19673,6093],{"class":863},[324,19675,6317],{"class":734},[324,19677,2706],{"class":867},[324,19679,19680],{"class":326,"line":8677},[324,19681,2277],{"class":867},[324,19683,19684],{"class":326,"line":8701},[324,19685,19686],{"class":772},"    \u002F\u002F Person p1;\u002F\u002F默认构造函数调用\n",[324,19688,19689],{"class":326,"line":8706},[324,19690,2296],{"class":867},[324,19692,19693,19695,19697],{"class":326,"line":8712},[324,19694,6093],{"class":863},[324,19696,6386],{"class":734},[324,19698,2706],{"class":867},[324,19700,19701],{"class":326,"line":8739},[324,19702,2277],{"class":867},[324,19704,19705],{"class":326,"line":8744},[324,19706,19707],{"class":772},"    \u002F\u002F1.括号法\n",[324,19709,19710],{"class":326,"line":8750},[324,19711,19712],{"class":772},"    \u002F\u002F Person p2(10);\u002F\u002F有参构造函数调用\n",[324,19714,19715],{"class":326,"line":8762},[324,19716,19717],{"class":772},"    \u002F\u002F Person p3(p2);\u002F\u002F拷贝构造函数调用\n",[324,19719,19720],{"class":326,"line":8774},[324,19721,19722],{"class":772},"    \u002F\u002F cout\u003C\u003C\"p2的age:\"\u003C\u003Cp2.age\u003C\u003Cendl;\n",[324,19724,19725],{"class":326,"line":8786},[324,19726,19727],{"class":772},"    \u002F\u002F cout\u003C\u003C\"p3的age:\"\u003C\u003Cp3.age\u003C\u003Cendl;\n",[324,19729,19730],{"class":326,"line":10445},[324,19731,488],{"emptyLinePlaceholder":487},[324,19733,19734],{"class":326,"line":10470},[324,19735,19736],{"class":772},"    \u002F\u002F注意事项\n",[324,19738,19739],{"class":326,"line":10493},[324,19740,19741],{"class":772},"    \u002F\u002F调用默认构造函数时候，不要加()\n",[324,19743,19744],{"class":326,"line":10517},[324,19745,19746],{"class":772},"    \u002F\u002F因为下面这行代码，编译器会认为是一个函数的声明,不会认为在创建对象\n",[324,19748,19749],{"class":326,"line":10522},[324,19750,19751],{"class":772},"    \u002F\u002F Person p4();\n",[324,19753,19754],{"class":326,"line":10527},[324,19755,488],{"emptyLinePlaceholder":487},[324,19757,19758],{"class":326,"line":10532},[324,19759,19760],{"class":772},"    \u002F\u002F2.显示法\n",[324,19762,19763],{"class":326,"line":10541},[324,19764,19765],{"class":867},"    Person p1;\n",[324,19767,19768,19771,19773,19776,19778,19780],{"class":326,"line":10546},[324,19769,19770],{"class":867},"    Person p2",[324,19772,913],{"class":863},[324,19774,19775],{"class":734},"Person",[324,19777,868],{"class":867},[324,19779,1310],{"class":916},[324,19781,3448],{"class":867},[324,19783,19784,19787,19789,19791],{"class":326,"line":10552},[324,19785,19786],{"class":867},"    Person p3",[324,19788,913],{"class":863},[324,19790,19775],{"class":734},[324,19792,19793],{"class":867},"(p2);\n",[324,19795,19796],{"class":326,"line":10573},[324,19797,19798],{"class":772},"    \u002F\u002F 如果单独拿出右侧Person(10);，这是个匿名对象\n",[324,19800,19801],{"class":326,"line":10579},[324,19802,488],{"emptyLinePlaceholder":487},[324,19804,19805],{"class":326,"line":10593},[324,19806,19807],{"class":772},"    \u002F\u002F 注意事项2\n",[324,19809,19810],{"class":326,"line":10599},[324,19811,19812],{"class":772},"    \u002F\u002F 不要利用拷贝构造函数  初始化匿名对象\n",[324,19814,19815],{"class":326,"line":10626},[324,19816,19817],{"class":772},"    \u002F\u002F Person(p2);  编译器会认为 Person (p2)===Person p2； 错误的 编译器会认为是对象的声明   \n",[324,19819,19820],{"class":326,"line":10635},[324,19821,488],{"emptyLinePlaceholder":487},[324,19823,19824],{"class":326,"line":10641},[324,19825,19826],{"class":772},"    \u002F\u002F3.隐士转换法\n",[324,19828,19829,19832,19834,19836,19838],{"class":326,"line":10649},[324,19830,19831],{"class":867},"    Person p4",[324,19833,913],{"class":863},[324,19835,1310],{"class":916},[324,19837,923],{"class":867},[324,19839,19840],{"class":772},"  \u002F\u002F 这里会调用有参构造函数  相当于Person p4=Person(10);\n",[324,19842,19843,19846,19848,19851],{"class":326,"line":10654},[324,19844,19845],{"class":867},"    Person p5",[324,19847,913],{"class":863},[324,19849,19850],{"class":867},"p4;",[324,19852,19853],{"class":772}," \u002F\u002F 这里会调用拷贝构造函数\n",[324,19855,19856],{"class":326,"line":17333},[324,19857,2296],{"class":867},[324,19859,19860,19862,19864],{"class":326,"line":17339},[324,19861,871],{"class":863},[324,19863,2703],{"class":734},[324,19865,2706],{"class":867},[324,19867,19868],{"class":326,"line":17362},[324,19869,2277],{"class":867},[324,19871,19872,19874],{"class":326,"line":17368},[324,19873,6362],{"class":734},[324,19875,6365],{"class":867},[324,19877,19878,19880],{"class":326,"line":17391},[324,19879,6431],{"class":734},[324,19881,6365],{"class":867},[324,19883,19884,19886,19888],{"class":326,"line":17405},[324,19885,4819],{"class":863},[324,19887,4822],{"class":916},[324,19889,2025],{"class":867},[324,19891,19892],{"class":326,"line":17425},[324,19893,2296],{"class":867},[19,19895,19896,19899],{},[116,19897,19898],{},"匿名对象的特点","：当前行执行结束后，系统会立即回收掉匿名对象",[35,19901,19903],{"id":19902},"_823拷贝构造函数","8.2.3拷贝构造函数",[19,19905,19906],{},"C++中拷贝构造函数调用时机通常有三种情况",[1871,19908,19909,19912,19915],{},[195,19910,19911],{},"使用一个已经创建完毕的对象来初始化一个新对象",[195,19913,19914],{},"值传递的方式给函数参数传值",[195,19916,19917],{},"以值方式返回局部对象",[316,19919,19921],{"className":854,"code":19920,"language":856,"meta":50,"style":50},"#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",[269,19922,19923,19929,19939,19943,19948,19952,19957,19962,19967,19973,19977,19981,19987,19991,20004,20008,20013,20025,20029,20037,20050,20054,20058,20074,20078,20087,20100,20104,20110,20114,20126,20130,20136,20140,20144,20152,20156,20169,20177,20195,20199,20204,20209,20224,20228,20241,20245,20253,20257,20261,20269,20273,20278,20287,20291,20295,20320,20330,20334,20342,20346,20357,20382,20386,20390,20394,20402,20406,20411,20416,20423,20428,20433,20438,20443,20447,20452,20456,20461,20465,20470,20475,20479,20483,20488,20493,20501],{"__ignoreMap":50},[324,19924,19925,19927],{"class":326,"line":327},[324,19926,2680],{"class":863},[324,19928,2683],{"class":738},[324,19930,19931,19933,19935,19937],{"class":326,"line":203},[324,19932,2688],{"class":863},[324,19934,2691],{"class":863},[324,19936,2694],{"class":734},[324,19938,2025],{"class":867},[324,19940,19941],{"class":326,"line":338},[324,19942,488],{"emptyLinePlaceholder":487},[324,19944,19945],{"class":326,"line":344},[324,19946,19947],{"class":772},"\u002F\u002F拷贝构造函数调用时机\n",[324,19949,19950],{"class":326,"line":484},[324,19951,488],{"emptyLinePlaceholder":487},[324,19953,19954],{"class":326,"line":491},[324,19955,19956],{"class":772},"\u002F\u002F1.使用一个已经创建好的对象来初始化一个新对象\n",[324,19958,19959],{"class":326,"line":496},[324,19960,19961],{"class":772},"\u002F\u002F2.值传递的方式给函数参数传值\n",[324,19963,19964],{"class":326,"line":502},[324,19965,19966],{"class":772},"\u002F\u002F3.以值方式返回局部对象\n",[324,19968,19969,19971],{"class":326,"line":508},[324,19970,15423],{"class":863},[324,19972,15900],{"class":734},[324,19974,19975],{"class":326,"line":514},[324,19976,2277],{"class":867},[324,19978,19979],{"class":326,"line":2343},[324,19980,15445],{"class":863},[324,19982,19983,19985],{"class":326,"line":2348},[324,19984,19248],{"class":734},[324,19986,2706],{"class":867},[324,19988,19989],{"class":326,"line":2354},[324,19990,2760],{"class":867},[324,19992,19993,19995,19997,20000,20002],{"class":326,"line":2359},[324,19994,10398],{"class":867},[324,19996,1908],{"class":863},[324,19998,19999],{"class":738}," \"Person的默认构造函数调用\"",[324,20001,2176],{"class":863},[324,20003,9569],{"class":867},[324,20005,20006],{"class":326,"line":2373},[324,20007,2917],{"class":867},[324,20009,20010],{"class":326,"line":2378},[324,20011,20012],{"class":772},"    \u002F\u002F有参构造\n",[324,20014,20015,20017,20019,20021,20023],{"class":326,"line":2384},[324,20016,19248],{"class":734},[324,20018,868],{"class":867},[324,20020,871],{"class":863},[324,20022,16418],{"class":5945},[324,20024,874],{"class":867},[324,20026,20027],{"class":326,"line":2405},[324,20028,2760],{"class":867},[324,20030,20031,20033,20035],{"class":326,"line":2410},[324,20032,16472],{"class":867},[324,20034,913],{"class":863},[324,20036,8526],{"class":867},[324,20038,20039,20041,20043,20046,20048],{"class":326,"line":2424},[324,20040,10398],{"class":867},[324,20042,1908],{"class":863},[324,20044,20045],{"class":738}," \"Person的有参构造函数调用\"",[324,20047,2176],{"class":863},[324,20049,9569],{"class":867},[324,20051,20052],{"class":326,"line":2429},[324,20053,2917],{"class":867},[324,20055,20056],{"class":326,"line":2458},[324,20057,19603],{"class":772},[324,20059,20060,20062,20064,20066,20068,20070,20072],{"class":326,"line":2463},[324,20061,19248],{"class":734},[324,20063,868],{"class":867},[324,20065,7521],{"class":863},[324,20067,16298],{"class":734},[324,20069,11313],{"class":863},[324,20071,19],{"class":5945},[324,20073,874],{"class":867},[324,20075,20076],{"class":326,"line":2480},[324,20077,2760],{"class":867},[324,20079,20080,20082,20084],{"class":326,"line":2485},[324,20081,16472],{"class":867},[324,20083,913],{"class":863},[324,20085,20086],{"class":867}," p.m_Age;\n",[324,20088,20089,20091,20093,20096,20098],{"class":326,"line":2490},[324,20090,10398],{"class":867},[324,20092,1908],{"class":863},[324,20094,20095],{"class":738}," \"Person的拷贝构造函数调用\"",[324,20097,2176],{"class":863},[324,20099,9569],{"class":867},[324,20101,20102],{"class":326,"line":2495},[324,20103,2917],{"class":867},[324,20105,20106,20108],{"class":326,"line":2509},[324,20107,19281],{"class":734},[324,20109,2706],{"class":867},[324,20111,20112],{"class":326,"line":2514},[324,20113,2760],{"class":867},[324,20115,20116,20118,20120,20122,20124],{"class":326,"line":3306},[324,20117,10398],{"class":867},[324,20119,1908],{"class":863},[324,20121,19296],{"class":738},[324,20123,2176],{"class":863},[324,20125,9569],{"class":867},[324,20127,20128],{"class":326,"line":3320},[324,20129,2917],{"class":867},[324,20131,20132,20134],{"class":326,"line":3328},[324,20133,2715],{"class":863},[324,20135,16395],{"class":867},[324,20137,20138],{"class":326,"line":3333},[324,20139,4724],{"class":867},[324,20141,20142],{"class":326,"line":3339},[324,20143,19956],{"class":772},[324,20145,20146,20148,20150],{"class":326,"line":3345},[324,20147,6093],{"class":863},[324,20149,6317],{"class":734},[324,20151,2706],{"class":867},[324,20153,20154],{"class":326,"line":3350},[324,20155,2277],{"class":867},[324,20157,20158,20161,20163,20165,20167],{"class":326,"line":8677},[324,20159,20160],{"class":867},"    Person ",[324,20162,7859],{"class":734},[324,20164,868],{"class":867},[324,20166,1564],{"class":916},[324,20168,3448],{"class":867},[324,20170,20171,20173,20175],{"class":326,"line":8701},[324,20172,20160],{"class":867},[324,20174,7762],{"class":734},[324,20176,18244],{"class":867},[324,20178,20179,20181,20183,20186,20188,20191,20193],{"class":326,"line":8706},[324,20180,2282],{"class":867},[324,20182,1908],{"class":863},[324,20184,20185],{"class":738},"\"P2的年龄为：\"",[324,20187,1908],{"class":863},[324,20189,20190],{"class":867},"p2.m_Age",[324,20192,1908],{"class":863},[324,20194,1930],{"class":867},[324,20196,20197],{"class":326,"line":8712},[324,20198,2296],{"class":867},[324,20200,20201],{"class":326,"line":8739},[324,20202,20203],{"class":772},"\u002F\u002F 2.值传递的方式给函数参数传值\n",[324,20205,20206],{"class":326,"line":8744},[324,20207,20208],{"class":772},"\u002F\u002F值传递会拷贝一个新的对象，调用拷贝构造函数\n",[324,20210,20211,20213,20216,20218,20220,20222],{"class":326,"line":8750},[324,20212,6093],{"class":863},[324,20214,20215],{"class":734}," doWork",[324,20217,868],{"class":867},[324,20219,19775],{"class":734},[324,20221,7554],{"class":5945},[324,20223,874],{"class":867},[324,20225,20226],{"class":326,"line":8762},[324,20227,2277],{"class":867},[324,20229,20230,20232,20234,20237,20239],{"class":326,"line":8774},[324,20231,7258],{"class":867},[324,20233,1908],{"class":863},[324,20235,20236],{"class":738}," \"doWork函数调用\"",[324,20238,2176],{"class":863},[324,20240,9569],{"class":867},[324,20242,20243],{"class":326,"line":8786},[324,20244,2296],{"class":867},[324,20246,20247,20249,20251],{"class":326,"line":10445},[324,20248,6093],{"class":863},[324,20250,6386],{"class":734},[324,20252,2706],{"class":867},[324,20254,20255],{"class":326,"line":10470},[324,20256,2277],{"class":867},[324,20258,20259],{"class":326,"line":10493},[324,20260,16042],{"class":867},[324,20262,20263,20266],{"class":326,"line":10517},[324,20264,20265],{"class":734},"    doWork",[324,20267,20268],{"class":867},"(p);\n",[324,20270,20271],{"class":326,"line":10522},[324,20272,2296],{"class":867},[324,20274,20275],{"class":326,"line":10527},[324,20276,20277],{"class":772},"\u002F\u002F 3.以值方式返回局部对象\n",[324,20279,20280,20282,20285],{"class":326,"line":10532},[324,20281,19775],{"class":734},[324,20283,20284],{"class":734}," doWork2",[324,20286,2706],{"class":867},[324,20288,20289],{"class":326,"line":10541},[324,20290,2277],{"class":867},[324,20292,20293],{"class":326,"line":10546},[324,20294,19765],{"class":867},[324,20296,20297,20299,20301,20303,20305,20307,20309,20311,20313,20315,20317],{"class":326,"line":10552},[324,20298,2282],{"class":867},[324,20300,1908],{"class":863},[324,20302,868],{"class":867},[324,20304,871],{"class":863},[324,20306,7247],{"class":863},[324,20308,1293],{"class":867},[324,20310,1217],{"class":863},[324,20312,7859],{"class":867},[324,20314,1908],{"class":863},[324,20316,1973],{"class":867},[324,20318,20319],{"class":772},"\u002F\u002F打印p1的地址\n",[324,20321,20322,20324,20327],{"class":326,"line":10573},[324,20323,4819],{"class":863},[324,20325,20326],{"class":867}," p1;",[324,20328,20329],{"class":772},"\u002F\u002F返回局部对象，调用拷贝构造函数\n",[324,20331,20332],{"class":326,"line":10579},[324,20333,2296],{"class":867},[324,20335,20336,20338,20340],{"class":326,"line":10593},[324,20337,6093],{"class":863},[324,20339,6458],{"class":734},[324,20341,2706],{"class":867},[324,20343,20344],{"class":326,"line":10599},[324,20345,2277],{"class":867},[324,20347,20348,20351,20353,20355],{"class":326,"line":10626},[324,20349,20350],{"class":867},"    Person p ",[324,20352,913],{"class":863},[324,20354,20284],{"class":734},[324,20356,6365],{"class":867},[324,20358,20359,20361,20363,20365,20367,20369,20371,20373,20375,20377,20379],{"class":326,"line":10635},[324,20360,2282],{"class":867},[324,20362,1908],{"class":863},[324,20364,868],{"class":867},[324,20366,871],{"class":863},[324,20368,7247],{"class":863},[324,20370,1293],{"class":867},[324,20372,1217],{"class":863},[324,20374,19],{"class":867},[324,20376,1908],{"class":863},[324,20378,1973],{"class":867},[324,20380,20381],{"class":772},"\u002F\u002F打印p的地址\n",[324,20383,20384],{"class":326,"line":10641},[324,20385,2296],{"class":867},[324,20387,20388],{"class":326,"line":10649},[324,20389,488],{"emptyLinePlaceholder":487},[324,20391,20392],{"class":326,"line":10654},[324,20393,488],{"emptyLinePlaceholder":487},[324,20395,20396,20398,20400],{"class":326,"line":17333},[324,20397,871],{"class":863},[324,20399,2703],{"class":734},[324,20401,2706],{"class":867},[324,20403,20404],{"class":326,"line":17339},[324,20405,2277],{"class":867},[324,20407,20408],{"class":326,"line":17362},[324,20409,20410],{"class":772},"    \u002F\u002F test01();\n",[324,20412,20413],{"class":326,"line":17368},[324,20414,20415],{"class":772},"    \u002F\u002F test02();\n",[324,20417,20418,20421],{"class":326,"line":17391},[324,20419,20420],{"class":734},"    test03",[324,20422,6365],{"class":867},[324,20424,20425],{"class":326,"line":17405},[324,20426,20427],{"class":772},"\u002F\u002F此时编译器进行了优化，返回值优化（RVO），没有调用拷贝构造函数，直接在p的地址上创建了p1对象\n",[324,20429,20430],{"class":326,"line":17425},[324,20431,20432],{"class":772},"\u002F\u002F 输出结果如下：\n",[324,20434,20435],{"class":326,"line":17431},[324,20436,20437],{"class":772},"\u002F\u002F Person的默认构造函数调用\n",[324,20439,20440],{"class":326,"line":17442},[324,20441,20442],{"class":772},"\u002F\u002F 0x7fffffffceec\n",[324,20444,20445],{"class":326,"line":17465},[324,20446,20442],{"class":772},[324,20448,20449],{"class":326,"line":17487},[324,20450,20451],{"class":772},"\u002F\u002F Person的析构函数调用\n",[324,20453,20454],{"class":326,"line":17492},[324,20455,488],{"emptyLinePlaceholder":487},[324,20457,20458],{"class":326,"line":17498},[324,20459,20460],{"class":772},"\u002F\u002F 之前的输出结果如下：\n",[324,20462,20463],{"class":326,"line":17512},[324,20464,20437],{"class":772},[324,20466,20467],{"class":326,"line":17525},[324,20468,20469],{"class":772},"\u002F\u002F 地址\n",[324,20471,20472],{"class":326,"line":17530},[324,20473,20474],{"class":772},"\u002F\u002F Person的拷贝构造函数调用\n",[324,20476,20477],{"class":326,"line":17544},[324,20478,20451],{"class":772},[324,20480,20481],{"class":326,"line":17549},[324,20482,20469],{"class":772},[324,20484,20485],{"class":326,"line":17555},[324,20486,20487],{"class":772},"\u002F\u002F (这两次输出的地址也是不同的) \n",[324,20489,20490],{"class":326,"line":17560},[324,20491,20492],{"class":772},"\u002F\u002F Person的析构函数调用     \n",[324,20494,20495,20497,20499],{"class":326,"line":17574},[324,20496,4819],{"class":863},[324,20498,4822],{"class":916},[324,20500,2025],{"class":867},[324,20502,20503],{"class":326,"line":17579},[324,20504,2296],{"class":867},[19,20506,20507],{},"简化版理解",[316,20509,20511],{"className":854,"code":20510,"language":856,"meta":50,"style":50},"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",[269,20512,20513,20521,20525,20531,20544,20555,20559,20571,20584,20592,20596,20612,20625,20634,20638,20643,20649,20662,20666,20670,20677,20681,20685,20690,20698,20702,20718,20731,20744,20748,20753,20761,20765,20769,20774,20779,20795,20803,20810,20816,20820,20824,20829,20837,20841,20845,20868,20875,20879,20883,20891,20895,20905,20927,20931,20935,20939,20947,20951,20956,20961,20967,20971,20981,20985,20993],{"__ignoreMap":50},[324,20514,20515,20517,20519],{"class":326,"line":327},[324,20516,15423],{"class":863},[324,20518,16298],{"class":734},[324,20520,16301],{"class":867},[324,20522,20523],{"class":326,"line":203},[324,20524,15445],{"class":863},[324,20526,20527,20529],{"class":326,"line":338},[324,20528,19248],{"class":734},[324,20530,11582],{"class":867},[324,20532,20533,20535,20537,20540,20542],{"class":326,"line":344},[324,20534,10398],{"class":867},[324,20536,1908],{"class":863},[324,20538,20539],{"class":738}," \"无参构造函数!\"",[324,20541,2176],{"class":863},[324,20543,9569],{"class":867},[324,20545,20546,20549,20551,20553],{"class":326,"line":484},[324,20547,20548],{"class":867},"        mAge ",[324,20550,913],{"class":863},[324,20552,4822],{"class":916},[324,20554,2025],{"class":867},[324,20556,20557],{"class":326,"line":491},[324,20558,2917],{"class":867},[324,20560,20561,20563,20565,20567,20569],{"class":326,"line":496},[324,20562,19248],{"class":734},[324,20564,868],{"class":867},[324,20566,871],{"class":863},[324,20568,16418],{"class":5945},[324,20570,13171],{"class":867},[324,20572,20573,20575,20577,20580,20582],{"class":326,"line":502},[324,20574,10398],{"class":867},[324,20576,1908],{"class":863},[324,20578,20579],{"class":738}," \"有参构造函数!\"",[324,20581,2176],{"class":863},[324,20583,9569],{"class":867},[324,20585,20586,20588,20590],{"class":326,"line":508},[324,20587,20548],{"class":867},[324,20589,913],{"class":863},[324,20591,8526],{"class":867},[324,20593,20594],{"class":326,"line":514},[324,20595,2917],{"class":867},[324,20597,20598,20600,20602,20604,20606,20608,20610],{"class":326,"line":2343},[324,20599,19248],{"class":734},[324,20601,868],{"class":867},[324,20603,7521],{"class":863},[324,20605,16298],{"class":734},[324,20607,1217],{"class":863},[324,20609,7554],{"class":5945},[324,20611,13171],{"class":867},[324,20613,20614,20616,20618,20621,20623],{"class":326,"line":2348},[324,20615,10398],{"class":867},[324,20617,1908],{"class":863},[324,20619,20620],{"class":738}," \"拷贝构造函数!\"",[324,20622,2176],{"class":863},[324,20624,9569],{"class":867},[324,20626,20627,20629,20631],{"class":326,"line":2354},[324,20628,20548],{"class":867},[324,20630,913],{"class":863},[324,20632,20633],{"class":867}," p.mAge;\n",[324,20635,20636],{"class":326,"line":2359},[324,20637,2917],{"class":867},[324,20639,20640],{"class":326,"line":2373},[324,20641,20642],{"class":772},"    \u002F\u002F析构函数在释放内存之前调用\n",[324,20644,20645,20647],{"class":326,"line":2378},[324,20646,19281],{"class":734},[324,20648,11582],{"class":867},[324,20650,20651,20653,20655,20658,20660],{"class":326,"line":2384},[324,20652,10398],{"class":867},[324,20654,1908],{"class":863},[324,20656,20657],{"class":738}," \"析构函数!\"",[324,20659,2176],{"class":863},[324,20661,9569],{"class":867},[324,20663,20664],{"class":326,"line":2405},[324,20665,2917],{"class":867},[324,20667,20668],{"class":326,"line":2410},[324,20669,15445],{"class":863},[324,20671,20672,20674],{"class":326,"line":2424},[324,20673,2715],{"class":863},[324,20675,20676],{"class":867}," mAge;\n",[324,20678,20679],{"class":326,"line":2429},[324,20680,4724],{"class":867},[324,20682,20683],{"class":326,"line":2458},[324,20684,488],{"emptyLinePlaceholder":487},[324,20686,20687],{"class":326,"line":2463},[324,20688,20689],{"class":772},"\u002F\u002F1. 使用一个已经创建完毕的对象来初始化一个新对象\n",[324,20691,20692,20694,20696],{"class":326,"line":2480},[324,20693,6093],{"class":863},[324,20695,6317],{"class":734},[324,20697,11582],{"class":867},[324,20699,20700],{"class":326,"line":2485},[324,20701,488],{"emptyLinePlaceholder":487},[324,20703,20704,20706,20709,20711,20713,20715],{"class":326,"line":2490},[324,20705,20160],{"class":867},[324,20707,20708],{"class":734},"man",[324,20710,868],{"class":867},[324,20712,1175],{"class":916},[324,20714,6695],{"class":867},[324,20716,20717],{"class":772}," \u002F\u002Fp对象已经创建完毕\n",[324,20719,20720,20722,20725,20728],{"class":326,"line":2495},[324,20721,20160],{"class":867},[324,20723,20724],{"class":734},"newman",[324,20726,20727],{"class":867},"(man);",[324,20729,20730],{"class":772}," \u002F\u002F调用拷贝构造函数\n",[324,20732,20733,20736,20738,20741],{"class":326,"line":2509},[324,20734,20735],{"class":867},"    Person newman2 ",[324,20737,913],{"class":863},[324,20739,20740],{"class":867}," man;",[324,20742,20743],{"class":772}," \u002F\u002F拷贝构造\n",[324,20745,20746],{"class":326,"line":2514},[324,20747,488],{"emptyLinePlaceholder":487},[324,20749,20750],{"class":326,"line":3306},[324,20751,20752],{"class":772},"    \u002F\u002FPerson newman3;\n",[324,20754,20755,20758],{"class":326,"line":3320},[324,20756,20757],{"class":772},"    \u002F\u002Fnewman3 = man;",[324,20759,20760],{"class":772}," \u002F\u002F不是调用拷贝构造函数，赋值操作\n",[324,20762,20763],{"class":326,"line":3328},[324,20764,2296],{"class":867},[324,20766,20767],{"class":326,"line":3333},[324,20768,488],{"emptyLinePlaceholder":487},[324,20770,20771],{"class":326,"line":3339},[324,20772,20773],{"class":772},"\u002F\u002F2. 值传递的方式给函数参数传值\n",[324,20775,20776],{"class":326,"line":3345},[324,20777,20778],{"class":772},"\u002F\u002F相当于Person p1 = p;\n",[324,20780,20781,20783,20785,20787,20789,20792],{"class":326,"line":3350},[324,20782,6093],{"class":863},[324,20784,20215],{"class":734},[324,20786,868],{"class":867},[324,20788,19775],{"class":734},[324,20790,20791],{"class":5945}," p1",[324,20793,20794],{"class":867},") {}\n",[324,20796,20797,20799,20801],{"class":326,"line":8677},[324,20798,6093],{"class":863},[324,20800,6386],{"class":734},[324,20802,11582],{"class":867},[324,20804,20805,20807],{"class":326,"line":8701},[324,20806,19333],{"class":867},[324,20808,20809],{"class":772}," \u002F\u002F无参构造函数\n",[324,20811,20812,20814],{"class":326,"line":8706},[324,20813,20265],{"class":734},[324,20815,20268],{"class":867},[324,20817,20818],{"class":326,"line":8712},[324,20819,2296],{"class":867},[324,20821,20822],{"class":326,"line":8739},[324,20823,488],{"emptyLinePlaceholder":487},[324,20825,20826],{"class":326,"line":8744},[324,20827,20828],{"class":772},"\u002F\u002F3. 以值方式返回局部对象\n",[324,20830,20831,20833,20835],{"class":326,"line":8750},[324,20832,19775],{"class":734},[324,20834,20284],{"class":734},[324,20836,2706],{"class":867},[324,20838,20839],{"class":326,"line":8762},[324,20840,2277],{"class":867},[324,20842,20843],{"class":326,"line":8774},[324,20844,19765],{"class":867},[324,20846,20847,20849,20851,20853,20855,20857,20859,20861,20864,20866],{"class":326,"line":8786},[324,20848,7258],{"class":867},[324,20850,1908],{"class":863},[324,20852,2389],{"class":867},[324,20854,871],{"class":863},[324,20856,7247],{"class":863},[324,20858,1293],{"class":867},[324,20860,1217],{"class":863},[324,20862,20863],{"class":867},"p1 ",[324,20865,1908],{"class":863},[324,20867,9569],{"class":867},[324,20869,20870,20872],{"class":326,"line":10445},[324,20871,4819],{"class":863},[324,20873,20874],{"class":867}," p1;\n",[324,20876,20877],{"class":326,"line":10470},[324,20878,2296],{"class":867},[324,20880,20881],{"class":326,"line":10493},[324,20882,488],{"emptyLinePlaceholder":487},[324,20884,20885,20887,20889],{"class":326,"line":10517},[324,20886,6093],{"class":863},[324,20888,6458],{"class":734},[324,20890,2706],{"class":867},[324,20892,20893],{"class":326,"line":10522},[324,20894,2277],{"class":867},[324,20896,20897,20899,20901,20903],{"class":326,"line":10527},[324,20898,20350],{"class":867},[324,20900,913],{"class":863},[324,20902,20284],{"class":734},[324,20904,6365],{"class":867},[324,20906,20907,20909,20911,20913,20915,20917,20919,20921,20923,20925],{"class":326,"line":10532},[324,20908,7258],{"class":867},[324,20910,1908],{"class":863},[324,20912,2389],{"class":867},[324,20914,871],{"class":863},[324,20916,7247],{"class":863},[324,20918,1293],{"class":867},[324,20920,1217],{"class":863},[324,20922,12177],{"class":867},[324,20924,1908],{"class":863},[324,20926,9569],{"class":867},[324,20928,20929],{"class":326,"line":10541},[324,20930,2296],{"class":867},[324,20932,20933],{"class":326,"line":10546},[324,20934,488],{"emptyLinePlaceholder":487},[324,20936,20937],{"class":326,"line":10552},[324,20938,488],{"emptyLinePlaceholder":487},[324,20940,20941,20943,20945],{"class":326,"line":10573},[324,20942,871],{"class":863},[324,20944,2703],{"class":734},[324,20946,11582],{"class":867},[324,20948,20949],{"class":326,"line":10579},[324,20950,488],{"emptyLinePlaceholder":487},[324,20952,20953],{"class":326,"line":10593},[324,20954,20955],{"class":772},"    \u002F\u002Ftest01();\n",[324,20957,20958],{"class":326,"line":10599},[324,20959,20960],{"class":772},"    \u002F\u002Ftest02();\n",[324,20962,20963,20965],{"class":326,"line":10626},[324,20964,20420],{"class":734},[324,20966,6365],{"class":867},[324,20968,20969],{"class":326,"line":10635},[324,20970,488],{"emptyLinePlaceholder":487},[324,20972,20973,20975,20977,20979],{"class":326,"line":10641},[324,20974,3033],{"class":734},[324,20976,868],{"class":867},[324,20978,3038],{"class":738},[324,20980,3448],{"class":867},[324,20982,20983],{"class":326,"line":10649},[324,20984,488],{"emptyLinePlaceholder":487},[324,20986,20987,20989,20991],{"class":326,"line":10654},[324,20988,4819],{"class":863},[324,20990,4822],{"class":916},[324,20992,2025],{"class":867},[324,20994,20995],{"class":326,"line":17333},[324,20996,2296],{"class":867},[35,20998,21000],{"id":20999},"_824构造函数的调用规则","8.2.4构造函数的调用规则",[19,21002,21003],{},"默认情况下，c++编译器至少给一个类添加3个函数",[19,21005,21006],{},"1．默认构造函数(无参，函数体为空)",[19,21008,21009],{},"2．默认析构函数(无参，函数体为空)",[19,21011,21012],{},"3．默认拷贝构造函数，对属性进行值拷贝  (值拷贝)",[19,21014,21015],{},"构造函数调用规则如下：",[1871,21017,21018,21021],{},[195,21019,21020],{},"如果用户定义有参构造函数，c++不在提供默认无参构造，但是会提供默认拷贝构造",[195,21022,21023],{},"如果用户定义拷贝构造函数，c++不会再提供其他构造函数",[316,21025,21027],{"className":854,"code":21026,"language":856,"meta":50,"style":50},"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",[269,21028,21029,21037,21041,21046,21052,21064,21068,21073,21085,21094,21106,21110,21114,21130,21139,21151,21155,21159,21165,21177,21181,21185,21191,21195,21199,21207,21211,21223,21228,21236,21240,21258,21262,21266,21274,21278,21283,21291,21306,21319,21323,21328,21335,21351,21364,21368,21372,21380,21384,21390,21394,21404,21408,21416],{"__ignoreMap":50},[324,21030,21031,21033,21035],{"class":326,"line":327},[324,21032,15423],{"class":863},[324,21034,16298],{"class":734},[324,21036,16301],{"class":867},[324,21038,21039],{"class":326,"line":203},[324,21040,15445],{"class":863},[324,21042,21043],{"class":326,"line":338},[324,21044,21045],{"class":772},"    \u002F\u002F无参（默认）构造函数\n",[324,21047,21048,21050],{"class":326,"line":344},[324,21049,19248],{"class":734},[324,21051,11582],{"class":867},[324,21053,21054,21056,21058,21060,21062],{"class":326,"line":484},[324,21055,10398],{"class":867},[324,21057,1908],{"class":863},[324,21059,20539],{"class":738},[324,21061,2176],{"class":863},[324,21063,9569],{"class":867},[324,21065,21066],{"class":326,"line":491},[324,21067,2917],{"class":867},[324,21069,21070],{"class":326,"line":496},[324,21071,21072],{"class":772},"    \u002F\u002F有参构造函数\n",[324,21074,21075,21077,21079,21081,21083],{"class":326,"line":502},[324,21076,19248],{"class":734},[324,21078,868],{"class":867},[324,21080,871],{"class":863},[324,21082,2130],{"class":5945},[324,21084,13171],{"class":867},[324,21086,21087,21090,21092],{"class":326,"line":508},[324,21088,21089],{"class":867},"        age ",[324,21091,913],{"class":863},[324,21093,2164],{"class":867},[324,21095,21096,21098,21100,21102,21104],{"class":326,"line":514},[324,21097,10398],{"class":867},[324,21099,1908],{"class":863},[324,21101,20579],{"class":738},[324,21103,2176],{"class":863},[324,21105,9569],{"class":867},[324,21107,21108],{"class":326,"line":2343},[324,21109,2917],{"class":867},[324,21111,21112],{"class":326,"line":2348},[324,21113,19603],{"class":772},[324,21115,21116,21118,21120,21122,21124,21126,21128],{"class":326,"line":2354},[324,21117,19248],{"class":734},[324,21119,868],{"class":867},[324,21121,7521],{"class":863},[324,21123,16298],{"class":734},[324,21125,1217],{"class":863},[324,21127,7554],{"class":5945},[324,21129,13171],{"class":867},[324,21131,21132,21134,21136],{"class":326,"line":2359},[324,21133,21089],{"class":867},[324,21135,913],{"class":863},[324,21137,21138],{"class":867}," p.age;\n",[324,21140,21141,21143,21145,21147,21149],{"class":326,"line":2373},[324,21142,10398],{"class":867},[324,21144,1908],{"class":863},[324,21146,20620],{"class":738},[324,21148,2176],{"class":863},[324,21150,9569],{"class":867},[324,21152,21153],{"class":326,"line":2378},[324,21154,2917],{"class":867},[324,21156,21157],{"class":326,"line":2384},[324,21158,19276],{"class":772},[324,21160,21161,21163],{"class":326,"line":2405},[324,21162,19281],{"class":734},[324,21164,11582],{"class":867},[324,21166,21167,21169,21171,21173,21175],{"class":326,"line":2410},[324,21168,10398],{"class":867},[324,21170,1908],{"class":863},[324,21172,20657],{"class":738},[324,21174,2176],{"class":863},[324,21176,9569],{"class":867},[324,21178,21179],{"class":326,"line":2424},[324,21180,2917],{"class":867},[324,21182,21183],{"class":326,"line":2429},[324,21184,15445],{"class":863},[324,21186,21187,21189],{"class":326,"line":2458},[324,21188,2715],{"class":863},[324,21190,8526],{"class":867},[324,21192,21193],{"class":326,"line":2463},[324,21194,4724],{"class":867},[324,21196,21197],{"class":326,"line":2480},[324,21198,488],{"emptyLinePlaceholder":487},[324,21200,21201,21203,21205],{"class":326,"line":2485},[324,21202,6093],{"class":863},[324,21204,6317],{"class":734},[324,21206,2706],{"class":867},[324,21208,21209],{"class":326,"line":2490},[324,21210,2277],{"class":867},[324,21212,21213,21215,21217,21219,21221],{"class":326,"line":2495},[324,21214,20160],{"class":867},[324,21216,7859],{"class":734},[324,21218,868],{"class":867},[324,21220,1514],{"class":916},[324,21222,3448],{"class":867},[324,21224,21225],{"class":326,"line":2509},[324,21226,21227],{"class":772},"    \u002F\u002F如果不写拷贝构造，编译器会自动添加拷贝构造，并且做浅拷贝操作\n",[324,21229,21230,21232,21234],{"class":326,"line":2514},[324,21231,20160],{"class":867},[324,21233,7762],{"class":734},[324,21235,18244],{"class":867},[324,21237,21238],{"class":326,"line":3306},[324,21239,488],{"emptyLinePlaceholder":487},[324,21241,21242,21244,21246,21249,21251,21254,21256],{"class":326,"line":3320},[324,21243,7258],{"class":867},[324,21245,1908],{"class":863},[324,21247,21248],{"class":738}," \"p2的年龄为： \"",[324,21250,2176],{"class":863},[324,21252,21253],{"class":867}," p2.age ",[324,21255,1908],{"class":863},[324,21257,9569],{"class":867},[324,21259,21260],{"class":326,"line":3328},[324,21261,2296],{"class":867},[324,21263,21264],{"class":326,"line":3333},[324,21265,488],{"emptyLinePlaceholder":487},[324,21267,21268,21270,21272],{"class":326,"line":3339},[324,21269,6093],{"class":863},[324,21271,6386],{"class":734},[324,21273,2706],{"class":867},[324,21275,21276],{"class":326,"line":3345},[324,21277,2277],{"class":867},[324,21279,21280],{"class":326,"line":3350},[324,21281,21282],{"class":772},"    \u002F\u002F如果用户提供有参构造，编译器不会提供默认构造，会提供拷贝构造\n",[324,21284,21285,21288],{"class":326,"line":8677},[324,21286,21287],{"class":867},"    Person p1;",[324,21289,21290],{"class":772}," \u002F\u002F此时如果用户自己没有提供默认构造，会出错\n",[324,21292,21293,21295,21297,21299,21301,21303],{"class":326,"line":8701},[324,21294,20160],{"class":867},[324,21296,7762],{"class":734},[324,21298,868],{"class":867},[324,21300,1310],{"class":916},[324,21302,6695],{"class":867},[324,21304,21305],{"class":772}," \u002F\u002F用户提供的有参\n",[324,21307,21308,21310,21313,21316],{"class":326,"line":8706},[324,21309,20160],{"class":867},[324,21311,21312],{"class":734},"p3",[324,21314,21315],{"class":867},"(p2);",[324,21317,21318],{"class":772}," \u002F\u002F此时如果用户没有提供拷贝构造，编译器会提供\n",[324,21320,21321],{"class":326,"line":8712},[324,21322,488],{"emptyLinePlaceholder":487},[324,21324,21325],{"class":326,"line":8739},[324,21326,21327],{"class":772},"    \u002F\u002F如果用户提供拷贝构造，编译器不会提供其他构造函数\n",[324,21329,21330,21333],{"class":326,"line":8744},[324,21331,21332],{"class":867},"    Person p4;",[324,21334,21290],{"class":772},[324,21336,21337,21339,21342,21344,21346,21348],{"class":326,"line":8750},[324,21338,20160],{"class":867},[324,21340,21341],{"class":734},"p5",[324,21343,868],{"class":867},[324,21345,1310],{"class":916},[324,21347,6695],{"class":867},[324,21349,21350],{"class":772}," \u002F\u002F此时如果用户自己没有提供有参，会出错\n",[324,21352,21353,21355,21358,21361],{"class":326,"line":8762},[324,21354,20160],{"class":867},[324,21356,21357],{"class":734},"p6",[324,21359,21360],{"class":867},"(p5);",[324,21362,21363],{"class":772}," \u002F\u002F用户自己提供拷贝构造\n",[324,21365,21366],{"class":326,"line":8774},[324,21367,2296],{"class":867},[324,21369,21370],{"class":326,"line":8786},[324,21371,488],{"emptyLinePlaceholder":487},[324,21373,21374,21376,21378],{"class":326,"line":10445},[324,21375,871],{"class":863},[324,21377,2703],{"class":734},[324,21379,11582],{"class":867},[324,21381,21382],{"class":326,"line":10470},[324,21383,488],{"emptyLinePlaceholder":487},[324,21385,21386,21388],{"class":326,"line":10493},[324,21387,6362],{"class":734},[324,21389,6365],{"class":867},[324,21391,21392],{"class":326,"line":10517},[324,21393,488],{"emptyLinePlaceholder":487},[324,21395,21396,21398,21400,21402],{"class":326,"line":10522},[324,21397,3033],{"class":734},[324,21399,868],{"class":867},[324,21401,3038],{"class":738},[324,21403,3448],{"class":867},[324,21405,21406],{"class":326,"line":10527},[324,21407,488],{"emptyLinePlaceholder":487},[324,21409,21410,21412,21414],{"class":326,"line":10532},[324,21411,4819],{"class":863},[324,21413,4822],{"class":916},[324,21415,2025],{"class":867},[324,21417,21418],{"class":326,"line":10541},[324,21419,2296],{"class":867},[35,21421,21423],{"id":21422},"_825深拷贝和浅拷贝","8.2.5深拷贝和浅拷贝",[19,21425,21426],{},"浅拷贝：简单的赋值拷贝操作",[19,21428,21429],{},"深拷贝：在堆区重新申请空间，进行拷贝操作",[316,21431,21433],{"className":854,"code":21432,"language":856,"meta":50,"style":50},"#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",[269,21434,21435,21441,21451,21457,21461,21465,21470,21476,21480,21493,21497,21501,21508,21512,21522,21537,21550,21554,21559,21564,21580,21584,21597,21602,21607,21612,21621,21626,21641,21645,21649,21653,21659,21663,21668,21683,21687,21698,21712,21716,21725,21729,21735,21747,21751,21759,21763,21780,21811,21819,21847,21851,21855,21863,21867,21873],{"__ignoreMap":50},[324,21436,21437,21439],{"class":326,"line":327},[324,21438,2680],{"class":863},[324,21440,2683],{"class":738},[324,21442,21443,21445,21447,21449],{"class":326,"line":203},[324,21444,2688],{"class":863},[324,21446,2691],{"class":863},[324,21448,2694],{"class":734},[324,21450,2025],{"class":867},[324,21452,21453,21455],{"class":326,"line":338},[324,21454,15423],{"class":863},[324,21456,15900],{"class":734},[324,21458,21459],{"class":326,"line":344},[324,21460,2277],{"class":867},[324,21462,21463],{"class":326,"line":484},[324,21464,15445],{"class":863},[324,21466,21467],{"class":326,"line":491},[324,21468,21469],{"class":772},"    \u002F\u002F默认构造函数\n",[324,21471,21472,21474],{"class":326,"line":496},[324,21473,19248],{"class":734},[324,21475,2706],{"class":867},[324,21477,21478],{"class":326,"line":502},[324,21479,2760],{"class":867},[324,21481,21482,21484,21486,21489,21491],{"class":326,"line":508},[324,21483,4180],{"class":867},[324,21485,1908],{"class":863},[324,21487,21488],{"class":738},"\"默认构造函数\"",[324,21490,1908],{"class":863},[324,21492,1930],{"class":867},[324,21494,21495],{"class":326,"line":514},[324,21496,2917],{"class":867},[324,21498,21499],{"class":326,"line":2343},[324,21500,21072],{"class":772},[324,21502,21503,21505],{"class":326,"line":2348},[324,21504,19281],{"class":734},[324,21506,21507],{"class":867},"(int age,int height)\n",[324,21509,21510],{"class":326,"line":2354},[324,21511,2760],{"class":867},[324,21513,21514,21517,21519],{"class":326,"line":2359},[324,21515,21516],{"class":867},"        m_Age",[324,21518,913],{"class":863},[324,21520,21521],{"class":867},"age;\n",[324,21523,21524,21527,21529,21531,21534],{"class":326,"line":2373},[324,21525,21526],{"class":867},"        m_Height",[324,21528,12446],{"class":863},[324,21530,3112],{"class":863},[324,21532,21533],{"class":867},"(height);",[324,21535,21536],{"class":772},"\u002F\u002F放到堆区\n",[324,21538,21539,21541,21543,21546,21548],{"class":326,"line":2378},[324,21540,4180],{"class":867},[324,21542,1908],{"class":863},[324,21544,21545],{"class":738},"\"有参构造函数\"",[324,21547,1908],{"class":863},[324,21549,1930],{"class":867},[324,21551,21552],{"class":326,"line":2384},[324,21553,2917],{"class":867},[324,21555,21556],{"class":326,"line":2405},[324,21557,21558],{"class":772},"    \u002F\u002F深拷贝解决上述问题\n",[324,21560,21561],{"class":326,"line":2410},[324,21562,21563],{"class":772},"    \u002F\u002F自己实现拷贝构造函数，解决浅拷贝带来的问题\n",[324,21565,21566,21568,21570,21572,21574,21576,21578],{"class":326,"line":2424},[324,21567,19248],{"class":734},[324,21569,868],{"class":867},[324,21571,7521],{"class":863},[324,21573,16298],{"class":734},[324,21575,11313],{"class":863},[324,21577,19],{"class":5945},[324,21579,874],{"class":867},[324,21581,21582],{"class":326,"line":2429},[324,21583,2760],{"class":867},[324,21585,21586,21588,21590,21593,21595],{"class":326,"line":2458},[324,21587,4180],{"class":867},[324,21589,1908],{"class":863},[324,21591,21592],{"class":738},"\"拷贝构造函数\"",[324,21594,1908],{"class":863},[324,21596,1930],{"class":867},[324,21598,21599],{"class":326,"line":2463},[324,21600,21601],{"class":772},"        \u002F\u002F编译器默认的写如下注释部分\n",[324,21603,21604],{"class":326,"line":2480},[324,21605,21606],{"class":772},"        \u002F\u002Fm_Age=p.m_Age;\n",[324,21608,21609],{"class":326,"line":2485},[324,21610,21611],{"class":772},"        \u002F\u002Fm_Height=p.m_Height;\n",[324,21613,21614,21616,21618],{"class":326,"line":2490},[324,21615,21516],{"class":867},[324,21617,913],{"class":863},[324,21619,21620],{"class":867},"p.m_Age;\n",[324,21622,21623],{"class":326,"line":2495},[324,21624,21625],{"class":772},"        \u002F\u002F深拷贝操作\n",[324,21627,21628,21630,21632,21634,21636,21638],{"class":326,"line":2509},[324,21629,21526],{"class":867},[324,21631,12446],{"class":863},[324,21633,3112],{"class":863},[324,21635,868],{"class":867},[324,21637,1319],{"class":863},[324,21639,21640],{"class":867},"p.m_Height);\n",[324,21642,21643],{"class":326,"line":2514},[324,21644,2917],{"class":867},[324,21646,21647],{"class":326,"line":3306},[324,21648,488],{"emptyLinePlaceholder":487},[324,21650,21651],{"class":326,"line":3320},[324,21652,19276],{"class":772},[324,21654,21655,21657],{"class":326,"line":3328},[324,21656,19281],{"class":734},[324,21658,2706],{"class":867},[324,21660,21661],{"class":326,"line":3333},[324,21662,2760],{"class":867},[324,21664,21665],{"class":326,"line":3339},[324,21666,21667],{"class":772},"        \u002F\u002F析构函数，将堆区开辟数据做释放操作\n",[324,21669,21670,21672,21675,21678,21681],{"class":326,"line":3345},[324,21671,3226],{"class":863},[324,21673,21674],{"class":867},"(m_Height ",[324,21676,21677],{"class":863},"!=",[324,21679,21680],{"class":916}," NULL",[324,21682,874],{"class":867},[324,21684,21685],{"class":326,"line":3350},[324,21686,3239],{"class":867},[324,21688,21689,21692,21695],{"class":326,"line":8677},[324,21690,21691],{"class":863},"            delete",[324,21693,21694],{"class":867}," m_Height;",[324,21696,21697],{"class":772}," \u002F\u002F释放堆区内存\n",[324,21699,21700,21703,21705,21707,21709],{"class":326,"line":8701},[324,21701,21702],{"class":867},"            m_Height",[324,21704,913],{"class":863},[324,21706,3122],{"class":916},[324,21708,923],{"class":867},[324,21710,21711],{"class":772}," \u002F\u002F防止野指针\n",[324,21713,21714],{"class":326,"line":8706},[324,21715,3258],{"class":867},[324,21717,21718,21720,21722],{"class":326,"line":8712},[324,21719,4180],{"class":867},[324,21721,1908],{"class":863},[324,21723,21724],{"class":738},"\"Person的析构函数调用\"\n",[324,21726,21727],{"class":326,"line":8739},[324,21728,2917],{"class":867},[324,21730,21731,21733],{"class":326,"line":8744},[324,21732,2715],{"class":863},[324,21734,16395],{"class":867},[324,21736,21737,21739,21741,21744],{"class":326,"line":8750},[324,21738,2715],{"class":863},[324,21740,7247],{"class":863},[324,21742,21743],{"class":867},"m_Height;",[324,21745,21746],{"class":772}," \u002F\u002F定义一个指针，指向身高\n",[324,21748,21749],{"class":326,"line":8762},[324,21750,4724],{"class":867},[324,21752,21753,21755,21757],{"class":326,"line":8774},[324,21754,6093],{"class":863},[324,21756,6317],{"class":734},[324,21758,2706],{"class":867},[324,21760,21761],{"class":326,"line":8786},[324,21762,2277],{"class":867},[324,21764,21765,21767,21769,21771,21773,21775,21778],{"class":326,"line":10445},[324,21766,20160],{"class":867},[324,21768,7859],{"class":734},[324,21770,868],{"class":867},[324,21772,1514],{"class":916},[324,21774,1242],{"class":867},[324,21776,21777],{"class":916},"160",[324,21779,3448],{"class":867},[324,21781,21782,21784,21786,21789,21791,21794,21796,21799,21801,21804,21806,21808],{"class":326,"line":10470},[324,21783,2282],{"class":867},[324,21785,1908],{"class":863},[324,21787,21788],{"class":738},"\"p1的年龄为:\"",[324,21790,1908],{"class":863},[324,21792,21793],{"class":867},"p1.m_Age",[324,21795,1908],{"class":863},[324,21797,21798],{"class":738},"\"身高为：\"",[324,21800,7148],{"class":863},[324,21802,21803],{"class":867},"p1.m_Height",[324,21805,1908],{"class":863},[324,21807,1973],{"class":867},[324,21809,21810],{"class":772},"  \u002F\u002F18\n",[324,21812,21813,21815,21817],{"class":326,"line":10493},[324,21814,20160],{"class":867},[324,21816,7762],{"class":734},[324,21818,18244],{"class":867},[324,21820,21821,21823,21825,21828,21830,21832,21834,21836,21838,21841,21843,21845],{"class":326,"line":10517},[324,21822,2282],{"class":867},[324,21824,1908],{"class":863},[324,21826,21827],{"class":738},"\"p2的年龄为：\"",[324,21829,1908],{"class":863},[324,21831,20190],{"class":867},[324,21833,1908],{"class":863},[324,21835,21798],{"class":738},[324,21837,7148],{"class":863},[324,21839,21840],{"class":867},"p2.m_Height",[324,21842,1908],{"class":863},[324,21844,1973],{"class":867},[324,21846,21810],{"class":772},[324,21848,21849],{"class":326,"line":10522},[324,21850,13939],{"class":867},[324,21852,21853],{"class":326,"line":10527},[324,21854,2296],{"class":867},[324,21856,21857,21859,21861],{"class":326,"line":10532},[324,21858,871],{"class":863},[324,21860,2703],{"class":734},[324,21862,2706],{"class":867},[324,21864,21865],{"class":326,"line":10541},[324,21866,2277],{"class":867},[324,21868,21869,21871],{"class":326,"line":10546},[324,21870,6362],{"class":734},[324,21872,6365],{"class":867},[324,21874,21875],{"class":326,"line":10552},[324,21876,2296],{"class":867},[19,21878,21879],{},"浅拷贝时，对象释放是先进后放，所以会先释放p2，然后再释放p1；所以就出现了两次释放内存，也就是会出现非法操作",[19,21881,21882],{},"浅拷贝带来的问题是堆区的内存重复释放",[19,21884,21885],{},[48,21886],{"alt":50,"src":21887},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-007.png",[19,21889,21890],{},"浅拷贝问题要使用深拷贝来解决",[19,21892,21893],{},[48,21894],{"alt":50,"src":21895},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-008.png",[19,21897,21898],{},"**总结：**如果属性有在堆区开辟的，一定要自己提供拷贝构造函数，防止浅拷贝带来的问题",[35,21900,21902],{"id":21901},"_826初始化列表","8.2.6初始化列表",[19,21904,21905],{},"作用：初始化属性",[19,21907,5910],{},[316,21909,21912],{"className":21910,"code":21911,"language":5916},[5914],"构造函数():属性1(值1),属性2(值2).....{}\n",[269,21913,21911],{"__ignoreMap":50},[19,21915,21916],{},"例子",[316,21918,21920],{"className":854,"code":21919,"language":856,"meta":50,"style":50},"#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",[269,21921,21922,21928,21938,21944,21948,21953,21957,21962,21967,21972,21977,21982,21987,21991,21996,22001,22044,22053,22071,22089,22107,22111,22115,22122,22129,22136,22140,22144,22152,22156,22160,22180,22189,22193,22197,22207,22211,22219],{"__ignoreMap":50},[324,21923,21924,21926],{"class":326,"line":327},[324,21925,2680],{"class":863},[324,21927,2683],{"class":738},[324,21929,21930,21932,21934,21936],{"class":326,"line":203},[324,21931,2688],{"class":863},[324,21933,2691],{"class":863},[324,21935,2694],{"class":734},[324,21937,2025],{"class":867},[324,21939,21940,21942],{"class":326,"line":338},[324,21941,15423],{"class":863},[324,21943,15900],{"class":734},[324,21945,21946],{"class":326,"line":344},[324,21947,2277],{"class":867},[324,21949,21950],{"class":326,"line":484},[324,21951,21952],{"class":863},"    public:\n",[324,21954,21955],{"class":326,"line":491},[324,21956,488],{"emptyLinePlaceholder":487},[324,21958,21959],{"class":326,"line":496},[324,21960,21961],{"class":772},"    \u002F\u002F\u002F\u002F传统方式初始化\n",[324,21963,21964],{"class":326,"line":502},[324,21965,21966],{"class":772},"    \u002F\u002FPerson(int a, int b, int c) {\n",[324,21968,21969],{"class":326,"line":508},[324,21970,21971],{"class":772},"    \u002F\u002F  m_A = a;\n",[324,21973,21974],{"class":326,"line":514},[324,21975,21976],{"class":772},"    \u002F\u002F  m_B = b;\n",[324,21978,21979],{"class":326,"line":2343},[324,21980,21981],{"class":772},"    \u002F\u002F  m_C = c;\n",[324,21983,21984],{"class":326,"line":2348},[324,21985,21986],{"class":772},"    \u002F\u002F}\n",[324,21988,21989],{"class":326,"line":2354},[324,21990,488],{"emptyLinePlaceholder":487},[324,21992,21993],{"class":326,"line":2359},[324,21994,21995],{"class":772},"    \u002F\u002F初始化列表方式初始化\n",[324,21997,21998],{"class":326,"line":2373},[324,21999,22000],{"class":772},"    \u002F\u002F使用有参构造函数\n",[324,22002,22003,22005,22007,22009,22011,22013,22015,22017,22019,22021,22023,22026,22029,22032,22035,22038,22041],{"class":326,"line":2378},[324,22004,19248],{"class":734},[324,22006,868],{"class":867},[324,22008,871],{"class":863},[324,22010,2130],{"class":5945},[324,22012,13164],{"class":867},[324,22014,871],{"class":863},[324,22016,3562],{"class":5945},[324,22018,13164],{"class":867},[324,22020,871],{"class":863},[324,22022,3578],{"class":5945},[324,22024,22025],{"class":867},") :",[324,22027,22028],{"class":734},"m_A",[324,22030,22031],{"class":867},"(a), ",[324,22033,22034],{"class":734},"m_B",[324,22036,22037],{"class":867},"(b), ",[324,22039,22040],{"class":734},"m_C",[324,22042,22043],{"class":867},"(c) {}\n",[324,22045,22046,22048,22051],{"class":326,"line":2384},[324,22047,15638],{"class":863},[324,22049,22050],{"class":734}," PrintPerson",[324,22052,11582],{"class":867},[324,22054,22055,22057,22059,22062,22064,22067,22069],{"class":326,"line":2405},[324,22056,10398],{"class":867},[324,22058,1908],{"class":863},[324,22060,22061],{"class":738}," \"mA:\"",[324,22063,2176],{"class":863},[324,22065,22066],{"class":867}," m_A ",[324,22068,1908],{"class":863},[324,22070,9569],{"class":867},[324,22072,22073,22075,22077,22080,22082,22085,22087],{"class":326,"line":2410},[324,22074,10398],{"class":867},[324,22076,1908],{"class":863},[324,22078,22079],{"class":738}," \"mB:\"",[324,22081,2176],{"class":863},[324,22083,22084],{"class":867}," m_B ",[324,22086,1908],{"class":863},[324,22088,9569],{"class":867},[324,22090,22091,22093,22095,22098,22100,22103,22105],{"class":326,"line":2424},[324,22092,10398],{"class":867},[324,22094,1908],{"class":863},[324,22096,22097],{"class":738}," \"mC:\"",[324,22099,2176],{"class":863},[324,22101,22102],{"class":867}," m_C ",[324,22104,1908],{"class":863},[324,22106,9569],{"class":867},[324,22108,22109],{"class":326,"line":2429},[324,22110,2917],{"class":867},[324,22112,22113],{"class":326,"line":2458},[324,22114,15951],{"class":863},[324,22116,22117,22119],{"class":326,"line":2463},[324,22118,2715],{"class":863},[324,22120,22121],{"class":867}," m_A;\n",[324,22123,22124,22126],{"class":326,"line":2480},[324,22125,2715],{"class":863},[324,22127,22128],{"class":867}," m_B;\n",[324,22130,22131,22133],{"class":326,"line":2485},[324,22132,2715],{"class":863},[324,22134,22135],{"class":867}," m_C;\n",[324,22137,22138],{"class":326,"line":2490},[324,22139,4724],{"class":867},[324,22141,22142],{"class":326,"line":2495},[324,22143,488],{"emptyLinePlaceholder":487},[324,22145,22146,22148,22150],{"class":326,"line":2509},[324,22147,871],{"class":863},[324,22149,2703],{"class":734},[324,22151,6707],{"class":867},[324,22153,22154],{"class":326,"line":2514},[324,22155,2277],{"class":867},[324,22157,22158],{"class":326,"line":3306},[324,22159,488],{"emptyLinePlaceholder":487},[324,22161,22162,22164,22166,22168,22170,22172,22174,22176,22178],{"class":326,"line":3320},[324,22163,20160],{"class":867},[324,22165,19],{"class":734},[324,22167,868],{"class":867},[324,22169,1082],{"class":916},[324,22171,13164],{"class":867},[324,22173,944],{"class":916},[324,22175,13164],{"class":867},[324,22177,938],{"class":916},[324,22179,3448],{"class":867},[324,22181,22182,22184,22187],{"class":326,"line":3328},[324,22183,16595],{"class":867},[324,22185,22186],{"class":734},"PrintPerson",[324,22188,6365],{"class":867},[324,22190,22191],{"class":326,"line":3333},[324,22192,488],{"emptyLinePlaceholder":487},[324,22194,22195],{"class":326,"line":3339},[324,22196,488],{"emptyLinePlaceholder":487},[324,22198,22199,22201,22203,22205],{"class":326,"line":3345},[324,22200,3033],{"class":734},[324,22202,868],{"class":867},[324,22204,3038],{"class":738},[324,22206,3448],{"class":867},[324,22208,22209],{"class":326,"line":3350},[324,22210,488],{"emptyLinePlaceholder":487},[324,22212,22213,22215,22217],{"class":326,"line":8677},[324,22214,4819],{"class":863},[324,22216,4822],{"class":916},[324,22218,2025],{"class":867},[324,22220,22221],{"class":326,"line":8701},[324,22222,2296],{"class":867},[19,22224,22225,22226,22229,22230],{},"通过有参构造函数的参数赋值给后面的属性的形式实现初始化列表的,",[116,22227,22228],{},"参数名就是定义的对象属性","，",[116,22231,22232],{},"属性后面的值为有参构造函数的形参",[316,22234,22236],{"className":854,"code":22235,"language":856,"meta":50,"style":50},"Person(int a.int b,int b):m_A(a),m_B(c),m_C(b) {}\n",[269,22237,22238],{"__ignoreMap":50},[324,22239,22240,22242,22244,22246,22249,22251,22254,22256,22259,22261,22264,22266,22269,22271],{"class":326,"line":327},[324,22241,19775],{"class":734},[324,22243,868],{"class":867},[324,22245,871],{"class":863},[324,22247,22248],{"class":867}," a.",[324,22250,871],{"class":863},[324,22252,22253],{"class":867}," b,",[324,22255,871],{"class":863},[324,22257,22258],{"class":867}," b):",[324,22260,22028],{"class":734},[324,22262,22263],{"class":867},"(a),",[324,22265,22034],{"class":734},[324,22267,22268],{"class":867},"(c),",[324,22270,22040],{"class":734},[324,22272,22273],{"class":867},"(b) {}\n",[35,22275,22277],{"id":22276},"_827类对象作为类成员","8.2.7类对象作为类成员",[19,22279,22280],{},"c++类中的成员可以是另一个类的对象，该成员被称为类成员",[19,22282,15362],{},[316,22284,22286],{"className":854,"code":22285,"language":856,"meta":50,"style":50},"A{};\nB\n{\n    A a;\n}\n\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[269,22287,22288,22293,22298,22302,22307,22311],{"__ignoreMap":50},[324,22289,22290],{"class":326,"line":327},[324,22291,22292],{"class":867},"A{};\n",[324,22294,22295],{"class":326,"line":203},[324,22296,22297],{"class":867},"B\n",[324,22299,22300],{"class":326,"line":338},[324,22301,2277],{"class":867},[324,22303,22304],{"class":326,"line":344},[324,22305,22306],{"class":867},"    A a;\n",[324,22308,22309],{"class":326,"line":484},[324,22310,2296],{"class":867},[324,22312,22313],{"class":326,"line":491},[324,22314,22315],{"class":772},"\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[19,22317,22318],{},"案例",[316,22320,22322],{"className":854,"code":22321,"language":856,"meta":50,"style":50},"\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",[269,22323,22324,22329,22336,22340,22345,22350,22364,22368,22378,22389,22393,22400,22404,22417,22421,22426,22431,22435,22441,22445,22449,22453,22484,22488,22499,22503,22509,22513,22526,22530,22534,22538,22543,22548,22552,22560,22564,22581,22600,22604,22612,22616,22622],{"__ignoreMap":50},[324,22325,22326],{"class":326,"line":327},[324,22327,22328],{"class":772},"\u002F\u002Fphone这个对象作为Person这个类的类成员\n",[324,22330,22331,22333],{"class":326,"line":203},[324,22332,15423],{"class":863},[324,22334,22335],{"class":734}," Phone\n",[324,22337,22338],{"class":326,"line":338},[324,22339,2277],{"class":867},[324,22341,22342],{"class":326,"line":344},[324,22343,22344],{"class":867},"public：\n",[324,22346,22347],{"class":326,"line":484},[324,22348,22349],{"class":772},"    \u002F\u002F 赋值(构造函数)\n",[324,22351,22352,22355,22357,22359,22362],{"class":326,"line":491},[324,22353,22354],{"class":734},"    Phone",[324,22356,868],{"class":867},[324,22358,15646],{"class":734},[324,22360,22361],{"class":5945}," pName",[324,22363,874],{"class":867},[324,22365,22366],{"class":326,"line":496},[324,22367,2760],{"class":867},[324,22369,22370,22373,22375],{"class":326,"line":502},[324,22371,22372],{"class":867},"        m_pName",[324,22374,913],{"class":863},[324,22376,22377],{"class":867},"pName;\n",[324,22379,22380,22382,22384,22387],{"class":326,"line":508},[324,22381,4180],{"class":867},[324,22383,1908],{"class":863},[324,22385,22386],{"class":738},"\"Phone的构造函数调用\"",[324,22388,2025],{"class":867},[324,22390,22391],{"class":326,"line":514},[324,22392,2917],{"class":867},[324,22394,22395,22398],{"class":326,"line":2343},[324,22396,22397],{"class":734},"    ~Phone",[324,22399,2706],{"class":867},[324,22401,22402],{"class":326,"line":2348},[324,22403,2760],{"class":867},[324,22405,22406,22408,22410,22413,22415],{"class":326,"line":2354},[324,22407,4180],{"class":867},[324,22409,1908],{"class":863},[324,22411,22412],{"class":738},"\"Phone析构函数调用\"",[324,22414,1908],{"class":863},[324,22416,1930],{"class":867},[324,22418,22419],{"class":326,"line":2359},[324,22420,2917],{"class":867},[324,22422,22423],{"class":326,"line":2373},[324,22424,22425],{"class":772},"    \u002F\u002F\n",[324,22427,22428],{"class":326,"line":2378},[324,22429,22430],{"class":867},"    string m_PName;\n",[324,22432,22433],{"class":326,"line":2384},[324,22434,4724],{"class":867},[324,22436,22437,22439],{"class":326,"line":2405},[324,22438,15423],{"class":863},[324,22440,15900],{"class":734},[324,22442,22443],{"class":326,"line":2410},[324,22444,2277],{"class":867},[324,22446,22447],{"class":326,"line":2424},[324,22448,15445],{"class":863},[324,22450,22451],{"class":326,"line":2429},[324,22452,17723],{"class":772},[324,22454,22455,22457,22459,22461,22463,22465,22467,22470,22473,22475,22478,22481],{"class":326,"line":2458},[324,22456,19248],{"class":734},[324,22458,868],{"class":867},[324,22460,15646],{"class":734},[324,22462,15649],{"class":5945},[324,22464,1242],{"class":867},[324,22466,15646],{"class":734},[324,22468,22469],{"class":5945}," pname",[324,22471,22472],{"class":867},"):",[324,22474,15739],{"class":734},[324,22476,22477],{"class":867},"(name),m_phone.",[324,22479,22480],{"class":734},"m_PName",[324,22482,22483],{"class":867},"(pname) \n",[324,22485,22486],{"class":326,"line":2463},[324,22487,2760],{"class":867},[324,22489,22490,22492,22494,22497],{"class":326,"line":2480},[324,22491,4180],{"class":867},[324,22493,1908],{"class":863},[324,22495,22496],{"class":738},"\"Person的构造函数调用\"",[324,22498,2025],{"class":867},[324,22500,22501],{"class":326,"line":2485},[324,22502,2917],{"class":867},[324,22504,22505,22507],{"class":326,"line":2490},[324,22506,19281],{"class":734},[324,22508,2706],{"class":867},[324,22510,22511],{"class":326,"line":2495},[324,22512,2760],{"class":867},[324,22514,22515,22517,22519,22522,22524],{"class":326,"line":2509},[324,22516,4180],{"class":867},[324,22518,1908],{"class":863},[324,22520,22521],{"class":738},"\"Person析构函数调用\"",[324,22523,1908],{"class":863},[324,22525,1930],{"class":867},[324,22527,22528],{"class":326,"line":2514},[324,22529,2917],{"class":867},[324,22531,22532],{"class":326,"line":3306},[324,22533,8509],{"class":772},[324,22535,22536],{"class":326,"line":3320},[324,22537,15621],{"class":867},[324,22539,22540],{"class":326,"line":3328},[324,22541,22542],{"class":772},"    \u002F\u002F手机\n",[324,22544,22545],{"class":326,"line":3333},[324,22546,22547],{"class":867},"    Phone m_Phone;\n",[324,22549,22550],{"class":326,"line":3339},[324,22551,4724],{"class":867},[324,22553,22554,22556,22558],{"class":326,"line":3345},[324,22555,6093],{"class":863},[324,22557,6317],{"class":734},[324,22559,2706],{"class":867},[324,22561,22562],{"class":326,"line":3350},[324,22563,2277],{"class":867},[324,22565,22566,22568,22570,22572,22574,22576,22579],{"class":326,"line":8677},[324,22567,20160],{"class":867},[324,22569,19],{"class":734},[324,22571,868],{"class":867},[324,22573,8645],{"class":738},[324,22575,1242],{"class":867},[324,22577,22578],{"class":738},"\"安卓\"",[324,22580,3448],{"class":867},[324,22582,22583,22585,22587,22590,22592,22595,22597],{"class":326,"line":8701},[324,22584,2282],{"class":867},[324,22586,1908],{"class":863},[324,22588,22589],{"class":867},"p.Name",[324,22591,1908],{"class":863},[324,22593,22594],{"class":738},"\"拿着：\"",[324,22596,1908],{"class":863},[324,22598,22599],{"class":867},"p.m_phone.m_PName;\n",[324,22601,22602],{"class":326,"line":8706},[324,22603,2296],{"class":867},[324,22605,22606,22608,22610],{"class":326,"line":8712},[324,22607,871],{"class":863},[324,22609,2703],{"class":734},[324,22611,2706],{"class":867},[324,22613,22614],{"class":326,"line":8739},[324,22615,2277],{"class":867},[324,22617,22618,22620],{"class":326,"line":8744},[324,22619,6362],{"class":734},[324,22621,6365],{"class":867},[324,22623,22624],{"class":326,"line":8750},[324,22625,2296],{"class":867},[19,22627,9754],{},[316,22629,22631],{"className":854,"code":22630,"language":856,"meta":50,"style":50},"    \u002F\u002F不需要写这个：\n    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[269,22632,22633,22638],{"__ignoreMap":50},[324,22634,22635],{"class":326,"line":327},[324,22636,22637],{"class":772},"    \u002F\u002F不需要写这个：\n",[324,22639,22640],{"class":326,"line":203},[324,22641,22642],{"class":772},"    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[19,22644,22645],{},"因为Phone这个类里面写了有参构造函数，所以不需要调用他的属性直接传值通过有参构造函数就可以实现初始化phone",[316,22647,22649],{"className":854,"code":22648,"language":856,"meta":50,"style":50},"Person(string name.string pname):m_name(name),m_phone(pname) {}\n",[269,22650,22651],{"__ignoreMap":50},[324,22652,22653,22655,22658,22660,22663,22666],{"class":326,"line":327},[324,22654,19775],{"class":734},[324,22656,22657],{"class":867},"(string name.string pname):",[324,22659,15739],{"class":734},[324,22661,22662],{"class":867},"(name),",[324,22664,22665],{"class":734},"m_phone",[324,22667,22668],{"class":867},"(pname) {}\n",[19,22670,22671,22672,913,22675],{},"采用的是隐式转换法，实际为如下：\n",[269,22673,22674],{},"m_phone(pname)",[269,22676,22677],{},"Phone m_phone=pname",[19,22679,22680,22683],{},[116,22681,22682],{},"总结","：这里可以直接类比人的胳膊腿，肯定得全有之后才能构造人！析构函数是遵循先进后出的规律！（析构函数的调用顺序与构造函数的调用顺序是相反的）",[19,22685,22686],{},"因此，这里应当是先Phone构造函数调用，然后再Person构造函数调用；Person的析构函数先调用，Phone的析构函数在调用；",[35,22688,22690],{"id":22689},"_828静态对象","8.2.8静态对象",[19,22692,22693],{},"静态对象在成员对象前static，称为静态对象",[19,22695,22696],{},"静态对象分为两类：",[192,22698,22699],{},[195,22700,22701],{},"静态成员变量",[1871,22703,22704,22707,22710],{},[195,22705,22706],{},"①所有对象共享同一份数据   (理解的话可以当作指针，例如a=10;b=20;此时a=20，这里只例子仅仅为解释共享同一份数据)",[195,22708,22709],{},"②在编译阶段分配内存",[195,22711,22712],{},"③类内声明，类外初始化",[192,22714,22715],{"start":203},[195,22716,22717],{},"静态成员函数",[1871,22719,22720,22723],{},[195,22721,22722],{},"①所有对象共享同一个函数",[195,22724,22725],{},"②静态成员函数只能访问静态成员变量",[151,22727,22729],{"id":22728},"_8281静态成员变量","8.2.8.1静态成员变量",[316,22731,22733],{"className":854,"code":22732,"language":856,"meta":50,"style":50},"#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",[269,22734,22735,22741,22751,22757,22761,22765,22770,22775,22780,22788,22792,22796,22800,22808,22812,22816,22821,22834,22838,22846,22850,22856],{"__ignoreMap":50},[324,22736,22737,22739],{"class":326,"line":327},[324,22738,2680],{"class":863},[324,22740,2683],{"class":738},[324,22742,22743,22745,22747,22749],{"class":326,"line":203},[324,22744,2688],{"class":863},[324,22746,2691],{"class":863},[324,22748,2694],{"class":734},[324,22750,2025],{"class":867},[324,22752,22753,22755],{"class":326,"line":338},[324,22754,15423],{"class":863},[324,22756,15900],{"class":734},[324,22758,22759],{"class":326,"line":344},[324,22760,2277],{"class":867},[324,22762,22763],{"class":326,"line":484},[324,22764,15445],{"class":863},[324,22766,22767],{"class":326,"line":491},[324,22768,22769],{"class":772},"    \u002F\u002F非静态成员变量\n",[324,22771,22772],{"class":326,"line":496},[324,22773,22774],{"class":772},"    \u002F\u002F int m_A;\n",[324,22776,22777],{"class":326,"line":502},[324,22778,22779],{"class":772},"    \u002F\u002F定义静态成员变量\n",[324,22781,22782,22784,22786],{"class":326,"line":508},[324,22783,11749],{"class":863},[324,22785,3112],{"class":863},[324,22787,22121],{"class":867},[324,22789,22790],{"class":326,"line":514},[324,22791,488],{"emptyLinePlaceholder":487},[324,22793,22794],{"class":326,"line":2343},[324,22795,488],{"emptyLinePlaceholder":487},[324,22797,22798],{"class":326,"line":2348},[324,22799,4724],{"class":867},[324,22801,22802,22804,22806],{"class":326,"line":2354},[324,22803,6093],{"class":863},[324,22805,6317],{"class":734},[324,22807,2706],{"class":867},[324,22809,22810],{"class":326,"line":2359},[324,22811,2277],{"class":867},[324,22813,22814],{"class":326,"line":2373},[324,22815,16042],{"class":867},[324,22817,22818],{"class":326,"line":2378},[324,22819,22820],{"class":772},"    \u002F\u002F输出类成员变量这块内存\n",[324,22822,22823,22825,22827,22830,22832],{"class":326,"line":2384},[324,22824,2282],{"class":867},[324,22826,1908],{"class":863},[324,22828,22829],{"class":867},"p.m_A",[324,22831,1908],{"class":863},[324,22833,1930],{"class":867},[324,22835,22836],{"class":326,"line":2405},[324,22837,2296],{"class":867},[324,22839,22840,22842,22844],{"class":326,"line":2410},[324,22841,871],{"class":863},[324,22843,2703],{"class":734},[324,22845,2706],{"class":867},[324,22847,22848],{"class":326,"line":2424},[324,22849,2277],{"class":867},[324,22851,22852,22854],{"class":326,"line":2429},[324,22853,6362],{"class":734},[324,22855,2706],{"class":867},[324,22857,22858],{"class":326,"line":2458},[324,22859,2296],{"class":867},[19,22861,22862],{},"此时输出是报错的：无法解析外部命令",[19,22864,22865],{},"解决这一问题：必须用到类内声明，类外初始化操作",[316,22867,22869],{"className":854,"code":22868,"language":856,"meta":50,"style":50},"#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",[269,22870,22871,22877,22887,22893,22897,22901,22906,22914,22918,22923,22938,22946,22950,22954,22959,22964,22976,22981,22992,22997,23002,23015,23019,23027,23031,23037],{"__ignoreMap":50},[324,22872,22873,22875],{"class":326,"line":327},[324,22874,2680],{"class":863},[324,22876,2683],{"class":738},[324,22878,22879,22881,22883,22885],{"class":326,"line":203},[324,22880,2688],{"class":863},[324,22882,2691],{"class":863},[324,22884,2694],{"class":734},[324,22886,2025],{"class":867},[324,22888,22889,22891],{"class":326,"line":338},[324,22890,15423],{"class":863},[324,22892,15900],{"class":734},[324,22894,22895],{"class":326,"line":344},[324,22896,2277],{"class":867},[324,22898,22899],{"class":326,"line":484},[324,22900,15445],{"class":863},[324,22902,22903],{"class":326,"line":491},[324,22904,22905],{"class":772},"    \u002F\u002F类内声明\n",[324,22907,22908,22910,22912],{"class":326,"line":496},[324,22909,11749],{"class":863},[324,22911,3112],{"class":863},[324,22913,22121],{"class":867},[324,22915,22916],{"class":326,"line":502},[324,22917,4724],{"class":867},[324,22919,22920],{"class":326,"line":508},[324,22921,22922],{"class":772},"\u002F\u002F类外初始化\n",[324,22924,22925,22927,22929,22932,22934,22936],{"class":326,"line":514},[324,22926,871],{"class":863},[324,22928,16298],{"class":734},[324,22930,22931],{"class":867},"::m_A",[324,22933,913],{"class":863},[324,22935,1310],{"class":916},[324,22937,2025],{"class":867},[324,22939,22940,22942,22944],{"class":326,"line":2343},[324,22941,6093],{"class":863},[324,22943,6317],{"class":734},[324,22945,2706],{"class":867},[324,22947,22948],{"class":326,"line":2348},[324,22949,2277],{"class":867},[324,22951,22952],{"class":326,"line":2354},[324,22953,16042],{"class":867},[324,22955,22956],{"class":326,"line":2359},[324,22957,22958],{"class":772},"    \u002F\u002F访问变量的原内存空间\n",[324,22960,22961],{"class":326,"line":2373},[324,22962,22963],{"class":772},"    \u002F\u002F100\n",[324,22965,22966,22968,22970,22972,22974],{"class":326,"line":2378},[324,22967,2282],{"class":867},[324,22969,1908],{"class":863},[324,22971,22829],{"class":867},[324,22973,1908],{"class":863},[324,22975,1930],{"class":867},[324,22977,22978],{"class":326,"line":2384},[324,22979,22980],{"class":867},"    Person p2;\n",[324,22982,22983,22986,22988,22990],{"class":326,"line":2405},[324,22984,22985],{"class":867},"    p2.m_A",[324,22987,913],{"class":863},[324,22989,2453],{"class":916},[324,22991,2025],{"class":867},[324,22993,22994],{"class":326,"line":2410},[324,22995,22996],{"class":772},"    \u002F\u002F继续访问这片空间\n",[324,22998,22999],{"class":326,"line":2424},[324,23000,23001],{"class":772},"    \u002F\u002F200\n",[324,23003,23004,23006,23008,23011,23013],{"class":326,"line":2429},[324,23005,2282],{"class":867},[324,23007,1908],{"class":863},[324,23009,23010],{"class":867},"p2.m_A",[324,23012,1908],{"class":863},[324,23014,1930],{"class":867},[324,23016,23017],{"class":326,"line":2458},[324,23018,2296],{"class":867},[324,23020,23021,23023,23025],{"class":326,"line":2463},[324,23022,871],{"class":863},[324,23024,2703],{"class":734},[324,23026,2706],{"class":867},[324,23028,23029],{"class":326,"line":2480},[324,23030,2277],{"class":867},[324,23032,23033,23035],{"class":326,"line":2485},[324,23034,6362],{"class":734},[324,23036,6365],{"class":867},[324,23038,23039],{"class":326,"line":2490},[324,23040,2296],{"class":867},[19,23042,23043],{},[116,23044,23045],{},"静态变量的访问",[316,23047,23049],{"className":854,"code":23048,"language":856,"meta":50,"style":50},"#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",[269,23050,23051,23057,23067,23073,23077,23081,23085,23093,23097,23102,23110,23114,23118,23132,23147,23155,23159,23164,23169,23174,23179,23191,23196,23201,23215,23232,23236,23244,23248,23254],{"__ignoreMap":50},[324,23052,23053,23055],{"class":326,"line":327},[324,23054,2680],{"class":863},[324,23056,2683],{"class":738},[324,23058,23059,23061,23063,23065],{"class":326,"line":203},[324,23060,2688],{"class":863},[324,23062,2691],{"class":863},[324,23064,2694],{"class":734},[324,23066,2025],{"class":867},[324,23068,23069,23071],{"class":326,"line":338},[324,23070,15423],{"class":863},[324,23072,15900],{"class":734},[324,23074,23075],{"class":326,"line":344},[324,23076,2277],{"class":867},[324,23078,23079],{"class":326,"line":484},[324,23080,15445],{"class":863},[324,23082,23083],{"class":326,"line":491},[324,23084,22905],{"class":772},[324,23086,23087,23089,23091],{"class":326,"line":496},[324,23088,11749],{"class":863},[324,23090,3112],{"class":863},[324,23092,22121],{"class":867},[324,23094,23095],{"class":326,"line":502},[324,23096,15951],{"class":863},[324,23098,23099],{"class":326,"line":508},[324,23100,23101],{"class":772},"    \u002F\u002F静态成员变量也是有访问权限的\n",[324,23103,23104,23106,23108],{"class":326,"line":514},[324,23105,11749],{"class":863},[324,23107,3112],{"class":863},[324,23109,22128],{"class":867},[324,23111,23112],{"class":326,"line":2343},[324,23113,4724],{"class":867},[324,23115,23116],{"class":326,"line":2348},[324,23117,22922],{"class":772},[324,23119,23120,23122,23124,23126,23128,23130],{"class":326,"line":2354},[324,23121,871],{"class":863},[324,23123,16298],{"class":734},[324,23125,22931],{"class":867},[324,23127,913],{"class":863},[324,23129,1310],{"class":916},[324,23131,2025],{"class":867},[324,23133,23134,23136,23138,23141,23143,23145],{"class":326,"line":2359},[324,23135,871],{"class":863},[324,23137,16298],{"class":734},[324,23139,23140],{"class":867},"::m_B",[324,23142,913],{"class":863},[324,23144,1564],{"class":916},[324,23146,2025],{"class":867},[324,23148,23149,23151,23153],{"class":326,"line":2373},[324,23150,6093],{"class":863},[324,23152,6386],{"class":734},[324,23154,2706],{"class":867},[324,23156,23157],{"class":326,"line":2378},[324,23158,2277],{"class":867},[324,23160,23161],{"class":326,"line":2384},[324,23162,23163],{"class":772},"    \u002F\u002F静态成员变量 不属于某个对象上，所有对象都共享同一份数据\n",[324,23165,23166],{"class":326,"line":2405},[324,23167,23168],{"class":772},"    \u002F\u002F静态成员变量有两种访问方式：\n",[324,23170,23171],{"class":326,"line":2410},[324,23172,23173],{"class":772},"    \u002F\u002F1.通过对象进行访问\n",[324,23175,23176],{"class":326,"line":2424},[324,23177,23178],{"class":867},"    Person p;  \n",[324,23180,23181,23183,23185,23187,23189],{"class":326,"line":2429},[324,23182,2282],{"class":867},[324,23184,1908],{"class":863},[324,23186,22829],{"class":867},[324,23188,1908],{"class":863},[324,23190,1930],{"class":867},[324,23192,23193],{"class":326,"line":2458},[324,23194,23195],{"class":772},"    \u002F\u002F这里其实也可以不用创建对象，因为它本身也不属于某个对象，采用下面方法\n",[324,23197,23198],{"class":326,"line":2463},[324,23199,23200],{"class":772},"    \u002F\u002F2.通过类名进行访问\n",[324,23202,23203,23205,23207,23209,23211,23213],{"class":326,"line":2480},[324,23204,2282],{"class":867},[324,23206,1908],{"class":863},[324,23208,19775],{"class":734},[324,23210,22931],{"class":867},[324,23212,1908],{"class":863},[324,23214,1930],{"class":867},[324,23216,23217,23219,23221,23223,23225,23227,23229],{"class":326,"line":2485},[324,23218,2282],{"class":867},[324,23220,1908],{"class":863},[324,23222,19775],{"class":734},[324,23224,23140],{"class":867},[324,23226,1908],{"class":863},[324,23228,1973],{"class":867},[324,23230,23231],{"class":772}," \u002F\u002F没有访问权限，报错\n",[324,23233,23234],{"class":326,"line":2490},[324,23235,2296],{"class":867},[324,23237,23238,23240,23242],{"class":326,"line":2495},[324,23239,871],{"class":863},[324,23241,2703],{"class":734},[324,23243,2706],{"class":867},[324,23245,23246],{"class":326,"line":2509},[324,23247,2277],{"class":867},[324,23249,23250,23252],{"class":326,"line":2514},[324,23251,6431],{"class":734},[324,23253,6365],{"class":867},[324,23255,23256],{"class":326,"line":3306},[324,23257,2296],{"class":867},[151,23259,23261],{"id":23260},"_8282静态成员函数","8.2.8.2静态成员函数",[19,23263,23264],{},"1.静态成员函数定义与访问",[316,23266,23268],{"className":854,"code":23267,"language":856,"meta":50,"style":50},"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",[269,23269,23270,23276,23280,23284,23289,23300,23304,23318,23322,23326,23334,23338,23343,23348,23352,23360,23365,23375],{"__ignoreMap":50},[324,23271,23272,23274],{"class":326,"line":327},[324,23273,15423],{"class":863},[324,23275,15900],{"class":734},[324,23277,23278],{"class":326,"line":203},[324,23279,2277],{"class":867},[324,23281,23282],{"class":326,"line":338},[324,23283,15445],{"class":863},[324,23285,23286],{"class":326,"line":344},[324,23287,23288],{"class":772},"    \u002F\u002F在公共权限下定义静态成员函数\n",[324,23290,23291,23293,23296,23298],{"class":326,"line":484},[324,23292,11749],{"class":863},[324,23294,23295],{"class":863}," void",[324,23297,12114],{"class":734},[324,23299,2706],{"class":867},[324,23301,23302],{"class":326,"line":491},[324,23303,2760],{"class":867},[324,23305,23306,23309,23311,23314,23316],{"class":326,"line":496},[324,23307,23308],{"class":867},"        coout",[324,23310,1908],{"class":863},[324,23312,23313],{"class":738},"\"静态成员函数的调用\"",[324,23315,1908],{"class":863},[324,23317,1930],{"class":867},[324,23319,23320],{"class":326,"line":502},[324,23321,2917],{"class":867},[324,23323,23324],{"class":326,"line":508},[324,23325,4724],{"class":867},[324,23327,23328,23330,23332],{"class":326,"line":514},[324,23329,6093],{"class":863},[324,23331,6317],{"class":734},[324,23333,2706],{"class":867},[324,23335,23336],{"class":326,"line":2343},[324,23337,2277],{"class":867},[324,23339,23340],{"class":326,"line":2348},[324,23341,23342],{"class":772},"    \u002F\u002F静态成员函数的调用方式:\n",[324,23344,23345],{"class":326,"line":2354},[324,23346,23347],{"class":772},"    \u002F\u002F1.通过对象访问\n",[324,23349,23350],{"class":326,"line":2359},[324,23351,16042],{"class":867},[324,23353,23354,23356,23358],{"class":326,"line":2373},[324,23355,16595],{"class":867},[324,23357,12280],{"class":734},[324,23359,6365],{"class":867},[324,23361,23362],{"class":326,"line":2378},[324,23363,23364],{"class":772},"    \u002F\u002F2.通过类名访问\n",[324,23366,23367,23369,23371,23373],{"class":326,"line":2384},[324,23368,19248],{"class":734},[324,23370,18461],{"class":867},[324,23372,12280],{"class":734},[324,23374,6365],{"class":867},[324,23376,23377],{"class":326,"line":2405},[324,23378,2296],{"class":867},[192,23380,23381],{"start":203},[195,23382,23383],{},"静态成员函数只能访问静态成员变量",[316,23385,23387],{"className":854,"code":23386,"language":856,"meta":50,"style":50},"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",[269,23388,23389,23395,23399,23403,23407,23417,23421,23435,23440,23452,23456,23467,23477,23481,23485,23489,23499,23503,23516,23520,23524,23528,23532,23546,23554,23558,23562,23566,23570,23578,23582,23592,23597,23601,23609,23613,23619],{"__ignoreMap":50},[324,23390,23391,23393],{"class":326,"line":327},[324,23392,15423],{"class":863},[324,23394,15900],{"class":734},[324,23396,23397],{"class":326,"line":203},[324,23398,2277],{"class":867},[324,23400,23401],{"class":326,"line":338},[324,23402,15445],{"class":863},[324,23404,23405],{"class":326,"line":344},[324,23406,23288],{"class":772},[324,23408,23409,23411,23413,23415],{"class":326,"line":484},[324,23410,11749],{"class":863},[324,23412,23295],{"class":863},[324,23414,12114],{"class":734},[324,23416,2706],{"class":867},[324,23418,23419],{"class":326,"line":491},[324,23420,2760],{"class":867},[324,23422,23423,23426,23428,23430,23432],{"class":326,"line":496},[324,23424,23425],{"class":867},"        m_A",[324,23427,913],{"class":863},[324,23429,1175],{"class":916},[324,23431,923],{"class":867},[324,23433,23434],{"class":772}," \u002F\u002F静态成员函数可以访问 静态成员变量\n",[324,23436,23437],{"class":326,"line":502},[324,23438,23439],{"class":772},"        \u002F\u002Fm_B=200;\u002F\u002F这行直接报错，因为Person::func();调用函数时，编译器是不知道改p1的m_B还是p2的m_B;m_A是对所有对象公用，但是m_B专属于某个对象\n",[324,23441,23442,23444,23446,23448,23450],{"class":326,"line":508},[324,23443,23308],{"class":867},[324,23445,1908],{"class":863},[324,23447,23313],{"class":738},[324,23449,1908],{"class":863},[324,23451,1930],{"class":867},[324,23453,23454],{"class":326,"line":514},[324,23455,2917],{"class":867},[324,23457,23458,23460,23462,23464],{"class":326,"line":2343},[324,23459,11749],{"class":863},[324,23461,3112],{"class":863},[324,23463,16177],{"class":867},[324,23465,23466],{"class":772}," \u002F\u002F静态成员变量\n",[324,23468,23469,23471,23474],{"class":326,"line":2348},[324,23470,2715],{"class":863},[324,23472,23473],{"class":867}," m_B;",[324,23475,23476],{"class":772}," \u002F\u002F非静态成员变量\n",[324,23478,23479],{"class":326,"line":2354},[324,23480,488],{"emptyLinePlaceholder":487},[324,23482,23483],{"class":326,"line":2359},[324,23484,15951],{"class":863},[324,23486,23487],{"class":326,"line":2373},[324,23488,23101],{"class":772},[324,23490,23491,23493,23495,23497],{"class":326,"line":2378},[324,23492,11749],{"class":863},[324,23494,23295],{"class":863},[324,23496,14347],{"class":734},[324,23498,2706],{"class":867},[324,23500,23501],{"class":326,"line":2384},[324,23502,2760],{"class":867},[324,23504,23505,23507,23509,23512,23514],{"class":326,"line":2405},[324,23506,4180],{"class":867},[324,23508,1908],{"class":863},[324,23510,23511],{"class":738},"\"这是私有权限下的静态函数调用\"",[324,23513,1908],{"class":863},[324,23515,1930],{"class":867},[324,23517,23518],{"class":326,"line":2410},[324,23519,2917],{"class":867},[324,23521,23522],{"class":326,"line":2424},[324,23523,488],{"emptyLinePlaceholder":487},[324,23525,23526],{"class":326,"line":2429},[324,23527,488],{"emptyLinePlaceholder":487},[324,23529,23530],{"class":326,"line":2458},[324,23531,4724],{"class":867},[324,23533,23534,23536,23538,23540,23542,23544],{"class":326,"line":2463},[324,23535,871],{"class":863},[324,23537,16298],{"class":734},[324,23539,22931],{"class":867},[324,23541,913],{"class":863},[324,23543,1056],{"class":916},[324,23545,2025],{"class":867},[324,23547,23548,23550,23552],{"class":326,"line":2480},[324,23549,6093],{"class":863},[324,23551,6317],{"class":734},[324,23553,2706],{"class":867},[324,23555,23556],{"class":326,"line":2485},[324,23557,2277],{"class":867},[324,23559,23560],{"class":326,"line":2490},[324,23561,23342],{"class":772},[324,23563,23564],{"class":326,"line":2495},[324,23565,23347],{"class":772},[324,23567,23568],{"class":326,"line":2509},[324,23569,16042],{"class":867},[324,23571,23572,23574,23576],{"class":326,"line":2514},[324,23573,16595],{"class":867},[324,23575,12280],{"class":734},[324,23577,6365],{"class":867},[324,23579,23580],{"class":326,"line":3306},[324,23581,23364],{"class":772},[324,23583,23584,23586,23588,23590],{"class":326,"line":3320},[324,23585,19248],{"class":734},[324,23587,18461],{"class":867},[324,23589,12280],{"class":734},[324,23591,6365],{"class":867},[324,23593,23594],{"class":326,"line":3328},[324,23595,23596],{"class":772},"    \u002F\u002FPerson::func2();   报错，类外是访问不到私有静态成员函数的\n",[324,23598,23599],{"class":326,"line":3333},[324,23600,2296],{"class":867},[324,23602,23603,23605,23607],{"class":326,"line":3339},[324,23604,871],{"class":863},[324,23606,2703],{"class":734},[324,23608,2706],{"class":867},[324,23610,23611],{"class":326,"line":3345},[324,23612,2277],{"class":867},[324,23614,23615,23617],{"class":326,"line":3350},[324,23616,6362],{"class":734},[324,23618,6365],{"class":867},[324,23620,23621],{"class":326,"line":8677},[324,23622,2296],{"class":867},[35,23624,23626],{"id":23625},"_83c对象模型和this指针","8.3C++对象模型和this指针",[151,23628,23630],{"id":23629},"_831成员变量和成员函数分开存储","8.3.1成员变量和成员函数分开存储",[19,23632,23633],{},"在c++中，类内的成员变量和成员函数分开存储",[19,23635,23636],{},"只有非静态成员变量才属于类的对象上",[575,23638,23640],{"id":23639},"_8311空对象占的内存大小","8.3.1.1空对象占的内存大小",[316,23642,23644],{"className":854,"code":23643,"language":856,"meta":50,"style":50},"#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",[269,23645,23646,23653,23663,23669,23673,23677,23681,23689,23693,23697,23720,23724,23732,23736,23742],{"__ignoreMap":50},[324,23647,23648,23650],{"class":326,"line":327},[324,23649,2680],{"class":863},[324,23651,23652],{"class":738},"\u003Ciostraem>\n",[324,23654,23655,23657,23659,23661],{"class":326,"line":203},[324,23656,2688],{"class":863},[324,23658,2691],{"class":863},[324,23660,2694],{"class":734},[324,23662,2025],{"class":867},[324,23664,23665,23667],{"class":326,"line":338},[324,23666,15423],{"class":863},[324,23668,15900],{"class":734},[324,23670,23671],{"class":326,"line":344},[324,23672,2277],{"class":867},[324,23674,23675],{"class":326,"line":484},[324,23676,488],{"emptyLinePlaceholder":487},[324,23678,23679],{"class":326,"line":491},[324,23680,4724],{"class":867},[324,23682,23683,23685,23687],{"class":326,"line":496},[324,23684,6093],{"class":863},[324,23686,6317],{"class":734},[324,23688,2706],{"class":867},[324,23690,23691],{"class":326,"line":502},[324,23692,2277],{"class":867},[324,23694,23695],{"class":326,"line":508},[324,23696,16042],{"class":867},[324,23698,23699,23701,23703,23706,23708,23711,23713,23715,23717],{"class":326,"line":514},[324,23700,2282],{"class":867},[324,23702,1908],{"class":863},[324,23704,23705],{"class":738},"\"size of p=\"",[324,23707,1908],{"class":863},[324,23709,23710],{"class":734},"sizeoif",[324,23712,7268],{"class":867},[324,23714,1908],{"class":863},[324,23716,1973],{"class":867},[324,23718,23719],{"class":772}," \u002F\u002F查看这个空类的占用的内存空间\n",[324,23721,23722],{"class":326,"line":2343},[324,23723,2296],{"class":867},[324,23725,23726,23728,23730],{"class":326,"line":2348},[324,23727,871],{"class":863},[324,23729,2703],{"class":734},[324,23731,2706],{"class":867},[324,23733,23734],{"class":326,"line":2354},[324,23735,2277],{"class":867},[324,23737,23738,23740],{"class":326,"line":2359},[324,23739,6362],{"class":734},[324,23741,6365],{"class":867},[324,23743,23744],{"class":326,"line":2373},[324,23745,2296],{"class":867},[19,23747,23748],{},"输出结果为：size of p=1",[19,23750,23751],{},"原因：C++编译器会给每个空对象也分配一个字节空间，是为了区分空对象占内存的位置",[19,23753,23754],{},"每一个空对象也应该有一个独一无二的内存地址（可以这样理解：一个字节的空间不用来存储数据，而是作为标记去区分不同的对象）",[575,23756,23758],{"id":23757},"_8312成员变量与成员函数分开存储","8.3.1.2成员变量与成员函数分开存储",[316,23760,23762],{"className":854,"code":23761,"language":856,"meta":50,"style":50},"#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",[269,23763,23764,23770,23780,23788,23792,23801,23805,23813,23817,23821,23840,23844,23848,23856,23860,23866],{"__ignoreMap":50},[324,23765,23766,23768],{"class":326,"line":327},[324,23767,2680],{"class":863},[324,23769,2683],{"class":738},[324,23771,23772,23774,23776,23778],{"class":326,"line":203},[324,23773,2688],{"class":863},[324,23775,2691],{"class":863},[324,23777,2694],{"class":734},[324,23779,2025],{"class":867},[324,23781,23782,23784,23786],{"class":326,"line":338},[324,23783,15423],{"class":863},[324,23785,16298],{"class":734},[324,23787,3403],{"class":867},[324,23789,23790],{"class":326,"line":344},[324,23791,2277],{"class":867},[324,23793,23794,23796,23798],{"class":326,"line":484},[324,23795,2715],{"class":863},[324,23797,16177],{"class":867},[324,23799,23800],{"class":772},"\u002F\u002F非静态成员变量\n",[324,23802,23803],{"class":326,"line":491},[324,23804,4724],{"class":867},[324,23806,23807,23809,23811],{"class":326,"line":496},[324,23808,6093],{"class":863},[324,23810,6317],{"class":734},[324,23812,2706],{"class":867},[324,23814,23815],{"class":326,"line":502},[324,23816,2277],{"class":867},[324,23818,23819],{"class":326,"line":508},[324,23820,16042],{"class":867},[324,23822,23823,23825,23827,23829,23831,23833,23835,23837],{"class":326,"line":514},[324,23824,2282],{"class":867},[324,23826,1908],{"class":863},[324,23828,23705],{"class":738},[324,23830,2104],{"class":863},[324,23832,7268],{"class":867},[324,23834,1908],{"class":863},[324,23836,1973],{"class":867},[324,23838,23839],{"class":772}," \u002F\u002F查看不是空对象时占用多少内存\n",[324,23841,23842],{"class":326,"line":2343},[324,23843,488],{"emptyLinePlaceholder":487},[324,23845,23846],{"class":326,"line":2348},[324,23847,2296],{"class":867},[324,23849,23850,23852,23854],{"class":326,"line":2354},[324,23851,871],{"class":863},[324,23853,2703],{"class":734},[324,23855,2706],{"class":867},[324,23857,23858],{"class":326,"line":2359},[324,23859,2277],{"class":867},[324,23861,23862,23864],{"class":326,"line":2373},[324,23863,6362],{"class":734},[324,23865,6365],{"class":867},[324,23867,23868],{"class":326,"line":2378},[324,23869,2296],{"class":867},[19,23871,23872],{},"输出结果：size of p=4",[19,23874,23875],{},"解释：对象是空的话就占用一字节内存；如果对象不为空，占用的内存空间就是变量占用内存空间的情况",[192,23877,23878],{},[195,23879,23880],{},"如果加上非静态成员变量，Person类修改如下",[316,23882,23884],{"className":854,"code":23883,"language":856,"meta":50,"style":50},"class Person\n{\n    int m_A;\n    static int m_B;\n};\n\u002F\u002F 静态成员变量类内声明，类外初始化\nint Person::m_B=0;\n",[269,23885,23886,23892,23896,23902,23910,23914,23919],{"__ignoreMap":50},[324,23887,23888,23890],{"class":326,"line":327},[324,23889,15423],{"class":863},[324,23891,15900],{"class":734},[324,23893,23894],{"class":326,"line":203},[324,23895,2277],{"class":867},[324,23897,23898,23900],{"class":326,"line":338},[324,23899,2715],{"class":863},[324,23901,22121],{"class":867},[324,23903,23904,23906,23908],{"class":326,"line":344},[324,23905,11749],{"class":863},[324,23907,3112],{"class":863},[324,23909,22128],{"class":867},[324,23911,23912],{"class":326,"line":484},[324,23913,4724],{"class":867},[324,23915,23916],{"class":326,"line":491},[324,23917,23918],{"class":772},"\u002F\u002F 静态成员变量类内声明，类外初始化\n",[324,23920,23921,23923,23925,23927,23929,23931],{"class":326,"line":496},[324,23922,871],{"class":863},[324,23924,16298],{"class":734},[324,23926,23140],{"class":867},[324,23928,913],{"class":863},[324,23930,1056],{"class":916},[324,23932,2025],{"class":867},[19,23934,23935],{},"输出结果：4",[19,23937,23938],{},"解释：静态成员变量不属于某一个对象上，因此还是看int m_A;占用4字节",[192,23940,23941],{"start":203},[195,23942,23943],{},"加上非静态成员函数",[316,23945,23947],{"className":854,"code":23946,"language":856,"meta":50,"style":50},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n};\n\n",[269,23948,23949,23956,23960,23966,23974,23978,23982,23986],{"__ignoreMap":50},[324,23950,23951,23953],{"class":326,"line":327},[324,23952,15423],{"class":863},[324,23954,23955],{"class":734},"  Person\n",[324,23957,23958],{"class":326,"line":203},[324,23959,2277],{"class":867},[324,23961,23962,23964],{"class":326,"line":338},[324,23963,2715],{"class":863},[324,23965,22121],{"class":867},[324,23967,23968,23970,23972],{"class":326,"line":344},[324,23969,15638],{"class":863},[324,23971,12114],{"class":734},[324,23973,2706],{"class":867},[324,23975,23976],{"class":326,"line":484},[324,23977,2760],{"class":867},[324,23979,23980],{"class":326,"line":491},[324,23981,488],{"emptyLinePlaceholder":487},[324,23983,23984],{"class":326,"line":496},[324,23985,2917],{"class":867},[324,23987,23988],{"class":326,"line":502},[324,23989,4724],{"class":867},[19,23991,23992],{},"输出结果：4\n成员函数与成员变量是分开存储的，非静态成员函数不属于类对象上",[192,23994,23995],{"start":338},[195,23996,23997],{},"加上静态成员函数",[316,23999,24001],{"className":854,"code":24000,"language":856,"meta":50,"style":50},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n    static void func1()\n    {\n\n    }\n};\n\n",[269,24002,24003,24009,24013,24019,24027,24031,24035,24039,24050,24054,24058,24062],{"__ignoreMap":50},[324,24004,24005,24007],{"class":326,"line":327},[324,24006,15423],{"class":863},[324,24008,23955],{"class":734},[324,24010,24011],{"class":326,"line":203},[324,24012,2277],{"class":867},[324,24014,24015,24017],{"class":326,"line":338},[324,24016,2715],{"class":863},[324,24018,22121],{"class":867},[324,24020,24021,24023,24025],{"class":326,"line":344},[324,24022,15638],{"class":863},[324,24024,12114],{"class":734},[324,24026,2706],{"class":867},[324,24028,24029],{"class":326,"line":484},[324,24030,2760],{"class":867},[324,24032,24033],{"class":326,"line":491},[324,24034,488],{"emptyLinePlaceholder":487},[324,24036,24037],{"class":326,"line":496},[324,24038,2917],{"class":867},[324,24040,24041,24043,24045,24048],{"class":326,"line":502},[324,24042,11749],{"class":863},[324,24044,23295],{"class":863},[324,24046,24047],{"class":734}," func1",[324,24049,2706],{"class":867},[324,24051,24052],{"class":326,"line":508},[324,24053,2760],{"class":867},[324,24055,24056],{"class":326,"line":514},[324,24057,488],{"emptyLinePlaceholder":487},[324,24059,24060],{"class":326,"line":2343},[324,24061,2917],{"class":867},[324,24063,24064],{"class":326,"line":2348},[324,24065,4724],{"class":867},[19,24067,23935],{},[19,24069,24070],{},"解释：静态成员函数也不属于类上",[775,24072,8403],{},{"title":50,"searchDepth":203,"depth":203,"links":24074},[24075,24081],{"id":15374,"depth":203,"text":15375,"children":24076},[24077,24078,24079,24080],{"id":15378,"depth":338,"text":15379},{"id":16103,"depth":338,"text":16104},{"id":16275,"depth":338,"text":16276},{"id":16734,"depth":338,"text":16735},{"id":19106,"depth":203,"text":19107,"children":24082},[24083,24084,24085,24086,24087,24088,24089,24090,24091],{"id":19118,"depth":338,"text":19119},{"id":19411,"depth":338,"text":19412},{"id":19902,"depth":338,"text":19903},{"id":20999,"depth":338,"text":21000},{"id":21422,"depth":338,"text":21423},{"id":21901,"depth":338,"text":21902},{"id":22276,"depth":338,"text":22277},{"id":22689,"depth":338,"text":22690},{"id":23625,"depth":338,"text":23626},"C++面向对象的三大特性为封装、继承、多态",{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch8",{"title":15339,"description":24092},"wiki\u002F2026-05-24-c++学习\u002Fch8-类和对象","zb3Tc7FBL0NwZ1Abpqpn9O1Rg-UdgPbemeNRscdNci4",{"id":24099,"title":856,"body":24100,"description":791,"extension":792,"meta":24104,"navigation":487,"path":24106,"seo":24107,"stem":24108,"__hash__":24109},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Findex.md",{"type":7,"value":24101,"toc":24102},[],{"title":50,"searchDepth":203,"depth":203,"links":24103},[],{"category":24105},"机器人","\u002Fwiki\u002F2026-05-24-c++",{"title":856,"description":791},"wiki\u002F2026-05-24-c++学习\u002Findex","C9n-1L0uN4HGOF9HS37y6tUkSfEeWPo7gZVXtwLRezw",{"id":24111,"title":24112,"body":24113,"description":50,"extension":792,"meta":24702,"navigation":487,"path":24703,"seo":24704,"stem":24705,"__hash__":24706},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识.md","1.强化学习基本认识",{"type":7,"value":24114,"toc":24684},[24115,24118,24122,24125,24128,24131,24149,24154,24157,24160,24163,24166,24171,24174,24179,24182,24185,24189,24192,24195,24201,24204,24222,24226,24230,24233,24238,24241,24245,24248,24261,24264,24268,24271,24274,24277,24302,24305,24314,24325,24340,24372,24376,24383,24391,24395,24398,24401,24406,24410,24413,24416,24421,24424,24428,24431,24434,24439,24442,24446,24451,24455,24522,24526,24529,24532,24535,24538,24541,24547,24567,24570,24584,24592,24596,24599,24602,24607,24610,24615,24620,24623,24626,24631,24636,24639,24644,24649,24652,24657,24662,24665,24668,24673,24676,24681],[10,24116,24112],{"id":24117},"_1强化学习基本认识",[14,24119,24121],{"id":24120},"_11什么是强化学习","1.1.什么是强化学习",[19,24123,24124],{},"强化学习有两部分组成：智能体和环境；",[19,24126,24127],{},"监督学习：①输入的数据（标注的数据）都应是没有关联的；②需要我们告诉学习器正确的标签是什么，学习器会根据正确标签来修正自己的预测",[19,24129,24130],{},"强化学习与监督学习的区别:",[192,24132,24133,24136,24139,24142],{},[195,24134,24135],{},"强化学习输入的样本是序列数据(是时间序列数据)，而不像监督学习里面样本都是独立的",[195,24137,24138],{},"学习器并没有告诉我们每一步正确的动作应该是什么，学习器需要自己去发现哪些动作可以带来最多的奖励，只能通过不停地尝试来发现最有利的动作",[195,24140,24141],{},"智能体获得自己能力的过程，其实是不断地试错探索（trial-and-error exploration）的过程。探索（exploration）和利用（exploitation）是强化学习里面非常核心的问题。其中，探索指尝试一些新的动作,这些新的动作有可能会使我们得到更多的奖励，也有可能使我们“一无所有”；利用指采取已知的可以获得最多奖励的动作，重复执行这个动作，因为我们知道这样做可以获得一定的奖励。因此，我们需要在探索和利用之间进行权衡，这也是在监督学习里面没有的情况",[195,24143,24144,24145,24148],{},"在强化学习过程中，没有非常强的监督者（supervisor），只有 ",[116,24146,24147],{},"奖励信号（reward signal）"," ，并且奖励信号是延迟的，即环境会在很久以后告诉我们之前我们采取的动作到底是不是有效的。因为我们没有得到即时反馈，所以智能体使用强化学习来学习就非常困难。当我们采取一个动作后，如果我们使用监督学习，我们就可以立刻获得一个指导，比如，我们现在采取了一个错误的动作，正确的动作应该是什么。而在强化学习里面，环境可能会告诉我们这个动作是错误的，但是它并没有告诉我们正确的动作是什么。而且更困难的是，它可能是在一两分钟过后告诉我们这个动作是错误的。所以这也是强化学习和监督学习不同的地方",[19,24150,24151],{},[48,24152],{"alt":50,"src":24153},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-001.png",[19,24155,24156],{},"在强化学习过程中，智能体与环境一直在交互。智能体在环境里面获取某个状态后，它会利用该状态输出",[19,24158,24159],{},"一个动作（action），这个动作也称为决策（decision）。然后这个动作会在环境之中被执行，环境会根据智",[19,24161,24162],{},"能体采取的动作，输出下一个状态以及当前这个动作带来的奖励。智能体的目的就是尽可能多地从环境中",[19,24164,24165],{},"获取奖励",[19,24167,24168],{},[48,24169],{"alt":50,"src":24170},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-002.png",[19,24172,24173],{},"强化学习可以分成标准强化学习和深度强化学习",[19,24175,24176],{},[48,24177],{"alt":50,"src":24178},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-003.png",[19,24180,24181],{},"标准强化学习需要先设计很多特征，这些特征可以描述现在整个状态。得到这些特征后，我们就可以通过训练一个分类网络或者分别训练一个价值估计函数来采取动作",[19,24183,24184],{},"深度强化学习是一个端到端训练过程，省去了设计特征，直接输入状态就可以输出动作",[14,24186,24188],{"id":24187},"_12强化学习应用场景","1.2.强化学习应用场景",[19,24190,24191],{},"具身智能、isaaclab中机械臂的仿真任务、无人驾驶等",[19,24193,24194],{},"具身智能中的应用",[19,24196,24197,24200],{},[116,24198,24199],{},"Sim2Real（仿真到现实）："," 由于在现实中训练机器人太慢且危险，RL通常在物理仿真环境中让机器人疯狂试错，获得高奖励的策略，然后迁移到现实",[19,24202,24203],{},"RL与VLA结合可以对VLA模型进行微调和自我修正任务",[19,24205,24206,24207,24210,24211,24214,24215,24218,24219],{},"机器人是",[116,24208,24209],{},"躯体","，深度学习是",[116,24212,24213],{},"神经元****网络","，VLA是",[116,24216,24217],{},"通用的行为逻辑","，而强化学习是",[116,24220,24221],{},"教练",[14,24223,24225],{"id":24224},"_13序列决策","1.3.序列决策",[35,24227,24229],{"id":24228},"_131智能体与环境","1.3.1.智能体与环境",[19,24231,24232],{},"强化学习研究的问题是智能体agent与环境交互的问题",[19,24234,24235],{},[48,24236],{"alt":50,"src":24237},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-004.png",[19,24239,24240],{},"agent把动作输出给环境，环境根据agent的动作会把下一步的观测与这个动作带来的奖励还给agent，交互可以产生非常多的观测，agent的目的就是从这些观测中学到最大化奖励的策略",[35,24242,24244],{"id":24243},"_132奖励","1.3.2.奖励",[19,24246,24247],{},"奖励是由环境给的一种标量的反馈信号（scalar feedback signal），这种信号可显示智能体在某一步采",[19,24249,24250,24251,24260],{},"取某个策略的表现如何。强化学习的目的就是",[116,24252,24253,24254,24259],{},"最大化",[116,24255,24256],{},[116,24257,24258],{},"智能体","可以获得的奖励","，智能体在环境里面存在的目",[19,24262,24263],{},"的就是最大化它的期望的累积奖励（expected cumulative reward）。不同的环境中，奖励也是不同的。",[35,24265,24267],{"id":24266},"_133序列决策","1.3.3.序列决策",[19,24269,24270],{},"强化学习里一个重要的课题就是近期奖励和远期奖励的权衡 （trade-off），研究怎么让agent取得更多的远期奖励",[19,24272,24273],{},"在与环境的交互过程中，智能体会获得很多观测。针对每一个观测，智能体会采取一个动作，也会得",[19,24275,24276],{},"到一个奖励。所以历史是观测、动作、奖励的序列：",[19,24278,24279,24283,24284,24286,24287,24289,24290,24292,24293,14524,24296,14524,24299],{},[24280,24281,24282],"em",{},"Ht"," = ",[24280,24285,1460],{},"1*, a",[24280,24288,1082],{},", r",[24280,24291,1082],{},", . . . ,* ",[24280,24294,24295],{},"ot",[24280,24297,24298],{},", at ,",[24280,24300,24301],{},"rt",[19,24303,24304],{},"智能体在采取当前动作的时候会依赖于它之前得到的历史，所以我们可以把整个游戏的状态看成关于这个历史的函数：",[19,24306,24307,24283,24310,2389,24312,1293],{},[24280,24308,24309],{},"st",[24280,24311,920],{},[24280,24313,24282],{},[19,24315,24316,24317,24320,24321,24324],{},"环境有自己的函数来更新状态，在智能体的内部也有一个函数来更新状态。当智能体的状态与环境的状态等价的时候，即当智能体能够观察到环境的所有状态时，我们称这个环境是 ",[116,24318,24319],{},"完全可观测的（fully observed）"," 。在这种情况下面，强化学习通常被建模成一个 ",[116,24322,24323],{},"马尔可夫决策过程（Markov decision process，MDP）"," 的问题。",[19,24326,24327,24328,24331,24332,24335,24336,24339],{},"当智能体只能看到部分的观测，我们就称这个环境是 ",[116,24329,24330],{},"部分可观测的（partially observed）。"," 在这种情况下，强化学习通常被建模成 ",[116,24333,24334],{},"部分可观测马尔可夫决策过程（partially observable Markov decision process, POMDP）"," 的问题。部分可观测马尔可夫决策过程是马尔可夫决策过程的一种泛化。部分可观测马尔可夫决策过程依然具有马尔可夫性质，但是假设智能体无法感知环境的状态，只能知道部分观测值。比如在自动驾驶中，智能体只能感知传感器采集的有限的环境信息。部分可观测马尔可夫决策过程可以用一个七元组描述：(",[24280,24337,24338],{},"S, A, T, R, Ω, O, γ",")。",[19,24341,24342,24343,24345,24346,24348,24349,868,24351,24354,24355,24357,24358,868,24361,24364,24365,24367,24368,24371],{},"其中 ",[24280,24344,1553],{}," 表示状态空间，为隐变量，",[24280,24347,1097],{}," 为动作空间，",[24280,24350,1578],{},[24280,24352,24353],{},"s ′ |s, a",") 为状态转移概率，",[24280,24356,1528],{}," 为奖励函数，",[24280,24359,24360],{},"Ω",[24280,24362,24363],{},"o|s, a",") 为观测概率，",[24280,24366,1454],{}," 为观测空间，",[24280,24369,24370],{},"γ"," 为折扣因子。",[14,24373,24375],{"id":24374},"_14动作空间","1.4.动作空间",[19,24377,24378,24379,24382],{},"不同的环境允许不同种类的动作。在给定的环境中，有效动作的集合经常被称为 ",[116,24380,24381],{},"动作空间"," ，动作空间分为:",[192,24384,24385,24388],{},[195,24386,24387],{},"离散动作空间:在该空间中，智能体的动作数量是有限的",[195,24389,24390],{},"连续动作空间：在其他环境，比如在物理世界中控制一个智能体，在这个环境中就有连续动作空间，在连续动作空间中，动作是实值的向量",[14,24392,24394],{"id":24393},"_15强化学习智能体的组成成分和类型","1.5.强化学习智能体的组成成分和类型",[19,24396,24397],{},"由策略、价值函数、模型三部分组成",[19,24399,24400],{},"这三者组成马尔可夫决策过程",[19,24402,24403],{},[48,24404],{"alt":50,"src":24405},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-005.png",[35,24407,24409],{"id":24408},"_151策略","1.5.1.策略",[19,24411,24412],{},"策略是智能体的动作模型，它决定了智能体的动作。它其实是一个函数，用于把输入的状态变成动作。",[19,24414,24415],{},"策略可分为两种：",[19,24417,24418],{},[48,24419],{"alt":50,"src":24420},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-006.png",[19,24422,24423],{},"强化学习一般使用的是随机性策略，相比于确定性策略使得agent对同样的状态采用相同的动作，随机性策略动作具有多样性，在智能体博弈时非常重要",[35,24425,24427],{"id":24426},"_152价值函数","1.5.2.价值函数",[19,24429,24430],{},"这个函数是对未来奖励的预测-->评估状态的好坏",[19,24432,24433],{},"价值函数中有一个折扣因子，类似于存款利息",[19,24435,24436],{},[48,24437],{"alt":50,"src":24438},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-007.png",[19,24440,24441],{},"进入某个状态采取的最优动作可以通过Q函数得到",[35,24443,24445],{"id":24444},"_153模型","1.5.3.模型",[19,24447,24448],{},[48,24449],{"alt":50,"src":24450},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-008.png",[14,24452,24454],{"id":24453},"_16强化学习智能体的类型","1.6.强化学习智能体的类型",[1003,24456,24457,24468],{},[1006,24458,24459],{},[1009,24460,24461,24465],{},[1012,24462,24464],{"align":24463},"left","类型",[1012,24466,24467],{"align":24463},"特点",[1049,24469,24470,24480,24490,24500,24512],{},[1009,24471,24472,24477],{},[1054,24473,24474],{"align":24463},[116,24475,24476],{},"基于价值的智能体",[1054,24478,24479],{"align":24463},"显式地学习价值函数，隐式地学习它的策略。 策略是其从学到的价值函数里面推算出来的。",[1009,24481,24482,24487],{},[1054,24483,24484],{"align":24463},[116,24485,24486],{},"基于策略的智能体",[1054,24488,24489],{"align":24463},"直接学习策略，没有学习价值函数",[1009,24491,24492,24497],{},[1054,24493,24494],{"align":24463},[116,24495,24496],{},"演员-评论员智能体",[1054,24498,24499],{"align":24463},"基于策略的智能体和基于价值智能体的结合版，将策略和价值都学习了，通过两者的交互得到最佳动作",[1009,24501,24502,24507],{},[1054,24503,24504],{"align":24463},[116,24505,24506],{},"有模型强化学习智能体",[1054,24508,24509],{"align":24463},[48,24510],{"alt":50,"src":24511},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-009.png",[1009,24513,24514,24519],{},[1054,24515,24516],{"align":24463},[116,24517,24518],{},"免模型强化学习智能体",[1054,24520,24521],{"align":24463},"没有去直接估计状态的转移，也没有得到环境的具体转移量，它通过学习价值函数和策略函数进行决策，没有环境转移的模型 不对环境建模，直接与真实环境交互学习得到最优策略",[14,24523,24525],{"id":24524},"_17剩余强化学习概念知识","1.7.剩余强化学习概念知识",[19,24527,24528],{},"学习和规划是序列决策的两个基本问题",[19,24530,24531],{},"一个常用的强化学习问题解决思路：先学习环境如何工作，也就是了解环境工作的方式，即学习得到一个模型，然后利用这个模型进行规划",[19,24533,24534],{},"在强化学习里面，探索和利用是两个很核心的问题。探索即我们去探索环境，通过尝试不同的动作来得到最佳的策略（带来最大奖励的策略）。利用即我们不去尝试新的动作，而是采取已知的可以带来很大奖励的动作",[19,24536,24537],{},"强化学习用到的库：Gym",[19,24539,24540],{},"Gym可以检验强化学习算法的优劣",[19,24542,24543,24546],{},[116,24544,24545],{},"Gym 库"," 是一个环境仿真库，里面包含很多现有的环境。针对不同的场景，我们可以选择不同的环境。离散控制场景一般使用雅达利环境评估；连续控制场景一 般使用 MuJoCo 环境评估",[316,24548,24552],{"className":24549,"code":24550,"language":24551,"meta":50,"style":50},"language-bash shiki shiki-themes github-light github-dark","pip install gym==0.25.2\n","bash",[269,24553,24554],{"__ignoreMap":50},[324,24555,24556,24559,24561,24564],{"class":326,"line":327},[324,24557,24558],{"class":734},"pip",[324,24560,760],{"class":738},[324,24562,24563],{"class":738}," gym==",[324,24565,24566],{"class":916},"0.25.2\n",[19,24568,24569],{},"显示图形界面需要",[316,24571,24573],{"className":24549,"code":24572,"language":24551,"meta":50,"style":50},"pip install pygame\n",[269,24574,24575],{"__ignoreMap":50},[324,24576,24577,24579,24581],{"class":326,"line":327},[324,24578,24558],{"class":734},[324,24580,760],{"class":738},[324,24582,24583],{"class":738}," pygame\n",[19,24585,24586,24587],{},"有关Gym库的相关文档介绍：",[25,24588,24591],{"href":24589,"rel":24590},"https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic%5C_usage\u002F",[29],"https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic\\_usage\u002F",[14,24593,24595],{"id":24594},"_18一些补充基础概念","1.8.一些补充基础概念",[19,24597,24598],{},"强化学习的过程:强化学习中会使用概率密度函数来表示智能体根据当前的状态所作的动作的概率情况，智能体在执行动作之后，此时会得到一个奖励函数，此时会更新智能体的状态",[19,24600,24601],{},"St时刻的奖励函数肯定要比St+1时刻的奖励函数要值钱一些的，因为St时刻的奖励获得后，St+1时刻的奖励不一定就会获得，所以要给未来的奖励打折扣，所以折扣回报如下:",[19,24603,24604],{},[48,24605],{"alt":50,"src":24606},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-010.png",[19,24608,24609],{},"折扣率需要自己来设定",[19,24611,24612],{},[48,24613],{"alt":50,"src":24614},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-011.png",[192,24616,24617],{},[195,24618,24619],{},"状态转移函数：",[19,24621,24622],{},"指的是在状态 s下执行动作a后，环境有多大可能会进入每一个可能的下一个状态s'",[19,24624,24625],{},"例如角色在坐标中运动，得到的信息会是下方这种情况",[19,24627,24628],{},[48,24629],{"alt":50,"src":24630},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-012.png",[192,24632,24633],{"start":203},[195,24634,24635],{},"动作价值函数：",[19,24637,24638],{},"在t时刻并不知道这个折扣函数Ut是啥，所以可以对Ut求期望，QΠ只依赖于当前的状态St和动作at，动作价值可以反映当前状态St下，智能体做动作at的好坏程度",[19,24640,24641],{},[48,24642],{"alt":50,"src":24643},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-013.png",[192,24645,24646],{"start":338},[195,24647,24648],{},"最优动作价值函数：",[19,24650,24651],{},"这个函数是对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会基于这个分数来做决策，这样期望回报会最大化",[19,24653,24654],{},[48,24655],{"alt":50,"src":24656},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-014.png",[192,24658,24659],{"start":344},[195,24660,24661],{},"状态价值函数:",[19,24663,24664],{},"在遵循某个特定策略 π 的情况下，从状态 s 开始，所能获得的期望折扣回报（平均长期总收益）",[19,24666,24667],{},"它衡量的是“一个具体动作”的长期价值",[19,24669,24670],{},[48,24671],{"alt":50,"src":24672},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-015.png",[19,24674,24675],{},"几个价值函数之间的比较：",[19,24677,24678],{},[48,24679],{"alt":50,"src":24680},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-016.png",[775,24682,24683],{},"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":50,"searchDepth":203,"depth":203,"links":24685},[24686,24687,24688,24693,24694,24699,24700,24701],{"id":24120,"depth":203,"text":24121},{"id":24187,"depth":203,"text":24188},{"id":24224,"depth":203,"text":24225,"children":24689},[24690,24691,24692],{"id":24228,"depth":338,"text":24229},{"id":24243,"depth":338,"text":24244},{"id":24266,"depth":338,"text":24267},{"id":24374,"depth":203,"text":24375},{"id":24393,"depth":203,"text":24394,"children":24695},[24696,24697,24698],{"id":24408,"depth":338,"text":24409},{"id":24426,"depth":338,"text":24427},{"id":24444,"depth":338,"text":24445},{"id":24453,"depth":203,"text":24454},{"id":24524,"depth":203,"text":24525},{"id":24594,"depth":203,"text":24595},{},"\u002Fwiki\u002F2025-12-04\u002Fch1",{"title":24112,"description":50},"wiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识","QQJgDM8AHMQ2lFI0H5HtcYYpQ6x5K4ccUrZvuGfUAxM",{"id":24708,"title":24709,"body":24710,"description":24717,"extension":792,"meta":24728,"navigation":487,"path":24729,"seo":24730,"stem":24731,"__hash__":24732},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程.md","2.马尔可夫决策过程",{"type":7,"value":24711,"toc":24726},[24712,24715,24718,24723],[10,24713,24709],{"id":24714},"_2马尔可夫决策过程",[19,24716,24717],{},"这是强化学习的基本框架",[19,24719,24720],{},[48,24721],{"alt":50,"src":24722},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-017.png",[19,24724,24725],{},"马尔可夫过程指的是状态，核心为单步状态依赖",{"title":50,"searchDepth":203,"depth":203,"links":24727},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch2",{"title":24709,"description":24717},"wiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程","V3fB9MQC6Z7cMbsh_eQBMmJ6frTaqyZrzXVsFs9eZSM",{"id":24734,"title":24735,"body":24736,"description":50,"extension":792,"meta":24852,"navigation":487,"path":24853,"seo":24854,"stem":24855,"__hash__":24856},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数.md","3.动作价值函数",{"type":7,"value":24737,"toc":24847},[24738,24741,24745,24748,24753,24758,24761,24766,24769,24774,24777,24781,24786,24789,24794,24799,24804,24807,24811,24816,24819,24824,24829,24834,24839,24842],[10,24739,24735],{"id":24740},"_3动作价值函数",[14,24742,24744],{"id":24743},"_31dqn","3.1.DQN",[19,24746,24747],{},"Deep Q-Network是一种价值学习的方法，用一个神经网络去近似Q*函数，将神经网络近似为Q（s,a;w）",[19,24749,24750],{},[48,24751],{"alt":50,"src":24752},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-018.png",[19,24754,24755],{},[48,24756],{"alt":50,"src":24757},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-019.png",[19,24759,24760],{},"DQN算法的描述：",[19,24762,24763],{},[48,24764],{"alt":50,"src":24765},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-020.png",[19,24767,24768],{},"这里的Dense指的是全连接层",[19,24770,24771],{},[48,24772],{"alt":50,"src":24773},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-021.png",[19,24775,24776],{},"当前观测的状态为St，用DQN把St作为输入，给所有的动作打分，选出动作最高的动作作为at，agent做出at动作后，环境会改变状态，用状态转移函数p来随机抽一个新的状态st+1，环境还会告诉我们这一步的奖励Rt，这个奖励可以+-0，奖励是强化学习中的监督信号，DQN要靠这些奖励来训练，有了新的状态St+1，DQN会再对所有的动作打分，agent选择分数最高的动作作为at+1，agent执行at+1后，环境会再更新状态s和再给一个奖励R，然后会继续重复之前的动作 训练DQN的最常用方法是TD算法",[14,24778,24780],{"id":24779},"_32dqn的举例","3.2.DQN的举例",[19,24782,24783],{},[48,24784],{"alt":50,"src":24785},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-022.png",[19,24787,24788],{},"上方进行模型预测的话需要完成整个过程才可以对模型进行更新，使用TD算法可以改进这一问题，不需要完成整个过程，只需要利用其中的一段过程来更新模型",[19,24790,24791],{},[48,24792],{"alt":50,"src":24793},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-023.png",[19,24795,24796],{},[48,24797],{"alt":50,"src":24798},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-024.png",[19,24800,24801],{},[48,24802],{"alt":50,"src":24803},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-025.png",[19,24805,24806],{},"TD算法的原理是尽可能的让TD error=0(预计时间与实际时间相等)，TD算法要用梯度下降来减少TD error",[14,24808,24810],{"id":24809},"_33td算法","3.3.TD算法",[19,24812,24813],{},[48,24814],{"alt":50,"src":24815},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-026.png",[19,24817,24818],{},"强化学习TD算法公式的粗略解释：",[19,24820,24821],{},[48,24822],{"alt":50,"src":24823},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-027.png",[19,24825,24826],{},[48,24827],{"alt":50,"src":24828},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-028.png",[19,24830,24831],{},[48,24832],{"alt":50,"src":24833},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-029.png",[19,24835,24836],{},[48,24837],{"alt":50,"src":24838},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-030.png",[19,24840,24841],{},"TD算法总结：",[19,24843,24844],{},[48,24845],{"alt":50,"src":24846},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-031.png",{"title":50,"searchDepth":203,"depth":203,"links":24848},[24849,24850,24851],{"id":24743,"depth":203,"text":24744},{"id":24779,"depth":203,"text":24780},{"id":24809,"depth":203,"text":24810},{},"\u002Fwiki\u002F2025-12-04\u002Fch3",{"title":24735,"description":50},"wiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数","hOI8u98eYzg8VeCIrCMpe_y_lDcQnTxfrNA8iN4Vl7g",{"id":24858,"title":24859,"body":24860,"description":50,"extension":792,"meta":25093,"navigation":487,"path":25094,"seo":25095,"stem":25096,"__hash__":25097},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch4-策略函数.md","4.策略学习",{"type":7,"value":24861,"toc":25089},[24862,24865,24869,24872,24875,24880,24885,24888,24893,24898,24901,24906,24909,24914,24917,24922,24925,24930,24933,24938,24943,24946,24951,24954,24957,24962,24965,24970,24975,24979,24982,24985,24990,24995,24998,25003,25008,25011,25016,25019,25022,25027,25030,25035,25038,25043,25048,25051,25056,25061,25064,25069,25072,25077,25080],[10,24863,24859],{"id":24864},"_4策略学习",[14,24866,24868],{"id":24867},"_41概念描述","4.1.概念描述",[19,24870,24871],{},"用神经网络（策略网络）近似策略函数",[19,24873,24874],{},"策略函数是一个概率密度函数，可以用它来自动控制agent运动，输入是状态s，输出是一个概率分布",[19,24876,24877],{},[48,24878],{"alt":50,"src":24879},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-032.png",[19,24881,24882],{},[48,24883],{"alt":50,"src":24884},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-033.png",[19,24886,24887],{},"softmax函数这个激活函数可以让输出都为正数，且加和为1，策略函数必须满足如下性质：对于所有可能的动作A，把Π函数的输出全部加起来必须要等于1",[19,24889,24890],{},[48,24891],{"alt":50,"src":24892},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-034.png",[19,24894,24895],{},[48,24896],{"alt":50,"src":24897},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-035.png",[19,24899,24900],{},"使用神经网络来近似策略函数，这样的话VΠ(St)就变为了VΠ(St,theta)，theta是神经网络中的参数 实现策略网络近似策略函数，V可以评价状态S和策略网络的好坏，给定状态S和策略网络越好，则V值越大",[19,24902,24903],{},[48,24904],{"alt":50,"src":24905},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-036.png",[19,24907,24908],{},"所以关键在于让策略网络变得越来越好：改变模型参数theta，让V(St,theta)变大，基于此我们可以把目标函数定义为V(St,theta)的期望J(theta)，这个期望是关于状态s来求解的，将状态S作为随机变量用期望的形式将其去掉，这样就只剩theta--->J(theta)就是对策略网络的评价（策略网络i越好，J(theta)就越大）",[19,24910,24911],{},[48,24912],{"alt":50,"src":24913},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-037.png",[19,24915,24916],{},"改进theta要用到策略梯度算法",[19,24918,24919],{},[48,24920],{"alt":50,"src":24921},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-038.png",[19,24923,24924],{},"这里采用梯度上升的形式实现theta更新(我们希望theta变大以提高J值)",[19,24926,24927],{},[48,24928],{"alt":50,"src":24929},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-039.png",[19,24931,24932],{},"假设QΠ(s,a)不依赖于theta，不影响最后结果的，即使QΠ是theta的导数最终结果也依然是如下的结果",[19,24934,24935],{},[48,24936],{"alt":50,"src":24937},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-040.png",[19,24939,24940],{},[48,24941],{"alt":50,"src":24942},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-041.png",[19,24944,24945],{},"梯度公式总结：",[19,24947,24948],{},[48,24949],{"alt":50,"src":24950},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-042.png",[19,24952,24953],{},"两个公式的分别应用场景：",[19,24955,24956],{},"对于离散的动作：",[19,24958,24959],{},[48,24960],{"alt":50,"src":24961},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-043.png",[19,24963,24964],{},"对于连续的动作：",[19,24966,24967],{},[48,24968],{"alt":50,"src":24969},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-044.png",[19,24971,24972],{},[48,24973],{"alt":50,"src":24974},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-045.png",[14,24976,24978],{"id":24977},"_42概率梯度算法总结","4.2.概率梯度算法总结",[19,24980,24981],{},"使用蒙特卡洛来近似计算策略梯度",[19,24983,24984],{},"蒙特卡洛法的解释如下：",[19,24986,24987],{},[48,24988],{"alt":50,"src":24989},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-046.png",[19,24991,24992],{},[48,24993],{"alt":50,"src":24994},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-047.png",[19,24996,24997],{},"但是现在存在一个问题，并不知道动作价值函数的值(QΠ(St,at))，可以通过如下两个办法来近似qt",[192,24999,25000],{},[195,25001,25002],{},"方法一：reinforce算法",[19,25004,25005],{},[48,25006],{"alt":50,"src":25007},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-048.png",[19,25009,25010],{},"用策略网络来控制agent的运动，从一开始到玩到游戏结束，把整个游戏的轨迹都记录下来了，观测到所有的奖励R，我们可以算出折扣汇报Ut，由于价值函数QΠ(St,at)是大于Ut的期望，所以可以用Ut的观测值ut来近似QΠ，这个REINFORCE算法就是用观测到的ut来代替QΠ函数，这个算法需要玩完一局游戏，观测到所有的奖励，然后才可以更新策略网络",[192,25012,25013],{"start":203},[195,25014,25015],{},"方法二：actor-critic算法",[19,25017,25018],{},"这一方法是用一个神经网络来做函数近似QΠ，这样加上之前用神经网络近似的策略函数Π，总共有两个神经网络，一个被称为actor，一个被称为critic，这个方法就是actor-critic方法，这个方法将策略学习与价值学习结合起来（策略网络用来控制agent的运动，可以将策略网络理解为体操运动员，要做一连串的动作；价值网络用来评价动作的好坏，可以将价值网络理解为裁判或评委，给运动员动作打分；终极目标是训练这个策略函数Π，也就是这个运动员，价值网络作为裁判起辅助作用，最后训好就不再用了）",[19,25020,25021],{},"两个网络的构建：",[19,25023,25024],{},[48,25025],{"alt":50,"src":25026},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-049.png",[19,25028,25029],{},"actor网路：",[19,25031,25032],{},[48,25033],{"alt":50,"src":25034},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-050.png",[19,25036,25037],{},"critic网络",[19,25039,25040],{},[48,25041],{"alt":50,"src":25042},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-051.png",[192,25044,25045],{"start":338},[195,25046,25047],{},"网络的训练",[19,25049,25050],{},"网络描述",[19,25052,25053],{},[48,25054],{"alt":50,"src":25055},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-052.png",[19,25057,25058],{},[48,25059],{"alt":50,"src":25060},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-053.png",[19,25062,25063],{},"TD算法更新梯度：",[19,25065,25066],{},[48,25067],{"alt":50,"src":25068},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-054.png",[19,25070,25071],{},"策略网络更新梯度：",[19,25073,25074],{},[48,25075],{"alt":50,"src":25076},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-055.png",[19,25078,25079],{},"训练整个流程的具体描述：",[19,25081,25082,25085,25086],{},[48,25083],{"alt":50,"src":25084},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-056.png","\n4.  算法步骤总结：\n",[48,25087],{"alt":50,"src":25088},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-057.png",{"title":50,"searchDepth":203,"depth":203,"links":25090},[25091,25092],{"id":24867,"depth":203,"text":24868},{"id":24977,"depth":203,"text":24978},{},"\u002Fwiki\u002F2025-12-04\u002Fch4",{"title":24859,"description":50},"wiki\u002F2025-12-04-强化学习\u002Fch4-策略函数","iPTq7imHbOiAmdpc63dBoleY9XDApFgwiwvhpbNentI",{"id":25099,"title":25100,"body":25101,"description":25108,"extension":792,"meta":25158,"navigation":487,"path":25159,"seo":25160,"stem":25161,"__hash__":25162},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法.md","5.Alphago算法",{"type":7,"value":25102,"toc":25154},[25103,25106,25109,25113,25116,25121,25125,25128,25133,25136,25141,25146,25149],[10,25104,25100],{"id":25105},"_5alphago算法",[19,25107,25108],{},"这一算法有两种实现形式：通过模仿学习来训练策略网络或通过强化学习来训练策略网络",[14,25110,25112],{"id":25111},"_51behavior-cloning训练策略网络","5.1.Behavior cloning训练策略网络",[19,25114,25115],{},"使用behavior cloning来训练策略网络，模仿人类的动作来实现任务的，不会用到rewards奖励；behavior cloning的缺陷是无法保证状态St一定出现在训练数据中，策略网络没有见过状态St，策略网络的决策at就会比较差，会使得错误累加，导致状态变得越来越奇怪",[19,25117,25118],{},[48,25119],{"alt":50,"src":25120},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-058.png",[14,25122,25124],{"id":25123},"_52上述弊端的解决方式","5.2.上述弊端的解决方式",[19,25126,25127],{},"采用强化学习的方式训练策略网络",[19,25129,25130],{},[48,25131],{"alt":50,"src":25132},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-059.png",[19,25134,25135],{},"Alphago让两个策略网络进行博弈(player和opponent)，Player就是agent，它是由策略网络来控制的，用的是策略网络最新的模型参数，每下完一局围棋，把胜负作为奖励，靠奖励来更新player的参数；opponent相当于环境，它是用来陪agent的，每当player下一个棋子，opponent也要跟着走一步，相当于随机状态转移，opponent也是策略网络来控制的，但是opponent的参数不用学习，随机从旧的参数中选出一个作为opponent的参数即可",[19,25137,25138],{},[48,25139],{"alt":50,"src":25140},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-060.png",[19,25142,25143],{},[48,25144],{"alt":50,"src":25145},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-061.png",[19,25147,25148],{},"强化学习训练策略网络的总结：",[19,25150,25151],{},[48,25152],{"alt":50,"src":25153},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-062.png",{"title":50,"searchDepth":203,"depth":203,"links":25155},[25156,25157],{"id":25111,"depth":203,"text":25112},{"id":25123,"depth":203,"text":25124},{},"\u002Fwiki\u002F2025-12-04\u002Fch5-alphago",{"title":25100,"description":25108},"wiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法","7NankPVCRx1TrpHTCvluPUc71533NNCBPe3Q8v6G_DE",{"id":25164,"title":25165,"body":25166,"description":25173,"extension":792,"meta":25176,"navigation":487,"path":25177,"seo":25178,"stem":25179,"__hash__":25180},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch6-价值网络.md","6.价值网络",{"type":7,"value":25167,"toc":25174},[25168,25171],[10,25169,25165],{"id":25170},"_6价值网络",[19,25172,25173],{},"价值网络是对状态价值函数V的近似，而不是对Q的近似",{"title":50,"searchDepth":203,"depth":203,"links":25175},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch6",{"title":25165,"description":25173},"wiki\u002F2025-12-04-强化学习\u002Fch6-价值网络","3cEHo5nTUYq0vWJWE4vi_wjaXMU6_zNuhEXQKUo0VEw",{"id":25182,"title":25183,"body":25184,"description":25188,"extension":792,"meta":25189,"navigation":487,"path":25190,"seo":25191,"stem":25192,"__hash__":25193},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Findex.md","强化学习",{"type":7,"value":25185,"toc":25186},[],{"title":50,"searchDepth":203,"depth":203,"links":25187},[],"记录自己的强化学习笔记。",{"category":24105},"\u002Fwiki\u002F2025-12-04",{"title":25183,"description":25188},"wiki\u002F2025-12-04-强化学习\u002Findex","mU4IQte9eGoyxGmnQYAjswHUQyt6-Sy7KQ-XeruBDHA",{"id":25195,"title":25196,"body":25197,"description":791,"extension":792,"meta":25236,"navigation":487,"path":25237,"seo":25238,"stem":25239,"__hash__":25240},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源.md","1. 项目概览与官方资源",{"type":7,"value":25198,"toc":25234},[25199,25202,25205,25211,25214,25220,25223,25228,25231],[10,25200,25196],{"id":25201},"_1-项目概览与官方资源",[19,25203,25204],{},"官方文档：",[19,25206,25207],{},[25,25208,25209],{"href":25209,"rel":25210},"https:\u002F\u002Fhuggingface.co\u002Fdocs\u002Flerobot\u002Fso101",[29],[19,25212,25213],{},"官方代码仓库：",[19,25215,25216],{},[25,25217,25218],{"href":25218,"rel":25219},"https:\u002F\u002Fgithub.com\u002Fhuggingface\u002Flerobot",[29],[19,25221,25222],{},"复现大体流程：",[19,25224,25225],{},[48,25226],{"alt":50,"src":25227},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-001.png",[19,25229,25230],{},"本教程的目标是打通这条链路：",[19,25232,25233],{},"硬件连通 -> 遥操采集 -> 数据集上传 -> ACT 训练 -> 策略回放\u002F部署。",{"title":50,"searchDepth":203,"depth":203,"links":25235},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch1",{"title":25196,"description":791},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源","aG5q21Mq3Ar_oYCKvVnhRqPnnBwQLIhGvrE7YSibWFk",{"id":25242,"title":25243,"body":25244,"description":791,"extension":792,"meta":25358,"navigation":487,"path":25359,"seo":25360,"stem":25361,"__hash__":25362},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接.md","2. 环境准备与设备连接",{"type":7,"value":25245,"toc":25353},[25246,25249,25253,25256,25263,25267,25270,25279,25289,25293,25322,25325,25350],[10,25247,25243],{"id":25248},"_2-环境准备与设备连接",[14,25250,25252],{"id":25251},"_21-系统与环境","2.1 系统与环境",[19,25254,25255],{},"可用系统：Linux \u002F Windows(Wsl2) \u002F macOS。",[19,25257,25258,25259,25262],{},"建议使用 conda 创建独立虚拟环境，并按官方文档安装 ",[269,25260,25261],{},"lerobot"," 依赖。",[14,25264,25266],{"id":25265},"_22-机械臂串口识别","2.2 机械臂串口识别",[19,25268,25269],{},"需要用拓展坞把 usb 和电源接到 MotorBus。执行端口探测命令：",[316,25271,25273],{"className":24549,"code":25272,"language":24551,"meta":50,"style":50},"lerobot-find-out\n",[269,25274,25275],{"__ignoreMap":50},[324,25276,25277],{"class":326,"line":327},[324,25278,25272],{"class":734},[19,25280,25281,25282,1077,25285,25288],{},"按提示断开\u002F接回线缆后，记录识别出的串口（如 ",[269,25283,25284],{},"\u002Fdev\u002FttyACM0",[269,25286,25287],{},"\u002Fdev\u002FttyACM1","）。",[14,25290,25292],{"id":25291},"_23-串口授权","2.3 串口授权",[316,25294,25296],{"className":24549,"code":25295,"language":24551,"meta":50,"style":50},"sudo chmod 666 \u002Fdev\u002FttyACM0\nsudo chmod 666 \u002Fdev\u002FttyACM1\n",[269,25297,25298,25311],{"__ignoreMap":50},[324,25299,25300,25302,25305,25308],{"class":326,"line":327},[324,25301,735],{"class":734},[324,25303,25304],{"class":738}," chmod",[324,25306,25307],{"class":916}," 666",[324,25309,25310],{"class":738}," \u002Fdev\u002FttyACM0\n",[324,25312,25313,25315,25317,25319],{"class":326,"line":203},[324,25314,735],{"class":734},[324,25316,25304],{"class":738},[324,25318,25307],{"class":916},[324,25320,25321],{"class":738}," \u002Fdev\u002FttyACM1\n",[19,25323,25324],{},"说明：",[1871,25326,25327,25332,25338,25347],{},[195,25328,25329,25331],{},[269,25330,735],{},"：以 root 权限执行命令。",[195,25333,25334,25337],{},[269,25335,25336],{},"chmod","：修改设备节点权限。",[195,25339,25340,272,25343,25346],{},[269,25341,25342],{},"666",[269,25344,25345],{},"rw-rw-rw-","，所有用户可读写。",[195,25348,25349],{},"串口号必须替换为你机器上的真实端口。",[775,25351,25352],{},"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":50,"searchDepth":203,"depth":203,"links":25354},[25355,25356,25357],{"id":25251,"depth":203,"text":25252},{"id":25265,"depth":203,"text":25266},{"id":25291,"depth":203,"text":25292},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch2",{"title":25243,"description":791},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接","rkCwGsCF9P0Hxf6FNqwOMf_cN32ap76nbDFqDZjilSg",{"id":25364,"title":25365,"body":25366,"description":791,"extension":792,"meta":25527,"navigation":487,"path":25528,"seo":25529,"stem":25530,"__hash__":25531},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准.md","3. 电机ID配置与机械臂校准",{"type":7,"value":25367,"toc":25523},[25368,25372,25376,25382,25385,25442,25445,25449,25452,25520],[10,25369,25371],{"id":25370},"_3-电机-id-配置与机械臂校准","3. 电机 ID 配置与机械臂校准",[14,25373,25375],{"id":25374},"_31-配置电机-id","3.1 配置电机 ID",[19,25377,25378,25379,25381],{},"每个电机都需要唯一 ID。新电机默认常见为 ",[269,25380,1082],{},"，需要改成机械臂链路里不冲突的编号。",[19,25383,25384],{},"方式一：用 LeRobot 命令逐步写入。",[316,25386,25388],{"className":24549,"code":25387,"language":24551,"meta":50,"style":50},"# 主臂舵机配置 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",[269,25389,25390,25395,25403,25410,25415,25419,25424,25430,25437],{"__ignoreMap":50},[324,25391,25392],{"class":326,"line":327},[324,25393,25394],{"class":772},"# 主臂舵机配置 ID\n",[324,25396,25397,25400],{"class":326,"line":203},[324,25398,25399],{"class":734},"lerobot-setup-motors",[324,25401,25402],{"class":916}," \\\n",[324,25404,25405,25408],{"class":326,"line":338},[324,25406,25407],{"class":916},"  --teleop.type=so101_leader",[324,25409,25402],{"class":916},[324,25411,25412],{"class":326,"line":344},[324,25413,25414],{"class":916},"  --teleop.port=\u002Fdev\u002FttyACM0\n",[324,25416,25417],{"class":326,"line":484},[324,25418,488],{"emptyLinePlaceholder":487},[324,25420,25421],{"class":326,"line":491},[324,25422,25423],{"class":772},"# 从臂舵机配置 ID\n",[324,25425,25426,25428],{"class":326,"line":496},[324,25427,25399],{"class":734},[324,25429,25402],{"class":916},[324,25431,25432,25435],{"class":326,"line":502},[324,25433,25434],{"class":916},"  --robot.type=so101_follower",[324,25436,25402],{"class":916},[324,25438,25439],{"class":326,"line":508},[324,25440,25441],{"class":916},"  --robot.port=\u002Fdev\u002FttyACM1\n",[19,25443,25444],{},"方式二：使用对应舵机厂商调试工具改 ID（排障时也常用）。",[14,25446,25448],{"id":25447},"_32-机械臂校准","3.2 机械臂校准",[19,25450,25451],{},"校准时先把关节放到行程中间位置，按提示在全行程内运动每个关节。",[316,25453,25455],{"className":24549,"code":25454,"language":24551,"meta":50,"style":50},"# 主臂校准\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",[269,25456,25457,25462,25469,25475,25482,25487,25491,25496,25502,25508,25515],{"__ignoreMap":50},[324,25458,25459],{"class":326,"line":327},[324,25460,25461],{"class":772},"# 主臂校准\n",[324,25463,25464,25467],{"class":326,"line":203},[324,25465,25466],{"class":734},"lerobot-calibrate",[324,25468,25402],{"class":916},[324,25470,25471,25473],{"class":326,"line":338},[324,25472,25407],{"class":916},[324,25474,25402],{"class":916},[324,25476,25477,25480],{"class":326,"line":344},[324,25478,25479],{"class":916},"  --teleop.port=\u002Fdev\u002FttyACM0",[324,25481,25402],{"class":916},[324,25483,25484],{"class":326,"line":484},[324,25485,25486],{"class":916},"  --teleop.id=my_awesome_leader_arm\n",[324,25488,25489],{"class":326,"line":491},[324,25490,488],{"emptyLinePlaceholder":487},[324,25492,25493],{"class":326,"line":496},[324,25494,25495],{"class":772},"# 从臂校准\n",[324,25497,25498,25500],{"class":326,"line":502},[324,25499,25466],{"class":734},[324,25501,25402],{"class":916},[324,25503,25504,25506],{"class":326,"line":508},[324,25505,25434],{"class":916},[324,25507,25402],{"class":916},[324,25509,25510,25513],{"class":326,"line":514},[324,25511,25512],{"class":916},"  --robot.port=\u002Fdev\u002FttyACM1",[324,25514,25402],{"class":916},[324,25516,25517],{"class":326,"line":2343},[324,25518,25519],{"class":916},"  --robot.id=my_awesome_follower_arm\n",[775,25521,25522],{},"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":50,"searchDepth":203,"depth":203,"links":25524},[25525,25526],{"id":25374,"depth":203,"text":25375},{"id":25447,"depth":203,"text":25448},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch3-id",{"title":25365,"description":791},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准","FWPrvO5PLjTaitrb_QEQTCyLpoBM2eeoOlKlR4HoLMc",{"id":25533,"title":25534,"body":25535,"description":791,"extension":792,"meta":25726,"navigation":487,"path":25727,"seo":25728,"stem":25729,"__hash__":25730},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入.md","4. 遥操与相机接入",{"type":7,"value":25536,"toc":25722},[25537,25540,25544,25591,25595,25608,25671,25674,25719],[10,25538,25534],{"id":25539},"_4-遥操与相机接入",[14,25541,25543],{"id":25542},"_41-不带相机遥操","4.1 不带相机遥操",[316,25545,25547],{"className":24549,"code":25546,"language":24551,"meta":50,"style":50},"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",[269,25548,25549,25556,25562,25568,25575,25581,25587],{"__ignoreMap":50},[324,25550,25551,25554],{"class":326,"line":327},[324,25552,25553],{"class":734},"lerobot-teleoperate",[324,25555,25402],{"class":916},[324,25557,25558,25560],{"class":326,"line":203},[324,25559,25434],{"class":916},[324,25561,25402],{"class":916},[324,25563,25564,25566],{"class":326,"line":338},[324,25565,25512],{"class":916},[324,25567,25402],{"class":916},[324,25569,25570,25573],{"class":326,"line":344},[324,25571,25572],{"class":916},"  --robot.id=my_awesome_follower_arm",[324,25574,25402],{"class":916},[324,25576,25577,25579],{"class":326,"line":484},[324,25578,25407],{"class":916},[324,25580,25402],{"class":916},[324,25582,25583,25585],{"class":326,"line":491},[324,25584,25479],{"class":916},[324,25586,25402],{"class":916},[324,25588,25589],{"class":326,"line":496},[324,25590,25486],{"class":916},[14,25592,25594],{"id":25593},"_42-查找相机并启用可视化","4.2 查找相机并启用可视化",[316,25596,25598],{"className":24549,"code":25597,"language":24551,"meta":50,"style":50},"lerobot-find-cameras opencv\n",[269,25599,25600],{"__ignoreMap":50},[324,25601,25602,25605],{"class":326,"line":327},[324,25603,25604],{"class":734},"lerobot-find-cameras",[324,25606,25607],{"class":738}," opencv\n",[316,25609,25611],{"className":24549,"code":25610,"language":24551,"meta":50,"style":50},"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",[269,25612,25613,25619,25625,25631,25637,25647,25653,25659,25666],{"__ignoreMap":50},[324,25614,25615,25617],{"class":326,"line":327},[324,25616,25553],{"class":734},[324,25618,25402],{"class":916},[324,25620,25621,25623],{"class":326,"line":203},[324,25622,25434],{"class":916},[324,25624,25402],{"class":916},[324,25626,25627,25629],{"class":326,"line":338},[324,25628,25512],{"class":916},[324,25630,25402],{"class":916},[324,25632,25633,25635],{"class":326,"line":344},[324,25634,25572],{"class":916},[324,25636,25402],{"class":916},[324,25638,25639,25642,25645],{"class":326,"line":484},[324,25640,25641],{"class":916},"  --robot.cameras=",[324,25643,25644],{"class":738},"\"{ front: {type: opencv, index_or_path: \u002Fdev\u002Fvideo4, width: 640, height: 480, fps: 30}}\"",[324,25646,25402],{"class":916},[324,25648,25649,25651],{"class":326,"line":491},[324,25650,25407],{"class":916},[324,25652,25402],{"class":916},[324,25654,25655,25657],{"class":326,"line":496},[324,25656,25479],{"class":916},[324,25658,25402],{"class":916},[324,25660,25661,25664],{"class":326,"line":502},[324,25662,25663],{"class":916},"  --teleop.id=my_awesome_leader_arm",[324,25665,25402],{"class":916},[324,25667,25668],{"class":326,"line":508},[324,25669,25670],{"class":916},"  --display_data=true\n",[19,25672,25673],{},"相机参数说明：",[1871,25675,25676,25682,25688,25697,25707,25713],{},[195,25677,25678,25681],{},[269,25679,25680],{},"front","：相机名称。",[195,25683,25684,25687],{},[269,25685,25686],{},"type: opencv","：相机驱动类型。",[195,25689,25690,25693,25694,25288],{},[269,25691,25692],{},"index_or_path","：设备编号或设备路径（如 ",[269,25695,25696],{},"\u002Fdev\u002Fvideo4",[195,25698,25699,25702,25703,25706],{},[269,25700,25701],{},"width"," \u002F ",[269,25704,25705],{},"height","：图像分辨率。",[195,25708,25709,25712],{},[269,25710,25711],{},"fps","：采样帧率。",[195,25714,25715,25718],{},[269,25716,25717],{},"--display_data=true","：启用实时可视化。",[775,25720,25721],{},"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":50,"searchDepth":203,"depth":203,"links":25723},[25724,25725],{"id":25542,"depth":203,"text":25543},{"id":25593,"depth":203,"text":25594},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch4",{"title":25534,"description":791},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入","V7Ps_cVCNPrXljkxAGw33NUyz0IWtr3kXqwGCWdWgQY",{"id":25732,"title":25733,"body":25734,"description":791,"extension":792,"meta":25906,"navigation":487,"path":25907,"seo":25908,"stem":25909,"__hash__":25910},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备.md","5. HuggingFace认证与仓库准备",{"type":7,"value":25735,"toc":25901},[25736,25740,25744,25749,25754,25757,25799,25805,25809,25858,25863,25867,25870,25878,25883,25888,25893,25898],[10,25737,25739],{"id":25738},"_5-hugging-face-认证与仓库准备","5. Hugging Face 认证与仓库准备",[14,25741,25743],{"id":25742},"_51-生成访问令牌","5.1 生成访问令牌",[19,25745,25746],{},[48,25747],{"alt":50,"src":25748},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-002.png",[19,25750,25751],{},[48,25752],{"alt":50,"src":25753},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-003.png",[19,25755,25756],{},"建议使用环境变量保存 token，不要把真实 token 写进脚本和仓库。",[316,25758,25760],{"className":24549,"code":25759,"language":24551,"meta":50,"style":50},"export HF_TOKEN=\"your_huggingface_token\"\nhf auth login --token \"$HF_TOKEN\" --add-to-git-credential\n",[269,25761,25762,25775],{"__ignoreMap":50},[324,25763,25764,25767,25770,25772],{"class":326,"line":327},[324,25765,25766],{"class":863},"export",[324,25768,25769],{"class":867}," HF_TOKEN",[324,25771,913],{"class":863},[324,25773,25774],{"class":738},"\"your_huggingface_token\"\n",[324,25776,25777,25780,25783,25786,25789,25791,25794,25796],{"class":326,"line":203},[324,25778,25779],{"class":734},"hf",[324,25781,25782],{"class":738}," auth",[324,25784,25785],{"class":738}," login",[324,25787,25788],{"class":916}," --token",[324,25790,10453],{"class":738},[324,25792,25793],{"class":867},"$HF_TOKEN",[324,25795,1115],{"class":738},[324,25797,25798],{"class":916}," --add-to-git-credential\n",[19,25800,25801,25804],{},[269,25802,25803],{},"--add-to-git-credential"," 会把 token 写入 git 凭据系统，后续推拉 Hugging Face 仓库可免重复登录。",[14,25806,25808],{"id":25807},"_52-验证登录","5.2 验证登录",[316,25810,25812],{"className":24549,"code":25811,"language":24551,"meta":50,"style":50},"HF_USER=$(hf auth whoami | head -n 1)\necho \"$HF_USER\"\n",[269,25813,25814,25845],{"__ignoreMap":50},[324,25815,25816,25819,25821,25824,25826,25828,25831,25834,25837,25840,25843],{"class":326,"line":327},[324,25817,25818],{"class":867},"HF_USER",[324,25820,913],{"class":863},[324,25822,25823],{"class":867},"$(",[324,25825,25779],{"class":734},[324,25827,25782],{"class":738},[324,25829,25830],{"class":738}," whoami",[324,25832,25833],{"class":863}," |",[324,25835,25836],{"class":734}," head",[324,25838,25839],{"class":916}," -n",[324,25841,25842],{"class":916}," 1",[324,25844,874],{"class":867},[324,25846,25847,25850,25852,25855],{"class":326,"line":203},[324,25848,25849],{"class":916},"echo",[324,25851,10453],{"class":738},[324,25853,25854],{"class":867},"$HF_USER",[324,25856,25857],{"class":738},"\"\n",[19,25859,25860],{},[48,25861],{"alt":50,"src":25862},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-004.png",[14,25864,25866],{"id":25865},"_53-创建数据集仓库与模型仓库","5.3 创建数据集仓库与模型仓库",[19,25868,25869],{},"训练和回放都依赖远程仓库，需提前在 Hugging Face Hub 创建：",[1871,25871,25872,25875],{},[195,25873,25874],{},"Dataset Repo（用于上传演示数据）",[195,25876,25877],{},"Model Repo（用于上传训练后的 ACT 权重）",[19,25879,25880],{},[48,25881],{"alt":50,"src":25882},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-006.png",[19,25884,25885],{},[48,25886],{"alt":50,"src":25887},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-007.png",[19,25889,25890],{},[48,25891],{"alt":50,"src":25892},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-008.png",[19,25894,25895],{},[48,25896],{"alt":50,"src":25897},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-009.png",[775,25899,25900],{},"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":50,"searchDepth":203,"depth":203,"links":25902},[25903,25904,25905],{"id":25742,"depth":203,"text":25743},{"id":25807,"depth":203,"text":25808},{"id":25865,"depth":203,"text":25866},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch5-huggingface",{"title":25733,"description":791},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备","WTvwmhXny3fI_3GR6axPCny7WggFD_5lp-pvwwDej6Y",{"id":25912,"title":25913,"body":25914,"description":791,"extension":792,"meta":26111,"navigation":487,"path":26112,"seo":26113,"stem":26114,"__hash__":26115},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放.md","6. 数据录制重录与回放",{"type":7,"value":25915,"toc":26106},[25916,25920,25924,26020,26028,26033,26037,26053,26056,26060,26103],[10,25917,25919],{"id":25918},"_6-数据录制重录与回放","6. 数据录制、重录与回放",[14,25921,25923],{"id":25922},"_61-录制示教数据","6.1 录制示教数据",[316,25925,25927],{"className":24549,"code":25926,"language":24551,"meta":50,"style":50},"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",[269,25928,25929,25936,25942,25948,25954,25963,25969,25975,25981,25988,25998,26005,26015],{"__ignoreMap":50},[324,25930,25931,25934],{"class":326,"line":327},[324,25932,25933],{"class":734},"lerobot-record",[324,25935,25402],{"class":916},[324,25937,25938,25940],{"class":326,"line":203},[324,25939,25434],{"class":916},[324,25941,25402],{"class":916},[324,25943,25944,25946],{"class":326,"line":338},[324,25945,25512],{"class":916},[324,25947,25402],{"class":916},[324,25949,25950,25952],{"class":326,"line":344},[324,25951,25572],{"class":916},[324,25953,25402],{"class":916},[324,25955,25956,25958,25961],{"class":326,"line":484},[324,25957,25641],{"class":916},[324,25959,25960],{"class":738},"\"{ front: {type: opencv, index_or_path: 4, width: 640, height: 480, fps: 30}}\"",[324,25962,25402],{"class":916},[324,25964,25965,25967],{"class":326,"line":491},[324,25966,25407],{"class":916},[324,25968,25402],{"class":916},[324,25970,25971,25973],{"class":326,"line":496},[324,25972,25479],{"class":916},[324,25974,25402],{"class":916},[324,25976,25977,25979],{"class":326,"line":502},[324,25978,25663],{"class":916},[324,25980,25402],{"class":916},[324,25982,25983,25986],{"class":326,"line":508},[324,25984,25985],{"class":916},"  --display_data=true",[324,25987,25402],{"class":916},[324,25989,25990,25993,25996],{"class":326,"line":514},[324,25991,25992],{"class":916},"  --dataset.repo_id=",[324,25994,25995],{"class":738},"\"Embodied-AI-6\u002Fso101_test\"",[324,25997,25402],{"class":916},[324,25999,26000,26003],{"class":326,"line":2343},[324,26001,26002],{"class":916},"  --dataset.num_episodes=10",[324,26004,25402],{"class":916},[324,26006,26007,26010,26013],{"class":326,"line":2348},[324,26008,26009],{"class":916},"  --dataset.single_task=",[324,26011,26012],{"class":738},"\"Grab the green cube\"",[324,26014,25402],{"class":916},[324,26016,26017],{"class":326,"line":2354},[324,26018,26019],{"class":916},"  --resume=true\n",[1871,26021,26022],{},[195,26023,26024,26027],{},[269,26025,26026],{},"--resume=true","：已有同一数据集时继续追加 episode。",[19,26029,26030],{},[48,26031],{"alt":50,"src":26032},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-005.png",[14,26034,26036],{"id":26035},"_62-重录前清理本地缓存","6.2 重录前清理本地缓存",[316,26038,26040],{"className":24549,"code":26039,"language":24551,"meta":50,"style":50},"rm -rf \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[269,26041,26042],{"__ignoreMap":50},[324,26043,26044,26047,26050],{"class":326,"line":327},[324,26045,26046],{"class":734},"rm",[324,26048,26049],{"class":916}," -rf",[324,26051,26052],{"class":738}," \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[19,26054,26055],{},"注意：务必替换为自己的缓存路径，避免误删系统文件。",[14,26057,26059],{"id":26058},"_63-回放指定-episode","6.3 回放指定 episode",[316,26061,26063],{"className":24549,"code":26062,"language":24551,"meta":50,"style":50},"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",[269,26064,26065,26072,26078,26084,26090,26098],{"__ignoreMap":50},[324,26066,26067,26070],{"class":326,"line":327},[324,26068,26069],{"class":734},"lerobot-replay",[324,26071,25402],{"class":916},[324,26073,26074,26076],{"class":326,"line":203},[324,26075,25434],{"class":916},[324,26077,25402],{"class":916},[324,26079,26080,26082],{"class":326,"line":338},[324,26081,25512],{"class":916},[324,26083,25402],{"class":916},[324,26085,26086,26088],{"class":326,"line":344},[324,26087,25572],{"class":916},[324,26089,25402],{"class":916},[324,26091,26092,26094,26096],{"class":326,"line":484},[324,26093,25992],{"class":916},[324,26095,25995],{"class":738},[324,26097,25402],{"class":916},[324,26099,26100],{"class":326,"line":491},[324,26101,26102],{"class":916},"  --dataset.episode=0\n",[775,26104,26105],{},"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":50,"searchDepth":203,"depth":203,"links":26107},[26108,26109,26110],{"id":25922,"depth":203,"text":25923},{"id":26035,"depth":203,"text":26036},{"id":26058,"depth":203,"text":26059},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch6",{"title":25913,"description":791},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放","8nexk4omzICmhfOlIf4GxgMqb-maIwGqHLr4YUnYKQ4",{"id":26117,"title":26118,"body":26119,"description":791,"extension":792,"meta":26247,"navigation":487,"path":26248,"seo":26249,"stem":26250,"__hash__":26251},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练.md","7. ACT模型训练",{"type":7,"value":26120,"toc":26245},[26121,26125,26188,26191,26238,26243],[10,26122,26124],{"id":26123},"_7-act-模型训练","7. ACT 模型训练",[316,26126,26128],{"className":24549,"code":26127,"language":24551,"meta":50,"style":50},"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",[269,26129,26130,26137,26145,26152,26159,26166,26173,26180],{"__ignoreMap":50},[324,26131,26132,26135],{"class":326,"line":327},[324,26133,26134],{"class":734},"lerobot-train",[324,26136,25402],{"class":916},[324,26138,26139,26141,26143],{"class":326,"line":203},[324,26140,25992],{"class":916},[324,26142,25995],{"class":738},[324,26144,25402],{"class":916},[324,26146,26147,26150],{"class":326,"line":338},[324,26148,26149],{"class":916},"  --policy.type=act",[324,26151,25402],{"class":916},[324,26153,26154,26157],{"class":326,"line":344},[324,26155,26156],{"class":916},"  --output_dir=outputs\u002Ftrain\u002Fact_so101_test",[324,26158,25402],{"class":916},[324,26160,26161,26164],{"class":326,"line":484},[324,26162,26163],{"class":916},"  --job_name=act_so101_test",[324,26165,25402],{"class":916},[324,26167,26168,26171],{"class":326,"line":491},[324,26169,26170],{"class":916},"  --policy.device=cuda",[324,26172,25402],{"class":916},[324,26174,26175,26178],{"class":326,"line":496},[324,26176,26177],{"class":916},"  --wandb.enable=false",[324,26179,25402],{"class":916},[324,26181,26182,26185],{"class":326,"line":502},[324,26183,26184],{"class":916},"  --policy.repo_id=",[324,26186,26187],{"class":738},"\"Embodied-AI-6\u002Flerobot_new\"\n",[19,26189,26190],{},"参数说明：",[1871,26192,26193,26199,26205,26211,26217,26226,26232],{},[195,26194,26195,26198],{},[269,26196,26197],{},"--dataset.repo_id","：训练数据集仓库。",[195,26200,26201,26204],{},[269,26202,26203],{},"--policy.type=act","：策略模型类型为 ACT。",[195,26206,26207,26210],{},[269,26208,26209],{},"--output_dir","：本地训练输出目录。",[195,26212,26213,26216],{},[269,26214,26215],{},"--job_name","：训练任务名称。",[195,26218,26219,26222,26223,25288],{},[269,26220,26221],{},"--policy.device","：训练设备（如 ",[269,26224,26225],{},"cuda",[195,26227,26228,26231],{},[269,26229,26230],{},"--wandb.enable","：是否启用 WandB 可视化。",[195,26233,26234,26237],{},[269,26235,26236],{},"--policy.repo_id","：训练后模型推送目标仓库。",[19,26239,26240],{},[48,26241],{"alt":50,"src":26242},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-010.png",[775,26244,26105],{},{"title":50,"searchDepth":203,"depth":203,"links":26246},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch7-act",{"title":26118,"description":791},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练","Qt8rQhlcgcPzm395Ved_SsG10oi0KN9HpAkfBVuC-CM",{"id":26253,"title":26254,"body":26255,"description":791,"extension":792,"meta":26342,"navigation":487,"path":26343,"seo":26344,"stem":26345,"__hash__":26346},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集.md","8. 策略部署与自动采集",{"type":7,"value":26256,"toc":26340},[26257,26260,26263,26330,26338],[10,26258,26254],{"id":26259},"_8-策略部署与自动采集",[19,26261,26262],{},"使用已训练好的 ACT 模型驱动从臂执行，并继续录制新数据：",[316,26264,26266],{"className":24549,"code":26265,"language":24551,"meta":50,"style":50},"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",[269,26267,26268,26274,26280,26286,26294,26300,26307,26315,26323],{"__ignoreMap":50},[324,26269,26270,26272],{"class":326,"line":327},[324,26271,25933],{"class":734},[324,26273,25402],{"class":916},[324,26275,26276,26278],{"class":326,"line":203},[324,26277,25434],{"class":916},[324,26279,25402],{"class":916},[324,26281,26282,26284],{"class":326,"line":338},[324,26283,25512],{"class":916},[324,26285,25402],{"class":916},[324,26287,26288,26290,26292],{"class":326,"line":344},[324,26289,25641],{"class":916},[324,26291,25960],{"class":738},[324,26293,25402],{"class":916},[324,26295,26296,26298],{"class":326,"line":484},[324,26297,25572],{"class":916},[324,26299,25402],{"class":916},[324,26301,26302,26305],{"class":326,"line":491},[324,26303,26304],{"class":916},"  --display_data=false",[324,26306,25402],{"class":916},[324,26308,26309,26311,26313],{"class":326,"line":496},[324,26310,25992],{"class":916},[324,26312,25995],{"class":738},[324,26314,25402],{"class":916},[324,26316,26317,26319,26321],{"class":326,"line":502},[324,26318,26009],{"class":916},[324,26320,26012],{"class":738},[324,26322,25402],{"class":916},[324,26324,26325,26328],{"class":326,"line":508},[324,26326,26327],{"class":916},"  --policy.path=",[324,26329,26187],{"class":738},[1871,26331,26332],{},[195,26333,26334,26337],{},[269,26335,26336],{},"--policy.path","：已训练策略的本地路径或远程仓库路径。",[775,26339,26105],{},{"title":50,"searchDepth":203,"depth":203,"links":26341},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch8",{"title":26254,"description":791},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集","i9uzLIpUhl0JgoMvjV4YJ3r41m04fqol_qiMKUFJZA0",{"id":26348,"title":26349,"body":26350,"description":791,"extension":792,"meta":26379,"navigation":487,"path":26380,"seo":26381,"stem":26382,"__hash__":26383},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展.md","9. IsaacLab仿真拓展",{"type":7,"value":26351,"toc":26377},[26352,26356,26359,26365,26368,26374],[10,26353,26355],{"id":26354},"_9-isaaclab-仿真拓展","9. IsaacLab 仿真拓展",[19,26357,26358],{},"项目地址：",[19,26360,26361],{},[25,26362,26363],{"href":26363,"rel":26364},"https:\u002F\u002Fgithub.com\u002FLightwheelAI\u002Fleisaac",[29],[19,26366,26367],{},"参考教程：",[19,26369,26370],{},[25,26371,26372],{"href":26372,"rel":26373},"https:\u002F\u002Fcloud.tencent.com\u002Fdeveloper\u002Farticle\u002F2578981",[29],[19,26375,26376],{},"示例任务：仿真机械臂在厨房抓橘子。",{"title":50,"searchDepth":203,"depth":203,"links":26378},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch9-isaaclab",{"title":26349,"description":791},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展","yFxqMAnCXTDYdIYJyAM2pC4uxbPPomVMI3Y_my_JAQY",{"id":26385,"title":26386,"body":26387,"description":26391,"extension":792,"meta":26392,"navigation":487,"path":26393,"seo":26394,"stem":26395,"__hash__":26396},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex.md","lerobot-act算法复现",{"type":7,"value":26388,"toc":26389},[],{"title":50,"searchDepth":203,"depth":203,"links":26390},[],"act复现",{"category":24105},"\u002Fwiki\u002F2025-12-01-lerobot101-act",{"title":26386,"description":26391},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex","O0oFPbXs3nGtmkVmLGeGnWlJcQIVE-dAD_mqYPwnk3w",{"id":26398,"title":26399,"body":26400,"description":50,"extension":792,"meta":26702,"navigation":487,"path":26703,"seo":26704,"stem":26705,"__hash__":26706},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch1-简介.md","1.简介",{"type":7,"value":26401,"toc":26694},[26402,26405,26409,26419,26426,26433,26436,26443,26446,26449,26453,26465,26469,26515,26518,26521,26524,26527,26530,26534,26572,26578,26582,26636,26641,26644,26647,26652,26655,26660,26663,26666,26670,26673,26676,26680],[10,26403,26399],{"id":26404},"_1简介",[35,26406,26408],{"id":26407},"_11什么是-docker","1.1什么是 Docker？",[19,26410,26411,26412,26415,26416],{},"Docker 是一个开源的 ",[116,26413,26414],{},"应用容器引擎"," ，可以让开发者将应用和其所有依赖打包成一个“容器”， ",[116,26417,26418],{},"一次构建，到处运行。",[19,26420,26421,26422,26425],{},"“ ",[116,26423,26424],{},"一次构建，到处运行"," ”也就是说：",[192,26427,26428],{},[195,26429,26430],{},[116,26431,26432],{},"之前：",[19,26434,26435],{},"之前想跑ROS2+OpenCV+CUDA+CuDNN，我需要在一台电脑上一个一个环境的安装配置，如果我还要在另一台电脑上跑这个，也需要把第二台电脑也这样配置一遍。如果我的系统环境崩了，需要重装系统了，重装完后又双叒叕要再来一遍配置过程，很麻烦。",[192,26437,26438],{},[195,26439,26440],{},[116,26441,26442],{},"使用docker后：",[19,26444,26445],{},"（docker镜像和docker容器的概念在下下下面，下面这段话里看到镜像和容器的概念先接受就行。）",[19,26447,26448],{},"我只需要在电脑上用docker配置一遍这个ROS2+OpenCV+CUDA+CuDNN环境，然后用docker生成一个镜像，把这个镜像打包好。以后在任何一台电脑上，我都可以直接用这个镜像生成一个容器，而这个容器内就包含了我所需要的ROS2+OpenCV+CUDA+CuDNN环境，如果我的容器环境崩了，我只需要把坏掉的容器删掉，重新由镜像再生成一个新的容器即可。只需要配置一次，以后都可以一键安装这个环境。",[35,26450,26452],{"id":26451},"_12它是怎么工作的","1.2.它是怎么工作的？",[1871,26454,26455,26458],{},[195,26456,26457],{},"传统方式：软件运行需要在不同系统上安装各种库、配置环境，很麻烦。",[195,26459,26460,26461,26464],{},"Docker方式：打包成“容器”，环境和应用一起封装， ",[116,26462,26463],{},"无论在哪运行都一样稳定"," 。",[35,26466,26468],{"id":26467},"_13docker-的几个基本概念","1.3.Docker 的几个基本概念",[1003,26470,26471,26481],{},[1006,26472,26473],{},[1009,26474,26475,26478],{},[1012,26476,26477],{"align":24463},"概念",[1012,26479,26480],{"align":24463},"解释",[1049,26482,26483,26491,26499,26507],{},[1009,26484,26485,26488],{},[1054,26486,26487],{"align":24463},"镜像",[1054,26489,26490],{"align":24463},"Image，运行容器的模板，像是一个应用快照",[1009,26492,26493,26496],{},[1054,26494,26495],{"align":24463},"容器",[1054,26497,26498],{"align":24463},"Container，运行中的镜像实例，有自己的文件系统、网络等",[1009,26500,26501,26504],{},[1054,26502,26503],{"align":24463},"Dockerfile",[1054,26505,26506],{"align":24463},"构建镜像的脚本，写明安装哪些包、设置哪些环境变量等",[1009,26508,26509,26512],{},[1054,26510,26511],{"align":24463},"仓库",[1054,26513,26514],{"align":24463},"Registry，存放镜像的地方，比如 Docker Hub",[19,26516,26517],{},"抽象化理解:",[19,26519,26520],{},"Docker镜像≈C++类",[19,26522,26523],{},"Docker容器≈C++类实例(即对象)",[19,26525,26526],{},"形象化理解: 镜像可以类似于给电脑装系统的iso镜像文件。 容器可以类似于已经被装到电脑上的可以运行的系统。",[19,26528,26529],{},"把镜像变为容器时，需要用docker run命令添加很多参数，这个可以理解你这个电脑到底有啥硬件配置。",[35,26531,26533],{"id":26532},"_14类比理解","1.4.类比理解",[1003,26535,26536,26546],{},[1006,26537,26538],{},[1009,26539,26540,26543],{},[1012,26541,26542],{"align":24463},"传统部署",[1012,26544,26545],{"align":24463},"Docker部署",[1049,26547,26548,26556,26564],{},[1009,26549,26550,26553],{},[1054,26551,26552],{"align":24463},"手动安装依赖、调试版本不一致问题",[1054,26554,26555],{"align":24463},"一次打包环境和代码",[1009,26557,26558,26561],{},[1054,26559,26560],{"align":24463},"程序“裸奔”跑在系统上",[1054,26562,26563],{"align":24463},"程序“穿着容器”隔离运行",[1009,26565,26566,26569],{},[1054,26567,26568],{"align":24463},"容易“在我电脑上能跑”",[1054,26570,26571],{"align":24463},"保证“无论在哪都能跑”",[19,26573,26574,26575],{},"就像快递包裹： ",[116,26576,26577],{},"你不再关心内容怎么运送，因为包装已经帮你做好了一切隔离。",[35,26579,26581],{"id":26580},"_15docker-的核心优势","1.5.Docker 的核心优势",[1003,26583,26584,26594],{},[1006,26585,26586],{},[1009,26587,26588,26591],{},[1012,26589,26590],{"align":24463},"优势",[1012,26592,26593],{"align":24463},"说明",[1049,26595,26596,26604,26612,26620,26628],{},[1009,26597,26598,26601],{},[1054,26599,26600],{"align":24463},"轻量级",[1054,26602,26603],{"align":24463},"基于系统内核共享，启动速度快，占资源少",[1009,26605,26606,26609],{},[1054,26607,26608],{"align":24463},"跨平台",[1054,26610,26611],{"align":24463},"一次构建，到处运行（Windows、Linux、macOS 上都一致）",[1009,26613,26614,26617],{},[1054,26615,26616],{"align":24463},"易于迁移部署",[1054,26618,26619],{"align":24463},"应用和环境一起封装，不怕依赖不一致",[1009,26621,26622,26625],{},[1054,26623,26624],{"align":24463},"易于版本控制",[1054,26626,26627],{"align":24463},"镜像版本可控，支持回滚",[1009,26629,26630,26633],{},[1054,26631,26632],{"align":24463},"生态丰富",[1054,26634,26635],{"align":24463},"Docker Hub 上有成千上万的现成镜像可用",[192,26637,26638],{},[195,26639,26640],{},"在Linux上可以几乎实现无性能损失。",[19,26642,26643],{},"docker里的发行版和本机共用Linux内核。",[19,26645,26646],{},"CPU损耗不到1%。 内存接近原生没损耗。 硬盘损耗不到2%。 网络性能接近原生没有损耗。 显卡损耗小于1%。",[192,26648,26649],{},[195,26650,26651],{},"可以快速部署在绝大多数Linux发行版",[19,26653,26654],{},"你想跑ROS2，之前是仅在Ubuntu上是比较好部署的，但是现在你可以使用任意发行版，比如Fedora，ArchLinux等发行版上也能通过docker跑ROS2。",[192,26656,26657],{},[195,26658,26659],{},"配置环境简单",[19,26661,26662],{},"之前你需要在Ubuntu上按照教程安装ROS2，CUDA，CuDNN，OpenCV4等等，但是只要你用了Docker，可以直接用docker pull命令拉取别人配置好的开发环境，只需要一条命令直通罗马。",[19,26664,26665],{},"你仅仅只需要把一个发行版最基础的东西配置好，比如那些仓库换源，输入法，显卡驱动（只用让显卡工作起来，不用在本机配置CUDA和CuDNN）等。",[192,26667,26668],{},[195,26669,26632],{},[19,26671,26672],{},"生态极其丰富，有很多东西即便自己不构建，也能在dockerhub上找到别人构建好的镜像，自己连编译都省去了。",[19,26674,26675],{},"比如之前配置cuda和cudnn的话，需要在本机先安装英伟达驱动，再安装CUDA和CuDNN。而现在，我们只需要本机安装英伟达驱动，英伟达官方在DockerHub上提供了CUDA和CUDNN的镜像，他们已经编译好了，我们可以直接拿来用。",[35,26677,26679],{"id":26678},"_16常见-docker-应用场景","1.6.常见 Docker 应用场景",[1871,26681,26682,26685,26688,26691],{},[195,26683,26684],{},"本地开发：快速搭建各种开发环境（如 Python + Jupyter、ROS + Gazebo）",[195,26686,26687],{},"测试部署：CI\u002FCD 中自动测试、构建、部署",[195,26689,26690],{},"微服务架构：每个服务一个容器，灵活组合",[195,26692,26693],{},"科研工具封装：复现别人论文环境，或封装自己的项目发给他人使用",{"title":50,"searchDepth":203,"depth":203,"links":26695},[26696,26697,26698,26699,26700,26701],{"id":26407,"depth":338,"text":26408},{"id":26451,"depth":338,"text":26452},{"id":26467,"depth":338,"text":26468},{"id":26532,"depth":338,"text":26533},{"id":26580,"depth":338,"text":26581},{"id":26678,"depth":338,"text":26679},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch1",{"title":26399,"description":50},"wiki\u002F2025-11-10-Docker\u002Fch1-简介","RWfN-VzqXrPFzaf024ZOqhkFsjhm2OaDsrg8ij3bqRg",{"id":26708,"title":26709,"body":26710,"description":50,"extension":792,"meta":27441,"navigation":487,"path":27442,"seo":27443,"stem":27444,"__hash__":27445},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch2-安装Docker.md","2.安装Docker",{"type":7,"value":26711,"toc":27436},[26712,26715,26719,26722,26725,26731,26737,26741,26750,26753,26810,26813,26864,26867,26950,26953,26989,26993,27004,27017,27024,27027,27107,27110,27160,27163,27186,27190,27196,27199,27215,27221,27224,27240,27246,27249,27265,27279,27285,27305,27311,27314,27326,27332,27335,27349,27355,27358,27378,27383,27386,27389,27393,27396,27399,27402,27409,27412,27415,27418,27423,27428,27433],[10,26713,26709],{"id":26714},"_2安装docker",[35,26716,26718],{"id":26717},"_21linux安装docker-engine推荐","2.1.Linux安装Docker Engine(推荐)",[19,26720,26721],{},"Linux只需要安装Docker Engine就可以，不要安装docker desktop，那玩意是专门给Mac和Windows用的。",[19,26723,26724],{},"Linux跑docker性能损失很低，而Windows和MacOS跑docker损失相对于大一些。",[19,26726,26727],{},[25,26728,26729],{"href":26729,"rel":26730},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002F",[29],[19,26732,26733],{},[25,26734,26735],{"href":26735,"rel":26736},"https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fhelp\u002Fdocker-ce\u002F",[29],[151,26738,26740],{"id":26739},"_211ubuntuapt","2.1.1.Ubuntu（APT）",[19,26742,26743,26744,26749],{},"以下内容根据 ",[25,26745,26748],{"href":26746,"rel":26747},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Fubuntu\u002F",[29],"官方文档"," 修改而来。",[19,26751,26752],{},"如果你过去安装过 docker，先删掉：",[316,26754,26756],{"className":24549,"code":26755,"language":24551,"meta":50,"style":50},"for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done\n",[269,26757,26758],{"__ignoreMap":50},[324,26759,26760,26762,26765,26768,26771,26774,26777,26780,26783,26786,26789,26792,26795,26798,26801,26804,26807],{"class":326,"line":327},[324,26761,3754],{"class":863},[324,26763,26764],{"class":867}," pkg ",[324,26766,26767],{"class":863},"in",[324,26769,26770],{"class":738}," docker.io",[324,26772,26773],{"class":738}," docker-doc",[324,26775,26776],{"class":738}," docker-compose",[324,26778,26779],{"class":738}," docker-compose-v2",[324,26781,26782],{"class":738}," podman-docker",[324,26784,26785],{"class":738}," containerd",[324,26787,26788],{"class":738}," runc",[324,26790,26791],{"class":867},"; ",[324,26793,26794],{"class":863},"do",[324,26796,26797],{"class":734}," sudo",[324,26799,26800],{"class":738}," apt-get",[324,26802,26803],{"class":738}," remove",[324,26805,26806],{"class":867}," $pkg; ",[324,26808,26809],{"class":863},"done\n",[19,26811,26812],{},"首先安装依赖和GPG：",[316,26814,26818],{"className":26815,"code":26816,"language":26817,"meta":50,"style":50},"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",[269,26819,26820,26825,26830,26835,26840,26845,26850,26854,26859],{"__ignoreMap":50},[324,26821,26822],{"class":326,"line":327},[324,26823,26824],{},"# Add Docker's official GPG key:\n",[324,26826,26827],{"class":326,"line":203},[324,26828,26829],{},"sudo apt-get update\n",[324,26831,26832],{"class":326,"line":338},[324,26833,26834],{},"sudo apt-get install ca-certificates curl\n",[324,26836,26837],{"class":326,"line":344},[324,26838,26839],{},"sudo install -m 0755 -d \u002Fetc\u002Fapt\u002Fkeyrings\n",[324,26841,26842],{"class":326,"line":484},[324,26843,26844],{},"sudo curl -fsSL https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Fubuntu\u002Fgpg | sudo gpg --dearmor -o \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[324,26846,26847],{"class":326,"line":491},[324,26848,26849],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.asc\n",[324,26851,26852],{"class":326,"line":496},[324,26853,488],{"emptyLinePlaceholder":487},[324,26855,26856],{"class":326,"line":502},[324,26857,26858],{},"# 如果上面这行报错就弄下面这行\n",[324,26860,26861],{"class":326,"line":508},[324,26862,26863],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[19,26865,26866],{},"信任 Docker 的 GPG 公钥并添加仓库：",[316,26868,26870],{"className":24549,"code":26869,"language":24551,"meta":50,"style":50},"# 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",[269,26871,26872,26877,26883,26900,26933],{"__ignoreMap":50},[324,26873,26874],{"class":326,"line":327},[324,26875,26876],{"class":772},"# Add the repository to Apt sources:\n",[324,26878,26879,26881],{"class":326,"line":203},[324,26880,25849],{"class":916},[324,26882,25402],{"class":916},[324,26884,26885,26888,26891,26894,26897],{"class":326,"line":338},[324,26886,26887],{"class":738},"  \"deb [arch=$(",[324,26889,26890],{"class":734},"dpkg",[324,26892,26893],{"class":916}," --print-architecture",[324,26895,26896],{"class":738},") signed-by=\u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg] https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce\u002Flinux\u002Fubuntu ",[324,26898,26899],{"class":916},"\\\n",[324,26901,26902,26905,26907,26909,26912,26915,26917,26919,26922,26924,26926,26929,26931],{"class":326,"line":344},[324,26903,26904],{"class":738},"  \"",[324,26906,25823],{"class":867},[324,26908,1422],{"class":916},[324,26910,26911],{"class":738}," \u002Fetc\u002Fos-release",[324,26913,26914],{"class":867}," && ",[324,26916,25849],{"class":916},[324,26918,10453],{"class":738},[324,26920,26921],{"class":867},"$VERSION_CODENAME",[324,26923,1115],{"class":738},[324,26925,1293],{"class":867},[324,26927,26928],{"class":738},"\" stable\"",[324,26930,25833],{"class":863},[324,26932,25402],{"class":916},[324,26934,26935,26938,26941,26944,26947],{"class":326,"line":484},[324,26936,26937],{"class":734},"  sudo",[324,26939,26940],{"class":738}," tee",[324,26942,26943],{"class":738}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fdocker.list",[324,26945,26946],{"class":863}," >",[324,26948,26949],{"class":738}," \u002Fdev\u002Fnull\n",[19,26951,26952],{},"最后安装",[316,26954,26956],{"className":24549,"code":26955,"language":24551,"meta":50,"style":50},"sudo apt-get update\nsudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[269,26957,26958,26966],{"__ignoreMap":50},[324,26959,26960,26962,26964],{"class":326,"line":327},[324,26961,735],{"class":734},[324,26963,26800],{"class":738},[324,26965,742],{"class":738},[324,26967,26968,26970,26972,26974,26977,26980,26983,26986],{"class":326,"line":203},[324,26969,735],{"class":734},[324,26971,26800],{"class":738},[324,26973,760],{"class":738},[324,26975,26976],{"class":738}," docker-ce",[324,26978,26979],{"class":738}," docker-ce-cli",[324,26981,26982],{"class":738}," containerd.io",[324,26984,26985],{"class":738}," docker-buildx-plugin",[324,26987,26988],{"class":738}," docker-compose-plugin\n",[151,26990,26992],{"id":26991},"_212fedoradnf5","2.1.2.Fedora（DNF5）",[19,26994,26995,26996,26999,27000,27003],{},"查看自己自己包管理工具版本（dnf是 ",[116,26997,26998],{},"Fedora \u002F RHEL \u002F CentOS"," 系列 Linux 系统中的 ",[116,27001,27002],{},"包管理器（包管理工具）"," ，用来安装、卸载、更新和管理软件包）",[316,27005,27007],{"className":24549,"code":27006,"language":24551,"meta":50,"style":50},"dnf --version\n",[269,27008,27009],{"__ignoreMap":50},[324,27010,27011,27014],{"class":326,"line":327},[324,27012,27013],{"class":734},"dnf",[324,27015,27016],{"class":916}," --version\n",[19,27018,26743,27019,27023],{},[25,27020,26748],{"href":27021,"rel":27022},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Ffedora\u002F",[29]," 修改而来。(官方教程还是DNF4,太老了，请看下方的教程)",[19,27025,27026],{},"如果你之前安装过 docker，请先删掉",[316,27028,27030],{"className":24549,"code":27029,"language":24551,"meta":50,"style":50},"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",[269,27031,27032,27046,27053,27060,27067,27074,27081,27088,27095,27102],{"__ignoreMap":50},[324,27033,27034,27036,27039,27041,27044],{"class":326,"line":327},[324,27035,735],{"class":734},[324,27037,27038],{"class":738}," dnf",[324,27040,26803],{"class":738},[324,27042,27043],{"class":738}," docker",[324,27045,25402],{"class":916},[324,27047,27048,27051],{"class":326,"line":203},[324,27049,27050],{"class":738},"                  docker-client",[324,27052,25402],{"class":916},[324,27054,27055,27058],{"class":326,"line":338},[324,27056,27057],{"class":738},"                  docker-client-latest",[324,27059,25402],{"class":916},[324,27061,27062,27065],{"class":326,"line":344},[324,27063,27064],{"class":738},"                  docker-common",[324,27066,25402],{"class":916},[324,27068,27069,27072],{"class":326,"line":484},[324,27070,27071],{"class":738},"                  docker-latest",[324,27073,25402],{"class":916},[324,27075,27076,27079],{"class":326,"line":491},[324,27077,27078],{"class":738},"                  docker-latest-logrotate",[324,27080,25402],{"class":916},[324,27082,27083,27086],{"class":326,"line":496},[324,27084,27085],{"class":738},"                  docker-logrotate",[324,27087,25402],{"class":916},[324,27089,27090,27093],{"class":326,"line":502},[324,27091,27092],{"class":738},"                  docker-selinux",[324,27094,25402],{"class":916},[324,27096,27097,27100],{"class":326,"line":508},[324,27098,27099],{"class":738},"                  docker-engine-selinux",[324,27101,25402],{"class":916},[324,27103,27104],{"class":326,"line":514},[324,27105,27106],{"class":738},"                  docker-engine\n",[19,27108,27109],{},"安装依赖，下载 repo 文件，并把软件仓库地址替换为镜像站：",[316,27111,27113],{"className":24549,"code":27112,"language":24551,"meta":50,"style":50},"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",[269,27114,27115,27129,27144],{"__ignoreMap":50},[324,27116,27117,27119,27121,27124,27126],{"class":326,"line":327},[324,27118,735],{"class":734},[324,27120,27038],{"class":738},[324,27122,27123],{"class":916}," -y",[324,27125,760],{"class":738},[324,27127,27128],{"class":738}," dnf-plugins-core\n",[324,27130,27131,27133,27135,27138,27141],{"class":326,"line":203},[324,27132,735],{"class":734},[324,27134,27038],{"class":738},[324,27136,27137],{"class":738}," config-manager",[324,27139,27140],{"class":738}," addrepo",[324,27142,27143],{"class":916}," --from-repofile=https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Ffedora\u002Fdocker-ce.repo\n",[324,27145,27146,27148,27151,27154,27157],{"class":326,"line":338},[324,27147,735],{"class":734},[324,27149,27150],{"class":738}," sed",[324,27152,27153],{"class":916}," -i",[324,27155,27156],{"class":738}," 's+https:\u002F\u002Fdownload.docker.com+https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce+'",[324,27158,27159],{"class":738}," \u002Fetc\u002Fyum.repos.d\u002Fdocker-ce.repo\n",[19,27161,27162],{},"最后安装：",[316,27164,27166],{"className":24549,"code":27165,"language":24551,"meta":50,"style":50},"sudo dnf install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[269,27167,27168],{"__ignoreMap":50},[324,27169,27170,27172,27174,27176,27178,27180,27182,27184],{"class":326,"line":327},[324,27171,735],{"class":734},[324,27173,27038],{"class":738},[324,27175,760],{"class":738},[324,27177,26976],{"class":738},[324,27179,26979],{"class":738},[324,27181,26982],{"class":738},[324,27183,26985],{"class":738},[324,27185,26988],{"class":738},[35,27187,27189],{"id":27188},"_22配置环境","2.2.配置环境",[151,27191,27193,288],{"id":27192},"_221检查-docker-服务状态",[116,27194,27195],{},"2.2.1.检查 Docker 服务状态",[19,27197,27198],{},"在 Linux 上，你可以通过以下命令检查 Docker 服务的状态：",[316,27200,27202],{"className":24549,"code":27201,"language":24551,"meta":50,"style":50},"systemctl status docker\n",[269,27203,27204],{"__ignoreMap":50},[324,27205,27206,27209,27212],{"class":326,"line":327},[324,27207,27208],{"class":734},"systemctl",[324,27210,27211],{"class":738}," status",[324,27213,27214],{"class":738}," docker\n",[151,27216,27218,288],{"id":27217},"_222启动-docker-服务",[116,27219,27220],{},"2.2.2.启动 Docker 服务",[19,27222,27223],{},"如果服务没有运行，可以使用以下命令启动 Docker 服务：",[316,27225,27227],{"className":24549,"code":27226,"language":24551,"meta":50,"style":50},"sudo systemctl start docker\n",[269,27228,27229],{"__ignoreMap":50},[324,27230,27231,27233,27236,27238],{"class":326,"line":327},[324,27232,735],{"class":734},[324,27234,27235],{"class":738}," systemctl",[324,27237,4913],{"class":738},[324,27239,27214],{"class":738},[151,27241,27243,288],{"id":27242},"_223设置-docker-开机自启",[116,27244,27245],{},"2.2.3.设置 Docker 开机自启",[19,27247,27248],{},"如果你希望 Docker 在每次启动时自动运行，可以启用开机自启：",[316,27250,27252],{"className":24549,"code":27251,"language":24551,"meta":50,"style":50},"sudo systemctl enable docker\n",[269,27253,27254],{"__ignoreMap":50},[324,27255,27256,27258,27260,27263],{"class":326,"line":327},[324,27257,735],{"class":734},[324,27259,27235],{"class":738},[324,27261,27262],{"class":738}," enable",[324,27264,27214],{"class":738},[151,27266,27268,14524,27271,14524,27276,288],{"id":27267},"_224将用户添加到-docker-组",[116,27269,27270],{},"2.2.4.将用户添加到",[116,27272,27273],{},[269,27274,27275],{},"docker",[116,27277,27278],{},"组",[19,27280,27281,27282,27284],{},"使用以下命令将当前用户添加到 ",[269,27283,27275],{}," 组：",[316,27286,27288],{"className":24549,"code":27287,"language":24551,"meta":50,"style":50},"sudo usermod -aG docker $USER\n",[269,27289,27290],{"__ignoreMap":50},[324,27291,27292,27294,27297,27300,27302],{"class":326,"line":327},[324,27293,735],{"class":734},[324,27295,27296],{"class":738}," usermod",[324,27298,27299],{"class":916}," -aG",[324,27301,27043],{"class":738},[324,27303,27304],{"class":867}," $USER\n",[151,27306,27308,288],{"id":27307},"_225退出并重新登录",[116,27309,27310],{},"2.2.5.退出并重新登录",[19,27312,27313],{},"执行完上述命令后，你需要退出当前会话并重新登录，或者运行以下命令使更改生效：",[316,27315,27317],{"className":24549,"code":27316,"language":24551,"meta":50,"style":50},"newgrp docker\n",[269,27318,27319],{"__ignoreMap":50},[324,27320,27321,27324],{"class":326,"line":327},[324,27322,27323],{"class":734},"newgrp",[324,27325,27214],{"class":738},[151,27327,27329,288],{"id":27328},"_226重新启动-docker-服务如果需要",[116,27330,27331],{},"2.2.6.重新启动 Docker 服务（如果需要）",[19,27333,27334],{},"确保 Docker 服务正在运行，可以使用以下命令：",[316,27336,27337],{"className":24549,"code":27226,"language":24551,"meta":50,"style":50},[269,27338,27339],{"__ignoreMap":50},[324,27340,27341,27343,27345,27347],{"class":326,"line":327},[324,27342,735],{"class":734},[324,27344,27235],{"class":738},[324,27346,4913],{"class":738},[324,27348,27214],{"class":738},[151,27350,27352,288],{"id":27351},"_227重启电脑后检查-docker-服务状态",[116,27353,27354],{},"2.2.7.重启电脑后检查 Docker 服务状态",[19,27356,27357],{},"先重启电脑，接着你可以通过以下命令检查 Docker 服务的状态，看看是否正常：",[316,27359,27361],{"className":24549,"code":27360,"language":24551,"meta":50,"style":50},"sudo reboot\nsystemctl status docker\n",[269,27362,27363,27370],{"__ignoreMap":50},[324,27364,27365,27367],{"class":326,"line":327},[324,27366,735],{"class":734},[324,27368,27369],{"class":738}," reboot\n",[324,27371,27372,27374,27376],{"class":326,"line":203},[324,27373,27208],{"class":734},[324,27375,27211],{"class":738},[324,27377,27214],{"class":738},[19,27379,27380],{},[48,27381],{"alt":50,"src":27382},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-001.png",[19,27384,27385],{},"第三行显示enabled说明开机自启动成功",[19,27387,27388],{},"按q退出",[35,27390,27392],{"id":27391},"_23安装docker-desktopwinmac","2.3.安装Docker Desktop（Win，Mac）",[19,27394,27395],{},"优先使用linux来使用docker是比较好的",[19,27397,27398],{},"(Docker Desktop在Windows和MacOS使用的是虚拟机，性能有损失，在这俩系统上可以用，但是你需要接受这些性能损失。在Windows上性能损失和WSL2的损失几乎一样，因为Windows的docker desktop基于wsl2)",[19,27400,27401],{},"(Docker Desktop在Linux上只是Docker Engine的一个GUI管理工具，依然默认使用Docker Engine开启容器，所以依然几乎没有损耗，讨厌用命令行的可以考虑使用)",[19,27403,27404,27405],{},"官方下载安装:",[25,27406,27407],{"href":27407,"rel":27408},"https:\u002F\u002Fwww.docker.com\u002F",[29],[19,27410,27411],{},"Windows的Docker显卡直通与USB直通:",[19,27413,27414],{},"在Windows上想Nvidia显卡直通的话，需要先去DockerDesktop设置里开启WSL2支持并勾选一个wsl2的发行版，比如Ubuntu22.04，紧接着，需要进入wsl2的Ubuntu22.04中安装NVIDIA Container Toolkit，教程在下方。",[19,27416,27417],{},"在Windows的Docker上想要USB直通需要先让wsl2直通该usb，再在docker run命令将该设备添加到docker。(如果把wsl2所有设备全挂载到docker了，那么只需要让usb直通wsl2)",[19,27419,27420],{},[48,27421],{"alt":50,"src":27422},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-002.png",[19,27424,27425],{},[48,27426],{"alt":50,"src":27427},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-003.png",[19,27429,27430],{},[48,27431],{"alt":50,"src":27432},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-004.png",[775,27434,27435],{},"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":50,"searchDepth":203,"depth":203,"links":27437},[27438,27439,27440],{"id":26717,"depth":338,"text":26718},{"id":27188,"depth":338,"text":27189},{"id":27391,"depth":338,"text":27392},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch2-docker",{"title":26709,"description":50},"wiki\u002F2025-11-10-Docker\u002Fch2-安装Docker","CcH--l5LuaypKBoO7AJJUKqaK8NHmo0d-iudiZdasMo",{"id":27447,"title":27448,"body":27449,"description":27456,"extension":792,"meta":28149,"navigation":487,"path":28150,"seo":28151,"stem":28152,"__hash__":28153},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch3-Docker直通.md","3.Docker直通",{"type":7,"value":27450,"toc":28143},[27451,27454,27457,27461,27466,27471,27474,27502,27507,27516,27519,27524,27528,27535,27540,27546,27550,27553,27557,27562,27654,27659,27677,27682,27703,27708,27724,27728,27733,27762,27767,27813,27818,27862,27870,27887,27892,27908,27913,27927,27930,27933,27936,27939,27968,27971,27976,27980,27983,27986,27992,27995,27998,28001,28063,28070,28075,28078,28096,28100,28103,28120,28123,28126,28140],[10,27452,27448],{"id":27453},"_3docker直通",[19,27455,27456],{},"将宿主机的硬件设备或特定资源直接传递给Docker容器使用的技术",[35,27458,27460],{"id":27459},"_31usb直通","3.1.USB直通",[19,27462,27463],{},[48,27464],{"alt":50,"src":27465},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-005.png",[192,27467,27468],{},[195,27469,27470],{},"方法一(不是很推荐新手)：",[19,27472,27473],{},"创建容器的时候把需要的设备加在红色部分这里即可。可以通过下面的命令查看想要的设备的名字。",[316,27475,27477],{"className":24549,"code":27476,"language":24551,"meta":50,"style":50},"ls \u002Fdev\n#例如\n--device=\u002Fdev\u002Ftty_USB0\n",[269,27478,27479,27487,27492],{"__ignoreMap":50},[324,27480,27481,27484],{"class":326,"line":327},[324,27482,27483],{"class":734},"ls",[324,27485,27486],{"class":738}," \u002Fdev\n",[324,27488,27489],{"class":326,"line":203},[324,27490,27491],{"class":772},"#例如\n",[324,27493,27494,27497,27499],{"class":326,"line":338},[324,27495,27496],{"class":867},"--device",[324,27498,913],{"class":863},[324,27500,27501],{"class":738},"\u002Fdev\u002Ftty_USB0\n",[192,27503,27504],{"start":203},[195,27505,27506],{},"方法二(个人更加推荐，不用重新再挂载了，虽然安全性会降低，但是别人利用安全权限能够攻击你的概率很低很低，企业服务器才需要提防)：",[316,27508,27510],{"className":24549,"code":27509,"language":24551,"meta":50,"style":50},"--privileged\n",[269,27511,27512],{"__ignoreMap":50},[324,27513,27514],{"class":326,"line":327},[324,27515,27509],{"class":734},[19,27517,27518],{},"直接添加一行绿色部分，然后所有设备都会被挂载到docker了。(红色部分就不用写了）",[19,27520,27521],{},[48,27522],{"alt":50,"src":27523},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-006.png",[35,27525,27527],{"id":27526},"_32nvidia显卡直通","3.2.NVIDIA显卡直通",[19,27529,27530,27531,27534],{},"NVIDIA Container Toolkit使用户 ",[116,27532,27533],{},"能够构建和运行GPU加速的容器"," 。该工具包包括一个容器运行库和实用程序，用于自动配置容器以利用NVIDIA GPU。",[19,27536,27537],{},[48,27538],{"alt":50,"src":27539},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-007.png",[19,27541,27542],{},[25,27543,27544],{"href":27544,"rel":27545},"https:\u002F\u002Fdocs.nvidia.com\u002Fdatacenter\u002Fcloud-native\u002Fcontainer-toolkit\u002Flatest\u002Finstall-guide.html",[29],[151,27547,27549],{"id":27548},"_321安装","3.2.1.安装",[19,27551,27552],{},"（尽量能看官方就看官方的，安装方式可能会更新）",[575,27554,27556],{"id":27555},"_3211ubuntu","3.2.1.1.Ubuntu",[192,27558,27559],{},[195,27560,27561],{},"配置存储库 并更新",[316,27563,27565],{"className":24549,"code":27564,"language":24551,"meta":50,"style":50},"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",[269,27566,27567,27596,27616,27628,27640,27646],{"__ignoreMap":50},[324,27568,27569,27572,27575,27578,27580,27582,27585,27588,27591,27594],{"class":326,"line":327},[324,27570,27571],{"class":734},"curl",[324,27573,27574],{"class":916}," -fsSL",[324,27576,27577],{"class":738}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fgpgkey",[324,27579,25833],{"class":863},[324,27581,26797],{"class":734},[324,27583,27584],{"class":738}," gpg",[324,27586,27587],{"class":916}," --dearmor",[324,27589,27590],{"class":916}," -o",[324,27592,27593],{"class":738}," \u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg",[324,27595,25402],{"class":916},[324,27597,27598,27601,27603,27606,27609,27612,27614],{"class":326,"line":203},[324,27599,27600],{"class":867},"  && ",[324,27602,27571],{"class":734},[324,27604,27605],{"class":916}," -s",[324,27607,27608],{"class":916}," -L",[324,27610,27611],{"class":738}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Fdeb\u002Fnvidia-container-toolkit.list",[324,27613,25833],{"class":863},[324,27615,25402],{"class":916},[324,27617,27618,27621,27624,27626],{"class":326,"line":338},[324,27619,27620],{"class":734},"    sed",[324,27622,27623],{"class":738}," 's#deb https:\u002F\u002F#deb [signed-by=\u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg] https:\u002F\u002F#g'",[324,27625,25833],{"class":863},[324,27627,25402],{"class":916},[324,27629,27630,27633,27635,27638],{"class":326,"line":344},[324,27631,27632],{"class":734},"    sudo",[324,27634,26940],{"class":738},[324,27636,27637],{"class":738}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fnvidia-container-toolkit.list",[324,27639,25402],{"class":916},[324,27641,27642,27644],{"class":326,"line":484},[324,27643,27600],{"class":867},[324,27645,26899],{"class":916},[324,27647,27648,27650,27652],{"class":326,"line":491},[324,27649,27632],{"class":734},[324,27651,26800],{"class":738},[324,27653,742],{"class":738},[192,27655,27656],{"start":203},[195,27657,27658],{},"安装nvidia-docker2",[316,27660,27662],{"className":24549,"code":27661,"language":24551,"meta":50,"style":50},"sudo apt-get install -y nvidia-docker2\n",[269,27663,27664],{"__ignoreMap":50},[324,27665,27666,27668,27670,27672,27674],{"class":326,"line":327},[324,27667,735],{"class":734},[324,27669,26800],{"class":738},[324,27671,760],{"class":738},[324,27673,27123],{"class":916},[324,27675,27676],{"class":738}," nvidia-docker2\n",[192,27678,27679],{"start":338},[195,27680,27681],{},"使用nvidia-ctk命令配置container runtime",[316,27683,27685],{"className":24549,"code":27684,"language":24551,"meta":50,"style":50},"sudo nvidia-ctk runtime configure --runtime=docker\n",[269,27686,27687],{"__ignoreMap":50},[324,27688,27689,27691,27694,27697,27700],{"class":326,"line":327},[324,27690,735],{"class":734},[324,27692,27693],{"class":738}," nvidia-ctk",[324,27695,27696],{"class":738}," runtime",[324,27698,27699],{"class":738}," configure",[324,27701,27702],{"class":916}," --runtime=docker\n",[192,27704,27705],{"start":344},[195,27706,27707],{},"重启docker服务:",[316,27709,27711],{"className":24549,"code":27710,"language":24551,"meta":50,"style":50},"sudo systemctl restart docker\n",[269,27712,27713],{"__ignoreMap":50},[324,27714,27715,27717,27719,27722],{"class":326,"line":327},[324,27716,735],{"class":734},[324,27718,27235],{"class":738},[324,27720,27721],{"class":738}," restart",[324,27723,27214],{"class":738},[575,27725,27727],{"id":27726},"_3212fedora","3.2.1.2.Fedora",[192,27729,27730],{},[195,27731,27732],{},"配置存储库",[316,27734,27736],{"className":24549,"code":27735,"language":24551,"meta":50,"style":50},"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",[269,27737,27738,27753],{"__ignoreMap":50},[324,27739,27740,27742,27744,27746,27749,27751],{"class":326,"line":327},[324,27741,27571],{"class":734},[324,27743,27605],{"class":916},[324,27745,27608],{"class":916},[324,27747,27748],{"class":738}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Fnvidia-container-toolkit.repo",[324,27750,25833],{"class":863},[324,27752,25402],{"class":916},[324,27754,27755,27757,27759],{"class":326,"line":203},[324,27756,735],{"class":734},[324,27758,26940],{"class":738},[324,27760,27761],{"class":738}," \u002Fetc\u002Fyum.repos.d\u002Fnvidia-container-toolkit.repo\n",[192,27763,27764],{"start":203},[195,27765,27766],{},"配置NVIDIA容器工具库的官方软件源，使用实验包，可选",[316,27768,27770],{"className":24549,"code":27769,"language":24551,"meta":50,"style":50},"# 如果是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",[269,27771,27772,27777,27791,27795,27800],{"__ignoreMap":50},[324,27773,27774],{"class":326,"line":327},[324,27775,27776],{"class":772},"# 如果是RHEL或者Rocky（DNF4）\n",[324,27778,27779,27781,27783,27785,27788],{"class":326,"line":203},[324,27780,735],{"class":734},[324,27782,27038],{"class":738},[324,27784,27137],{"class":738},[324,27786,27787],{"class":916}," --add-repo",[324,27789,27790],{"class":738}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[324,27792,27793],{"class":326,"line":338},[324,27794,488],{"emptyLinePlaceholder":487},[324,27796,27797],{"class":326,"line":344},[324,27798,27799],{"class":772},"# 如果是Feodra41+（DNF5）\n",[324,27801,27802,27804,27806,27808,27810],{"class":326,"line":484},[324,27803,735],{"class":734},[324,27805,27038],{"class":738},[324,27807,27137],{"class":738},[324,27809,27140],{"class":738},[324,27811,27812],{"class":916}," --from-repofile=https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[192,27814,27815],{"start":338},[195,27816,27817],{},"安装NVIDIA Container Toolki包",[316,27819,27821],{"className":24549,"code":27820,"language":24551,"meta":50,"style":50},"# 如果是RHEL或者Rocky\nsudo dnf install -y nvidia-container-toolkit\n\n# 如果是Fedora\nsudo dnf install -y nvidia-container-toolkit\n",[269,27822,27823,27828,27841,27845,27850],{"__ignoreMap":50},[324,27824,27825],{"class":326,"line":327},[324,27826,27827],{"class":772},"# 如果是RHEL或者Rocky\n",[324,27829,27830,27832,27834,27836,27838],{"class":326,"line":203},[324,27831,735],{"class":734},[324,27833,27038],{"class":738},[324,27835,760],{"class":738},[324,27837,27123],{"class":916},[324,27839,27840],{"class":738}," nvidia-container-toolkit\n",[324,27842,27843],{"class":326,"line":338},[324,27844,488],{"emptyLinePlaceholder":487},[324,27846,27847],{"class":326,"line":344},[324,27848,27849],{"class":772},"# 如果是Fedora\n",[324,27851,27852,27854,27856,27858,27860],{"class":326,"line":484},[324,27853,735],{"class":734},[324,27855,27038],{"class":738},[324,27857,760],{"class":738},[324,27859,27123],{"class":916},[324,27861,27840],{"class":738},[192,27863,27864],{"start":344},[195,27865,27866,27867,27869],{},"安装nvidia-docker2 ： 在Fedora上使用",[269,27868,27013],{},"进行安装",[316,27871,27873],{"className":24549,"code":27872,"language":24551,"meta":50,"style":50},"sudo dnf install -y nvidia-docker2\n",[269,27874,27875],{"__ignoreMap":50},[324,27876,27877,27879,27881,27883,27885],{"class":326,"line":327},[324,27878,735],{"class":734},[324,27880,27038],{"class":738},[324,27882,760],{"class":738},[324,27884,27123],{"class":916},[324,27886,27676],{"class":738},[192,27888,27889],{"start":484},[195,27890,27891],{},"使用nvidia-ctk命令配置容器运行时 ： 这个命令用于配置NVIDIA Container Toolkit与Docker集成。命令如下：",[316,27893,27894],{"className":24549,"code":27684,"language":24551,"meta":50,"style":50},[269,27895,27896],{"__ignoreMap":50},[324,27897,27898,27900,27902,27904,27906],{"class":326,"line":327},[324,27899,735],{"class":734},[324,27901,27693],{"class":738},[324,27903,27696],{"class":738},[324,27905,27699],{"class":738},[324,27907,27702],{"class":916},[192,27909,27910],{"start":491},[195,27911,27912],{},"重启Docker服务 ： 完成配置后，必须重启Docker服务以使更改生效：",[316,27914,27915],{"className":24549,"code":27710,"language":24551,"meta":50,"style":50},[269,27916,27917],{"__ignoreMap":50},[324,27918,27919,27921,27923,27925],{"class":326,"line":327},[324,27920,735],{"class":734},[324,27922,27235],{"class":738},[324,27924,27721],{"class":738},[324,27926,27214],{"class":738},[19,27928,27929],{},"这些步骤执行后，Docker将使用NVIDIA Container Runtime，并支持GPU加速的容器运行。你可以使用nvidia-smi命令来验证容器中的NVIDIA GPU是否可用",[19,27931,27932],{},"方法：",[19,27934,27935],{},"1️⃣nvidia-smi",[19,27937,27938],{},"2️⃣运行nvidia cuda 容器进行测试",[316,27940,27942],{"className":24549,"code":27941,"language":24551,"meta":50,"style":50},"sudo docker run --rm --gpus all nvidia\u002Fcuda:11.0.3-base-ubuntu20.04 nvidia-smi\n",[269,27943,27944],{"__ignoreMap":50},[324,27945,27946,27948,27950,27953,27956,27959,27962,27965],{"class":326,"line":327},[324,27947,735],{"class":734},[324,27949,27043],{"class":738},[324,27951,27952],{"class":738}," run",[324,27954,27955],{"class":916}," --rm",[324,27957,27958],{"class":916}," --gpus",[324,27960,27961],{"class":738}," all",[324,27963,27964],{"class":738}," nvidia\u002Fcuda:11.0.3-base-ubuntu20.04",[324,27966,27967],{"class":738}," nvidia-smi\n",[19,27969,27970],{},"docker会自动从nvidia\u002Fcuda拉取11.0.3-base-ubuntu20.04镜像，并创建一个运行一次即删除的容器",[19,27972,27973],{},[48,27974],{"alt":50,"src":27975},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-008.png",[35,27977,27979],{"id":27978},"_33docker配置cuda和cudnn","3.3.Docker配置CUDA和CuDNN",[19,27981,27982],{},"如果你不需要自己创建Docker镜像，直接使用学长或者其他人创建好的镜像，则不用看该章节，容器的CUDA和CuDNN是和本地完全隔离的环境，你本地有没有CUDA都无所谓，但英伟达驱动版本必须满足CUDA的最低版本要求。",[19,27984,27985],{},"下面是如果你想自己创建镜像，则可以在学会如何创建容器的镜像后再回来看本节：",[19,27987,27988],{},[25,27989,27990],{"href":27990,"rel":27991},"https:\u002F\u002Fhub.docker.com\u002Fr\u002Fnvidia\u002Fcuda",[29],[19,27993,27994],{},"在上方这个网站中，英伟达都帮我们配置好了CUDA和CuDNN了，我们根本不需要自己去配置了，比传统方式要简单太多太多了。",[19,27996,27997],{},"我们只需要找到对应的Docker镜像当底包即可。",[19,27999,28000],{},"CUDA镜像有三个类型，如下，如果我们需要编译OpenCV4,那么需要使用devel版的CUDA。",[1003,28002,28003,28019],{},[1006,28004,28005],{},[1009,28006,28007,28010,28013,28016],{},[1012,28008,28009],{"align":24463},"镜像类型",[1012,28011,28012],{"align":24463},"适用场景",[1012,28014,28015],{"align":24463},"示例标签",[1012,28017,28018],{"align":24463},"大小",[1049,28020,28021,28035,28049],{},[1009,28022,28023,28026,28029,28032],{},[1054,28024,28025],{"align":24463},"base",[1054,28027,28028],{"align":24463},"仅需 CUDA 运行时库",[1054,28030,28031],{"align":24463},"12.4.0-base-ubuntu22.04",[1054,28033,28034],{"align":24463},"~240MB",[1009,28036,28037,28040,28043,28046],{},[1054,28038,28039],{"align":24463},"runtime",[1054,28041,28042],{"align":24463},"部署编译后的应用（含数学库）",[1054,28044,28045],{"align":24463},"12.4.0-runtime-ubuntu22.04",[1054,28047,28048],{"align":24463},"~2GB",[1009,28050,28051,28054,28057,28060],{},[1054,28052,28053],{"align":24463},"devel",[1054,28055,28056],{"align":24463},"开发环境（含编译工具）",[1054,28058,28059],{"align":24463},"12.4.0-devel-ubuntu22.04",[1054,28061,28062],{"align":24463},"~3GB",[19,28064,28065,28066,28069],{},"我示例一个，比如我想用在Ubuntu24.04上用CUDA12.6和CuDNN，那么就选择",[269,28067,28068],{},"nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04","。这个镜像既有CUDA-devel也有CuDNN，而且还是基于Ubuntu24.04的。",[19,28071,28072],{},[48,28073],{"alt":50,"src":28074},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-009.png",[19,28076,28077],{},"在dockerfile里就可以开头这么写：",[316,28079,28081],{"className":24549,"code":28080,"language":24551,"meta":50,"style":50},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\nFROM nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[269,28082,28083,28088],{"__ignoreMap":50},[324,28084,28085],{"class":326,"line":327},[324,28086,28087],{"class":772},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\n",[324,28089,28090,28093],{"class":326,"line":203},[324,28091,28092],{"class":734},"FROM",[324,28094,28095],{"class":738}," nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[35,28097,28099],{"id":28098},"_34配置以太网","3.4.配置以太网",[19,28101,28102],{},"指定网络模式",[316,28104,28106],{"className":24549,"code":28105,"language":24551,"meta":50,"style":50},"--net=host \\\n",[269,28107,28108],{"__ignoreMap":50},[324,28109,28110,28113,28115,28118],{"class":326,"line":327},[324,28111,28112],{"class":867},"--net",[324,28114,913],{"class":863},[324,28116,28117],{"class":738},"host",[324,28119,25402],{"class":734},[19,28121,28122],{},"启动参数里加上这行即可。具体在下方",[19,28124,28125],{},"--net选项：指定网络模式，该选项有以下参数可选：",[1871,28127,28128,28131,28134,28137],{},[195,28129,28130],{},"--net=bridge:默认选项，表示连接到默认的网桥",[195,28132,28133],{},"--net=host:容器使用宿主机的网络",[195,28135,28136],{},"--net=container:Name-or-ID:告诉Docker让新建的容器使用已有容器的网络配置",[195,28138,28139],{},"--net=none：不配置该容器的网络，用户自定义网络配置",[775,28141,28142],{},"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":50,"searchDepth":203,"depth":203,"links":28144},[28145,28146,28147,28148],{"id":27459,"depth":338,"text":27460},{"id":27526,"depth":338,"text":27527},{"id":27978,"depth":338,"text":27979},{"id":28098,"depth":338,"text":28099},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch3-docker",{"title":27448,"description":27456},"wiki\u002F2025-11-10-Docker\u002Fch3-Docker直通","3SumKNcyD4vYz0D1pW1XpeDrzDFvMpi3imN6YMXjcfA",{"id":28155,"title":28156,"body":28157,"description":28164,"extension":792,"meta":28170,"navigation":487,"path":28171,"seo":28172,"stem":28173,"__hash__":28174},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源.md","4.DockerHub换源",{"type":7,"value":28158,"toc":28168},[28159,28162,28165],[10,28160,28156],{"id":28161},"_4dockerhub换源",[19,28163,28164],{},"（DockerHub已于2024年5月被🇨🇳封杀，各大国内镜像源均已下架DockerHub镜像源，直接挂梯用官方源吧）",[19,28166,28167],{},"各大镜像源只有Docker-Ce的镜像库，这个是用来安装docker的，而不是dockerhub的镜像源。",{"title":50,"searchDepth":203,"depth":203,"links":28169},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch4-dockerhub",{"title":28156,"description":28164},"wiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源","3CWIuSicuLr9U-Hfgi3WEZVlW4kQZuOPYkyp9VBbnxY",{"id":28176,"title":28177,"body":28178,"description":50,"extension":792,"meta":29190,"navigation":487,"path":29191,"seo":29192,"stem":29193,"__hash__":29194},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习.md","5.Docker命令学习",{"type":7,"value":28179,"toc":29185},[28180,28183,28187,28193,28197,28200,28540,28543,28546,28549,28554,28559,28562,28565,28568,28571,28590,28593,28604,28610,28792,28802,28818,29081,29083,29108,29123,29132,29182],[10,28181,28177],{"id":28182},"_5docker命令学习",[35,28184,28186],{"id":28185},"_51参考文档","5.1.参考文档",[19,28188,28189],{},[25,28190,28191],{"href":28191,"rel":28192},"https:\u002F\u002Fwww.runoob.com\u002Fdocker\u002Fdocker-tutorial.html",[29],[35,28194,28196],{"id":28195},"_52常用命令","5.2.常用命令",[19,28198,28199],{},"常用的标红了，偶尔用的标绿了，其他了解就行。",[1003,28201,28202,28215],{},[1006,28203,28204],{},[1009,28205,28206,28209,28212],{},[1012,28207,28208],{"align":24463},"命令",[1012,28210,28211],{"align":24463},"描述",[1012,28213,28214],{"align":24463},"示例",[1049,28216,28217,28228,28239,28250,28261,28272,28283,28294,28304,28315,28326,28337,28347,28358,28369,28380,28390,28400,28410,28420,28431,28442,28453,28464,28475,28486,28496,28507,28518,28529],{},[1009,28218,28219,28222,28225],{},[1054,28220,28221],{"align":24463},"docker run",[1054,28223,28224],{"align":24463},"创建并启动一个新的容器。",[1054,28226,28227],{"align":24463},"docker run -it ubuntu bash",[1009,28229,28230,28233,28236],{},[1054,28231,28232],{"align":24463},"docker build",[1054,28234,28235],{"align":24463},"通过指定的 Dockerfile 创建一个新的镜像。",[1054,28237,28238],{"align":24463},"docker build -t myimage .",[1009,28240,28241,28244,28247],{},[1054,28242,28243],{"align":24463},"docker pull",[1054,28245,28246],{"align":24463},"从 Docker 仓库拉取镜像。",[1054,28248,28249],{"align":24463},"docker pull ubuntu",[1009,28251,28252,28255,28258],{},[1054,28253,28254],{"align":24463},"docker push",[1054,28256,28257],{"align":24463},"将本地镜像推送到 Docker 仓库。",[1054,28259,28260],{"align":24463},"docker push myimage",[1009,28262,28263,28266,28269],{},[1054,28264,28265],{"align":24463},"docker stop",[1054,28267,28268],{"align":24463},"停止一个正在运行的容器。",[1054,28270,28271],{"align":24463},"docker stop container_id",[1009,28273,28274,28277,28280],{},[1054,28275,28276],{"align":24463},"docker start",[1054,28278,28279],{"align":24463},"启动一个已经存在的容器。",[1054,28281,28282],{"align":24463},"docker start container_id",[1009,28284,28285,28288,28291],{},[1054,28286,28287],{"align":24463},"docker restart",[1054,28289,28290],{"align":24463},"重新启动容器。",[1054,28292,28293],{"align":24463},"docker restart container_id",[1009,28295,28296,28299,28302],{},[1054,28297,28298],{"align":24463},"docker ps",[1054,28300,28301],{"align":24463},"列出当前正在运行的容器。",[1054,28303,28298],{"align":24463},[1009,28305,28306,28309,28312],{},[1054,28307,28308],{"align":24463},"docker rm",[1054,28310,28311],{"align":24463},"删除一个或多个停止的容器。",[1054,28313,28314],{"align":24463},"docker rm container_id",[1009,28316,28317,28320,28323],{},[1054,28318,28319],{"align":24463},"docker exec",[1054,28321,28322],{"align":24463},"在一个正在运行的容器中执行命令。",[1054,28324,28325],{"align":24463},"docker exec -it container_id bash",[1009,28327,28328,28331,28334],{},[1054,28329,28330],{"align":24463},"docker logs",[1054,28332,28333],{"align":24463},"查看容器的日志输出。",[1054,28335,28336],{"align":24463},"docker logs container_id",[1009,28338,28339,28342,28345],{},[1054,28340,28341],{"align":24463},"docker images",[1054,28343,28344],{"align":24463},"列出本地所有镜像。",[1054,28346,28341],{"align":24463},[1009,28348,28349,28352,28355],{},[1054,28350,28351],{"align":24463},"docker rmi",[1054,28353,28354],{"align":24463},"删除一个或多个镜像。",[1054,28356,28357],{"align":24463},"docker rmi myimage",[1009,28359,28360,28363,28366],{},[1054,28361,28362],{"align":24463},"docker network",[1054,28364,28365],{"align":24463},"管理 Docker 网络。",[1054,28367,28368],{"align":24463},"docker network ls",[1009,28370,28371,28374,28377],{},[1054,28372,28373],{"align":24463},"docker volume",[1054,28375,28376],{"align":24463},"管理 Docker 数据卷。",[1054,28378,28379],{"align":24463},"docker volume ls",[1009,28381,28382,28385,28388],{},[1054,28383,28384],{"align":24463},"docker-compose up",[1054,28386,28387],{"align":24463},"启动 docker-compose.yml 中定义的所有服务。",[1054,28389,28384],{"align":24463},[1009,28391,28392,28395,28398],{},[1054,28393,28394],{"align":24463},"docker-compose down",[1054,28396,28397],{"align":24463},"停止并移除 docker-compose.yml 中定义的所有服务及其相关资源。",[1054,28399,28394],{"align":24463},[1009,28401,28402,28405,28408],{},[1054,28403,28404],{"align":24463},"docker info",[1054,28406,28407],{"align":24463},"显示 Docker 系统的详细信息。",[1054,28409,28404],{"align":24463},[1009,28411,28412,28415,28418],{},[1054,28413,28414],{"align":24463},"docker stats",[1054,28416,28417],{"align":24463},"查看正在运行的容器的实时资源使用情况（CPU、内存等）。",[1054,28419,28414],{"align":24463},[1009,28421,28422,28425,28428],{},[1054,28423,28424],{"align":24463},"docker inspect",[1054,28426,28427],{"align":24463},"查看容器或镜像的详细信息（JSON 格式）。",[1054,28429,28430],{"align":24463},"docker inspect container_id",[1009,28432,28433,28436,28439],{},[1054,28434,28435],{"align":24463},"docker save",[1054,28437,28438],{"align":24463},"将一个镜像保存为 tar 文件。",[1054,28440,28441],{"align":24463},"docker save -o myimage.tar myimage",[1009,28443,28444,28447,28450],{},[1054,28445,28446],{"align":24463},"docker load",[1054,28448,28449],{"align":24463},"从 tar 文件中加载镜像。",[1054,28451,28452],{"align":24463},"docker load -i myimage.tar",[1009,28454,28455,28458,28461],{},[1054,28456,28457],{"align":24463},"docker tag",[1054,28459,28460],{"align":24463},"为镜像添加标签（tag）。",[1054,28462,28463],{"align":24463},"docker tag myimage myimage:v1",[1009,28465,28466,28469,28472],{},[1054,28467,28468],{"align":24463},"docker buildx build",[1054,28470,28471],{"align":24463},"使用 Buildx 构建多架构镜像。",[1054,28473,28474],{"align":24463},"docker buildx build -t myimage .",[1009,28476,28477,28480,28483],{},[1054,28478,28479],{"align":24463},"docker buildx create",[1054,28481,28482],{"align":24463},"创建一个新的 Buildx 构建实例。",[1054,28484,28485],{"align":24463},"docker buildx create –use",[1009,28487,28488,28491,28494],{},[1054,28489,28490],{"align":24463},"docker buildx ls",[1054,28492,28493],{"align":24463},"列出所有可用的 Buildx 构建实例。",[1054,28495,28490],{"align":24463},[1009,28497,28498,28501,28504],{},[1054,28499,28500],{"align":24463},"docker buildx use",[1054,28502,28503],{"align":24463},"设置当前的 Buildx 构建实例。",[1054,28505,28506],{"align":24463},"docker buildx use mybuilder",[1009,28508,28509,28512,28515],{},[1054,28510,28511],{"align":24463},"docker buildx bake",[1054,28513,28514],{"align":24463},"使用 Bake 文件批量构建镜像。",[1054,28516,28517],{"align":24463},"docker buildx bake -f bake.hcl",[1009,28519,28520,28523,28526],{},[1054,28521,28522],{"align":24463},"docker buildx build –push",[1054,28524,28525],{"align":24463},"构建镜像并推送到镜像仓库。",[1054,28527,28528],{"align":24463},"docker buildx build –push -t myimage .",[1009,28530,28531,28534,28537],{},[1054,28532,28533],{"align":24463},"docker buildx build –platform",[1054,28535,28536],{"align":24463},"构建镜像并为多个平台生成支持。",[1054,28538,28539],{"align":24463},"docker buildx build –platform linux\u002Famd64,linux\u002Farm64 -t myimage .",[19,28541,28542],{},"docker exec -it 进入容器并给予i输入和t终端 （docker exec -it 4f6c8cd45b58 \u002Fbin\u002Fbash）",[19,28544,28545],{},"docker search 可以查看Docker Hub上关键字的镜像仓库",[19,28547,28548],{},"docker images 可以查看已经下载的镜像",[19,28550,28551],{},[48,28552],{"alt":50,"src":28553},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-010.png",[19,28555,28556],{},[116,28557,28558],{},"Nginx 是一个高性能的 HTTP 和反向代理 Web 服务器",[19,28560,28561],{},"docker rmi $(docker images -q) 删除所有的镜像",[19,28563,28564],{},"docker container logs 查看容器日志",[19,28566,28567],{},"docker top 查看容器里的进程",[19,28569,28570],{},"docker cp 容器id:要拷贝的文件在容器里面的路径 宿主机的相应路径",[316,28572,28574],{"className":24549,"code":28573,"language":24551,"meta":50,"style":50},"如：docker cp 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf \u002Fmydata\u002Fnginx\n",[269,28575,28576],{"__ignoreMap":50},[324,28577,28578,28581,28584,28587],{"class":326,"line":327},[324,28579,28580],{"class":734},"如：docker",[324,28582,28583],{"class":738}," cp",[324,28585,28586],{"class":738}," 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf",[324,28588,28589],{"class":738}," \u002Fmydata\u002Fnginx\n",[19,28591,28592],{},"docker run时在启动容器的时候会有几个常用的选项：",[1871,28594,28595,28598,28601],{},[195,28596,28597],{},"-d选项：表示后台运行",[195,28599,28600],{},"-P选项：随机端口映射",[195,28602,28603],{},"-p选项：指定端口映射，有以下四种方式： --ip:hostPort:containerPort --ip::containerPort --hostPort::containerPort --containerPort",[35,28605,28607],{"id":28606},"_53run命令的参数非常重要",[116,28608,28609],{},"5.3.run命令的参数（非常重要）",[1003,28611,28612,28625],{},[1006,28613,28614],{},[1009,28615,28616,28619,28622],{},[1012,28617,28618],{"align":24463},"参数\u002F配置",[1012,28620,28621],{"align":24463},"功能说明",[1012,28623,28624],{"align":24463},"重要性与参考依据",[1049,28626,28627,28638,28649,28660,28671,28682,28693,28704,28715,28726,28737,28748,28759,28770,28781],{},[1009,28628,28629,28632,28635],{},[1054,28630,28631],{"align":24463},"-name=ros_jazzy_opencv411_cuda128_cudnn971_noble",[1054,28633,28634],{"align":24463},"指定容器名称，便于后续管理",[1054,28636,28637],{"align":24463},"替代随机生成的容器名。",[1009,28639,28640,28643,28646],{},[1054,28641,28642],{"align":24463},"–gpus all",[1054,28644,28645],{"align":24463},"允许容器访问宿主机所有GPU资源，需NVIDIA驱动支持",[1054,28647,28648],{"align":24463},"用于CUDA加速等GPU依赖任务。",[1009,28650,28651,28654,28657],{},[1054,28652,28653],{"align":24463},"-e NVIDIA_DRIVER_CAPABILITIES=all",[1054,28655,28656],{"align":24463},"启用NVIDIA驱动的全部功能（如CUDA、图形渲染）",[1054,28658,28659],{"align":24463},"确保容器内GPU功能完整67。",[1009,28661,28662,28665,28668],{},[1054,28663,28664],{"align":24463},"-dit",[1054,28666,28667],{"align":24463},"组合参数：- -d：后台运行容器（Detached模式）- -i：保持标准输入（STDIN）开放- -t：分配伪终端（TTY）",[1054,28669,28670],{"align":24463},"允许容器在后台运行并支持交互操作。",[1009,28672,28673,28676,28679],{},[1054,28674,28675],{"align":24463},"–privileged",[1054,28677,28678],{"align":24463},"赋予容器完全主机权限（可访问设备、内核模块等）",[1054,28680,28681],{"align":24463},"用于需要直接操作硬件的场景（如访问USB设备），但存在安全风险。",[1009,28683,28684,28687,28690],{},[1054,28685,28686],{"align":24463},"–net=host",[1054,28688,28689],{"align":24463},"共享宿主机网络命名空间（容器使用宿主机IP和端口）",[1054,28691,28692],{"align":24463},"简化网络配置，无NAT，这样的话，网络效率更高，局域网设备更容易发现。",[1009,28694,28695,28698,28701],{},[1054,28696,28697],{"align":24463},"–group-add audio–group-add video–group-add dialout",[1054,28699,28700],{"align":24463},"将容器用户加入宿主机用户组：- audio：音频设备访问- video：视频设备访问- dialout：串口设备访问",[1054,28702,28703],{"align":24463},"避免权限问题（如避免无法调用摄像头、麦克风）。",[1009,28705,28706,28709,28712],{},[1054,28707,28708],{"align":24463},"-e DISPLAY=$DISPLAY-e XAUTHORITY=\u002Fhome\u002Ftungchiahui\u002F.Xauthority-e WAYLAND_DISPLAY-e XDG_RUNTIME_DIR-e QT_QPA_PLATFORM=xcb",[1054,28710,28711],{"align":24463},"配置图形显示环境：- 绑定宿主机显示接口（X11或Wayland）- 设置GUI应用渲染后端",[1054,28713,28714],{"align":24463},"支持容器内运行图形界面应用（如OpenCV可视化）。",[1009,28716,28717,28720,28723],{},[1054,28718,28719],{"align":24463},"-v \u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw-v \u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[1054,28721,28722],{"align":24463},"挂载宿主机图形设备：- X11套接字目录- 直接渲染管理器（DRI）设备",[1054,28724,28725],{"align":24463},"实现容器内图形显示。",[1009,28727,28728,28731,28734],{},[1054,28729,28730],{"align":24463},"-v $HOME\u002F.Xauthority:\u002Fhome\u002Ftungchiahui\u002F.Xauthority:ro",[1054,28732,28733],{"align":24463},"挂载X11认证文件（只读）",[1054,28735,28736],{"align":24463},"确保容器有权连接宿主机显示服务。",[1009,28738,28739,28742,28745],{},[1054,28740,28741],{"align":24463},"-v \u002Frun\u002Fuser\u002F1000\u002Fwayland-0-v \u002Frun\u002Fuser\u002F1000",[1054,28743,28744],{"align":24463},"挂载Wayland显示协议相关目录",[1054,28746,28747],{"align":24463},"支持Wayland协议的图形显示。",[1009,28749,28750,28753,28756],{},[1054,28751,28752],{"align":24463},"–ulimit nofile=1024:524288",[1054,28754,28755],{"align":24463},"设置进程最大可打开文件数（nofile）的方式，用于控制容器或进程运行时的文件句柄数量限制。–ulimit \u003C限制类型>=\u003C软限制>:\u003C硬限制>",[1054,28757,28758],{"align":24463},"如果默认限制太小，可能会出现 “too many open files” 的错误。所以在容器运行或系统服务启动时，需要调大这个值。–ulimit nofile=4096:65536",[1009,28760,28761,28764,28767],{},[1054,28762,28763],{"align":24463},"-v \u002Fhome\u002Ftungchiahui:\u002Fhome\u002Ftungchiahui",[1054,28765,28766],{"align":24463},"挂载宿主机用户目录到容器内同名路径",[1054,28768,28769],{"align":24463},"实现宿主机与容器间文件共享（如代码、数据持久化）。",[1009,28771,28772,28775,28778],{},[1054,28773,28774],{"align":24463},"-w \u002Fhome\u002Ftungchiahui",[1054,28776,28777],{"align":24463},"设置容器启动后的默认工作目录",[1054,28779,28780],{"align":24463},"直接进入项目路径，方便执行命令2324。",[1009,28782,28783,28786,28789],{},[1054,28784,28785],{"align":24463},"tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn971-noble",[1054,28787,28788],{"align":24463},"镜像名称指定镜像及标签，包含：- ROS 2 Jazzy- OpenCV 4.11- CUDA 12.8- cuDNN 9.7.1",[1054,28790,28791],{"align":24463},"提供预配置的深度学习与机器人开发环境。",[19,28793,28794,28795,28797,28798,28801],{},"下方这条命令一定要在普通用户下运行，不要在root用户下运行，其实加不加",[269,28796,735],{},"加不加",[269,28799,28800],{},"sudo -E","都无所谓。",[19,28803,28804,28805,28807,28808,28810,28811,28814,28815,28817],{},"用户已经被加到docker组了，不用",[269,28806,735],{},"也行跑，其次，",[269,28809,735],{},"运行的话，你的",[269,28812,28813],{},"$HOME","变量也不会变，更何况加上-E的话，这样你的",[269,28816,28813],{},"更不可能变了。",[316,28819,28821],{"className":24549,"code":28820,"language":24551,"meta":50,"style":50},"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",[269,28822,28823,28836,28846,28856,28868,28875,28882,28889,28899,28908,28917,28931,28943,28955,28964,28974,28983,28998,29031,29058,29069,29076],{"__ignoreMap":50},[324,28824,28825,28827,28829,28831,28834],{"class":326,"line":327},[324,28826,735],{"class":734},[324,28828,27043],{"class":738},[324,28830,27952],{"class":738},[324,28832,28833],{"class":916}," --name=ros_opencv_cuda",[324,28835,25402],{"class":916},[324,28837,28838,28841,28844],{"class":326,"line":203},[324,28839,28840],{"class":867},"--gpus ",[324,28842,28843],{"class":738},"all",[324,28845,25402],{"class":916},[324,28847,28848,28851,28854],{"class":326,"line":338},[324,28849,28850],{"class":867},"-e ",[324,28852,28853],{"class":738},"NVIDIA_DRIVER_CAPABILITIES=all",[324,28855,25402],{"class":916},[324,28857,28858,28860,28863,28866],{"class":326,"line":344},[324,28859,28850],{"class":867},[324,28861,28862],{"class":738},"DISPLAY=",[324,28864,28865],{"class":867},"$DISPLAY ",[324,28867,26899],{"class":916},[324,28869,28870,28873],{"class":326,"line":484},[324,28871,28872],{"class":867},"-dit ",[324,28874,26899],{"class":916},[324,28876,28877,28880],{"class":326,"line":491},[324,28878,28879],{"class":867},"--privileged ",[324,28881,26899],{"class":916},[324,28883,28884,28887],{"class":326,"line":496},[324,28885,28886],{"class":867},"--net=host ",[324,28888,26899],{"class":916},[324,28890,28891,28894,28897],{"class":326,"line":502},[324,28892,28893],{"class":867},"--group-add ",[324,28895,28896],{"class":738},"audio",[324,28898,25402],{"class":916},[324,28900,28901,28903,28906],{"class":326,"line":508},[324,28902,28893],{"class":867},[324,28904,28905],{"class":738},"video",[324,28907,25402],{"class":916},[324,28909,28910,28912,28915],{"class":326,"line":514},[324,28911,28893],{"class":867},[324,28913,28914],{"class":738},"dialout",[324,28916,25402],{"class":916},[324,28918,28919,28921,28924,28926,28929],{"class":326,"line":2343},[324,28920,28850],{"class":867},[324,28922,28923],{"class":738},"XAUTHORITY=",[324,28925,28813],{"class":867},[324,28927,28928],{"class":738},"\u002F.Xauthority",[324,28930,25402],{"class":916},[324,28932,28933,28935,28938,28941],{"class":326,"line":2348},[324,28934,28850],{"class":867},[324,28936,28937],{"class":738},"WAYLAND_DISPLAY=",[324,28939,28940],{"class":867},"$WAYLAND_DISPLAY ",[324,28942,26899],{"class":916},[324,28944,28945,28947,28950,28953],{"class":326,"line":2354},[324,28946,28850],{"class":867},[324,28948,28949],{"class":738},"XDG_RUNTIME_DIR=",[324,28951,28952],{"class":867},"$XDG_RUNTIME_DIR ",[324,28954,26899],{"class":916},[324,28956,28957,28959,28962],{"class":326,"line":2359},[324,28958,28850],{"class":867},[324,28960,28961],{"class":738},"QT_QPA_PLATFORM=xcb",[324,28963,25402],{"class":916},[324,28965,28966,28969,28972],{"class":326,"line":2373},[324,28967,28968],{"class":867},"-v ",[324,28970,28971],{"class":738},"\u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw",[324,28973,25402],{"class":916},[324,28975,28976,28978,28981],{"class":326,"line":2378},[324,28977,28968],{"class":867},[324,28979,28980],{"class":738},"\u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[324,28982,25402],{"class":916},[324,28984,28985,28988,28991,28993,28996],{"class":326,"line":2384},[324,28986,28987],{"class":867},"-v $HOME",[324,28989,28990],{"class":738},"\u002F.Xauthority:",[324,28992,28813],{"class":867},[324,28994,28995],{"class":738},"\u002F.Xauthority:ro",[324,28997,25402],{"class":916},[324,28999,29000,29002,29005,29007,29010,29013,29015,29018,29020,29022,29024,29026,29029],{"class":326,"line":2405},[324,29001,28968],{"class":867},[324,29003,29004],{"class":738},"\u002Frun\u002Fuser\u002F",[324,29006,25823],{"class":867},[324,29008,29009],{"class":734},"id",[324,29011,29012],{"class":916}," -u",[324,29014,1293],{"class":867},[324,29016,29017],{"class":738},"\u002Fwayland-0:\u002Frun\u002Fuser\u002F",[324,29019,25823],{"class":867},[324,29021,29009],{"class":734},[324,29023,29012],{"class":916},[324,29025,1293],{"class":867},[324,29027,29028],{"class":738},"\u002Fwayland-0",[324,29030,25402],{"class":916},[324,29032,29033,29035,29037,29039,29041,29043,29045,29048,29050,29052,29054,29056],{"class":326,"line":2410},[324,29034,28968],{"class":867},[324,29036,29004],{"class":738},[324,29038,25823],{"class":867},[324,29040,29009],{"class":734},[324,29042,29012],{"class":916},[324,29044,1293],{"class":867},[324,29046,29047],{"class":738},":\u002Frun\u002Fuser\u002F",[324,29049,25823],{"class":867},[324,29051,29009],{"class":734},[324,29053,29012],{"class":916},[324,29055,14443],{"class":867},[324,29057,26899],{"class":916},[324,29059,29060,29062,29064,29067],{"class":326,"line":2424},[324,29061,28987],{"class":867},[324,29063,1723],{"class":738},[324,29065,29066],{"class":867},"$HOME ",[324,29068,26899],{"class":916},[324,29070,29071,29074],{"class":326,"line":2429},[324,29072,29073],{"class":867},"-w $HOME ",[324,29075,26899],{"class":916},[324,29077,29078],{"class":326,"line":2458},[324,29079,29080],{"class":867},"tungchiahui\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy\n",[19,29082,9754],{},[192,29084,29085,29093,29096,29099],{},[195,29086,29087,14524,29089,29092],{},[269,29088,28853],{},[269,29090,29091],{},"--gpus all","没有英伟达显卡请注释。",[195,29094,29095],{},"--name后面请自己为容器起名。",[195,29097,29098],{},"最后一行仓库名称请你自己找对应的镜像填上。",[195,29100,29101,29102,29107],{},"ROS1在Fedora发行版下会爆内存，需要添加上下面这个参数，如果你不是Fedora和ROS1,",[24280,29103,29104],{},[116,29105,29106],{},"请不要加","。",[316,29109,29111],{"className":24549,"code":29110,"language":24551,"meta":50,"style":50},"--ulimit nofile=1024:524288 \\\n",[269,29112,29113],{"__ignoreMap":50},[324,29114,29115,29118,29121],{"class":326,"line":327},[324,29116,29117],{"class":734},"--ulimit",[324,29119,29120],{"class":738}," nofile=1024:524288",[324,29122,25402],{"class":916},[19,29124,29125,29126,29131],{},"如果想用当前用户登陆容器,可以加上下面这几条,但非常非常",[24280,29127,29128],{},[116,29129,29130],{},"不建议","**.**",[316,29133,29135],{"className":24549,"code":29134,"language":24551,"meta":50,"style":50},"--user $(id -u):$(id -g) \\\n-v \u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro \\\n-v \u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro \\\n",[269,29136,29137,29164,29173],{"__ignoreMap":50},[324,29138,29139,29142,29145,29147,29149,29151,29153,29155,29157,29160,29162],{"class":326,"line":327},[324,29140,29141],{"class":734},"--user",[324,29143,29144],{"class":867}," $(",[324,29146,29009],{"class":734},[324,29148,29012],{"class":916},[324,29150,1293],{"class":867},[324,29152,1723],{"class":738},[324,29154,25823],{"class":867},[324,29156,29009],{"class":734},[324,29158,29159],{"class":916}," -g",[324,29161,14443],{"class":867},[324,29163,26899],{"class":916},[324,29165,29166,29168,29171],{"class":326,"line":203},[324,29167,28968],{"class":867},[324,29169,29170],{"class":738},"\u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro",[324,29172,25402],{"class":916},[324,29174,29175,29177,29180],{"class":326,"line":338},[324,29176,28968],{"class":867},[324,29178,29179],{"class":738},"\u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro",[324,29181,25402],{"class":916},[775,29183,29184],{},"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":50,"searchDepth":203,"depth":203,"links":29186},[29187,29188,29189],{"id":28185,"depth":338,"text":28186},{"id":28195,"depth":338,"text":28196},{"id":28606,"depth":338,"text":28609},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch5-docker",{"title":28177,"description":50},"wiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习","G0221wUbE2NPPL3_iqRgrDmGtdCFY_26n0BQpBEY1bQ",{"id":29196,"title":29197,"body":29198,"description":50,"extension":792,"meta":30821,"navigation":487,"path":30822,"seo":30823,"stem":30824,"__hash__":30825},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像.md","6.手动创建Docker镜像",{"type":7,"value":29199,"toc":30816},[29200,29203,29207,29210,29432,29436,29440,29443,29549,29554,29557,29562,29565,29570,29573,29578,29581,29593,29596,29601,29608,29636,29643,29719,29724,29727,29750,29752,29827,29832,29835,29839,29847,29852,29857,29861,29872,29878,29881,29884,29908,29911,29914,29942,29945,29948,30413,30416,30421,30426,30430,30453,30458,30462,30466,30469,30472,30475,30502,30505,30508,30526,30529,30532,30554,30562,30567,30572,30576,30579,30582,30585,30588,30633,30636,30654,30657,30662,30665,30686,30689,30745,30748,30753,30757,30760,30767,30770,30773,30778,30781,30797,30800,30813],[10,29201,29197],{"id":29202},"_6手动创建docker镜像",[35,29204,29206],{"id":29205},"_61dockerfile","6.1.DockerFile",[19,29208,29209],{},"常用命令：",[1003,29211,29212,29223],{},[1006,29213,29214],{},[1009,29215,29216,29219,29221],{},[1012,29217,29218],{"align":24463},"指令",[1012,29220,26593],{"align":24463},[1012,29222,28214],{"align":24463},[1049,29224,29225,29235,29251,29262,29273,29284,29295,29306,29317,29331,29345,29356,29370,29381,29392,29406,29421],{},[1009,29226,29227,29229,29232],{},[1054,29228,28092],{"align":24463},[1054,29230,29231],{"align":24463},"指定基础镜像，是 Dockerfile 的起点",[1054,29233,29234],{"align":24463},"FROM ubuntu:22.04",[1009,29236,29237,29240,29243],{},[1054,29238,29239],{"align":24463},"LABEL",[1054,29241,29242],{"align":24463},"添加元数据（如作者、版本等）",[1054,29244,29245,29246,29250],{"align":24463},"LABEL maintainer=”",[25,29247,29249],{"href":29248},"mailto:you@example.com","you@example.com","”",[1009,29252,29253,29256,29259],{},[1054,29254,29255],{"align":24463},"ENV",[1054,29257,29258],{"align":24463},"设置环境变量",[1054,29260,29261],{"align":24463},"ENV PORT=8080",[1009,29263,29264,29267,29270],{},[1054,29265,29266],{"align":24463},"ARG",[1054,29268,29269],{"align":24463},"构建参数，只在构建期间可用",[1054,29271,29272],{"align":24463},"ARG VERSION=1.0",[1009,29274,29275,29278,29281],{},[1054,29276,29277],{"align":24463},"RUN",[1054,29279,29280],{"align":24463},"构建镜像时运行命令",[1054,29282,29283],{"align":24463},"RUN apt-get update && apt-get install -y curl",[1009,29285,29286,29289,29292],{},[1054,29287,29288],{"align":24463},"COPY",[1054,29290,29291],{"align":24463},"复制文件到镜像中",[1054,29293,29294],{"align":24463},"COPY . \u002Fapp",[1009,29296,29297,29300,29303],{},[1054,29298,29299],{"align":24463},"ADD",[1054,29301,29302],{"align":24463},"类似 COPY，额外支持解压 .tar 文件或远程 URL（不推荐用于 URL）",[1054,29304,29305],{"align":24463},"ADD archive.tar.gz \u002Fdata\u002F",[1009,29307,29308,29311,29314],{},[1054,29309,29310],{"align":24463},"WORKDIR",[1054,29312,29313],{"align":24463},"设置工作目录",[1054,29315,29316],{"align":24463},"WORKDIR \u002Fopt",[1009,29318,29319,29322,29325],{},[1054,29320,29321],{"align":24463},"CMD",[1054,29323,29324],{"align":24463},"设置容器启动时默认命令（可被 docker run 覆盖）",[1054,29326,29327,29328],{"align":24463},"CMD ",[324,29329,29330],{},"“node”, “index.js”",[1009,29332,29333,29336,29339],{},[1054,29334,29335],{"align":24463},"ENTRYPOINT",[1054,29337,29338],{"align":24463},"设置容器启动时固定命令（通常用于 CLI 工具等）",[1054,29340,29341,29342],{"align":24463},"ENTRYPOINT ",[324,29343,29344],{},"“python3”",[1009,29346,29347,29350,29353],{},[1054,29348,29349],{"align":24463},"EXPOSE",[1054,29351,29352],{"align":24463},"声明镜像内服务监听的端口（不会自动映射）",[1054,29354,29355],{"align":24463},"EXPOSE 80",[1009,29357,29358,29361,29364],{},[1054,29359,29360],{"align":24463},"VOLUME",[1054,29362,29363],{"align":24463},"声明数据卷挂载点",[1054,29365,29366,29367],{"align":24463},"VOLUME ",[324,29368,29369],{},"“\u002Fdata”",[1009,29371,29372,29375,29378],{},[1054,29373,29374],{"align":24463},"USER",[1054,29376,29377],{"align":24463},"设置后续命令执行的用户",[1054,29379,29380],{"align":24463},"USER appuser",[1009,29382,29383,29386,29389],{},[1054,29384,29385],{"align":24463},"ONBUILD",[1054,29387,29388],{"align":24463},"当镜像作为其他镜像基础镜像时触发的构建指令",[1054,29390,29391],{"align":24463},"ONBUILD COPY . \u002Fsrc",[1009,29393,29394,29397,29400],{},[1054,29395,29396],{"align":24463},"SHELL",[1054,29398,29399],{"align":24463},"更改默认 shell，比如将 sh -c 改为 bash -c",[1054,29401,29402,29403],{"align":24463},"SHELL ",[324,29404,29405],{},"“\u002Fbin\u002Fbash”, “-c”",[1009,29407,29408,29411,29414],{},[1054,29409,29410],{"align":24463},"HEALTHCHECK",[1054,29412,29413],{"align":24463},"定义容器运行时的健康检查命令",[1054,29415,29416,29417],{"align":24463},"`HEALTHCHECK CMD curl –fail ",[25,29418,29419],{"href":29419,"rel":29420},"http:\u002F\u002Flocalhost:8080",[29],[1009,29422,29423,29426,29429],{},[1054,29424,29425],{"align":24463},"STOPSIGNAL",[1054,29427,29428],{"align":24463},"容器停止时发送的信号",[1054,29430,29431],{"align":24463},"STOPSIGNAL SIGKILL",[35,29433,29435],{"id":29434},"_62自己创建容器","6.2.自己创建容器",[151,29437,29439],{"id":29438},"_621手动创建","6.2.1.手动创建",[19,29441,29442],{},"在x86电脑上编译x86的：",[316,29444,29446],{"className":24549,"code":29445,"language":24551,"meta":50,"style":50},"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",[269,29447,29448,29464,29468,29481,29485,29498,29502,29515,29519,29532,29536],{"__ignoreMap":50},[324,29449,29450,29452,29455,29458,29461],{"class":326,"line":327},[324,29451,27275],{"class":734},[324,29453,29454],{"class":738}," build",[324,29456,29457],{"class":916}," -t",[324,29459,29460],{"class":738}," ros-melodic-cuda118-cudnn8-bionic:latest",[324,29462,29463],{"class":738}," .\n",[324,29465,29466],{"class":326,"line":203},[324,29467,488],{"emptyLinePlaceholder":487},[324,29469,29470,29472,29474,29476,29479],{"class":326,"line":338},[324,29471,27275],{"class":734},[324,29473,29454],{"class":738},[324,29475,29457],{"class":916},[324,29477,29478],{"class":738}," ros-noetic-focal:latest",[324,29480,29463],{"class":738},[324,29482,29483],{"class":326,"line":344},[324,29484,488],{"emptyLinePlaceholder":487},[324,29486,29487,29489,29491,29493,29496],{"class":326,"line":484},[324,29488,27275],{"class":734},[324,29490,29454],{"class":738},[324,29492,29457],{"class":916},[324,29494,29495],{"class":738}," ros-humble-jammy:latest",[324,29497,29463],{"class":738},[324,29499,29500],{"class":326,"line":491},[324,29501,488],{"emptyLinePlaceholder":487},[324,29503,29504,29506,29508,29510,29513],{"class":326,"line":496},[324,29505,27275],{"class":734},[324,29507,29454],{"class":738},[324,29509,29457],{"class":916},[324,29511,29512],{"class":738}," ros-jazzy-noble:latest",[324,29514,29463],{"class":738},[324,29516,29517],{"class":326,"line":502},[324,29518,488],{"emptyLinePlaceholder":487},[324,29520,29521,29523,29525,29527,29530],{"class":326,"line":508},[324,29522,27275],{"class":734},[324,29524,29454],{"class":738},[324,29526,29457],{"class":916},[324,29528,29529],{"class":738}," ros-humble-opencv411-cuda128-cudnn970-jammy:latest",[324,29531,29463],{"class":738},[324,29533,29534],{"class":326,"line":514},[324,29535,488],{"emptyLinePlaceholder":487},[324,29537,29538,29540,29542,29544,29547],{"class":326,"line":2343},[324,29539,27275],{"class":734},[324,29541,29454],{"class":738},[324,29543,29457],{"class":916},[324,29545,29546],{"class":738}," ros-jazzy-opencv411-cuda128-cudnn970-noble:latest",[324,29548,29463],{"class":738},[19,29550,29551],{},[48,29552],{"alt":50,"src":29553},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-011.png",[19,29555,29556],{},"镜像大小5GB(压缩后的大小详见DockerHub)",[19,29558,29559],{},[48,29560],{"alt":50,"src":29561},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-012.png",[19,29563,29564],{},"将 Docker 镜像推送到 Docker Hub 的步骤如下：",[192,29566,29567],{},[195,29568,29569],{},"创建 Docker Hub 账户",[19,29571,29572],{},"如果你还没有 Docker Hub 账户，请前往 Docker Hub 注册一个免费账户。",[192,29574,29575],{"start":203},[195,29576,29577],{},"登录 Docker Hub",[19,29579,29580],{},"在终端中使用以下命令登录到你的 Docker Hub 账户：",[316,29582,29584],{"className":24549,"code":29583,"language":24551,"meta":50,"style":50},"docker login\n",[269,29585,29586],{"__ignoreMap":50},[324,29587,29588,29590],{"class":326,"line":327},[324,29589,27275],{"class":734},[324,29591,29592],{"class":738}," login\n",[19,29594,29595],{},"输入你的 Docker Hub 用户名和密码进行验证。",[192,29597,29598],{},[195,29599,29600],{},"为你的镜像打标签",[19,29602,29603,29604,29607],{},"Docker Hub 使用 ",[269,29605,29606],{},"\u003C用户名>\u002F\u003C镜像名>:\u003C标签>"," 的格式来标识镜像。你需要为你的镜像打上标签，以便能够推送到 Docker Hub。使用以下命令：",[316,29609,29611],{"className":24549,"code":29610,"language":24551,"meta":50,"style":50},"docker tag ros-jazzy-noble:latest \u003C你的用户名>\u002Fros-jazzy-noble:latest\n",[269,29612,29613],{"__ignoreMap":50},[324,29614,29615,29617,29620,29622,29625,29628,29631,29633],{"class":326,"line":327},[324,29616,27275],{"class":734},[324,29618,29619],{"class":738}," tag",[324,29621,29512],{"class":738},[324,29623,29624],{"class":863}," \u003C",[324,29626,29627],{"class":738},"你的用户",[324,29629,29630],{"class":867},"名",[324,29632,1824],{"class":863},[324,29634,29635],{"class":738},"\u002Fros-jazzy-noble:latest\n",[19,29637,29638,29639,29642],{},"例如，如果你的 Docker Hub 用户名是 ",[269,29640,29641],{},"tungchiahui","，你应该执行：",[316,29644,29646],{"className":24549,"code":29645,"language":24551,"meta":50,"style":50},"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",[269,29647,29648,29659,29663,29674,29678,29689,29693,29704,29708],{"__ignoreMap":50},[324,29649,29650,29652,29654,29656],{"class":326,"line":327},[324,29651,27275],{"class":734},[324,29653,29619],{"class":738},[324,29655,29478],{"class":738},[324,29657,29658],{"class":738}," tungchiahui\u002Fros-noetic-focal:latest\n",[324,29660,29661],{"class":326,"line":203},[324,29662,488],{"emptyLinePlaceholder":487},[324,29664,29665,29667,29669,29671],{"class":326,"line":338},[324,29666,27275],{"class":734},[324,29668,29619],{"class":738},[324,29670,29495],{"class":738},[324,29672,29673],{"class":738}," tungchiahui\u002Fros-humble-jammy:latest\n",[324,29675,29676],{"class":326,"line":344},[324,29677,488],{"emptyLinePlaceholder":487},[324,29679,29680,29682,29684,29686],{"class":326,"line":484},[324,29681,27275],{"class":734},[324,29683,29619],{"class":738},[324,29685,29512],{"class":738},[324,29687,29688],{"class":738}," tungchiahui\u002Fros-jazzy-noble:latest\n",[324,29690,29691],{"class":326,"line":491},[324,29692,488],{"emptyLinePlaceholder":487},[324,29694,29695,29697,29699,29701],{"class":326,"line":496},[324,29696,27275],{"class":734},[324,29698,29619],{"class":738},[324,29700,29529],{"class":738},[324,29702,29703],{"class":738}," \u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[324,29705,29706],{"class":326,"line":502},[324,29707,488],{"emptyLinePlaceholder":487},[324,29709,29710,29712,29714,29716],{"class":326,"line":508},[324,29711,27275],{"class":734},[324,29713,29619],{"class":738},[324,29715,29546],{"class":738},[324,29717,29718],{"class":738}," tungchiahui\u002Fros-jazzy-opencv411-cuda128-cudnn970-noble:latest\n",[192,29720,29721],{"start":203},[195,29722,29723],{},"推送镜像到 Docker Hub",[19,29725,29726],{},"使用以下命令将镜像推送到 Docker Hub：",[316,29728,29730],{"className":24549,"code":29729,"language":24551,"meta":50,"style":50},"docker push \u003C你的用户名>\u002Fros-noetic-jazzy-noble:latest\n",[269,29731,29732],{"__ignoreMap":50},[324,29733,29734,29736,29739,29741,29743,29745,29747],{"class":326,"line":327},[324,29735,27275],{"class":734},[324,29737,29738],{"class":738}," push",[324,29740,29624],{"class":863},[324,29742,29627],{"class":738},[324,29744,29630],{"class":867},[324,29746,1824],{"class":863},[324,29748,29749],{"class":738},"\u002Fros-noetic-jazzy-noble:latest\n",[19,29751,15362],{},[316,29753,29755],{"className":24549,"code":29754,"language":24551,"meta":50,"style":50},"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",[269,29756,29757,29765,29769,29777,29781,29789,29793,29802,29806,29814,29818],{"__ignoreMap":50},[324,29758,29759,29761,29763],{"class":326,"line":327},[324,29760,27275],{"class":734},[324,29762,29738],{"class":738},[324,29764,29658],{"class":738},[324,29766,29767],{"class":326,"line":203},[324,29768,488],{"emptyLinePlaceholder":487},[324,29770,29771,29773,29775],{"class":326,"line":338},[324,29772,27275],{"class":734},[324,29774,29738],{"class":738},[324,29776,29673],{"class":738},[324,29778,29779],{"class":326,"line":344},[324,29780,488],{"emptyLinePlaceholder":487},[324,29782,29783,29785,29787],{"class":326,"line":484},[324,29784,27275],{"class":734},[324,29786,29738],{"class":738},[324,29788,29688],{"class":738},[324,29790,29791],{"class":326,"line":491},[324,29792,488],{"emptyLinePlaceholder":487},[324,29794,29795,29797,29799],{"class":326,"line":496},[324,29796,27275],{"class":734},[324,29798,29738],{"class":738},[324,29800,29801],{"class":738}," tungchiahui\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[324,29803,29804],{"class":326,"line":502},[324,29805,488],{"emptyLinePlaceholder":487},[324,29807,29808,29810,29812],{"class":326,"line":508},[324,29809,27275],{"class":734},[324,29811,29738],{"class":738},[324,29813,29718],{"class":738},[324,29815,29816],{"class":326,"line":514},[324,29817,488],{"emptyLinePlaceholder":487},[324,29819,29820,29822,29824],{"class":326,"line":2343},[324,29821,27275],{"class":734},[324,29823,29738],{"class":738},[324,29825,29826],{"class":738}," tungchiahui\u002Fros-noetic-focal-arm64:latest\n",[192,29828,29829],{"start":338},[195,29830,29831],{},"验证推送成功",[19,29833,29834],{},"你可以通过访问 Docker Hub 的个人页面来验证你的镜像是否已成功推送",[19,29836,29837],{},[116,29838,4513],{},[1871,29840,29841,29844],{},[195,29842,29843],{},"确保你的镜像大小在 Docker Hub 的限制范围内（一般为 10GB）",[195,29845,29846],{},"如果你打算将镜像公开，可以设置为公共仓库；如果希望只有你自己可以访问，可以设置为私有仓库",[19,29848,29849],{},[48,29850],{"alt":50,"src":29851},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-013.png",[19,29853,29854],{},[48,29855],{"alt":50,"src":29856},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-014.png",[151,29858,29860],{"id":29859},"_622手动创建跨平台多架构构建","6.2.2.手动创建(跨平台多架构构建)",[19,29862,29863,29864,29867,29868,29871],{},"如果您想在 ",[116,29865,29866],{},"x86\u002Fx64 电脑上即为本机x86设备构建镜像，又想为树莓派、Jetson等ARM64 设备构建 Docker 镜像"," ，需要使用 ",[116,29869,29870],{},"Docker 的跨平台构建功能"," 。以下是完整解决方案：",[19,29873,29874,29875],{},"1. ",[116,29876,29877],{},"启用 Docker 跨平台构建",[19,29879,29880],{},"在 x86 主机上模拟 ARM64 环境需要以下工具：",[19,29882,29883],{},"第一步：启用 buildx（只需执行一次）",[316,29885,29887],{"className":24549,"code":29886,"language":24551,"meta":50,"style":50},"docker buildx create --name multiarch_builder --use\n",[269,29888,29889],{"__ignoreMap":50},[324,29890,29891,29893,29896,29899,29902,29905],{"class":326,"line":327},[324,29892,27275],{"class":734},[324,29894,29895],{"class":738}," buildx",[324,29897,29898],{"class":738}," create",[324,29900,29901],{"class":916}," --name",[324,29903,29904],{"class":738}," multiarch_builder",[324,29906,29907],{"class":916}," --use\n",[19,29909,29910],{},"这会创建并启用一个支持多架构构建的 builder，电脑重启后也依然存在，所以只用运行一次。",[19,29912,29913],{},"第二步：安装 QEMU 支持（一般新版 Docker Desktop 已自带，但是Linux必须要安装） 如果你用的是服务器或Linux发行版，确保有 qemu 模拟器：",[316,29915,29917],{"className":24549,"code":29916,"language":24551,"meta":50,"style":50},"docker run --rm --privileged multiarch\u002Fqemu-user-static --reset -p yes\n",[269,29918,29919],{"__ignoreMap":50},[324,29920,29921,29923,29925,29927,29930,29933,29936,29939],{"class":326,"line":327},[324,29922,27275],{"class":734},[324,29924,27952],{"class":738},[324,29926,27955],{"class":916},[324,29928,29929],{"class":916}," --privileged",[324,29931,29932],{"class":738}," multiarch\u002Fqemu-user-static",[324,29934,29935],{"class":916}," --reset",[324,29937,29938],{"class":916}," -p",[324,29940,29941],{"class":738}," yes\n",[19,29943,29944],{},"电脑重启后，就会消失，所以需要你每次电脑重启后，在buildx命令前，运行一次该命令即可。",[19,29946,29947],{},"第三步：构建多架构镜像 用下面的命令构建 amd64 和 arm64：",[316,29949,29951],{"className":24549,"code":29950,"language":24551,"meta":50,"style":50},"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",[269,29952,29953,29995,29999,30004,30014,30024,30033,30039,30043,30047,30057,30065,30074,30080,30084,30088,30098,30106,30115,30121,30125,30129,30139,30147,30156,30162,30166,30170,30180,30188,30197,30203,30207,30211,30221,30229,30238,30244,30248,30252,30262,30270,30279,30285,30289,30293,30303,30311,30320,30326,30330,30334,30344,30352,30361,30367,30371,30375,30386,30394,30403,30409],{"__ignoreMap":50},[324,29954,29955,29957,29959,29961,29964,29967,29969,29971,29974,29976,29978,29980,29982,29985,29988,29990,29993],{"class":326,"line":327},[324,29956,27275],{"class":734},[324,29958,29895],{"class":738},[324,29960,29454],{"class":738},[324,29962,29963],{"class":916}," --platform",[324,29965,29966],{"class":738}," linux\u002Famd64,linux\u002Farm64",[324,29968,29457],{"class":916},[324,29970,29624],{"class":863},[324,29972,29973],{"class":738},"你的镜像",[324,29975,29630],{"class":867},[324,29977,1824],{"class":863},[324,29979,1723],{"class":738},[324,29981,1774],{"class":863},[324,29983,29984],{"class":738},"标",[324,29986,29987],{"class":867},"签",[324,29989,1824],{"class":863},[324,29991,29992],{"class":916}," --push",[324,29994,29463],{"class":738},[324,29996,29997],{"class":326,"line":203},[324,29998,488],{"emptyLinePlaceholder":487},[324,30000,30001],{"class":326,"line":338},[324,30002,30003],{"class":772},"# 例子：\n",[324,30005,30006,30008,30010,30012],{"class":326,"line":344},[324,30007,27275],{"class":734},[324,30009,29895],{"class":738},[324,30011,29454],{"class":738},[324,30013,25402],{"class":916},[324,30015,30016,30019,30022],{"class":326,"line":484},[324,30017,30018],{"class":867},"--platform ",[324,30020,30021],{"class":738},"linux\u002Famd64,linux\u002Farm64",[324,30023,25402],{"class":916},[324,30025,30026,30028,30031],{"class":326,"line":491},[324,30027,29457],{"class":916},[324,30029,30030],{"class":738}," tungchiahui\u002Fros:noetic-focal",[324,30032,25402],{"class":916},[324,30034,30035,30037],{"class":326,"line":496},[324,30036,29992],{"class":916},[324,30038,25402],{"class":916},[324,30040,30041],{"class":326,"line":502},[324,30042,29463],{"class":738},[324,30044,30045],{"class":326,"line":508},[324,30046,488],{"emptyLinePlaceholder":487},[324,30048,30049,30051,30053,30055],{"class":326,"line":514},[324,30050,27275],{"class":734},[324,30052,29895],{"class":738},[324,30054,29454],{"class":738},[324,30056,25402],{"class":916},[324,30058,30059,30061,30063],{"class":326,"line":2343},[324,30060,30018],{"class":867},[324,30062,30021],{"class":738},[324,30064,25402],{"class":916},[324,30066,30067,30069,30072],{"class":326,"line":2348},[324,30068,29457],{"class":916},[324,30070,30071],{"class":738}," tungchiahui\u002Fros:humble-jammy",[324,30073,25402],{"class":916},[324,30075,30076,30078],{"class":326,"line":2354},[324,30077,29992],{"class":916},[324,30079,25402],{"class":916},[324,30081,30082],{"class":326,"line":2359},[324,30083,29463],{"class":738},[324,30085,30086],{"class":326,"line":2373},[324,30087,488],{"emptyLinePlaceholder":487},[324,30089,30090,30092,30094,30096],{"class":326,"line":2378},[324,30091,27275],{"class":734},[324,30093,29895],{"class":738},[324,30095,29454],{"class":738},[324,30097,25402],{"class":916},[324,30099,30100,30102,30104],{"class":326,"line":2384},[324,30101,30018],{"class":867},[324,30103,30021],{"class":738},[324,30105,25402],{"class":916},[324,30107,30108,30110,30113],{"class":326,"line":2405},[324,30109,29457],{"class":916},[324,30111,30112],{"class":738}," tungchiahui\u002Fros:jazzy-noble",[324,30114,25402],{"class":916},[324,30116,30117,30119],{"class":326,"line":2410},[324,30118,29992],{"class":916},[324,30120,25402],{"class":916},[324,30122,30123],{"class":326,"line":2424},[324,30124,29463],{"class":738},[324,30126,30127],{"class":326,"line":2429},[324,30128,488],{"emptyLinePlaceholder":487},[324,30130,30131,30133,30135,30137],{"class":326,"line":2458},[324,30132,27043],{"class":734},[324,30134,29895],{"class":738},[324,30136,29454],{"class":738},[324,30138,25402],{"class":916},[324,30140,30141,30143,30145],{"class":326,"line":2463},[324,30142,30018],{"class":867},[324,30144,30021],{"class":738},[324,30146,25402],{"class":916},[324,30148,30149,30151,30154],{"class":326,"line":2480},[324,30150,29457],{"class":916},[324,30152,30153],{"class":738}," tungchiahui\u002Fopencv:411-cuda128-cudnn970-focal",[324,30155,25402],{"class":916},[324,30157,30158,30160],{"class":326,"line":2485},[324,30159,29992],{"class":916},[324,30161,25402],{"class":916},[324,30163,30164],{"class":326,"line":2490},[324,30165,29463],{"class":738},[324,30167,30168],{"class":326,"line":2495},[324,30169,488],{"emptyLinePlaceholder":487},[324,30171,30172,30174,30176,30178],{"class":326,"line":2509},[324,30173,27275],{"class":734},[324,30175,29895],{"class":738},[324,30177,29454],{"class":738},[324,30179,25402],{"class":916},[324,30181,30182,30184,30186],{"class":326,"line":2514},[324,30183,30018],{"class":867},[324,30185,30021],{"class":738},[324,30187,25402],{"class":916},[324,30189,30190,30192,30195],{"class":326,"line":3306},[324,30191,29457],{"class":916},[324,30193,30194],{"class":738}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-jammy",[324,30196,25402],{"class":916},[324,30198,30199,30201],{"class":326,"line":3320},[324,30200,29992],{"class":916},[324,30202,25402],{"class":916},[324,30204,30205],{"class":326,"line":3328},[324,30206,29463],{"class":738},[324,30208,30209],{"class":326,"line":3333},[324,30210,488],{"emptyLinePlaceholder":487},[324,30212,30213,30215,30217,30219],{"class":326,"line":3339},[324,30214,27043],{"class":734},[324,30216,29895],{"class":738},[324,30218,29454],{"class":738},[324,30220,25402],{"class":916},[324,30222,30223,30225,30227],{"class":326,"line":3345},[324,30224,30018],{"class":867},[324,30226,30021],{"class":738},[324,30228,25402],{"class":916},[324,30230,30231,30233,30236],{"class":326,"line":3350},[324,30232,29457],{"class":916},[324,30234,30235],{"class":738}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-noble",[324,30237,25402],{"class":916},[324,30239,30240,30242],{"class":326,"line":8677},[324,30241,29992],{"class":916},[324,30243,25402],{"class":916},[324,30245,30246],{"class":326,"line":8701},[324,30247,29463],{"class":738},[324,30249,30250],{"class":326,"line":8706},[324,30251,488],{"emptyLinePlaceholder":487},[324,30253,30254,30256,30258,30260],{"class":326,"line":8712},[324,30255,27275],{"class":734},[324,30257,29895],{"class":738},[324,30259,29454],{"class":738},[324,30261,25402],{"class":916},[324,30263,30264,30266,30268],{"class":326,"line":8739},[324,30265,30018],{"class":867},[324,30267,30021],{"class":738},[324,30269,25402],{"class":916},[324,30271,30272,30274,30277],{"class":326,"line":8744},[324,30273,29457],{"class":916},[324,30275,30276],{"class":738}," tungchiahui\u002Fros-opencv:noetic-411-cuda128-cudnn970-focal",[324,30278,25402],{"class":916},[324,30280,30281,30283],{"class":326,"line":8750},[324,30282,29992],{"class":916},[324,30284,25402],{"class":916},[324,30286,30287],{"class":326,"line":8762},[324,30288,29463],{"class":738},[324,30290,30291],{"class":326,"line":8774},[324,30292,488],{"emptyLinePlaceholder":487},[324,30294,30295,30297,30299,30301],{"class":326,"line":8786},[324,30296,27275],{"class":734},[324,30298,29895],{"class":738},[324,30300,29454],{"class":738},[324,30302,25402],{"class":916},[324,30304,30305,30307,30309],{"class":326,"line":10445},[324,30306,30018],{"class":867},[324,30308,30021],{"class":738},[324,30310,25402],{"class":916},[324,30312,30313,30315,30318],{"class":326,"line":10470},[324,30314,29457],{"class":916},[324,30316,30317],{"class":738}," cherish\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[324,30319,25402],{"class":916},[324,30321,30322,30324],{"class":326,"line":10493},[324,30323,29992],{"class":916},[324,30325,25402],{"class":916},[324,30327,30328],{"class":326,"line":10517},[324,30329,29463],{"class":738},[324,30331,30332],{"class":326,"line":10522},[324,30333,488],{"emptyLinePlaceholder":487},[324,30335,30336,30338,30340,30342],{"class":326,"line":10527},[324,30337,27043],{"class":734},[324,30339,29895],{"class":738},[324,30341,29454],{"class":738},[324,30343,25402],{"class":916},[324,30345,30346,30348,30350],{"class":326,"line":10532},[324,30347,30018],{"class":867},[324,30349,30021],{"class":738},[324,30351,25402],{"class":916},[324,30353,30354,30356,30359],{"class":326,"line":10541},[324,30355,29457],{"class":916},[324,30357,30358],{"class":738}," tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn970-noble",[324,30360,25402],{"class":916},[324,30362,30363,30365],{"class":326,"line":10546},[324,30364,29992],{"class":916},[324,30366,25402],{"class":916},[324,30368,30369],{"class":326,"line":10552},[324,30370,29463],{"class":738},[324,30372,30373],{"class":326,"line":10573},[324,30374,488],{"emptyLinePlaceholder":487},[324,30376,30377,30380,30382,30384],{"class":326,"line":10579},[324,30378,30379],{"class":734},"  docker",[324,30381,29895],{"class":738},[324,30383,29454],{"class":738},[324,30385,25402],{"class":916},[324,30387,30388,30390,30392],{"class":326,"line":10593},[324,30389,30018],{"class":867},[324,30391,30021],{"class":738},[324,30393,25402],{"class":916},[324,30395,30396,30398,30401],{"class":326,"line":10599},[324,30397,29457],{"class":916},[324,30399,30400],{"class":738}," sdutvincirobot\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[324,30402,25402],{"class":916},[324,30404,30405,30407],{"class":326,"line":10626},[324,30406,29992],{"class":916},[324,30408,25402],{"class":916},[324,30410,30411],{"class":326,"line":10635},[324,30412,29463],{"class":738},[19,30414,30415],{},"说明： –platform 指定多架构。 –push 是必须的，因为 buildx 的多平台构建默认是不能本地加载的（除非加 –load，但那只能支持单一架构）",[19,30417,30418],{},[48,30419],{"alt":50,"src":30420},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-015.png",[19,30422,30423],{},[48,30424],{"alt":50,"src":30425},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-016.png",[151,30427,30429],{"id":30428},"_623清除构建缓存","6.2.3.清除构建缓存",[316,30431,30433],{"className":24549,"code":30432,"language":24551,"meta":50,"style":50},"# 清理BuildKit构建缓存\ndocker builder prune -f  \n",[269,30434,30435,30440],{"__ignoreMap":50},[324,30436,30437],{"class":326,"line":327},[324,30438,30439],{"class":772},"# 清理BuildKit构建缓存\n",[324,30441,30442,30444,30447,30450],{"class":326,"line":203},[324,30443,27275],{"class":734},[324,30445,30446],{"class":738}," builder",[324,30448,30449],{"class":738}," prune",[324,30451,30452],{"class":916}," -f\n",[19,30454,30455],{},[48,30456],{"alt":50,"src":30457},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-017.png",[35,30459,30461],{"id":30460},"_63补充","6.3.补充",[151,30463,30465],{"id":30464},"_631使用dockfile构建docker镜像","6.3.1.使用Dockfile构建Docker镜像",[19,30467,30468],{},"Dockerfile是一个文本文件，其中包含了若干条指令，指令描述了构建镜像的细节",[19,30470,30471],{},"先来编写一个最简单的Dockerfile，以前文下载的Nginx镜像为例，来编写一个Dockerfile修改该Nginx镜像的首页",[19,30473,30474],{},"1、新建一个空文件夹docker-demo，在里面再新建文件夹app，在app目录下新建一个名为Dockerfile的文件，在里面增加如下内容（vim Dockerfile）：",[316,30476,30478],{"className":24549,"code":30477,"language":24551,"meta":50,"style":50},"FROM nginx\nRUN echo '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>' > \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[269,30479,30480,30487],{"__ignoreMap":50},[324,30481,30482,30484],{"class":326,"line":327},[324,30483,28092],{"class":734},[324,30485,30486],{"class":738}," nginx\n",[324,30488,30489,30491,30494,30497,30499],{"class":326,"line":203},[324,30490,29277],{"class":734},[324,30492,30493],{"class":738}," echo",[324,30495,30496],{"class":738}," '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>'",[324,30498,26946],{"class":863},[324,30500,30501],{"class":738}," \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[19,30503,30504],{},"该Dockerfile非常简单，其中的 FROM、 RUN都是 Dockerfile的指令。 FROM指令用于指定基础镜像， RUN指令用于执行命令",[19,30506,30507],{},"2、在Dockerfile所在路径执行以下命令构建镜像：",[316,30509,30511],{"className":24549,"code":30510,"language":24551,"meta":50,"style":50},"docker build -t nginx:tuling .\n",[269,30512,30513],{"__ignoreMap":50},[324,30514,30515,30517,30519,30521,30524],{"class":326,"line":327},[324,30516,27275],{"class":734},[324,30518,29454],{"class":738},[324,30520,29457],{"class":916},[324,30522,30523],{"class":738}," nginx:tuling",[324,30525,29463],{"class":738},[19,30527,30528],{},"其中，-t指定镜像名字，命令最后的点（.）表示Dockerfile文件所在路径",[19,30530,30531],{},"3、执行以下命令，即可使用该镜像启动一个 Docker容器",[316,30533,30535],{"className":24549,"code":30534,"language":24551,"meta":50,"style":50},"docker run -d -p 92:80 nginx:tuling\n",[269,30536,30537],{"__ignoreMap":50},[324,30538,30539,30541,30543,30546,30548,30551],{"class":326,"line":327},[324,30540,27275],{"class":734},[324,30542,27952],{"class":738},[324,30544,30545],{"class":916}," -d",[324,30547,29938],{"class":916},[324,30549,30550],{"class":738}," 92:80",[324,30552,30553],{"class":738}," nginx:tuling\n",[19,30555,30556,30557],{},"4、访问 ",[25,30558,30561],{"href":30559,"rel":30560},"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",[29],"http:\u002F\u002FDocker宿主机IP:92\u002F，可看到下图所示界面",[19,30563,30564],{},[48,30565],{"alt":50,"src":30566},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-018.png",[19,30568,30569],{},[48,30570],{"alt":50,"src":30571},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-019.png",[151,30573,30575],{"id":30574},"_632使用dockerfile构建微服务镜像","6.3.2.使用Dockerfile构建微服务镜像",[19,30577,30578],{},"只需要知道大体流程即可",[19,30580,30581],{},"以项目tulingmall-member为例，将该微服务的可运行jar包构建成docker镜像",[19,30583,30584],{},"1、将jar包上传linux服务器\u002Froot\u002Ftulingmall\u002Ftulingmall-member目录，在jar包所在目录创建名为Dockerfile的文件",[19,30586,30587],{},"2、在Dockerfile中添加以下内容",[316,30589,30591],{"className":26815,"code":30590,"language":26817,"meta":50,"style":50},"# 基于哪个镜像\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",[269,30592,30593,30598,30603,30608,30613,30618,30623,30628],{"__ignoreMap":50},[324,30594,30595],{"class":326,"line":327},[324,30596,30597],{},"# 基于哪个镜像\n",[324,30599,30600],{"class":326,"line":203},[324,30601,30602],{},"From java:8\n",[324,30604,30605],{"class":326,"line":338},[324,30606,30607],{},"# 复制文件到容器\n",[324,30609,30610],{"class":326,"line":344},[324,30611,30612],{},"ADD tulingmall-member-0.0.5.jar \u002Ftulingmall-member-0.0.5.jar\n",[324,30614,30615],{"class":326,"line":484},[324,30616,30617],{},"# 声明需要暴露的端口\n",[324,30619,30620],{"class":326,"line":491},[324,30621,30622],{},"EXPOSE 8877\n",[324,30624,30625],{"class":326,"line":496},[324,30626,30627],{},"# 配置容器启动后执行的命令\n",[324,30629,30630],{"class":326,"line":502},[324,30631,30632],{},"ENTRYPOINT java ${JAVA_OPTS} -jar \u002Ftulingmall-member-0.0.5.jar\n",[19,30634,30635],{},"3、使用docker build命令构建镜像",[316,30637,30639],{"className":24549,"code":30638,"language":24551,"meta":50,"style":50},"docker build -t tulingmall-member:0.0.5 .\n",[269,30640,30641],{"__ignoreMap":50},[324,30642,30643,30645,30647,30649,30652],{"class":326,"line":327},[324,30644,27275],{"class":734},[324,30646,29454],{"class":738},[324,30648,29457],{"class":916},[324,30650,30651],{"class":738}," tulingmall-member:0.0.5",[324,30653,29463],{"class":738},[19,30655,30656],{},"格式： docker build -t 镜像名称:标签 Dockerfile的相对位置",[19,30658,30659],{},[48,30660],{"alt":50,"src":30661},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-020.png",[19,30663,30664],{},"4、启动镜像，加-d可在后台启动",[316,30666,30668],{"className":24549,"code":30667,"language":24551,"meta":50,"style":50},"docker run -d -p 8877:8877 tulingmall-member:0.0.5\n",[269,30669,30670],{"__ignoreMap":50},[324,30671,30672,30674,30676,30678,30680,30683],{"class":326,"line":327},[324,30673,27275],{"class":734},[324,30675,27952],{"class":738},[324,30677,30545],{"class":916},[324,30679,29938],{"class":916},[324,30681,30682],{"class":738}," 8877:8877",[324,30684,30685],{"class":738}," tulingmall-member:0.0.5\n",[19,30687,30688],{},"加上JVM参数：",[316,30690,30692],{"className":24549,"code":30691,"language":24551,"meta":50,"style":50},"# --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",[269,30693,30694,30699,30714,30724,30733,30740],{"__ignoreMap":50},[324,30695,30696],{"class":326,"line":327},[324,30697,30698],{"class":772},"# --cap-add=SYS_PTRACE 这个参数是让docker能支持在容器里能执行jdk自带类似jinfo，jmap这些命令，如果不需要在容器里执行这些命令可以不加\n",[324,30700,30701,30703,30705,30708,30710,30712],{"class":326,"line":203},[324,30702,27275],{"class":734},[324,30704,27952],{"class":738},[324,30706,30707],{"class":916},"  -d",[324,30709,29938],{"class":916},[324,30711,30682],{"class":738},[324,30713,25402],{"class":916},[324,30715,30716,30718,30721],{"class":326,"line":338},[324,30717,28850],{"class":867},[324,30719,30720],{"class":738},"SPRING_CLOUD_NACOS_CONFIG_SERVER_ADDR=192.168.65.174:8848",[324,30722,30723],{"class":916},"  \\\n",[324,30725,30726,30728,30731],{"class":326,"line":344},[324,30727,28850],{"class":867},[324,30729,30730],{"class":738},"JAVA_OPTS='-Xmx1g -Xms1g -XX:MaxMetaspaceSize=512m'",[324,30732,30723],{"class":916},[324,30734,30735,30738],{"class":326,"line":484},[324,30736,30737],{"class":867},"--cap-add=SYS_PTRACE  ",[324,30739,26899],{"class":916},[324,30741,30742],{"class":326,"line":491},[324,30743,30744],{"class":867},"tulingmall-member:0.0.5\n",[19,30746,30747],{},"5、访问会员服务接口",[19,30749,30750],{},[48,30751],{"alt":50,"src":30752},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-021.png",[151,30754,30756],{"id":30755},"_633将微服务镜像发布到阿里云","6.3.3.将微服务镜像发布到阿里云",[19,30758,30759],{},"我们制作好了微服务镜像，一般需要发布到镜像仓库供别人使用，我们可以选择自建镜像仓库，也可以直接使用官方镜像仓库，这里我们选择",[19,30761,30762,30763],{},"阿里云docker镜像仓库：",[25,30764,30765],{"href":30765,"rel":30766},"https:\u002F\u002Fcr.console.aliyun.com\u002Fcn-hangzhou\u002Finstance\u002Frepositories",[29],[19,30768,30769],{},"首先，我们需要注册一个阿里云账号，创建容器镜像服务",[19,30771,30772],{},"然后，在linux服务器上用docker login命令登录镜像仓库",[19,30774,30775],{},[48,30776],{"alt":50,"src":30777},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-022.png",[19,30779,30780],{},"要把镜像推送到镜像仓库",[316,30782,30784],{"className":24549,"code":30783,"language":24551,"meta":50,"style":50},"docker tag tulingmall-member:0.0.5 registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[269,30785,30786],{"__ignoreMap":50},[324,30787,30788,30790,30792,30794],{"class":326,"line":327},[324,30789,27275],{"class":734},[324,30791,29619],{"class":738},[324,30793,30651],{"class":738},[324,30795,30796],{"class":738}," registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[19,30798,30799],{},"最后将镜像推送到远程仓库",[316,30801,30803],{"className":24549,"code":30802,"language":24551,"meta":50,"style":50},"docker push registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[269,30804,30805],{"__ignoreMap":50},[324,30806,30807,30809,30811],{"class":326,"line":327},[324,30808,27275],{"class":734},[324,30810,29738],{"class":738},[324,30812,30796],{"class":738},[775,30814,30815],{},"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":50,"searchDepth":203,"depth":203,"links":30817},[30818,30819,30820],{"id":29205,"depth":338,"text":29206},{"id":29434,"depth":338,"text":29435},{"id":30460,"depth":338,"text":30461},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch6-docker",{"title":29197,"description":50},"wiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像","ViWMXEj6lWx3Vw92hAMOoKTyGbZ4r_bHvPkT-sIqCJk",{"id":30827,"title":30828,"body":30829,"description":50,"extension":792,"meta":30972,"navigation":487,"path":30973,"seo":30974,"stem":30975,"__hash__":30976},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发.md","7.VScode远程开发",{"type":7,"value":30830,"toc":30970},[30831,30834,30839,30844,30847,30852,30857,30860,30865,30870,30873,30878,30881,30884,30887,30890,30893,30896,30916,30938,30941,30944,30964,30967],[10,30832,30828],{"id":30833},"_7vscode远程开发",[192,30835,30836],{},[195,30837,30838],{},"插件1：微软Docker工具",[19,30840,30841],{},[48,30842],{"alt":50,"src":30843},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-023.png",[19,30845,30846],{},"docker扩展插件已经进化为container tools了，请安装container tools",[19,30848,30849],{},[48,30850],{"alt":50,"src":30851},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-024.png",[192,30853,30854],{"start":203},[195,30855,30856],{},"插件2：微软Docker远程开发工具",[19,30858,30859],{},"下面这是远程开发的插件。",[19,30861,30862],{},[48,30863],{"alt":50,"src":30864},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-025.png",[19,30866,30867],{},[48,30868],{"alt":50,"src":30869},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-026.png",[19,30871,30872],{},"上述教程已经挂载了本地磁盘了，所以在Docker容器中可以轻松访问本地的工程",[19,30874,30875],{},[48,30876],{"alt":50,"src":30877},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-027.png",[19,30879,30880],{},"安装完拓展之后，vscode进行链接：",[19,30882,30883],{},"1.按ctrl+shift+p",[19,30885,30886],{},"2.输入 \"Dev Containers: Attach to Running Container\"",[19,30888,30889],{},"3.选择目前运行的容器",[19,30891,30892],{},"4.VS Code 会在新窗口中打开并连接到容器",[19,30894,30895],{},"5.补充一点：在开发时候最好不要将项目所需要的文件夹放到容器中，可以将本地目录挂载到容器内，这样就可以实现项目文件在本地，环境仍然在容器当中 挂载实现方式：",[316,30897,30899],{"className":24549,"code":30898,"language":24551,"meta":50,"style":50},"docker run -v 主机目录:容器目录 image-name\n",[269,30900,30901],{"__ignoreMap":50},[324,30902,30903,30905,30907,30910,30913],{"class":326,"line":327},[324,30904,27275],{"class":734},[324,30906,27952],{"class":738},[324,30908,30909],{"class":916}," -v",[324,30911,30912],{"class":738}," 主机目录:容器目录",[324,30914,30915],{"class":738}," image-name\n",[316,30917,30919],{"className":24549,"code":30918,"language":24551,"meta":50,"style":50},"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",[269,30920,30921],{"__ignoreMap":50},[324,30922,30923,30925,30927,30930,30932,30935],{"class":326,"line":327},[324,30924,27275],{"class":734},[324,30926,27952],{"class":738},[324,30928,30929],{"class":916}," -it",[324,30931,30909],{"class":916},[324,30933,30934],{"class":738}," \u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F:\u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F",[324,30936,30937],{"class":738}," cherish6\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[19,30939,30940],{},"在运行的时候进行挂载，挂载自己的这个项目目录就可以，不会对其他目录产生影响的 需要补充一点非常重要：不要把系统文件给挂载进去，在容器中如果误删除后，本地就崩了！",[19,30942,30943],{},"查看挂载情况：",[316,30945,30947],{"className":24549,"code":30946,"language":24551,"meta":50,"style":50},"mount | grep -i project\n",[269,30948,30949],{"__ignoreMap":50},[324,30950,30951,30954,30956,30959,30961],{"class":326,"line":327},[324,30952,30953],{"class":734},"mount",[324,30955,25833],{"class":863},[324,30957,30958],{"class":734}," grep",[324,30960,27153],{"class":916},[324,30962,30963],{"class":738}," project\n",[19,30965,30966],{},"也可以通过ls来进行查看",[775,30968,30969],{},"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":50,"searchDepth":203,"depth":203,"links":30971},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch7-vscode",{"title":30828,"description":50},"wiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发","jXcDt4HYisao6zvVrVK-MtSjb5N3Bk6ZZ0Wv7p7WKKI",{"id":30978,"title":30979,"body":30980,"description":791,"extension":792,"meta":30984,"navigation":487,"path":30986,"seo":30987,"stem":30988,"__hash__":30989},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Findex.md","Docker",{"type":7,"value":30981,"toc":30982},[],{"title":50,"searchDepth":203,"depth":203,"links":30983},[],{"category":30985},"运维","\u002Fwiki\u002F2025-11-10-docker",{"title":30979,"description":791},"wiki\u002F2025-11-10-Docker\u002Findex","cPixP1_tGoKPYhmNBJD9RRykSUOIBgXIUZ_wkP0gFbg",{"id":30991,"title":30992,"body":30993,"description":791,"extension":792,"meta":30997,"navigation":487,"path":30998,"seo":30999,"stem":31000,"__hash__":31001},"wiki\u002Fwiki\u002F2025-11-10-k8s.md","K8S",{"type":7,"value":30994,"toc":30995},[],{"title":50,"searchDepth":203,"depth":203,"links":30996},[],{"category":30985},"\u002Fwiki\u002F2025-11-10-k8s",{"title":30992,"description":791},"wiki\u002F2025-11-10-k8s","78QQJjmWuXthybVJ5CPmqyTGLhB8l9HoS-XENe0Lur0",{"id":31003,"title":31004,"body":31005,"description":791,"extension":792,"meta":31298,"navigation":487,"path":31299,"seo":31300,"stem":31301,"__hash__":31302},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境.md","1.验证深度学习环境",{"type":7,"value":31006,"toc":31296},[31007,31010,31018,31033,31038,31089,31092,31098,31285,31290,31293],[10,31008,31004],{"id":31009},"_1验证深度学习环境",[19,31011,31012,31013],{},"关于环境的安装，看",[25,31014,31017],{"href":31015,"rel":31016},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FK4cjdAj26ogJLGxVfWTcrwo6nih",[29],"Pytorch-->深度学习",[19,31019,31020,31021,31024,31025,31028,31029,31032],{},"补充一点安装cuda和cudnn时，使用指令比较好一些，不用单独进行安装，安装pytorch时直接安依赖包就可以（ ",[269,31022,31023],{},"pytorch-cuda=12.4"," 是一个“ ",[116,31026,31027],{},"元包（meta-package）"," ”，它并不包含真正的 CUDA 文件，而是一个 ",[116,31030,31031],{},"依赖集合，"," 里边包含了所需要的一些包，需要注意的是安装前先查看电脑支持的cuda最高版本，要安装的cuda版本小于等于13.0",[19,31034,31035],{},[48,31036],{"alt":50,"src":31037},"\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",[316,31039,31041],{"className":24549,"code":31040,"language":24551,"meta":50,"style":50},"# 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",[269,31042,31043,31048],{"__ignoreMap":50},[324,31044,31045],{"class":326,"line":327},[324,31046,31047],{"class":772},"# CUDA 12.4\n",[324,31049,31050,31053,31055,31058,31061,31064,31067,31070,31072,31075,31078,31081,31084,31086],{"class":326,"line":203},[324,31051,31052],{"class":734},"conda",[324,31054,760],{"class":738},[324,31056,31057],{"class":738}," pytorch==",[324,31059,31060],{"class":916},"2.5.1",[324,31062,31063],{"class":738}," torchvision==",[324,31065,31066],{"class":916},"0.20.1",[324,31068,31069],{"class":738}," torchaudio==",[324,31071,31060],{"class":916},[324,31073,31074],{"class":738}," pytorch-cuda=",[324,31076,31077],{"class":916},"12.4",[324,31079,31080],{"class":916}," -c",[324,31082,31083],{"class":738}," pytorch",[324,31085,31080],{"class":916},[324,31087,31088],{"class":738}," nvidia\n",[19,31090,31091],{},"）：",[19,31093,31094],{},[25,31095,31096],{"href":31096,"rel":31097},"https:\u002F\u002Fpytorch.org\u002Fget-started\u002Fprevious-versions\u002F",[29],[316,31099,31103],{"className":31100,"code":31101,"language":31102,"meta":50,"style":50},"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",[269,31104,31105,31110,31118,31123,31133,31149,31154,31164,31201,31208,31220,31236,31241,31251,31263,31273],{"__ignoreMap":50},[324,31106,31107],{"class":326,"line":327},[324,31108,31109],{"class":772},"# 对深度学习环境进行测试\n",[324,31111,31112,31115],{"class":326,"line":203},[324,31113,31114],{"class":863},"import",[324,31116,31117],{"class":867}," torch\n",[324,31119,31120],{"class":326,"line":338},[324,31121,31122],{"class":772},"# 查看cuda是否被激活\n",[324,31124,31125,31128,31130],{"class":326,"line":344},[324,31126,31127],{"class":867},"flag",[324,31129,913],{"class":863},[324,31131,31132],{"class":867},"torch.cuda.is_available()\n",[324,31134,31135,31138,31140,31143,31146],{"class":326,"line":484},[324,31136,31137],{"class":916},"print",[324,31139,868],{"class":867},[324,31141,31142],{"class":738},"\"cuda:\"",[324,31144,31145],{"class":867},", flag)   ",[324,31147,31148],{"class":772},"#返回true的话说明被激活\n",[324,31150,31151],{"class":326,"line":491},[324,31152,31153],{"class":772},"# 进行调用查看:有GPU调用GPU，没有GPU调用CPU\n",[324,31155,31156,31159,31161],{"class":326,"line":496},[324,31157,31158],{"class":867},"ngpu",[324,31160,913],{"class":863},[324,31162,31163],{"class":916},"1\n",[324,31165,31166,31169,31171,31174,31177,31179,31182,31185,31188,31190,31192,31194,31196,31199],{"class":326,"line":502},[324,31167,31168],{"class":867},"device",[324,31170,913],{"class":863},[324,31172,31173],{"class":867},"torch.device(",[324,31175,31176],{"class":738},"\"cuda:0\"",[324,31178,2435],{"class":863},[324,31180,31181],{"class":867},"(torch.cuda.is_available() ",[324,31183,31184],{"class":863},"and",[324,31186,31187],{"class":867}," ngpu",[324,31189,1824],{"class":863},[324,31191,1056],{"class":916},[324,31193,14443],{"class":867},[324,31195,2432],{"class":863},[324,31197,31198],{"class":738}," \"cpu\"",[324,31200,874],{"class":867},[324,31202,31203,31205],{"class":326,"line":508},[324,31204,31137],{"class":916},[324,31206,31207],{"class":867},"(device)\n",[324,31209,31210,31212,31215,31217],{"class":326,"line":514},[324,31211,31137],{"class":916},[324,31213,31214],{"class":867},"(torch.cuda.get_device_name(",[324,31216,1056],{"class":916},[324,31218,31219],{"class":867},"))\n",[324,31221,31222,31224,31227,31229,31231,31233],{"class":326,"line":2343},[324,31223,31137],{"class":916},[324,31225,31226],{"class":867},"(torch.rand(",[324,31228,938],{"class":916},[324,31230,1242],{"class":867},[324,31232,938],{"class":916},[324,31234,31235],{"class":867},").cuda())\n",[324,31237,31238],{"class":326,"line":2348},[324,31239,31240],{"class":772},"# 查看cuda和cudnn的版本\n",[324,31242,31243,31246,31248],{"class":326,"line":2354},[324,31244,31245],{"class":867},"cuda_version",[324,31247,913],{"class":863},[324,31249,31250],{"class":867},"torch.version.cuda\n",[324,31252,31253,31255,31257,31260],{"class":326,"line":2359},[324,31254,31137],{"class":916},[324,31256,868],{"class":867},[324,31258,31259],{"class":738},"\"cuda version\"",[324,31261,31262],{"class":867},",cuda_version)\n",[324,31264,31265,31268,31270],{"class":326,"line":2373},[324,31266,31267],{"class":867},"cudnn_version",[324,31269,913],{"class":863},[324,31271,31272],{"class":867},"torch.backends.cudnn.version()\n",[324,31274,31275,31277,31279,31282],{"class":326,"line":2378},[324,31276,31137],{"class":916},[324,31278,868],{"class":867},[324,31280,31281],{"class":738},"\"cudnn version\"",[324,31283,31284],{"class":867},",cudnn_version)\n",[19,31286,31287],{},[48,31288],{"alt":50,"src":31289},"\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",[19,31291,31292],{},"cuda:0 指的是一块显卡",[775,31294,31295],{},"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":50,"searchDepth":203,"depth":203,"links":31297},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch1",{"title":31004,"description":791},"wiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境","RH7hK3Jf2AfXWipS59cUOBvN5klNTAjs1j6ohh9I9GE",{"id":31304,"title":31305,"body":31306,"description":791,"extension":792,"meta":51110,"navigation":487,"path":51111,"seo":51112,"stem":51113,"__hash__":51114},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络.md","2.经典神经网络",{"type":7,"value":31307,"toc":51104},[31308,31311,31315,31319,31322,31327,31332,31335,31340,31345,31350,31353,31357,31362,31366,31371,31374,31379,31382,31385,31388,31391,31396,31399,31404,31409,31414,31419,31422,31426,31429,31434,32038,32043,32046,32051,32054,32057,32521,32524,32527,32530,32533,34584,34587,34592,34597,35392,35395,35400,36178,36182,37841,37845,38559,38563,38567,38572,38577,38582,38585,38590,38595,38600,38605,38610,38614,38619,39901,39906,39909,39912,39915,40070,40073,40076,41292,41297,41992,41996,42000,42005,42010,42013,42018,42023,42028,42033,42038,42043,42048,42053,42058,42063,42068,42073,42078,42083,42088,42093,42098,42103,42108,42113,42118,42123,42128,42133,42138,42143,42148,42153,42158,42163,42167,42171,42174,43652,43656,45303,45307,46001,46005,46008,46011,46555,46558,46562,46565,47962,47966,47969,48547,50334,50338,50341,51101],[10,31309,31305],{"id":31310},"_2经典神经网络",[35,31312,31314],{"id":31313},"_21lenet与alexnet","2.1.LeNet与AlexNet",[151,31316,31318],{"id":31317},"_211原理介绍","2.1.1.原理介绍",[19,31320,31321],{},"LeNet-5",[192,31323,31324],{},[195,31325,31326],{},"原理",[19,31328,31329],{},[48,31330],{"alt":50,"src":31331},"\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",[19,31333,31334],{},"B是batch批次；C是channel通道",[192,31336,31337],{"start":203},[195,31338,31339],{},"网络参数详细",[19,31341,31342],{},[48,31343],{"alt":50,"src":31344},"\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",[19,31346,31347],{},[48,31348],{"alt":50,"src":31349},"\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",[19,31351,31352],{},"AlexNet",[192,31354,31355],{},[195,31356,31326],{},[19,31358,31359],{},[48,31360],{"alt":50,"src":31361},"\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",[192,31363,31364],{"start":203},[195,31365,31339],{},[19,31367,31368],{},[48,31369],{"alt":50,"src":31370},"\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",[19,31372,31373],{},"使用dropout使一部分神经元失活，这样可以避免数据量太大导致的过拟合发生，操作如下：",[19,31375,31376],{},[48,31377],{"alt":50,"src":31378},"\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",[19,31380,31381],{},"数据处理中的图像增强操作:",[19,31383,31384],{},"在深度学习中最重要的就是对数据的采集和处理，数据不够的情况下，需要对数据进行扩增，有两个好处：",[19,31386,31387],{},"①增加数据量，保证训练数据充足；②防止过拟合",[19,31389,31390],{},"操作方式：①水平翻转；②随机裁剪；③PCA",[19,31392,31393],{},[48,31394],{"alt":50,"src":31395},"\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",[19,31397,31398],{},"提升网络精确度的方法：LRN正则化",[19,31400,31401],{},[48,31402],{"alt":50,"src":31403},"\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",[19,31405,31406],{},[48,31407],{"alt":50,"src":31408},"\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",[192,31410,31411],{"start":338},[195,31412,31413],{},"AlexNet的总结",[19,31415,31416],{},[48,31417],{"alt":50,"src":31418},"\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",[19,31420,31421],{},"比LeNet模型要深一丢丢",[151,31423,31425],{"id":31424},"_212代码实现","2.1.2.代码实现",[19,31427,31428],{},"（1）LeNet",[192,31430,31431],{},[195,31432,31433],{},"模型搭建",[316,31435,31437],{"className":31100,"code":31436,"language":31102,"meta":50,"style":50},"# 导入库\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",[269,31438,31439,31444,31450,31455,31468,31473,31485,31489,31509,31514,31519,31530,31535,31554,31558,31563,31612,31624,31629,31658,31693,31720,31725,31737,31742,31762,31781,31800,31804,31809,31819,31836,31847,31862,31873,31884,31899,31914,31925,31932,31936,31950,31955,31978,31983,31988,31993,31997,32002,32007,32017],{"__ignoreMap":50},[324,31440,31441],{"class":326,"line":327},[324,31442,31443],{"class":772},"# 导入库\n",[324,31445,31446,31448],{"class":326,"line":203},[324,31447,31114],{"class":863},[324,31449,31117],{"class":867},[324,31451,31452],{"class":326,"line":338},[324,31453,31454],{"class":772},"# 导入神经网络层\n",[324,31456,31457,31460,31463,31465],{"class":326,"line":344},[324,31458,31459],{"class":863},"from",[324,31461,31462],{"class":867}," torch ",[324,31464,31114],{"class":863},[324,31466,31467],{"class":867}," nn\n",[324,31469,31470],{"class":326,"line":484},[324,31471,31472],{"class":772},"# 导入展示神经网络参数的包\n",[324,31474,31475,31477,31480,31482],{"class":326,"line":491},[324,31476,31459],{"class":863},[324,31478,31479],{"class":867}," torchsummary ",[324,31481,31114],{"class":863},[324,31483,31484],{"class":867}," summary\n",[324,31486,31487],{"class":326,"line":496},[324,31488,488],{"emptyLinePlaceholder":487},[324,31490,31491,31493,31496,31498,31501,31503,31506],{"class":326,"line":502},[324,31492,15423],{"class":863},[324,31494,31495],{"class":734}," LeNet",[324,31497,868],{"class":867},[324,31499,31500],{"class":734},"nn",[324,31502,1422],{"class":867},[324,31504,31505],{"class":734},"Module",[324,31507,31508],{"class":867},"):\n",[324,31510,31511],{"class":326,"line":508},[324,31512,31513],{"class":772},"    # 模型初始化:\n",[324,31515,31516],{"class":326,"line":514},[324,31517,31518],{"class":772},"    # 定义一些网络层和激活函数\n",[324,31520,31521,31524,31527],{"class":326,"line":2343},[324,31522,31523],{"class":863},"    def",[324,31525,31526],{"class":916}," __init__",[324,31528,31529],{"class":867},"(self):\n",[324,31531,31532],{"class":326,"line":2348},[324,31533,31534],{"class":772},"        # 当时使用继承的时候,如果要进行初始化,必须也要将父类进行初始化一下\n",[324,31536,31537,31540,31543,31546,31549,31552],{"class":326,"line":2354},[324,31538,31539],{"class":916},"        super",[324,31541,31542],{"class":867},"(LeNet,",[324,31544,31545],{"class":916},"self",[324,31547,31548],{"class":867},").",[324,31550,31551],{"class":916},"__init__",[324,31553,2706],{"class":867},[324,31555,31556],{"class":326,"line":2359},[324,31557,488],{"emptyLinePlaceholder":487},[324,31559,31560],{"class":326,"line":2373},[324,31561,31562],{"class":772},"        # 定义网络层\n",[324,31564,31565,31568,31571,31573,31576,31579,31581,31583,31585,31588,31590,31592,31594,31597,31599,31601,31603,31606,31608,31610],{"class":326,"line":2378},[324,31566,31567],{"class":916},"        self",[324,31569,31570],{"class":867},".c1",[324,31572,913],{"class":863},[324,31574,31575],{"class":867},"nn.Conv2d(",[324,31577,31578],{"class":5945},"in_channels",[324,31580,913],{"class":863},[324,31582,1082],{"class":916},[324,31584,1242],{"class":867},[324,31586,31587],{"class":5945},"out_channels",[324,31589,913],{"class":863},[324,31591,1208],{"class":916},[324,31593,1242],{"class":867},[324,31595,31596],{"class":5945},"kernel_size",[324,31598,913],{"class":863},[324,31600,1183],{"class":916},[324,31602,1242],{"class":867},[324,31604,31605],{"class":5945},"padding",[324,31607,913],{"class":863},[324,31609,944],{"class":916},[324,31611,874],{"class":867},[324,31613,31614,31616,31619,31621],{"class":326,"line":2384},[324,31615,31567],{"class":916},[324,31617,31618],{"class":867},".sig",[324,31620,913],{"class":863},[324,31622,31623],{"class":867},"nn.Sigmoid()\n",[324,31625,31626],{"class":326,"line":2405},[324,31627,31628],{"class":772},"        # 定义池化\n",[324,31630,31631,31633,31636,31638,31641,31643,31645,31647,31649,31652,31654,31656],{"class":326,"line":2410},[324,31632,31567],{"class":916},[324,31634,31635],{"class":867},".s2",[324,31637,913],{"class":863},[324,31639,31640],{"class":867},"nn.AvgPool2d(",[324,31642,31596],{"class":5945},[324,31644,913],{"class":863},[324,31646,944],{"class":916},[324,31648,1242],{"class":867},[324,31650,31651],{"class":5945},"stride",[324,31653,913],{"class":863},[324,31655,944],{"class":916},[324,31657,874],{"class":867},[324,31659,31660,31662,31665,31667,31669,31671,31673,31675,31677,31679,31681,31683,31685,31687,31689,31691],{"class":326,"line":2424},[324,31661,31567],{"class":916},[324,31663,31664],{"class":867},".c3",[324,31666,913],{"class":863},[324,31668,31575],{"class":867},[324,31670,31578],{"class":5945},[324,31672,913],{"class":863},[324,31674,1208],{"class":916},[324,31676,1242],{"class":867},[324,31678,31587],{"class":5945},[324,31680,913],{"class":863},[324,31682,1465],{"class":916},[324,31684,1242],{"class":867},[324,31686,31596],{"class":5945},[324,31688,913],{"class":863},[324,31690,1183],{"class":916},[324,31692,874],{"class":867},[324,31694,31695,31697,31700,31702,31704,31706,31708,31710,31712,31714,31716,31718],{"class":326,"line":2429},[324,31696,31567],{"class":916},[324,31698,31699],{"class":867},".s4",[324,31701,913],{"class":863},[324,31703,31640],{"class":867},[324,31705,31596],{"class":5945},[324,31707,913],{"class":863},[324,31709,944],{"class":916},[324,31711,1242],{"class":867},[324,31713,31651],{"class":5945},[324,31715,913],{"class":863},[324,31717,944],{"class":916},[324,31719,874],{"class":867},[324,31721,31722],{"class":326,"line":2458},[324,31723,31724],{"class":772},"        # 定义平展层\n",[324,31726,31727,31729,31732,31734],{"class":326,"line":2463},[324,31728,31567],{"class":916},[324,31730,31731],{"class":867},".flatten",[324,31733,913],{"class":863},[324,31735,31736],{"class":867},"nn.Flatten()\n",[324,31738,31739],{"class":326,"line":2480},[324,31740,31741],{"class":772},"        # 定义全连接层\n",[324,31743,31744,31746,31749,31751,31754,31756,31758,31760],{"class":326,"line":2485},[324,31745,31567],{"class":916},[324,31747,31748],{"class":867},".f5",[324,31750,913],{"class":863},[324,31752,31753],{"class":867},"nn.Linear(",[324,31755,4716],{"class":916},[324,31757,1242],{"class":867},[324,31759,1681],{"class":916},[324,31761,874],{"class":867},[324,31763,31764,31766,31769,31771,31773,31775,31777,31779],{"class":326,"line":2490},[324,31765,31567],{"class":916},[324,31767,31768],{"class":867},".f6",[324,31770,913],{"class":863},[324,31772,31753],{"class":867},[324,31774,1681],{"class":916},[324,31776,1242],{"class":867},[324,31778,1575],{"class":916},[324,31780,874],{"class":867},[324,31782,31783,31785,31788,31790,31792,31794,31796,31798],{"class":326,"line":2495},[324,31784,31567],{"class":916},[324,31786,31787],{"class":867},".f7",[324,31789,913],{"class":863},[324,31791,31753],{"class":867},[324,31793,1575],{"class":916},[324,31795,1242],{"class":867},[324,31797,1310],{"class":916},[324,31799,874],{"class":867},[324,31801,31802],{"class":326,"line":2509},[324,31803,488],{"emptyLinePlaceholder":487},[324,31805,31806],{"class":326,"line":2514},[324,31807,31808],{"class":772},"    # 写工具->写前向传播\n",[324,31810,31811,31813,31816],{"class":326,"line":3306},[324,31812,31523],{"class":863},[324,31814,31815],{"class":734}," forward",[324,31817,31818],{"class":867},"(self,x):\n",[324,31820,31821,31824,31826,31828,31831,31833],{"class":326,"line":3320},[324,31822,31823],{"class":867},"        x",[324,31825,913],{"class":863},[324,31827,31545],{"class":916},[324,31829,31830],{"class":867},".sig(",[324,31832,31545],{"class":916},[324,31834,31835],{"class":867},".c1(x))\n",[324,31837,31838,31840,31842,31844],{"class":326,"line":3328},[324,31839,31823],{"class":867},[324,31841,913],{"class":863},[324,31843,31545],{"class":916},[324,31845,31846],{"class":867},".s2(x)\n",[324,31848,31849,31851,31853,31855,31857,31859],{"class":326,"line":3333},[324,31850,31823],{"class":867},[324,31852,913],{"class":863},[324,31854,31545],{"class":916},[324,31856,31830],{"class":867},[324,31858,31545],{"class":916},[324,31860,31861],{"class":867},".c3(x))\n",[324,31863,31864,31866,31868,31870],{"class":326,"line":3339},[324,31865,31823],{"class":867},[324,31867,913],{"class":863},[324,31869,31545],{"class":916},[324,31871,31872],{"class":867},".s4(x)\n",[324,31874,31875,31877,31879,31881],{"class":326,"line":3345},[324,31876,31823],{"class":867},[324,31878,913],{"class":863},[324,31880,31545],{"class":916},[324,31882,31883],{"class":867},".flatten(x)\n",[324,31885,31886,31888,31890,31892,31894,31896],{"class":326,"line":3350},[324,31887,31823],{"class":867},[324,31889,913],{"class":863},[324,31891,31545],{"class":916},[324,31893,31830],{"class":867},[324,31895,31545],{"class":916},[324,31897,31898],{"class":867},".f5(x))\n",[324,31900,31901,31903,31905,31907,31909,31911],{"class":326,"line":8677},[324,31902,31823],{"class":867},[324,31904,913],{"class":863},[324,31906,31545],{"class":916},[324,31908,31830],{"class":867},[324,31910,31545],{"class":916},[324,31912,31913],{"class":867},".f6(x))\n",[324,31915,31916,31918,31920,31922],{"class":326,"line":8701},[324,31917,31823],{"class":867},[324,31919,913],{"class":863},[324,31921,31545],{"class":916},[324,31923,31924],{"class":867},".f7(x)\n",[324,31926,31927,31929],{"class":326,"line":8706},[324,31928,15481],{"class":863},[324,31930,31931],{"class":867}," x\n",[324,31933,31934],{"class":326,"line":8712},[324,31935,488],{"emptyLinePlaceholder":487},[324,31937,31938,31940,31943,31945,31948],{"class":326,"line":8739},[324,31939,2262],{"class":863},[324,31941,31942],{"class":916}," __name__",[324,31944,3678],{"class":863},[324,31946,31947],{"class":738},"\"__main__\"",[324,31949,4468],{"class":867},[324,31951,31952],{"class":326,"line":8744},[324,31953,31954],{"class":772},"    # 判断是否有cuda是否激活,有GPU会返回cuda\n",[324,31956,31957,31960,31962,31964,31967,31969,31972,31974,31976],{"class":326,"line":8750},[324,31958,31959],{"class":867},"    device",[324,31961,913],{"class":863},[324,31963,31173],{"class":867},[324,31965,31966],{"class":738},"\"cuda\"",[324,31968,2435],{"class":863},[324,31970,31971],{"class":867}," torch.cuda.is_available() ",[324,31973,2432],{"class":863},[324,31975,31198],{"class":738},[324,31977,874],{"class":867},[324,31979,31980],{"class":326,"line":8762},[324,31981,31982],{"class":772},"    # 如果就是想指定用cpu用下方代码:\n",[324,31984,31985],{"class":326,"line":8774},[324,31986,31987],{"class":772},"    # device=\"cpu\"\n",[324,31989,31990],{"class":326,"line":8786},[324,31991,31992],{"class":772},"    # print(device)\n",[324,31994,31995],{"class":326,"line":10445},[324,31996,488],{"emptyLinePlaceholder":487},[324,31998,31999],{"class":326,"line":10470},[324,32000,32001],{"class":772},"    # 实例化模型\n",[324,32003,32004],{"class":326,"line":10493},[324,32005,32006],{"class":772},"    # 将模型放到设备中去运行\n",[324,32008,32009,32012,32014],{"class":326,"line":10517},[324,32010,32011],{"class":867},"    model",[324,32013,913],{"class":863},[324,32015,32016],{"class":867},"LeNet().to(device)\n",[324,32018,32019,32022,32025,32027,32029,32031,32033,32035],{"class":326,"line":10522},[324,32020,32021],{"class":916},"    print",[324,32023,32024],{"class":867},"(summary(model,(",[324,32026,1082],{"class":916},[324,32028,1242],{"class":867},[324,32030,1765],{"class":916},[324,32032,1242],{"class":867},[324,32034,1765],{"class":916},[324,32036,32037],{"class":867},")))\n",[19,32039,32040],{},[48,32041],{"alt":50,"src":32042},"\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",[19,32044,32045],{},"summary这个包就是用来展示神经网络的计算过程，展示参数的变化",[192,32047,32048],{"start":203},[195,32049,32050],{},"训练",[19,32052,32053],{},"训练和测试部分的代码作为模板，可以移植到其他模型使用",[19,32055,32056],{},"在训练之前可以将数据展示看一下",[316,32058,32060],{"className":31100,"code":32059,"language":31102,"meta":50,"style":50},"# 建立画图的函数，用于展示数据\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",[269,32061,32062,32067,32072,32084,32096,32109,32114,32126,32131,32143,32148,32160,32164,32168,32189,32201,32206,32227,32238,32242,32247,32265,32276,32281,32292,32297,32308,32312,32317,32332,32345,32350,32355,32368,32381,32394,32399,32403,32408,32428,32445,32465,32478,32491,32501,32516],{"__ignoreMap":50},[324,32063,32064],{"class":326,"line":327},[324,32065,32066],{"class":772},"# 建立画图的函数，用于展示数据\n",[324,32068,32069],{"class":326,"line":203},[324,32070,32071],{"class":772},"# torchvision中包含很多内置的数据集\n",[324,32073,32074,32076,32079,32081],{"class":326,"line":338},[324,32075,31459],{"class":863},[324,32077,32078],{"class":867}," sklearn.externals.array_api_compat.torch ",[324,32080,31114],{"class":863},[324,32082,32083],{"class":867}," squeeze\n",[324,32085,32086,32088,32091,32093],{"class":326,"line":344},[324,32087,31459],{"class":863},[324,32089,32090],{"class":867}," torchvision.datasets ",[324,32092,31114],{"class":863},[324,32094,32095],{"class":867}," FashionMNIST\n",[324,32097,32098,32100,32103,32106],{"class":326,"line":484},[324,32099,31114],{"class":863},[324,32101,32102],{"class":867}," numpy ",[324,32104,32105],{"class":863},"as",[324,32107,32108],{"class":867}," np\n",[324,32110,32111],{"class":326,"line":491},[324,32112,32113],{"class":772},"# 引入处理数据集的包\n",[324,32115,32116,32118,32121,32123],{"class":326,"line":496},[324,32117,31459],{"class":863},[324,32119,32120],{"class":867}," torchvision ",[324,32122,31114],{"class":863},[324,32124,32125],{"class":867}," transforms\n",[324,32127,32128],{"class":326,"line":502},[324,32129,32130],{"class":772},"# 从torch库中引入数据处理的包\n",[324,32132,32133,32135,32138,32140],{"class":326,"line":508},[324,32134,31114],{"class":863},[324,32136,32137],{"class":867}," torch.utils.data ",[324,32139,32105],{"class":863},[324,32141,32142],{"class":867}," Data\n",[324,32144,32145],{"class":326,"line":514},[324,32146,32147],{"class":772},"# 导入画图的库\n",[324,32149,32150,32152,32155,32157],{"class":326,"line":2343},[324,32151,31114],{"class":863},[324,32153,32154],{"class":867}," matplotlib.pyplot ",[324,32156,32105],{"class":863},[324,32158,32159],{"class":867}," plt\n",[324,32161,32162],{"class":326,"line":2348},[324,32163,488],{"emptyLinePlaceholder":487},[324,32165,32166],{"class":326,"line":2354},[324,32167,488],{"emptyLinePlaceholder":487},[324,32169,32170,32173,32175,32178,32181,32183,32186],{"class":326,"line":2359},[324,32171,32172],{"class":867},"train_data",[324,32174,913],{"class":863},[324,32176,32177],{"class":867},"FashionMNIST(",[324,32179,32180],{"class":5945},"root",[324,32182,913],{"class":863},[324,32184,32185],{"class":738},"'.\u002Fdata'",[324,32187,32188],{"class":867},",\n",[324,32190,32191,32194,32196,32199],{"class":326,"line":2373},[324,32192,32193],{"class":5945},"                        train",[324,32195,913],{"class":863},[324,32197,32198],{"class":916},"True",[324,32200,32188],{"class":867},[324,32202,32203],{"class":326,"line":2378},[324,32204,32205],{"class":772},"                        # 将数据大小变为224大小,并转换为张量的形式,方便模型的应用\n",[324,32207,32208,32211,32213,32216,32219,32221,32224],{"class":326,"line":2384},[324,32209,32210],{"class":5945},"                        transform",[324,32212,913],{"class":863},[324,32214,32215],{"class":867},"transforms.Compose([transforms.Resize(",[324,32217,32218],{"class":5945},"size",[324,32220,913],{"class":863},[324,32222,32223],{"class":916},"224",[324,32225,32226],{"class":867},"),transforms.ToTensor()]),\n",[324,32228,32229,32232,32234,32236],{"class":326,"line":2405},[324,32230,32231],{"class":5945},"                        download",[324,32233,913],{"class":863},[324,32235,32198],{"class":916},[324,32237,874],{"class":867},[324,32239,32240],{"class":326,"line":2410},[324,32241,488],{"emptyLinePlaceholder":487},[324,32243,32244],{"class":326,"line":2424},[324,32245,32246],{"class":772},"# 处理数据--->将数据引入进来,将数据进行打乱,成捆,然后规定进程\n",[324,32248,32249,32252,32254,32257,32260,32262],{"class":326,"line":2429},[324,32250,32251],{"class":867},"train_loader",[324,32253,913],{"class":863},[324,32255,32256],{"class":867},"Data.DataLoader(",[324,32258,32259],{"class":5945},"dataset",[324,32261,913],{"class":863},[324,32263,32264],{"class":867},"train_data,\n",[324,32266,32267,32270,32272,32274],{"class":326,"line":2458},[324,32268,32269],{"class":5945},"                             batch_size",[324,32271,913],{"class":863},[324,32273,1068],{"class":916},[324,32275,32188],{"class":867},[324,32277,32278],{"class":326,"line":2463},[324,32279,32280],{"class":772},"                             # 数据是否打乱\n",[324,32282,32283,32286,32288,32290],{"class":326,"line":2480},[324,32284,32285],{"class":5945},"                             shuffle",[324,32287,913],{"class":863},[324,32289,32198],{"class":916},[324,32291,32188],{"class":867},[324,32293,32294],{"class":326,"line":2485},[324,32295,32296],{"class":772},"                             # 规定加载数据的进程\n",[324,32298,32299,32302,32304,32306],{"class":326,"line":2490},[324,32300,32301],{"class":5945},"                             num_workers",[324,32303,913],{"class":863},[324,32305,1056],{"class":916},[324,32307,874],{"class":867},[324,32309,32310],{"class":326,"line":2495},[324,32311,488],{"emptyLinePlaceholder":487},[324,32313,32314],{"class":326,"line":2509},[324,32315,32316],{"class":772},"# 获得一个batch的数据\n",[324,32318,32319,32321,32324,32326,32329],{"class":326,"line":2514},[324,32320,3754],{"class":863},[324,32322,32323],{"class":867}," step,(b_x,b_y) ",[324,32325,26767],{"class":863},[324,32327,32328],{"class":916}," enumerate",[324,32330,32331],{"class":867},"(train_loader):\n",[324,32333,32334,32336,32339,32341,32343],{"class":326,"line":3306},[324,32335,3830],{"class":863},[324,32337,32338],{"class":867}," step ",[324,32340,1824],{"class":863},[324,32342,4822],{"class":916},[324,32344,4468],{"class":867},[324,32346,32347],{"class":326,"line":3320},[324,32348,32349],{"class":863},"        break\n",[324,32351,32352],{"class":326,"line":3328},[324,32353,32354],{"class":772},"# squeeze()这个函数是去除张量中所有大小为1的维度\n",[324,32356,32357,32360,32362,32365],{"class":326,"line":3333},[324,32358,32359],{"class":867},"batch_x",[324,32361,913],{"class":863},[324,32363,32364],{"class":867},"b_x.squeeze().numpy()  ",[324,32366,32367],{"class":772},"#将四维张量移除所有维度为1的维度,并转换成numpy数组\n",[324,32369,32370,32373,32375,32378],{"class":326,"line":3339},[324,32371,32372],{"class":867},"batch_y",[324,32374,913],{"class":863},[324,32376,32377],{"class":867},"b_y.numpy()   ",[324,32379,32380],{"class":772},"#将张量转换成功numpy数组\n",[324,32382,32383,32386,32388,32391],{"class":326,"line":3345},[324,32384,32385],{"class":867},"class_label",[324,32387,913],{"class":863},[324,32389,32390],{"class":867},"train_data.classes  ",[324,32392,32393],{"class":772},"#训练集标签\n",[324,32395,32396],{"class":326,"line":3350},[324,32397,32398],{"class":772},"# print(class_label)\n",[324,32400,32401],{"class":326,"line":8677},[324,32402,488],{"emptyLinePlaceholder":487},[324,32404,32405],{"class":326,"line":8701},[324,32406,32407],{"class":772},"# 可视化一个batch的图像\n",[324,32409,32410,32413,32416,32418,32420,32422,32424,32426],{"class":326,"line":8706},[324,32411,32412],{"class":867},"plt.figure(",[324,32414,32415],{"class":5945},"figsize",[324,32417,913],{"class":863},[324,32419,868],{"class":867},[324,32421,1362],{"class":916},[324,32423,1242],{"class":867},[324,32425,1183],{"class":916},[324,32427,31219],{"class":867},[324,32429,32430,32432,32435,32437,32440,32442],{"class":326,"line":8712},[324,32431,3754],{"class":863},[324,32433,32434],{"class":867}," ii ",[324,32436,26767],{"class":863},[324,32438,32439],{"class":867}," np.arange(",[324,32441,8087],{"class":916},[324,32443,32444],{"class":867},"(batch_y)):\n",[324,32446,32447,32450,32452,32454,32456,32459,32461,32463],{"class":326,"line":8739},[324,32448,32449],{"class":867},"    plt.subplot(",[324,32451,1157],{"class":916},[324,32453,1242],{"class":867},[324,32455,1465],{"class":916},[324,32457,32458],{"class":867},",ii ",[324,32460,1345],{"class":863},[324,32462,25842],{"class":916},[324,32464,874],{"class":867},[324,32466,32467,32470,32473,32475],{"class":326,"line":8744},[324,32468,32469],{"class":867},"    plt.imshow(batch_x[ii,:,:],",[324,32471,32472],{"class":5945},"cmap",[324,32474,913],{"class":863},[324,32476,32477],{"class":867},"plt.cm.gray)\n",[324,32479,32480,32483,32485,32487,32489],{"class":326,"line":8750},[324,32481,32482],{"class":867},"    plt.title(class_label[batch_y[ii]],",[324,32484,32218],{"class":5945},[324,32486,913],{"class":863},[324,32488,1310],{"class":916},[324,32490,874],{"class":867},[324,32492,32493,32496,32499],{"class":326,"line":8762},[324,32494,32495],{"class":867},"    plt.axis(",[324,32497,32498],{"class":738},"\"off\"",[324,32500,874],{"class":867},[324,32502,32503,32506,32509,32511,32514],{"class":326,"line":8774},[324,32504,32505],{"class":867},"    plt.subplots_adjust(",[324,32507,32508],{"class":5945},"wspace",[324,32510,913],{"class":863},[324,32512,32513],{"class":916},"0.05",[324,32515,874],{"class":867},[324,32517,32518],{"class":326,"line":8786},[324,32519,32520],{"class":867},"plt.show()\n",[19,32522,32523],{},"用matplotlib进行展示的过程可以后续再补",[19,32525,32526],{},"关于损失函数的使用：分类用交叉熵损失函数；回归用均方差损失函数",[19,32528,32529],{},"训练次数就是按照批次过整个训练集数据的次数",[19,32531,32532],{},"模型训练：",[316,32534,32536],{"className":31100,"code":32535,"language":31102,"meta":50,"style":50},"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",[269,32537,32538,32545,32552,32556,32568,32574,32585,32595,32605,32615,32625,32630,32642,32652,32656,32660,32665,32676,32689,32700,32717,32728,32767,32783,32795,32806,32811,32822,32838,32849,32860,32871,32878,32882,32887,32892,32896,32901,32911,32932,32936,32940,32945,32950,32955,32975,32979,32984,32994,32998,33003,33012,33017,33022,33027,33037,33041,33045,33050,33055,33065,33070,33080,33085,33094,33099,33108,33113,33122,33126,33131,33141,33145,33149,33154,33169,33197,33212,33216,33221,33226,33235,33240,33249,33254,33263,33268,33277,33282,33291,33296,33305,33310,33323,33328,33338,33343,33353,33359,33365,33371,33377,33388,33394,33414,33420,33431,33437,33443,33449,33455,33461,33467,33473,33493,33499,33515,33521,33535,33541,33556,33562,33571,33577,33586,33592,33598,33607,33613,33624,33630,33649,33655,33666,33672,33692,33708,33714,33728,33734,33740,33751,33757,33763,33773,33779,33790,33796,33806,33811,33817,33866,33913,33918,33924,33943,33949,33969,33975,33981,33991,33996,34002,34018,34063,34069,34075,34081,34092,34098,34104,34110,34128,34142,34151,34160,34169,34178,34184,34190,34198,34203,34209,34220,34226,34246,34252,34258,34264,34281,34287,34293,34299,34305,34311,34338,34362,34368,34374,34380,34391,34402,34408,34425,34448,34471,34477,34482,34491,34501,34507,34512,34518,34531,34537,34548,34559,34578],{"__ignoreMap":50},[324,32539,32540,32542],{"class":326,"line":327},[324,32541,31114],{"class":863},[324,32543,32544],{"class":867}," copy\n",[324,32546,32547,32549],{"class":326,"line":203},[324,32548,31114],{"class":863},[324,32550,32551],{"class":867}," time\n",[324,32553,32554],{"class":326,"line":338},[324,32555,488],{"emptyLinePlaceholder":487},[324,32557,32558,32560,32563,32565],{"class":326,"line":344},[324,32559,31114],{"class":863},[324,32561,32562],{"class":867}," pandas ",[324,32564,32105],{"class":863},[324,32566,32567],{"class":867}," pd\n",[324,32569,32570,32572],{"class":326,"line":484},[324,32571,31114],{"class":863},[324,32573,31117],{"class":867},[324,32575,32576,32578,32580,32582],{"class":326,"line":491},[324,32577,31459],{"class":863},[324,32579,32137],{"class":867},[324,32581,31114],{"class":863},[324,32583,32584],{"class":867}," Dataset\n",[324,32586,32587,32589,32591,32593],{"class":326,"line":496},[324,32588,31459],{"class":863},[324,32590,32090],{"class":867},[324,32592,31114],{"class":863},[324,32594,32095],{"class":867},[324,32596,32597,32599,32601,32603],{"class":326,"line":502},[324,32598,31459],{"class":863},[324,32600,32120],{"class":867},[324,32602,31114],{"class":863},[324,32604,32125],{"class":867},[324,32606,32607,32609,32611,32613],{"class":326,"line":508},[324,32608,31114],{"class":863},[324,32610,32137],{"class":867},[324,32612,32105],{"class":863},[324,32614,32142],{"class":867},[324,32616,32617,32619,32621,32623],{"class":326,"line":514},[324,32618,31114],{"class":863},[324,32620,32154],{"class":867},[324,32622,32105],{"class":863},[324,32624,32159],{"class":867},[324,32626,32627],{"class":326,"line":2343},[324,32628,32629],{"class":772},"# 导入模型\n",[324,32631,32632,32634,32637,32639],{"class":326,"line":2348},[324,32633,31459],{"class":863},[324,32635,32636],{"class":867}," model ",[324,32638,31114],{"class":863},[324,32640,32641],{"class":867}," LeNet\n",[324,32643,32644,32646,32648,32650],{"class":326,"line":2354},[324,32645,31459],{"class":863},[324,32647,31462],{"class":867},[324,32649,31114],{"class":863},[324,32651,31467],{"class":867},[324,32653,32654],{"class":326,"line":2359},[324,32655,488],{"emptyLinePlaceholder":487},[324,32657,32658],{"class":326,"line":2373},[324,32659,488],{"emptyLinePlaceholder":487},[324,32661,32662],{"class":326,"line":2378},[324,32663,32664],{"class":772},"# 处理训练集与验证集函数--->划分数据集\n",[324,32666,32667,32670,32673],{"class":326,"line":2384},[324,32668,32669],{"class":863},"def",[324,32671,32672],{"class":734}," train_val_data_process",[324,32674,32675],{"class":867},"():\n",[324,32677,32678,32681,32683,32685,32687],{"class":326,"line":2405},[324,32679,32680],{"class":867},"    train_data",[324,32682,913],{"class":863},[324,32684,32177],{"class":867},[324,32686,32185],{"class":738},[324,32688,32188],{"class":867},[324,32690,32691,32694,32696,32698],{"class":326,"line":2410},[324,32692,32693],{"class":5945},"                            train",[324,32695,913],{"class":863},[324,32697,32198],{"class":916},[324,32699,32188],{"class":867},[324,32701,32702,32705,32707,32709,32711,32713,32715],{"class":326,"line":2424},[324,32703,32704],{"class":5945},"                            transform",[324,32706,913],{"class":863},[324,32708,32215],{"class":867},[324,32710,32218],{"class":5945},[324,32712,913],{"class":863},[324,32714,1765],{"class":916},[324,32716,32226],{"class":867},[324,32718,32719,32722,32724,32726],{"class":326,"line":2429},[324,32720,32721],{"class":5945},"                            download",[324,32723,913],{"class":863},[324,32725,32198],{"class":916},[324,32727,874],{"class":867},[324,32729,32730,32733,32735,32738,32741,32743,32746,32748,32750,32753,32755,32757,32760,32762,32764],{"class":326,"line":2458},[324,32731,32732],{"class":867},"    train_data,val_data",[324,32734,913],{"class":863},[324,32736,32737],{"class":867},"Data.random_split(train_data,[",[324,32739,32740],{"class":916},"round",[324,32742,868],{"class":867},[324,32744,32745],{"class":916},"0.8",[324,32747,1319],{"class":863},[324,32749,8087],{"class":916},[324,32751,32752],{"class":867},"(train_data)),",[324,32754,32740],{"class":916},[324,32756,868],{"class":867},[324,32758,32759],{"class":916},"0.2",[324,32761,1319],{"class":863},[324,32763,8087],{"class":916},[324,32765,32766],{"class":867},"(train_data))])\n",[324,32768,32769,32772,32774,32777,32779,32781],{"class":326,"line":2463},[324,32770,32771],{"class":867},"    train_dataloader ",[324,32773,913],{"class":863},[324,32775,32776],{"class":867}," Data.DataLoader(",[324,32778,32259],{"class":5945},[324,32780,913],{"class":863},[324,32782,32264],{"class":867},[324,32784,32785,32788,32790,32793],{"class":326,"line":2480},[324,32786,32787],{"class":5945},"                                       batch_size",[324,32789,913],{"class":863},[324,32791,32792],{"class":916},"128",[324,32794,32188],{"class":867},[324,32796,32797,32800,32802,32804],{"class":326,"line":2485},[324,32798,32799],{"class":5945},"                                       shuffle",[324,32801,913],{"class":863},[324,32803,32198],{"class":916},[324,32805,32188],{"class":867},[324,32807,32808],{"class":326,"line":2490},[324,32809,32810],{"class":772},"                                       # 规定8个进程\n",[324,32812,32813,32816,32818,32820],{"class":326,"line":2495},[324,32814,32815],{"class":5945},"                                       num_workers",[324,32817,913],{"class":863},[324,32819,1259],{"class":916},[324,32821,874],{"class":867},[324,32823,32824,32827,32829,32831,32833,32835],{"class":326,"line":2509},[324,32825,32826],{"class":867},"    val_dataloader",[324,32828,913],{"class":863},[324,32830,32256],{"class":867},[324,32832,32259],{"class":5945},[324,32834,913],{"class":863},[324,32836,32837],{"class":867},"val_data,\n",[324,32839,32840,32843,32845,32847],{"class":326,"line":2514},[324,32841,32842],{"class":5945},"                                   batch_size",[324,32844,913],{"class":863},[324,32846,32792],{"class":916},[324,32848,32188],{"class":867},[324,32850,32851,32854,32856,32858],{"class":326,"line":3306},[324,32852,32853],{"class":5945},"                                   shuffle",[324,32855,913],{"class":863},[324,32857,32198],{"class":916},[324,32859,32188],{"class":867},[324,32861,32862,32865,32867,32869],{"class":326,"line":3320},[324,32863,32864],{"class":5945},"                                   num_workers",[324,32866,913],{"class":863},[324,32868,1259],{"class":916},[324,32870,874],{"class":867},[324,32872,32873,32875],{"class":326,"line":3328},[324,32874,4819],{"class":863},[324,32876,32877],{"class":867}," train_dataloader,val_dataloader\n",[324,32879,32880],{"class":326,"line":3333},[324,32881,488],{"emptyLinePlaceholder":487},[324,32883,32884],{"class":326,"line":3339},[324,32885,32886],{"class":772},"# 验证是否出错\n",[324,32888,32889],{"class":326,"line":3345},[324,32890,32891],{"class":772},"# train_val_data_process()\n",[324,32893,32894],{"class":326,"line":3350},[324,32895,488],{"emptyLinePlaceholder":487},[324,32897,32898],{"class":326,"line":8677},[324,32899,32900],{"class":772},"# 定义模型训练函数\n",[324,32902,32903,32905,32908],{"class":326,"line":8701},[324,32904,32669],{"class":863},[324,32906,32907],{"class":734}," train_model_process",[324,32909,32910],{"class":867},"(model,train_dataloader,val_dataloader,num_epochs):\n",[324,32912,32913,32915,32917,32919,32921,32923,32925,32927,32930],{"class":326,"line":8706},[324,32914,31959],{"class":867},[324,32916,913],{"class":863},[324,32918,31173],{"class":867},[324,32920,31966],{"class":738},[324,32922,2435],{"class":863},[324,32924,31971],{"class":867},[324,32926,2432],{"class":863},[324,32928,32929],{"class":738}," 'cpu'",[324,32931,874],{"class":867},[324,32933,32934],{"class":326,"line":8712},[324,32935,488],{"emptyLinePlaceholder":487},[324,32937,32938],{"class":326,"line":8739},[324,32939,488],{"emptyLinePlaceholder":487},[324,32941,32942],{"class":326,"line":8744},[324,32943,32944],{"class":772},"    # 定义优化器\n",[324,32946,32947],{"class":326,"line":8750},[324,32948,32949],{"class":772},"    # model.parameters()表示把模型里所有可训练的参数（权重、偏置）传给优化器\n",[324,32951,32952],{"class":326,"line":8762},[324,32953,32954],{"class":772},"    # lr为学习率\n",[324,32956,32957,32960,32962,32965,32968,32970,32973],{"class":326,"line":8774},[324,32958,32959],{"class":867},"    optimizer",[324,32961,913],{"class":863},[324,32963,32964],{"class":867},"torch.optim.Adam(model.parameters(),",[324,32966,32967],{"class":5945},"lr",[324,32969,913],{"class":863},[324,32971,32972],{"class":916},"0.001",[324,32974,874],{"class":867},[324,32976,32977],{"class":326,"line":8786},[324,32978,488],{"emptyLinePlaceholder":487},[324,32980,32981],{"class":326,"line":10445},[324,32982,32983],{"class":772},"    # 定义损失函数使用交叉熵损失函数\n",[324,32985,32986,32989,32991],{"class":326,"line":10470},[324,32987,32988],{"class":867},"    criterion",[324,32990,913],{"class":863},[324,32992,32993],{"class":867},"nn.CrossEntropyLoss()\n",[324,32995,32996],{"class":326,"line":10493},[324,32997,488],{"emptyLinePlaceholder":487},[324,32999,33000],{"class":326,"line":10517},[324,33001,33002],{"class":772},"    # 将模型放到GPU中进行训练\n",[324,33004,33005,33007,33009],{"class":326,"line":10522},[324,33006,32011],{"class":867},[324,33008,913],{"class":863},[324,33010,33011],{"class":867},"model.to(device)\n",[324,33013,33014],{"class":326,"line":10527},[324,33015,33016],{"class":772},"    # 复制当前模型的参数\n",[324,33018,33019],{"class":326,"line":10532},[324,33020,33021],{"class":772},"    # 把model（PyTorch的神经网络）的当前参数（权重 \u002F 偏置等）完整复制一份，放到best_model_wts变量里\n",[324,33023,33024],{"class":326,"line":10541},[324,33025,33026],{"class":772},"    # ，保证这份拷贝不会随着后续训练改变 —— 常用于保存“到目前为止表现最好的模型参数”\n",[324,33028,33029,33032,33034],{"class":326,"line":10546},[324,33030,33031],{"class":867},"    best_model_wts",[324,33033,913],{"class":863},[324,33035,33036],{"class":867},"copy.deepcopy(model.state_dict())\n",[324,33038,33039],{"class":326,"line":10552},[324,33040,488],{"emptyLinePlaceholder":487},[324,33042,33043],{"class":326,"line":10573},[324,33044,488],{"emptyLinePlaceholder":487},[324,33046,33047],{"class":326,"line":10579},[324,33048,33049],{"class":772},"    # 初始化参数\n",[324,33051,33052],{"class":326,"line":10593},[324,33053,33054],{"class":772},"    # 最高准确度\n",[324,33056,33057,33060,33062],{"class":326,"line":10599},[324,33058,33059],{"class":867},"    best_acc",[324,33061,913],{"class":863},[324,33063,33064],{"class":916},"0.0\n",[324,33066,33067],{"class":326,"line":10626},[324,33068,33069],{"class":772},"    # 训练集损失列表\n",[324,33071,33072,33075,33077],{"class":326,"line":10635},[324,33073,33074],{"class":867},"    train_loss_all",[324,33076,913],{"class":863},[324,33078,33079],{"class":867},"[]\n",[324,33081,33082],{"class":326,"line":10641},[324,33083,33084],{"class":772},"    # 验证集函数列表\n",[324,33086,33087,33090,33092],{"class":326,"line":10649},[324,33088,33089],{"class":867},"    val_loss_all",[324,33091,913],{"class":863},[324,33093,33079],{"class":867},[324,33095,33096],{"class":326,"line":10654},[324,33097,33098],{"class":772},"    # 训练集准确度列表\n",[324,33100,33101,33104,33106],{"class":326,"line":17333},[324,33102,33103],{"class":867},"    train_acc_all",[324,33105,913],{"class":863},[324,33107,33079],{"class":867},[324,33109,33110],{"class":326,"line":17339},[324,33111,33112],{"class":772},"    # 验证集准确度列表\n",[324,33114,33115,33118,33120],{"class":326,"line":17362},[324,33116,33117],{"class":867},"    val_acc_all",[324,33119,913],{"class":863},[324,33121,33079],{"class":867},[324,33123,33124],{"class":326,"line":17368},[324,33125,488],{"emptyLinePlaceholder":487},[324,33127,33128],{"class":326,"line":17391},[324,33129,33130],{"class":772},"    # 保存当前时间--->方便看每轮训练的时间\n",[324,33132,33133,33136,33138],{"class":326,"line":17405},[324,33134,33135],{"class":867},"    since",[324,33137,913],{"class":863},[324,33139,33140],{"class":867},"time.time()\n",[324,33142,33143],{"class":326,"line":17425},[324,33144,488],{"emptyLinePlaceholder":487},[324,33146,33147],{"class":326,"line":17431},[324,33148,488],{"emptyLinePlaceholder":487},[324,33150,33151],{"class":326,"line":17442},[324,33152,33153],{"class":772},"    # 准备工作完成--->开始训练模型\n",[324,33155,33156,33158,33161,33163,33166],{"class":326,"line":17465},[324,33157,3930],{"class":863},[324,33159,33160],{"class":867}," epoch ",[324,33162,26767],{"class":863},[324,33164,33165],{"class":916}," range",[324,33167,33168],{"class":867},"(num_epochs):\n",[324,33170,33171,33174,33176,33179,33182,33184,33186,33188,33191,33193,33195],{"class":326,"line":17487},[324,33172,33173],{"class":916},"        print",[324,33175,868],{"class":867},[324,33177,33178],{"class":738},"\"Epoch ",[324,33180,33181],{"class":916},"{}",[324,33183,1448],{"class":738},[324,33185,33181],{"class":916},[324,33187,1115],{"class":738},[324,33189,33190],{"class":867},".format(epoch,num_epochs",[324,33192,1396],{"class":863},[324,33194,1082],{"class":916},[324,33196,31219],{"class":867},[324,33198,33199,33201,33203,33206,33208,33210],{"class":326,"line":17492},[324,33200,33173],{"class":916},[324,33202,868],{"class":867},[324,33204,33205],{"class":738},"\"-\"",[324,33207,1319],{"class":863},[324,33209,1310],{"class":916},[324,33211,874],{"class":867},[324,33213,33214],{"class":326,"line":17498},[324,33215,488],{"emptyLinePlaceholder":487},[324,33217,33218],{"class":326,"line":17512},[324,33219,33220],{"class":772},"        # 初始化参数\n",[324,33222,33223],{"class":326,"line":17525},[324,33224,33225],{"class":772},"        # 训练集损失函数\n",[324,33227,33228,33231,33233],{"class":326,"line":17530},[324,33229,33230],{"class":867},"        train_loss",[324,33232,913],{"class":863},[324,33234,33064],{"class":916},[324,33236,33237],{"class":326,"line":17544},[324,33238,33239],{"class":772},"        # 训练集准确度\n",[324,33241,33242,33245,33247],{"class":326,"line":17549},[324,33243,33244],{"class":867},"        train_corrects",[324,33246,913],{"class":863},[324,33248,3814],{"class":916},[324,33250,33251],{"class":326,"line":17555},[324,33252,33253],{"class":772},"        # 验证集损失函数\n",[324,33255,33256,33259,33261],{"class":326,"line":17560},[324,33257,33258],{"class":867},"        val_loss",[324,33260,913],{"class":863},[324,33262,33064],{"class":916},[324,33264,33265],{"class":326,"line":17574},[324,33266,33267],{"class":772},"        # 验证集准确度\n",[324,33269,33270,33273,33275],{"class":326,"line":17579},[324,33271,33272],{"class":867},"        val_corrects",[324,33274,913],{"class":863},[324,33276,3814],{"class":916},[324,33278,33279],{"class":326,"line":17584},[324,33280,33281],{"class":772},"        # 训练集样本数量\n",[324,33283,33284,33287,33289],{"class":326,"line":17598},[324,33285,33286],{"class":867},"        train_num",[324,33288,913],{"class":863},[324,33290,3814],{"class":916},[324,33292,33293],{"class":326,"line":17610},[324,33294,33295],{"class":772},"        # 验证集样本数量\n",[324,33297,33298,33301,33303],{"class":326,"line":17615},[324,33299,33300],{"class":867},"        val_num",[324,33302,913],{"class":863},[324,33304,3814],{"class":916},[324,33306,33307],{"class":326,"line":17628},[324,33308,33309],{"class":772},"        # 将数据放到设备,并开始训练\n",[324,33311,33312,33314,33316,33318,33320],{"class":326,"line":17633},[324,33313,4132],{"class":863},[324,33315,32323],{"class":867},[324,33317,26767],{"class":863},[324,33319,32328],{"class":916},[324,33321,33322],{"class":867},"(train_dataloader):\n",[324,33324,33325],{"class":326,"line":17638},[324,33326,33327],{"class":772},"            # 将特征放入到训练设备\n",[324,33329,33330,33333,33335],{"class":326,"line":17643},[324,33331,33332],{"class":867},"            b_x",[324,33334,913],{"class":863},[324,33336,33337],{"class":867},"b_x.to(device)\n",[324,33339,33340],{"class":326,"line":17656},[324,33341,33342],{"class":772},"            # 将标签放入到训练设备当中\n",[324,33344,33345,33348,33350],{"class":326,"line":17661},[324,33346,33347],{"class":867},"            b_y",[324,33349,913],{"class":863},[324,33351,33352],{"class":867},"b_y.to(device)\n",[324,33354,33356],{"class":326,"line":33355},98,[324,33357,33358],{"class":772},"            # 设置模型为训练模式\n",[324,33360,33362],{"class":326,"line":33361},99,[324,33363,33364],{"class":867},"            model.train()\n",[324,33366,33368],{"class":326,"line":33367},100,[324,33369,33370],{"class":772},"            # 将数据放到模型当中,开始前向传播\n",[324,33372,33374],{"class":326,"line":33373},101,[324,33375,33376],{"class":772},"            # 前向传播过程,输入一个batch,输出为一个batch中对应的预测\n",[324,33378,33380,33383,33385],{"class":326,"line":33379},102,[324,33381,33382],{"class":867},"            output",[324,33384,913],{"class":863},[324,33386,33387],{"class":867},"model(b_x)\n",[324,33389,33391],{"class":326,"line":33390},103,[324,33392,33393],{"class":772},"            # 从网络输出 output 的每一行里，找出数值最大的下标（类别），作为模型预测的标签\n",[324,33395,33397,33400,33402,33405,33408,33410,33412],{"class":326,"line":33396},104,[324,33398,33399],{"class":867},"            pre_lab",[324,33401,913],{"class":863},[324,33403,33404],{"class":867},"torch.argmax(output,",[324,33406,33407],{"class":5945},"dim",[324,33409,913],{"class":863},[324,33411,1082],{"class":916},[324,33413,874],{"class":867},[324,33415,33417],{"class":326,"line":33416},105,[324,33418,33419],{"class":772},"            # 计算每一个batch的损失函数\n",[324,33421,33423,33426,33428],{"class":326,"line":33422},106,[324,33424,33425],{"class":867},"            loss",[324,33427,913],{"class":863},[324,33429,33430],{"class":867},"criterion(output,b_y)\n",[324,33432,33434],{"class":326,"line":33433},107,[324,33435,33436],{"class":772},"            # 将梯度初始化为0\n",[324,33438,33440],{"class":326,"line":33439},108,[324,33441,33442],{"class":867},"            optimizer.zero_grad()\n",[324,33444,33446],{"class":326,"line":33445},109,[324,33447,33448],{"class":772},"            # 梯度置为0后再进行反向传播\n",[324,33450,33452],{"class":326,"line":33451},110,[324,33453,33454],{"class":867},"            loss.backward()\n",[324,33456,33458],{"class":326,"line":33457},111,[324,33459,33460],{"class":772},"            # 根据网络反向传播的梯度信息来更新网络的参数，以起到降低loss函数计算的作用\n",[324,33462,33464],{"class":326,"line":33463},112,[324,33465,33466],{"class":867},"            optimizer.step()\n",[324,33468,33470],{"class":326,"line":33469},113,[324,33471,33472],{"class":772},"            # loss.item()指的是batch的平均损失\n",[324,33474,33476,33479,33481,33484,33486,33489,33491],{"class":326,"line":33475},114,[324,33477,33478],{"class":867},"            train_loss",[324,33480,10206],{"class":863},[324,33482,33483],{"class":867},"loss.item()",[324,33485,1319],{"class":863},[324,33487,33488],{"class":867},"b_x.size(",[324,33490,1056],{"class":916},[324,33492,874],{"class":867},[324,33494,33496],{"class":326,"line":33495},115,[324,33497,33498],{"class":772},"            # 计算每个批次中正确预测的数量\n",[324,33500,33502,33505,33507,33510,33512],{"class":326,"line":33501},116,[324,33503,33504],{"class":867},"            train_corrects",[324,33506,10206],{"class":863},[324,33508,33509],{"class":867},"torch.sum(pre_lab",[324,33511,3678],{"class":863},[324,33513,33514],{"class":867},"b_y.data)\n",[324,33516,33518],{"class":326,"line":33517},117,[324,33519,33520],{"class":772},"            # 计算目前为止一共处理了多少样本\n",[324,33522,33524,33527,33529,33531,33533],{"class":326,"line":33523},118,[324,33525,33526],{"class":867},"            train_num",[324,33528,10206],{"class":863},[324,33530,33488],{"class":867},[324,33532,1056],{"class":916},[324,33534,874],{"class":867},[324,33536,33538],{"class":326,"line":33537},119,[324,33539,33540],{"class":772},"        # 验证数据\n",[324,33542,33544,33546,33549,33551,33553],{"class":326,"line":33543},120,[324,33545,4132],{"class":863},[324,33547,33548],{"class":867}," step ,(b_x,b_y) ",[324,33550,26767],{"class":863},[324,33552,32328],{"class":916},[324,33554,33555],{"class":867},"(val_dataloader):\n",[324,33557,33559],{"class":326,"line":33558},121,[324,33560,33561],{"class":772},"            # 将特征放到验证设备当中\n",[324,33563,33565,33567,33569],{"class":326,"line":33564},122,[324,33566,33332],{"class":867},[324,33568,913],{"class":863},[324,33570,33337],{"class":867},[324,33572,33574],{"class":326,"line":33573},123,[324,33575,33576],{"class":772},"            # 将标签放到放到训练设备当中\n",[324,33578,33580,33582,33584],{"class":326,"line":33579},124,[324,33581,33347],{"class":867},[324,33583,913],{"class":863},[324,33585,33352],{"class":867},[324,33587,33589],{"class":326,"line":33588},125,[324,33590,33591],{"class":772},"            # 开启验证模式，设置模型为评估模式\n",[324,33593,33595],{"class":326,"line":33594},126,[324,33596,33597],{"class":867},"            model.eval()\n",[324,33599,33601,33604],{"class":326,"line":33600},127,[324,33602,33603],{"class":863},"            with",[324,33605,33606],{"class":867}," torch.no_grad():\n",[324,33608,33610],{"class":326,"line":33609},128,[324,33611,33612],{"class":772},"                # 前向传播过程，输入一个batch,输出为一个batch中对应的预测\n",[324,33614,33616,33619,33621],{"class":326,"line":33615},129,[324,33617,33618],{"class":867},"                output ",[324,33620,913],{"class":863},[324,33622,33623],{"class":867}," model(b_x)\n",[324,33625,33627],{"class":326,"line":33626},130,[324,33628,33629],{"class":772},"                # 查找每一行中最大值对应的下标\n",[324,33631,33633,33636,33638,33641,33643,33645,33647],{"class":326,"line":33632},131,[324,33634,33635],{"class":867},"                pre_lab ",[324,33637,913],{"class":863},[324,33639,33640],{"class":867}," torch.argmax(output, ",[324,33642,33407],{"class":5945},[324,33644,913],{"class":863},[324,33646,1082],{"class":916},[324,33648,874],{"class":867},[324,33650,33652],{"class":326,"line":33651},132,[324,33653,33654],{"class":772},"                # 计算验证集上的当前 batch 损失\n",[324,33656,33658,33661,33663],{"class":326,"line":33657},133,[324,33659,33660],{"class":867},"                val_batch_loss ",[324,33662,913],{"class":863},[324,33664,33665],{"class":867}," criterion(output, b_y)\n",[324,33667,33669],{"class":326,"line":33668},134,[324,33670,33671],{"class":772},"                # 对损失函数进行累加（按样本数加权）\n",[324,33673,33675,33678,33680,33683,33685,33688,33690],{"class":326,"line":33674},135,[324,33676,33677],{"class":867},"                val_loss ",[324,33679,10206],{"class":863},[324,33681,33682],{"class":867}," val_batch_loss.item() ",[324,33684,1319],{"class":863},[324,33686,33687],{"class":867}," b_x.size(",[324,33689,1056],{"class":916},[324,33691,874],{"class":867},[324,33693,33695,33698,33700,33703,33705],{"class":326,"line":33694},136,[324,33696,33697],{"class":867},"                val_corrects ",[324,33699,10206],{"class":863},[324,33701,33702],{"class":867}," torch.sum(pre_lab ",[324,33704,3678],{"class":863},[324,33706,33707],{"class":867}," b_y.data)\n",[324,33709,33711],{"class":326,"line":33710},137,[324,33712,33713],{"class":772},"                # 当前用于验证的样本数量\n",[324,33715,33717,33720,33722,33724,33726],{"class":326,"line":33716},138,[324,33718,33719],{"class":867},"            val_num ",[324,33721,10206],{"class":863},[324,33723,33687],{"class":867},[324,33725,1056],{"class":916},[324,33727,874],{"class":867},[324,33729,33731],{"class":326,"line":33730},139,[324,33732,33733],{"class":772},"        # 计算并保存每一次迭代的loss值和准确率\n",[324,33735,33737],{"class":326,"line":33736},140,[324,33738,33739],{"class":772},"        # 计算并保存训练集的loss值\n",[324,33741,33743,33746,33748],{"class":326,"line":33742},141,[324,33744,33745],{"class":867},"        train_loss_all.append(train_loss",[324,33747,1448],{"class":863},[324,33749,33750],{"class":867},"train_num)\n",[324,33752,33754],{"class":326,"line":33753},142,[324,33755,33756],{"class":772},"        # 取双精度\n",[324,33758,33760],{"class":326,"line":33759},143,[324,33761,33762],{"class":772},"        # 计算并保存训练集的准确率\n",[324,33764,33766,33769,33771],{"class":326,"line":33765},144,[324,33767,33768],{"class":867},"        train_acc_all.append(train_corrects.double().item()",[324,33770,1448],{"class":863},[324,33772,33750],{"class":867},[324,33774,33776],{"class":326,"line":33775},145,[324,33777,33778],{"class":772},"        # 计算并保存验证集的loss值\n",[324,33780,33782,33785,33787],{"class":326,"line":33781},146,[324,33783,33784],{"class":867},"        val_loss_all.append(val_loss",[324,33786,1448],{"class":863},[324,33788,33789],{"class":867},"val_num)\n",[324,33791,33793],{"class":326,"line":33792},147,[324,33794,33795],{"class":772},"        # 计算并保存验证集的准确率\n",[324,33797,33799,33802,33804],{"class":326,"line":33798},148,[324,33800,33801],{"class":867},"        val_acc_all.append(val_corrects.double().item()",[324,33803,1448],{"class":863},[324,33805,33789],{"class":867},[324,33807,33809],{"class":326,"line":33808},149,[324,33810,488],{"emptyLinePlaceholder":487},[324,33812,33814],{"class":326,"line":33813},150,[324,33815,33816],{"class":772},"        # 打印训练一轮的loss值和准确率\n",[324,33818,33820,33822,33824,33826,33828,33831,33833,33836,33838,33841,33843,33845,33847,33849,33852,33854,33856,33859,33861,33863],{"class":326,"line":33819},151,[324,33821,33173],{"class":916},[324,33823,868],{"class":867},[324,33825,4321],{"class":738},[324,33827,33181],{"class":916},[324,33829,33830],{"class":738},"train loss:",[324,33832,1760],{"class":916},[324,33834,33835],{"class":863},":.4f",[324,33837,1810],{"class":916},[324,33839,33840],{"class":738}," train acc:",[324,33842,1760],{"class":916},[324,33844,33835],{"class":863},[324,33846,1810],{"class":916},[324,33848,4321],{"class":738},[324,33850,33851],{"class":867},".format(epoch,train_loss_all[",[324,33853,1396],{"class":863},[324,33855,1082],{"class":916},[324,33857,33858],{"class":867},"],train_acc_all[",[324,33860,1396],{"class":863},[324,33862,1082],{"class":916},[324,33864,33865],{"class":867},"]))\n",[324,33867,33869,33871,33873,33875,33877,33880,33882,33884,33886,33889,33891,33893,33895,33897,33900,33902,33904,33907,33909,33911],{"class":326,"line":33868},152,[324,33870,33173],{"class":916},[324,33872,868],{"class":867},[324,33874,4321],{"class":738},[324,33876,33181],{"class":916},[324,33878,33879],{"class":738},"val loss:",[324,33881,1760],{"class":916},[324,33883,33835],{"class":863},[324,33885,1810],{"class":916},[324,33887,33888],{"class":738}," val acc:",[324,33890,1760],{"class":916},[324,33892,33835],{"class":863},[324,33894,1810],{"class":916},[324,33896,4321],{"class":738},[324,33898,33899],{"class":867},".format(epoch,val_loss_all[",[324,33901,1396],{"class":863},[324,33903,1082],{"class":916},[324,33905,33906],{"class":867},"],val_acc_all[",[324,33908,1396],{"class":863},[324,33910,1082],{"class":916},[324,33912,33865],{"class":867},[324,33914,33916],{"class":326,"line":33915},153,[324,33917,488],{"emptyLinePlaceholder":487},[324,33919,33921],{"class":326,"line":33920},154,[324,33922,33923],{"class":772},"        # 判断准确度--->保存最优模型\n",[324,33925,33927,33929,33932,33934,33936,33938,33940],{"class":326,"line":33926},155,[324,33928,3226],{"class":863},[324,33930,33931],{"class":867}," val_acc_all[",[324,33933,1396],{"class":863},[324,33935,1082],{"class":916},[324,33937,1804],{"class":867},[324,33939,1824],{"class":863},[324,33941,33942],{"class":867},"best_acc:\n",[324,33944,33946],{"class":326,"line":33945},156,[324,33947,33948],{"class":772},"            # 保存当前模型准确度\n",[324,33950,33952,33955,33957,33959,33962,33964,33966],{"class":326,"line":33951},157,[324,33953,33954],{"class":867},"            best_acc:",[324,33956,907],{"class":916},[324,33958,913],{"class":863},[324,33960,33961],{"class":867},"val_acc_all[",[324,33963,1396],{"class":863},[324,33965,1082],{"class":916},[324,33967,33968],{"class":867},"]\n",[324,33970,33972],{"class":326,"line":33971},158,[324,33973,33974],{"class":772},"            # 保存当前的准确度\n",[324,33976,33978],{"class":326,"line":33977},159,[324,33979,33980],{"class":772},"            # model.state_dict()是当前模型的所有参数（权重和偏置）\n",[324,33982,33984,33987,33989],{"class":326,"line":33983},160,[324,33985,33986],{"class":867},"            best_model_wts",[324,33988,913],{"class":863},[324,33990,33036],{"class":867},[324,33992,33994],{"class":326,"line":33993},161,[324,33995,488],{"emptyLinePlaceholder":487},[324,33997,33999],{"class":326,"line":33998},162,[324,34000,34001],{"class":772},"        # 计算耗时\n",[324,34003,34005,34008,34010,34013,34015],{"class":326,"line":34004},163,[324,34006,34007],{"class":867},"        time_use",[324,34009,913],{"class":863},[324,34011,34012],{"class":867},"time.time()",[324,34014,1396],{"class":863},[324,34016,34017],{"class":867},"since\n",[324,34019,34021,34023,34025,34028,34030,34033,34035,34037,34039,34041,34043,34046,34049,34052,34054,34057,34059,34061],{"class":326,"line":34020},164,[324,34022,33173],{"class":916},[324,34024,868],{"class":867},[324,34026,34027],{"class":738},"'训练和验证耗费的时间",[324,34029,1760],{"class":916},[324,34031,34032],{"class":863},":.0f",[324,34034,1810],{"class":916},[324,34036,1408],{"class":738},[324,34038,1760],{"class":916},[324,34040,34032],{"class":863},[324,34042,1810],{"class":916},[324,34044,34045],{"class":738},"s'",[324,34047,34048],{"class":867},".format(time_use",[324,34050,34051],{"class":863},"\u002F\u002F",[324,34053,1771],{"class":916},[324,34055,34056],{"class":867},",time_use",[324,34058,1192],{"class":863},[324,34060,1771],{"class":916},[324,34062,31219],{"class":867},[324,34064,34066],{"class":326,"line":34065},165,[324,34067,34068],{"class":772},"    # 选择最优参数\n",[324,34070,34072],{"class":326,"line":34071},166,[324,34073,34074],{"class":772},"    # 加载最高准确率下的模型参数\n",[324,34076,34078],{"class":326,"line":34077},167,[324,34079,34080],{"class":772},"    # model.load_state_dict(best_model_wts)\n",[324,34082,34084,34087,34090],{"class":326,"line":34083},168,[324,34085,34086],{"class":867},"    torch.save(model.state_dict(best_model_wts), ",[324,34088,34089],{"class":738},"'.\u002Fbest_model.pth'",[324,34091,874],{"class":867},[324,34093,34095],{"class":326,"line":34094},169,[324,34096,34097],{"class":772},"    # 或者写成\n",[324,34099,34101],{"class":326,"line":34100},170,[324,34102,34103],{"class":772},"    # torch.save(best_model_wts,'.\u002Fbest_model.pth')\n",[324,34105,34107],{"class":326,"line":34106},171,[324,34108,34109],{"class":772},"    # 保存训练过程,可以使用pandas来进行保存,里边有个DataFrame()可以像列表一样保存数据\n",[324,34111,34113,34116,34118,34121,34124,34126],{"class":326,"line":34112},172,[324,34114,34115],{"class":867},"    train_process",[324,34117,913],{"class":863},[324,34119,34120],{"class":867},"pd.DataFrame(",[324,34122,34123],{"class":5945},"data",[324,34125,913],{"class":863},[324,34127,2277],{"class":867},[324,34129,34131,34134,34136,34139],{"class":326,"line":34130},173,[324,34132,34133],{"class":738},"        \"epoch\"",[324,34135,1723],{"class":867},[324,34137,34138],{"class":916},"range",[324,34140,34141],{"class":867},"(num_epochs),\n",[324,34143,34145,34148],{"class":326,"line":34144},174,[324,34146,34147],{"class":738},"        \"train_loss_all\"",[324,34149,34150],{"class":867},":train_loss_all,\n",[324,34152,34154,34157],{"class":326,"line":34153},175,[324,34155,34156],{"class":738},"        \"val_loss_all\"",[324,34158,34159],{"class":867},":val_loss_all,\n",[324,34161,34163,34166],{"class":326,"line":34162},176,[324,34164,34165],{"class":738},"        \"train_acc_all\"",[324,34167,34168],{"class":867},":train_acc_all,\n",[324,34170,34172,34175],{"class":326,"line":34171},177,[324,34173,34174],{"class":738},"        \"val_acc_all\"",[324,34176,34177],{"class":867},":val_acc_all\n",[324,34179,34181],{"class":326,"line":34180},178,[324,34182,34183],{"class":867},"    })\n",[324,34185,34187],{"class":326,"line":34186},179,[324,34188,34189],{"class":772},"    # 返回训练保存的过程\n",[324,34191,34193,34195],{"class":326,"line":34192},180,[324,34194,4819],{"class":863},[324,34196,34197],{"class":867}," train_process\n",[324,34199,34201],{"class":326,"line":34200},181,[324,34202,488],{"emptyLinePlaceholder":487},[324,34204,34206],{"class":326,"line":34205},182,[324,34207,34208],{"class":772},"# 将loss值和精度按照图片的形式展示出来\n",[324,34210,34212,34214,34217],{"class":326,"line":34211},183,[324,34213,32669],{"class":863},[324,34215,34216],{"class":734}," matplot_acc_loss",[324,34218,34219],{"class":867},"(train_process):\n",[324,34221,34223],{"class":326,"line":34222},184,[324,34224,34225],{"class":772},"    # 设置图的大小\n",[324,34227,34229,34232,34234,34236,34238,34240,34242,34244],{"class":326,"line":34228},185,[324,34230,34231],{"class":867},"    plt.figure(",[324,34233,32415],{"class":5945},[324,34235,913],{"class":863},[324,34237,868],{"class":867},[324,34239,1362],{"class":916},[324,34241,1242],{"class":867},[324,34243,1157],{"class":916},[324,34245,31219],{"class":867},[324,34247,34249],{"class":326,"line":34248},186,[324,34250,34251],{"class":772},"    # 设置图中有几张图\n",[324,34253,34255],{"class":326,"line":34254},187,[324,34256,34257],{"class":772},"    # 把当前画布分成1行2列的子图,当前位置是 第 1 个子图\n",[324,34259,34261],{"class":326,"line":34260},188,[324,34262,34263],{"class":772},"    # ①loss图\n",[324,34265,34267,34269,34271,34273,34275,34277,34279],{"class":326,"line":34266},189,[324,34268,32449],{"class":867},[324,34270,1082],{"class":916},[324,34272,1242],{"class":867},[324,34274,944],{"class":916},[324,34276,1242],{"class":867},[324,34278,1082],{"class":916},[324,34280,874],{"class":867},[324,34282,34284],{"class":326,"line":34283},190,[324,34285,34286],{"class":772},"    # 补充:\n",[324,34288,34290],{"class":326,"line":34289},191,[324,34291,34292],{"class":772},"    # plt.subplot(nrows, ncols, index)\n",[324,34294,34296],{"class":326,"line":34295},192,[324,34297,34298],{"class":772},"    # nrows：行数\n",[324,34300,34302],{"class":326,"line":34301},193,[324,34303,34304],{"class":772},"    # ncols：列数\n",[324,34306,34308],{"class":326,"line":34307},194,[324,34309,34310],{"class":772},"    # index：目前选中第几个子图（从1开始）\n",[324,34312,34314,34317,34320,34323,34326,34328,34331,34333,34336],{"class":326,"line":34313},195,[324,34315,34316],{"class":867},"    plt.plot(train_process[",[324,34318,34319],{"class":738},"\"epoch\"",[324,34321,34322],{"class":867},"],train_process.train_loss_all,",[324,34324,34325],{"class":738},"'ro-'",[324,34327,1242],{"class":867},[324,34329,34330],{"class":5945},"label",[324,34332,913],{"class":863},[324,34334,34335],{"class":738},"'train loss'",[324,34337,874],{"class":867},[324,34339,34341,34343,34345,34348,34351,34353,34355,34357,34360],{"class":326,"line":34340},196,[324,34342,34316],{"class":867},[324,34344,34319],{"class":738},[324,34346,34347],{"class":867},"],train_process.val_loss_all,",[324,34349,34350],{"class":738},"'bs--'",[324,34352,1242],{"class":867},[324,34354,34330],{"class":5945},[324,34356,913],{"class":863},[324,34358,34359],{"class":738},"'val loss'",[324,34361,874],{"class":867},[324,34363,34365],{"class":326,"line":34364},197,[324,34366,34367],{"class":772},"    # 添加一个图例\n",[324,34369,34371],{"class":326,"line":34370},198,[324,34372,34373],{"class":867},"    plt.legend()\n",[324,34375,34377],{"class":326,"line":34376},199,[324,34378,34379],{"class":772},"    # 给轴添加标签\n",[324,34381,34383,34386,34389],{"class":326,"line":34382},200,[324,34384,34385],{"class":867},"    plt.xlabel(",[324,34387,34388],{"class":738},"'epoch'",[324,34390,874],{"class":867},[324,34392,34394,34397,34400],{"class":326,"line":34393},201,[324,34395,34396],{"class":867},"    plt.ylabel(",[324,34398,34399],{"class":738},"'loss'",[324,34401,874],{"class":867},[324,34403,34405],{"class":326,"line":34404},202,[324,34406,34407],{"class":772},"    # ②准确度图\n",[324,34409,34411,34413,34415,34417,34419,34421,34423],{"class":326,"line":34410},203,[324,34412,32449],{"class":867},[324,34414,1082],{"class":916},[324,34416,1242],{"class":867},[324,34418,944],{"class":916},[324,34420,1242],{"class":867},[324,34422,944],{"class":916},[324,34424,874],{"class":867},[324,34426,34428,34430,34432,34435,34437,34439,34441,34443,34446],{"class":326,"line":34427},204,[324,34429,34316],{"class":867},[324,34431,34319],{"class":738},[324,34433,34434],{"class":867},"],train_process.train_acc_all,",[324,34436,34325],{"class":738},[324,34438,1242],{"class":867},[324,34440,34330],{"class":5945},[324,34442,913],{"class":863},[324,34444,34445],{"class":738},"'train acc'",[324,34447,874],{"class":867},[324,34449,34451,34453,34455,34458,34460,34462,34464,34466,34469],{"class":326,"line":34450},205,[324,34452,34316],{"class":867},[324,34454,34319],{"class":738},[324,34456,34457],{"class":867},"],train_process.val_acc_all,",[324,34459,34350],{"class":738},[324,34461,1242],{"class":867},[324,34463,34330],{"class":5945},[324,34465,913],{"class":863},[324,34467,34468],{"class":738},"'val acc'",[324,34470,874],{"class":867},[324,34472,34474],{"class":326,"line":34473},206,[324,34475,34476],{"class":772},"    # 添加图例\n",[324,34478,34480],{"class":326,"line":34479},207,[324,34481,34373],{"class":867},[324,34483,34485,34487,34489],{"class":326,"line":34484},208,[324,34486,34385],{"class":867},[324,34488,34319],{"class":738},[324,34490,874],{"class":867},[324,34492,34494,34496,34499],{"class":326,"line":34493},209,[324,34495,34396],{"class":867},[324,34497,34498],{"class":738},"\"acc\"",[324,34500,874],{"class":867},[324,34502,34504],{"class":326,"line":34503},210,[324,34505,34506],{"class":867},"    plt.show()\n",[324,34508,34510],{"class":326,"line":34509},211,[324,34511,488],{"emptyLinePlaceholder":487},[324,34513,34515],{"class":326,"line":34514},212,[324,34516,34517],{"class":772},"# 正式开始训练:\n",[324,34519,34521,34523,34525,34527,34529],{"class":326,"line":34520},213,[324,34522,2262],{"class":863},[324,34524,31942],{"class":916},[324,34526,3678],{"class":863},[324,34528,31947],{"class":738},[324,34530,4468],{"class":867},[324,34532,34534],{"class":326,"line":34533},214,[324,34535,34536],{"class":772},"    # 将模型实例化\n",[324,34538,34540,34543,34545],{"class":326,"line":34539},215,[324,34541,34542],{"class":867},"    LeNet",[324,34544,913],{"class":863},[324,34546,34547],{"class":867},"LeNet()\n",[324,34549,34551,34554,34556],{"class":326,"line":34550},216,[324,34552,34553],{"class":867},"    train_dataloader,val_dataloader",[324,34555,913],{"class":863},[324,34557,34558],{"class":867},"train_val_data_process()\n",[324,34560,34562,34564,34566,34569,34572,34574,34576],{"class":326,"line":34561},217,[324,34563,34115],{"class":867},[324,34565,913],{"class":863},[324,34567,34568],{"class":867},"train_model_process(LeNet,train_dataloader,val_dataloader,",[324,34570,34571],{"class":5945},"num_epochs",[324,34573,913],{"class":863},[324,34575,1564],{"class":916},[324,34577,874],{"class":867},[324,34579,34581],{"class":326,"line":34580},218,[324,34582,34583],{"class":867},"    matplot_acc_loss(train_process)\n",[19,34585,34586],{},"画图的补充点学习：",[19,34588,34589],{},[48,34590],{"alt":50,"src":34591},"\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",[192,34593,34594],{"start":338},[195,34595,34596],{},"测试",[316,34598,34600],{"className":31100,"code":34599,"language":31102,"meta":50,"style":50},"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",[269,34601,34602,34608,34618,34630,34640,34645,34655,34665,34669,34674,34683,34700,34712,34729,34740,34756,34761,34772,34783,34794,34801,34805,34810,34820,34825,34842,34850,34854,34859,34868,34877,34881,34886,34891,34896,34903,34908,34920,34930,34940,34945,34949,34954,34963,34968,34984,34989,34994,34999,35013,35018,35032,35036,35041,35056,35061,35073,35077,35082,35094,35099,35107,35112,35117,35127,35132,35141,35146,35151,35155,35160,35165,35181,35189,35194,35199,35258,35264,35269,35280,35288,35296,35300,35305,35309,35314,35322,35327,35343,35348,35358,35368],{"__ignoreMap":50},[324,34603,34604,34606],{"class":326,"line":327},[324,34605,31114],{"class":863},[324,34607,31117],{"class":867},[324,34609,34610,34612,34614,34616],{"class":326,"line":203},[324,34611,31114],{"class":863},[324,34613,32137],{"class":867},[324,34615,32105],{"class":863},[324,34617,32142],{"class":867},[324,34619,34620,34622,34625,34627],{"class":326,"line":338},[324,34621,31459],{"class":863},[324,34623,34624],{"class":867}," jupyter_client.consoleapp ",[324,34626,31114],{"class":863},[324,34628,34629],{"class":867}," classes\n",[324,34631,34632,34634,34636,34638],{"class":326,"line":344},[324,34633,31459],{"class":863},[324,34635,32120],{"class":867},[324,34637,31114],{"class":863},[324,34639,32125],{"class":867},[324,34641,34642],{"class":326,"line":484},[324,34643,34644],{"class":772},"# 导入数据集\n",[324,34646,34647,34649,34651,34653],{"class":326,"line":491},[324,34648,31459],{"class":863},[324,34650,32090],{"class":867},[324,34652,31114],{"class":863},[324,34654,32095],{"class":867},[324,34656,34657,34659,34661,34663],{"class":326,"line":496},[324,34658,31459],{"class":863},[324,34660,32636],{"class":867},[324,34662,31114],{"class":863},[324,34664,32641],{"class":867},[324,34666,34667],{"class":326,"line":502},[324,34668,488],{"emptyLinePlaceholder":487},[324,34670,34671],{"class":326,"line":508},[324,34672,34673],{"class":772},"# 测试数据处理\n",[324,34675,34676,34678,34681],{"class":326,"line":514},[324,34677,32669],{"class":863},[324,34679,34680],{"class":734}," test_data_process",[324,34682,32675],{"class":867},[324,34684,34685,34688,34690,34692,34694,34696,34698],{"class":326,"line":2343},[324,34686,34687],{"class":867},"    test_data",[324,34689,913],{"class":863},[324,34691,32177],{"class":867},[324,34693,32180],{"class":5945},[324,34695,913],{"class":863},[324,34697,32185],{"class":738},[324,34699,32188],{"class":867},[324,34701,34702,34705,34707,34710],{"class":326,"line":2348},[324,34703,34704],{"class":5945},"                           train",[324,34706,913],{"class":863},[324,34708,34709],{"class":916},"False",[324,34711,32188],{"class":867},[324,34713,34714,34717,34719,34721,34723,34725,34727],{"class":326,"line":2354},[324,34715,34716],{"class":5945},"                           transform",[324,34718,913],{"class":863},[324,34720,32215],{"class":867},[324,34722,32218],{"class":5945},[324,34724,913],{"class":863},[324,34726,1765],{"class":916},[324,34728,32226],{"class":867},[324,34730,34731,34734,34736,34738],{"class":326,"line":2359},[324,34732,34733],{"class":5945},"                           download",[324,34735,913],{"class":863},[324,34737,32198],{"class":916},[324,34739,874],{"class":867},[324,34741,34742,34745,34747,34749,34751,34753],{"class":326,"line":2373},[324,34743,34744],{"class":867},"    test_dataloader",[324,34746,913],{"class":863},[324,34748,32256],{"class":867},[324,34750,32259],{"class":5945},[324,34752,913],{"class":863},[324,34754,34755],{"class":867},"test_data,\n",[324,34757,34758],{"class":326,"line":2378},[324,34759,34760],{"class":772},"                                    # 这里是一张一张进行测试\n",[324,34762,34763,34766,34768,34770],{"class":326,"line":2384},[324,34764,34765],{"class":5945},"                                    batch_size",[324,34767,913],{"class":863},[324,34769,1082],{"class":916},[324,34771,32188],{"class":867},[324,34773,34774,34777,34779,34781],{"class":326,"line":2405},[324,34775,34776],{"class":5945},"                                    shuffle",[324,34778,913],{"class":863},[324,34780,32198],{"class":916},[324,34782,32188],{"class":867},[324,34784,34785,34788,34790,34792],{"class":326,"line":2410},[324,34786,34787],{"class":5945},"                                    num_workers",[324,34789,913],{"class":863},[324,34791,1056],{"class":916},[324,34793,874],{"class":867},[324,34795,34796,34798],{"class":326,"line":2424},[324,34797,4819],{"class":863},[324,34799,34800],{"class":867}," test_dataloader\n",[324,34802,34803],{"class":326,"line":2429},[324,34804,488],{"emptyLinePlaceholder":487},[324,34806,34807],{"class":326,"line":2458},[324,34808,34809],{"class":772},"# 定义模型测试函数\n",[324,34811,34812,34814,34817],{"class":326,"line":2463},[324,34813,32669],{"class":863},[324,34815,34816],{"class":734}," test_model_process",[324,34818,34819],{"class":867},"(model,test_dataloader):\n",[324,34821,34822],{"class":326,"line":2480},[324,34823,34824],{"class":772},"    # 将模型放到设备当中，先进行判断\n",[324,34826,34827,34829,34831,34833,34835,34837,34839],{"class":326,"line":2485},[324,34828,31959],{"class":867},[324,34830,913],{"class":863},[324,34832,31966],{"class":738},[324,34834,2435],{"class":863},[324,34836,31971],{"class":867},[324,34838,2432],{"class":863},[324,34840,34841],{"class":738}," \"cpu\"\n",[324,34843,34844,34846,34848],{"class":326,"line":2490},[324,34845,32011],{"class":867},[324,34847,913],{"class":863},[324,34849,33011],{"class":867},[324,34851,34852],{"class":326,"line":2495},[324,34853,488],{"emptyLinePlaceholder":487},[324,34855,34856],{"class":326,"line":2509},[324,34857,34858],{"class":772},"    # 设置初始化参数\n",[324,34860,34861,34864,34866],{"class":326,"line":2514},[324,34862,34863],{"class":867},"    test_corrects",[324,34865,913],{"class":863},[324,34867,33064],{"class":916},[324,34869,34870,34873,34875],{"class":326,"line":3306},[324,34871,34872],{"class":867},"    test_num",[324,34874,913],{"class":863},[324,34876,3814],{"class":916},[324,34878,34879],{"class":326,"line":3320},[324,34880,488],{"emptyLinePlaceholder":487},[324,34882,34883],{"class":326,"line":3328},[324,34884,34885],{"class":772},"    # 进行模型测试\n",[324,34887,34888],{"class":326,"line":3333},[324,34889,34890],{"class":772},"    # 模型在推理的时候只进行前向传播，不再进行反向传播更新梯度了\n",[324,34892,34893],{"class":326,"line":3339},[324,34894,34895],{"class":772},"    # 不进行梯度计算，可以节省内存，加快运行速度\n",[324,34897,34898,34901],{"class":326,"line":3345},[324,34899,34900],{"class":863},"    with",[324,34902,33606],{"class":867},[324,34904,34905],{"class":326,"line":3350},[324,34906,34907],{"class":772},"        # 从数据中进行\n",[324,34909,34910,34912,34915,34917],{"class":326,"line":8677},[324,34911,4132],{"class":863},[324,34913,34914],{"class":867}," test_data_x,test_data_y ",[324,34916,26767],{"class":863},[324,34918,34919],{"class":867}," test_dataloader:\n",[324,34921,34922,34925,34927],{"class":326,"line":8701},[324,34923,34924],{"class":867},"            test_data_x",[324,34926,913],{"class":863},[324,34928,34929],{"class":867},"test_data_x.to(device)\n",[324,34931,34932,34935,34937],{"class":326,"line":8706},[324,34933,34934],{"class":867},"            test_data_y",[324,34936,913],{"class":863},[324,34938,34939],{"class":867},"test_data_y.to(device)\n",[324,34941,34942],{"class":326,"line":8712},[324,34943,34944],{"class":772},"            # 设置为验证模式\n",[324,34946,34947],{"class":326,"line":8739},[324,34948,33597],{"class":867},[324,34950,34951],{"class":326,"line":8744},[324,34952,34953],{"class":772},"            # 前向传播过程，输入为测试数据集,输出为对每个样本的预测值\n",[324,34955,34956,34958,34960],{"class":326,"line":8750},[324,34957,33382],{"class":867},[324,34959,913],{"class":863},[324,34961,34962],{"class":867},"model(test_data_x)\n",[324,34964,34965],{"class":326,"line":8762},[324,34966,34967],{"class":772},"            # 查找每一行中最大值对应的下标\n",[324,34969,34970,34972,34974,34976,34978,34980,34982],{"class":326,"line":8774},[324,34971,33399],{"class":867},[324,34973,913],{"class":863},[324,34975,33404],{"class":867},[324,34977,33407],{"class":5945},[324,34979,913],{"class":863},[324,34981,1082],{"class":916},[324,34983,874],{"class":867},[324,34985,34986],{"class":326,"line":8786},[324,34987,34988],{"class":772},"            # 计算正确率\n",[324,34990,34991],{"class":326,"line":10445},[324,34992,34993],{"class":772},"            # .data表示是一个不带梯度信息的tensor\n",[324,34995,34996],{"class":326,"line":10470},[324,34997,34998],{"class":772},"            # 如果预测正确，则准确度test_corrects加1\n",[324,35000,35001,35004,35006,35008,35010],{"class":326,"line":10493},[324,35002,35003],{"class":867},"            test_corrects",[324,35005,10206],{"class":863},[324,35007,33509],{"class":867},[324,35009,3678],{"class":863},[324,35011,35012],{"class":867},"test_data_y.data)\n",[324,35014,35015],{"class":326,"line":10517},[324,35016,35017],{"class":772},"            # 将所有的测试样本进行累计\n",[324,35019,35020,35023,35025,35028,35030],{"class":326,"line":10522},[324,35021,35022],{"class":867},"            test_num",[324,35024,10206],{"class":863},[324,35026,35027],{"class":867},"test_data_x.size(",[324,35029,1056],{"class":916},[324,35031,874],{"class":867},[324,35033,35034],{"class":326,"line":10527},[324,35035,488],{"emptyLinePlaceholder":487},[324,35037,35038],{"class":326,"line":10532},[324,35039,35040],{"class":772},"        # 计算准确度\n",[324,35042,35043,35046,35048,35051,35053],{"class":326,"line":10541},[324,35044,35045],{"class":867},"        test_acc",[324,35047,913],{"class":863},[324,35049,35050],{"class":867},"test_corrects.double().item()",[324,35052,1448],{"class":863},[324,35054,35055],{"class":867},"test_num\n",[324,35057,35058],{"class":326,"line":10546},[324,35059,35060],{"class":772},"        # .item()的作用是：把只含1个数字的 Tensor 转成 Python 的数字\n",[324,35062,35063,35065,35067,35070],{"class":326,"line":10552},[324,35064,33173],{"class":916},[324,35066,868],{"class":867},[324,35068,35069],{"class":738},"\"测试的准确率：\"",[324,35071,35072],{"class":867},",test_acc)\n",[324,35074,35075],{"class":326,"line":10573},[324,35076,488],{"emptyLinePlaceholder":487},[324,35078,35079],{"class":326,"line":10579},[324,35080,35081],{"class":772},"# 实现模型的测试功能\n",[324,35083,35084,35086,35088,35090,35092],{"class":326,"line":10593},[324,35085,2262],{"class":863},[324,35087,31942],{"class":916},[324,35089,3678],{"class":863},[324,35091,31947],{"class":738},[324,35093,4468],{"class":867},[324,35095,35096],{"class":326,"line":10599},[324,35097,35098],{"class":772},"    # 加载模型\n",[324,35100,35101,35103,35105],{"class":326,"line":10626},[324,35102,32011],{"class":867},[324,35104,913],{"class":863},[324,35106,34547],{"class":867},[324,35108,35109],{"class":326,"line":10635},[324,35110,35111],{"class":772},"    # 调用训练好的权重，把之前训练好、保存下来的模型参数重新装回模型里\n",[324,35113,35114],{"class":326,"line":10641},[324,35115,35116],{"class":772},"    # 使用torch中的load函数加载权重，利用model.load_state_dict将参数加回到模型当中\n",[324,35118,35119,35122,35125],{"class":326,"line":10649},[324,35120,35121],{"class":867},"    model.load_state_dict(torch.load(",[324,35123,35124],{"class":738},"'best_model.pth'",[324,35126,31219],{"class":867},[324,35128,35129],{"class":326,"line":10654},[324,35130,35131],{"class":772},"    # 数据加载\n",[324,35133,35134,35136,35138],{"class":326,"line":17333},[324,35135,34744],{"class":867},[324,35137,913],{"class":863},[324,35139,35140],{"class":867},"test_data_process()\n",[324,35142,35143],{"class":326,"line":17339},[324,35144,35145],{"class":772},"    # 加载模型测试的函数\n",[324,35147,35148],{"class":326,"line":17362},[324,35149,35150],{"class":867},"    test_model_process(model,test_dataloader)\n",[324,35152,35153],{"class":326,"line":17368},[324,35154,488],{"emptyLinePlaceholder":487},[324,35156,35157],{"class":326,"line":17391},[324,35158,35159],{"class":772},"    # 验证集推理实现：\n",[324,35161,35162],{"class":326,"line":17405},[324,35163,35164],{"class":772},"    # 加载数据加载的更详细一些\n",[324,35166,35167,35169,35171,35173,35175,35177,35179],{"class":326,"line":17425},[324,35168,31959],{"class":867},[324,35170,913],{"class":863},[324,35172,31966],{"class":738},[324,35174,2435],{"class":863},[324,35176,31971],{"class":867},[324,35178,2432],{"class":863},[324,35180,34841],{"class":738},[324,35182,35183,35185,35187],{"class":326,"line":17431},[324,35184,32011],{"class":867},[324,35186,913],{"class":863},[324,35188,33011],{"class":867},[324,35190,35191],{"class":326,"line":17442},[324,35192,35193],{"class":772},"    # 设置类别，这样预测值就不展示数字，就直接展示这个种类了\n",[324,35195,35196],{"class":326,"line":17465},[324,35197,35198],{"class":772},"    # 顺序不可改变\n",[324,35200,35201,35204,35206,35208,35211,35213,35216,35218,35221,35223,35226,35228,35231,35233,35236,35238,35241,35243,35246,35248,35251,35253,35256],{"class":326,"line":17487},[324,35202,35203],{"class":867},"    classes",[324,35205,913],{"class":863},[324,35207,1754],{"class":867},[324,35209,35210],{"class":738},"'T-shirt\u002Ftop'",[324,35212,1242],{"class":867},[324,35214,35215],{"class":738},"'Trouser'",[324,35217,1242],{"class":867},[324,35219,35220],{"class":738},"'Pullover'",[324,35222,1242],{"class":867},[324,35224,35225],{"class":738},"'Dress'",[324,35227,1242],{"class":867},[324,35229,35230],{"class":738},"'Coat'",[324,35232,1242],{"class":867},[324,35234,35235],{"class":738},"'Sandal'",[324,35237,1242],{"class":867},[324,35239,35240],{"class":738},"'Shirt'",[324,35242,1242],{"class":867},[324,35244,35245],{"class":738},"'Sneaker'",[324,35247,1242],{"class":867},[324,35249,35250],{"class":738},"'Bag'",[324,35252,1242],{"class":867},[324,35254,35255],{"class":738},"'Ankle boot'",[324,35257,33968],{"class":867},[324,35259,35260,35262],{"class":326,"line":17492},[324,35261,34900],{"class":863},[324,35263,33606],{"class":867},[324,35265,35266],{"class":326,"line":17498},[324,35267,35268],{"class":772},"        # 将数据和标签都放到设备当中\n",[324,35270,35271,35273,35276,35278],{"class":326,"line":17512},[324,35272,4132],{"class":863},[324,35274,35275],{"class":867}," b_x,b_y ",[324,35277,26767],{"class":863},[324,35279,34919],{"class":867},[324,35281,35282,35284,35286],{"class":326,"line":17525},[324,35283,33332],{"class":867},[324,35285,913],{"class":863},[324,35287,33337],{"class":867},[324,35289,35290,35292,35294],{"class":326,"line":17530},[324,35291,33347],{"class":867},[324,35293,913],{"class":863},[324,35295,33352],{"class":867},[324,35297,35298],{"class":326,"line":17544},[324,35299,488],{"emptyLinePlaceholder":487},[324,35301,35302],{"class":326,"line":17549},[324,35303,35304],{"class":772},"            # 设置模型为验证模式\n",[324,35306,35307],{"class":326,"line":17555},[324,35308,33597],{"class":867},[324,35310,35311],{"class":326,"line":17560},[324,35312,35313],{"class":772},"            # 模型推理结果\n",[324,35315,35316,35318,35320],{"class":326,"line":17574},[324,35317,33382],{"class":867},[324,35319,913],{"class":863},[324,35321,33387],{"class":867},[324,35323,35324],{"class":326,"line":17579},[324,35325,35326],{"class":772},"            # 获取最大下标，最大下标就是类别号\n",[324,35328,35329,35331,35333,35335,35337,35339,35341],{"class":326,"line":17584},[324,35330,33399],{"class":867},[324,35332,913],{"class":863},[324,35334,33404],{"class":867},[324,35336,33407],{"class":5945},[324,35338,913],{"class":863},[324,35340,1082],{"class":916},[324,35342,874],{"class":867},[324,35344,35345],{"class":326,"line":17598},[324,35346,35347],{"class":772},"            # 取出张量中的数值\n",[324,35349,35350,35353,35355],{"class":326,"line":17610},[324,35351,35352],{"class":867},"            result",[324,35354,913],{"class":863},[324,35356,35357],{"class":867},"pre_lab.item()\n",[324,35359,35360,35363,35365],{"class":326,"line":17615},[324,35361,35362],{"class":867},"            label",[324,35364,913],{"class":863},[324,35366,35367],{"class":867},"b_y.item()\n",[324,35369,35370,35373,35375,35378,35381,35384,35386,35389],{"class":326,"line":17628},[324,35371,35372],{"class":916},"            print",[324,35374,868],{"class":867},[324,35376,35377],{"class":738},"\"预测值：\"",[324,35379,35380],{"class":867},",classes[result],",[324,35382,35383],{"class":738},"\"------\"",[324,35385,1242],{"class":867},[324,35387,35388],{"class":738},"\"真实值：\"",[324,35390,35391],{"class":867},",classes[label])\n",[19,35393,35394],{},"（2）AlexNet",[192,35396,35397],{},[195,35398,35399],{},"神经网络构建",[316,35401,35403],{"className":31100,"code":35402,"language":31102,"meta":50,"style":50},"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",[269,35404,35405,35411,35421,35431,35443,35447,35464,35472,35487,35499,35541,35568,35611,35637,35681,35724,35767,35794,35798,35808,35813,35841,35860,35879,35883,35888,35896,35911,35921,35935,35945,35960,35975,35990,36001,36005,36010,36020,36035,36040,36054,36069,36081,36086,36097,36102,36108,36113,36125,36145,36150,36159],{"__ignoreMap":50},[324,35406,35407,35409],{"class":326,"line":327},[324,35408,31114],{"class":863},[324,35410,31117],{"class":867},[324,35412,35413,35415,35417,35419],{"class":326,"line":203},[324,35414,31459],{"class":863},[324,35416,31462],{"class":867},[324,35418,31114],{"class":863},[324,35420,31467],{"class":867},[324,35422,35423,35425,35427,35429],{"class":326,"line":338},[324,35424,31459],{"class":863},[324,35426,31479],{"class":867},[324,35428,31114],{"class":863},[324,35430,31484],{"class":867},[324,35432,35433,35435,35438,35440],{"class":326,"line":344},[324,35434,31114],{"class":863},[324,35436,35437],{"class":867}," torch.nn.functional ",[324,35439,32105],{"class":863},[324,35441,35442],{"class":867}," F\n",[324,35444,35445],{"class":326,"line":484},[324,35446,488],{"emptyLinePlaceholder":487},[324,35448,35449,35451,35454,35456,35458,35460,35462],{"class":326,"line":491},[324,35450,15423],{"class":863},[324,35452,35453],{"class":734}," AlexNet",[324,35455,868],{"class":867},[324,35457,31500],{"class":734},[324,35459,1422],{"class":867},[324,35461,31505],{"class":734},[324,35463,31508],{"class":867},[324,35465,35466,35468,35470],{"class":326,"line":496},[324,35467,31523],{"class":863},[324,35469,31526],{"class":916},[324,35471,31529],{"class":867},[324,35473,35474,35476,35479,35481,35483,35485],{"class":326,"line":502},[324,35475,31539],{"class":916},[324,35477,35478],{"class":867},"(AlexNet,",[324,35480,31545],{"class":916},[324,35482,31548],{"class":867},[324,35484,31551],{"class":916},[324,35486,2706],{"class":867},[324,35488,35489,35491,35494,35496],{"class":326,"line":508},[324,35490,31567],{"class":916},[324,35492,35493],{"class":867},".ReLu",[324,35495,913],{"class":863},[324,35497,35498],{"class":867},"nn.ReLU()\n",[324,35500,35501,35503,35505,35507,35509,35511,35513,35515,35517,35519,35521,35523,35525,35527,35529,35531,35533,35535,35537,35539],{"class":326,"line":514},[324,35502,31567],{"class":916},[324,35504,31570],{"class":867},[324,35506,913],{"class":863},[324,35508,31575],{"class":867},[324,35510,31578],{"class":5945},[324,35512,913],{"class":863},[324,35514,1082],{"class":916},[324,35516,1242],{"class":867},[324,35518,31587],{"class":5945},[324,35520,913],{"class":863},[324,35522,1074],{"class":916},[324,35524,1242],{"class":867},[324,35526,31596],{"class":5945},[324,35528,913],{"class":863},[324,35530,1336],{"class":916},[324,35532,1242],{"class":867},[324,35534,31651],{"class":5945},[324,35536,913],{"class":863},[324,35538,1157],{"class":916},[324,35540,874],{"class":867},[324,35542,35543,35545,35547,35549,35552,35554,35556,35558,35560,35562,35564,35566],{"class":326,"line":2343},[324,35544,31567],{"class":916},[324,35546,31635],{"class":867},[324,35548,913],{"class":863},[324,35550,35551],{"class":867},"nn.MaxPool2d(",[324,35553,31596],{"class":5945},[324,35555,913],{"class":863},[324,35557,938],{"class":916},[324,35559,1242],{"class":867},[324,35561,31651],{"class":5945},[324,35563,913],{"class":863},[324,35565,944],{"class":916},[324,35567,874],{"class":867},[324,35569,35570,35572,35574,35576,35578,35580,35582,35584,35586,35588,35590,35593,35595,35597,35599,35601,35603,35605,35607,35609],{"class":326,"line":2348},[324,35571,31567],{"class":916},[324,35573,31664],{"class":867},[324,35575,913],{"class":863},[324,35577,31575],{"class":867},[324,35579,31578],{"class":5945},[324,35581,913],{"class":863},[324,35583,1074],{"class":916},[324,35585,1242],{"class":867},[324,35587,31587],{"class":5945},[324,35589,913],{"class":863},[324,35591,35592],{"class":916},"256",[324,35594,1242],{"class":867},[324,35596,31596],{"class":5945},[324,35598,913],{"class":863},[324,35600,1183],{"class":916},[324,35602,1242],{"class":867},[324,35604,31605],{"class":5945},[324,35606,913],{"class":863},[324,35608,944],{"class":916},[324,35610,874],{"class":867},[324,35612,35613,35615,35617,35619,35621,35623,35625,35627,35629,35631,35633,35635],{"class":326,"line":2354},[324,35614,31567],{"class":916},[324,35616,31699],{"class":867},[324,35618,913],{"class":863},[324,35620,35551],{"class":867},[324,35622,31596],{"class":5945},[324,35624,913],{"class":863},[324,35626,938],{"class":916},[324,35628,1242],{"class":867},[324,35630,31651],{"class":5945},[324,35632,913],{"class":863},[324,35634,944],{"class":916},[324,35636,874],{"class":867},[324,35638,35639,35641,35644,35646,35648,35650,35652,35654,35656,35658,35660,35663,35665,35667,35669,35671,35673,35675,35677,35679],{"class":326,"line":2359},[324,35640,31567],{"class":916},[324,35642,35643],{"class":867},".c5",[324,35645,913],{"class":863},[324,35647,31575],{"class":867},[324,35649,31578],{"class":5945},[324,35651,913],{"class":863},[324,35653,35592],{"class":916},[324,35655,1242],{"class":867},[324,35657,31587],{"class":5945},[324,35659,913],{"class":863},[324,35661,35662],{"class":916},"384",[324,35664,1242],{"class":867},[324,35666,31596],{"class":5945},[324,35668,913],{"class":863},[324,35670,938],{"class":916},[324,35672,1242],{"class":867},[324,35674,31605],{"class":5945},[324,35676,913],{"class":863},[324,35678,1082],{"class":916},[324,35680,874],{"class":867},[324,35682,35683,35685,35688,35690,35692,35694,35696,35698,35700,35702,35704,35706,35708,35710,35712,35714,35716,35718,35720,35722],{"class":326,"line":2373},[324,35684,31567],{"class":916},[324,35686,35687],{"class":867},".c6",[324,35689,913],{"class":863},[324,35691,31575],{"class":867},[324,35693,31578],{"class":5945},[324,35695,913],{"class":863},[324,35697,35662],{"class":916},[324,35699,1242],{"class":867},[324,35701,31587],{"class":5945},[324,35703,913],{"class":863},[324,35705,35662],{"class":916},[324,35707,1242],{"class":867},[324,35709,31596],{"class":5945},[324,35711,913],{"class":863},[324,35713,938],{"class":916},[324,35715,1242],{"class":867},[324,35717,31605],{"class":5945},[324,35719,913],{"class":863},[324,35721,1082],{"class":916},[324,35723,874],{"class":867},[324,35725,35726,35728,35731,35733,35735,35737,35739,35741,35743,35745,35747,35749,35751,35753,35755,35757,35759,35761,35763,35765],{"class":326,"line":2378},[324,35727,31567],{"class":916},[324,35729,35730],{"class":867},".c7",[324,35732,913],{"class":863},[324,35734,31575],{"class":867},[324,35736,31578],{"class":5945},[324,35738,913],{"class":863},[324,35740,35662],{"class":916},[324,35742,1242],{"class":867},[324,35744,31587],{"class":5945},[324,35746,913],{"class":863},[324,35748,35592],{"class":916},[324,35750,1242],{"class":867},[324,35752,31596],{"class":5945},[324,35754,913],{"class":863},[324,35756,938],{"class":916},[324,35758,1242],{"class":867},[324,35760,31605],{"class":5945},[324,35762,913],{"class":863},[324,35764,1082],{"class":916},[324,35766,874],{"class":867},[324,35768,35769,35771,35774,35776,35778,35780,35782,35784,35786,35788,35790,35792],{"class":326,"line":2384},[324,35770,31567],{"class":916},[324,35772,35773],{"class":867},".s8",[324,35775,913],{"class":863},[324,35777,35551],{"class":867},[324,35779,31596],{"class":5945},[324,35781,913],{"class":863},[324,35783,938],{"class":916},[324,35785,1242],{"class":867},[324,35787,31651],{"class":5945},[324,35789,913],{"class":863},[324,35791,944],{"class":916},[324,35793,874],{"class":867},[324,35795,35796],{"class":326,"line":2405},[324,35797,31724],{"class":772},[324,35799,35800,35802,35804,35806],{"class":326,"line":2410},[324,35801,31567],{"class":916},[324,35803,31731],{"class":867},[324,35805,913],{"class":863},[324,35807,31736],{"class":867},[324,35809,35810],{"class":326,"line":2424},[324,35811,35812],{"class":772},"       # 定义全连接层\n",[324,35814,35815,35817,35820,35822,35824,35826,35828,35830,35832,35834,35836,35839],{"class":326,"line":2429},[324,35816,31567],{"class":916},[324,35818,35819],{"class":867},".f1",[324,35821,913],{"class":863},[324,35823,31753],{"class":867},[324,35825,1208],{"class":916},[324,35827,1319],{"class":863},[324,35829,1208],{"class":916},[324,35831,1319],{"class":863},[324,35833,35592],{"class":916},[324,35835,1242],{"class":867},[324,35837,35838],{"class":916},"4096",[324,35840,874],{"class":867},[324,35842,35843,35845,35848,35850,35852,35854,35856,35858],{"class":326,"line":2458},[324,35844,31567],{"class":916},[324,35846,35847],{"class":867},".f2",[324,35849,913],{"class":863},[324,35851,31753],{"class":867},[324,35853,35838],{"class":916},[324,35855,1242],{"class":867},[324,35857,35838],{"class":916},[324,35859,874],{"class":867},[324,35861,35862,35864,35867,35869,35871,35873,35875,35877],{"class":326,"line":2463},[324,35863,31567],{"class":916},[324,35865,35866],{"class":867},".f3",[324,35868,913],{"class":863},[324,35870,31753],{"class":867},[324,35872,35838],{"class":916},[324,35874,1242],{"class":867},[324,35876,1310],{"class":916},[324,35878,874],{"class":867},[324,35880,35881],{"class":326,"line":2480},[324,35882,488],{"emptyLinePlaceholder":487},[324,35884,35885],{"class":326,"line":2485},[324,35886,35887],{"class":772},"    # 定义前向传播\n",[324,35889,35890,35892,35894],{"class":326,"line":2490},[324,35891,31523],{"class":863},[324,35893,31815],{"class":734},[324,35895,31818],{"class":867},[324,35897,35898,35900,35902,35904,35907,35909],{"class":326,"line":2495},[324,35899,31823],{"class":867},[324,35901,913],{"class":863},[324,35903,31545],{"class":916},[324,35905,35906],{"class":867},".ReLu(",[324,35908,31545],{"class":916},[324,35910,31835],{"class":867},[324,35912,35913,35915,35917,35919],{"class":326,"line":2509},[324,35914,31823],{"class":867},[324,35916,913],{"class":863},[324,35918,31545],{"class":916},[324,35920,31846],{"class":867},[324,35922,35923,35925,35927,35929,35931,35933],{"class":326,"line":2514},[324,35924,31823],{"class":867},[324,35926,913],{"class":863},[324,35928,31545],{"class":916},[324,35930,35906],{"class":867},[324,35932,31545],{"class":916},[324,35934,31861],{"class":867},[324,35936,35937,35939,35941,35943],{"class":326,"line":3306},[324,35938,31823],{"class":867},[324,35940,913],{"class":863},[324,35942,31545],{"class":916},[324,35944,31872],{"class":867},[324,35946,35947,35949,35951,35953,35955,35957],{"class":326,"line":3320},[324,35948,31823],{"class":867},[324,35950,913],{"class":863},[324,35952,31545],{"class":916},[324,35954,35906],{"class":867},[324,35956,31545],{"class":916},[324,35958,35959],{"class":867},".c5(x))\n",[324,35961,35962,35964,35966,35968,35970,35972],{"class":326,"line":3328},[324,35963,31823],{"class":867},[324,35965,913],{"class":863},[324,35967,31545],{"class":916},[324,35969,35906],{"class":867},[324,35971,31545],{"class":916},[324,35973,35974],{"class":867},".c6(x))\n",[324,35976,35977,35979,35981,35983,35985,35987],{"class":326,"line":3333},[324,35978,31823],{"class":867},[324,35980,913],{"class":863},[324,35982,31545],{"class":916},[324,35984,35906],{"class":867},[324,35986,31545],{"class":916},[324,35988,35989],{"class":867},".c7(x))\n",[324,35991,35992,35994,35996,35998],{"class":326,"line":3339},[324,35993,31823],{"class":867},[324,35995,913],{"class":863},[324,35997,31545],{"class":916},[324,35999,36000],{"class":867},".s8(x)\n",[324,36002,36003],{"class":326,"line":3345},[324,36004,488],{"emptyLinePlaceholder":487},[324,36006,36007],{"class":326,"line":3350},[324,36008,36009],{"class":772},"        # 展平加线性全连接层\n",[324,36011,36012,36014,36016,36018],{"class":326,"line":8677},[324,36013,31823],{"class":867},[324,36015,913],{"class":863},[324,36017,31545],{"class":916},[324,36019,31883],{"class":867},[324,36021,36022,36024,36026,36028,36030,36032],{"class":326,"line":8701},[324,36023,31823],{"class":867},[324,36025,913],{"class":863},[324,36027,31545],{"class":916},[324,36029,35906],{"class":867},[324,36031,31545],{"class":916},[324,36033,36034],{"class":867},".f1(x))\n",[324,36036,36037],{"class":326,"line":8706},[324,36038,36039],{"class":772},"        # 还需要dropout对神经元随机进行失活\n",[324,36041,36042,36044,36046,36049,36052],{"class":326,"line":8712},[324,36043,31823],{"class":867},[324,36045,913],{"class":863},[324,36047,36048],{"class":867},"F.dropout(x,",[324,36050,36051],{"class":916},"0.5",[324,36053,874],{"class":867},[324,36055,36056,36058,36060,36062,36064,36066],{"class":326,"line":8739},[324,36057,31823],{"class":867},[324,36059,913],{"class":863},[324,36061,31545],{"class":916},[324,36063,35906],{"class":867},[324,36065,31545],{"class":916},[324,36067,36068],{"class":867},".f2(x))\n",[324,36070,36071,36073,36075,36077,36079],{"class":326,"line":8744},[324,36072,31823],{"class":867},[324,36074,913],{"class":863},[324,36076,36048],{"class":867},[324,36078,36051],{"class":916},[324,36080,874],{"class":867},[324,36082,36083],{"class":326,"line":8750},[324,36084,36085],{"class":772},"        # 直接输出\n",[324,36087,36088,36090,36092,36094],{"class":326,"line":8762},[324,36089,31823],{"class":867},[324,36091,913],{"class":863},[324,36093,31545],{"class":916},[324,36095,36096],{"class":867},".f3(x)\n",[324,36098,36099],{"class":326,"line":8774},[324,36100,36101],{"class":772},"        # 前向传播输出\n",[324,36103,36104,36106],{"class":326,"line":8786},[324,36105,15481],{"class":863},[324,36107,31931],{"class":867},[324,36109,36110],{"class":326,"line":10445},[324,36111,36112],{"class":772},"# 定义主函数，用于测试神经网络是否可以正常工作\n",[324,36114,36115,36117,36119,36121,36123],{"class":326,"line":10470},[324,36116,2262],{"class":863},[324,36118,31942],{"class":916},[324,36120,3678],{"class":863},[324,36122,31947],{"class":738},[324,36124,4468],{"class":867},[324,36126,36127,36129,36131,36133,36135,36137,36139,36141,36143],{"class":326,"line":10493},[324,36128,31959],{"class":867},[324,36130,913],{"class":863},[324,36132,31173],{"class":867},[324,36134,31966],{"class":738},[324,36136,2435],{"class":863},[324,36138,31971],{"class":867},[324,36140,2432],{"class":863},[324,36142,31198],{"class":738},[324,36144,874],{"class":867},[324,36146,36147],{"class":326,"line":10517},[324,36148,36149],{"class":772},"    # 模型实例化，然后将实例化的模型放到设备中\n",[324,36151,36152,36154,36156],{"class":326,"line":10522},[324,36153,32011],{"class":867},[324,36155,913],{"class":863},[324,36157,36158],{"class":867},"AlexNet().to(device)\n",[324,36160,36161,36163,36165,36167,36169,36172,36174,36176],{"class":326,"line":10527},[324,36162,32021],{"class":916},[324,36164,32024],{"class":867},[324,36166,1082],{"class":916},[324,36168,1242],{"class":867},[324,36170,36171],{"class":916},"227",[324,36173,1242],{"class":867},[324,36175,36171],{"class":916},[324,36177,32037],{"class":867},[192,36179,36180],{"start":203},[195,36181,32050],{},[316,36183,36185],{"className":31100,"code":36184,"language":31102,"meta":50,"style":50},"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",[269,36186,36187,36193,36199,36209,36215,36225,36235,36245,36255,36265,36269,36280,36290,36294,36298,36302,36310,36322,36332,36348,36358,36390,36404,36414,36424,36428,36438,36452,36462,36472,36482,36488,36492,36496,36500,36504,36508,36516,36536,36540,36544,36548,36552,36556,36572,36576,36580,36588,36592,36596,36604,36608,36612,36616,36624,36628,36632,36636,36640,36648,36652,36660,36664,36672,36676,36684,36688,36696,36700,36704,36712,36716,36720,36724,36736,36760,36774,36778,36782,36786,36794,36798,36806,36810,36818,36822,36830,36834,36842,36846,36854,36858,36870,36874,36882,36886,36894,36898,36902,36906,36910,36918,36922,36938,36942,36950,36954,36958,36962,36966,36970,36974,36978,36994,36998,37010,37014,37026,37030,37042,37046,37054,37058,37066,37070,37074,37079,37085,37089,37098,37102,37119,37123,37132,37136,37154,37167,37172,37185,37189,37193,37201,37205,37209,37217,37221,37229,37233,37241,37245,37249,37291,37333,37337,37341,37357,37361,37377,37381,37385,37393,37397,37401,37413,37451,37456,37461,37470,37474,37488,37498,37504,37510,37516,37522,37526,37530,37536,37540,37544,37552,37556,37574,37578,37582,37586,37602,37606,37610,37614,37618,37622,37642,37662,37666,37670,37674,37682,37690,37694,37710,37730,37750,37754,37758,37766,37774,37778,37782,37786,37798,37802,37812,37820,37837],{"__ignoreMap":50},[324,36188,36189,36191],{"class":326,"line":327},[324,36190,31114],{"class":863},[324,36192,32544],{"class":867},[324,36194,36195,36197],{"class":326,"line":203},[324,36196,31114],{"class":863},[324,36198,32551],{"class":867},[324,36200,36201,36203,36205,36207],{"class":326,"line":338},[324,36202,31114],{"class":863},[324,36204,32562],{"class":867},[324,36206,32105],{"class":863},[324,36208,32567],{"class":867},[324,36210,36211,36213],{"class":326,"line":344},[324,36212,31114],{"class":863},[324,36214,31117],{"class":867},[324,36216,36217,36219,36221,36223],{"class":326,"line":484},[324,36218,31459],{"class":863},[324,36220,32137],{"class":867},[324,36222,31114],{"class":863},[324,36224,32584],{"class":867},[324,36226,36227,36229,36231,36233],{"class":326,"line":491},[324,36228,31459],{"class":863},[324,36230,32090],{"class":867},[324,36232,31114],{"class":863},[324,36234,32095],{"class":867},[324,36236,36237,36239,36241,36243],{"class":326,"line":496},[324,36238,31459],{"class":863},[324,36240,32120],{"class":867},[324,36242,31114],{"class":863},[324,36244,32125],{"class":867},[324,36246,36247,36249,36251,36253],{"class":326,"line":502},[324,36248,31114],{"class":863},[324,36250,32137],{"class":867},[324,36252,32105],{"class":863},[324,36254,32142],{"class":867},[324,36256,36257,36259,36261,36263],{"class":326,"line":508},[324,36258,31114],{"class":863},[324,36260,32154],{"class":867},[324,36262,32105],{"class":863},[324,36264,32159],{"class":867},[324,36266,36267],{"class":326,"line":514},[324,36268,32629],{"class":772},[324,36270,36271,36273,36275,36277],{"class":326,"line":2343},[324,36272,31459],{"class":863},[324,36274,32636],{"class":867},[324,36276,31114],{"class":863},[324,36278,36279],{"class":867}," AlexNet\n",[324,36281,36282,36284,36286,36288],{"class":326,"line":2348},[324,36283,31459],{"class":863},[324,36285,31462],{"class":867},[324,36287,31114],{"class":863},[324,36289,31467],{"class":867},[324,36291,36292],{"class":326,"line":2354},[324,36293,488],{"emptyLinePlaceholder":487},[324,36295,36296],{"class":326,"line":2359},[324,36297,488],{"emptyLinePlaceholder":487},[324,36299,36300],{"class":326,"line":2373},[324,36301,32664],{"class":772},[324,36303,36304,36306,36308],{"class":326,"line":2378},[324,36305,32669],{"class":863},[324,36307,32672],{"class":734},[324,36309,32675],{"class":867},[324,36311,36312,36314,36316,36318,36320],{"class":326,"line":2384},[324,36313,32680],{"class":867},[324,36315,913],{"class":863},[324,36317,32177],{"class":867},[324,36319,32185],{"class":738},[324,36321,32188],{"class":867},[324,36323,36324,36326,36328,36330],{"class":326,"line":2405},[324,36325,32693],{"class":5945},[324,36327,913],{"class":863},[324,36329,32198],{"class":916},[324,36331,32188],{"class":867},[324,36333,36334,36336,36338,36340,36342,36344,36346],{"class":326,"line":2410},[324,36335,32704],{"class":5945},[324,36337,913],{"class":863},[324,36339,32215],{"class":867},[324,36341,32218],{"class":5945},[324,36343,913],{"class":863},[324,36345,36171],{"class":916},[324,36347,32226],{"class":867},[324,36349,36350,36352,36354,36356],{"class":326,"line":2424},[324,36351,32721],{"class":5945},[324,36353,913],{"class":863},[324,36355,32198],{"class":916},[324,36357,874],{"class":867},[324,36359,36360,36362,36364,36366,36368,36370,36372,36374,36376,36378,36380,36382,36384,36386,36388],{"class":326,"line":2429},[324,36361,32732],{"class":867},[324,36363,913],{"class":863},[324,36365,32737],{"class":867},[324,36367,32740],{"class":916},[324,36369,868],{"class":867},[324,36371,32745],{"class":916},[324,36373,1319],{"class":863},[324,36375,8087],{"class":916},[324,36377,32752],{"class":867},[324,36379,32740],{"class":916},[324,36381,868],{"class":867},[324,36383,32759],{"class":916},[324,36385,1319],{"class":863},[324,36387,8087],{"class":916},[324,36389,32766],{"class":867},[324,36391,36392,36394,36396,36398,36400,36402],{"class":326,"line":2458},[324,36393,32771],{"class":867},[324,36395,913],{"class":863},[324,36397,32776],{"class":867},[324,36399,32259],{"class":5945},[324,36401,913],{"class":863},[324,36403,32264],{"class":867},[324,36405,36406,36408,36410,36412],{"class":326,"line":2463},[324,36407,32787],{"class":5945},[324,36409,913],{"class":863},[324,36411,32792],{"class":916},[324,36413,32188],{"class":867},[324,36415,36416,36418,36420,36422],{"class":326,"line":2480},[324,36417,32799],{"class":5945},[324,36419,913],{"class":863},[324,36421,32198],{"class":916},[324,36423,32188],{"class":867},[324,36425,36426],{"class":326,"line":2485},[324,36427,32810],{"class":772},[324,36429,36430,36432,36434,36436],{"class":326,"line":2490},[324,36431,32815],{"class":5945},[324,36433,913],{"class":863},[324,36435,1259],{"class":916},[324,36437,874],{"class":867},[324,36439,36440,36442,36444,36446,36448,36450],{"class":326,"line":2495},[324,36441,32826],{"class":867},[324,36443,913],{"class":863},[324,36445,32256],{"class":867},[324,36447,32259],{"class":5945},[324,36449,913],{"class":863},[324,36451,32837],{"class":867},[324,36453,36454,36456,36458,36460],{"class":326,"line":2509},[324,36455,32842],{"class":5945},[324,36457,913],{"class":863},[324,36459,32792],{"class":916},[324,36461,32188],{"class":867},[324,36463,36464,36466,36468,36470],{"class":326,"line":2514},[324,36465,32853],{"class":5945},[324,36467,913],{"class":863},[324,36469,32198],{"class":916},[324,36471,32188],{"class":867},[324,36473,36474,36476,36478,36480],{"class":326,"line":3306},[324,36475,32864],{"class":5945},[324,36477,913],{"class":863},[324,36479,1259],{"class":916},[324,36481,874],{"class":867},[324,36483,36484,36486],{"class":326,"line":3320},[324,36485,4819],{"class":863},[324,36487,32877],{"class":867},[324,36489,36490],{"class":326,"line":3328},[324,36491,488],{"emptyLinePlaceholder":487},[324,36493,36494],{"class":326,"line":3333},[324,36495,32886],{"class":772},[324,36497,36498],{"class":326,"line":3339},[324,36499,32891],{"class":772},[324,36501,36502],{"class":326,"line":3345},[324,36503,488],{"emptyLinePlaceholder":487},[324,36505,36506],{"class":326,"line":3350},[324,36507,32900],{"class":772},[324,36509,36510,36512,36514],{"class":326,"line":8677},[324,36511,32669],{"class":863},[324,36513,32907],{"class":734},[324,36515,32910],{"class":867},[324,36517,36518,36520,36522,36524,36526,36528,36530,36532,36534],{"class":326,"line":8701},[324,36519,31959],{"class":867},[324,36521,913],{"class":863},[324,36523,31173],{"class":867},[324,36525,31966],{"class":738},[324,36527,2435],{"class":863},[324,36529,31971],{"class":867},[324,36531,2432],{"class":863},[324,36533,32929],{"class":738},[324,36535,874],{"class":867},[324,36537,36538],{"class":326,"line":8706},[324,36539,488],{"emptyLinePlaceholder":487},[324,36541,36542],{"class":326,"line":8712},[324,36543,488],{"emptyLinePlaceholder":487},[324,36545,36546],{"class":326,"line":8739},[324,36547,32944],{"class":772},[324,36549,36550],{"class":326,"line":8744},[324,36551,32949],{"class":772},[324,36553,36554],{"class":326,"line":8750},[324,36555,32954],{"class":772},[324,36557,36558,36560,36562,36564,36566,36568,36570],{"class":326,"line":8762},[324,36559,32959],{"class":867},[324,36561,913],{"class":863},[324,36563,32964],{"class":867},[324,36565,32967],{"class":5945},[324,36567,913],{"class":863},[324,36569,32972],{"class":916},[324,36571,874],{"class":867},[324,36573,36574],{"class":326,"line":8774},[324,36575,488],{"emptyLinePlaceholder":487},[324,36577,36578],{"class":326,"line":8786},[324,36579,32983],{"class":772},[324,36581,36582,36584,36586],{"class":326,"line":10445},[324,36583,32988],{"class":867},[324,36585,913],{"class":863},[324,36587,32993],{"class":867},[324,36589,36590],{"class":326,"line":10470},[324,36591,488],{"emptyLinePlaceholder":487},[324,36593,36594],{"class":326,"line":10493},[324,36595,33002],{"class":772},[324,36597,36598,36600,36602],{"class":326,"line":10517},[324,36599,32011],{"class":867},[324,36601,913],{"class":863},[324,36603,33011],{"class":867},[324,36605,36606],{"class":326,"line":10522},[324,36607,33016],{"class":772},[324,36609,36610],{"class":326,"line":10527},[324,36611,33021],{"class":772},[324,36613,36614],{"class":326,"line":10532},[324,36615,33026],{"class":772},[324,36617,36618,36620,36622],{"class":326,"line":10541},[324,36619,33031],{"class":867},[324,36621,913],{"class":863},[324,36623,33036],{"class":867},[324,36625,36626],{"class":326,"line":10546},[324,36627,488],{"emptyLinePlaceholder":487},[324,36629,36630],{"class":326,"line":10552},[324,36631,488],{"emptyLinePlaceholder":487},[324,36633,36634],{"class":326,"line":10573},[324,36635,33049],{"class":772},[324,36637,36638],{"class":326,"line":10579},[324,36639,33054],{"class":772},[324,36641,36642,36644,36646],{"class":326,"line":10593},[324,36643,33059],{"class":867},[324,36645,913],{"class":863},[324,36647,33064],{"class":916},[324,36649,36650],{"class":326,"line":10599},[324,36651,33069],{"class":772},[324,36653,36654,36656,36658],{"class":326,"line":10626},[324,36655,33074],{"class":867},[324,36657,913],{"class":863},[324,36659,33079],{"class":867},[324,36661,36662],{"class":326,"line":10635},[324,36663,33084],{"class":772},[324,36665,36666,36668,36670],{"class":326,"line":10641},[324,36667,33089],{"class":867},[324,36669,913],{"class":863},[324,36671,33079],{"class":867},[324,36673,36674],{"class":326,"line":10649},[324,36675,33098],{"class":772},[324,36677,36678,36680,36682],{"class":326,"line":10654},[324,36679,33103],{"class":867},[324,36681,913],{"class":863},[324,36683,33079],{"class":867},[324,36685,36686],{"class":326,"line":17333},[324,36687,33112],{"class":772},[324,36689,36690,36692,36694],{"class":326,"line":17339},[324,36691,33117],{"class":867},[324,36693,913],{"class":863},[324,36695,33079],{"class":867},[324,36697,36698],{"class":326,"line":17362},[324,36699,488],{"emptyLinePlaceholder":487},[324,36701,36702],{"class":326,"line":17368},[324,36703,33130],{"class":772},[324,36705,36706,36708,36710],{"class":326,"line":17391},[324,36707,33135],{"class":867},[324,36709,913],{"class":863},[324,36711,33140],{"class":867},[324,36713,36714],{"class":326,"line":17405},[324,36715,488],{"emptyLinePlaceholder":487},[324,36717,36718],{"class":326,"line":17425},[324,36719,488],{"emptyLinePlaceholder":487},[324,36721,36722],{"class":326,"line":17431},[324,36723,33153],{"class":772},[324,36725,36726,36728,36730,36732,36734],{"class":326,"line":17442},[324,36727,3930],{"class":863},[324,36729,33160],{"class":867},[324,36731,26767],{"class":863},[324,36733,33165],{"class":916},[324,36735,33168],{"class":867},[324,36737,36738,36740,36742,36744,36746,36748,36750,36752,36754,36756,36758],{"class":326,"line":17465},[324,36739,33173],{"class":916},[324,36741,868],{"class":867},[324,36743,33178],{"class":738},[324,36745,33181],{"class":916},[324,36747,1448],{"class":738},[324,36749,33181],{"class":916},[324,36751,1115],{"class":738},[324,36753,33190],{"class":867},[324,36755,1396],{"class":863},[324,36757,1082],{"class":916},[324,36759,31219],{"class":867},[324,36761,36762,36764,36766,36768,36770,36772],{"class":326,"line":17487},[324,36763,33173],{"class":916},[324,36765,868],{"class":867},[324,36767,33205],{"class":738},[324,36769,1319],{"class":863},[324,36771,1310],{"class":916},[324,36773,874],{"class":867},[324,36775,36776],{"class":326,"line":17492},[324,36777,488],{"emptyLinePlaceholder":487},[324,36779,36780],{"class":326,"line":17498},[324,36781,33220],{"class":772},[324,36783,36784],{"class":326,"line":17512},[324,36785,33225],{"class":772},[324,36787,36788,36790,36792],{"class":326,"line":17525},[324,36789,33230],{"class":867},[324,36791,913],{"class":863},[324,36793,33064],{"class":916},[324,36795,36796],{"class":326,"line":17530},[324,36797,33239],{"class":772},[324,36799,36800,36802,36804],{"class":326,"line":17544},[324,36801,33244],{"class":867},[324,36803,913],{"class":863},[324,36805,3814],{"class":916},[324,36807,36808],{"class":326,"line":17549},[324,36809,33253],{"class":772},[324,36811,36812,36814,36816],{"class":326,"line":17555},[324,36813,33258],{"class":867},[324,36815,913],{"class":863},[324,36817,33064],{"class":916},[324,36819,36820],{"class":326,"line":17560},[324,36821,33267],{"class":772},[324,36823,36824,36826,36828],{"class":326,"line":17574},[324,36825,33272],{"class":867},[324,36827,913],{"class":863},[324,36829,3814],{"class":916},[324,36831,36832],{"class":326,"line":17579},[324,36833,33281],{"class":772},[324,36835,36836,36838,36840],{"class":326,"line":17584},[324,36837,33286],{"class":867},[324,36839,913],{"class":863},[324,36841,3814],{"class":916},[324,36843,36844],{"class":326,"line":17598},[324,36845,33295],{"class":772},[324,36847,36848,36850,36852],{"class":326,"line":17610},[324,36849,33300],{"class":867},[324,36851,913],{"class":863},[324,36853,3814],{"class":916},[324,36855,36856],{"class":326,"line":17615},[324,36857,33309],{"class":772},[324,36859,36860,36862,36864,36866,36868],{"class":326,"line":17628},[324,36861,4132],{"class":863},[324,36863,32323],{"class":867},[324,36865,26767],{"class":863},[324,36867,32328],{"class":916},[324,36869,33322],{"class":867},[324,36871,36872],{"class":326,"line":17633},[324,36873,33327],{"class":772},[324,36875,36876,36878,36880],{"class":326,"line":17638},[324,36877,33332],{"class":867},[324,36879,913],{"class":863},[324,36881,33337],{"class":867},[324,36883,36884],{"class":326,"line":17643},[324,36885,33342],{"class":772},[324,36887,36888,36890,36892],{"class":326,"line":17656},[324,36889,33347],{"class":867},[324,36891,913],{"class":863},[324,36893,33352],{"class":867},[324,36895,36896],{"class":326,"line":17661},[324,36897,33358],{"class":772},[324,36899,36900],{"class":326,"line":33355},[324,36901,33364],{"class":867},[324,36903,36904],{"class":326,"line":33361},[324,36905,33370],{"class":772},[324,36907,36908],{"class":326,"line":33367},[324,36909,33376],{"class":772},[324,36911,36912,36914,36916],{"class":326,"line":33373},[324,36913,33382],{"class":867},[324,36915,913],{"class":863},[324,36917,33387],{"class":867},[324,36919,36920],{"class":326,"line":33379},[324,36921,33393],{"class":772},[324,36923,36924,36926,36928,36930,36932,36934,36936],{"class":326,"line":33390},[324,36925,33399],{"class":867},[324,36927,913],{"class":863},[324,36929,33404],{"class":867},[324,36931,33407],{"class":5945},[324,36933,913],{"class":863},[324,36935,1082],{"class":916},[324,36937,874],{"class":867},[324,36939,36940],{"class":326,"line":33396},[324,36941,33419],{"class":772},[324,36943,36944,36946,36948],{"class":326,"line":33416},[324,36945,33425],{"class":867},[324,36947,913],{"class":863},[324,36949,33430],{"class":867},[324,36951,36952],{"class":326,"line":33422},[324,36953,33436],{"class":772},[324,36955,36956],{"class":326,"line":33433},[324,36957,33442],{"class":867},[324,36959,36960],{"class":326,"line":33439},[324,36961,33448],{"class":772},[324,36963,36964],{"class":326,"line":33445},[324,36965,33454],{"class":867},[324,36967,36968],{"class":326,"line":33451},[324,36969,33460],{"class":772},[324,36971,36972],{"class":326,"line":33457},[324,36973,33466],{"class":867},[324,36975,36976],{"class":326,"line":33463},[324,36977,33472],{"class":772},[324,36979,36980,36982,36984,36986,36988,36990,36992],{"class":326,"line":33469},[324,36981,33478],{"class":867},[324,36983,10206],{"class":863},[324,36985,33483],{"class":867},[324,36987,1319],{"class":863},[324,36989,33488],{"class":867},[324,36991,1056],{"class":916},[324,36993,874],{"class":867},[324,36995,36996],{"class":326,"line":33475},[324,36997,33498],{"class":772},[324,36999,37000,37002,37004,37006,37008],{"class":326,"line":33495},[324,37001,33504],{"class":867},[324,37003,10206],{"class":863},[324,37005,33509],{"class":867},[324,37007,3678],{"class":863},[324,37009,33514],{"class":867},[324,37011,37012],{"class":326,"line":33501},[324,37013,33520],{"class":772},[324,37015,37016,37018,37020,37022,37024],{"class":326,"line":33517},[324,37017,33526],{"class":867},[324,37019,10206],{"class":863},[324,37021,33488],{"class":867},[324,37023,1056],{"class":916},[324,37025,874],{"class":867},[324,37027,37028],{"class":326,"line":33523},[324,37029,33540],{"class":772},[324,37031,37032,37034,37036,37038,37040],{"class":326,"line":33537},[324,37033,4132],{"class":863},[324,37035,33548],{"class":867},[324,37037,26767],{"class":863},[324,37039,32328],{"class":916},[324,37041,33555],{"class":867},[324,37043,37044],{"class":326,"line":33543},[324,37045,33561],{"class":772},[324,37047,37048,37050,37052],{"class":326,"line":33558},[324,37049,33332],{"class":867},[324,37051,913],{"class":863},[324,37053,33337],{"class":867},[324,37055,37056],{"class":326,"line":33564},[324,37057,33576],{"class":772},[324,37059,37060,37062,37064],{"class":326,"line":33573},[324,37061,33347],{"class":867},[324,37063,913],{"class":863},[324,37065,33352],{"class":867},[324,37067,37068],{"class":326,"line":33579},[324,37069,33591],{"class":772},[324,37071,37072],{"class":326,"line":33588},[324,37073,33597],{"class":867},[324,37075,37076],{"class":326,"line":33594},[324,37077,37078],{"class":772},"            # 验证时不计算梯度以节省内存\u002F计算\n",[324,37080,37081,37083],{"class":326,"line":33600},[324,37082,33603],{"class":863},[324,37084,33606],{"class":867},[324,37086,37087],{"class":326,"line":33609},[324,37088,33612],{"class":772},[324,37090,37091,37094,37096],{"class":326,"line":33615},[324,37092,37093],{"class":867},"                output",[324,37095,913],{"class":863},[324,37097,33387],{"class":867},[324,37099,37100],{"class":326,"line":33626},[324,37101,33629],{"class":772},[324,37103,37104,37107,37109,37111,37113,37115,37117],{"class":326,"line":33632},[324,37105,37106],{"class":867},"                pre_lab",[324,37108,913],{"class":863},[324,37110,33404],{"class":867},[324,37112,33407],{"class":5945},[324,37114,913],{"class":863},[324,37116,1082],{"class":916},[324,37118,874],{"class":867},[324,37120,37121],{"class":326,"line":33651},[324,37122,33654],{"class":772},[324,37124,37125,37128,37130],{"class":326,"line":33657},[324,37126,37127],{"class":867},"                val_batch_loss",[324,37129,913],{"class":863},[324,37131,33430],{"class":867},[324,37133,37134],{"class":326,"line":33668},[324,37135,33671],{"class":772},[324,37137,37138,37141,37143,37146,37148,37150,37152],{"class":326,"line":33674},[324,37139,37140],{"class":867},"                val_loss",[324,37142,10206],{"class":863},[324,37144,37145],{"class":867},"val_batch_loss.item()",[324,37147,1319],{"class":863},[324,37149,33488],{"class":867},[324,37151,1056],{"class":916},[324,37153,874],{"class":867},[324,37155,37156,37159,37161,37163,37165],{"class":326,"line":33694},[324,37157,37158],{"class":867},"                val_corrects",[324,37160,10206],{"class":863},[324,37162,33509],{"class":867},[324,37164,3678],{"class":863},[324,37166,33514],{"class":867},[324,37168,37169],{"class":326,"line":33710},[324,37170,37171],{"class":772},"            # 当前用于验证的样本数量\n",[324,37173,37174,37177,37179,37181,37183],{"class":326,"line":33716},[324,37175,37176],{"class":867},"            val_num",[324,37178,10206],{"class":863},[324,37180,33488],{"class":867},[324,37182,1056],{"class":916},[324,37184,874],{"class":867},[324,37186,37187],{"class":326,"line":33730},[324,37188,33733],{"class":772},[324,37190,37191],{"class":326,"line":33736},[324,37192,33739],{"class":772},[324,37194,37195,37197,37199],{"class":326,"line":33742},[324,37196,33745],{"class":867},[324,37198,1448],{"class":863},[324,37200,33750],{"class":867},[324,37202,37203],{"class":326,"line":33753},[324,37204,33756],{"class":772},[324,37206,37207],{"class":326,"line":33759},[324,37208,33762],{"class":772},[324,37210,37211,37213,37215],{"class":326,"line":33765},[324,37212,33768],{"class":867},[324,37214,1448],{"class":863},[324,37216,33750],{"class":867},[324,37218,37219],{"class":326,"line":33775},[324,37220,33778],{"class":772},[324,37222,37223,37225,37227],{"class":326,"line":33781},[324,37224,33784],{"class":867},[324,37226,1448],{"class":863},[324,37228,33789],{"class":867},[324,37230,37231],{"class":326,"line":33792},[324,37232,33795],{"class":772},[324,37234,37235,37237,37239],{"class":326,"line":33798},[324,37236,33801],{"class":867},[324,37238,1448],{"class":863},[324,37240,33789],{"class":867},[324,37242,37243],{"class":326,"line":33808},[324,37244,488],{"emptyLinePlaceholder":487},[324,37246,37247],{"class":326,"line":33813},[324,37248,33816],{"class":772},[324,37250,37251,37253,37255,37257,37259,37261,37263,37265,37267,37269,37271,37273,37275,37277,37279,37281,37283,37285,37287,37289],{"class":326,"line":33819},[324,37252,33173],{"class":916},[324,37254,868],{"class":867},[324,37256,4321],{"class":738},[324,37258,33181],{"class":916},[324,37260,33830],{"class":738},[324,37262,1760],{"class":916},[324,37264,33835],{"class":863},[324,37266,1810],{"class":916},[324,37268,33840],{"class":738},[324,37270,1760],{"class":916},[324,37272,33835],{"class":863},[324,37274,1810],{"class":916},[324,37276,4321],{"class":738},[324,37278,33851],{"class":867},[324,37280,1396],{"class":863},[324,37282,1082],{"class":916},[324,37284,33858],{"class":867},[324,37286,1396],{"class":863},[324,37288,1082],{"class":916},[324,37290,33865],{"class":867},[324,37292,37293,37295,37297,37299,37301,37303,37305,37307,37309,37311,37313,37315,37317,37319,37321,37323,37325,37327,37329,37331],{"class":326,"line":33868},[324,37294,33173],{"class":916},[324,37296,868],{"class":867},[324,37298,4321],{"class":738},[324,37300,33181],{"class":916},[324,37302,33879],{"class":738},[324,37304,1760],{"class":916},[324,37306,33835],{"class":863},[324,37308,1810],{"class":916},[324,37310,33888],{"class":738},[324,37312,1760],{"class":916},[324,37314,33835],{"class":863},[324,37316,1810],{"class":916},[324,37318,4321],{"class":738},[324,37320,33899],{"class":867},[324,37322,1396],{"class":863},[324,37324,1082],{"class":916},[324,37326,33906],{"class":867},[324,37328,1396],{"class":863},[324,37330,1082],{"class":916},[324,37332,33865],{"class":867},[324,37334,37335],{"class":326,"line":33915},[324,37336,488],{"emptyLinePlaceholder":487},[324,37338,37339],{"class":326,"line":33920},[324,37340,33923],{"class":772},[324,37342,37343,37345,37347,37349,37351,37353,37355],{"class":326,"line":33926},[324,37344,3226],{"class":863},[324,37346,33931],{"class":867},[324,37348,1396],{"class":863},[324,37350,1082],{"class":916},[324,37352,1804],{"class":867},[324,37354,1824],{"class":863},[324,37356,33942],{"class":867},[324,37358,37359],{"class":326,"line":33945},[324,37360,33948],{"class":772},[324,37362,37363,37365,37367,37369,37371,37373,37375],{"class":326,"line":33951},[324,37364,33954],{"class":867},[324,37366,907],{"class":916},[324,37368,913],{"class":863},[324,37370,33961],{"class":867},[324,37372,1396],{"class":863},[324,37374,1082],{"class":916},[324,37376,33968],{"class":867},[324,37378,37379],{"class":326,"line":33971},[324,37380,33974],{"class":772},[324,37382,37383],{"class":326,"line":33977},[324,37384,33980],{"class":772},[324,37386,37387,37389,37391],{"class":326,"line":33983},[324,37388,33986],{"class":867},[324,37390,913],{"class":863},[324,37392,33036],{"class":867},[324,37394,37395],{"class":326,"line":33993},[324,37396,488],{"emptyLinePlaceholder":487},[324,37398,37399],{"class":326,"line":33998},[324,37400,34001],{"class":772},[324,37402,37403,37405,37407,37409,37411],{"class":326,"line":34004},[324,37404,34007],{"class":867},[324,37406,913],{"class":863},[324,37408,34012],{"class":867},[324,37410,1396],{"class":863},[324,37412,34017],{"class":867},[324,37414,37415,37417,37419,37421,37423,37425,37427,37429,37431,37433,37435,37437,37439,37441,37443,37445,37447,37449],{"class":326,"line":34020},[324,37416,33173],{"class":916},[324,37418,868],{"class":867},[324,37420,34027],{"class":738},[324,37422,1760],{"class":916},[324,37424,34032],{"class":863},[324,37426,1810],{"class":916},[324,37428,1408],{"class":738},[324,37430,1760],{"class":916},[324,37432,34032],{"class":863},[324,37434,1810],{"class":916},[324,37436,34045],{"class":738},[324,37438,34048],{"class":867},[324,37440,34051],{"class":863},[324,37442,1771],{"class":916},[324,37444,34056],{"class":867},[324,37446,1192],{"class":863},[324,37448,1771],{"class":916},[324,37450,31219],{"class":867},[324,37452,37453],{"class":326,"line":34065},[324,37454,37455],{"class":772},"    # 选择最优参数并保存\n",[324,37457,37458],{"class":326,"line":34071},[324,37459,37460],{"class":772},"    # 保存最佳模型权重字典\n",[324,37462,37463,37466,37468],{"class":326,"line":34077},[324,37464,37465],{"class":867},"    torch.save(best_model_wts,",[324,37467,34089],{"class":738},[324,37469,874],{"class":867},[324,37471,37472],{"class":326,"line":34083},[324,37473,34109],{"class":772},[324,37475,37476,37478,37480,37482,37484,37486],{"class":326,"line":34094},[324,37477,34115],{"class":867},[324,37479,913],{"class":863},[324,37481,34120],{"class":867},[324,37483,34123],{"class":5945},[324,37485,913],{"class":863},[324,37487,2277],{"class":867},[324,37489,37490,37492,37494,37496],{"class":326,"line":34100},[324,37491,34133],{"class":738},[324,37493,1723],{"class":867},[324,37495,34138],{"class":916},[324,37497,34141],{"class":867},[324,37499,37500,37502],{"class":326,"line":34106},[324,37501,34147],{"class":738},[324,37503,34150],{"class":867},[324,37505,37506,37508],{"class":326,"line":34112},[324,37507,34156],{"class":738},[324,37509,34159],{"class":867},[324,37511,37512,37514],{"class":326,"line":34130},[324,37513,34165],{"class":738},[324,37515,34168],{"class":867},[324,37517,37518,37520],{"class":326,"line":34144},[324,37519,34174],{"class":738},[324,37521,34177],{"class":867},[324,37523,37524],{"class":326,"line":34153},[324,37525,34183],{"class":867},[324,37527,37528],{"class":326,"line":34162},[324,37529,34189],{"class":772},[324,37531,37532,37534],{"class":326,"line":34171},[324,37533,4819],{"class":863},[324,37535,34197],{"class":867},[324,37537,37538],{"class":326,"line":34180},[324,37539,488],{"emptyLinePlaceholder":487},[324,37541,37542],{"class":326,"line":34186},[324,37543,34208],{"class":772},[324,37545,37546,37548,37550],{"class":326,"line":34192},[324,37547,32669],{"class":863},[324,37549,34216],{"class":734},[324,37551,34219],{"class":867},[324,37553,37554],{"class":326,"line":34200},[324,37555,34225],{"class":772},[324,37557,37558,37560,37562,37564,37566,37568,37570,37572],{"class":326,"line":34205},[324,37559,34231],{"class":867},[324,37561,32415],{"class":5945},[324,37563,913],{"class":863},[324,37565,868],{"class":867},[324,37567,1362],{"class":916},[324,37569,1242],{"class":867},[324,37571,1157],{"class":916},[324,37573,31219],{"class":867},[324,37575,37576],{"class":326,"line":34211},[324,37577,34251],{"class":772},[324,37579,37580],{"class":326,"line":34222},[324,37581,34257],{"class":772},[324,37583,37584],{"class":326,"line":34228},[324,37585,34263],{"class":772},[324,37587,37588,37590,37592,37594,37596,37598,37600],{"class":326,"line":34248},[324,37589,32449],{"class":867},[324,37591,1082],{"class":916},[324,37593,1242],{"class":867},[324,37595,944],{"class":916},[324,37597,1242],{"class":867},[324,37599,1082],{"class":916},[324,37601,874],{"class":867},[324,37603,37604],{"class":326,"line":34254},[324,37605,34286],{"class":772},[324,37607,37608],{"class":326,"line":34260},[324,37609,34292],{"class":772},[324,37611,37612],{"class":326,"line":34266},[324,37613,34298],{"class":772},[324,37615,37616],{"class":326,"line":34283},[324,37617,34304],{"class":772},[324,37619,37620],{"class":326,"line":34289},[324,37621,34310],{"class":772},[324,37623,37624,37626,37628,37630,37632,37634,37636,37638,37640],{"class":326,"line":34295},[324,37625,34316],{"class":867},[324,37627,34319],{"class":738},[324,37629,34322],{"class":867},[324,37631,34325],{"class":738},[324,37633,1242],{"class":867},[324,37635,34330],{"class":5945},[324,37637,913],{"class":863},[324,37639,34335],{"class":738},[324,37641,874],{"class":867},[324,37643,37644,37646,37648,37650,37652,37654,37656,37658,37660],{"class":326,"line":34301},[324,37645,34316],{"class":867},[324,37647,34319],{"class":738},[324,37649,34347],{"class":867},[324,37651,34350],{"class":738},[324,37653,1242],{"class":867},[324,37655,34330],{"class":5945},[324,37657,913],{"class":863},[324,37659,34359],{"class":738},[324,37661,874],{"class":867},[324,37663,37664],{"class":326,"line":34307},[324,37665,34367],{"class":772},[324,37667,37668],{"class":326,"line":34313},[324,37669,34373],{"class":867},[324,37671,37672],{"class":326,"line":34340},[324,37673,34379],{"class":772},[324,37675,37676,37678,37680],{"class":326,"line":34364},[324,37677,34385],{"class":867},[324,37679,34388],{"class":738},[324,37681,874],{"class":867},[324,37683,37684,37686,37688],{"class":326,"line":34370},[324,37685,34396],{"class":867},[324,37687,34399],{"class":738},[324,37689,874],{"class":867},[324,37691,37692],{"class":326,"line":34376},[324,37693,34407],{"class":772},[324,37695,37696,37698,37700,37702,37704,37706,37708],{"class":326,"line":34382},[324,37697,32449],{"class":867},[324,37699,1082],{"class":916},[324,37701,1242],{"class":867},[324,37703,944],{"class":916},[324,37705,1242],{"class":867},[324,37707,944],{"class":916},[324,37709,874],{"class":867},[324,37711,37712,37714,37716,37718,37720,37722,37724,37726,37728],{"class":326,"line":34393},[324,37713,34316],{"class":867},[324,37715,34319],{"class":738},[324,37717,34434],{"class":867},[324,37719,34325],{"class":738},[324,37721,1242],{"class":867},[324,37723,34330],{"class":5945},[324,37725,913],{"class":863},[324,37727,34445],{"class":738},[324,37729,874],{"class":867},[324,37731,37732,37734,37736,37738,37740,37742,37744,37746,37748],{"class":326,"line":34404},[324,37733,34316],{"class":867},[324,37735,34319],{"class":738},[324,37737,34457],{"class":867},[324,37739,34350],{"class":738},[324,37741,1242],{"class":867},[324,37743,34330],{"class":5945},[324,37745,913],{"class":863},[324,37747,34468],{"class":738},[324,37749,874],{"class":867},[324,37751,37752],{"class":326,"line":34410},[324,37753,34476],{"class":772},[324,37755,37756],{"class":326,"line":34427},[324,37757,34373],{"class":867},[324,37759,37760,37762,37764],{"class":326,"line":34450},[324,37761,34385],{"class":867},[324,37763,34319],{"class":738},[324,37765,874],{"class":867},[324,37767,37768,37770,37772],{"class":326,"line":34473},[324,37769,34396],{"class":867},[324,37771,34498],{"class":738},[324,37773,874],{"class":867},[324,37775,37776],{"class":326,"line":34479},[324,37777,34506],{"class":867},[324,37779,37780],{"class":326,"line":34484},[324,37781,488],{"emptyLinePlaceholder":487},[324,37783,37784],{"class":326,"line":34493},[324,37785,34517],{"class":772},[324,37787,37788,37790,37792,37794,37796],{"class":326,"line":34503},[324,37789,2262],{"class":863},[324,37791,31942],{"class":916},[324,37793,3678],{"class":863},[324,37795,31947],{"class":738},[324,37797,4468],{"class":867},[324,37799,37800],{"class":326,"line":34509},[324,37801,34536],{"class":772},[324,37803,37804,37807,37809],{"class":326,"line":34514},[324,37805,37806],{"class":867},"    AlexNet",[324,37808,913],{"class":863},[324,37810,37811],{"class":867},"AlexNet()\n",[324,37813,37814,37816,37818],{"class":326,"line":34520},[324,37815,34553],{"class":867},[324,37817,913],{"class":863},[324,37819,34558],{"class":867},[324,37821,37822,37824,37826,37829,37831,37833,37835],{"class":326,"line":34533},[324,37823,34115],{"class":867},[324,37825,913],{"class":863},[324,37827,37828],{"class":867},"train_model_process(AlexNet,train_dataloader,val_dataloader,",[324,37830,34571],{"class":5945},[324,37832,913],{"class":863},[324,37834,1564],{"class":916},[324,37836,874],{"class":867},[324,37838,37839],{"class":326,"line":34539},[324,37840,34583],{"class":867},[192,37842,37843],{"start":338},[195,37844,34596],{},[316,37846,37848],{"className":31100,"code":37847,"language":31102,"meta":50,"style":50},"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",[269,37849,37850,37856,37866,37876,37886,37890,37900,37910,37921,37925,37929,37933,37941,37957,37967,37983,37993,38007,38011,38021,38031,38041,38047,38051,38055,38063,38067,38083,38091,38095,38099,38107,38115,38119,38123,38127,38131,38137,38141,38151,38159,38167,38171,38175,38179,38187,38191,38207,38211,38215,38219,38231,38235,38247,38251,38255,38267,38271,38281,38285,38289,38301,38305,38313,38317,38321,38329,38333,38341,38345,38349,38353,38357,38361,38377,38385,38389,38393,38441,38447,38451,38461,38469,38477,38481,38485,38489,38493,38501,38505,38521,38525,38533,38541],{"__ignoreMap":50},[324,37851,37852,37854],{"class":326,"line":327},[324,37853,31114],{"class":863},[324,37855,31117],{"class":867},[324,37857,37858,37860,37862,37864],{"class":326,"line":203},[324,37859,31114],{"class":863},[324,37861,32137],{"class":867},[324,37863,32105],{"class":863},[324,37865,32142],{"class":867},[324,37867,37868,37870,37872,37874],{"class":326,"line":338},[324,37869,31459],{"class":863},[324,37871,34624],{"class":867},[324,37873,31114],{"class":863},[324,37875,34629],{"class":867},[324,37877,37878,37880,37882,37884],{"class":326,"line":344},[324,37879,31459],{"class":863},[324,37881,32120],{"class":867},[324,37883,31114],{"class":863},[324,37885,32125],{"class":867},[324,37887,37888],{"class":326,"line":484},[324,37889,34644],{"class":772},[324,37891,37892,37894,37896,37898],{"class":326,"line":491},[324,37893,31459],{"class":863},[324,37895,32090],{"class":867},[324,37897,31114],{"class":863},[324,37899,32095],{"class":867},[324,37901,37902,37904,37906,37908],{"class":326,"line":496},[324,37903,31459],{"class":863},[324,37905,32636],{"class":867},[324,37907,31114],{"class":863},[324,37909,36279],{"class":867},[324,37911,37912,37914,37917,37919],{"class":326,"line":502},[324,37913,31459],{"class":863},[324,37915,37916],{"class":867}," 练习.AlexNet.model ",[324,37918,31114],{"class":863},[324,37920,36279],{"class":867},[324,37922,37923],{"class":326,"line":508},[324,37924,488],{"emptyLinePlaceholder":487},[324,37926,37927],{"class":326,"line":514},[324,37928,488],{"emptyLinePlaceholder":487},[324,37930,37931],{"class":326,"line":2343},[324,37932,34673],{"class":772},[324,37934,37935,37937,37939],{"class":326,"line":2348},[324,37936,32669],{"class":863},[324,37938,34680],{"class":734},[324,37940,32675],{"class":867},[324,37942,37943,37945,37947,37949,37951,37953,37955],{"class":326,"line":2354},[324,37944,34687],{"class":867},[324,37946,913],{"class":863},[324,37948,32177],{"class":867},[324,37950,32180],{"class":5945},[324,37952,913],{"class":863},[324,37954,32185],{"class":738},[324,37956,32188],{"class":867},[324,37958,37959,37961,37963,37965],{"class":326,"line":2359},[324,37960,34704],{"class":5945},[324,37962,913],{"class":863},[324,37964,34709],{"class":916},[324,37966,32188],{"class":867},[324,37968,37969,37971,37973,37975,37977,37979,37981],{"class":326,"line":2373},[324,37970,34716],{"class":5945},[324,37972,913],{"class":863},[324,37974,32215],{"class":867},[324,37976,32218],{"class":5945},[324,37978,913],{"class":863},[324,37980,36171],{"class":916},[324,37982,32226],{"class":867},[324,37984,37985,37987,37989,37991],{"class":326,"line":2378},[324,37986,34733],{"class":5945},[324,37988,913],{"class":863},[324,37990,32198],{"class":916},[324,37992,874],{"class":867},[324,37994,37995,37997,37999,38001,38003,38005],{"class":326,"line":2384},[324,37996,34744],{"class":867},[324,37998,913],{"class":863},[324,38000,32256],{"class":867},[324,38002,32259],{"class":5945},[324,38004,913],{"class":863},[324,38006,34755],{"class":867},[324,38008,38009],{"class":326,"line":2405},[324,38010,34760],{"class":772},[324,38012,38013,38015,38017,38019],{"class":326,"line":2410},[324,38014,34765],{"class":5945},[324,38016,913],{"class":863},[324,38018,1082],{"class":916},[324,38020,32188],{"class":867},[324,38022,38023,38025,38027,38029],{"class":326,"line":2424},[324,38024,34776],{"class":5945},[324,38026,913],{"class":863},[324,38028,32198],{"class":916},[324,38030,32188],{"class":867},[324,38032,38033,38035,38037,38039],{"class":326,"line":2429},[324,38034,34787],{"class":5945},[324,38036,913],{"class":863},[324,38038,1056],{"class":916},[324,38040,874],{"class":867},[324,38042,38043,38045],{"class":326,"line":2458},[324,38044,4819],{"class":863},[324,38046,34800],{"class":867},[324,38048,38049],{"class":326,"line":2463},[324,38050,488],{"emptyLinePlaceholder":487},[324,38052,38053],{"class":326,"line":2480},[324,38054,34809],{"class":772},[324,38056,38057,38059,38061],{"class":326,"line":2485},[324,38058,32669],{"class":863},[324,38060,34816],{"class":734},[324,38062,34819],{"class":867},[324,38064,38065],{"class":326,"line":2490},[324,38066,34824],{"class":772},[324,38068,38069,38071,38073,38075,38077,38079,38081],{"class":326,"line":2495},[324,38070,31959],{"class":867},[324,38072,913],{"class":863},[324,38074,31966],{"class":738},[324,38076,2435],{"class":863},[324,38078,31971],{"class":867},[324,38080,2432],{"class":863},[324,38082,34841],{"class":738},[324,38084,38085,38087,38089],{"class":326,"line":2509},[324,38086,32011],{"class":867},[324,38088,913],{"class":863},[324,38090,33011],{"class":867},[324,38092,38093],{"class":326,"line":2514},[324,38094,488],{"emptyLinePlaceholder":487},[324,38096,38097],{"class":326,"line":3306},[324,38098,34858],{"class":772},[324,38100,38101,38103,38105],{"class":326,"line":3320},[324,38102,34863],{"class":867},[324,38104,913],{"class":863},[324,38106,33064],{"class":916},[324,38108,38109,38111,38113],{"class":326,"line":3328},[324,38110,34872],{"class":867},[324,38112,913],{"class":863},[324,38114,3814],{"class":916},[324,38116,38117],{"class":326,"line":3333},[324,38118,488],{"emptyLinePlaceholder":487},[324,38120,38121],{"class":326,"line":3339},[324,38122,34885],{"class":772},[324,38124,38125],{"class":326,"line":3345},[324,38126,34890],{"class":772},[324,38128,38129],{"class":326,"line":3350},[324,38130,34895],{"class":772},[324,38132,38133,38135],{"class":326,"line":8677},[324,38134,34900],{"class":863},[324,38136,33606],{"class":867},[324,38138,38139],{"class":326,"line":8701},[324,38140,34907],{"class":772},[324,38142,38143,38145,38147,38149],{"class":326,"line":8706},[324,38144,4132],{"class":863},[324,38146,34914],{"class":867},[324,38148,26767],{"class":863},[324,38150,34919],{"class":867},[324,38152,38153,38155,38157],{"class":326,"line":8712},[324,38154,34924],{"class":867},[324,38156,913],{"class":863},[324,38158,34929],{"class":867},[324,38160,38161,38163,38165],{"class":326,"line":8739},[324,38162,34934],{"class":867},[324,38164,913],{"class":863},[324,38166,34939],{"class":867},[324,38168,38169],{"class":326,"line":8744},[324,38170,34944],{"class":772},[324,38172,38173],{"class":326,"line":8750},[324,38174,33597],{"class":867},[324,38176,38177],{"class":326,"line":8762},[324,38178,34953],{"class":772},[324,38180,38181,38183,38185],{"class":326,"line":8774},[324,38182,33382],{"class":867},[324,38184,913],{"class":863},[324,38186,34962],{"class":867},[324,38188,38189],{"class":326,"line":8786},[324,38190,34967],{"class":772},[324,38192,38193,38195,38197,38199,38201,38203,38205],{"class":326,"line":10445},[324,38194,33399],{"class":867},[324,38196,913],{"class":863},[324,38198,33404],{"class":867},[324,38200,33407],{"class":5945},[324,38202,913],{"class":863},[324,38204,1082],{"class":916},[324,38206,874],{"class":867},[324,38208,38209],{"class":326,"line":10470},[324,38210,34988],{"class":772},[324,38212,38213],{"class":326,"line":10493},[324,38214,34993],{"class":772},[324,38216,38217],{"class":326,"line":10517},[324,38218,34998],{"class":772},[324,38220,38221,38223,38225,38227,38229],{"class":326,"line":10522},[324,38222,35003],{"class":867},[324,38224,10206],{"class":863},[324,38226,33509],{"class":867},[324,38228,3678],{"class":863},[324,38230,35012],{"class":867},[324,38232,38233],{"class":326,"line":10527},[324,38234,35017],{"class":772},[324,38236,38237,38239,38241,38243,38245],{"class":326,"line":10532},[324,38238,35022],{"class":867},[324,38240,10206],{"class":863},[324,38242,35027],{"class":867},[324,38244,1056],{"class":916},[324,38246,874],{"class":867},[324,38248,38249],{"class":326,"line":10541},[324,38250,488],{"emptyLinePlaceholder":487},[324,38252,38253],{"class":326,"line":10546},[324,38254,35040],{"class":772},[324,38256,38257,38259,38261,38263,38265],{"class":326,"line":10552},[324,38258,35045],{"class":867},[324,38260,913],{"class":863},[324,38262,35050],{"class":867},[324,38264,1448],{"class":863},[324,38266,35055],{"class":867},[324,38268,38269],{"class":326,"line":10573},[324,38270,35060],{"class":772},[324,38272,38273,38275,38277,38279],{"class":326,"line":10579},[324,38274,33173],{"class":916},[324,38276,868],{"class":867},[324,38278,35069],{"class":738},[324,38280,35072],{"class":867},[324,38282,38283],{"class":326,"line":10593},[324,38284,488],{"emptyLinePlaceholder":487},[324,38286,38287],{"class":326,"line":10599},[324,38288,35081],{"class":772},[324,38290,38291,38293,38295,38297,38299],{"class":326,"line":10626},[324,38292,2262],{"class":863},[324,38294,31942],{"class":916},[324,38296,3678],{"class":863},[324,38298,31947],{"class":738},[324,38300,4468],{"class":867},[324,38302,38303],{"class":326,"line":10635},[324,38304,35098],{"class":772},[324,38306,38307,38309,38311],{"class":326,"line":10641},[324,38308,32011],{"class":867},[324,38310,913],{"class":863},[324,38312,37811],{"class":867},[324,38314,38315],{"class":326,"line":10649},[324,38316,35111],{"class":772},[324,38318,38319],{"class":326,"line":10654},[324,38320,35116],{"class":772},[324,38322,38323,38325,38327],{"class":326,"line":17333},[324,38324,35121],{"class":867},[324,38326,35124],{"class":738},[324,38328,31219],{"class":867},[324,38330,38331],{"class":326,"line":17339},[324,38332,35131],{"class":772},[324,38334,38335,38337,38339],{"class":326,"line":17362},[324,38336,34744],{"class":867},[324,38338,913],{"class":863},[324,38340,35140],{"class":867},[324,38342,38343],{"class":326,"line":17368},[324,38344,35145],{"class":772},[324,38346,38347],{"class":326,"line":17391},[324,38348,35150],{"class":867},[324,38350,38351],{"class":326,"line":17405},[324,38352,488],{"emptyLinePlaceholder":487},[324,38354,38355],{"class":326,"line":17425},[324,38356,35159],{"class":772},[324,38358,38359],{"class":326,"line":17431},[324,38360,35164],{"class":772},[324,38362,38363,38365,38367,38369,38371,38373,38375],{"class":326,"line":17442},[324,38364,31959],{"class":867},[324,38366,913],{"class":863},[324,38368,31966],{"class":738},[324,38370,2435],{"class":863},[324,38372,31971],{"class":867},[324,38374,2432],{"class":863},[324,38376,34841],{"class":738},[324,38378,38379,38381,38383],{"class":326,"line":17465},[324,38380,32011],{"class":867},[324,38382,913],{"class":863},[324,38384,33011],{"class":867},[324,38386,38387],{"class":326,"line":17487},[324,38388,35193],{"class":772},[324,38390,38391],{"class":326,"line":17492},[324,38392,35198],{"class":772},[324,38394,38395,38397,38399,38401,38403,38405,38407,38409,38411,38413,38415,38417,38419,38421,38423,38425,38427,38429,38431,38433,38435,38437,38439],{"class":326,"line":17498},[324,38396,35203],{"class":867},[324,38398,913],{"class":863},[324,38400,1754],{"class":867},[324,38402,35210],{"class":738},[324,38404,1242],{"class":867},[324,38406,35215],{"class":738},[324,38408,1242],{"class":867},[324,38410,35220],{"class":738},[324,38412,1242],{"class":867},[324,38414,35225],{"class":738},[324,38416,1242],{"class":867},[324,38418,35230],{"class":738},[324,38420,1242],{"class":867},[324,38422,35235],{"class":738},[324,38424,1242],{"class":867},[324,38426,35240],{"class":738},[324,38428,1242],{"class":867},[324,38430,35245],{"class":738},[324,38432,1242],{"class":867},[324,38434,35250],{"class":738},[324,38436,1242],{"class":867},[324,38438,35255],{"class":738},[324,38440,33968],{"class":867},[324,38442,38443,38445],{"class":326,"line":17512},[324,38444,34900],{"class":863},[324,38446,33606],{"class":867},[324,38448,38449],{"class":326,"line":17525},[324,38450,35268],{"class":772},[324,38452,38453,38455,38457,38459],{"class":326,"line":17530},[324,38454,4132],{"class":863},[324,38456,35275],{"class":867},[324,38458,26767],{"class":863},[324,38460,34919],{"class":867},[324,38462,38463,38465,38467],{"class":326,"line":17544},[324,38464,33332],{"class":867},[324,38466,913],{"class":863},[324,38468,33337],{"class":867},[324,38470,38471,38473,38475],{"class":326,"line":17549},[324,38472,33347],{"class":867},[324,38474,913],{"class":863},[324,38476,33352],{"class":867},[324,38478,38479],{"class":326,"line":17555},[324,38480,488],{"emptyLinePlaceholder":487},[324,38482,38483],{"class":326,"line":17560},[324,38484,35304],{"class":772},[324,38486,38487],{"class":326,"line":17574},[324,38488,33597],{"class":867},[324,38490,38491],{"class":326,"line":17579},[324,38492,35313],{"class":772},[324,38494,38495,38497,38499],{"class":326,"line":17584},[324,38496,33382],{"class":867},[324,38498,913],{"class":863},[324,38500,33387],{"class":867},[324,38502,38503],{"class":326,"line":17598},[324,38504,35326],{"class":772},[324,38506,38507,38509,38511,38513,38515,38517,38519],{"class":326,"line":17610},[324,38508,33399],{"class":867},[324,38510,913],{"class":863},[324,38512,33404],{"class":867},[324,38514,33407],{"class":5945},[324,38516,913],{"class":863},[324,38518,1082],{"class":916},[324,38520,874],{"class":867},[324,38522,38523],{"class":326,"line":17615},[324,38524,35347],{"class":772},[324,38526,38527,38529,38531],{"class":326,"line":17628},[324,38528,35352],{"class":867},[324,38530,913],{"class":863},[324,38532,35357],{"class":867},[324,38534,38535,38537,38539],{"class":326,"line":17633},[324,38536,35362],{"class":867},[324,38538,913],{"class":863},[324,38540,35367],{"class":867},[324,38542,38543,38545,38547,38549,38551,38553,38555,38557],{"class":326,"line":17638},[324,38544,35372],{"class":916},[324,38546,868],{"class":867},[324,38548,35377],{"class":738},[324,38550,35380],{"class":867},[324,38552,35383],{"class":738},[324,38554,1242],{"class":867},[324,38556,35388],{"class":738},[324,38558,35391],{"class":867},[35,38560,38562],{"id":38561},"_22vgg","2.2.VGG",[151,38564,38566],{"id":38565},"_221原理","2.2.1.原理",[19,38568,38569],{},[48,38570],{"alt":50,"src":38571},"\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",[19,38573,38574],{},[48,38575],{"alt":50,"src":38576},"\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",[19,38578,38579],{},[48,38580],{"alt":50,"src":38581},"\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",[19,38583,38584],{},"参数详细描述：",[19,38586,38587],{},[48,38588],{"alt":50,"src":38589},"\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",[19,38591,38592],{},[48,38593],{"alt":50,"src":38594},"\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",[19,38596,38597],{},[48,38598],{"alt":50,"src":38599},"\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",[19,38601,38602],{},[48,38603],{"alt":50,"src":38604},"\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",[19,38606,38607],{},[48,38608],{"alt":50,"src":38609},"\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",[151,38611,38613],{"id":38612},"_222代码实现","2.2.2.代码实现",[192,38615,38616],{},[195,38617,38618],{},"网络搭建",[316,38620,38622],{"className":31100,"code":38621,"language":31102,"meta":50,"style":50},"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",[269,38623,38624,38630,38642,38652,38662,38666,38683,38691,38710,38715,38720,38732,38770,38775,38811,38815,38844,38849,38854,38865,38901,38905,38941,38945,38973,38977,38982,38993,39029,39033,39069,39073,39109,39113,39141,39145,39150,39161,39198,39202,39238,39242,39278,39282,39310,39314,39319,39330,39366,39370,39406,39410,39446,39450,39478,39482,39487,39498,39503,39508,39513,39534,39538,39550,39554,39566,39570,39574,39579,39584,39599,39604,39614,39619,39634,39639,39658,39663,39672,39677,39687,39692,39697,39711,39716,39730,39738,39742,39746,39754,39765,39776,39787,39798,39809,39820,39826,39830,39835,39848,39868,39874,39883],{"__ignoreMap":50},[324,38625,38626,38628],{"class":326,"line":327},[324,38627,31114],{"class":863},[324,38629,31117],{"class":867},[324,38631,38632,38634,38637,38639],{"class":326,"line":203},[324,38633,31459],{"class":863},[324,38635,38636],{"class":867}," sympy.core.sympify ",[324,38638,31114],{"class":863},[324,38640,38641],{"class":867}," kernS\n",[324,38643,38644,38646,38648,38650],{"class":326,"line":338},[324,38645,31459],{"class":863},[324,38647,31462],{"class":867},[324,38649,31114],{"class":863},[324,38651,31467],{"class":867},[324,38653,38654,38656,38658,38660],{"class":326,"line":344},[324,38655,31459],{"class":863},[324,38657,31479],{"class":867},[324,38659,31114],{"class":863},[324,38661,31484],{"class":867},[324,38663,38664],{"class":326,"line":484},[324,38665,488],{"emptyLinePlaceholder":487},[324,38667,38668,38670,38673,38675,38677,38679,38681],{"class":326,"line":491},[324,38669,15423],{"class":863},[324,38671,38672],{"class":734}," VGG16",[324,38674,868],{"class":867},[324,38676,31500],{"class":734},[324,38678,1422],{"class":867},[324,38680,31505],{"class":734},[324,38682,31508],{"class":867},[324,38684,38685,38687,38689],{"class":326,"line":496},[324,38686,31523],{"class":863},[324,38688,31526],{"class":916},[324,38690,31529],{"class":867},[324,38692,38693,38695,38697,38700,38702,38704,38706,38708],{"class":326,"line":502},[324,38694,31539],{"class":916},[324,38696,868],{"class":867},[324,38698,38699],{"class":916},"VGG16",[324,38701,13164],{"class":867},[324,38703,31545],{"class":916},[324,38705,31548],{"class":867},[324,38707,31551],{"class":916},[324,38709,2706],{"class":867},[324,38711,38712],{"class":326,"line":508},[324,38713,38714],{"class":772},"        # 按照块来进行搭建神经网络层,按照序列来写\n",[324,38716,38717],{"class":326,"line":514},[324,38718,38719],{"class":772},"        # 这里用的是灰度图\n",[324,38721,38722,38724,38727,38729],{"class":326,"line":2343},[324,38723,31567],{"class":916},[324,38725,38726],{"class":867},".block1",[324,38728,913],{"class":863},[324,38730,38731],{"class":867},"nn.Sequential(\n",[324,38733,38734,38737,38739,38741,38743,38745,38747,38749,38751,38753,38755,38757,38759,38761,38763,38765,38767],{"class":326,"line":2348},[324,38735,38736],{"class":867},"            nn.Conv2d(",[324,38738,31578],{"class":5945},[324,38740,913],{"class":863},[324,38742,1082],{"class":916},[324,38744,1242],{"class":867},[324,38746,31587],{"class":5945},[324,38748,913],{"class":863},[324,38750,1068],{"class":916},[324,38752,1242],{"class":867},[324,38754,31596],{"class":5945},[324,38756,913],{"class":863},[324,38758,938],{"class":916},[324,38760,1242],{"class":867},[324,38762,31605],{"class":5945},[324,38764,913],{"class":863},[324,38766,1082],{"class":916},[324,38768,38769],{"class":867},"),\n",[324,38771,38772],{"class":326,"line":2354},[324,38773,38774],{"class":867},"            nn.ReLU(),\n",[324,38776,38777,38779,38781,38783,38785,38787,38789,38791,38793,38795,38797,38799,38801,38803,38805,38807,38809],{"class":326,"line":2359},[324,38778,38736],{"class":867},[324,38780,31578],{"class":5945},[324,38782,913],{"class":863},[324,38784,1068],{"class":916},[324,38786,1242],{"class":867},[324,38788,31587],{"class":5945},[324,38790,913],{"class":863},[324,38792,1068],{"class":916},[324,38794,1242],{"class":867},[324,38796,31596],{"class":5945},[324,38798,913],{"class":863},[324,38800,938],{"class":916},[324,38802,1242],{"class":867},[324,38804,31605],{"class":5945},[324,38806,913],{"class":863},[324,38808,1082],{"class":916},[324,38810,38769],{"class":867},[324,38812,38813],{"class":326,"line":2373},[324,38814,38774],{"class":867},[324,38816,38817,38820,38822,38824,38826,38828,38830,38832,38834,38836,38838,38840,38842],{"class":326,"line":2378},[324,38818,38819],{"class":867},"            nn.MaxPool2d(",[324,38821,31596],{"class":5945},[324,38823,913],{"class":863},[324,38825,944],{"class":916},[324,38827,1242],{"class":867},[324,38829,31651],{"class":5945},[324,38831,913],{"class":863},[324,38833,944],{"class":916},[324,38835,1242],{"class":867},[324,38837,31605],{"class":5945},[324,38839,913],{"class":863},[324,38841,1056],{"class":916},[324,38843,874],{"class":867},[324,38845,38846],{"class":326,"line":2384},[324,38847,38848],{"class":867},"        )\n",[324,38850,38851],{"class":326,"line":2405},[324,38852,38853],{"class":772},"        # 第二层\n",[324,38855,38856,38858,38861,38863],{"class":326,"line":2410},[324,38857,31567],{"class":916},[324,38859,38860],{"class":867},".block2",[324,38862,913],{"class":863},[324,38864,38731],{"class":867},[324,38866,38867,38869,38871,38873,38875,38877,38879,38881,38883,38885,38887,38889,38891,38893,38895,38897,38899],{"class":326,"line":2424},[324,38868,38736],{"class":867},[324,38870,31578],{"class":5945},[324,38872,913],{"class":863},[324,38874,1068],{"class":916},[324,38876,1242],{"class":867},[324,38878,31587],{"class":5945},[324,38880,913],{"class":863},[324,38882,32792],{"class":916},[324,38884,1242],{"class":867},[324,38886,31596],{"class":5945},[324,38888,913],{"class":863},[324,38890,938],{"class":916},[324,38892,1242],{"class":867},[324,38894,31605],{"class":5945},[324,38896,913],{"class":863},[324,38898,1082],{"class":916},[324,38900,38769],{"class":867},[324,38902,38903],{"class":326,"line":2429},[324,38904,38774],{"class":867},[324,38906,38907,38909,38911,38913,38915,38917,38919,38921,38923,38925,38927,38929,38931,38933,38935,38937,38939],{"class":326,"line":2458},[324,38908,38736],{"class":867},[324,38910,31578],{"class":5945},[324,38912,913],{"class":863},[324,38914,32792],{"class":916},[324,38916,1242],{"class":867},[324,38918,31587],{"class":5945},[324,38920,913],{"class":863},[324,38922,32792],{"class":916},[324,38924,1242],{"class":867},[324,38926,31596],{"class":5945},[324,38928,913],{"class":863},[324,38930,938],{"class":916},[324,38932,1242],{"class":867},[324,38934,31605],{"class":5945},[324,38936,913],{"class":863},[324,38938,1082],{"class":916},[324,38940,38769],{"class":867},[324,38942,38943],{"class":326,"line":2463},[324,38944,38774],{"class":867},[324,38946,38947,38949,38951,38953,38955,38957,38959,38961,38963,38965,38967,38969,38971],{"class":326,"line":2480},[324,38948,38819],{"class":867},[324,38950,31596],{"class":5945},[324,38952,913],{"class":863},[324,38954,944],{"class":916},[324,38956,1242],{"class":867},[324,38958,31651],{"class":5945},[324,38960,913],{"class":863},[324,38962,944],{"class":916},[324,38964,1242],{"class":867},[324,38966,31605],{"class":5945},[324,38968,913],{"class":863},[324,38970,1056],{"class":916},[324,38972,874],{"class":867},[324,38974,38975],{"class":326,"line":2485},[324,38976,38848],{"class":867},[324,38978,38979],{"class":326,"line":2490},[324,38980,38981],{"class":772},"        # 第三层\n",[324,38983,38984,38986,38989,38991],{"class":326,"line":2495},[324,38985,31567],{"class":916},[324,38987,38988],{"class":867},".block3",[324,38990,913],{"class":863},[324,38992,38731],{"class":867},[324,38994,38995,38997,38999,39001,39003,39005,39007,39009,39011,39013,39015,39017,39019,39021,39023,39025,39027],{"class":326,"line":2509},[324,38996,38736],{"class":867},[324,38998,31578],{"class":5945},[324,39000,913],{"class":863},[324,39002,32792],{"class":916},[324,39004,1242],{"class":867},[324,39006,31587],{"class":5945},[324,39008,913],{"class":863},[324,39010,35592],{"class":916},[324,39012,1242],{"class":867},[324,39014,31596],{"class":5945},[324,39016,913],{"class":863},[324,39018,938],{"class":916},[324,39020,1242],{"class":867},[324,39022,31605],{"class":5945},[324,39024,913],{"class":863},[324,39026,1082],{"class":916},[324,39028,38769],{"class":867},[324,39030,39031],{"class":326,"line":2514},[324,39032,38774],{"class":867},[324,39034,39035,39037,39039,39041,39043,39045,39047,39049,39051,39053,39055,39057,39059,39061,39063,39065,39067],{"class":326,"line":3306},[324,39036,38736],{"class":867},[324,39038,31578],{"class":5945},[324,39040,913],{"class":863},[324,39042,35592],{"class":916},[324,39044,1242],{"class":867},[324,39046,31587],{"class":5945},[324,39048,913],{"class":863},[324,39050,35592],{"class":916},[324,39052,1242],{"class":867},[324,39054,31596],{"class":5945},[324,39056,913],{"class":863},[324,39058,938],{"class":916},[324,39060,1242],{"class":867},[324,39062,31605],{"class":5945},[324,39064,913],{"class":863},[324,39066,1082],{"class":916},[324,39068,38769],{"class":867},[324,39070,39071],{"class":326,"line":3320},[324,39072,38774],{"class":867},[324,39074,39075,39077,39079,39081,39083,39085,39087,39089,39091,39093,39095,39097,39099,39101,39103,39105,39107],{"class":326,"line":3328},[324,39076,38736],{"class":867},[324,39078,31578],{"class":5945},[324,39080,913],{"class":863},[324,39082,35592],{"class":916},[324,39084,1242],{"class":867},[324,39086,31587],{"class":5945},[324,39088,913],{"class":863},[324,39090,35592],{"class":916},[324,39092,1242],{"class":867},[324,39094,31596],{"class":5945},[324,39096,913],{"class":863},[324,39098,938],{"class":916},[324,39100,1242],{"class":867},[324,39102,31605],{"class":5945},[324,39104,913],{"class":863},[324,39106,1082],{"class":916},[324,39108,38769],{"class":867},[324,39110,39111],{"class":326,"line":3333},[324,39112,38774],{"class":867},[324,39114,39115,39117,39119,39121,39123,39125,39127,39129,39131,39133,39135,39137,39139],{"class":326,"line":3339},[324,39116,38819],{"class":867},[324,39118,31596],{"class":5945},[324,39120,913],{"class":863},[324,39122,944],{"class":916},[324,39124,1242],{"class":867},[324,39126,31651],{"class":5945},[324,39128,913],{"class":863},[324,39130,944],{"class":916},[324,39132,1242],{"class":867},[324,39134,31605],{"class":5945},[324,39136,913],{"class":863},[324,39138,1056],{"class":916},[324,39140,874],{"class":867},[324,39142,39143],{"class":326,"line":3345},[324,39144,38848],{"class":867},[324,39146,39147],{"class":326,"line":3350},[324,39148,39149],{"class":772},"        # 第四层\n",[324,39151,39152,39154,39157,39159],{"class":326,"line":8677},[324,39153,31567],{"class":916},[324,39155,39156],{"class":867},".block4",[324,39158,913],{"class":863},[324,39160,38731],{"class":867},[324,39162,39163,39165,39167,39169,39171,39173,39175,39177,39180,39182,39184,39186,39188,39190,39192,39194,39196],{"class":326,"line":8701},[324,39164,38736],{"class":867},[324,39166,31578],{"class":5945},[324,39168,913],{"class":863},[324,39170,35592],{"class":916},[324,39172,1242],{"class":867},[324,39174,31587],{"class":5945},[324,39176,913],{"class":863},[324,39178,39179],{"class":916},"512",[324,39181,1242],{"class":867},[324,39183,31596],{"class":5945},[324,39185,913],{"class":863},[324,39187,938],{"class":916},[324,39189,1242],{"class":867},[324,39191,31605],{"class":5945},[324,39193,913],{"class":863},[324,39195,1082],{"class":916},[324,39197,38769],{"class":867},[324,39199,39200],{"class":326,"line":8706},[324,39201,38774],{"class":867},[324,39203,39204,39206,39208,39210,39212,39214,39216,39218,39220,39222,39224,39226,39228,39230,39232,39234,39236],{"class":326,"line":8712},[324,39205,38736],{"class":867},[324,39207,31578],{"class":5945},[324,39209,913],{"class":863},[324,39211,39179],{"class":916},[324,39213,1242],{"class":867},[324,39215,31587],{"class":5945},[324,39217,913],{"class":863},[324,39219,39179],{"class":916},[324,39221,1242],{"class":867},[324,39223,31596],{"class":5945},[324,39225,913],{"class":863},[324,39227,938],{"class":916},[324,39229,1242],{"class":867},[324,39231,31605],{"class":5945},[324,39233,913],{"class":863},[324,39235,1082],{"class":916},[324,39237,38769],{"class":867},[324,39239,39240],{"class":326,"line":8739},[324,39241,38774],{"class":867},[324,39243,39244,39246,39248,39250,39252,39254,39256,39258,39260,39262,39264,39266,39268,39270,39272,39274,39276],{"class":326,"line":8744},[324,39245,38736],{"class":867},[324,39247,31578],{"class":5945},[324,39249,913],{"class":863},[324,39251,39179],{"class":916},[324,39253,1242],{"class":867},[324,39255,31587],{"class":5945},[324,39257,913],{"class":863},[324,39259,39179],{"class":916},[324,39261,1242],{"class":867},[324,39263,31596],{"class":5945},[324,39265,913],{"class":863},[324,39267,938],{"class":916},[324,39269,1242],{"class":867},[324,39271,31605],{"class":5945},[324,39273,913],{"class":863},[324,39275,1082],{"class":916},[324,39277,38769],{"class":867},[324,39279,39280],{"class":326,"line":8750},[324,39281,38774],{"class":867},[324,39283,39284,39286,39288,39290,39292,39294,39296,39298,39300,39302,39304,39306,39308],{"class":326,"line":8762},[324,39285,38819],{"class":867},[324,39287,31596],{"class":5945},[324,39289,913],{"class":863},[324,39291,944],{"class":916},[324,39293,1242],{"class":867},[324,39295,31651],{"class":5945},[324,39297,913],{"class":863},[324,39299,944],{"class":916},[324,39301,1242],{"class":867},[324,39303,31605],{"class":5945},[324,39305,913],{"class":863},[324,39307,1056],{"class":916},[324,39309,874],{"class":867},[324,39311,39312],{"class":326,"line":8774},[324,39313,38848],{"class":867},[324,39315,39316],{"class":326,"line":8786},[324,39317,39318],{"class":772},"        # 第五层\n",[324,39320,39321,39323,39326,39328],{"class":326,"line":10445},[324,39322,31567],{"class":916},[324,39324,39325],{"class":867},".block5",[324,39327,913],{"class":863},[324,39329,38731],{"class":867},[324,39331,39332,39334,39336,39338,39340,39342,39344,39346,39348,39350,39352,39354,39356,39358,39360,39362,39364],{"class":326,"line":10470},[324,39333,38736],{"class":867},[324,39335,31578],{"class":5945},[324,39337,913],{"class":863},[324,39339,39179],{"class":916},[324,39341,1242],{"class":867},[324,39343,31587],{"class":5945},[324,39345,913],{"class":863},[324,39347,39179],{"class":916},[324,39349,1242],{"class":867},[324,39351,31596],{"class":5945},[324,39353,913],{"class":863},[324,39355,938],{"class":916},[324,39357,1242],{"class":867},[324,39359,31605],{"class":5945},[324,39361,913],{"class":863},[324,39363,1082],{"class":916},[324,39365,38769],{"class":867},[324,39367,39368],{"class":326,"line":10493},[324,39369,38774],{"class":867},[324,39371,39372,39374,39376,39378,39380,39382,39384,39386,39388,39390,39392,39394,39396,39398,39400,39402,39404],{"class":326,"line":10517},[324,39373,38736],{"class":867},[324,39375,31578],{"class":5945},[324,39377,913],{"class":863},[324,39379,39179],{"class":916},[324,39381,1242],{"class":867},[324,39383,31587],{"class":5945},[324,39385,913],{"class":863},[324,39387,39179],{"class":916},[324,39389,1242],{"class":867},[324,39391,31596],{"class":5945},[324,39393,913],{"class":863},[324,39395,938],{"class":916},[324,39397,1242],{"class":867},[324,39399,31605],{"class":5945},[324,39401,913],{"class":863},[324,39403,1082],{"class":916},[324,39405,38769],{"class":867},[324,39407,39408],{"class":326,"line":10522},[324,39409,38774],{"class":867},[324,39411,39412,39414,39416,39418,39420,39422,39424,39426,39428,39430,39432,39434,39436,39438,39440,39442,39444],{"class":326,"line":10527},[324,39413,38736],{"class":867},[324,39415,31578],{"class":5945},[324,39417,913],{"class":863},[324,39419,39179],{"class":916},[324,39421,1242],{"class":867},[324,39423,31587],{"class":5945},[324,39425,913],{"class":863},[324,39427,39179],{"class":916},[324,39429,1242],{"class":867},[324,39431,31596],{"class":5945},[324,39433,913],{"class":863},[324,39435,938],{"class":916},[324,39437,1242],{"class":867},[324,39439,31605],{"class":5945},[324,39441,913],{"class":863},[324,39443,1082],{"class":916},[324,39445,38769],{"class":867},[324,39447,39448],{"class":326,"line":10532},[324,39449,38774],{"class":867},[324,39451,39452,39454,39456,39458,39460,39462,39464,39466,39468,39470,39472,39474,39476],{"class":326,"line":10541},[324,39453,38819],{"class":867},[324,39455,31596],{"class":5945},[324,39457,913],{"class":863},[324,39459,944],{"class":916},[324,39461,1242],{"class":867},[324,39463,31651],{"class":5945},[324,39465,913],{"class":863},[324,39467,944],{"class":916},[324,39469,1242],{"class":867},[324,39471,31605],{"class":5945},[324,39473,913],{"class":863},[324,39475,1056],{"class":916},[324,39477,874],{"class":867},[324,39479,39480],{"class":326,"line":10546},[324,39481,38848],{"class":867},[324,39483,39484],{"class":326,"line":10552},[324,39485,39486],{"class":772},"        # 全连接层\n",[324,39488,39489,39491,39494,39496],{"class":326,"line":10573},[324,39490,31567],{"class":916},[324,39492,39493],{"class":867},".block6",[324,39495,913],{"class":863},[324,39497,38731],{"class":867},[324,39499,39500],{"class":326,"line":10579},[324,39501,39502],{"class":772},"            # 平展操作\n",[324,39504,39505],{"class":326,"line":10593},[324,39506,39507],{"class":772},"            # 这里为了适应笔记本显存过低4g，然后不进行1000分类，而是进行10分类，将全连接层进行修改\n",[324,39509,39510],{"class":326,"line":10599},[324,39511,39512],{"class":867},"            nn.Flatten(),\n",[324,39514,39515,39518,39520,39522,39524,39526,39528,39530,39532],{"class":326,"line":10626},[324,39516,39517],{"class":867},"            nn.Linear(",[324,39519,1233],{"class":916},[324,39521,1319],{"class":863},[324,39523,1233],{"class":916},[324,39525,1319],{"class":863},[324,39527,39179],{"class":916},[324,39529,1242],{"class":867},[324,39531,35592],{"class":916},[324,39533,38769],{"class":867},[324,39535,39536],{"class":326,"line":10635},[324,39537,38774],{"class":867},[324,39539,39540,39542,39544,39546,39548],{"class":326,"line":10641},[324,39541,39517],{"class":867},[324,39543,35592],{"class":916},[324,39545,1242],{"class":867},[324,39547,32792],{"class":916},[324,39549,38769],{"class":867},[324,39551,39552],{"class":326,"line":10649},[324,39553,38774],{"class":867},[324,39555,39556,39558,39560,39562,39564],{"class":326,"line":10654},[324,39557,39517],{"class":867},[324,39559,32792],{"class":916},[324,39561,1242],{"class":867},[324,39563,1310],{"class":916},[324,39565,874],{"class":867},[324,39567,39568],{"class":326,"line":17333},[324,39569,38848],{"class":867},[324,39571,39572],{"class":326,"line":17339},[324,39573,488],{"emptyLinePlaceholder":487},[324,39575,39576],{"class":326,"line":17362},[324,39577,39578],{"class":772},"        # 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[324,39580,39581],{"class":326,"line":17368},[324,39582,39583],{"class":772},"        # 循环遍历模型\n",[324,39585,39586,39588,39591,39593,39596],{"class":326,"line":17391},[324,39587,4132],{"class":863},[324,39589,39590],{"class":867}," m ",[324,39592,26767],{"class":863},[324,39594,39595],{"class":916}," self",[324,39597,39598],{"class":867},".modules():\n",[324,39600,39601],{"class":326,"line":17405},[324,39602,39603],{"class":772},"            # print(m)\n",[324,39605,39606,39608,39611],{"class":326,"line":17425},[324,39607,5371],{"class":863},[324,39609,39610],{"class":916}," isinstance",[324,39612,39613],{"class":867},"(m,nn.Conv2d):\n",[324,39615,39616],{"class":326,"line":17431},[324,39617,39618],{"class":772},"                # 凯明初始化,初始化w,对应的激活函数是relu\n",[324,39620,39621,39624,39627,39629,39632],{"class":326,"line":17442},[324,39622,39623],{"class":867},"                nn.init.kaiming_normal_(m.weight,",[324,39625,39626],{"class":5945},"nonlinearity",[324,39628,913],{"class":863},[324,39630,39631],{"class":738},"'relu'",[324,39633,874],{"class":867},[324,39635,39636],{"class":326,"line":17465},[324,39637,39638],{"class":772},"                # 判断b参数是否存在\n",[324,39640,39641,39644,39647,39650,39653,39656],{"class":326,"line":17487},[324,39642,39643],{"class":863},"                if",[324,39645,39646],{"class":867}," m.bias ",[324,39648,39649],{"class":863},"is",[324,39651,39652],{"class":863}," not",[324,39654,39655],{"class":916}," None",[324,39657,4468],{"class":867},[324,39659,39660],{"class":326,"line":17492},[324,39661,39662],{"class":772},"                    # 如果参数不存在的化初始化b=0\n",[324,39664,39665,39668,39670],{"class":326,"line":17498},[324,39666,39667],{"class":867},"                    nn.init.constant_(m.bias,",[324,39669,1056],{"class":916},[324,39671,874],{"class":867},[324,39673,39674],{"class":326,"line":17512},[324,39675,39676],{"class":772},"            # 全连接层初始化\n",[324,39678,39679,39682,39684],{"class":326,"line":17525},[324,39680,39681],{"class":863},"            elif",[324,39683,39610],{"class":916},[324,39685,39686],{"class":867},"(m,nn.Linear):\n",[324,39688,39689],{"class":326,"line":17530},[324,39690,39691],{"class":772},"                # 这个初始化方法是利用的是正太分布的方式\n",[324,39693,39694],{"class":326,"line":17544},[324,39695,39696],{"class":772},"                # 均值为0，方差为0.01\n",[324,39698,39699,39702,39704,39706,39709],{"class":326,"line":17549},[324,39700,39701],{"class":867},"                nn.init.normal_(m.weight,",[324,39703,1056],{"class":916},[324,39705,1242],{"class":867},[324,39707,39708],{"class":916},"0.01",[324,39710,874],{"class":867},[324,39712,39713],{"class":326,"line":17555},[324,39714,39715],{"class":772},"                # 初始化b参数\n",[324,39717,39718,39720,39722,39724,39726,39728],{"class":326,"line":17560},[324,39719,39643],{"class":863},[324,39721,39646],{"class":867},[324,39723,39649],{"class":863},[324,39725,39652],{"class":863},[324,39727,39655],{"class":916},[324,39729,4468],{"class":867},[324,39731,39732,39734,39736],{"class":326,"line":17574},[324,39733,39667],{"class":867},[324,39735,1056],{"class":916},[324,39737,874],{"class":867},[324,39739,39740],{"class":326,"line":17579},[324,39741,488],{"emptyLinePlaceholder":487},[324,39743,39744],{"class":326,"line":17584},[324,39745,35887],{"class":772},[324,39747,39748,39750,39752],{"class":326,"line":17598},[324,39749,31523],{"class":863},[324,39751,31815],{"class":734},[324,39753,31818],{"class":867},[324,39755,39756,39758,39760,39762],{"class":326,"line":17610},[324,39757,31823],{"class":867},[324,39759,913],{"class":863},[324,39761,31545],{"class":916},[324,39763,39764],{"class":867},".block1(x)\n",[324,39766,39767,39769,39771,39773],{"class":326,"line":17615},[324,39768,31823],{"class":867},[324,39770,913],{"class":863},[324,39772,31545],{"class":916},[324,39774,39775],{"class":867},".block2(x)\n",[324,39777,39778,39780,39782,39784],{"class":326,"line":17628},[324,39779,31823],{"class":867},[324,39781,913],{"class":863},[324,39783,31545],{"class":916},[324,39785,39786],{"class":867},".block3(x)\n",[324,39788,39789,39791,39793,39795],{"class":326,"line":17633},[324,39790,31823],{"class":867},[324,39792,913],{"class":863},[324,39794,31545],{"class":916},[324,39796,39797],{"class":867},".block4(x)\n",[324,39799,39800,39802,39804,39806],{"class":326,"line":17638},[324,39801,31823],{"class":867},[324,39803,913],{"class":863},[324,39805,31545],{"class":916},[324,39807,39808],{"class":867},".block5(x)\n",[324,39810,39811,39813,39815,39817],{"class":326,"line":17643},[324,39812,31823],{"class":867},[324,39814,913],{"class":863},[324,39816,31545],{"class":916},[324,39818,39819],{"class":867},".block6(x)\n",[324,39821,39822,39824],{"class":326,"line":17656},[324,39823,15481],{"class":863},[324,39825,31931],{"class":867},[324,39827,39828],{"class":326,"line":17661},[324,39829,488],{"emptyLinePlaceholder":487},[324,39831,39832],{"class":326,"line":33355},[324,39833,39834],{"class":772},"# 验证模型\n",[324,39836,39837,39839,39841,39843,39846],{"class":326,"line":33361},[324,39838,2262],{"class":863},[324,39840,31942],{"class":916},[324,39842,3678],{"class":863},[324,39844,39845],{"class":738},"'__main__'",[324,39847,4468],{"class":867},[324,39849,39850,39852,39854,39856,39858,39860,39862,39864,39866],{"class":326,"line":33367},[324,39851,31959],{"class":867},[324,39853,913],{"class":863},[324,39855,31173],{"class":867},[324,39857,31966],{"class":738},[324,39859,2435],{"class":863},[324,39861,31971],{"class":867},[324,39863,2432],{"class":863},[324,39865,31198],{"class":738},[324,39867,874],{"class":867},[324,39869,39870,39872],{"class":326,"line":33373},[324,39871,32021],{"class":916},[324,39873,31207],{"class":867},[324,39875,39876,39878,39880],{"class":326,"line":33379},[324,39877,32011],{"class":867},[324,39879,913],{"class":863},[324,39881,39882],{"class":867},"VGG16().to(device)\n",[324,39884,39885,39887,39889,39891,39893,39895,39897,39899],{"class":326,"line":33390},[324,39886,32021],{"class":916},[324,39888,32024],{"class":867},[324,39890,1082],{"class":916},[324,39892,1242],{"class":867},[324,39894,32223],{"class":916},[324,39896,1242],{"class":867},[324,39898,32223],{"class":916},[324,39900,32037],{"class":867},[192,39902,39903],{"start":203},[195,39904,39905],{},"训练代码",[19,39907,39908],{},"模型不收敛的原因:①批次过低；②w权重的初始值过大或过小",[19,39910,39911],{},"解决方式:",[19,39913,39914],{},"①权重初始化",[316,39916,39918],{"className":31100,"code":39917,"language":31102,"meta":50,"style":50},"# 权重初始化,保证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",[269,39919,39920,39925,39930,39942,39947,39955,39960,39973,39978,39992,39997,40006,40011,40020,40025,40030,40043,40048,40062],{"__ignoreMap":50},[324,39921,39922],{"class":326,"line":327},[324,39923,39924],{"class":772},"# 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[324,39926,39927],{"class":326,"line":203},[324,39928,39929],{"class":772},"# 循环遍历模型\n",[324,39931,39932,39934,39936,39938,39940],{"class":326,"line":338},[324,39933,3754],{"class":863},[324,39935,39590],{"class":867},[324,39937,26767],{"class":863},[324,39939,39595],{"class":916},[324,39941,39598],{"class":867},[324,39943,39944],{"class":326,"line":344},[324,39945,39946],{"class":772},"    # print(m)\n",[324,39948,39949,39951,39953],{"class":326,"line":484},[324,39950,3830],{"class":863},[324,39952,39610],{"class":916},[324,39954,39613],{"class":867},[324,39956,39957],{"class":326,"line":491},[324,39958,39959],{"class":772},"        # 凯明初始化,初始化w,对应的激活函数是relu\n",[324,39961,39962,39965,39967,39969,39971],{"class":326,"line":496},[324,39963,39964],{"class":867},"        nn.init.kaiming_normal_(m.weight,",[324,39966,39626],{"class":5945},[324,39968,913],{"class":863},[324,39970,39631],{"class":738},[324,39972,874],{"class":867},[324,39974,39975],{"class":326,"line":502},[324,39976,39977],{"class":772},"        # 判断b参数是否存在\n",[324,39979,39980,39982,39984,39986,39988,39990],{"class":326,"line":508},[324,39981,3226],{"class":863},[324,39983,39646],{"class":867},[324,39985,39649],{"class":863},[324,39987,39652],{"class":863},[324,39989,39655],{"class":916},[324,39991,4468],{"class":867},[324,39993,39994],{"class":326,"line":514},[324,39995,39996],{"class":772},"            # 如果参数不存在的化初始化b=0\n",[324,39998,39999,40002,40004],{"class":326,"line":2343},[324,40000,40001],{"class":867},"            nn.init.constant_(m.bias,",[324,40003,1056],{"class":916},[324,40005,874],{"class":867},[324,40007,40008],{"class":326,"line":2348},[324,40009,40010],{"class":772},"    # 全连接层初始化\n",[324,40012,40013,40016,40018],{"class":326,"line":2354},[324,40014,40015],{"class":863},"    elif",[324,40017,39610],{"class":916},[324,40019,39686],{"class":867},[324,40021,40022],{"class":326,"line":2359},[324,40023,40024],{"class":772},"        # 这个初始化方法是利用的是正太分布的方式\n",[324,40026,40027],{"class":326,"line":2373},[324,40028,40029],{"class":772},"        # 均值为0，方差为0.01\n",[324,40031,40032,40035,40037,40039,40041],{"class":326,"line":2378},[324,40033,40034],{"class":867},"        nn.init.normal_(m.weight,",[324,40036,1056],{"class":916},[324,40038,1242],{"class":867},[324,40040,39708],{"class":916},[324,40042,874],{"class":867},[324,40044,40045],{"class":326,"line":2384},[324,40046,40047],{"class":772},"        # 初始化b参数\n",[324,40049,40050,40052,40054,40056,40058,40060],{"class":326,"line":2405},[324,40051,3226],{"class":863},[324,40053,39646],{"class":867},[324,40055,39649],{"class":863},[324,40057,39652],{"class":863},[324,40059,39655],{"class":916},[324,40061,4468],{"class":867},[324,40063,40064,40066,40068],{"class":326,"line":2410},[324,40065,40001],{"class":867},[324,40067,1056],{"class":916},[324,40069,874],{"class":867},[19,40071,40072],{},"②尽可能地增加批次",[19,40074,40075],{},"训练完整代码：",[316,40077,40078],{"className":31100,"code":38621,"language":31102,"meta":50,"style":50},[269,40079,40080,40086,40096,40106,40116,40120,40136,40144,40162,40166,40170,40180,40216,40220,40256,40260,40288,40292,40296,40306,40342,40346,40382,40386,40414,40418,40422,40432,40468,40472,40508,40512,40548,40552,40580,40584,40588,40598,40634,40638,40674,40678,40714,40718,40746,40750,40754,40764,40800,40804,40840,40844,40880,40884,40912,40916,40920,40930,40934,40938,40942,40962,40966,40978,40982,40994,40998,41002,41006,41010,41022,41026,41034,41038,41050,41054,41068,41072,41080,41084,41092,41096,41100,41112,41116,41130,41138,41142,41146,41154,41164,41174,41184,41194,41204,41214,41220,41224,41228,41240,41260,41266,41274],{"__ignoreMap":50},[324,40081,40082,40084],{"class":326,"line":327},[324,40083,31114],{"class":863},[324,40085,31117],{"class":867},[324,40087,40088,40090,40092,40094],{"class":326,"line":203},[324,40089,31459],{"class":863},[324,40091,38636],{"class":867},[324,40093,31114],{"class":863},[324,40095,38641],{"class":867},[324,40097,40098,40100,40102,40104],{"class":326,"line":338},[324,40099,31459],{"class":863},[324,40101,31462],{"class":867},[324,40103,31114],{"class":863},[324,40105,31467],{"class":867},[324,40107,40108,40110,40112,40114],{"class":326,"line":344},[324,40109,31459],{"class":863},[324,40111,31479],{"class":867},[324,40113,31114],{"class":863},[324,40115,31484],{"class":867},[324,40117,40118],{"class":326,"line":484},[324,40119,488],{"emptyLinePlaceholder":487},[324,40121,40122,40124,40126,40128,40130,40132,40134],{"class":326,"line":491},[324,40123,15423],{"class":863},[324,40125,38672],{"class":734},[324,40127,868],{"class":867},[324,40129,31500],{"class":734},[324,40131,1422],{"class":867},[324,40133,31505],{"class":734},[324,40135,31508],{"class":867},[324,40137,40138,40140,40142],{"class":326,"line":496},[324,40139,31523],{"class":863},[324,40141,31526],{"class":916},[324,40143,31529],{"class":867},[324,40145,40146,40148,40150,40152,40154,40156,40158,40160],{"class":326,"line":502},[324,40147,31539],{"class":916},[324,40149,868],{"class":867},[324,40151,38699],{"class":916},[324,40153,13164],{"class":867},[324,40155,31545],{"class":916},[324,40157,31548],{"class":867},[324,40159,31551],{"class":916},[324,40161,2706],{"class":867},[324,40163,40164],{"class":326,"line":508},[324,40165,38714],{"class":772},[324,40167,40168],{"class":326,"line":514},[324,40169,38719],{"class":772},[324,40171,40172,40174,40176,40178],{"class":326,"line":2343},[324,40173,31567],{"class":916},[324,40175,38726],{"class":867},[324,40177,913],{"class":863},[324,40179,38731],{"class":867},[324,40181,40182,40184,40186,40188,40190,40192,40194,40196,40198,40200,40202,40204,40206,40208,40210,40212,40214],{"class":326,"line":2348},[324,40183,38736],{"class":867},[324,40185,31578],{"class":5945},[324,40187,913],{"class":863},[324,40189,1082],{"class":916},[324,40191,1242],{"class":867},[324,40193,31587],{"class":5945},[324,40195,913],{"class":863},[324,40197,1068],{"class":916},[324,40199,1242],{"class":867},[324,40201,31596],{"class":5945},[324,40203,913],{"class":863},[324,40205,938],{"class":916},[324,40207,1242],{"class":867},[324,40209,31605],{"class":5945},[324,40211,913],{"class":863},[324,40213,1082],{"class":916},[324,40215,38769],{"class":867},[324,40217,40218],{"class":326,"line":2354},[324,40219,38774],{"class":867},[324,40221,40222,40224,40226,40228,40230,40232,40234,40236,40238,40240,40242,40244,40246,40248,40250,40252,40254],{"class":326,"line":2359},[324,40223,38736],{"class":867},[324,40225,31578],{"class":5945},[324,40227,913],{"class":863},[324,40229,1068],{"class":916},[324,40231,1242],{"class":867},[324,40233,31587],{"class":5945},[324,40235,913],{"class":863},[324,40237,1068],{"class":916},[324,40239,1242],{"class":867},[324,40241,31596],{"class":5945},[324,40243,913],{"class":863},[324,40245,938],{"class":916},[324,40247,1242],{"class":867},[324,40249,31605],{"class":5945},[324,40251,913],{"class":863},[324,40253,1082],{"class":916},[324,40255,38769],{"class":867},[324,40257,40258],{"class":326,"line":2373},[324,40259,38774],{"class":867},[324,40261,40262,40264,40266,40268,40270,40272,40274,40276,40278,40280,40282,40284,40286],{"class":326,"line":2378},[324,40263,38819],{"class":867},[324,40265,31596],{"class":5945},[324,40267,913],{"class":863},[324,40269,944],{"class":916},[324,40271,1242],{"class":867},[324,40273,31651],{"class":5945},[324,40275,913],{"class":863},[324,40277,944],{"class":916},[324,40279,1242],{"class":867},[324,40281,31605],{"class":5945},[324,40283,913],{"class":863},[324,40285,1056],{"class":916},[324,40287,874],{"class":867},[324,40289,40290],{"class":326,"line":2384},[324,40291,38848],{"class":867},[324,40293,40294],{"class":326,"line":2405},[324,40295,38853],{"class":772},[324,40297,40298,40300,40302,40304],{"class":326,"line":2410},[324,40299,31567],{"class":916},[324,40301,38860],{"class":867},[324,40303,913],{"class":863},[324,40305,38731],{"class":867},[324,40307,40308,40310,40312,40314,40316,40318,40320,40322,40324,40326,40328,40330,40332,40334,40336,40338,40340],{"class":326,"line":2424},[324,40309,38736],{"class":867},[324,40311,31578],{"class":5945},[324,40313,913],{"class":863},[324,40315,1068],{"class":916},[324,40317,1242],{"class":867},[324,40319,31587],{"class":5945},[324,40321,913],{"class":863},[324,40323,32792],{"class":916},[324,40325,1242],{"class":867},[324,40327,31596],{"class":5945},[324,40329,913],{"class":863},[324,40331,938],{"class":916},[324,40333,1242],{"class":867},[324,40335,31605],{"class":5945},[324,40337,913],{"class":863},[324,40339,1082],{"class":916},[324,40341,38769],{"class":867},[324,40343,40344],{"class":326,"line":2429},[324,40345,38774],{"class":867},[324,40347,40348,40350,40352,40354,40356,40358,40360,40362,40364,40366,40368,40370,40372,40374,40376,40378,40380],{"class":326,"line":2458},[324,40349,38736],{"class":867},[324,40351,31578],{"class":5945},[324,40353,913],{"class":863},[324,40355,32792],{"class":916},[324,40357,1242],{"class":867},[324,40359,31587],{"class":5945},[324,40361,913],{"class":863},[324,40363,32792],{"class":916},[324,40365,1242],{"class":867},[324,40367,31596],{"class":5945},[324,40369,913],{"class":863},[324,40371,938],{"class":916},[324,40373,1242],{"class":867},[324,40375,31605],{"class":5945},[324,40377,913],{"class":863},[324,40379,1082],{"class":916},[324,40381,38769],{"class":867},[324,40383,40384],{"class":326,"line":2463},[324,40385,38774],{"class":867},[324,40387,40388,40390,40392,40394,40396,40398,40400,40402,40404,40406,40408,40410,40412],{"class":326,"line":2480},[324,40389,38819],{"class":867},[324,40391,31596],{"class":5945},[324,40393,913],{"class":863},[324,40395,944],{"class":916},[324,40397,1242],{"class":867},[324,40399,31651],{"class":5945},[324,40401,913],{"class":863},[324,40403,944],{"class":916},[324,40405,1242],{"class":867},[324,40407,31605],{"class":5945},[324,40409,913],{"class":863},[324,40411,1056],{"class":916},[324,40413,874],{"class":867},[324,40415,40416],{"class":326,"line":2485},[324,40417,38848],{"class":867},[324,40419,40420],{"class":326,"line":2490},[324,40421,38981],{"class":772},[324,40423,40424,40426,40428,40430],{"class":326,"line":2495},[324,40425,31567],{"class":916},[324,40427,38988],{"class":867},[324,40429,913],{"class":863},[324,40431,38731],{"class":867},[324,40433,40434,40436,40438,40440,40442,40444,40446,40448,40450,40452,40454,40456,40458,40460,40462,40464,40466],{"class":326,"line":2509},[324,40435,38736],{"class":867},[324,40437,31578],{"class":5945},[324,40439,913],{"class":863},[324,40441,32792],{"class":916},[324,40443,1242],{"class":867},[324,40445,31587],{"class":5945},[324,40447,913],{"class":863},[324,40449,35592],{"class":916},[324,40451,1242],{"class":867},[324,40453,31596],{"class":5945},[324,40455,913],{"class":863},[324,40457,938],{"class":916},[324,40459,1242],{"class":867},[324,40461,31605],{"class":5945},[324,40463,913],{"class":863},[324,40465,1082],{"class":916},[324,40467,38769],{"class":867},[324,40469,40470],{"class":326,"line":2514},[324,40471,38774],{"class":867},[324,40473,40474,40476,40478,40480,40482,40484,40486,40488,40490,40492,40494,40496,40498,40500,40502,40504,40506],{"class":326,"line":3306},[324,40475,38736],{"class":867},[324,40477,31578],{"class":5945},[324,40479,913],{"class":863},[324,40481,35592],{"class":916},[324,40483,1242],{"class":867},[324,40485,31587],{"class":5945},[324,40487,913],{"class":863},[324,40489,35592],{"class":916},[324,40491,1242],{"class":867},[324,40493,31596],{"class":5945},[324,40495,913],{"class":863},[324,40497,938],{"class":916},[324,40499,1242],{"class":867},[324,40501,31605],{"class":5945},[324,40503,913],{"class":863},[324,40505,1082],{"class":916},[324,40507,38769],{"class":867},[324,40509,40510],{"class":326,"line":3320},[324,40511,38774],{"class":867},[324,40513,40514,40516,40518,40520,40522,40524,40526,40528,40530,40532,40534,40536,40538,40540,40542,40544,40546],{"class":326,"line":3328},[324,40515,38736],{"class":867},[324,40517,31578],{"class":5945},[324,40519,913],{"class":863},[324,40521,35592],{"class":916},[324,40523,1242],{"class":867},[324,40525,31587],{"class":5945},[324,40527,913],{"class":863},[324,40529,35592],{"class":916},[324,40531,1242],{"class":867},[324,40533,31596],{"class":5945},[324,40535,913],{"class":863},[324,40537,938],{"class":916},[324,40539,1242],{"class":867},[324,40541,31605],{"class":5945},[324,40543,913],{"class":863},[324,40545,1082],{"class":916},[324,40547,38769],{"class":867},[324,40549,40550],{"class":326,"line":3333},[324,40551,38774],{"class":867},[324,40553,40554,40556,40558,40560,40562,40564,40566,40568,40570,40572,40574,40576,40578],{"class":326,"line":3339},[324,40555,38819],{"class":867},[324,40557,31596],{"class":5945},[324,40559,913],{"class":863},[324,40561,944],{"class":916},[324,40563,1242],{"class":867},[324,40565,31651],{"class":5945},[324,40567,913],{"class":863},[324,40569,944],{"class":916},[324,40571,1242],{"class":867},[324,40573,31605],{"class":5945},[324,40575,913],{"class":863},[324,40577,1056],{"class":916},[324,40579,874],{"class":867},[324,40581,40582],{"class":326,"line":3345},[324,40583,38848],{"class":867},[324,40585,40586],{"class":326,"line":3350},[324,40587,39149],{"class":772},[324,40589,40590,40592,40594,40596],{"class":326,"line":8677},[324,40591,31567],{"class":916},[324,40593,39156],{"class":867},[324,40595,913],{"class":863},[324,40597,38731],{"class":867},[324,40599,40600,40602,40604,40606,40608,40610,40612,40614,40616,40618,40620,40622,40624,40626,40628,40630,40632],{"class":326,"line":8701},[324,40601,38736],{"class":867},[324,40603,31578],{"class":5945},[324,40605,913],{"class":863},[324,40607,35592],{"class":916},[324,40609,1242],{"class":867},[324,40611,31587],{"class":5945},[324,40613,913],{"class":863},[324,40615,39179],{"class":916},[324,40617,1242],{"class":867},[324,40619,31596],{"class":5945},[324,40621,913],{"class":863},[324,40623,938],{"class":916},[324,40625,1242],{"class":867},[324,40627,31605],{"class":5945},[324,40629,913],{"class":863},[324,40631,1082],{"class":916},[324,40633,38769],{"class":867},[324,40635,40636],{"class":326,"line":8706},[324,40637,38774],{"class":867},[324,40639,40640,40642,40644,40646,40648,40650,40652,40654,40656,40658,40660,40662,40664,40666,40668,40670,40672],{"class":326,"line":8712},[324,40641,38736],{"class":867},[324,40643,31578],{"class":5945},[324,40645,913],{"class":863},[324,40647,39179],{"class":916},[324,40649,1242],{"class":867},[324,40651,31587],{"class":5945},[324,40653,913],{"class":863},[324,40655,39179],{"class":916},[324,40657,1242],{"class":867},[324,40659,31596],{"class":5945},[324,40661,913],{"class":863},[324,40663,938],{"class":916},[324,40665,1242],{"class":867},[324,40667,31605],{"class":5945},[324,40669,913],{"class":863},[324,40671,1082],{"class":916},[324,40673,38769],{"class":867},[324,40675,40676],{"class":326,"line":8739},[324,40677,38774],{"class":867},[324,40679,40680,40682,40684,40686,40688,40690,40692,40694,40696,40698,40700,40702,40704,40706,40708,40710,40712],{"class":326,"line":8744},[324,40681,38736],{"class":867},[324,40683,31578],{"class":5945},[324,40685,913],{"class":863},[324,40687,39179],{"class":916},[324,40689,1242],{"class":867},[324,40691,31587],{"class":5945},[324,40693,913],{"class":863},[324,40695,39179],{"class":916},[324,40697,1242],{"class":867},[324,40699,31596],{"class":5945},[324,40701,913],{"class":863},[324,40703,938],{"class":916},[324,40705,1242],{"class":867},[324,40707,31605],{"class":5945},[324,40709,913],{"class":863},[324,40711,1082],{"class":916},[324,40713,38769],{"class":867},[324,40715,40716],{"class":326,"line":8750},[324,40717,38774],{"class":867},[324,40719,40720,40722,40724,40726,40728,40730,40732,40734,40736,40738,40740,40742,40744],{"class":326,"line":8762},[324,40721,38819],{"class":867},[324,40723,31596],{"class":5945},[324,40725,913],{"class":863},[324,40727,944],{"class":916},[324,40729,1242],{"class":867},[324,40731,31651],{"class":5945},[324,40733,913],{"class":863},[324,40735,944],{"class":916},[324,40737,1242],{"class":867},[324,40739,31605],{"class":5945},[324,40741,913],{"class":863},[324,40743,1056],{"class":916},[324,40745,874],{"class":867},[324,40747,40748],{"class":326,"line":8774},[324,40749,38848],{"class":867},[324,40751,40752],{"class":326,"line":8786},[324,40753,39318],{"class":772},[324,40755,40756,40758,40760,40762],{"class":326,"line":10445},[324,40757,31567],{"class":916},[324,40759,39325],{"class":867},[324,40761,913],{"class":863},[324,40763,38731],{"class":867},[324,40765,40766,40768,40770,40772,40774,40776,40778,40780,40782,40784,40786,40788,40790,40792,40794,40796,40798],{"class":326,"line":10470},[324,40767,38736],{"class":867},[324,40769,31578],{"class":5945},[324,40771,913],{"class":863},[324,40773,39179],{"class":916},[324,40775,1242],{"class":867},[324,40777,31587],{"class":5945},[324,40779,913],{"class":863},[324,40781,39179],{"class":916},[324,40783,1242],{"class":867},[324,40785,31596],{"class":5945},[324,40787,913],{"class":863},[324,40789,938],{"class":916},[324,40791,1242],{"class":867},[324,40793,31605],{"class":5945},[324,40795,913],{"class":863},[324,40797,1082],{"class":916},[324,40799,38769],{"class":867},[324,40801,40802],{"class":326,"line":10493},[324,40803,38774],{"class":867},[324,40805,40806,40808,40810,40812,40814,40816,40818,40820,40822,40824,40826,40828,40830,40832,40834,40836,40838],{"class":326,"line":10517},[324,40807,38736],{"class":867},[324,40809,31578],{"class":5945},[324,40811,913],{"class":863},[324,40813,39179],{"class":916},[324,40815,1242],{"class":867},[324,40817,31587],{"class":5945},[324,40819,913],{"class":863},[324,40821,39179],{"class":916},[324,40823,1242],{"class":867},[324,40825,31596],{"class":5945},[324,40827,913],{"class":863},[324,40829,938],{"class":916},[324,40831,1242],{"class":867},[324,40833,31605],{"class":5945},[324,40835,913],{"class":863},[324,40837,1082],{"class":916},[324,40839,38769],{"class":867},[324,40841,40842],{"class":326,"line":10522},[324,40843,38774],{"class":867},[324,40845,40846,40848,40850,40852,40854,40856,40858,40860,40862,40864,40866,40868,40870,40872,40874,40876,40878],{"class":326,"line":10527},[324,40847,38736],{"class":867},[324,40849,31578],{"class":5945},[324,40851,913],{"class":863},[324,40853,39179],{"class":916},[324,40855,1242],{"class":867},[324,40857,31587],{"class":5945},[324,40859,913],{"class":863},[324,40861,39179],{"class":916},[324,40863,1242],{"class":867},[324,40865,31596],{"class":5945},[324,40867,913],{"class":863},[324,40869,938],{"class":916},[324,40871,1242],{"class":867},[324,40873,31605],{"class":5945},[324,40875,913],{"class":863},[324,40877,1082],{"class":916},[324,40879,38769],{"class":867},[324,40881,40882],{"class":326,"line":10532},[324,40883,38774],{"class":867},[324,40885,40886,40888,40890,40892,40894,40896,40898,40900,40902,40904,40906,40908,40910],{"class":326,"line":10541},[324,40887,38819],{"class":867},[324,40889,31596],{"class":5945},[324,40891,913],{"class":863},[324,40893,944],{"class":916},[324,40895,1242],{"class":867},[324,40897,31651],{"class":5945},[324,40899,913],{"class":863},[324,40901,944],{"class":916},[324,40903,1242],{"class":867},[324,40905,31605],{"class":5945},[324,40907,913],{"class":863},[324,40909,1056],{"class":916},[324,40911,874],{"class":867},[324,40913,40914],{"class":326,"line":10546},[324,40915,38848],{"class":867},[324,40917,40918],{"class":326,"line":10552},[324,40919,39486],{"class":772},[324,40921,40922,40924,40926,40928],{"class":326,"line":10573},[324,40923,31567],{"class":916},[324,40925,39493],{"class":867},[324,40927,913],{"class":863},[324,40929,38731],{"class":867},[324,40931,40932],{"class":326,"line":10579},[324,40933,39502],{"class":772},[324,40935,40936],{"class":326,"line":10593},[324,40937,39507],{"class":772},[324,40939,40940],{"class":326,"line":10599},[324,40941,39512],{"class":867},[324,40943,40944,40946,40948,40950,40952,40954,40956,40958,40960],{"class":326,"line":10626},[324,40945,39517],{"class":867},[324,40947,1233],{"class":916},[324,40949,1319],{"class":863},[324,40951,1233],{"class":916},[324,40953,1319],{"class":863},[324,40955,39179],{"class":916},[324,40957,1242],{"class":867},[324,40959,35592],{"class":916},[324,40961,38769],{"class":867},[324,40963,40964],{"class":326,"line":10635},[324,40965,38774],{"class":867},[324,40967,40968,40970,40972,40974,40976],{"class":326,"line":10641},[324,40969,39517],{"class":867},[324,40971,35592],{"class":916},[324,40973,1242],{"class":867},[324,40975,32792],{"class":916},[324,40977,38769],{"class":867},[324,40979,40980],{"class":326,"line":10649},[324,40981,38774],{"class":867},[324,40983,40984,40986,40988,40990,40992],{"class":326,"line":10654},[324,40985,39517],{"class":867},[324,40987,32792],{"class":916},[324,40989,1242],{"class":867},[324,40991,1310],{"class":916},[324,40993,874],{"class":867},[324,40995,40996],{"class":326,"line":17333},[324,40997,38848],{"class":867},[324,40999,41000],{"class":326,"line":17339},[324,41001,488],{"emptyLinePlaceholder":487},[324,41003,41004],{"class":326,"line":17362},[324,41005,39578],{"class":772},[324,41007,41008],{"class":326,"line":17368},[324,41009,39583],{"class":772},[324,41011,41012,41014,41016,41018,41020],{"class":326,"line":17391},[324,41013,4132],{"class":863},[324,41015,39590],{"class":867},[324,41017,26767],{"class":863},[324,41019,39595],{"class":916},[324,41021,39598],{"class":867},[324,41023,41024],{"class":326,"line":17405},[324,41025,39603],{"class":772},[324,41027,41028,41030,41032],{"class":326,"line":17425},[324,41029,5371],{"class":863},[324,41031,39610],{"class":916},[324,41033,39613],{"class":867},[324,41035,41036],{"class":326,"line":17431},[324,41037,39618],{"class":772},[324,41039,41040,41042,41044,41046,41048],{"class":326,"line":17442},[324,41041,39623],{"class":867},[324,41043,39626],{"class":5945},[324,41045,913],{"class":863},[324,41047,39631],{"class":738},[324,41049,874],{"class":867},[324,41051,41052],{"class":326,"line":17465},[324,41053,39638],{"class":772},[324,41055,41056,41058,41060,41062,41064,41066],{"class":326,"line":17487},[324,41057,39643],{"class":863},[324,41059,39646],{"class":867},[324,41061,39649],{"class":863},[324,41063,39652],{"class":863},[324,41065,39655],{"class":916},[324,41067,4468],{"class":867},[324,41069,41070],{"class":326,"line":17492},[324,41071,39662],{"class":772},[324,41073,41074,41076,41078],{"class":326,"line":17498},[324,41075,39667],{"class":867},[324,41077,1056],{"class":916},[324,41079,874],{"class":867},[324,41081,41082],{"class":326,"line":17512},[324,41083,39676],{"class":772},[324,41085,41086,41088,41090],{"class":326,"line":17525},[324,41087,39681],{"class":863},[324,41089,39610],{"class":916},[324,41091,39686],{"class":867},[324,41093,41094],{"class":326,"line":17530},[324,41095,39691],{"class":772},[324,41097,41098],{"class":326,"line":17544},[324,41099,39696],{"class":772},[324,41101,41102,41104,41106,41108,41110],{"class":326,"line":17549},[324,41103,39701],{"class":867},[324,41105,1056],{"class":916},[324,41107,1242],{"class":867},[324,41109,39708],{"class":916},[324,41111,874],{"class":867},[324,41113,41114],{"class":326,"line":17555},[324,41115,39715],{"class":772},[324,41117,41118,41120,41122,41124,41126,41128],{"class":326,"line":17560},[324,41119,39643],{"class":863},[324,41121,39646],{"class":867},[324,41123,39649],{"class":863},[324,41125,39652],{"class":863},[324,41127,39655],{"class":916},[324,41129,4468],{"class":867},[324,41131,41132,41134,41136],{"class":326,"line":17574},[324,41133,39667],{"class":867},[324,41135,1056],{"class":916},[324,41137,874],{"class":867},[324,41139,41140],{"class":326,"line":17579},[324,41141,488],{"emptyLinePlaceholder":487},[324,41143,41144],{"class":326,"line":17584},[324,41145,35887],{"class":772},[324,41147,41148,41150,41152],{"class":326,"line":17598},[324,41149,31523],{"class":863},[324,41151,31815],{"class":734},[324,41153,31818],{"class":867},[324,41155,41156,41158,41160,41162],{"class":326,"line":17610},[324,41157,31823],{"class":867},[324,41159,913],{"class":863},[324,41161,31545],{"class":916},[324,41163,39764],{"class":867},[324,41165,41166,41168,41170,41172],{"class":326,"line":17615},[324,41167,31823],{"class":867},[324,41169,913],{"class":863},[324,41171,31545],{"class":916},[324,41173,39775],{"class":867},[324,41175,41176,41178,41180,41182],{"class":326,"line":17628},[324,41177,31823],{"class":867},[324,41179,913],{"class":863},[324,41181,31545],{"class":916},[324,41183,39786],{"class":867},[324,41185,41186,41188,41190,41192],{"class":326,"line":17633},[324,41187,31823],{"class":867},[324,41189,913],{"class":863},[324,41191,31545],{"class":916},[324,41193,39797],{"class":867},[324,41195,41196,41198,41200,41202],{"class":326,"line":17638},[324,41197,31823],{"class":867},[324,41199,913],{"class":863},[324,41201,31545],{"class":916},[324,41203,39808],{"class":867},[324,41205,41206,41208,41210,41212],{"class":326,"line":17643},[324,41207,31823],{"class":867},[324,41209,913],{"class":863},[324,41211,31545],{"class":916},[324,41213,39819],{"class":867},[324,41215,41216,41218],{"class":326,"line":17656},[324,41217,15481],{"class":863},[324,41219,31931],{"class":867},[324,41221,41222],{"class":326,"line":17661},[324,41223,488],{"emptyLinePlaceholder":487},[324,41225,41226],{"class":326,"line":33355},[324,41227,39834],{"class":772},[324,41229,41230,41232,41234,41236,41238],{"class":326,"line":33361},[324,41231,2262],{"class":863},[324,41233,31942],{"class":916},[324,41235,3678],{"class":863},[324,41237,39845],{"class":738},[324,41239,4468],{"class":867},[324,41241,41242,41244,41246,41248,41250,41252,41254,41256,41258],{"class":326,"line":33367},[324,41243,31959],{"class":867},[324,41245,913],{"class":863},[324,41247,31173],{"class":867},[324,41249,31966],{"class":738},[324,41251,2435],{"class":863},[324,41253,31971],{"class":867},[324,41255,2432],{"class":863},[324,41257,31198],{"class":738},[324,41259,874],{"class":867},[324,41261,41262,41264],{"class":326,"line":33373},[324,41263,32021],{"class":916},[324,41265,31207],{"class":867},[324,41267,41268,41270,41272],{"class":326,"line":33379},[324,41269,32011],{"class":867},[324,41271,913],{"class":863},[324,41273,39882],{"class":867},[324,41275,41276,41278,41280,41282,41284,41286,41288,41290],{"class":326,"line":33390},[324,41277,32021],{"class":916},[324,41279,32024],{"class":867},[324,41281,1082],{"class":916},[324,41283,1242],{"class":867},[324,41285,32223],{"class":916},[324,41287,1242],{"class":867},[324,41289,32223],{"class":916},[324,41291,32037],{"class":867},[192,41293,41294],{"start":338},[195,41295,41296],{},"测试代码",[316,41298,41300],{"className":31100,"code":41299,"language":31102,"meta":50,"style":50},"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",[269,41301,41302,41308,41318,41328,41332,41342,41353,41357,41361,41365,41373,41389,41399,41415,41425,41439,41443,41453,41463,41473,41479,41483,41487,41495,41499,41515,41523,41527,41531,41539,41547,41551,41555,41559,41563,41569,41573,41583,41591,41599,41603,41607,41611,41619,41623,41639,41643,41647,41651,41663,41667,41679,41683,41687,41699,41703,41713,41717,41721,41733,41737,41746,41750,41754,41762,41766,41774,41778,41782,41786,41790,41794,41810,41818,41822,41826,41874,41880,41884,41894,41902,41910,41914,41918,41922,41926,41934,41938,41954,41958,41966,41974],{"__ignoreMap":50},[324,41303,41304,41306],{"class":326,"line":327},[324,41305,31114],{"class":863},[324,41307,31117],{"class":867},[324,41309,41310,41312,41314,41316],{"class":326,"line":203},[324,41311,31114],{"class":863},[324,41313,32137],{"class":867},[324,41315,32105],{"class":863},[324,41317,32142],{"class":867},[324,41319,41320,41322,41324,41326],{"class":326,"line":338},[324,41321,31459],{"class":863},[324,41323,32120],{"class":867},[324,41325,31114],{"class":863},[324,41327,32125],{"class":867},[324,41329,41330],{"class":326,"line":344},[324,41331,34644],{"class":772},[324,41333,41334,41336,41338,41340],{"class":326,"line":484},[324,41335,31459],{"class":863},[324,41337,32090],{"class":867},[324,41339,31114],{"class":863},[324,41341,32095],{"class":867},[324,41343,41344,41346,41348,41350],{"class":326,"line":491},[324,41345,31459],{"class":863},[324,41347,32636],{"class":867},[324,41349,31114],{"class":863},[324,41351,41352],{"class":916}," VGG16\n",[324,41354,41355],{"class":326,"line":496},[324,41356,488],{"emptyLinePlaceholder":487},[324,41358,41359],{"class":326,"line":502},[324,41360,488],{"emptyLinePlaceholder":487},[324,41362,41363],{"class":326,"line":508},[324,41364,34673],{"class":772},[324,41366,41367,41369,41371],{"class":326,"line":514},[324,41368,32669],{"class":863},[324,41370,34680],{"class":734},[324,41372,32675],{"class":867},[324,41374,41375,41377,41379,41381,41383,41385,41387],{"class":326,"line":2343},[324,41376,34687],{"class":867},[324,41378,913],{"class":863},[324,41380,32177],{"class":867},[324,41382,32180],{"class":5945},[324,41384,913],{"class":863},[324,41386,32185],{"class":738},[324,41388,32188],{"class":867},[324,41390,41391,41393,41395,41397],{"class":326,"line":2348},[324,41392,34704],{"class":5945},[324,41394,913],{"class":863},[324,41396,34709],{"class":916},[324,41398,32188],{"class":867},[324,41400,41401,41403,41405,41407,41409,41411,41413],{"class":326,"line":2354},[324,41402,34716],{"class":5945},[324,41404,913],{"class":863},[324,41406,32215],{"class":867},[324,41408,32218],{"class":5945},[324,41410,913],{"class":863},[324,41412,32223],{"class":916},[324,41414,32226],{"class":867},[324,41416,41417,41419,41421,41423],{"class":326,"line":2359},[324,41418,34733],{"class":5945},[324,41420,913],{"class":863},[324,41422,32198],{"class":916},[324,41424,874],{"class":867},[324,41426,41427,41429,41431,41433,41435,41437],{"class":326,"line":2373},[324,41428,34744],{"class":867},[324,41430,913],{"class":863},[324,41432,32256],{"class":867},[324,41434,32259],{"class":5945},[324,41436,913],{"class":863},[324,41438,34755],{"class":867},[324,41440,41441],{"class":326,"line":2378},[324,41442,34760],{"class":772},[324,41444,41445,41447,41449,41451],{"class":326,"line":2384},[324,41446,34765],{"class":5945},[324,41448,913],{"class":863},[324,41450,1082],{"class":916},[324,41452,32188],{"class":867},[324,41454,41455,41457,41459,41461],{"class":326,"line":2405},[324,41456,34776],{"class":5945},[324,41458,913],{"class":863},[324,41460,32198],{"class":916},[324,41462,32188],{"class":867},[324,41464,41465,41467,41469,41471],{"class":326,"line":2410},[324,41466,34787],{"class":5945},[324,41468,913],{"class":863},[324,41470,1056],{"class":916},[324,41472,874],{"class":867},[324,41474,41475,41477],{"class":326,"line":2424},[324,41476,4819],{"class":863},[324,41478,34800],{"class":867},[324,41480,41481],{"class":326,"line":2429},[324,41482,488],{"emptyLinePlaceholder":487},[324,41484,41485],{"class":326,"line":2458},[324,41486,34809],{"class":772},[324,41488,41489,41491,41493],{"class":326,"line":2463},[324,41490,32669],{"class":863},[324,41492,34816],{"class":734},[324,41494,34819],{"class":867},[324,41496,41497],{"class":326,"line":2480},[324,41498,34824],{"class":772},[324,41500,41501,41503,41505,41507,41509,41511,41513],{"class":326,"line":2485},[324,41502,31959],{"class":867},[324,41504,913],{"class":863},[324,41506,31966],{"class":738},[324,41508,2435],{"class":863},[324,41510,31971],{"class":867},[324,41512,2432],{"class":863},[324,41514,34841],{"class":738},[324,41516,41517,41519,41521],{"class":326,"line":2490},[324,41518,32011],{"class":867},[324,41520,913],{"class":863},[324,41522,33011],{"class":867},[324,41524,41525],{"class":326,"line":2495},[324,41526,488],{"emptyLinePlaceholder":487},[324,41528,41529],{"class":326,"line":2509},[324,41530,34858],{"class":772},[324,41532,41533,41535,41537],{"class":326,"line":2514},[324,41534,34863],{"class":867},[324,41536,913],{"class":863},[324,41538,33064],{"class":916},[324,41540,41541,41543,41545],{"class":326,"line":3306},[324,41542,34872],{"class":867},[324,41544,913],{"class":863},[324,41546,3814],{"class":916},[324,41548,41549],{"class":326,"line":3320},[324,41550,488],{"emptyLinePlaceholder":487},[324,41552,41553],{"class":326,"line":3328},[324,41554,34885],{"class":772},[324,41556,41557],{"class":326,"line":3333},[324,41558,34890],{"class":772},[324,41560,41561],{"class":326,"line":3339},[324,41562,34895],{"class":772},[324,41564,41565,41567],{"class":326,"line":3345},[324,41566,34900],{"class":863},[324,41568,33606],{"class":867},[324,41570,41571],{"class":326,"line":3350},[324,41572,34907],{"class":772},[324,41574,41575,41577,41579,41581],{"class":326,"line":8677},[324,41576,4132],{"class":863},[324,41578,34914],{"class":867},[324,41580,26767],{"class":863},[324,41582,34919],{"class":867},[324,41584,41585,41587,41589],{"class":326,"line":8701},[324,41586,34924],{"class":867},[324,41588,913],{"class":863},[324,41590,34929],{"class":867},[324,41592,41593,41595,41597],{"class":326,"line":8706},[324,41594,34934],{"class":867},[324,41596,913],{"class":863},[324,41598,34939],{"class":867},[324,41600,41601],{"class":326,"line":8712},[324,41602,34944],{"class":772},[324,41604,41605],{"class":326,"line":8739},[324,41606,33597],{"class":867},[324,41608,41609],{"class":326,"line":8744},[324,41610,34953],{"class":772},[324,41612,41613,41615,41617],{"class":326,"line":8750},[324,41614,33382],{"class":867},[324,41616,913],{"class":863},[324,41618,34962],{"class":867},[324,41620,41621],{"class":326,"line":8762},[324,41622,34967],{"class":772},[324,41624,41625,41627,41629,41631,41633,41635,41637],{"class":326,"line":8774},[324,41626,33399],{"class":867},[324,41628,913],{"class":863},[324,41630,33404],{"class":867},[324,41632,33407],{"class":5945},[324,41634,913],{"class":863},[324,41636,1082],{"class":916},[324,41638,874],{"class":867},[324,41640,41641],{"class":326,"line":8786},[324,41642,34988],{"class":772},[324,41644,41645],{"class":326,"line":10445},[324,41646,34993],{"class":772},[324,41648,41649],{"class":326,"line":10470},[324,41650,34998],{"class":772},[324,41652,41653,41655,41657,41659,41661],{"class":326,"line":10493},[324,41654,35003],{"class":867},[324,41656,10206],{"class":863},[324,41658,33509],{"class":867},[324,41660,3678],{"class":863},[324,41662,35012],{"class":867},[324,41664,41665],{"class":326,"line":10517},[324,41666,35017],{"class":772},[324,41668,41669,41671,41673,41675,41677],{"class":326,"line":10522},[324,41670,35022],{"class":867},[324,41672,10206],{"class":863},[324,41674,35027],{"class":867},[324,41676,1056],{"class":916},[324,41678,874],{"class":867},[324,41680,41681],{"class":326,"line":10527},[324,41682,488],{"emptyLinePlaceholder":487},[324,41684,41685],{"class":326,"line":10532},[324,41686,35040],{"class":772},[324,41688,41689,41691,41693,41695,41697],{"class":326,"line":10541},[324,41690,35045],{"class":867},[324,41692,913],{"class":863},[324,41694,35050],{"class":867},[324,41696,1448],{"class":863},[324,41698,35055],{"class":867},[324,41700,41701],{"class":326,"line":10546},[324,41702,35060],{"class":772},[324,41704,41705,41707,41709,41711],{"class":326,"line":10552},[324,41706,33173],{"class":916},[324,41708,868],{"class":867},[324,41710,35069],{"class":738},[324,41712,35072],{"class":867},[324,41714,41715],{"class":326,"line":10573},[324,41716,488],{"emptyLinePlaceholder":487},[324,41718,41719],{"class":326,"line":10579},[324,41720,35081],{"class":772},[324,41722,41723,41725,41727,41729,41731],{"class":326,"line":10593},[324,41724,2262],{"class":863},[324,41726,31942],{"class":916},[324,41728,3678],{"class":863},[324,41730,31947],{"class":738},[324,41732,4468],{"class":867},[324,41734,41735],{"class":326,"line":10599},[324,41736,35098],{"class":772},[324,41738,41739,41741,41743],{"class":326,"line":10626},[324,41740,32011],{"class":867},[324,41742,913],{"class":863},[324,41744,41745],{"class":867},"VGG16()\n",[324,41747,41748],{"class":326,"line":10635},[324,41749,35111],{"class":772},[324,41751,41752],{"class":326,"line":10641},[324,41753,35116],{"class":772},[324,41755,41756,41758,41760],{"class":326,"line":10649},[324,41757,35121],{"class":867},[324,41759,35124],{"class":738},[324,41761,31219],{"class":867},[324,41763,41764],{"class":326,"line":10654},[324,41765,35131],{"class":772},[324,41767,41768,41770,41772],{"class":326,"line":17333},[324,41769,34744],{"class":867},[324,41771,913],{"class":863},[324,41773,35140],{"class":867},[324,41775,41776],{"class":326,"line":17339},[324,41777,35145],{"class":772},[324,41779,41780],{"class":326,"line":17362},[324,41781,35150],{"class":867},[324,41783,41784],{"class":326,"line":17368},[324,41785,488],{"emptyLinePlaceholder":487},[324,41787,41788],{"class":326,"line":17391},[324,41789,35159],{"class":772},[324,41791,41792],{"class":326,"line":17405},[324,41793,35164],{"class":772},[324,41795,41796,41798,41800,41802,41804,41806,41808],{"class":326,"line":17425},[324,41797,31959],{"class":867},[324,41799,913],{"class":863},[324,41801,31966],{"class":738},[324,41803,2435],{"class":863},[324,41805,31971],{"class":867},[324,41807,2432],{"class":863},[324,41809,34841],{"class":738},[324,41811,41812,41814,41816],{"class":326,"line":17431},[324,41813,32011],{"class":867},[324,41815,913],{"class":863},[324,41817,33011],{"class":867},[324,41819,41820],{"class":326,"line":17442},[324,41821,35193],{"class":772},[324,41823,41824],{"class":326,"line":17465},[324,41825,35198],{"class":772},[324,41827,41828,41830,41832,41834,41836,41838,41840,41842,41844,41846,41848,41850,41852,41854,41856,41858,41860,41862,41864,41866,41868,41870,41872],{"class":326,"line":17487},[324,41829,35203],{"class":867},[324,41831,913],{"class":863},[324,41833,1754],{"class":867},[324,41835,35210],{"class":738},[324,41837,1242],{"class":867},[324,41839,35215],{"class":738},[324,41841,1242],{"class":867},[324,41843,35220],{"class":738},[324,41845,1242],{"class":867},[324,41847,35225],{"class":738},[324,41849,1242],{"class":867},[324,41851,35230],{"class":738},[324,41853,1242],{"class":867},[324,41855,35235],{"class":738},[324,41857,1242],{"class":867},[324,41859,35240],{"class":738},[324,41861,1242],{"class":867},[324,41863,35245],{"class":738},[324,41865,1242],{"class":867},[324,41867,35250],{"class":738},[324,41869,1242],{"class":867},[324,41871,35255],{"class":738},[324,41873,33968],{"class":867},[324,41875,41876,41878],{"class":326,"line":17492},[324,41877,34900],{"class":863},[324,41879,33606],{"class":867},[324,41881,41882],{"class":326,"line":17498},[324,41883,35268],{"class":772},[324,41885,41886,41888,41890,41892],{"class":326,"line":17512},[324,41887,4132],{"class":863},[324,41889,35275],{"class":867},[324,41891,26767],{"class":863},[324,41893,34919],{"class":867},[324,41895,41896,41898,41900],{"class":326,"line":17525},[324,41897,33332],{"class":867},[324,41899,913],{"class":863},[324,41901,33337],{"class":867},[324,41903,41904,41906,41908],{"class":326,"line":17530},[324,41905,33347],{"class":867},[324,41907,913],{"class":863},[324,41909,33352],{"class":867},[324,41911,41912],{"class":326,"line":17544},[324,41913,488],{"emptyLinePlaceholder":487},[324,41915,41916],{"class":326,"line":17549},[324,41917,35304],{"class":772},[324,41919,41920],{"class":326,"line":17555},[324,41921,33597],{"class":867},[324,41923,41924],{"class":326,"line":17560},[324,41925,35313],{"class":772},[324,41927,41928,41930,41932],{"class":326,"line":17574},[324,41929,33382],{"class":867},[324,41931,913],{"class":863},[324,41933,33387],{"class":867},[324,41935,41936],{"class":326,"line":17579},[324,41937,35326],{"class":772},[324,41939,41940,41942,41944,41946,41948,41950,41952],{"class":326,"line":17584},[324,41941,33399],{"class":867},[324,41943,913],{"class":863},[324,41945,33404],{"class":867},[324,41947,33407],{"class":5945},[324,41949,913],{"class":863},[324,41951,1082],{"class":916},[324,41953,874],{"class":867},[324,41955,41956],{"class":326,"line":17598},[324,41957,35347],{"class":772},[324,41959,41960,41962,41964],{"class":326,"line":17610},[324,41961,35352],{"class":867},[324,41963,913],{"class":863},[324,41965,35357],{"class":867},[324,41967,41968,41970,41972],{"class":326,"line":17615},[324,41969,35362],{"class":867},[324,41971,913],{"class":863},[324,41973,35367],{"class":867},[324,41975,41976,41978,41980,41982,41984,41986,41988,41990],{"class":326,"line":17628},[324,41977,35372],{"class":916},[324,41979,868],{"class":867},[324,41981,35377],{"class":738},[324,41983,35380],{"class":867},[324,41985,35383],{"class":738},[324,41987,1242],{"class":867},[324,41989,35388],{"class":738},[324,41991,35391],{"class":867},[35,41993,41995],{"id":41994},"_23googlenet","2.3.GoogLeNet",[151,41997,41999],{"id":41998},"_231原理","2.3.1.原理",[192,42001,42002],{},[195,42003,42004],{},"网络结构",[19,42006,42007],{},[48,42008],{"alt":50,"src":42009},"\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",[19,42011,42012],{},"1x1卷积是为了减少通道数（通过填充和步幅来实现的）",[19,42014,42015],{},[48,42016],{"alt":50,"src":42017},"\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",[19,42019,42020],{},[48,42021],{"alt":50,"src":42022},"\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",[19,42024,42025],{},[48,42026],{"alt":50,"src":42027},"\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",[192,42029,42030],{"start":203},[195,42031,42032],{},"1x1卷积的优点",[19,42034,42035],{},[48,42036],{"alt":50,"src":42037},"\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",[192,42039,42040],{"start":338},[195,42041,42042],{},"全局平均池化层优点",[19,42044,42045],{},[48,42046],{"alt":50,"src":42047},"\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",[19,42049,42050],{},[48,42051],{"alt":50,"src":42052},"\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",[192,42054,42055],{"start":344},[195,42056,42057],{},"参数详细描述",[19,42059,42060],{},[48,42061],{"alt":50,"src":42062},"\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",[19,42064,42065],{},[48,42066],{"alt":50,"src":42067},"\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",[19,42069,42070],{},[48,42071],{"alt":50,"src":42072},"\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",[19,42074,42075],{},[48,42076],{"alt":50,"src":42077},"\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",[19,42079,42080],{},[48,42081],{"alt":50,"src":42082},"\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",[19,42084,42085],{},[48,42086],{"alt":50,"src":42087},"\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",[19,42089,42090],{},[48,42091],{"alt":50,"src":42092},"\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",[19,42094,42095],{},[48,42096],{"alt":50,"src":42097},"\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",[19,42099,42100],{},[48,42101],{"alt":50,"src":42102},"\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",[19,42104,42105],{},[48,42106],{"alt":50,"src":42107},"\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",[19,42109,42110],{},[48,42111],{"alt":50,"src":42112},"\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",[19,42114,42115],{},[48,42116],{"alt":50,"src":42117},"\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",[19,42119,42120],{},[48,42121],{"alt":50,"src":42122},"\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",[19,42124,42125],{},[48,42126],{"alt":50,"src":42127},"\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",[19,42129,42130],{},[48,42131],{"alt":50,"src":42132},"\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",[19,42134,42135],{},[48,42136],{"alt":50,"src":42137},"\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",[19,42139,42140],{},[48,42141],{"alt":50,"src":42142},"\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",[19,42144,42145],{},[48,42146],{"alt":50,"src":42147},"\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",[19,42149,42150],{},[48,42151],{"alt":50,"src":42152},"\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",[19,42154,42155],{},[48,42156],{"alt":50,"src":42157},"\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",[19,42159,42160],{},[48,42161],{"alt":50,"src":42162},"\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",[151,42164,42166],{"id":42165},"_232代码实现","2.3.2.代码实现",[192,42168,42169],{},[195,42170,31433],{},[19,42172,42173],{},"根据原理一步一步搭建即可",[316,42175,42177],{"className":31100,"code":42176,"language":31102,"meta":50,"style":50},"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",[269,42178,42179,42185,42195,42205,42209,42226,42235,42250,42260,42265,42298,42303,42340,42387,42392,42428,42475,42480,42485,42520,42552,42556,42564,42580,42604,42629,42650,42655,42670,42674,42678,42683,42700,42705,42714,42729,42740,42784,42788,42816,42820,42831,42859,42863,42900,42904,42932,42936,42947,42983,43015,43043,43047,43058,43092,43124,43156,43189,43223,43251,43255,43266,43299,43331,43345,43349,43362,43366,43371,43383,43391,43413,43418,43423,43428,43433,43438,43443,43457,43465,43474,43487,43502,43511,43515,43523,43534,43545,43556,43567,43578,43584,43588,43593,43605,43625,43634],{"__ignoreMap":50},[324,42180,42181,42183],{"class":326,"line":327},[324,42182,31114],{"class":863},[324,42184,31117],{"class":867},[324,42186,42187,42189,42191,42193],{"class":326,"line":203},[324,42188,31459],{"class":863},[324,42190,31462],{"class":867},[324,42192,31114],{"class":863},[324,42194,31467],{"class":867},[324,42196,42197,42199,42201,42203],{"class":326,"line":338},[324,42198,31459],{"class":863},[324,42200,31479],{"class":867},[324,42202,31114],{"class":863},[324,42204,31484],{"class":867},[324,42206,42207],{"class":326,"line":344},[324,42208,488],{"emptyLinePlaceholder":487},[324,42210,42211,42213,42216,42218,42220,42222,42224],{"class":326,"line":484},[324,42212,15423],{"class":863},[324,42214,42215],{"class":734}," Inception",[324,42217,868],{"class":867},[324,42219,31500],{"class":734},[324,42221,1422],{"class":867},[324,42223,31505],{"class":734},[324,42225,31508],{"class":867},[324,42227,42228,42230,42232],{"class":326,"line":491},[324,42229,31523],{"class":863},[324,42231,31526],{"class":916},[324,42233,42234],{"class":867},"(self,in_channels,c1,c2,c3,c4):\n",[324,42236,42237,42239,42242,42244,42246,42248],{"class":326,"line":496},[324,42238,31539],{"class":916},[324,42240,42241],{"class":867},"(Inception,",[324,42243,31545],{"class":916},[324,42245,31548],{"class":867},[324,42247,31551],{"class":916},[324,42249,2706],{"class":867},[324,42251,42252,42254,42256,42258],{"class":326,"line":502},[324,42253,31567],{"class":916},[324,42255,35493],{"class":867},[324,42257,913],{"class":863},[324,42259,35498],{"class":867},[324,42261,42262],{"class":326,"line":508},[324,42263,42264],{"class":772},"        # 路线1：定义1*1卷积\n",[324,42266,42267,42269,42272,42274,42276,42278,42280,42283,42285,42287,42290,42292,42294,42296],{"class":326,"line":514},[324,42268,31567],{"class":916},[324,42270,42271],{"class":867},".p1_1",[324,42273,913],{"class":863},[324,42275,31575],{"class":867},[324,42277,31578],{"class":5945},[324,42279,913],{"class":863},[324,42281,42282],{"class":867},"in_channels,",[324,42284,31587],{"class":5945},[324,42286,913],{"class":863},[324,42288,42289],{"class":867},"c1,",[324,42291,31596],{"class":5945},[324,42293,913],{"class":863},[324,42295,1082],{"class":916},[324,42297,874],{"class":867},[324,42299,42300],{"class":326,"line":2343},[324,42301,42302],{"class":772},"        # 路线2：定义1*1卷积和3*3\n",[324,42304,42305,42307,42310,42312,42314,42316,42318,42320,42322,42324,42327,42329,42332,42334,42336,42338],{"class":326,"line":2348},[324,42306,31567],{"class":916},[324,42308,42309],{"class":867},".p2_1",[324,42311,913],{"class":863},[324,42313,31575],{"class":867},[324,42315,31578],{"class":5945},[324,42317,913],{"class":863},[324,42319,42282],{"class":867},[324,42321,31587],{"class":5945},[324,42323,913],{"class":863},[324,42325,42326],{"class":867},"c2[",[324,42328,1056],{"class":916},[324,42330,42331],{"class":867},"],",[324,42333,31596],{"class":5945},[324,42335,913],{"class":863},[324,42337,1082],{"class":916},[324,42339,874],{"class":867},[324,42341,42342,42344,42347,42349,42351,42353,42355,42357,42359,42361,42363,42365,42367,42369,42371,42373,42375,42377,42379,42381,42383,42385],{"class":326,"line":2354},[324,42343,31567],{"class":916},[324,42345,42346],{"class":867},".p2_2",[324,42348,913],{"class":863},[324,42350,31575],{"class":867},[324,42352,31578],{"class":5945},[324,42354,913],{"class":863},[324,42356,42326],{"class":867},[324,42358,1056],{"class":916},[324,42360,42331],{"class":867},[324,42362,31587],{"class":5945},[324,42364,913],{"class":863},[324,42366,42326],{"class":867},[324,42368,1082],{"class":916},[324,42370,42331],{"class":867},[324,42372,31596],{"class":5945},[324,42374,913],{"class":863},[324,42376,938],{"class":916},[324,42378,1242],{"class":867},[324,42380,31605],{"class":5945},[324,42382,913],{"class":863},[324,42384,1082],{"class":916},[324,42386,874],{"class":867},[324,42388,42389],{"class":326,"line":2359},[324,42390,42391],{"class":772},"        # 路线3：定义1*1卷积和5*5\n",[324,42393,42394,42396,42399,42401,42403,42405,42407,42409,42411,42413,42416,42418,42420,42422,42424,42426],{"class":326,"line":2373},[324,42395,31567],{"class":916},[324,42397,42398],{"class":867},".p3_1",[324,42400,913],{"class":863},[324,42402,31575],{"class":867},[324,42404,31578],{"class":5945},[324,42406,913],{"class":863},[324,42408,42282],{"class":867},[324,42410,31587],{"class":5945},[324,42412,913],{"class":863},[324,42414,42415],{"class":867},"c3[",[324,42417,1056],{"class":916},[324,42419,42331],{"class":867},[324,42421,31596],{"class":5945},[324,42423,913],{"class":863},[324,42425,1082],{"class":916},[324,42427,874],{"class":867},[324,42429,42430,42432,42435,42437,42439,42441,42443,42445,42447,42449,42451,42453,42455,42457,42459,42461,42463,42465,42467,42469,42471,42473],{"class":326,"line":2378},[324,42431,31567],{"class":916},[324,42433,42434],{"class":867},".p3_2",[324,42436,913],{"class":863},[324,42438,31575],{"class":867},[324,42440,31578],{"class":5945},[324,42442,913],{"class":863},[324,42444,42415],{"class":867},[324,42446,1056],{"class":916},[324,42448,42331],{"class":867},[324,42450,31587],{"class":5945},[324,42452,913],{"class":863},[324,42454,42415],{"class":867},[324,42456,1082],{"class":916},[324,42458,42331],{"class":867},[324,42460,31596],{"class":5945},[324,42462,913],{"class":863},[324,42464,1183],{"class":916},[324,42466,1242],{"class":867},[324,42468,31605],{"class":5945},[324,42470,913],{"class":863},[324,42472,944],{"class":916},[324,42474,874],{"class":867},[324,42476,42477],{"class":326,"line":2384},[324,42478,42479],{"class":772},"        # 路线4：定义3*3最大池化和1*1卷积\n",[324,42481,42482],{"class":326,"line":2405},[324,42483,42484],{"class":772},"        # 最大池化如果不写步幅的话，默认步幅等于卷积核大小\n",[324,42486,42487,42489,42492,42494,42496,42498,42500,42502,42504,42506,42508,42510,42512,42514,42516,42518],{"class":326,"line":2410},[324,42488,31567],{"class":916},[324,42490,42491],{"class":867},".p4_1",[324,42493,913],{"class":863},[324,42495,35551],{"class":867},[324,42497,31596],{"class":5945},[324,42499,913],{"class":863},[324,42501,938],{"class":916},[324,42503,1242],{"class":867},[324,42505,31651],{"class":5945},[324,42507,913],{"class":863},[324,42509,1082],{"class":916},[324,42511,1242],{"class":867},[324,42513,31605],{"class":5945},[324,42515,913],{"class":863},[324,42517,1082],{"class":916},[324,42519,874],{"class":867},[324,42521,42522,42524,42527,42529,42531,42533,42535,42537,42539,42541,42544,42546,42548,42550],{"class":326,"line":2424},[324,42523,31567],{"class":916},[324,42525,42526],{"class":867},".p4_2",[324,42528,913],{"class":863},[324,42530,31575],{"class":867},[324,42532,31578],{"class":5945},[324,42534,913],{"class":863},[324,42536,42282],{"class":867},[324,42538,31587],{"class":5945},[324,42540,913],{"class":863},[324,42542,42543],{"class":867},"c4,",[324,42545,31596],{"class":5945},[324,42547,913],{"class":863},[324,42549,1082],{"class":916},[324,42551,874],{"class":867},[324,42553,42554],{"class":326,"line":2429},[324,42555,488],{"emptyLinePlaceholder":487},[324,42557,42558,42560,42562],{"class":326,"line":2458},[324,42559,31523],{"class":863},[324,42561,31815],{"class":734},[324,42563,31818],{"class":867},[324,42565,42566,42569,42571,42573,42575,42577],{"class":326,"line":2463},[324,42567,42568],{"class":867},"        p1",[324,42570,913],{"class":863},[324,42572,31545],{"class":916},[324,42574,35906],{"class":867},[324,42576,31545],{"class":916},[324,42578,42579],{"class":867},".p1_1(x))\n",[324,42581,42582,42584,42586,42588,42590,42592,42595,42597,42599,42601],{"class":326,"line":2480},[324,42583,7814],{"class":867},[324,42585,913],{"class":863},[324,42587,31545],{"class":916},[324,42589,35906],{"class":867},[324,42591,31545],{"class":916},[324,42593,42594],{"class":867},".p2_2(",[324,42596,31545],{"class":916},[324,42598,35906],{"class":867},[324,42600,31545],{"class":916},[324,42602,42603],{"class":867},".p2_1(x))))\n",[324,42605,42606,42609,42611,42613,42615,42617,42620,42622,42624,42626],{"class":326,"line":2485},[324,42607,42608],{"class":867},"        p3",[324,42610,913],{"class":863},[324,42612,31545],{"class":916},[324,42614,35906],{"class":867},[324,42616,31545],{"class":916},[324,42618,42619],{"class":867},".p3_2(",[324,42621,31545],{"class":916},[324,42623,35906],{"class":867},[324,42625,31545],{"class":916},[324,42627,42628],{"class":867},".p3_1(x))))\n",[324,42630,42631,42634,42636,42638,42640,42642,42645,42647],{"class":326,"line":2490},[324,42632,42633],{"class":867},"        p4",[324,42635,913],{"class":863},[324,42637,31545],{"class":916},[324,42639,35906],{"class":867},[324,42641,31545],{"class":916},[324,42643,42644],{"class":867},".p4_2(",[324,42646,31545],{"class":916},[324,42648,42649],{"class":867},".p4_1(x)))\n",[324,42651,42652],{"class":326,"line":2495},[324,42653,42654],{"class":772},"        # 在通道维度上连结输出    .cat()函数用于将多个张量在指定维度上进行连接\n",[324,42656,42657,42659,42662,42664,42666,42668],{"class":326,"line":2509},[324,42658,15481],{"class":863},[324,42660,42661],{"class":867}," torch.cat((p1,p2,p3,p4),",[324,42663,33407],{"class":5945},[324,42665,913],{"class":863},[324,42667,1082],{"class":916},[324,42669,874],{"class":867},[324,42671,42672],{"class":326,"line":2514},[324,42673,488],{"emptyLinePlaceholder":487},[324,42675,42676],{"class":326,"line":3306},[324,42677,488],{"emptyLinePlaceholder":487},[324,42679,42680],{"class":326,"line":3320},[324,42681,42682],{"class":772},"# 搭建GoogLeNet网络\n",[324,42684,42685,42687,42690,42692,42694,42696,42698],{"class":326,"line":3328},[324,42686,15423],{"class":863},[324,42688,42689],{"class":734}," GoogLeNet",[324,42691,868],{"class":867},[324,42693,31500],{"class":734},[324,42695,1422],{"class":867},[324,42697,31505],{"class":734},[324,42699,31508],{"class":867},[324,42701,42702],{"class":326,"line":3333},[324,42703,42704],{"class":772},"    # 必须把Inception导入到里边\n",[324,42706,42707,42709,42711],{"class":326,"line":3339},[324,42708,31523],{"class":863},[324,42710,31526],{"class":916},[324,42712,42713],{"class":867},"(self,Inception):\n",[324,42715,42716,42718,42721,42723,42725,42727],{"class":326,"line":3345},[324,42717,31539],{"class":916},[324,42719,42720],{"class":867},"(GoogLeNet,",[324,42722,31545],{"class":916},[324,42724,31548],{"class":867},[324,42726,31551],{"class":916},[324,42728,2706],{"class":867},[324,42730,42731,42733,42736,42738],{"class":326,"line":3350},[324,42732,31567],{"class":916},[324,42734,42735],{"class":867},".b1",[324,42737,913],{"class":863},[324,42739,38731],{"class":867},[324,42741,42742,42744,42746,42748,42750,42752,42754,42756,42758,42760,42762,42764,42766,42768,42770,42772,42774,42776,42778,42780,42782],{"class":326,"line":8677},[324,42743,38736],{"class":867},[324,42745,31578],{"class":5945},[324,42747,913],{"class":863},[324,42749,1082],{"class":916},[324,42751,1242],{"class":867},[324,42753,31587],{"class":5945},[324,42755,913],{"class":863},[324,42757,1068],{"class":916},[324,42759,1242],{"class":867},[324,42761,31596],{"class":5945},[324,42763,913],{"class":863},[324,42765,1233],{"class":916},[324,42767,1242],{"class":867},[324,42769,31651],{"class":5945},[324,42771,913],{"class":863},[324,42773,944],{"class":916},[324,42775,1242],{"class":867},[324,42777,31605],{"class":5945},[324,42779,913],{"class":863},[324,42781,938],{"class":916},[324,42783,38769],{"class":867},[324,42785,42786],{"class":326,"line":8701},[324,42787,38774],{"class":867},[324,42789,42790,42792,42794,42796,42798,42800,42802,42804,42806,42808,42810,42812,42814],{"class":326,"line":8706},[324,42791,38819],{"class":867},[324,42793,31596],{"class":5945},[324,42795,913],{"class":863},[324,42797,938],{"class":916},[324,42799,1242],{"class":867},[324,42801,31651],{"class":5945},[324,42803,913],{"class":863},[324,42805,944],{"class":916},[324,42807,1242],{"class":867},[324,42809,31605],{"class":5945},[324,42811,913],{"class":863},[324,42813,1082],{"class":916},[324,42815,874],{"class":867},[324,42817,42818],{"class":326,"line":8712},[324,42819,38848],{"class":867},[324,42821,42822,42824,42827,42829],{"class":326,"line":8739},[324,42823,31567],{"class":916},[324,42825,42826],{"class":867},".b2",[324,42828,913],{"class":863},[324,42830,38731],{"class":867},[324,42832,42833,42835,42837,42839,42841,42843,42845,42847,42849,42851,42853,42855,42857],{"class":326,"line":8744},[324,42834,38736],{"class":867},[324,42836,31578],{"class":5945},[324,42838,913],{"class":863},[324,42840,1068],{"class":916},[324,42842,1242],{"class":867},[324,42844,31587],{"class":5945},[324,42846,913],{"class":863},[324,42848,1068],{"class":916},[324,42850,1242],{"class":867},[324,42852,31596],{"class":5945},[324,42854,913],{"class":863},[324,42856,1082],{"class":916},[324,42858,38769],{"class":867},[324,42860,42861],{"class":326,"line":8750},[324,42862,38774],{"class":867},[324,42864,42865,42867,42869,42871,42873,42875,42877,42879,42882,42884,42886,42888,42890,42892,42894,42896,42898],{"class":326,"line":8762},[324,42866,38736],{"class":867},[324,42868,31578],{"class":5945},[324,42870,913],{"class":863},[324,42872,1068],{"class":916},[324,42874,1242],{"class":867},[324,42876,31587],{"class":5945},[324,42878,913],{"class":863},[324,42880,42881],{"class":916},"192",[324,42883,1242],{"class":867},[324,42885,31596],{"class":5945},[324,42887,913],{"class":863},[324,42889,938],{"class":916},[324,42891,1242],{"class":867},[324,42893,31605],{"class":5945},[324,42895,913],{"class":863},[324,42897,1082],{"class":916},[324,42899,38769],{"class":867},[324,42901,42902],{"class":326,"line":8774},[324,42903,38774],{"class":867},[324,42905,42906,42908,42910,42912,42914,42916,42918,42920,42922,42924,42926,42928,42930],{"class":326,"line":8786},[324,42907,38819],{"class":867},[324,42909,31596],{"class":5945},[324,42911,913],{"class":863},[324,42913,938],{"class":916},[324,42915,1242],{"class":867},[324,42917,31651],{"class":5945},[324,42919,913],{"class":863},[324,42921,944],{"class":916},[324,42923,1242],{"class":867},[324,42925,31605],{"class":5945},[324,42927,913],{"class":863},[324,42929,1082],{"class":916},[324,42931,874],{"class":867},[324,42933,42934],{"class":326,"line":10445},[324,42935,38848],{"class":867},[324,42937,42938,42940,42943,42945],{"class":326,"line":10470},[324,42939,31567],{"class":916},[324,42941,42942],{"class":867},".b3",[324,42944,913],{"class":863},[324,42946,38731],{"class":867},[324,42948,42949,42952,42954,42956,42958,42961,42963,42965,42967,42970,42972,42974,42976,42979,42981],{"class":326,"line":10493},[324,42950,42951],{"class":867},"            Inception(",[324,42953,42881],{"class":916},[324,42955,1242],{"class":867},[324,42957,1068],{"class":916},[324,42959,42960],{"class":867},",(",[324,42962,1074],{"class":916},[324,42964,1242],{"class":867},[324,42966,32792],{"class":916},[324,42968,42969],{"class":867},"),(",[324,42971,1465],{"class":916},[324,42973,1242],{"class":867},[324,42975,1062],{"class":916},[324,42977,42978],{"class":867},"),",[324,42980,1062],{"class":916},[324,42982,38769],{"class":867},[324,42984,42985,42987,42989,42991,42993,42995,42997,42999,43001,43003,43005,43007,43009,43011,43013],{"class":326,"line":10517},[324,42986,42951],{"class":867},[324,42988,35592],{"class":916},[324,42990,1242],{"class":867},[324,42992,32792],{"class":916},[324,42994,42960],{"class":867},[324,42996,32792],{"class":916},[324,42998,1242],{"class":867},[324,43000,42881],{"class":916},[324,43002,42969],{"class":867},[324,43004,1062],{"class":916},[324,43006,1242],{"class":867},[324,43008,1074],{"class":916},[324,43010,42978],{"class":867},[324,43012,1068],{"class":916},[324,43014,38769],{"class":867},[324,43016,43017,43019,43021,43023,43025,43027,43029,43031,43033,43035,43037,43039,43041],{"class":326,"line":10522},[324,43018,38819],{"class":867},[324,43020,31596],{"class":5945},[324,43022,913],{"class":863},[324,43024,938],{"class":916},[324,43026,1242],{"class":867},[324,43028,31651],{"class":5945},[324,43030,913],{"class":863},[324,43032,944],{"class":916},[324,43034,1242],{"class":867},[324,43036,31605],{"class":5945},[324,43038,913],{"class":863},[324,43040,1082],{"class":916},[324,43042,874],{"class":867},[324,43044,43045],{"class":326,"line":10527},[324,43046,38848],{"class":867},[324,43048,43049,43051,43054,43056],{"class":326,"line":10532},[324,43050,31567],{"class":916},[324,43052,43053],{"class":867},".b4",[324,43055,913],{"class":863},[324,43057,38731],{"class":867},[324,43059,43060,43062,43065,43067,43069,43071,43073,43075,43078,43080,43082,43084,43086,43088,43090],{"class":326,"line":10541},[324,43061,42951],{"class":867},[324,43063,43064],{"class":916},"480",[324,43066,1242],{"class":867},[324,43068,42881],{"class":916},[324,43070,42960],{"class":867},[324,43072,1074],{"class":916},[324,43074,1242],{"class":867},[324,43076,43077],{"class":916},"208",[324,43079,42969],{"class":867},[324,43081,1465],{"class":916},[324,43083,1242],{"class":867},[324,43085,1471],{"class":916},[324,43087,42978],{"class":867},[324,43089,1068],{"class":916},[324,43091,38769],{"class":867},[324,43093,43094,43096,43098,43100,43102,43104,43106,43108,43110,43112,43114,43116,43118,43120,43122],{"class":326,"line":10546},[324,43095,42951],{"class":867},[324,43097,39179],{"class":916},[324,43099,1242],{"class":867},[324,43101,21777],{"class":916},[324,43103,42960],{"class":867},[324,43105,1482],{"class":916},[324,43107,1242],{"class":867},[324,43109,32223],{"class":916},[324,43111,42969],{"class":867},[324,43113,1664],{"class":916},[324,43115,1242],{"class":867},[324,43117,1068],{"class":916},[324,43119,42978],{"class":867},[324,43121,1068],{"class":916},[324,43123,38769],{"class":867},[324,43125,43126,43128,43130,43132,43134,43136,43138,43140,43142,43144,43146,43148,43150,43152,43154],{"class":326,"line":10552},[324,43127,42951],{"class":867},[324,43129,39179],{"class":916},[324,43131,1242],{"class":867},[324,43133,32792],{"class":916},[324,43135,42960],{"class":867},[324,43137,32792],{"class":916},[324,43139,1242],{"class":867},[324,43141,35592],{"class":916},[324,43143,42969],{"class":867},[324,43145,1664],{"class":916},[324,43147,1242],{"class":867},[324,43149,1068],{"class":916},[324,43151,42978],{"class":867},[324,43153,1068],{"class":916},[324,43155,38769],{"class":867},[324,43157,43158,43160,43162,43164,43166,43168,43170,43172,43175,43177,43179,43181,43183,43185,43187],{"class":326,"line":10573},[324,43159,42951],{"class":867},[324,43161,39179],{"class":916},[324,43163,1242],{"class":867},[324,43165,1482],{"class":916},[324,43167,42960],{"class":867},[324,43169,32792],{"class":916},[324,43171,1242],{"class":867},[324,43173,43174],{"class":916},"288",[324,43176,42969],{"class":867},[324,43178,1062],{"class":916},[324,43180,1242],{"class":867},[324,43182,1068],{"class":916},[324,43184,42978],{"class":867},[324,43186,1068],{"class":916},[324,43188,38769],{"class":867},[324,43190,43191,43193,43196,43198,43200,43202,43204,43206,43209,43211,43213,43215,43217,43219,43221],{"class":326,"line":10579},[324,43192,42951],{"class":867},[324,43194,43195],{"class":916},"528",[324,43197,1242],{"class":867},[324,43199,35592],{"class":916},[324,43201,42960],{"class":867},[324,43203,21777],{"class":916},[324,43205,1242],{"class":867},[324,43207,43208],{"class":916},"320",[324,43210,42969],{"class":867},[324,43212,1062],{"class":916},[324,43214,1242],{"class":867},[324,43216,32792],{"class":916},[324,43218,42978],{"class":867},[324,43220,32792],{"class":916},[324,43222,38769],{"class":867},[324,43224,43225,43227,43229,43231,43233,43235,43237,43239,43241,43243,43245,43247,43249],{"class":326,"line":10593},[324,43226,38819],{"class":867},[324,43228,31596],{"class":5945},[324,43230,913],{"class":863},[324,43232,938],{"class":916},[324,43234,1242],{"class":867},[324,43236,31651],{"class":5945},[324,43238,913],{"class":863},[324,43240,944],{"class":916},[324,43242,1242],{"class":867},[324,43244,31605],{"class":5945},[324,43246,913],{"class":863},[324,43248,1082],{"class":916},[324,43250,874],{"class":867},[324,43252,43253],{"class":326,"line":10599},[324,43254,38848],{"class":867},[324,43256,43257,43259,43262,43264],{"class":326,"line":10626},[324,43258,31567],{"class":916},[324,43260,43261],{"class":867},".b5",[324,43263,913],{"class":863},[324,43265,38731],{"class":867},[324,43267,43268,43270,43273,43275,43277,43279,43281,43283,43285,43287,43289,43291,43293,43295,43297],{"class":326,"line":10635},[324,43269,42951],{"class":867},[324,43271,43272],{"class":916},"832",[324,43274,1242],{"class":867},[324,43276,35592],{"class":916},[324,43278,42960],{"class":867},[324,43280,21777],{"class":916},[324,43282,1242],{"class":867},[324,43284,43208],{"class":916},[324,43286,42969],{"class":867},[324,43288,1062],{"class":916},[324,43290,1242],{"class":867},[324,43292,32792],{"class":916},[324,43294,42978],{"class":867},[324,43296,32792],{"class":916},[324,43298,38769],{"class":867},[324,43300,43301,43303,43305,43307,43309,43311,43313,43315,43317,43319,43321,43323,43325,43327,43329],{"class":326,"line":10641},[324,43302,42951],{"class":867},[324,43304,43272],{"class":916},[324,43306,1242],{"class":867},[324,43308,35662],{"class":916},[324,43310,42960],{"class":867},[324,43312,42881],{"class":916},[324,43314,1242],{"class":867},[324,43316,35662],{"class":916},[324,43318,42969],{"class":867},[324,43320,1471],{"class":916},[324,43322,1242],{"class":867},[324,43324,32792],{"class":916},[324,43326,42978],{"class":867},[324,43328,32792],{"class":916},[324,43330,38769],{"class":867},[324,43332,43333,43336,43338,43340,43342],{"class":326,"line":10649},[324,43334,43335],{"class":867},"            nn.AdaptiveAvgPool2d((",[324,43337,1082],{"class":916},[324,43339,1242],{"class":867},[324,43341,1082],{"class":916},[324,43343,43344],{"class":867},")),\n",[324,43346,43347],{"class":326,"line":10654},[324,43348,39512],{"class":867},[324,43350,43351,43353,43356,43358,43360],{"class":326,"line":17333},[324,43352,39517],{"class":867},[324,43354,43355],{"class":916},"1024",[324,43357,1242],{"class":867},[324,43359,1310],{"class":916},[324,43361,874],{"class":867},[324,43363,43364],{"class":326,"line":17339},[324,43365,38848],{"class":867},[324,43367,43368],{"class":326,"line":17362},[324,43369,43370],{"class":772},"        # 对模型参数初始化\n",[324,43372,43373,43375,43377,43379,43381],{"class":326,"line":17368},[324,43374,4132],{"class":863},[324,43376,39590],{"class":867},[324,43378,26767],{"class":863},[324,43380,39595],{"class":916},[324,43382,39598],{"class":867},[324,43384,43385,43387,43389],{"class":326,"line":17391},[324,43386,5371],{"class":863},[324,43388,39610],{"class":916},[324,43390,39613],{"class":867},[324,43392,43393,43395,43398,43400,43403,43405,43407,43409,43411],{"class":326,"line":17405},[324,43394,39623],{"class":867},[324,43396,43397],{"class":5945},"mode",[324,43399,913],{"class":863},[324,43401,43402],{"class":738},"'fan_out'",[324,43404,1242],{"class":867},[324,43406,39626],{"class":5945},[324,43408,913],{"class":863},[324,43410,39631],{"class":738},[324,43412,874],{"class":867},[324,43414,43415],{"class":326,"line":17425},[324,43416,43417],{"class":772},"                # ① m.weight要初始化的权重（比如Conv2d或Linear的权重矩阵）。\n",[324,43419,43420],{"class":326,"line":17431},[324,43421,43422],{"class":772},"                # ② mode = 'fan_out'决定使用的fan值：\n",[324,43424,43425],{"class":326,"line":17442},[324,43426,43427],{"class":772},"                # fan_in：输入通道数 × kernel大小（用于保持前向传播稳定）\n",[324,43429,43430],{"class":326,"line":17465},[324,43431,43432],{"class":772},"                # fan_out：输出通道数 × kernel大小（用于保持反向传播稳定）\n",[324,43434,43435],{"class":326,"line":17487},[324,43436,43437],{"class":772},"                # fan_out常用于残差网络ResNet，因为让反向传播更平稳。\n",[324,43439,43440],{"class":326,"line":17492},[324,43441,43442],{"class":772},"                # ③ nonlinearity = 'relu'告诉PyTorch你后面用的是ReLU，它会自动使用ReLU对应的gain系数\n",[324,43444,43445,43447,43449,43451,43453,43455],{"class":326,"line":17498},[324,43446,39643],{"class":863},[324,43448,39646],{"class":867},[324,43450,39649],{"class":863},[324,43452,39652],{"class":863},[324,43454,39655],{"class":916},[324,43456,4468],{"class":867},[324,43458,43459,43461,43463],{"class":326,"line":17512},[324,43460,39667],{"class":867},[324,43462,1056],{"class":916},[324,43464,874],{"class":867},[324,43466,43467,43470,43472],{"class":326,"line":17525},[324,43468,43469],{"class":863},"                elif",[324,43471,39610],{"class":916},[324,43473,39686],{"class":867},[324,43475,43476,43479,43481,43483,43485],{"class":326,"line":17530},[324,43477,43478],{"class":867},"                    nn.init.normal_(m.weight,",[324,43480,1056],{"class":916},[324,43482,1242],{"class":867},[324,43484,39708],{"class":916},[324,43486,874],{"class":867},[324,43488,43489,43492,43494,43496,43498,43500],{"class":326,"line":17544},[324,43490,43491],{"class":863},"                    if",[324,43493,39646],{"class":867},[324,43495,39649],{"class":863},[324,43497,39652],{"class":863},[324,43499,39655],{"class":916},[324,43501,4468],{"class":867},[324,43503,43504,43507,43509],{"class":326,"line":17549},[324,43505,43506],{"class":867},"                        nn.init.constant_(m.bias,",[324,43508,1056],{"class":916},[324,43510,874],{"class":867},[324,43512,43513],{"class":326,"line":17555},[324,43514,35887],{"class":772},[324,43516,43517,43519,43521],{"class":326,"line":17560},[324,43518,31523],{"class":863},[324,43520,31815],{"class":734},[324,43522,31818],{"class":867},[324,43524,43525,43527,43529,43531],{"class":326,"line":17574},[324,43526,31823],{"class":867},[324,43528,913],{"class":863},[324,43530,31545],{"class":916},[324,43532,43533],{"class":867},".b1(x)\n",[324,43535,43536,43538,43540,43542],{"class":326,"line":17579},[324,43537,31823],{"class":867},[324,43539,913],{"class":863},[324,43541,31545],{"class":916},[324,43543,43544],{"class":867},".b2(x)\n",[324,43546,43547,43549,43551,43553],{"class":326,"line":17584},[324,43548,31823],{"class":867},[324,43550,913],{"class":863},[324,43552,31545],{"class":916},[324,43554,43555],{"class":867},".b3(x)\n",[324,43557,43558,43560,43562,43564],{"class":326,"line":17598},[324,43559,31823],{"class":867},[324,43561,913],{"class":863},[324,43563,31545],{"class":916},[324,43565,43566],{"class":867},".b4(x)\n",[324,43568,43569,43571,43573,43575],{"class":326,"line":17610},[324,43570,31823],{"class":867},[324,43572,913],{"class":863},[324,43574,31545],{"class":916},[324,43576,43577],{"class":867},".b5(x)\n",[324,43579,43580,43582],{"class":326,"line":17615},[324,43581,15481],{"class":863},[324,43583,31931],{"class":867},[324,43585,43586],{"class":326,"line":17628},[324,43587,488],{"emptyLinePlaceholder":487},[324,43589,43590],{"class":326,"line":17633},[324,43591,43592],{"class":772},"# 模型展示\n",[324,43594,43595,43597,43599,43601,43603],{"class":326,"line":17638},[324,43596,2262],{"class":863},[324,43598,31942],{"class":916},[324,43600,3678],{"class":863},[324,43602,31947],{"class":738},[324,43604,4468],{"class":867},[324,43606,43607,43609,43611,43613,43615,43617,43619,43621,43623],{"class":326,"line":17643},[324,43608,31959],{"class":867},[324,43610,913],{"class":863},[324,43612,31173],{"class":867},[324,43614,31966],{"class":738},[324,43616,2435],{"class":863},[324,43618,31971],{"class":867},[324,43620,2432],{"class":863},[324,43622,31198],{"class":738},[324,43624,874],{"class":867},[324,43626,43627,43629,43631],{"class":326,"line":17656},[324,43628,32011],{"class":867},[324,43630,913],{"class":863},[324,43632,43633],{"class":867},"GoogLeNet(Inception).to(device)\n",[324,43635,43636,43638,43640,43642,43644,43646,43648,43650],{"class":326,"line":17661},[324,43637,32021],{"class":916},[324,43639,32024],{"class":867},[324,43641,1082],{"class":916},[324,43643,1242],{"class":867},[324,43645,32223],{"class":916},[324,43647,1242],{"class":867},[324,43649,32223],{"class":916},[324,43651,32037],{"class":867},[192,43653,43654],{"start":203},[195,43655,39905],{},[316,43657,43659],{"className":31100,"code":43658,"language":31102,"meta":50,"style":50},"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",[269,43660,43661,43667,43673,43683,43689,43699,43709,43719,43729,43739,43743,43754,43764,43768,43772,43776,43784,43796,43806,43822,43832,43864,43878,43888,43898,43902,43912,43926,43936,43946,43956,43962,43966,43970,43974,43978,43982,43990,44010,44014,44018,44022,44026,44030,44046,44050,44054,44062,44066,44070,44078,44082,44086,44090,44098,44102,44106,44110,44114,44122,44126,44134,44138,44146,44150,44158,44162,44170,44174,44178,44186,44190,44194,44198,44210,44234,44248,44252,44256,44260,44268,44272,44280,44284,44292,44296,44304,44308,44316,44320,44328,44332,44344,44348,44356,44360,44368,44372,44376,44380,44384,44392,44396,44412,44416,44424,44428,44432,44436,44440,44444,44448,44452,44468,44472,44484,44488,44500,44504,44516,44520,44528,44532,44540,44544,44548,44552,44558,44562,44570,44574,44590,44594,44602,44606,44622,44634,44638,44650,44654,44658,44666,44670,44674,44682,44686,44694,44698,44706,44710,44714,44756,44798,44802,44806,44822,44826,44842,44846,44850,44858,44862,44866,44878,44916,44920,44924,44932,44936,44950,44960,44966,44972,44978,44984,44988,44992,44998,45002,45006,45014,45018,45036,45040,45044,45048,45064,45068,45072,45076,45080,45084,45104,45124,45128,45132,45136,45144,45152,45156,45172,45192,45212,45216,45220,45228,45236,45240,45244,45248,45260,45264,45274,45282,45299],{"__ignoreMap":50},[324,43662,43663,43665],{"class":326,"line":327},[324,43664,31114],{"class":863},[324,43666,32544],{"class":867},[324,43668,43669,43671],{"class":326,"line":203},[324,43670,31114],{"class":863},[324,43672,32551],{"class":867},[324,43674,43675,43677,43679,43681],{"class":326,"line":338},[324,43676,31114],{"class":863},[324,43678,32562],{"class":867},[324,43680,32105],{"class":863},[324,43682,32567],{"class":867},[324,43684,43685,43687],{"class":326,"line":344},[324,43686,31114],{"class":863},[324,43688,31117],{"class":867},[324,43690,43691,43693,43695,43697],{"class":326,"line":484},[324,43692,31459],{"class":863},[324,43694,32137],{"class":867},[324,43696,31114],{"class":863},[324,43698,32584],{"class":867},[324,43700,43701,43703,43705,43707],{"class":326,"line":491},[324,43702,31459],{"class":863},[324,43704,32090],{"class":867},[324,43706,31114],{"class":863},[324,43708,32095],{"class":867},[324,43710,43711,43713,43715,43717],{"class":326,"line":496},[324,43712,31459],{"class":863},[324,43714,32120],{"class":867},[324,43716,31114],{"class":863},[324,43718,32125],{"class":867},[324,43720,43721,43723,43725,43727],{"class":326,"line":502},[324,43722,31114],{"class":863},[324,43724,32137],{"class":867},[324,43726,32105],{"class":863},[324,43728,32142],{"class":867},[324,43730,43731,43733,43735,43737],{"class":326,"line":508},[324,43732,31114],{"class":863},[324,43734,32154],{"class":867},[324,43736,32105],{"class":863},[324,43738,32159],{"class":867},[324,43740,43741],{"class":326,"line":514},[324,43742,32629],{"class":772},[324,43744,43745,43747,43749,43751],{"class":326,"line":2343},[324,43746,31459],{"class":863},[324,43748,32636],{"class":867},[324,43750,31114],{"class":863},[324,43752,43753],{"class":867}," GoogLeNet, Inception\n",[324,43755,43756,43758,43760,43762],{"class":326,"line":2348},[324,43757,31459],{"class":863},[324,43759,31462],{"class":867},[324,43761,31114],{"class":863},[324,43763,31467],{"class":867},[324,43765,43766],{"class":326,"line":2354},[324,43767,488],{"emptyLinePlaceholder":487},[324,43769,43770],{"class":326,"line":2359},[324,43771,488],{"emptyLinePlaceholder":487},[324,43773,43774],{"class":326,"line":2373},[324,43775,32664],{"class":772},[324,43777,43778,43780,43782],{"class":326,"line":2378},[324,43779,32669],{"class":863},[324,43781,32672],{"class":734},[324,43783,32675],{"class":867},[324,43785,43786,43788,43790,43792,43794],{"class":326,"line":2384},[324,43787,32680],{"class":867},[324,43789,913],{"class":863},[324,43791,32177],{"class":867},[324,43793,32185],{"class":738},[324,43795,32188],{"class":867},[324,43797,43798,43800,43802,43804],{"class":326,"line":2405},[324,43799,32693],{"class":5945},[324,43801,913],{"class":863},[324,43803,32198],{"class":916},[324,43805,32188],{"class":867},[324,43807,43808,43810,43812,43814,43816,43818,43820],{"class":326,"line":2410},[324,43809,32704],{"class":5945},[324,43811,913],{"class":863},[324,43813,32215],{"class":867},[324,43815,32218],{"class":5945},[324,43817,913],{"class":863},[324,43819,36171],{"class":916},[324,43821,32226],{"class":867},[324,43823,43824,43826,43828,43830],{"class":326,"line":2424},[324,43825,32721],{"class":5945},[324,43827,913],{"class":863},[324,43829,32198],{"class":916},[324,43831,874],{"class":867},[324,43833,43834,43836,43838,43840,43842,43844,43846,43848,43850,43852,43854,43856,43858,43860,43862],{"class":326,"line":2429},[324,43835,32732],{"class":867},[324,43837,913],{"class":863},[324,43839,32737],{"class":867},[324,43841,32740],{"class":916},[324,43843,868],{"class":867},[324,43845,32745],{"class":916},[324,43847,1319],{"class":863},[324,43849,8087],{"class":916},[324,43851,32752],{"class":867},[324,43853,32740],{"class":916},[324,43855,868],{"class":867},[324,43857,32759],{"class":916},[324,43859,1319],{"class":863},[324,43861,8087],{"class":916},[324,43863,32766],{"class":867},[324,43865,43866,43868,43870,43872,43874,43876],{"class":326,"line":2458},[324,43867,32771],{"class":867},[324,43869,913],{"class":863},[324,43871,32776],{"class":867},[324,43873,32259],{"class":5945},[324,43875,913],{"class":863},[324,43877,32264],{"class":867},[324,43879,43880,43882,43884,43886],{"class":326,"line":2463},[324,43881,32787],{"class":5945},[324,43883,913],{"class":863},[324,43885,1062],{"class":916},[324,43887,32188],{"class":867},[324,43889,43890,43892,43894,43896],{"class":326,"line":2480},[324,43891,32799],{"class":5945},[324,43893,913],{"class":863},[324,43895,32198],{"class":916},[324,43897,32188],{"class":867},[324,43899,43900],{"class":326,"line":2485},[324,43901,32810],{"class":772},[324,43903,43904,43906,43908,43910],{"class":326,"line":2490},[324,43905,32815],{"class":5945},[324,43907,913],{"class":863},[324,43909,1259],{"class":916},[324,43911,874],{"class":867},[324,43913,43914,43916,43918,43920,43922,43924],{"class":326,"line":2495},[324,43915,32826],{"class":867},[324,43917,913],{"class":863},[324,43919,32256],{"class":867},[324,43921,32259],{"class":5945},[324,43923,913],{"class":863},[324,43925,32837],{"class":867},[324,43927,43928,43930,43932,43934],{"class":326,"line":2509},[324,43929,32842],{"class":5945},[324,43931,913],{"class":863},[324,43933,1062],{"class":916},[324,43935,32188],{"class":867},[324,43937,43938,43940,43942,43944],{"class":326,"line":2514},[324,43939,32853],{"class":5945},[324,43941,913],{"class":863},[324,43943,32198],{"class":916},[324,43945,32188],{"class":867},[324,43947,43948,43950,43952,43954],{"class":326,"line":3306},[324,43949,32864],{"class":5945},[324,43951,913],{"class":863},[324,43953,1259],{"class":916},[324,43955,874],{"class":867},[324,43957,43958,43960],{"class":326,"line":3320},[324,43959,4819],{"class":863},[324,43961,32877],{"class":867},[324,43963,43964],{"class":326,"line":3328},[324,43965,488],{"emptyLinePlaceholder":487},[324,43967,43968],{"class":326,"line":3333},[324,43969,32886],{"class":772},[324,43971,43972],{"class":326,"line":3339},[324,43973,32891],{"class":772},[324,43975,43976],{"class":326,"line":3345},[324,43977,488],{"emptyLinePlaceholder":487},[324,43979,43980],{"class":326,"line":3350},[324,43981,32900],{"class":772},[324,43983,43984,43986,43988],{"class":326,"line":8677},[324,43985,32669],{"class":863},[324,43987,32907],{"class":734},[324,43989,32910],{"class":867},[324,43991,43992,43994,43996,43998,44000,44002,44004,44006,44008],{"class":326,"line":8701},[324,43993,31959],{"class":867},[324,43995,913],{"class":863},[324,43997,31173],{"class":867},[324,43999,31966],{"class":738},[324,44001,2435],{"class":863},[324,44003,31971],{"class":867},[324,44005,2432],{"class":863},[324,44007,32929],{"class":738},[324,44009,874],{"class":867},[324,44011,44012],{"class":326,"line":8706},[324,44013,488],{"emptyLinePlaceholder":487},[324,44015,44016],{"class":326,"line":8712},[324,44017,488],{"emptyLinePlaceholder":487},[324,44019,44020],{"class":326,"line":8739},[324,44021,32944],{"class":772},[324,44023,44024],{"class":326,"line":8744},[324,44025,32949],{"class":772},[324,44027,44028],{"class":326,"line":8750},[324,44029,32954],{"class":772},[324,44031,44032,44034,44036,44038,44040,44042,44044],{"class":326,"line":8762},[324,44033,32959],{"class":867},[324,44035,913],{"class":863},[324,44037,32964],{"class":867},[324,44039,32967],{"class":5945},[324,44041,913],{"class":863},[324,44043,32972],{"class":916},[324,44045,874],{"class":867},[324,44047,44048],{"class":326,"line":8774},[324,44049,488],{"emptyLinePlaceholder":487},[324,44051,44052],{"class":326,"line":8786},[324,44053,32983],{"class":772},[324,44055,44056,44058,44060],{"class":326,"line":10445},[324,44057,32988],{"class":867},[324,44059,913],{"class":863},[324,44061,32993],{"class":867},[324,44063,44064],{"class":326,"line":10470},[324,44065,488],{"emptyLinePlaceholder":487},[324,44067,44068],{"class":326,"line":10493},[324,44069,33002],{"class":772},[324,44071,44072,44074,44076],{"class":326,"line":10517},[324,44073,32011],{"class":867},[324,44075,913],{"class":863},[324,44077,33011],{"class":867},[324,44079,44080],{"class":326,"line":10522},[324,44081,33016],{"class":772},[324,44083,44084],{"class":326,"line":10527},[324,44085,33021],{"class":772},[324,44087,44088],{"class":326,"line":10532},[324,44089,33026],{"class":772},[324,44091,44092,44094,44096],{"class":326,"line":10541},[324,44093,33031],{"class":867},[324,44095,913],{"class":863},[324,44097,33036],{"class":867},[324,44099,44100],{"class":326,"line":10546},[324,44101,488],{"emptyLinePlaceholder":487},[324,44103,44104],{"class":326,"line":10552},[324,44105,488],{"emptyLinePlaceholder":487},[324,44107,44108],{"class":326,"line":10573},[324,44109,33049],{"class":772},[324,44111,44112],{"class":326,"line":10579},[324,44113,33054],{"class":772},[324,44115,44116,44118,44120],{"class":326,"line":10593},[324,44117,33059],{"class":867},[324,44119,913],{"class":863},[324,44121,33064],{"class":916},[324,44123,44124],{"class":326,"line":10599},[324,44125,33069],{"class":772},[324,44127,44128,44130,44132],{"class":326,"line":10626},[324,44129,33074],{"class":867},[324,44131,913],{"class":863},[324,44133,33079],{"class":867},[324,44135,44136],{"class":326,"line":10635},[324,44137,33084],{"class":772},[324,44139,44140,44142,44144],{"class":326,"line":10641},[324,44141,33089],{"class":867},[324,44143,913],{"class":863},[324,44145,33079],{"class":867},[324,44147,44148],{"class":326,"line":10649},[324,44149,33098],{"class":772},[324,44151,44152,44154,44156],{"class":326,"line":10654},[324,44153,33103],{"class":867},[324,44155,913],{"class":863},[324,44157,33079],{"class":867},[324,44159,44160],{"class":326,"line":17333},[324,44161,33112],{"class":772},[324,44163,44164,44166,44168],{"class":326,"line":17339},[324,44165,33117],{"class":867},[324,44167,913],{"class":863},[324,44169,33079],{"class":867},[324,44171,44172],{"class":326,"line":17362},[324,44173,488],{"emptyLinePlaceholder":487},[324,44175,44176],{"class":326,"line":17368},[324,44177,33130],{"class":772},[324,44179,44180,44182,44184],{"class":326,"line":17391},[324,44181,33135],{"class":867},[324,44183,913],{"class":863},[324,44185,33140],{"class":867},[324,44187,44188],{"class":326,"line":17405},[324,44189,488],{"emptyLinePlaceholder":487},[324,44191,44192],{"class":326,"line":17425},[324,44193,488],{"emptyLinePlaceholder":487},[324,44195,44196],{"class":326,"line":17431},[324,44197,33153],{"class":772},[324,44199,44200,44202,44204,44206,44208],{"class":326,"line":17442},[324,44201,3930],{"class":863},[324,44203,33160],{"class":867},[324,44205,26767],{"class":863},[324,44207,33165],{"class":916},[324,44209,33168],{"class":867},[324,44211,44212,44214,44216,44218,44220,44222,44224,44226,44228,44230,44232],{"class":326,"line":17465},[324,44213,33173],{"class":916},[324,44215,868],{"class":867},[324,44217,33178],{"class":738},[324,44219,33181],{"class":916},[324,44221,1448],{"class":738},[324,44223,33181],{"class":916},[324,44225,1115],{"class":738},[324,44227,33190],{"class":867},[324,44229,1396],{"class":863},[324,44231,1082],{"class":916},[324,44233,31219],{"class":867},[324,44235,44236,44238,44240,44242,44244,44246],{"class":326,"line":17487},[324,44237,33173],{"class":916},[324,44239,868],{"class":867},[324,44241,33205],{"class":738},[324,44243,1319],{"class":863},[324,44245,1310],{"class":916},[324,44247,874],{"class":867},[324,44249,44250],{"class":326,"line":17492},[324,44251,488],{"emptyLinePlaceholder":487},[324,44253,44254],{"class":326,"line":17498},[324,44255,33220],{"class":772},[324,44257,44258],{"class":326,"line":17512},[324,44259,33225],{"class":772},[324,44261,44262,44264,44266],{"class":326,"line":17525},[324,44263,33230],{"class":867},[324,44265,913],{"class":863},[324,44267,33064],{"class":916},[324,44269,44270],{"class":326,"line":17530},[324,44271,33239],{"class":772},[324,44273,44274,44276,44278],{"class":326,"line":17544},[324,44275,33244],{"class":867},[324,44277,913],{"class":863},[324,44279,3814],{"class":916},[324,44281,44282],{"class":326,"line":17549},[324,44283,33253],{"class":772},[324,44285,44286,44288,44290],{"class":326,"line":17555},[324,44287,33258],{"class":867},[324,44289,913],{"class":863},[324,44291,33064],{"class":916},[324,44293,44294],{"class":326,"line":17560},[324,44295,33267],{"class":772},[324,44297,44298,44300,44302],{"class":326,"line":17574},[324,44299,33272],{"class":867},[324,44301,913],{"class":863},[324,44303,3814],{"class":916},[324,44305,44306],{"class":326,"line":17579},[324,44307,33281],{"class":772},[324,44309,44310,44312,44314],{"class":326,"line":17584},[324,44311,33286],{"class":867},[324,44313,913],{"class":863},[324,44315,3814],{"class":916},[324,44317,44318],{"class":326,"line":17598},[324,44319,33295],{"class":772},[324,44321,44322,44324,44326],{"class":326,"line":17610},[324,44323,33300],{"class":867},[324,44325,913],{"class":863},[324,44327,3814],{"class":916},[324,44329,44330],{"class":326,"line":17615},[324,44331,33309],{"class":772},[324,44333,44334,44336,44338,44340,44342],{"class":326,"line":17628},[324,44335,4132],{"class":863},[324,44337,32323],{"class":867},[324,44339,26767],{"class":863},[324,44341,32328],{"class":916},[324,44343,33322],{"class":867},[324,44345,44346],{"class":326,"line":17633},[324,44347,33327],{"class":772},[324,44349,44350,44352,44354],{"class":326,"line":17638},[324,44351,33332],{"class":867},[324,44353,913],{"class":863},[324,44355,33337],{"class":867},[324,44357,44358],{"class":326,"line":17643},[324,44359,33342],{"class":772},[324,44361,44362,44364,44366],{"class":326,"line":17656},[324,44363,33347],{"class":867},[324,44365,913],{"class":863},[324,44367,33352],{"class":867},[324,44369,44370],{"class":326,"line":17661},[324,44371,33358],{"class":772},[324,44373,44374],{"class":326,"line":33355},[324,44375,33364],{"class":867},[324,44377,44378],{"class":326,"line":33361},[324,44379,33370],{"class":772},[324,44381,44382],{"class":326,"line":33367},[324,44383,33376],{"class":772},[324,44385,44386,44388,44390],{"class":326,"line":33373},[324,44387,33382],{"class":867},[324,44389,913],{"class":863},[324,44391,33387],{"class":867},[324,44393,44394],{"class":326,"line":33379},[324,44395,33393],{"class":772},[324,44397,44398,44400,44402,44404,44406,44408,44410],{"class":326,"line":33390},[324,44399,33399],{"class":867},[324,44401,913],{"class":863},[324,44403,33404],{"class":867},[324,44405,33407],{"class":5945},[324,44407,913],{"class":863},[324,44409,1082],{"class":916},[324,44411,874],{"class":867},[324,44413,44414],{"class":326,"line":33396},[324,44415,33419],{"class":772},[324,44417,44418,44420,44422],{"class":326,"line":33416},[324,44419,33425],{"class":867},[324,44421,913],{"class":863},[324,44423,33430],{"class":867},[324,44425,44426],{"class":326,"line":33422},[324,44427,33436],{"class":772},[324,44429,44430],{"class":326,"line":33433},[324,44431,33442],{"class":867},[324,44433,44434],{"class":326,"line":33439},[324,44435,33448],{"class":772},[324,44437,44438],{"class":326,"line":33445},[324,44439,33454],{"class":867},[324,44441,44442],{"class":326,"line":33451},[324,44443,33460],{"class":772},[324,44445,44446],{"class":326,"line":33457},[324,44447,33466],{"class":867},[324,44449,44450],{"class":326,"line":33463},[324,44451,33472],{"class":772},[324,44453,44454,44456,44458,44460,44462,44464,44466],{"class":326,"line":33469},[324,44455,33478],{"class":867},[324,44457,10206],{"class":863},[324,44459,33483],{"class":867},[324,44461,1319],{"class":863},[324,44463,33488],{"class":867},[324,44465,1056],{"class":916},[324,44467,874],{"class":867},[324,44469,44470],{"class":326,"line":33475},[324,44471,33498],{"class":772},[324,44473,44474,44476,44478,44480,44482],{"class":326,"line":33495},[324,44475,33504],{"class":867},[324,44477,10206],{"class":863},[324,44479,33509],{"class":867},[324,44481,3678],{"class":863},[324,44483,33514],{"class":867},[324,44485,44486],{"class":326,"line":33501},[324,44487,33520],{"class":772},[324,44489,44490,44492,44494,44496,44498],{"class":326,"line":33517},[324,44491,33526],{"class":867},[324,44493,10206],{"class":863},[324,44495,33488],{"class":867},[324,44497,1056],{"class":916},[324,44499,874],{"class":867},[324,44501,44502],{"class":326,"line":33523},[324,44503,33540],{"class":772},[324,44505,44506,44508,44510,44512,44514],{"class":326,"line":33537},[324,44507,4132],{"class":863},[324,44509,33548],{"class":867},[324,44511,26767],{"class":863},[324,44513,32328],{"class":916},[324,44515,33555],{"class":867},[324,44517,44518],{"class":326,"line":33543},[324,44519,33561],{"class":772},[324,44521,44522,44524,44526],{"class":326,"line":33558},[324,44523,33332],{"class":867},[324,44525,913],{"class":863},[324,44527,33337],{"class":867},[324,44529,44530],{"class":326,"line":33564},[324,44531,33576],{"class":772},[324,44533,44534,44536,44538],{"class":326,"line":33573},[324,44535,33347],{"class":867},[324,44537,913],{"class":863},[324,44539,33352],{"class":867},[324,44541,44542],{"class":326,"line":33579},[324,44543,33591],{"class":772},[324,44545,44546],{"class":326,"line":33588},[324,44547,33597],{"class":867},[324,44549,44550],{"class":326,"line":33594},[324,44551,37078],{"class":772},[324,44553,44554,44556],{"class":326,"line":33600},[324,44555,33603],{"class":863},[324,44557,33606],{"class":867},[324,44559,44560],{"class":326,"line":33609},[324,44561,33612],{"class":772},[324,44563,44564,44566,44568],{"class":326,"line":33615},[324,44565,37093],{"class":867},[324,44567,913],{"class":863},[324,44569,33387],{"class":867},[324,44571,44572],{"class":326,"line":33626},[324,44573,33629],{"class":772},[324,44575,44576,44578,44580,44582,44584,44586,44588],{"class":326,"line":33632},[324,44577,37106],{"class":867},[324,44579,913],{"class":863},[324,44581,33404],{"class":867},[324,44583,33407],{"class":5945},[324,44585,913],{"class":863},[324,44587,1082],{"class":916},[324,44589,874],{"class":867},[324,44591,44592],{"class":326,"line":33651},[324,44593,33654],{"class":772},[324,44595,44596,44598,44600],{"class":326,"line":33657},[324,44597,37127],{"class":867},[324,44599,913],{"class":863},[324,44601,33430],{"class":867},[324,44603,44604],{"class":326,"line":33668},[324,44605,33671],{"class":772},[324,44607,44608,44610,44612,44614,44616,44618,44620],{"class":326,"line":33674},[324,44609,37140],{"class":867},[324,44611,10206],{"class":863},[324,44613,37145],{"class":867},[324,44615,1319],{"class":863},[324,44617,33488],{"class":867},[324,44619,1056],{"class":916},[324,44621,874],{"class":867},[324,44623,44624,44626,44628,44630,44632],{"class":326,"line":33694},[324,44625,37158],{"class":867},[324,44627,10206],{"class":863},[324,44629,33509],{"class":867},[324,44631,3678],{"class":863},[324,44633,33514],{"class":867},[324,44635,44636],{"class":326,"line":33710},[324,44637,37171],{"class":772},[324,44639,44640,44642,44644,44646,44648],{"class":326,"line":33716},[324,44641,37176],{"class":867},[324,44643,10206],{"class":863},[324,44645,33488],{"class":867},[324,44647,1056],{"class":916},[324,44649,874],{"class":867},[324,44651,44652],{"class":326,"line":33730},[324,44653,33733],{"class":772},[324,44655,44656],{"class":326,"line":33736},[324,44657,33739],{"class":772},[324,44659,44660,44662,44664],{"class":326,"line":33742},[324,44661,33745],{"class":867},[324,44663,1448],{"class":863},[324,44665,33750],{"class":867},[324,44667,44668],{"class":326,"line":33753},[324,44669,33756],{"class":772},[324,44671,44672],{"class":326,"line":33759},[324,44673,33762],{"class":772},[324,44675,44676,44678,44680],{"class":326,"line":33765},[324,44677,33768],{"class":867},[324,44679,1448],{"class":863},[324,44681,33750],{"class":867},[324,44683,44684],{"class":326,"line":33775},[324,44685,33778],{"class":772},[324,44687,44688,44690,44692],{"class":326,"line":33781},[324,44689,33784],{"class":867},[324,44691,1448],{"class":863},[324,44693,33789],{"class":867},[324,44695,44696],{"class":326,"line":33792},[324,44697,33795],{"class":772},[324,44699,44700,44702,44704],{"class":326,"line":33798},[324,44701,33801],{"class":867},[324,44703,1448],{"class":863},[324,44705,33789],{"class":867},[324,44707,44708],{"class":326,"line":33808},[324,44709,488],{"emptyLinePlaceholder":487},[324,44711,44712],{"class":326,"line":33813},[324,44713,33816],{"class":772},[324,44715,44716,44718,44720,44722,44724,44726,44728,44730,44732,44734,44736,44738,44740,44742,44744,44746,44748,44750,44752,44754],{"class":326,"line":33819},[324,44717,33173],{"class":916},[324,44719,868],{"class":867},[324,44721,4321],{"class":738},[324,44723,33181],{"class":916},[324,44725,33830],{"class":738},[324,44727,1760],{"class":916},[324,44729,33835],{"class":863},[324,44731,1810],{"class":916},[324,44733,33840],{"class":738},[324,44735,1760],{"class":916},[324,44737,33835],{"class":863},[324,44739,1810],{"class":916},[324,44741,4321],{"class":738},[324,44743,33851],{"class":867},[324,44745,1396],{"class":863},[324,44747,1082],{"class":916},[324,44749,33858],{"class":867},[324,44751,1396],{"class":863},[324,44753,1082],{"class":916},[324,44755,33865],{"class":867},[324,44757,44758,44760,44762,44764,44766,44768,44770,44772,44774,44776,44778,44780,44782,44784,44786,44788,44790,44792,44794,44796],{"class":326,"line":33868},[324,44759,33173],{"class":916},[324,44761,868],{"class":867},[324,44763,4321],{"class":738},[324,44765,33181],{"class":916},[324,44767,33879],{"class":738},[324,44769,1760],{"class":916},[324,44771,33835],{"class":863},[324,44773,1810],{"class":916},[324,44775,33888],{"class":738},[324,44777,1760],{"class":916},[324,44779,33835],{"class":863},[324,44781,1810],{"class":916},[324,44783,4321],{"class":738},[324,44785,33899],{"class":867},[324,44787,1396],{"class":863},[324,44789,1082],{"class":916},[324,44791,33906],{"class":867},[324,44793,1396],{"class":863},[324,44795,1082],{"class":916},[324,44797,33865],{"class":867},[324,44799,44800],{"class":326,"line":33915},[324,44801,488],{"emptyLinePlaceholder":487},[324,44803,44804],{"class":326,"line":33920},[324,44805,33923],{"class":772},[324,44807,44808,44810,44812,44814,44816,44818,44820],{"class":326,"line":33926},[324,44809,3226],{"class":863},[324,44811,33931],{"class":867},[324,44813,1396],{"class":863},[324,44815,1082],{"class":916},[324,44817,1804],{"class":867},[324,44819,1824],{"class":863},[324,44821,33942],{"class":867},[324,44823,44824],{"class":326,"line":33945},[324,44825,33948],{"class":772},[324,44827,44828,44830,44832,44834,44836,44838,44840],{"class":326,"line":33951},[324,44829,33954],{"class":867},[324,44831,907],{"class":916},[324,44833,913],{"class":863},[324,44835,33961],{"class":867},[324,44837,1396],{"class":863},[324,44839,1082],{"class":916},[324,44841,33968],{"class":867},[324,44843,44844],{"class":326,"line":33971},[324,44845,33974],{"class":772},[324,44847,44848],{"class":326,"line":33977},[324,44849,33980],{"class":772},[324,44851,44852,44854,44856],{"class":326,"line":33983},[324,44853,33986],{"class":867},[324,44855,913],{"class":863},[324,44857,33036],{"class":867},[324,44859,44860],{"class":326,"line":33993},[324,44861,488],{"emptyLinePlaceholder":487},[324,44863,44864],{"class":326,"line":33998},[324,44865,34001],{"class":772},[324,44867,44868,44870,44872,44874,44876],{"class":326,"line":34004},[324,44869,34007],{"class":867},[324,44871,913],{"class":863},[324,44873,34012],{"class":867},[324,44875,1396],{"class":863},[324,44877,34017],{"class":867},[324,44879,44880,44882,44884,44886,44888,44890,44892,44894,44896,44898,44900,44902,44904,44906,44908,44910,44912,44914],{"class":326,"line":34020},[324,44881,33173],{"class":916},[324,44883,868],{"class":867},[324,44885,34027],{"class":738},[324,44887,1760],{"class":916},[324,44889,34032],{"class":863},[324,44891,1810],{"class":916},[324,44893,1408],{"class":738},[324,44895,1760],{"class":916},[324,44897,34032],{"class":863},[324,44899,1810],{"class":916},[324,44901,34045],{"class":738},[324,44903,34048],{"class":867},[324,44905,34051],{"class":863},[324,44907,1771],{"class":916},[324,44909,34056],{"class":867},[324,44911,1192],{"class":863},[324,44913,1771],{"class":916},[324,44915,31219],{"class":867},[324,44917,44918],{"class":326,"line":34065},[324,44919,37455],{"class":772},[324,44921,44922],{"class":326,"line":34071},[324,44923,37460],{"class":772},[324,44925,44926,44928,44930],{"class":326,"line":34077},[324,44927,37465],{"class":867},[324,44929,34089],{"class":738},[324,44931,874],{"class":867},[324,44933,44934],{"class":326,"line":34083},[324,44935,34109],{"class":772},[324,44937,44938,44940,44942,44944,44946,44948],{"class":326,"line":34094},[324,44939,34115],{"class":867},[324,44941,913],{"class":863},[324,44943,34120],{"class":867},[324,44945,34123],{"class":5945},[324,44947,913],{"class":863},[324,44949,2277],{"class":867},[324,44951,44952,44954,44956,44958],{"class":326,"line":34100},[324,44953,34133],{"class":738},[324,44955,1723],{"class":867},[324,44957,34138],{"class":916},[324,44959,34141],{"class":867},[324,44961,44962,44964],{"class":326,"line":34106},[324,44963,34147],{"class":738},[324,44965,34150],{"class":867},[324,44967,44968,44970],{"class":326,"line":34112},[324,44969,34156],{"class":738},[324,44971,34159],{"class":867},[324,44973,44974,44976],{"class":326,"line":34130},[324,44975,34165],{"class":738},[324,44977,34168],{"class":867},[324,44979,44980,44982],{"class":326,"line":34144},[324,44981,34174],{"class":738},[324,44983,34177],{"class":867},[324,44985,44986],{"class":326,"line":34153},[324,44987,34183],{"class":867},[324,44989,44990],{"class":326,"line":34162},[324,44991,34189],{"class":772},[324,44993,44994,44996],{"class":326,"line":34171},[324,44995,4819],{"class":863},[324,44997,34197],{"class":867},[324,44999,45000],{"class":326,"line":34180},[324,45001,488],{"emptyLinePlaceholder":487},[324,45003,45004],{"class":326,"line":34186},[324,45005,34208],{"class":772},[324,45007,45008,45010,45012],{"class":326,"line":34192},[324,45009,32669],{"class":863},[324,45011,34216],{"class":734},[324,45013,34219],{"class":867},[324,45015,45016],{"class":326,"line":34200},[324,45017,34225],{"class":772},[324,45019,45020,45022,45024,45026,45028,45030,45032,45034],{"class":326,"line":34205},[324,45021,34231],{"class":867},[324,45023,32415],{"class":5945},[324,45025,913],{"class":863},[324,45027,868],{"class":867},[324,45029,1362],{"class":916},[324,45031,1242],{"class":867},[324,45033,1157],{"class":916},[324,45035,31219],{"class":867},[324,45037,45038],{"class":326,"line":34211},[324,45039,34251],{"class":772},[324,45041,45042],{"class":326,"line":34222},[324,45043,34257],{"class":772},[324,45045,45046],{"class":326,"line":34228},[324,45047,34263],{"class":772},[324,45049,45050,45052,45054,45056,45058,45060,45062],{"class":326,"line":34248},[324,45051,32449],{"class":867},[324,45053,1082],{"class":916},[324,45055,1242],{"class":867},[324,45057,944],{"class":916},[324,45059,1242],{"class":867},[324,45061,1082],{"class":916},[324,45063,874],{"class":867},[324,45065,45066],{"class":326,"line":34254},[324,45067,34286],{"class":772},[324,45069,45070],{"class":326,"line":34260},[324,45071,34292],{"class":772},[324,45073,45074],{"class":326,"line":34266},[324,45075,34298],{"class":772},[324,45077,45078],{"class":326,"line":34283},[324,45079,34304],{"class":772},[324,45081,45082],{"class":326,"line":34289},[324,45083,34310],{"class":772},[324,45085,45086,45088,45090,45092,45094,45096,45098,45100,45102],{"class":326,"line":34295},[324,45087,34316],{"class":867},[324,45089,34319],{"class":738},[324,45091,34322],{"class":867},[324,45093,34325],{"class":738},[324,45095,1242],{"class":867},[324,45097,34330],{"class":5945},[324,45099,913],{"class":863},[324,45101,34335],{"class":738},[324,45103,874],{"class":867},[324,45105,45106,45108,45110,45112,45114,45116,45118,45120,45122],{"class":326,"line":34301},[324,45107,34316],{"class":867},[324,45109,34319],{"class":738},[324,45111,34347],{"class":867},[324,45113,34350],{"class":738},[324,45115,1242],{"class":867},[324,45117,34330],{"class":5945},[324,45119,913],{"class":863},[324,45121,34359],{"class":738},[324,45123,874],{"class":867},[324,45125,45126],{"class":326,"line":34307},[324,45127,34367],{"class":772},[324,45129,45130],{"class":326,"line":34313},[324,45131,34373],{"class":867},[324,45133,45134],{"class":326,"line":34340},[324,45135,34379],{"class":772},[324,45137,45138,45140,45142],{"class":326,"line":34364},[324,45139,34385],{"class":867},[324,45141,34388],{"class":738},[324,45143,874],{"class":867},[324,45145,45146,45148,45150],{"class":326,"line":34370},[324,45147,34396],{"class":867},[324,45149,34399],{"class":738},[324,45151,874],{"class":867},[324,45153,45154],{"class":326,"line":34376},[324,45155,34407],{"class":772},[324,45157,45158,45160,45162,45164,45166,45168,45170],{"class":326,"line":34382},[324,45159,32449],{"class":867},[324,45161,1082],{"class":916},[324,45163,1242],{"class":867},[324,45165,944],{"class":916},[324,45167,1242],{"class":867},[324,45169,944],{"class":916},[324,45171,874],{"class":867},[324,45173,45174,45176,45178,45180,45182,45184,45186,45188,45190],{"class":326,"line":34393},[324,45175,34316],{"class":867},[324,45177,34319],{"class":738},[324,45179,34434],{"class":867},[324,45181,34325],{"class":738},[324,45183,1242],{"class":867},[324,45185,34330],{"class":5945},[324,45187,913],{"class":863},[324,45189,34445],{"class":738},[324,45191,874],{"class":867},[324,45193,45194,45196,45198,45200,45202,45204,45206,45208,45210],{"class":326,"line":34404},[324,45195,34316],{"class":867},[324,45197,34319],{"class":738},[324,45199,34457],{"class":867},[324,45201,34350],{"class":738},[324,45203,1242],{"class":867},[324,45205,34330],{"class":5945},[324,45207,913],{"class":863},[324,45209,34468],{"class":738},[324,45211,874],{"class":867},[324,45213,45214],{"class":326,"line":34410},[324,45215,34476],{"class":772},[324,45217,45218],{"class":326,"line":34427},[324,45219,34373],{"class":867},[324,45221,45222,45224,45226],{"class":326,"line":34450},[324,45223,34385],{"class":867},[324,45225,34319],{"class":738},[324,45227,874],{"class":867},[324,45229,45230,45232,45234],{"class":326,"line":34473},[324,45231,34396],{"class":867},[324,45233,34498],{"class":738},[324,45235,874],{"class":867},[324,45237,45238],{"class":326,"line":34479},[324,45239,34506],{"class":867},[324,45241,45242],{"class":326,"line":34484},[324,45243,488],{"emptyLinePlaceholder":487},[324,45245,45246],{"class":326,"line":34493},[324,45247,34517],{"class":772},[324,45249,45250,45252,45254,45256,45258],{"class":326,"line":34503},[324,45251,2262],{"class":863},[324,45253,31942],{"class":916},[324,45255,3678],{"class":863},[324,45257,31947],{"class":738},[324,45259,4468],{"class":867},[324,45261,45262],{"class":326,"line":34509},[324,45263,34536],{"class":772},[324,45265,45266,45269,45271],{"class":326,"line":34514},[324,45267,45268],{"class":867},"    GoogLeNet",[324,45270,913],{"class":863},[324,45272,45273],{"class":867},"GoogLeNet(Inception)\n",[324,45275,45276,45278,45280],{"class":326,"line":34520},[324,45277,34553],{"class":867},[324,45279,913],{"class":863},[324,45281,34558],{"class":867},[324,45283,45284,45286,45288,45291,45293,45295,45297],{"class":326,"line":34533},[324,45285,34115],{"class":867},[324,45287,913],{"class":863},[324,45289,45290],{"class":867},"train_model_process(GoogLeNet,train_dataloader,val_dataloader,",[324,45292,34571],{"class":5945},[324,45294,913],{"class":863},[324,45296,1815],{"class":916},[324,45298,874],{"class":867},[324,45300,45301],{"class":326,"line":34539},[324,45302,34583],{"class":867},[192,45304,45305],{"start":338},[195,45306,41296],{},[316,45308,45310],{"className":31100,"code":45309,"language":31102,"meta":50,"style":50},"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",[269,45311,45312,45318,45328,45338,45342,45352,45363,45367,45371,45375,45383,45399,45409,45425,45435,45449,45453,45463,45473,45483,45489,45493,45497,45505,45509,45525,45533,45537,45541,45549,45557,45561,45565,45569,45573,45579,45583,45593,45601,45609,45613,45617,45621,45629,45633,45649,45653,45657,45661,45673,45677,45689,45693,45697,45709,45713,45723,45727,45731,45743,45747,45755,45759,45763,45771,45775,45783,45787,45791,45795,45799,45803,45819,45827,45831,45835,45883,45889,45893,45903,45911,45919,45923,45927,45931,45935,45943,45947,45963,45967,45975,45983],{"__ignoreMap":50},[324,45313,45314,45316],{"class":326,"line":327},[324,45315,31114],{"class":863},[324,45317,31117],{"class":867},[324,45319,45320,45322,45324,45326],{"class":326,"line":203},[324,45321,31114],{"class":863},[324,45323,32137],{"class":867},[324,45325,32105],{"class":863},[324,45327,32142],{"class":867},[324,45329,45330,45332,45334,45336],{"class":326,"line":338},[324,45331,31459],{"class":863},[324,45333,32120],{"class":867},[324,45335,31114],{"class":863},[324,45337,32125],{"class":867},[324,45339,45340],{"class":326,"line":344},[324,45341,34644],{"class":772},[324,45343,45344,45346,45348,45350],{"class":326,"line":484},[324,45345,31459],{"class":863},[324,45347,32090],{"class":867},[324,45349,31114],{"class":863},[324,45351,32095],{"class":867},[324,45353,45354,45356,45358,45360],{"class":326,"line":491},[324,45355,31459],{"class":863},[324,45357,32636],{"class":867},[324,45359,31114],{"class":863},[324,45361,45362],{"class":867}," GoogLeNet,Inception\n",[324,45364,45365],{"class":326,"line":496},[324,45366,488],{"emptyLinePlaceholder":487},[324,45368,45369],{"class":326,"line":502},[324,45370,488],{"emptyLinePlaceholder":487},[324,45372,45373],{"class":326,"line":508},[324,45374,34673],{"class":772},[324,45376,45377,45379,45381],{"class":326,"line":514},[324,45378,32669],{"class":863},[324,45380,34680],{"class":734},[324,45382,32675],{"class":867},[324,45384,45385,45387,45389,45391,45393,45395,45397],{"class":326,"line":2343},[324,45386,34687],{"class":867},[324,45388,913],{"class":863},[324,45390,32177],{"class":867},[324,45392,32180],{"class":5945},[324,45394,913],{"class":863},[324,45396,32185],{"class":738},[324,45398,32188],{"class":867},[324,45400,45401,45403,45405,45407],{"class":326,"line":2348},[324,45402,34704],{"class":5945},[324,45404,913],{"class":863},[324,45406,34709],{"class":916},[324,45408,32188],{"class":867},[324,45410,45411,45413,45415,45417,45419,45421,45423],{"class":326,"line":2354},[324,45412,34716],{"class":5945},[324,45414,913],{"class":863},[324,45416,32215],{"class":867},[324,45418,32218],{"class":5945},[324,45420,913],{"class":863},[324,45422,36171],{"class":916},[324,45424,32226],{"class":867},[324,45426,45427,45429,45431,45433],{"class":326,"line":2359},[324,45428,34733],{"class":5945},[324,45430,913],{"class":863},[324,45432,32198],{"class":916},[324,45434,874],{"class":867},[324,45436,45437,45439,45441,45443,45445,45447],{"class":326,"line":2373},[324,45438,34744],{"class":867},[324,45440,913],{"class":863},[324,45442,32256],{"class":867},[324,45444,32259],{"class":5945},[324,45446,913],{"class":863},[324,45448,34755],{"class":867},[324,45450,45451],{"class":326,"line":2378},[324,45452,34760],{"class":772},[324,45454,45455,45457,45459,45461],{"class":326,"line":2384},[324,45456,34765],{"class":5945},[324,45458,913],{"class":863},[324,45460,1082],{"class":916},[324,45462,32188],{"class":867},[324,45464,45465,45467,45469,45471],{"class":326,"line":2405},[324,45466,34776],{"class":5945},[324,45468,913],{"class":863},[324,45470,32198],{"class":916},[324,45472,32188],{"class":867},[324,45474,45475,45477,45479,45481],{"class":326,"line":2410},[324,45476,34787],{"class":5945},[324,45478,913],{"class":863},[324,45480,1056],{"class":916},[324,45482,874],{"class":867},[324,45484,45485,45487],{"class":326,"line":2424},[324,45486,4819],{"class":863},[324,45488,34800],{"class":867},[324,45490,45491],{"class":326,"line":2429},[324,45492,488],{"emptyLinePlaceholder":487},[324,45494,45495],{"class":326,"line":2458},[324,45496,34809],{"class":772},[324,45498,45499,45501,45503],{"class":326,"line":2463},[324,45500,32669],{"class":863},[324,45502,34816],{"class":734},[324,45504,34819],{"class":867},[324,45506,45507],{"class":326,"line":2480},[324,45508,34824],{"class":772},[324,45510,45511,45513,45515,45517,45519,45521,45523],{"class":326,"line":2485},[324,45512,31959],{"class":867},[324,45514,913],{"class":863},[324,45516,31966],{"class":738},[324,45518,2435],{"class":863},[324,45520,31971],{"class":867},[324,45522,2432],{"class":863},[324,45524,34841],{"class":738},[324,45526,45527,45529,45531],{"class":326,"line":2490},[324,45528,32011],{"class":867},[324,45530,913],{"class":863},[324,45532,33011],{"class":867},[324,45534,45535],{"class":326,"line":2495},[324,45536,488],{"emptyLinePlaceholder":487},[324,45538,45539],{"class":326,"line":2509},[324,45540,34858],{"class":772},[324,45542,45543,45545,45547],{"class":326,"line":2514},[324,45544,34863],{"class":867},[324,45546,913],{"class":863},[324,45548,33064],{"class":916},[324,45550,45551,45553,45555],{"class":326,"line":3306},[324,45552,34872],{"class":867},[324,45554,913],{"class":863},[324,45556,3814],{"class":916},[324,45558,45559],{"class":326,"line":3320},[324,45560,488],{"emptyLinePlaceholder":487},[324,45562,45563],{"class":326,"line":3328},[324,45564,34885],{"class":772},[324,45566,45567],{"class":326,"line":3333},[324,45568,34890],{"class":772},[324,45570,45571],{"class":326,"line":3339},[324,45572,34895],{"class":772},[324,45574,45575,45577],{"class":326,"line":3345},[324,45576,34900],{"class":863},[324,45578,33606],{"class":867},[324,45580,45581],{"class":326,"line":3350},[324,45582,34907],{"class":772},[324,45584,45585,45587,45589,45591],{"class":326,"line":8677},[324,45586,4132],{"class":863},[324,45588,34914],{"class":867},[324,45590,26767],{"class":863},[324,45592,34919],{"class":867},[324,45594,45595,45597,45599],{"class":326,"line":8701},[324,45596,34924],{"class":867},[324,45598,913],{"class":863},[324,45600,34929],{"class":867},[324,45602,45603,45605,45607],{"class":326,"line":8706},[324,45604,34934],{"class":867},[324,45606,913],{"class":863},[324,45608,34939],{"class":867},[324,45610,45611],{"class":326,"line":8712},[324,45612,34944],{"class":772},[324,45614,45615],{"class":326,"line":8739},[324,45616,33597],{"class":867},[324,45618,45619],{"class":326,"line":8744},[324,45620,34953],{"class":772},[324,45622,45623,45625,45627],{"class":326,"line":8750},[324,45624,33382],{"class":867},[324,45626,913],{"class":863},[324,45628,34962],{"class":867},[324,45630,45631],{"class":326,"line":8762},[324,45632,34967],{"class":772},[324,45634,45635,45637,45639,45641,45643,45645,45647],{"class":326,"line":8774},[324,45636,33399],{"class":867},[324,45638,913],{"class":863},[324,45640,33404],{"class":867},[324,45642,33407],{"class":5945},[324,45644,913],{"class":863},[324,45646,1082],{"class":916},[324,45648,874],{"class":867},[324,45650,45651],{"class":326,"line":8786},[324,45652,34988],{"class":772},[324,45654,45655],{"class":326,"line":10445},[324,45656,34993],{"class":772},[324,45658,45659],{"class":326,"line":10470},[324,45660,34998],{"class":772},[324,45662,45663,45665,45667,45669,45671],{"class":326,"line":10493},[324,45664,35003],{"class":867},[324,45666,10206],{"class":863},[324,45668,33509],{"class":867},[324,45670,3678],{"class":863},[324,45672,35012],{"class":867},[324,45674,45675],{"class":326,"line":10517},[324,45676,35017],{"class":772},[324,45678,45679,45681,45683,45685,45687],{"class":326,"line":10522},[324,45680,35022],{"class":867},[324,45682,10206],{"class":863},[324,45684,35027],{"class":867},[324,45686,1056],{"class":916},[324,45688,874],{"class":867},[324,45690,45691],{"class":326,"line":10527},[324,45692,488],{"emptyLinePlaceholder":487},[324,45694,45695],{"class":326,"line":10532},[324,45696,35040],{"class":772},[324,45698,45699,45701,45703,45705,45707],{"class":326,"line":10541},[324,45700,35045],{"class":867},[324,45702,913],{"class":863},[324,45704,35050],{"class":867},[324,45706,1448],{"class":863},[324,45708,35055],{"class":867},[324,45710,45711],{"class":326,"line":10546},[324,45712,35060],{"class":772},[324,45714,45715,45717,45719,45721],{"class":326,"line":10552},[324,45716,33173],{"class":916},[324,45718,868],{"class":867},[324,45720,35069],{"class":738},[324,45722,35072],{"class":867},[324,45724,45725],{"class":326,"line":10573},[324,45726,488],{"emptyLinePlaceholder":487},[324,45728,45729],{"class":326,"line":10579},[324,45730,35081],{"class":772},[324,45732,45733,45735,45737,45739,45741],{"class":326,"line":10593},[324,45734,2262],{"class":863},[324,45736,31942],{"class":916},[324,45738,3678],{"class":863},[324,45740,31947],{"class":738},[324,45742,4468],{"class":867},[324,45744,45745],{"class":326,"line":10599},[324,45746,35098],{"class":772},[324,45748,45749,45751,45753],{"class":326,"line":10626},[324,45750,32011],{"class":867},[324,45752,913],{"class":863},[324,45754,45273],{"class":867},[324,45756,45757],{"class":326,"line":10635},[324,45758,35111],{"class":772},[324,45760,45761],{"class":326,"line":10641},[324,45762,35116],{"class":772},[324,45764,45765,45767,45769],{"class":326,"line":10649},[324,45766,35121],{"class":867},[324,45768,35124],{"class":738},[324,45770,31219],{"class":867},[324,45772,45773],{"class":326,"line":10654},[324,45774,35131],{"class":772},[324,45776,45777,45779,45781],{"class":326,"line":17333},[324,45778,34744],{"class":867},[324,45780,913],{"class":863},[324,45782,35140],{"class":867},[324,45784,45785],{"class":326,"line":17339},[324,45786,35145],{"class":772},[324,45788,45789],{"class":326,"line":17362},[324,45790,35150],{"class":867},[324,45792,45793],{"class":326,"line":17368},[324,45794,488],{"emptyLinePlaceholder":487},[324,45796,45797],{"class":326,"line":17391},[324,45798,35159],{"class":772},[324,45800,45801],{"class":326,"line":17405},[324,45802,35164],{"class":772},[324,45804,45805,45807,45809,45811,45813,45815,45817],{"class":326,"line":17425},[324,45806,31959],{"class":867},[324,45808,913],{"class":863},[324,45810,31966],{"class":738},[324,45812,2435],{"class":863},[324,45814,31971],{"class":867},[324,45816,2432],{"class":863},[324,45818,34841],{"class":738},[324,45820,45821,45823,45825],{"class":326,"line":17431},[324,45822,32011],{"class":867},[324,45824,913],{"class":863},[324,45826,33011],{"class":867},[324,45828,45829],{"class":326,"line":17442},[324,45830,35193],{"class":772},[324,45832,45833],{"class":326,"line":17465},[324,45834,35198],{"class":772},[324,45836,45837,45839,45841,45843,45845,45847,45849,45851,45853,45855,45857,45859,45861,45863,45865,45867,45869,45871,45873,45875,45877,45879,45881],{"class":326,"line":17487},[324,45838,35203],{"class":867},[324,45840,913],{"class":863},[324,45842,1754],{"class":867},[324,45844,35210],{"class":738},[324,45846,1242],{"class":867},[324,45848,35215],{"class":738},[324,45850,1242],{"class":867},[324,45852,35220],{"class":738},[324,45854,1242],{"class":867},[324,45856,35225],{"class":738},[324,45858,1242],{"class":867},[324,45860,35230],{"class":738},[324,45862,1242],{"class":867},[324,45864,35235],{"class":738},[324,45866,1242],{"class":867},[324,45868,35240],{"class":738},[324,45870,1242],{"class":867},[324,45872,35245],{"class":738},[324,45874,1242],{"class":867},[324,45876,35250],{"class":738},[324,45878,1242],{"class":867},[324,45880,35255],{"class":738},[324,45882,33968],{"class":867},[324,45884,45885,45887],{"class":326,"line":17492},[324,45886,34900],{"class":863},[324,45888,33606],{"class":867},[324,45890,45891],{"class":326,"line":17498},[324,45892,35268],{"class":772},[324,45894,45895,45897,45899,45901],{"class":326,"line":17512},[324,45896,4132],{"class":863},[324,45898,35275],{"class":867},[324,45900,26767],{"class":863},[324,45902,34919],{"class":867},[324,45904,45905,45907,45909],{"class":326,"line":17525},[324,45906,33332],{"class":867},[324,45908,913],{"class":863},[324,45910,33337],{"class":867},[324,45912,45913,45915,45917],{"class":326,"line":17530},[324,45914,33347],{"class":867},[324,45916,913],{"class":863},[324,45918,33352],{"class":867},[324,45920,45921],{"class":326,"line":17544},[324,45922,488],{"emptyLinePlaceholder":487},[324,45924,45925],{"class":326,"line":17549},[324,45926,35304],{"class":772},[324,45928,45929],{"class":326,"line":17555},[324,45930,33597],{"class":867},[324,45932,45933],{"class":326,"line":17560},[324,45934,35313],{"class":772},[324,45936,45937,45939,45941],{"class":326,"line":17574},[324,45938,33382],{"class":867},[324,45940,913],{"class":863},[324,45942,33387],{"class":867},[324,45944,45945],{"class":326,"line":17579},[324,45946,35326],{"class":772},[324,45948,45949,45951,45953,45955,45957,45959,45961],{"class":326,"line":17584},[324,45950,33399],{"class":867},[324,45952,913],{"class":863},[324,45954,33404],{"class":867},[324,45956,33407],{"class":5945},[324,45958,913],{"class":863},[324,45960,1082],{"class":916},[324,45962,874],{"class":867},[324,45964,45965],{"class":326,"line":17598},[324,45966,35347],{"class":772},[324,45968,45969,45971,45973],{"class":326,"line":17610},[324,45970,35352],{"class":867},[324,45972,913],{"class":863},[324,45974,35357],{"class":867},[324,45976,45977,45979,45981],{"class":326,"line":17615},[324,45978,35362],{"class":867},[324,45980,913],{"class":863},[324,45982,35367],{"class":867},[324,45984,45985,45987,45989,45991,45993,45995,45997,45999],{"class":326,"line":17628},[324,45986,35372],{"class":916},[324,45988,868],{"class":867},[324,45990,35377],{"class":738},[324,45992,35380],{"class":867},[324,45994,35383],{"class":738},[324,45996,1242],{"class":867},[324,45998,35388],{"class":738},[324,46000,35391],{"class":867},[35,46002,46004],{"id":46003},"_24训练自己的数据集","2.4.训练自己的数据集",[19,46006,46007],{},"猫狗分类任务",[19,46009,46010],{},"划分数据集和验证集",[316,46012,46014],{"className":31100,"code":46013,"language":31102,"meta":50,"style":50},"# 创建脚本，用于划分数据集和验证集\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",[269,46015,46016,46021,46028,46033,46044,46051,46055,46065,46079,46088,46092,46097,46107,46127,46131,46136,46146,46157,46170,46174,46179,46188,46198,46209,46213,46218,46228,46232,46237,46242,46247,46252,46257,46261,46271,46298,46311,46323,46350,46355,46360,46374,46379,46391,46406,46421,46429,46433,46438,46444,46456,46469,46474,46479,46484,46534,46540,46544],{"__ignoreMap":50},[324,46017,46018],{"class":326,"line":327},[324,46019,46020],{"class":772},"# 创建脚本，用于划分数据集和验证集\n",[324,46022,46023,46025],{"class":326,"line":203},[324,46024,31114],{"class":863},[324,46026,46027],{"class":867}," os\n",[324,46029,46030],{"class":326,"line":338},[324,46031,46032],{"class":772},"# shutil 是 Python 标准库里的一个模块，主要用于高级文件操作，比如复制文件、移动文件、删除目录等\n",[324,46034,46035,46037,46040,46042],{"class":326,"line":344},[324,46036,31459],{"class":863},[324,46038,46039],{"class":867}," shutil ",[324,46041,31114],{"class":863},[324,46043,32544],{"class":867},[324,46045,46046,46048],{"class":326,"line":484},[324,46047,31114],{"class":863},[324,46049,46050],{"class":867}," random\n",[324,46052,46053],{"class":326,"line":491},[324,46054,488],{"emptyLinePlaceholder":487},[324,46056,46057,46059,46062],{"class":326,"line":496},[324,46058,32669],{"class":863},[324,46060,46061],{"class":734}," mkfile",[324,46063,46064],{"class":867},"(file):\n",[324,46066,46067,46069,46071,46074,46077],{"class":326,"line":502},[324,46068,3830],{"class":863},[324,46070,39652],{"class":863},[324,46072,46073],{"class":867}," os.path.exists(",[324,46075,46076],{"class":5945},"file",[324,46078,31508],{"class":867},[324,46080,46081,46084,46086],{"class":326,"line":508},[324,46082,46083],{"class":867},"        os.makedirs(",[324,46085,46076],{"class":5945},[324,46087,874],{"class":867},[324,46089,46090],{"class":326,"line":514},[324,46091,488],{"emptyLinePlaceholder":487},[324,46093,46094],{"class":326,"line":2343},[324,46095,46096],{"class":772},"# 获取data文件夹下所有文件夹名（即需要分类的类名）\n",[324,46098,46099,46102,46104],{"class":326,"line":2348},[324,46100,46101],{"class":867},"file_path",[324,46103,913],{"class":863},[324,46105,46106],{"class":738},"'data_cat_dog'\n",[324,46108,46109,46112,46114,46117,46119,46122,46124],{"class":326,"line":2354},[324,46110,46111],{"class":867},"flower_class",[324,46113,913],{"class":863},[324,46115,46116],{"class":867},"[cla ",[324,46118,3754],{"class":863},[324,46120,46121],{"class":867}," cla ",[324,46123,26767],{"class":863},[324,46125,46126],{"class":867}," os.listdir(file_path)]\n",[324,46128,46129],{"class":326,"line":2359},[324,46130,488],{"emptyLinePlaceholder":487},[324,46132,46133],{"class":326,"line":2373},[324,46134,46135],{"class":772},"# 创建训练集train文件夹\n",[324,46137,46138,46141,46144],{"class":326,"line":2378},[324,46139,46140],{"class":867},"mkfile(",[324,46142,46143],{"class":738},"'data\u002Ftrain'",[324,46145,874],{"class":867},[324,46147,46148,46150,46152,46154],{"class":326,"line":2384},[324,46149,3754],{"class":863},[324,46151,46121],{"class":867},[324,46153,26767],{"class":863},[324,46155,46156],{"class":867}," flower_class:\n",[324,46158,46159,46162,46165,46167],{"class":326,"line":2405},[324,46160,46161],{"class":867},"    mkfile(",[324,46163,46164],{"class":738},"'data\u002Ftrain\u002F'",[324,46166,1345],{"class":863},[324,46168,46169],{"class":867},"cla)\n",[324,46171,46172],{"class":326,"line":2410},[324,46173,488],{"emptyLinePlaceholder":487},[324,46175,46176],{"class":326,"line":2424},[324,46177,46178],{"class":772},"# 创建验证集val文件夹\n",[324,46180,46181,46183,46186],{"class":326,"line":2429},[324,46182,46140],{"class":867},[324,46184,46185],{"class":738},"'data\u002Ftest'",[324,46187,874],{"class":867},[324,46189,46190,46192,46194,46196],{"class":326,"line":2458},[324,46191,3754],{"class":863},[324,46193,46121],{"class":867},[324,46195,26767],{"class":863},[324,46197,46156],{"class":867},[324,46199,46200,46202,46205,46207],{"class":326,"line":2463},[324,46201,46161],{"class":867},[324,46203,46204],{"class":738},"'data\u002Ftest\u002F'",[324,46206,1345],{"class":863},[324,46208,46169],{"class":867},[324,46210,46211],{"class":326,"line":2480},[324,46212,488],{"emptyLinePlaceholder":487},[324,46214,46215],{"class":326,"line":2485},[324,46216,46217],{"class":772},"# 划分比例，训练集：测试集=9：1\n",[324,46219,46220,46223,46225],{"class":326,"line":2490},[324,46221,46222],{"class":867},"split_rate",[324,46224,913],{"class":863},[324,46226,46227],{"class":916},"0.1\n",[324,46229,46230],{"class":326,"line":2495},[324,46231,488],{"emptyLinePlaceholder":487},[324,46233,46234],{"class":326,"line":2509},[324,46235,46236],{"class":772},"# 遍历所有类别的全部图像并按比例分成训练集和验证集\n",[324,46238,46239],{"class":326,"line":2514},[324,46240,46241],{"class":772},"# cla_path：当前类别的原始图片路径\n",[324,46243,46244],{"class":326,"line":3306},[324,46245,46246],{"class":772},"# images：当前类别下所有图片的文件名列表\n",[324,46248,46249],{"class":326,"line":3320},[324,46250,46251],{"class":772},"# num：该类别图片总数\n",[324,46253,46254],{"class":326,"line":3328},[324,46255,46256],{"class":772},"# eval_index：从 images 随机抽取 10% 的图片作为验证集\n",[324,46258,46259],{"class":326,"line":3333},[324,46260,488],{"emptyLinePlaceholder":487},[324,46262,46263,46265,46267,46269],{"class":326,"line":3339},[324,46264,3754],{"class":863},[324,46266,46121],{"class":867},[324,46268,26767],{"class":863},[324,46270,46156],{"class":867},[324,46272,46273,46276,46278,46281,46283,46286,46289,46291,46293,46295],{"class":326,"line":3345},[324,46274,46275],{"class":867},"    cla_path ",[324,46277,913],{"class":863},[324,46279,46280],{"class":867}," file_path ",[324,46282,1345],{"class":863},[324,46284,46285],{"class":738}," '\u002F'",[324,46287,46288],{"class":863}," +",[324,46290,46121],{"class":867},[324,46292,1345],{"class":863},[324,46294,46285],{"class":738},[324,46296,46297],{"class":772},"  # 某一类别的子目录\n",[324,46299,46300,46303,46305,46308],{"class":326,"line":3350},[324,46301,46302],{"class":867},"    images ",[324,46304,913],{"class":863},[324,46306,46307],{"class":867}," os.listdir(cla_path)  ",[324,46309,46310],{"class":772},"# iamges 列表存储了该目录下所有图像的名称\n",[324,46312,46313,46316,46318,46320],{"class":326,"line":8677},[324,46314,46315],{"class":867},"    num ",[324,46317,913],{"class":863},[324,46319,8060],{"class":916},[324,46321,46322],{"class":867},"(images)\n",[324,46324,46325,46328,46330,46333,46335,46337,46339,46342,46344,46347],{"class":326,"line":8701},[324,46326,46327],{"class":867},"    eval_index ",[324,46329,913],{"class":863},[324,46331,46332],{"class":867}," random.sample(images, ",[324,46334,1357],{"class":5945},[324,46336,913],{"class":863},[324,46338,871],{"class":916},[324,46340,46341],{"class":867},"(num ",[324,46343,1319],{"class":863},[324,46345,46346],{"class":867}," split_rate))  ",[324,46348,46349],{"class":772},"# 从images列表中随机抽取 k 个图像名称\n",[324,46351,46352],{"class":326,"line":8706},[324,46353,46354],{"class":772},"    # 遍历该类别下的所有图片\n",[324,46356,46357],{"class":326,"line":8712},[324,46358,46359],{"class":772},"    # 如果图片在eval_index中，则复制到验证集对应目录，否则复制到训练集对应目录\n",[324,46361,46362,46364,46367,46369,46371],{"class":326,"line":8739},[324,46363,3930],{"class":863},[324,46365,46366],{"class":867}," index, image ",[324,46368,26767],{"class":863},[324,46370,32328],{"class":916},[324,46372,46373],{"class":867},"(images):\n",[324,46375,46376],{"class":326,"line":8744},[324,46377,46378],{"class":772},"        # eval_index 中保存验证集val的图像名称\n",[324,46380,46381,46383,46386,46388],{"class":326,"line":8750},[324,46382,3226],{"class":863},[324,46384,46385],{"class":867}," image ",[324,46387,26767],{"class":863},[324,46389,46390],{"class":867}," eval_index:\n",[324,46392,46393,46396,46398,46401,46403],{"class":326,"line":8762},[324,46394,46395],{"class":867},"            image_path ",[324,46397,913],{"class":863},[324,46399,46400],{"class":867}," cla_path ",[324,46402,1345],{"class":863},[324,46404,46405],{"class":867}," image\n",[324,46407,46408,46411,46413,46416,46418],{"class":326,"line":8774},[324,46409,46410],{"class":867},"            new_path ",[324,46412,913],{"class":863},[324,46414,46415],{"class":738}," 'data\u002Ftest\u002F'",[324,46417,46288],{"class":863},[324,46419,46420],{"class":867}," cla\n",[324,46422,46423,46426],{"class":326,"line":8786},[324,46424,46425],{"class":867},"            copy(image_path, new_path)  ",[324,46427,46428],{"class":772},"# 将选中的图像复制到新路径\n",[324,46430,46431],{"class":326,"line":10445},[324,46432,488],{"emptyLinePlaceholder":487},[324,46434,46435],{"class":326,"line":10470},[324,46436,46437],{"class":772},"        # 其余的图像保存在训练集train中\n",[324,46439,46440,46442],{"class":326,"line":10493},[324,46441,3263],{"class":863},[324,46443,4468],{"class":867},[324,46445,46446,46448,46450,46452,46454],{"class":326,"line":10517},[324,46447,46395],{"class":867},[324,46449,913],{"class":863},[324,46451,46400],{"class":867},[324,46453,1345],{"class":863},[324,46455,46405],{"class":867},[324,46457,46458,46460,46462,46465,46467],{"class":326,"line":10522},[324,46459,46410],{"class":867},[324,46461,913],{"class":863},[324,46463,46464],{"class":738}," 'data\u002Ftrain\u002F'",[324,46466,46288],{"class":863},[324,46468,46420],{"class":867},[324,46470,46471],{"class":326,"line":10527},[324,46472,46473],{"class":867},"            copy(image_path, new_path)\n",[324,46475,46476],{"class":326,"line":10532},[324,46477,46478],{"class":772},"            # 打印进度条信息\n",[324,46480,46481],{"class":326,"line":10541},[324,46482,46483],{"class":772},"            # \\r用于在同一行刷新。end = \"\"避免换行，每次刷新同一行显示进度\n",[324,46485,46486,46488,46490,46492,46495,46497,46499,46502,46504,46506,46508,46511,46514,46516,46518,46521,46524,46526,46528,46531],{"class":326,"line":10546},[324,46487,33173],{"class":916},[324,46489,868],{"class":867},[324,46491,1115],{"class":738},[324,46493,46494],{"class":916},"\\r",[324,46496,1754],{"class":738},[324,46498,33181],{"class":916},[324,46500,46501],{"class":738},"] processing [",[324,46503,33181],{"class":916},[324,46505,1448],{"class":738},[324,46507,33181],{"class":916},[324,46509,46510],{"class":738},"]\"",[324,46512,46513],{"class":867},".format(cla, index ",[324,46515,1345],{"class":863},[324,46517,25842],{"class":916},[324,46519,46520],{"class":867},", num), ",[324,46522,46523],{"class":5945},"end",[324,46525,913],{"class":863},[324,46527,8381],{"class":738},[324,46529,46530],{"class":867},")  ",[324,46532,46533],{"class":772},"# processing bar\n",[324,46535,46536,46538],{"class":326,"line":10552},[324,46537,32021],{"class":916},[324,46539,2706],{"class":867},[324,46541,46542],{"class":326,"line":10573},[324,46543,488],{"emptyLinePlaceholder":487},[324,46545,46546,46548,46550,46553],{"class":326,"line":10579},[324,46547,31137],{"class":916},[324,46549,868],{"class":867},[324,46551,46552],{"class":738},"\"processing done!\"",[324,46554,874],{"class":867},[19,46556,46557],{},"这里使用的是GoogLeNet模型来实现猫狗分类的",[151,46559,46561],{"id":46560},"_242模型代码","2.4.2.模型代码",[19,46563,46564],{},"这里数据集中彩色图片，是三通道的数据，所以将模型中的输入通道改为3",[316,46566,46568],{"className":31100,"code":46567,"language":31102,"meta":50,"style":50},"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",[269,46569,46570,46576,46586,46596,46600,46616,46624,46638,46648,46652,46682,46686,46720,46766,46770,46804,46850,46854,46858,46892,46922,46926,46934,46948,46970,46992,47010,47014,47028,47032,47036,47052,47056,47064,47078,47088,47132,47136,47164,47168,47178,47206,47210,47246,47250,47278,47282,47292,47324,47356,47384,47388,47398,47430,47462,47494,47526,47558,47586,47590,47600,47632,47664,47676,47680,47692,47696,47700,47712,47720,47740,47744,47748,47752,47756,47760,47764,47778,47786,47794,47806,47820,47828,47832,47840,47850,47860,47870,47880,47890,47896,47900,47904,47916,47936,47944],{"__ignoreMap":50},[324,46571,46572,46574],{"class":326,"line":327},[324,46573,31114],{"class":863},[324,46575,31117],{"class":867},[324,46577,46578,46580,46582,46584],{"class":326,"line":203},[324,46579,31459],{"class":863},[324,46581,31462],{"class":867},[324,46583,31114],{"class":863},[324,46585,31467],{"class":867},[324,46587,46588,46590,46592,46594],{"class":326,"line":338},[324,46589,31459],{"class":863},[324,46591,31479],{"class":867},[324,46593,31114],{"class":863},[324,46595,31484],{"class":867},[324,46597,46598],{"class":326,"line":344},[324,46599,488],{"emptyLinePlaceholder":487},[324,46601,46602,46604,46606,46608,46610,46612,46614],{"class":326,"line":484},[324,46603,15423],{"class":863},[324,46605,42215],{"class":734},[324,46607,868],{"class":867},[324,46609,31500],{"class":734},[324,46611,1422],{"class":867},[324,46613,31505],{"class":734},[324,46615,31508],{"class":867},[324,46617,46618,46620,46622],{"class":326,"line":491},[324,46619,31523],{"class":863},[324,46621,31526],{"class":916},[324,46623,42234],{"class":867},[324,46625,46626,46628,46630,46632,46634,46636],{"class":326,"line":496},[324,46627,31539],{"class":916},[324,46629,42241],{"class":867},[324,46631,31545],{"class":916},[324,46633,31548],{"class":867},[324,46635,31551],{"class":916},[324,46637,2706],{"class":867},[324,46639,46640,46642,46644,46646],{"class":326,"line":502},[324,46641,31567],{"class":916},[324,46643,35493],{"class":867},[324,46645,913],{"class":863},[324,46647,35498],{"class":867},[324,46649,46650],{"class":326,"line":508},[324,46651,42264],{"class":772},[324,46653,46654,46656,46658,46660,46662,46664,46666,46668,46670,46672,46674,46676,46678,46680],{"class":326,"line":514},[324,46655,31567],{"class":916},[324,46657,42271],{"class":867},[324,46659,913],{"class":863},[324,46661,31575],{"class":867},[324,46663,31578],{"class":5945},[324,46665,913],{"class":863},[324,46667,42282],{"class":867},[324,46669,31587],{"class":5945},[324,46671,913],{"class":863},[324,46673,42289],{"class":867},[324,46675,31596],{"class":5945},[324,46677,913],{"class":863},[324,46679,1082],{"class":916},[324,46681,874],{"class":867},[324,46683,46684],{"class":326,"line":2343},[324,46685,42302],{"class":772},[324,46687,46688,46690,46692,46694,46696,46698,46700,46702,46704,46706,46708,46710,46712,46714,46716,46718],{"class":326,"line":2348},[324,46689,31567],{"class":916},[324,46691,42309],{"class":867},[324,46693,913],{"class":863},[324,46695,31575],{"class":867},[324,46697,31578],{"class":5945},[324,46699,913],{"class":863},[324,46701,42282],{"class":867},[324,46703,31587],{"class":5945},[324,46705,913],{"class":863},[324,46707,42326],{"class":867},[324,46709,1056],{"class":916},[324,46711,42331],{"class":867},[324,46713,31596],{"class":5945},[324,46715,913],{"class":863},[324,46717,1082],{"class":916},[324,46719,874],{"class":867},[324,46721,46722,46724,46726,46728,46730,46732,46734,46736,46738,46740,46742,46744,46746,46748,46750,46752,46754,46756,46758,46760,46762,46764],{"class":326,"line":2354},[324,46723,31567],{"class":916},[324,46725,42346],{"class":867},[324,46727,913],{"class":863},[324,46729,31575],{"class":867},[324,46731,31578],{"class":5945},[324,46733,913],{"class":863},[324,46735,42326],{"class":867},[324,46737,1056],{"class":916},[324,46739,42331],{"class":867},[324,46741,31587],{"class":5945},[324,46743,913],{"class":863},[324,46745,42326],{"class":867},[324,46747,1082],{"class":916},[324,46749,42331],{"class":867},[324,46751,31596],{"class":5945},[324,46753,913],{"class":863},[324,46755,938],{"class":916},[324,46757,1242],{"class":867},[324,46759,31605],{"class":5945},[324,46761,913],{"class":863},[324,46763,1082],{"class":916},[324,46765,874],{"class":867},[324,46767,46768],{"class":326,"line":2359},[324,46769,42391],{"class":772},[324,46771,46772,46774,46776,46778,46780,46782,46784,46786,46788,46790,46792,46794,46796,46798,46800,46802],{"class":326,"line":2373},[324,46773,31567],{"class":916},[324,46775,42398],{"class":867},[324,46777,913],{"class":863},[324,46779,31575],{"class":867},[324,46781,31578],{"class":5945},[324,46783,913],{"class":863},[324,46785,42282],{"class":867},[324,46787,31587],{"class":5945},[324,46789,913],{"class":863},[324,46791,42415],{"class":867},[324,46793,1056],{"class":916},[324,46795,42331],{"class":867},[324,46797,31596],{"class":5945},[324,46799,913],{"class":863},[324,46801,1082],{"class":916},[324,46803,874],{"class":867},[324,46805,46806,46808,46810,46812,46814,46816,46818,46820,46822,46824,46826,46828,46830,46832,46834,46836,46838,46840,46842,46844,46846,46848],{"class":326,"line":2378},[324,46807,31567],{"class":916},[324,46809,42434],{"class":867},[324,46811,913],{"class":863},[324,46813,31575],{"class":867},[324,46815,31578],{"class":5945},[324,46817,913],{"class":863},[324,46819,42415],{"class":867},[324,46821,1056],{"class":916},[324,46823,42331],{"class":867},[324,46825,31587],{"class":5945},[324,46827,913],{"class":863},[324,46829,42415],{"class":867},[324,46831,1082],{"class":916},[324,46833,42331],{"class":867},[324,46835,31596],{"class":5945},[324,46837,913],{"class":863},[324,46839,1183],{"class":916},[324,46841,1242],{"class":867},[324,46843,31605],{"class":5945},[324,46845,913],{"class":863},[324,46847,944],{"class":916},[324,46849,874],{"class":867},[324,46851,46852],{"class":326,"line":2384},[324,46853,42479],{"class":772},[324,46855,46856],{"class":326,"line":2405},[324,46857,42484],{"class":772},[324,46859,46860,46862,46864,46866,46868,46870,46872,46874,46876,46878,46880,46882,46884,46886,46888,46890],{"class":326,"line":2410},[324,46861,31567],{"class":916},[324,46863,42491],{"class":867},[324,46865,913],{"class":863},[324,46867,35551],{"class":867},[324,46869,31596],{"class":5945},[324,46871,913],{"class":863},[324,46873,938],{"class":916},[324,46875,1242],{"class":867},[324,46877,31651],{"class":5945},[324,46879,913],{"class":863},[324,46881,1082],{"class":916},[324,46883,1242],{"class":867},[324,46885,31605],{"class":5945},[324,46887,913],{"class":863},[324,46889,1082],{"class":916},[324,46891,874],{"class":867},[324,46893,46894,46896,46898,46900,46902,46904,46906,46908,46910,46912,46914,46916,46918,46920],{"class":326,"line":2424},[324,46895,31567],{"class":916},[324,46897,42526],{"class":867},[324,46899,913],{"class":863},[324,46901,31575],{"class":867},[324,46903,31578],{"class":5945},[324,46905,913],{"class":863},[324,46907,42282],{"class":867},[324,46909,31587],{"class":5945},[324,46911,913],{"class":863},[324,46913,42543],{"class":867},[324,46915,31596],{"class":5945},[324,46917,913],{"class":863},[324,46919,1082],{"class":916},[324,46921,874],{"class":867},[324,46923,46924],{"class":326,"line":2429},[324,46925,488],{"emptyLinePlaceholder":487},[324,46927,46928,46930,46932],{"class":326,"line":2458},[324,46929,31523],{"class":863},[324,46931,31815],{"class":734},[324,46933,31818],{"class":867},[324,46935,46936,46938,46940,46942,46944,46946],{"class":326,"line":2463},[324,46937,42568],{"class":867},[324,46939,913],{"class":863},[324,46941,31545],{"class":916},[324,46943,35906],{"class":867},[324,46945,31545],{"class":916},[324,46947,42579],{"class":867},[324,46949,46950,46952,46954,46956,46958,46960,46962,46964,46966,46968],{"class":326,"line":2480},[324,46951,7814],{"class":867},[324,46953,913],{"class":863},[324,46955,31545],{"class":916},[324,46957,35906],{"class":867},[324,46959,31545],{"class":916},[324,46961,42594],{"class":867},[324,46963,31545],{"class":916},[324,46965,35906],{"class":867},[324,46967,31545],{"class":916},[324,46969,42603],{"class":867},[324,46971,46972,46974,46976,46978,46980,46982,46984,46986,46988,46990],{"class":326,"line":2485},[324,46973,42608],{"class":867},[324,46975,913],{"class":863},[324,46977,31545],{"class":916},[324,46979,35906],{"class":867},[324,46981,31545],{"class":916},[324,46983,42619],{"class":867},[324,46985,31545],{"class":916},[324,46987,35906],{"class":867},[324,46989,31545],{"class":916},[324,46991,42628],{"class":867},[324,46993,46994,46996,46998,47000,47002,47004,47006,47008],{"class":326,"line":2490},[324,46995,42633],{"class":867},[324,46997,913],{"class":863},[324,46999,31545],{"class":916},[324,47001,35906],{"class":867},[324,47003,31545],{"class":916},[324,47005,42644],{"class":867},[324,47007,31545],{"class":916},[324,47009,42649],{"class":867},[324,47011,47012],{"class":326,"line":2495},[324,47013,42654],{"class":772},[324,47015,47016,47018,47020,47022,47024,47026],{"class":326,"line":2509},[324,47017,15481],{"class":863},[324,47019,42661],{"class":867},[324,47021,33407],{"class":5945},[324,47023,913],{"class":863},[324,47025,1082],{"class":916},[324,47027,874],{"class":867},[324,47029,47030],{"class":326,"line":2514},[324,47031,488],{"emptyLinePlaceholder":487},[324,47033,47034],{"class":326,"line":3306},[324,47035,42682],{"class":772},[324,47037,47038,47040,47042,47044,47046,47048,47050],{"class":326,"line":3320},[324,47039,15423],{"class":863},[324,47041,42689],{"class":734},[324,47043,868],{"class":867},[324,47045,31500],{"class":734},[324,47047,1422],{"class":867},[324,47049,31505],{"class":734},[324,47051,31508],{"class":867},[324,47053,47054],{"class":326,"line":3328},[324,47055,42704],{"class":772},[324,47057,47058,47060,47062],{"class":326,"line":3333},[324,47059,31523],{"class":863},[324,47061,31526],{"class":916},[324,47063,42713],{"class":867},[324,47065,47066,47068,47070,47072,47074,47076],{"class":326,"line":3339},[324,47067,31539],{"class":916},[324,47069,42720],{"class":867},[324,47071,31545],{"class":916},[324,47073,31548],{"class":867},[324,47075,31551],{"class":916},[324,47077,2706],{"class":867},[324,47079,47080,47082,47084,47086],{"class":326,"line":3345},[324,47081,31567],{"class":916},[324,47083,42735],{"class":867},[324,47085,913],{"class":863},[324,47087,38731],{"class":867},[324,47089,47090,47092,47094,47096,47098,47100,47102,47104,47106,47108,47110,47112,47114,47116,47118,47120,47122,47124,47126,47128,47130],{"class":326,"line":3350},[324,47091,38736],{"class":867},[324,47093,31578],{"class":5945},[324,47095,913],{"class":863},[324,47097,938],{"class":916},[324,47099,1242],{"class":867},[324,47101,31587],{"class":5945},[324,47103,913],{"class":863},[324,47105,1068],{"class":916},[324,47107,1242],{"class":867},[324,47109,31596],{"class":5945},[324,47111,913],{"class":863},[324,47113,1233],{"class":916},[324,47115,1242],{"class":867},[324,47117,31651],{"class":5945},[324,47119,913],{"class":863},[324,47121,944],{"class":916},[324,47123,1242],{"class":867},[324,47125,31605],{"class":5945},[324,47127,913],{"class":863},[324,47129,938],{"class":916},[324,47131,38769],{"class":867},[324,47133,47134],{"class":326,"line":8677},[324,47135,38774],{"class":867},[324,47137,47138,47140,47142,47144,47146,47148,47150,47152,47154,47156,47158,47160,47162],{"class":326,"line":8701},[324,47139,38819],{"class":867},[324,47141,31596],{"class":5945},[324,47143,913],{"class":863},[324,47145,938],{"class":916},[324,47147,1242],{"class":867},[324,47149,31651],{"class":5945},[324,47151,913],{"class":863},[324,47153,944],{"class":916},[324,47155,1242],{"class":867},[324,47157,31605],{"class":5945},[324,47159,913],{"class":863},[324,47161,1082],{"class":916},[324,47163,874],{"class":867},[324,47165,47166],{"class":326,"line":8706},[324,47167,38848],{"class":867},[324,47169,47170,47172,47174,47176],{"class":326,"line":8712},[324,47171,31567],{"class":916},[324,47173,42826],{"class":867},[324,47175,913],{"class":863},[324,47177,38731],{"class":867},[324,47179,47180,47182,47184,47186,47188,47190,47192,47194,47196,47198,47200,47202,47204],{"class":326,"line":8739},[324,47181,38736],{"class":867},[324,47183,31578],{"class":5945},[324,47185,913],{"class":863},[324,47187,1068],{"class":916},[324,47189,1242],{"class":867},[324,47191,31587],{"class":5945},[324,47193,913],{"class":863},[324,47195,1068],{"class":916},[324,47197,1242],{"class":867},[324,47199,31596],{"class":5945},[324,47201,913],{"class":863},[324,47203,1082],{"class":916},[324,47205,38769],{"class":867},[324,47207,47208],{"class":326,"line":8744},[324,47209,38774],{"class":867},[324,47211,47212,47214,47216,47218,47220,47222,47224,47226,47228,47230,47232,47234,47236,47238,47240,47242,47244],{"class":326,"line":8750},[324,47213,38736],{"class":867},[324,47215,31578],{"class":5945},[324,47217,913],{"class":863},[324,47219,1068],{"class":916},[324,47221,1242],{"class":867},[324,47223,31587],{"class":5945},[324,47225,913],{"class":863},[324,47227,42881],{"class":916},[324,47229,1242],{"class":867},[324,47231,31596],{"class":5945},[324,47233,913],{"class":863},[324,47235,938],{"class":916},[324,47237,1242],{"class":867},[324,47239,31605],{"class":5945},[324,47241,913],{"class":863},[324,47243,1082],{"class":916},[324,47245,38769],{"class":867},[324,47247,47248],{"class":326,"line":8762},[324,47249,38774],{"class":867},[324,47251,47252,47254,47256,47258,47260,47262,47264,47266,47268,47270,47272,47274,47276],{"class":326,"line":8774},[324,47253,38819],{"class":867},[324,47255,31596],{"class":5945},[324,47257,913],{"class":863},[324,47259,938],{"class":916},[324,47261,1242],{"class":867},[324,47263,31651],{"class":5945},[324,47265,913],{"class":863},[324,47267,944],{"class":916},[324,47269,1242],{"class":867},[324,47271,31605],{"class":5945},[324,47273,913],{"class":863},[324,47275,1082],{"class":916},[324,47277,874],{"class":867},[324,47279,47280],{"class":326,"line":8786},[324,47281,38848],{"class":867},[324,47283,47284,47286,47288,47290],{"class":326,"line":10445},[324,47285,31567],{"class":916},[324,47287,42942],{"class":867},[324,47289,913],{"class":863},[324,47291,38731],{"class":867},[324,47293,47294,47296,47298,47300,47302,47304,47306,47308,47310,47312,47314,47316,47318,47320,47322],{"class":326,"line":10470},[324,47295,42951],{"class":867},[324,47297,42881],{"class":916},[324,47299,1242],{"class":867},[324,47301,1068],{"class":916},[324,47303,42960],{"class":867},[324,47305,1074],{"class":916},[324,47307,1242],{"class":867},[324,47309,32792],{"class":916},[324,47311,42969],{"class":867},[324,47313,1465],{"class":916},[324,47315,1242],{"class":867},[324,47317,1062],{"class":916},[324,47319,42978],{"class":867},[324,47321,1062],{"class":916},[324,47323,38769],{"class":867},[324,47325,47326,47328,47330,47332,47334,47336,47338,47340,47342,47344,47346,47348,47350,47352,47354],{"class":326,"line":10493},[324,47327,42951],{"class":867},[324,47329,35592],{"class":916},[324,47331,1242],{"class":867},[324,47333,32792],{"class":916},[324,47335,42960],{"class":867},[324,47337,32792],{"class":916},[324,47339,1242],{"class":867},[324,47341,42881],{"class":916},[324,47343,42969],{"class":867},[324,47345,1062],{"class":916},[324,47347,1242],{"class":867},[324,47349,1074],{"class":916},[324,47351,42978],{"class":867},[324,47353,1068],{"class":916},[324,47355,38769],{"class":867},[324,47357,47358,47360,47362,47364,47366,47368,47370,47372,47374,47376,47378,47380,47382],{"class":326,"line":10517},[324,47359,38819],{"class":867},[324,47361,31596],{"class":5945},[324,47363,913],{"class":863},[324,47365,938],{"class":916},[324,47367,1242],{"class":867},[324,47369,31651],{"class":5945},[324,47371,913],{"class":863},[324,47373,944],{"class":916},[324,47375,1242],{"class":867},[324,47377,31605],{"class":5945},[324,47379,913],{"class":863},[324,47381,1082],{"class":916},[324,47383,874],{"class":867},[324,47385,47386],{"class":326,"line":10522},[324,47387,38848],{"class":867},[324,47389,47390,47392,47394,47396],{"class":326,"line":10527},[324,47391,31567],{"class":916},[324,47393,43053],{"class":867},[324,47395,913],{"class":863},[324,47397,38731],{"class":867},[324,47399,47400,47402,47404,47406,47408,47410,47412,47414,47416,47418,47420,47422,47424,47426,47428],{"class":326,"line":10532},[324,47401,42951],{"class":867},[324,47403,43064],{"class":916},[324,47405,1242],{"class":867},[324,47407,42881],{"class":916},[324,47409,42960],{"class":867},[324,47411,1074],{"class":916},[324,47413,1242],{"class":867},[324,47415,43077],{"class":916},[324,47417,42969],{"class":867},[324,47419,1465],{"class":916},[324,47421,1242],{"class":867},[324,47423,1471],{"class":916},[324,47425,42978],{"class":867},[324,47427,1068],{"class":916},[324,47429,38769],{"class":867},[324,47431,47432,47434,47436,47438,47440,47442,47444,47446,47448,47450,47452,47454,47456,47458,47460],{"class":326,"line":10541},[324,47433,42951],{"class":867},[324,47435,39179],{"class":916},[324,47437,1242],{"class":867},[324,47439,21777],{"class":916},[324,47441,42960],{"class":867},[324,47443,1482],{"class":916},[324,47445,1242],{"class":867},[324,47447,32223],{"class":916},[324,47449,42969],{"class":867},[324,47451,1664],{"class":916},[324,47453,1242],{"class":867},[324,47455,1068],{"class":916},[324,47457,42978],{"class":867},[324,47459,1068],{"class":916},[324,47461,38769],{"class":867},[324,47463,47464,47466,47468,47470,47472,47474,47476,47478,47480,47482,47484,47486,47488,47490,47492],{"class":326,"line":10546},[324,47465,42951],{"class":867},[324,47467,39179],{"class":916},[324,47469,1242],{"class":867},[324,47471,32792],{"class":916},[324,47473,42960],{"class":867},[324,47475,32792],{"class":916},[324,47477,1242],{"class":867},[324,47479,35592],{"class":916},[324,47481,42969],{"class":867},[324,47483,1664],{"class":916},[324,47485,1242],{"class":867},[324,47487,1068],{"class":916},[324,47489,42978],{"class":867},[324,47491,1068],{"class":916},[324,47493,38769],{"class":867},[324,47495,47496,47498,47500,47502,47504,47506,47508,47510,47512,47514,47516,47518,47520,47522,47524],{"class":326,"line":10552},[324,47497,42951],{"class":867},[324,47499,39179],{"class":916},[324,47501,1242],{"class":867},[324,47503,1482],{"class":916},[324,47505,42960],{"class":867},[324,47507,32792],{"class":916},[324,47509,1242],{"class":867},[324,47511,43174],{"class":916},[324,47513,42969],{"class":867},[324,47515,1062],{"class":916},[324,47517,1242],{"class":867},[324,47519,1068],{"class":916},[324,47521,42978],{"class":867},[324,47523,1068],{"class":916},[324,47525,38769],{"class":867},[324,47527,47528,47530,47532,47534,47536,47538,47540,47542,47544,47546,47548,47550,47552,47554,47556],{"class":326,"line":10573},[324,47529,42951],{"class":867},[324,47531,43195],{"class":916},[324,47533,1242],{"class":867},[324,47535,35592],{"class":916},[324,47537,42960],{"class":867},[324,47539,21777],{"class":916},[324,47541,1242],{"class":867},[324,47543,43208],{"class":916},[324,47545,42969],{"class":867},[324,47547,1062],{"class":916},[324,47549,1242],{"class":867},[324,47551,32792],{"class":916},[324,47553,42978],{"class":867},[324,47555,32792],{"class":916},[324,47557,38769],{"class":867},[324,47559,47560,47562,47564,47566,47568,47570,47572,47574,47576,47578,47580,47582,47584],{"class":326,"line":10579},[324,47561,38819],{"class":867},[324,47563,31596],{"class":5945},[324,47565,913],{"class":863},[324,47567,938],{"class":916},[324,47569,1242],{"class":867},[324,47571,31651],{"class":5945},[324,47573,913],{"class":863},[324,47575,944],{"class":916},[324,47577,1242],{"class":867},[324,47579,31605],{"class":5945},[324,47581,913],{"class":863},[324,47583,1082],{"class":916},[324,47585,874],{"class":867},[324,47587,47588],{"class":326,"line":10593},[324,47589,38848],{"class":867},[324,47591,47592,47594,47596,47598],{"class":326,"line":10599},[324,47593,31567],{"class":916},[324,47595,43261],{"class":867},[324,47597,913],{"class":863},[324,47599,38731],{"class":867},[324,47601,47602,47604,47606,47608,47610,47612,47614,47616,47618,47620,47622,47624,47626,47628,47630],{"class":326,"line":10626},[324,47603,42951],{"class":867},[324,47605,43272],{"class":916},[324,47607,1242],{"class":867},[324,47609,35592],{"class":916},[324,47611,42960],{"class":867},[324,47613,21777],{"class":916},[324,47615,1242],{"class":867},[324,47617,43208],{"class":916},[324,47619,42969],{"class":867},[324,47621,1062],{"class":916},[324,47623,1242],{"class":867},[324,47625,32792],{"class":916},[324,47627,42978],{"class":867},[324,47629,32792],{"class":916},[324,47631,38769],{"class":867},[324,47633,47634,47636,47638,47640,47642,47644,47646,47648,47650,47652,47654,47656,47658,47660,47662],{"class":326,"line":10635},[324,47635,42951],{"class":867},[324,47637,43272],{"class":916},[324,47639,1242],{"class":867},[324,47641,35662],{"class":916},[324,47643,42960],{"class":867},[324,47645,42881],{"class":916},[324,47647,1242],{"class":867},[324,47649,35662],{"class":916},[324,47651,42969],{"class":867},[324,47653,1471],{"class":916},[324,47655,1242],{"class":867},[324,47657,32792],{"class":916},[324,47659,42978],{"class":867},[324,47661,32792],{"class":916},[324,47663,38769],{"class":867},[324,47665,47666,47668,47670,47672,47674],{"class":326,"line":10641},[324,47667,43335],{"class":867},[324,47669,1082],{"class":916},[324,47671,1242],{"class":867},[324,47673,1082],{"class":916},[324,47675,43344],{"class":867},[324,47677,47678],{"class":326,"line":10649},[324,47679,39512],{"class":867},[324,47681,47682,47684,47686,47688,47690],{"class":326,"line":10654},[324,47683,39517],{"class":867},[324,47685,43355],{"class":916},[324,47687,1242],{"class":867},[324,47689,944],{"class":916},[324,47691,874],{"class":867},[324,47693,47694],{"class":326,"line":17333},[324,47695,38848],{"class":867},[324,47697,47698],{"class":326,"line":17339},[324,47699,43370],{"class":772},[324,47701,47702,47704,47706,47708,47710],{"class":326,"line":17362},[324,47703,4132],{"class":863},[324,47705,39590],{"class":867},[324,47707,26767],{"class":863},[324,47709,39595],{"class":916},[324,47711,39598],{"class":867},[324,47713,47714,47716,47718],{"class":326,"line":17368},[324,47715,5371],{"class":863},[324,47717,39610],{"class":916},[324,47719,39613],{"class":867},[324,47721,47722,47724,47726,47728,47730,47732,47734,47736,47738],{"class":326,"line":17391},[324,47723,39623],{"class":867},[324,47725,43397],{"class":5945},[324,47727,913],{"class":863},[324,47729,43402],{"class":738},[324,47731,1242],{"class":867},[324,47733,39626],{"class":5945},[324,47735,913],{"class":863},[324,47737,39631],{"class":738},[324,47739,874],{"class":867},[324,47741,47742],{"class":326,"line":17405},[324,47743,43417],{"class":772},[324,47745,47746],{"class":326,"line":17425},[324,47747,43422],{"class":772},[324,47749,47750],{"class":326,"line":17431},[324,47751,43427],{"class":772},[324,47753,47754],{"class":326,"line":17442},[324,47755,43432],{"class":772},[324,47757,47758],{"class":326,"line":17465},[324,47759,43437],{"class":772},[324,47761,47762],{"class":326,"line":17487},[324,47763,43442],{"class":772},[324,47765,47766,47768,47770,47772,47774,47776],{"class":326,"line":17492},[324,47767,39643],{"class":863},[324,47769,39646],{"class":867},[324,47771,39649],{"class":863},[324,47773,39652],{"class":863},[324,47775,39655],{"class":916},[324,47777,4468],{"class":867},[324,47779,47780,47782,47784],{"class":326,"line":17498},[324,47781,39667],{"class":867},[324,47783,1056],{"class":916},[324,47785,874],{"class":867},[324,47787,47788,47790,47792],{"class":326,"line":17512},[324,47789,43469],{"class":863},[324,47791,39610],{"class":916},[324,47793,39686],{"class":867},[324,47795,47796,47798,47800,47802,47804],{"class":326,"line":17525},[324,47797,43478],{"class":867},[324,47799,1056],{"class":916},[324,47801,1242],{"class":867},[324,47803,39708],{"class":916},[324,47805,874],{"class":867},[324,47807,47808,47810,47812,47814,47816,47818],{"class":326,"line":17530},[324,47809,43491],{"class":863},[324,47811,39646],{"class":867},[324,47813,39649],{"class":863},[324,47815,39652],{"class":863},[324,47817,39655],{"class":916},[324,47819,4468],{"class":867},[324,47821,47822,47824,47826],{"class":326,"line":17544},[324,47823,43506],{"class":867},[324,47825,1056],{"class":916},[324,47827,874],{"class":867},[324,47829,47830],{"class":326,"line":17549},[324,47831,35887],{"class":772},[324,47833,47834,47836,47838],{"class":326,"line":17555},[324,47835,31523],{"class":863},[324,47837,31815],{"class":734},[324,47839,31818],{"class":867},[324,47841,47842,47844,47846,47848],{"class":326,"line":17560},[324,47843,31823],{"class":867},[324,47845,913],{"class":863},[324,47847,31545],{"class":916},[324,47849,43533],{"class":867},[324,47851,47852,47854,47856,47858],{"class":326,"line":17574},[324,47853,31823],{"class":867},[324,47855,913],{"class":863},[324,47857,31545],{"class":916},[324,47859,43544],{"class":867},[324,47861,47862,47864,47866,47868],{"class":326,"line":17579},[324,47863,31823],{"class":867},[324,47865,913],{"class":863},[324,47867,31545],{"class":916},[324,47869,43555],{"class":867},[324,47871,47872,47874,47876,47878],{"class":326,"line":17584},[324,47873,31823],{"class":867},[324,47875,913],{"class":863},[324,47877,31545],{"class":916},[324,47879,43566],{"class":867},[324,47881,47882,47884,47886,47888],{"class":326,"line":17598},[324,47883,31823],{"class":867},[324,47885,913],{"class":863},[324,47887,31545],{"class":916},[324,47889,43577],{"class":867},[324,47891,47892,47894],{"class":326,"line":17610},[324,47893,15481],{"class":863},[324,47895,31931],{"class":867},[324,47897,47898],{"class":326,"line":17615},[324,47899,488],{"emptyLinePlaceholder":487},[324,47901,47902],{"class":326,"line":17628},[324,47903,43592],{"class":772},[324,47905,47906,47908,47910,47912,47914],{"class":326,"line":17633},[324,47907,2262],{"class":863},[324,47909,31942],{"class":916},[324,47911,3678],{"class":863},[324,47913,31947],{"class":738},[324,47915,4468],{"class":867},[324,47917,47918,47920,47922,47924,47926,47928,47930,47932,47934],{"class":326,"line":17638},[324,47919,31959],{"class":867},[324,47921,913],{"class":863},[324,47923,31173],{"class":867},[324,47925,31966],{"class":738},[324,47927,2435],{"class":863},[324,47929,31971],{"class":867},[324,47931,2432],{"class":863},[324,47933,31198],{"class":738},[324,47935,874],{"class":867},[324,47937,47938,47940,47942],{"class":326,"line":17643},[324,47939,32011],{"class":867},[324,47941,913],{"class":863},[324,47943,43633],{"class":867},[324,47945,47946,47948,47950,47952,47954,47956,47958,47960],{"class":326,"line":17656},[324,47947,32021],{"class":916},[324,47949,32024],{"class":867},[324,47951,1082],{"class":916},[324,47953,1242],{"class":867},[324,47955,32223],{"class":916},[324,47957,1242],{"class":867},[324,47959,32223],{"class":916},[324,47961,32037],{"class":867},[151,47963,47965],{"id":47964},"_242训练代码包含预处理","2.4.2.训练代码（包含预处理）",[19,47967,47968],{},"计算图片的均值与方差，用于训练中归一化处理操作",[316,47970,47972],{"className":31100,"code":47971,"language":31102,"meta":50,"style":50},"# 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",[269,47973,47974,47979,47992,47997,48003,48008,48018,48022,48027,48037,48041,48046,48056,48073,48077,48082,48094,48106,48137,48146,48156,48166,48170,48175,48190,48194,48199,48204,48209,48219,48224,48249,48253,48258,48273,48277,48290,48294,48299,48304,48309,48314,48319,48329,48339,48362,48370,48378,48386,48390,48402,48406,48411,48415,48419,48426,48446,48470,48477,48491,48496,48501,48505,48519,48523,48535],{"__ignoreMap":50},[324,47975,47976],{"class":326,"line":327},[324,47977,47978],{"class":772},"# PIL（Python Imaging Library）里的 Image 用来读取图片\n",[324,47980,47981,47983,47986,47989],{"class":326,"line":203},[324,47982,31459],{"class":863},[324,47984,47985],{"class":916}," PIL",[324,47987,47988],{"class":863}," import",[324,47990,47991],{"class":867}," Image\n",[324,47993,47994],{"class":326,"line":338},[324,47995,47996],{"class":772},"# os 用来处理文件夹和文件路径\n",[324,47998,47999,48001],{"class":326,"line":344},[324,48000,31114],{"class":863},[324,48002,46027],{"class":867},[324,48004,48005],{"class":326,"line":484},[324,48006,48007],{"class":772},"# numpy 是科学计算库，用于做矩阵运算（这里用来处理图片像素）\n",[324,48009,48010,48012,48014,48016],{"class":326,"line":491},[324,48011,31114],{"class":863},[324,48013,32102],{"class":867},[324,48015,32105],{"class":863},[324,48017,32108],{"class":867},[324,48019,48020],{"class":326,"line":496},[324,48021,488],{"emptyLinePlaceholder":487},[324,48023,48024],{"class":326,"line":502},[324,48025,48026],{"class":772},"# 文件夹路径，包含所有图片文件\n",[324,48028,48029,48032,48034],{"class":326,"line":508},[324,48030,48031],{"class":867},"folder_path ",[324,48033,913],{"class":863},[324,48035,48036],{"class":738}," 'data_cat_dog'\n",[324,48038,48039],{"class":326,"line":514},[324,48040,488],{"emptyLinePlaceholder":487},[324,48042,48043],{"class":326,"line":2343},[324,48044,48045],{"class":772},"# 初始化累积变量\n",[324,48047,48048,48051,48053],{"class":326,"line":2348},[324,48049,48050],{"class":867},"total_pixels ",[324,48052,913],{"class":863},[324,48054,48055],{"class":916}," 0\n",[324,48057,48058,48061,48063,48066,48068,48070],{"class":326,"line":2354},[324,48059,48060],{"class":867},"sum_normalized_pixel_values ",[324,48062,913],{"class":863},[324,48064,48065],{"class":867}," np.zeros(",[324,48067,938],{"class":916},[324,48069,46530],{"class":867},[324,48071,48072],{"class":772},"# 如果是RGB图像，需要三个通道的均值和方差\n",[324,48074,48075],{"class":326,"line":2359},[324,48076,488],{"emptyLinePlaceholder":487},[324,48078,48079],{"class":326,"line":2373},[324,48080,48081],{"class":772},"# 遍历文件夹中的图片文件\n",[324,48083,48084,48086,48089,48091],{"class":326,"line":2378},[324,48085,3754],{"class":863},[324,48087,48088],{"class":867}," root, dirs, files ",[324,48090,26767],{"class":863},[324,48092,48093],{"class":867}," os.walk(folder_path):\n",[324,48095,48096,48098,48101,48103],{"class":326,"line":2384},[324,48097,3930],{"class":863},[324,48099,48100],{"class":867}," filename ",[324,48102,26767],{"class":863},[324,48104,48105],{"class":867}," files:\n",[324,48107,48108,48110,48113,48116,48118,48121,48123,48126,48128,48131,48134],{"class":326,"line":2405},[324,48109,3226],{"class":863},[324,48111,48112],{"class":867}," filename.endswith((",[324,48114,48115],{"class":738},"'.jpg'",[324,48117,13164],{"class":867},[324,48119,48120],{"class":738},"'.jpeg'",[324,48122,13164],{"class":867},[324,48124,48125],{"class":738},"'.png'",[324,48127,13164],{"class":867},[324,48129,48130],{"class":738},"'.bmp'",[324,48132,48133],{"class":867},")):  ",[324,48135,48136],{"class":772},"# 可根据实际情况添加其他格式\n",[324,48138,48139,48141,48143],{"class":326,"line":2410},[324,48140,46395],{"class":867},[324,48142,913],{"class":863},[324,48144,48145],{"class":867}," os.path.join(root, filename)\n",[324,48147,48148,48151,48153],{"class":326,"line":2424},[324,48149,48150],{"class":867},"            image ",[324,48152,913],{"class":863},[324,48154,48155],{"class":867}," Image.open(image_path)\n",[324,48157,48158,48161,48163],{"class":326,"line":2429},[324,48159,48160],{"class":867},"            image_array ",[324,48162,913],{"class":863},[324,48164,48165],{"class":867}," np.array(image)\n",[324,48167,48168],{"class":326,"line":2458},[324,48169,488],{"emptyLinePlaceholder":487},[324,48171,48172],{"class":326,"line":2463},[324,48173,48174],{"class":772},"            # 归一化像素值到0-1之间\n",[324,48176,48177,48180,48182,48185,48187],{"class":326,"line":2480},[324,48178,48179],{"class":867},"            normalized_image_array ",[324,48181,913],{"class":863},[324,48183,48184],{"class":867}," image_array ",[324,48186,1448],{"class":863},[324,48188,48189],{"class":916}," 255.0\n",[324,48191,48192],{"class":326,"line":2485},[324,48193,488],{"emptyLinePlaceholder":487},[324,48195,48196],{"class":326,"line":2490},[324,48197,48198],{"class":772},"            # print(image_path)\n",[324,48200,48201],{"class":326,"line":2495},[324,48202,48203],{"class":772},"            # print(normalized_image_array.shape)\n",[324,48205,48206],{"class":326,"line":2509},[324,48207,48208],{"class":772},"            # 累积归一化后的像素值和像素数量\n",[324,48210,48211,48214,48216],{"class":326,"line":2514},[324,48212,48213],{"class":867},"            total_pixels ",[324,48215,10206],{"class":863},[324,48217,48218],{"class":867}," normalized_image_array.size\n",[324,48220,48221],{"class":326,"line":3306},[324,48222,48223],{"class":772},"            # 是把图片在高度和宽度方向求和，得到每个通道的总和（RGB 三个通道分别求）\n",[324,48225,48226,48229,48231,48234,48237,48239,48241,48243,48245,48247],{"class":326,"line":3320},[324,48227,48228],{"class":867},"            sum_normalized_pixel_values ",[324,48230,10206],{"class":863},[324,48232,48233],{"class":867}," np.sum(normalized_image_array, ",[324,48235,48236],{"class":5945},"axis",[324,48238,913],{"class":863},[324,48240,868],{"class":867},[324,48242,1056],{"class":916},[324,48244,13164],{"class":867},[324,48246,1082],{"class":916},[324,48248,31219],{"class":867},[324,48250,48251],{"class":326,"line":3328},[324,48252,488],{"emptyLinePlaceholder":487},[324,48254,48255],{"class":326,"line":3333},[324,48256,48257],{"class":772},"# 用像素总和\u002F像素总数 就得到每个通道的均值\n",[324,48259,48260,48263,48265,48268,48270],{"class":326,"line":3339},[324,48261,48262],{"class":867},"mean ",[324,48264,913],{"class":863},[324,48266,48267],{"class":867}," sum_normalized_pixel_values ",[324,48269,1448],{"class":863},[324,48271,48272],{"class":867}," total_pixels\n",[324,48274,48275],{"class":326,"line":3345},[324,48276,488],{"emptyLinePlaceholder":487},[324,48278,48279,48282,48284,48286,48288],{"class":326,"line":3350},[324,48280,48281],{"class":867},"sum_squared_diff ",[324,48283,913],{"class":863},[324,48285,48065],{"class":867},[324,48287,938],{"class":916},[324,48289,874],{"class":867},[324,48291,48292],{"class":326,"line":8677},[324,48293,488],{"emptyLinePlaceholder":487},[324,48295,48296],{"class":326,"line":8701},[324,48297,48298],{"class":772},"# os.walk(folder_path)：遍历文件夹里所有文件和子文件夹\n",[324,48300,48301],{"class":326,"line":8706},[324,48302,48303],{"class":772},"# filename.endswith(...)：只选择图片文件（jpg\u002Fpng\u002Fbmp）\n",[324,48305,48306],{"class":326,"line":8712},[324,48307,48308],{"class":772},"# os.path.join(root, filename)：得到每张图片的完整路径\n",[324,48310,48311],{"class":326,"line":8739},[324,48312,48313],{"class":772},"# Image.open(image_path)：打开图片\n",[324,48315,48316],{"class":326,"line":8744},[324,48317,48318],{"class":772},"# np.array(image)：把图片转成 numpy 数组，形状一般是 (高度, 宽度, 3)\n",[324,48320,48321,48323,48325,48327],{"class":326,"line":8750},[324,48322,3754],{"class":863},[324,48324,48088],{"class":867},[324,48326,26767],{"class":863},[324,48328,48093],{"class":867},[324,48330,48331,48333,48335,48337],{"class":326,"line":8762},[324,48332,3930],{"class":863},[324,48334,48100],{"class":867},[324,48336,26767],{"class":863},[324,48338,48105],{"class":867},[324,48340,48341,48343,48345,48347,48349,48351,48353,48355,48357,48359],{"class":326,"line":8774},[324,48342,3226],{"class":863},[324,48344,48112],{"class":867},[324,48346,48115],{"class":738},[324,48348,13164],{"class":867},[324,48350,48120],{"class":738},[324,48352,13164],{"class":867},[324,48354,48125],{"class":738},[324,48356,13164],{"class":867},[324,48358,48130],{"class":738},[324,48360,48361],{"class":867},")):\n",[324,48363,48364,48366,48368],{"class":326,"line":8786},[324,48365,46395],{"class":867},[324,48367,913],{"class":863},[324,48369,48145],{"class":867},[324,48371,48372,48374,48376],{"class":326,"line":10445},[324,48373,48150],{"class":867},[324,48375,913],{"class":863},[324,48377,48155],{"class":867},[324,48379,48380,48382,48384],{"class":326,"line":10470},[324,48381,48160],{"class":867},[324,48383,913],{"class":863},[324,48385,48165],{"class":867},[324,48387,48388],{"class":326,"line":10493},[324,48389,48174],{"class":772},[324,48391,48392,48394,48396,48398,48400],{"class":326,"line":10517},[324,48393,48179],{"class":867},[324,48395,913],{"class":863},[324,48397,48184],{"class":867},[324,48399,1448],{"class":863},[324,48401,48189],{"class":916},[324,48403,48404],{"class":326,"line":10522},[324,48405,48203],{"class":772},[324,48407,48408],{"class":326,"line":10527},[324,48409,48410],{"class":772},"            # print(mean.shape)\n",[324,48412,48413],{"class":326,"line":10532},[324,48414,48198],{"class":772},[324,48416,48417],{"class":326,"line":10541},[324,48418,488],{"emptyLinePlaceholder":487},[324,48420,48421,48424],{"class":326,"line":10546},[324,48422,48423],{"class":863},"            try",[324,48425,4468],{"class":867},[324,48427,48428,48431,48433,48436,48438,48441,48443],{"class":326,"line":10552},[324,48429,48430],{"class":867},"                diff ",[324,48432,913],{"class":863},[324,48434,48435],{"class":867}," (normalized_image_array ",[324,48437,1396],{"class":863},[324,48439,48440],{"class":867}," mean) ",[324,48442,11390],{"class":863},[324,48444,48445],{"class":916}," 2\n",[324,48447,48448,48451,48453,48456,48458,48460,48462,48464,48466,48468],{"class":326,"line":10573},[324,48449,48450],{"class":867},"                sum_squared_diff ",[324,48452,10206],{"class":863},[324,48454,48455],{"class":867}," np.sum(diff, ",[324,48457,48236],{"class":5945},[324,48459,913],{"class":863},[324,48461,868],{"class":867},[324,48463,1056],{"class":916},[324,48465,13164],{"class":867},[324,48467,1082],{"class":916},[324,48469,31219],{"class":867},[324,48471,48472,48475],{"class":326,"line":10579},[324,48473,48474],{"class":863},"            except",[324,48476,4468],{"class":867},[324,48478,48479,48482,48484,48486,48489],{"class":326,"line":10593},[324,48480,48481],{"class":916},"                print",[324,48483,868],{"class":867},[324,48485,920],{"class":863},[324,48487,48488],{"class":738},"\"捕获到自定义异常\"",[324,48490,874],{"class":867},[324,48492,48493],{"class":326,"line":10599},[324,48494,48495],{"class":772},"            # diff = (normalized_image_array - mean) ** 2\n",[324,48497,48498],{"class":326,"line":10626},[324,48499,48500],{"class":772},"            # sum_squared_diff += np.sum(diff, axis=(0, 1))\n",[324,48502,48503],{"class":326,"line":10635},[324,48504,488],{"emptyLinePlaceholder":487},[324,48506,48507,48510,48512,48515,48517],{"class":326,"line":10641},[324,48508,48509],{"class":867},"variance ",[324,48511,913],{"class":863},[324,48513,48514],{"class":867}," sum_squared_diff ",[324,48516,1448],{"class":863},[324,48518,48272],{"class":867},[324,48520,48521],{"class":326,"line":10649},[324,48522,488],{"emptyLinePlaceholder":487},[324,48524,48525,48527,48529,48532],{"class":326,"line":10654},[324,48526,31137],{"class":916},[324,48528,868],{"class":867},[324,48530,48531],{"class":738},"\"Mean:\"",[324,48533,48534],{"class":867},", mean)\n",[324,48536,48537,48539,48541,48544],{"class":326,"line":17333},[324,48538,31137],{"class":916},[324,48540,868],{"class":867},[324,48542,48543],{"class":738},"\"Variance:\"",[324,48545,48546],{"class":867},", variance)\n",[316,48548,48550],{"className":31100,"code":48549,"language":31102,"meta":50,"style":50},"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",[269,48551,48552,48558,48564,48574,48580,48590,48604,48614,48624,48634,48638,48648,48658,48662,48666,48674,48679,48684,48703,48707,48712,48717,48722,48727,48768,48773,48783,48788,48801,48806,48811,48816,48821,48826,48830,48835,48840,48862,48866,48898,48912,48922,48932,48936,48946,48960,48970,48980,48990,48996,49000,49004,49008,49012,49016,49024,49044,49048,49052,49056,49060,49076,49080,49084,49092,49096,49100,49108,49112,49116,49120,49128,49132,49136,49140,49148,49152,49160,49164,49172,49176,49184,49188,49196,49200,49204,49212,49216,49220,49232,49256,49270,49274,49278,49282,49290,49294,49302,49306,49314,49318,49326,49330,49338,49342,49350,49354,49366,49370,49378,49382,49390,49394,49398,49402,49406,49414,49418,49434,49438,49446,49450,49454,49458,49462,49466,49470,49474,49490,49494,49506,49510,49522,49526,49538,49542,49550,49554,49562,49566,49570,49574,49580,49584,49592,49596,49612,49616,49624,49628,49644,49656,49660,49672,49676,49680,49688,49692,49696,49704,49708,49716,49720,49728,49732,49736,49778,49820,49824,49828,49844,49848,49864,49868,49872,49880,49884,49888,49900,49938,49942,49946,49954,49958,49972,49982,49988,49994,50000,50006,50010,50014,50020,50024,50028,50036,50040,50058,50062,50066,50070,50086,50090,50094,50098,50102,50106,50126,50146,50150,50154,50158,50166,50174,50178,50194,50214,50234,50238,50243,50252,50261,50266,50271,50276,50289,50294,50303,50312,50329],{"__ignoreMap":50},[324,48553,48554,48556],{"class":326,"line":327},[324,48555,31114],{"class":863},[324,48557,32544],{"class":867},[324,48559,48560,48562],{"class":326,"line":203},[324,48561,31114],{"class":863},[324,48563,32551],{"class":867},[324,48565,48566,48568,48570,48572],{"class":326,"line":338},[324,48567,31114],{"class":863},[324,48569,32562],{"class":867},[324,48571,32105],{"class":863},[324,48573,32567],{"class":867},[324,48575,48576,48578],{"class":326,"line":344},[324,48577,31114],{"class":863},[324,48579,31117],{"class":867},[324,48581,48582,48584,48586,48588],{"class":326,"line":484},[324,48583,31459],{"class":863},[324,48585,32137],{"class":867},[324,48587,31114],{"class":863},[324,48589,32584],{"class":867},[324,48591,48592,48594,48596,48598,48601],{"class":326,"line":491},[324,48593,31459],{"class":863},[324,48595,32090],{"class":867},[324,48597,31114],{"class":863},[324,48599,48600],{"class":867}," ImageFolder ",[324,48602,48603],{"class":772},"# 导入图像数据集,可以直接读取文件夹中的数据,并划分标签 \n",[324,48605,48606,48608,48610,48612],{"class":326,"line":496},[324,48607,31459],{"class":863},[324,48609,32120],{"class":867},[324,48611,31114],{"class":863},[324,48613,32125],{"class":867},[324,48615,48616,48618,48620,48622],{"class":326,"line":502},[324,48617,31114],{"class":863},[324,48619,32137],{"class":867},[324,48621,32105],{"class":863},[324,48623,32142],{"class":867},[324,48625,48626,48628,48630,48632],{"class":326,"line":508},[324,48627,31114],{"class":863},[324,48629,32154],{"class":867},[324,48631,32105],{"class":863},[324,48633,32159],{"class":867},[324,48635,48636],{"class":326,"line":514},[324,48637,32629],{"class":772},[324,48639,48640,48642,48644,48646],{"class":326,"line":2343},[324,48641,31459],{"class":863},[324,48643,32636],{"class":867},[324,48645,31114],{"class":863},[324,48647,43753],{"class":867},[324,48649,48650,48652,48654,48656],{"class":326,"line":2348},[324,48651,31459],{"class":863},[324,48653,31462],{"class":867},[324,48655,31114],{"class":863},[324,48657,31467],{"class":867},[324,48659,48660],{"class":326,"line":2354},[324,48661,488],{"emptyLinePlaceholder":487},[324,48663,48664],{"class":326,"line":2359},[324,48665,32664],{"class":772},[324,48667,48668,48670,48672],{"class":326,"line":2373},[324,48669,32669],{"class":863},[324,48671,32672],{"class":734},[324,48673,32675],{"class":867},[324,48675,48676],{"class":326,"line":2378},[324,48677,48678],{"class":772},"    # 导入自己的数据集，并进行数据处理\n",[324,48680,48681],{"class":326,"line":2384},[324,48682,48683],{"class":772},"    # 定义数据集的路径\n",[324,48685,48686,48689,48691,48693,48695,48697,48701],{"class":326,"line":2405},[324,48687,48688],{"class":916},"    ROOT_PATH",[324,48690,913],{"class":863},[324,48692,1534],{"class":863},[324,48694,1115],{"class":738},[324,48696,1422],{"class":916},[324,48698,48700],{"class":48699},"sA_wV","\u002Fdata\u002Ftrain",[324,48702,25857],{"class":738},[324,48704,48705],{"class":326,"line":2410},[324,48706,488],{"emptyLinePlaceholder":487},[324,48708,48709],{"class":326,"line":2424},[324,48710,48711],{"class":772},"    # 定义归一化方法\n",[324,48713,48714],{"class":326,"line":2429},[324,48715,48716],{"class":772},"    # 这里需要先计算一下数据集的均值和方差\n",[324,48718,48719],{"class":326,"line":2458},[324,48720,48721],{"class":772},"    #  mean_std.py 文件可以计算出均值和方差,然后把结果填入下面的 Normalize() 中\n",[324,48723,48724],{"class":326,"line":2463},[324,48725,48726],{"class":772},"    # 第一个参数是均值，第二个参数是方差\n",[324,48728,48729,48732,48734,48737,48740,48742,48745,48747,48750,48753,48756,48758,48761,48763,48766],{"class":326,"line":2480},[324,48730,48731],{"class":867},"    normalize",[324,48733,913],{"class":863},[324,48735,48736],{"class":867},"transforms.Normalize([",[324,48738,48739],{"class":916},"0.162",[324,48741,1242],{"class":867},[324,48743,48744],{"class":916},"0.151",[324,48746,1242],{"class":867},[324,48748,48749],{"class":916},"0.138",[324,48751,48752],{"class":867},"],[",[324,48754,48755],{"class":916},"0.058",[324,48757,1242],{"class":867},[324,48759,48760],{"class":916},"0.052",[324,48762,1242],{"class":867},[324,48764,48765],{"class":916},"0.048",[324,48767,5386],{"class":867},[324,48769,48770],{"class":326,"line":2485},[324,48771,48772],{"class":772},"    # 定义数据集处理方法变量\n",[324,48774,48775,48778,48780],{"class":326,"line":2490},[324,48776,48777],{"class":867},"    train_transform",[324,48779,913],{"class":863},[324,48781,48782],{"class":867},"transforms.Compose([\n",[324,48784,48785],{"class":326,"line":2495},[324,48786,48787],{"class":772},"        # 调整图像大小为224*224\n",[324,48789,48790,48793,48795,48797,48799],{"class":326,"line":2509},[324,48791,48792],{"class":867},"        transforms.Resize((",[324,48794,32223],{"class":916},[324,48796,1242],{"class":867},[324,48798,32223],{"class":916},[324,48800,43344],{"class":867},[324,48802,48803],{"class":326,"line":2514},[324,48804,48805],{"class":772},"        # 将图像转换为张量\n",[324,48807,48808],{"class":326,"line":3306},[324,48809,48810],{"class":867},"        transforms.ToTensor(),\n",[324,48812,48813],{"class":326,"line":3320},[324,48814,48815],{"class":867},"        normalize])\n",[324,48817,48818],{"class":326,"line":3328},[324,48819,48820],{"class":772},"    # 在进行转换tensor时,会将像素值归一化到[0,1]之间\n",[324,48822,48823],{"class":326,"line":3333},[324,48824,48825],{"class":772},"    # 但是没有进行均值方差归一化处理,需要进行均值方差归一化处理，使归一化后的数据符合标准正态分布\n",[324,48827,48828],{"class":326,"line":3339},[324,48829,488],{"emptyLinePlaceholder":487},[324,48831,48832],{"class":326,"line":3345},[324,48833,48834],{"class":772},"    # 加载数据集\n",[324,48836,48837],{"class":326,"line":3350},[324,48838,48839],{"class":772},"    # 传入数据集路径与处理方法\n",[324,48841,48842,48844,48846,48849,48852,48854,48857,48859],{"class":326,"line":8677},[324,48843,32680],{"class":867},[324,48845,913],{"class":863},[324,48847,48848],{"class":867},"ImageFolder(",[324,48850,48851],{"class":916},"ROOT_PATH",[324,48853,1242],{"class":867},[324,48855,48856],{"class":5945},"transform",[324,48858,913],{"class":863},[324,48860,48861],{"class":867},"train_transform)\n",[324,48863,48864],{"class":326,"line":8701},[324,48865,488],{"emptyLinePlaceholder":487},[324,48867,48868,48870,48872,48874,48876,48878,48880,48882,48884,48886,48888,48890,48892,48894,48896],{"class":326,"line":8706},[324,48869,32732],{"class":867},[324,48871,913],{"class":863},[324,48873,32737],{"class":867},[324,48875,32740],{"class":916},[324,48877,868],{"class":867},[324,48879,32745],{"class":916},[324,48881,1319],{"class":863},[324,48883,8087],{"class":916},[324,48885,32752],{"class":867},[324,48887,32740],{"class":916},[324,48889,868],{"class":867},[324,48891,32759],{"class":916},[324,48893,1319],{"class":863},[324,48895,8087],{"class":916},[324,48897,32766],{"class":867},[324,48899,48900,48902,48904,48906,48908,48910],{"class":326,"line":8712},[324,48901,32771],{"class":867},[324,48903,913],{"class":863},[324,48905,32776],{"class":867},[324,48907,32259],{"class":5945},[324,48909,913],{"class":863},[324,48911,32264],{"class":867},[324,48913,48914,48916,48918,48920],{"class":326,"line":8739},[324,48915,32787],{"class":5945},[324,48917,913],{"class":863},[324,48919,1062],{"class":916},[324,48921,32188],{"class":867},[324,48923,48924,48926,48928,48930],{"class":326,"line":8744},[324,48925,32799],{"class":5945},[324,48927,913],{"class":863},[324,48929,32198],{"class":916},[324,48931,32188],{"class":867},[324,48933,48934],{"class":326,"line":8750},[324,48935,32810],{"class":772},[324,48937,48938,48940,48942,48944],{"class":326,"line":8762},[324,48939,32815],{"class":5945},[324,48941,913],{"class":863},[324,48943,1259],{"class":916},[324,48945,874],{"class":867},[324,48947,48948,48950,48952,48954,48956,48958],{"class":326,"line":8774},[324,48949,32826],{"class":867},[324,48951,913],{"class":863},[324,48953,32256],{"class":867},[324,48955,32259],{"class":5945},[324,48957,913],{"class":863},[324,48959,32837],{"class":867},[324,48961,48962,48964,48966,48968],{"class":326,"line":8786},[324,48963,32842],{"class":5945},[324,48965,913],{"class":863},[324,48967,1062],{"class":916},[324,48969,32188],{"class":867},[324,48971,48972,48974,48976,48978],{"class":326,"line":10445},[324,48973,32853],{"class":5945},[324,48975,913],{"class":863},[324,48977,32198],{"class":916},[324,48979,32188],{"class":867},[324,48981,48982,48984,48986,48988],{"class":326,"line":10470},[324,48983,32864],{"class":5945},[324,48985,913],{"class":863},[324,48987,1259],{"class":916},[324,48989,874],{"class":867},[324,48991,48992,48994],{"class":326,"line":10493},[324,48993,4819],{"class":863},[324,48995,32877],{"class":867},[324,48997,48998],{"class":326,"line":10517},[324,48999,488],{"emptyLinePlaceholder":487},[324,49001,49002],{"class":326,"line":10522},[324,49003,32886],{"class":772},[324,49005,49006],{"class":326,"line":10527},[324,49007,32891],{"class":772},[324,49009,49010],{"class":326,"line":10532},[324,49011,488],{"emptyLinePlaceholder":487},[324,49013,49014],{"class":326,"line":10541},[324,49015,32900],{"class":772},[324,49017,49018,49020,49022],{"class":326,"line":10546},[324,49019,32669],{"class":863},[324,49021,32907],{"class":734},[324,49023,32910],{"class":867},[324,49025,49026,49028,49030,49032,49034,49036,49038,49040,49042],{"class":326,"line":10552},[324,49027,31959],{"class":867},[324,49029,913],{"class":863},[324,49031,31173],{"class":867},[324,49033,31966],{"class":738},[324,49035,2435],{"class":863},[324,49037,31971],{"class":867},[324,49039,2432],{"class":863},[324,49041,32929],{"class":738},[324,49043,874],{"class":867},[324,49045,49046],{"class":326,"line":10573},[324,49047,488],{"emptyLinePlaceholder":487},[324,49049,49050],{"class":326,"line":10579},[324,49051,32944],{"class":772},[324,49053,49054],{"class":326,"line":10593},[324,49055,32949],{"class":772},[324,49057,49058],{"class":326,"line":10599},[324,49059,32954],{"class":772},[324,49061,49062,49064,49066,49068,49070,49072,49074],{"class":326,"line":10626},[324,49063,32959],{"class":867},[324,49065,913],{"class":863},[324,49067,32964],{"class":867},[324,49069,32967],{"class":5945},[324,49071,913],{"class":863},[324,49073,32972],{"class":916},[324,49075,874],{"class":867},[324,49077,49078],{"class":326,"line":10635},[324,49079,488],{"emptyLinePlaceholder":487},[324,49081,49082],{"class":326,"line":10641},[324,49083,32983],{"class":772},[324,49085,49086,49088,49090],{"class":326,"line":10649},[324,49087,32988],{"class":867},[324,49089,913],{"class":863},[324,49091,32993],{"class":867},[324,49093,49094],{"class":326,"line":10654},[324,49095,488],{"emptyLinePlaceholder":487},[324,49097,49098],{"class":326,"line":17333},[324,49099,33002],{"class":772},[324,49101,49102,49104,49106],{"class":326,"line":17339},[324,49103,32011],{"class":867},[324,49105,913],{"class":863},[324,49107,33011],{"class":867},[324,49109,49110],{"class":326,"line":17362},[324,49111,33016],{"class":772},[324,49113,49114],{"class":326,"line":17368},[324,49115,33021],{"class":772},[324,49117,49118],{"class":326,"line":17391},[324,49119,33026],{"class":772},[324,49121,49122,49124,49126],{"class":326,"line":17405},[324,49123,33031],{"class":867},[324,49125,913],{"class":863},[324,49127,33036],{"class":867},[324,49129,49130],{"class":326,"line":17425},[324,49131,488],{"emptyLinePlaceholder":487},[324,49133,49134],{"class":326,"line":17431},[324,49135,33049],{"class":772},[324,49137,49138],{"class":326,"line":17442},[324,49139,33054],{"class":772},[324,49141,49142,49144,49146],{"class":326,"line":17465},[324,49143,33059],{"class":867},[324,49145,913],{"class":863},[324,49147,33064],{"class":916},[324,49149,49150],{"class":326,"line":17487},[324,49151,33069],{"class":772},[324,49153,49154,49156,49158],{"class":326,"line":17492},[324,49155,33074],{"class":867},[324,49157,913],{"class":863},[324,49159,33079],{"class":867},[324,49161,49162],{"class":326,"line":17498},[324,49163,33084],{"class":772},[324,49165,49166,49168,49170],{"class":326,"line":17512},[324,49167,33089],{"class":867},[324,49169,913],{"class":863},[324,49171,33079],{"class":867},[324,49173,49174],{"class":326,"line":17525},[324,49175,33098],{"class":772},[324,49177,49178,49180,49182],{"class":326,"line":17530},[324,49179,33103],{"class":867},[324,49181,913],{"class":863},[324,49183,33079],{"class":867},[324,49185,49186],{"class":326,"line":17544},[324,49187,33112],{"class":772},[324,49189,49190,49192,49194],{"class":326,"line":17549},[324,49191,33117],{"class":867},[324,49193,913],{"class":863},[324,49195,33079],{"class":867},[324,49197,49198],{"class":326,"line":17555},[324,49199,488],{"emptyLinePlaceholder":487},[324,49201,49202],{"class":326,"line":17560},[324,49203,33130],{"class":772},[324,49205,49206,49208,49210],{"class":326,"line":17574},[324,49207,33135],{"class":867},[324,49209,913],{"class":863},[324,49211,33140],{"class":867},[324,49213,49214],{"class":326,"line":17579},[324,49215,488],{"emptyLinePlaceholder":487},[324,49217,49218],{"class":326,"line":17584},[324,49219,33153],{"class":772},[324,49221,49222,49224,49226,49228,49230],{"class":326,"line":17598},[324,49223,3930],{"class":863},[324,49225,33160],{"class":867},[324,49227,26767],{"class":863},[324,49229,33165],{"class":916},[324,49231,33168],{"class":867},[324,49233,49234,49236,49238,49240,49242,49244,49246,49248,49250,49252,49254],{"class":326,"line":17610},[324,49235,33173],{"class":916},[324,49237,868],{"class":867},[324,49239,33178],{"class":738},[324,49241,33181],{"class":916},[324,49243,1448],{"class":738},[324,49245,33181],{"class":916},[324,49247,1115],{"class":738},[324,49249,33190],{"class":867},[324,49251,1396],{"class":863},[324,49253,1082],{"class":916},[324,49255,31219],{"class":867},[324,49257,49258,49260,49262,49264,49266,49268],{"class":326,"line":17615},[324,49259,33173],{"class":916},[324,49261,868],{"class":867},[324,49263,33205],{"class":738},[324,49265,1319],{"class":863},[324,49267,1310],{"class":916},[324,49269,874],{"class":867},[324,49271,49272],{"class":326,"line":17628},[324,49273,488],{"emptyLinePlaceholder":487},[324,49275,49276],{"class":326,"line":17633},[324,49277,33220],{"class":772},[324,49279,49280],{"class":326,"line":17638},[324,49281,33225],{"class":772},[324,49283,49284,49286,49288],{"class":326,"line":17643},[324,49285,33230],{"class":867},[324,49287,913],{"class":863},[324,49289,33064],{"class":916},[324,49291,49292],{"class":326,"line":17656},[324,49293,33239],{"class":772},[324,49295,49296,49298,49300],{"class":326,"line":17661},[324,49297,33244],{"class":867},[324,49299,913],{"class":863},[324,49301,3814],{"class":916},[324,49303,49304],{"class":326,"line":33355},[324,49305,33253],{"class":772},[324,49307,49308,49310,49312],{"class":326,"line":33361},[324,49309,33258],{"class":867},[324,49311,913],{"class":863},[324,49313,33064],{"class":916},[324,49315,49316],{"class":326,"line":33367},[324,49317,33267],{"class":772},[324,49319,49320,49322,49324],{"class":326,"line":33373},[324,49321,33272],{"class":867},[324,49323,913],{"class":863},[324,49325,3814],{"class":916},[324,49327,49328],{"class":326,"line":33379},[324,49329,33281],{"class":772},[324,49331,49332,49334,49336],{"class":326,"line":33390},[324,49333,33286],{"class":867},[324,49335,913],{"class":863},[324,49337,3814],{"class":916},[324,49339,49340],{"class":326,"line":33396},[324,49341,33295],{"class":772},[324,49343,49344,49346,49348],{"class":326,"line":33416},[324,49345,33300],{"class":867},[324,49347,913],{"class":863},[324,49349,3814],{"class":916},[324,49351,49352],{"class":326,"line":33422},[324,49353,33309],{"class":772},[324,49355,49356,49358,49360,49362,49364],{"class":326,"line":33433},[324,49357,4132],{"class":863},[324,49359,32323],{"class":867},[324,49361,26767],{"class":863},[324,49363,32328],{"class":916},[324,49365,33322],{"class":867},[324,49367,49368],{"class":326,"line":33439},[324,49369,33327],{"class":772},[324,49371,49372,49374,49376],{"class":326,"line":33445},[324,49373,33332],{"class":867},[324,49375,913],{"class":863},[324,49377,33337],{"class":867},[324,49379,49380],{"class":326,"line":33451},[324,49381,33342],{"class":772},[324,49383,49384,49386,49388],{"class":326,"line":33457},[324,49385,33347],{"class":867},[324,49387,913],{"class":863},[324,49389,33352],{"class":867},[324,49391,49392],{"class":326,"line":33463},[324,49393,33358],{"class":772},[324,49395,49396],{"class":326,"line":33469},[324,49397,33364],{"class":867},[324,49399,49400],{"class":326,"line":33475},[324,49401,33370],{"class":772},[324,49403,49404],{"class":326,"line":33495},[324,49405,33376],{"class":772},[324,49407,49408,49410,49412],{"class":326,"line":33501},[324,49409,33382],{"class":867},[324,49411,913],{"class":863},[324,49413,33387],{"class":867},[324,49415,49416],{"class":326,"line":33517},[324,49417,33393],{"class":772},[324,49419,49420,49422,49424,49426,49428,49430,49432],{"class":326,"line":33523},[324,49421,33399],{"class":867},[324,49423,913],{"class":863},[324,49425,33404],{"class":867},[324,49427,33407],{"class":5945},[324,49429,913],{"class":863},[324,49431,1082],{"class":916},[324,49433,874],{"class":867},[324,49435,49436],{"class":326,"line":33537},[324,49437,33419],{"class":772},[324,49439,49440,49442,49444],{"class":326,"line":33543},[324,49441,33425],{"class":867},[324,49443,913],{"class":863},[324,49445,33430],{"class":867},[324,49447,49448],{"class":326,"line":33558},[324,49449,33436],{"class":772},[324,49451,49452],{"class":326,"line":33564},[324,49453,33442],{"class":867},[324,49455,49456],{"class":326,"line":33573},[324,49457,33448],{"class":772},[324,49459,49460],{"class":326,"line":33579},[324,49461,33454],{"class":867},[324,49463,49464],{"class":326,"line":33588},[324,49465,33460],{"class":772},[324,49467,49468],{"class":326,"line":33594},[324,49469,33466],{"class":867},[324,49471,49472],{"class":326,"line":33600},[324,49473,33472],{"class":772},[324,49475,49476,49478,49480,49482,49484,49486,49488],{"class":326,"line":33609},[324,49477,33478],{"class":867},[324,49479,10206],{"class":863},[324,49481,33483],{"class":867},[324,49483,1319],{"class":863},[324,49485,33488],{"class":867},[324,49487,1056],{"class":916},[324,49489,874],{"class":867},[324,49491,49492],{"class":326,"line":33615},[324,49493,33498],{"class":772},[324,49495,49496,49498,49500,49502,49504],{"class":326,"line":33626},[324,49497,33504],{"class":867},[324,49499,10206],{"class":863},[324,49501,33509],{"class":867},[324,49503,3678],{"class":863},[324,49505,33514],{"class":867},[324,49507,49508],{"class":326,"line":33632},[324,49509,33520],{"class":772},[324,49511,49512,49514,49516,49518,49520],{"class":326,"line":33651},[324,49513,33526],{"class":867},[324,49515,10206],{"class":863},[324,49517,33488],{"class":867},[324,49519,1056],{"class":916},[324,49521,874],{"class":867},[324,49523,49524],{"class":326,"line":33657},[324,49525,33540],{"class":772},[324,49527,49528,49530,49532,49534,49536],{"class":326,"line":33668},[324,49529,4132],{"class":863},[324,49531,33548],{"class":867},[324,49533,26767],{"class":863},[324,49535,32328],{"class":916},[324,49537,33555],{"class":867},[324,49539,49540],{"class":326,"line":33674},[324,49541,33561],{"class":772},[324,49543,49544,49546,49548],{"class":326,"line":33694},[324,49545,33332],{"class":867},[324,49547,913],{"class":863},[324,49549,33337],{"class":867},[324,49551,49552],{"class":326,"line":33710},[324,49553,33576],{"class":772},[324,49555,49556,49558,49560],{"class":326,"line":33716},[324,49557,33347],{"class":867},[324,49559,913],{"class":863},[324,49561,33352],{"class":867},[324,49563,49564],{"class":326,"line":33730},[324,49565,33591],{"class":772},[324,49567,49568],{"class":326,"line":33736},[324,49569,33597],{"class":867},[324,49571,49572],{"class":326,"line":33742},[324,49573,37078],{"class":772},[324,49575,49576,49578],{"class":326,"line":33753},[324,49577,33603],{"class":863},[324,49579,33606],{"class":867},[324,49581,49582],{"class":326,"line":33759},[324,49583,33612],{"class":772},[324,49585,49586,49588,49590],{"class":326,"line":33765},[324,49587,37093],{"class":867},[324,49589,913],{"class":863},[324,49591,33387],{"class":867},[324,49593,49594],{"class":326,"line":33775},[324,49595,33629],{"class":772},[324,49597,49598,49600,49602,49604,49606,49608,49610],{"class":326,"line":33781},[324,49599,37106],{"class":867},[324,49601,913],{"class":863},[324,49603,33404],{"class":867},[324,49605,33407],{"class":5945},[324,49607,913],{"class":863},[324,49609,1082],{"class":916},[324,49611,874],{"class":867},[324,49613,49614],{"class":326,"line":33792},[324,49615,33654],{"class":772},[324,49617,49618,49620,49622],{"class":326,"line":33798},[324,49619,37127],{"class":867},[324,49621,913],{"class":863},[324,49623,33430],{"class":867},[324,49625,49626],{"class":326,"line":33808},[324,49627,33671],{"class":772},[324,49629,49630,49632,49634,49636,49638,49640,49642],{"class":326,"line":33813},[324,49631,37140],{"class":867},[324,49633,10206],{"class":863},[324,49635,37145],{"class":867},[324,49637,1319],{"class":863},[324,49639,33488],{"class":867},[324,49641,1056],{"class":916},[324,49643,874],{"class":867},[324,49645,49646,49648,49650,49652,49654],{"class":326,"line":33819},[324,49647,37158],{"class":867},[324,49649,10206],{"class":863},[324,49651,33509],{"class":867},[324,49653,3678],{"class":863},[324,49655,33514],{"class":867},[324,49657,49658],{"class":326,"line":33868},[324,49659,37171],{"class":772},[324,49661,49662,49664,49666,49668,49670],{"class":326,"line":33915},[324,49663,37176],{"class":867},[324,49665,10206],{"class":863},[324,49667,33488],{"class":867},[324,49669,1056],{"class":916},[324,49671,874],{"class":867},[324,49673,49674],{"class":326,"line":33920},[324,49675,33733],{"class":772},[324,49677,49678],{"class":326,"line":33926},[324,49679,33739],{"class":772},[324,49681,49682,49684,49686],{"class":326,"line":33945},[324,49683,33745],{"class":867},[324,49685,1448],{"class":863},[324,49687,33750],{"class":867},[324,49689,49690],{"class":326,"line":33951},[324,49691,33756],{"class":772},[324,49693,49694],{"class":326,"line":33971},[324,49695,33762],{"class":772},[324,49697,49698,49700,49702],{"class":326,"line":33977},[324,49699,33768],{"class":867},[324,49701,1448],{"class":863},[324,49703,33750],{"class":867},[324,49705,49706],{"class":326,"line":33983},[324,49707,33778],{"class":772},[324,49709,49710,49712,49714],{"class":326,"line":33993},[324,49711,33784],{"class":867},[324,49713,1448],{"class":863},[324,49715,33789],{"class":867},[324,49717,49718],{"class":326,"line":33998},[324,49719,33795],{"class":772},[324,49721,49722,49724,49726],{"class":326,"line":34004},[324,49723,33801],{"class":867},[324,49725,1448],{"class":863},[324,49727,33789],{"class":867},[324,49729,49730],{"class":326,"line":34020},[324,49731,488],{"emptyLinePlaceholder":487},[324,49733,49734],{"class":326,"line":34065},[324,49735,33816],{"class":772},[324,49737,49738,49740,49742,49744,49746,49748,49750,49752,49754,49756,49758,49760,49762,49764,49766,49768,49770,49772,49774,49776],{"class":326,"line":34071},[324,49739,33173],{"class":916},[324,49741,868],{"class":867},[324,49743,4321],{"class":738},[324,49745,33181],{"class":916},[324,49747,33830],{"class":738},[324,49749,1760],{"class":916},[324,49751,33835],{"class":863},[324,49753,1810],{"class":916},[324,49755,33840],{"class":738},[324,49757,1760],{"class":916},[324,49759,33835],{"class":863},[324,49761,1810],{"class":916},[324,49763,4321],{"class":738},[324,49765,33851],{"class":867},[324,49767,1396],{"class":863},[324,49769,1082],{"class":916},[324,49771,33858],{"class":867},[324,49773,1396],{"class":863},[324,49775,1082],{"class":916},[324,49777,33865],{"class":867},[324,49779,49780,49782,49784,49786,49788,49790,49792,49794,49796,49798,49800,49802,49804,49806,49808,49810,49812,49814,49816,49818],{"class":326,"line":34077},[324,49781,33173],{"class":916},[324,49783,868],{"class":867},[324,49785,4321],{"class":738},[324,49787,33181],{"class":916},[324,49789,33879],{"class":738},[324,49791,1760],{"class":916},[324,49793,33835],{"class":863},[324,49795,1810],{"class":916},[324,49797,33888],{"class":738},[324,49799,1760],{"class":916},[324,49801,33835],{"class":863},[324,49803,1810],{"class":916},[324,49805,4321],{"class":738},[324,49807,33899],{"class":867},[324,49809,1396],{"class":863},[324,49811,1082],{"class":916},[324,49813,33906],{"class":867},[324,49815,1396],{"class":863},[324,49817,1082],{"class":916},[324,49819,33865],{"class":867},[324,49821,49822],{"class":326,"line":34083},[324,49823,488],{"emptyLinePlaceholder":487},[324,49825,49826],{"class":326,"line":34094},[324,49827,33923],{"class":772},[324,49829,49830,49832,49834,49836,49838,49840,49842],{"class":326,"line":34100},[324,49831,3226],{"class":863},[324,49833,33931],{"class":867},[324,49835,1396],{"class":863},[324,49837,1082],{"class":916},[324,49839,1804],{"class":867},[324,49841,1824],{"class":863},[324,49843,33942],{"class":867},[324,49845,49846],{"class":326,"line":34106},[324,49847,33948],{"class":772},[324,49849,49850,49852,49854,49856,49858,49860,49862],{"class":326,"line":34112},[324,49851,33954],{"class":867},[324,49853,907],{"class":916},[324,49855,913],{"class":863},[324,49857,33961],{"class":867},[324,49859,1396],{"class":863},[324,49861,1082],{"class":916},[324,49863,33968],{"class":867},[324,49865,49866],{"class":326,"line":34130},[324,49867,33974],{"class":772},[324,49869,49870],{"class":326,"line":34144},[324,49871,33980],{"class":772},[324,49873,49874,49876,49878],{"class":326,"line":34153},[324,49875,33986],{"class":867},[324,49877,913],{"class":863},[324,49879,33036],{"class":867},[324,49881,49882],{"class":326,"line":34162},[324,49883,488],{"emptyLinePlaceholder":487},[324,49885,49886],{"class":326,"line":34171},[324,49887,34001],{"class":772},[324,49889,49890,49892,49894,49896,49898],{"class":326,"line":34180},[324,49891,34007],{"class":867},[324,49893,913],{"class":863},[324,49895,34012],{"class":867},[324,49897,1396],{"class":863},[324,49899,34017],{"class":867},[324,49901,49902,49904,49906,49908,49910,49912,49914,49916,49918,49920,49922,49924,49926,49928,49930,49932,49934,49936],{"class":326,"line":34186},[324,49903,33173],{"class":916},[324,49905,868],{"class":867},[324,49907,34027],{"class":738},[324,49909,1760],{"class":916},[324,49911,34032],{"class":863},[324,49913,1810],{"class":916},[324,49915,1408],{"class":738},[324,49917,1760],{"class":916},[324,49919,34032],{"class":863},[324,49921,1810],{"class":916},[324,49923,34045],{"class":738},[324,49925,34048],{"class":867},[324,49927,34051],{"class":863},[324,49929,1771],{"class":916},[324,49931,34056],{"class":867},[324,49933,1192],{"class":863},[324,49935,1771],{"class":916},[324,49937,31219],{"class":867},[324,49939,49940],{"class":326,"line":34192},[324,49941,37455],{"class":772},[324,49943,49944],{"class":326,"line":34200},[324,49945,37460],{"class":772},[324,49947,49948,49950,49952],{"class":326,"line":34205},[324,49949,37465],{"class":867},[324,49951,34089],{"class":738},[324,49953,874],{"class":867},[324,49955,49956],{"class":326,"line":34211},[324,49957,34109],{"class":772},[324,49959,49960,49962,49964,49966,49968,49970],{"class":326,"line":34222},[324,49961,34115],{"class":867},[324,49963,913],{"class":863},[324,49965,34120],{"class":867},[324,49967,34123],{"class":5945},[324,49969,913],{"class":863},[324,49971,2277],{"class":867},[324,49973,49974,49976,49978,49980],{"class":326,"line":34228},[324,49975,34133],{"class":738},[324,49977,1723],{"class":867},[324,49979,34138],{"class":916},[324,49981,34141],{"class":867},[324,49983,49984,49986],{"class":326,"line":34248},[324,49985,34147],{"class":738},[324,49987,34150],{"class":867},[324,49989,49990,49992],{"class":326,"line":34254},[324,49991,34156],{"class":738},[324,49993,34159],{"class":867},[324,49995,49996,49998],{"class":326,"line":34260},[324,49997,34165],{"class":738},[324,49999,34168],{"class":867},[324,50001,50002,50004],{"class":326,"line":34266},[324,50003,34174],{"class":738},[324,50005,34177],{"class":867},[324,50007,50008],{"class":326,"line":34283},[324,50009,34183],{"class":867},[324,50011,50012],{"class":326,"line":34289},[324,50013,34189],{"class":772},[324,50015,50016,50018],{"class":326,"line":34295},[324,50017,4819],{"class":863},[324,50019,34197],{"class":867},[324,50021,50022],{"class":326,"line":34301},[324,50023,488],{"emptyLinePlaceholder":487},[324,50025,50026],{"class":326,"line":34307},[324,50027,34208],{"class":772},[324,50029,50030,50032,50034],{"class":326,"line":34313},[324,50031,32669],{"class":863},[324,50033,34216],{"class":734},[324,50035,34219],{"class":867},[324,50037,50038],{"class":326,"line":34340},[324,50039,34225],{"class":772},[324,50041,50042,50044,50046,50048,50050,50052,50054,50056],{"class":326,"line":34364},[324,50043,34231],{"class":867},[324,50045,32415],{"class":5945},[324,50047,913],{"class":863},[324,50049,868],{"class":867},[324,50051,1362],{"class":916},[324,50053,1242],{"class":867},[324,50055,1157],{"class":916},[324,50057,31219],{"class":867},[324,50059,50060],{"class":326,"line":34370},[324,50061,34251],{"class":772},[324,50063,50064],{"class":326,"line":34376},[324,50065,34257],{"class":772},[324,50067,50068],{"class":326,"line":34382},[324,50069,34263],{"class":772},[324,50071,50072,50074,50076,50078,50080,50082,50084],{"class":326,"line":34393},[324,50073,32449],{"class":867},[324,50075,1082],{"class":916},[324,50077,1242],{"class":867},[324,50079,944],{"class":916},[324,50081,1242],{"class":867},[324,50083,1082],{"class":916},[324,50085,874],{"class":867},[324,50087,50088],{"class":326,"line":34404},[324,50089,34286],{"class":772},[324,50091,50092],{"class":326,"line":34410},[324,50093,34292],{"class":772},[324,50095,50096],{"class":326,"line":34427},[324,50097,34298],{"class":772},[324,50099,50100],{"class":326,"line":34450},[324,50101,34304],{"class":772},[324,50103,50104],{"class":326,"line":34473},[324,50105,34310],{"class":772},[324,50107,50108,50110,50112,50114,50116,50118,50120,50122,50124],{"class":326,"line":34479},[324,50109,34316],{"class":867},[324,50111,34319],{"class":738},[324,50113,34322],{"class":867},[324,50115,34325],{"class":738},[324,50117,1242],{"class":867},[324,50119,34330],{"class":5945},[324,50121,913],{"class":863},[324,50123,34335],{"class":738},[324,50125,874],{"class":867},[324,50127,50128,50130,50132,50134,50136,50138,50140,50142,50144],{"class":326,"line":34484},[324,50129,34316],{"class":867},[324,50131,34319],{"class":738},[324,50133,34347],{"class":867},[324,50135,34350],{"class":738},[324,50137,1242],{"class":867},[324,50139,34330],{"class":5945},[324,50141,913],{"class":863},[324,50143,34359],{"class":738},[324,50145,874],{"class":867},[324,50147,50148],{"class":326,"line":34493},[324,50149,34367],{"class":772},[324,50151,50152],{"class":326,"line":34503},[324,50153,34373],{"class":867},[324,50155,50156],{"class":326,"line":34509},[324,50157,34379],{"class":772},[324,50159,50160,50162,50164],{"class":326,"line":34514},[324,50161,34385],{"class":867},[324,50163,34388],{"class":738},[324,50165,874],{"class":867},[324,50167,50168,50170,50172],{"class":326,"line":34520},[324,50169,34396],{"class":867},[324,50171,34399],{"class":738},[324,50173,874],{"class":867},[324,50175,50176],{"class":326,"line":34533},[324,50177,34407],{"class":772},[324,50179,50180,50182,50184,50186,50188,50190,50192],{"class":326,"line":34539},[324,50181,32449],{"class":867},[324,50183,1082],{"class":916},[324,50185,1242],{"class":867},[324,50187,944],{"class":916},[324,50189,1242],{"class":867},[324,50191,944],{"class":916},[324,50193,874],{"class":867},[324,50195,50196,50198,50200,50202,50204,50206,50208,50210,50212],{"class":326,"line":34550},[324,50197,34316],{"class":867},[324,50199,34319],{"class":738},[324,50201,34434],{"class":867},[324,50203,34325],{"class":738},[324,50205,1242],{"class":867},[324,50207,34330],{"class":5945},[324,50209,913],{"class":863},[324,50211,34445],{"class":738},[324,50213,874],{"class":867},[324,50215,50216,50218,50220,50222,50224,50226,50228,50230,50232],{"class":326,"line":34561},[324,50217,34316],{"class":867},[324,50219,34319],{"class":738},[324,50221,34457],{"class":867},[324,50223,34350],{"class":738},[324,50225,1242],{"class":867},[324,50227,34330],{"class":5945},[324,50229,913],{"class":863},[324,50231,34468],{"class":738},[324,50233,874],{"class":867},[324,50235,50236],{"class":326,"line":34580},[324,50237,34476],{"class":772},[324,50239,50241],{"class":326,"line":50240},219,[324,50242,34373],{"class":867},[324,50244,50246,50248,50250],{"class":326,"line":50245},220,[324,50247,34385],{"class":867},[324,50249,34319],{"class":738},[324,50251,874],{"class":867},[324,50253,50255,50257,50259],{"class":326,"line":50254},221,[324,50256,34396],{"class":867},[324,50258,34498],{"class":738},[324,50260,874],{"class":867},[324,50262,50264],{"class":326,"line":50263},222,[324,50265,34506],{"class":867},[324,50267,50269],{"class":326,"line":50268},223,[324,50270,488],{"emptyLinePlaceholder":487},[324,50272,50274],{"class":326,"line":50273},224,[324,50275,34517],{"class":772},[324,50277,50279,50281,50283,50285,50287],{"class":326,"line":50278},225,[324,50280,2262],{"class":863},[324,50282,31942],{"class":916},[324,50284,3678],{"class":863},[324,50286,31947],{"class":738},[324,50288,4468],{"class":867},[324,50290,50292],{"class":326,"line":50291},226,[324,50293,34536],{"class":772},[324,50295,50297,50299,50301],{"class":326,"line":50296},227,[324,50298,45268],{"class":867},[324,50300,913],{"class":863},[324,50302,45273],{"class":867},[324,50304,50306,50308,50310],{"class":326,"line":50305},228,[324,50307,34553],{"class":867},[324,50309,913],{"class":863},[324,50311,34558],{"class":867},[324,50313,50315,50317,50319,50321,50323,50325,50327],{"class":326,"line":50314},229,[324,50316,34115],{"class":867},[324,50318,913],{"class":863},[324,50320,45290],{"class":867},[324,50322,34571],{"class":5945},[324,50324,913],{"class":863},[324,50326,1771],{"class":916},[324,50328,874],{"class":867},[324,50330,50332],{"class":326,"line":50331},230,[324,50333,34583],{"class":867},[151,50335,50337],{"id":50336},"_242测试代码","2.4.2.测试代码",[19,50339,50340],{},"使用测试集进行测试与推理",[316,50342,50344],{"className":31100,"code":50343,"language":31102,"meta":50,"style":50},"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",[269,50345,50346,50352,50362,50372,50383,50393,50397,50401,50409,50414,50418,50435,50439,50443,50447,50451,50455,50487,50491,50499,50503,50515,50519,50523,50527,50531,50535,50539,50543,50547,50565,50579,50583,50593,50603,50613,50619,50623,50627,50635,50639,50655,50663,50667,50671,50679,50687,50691,50695,50699,50703,50709,50713,50723,50731,50739,50743,50747,50751,50759,50763,50779,50783,50787,50791,50803,50807,50819,50823,50827,50839,50843,50853,50857,50861,50873,50877,50885,50889,50893,50901,50905,50913,50917,50921,50925,50929,50933,50949,50957,50961,50965,50983,50989,50993,51003,51011,51019,51023,51027,51031,51035,51043,51047,51063,51067,51075,51083],{"__ignoreMap":50},[324,50347,50348,50350],{"class":326,"line":327},[324,50349,31114],{"class":863},[324,50351,31117],{"class":867},[324,50353,50354,50356,50358,50360],{"class":326,"line":203},[324,50355,31114],{"class":863},[324,50357,32137],{"class":867},[324,50359,32105],{"class":863},[324,50361,32142],{"class":867},[324,50363,50364,50366,50368,50370],{"class":326,"line":338},[324,50365,31459],{"class":863},[324,50367,32120],{"class":867},[324,50369,31114],{"class":863},[324,50371,32125],{"class":867},[324,50373,50374,50376,50378,50380],{"class":326,"line":344},[324,50375,31459],{"class":863},[324,50377,32090],{"class":867},[324,50379,31114],{"class":863},[324,50381,50382],{"class":867}," ImageFolder\n",[324,50384,50385,50387,50389,50391],{"class":326,"line":484},[324,50386,31459],{"class":863},[324,50388,32636],{"class":867},[324,50390,31114],{"class":863},[324,50392,45362],{"class":867},[324,50394,50395],{"class":326,"line":491},[324,50396,488],{"emptyLinePlaceholder":487},[324,50398,50399],{"class":326,"line":496},[324,50400,34673],{"class":772},[324,50402,50403,50405,50407],{"class":326,"line":502},[324,50404,32669],{"class":863},[324,50406,34680],{"class":734},[324,50408,32675],{"class":867},[324,50410,50411],{"class":326,"line":508},[324,50412,50413],{"class":772},"   # 导入自己的数据集，并进行数据处理\n",[324,50415,50416],{"class":326,"line":514},[324,50417,48683],{"class":772},[324,50419,50420,50422,50424,50426,50428,50430,50433],{"class":326,"line":2343},[324,50421,48688],{"class":916},[324,50423,913],{"class":863},[324,50425,1534],{"class":863},[324,50427,1115],{"class":738},[324,50429,1422],{"class":916},[324,50431,50432],{"class":48699},"\u002Fdata\u002Ftest",[324,50434,25857],{"class":738},[324,50436,50437],{"class":326,"line":2348},[324,50438,488],{"emptyLinePlaceholder":487},[324,50440,50441],{"class":326,"line":2354},[324,50442,48711],{"class":772},[324,50444,50445],{"class":326,"line":2359},[324,50446,48716],{"class":772},[324,50448,50449],{"class":326,"line":2373},[324,50450,48721],{"class":772},[324,50452,50453],{"class":326,"line":2378},[324,50454,48726],{"class":772},[324,50456,50457,50459,50461,50463,50465,50467,50469,50471,50473,50475,50477,50479,50481,50483,50485],{"class":326,"line":2384},[324,50458,48731],{"class":867},[324,50460,913],{"class":863},[324,50462,48736],{"class":867},[324,50464,48739],{"class":916},[324,50466,1242],{"class":867},[324,50468,48744],{"class":916},[324,50470,1242],{"class":867},[324,50472,48749],{"class":916},[324,50474,48752],{"class":867},[324,50476,48755],{"class":916},[324,50478,1242],{"class":867},[324,50480,48760],{"class":916},[324,50482,1242],{"class":867},[324,50484,48765],{"class":916},[324,50486,5386],{"class":867},[324,50488,50489],{"class":326,"line":2405},[324,50490,48772],{"class":772},[324,50492,50493,50495,50497],{"class":326,"line":2410},[324,50494,48777],{"class":867},[324,50496,913],{"class":863},[324,50498,48782],{"class":867},[324,50500,50501],{"class":326,"line":2424},[324,50502,48787],{"class":772},[324,50504,50505,50507,50509,50511,50513],{"class":326,"line":2429},[324,50506,48792],{"class":867},[324,50508,32223],{"class":916},[324,50510,1242],{"class":867},[324,50512,32223],{"class":916},[324,50514,43344],{"class":867},[324,50516,50517],{"class":326,"line":2458},[324,50518,48805],{"class":772},[324,50520,50521],{"class":326,"line":2463},[324,50522,48810],{"class":867},[324,50524,50525],{"class":326,"line":2480},[324,50526,48815],{"class":867},[324,50528,50529],{"class":326,"line":2485},[324,50530,48820],{"class":772},[324,50532,50533],{"class":326,"line":2490},[324,50534,48825],{"class":772},[324,50536,50537],{"class":326,"line":2495},[324,50538,488],{"emptyLinePlaceholder":487},[324,50540,50541],{"class":326,"line":2509},[324,50542,48834],{"class":772},[324,50544,50545],{"class":326,"line":2514},[324,50546,48839],{"class":772},[324,50548,50549,50551,50553,50555,50557,50559,50561,50563],{"class":326,"line":3306},[324,50550,34687],{"class":867},[324,50552,913],{"class":863},[324,50554,48848],{"class":867},[324,50556,48851],{"class":916},[324,50558,1242],{"class":867},[324,50560,48856],{"class":5945},[324,50562,913],{"class":863},[324,50564,48861],{"class":867},[324,50566,50567,50569,50571,50573,50575,50577],{"class":326,"line":3320},[324,50568,34744],{"class":867},[324,50570,913],{"class":863},[324,50572,32256],{"class":867},[324,50574,32259],{"class":5945},[324,50576,913],{"class":863},[324,50578,34755],{"class":867},[324,50580,50581],{"class":326,"line":3328},[324,50582,34760],{"class":772},[324,50584,50585,50587,50589,50591],{"class":326,"line":3333},[324,50586,34765],{"class":5945},[324,50588,913],{"class":863},[324,50590,1082],{"class":916},[324,50592,32188],{"class":867},[324,50594,50595,50597,50599,50601],{"class":326,"line":3339},[324,50596,34776],{"class":5945},[324,50598,913],{"class":863},[324,50600,32198],{"class":916},[324,50602,32188],{"class":867},[324,50604,50605,50607,50609,50611],{"class":326,"line":3345},[324,50606,34787],{"class":5945},[324,50608,913],{"class":863},[324,50610,1056],{"class":916},[324,50612,874],{"class":867},[324,50614,50615,50617],{"class":326,"line":3350},[324,50616,4819],{"class":863},[324,50618,34800],{"class":867},[324,50620,50621],{"class":326,"line":8677},[324,50622,488],{"emptyLinePlaceholder":487},[324,50624,50625],{"class":326,"line":8701},[324,50626,34809],{"class":772},[324,50628,50629,50631,50633],{"class":326,"line":8706},[324,50630,32669],{"class":863},[324,50632,34816],{"class":734},[324,50634,34819],{"class":867},[324,50636,50637],{"class":326,"line":8712},[324,50638,34824],{"class":772},[324,50640,50641,50643,50645,50647,50649,50651,50653],{"class":326,"line":8739},[324,50642,31959],{"class":867},[324,50644,913],{"class":863},[324,50646,31966],{"class":738},[324,50648,2435],{"class":863},[324,50650,31971],{"class":867},[324,50652,2432],{"class":863},[324,50654,34841],{"class":738},[324,50656,50657,50659,50661],{"class":326,"line":8744},[324,50658,32011],{"class":867},[324,50660,913],{"class":863},[324,50662,33011],{"class":867},[324,50664,50665],{"class":326,"line":8750},[324,50666,488],{"emptyLinePlaceholder":487},[324,50668,50669],{"class":326,"line":8762},[324,50670,34858],{"class":772},[324,50672,50673,50675,50677],{"class":326,"line":8774},[324,50674,34863],{"class":867},[324,50676,913],{"class":863},[324,50678,33064],{"class":916},[324,50680,50681,50683,50685],{"class":326,"line":8786},[324,50682,34872],{"class":867},[324,50684,913],{"class":863},[324,50686,3814],{"class":916},[324,50688,50689],{"class":326,"line":10445},[324,50690,488],{"emptyLinePlaceholder":487},[324,50692,50693],{"class":326,"line":10470},[324,50694,34885],{"class":772},[324,50696,50697],{"class":326,"line":10493},[324,50698,34890],{"class":772},[324,50700,50701],{"class":326,"line":10517},[324,50702,34895],{"class":772},[324,50704,50705,50707],{"class":326,"line":10522},[324,50706,34900],{"class":863},[324,50708,33606],{"class":867},[324,50710,50711],{"class":326,"line":10527},[324,50712,34907],{"class":772},[324,50714,50715,50717,50719,50721],{"class":326,"line":10532},[324,50716,4132],{"class":863},[324,50718,34914],{"class":867},[324,50720,26767],{"class":863},[324,50722,34919],{"class":867},[324,50724,50725,50727,50729],{"class":326,"line":10541},[324,50726,34924],{"class":867},[324,50728,913],{"class":863},[324,50730,34929],{"class":867},[324,50732,50733,50735,50737],{"class":326,"line":10546},[324,50734,34934],{"class":867},[324,50736,913],{"class":863},[324,50738,34939],{"class":867},[324,50740,50741],{"class":326,"line":10552},[324,50742,34944],{"class":772},[324,50744,50745],{"class":326,"line":10573},[324,50746,33597],{"class":867},[324,50748,50749],{"class":326,"line":10579},[324,50750,34953],{"class":772},[324,50752,50753,50755,50757],{"class":326,"line":10593},[324,50754,33382],{"class":867},[324,50756,913],{"class":863},[324,50758,34962],{"class":867},[324,50760,50761],{"class":326,"line":10599},[324,50762,34967],{"class":772},[324,50764,50765,50767,50769,50771,50773,50775,50777],{"class":326,"line":10626},[324,50766,33399],{"class":867},[324,50768,913],{"class":863},[324,50770,33404],{"class":867},[324,50772,33407],{"class":5945},[324,50774,913],{"class":863},[324,50776,1082],{"class":916},[324,50778,874],{"class":867},[324,50780,50781],{"class":326,"line":10635},[324,50782,34988],{"class":772},[324,50784,50785],{"class":326,"line":10641},[324,50786,34993],{"class":772},[324,50788,50789],{"class":326,"line":10649},[324,50790,34998],{"class":772},[324,50792,50793,50795,50797,50799,50801],{"class":326,"line":10654},[324,50794,35003],{"class":867},[324,50796,10206],{"class":863},[324,50798,33509],{"class":867},[324,50800,3678],{"class":863},[324,50802,35012],{"class":867},[324,50804,50805],{"class":326,"line":17333},[324,50806,35017],{"class":772},[324,50808,50809,50811,50813,50815,50817],{"class":326,"line":17339},[324,50810,35022],{"class":867},[324,50812,10206],{"class":863},[324,50814,35027],{"class":867},[324,50816,1056],{"class":916},[324,50818,874],{"class":867},[324,50820,50821],{"class":326,"line":17362},[324,50822,488],{"emptyLinePlaceholder":487},[324,50824,50825],{"class":326,"line":17368},[324,50826,35040],{"class":772},[324,50828,50829,50831,50833,50835,50837],{"class":326,"line":17391},[324,50830,35045],{"class":867},[324,50832,913],{"class":863},[324,50834,35050],{"class":867},[324,50836,1448],{"class":863},[324,50838,35055],{"class":867},[324,50840,50841],{"class":326,"line":17405},[324,50842,35060],{"class":772},[324,50844,50845,50847,50849,50851],{"class":326,"line":17425},[324,50846,33173],{"class":916},[324,50848,868],{"class":867},[324,50850,35069],{"class":738},[324,50852,35072],{"class":867},[324,50854,50855],{"class":326,"line":17431},[324,50856,488],{"emptyLinePlaceholder":487},[324,50858,50859],{"class":326,"line":17442},[324,50860,35081],{"class":772},[324,50862,50863,50865,50867,50869,50871],{"class":326,"line":17465},[324,50864,2262],{"class":863},[324,50866,31942],{"class":916},[324,50868,3678],{"class":863},[324,50870,31947],{"class":738},[324,50872,4468],{"class":867},[324,50874,50875],{"class":326,"line":17487},[324,50876,35098],{"class":772},[324,50878,50879,50881,50883],{"class":326,"line":17492},[324,50880,32011],{"class":867},[324,50882,913],{"class":863},[324,50884,45273],{"class":867},[324,50886,50887],{"class":326,"line":17498},[324,50888,35111],{"class":772},[324,50890,50891],{"class":326,"line":17512},[324,50892,35116],{"class":772},[324,50894,50895,50897,50899],{"class":326,"line":17525},[324,50896,35121],{"class":867},[324,50898,35124],{"class":738},[324,50900,31219],{"class":867},[324,50902,50903],{"class":326,"line":17530},[324,50904,35131],{"class":772},[324,50906,50907,50909,50911],{"class":326,"line":17544},[324,50908,34744],{"class":867},[324,50910,913],{"class":863},[324,50912,35140],{"class":867},[324,50914,50915],{"class":326,"line":17549},[324,50916,35145],{"class":772},[324,50918,50919],{"class":326,"line":17555},[324,50920,35150],{"class":867},[324,50922,50923],{"class":326,"line":17560},[324,50924,488],{"emptyLinePlaceholder":487},[324,50926,50927],{"class":326,"line":17574},[324,50928,35159],{"class":772},[324,50930,50931],{"class":326,"line":17579},[324,50932,35164],{"class":772},[324,50934,50935,50937,50939,50941,50943,50945,50947],{"class":326,"line":17584},[324,50936,31959],{"class":867},[324,50938,913],{"class":863},[324,50940,31966],{"class":738},[324,50942,2435],{"class":863},[324,50944,31971],{"class":867},[324,50946,2432],{"class":863},[324,50948,34841],{"class":738},[324,50950,50951,50953,50955],{"class":326,"line":17598},[324,50952,32011],{"class":867},[324,50954,913],{"class":863},[324,50956,33011],{"class":867},[324,50958,50959],{"class":326,"line":17610},[324,50960,35193],{"class":772},[324,50962,50963],{"class":326,"line":17615},[324,50964,35198],{"class":772},[324,50966,50967,50969,50971,50973,50976,50978,50981],{"class":326,"line":17628},[324,50968,35203],{"class":867},[324,50970,913],{"class":863},[324,50972,1754],{"class":867},[324,50974,50975],{"class":738},"'猫'",[324,50977,1242],{"class":867},[324,50979,50980],{"class":738},"'狗'",[324,50982,33968],{"class":867},[324,50984,50985,50987],{"class":326,"line":17633},[324,50986,34900],{"class":863},[324,50988,33606],{"class":867},[324,50990,50991],{"class":326,"line":17638},[324,50992,35268],{"class":772},[324,50994,50995,50997,50999,51001],{"class":326,"line":17643},[324,50996,4132],{"class":863},[324,50998,35275],{"class":867},[324,51000,26767],{"class":863},[324,51002,34919],{"class":867},[324,51004,51005,51007,51009],{"class":326,"line":17656},[324,51006,33332],{"class":867},[324,51008,913],{"class":863},[324,51010,33337],{"class":867},[324,51012,51013,51015,51017],{"class":326,"line":17661},[324,51014,33347],{"class":867},[324,51016,913],{"class":863},[324,51018,33352],{"class":867},[324,51020,51021],{"class":326,"line":33355},[324,51022,488],{"emptyLinePlaceholder":487},[324,51024,51025],{"class":326,"line":33361},[324,51026,35304],{"class":772},[324,51028,51029],{"class":326,"line":33367},[324,51030,33597],{"class":867},[324,51032,51033],{"class":326,"line":33373},[324,51034,35313],{"class":772},[324,51036,51037,51039,51041],{"class":326,"line":33379},[324,51038,33382],{"class":867},[324,51040,913],{"class":863},[324,51042,33387],{"class":867},[324,51044,51045],{"class":326,"line":33390},[324,51046,35326],{"class":772},[324,51048,51049,51051,51053,51055,51057,51059,51061],{"class":326,"line":33396},[324,51050,33399],{"class":867},[324,51052,913],{"class":863},[324,51054,33404],{"class":867},[324,51056,33407],{"class":5945},[324,51058,913],{"class":863},[324,51060,1082],{"class":916},[324,51062,874],{"class":867},[324,51064,51065],{"class":326,"line":33416},[324,51066,35347],{"class":772},[324,51068,51069,51071,51073],{"class":326,"line":33422},[324,51070,35352],{"class":867},[324,51072,913],{"class":863},[324,51074,35357],{"class":867},[324,51076,51077,51079,51081],{"class":326,"line":33433},[324,51078,35362],{"class":867},[324,51080,913],{"class":863},[324,51082,35367],{"class":867},[324,51084,51085,51087,51089,51091,51093,51095,51097,51099],{"class":326,"line":33439},[324,51086,35372],{"class":916},[324,51088,868],{"class":867},[324,51090,35377],{"class":738},[324,51092,35380],{"class":867},[324,51094,35383],{"class":738},[324,51096,1242],{"class":867},[324,51098,35388],{"class":738},[324,51100,35391],{"class":867},[775,51102,51103],{},"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":50,"searchDepth":203,"depth":203,"links":51105},[51106,51107,51108,51109],{"id":31313,"depth":338,"text":31314},{"id":38561,"depth":338,"text":38562},{"id":41994,"depth":338,"text":41995},{"id":46003,"depth":338,"text":46004},{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch2",{"title":31305,"description":791},"wiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络","Bxs5UQ86zdlE-CO6G4Yv0d8SCjaTflxjZXwosV5BYw0",{"id":51116,"title":51117,"body":51118,"description":791,"extension":792,"meta":51125,"navigation":487,"path":51126,"seo":51127,"stem":51128,"__hash__":51129},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习.md","3.yolo模型学习",{"type":7,"value":51119,"toc":51123},[51120],[10,51121,51117],{"id":51122},"_3yolo模型学习",{"title":50,"searchDepth":203,"depth":203,"links":51124},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch3-yolo",{"title":51117,"description":791},"wiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习","up9SfBhaIIBLUfBuXgY3nFD9vRIUbWF1AanknFvugPQ",{"id":51131,"title":51132,"body":51133,"description":51140,"extension":792,"meta":51141,"navigation":487,"path":51143,"seo":51144,"stem":51145,"__hash__":51146},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Findex.md","CNN基础",{"type":7,"value":51134,"toc":51138},[51135],[19,51136,51137],{},"yolo模型还未补充",{"title":50,"searchDepth":203,"depth":203,"links":51139},[],"深度学习学习",{"category":51142},"深度学习","\u002Fwiki\u002F2025-11-03-cnn",{"title":51132,"description":51140},"wiki\u002F2025-11-03-cnn基础\u002Findex","jomiRepUEk1d2yEd-72Mm5lgO1UAsmOClqiKKJLBiIE",{"id":51148,"title":51149,"body":51150,"description":791,"extension":792,"meta":51175,"navigation":487,"path":51176,"seo":51177,"stem":51178,"__hash__":51179},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch1-工具.md","1.工具",{"type":7,"value":51151,"toc":51173},[51152,51155,51158,51163,51170],[10,51153,51149],{"id":51154},"_1工具",[19,51156,51157],{},"提示错误插件：有问题会提前报错",[19,51159,51160],{},[48,51161],{"alt":50,"src":51162},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-001.png",[19,51164,51165],{},[25,51166,51169],{"href":51167,"rel":51168},"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",[29],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002F前端资料搜集必备网站",[19,51171,51172],{},"alt键加上下箭头可以实现语句的移动",{"title":50,"searchDepth":203,"depth":203,"links":51174},[],{},"\u002Fwiki\u002F2025-09-02-js\u002Fch1",{"title":51149,"description":791},"wiki\u002F2025-09-02-JS学习\u002Fch1-工具","ahoJ9ydgi0wuLgmhEUjAoGpyZKNS_IeMsqe-jPF9xx4",{"id":51181,"title":51182,"body":51183,"description":791,"extension":792,"meta":54047,"navigation":487,"path":54048,"seo":54049,"stem":54050,"__hash__":54051},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch2-基础语法.md","2.基础语法",{"type":7,"value":51184,"toc":53998},[51185,51188,51192,51196,51201,51204,51209,51213,51220,51225,51232,51237,51244,51249,51253,51258,51261,51265,51270,51274,51279,51282,51285,51288,51291,51294,51297,51300,51303,51308,51313,51318,51322,51325,51328,51332,51337,51340,51348,51353,51370,51378,51383,51388,51393,51398,51403,51406,51411,51416,51420,51429,51434,51439,51443,51448,51451,51455,51460,51468,51473,51478,51481,51486,51491,51496,51499,51502,51505,51510,51515,51518,51523,51526,51531,51534,51537,51540,51545,51548,51551,51566,51571,51576,51581,51584,51587,51590,51604,51607,51612,51617,51620,51623,51626,51629,51632,51635,51638,51642,51646,51651,51655,51658,51663,51668,51671,51676,51679,51683,51688,51691,51694,51697,51700,51703,51706,51709,51712,51715,51719,51724,51729,51734,51737,51740,51744,51749,51752,51756,51759,51762,51767,51770,51773,51777,51781,51784,51789,51794,51797,51826,51831,51836,51841,51846,51850,51855,51859,51864,51867,51871,51875,51880,51884,51889,51894,51898,51903,51906,51908,51911,51916,51920,51925,51929,51933,51938,51943,51948,51953,51957,51962,51967,51972,51975,51978,51983,51986,51991,51996,52001,52006,52010,52817,52821,53164,53169,53172,53175,53178,53181,53184,53187,53190,53193,53195,53198,53200,53203,53207,53212,53215,53218,53221,53225,53230,53235,53255,53258,53262,53267,53272,53289,53293,53322,53326,53348,53350,53389,53397,53403,53407,53410,53413,53418,53423,53426,53429,53432,53437,53442,53445,53448,53451,53454,53457,53460,53463,53466,53469,53472,53475,53477,53480,53483,53486,53489,53492,53495,53498,53501,53505,53510,53513,53518,53521,53524,53527,53530,53533,53536,53539,53541,53544,53547,53550,53553,53556,53559,53563,53566,53575,53578,53583,53586,53591,53594,53597,53600,53603,53606,53609,53612,53616,53620,53623,53626,53631,53636,53641,53645,53650,53655,53658,53661,53664,53667,53670,53675,53678,53683,53685,53690,53693,53697,53702,53705,53708,53713,53717,53720,53725,53728,53731,53760,53765,53768,53771,53774,53777,53780,53784,53787,53873,53877,53880,53885,53890,53897,53900,53903,53906,53909,53912,53917,53922,53925,53928,53931,53934,53937,53940,53943,53946,53949,53951,53954,53958,53963,53968,53973,53976,53981,53986,53989,53992,53995],[10,51186,51182],{"id":51187},"_2基础语法",[14,51189,51191],{"id":51190},"_21-js的使用基本介绍","2.1 js的使用基本介绍",[35,51193,51195],{"id":51194},"_211-js组成","2.1.1 js组成",[192,51197,51198],{},[195,51199,51200],{},"js是编程语言，html和css不是编程语言，是标记语言",[19,51202,51203],{},"js组成：ECMAScript(JavaScript语言基础)和Web APIs(由DOM页面文档对象模型和BOM浏览器对象模型)",[192,51205,51206],{"start":203},[195,51207,51208],{},"JavaScript 程序不能独立运行，它需要被嵌入 HTML 中，然后浏览器才能执行 JavaScript 代码",[35,51210,51212],{"id":51211},"_212-js书写位置","2.1.2 js书写位置",[192,51214,51215],{},[195,51216,51217],{},[116,51218,51219],{},"内部 JavaScript",[19,51221,51222],{},[48,51223],{"alt":50,"src":51224},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-002.png",[192,51226,51227],{"start":203},[195,51228,51229],{},[116,51230,51231],{},"外部 JavaScript",[19,51233,51234],{},[48,51235],{"alt":50,"src":51236},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-003.png",[192,51238,51239],{"start":338},[195,51240,51241],{},[116,51242,51243],{},"内联 JavaScript",[19,51245,51246],{},[48,51247],{"alt":50,"src":51248},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-004.png",[35,51250,51252],{"id":51251},"_213-javascript注释","2.1.3 JavaScript注释",[19,51254,51255],{},[48,51256],{"alt":50,"src":51257},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-005.png",[19,51259,51260],{},"alt+shift+a一定要记住！",[35,51262,51264],{"id":51263},"_214-javascript结束符","2.1.4 JavaScript结束符",[19,51266,51267],{},[48,51268],{"alt":50,"src":51269},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-006.png",[35,51271,51273],{"id":51272},"_2115-javascript-输入输出语法","21.1.5 JavaScript 输入输出语法",[192,51275,51276],{},[195,51277,51278],{},"输出语法：",[19,51280,51281],{},"①document.write('要出的内容')",[19,51283,51284],{},"向body内输出内容；",[19,51286,51287],{},"如果输出的内容写的是标签，也会被解析cheng",[19,51289,51290],{},"②alert('要出的内容')",[19,51292,51293],{},"页面弹出警告对话框",[19,51295,51296],{},"③console.log('控制台打印')",[19,51298,51299],{},"控制台输出语法，程序员调试使用",[19,51301,51302],{},"输入log就行，自动生成：",[19,51304,51305],{},[48,51306],{"alt":50,"src":51307},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-007.png",[192,51309,51310],{"start":203},[195,51311,51312],{},"输入语法：",[19,51314,51315],{},[48,51316],{"alt":50,"src":51317},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-008.png",[35,51319,51321],{"id":51320},"_2116-字面量","21.1.6 字面量",[19,51323,51324],{},"在计算机科学中，字面量（literal）是在计算机中描述 事\u002F物",[19,51326,51327],{},"例如：18 是一个数字字面量；'pink' 是一个字符串字面量",[14,51329,51331],{"id":51330},"_22-变量","2.2 变量",[192,51333,51334],{},[195,51335,51336],{},"变量声明",[19,51338,51339],{},"let 变量名",[1871,51341,51342,51345],{},[195,51343,51344],{},"声明变量有两部分组成：声明关键字 变量名（也叫标识符）",[195,51346,51347],{},"let 即关键字 (let: 允许、许可、让、要)，所谓关键字是系统提供的专门用来声明（定义）变量的词语",[192,51349,51350],{"start":203},[195,51351,51352],{},"变量赋值",[316,51354,51358],{"className":51355,"code":51356,"language":51357,"meta":50,"style":50},"language-html shiki shiki-themes github-light github-dark","let age\nage=18 \n","html",[269,51359,51360,51365],{"__ignoreMap":50},[324,51361,51362],{"class":326,"line":327},[324,51363,51364],{"class":867},"let age\n",[324,51366,51367],{"class":326,"line":203},[324,51368,51369],{"class":867},"age=18\n",[192,51371,51372,51375],{"start":338},[195,51373,51374],{},"连这些（变量的初始化）：let age=18",[195,51376,51377],{},"更新变量",[19,51379,51380],{},[48,51381],{"alt":50,"src":51382},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-009.png",[192,51384,51385],{"start":484},[195,51386,51387],{},"声明多个变量",[19,51389,51390],{},[48,51391],{"alt":50,"src":51392},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-010.png",[192,51394,51395],{"start":491},[195,51396,51397],{},"变量命名规则与规范",[19,51399,51400],{},[48,51401],{"alt":50,"src":51402},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-011.png",[19,51404,51405],{},"遵守小驼峰！",[192,51407,51408],{"start":496},[195,51409,51410],{},"变量拓展-let和var的区别",[19,51412,51413],{},[48,51414],{"alt":50,"src":51415},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-012.png",[14,51417,51419],{"id":51418},"_23-数组","2.3 数组",[316,51421,51423],{"className":51355,"code":51422,"language":51357,"meta":50,"style":50},"let arr = []\n",[269,51424,51425],{"__ignoreMap":50},[324,51426,51427],{"class":326,"line":327},[324,51428,51422],{"class":867},[19,51430,51431],{},[48,51432],{"alt":50,"src":51433},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-013.png",[19,51435,51436],{},[48,51437],{"alt":50,"src":51438},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-014.png",[14,51440,51442],{"id":51441},"_24-常量","2.4 常量",[19,51444,51445],{},[48,51446],{"alt":50,"src":51447},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-015.png",[19,51449,51450],{},"const — 类似于 let ，但是变量的值无法被修改",[14,51452,51454],{"id":51453},"_25-数据类型","2.5 数据类型",[19,51456,51457],{},[48,51458],{"alt":50,"src":51459},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-016.png",[192,51461,51462,51465],{},[195,51463,51464],{},"js是一门弱数据类型的语言，只要是数字就是数字型语言",[195,51466,51467],{},"算数运算符：",[19,51469,51470],{},[48,51471],{"alt":50,"src":51472},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-017.png",[192,51474,51475],{"start":338},[195,51476,51477],{},"数字类型（Number）",[19,51479,51480],{},"JavaScript 中的正数、负数、小数等 统一称为 数字类型",[19,51482,51483],{},[48,51484],{"alt":50,"src":51485},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-018.png",[192,51487,51488],{"start":344},[195,51489,51490],{},"字符串类型（string）",[19,51492,51493],{},[48,51494],{"alt":50,"src":51495},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-019.png",[19,51497,51498],{},"反引号也是可以使用的",[19,51500,51501],{},"➕：数字相加，字符相连，只要有字符串就可以与其他进行相加",[19,51503,51504],{},"例如：document.write(\"我今年\"+age+\"岁\")",[192,51506,51507],{"start":484},[195,51508,51509],{},"模板字符串",[19,51511,51512],{},[48,51513],{"alt":50,"src":51514},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-020.png",[19,51516,51517],{},"类似于python的字符串格式化",[192,51519,51520],{"start":491},[195,51521,51522],{},"布尔类型",[19,51524,51525],{},"true 和 false",[192,51527,51528],{"start":496},[195,51529,51530],{},"未定义类型（underfined）",[19,51532,51533],{},"表示没有赋值",[19,51535,51536],{},"未定义类型是比较特殊的类型，只有一个值undefined",[19,51538,51539],{},"只声明变量，不赋值的情况下，变量的默认值为 undefined，一般很少【直接】为某个变量赋值为 undefined",[192,51541,51542],{"start":502},[195,51543,51544],{},"null（空类型）",[19,51546,51547],{},"JavaScript 中的 null 仅仅是一个代表“无”、“空”或“值未知”的特殊值",[19,51549,51550],{},"赋值了，但是内容为空",[316,51552,51554],{"className":51355,"code":51553,"language":51357,"meta":50,"style":50},"typeof null\n输出的是'object'，是一个对象数据类型\n",[269,51555,51556,51561],{"__ignoreMap":50},[324,51557,51558],{"class":326,"line":327},[324,51559,51560],{"class":867},"typeof null\n",[324,51562,51563],{"class":326,"line":203},[324,51564,51565],{"class":867},"输出的是'object'，是一个对象数据类型\n",[192,51567,51568],{"start":508},[195,51569,51570],{},"控制台检测数据类型",[19,51572,51573],{},[48,51574],{"alt":50,"src":51575},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-021.png",[192,51577,51578],{"start":514},[195,51579,51580],{},"类型转换",[19,51582,51583],{},"prompt输入的内容都是字符串字面量，还有html时的表单（input啥的输入的也是字符串字面量）",[19,51585,51586],{},"转换方式：隐式转换和显示转换",[19,51588,51589],{},"①隐式转换",[1871,51591,51592,51595,51598,51601],{},[195,51593,51594],{},"号两边只要有一个是字符串，都会把另外一个转成字符串",[195,51596,51597],{},"除了+以外的算术运算符 比如 - * \u002F 等都会把数据转成数字类型（只要有数字就会把另一个转化成数字字面变量）",[195,51599,51600],{},"加号作为正号解析可以转换成数字型：console.log(+'123')不再是字符串类型，是数字类型为123",[195,51602,51603],{},"任何数据和字符串相加结果都是字符串",[19,51605,51606],{},"②显示转换",[19,51608,51609],{},[48,51610],{"alt":50,"src":51611},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-022.png",[19,51613,51614],{},[48,51615],{"alt":50,"src":51616},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-023.png",[19,51618,51619],{},"在输入的时候要用好隐式转换，简单写起来",[19,51621,51622],{},"let num = +prompt(’请输入数字：‘)",[19,51624,51625],{},"  parseInt与parseFloat是只取前边的数字，如果前边有字母，是无法进行识别后边的数字的，会显示NaN，表示错误",[19,51627,51628],{},"console.log(parseInt('12.333px'))",[19,51630,51631],{},"输出为：12",[19,51633,51634],{},"console.log(parseInt('a'a'a12.333px'))",[19,51636,51637],{},"输出：NaN",[14,51639,51641],{"id":51640},"_26-运算符","2.6 运算符",[35,51643,51645],{"id":51644},"_261-赋值运算符","2.6.1 赋值运算符",[19,51647,51648],{},[48,51649],{"alt":50,"src":51650},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-024.png",[35,51652,51654],{"id":51653},"_262-一元运算符","2.6.2 一元运算符",[19,51656,51657],{},"众多的 JavaScript 的运算符可以根据所需表达式的个数，分为一元运算符、二元运算符、三元运算符，就看需要几个数来操作，例如+需要两个数才能相加，所以叫做二元运算符，正负号的话就是一元运算符",[19,51659,51660],{},[48,51661],{"alt":50,"src":51662},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-025.png",[19,51664,51665],{},[48,51666],{"alt":50,"src":51667},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-026.png",[19,51669,51670],{},"两者的区别：",[19,51672,51673],{},[48,51674],{"alt":50,"src":51675},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-027.png",[19,51677,51678],{},"前置先自加；后置后加，代码执行完之后再加",[35,51680,51682],{"id":51681},"_263-比较运算符","2.6.3 比较运算符",[19,51684,51685],{},[48,51686],{"alt":50,"src":51687},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-028.png",[19,51689,51690],{},"比较运算符也有隐式转换",[19,51692,51693],{},"console.log(2 == '2')输出为true，只判断值，==含有隐式转换，前边是数字字面量的情况下，会将字符串转化为数字字面量",[19,51695,51696],{},"console.log(2==='2')输出false，===全等，会判断值和数据类型，需要全部一样才为true",[19,51698,51699],{},"要使用三等，开发的时候",[19,51701,51702],{},"NaN不等于任何人，包括它自己",[19,51704,51705],{},"小数在进行运算的时候它会先把自己转化为整数，然后最后再除以放大的数变回原来：例如：0.5+0.2：它是0.5*10+0.2*10=7",[19,51707,51708],{},"7\u002F10=0.7",[19,51710,51711],{},"最后：0.5+0.2=0.7",[19,51713,51714],{},"字符串比较，比较的是字符对应的ASCII码",[35,51716,51718],{"id":51717},"_264-逻辑运算符","2.6.4 逻辑运算符",[19,51720,51721],{},[48,51722],{"alt":50,"src":51723},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-029.png",[19,51725,51726],{},[48,51727],{"alt":50,"src":51728},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-030.png",[19,51730,51731],{},[48,51732],{"alt":50,"src":51733},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-031.png",[19,51735,51736],{},"上述题目选D",[19,51738,51739],{},"与真2假1；或真1假2",[35,51741,51743],{"id":51742},"_265-运算符优先级","2.6.5 运算符优先级",[19,51745,51746],{},[48,51747],{"alt":50,"src":51748},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-032.png",[19,51750,51751],{},"先算逻辑与，后算逻辑或",[14,51753,51755],{"id":51754},"_27-语句","2.7 语句",[19,51757,51758],{},"表达式：是可以被求值的代码，会有结果给我们",[19,51760,51761],{},"语句：语句是可以被执行的代码，例如prompt()",[19,51763,51764],{},[48,51765],{"alt":50,"src":51766},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-033.png",[19,51768,51769],{},"因为表达式可被求值，所以它可以写在赋值语句的右侧。",[19,51771,51772],{},"而语句不一定有值，所以比如 alert() for和break 等语句就不能被用于赋值。",[35,51774,51776],{"id":51775},"_271-分支语句","2.7.1 分支语句",[151,51778,51780],{"id":51779},"_2711-if分支语句","2.7.1.1 if分支语句",[19,51782,51783],{},"if语句单行简单的话，可以不写{}，写在一行就行",[192,51785,51786],{},[195,51787,51788],{},"单分支语句",[19,51790,51791],{},[48,51792],{"alt":50,"src":51793},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-034.png",[19,51795,51796],{},"除了0，所有数字都为真",[316,51798,51800],{"className":51355,"code":51799,"language":51357,"meta":50,"style":50},"if（0) {\n    let a=1\n    alert(typeof a)\n}\n不输出，括号为假\n",[269,51801,51802,51807,51812,51817,51821],{"__ignoreMap":50},[324,51803,51804],{"class":326,"line":327},[324,51805,51806],{"class":867},"if（0) {\n",[324,51808,51809],{"class":326,"line":203},[324,51810,51811],{"class":867},"    let a=1\n",[324,51813,51814],{"class":326,"line":338},[324,51815,51816],{"class":867},"    alert(typeof a)\n",[324,51818,51819],{"class":326,"line":344},[324,51820,2296],{"class":867},[324,51822,51823],{"class":326,"line":484},[324,51824,51825],{"class":867},"不输出，括号为假\n",[192,51827,51828],{"start":203},[195,51829,51830],{},"双分支语句",[19,51832,51833],{},[48,51834],{"alt":50,"src":51835},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-035.png",[192,51837,51838],{"start":338},[195,51839,51840],{},"多分支语句",[19,51842,51843],{},[48,51844],{"alt":50,"src":51845},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-036.png",[151,51847,51849],{"id":51848},"_2712-三元运算符","2.7.1.2 三元运算符",[19,51851,51852],{},[48,51853],{"alt":50,"src":51854},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-037.png",[151,51856,51858],{"id":51857},"_2713-switch语句","2.7.1.3 switch语句",[19,51860,51861],{},[48,51862],{"alt":50,"src":51863},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-038.png",[19,51865,51866],{},"如果不写break，在匹配成功之后，输出完这个匹配内容后，switch语句就失效了，他会把后边的内容也全部输出",[35,51868,51870],{"id":51869},"_272-循环语句","2.7.2 循环语句",[151,51872,51874],{"id":51873},"_2721-断点演示","2.7.2.1 断点演示",[19,51876,51877],{},[48,51878],{"alt":50,"src":51879},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-039.png",[151,51881,51883],{"id":51882},"_2722-while循环","2.7.2.2 while循环",[19,51885,51886],{},[48,51887],{"alt":50,"src":51888},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-040.png",[19,51890,51891],{},[48,51892],{"alt":50,"src":51893},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-041.png",[151,51895,51897],{"id":51896},"_2723-for循环","2.7.2.3 for循环",[19,51899,51900],{},[48,51901],{"alt":50,"src":51902},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-042.png",[19,51904,51905],{},"for(;;) {",[19,51907,1810],{},[19,51909,51910],{},"表示无限循环",[19,51912,51913],{},[48,51914],{"alt":50,"src":51915},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-043.png",[151,51917,51919],{"id":51918},"_2724-循环的退出","2.7.2.4 循环的退出",[19,51921,51922],{},[48,51923],{"alt":50,"src":51924},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-044.png",[14,51926,51928],{"id":51927},"_28-数组","2.8 数组",[35,51930,51932],{"id":51931},"_281-基础认识","2.8.1 基础认识",[19,51934,51935],{},[48,51936],{"alt":50,"src":51937},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-045.png",[19,51939,51940],{},[48,51941],{"alt":50,"src":51942},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-046.png",[19,51944,51945],{},[48,51946],{"alt":50,"src":51947},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-047.png",[19,51949,51950],{},[48,51951],{"alt":50,"src":51952},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-048.png",[35,51954,51956],{"id":51955},"_282-操作数组","2.8.2 操作数组",[19,51958,51959],{},[48,51960],{"alt":50,"src":51961},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-049.png",[192,51963,51964],{},[195,51965,51966],{},"添加元素",[19,51968,51969],{},[48,51970],{"alt":50,"src":51971},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-050.png",[19,51973,51974],{},"console.log(arr.push('green'))",[19,51976,51977],{},"输出结果：为新数组的长度",[19,51979,51980],{},[48,51981],{"alt":50,"src":51982},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-051.png",[19,51984,51985],{},"push用的非常多，一定要记住",[192,51987,51988],{},[195,51989,51990],{},"删除元素",[19,51992,51993],{},[48,51994],{"alt":50,"src":51995},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-052.png",[19,51997,51998],{},[48,51999],{"alt":50,"src":52000},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-053.png",[19,52002,52003],{},[48,52004],{"alt":50,"src":52005},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-054.png",[35,52007,52009],{"id":52008},"_283-根据数据生成柱形图","2.8.3 根据数据生成柱形图",[316,52011,52013],{"className":51355,"code":52012,"language":51357,"meta":50,"style":50},"\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",[269,52014,52015,52030,52046,52050,52059,52077,52101,52123,52137,52145,52152,52164,52175,52179,52183,52190,52202,52217,52230,52249,52266,52281,52293,52305,52317,52321,52325,52336,52346,52358,52370,52382,52393,52397,52401,52413,52417,52431,52435,52439,52450,52464,52476,52490,52494,52503,52512,52516,52525,52529,52538,52543,52548,52561,52589,52594,52599,52624,52629,52633,52638,52643,52658,52662,52667,52697,52709,52725,52741,52755,52760,52767,52771,52776,52789,52797,52805,52809],{"__ignoreMap":50},[324,52016,52017,52020,52024,52027],{"class":326,"line":327},[324,52018,52019],{"class":867},"\u003C!",[324,52021,52023],{"class":52022},"s9eBZ","DOCTYPE",[324,52025,52026],{"class":734}," html",[324,52028,52029],{"class":867},">\n",[324,52031,52032,52034,52036,52039,52041,52044],{"class":326,"line":203},[324,52033,1774],{"class":867},[324,52035,51357],{"class":52022},[324,52037,52038],{"class":734}," lang",[324,52040,913],{"class":867},[324,52042,52043],{"class":738},"\"en\"",[324,52045,52029],{"class":867},[324,52047,52048],{"class":326,"line":338},[324,52049,488],{"emptyLinePlaceholder":487},[324,52051,52052,52054,52057],{"class":326,"line":344},[324,52053,1774],{"class":867},[324,52055,52056],{"class":52022},"head",[324,52058,52029],{"class":867},[324,52060,52061,52064,52067,52070,52072,52075],{"class":326,"line":484},[324,52062,52063],{"class":867},"    \u003C",[324,52065,52066],{"class":52022},"meta",[324,52068,52069],{"class":734}," charset",[324,52071,913],{"class":867},[324,52073,52074],{"class":738},"\"UTF-8\"",[324,52076,52029],{"class":867},[324,52078,52079,52081,52083,52086,52088,52091,52094,52096,52099],{"class":326,"line":491},[324,52080,52063],{"class":867},[324,52082,52066],{"class":52022},[324,52084,52085],{"class":734}," http-equiv",[324,52087,913],{"class":867},[324,52089,52090],{"class":738},"\"X-UA-Compatible\"",[324,52092,52093],{"class":734}," content",[324,52095,913],{"class":867},[324,52097,52098],{"class":738},"\"IE=edge\"",[324,52100,52029],{"class":867},[324,52102,52103,52105,52107,52109,52111,52114,52116,52118,52121],{"class":326,"line":496},[324,52104,52063],{"class":867},[324,52106,52066],{"class":52022},[324,52108,15649],{"class":734},[324,52110,913],{"class":867},[324,52112,52113],{"class":738},"\"viewport\"",[324,52115,52093],{"class":734},[324,52117,913],{"class":867},[324,52119,52120],{"class":738},"\"width=device-width, initial-scale=1.0\"",[324,52122,52029],{"class":867},[324,52124,52125,52127,52130,52133,52135],{"class":326,"line":502},[324,52126,52063],{"class":867},[324,52128,52129],{"class":52022},"title",[324,52131,52132],{"class":867},">Document\u003C\u002F",[324,52134,52129],{"class":52022},[324,52136,52029],{"class":867},[324,52138,52139,52141,52143],{"class":326,"line":508},[324,52140,52063],{"class":867},[324,52142,775],{"class":52022},[324,52144,52029],{"class":867},[324,52146,52147,52150],{"class":326,"line":514},[324,52148,52149],{"class":52022},"        *",[324,52151,16301],{"class":867},[324,52153,52154,52157,52160,52162],{"class":326,"line":2343},[324,52155,52156],{"class":916},"            margin",[324,52158,52159],{"class":867},": ",[324,52161,1056],{"class":916},[324,52163,2025],{"class":867},[324,52165,52166,52169,52171,52173],{"class":326,"line":2348},[324,52167,52168],{"class":916},"            padding",[324,52170,52159],{"class":867},[324,52172,1056],{"class":916},[324,52174,2025],{"class":867},[324,52176,52177],{"class":326,"line":2354},[324,52178,3258],{"class":867},[324,52180,52181],{"class":326,"line":2359},[324,52182,488],{"emptyLinePlaceholder":487},[324,52184,52185,52188],{"class":326,"line":2373},[324,52186,52187],{"class":734},"        .box",[324,52189,16301],{"class":867},[324,52191,52192,52195,52197,52200],{"class":326,"line":2378},[324,52193,52194],{"class":916},"            display",[324,52196,52159],{"class":867},[324,52198,52199],{"class":916},"flex",[324,52201,2025],{"class":867},[324,52203,52204,52207,52209,52212,52215],{"class":326,"line":2384},[324,52205,52206],{"class":916},"            width",[324,52208,52159],{"class":867},[324,52210,52211],{"class":916},"700",[324,52213,52214],{"class":863},"px",[324,52216,2025],{"class":867},[324,52218,52219,52222,52224,52226,52228],{"class":326,"line":2405},[324,52220,52221],{"class":916},"            height",[324,52223,52159],{"class":867},[324,52225,4702],{"class":916},[324,52227,52214],{"class":863},[324,52229,2025],{"class":867},[324,52231,52232,52235,52237,52239,52241,52244,52247],{"class":326,"line":2410},[324,52233,52234],{"class":916},"            border-left",[324,52236,52159],{"class":867},[324,52238,1082],{"class":916},[324,52240,52214],{"class":863},[324,52242,52243],{"class":916}," solid",[324,52245,52246],{"class":916}," pink",[324,52248,2025],{"class":867},[324,52250,52251,52254,52256,52258,52260,52262,52264],{"class":326,"line":2424},[324,52252,52253],{"class":916},"            border-bottom",[324,52255,52159],{"class":867},[324,52257,1082],{"class":916},[324,52259,52214],{"class":863},[324,52261,52243],{"class":916},[324,52263,52246],{"class":916},[324,52265,2025],{"class":867},[324,52267,52268,52270,52272,52274,52276,52279],{"class":326,"line":2429},[324,52269,52156],{"class":916},[324,52271,52159],{"class":867},[324,52273,1520],{"class":916},[324,52275,52214],{"class":863},[324,52277,52278],{"class":916}," auto",[324,52280,2025],{"class":867},[324,52282,52283,52286,52288,52291],{"class":326,"line":2458},[324,52284,52285],{"class":916},"            justify-content",[324,52287,52159],{"class":867},[324,52289,52290],{"class":916},"space-around",[324,52292,2025],{"class":867},[324,52294,52295,52298,52300,52303],{"class":326,"line":2463},[324,52296,52297],{"class":916},"            align-items",[324,52299,52159],{"class":867},[324,52301,52302],{"class":916},"flex-end",[324,52304,2025],{"class":867},[324,52306,52307,52310,52312,52315],{"class":326,"line":2480},[324,52308,52309],{"class":916},"            text-align",[324,52311,52159],{"class":867},[324,52313,52314],{"class":916},"center",[324,52316,2025],{"class":867},[324,52318,52319],{"class":326,"line":2485},[324,52320,3258],{"class":867},[324,52322,52323],{"class":326,"line":2490},[324,52324,488],{"emptyLinePlaceholder":487},[324,52326,52327,52329,52331,52334],{"class":326,"line":2495},[324,52328,52187],{"class":734},[324,52330,1824],{"class":863},[324,52332,52333],{"class":52022},"div",[324,52335,16301],{"class":867},[324,52337,52338,52340,52342,52344],{"class":326,"line":2509},[324,52339,52194],{"class":916},[324,52341,52159],{"class":867},[324,52343,52199],{"class":916},[324,52345,2025],{"class":867},[324,52347,52348,52350,52352,52354,52356],{"class":326,"line":2514},[324,52349,52206],{"class":916},[324,52351,52159],{"class":867},[324,52353,1520],{"class":916},[324,52355,52214],{"class":863},[324,52357,2025],{"class":867},[324,52359,52360,52363,52365,52368],{"class":326,"line":3306},[324,52361,52362],{"class":916},"            background-color",[324,52364,52159],{"class":867},[324,52366,52367],{"class":916},"pink",[324,52369,2025],{"class":867},[324,52371,52372,52375,52377,52380],{"class":326,"line":3320},[324,52373,52374],{"class":916},"            flex-direction",[324,52376,52159],{"class":867},[324,52378,52379],{"class":916},"column",[324,52381,2025],{"class":867},[324,52383,52384,52386,52388,52391],{"class":326,"line":3328},[324,52385,52285],{"class":916},[324,52387,52159],{"class":867},[324,52389,52390],{"class":916},"space-between",[324,52392,2025],{"class":867},[324,52394,52395],{"class":326,"line":3333},[324,52396,3258],{"class":867},[324,52398,52399],{"class":326,"line":3339},[324,52400,488],{"emptyLinePlaceholder":487},[324,52402,52403,52405,52408,52411],{"class":326,"line":3345},[324,52404,52187],{"class":734},[324,52406,52407],{"class":52022}," div",[324,52409,52410],{"class":52022}," span",[324,52412,16301],{"class":867},[324,52414,52415],{"class":326,"line":3350},[324,52416,488],{"emptyLinePlaceholder":487},[324,52418,52419,52422,52424,52427,52429],{"class":326,"line":8677},[324,52420,52421],{"class":916},"            margin-top",[324,52423,52159],{"class":867},[324,52425,52426],{"class":916},"-20",[324,52428,52214],{"class":863},[324,52430,2025],{"class":867},[324,52432,52433],{"class":326,"line":8701},[324,52434,3258],{"class":867},[324,52436,52437],{"class":326,"line":8706},[324,52438,488],{"emptyLinePlaceholder":487},[324,52440,52441,52443,52445,52448],{"class":326,"line":8712},[324,52442,52187],{"class":734},[324,52444,52407],{"class":52022},[324,52446,52447],{"class":52022}," h4",[324,52449,16301],{"class":867},[324,52451,52452,52455,52457,52460,52462],{"class":326,"line":8739},[324,52453,52454],{"class":916},"            margin-bottom",[324,52456,52159],{"class":867},[324,52458,52459],{"class":916},"-35",[324,52461,52214],{"class":863},[324,52463,2025],{"class":867},[324,52465,52466,52468,52470,52472,52474],{"class":326,"line":8744},[324,52467,52206],{"class":916},[324,52469,52159],{"class":867},[324,52471,1220],{"class":916},[324,52473,52214],{"class":863},[324,52475,2025],{"class":867},[324,52477,52478,52481,52483,52486,52488],{"class":326,"line":8750},[324,52479,52480],{"class":916},"            margin-left",[324,52482,52159],{"class":867},[324,52484,52485],{"class":916},"-10",[324,52487,52214],{"class":863},[324,52489,2025],{"class":867},[324,52491,52492],{"class":326,"line":8762},[324,52493,3258],{"class":867},[324,52495,52496,52499,52501],{"class":326,"line":8774},[324,52497,52498],{"class":867},"    \u003C\u002F",[324,52500,775],{"class":52022},[324,52502,52029],{"class":867},[324,52504,52505,52508,52510],{"class":326,"line":8786},[324,52506,52507],{"class":867},"\u003C\u002F",[324,52509,52056],{"class":52022},[324,52511,52029],{"class":867},[324,52513,52514],{"class":326,"line":10445},[324,52515,488],{"emptyLinePlaceholder":487},[324,52517,52518,52520,52523],{"class":326,"line":10470},[324,52519,1774],{"class":867},[324,52521,52522],{"class":52022},"body",[324,52524,52029],{"class":867},[324,52526,52527],{"class":326,"line":10493},[324,52528,488],{"emptyLinePlaceholder":487},[324,52530,52531,52533,52536],{"class":326,"line":10517},[324,52532,52063],{"class":867},[324,52534,52535],{"class":52022},"script",[324,52537,52029],{"class":867},[324,52539,52540],{"class":326,"line":10522},[324,52541,52542],{"class":772},"        \u002F\u002F 1. 四次弹框效果\n",[324,52544,52545],{"class":326,"line":10527},[324,52546,52547],{"class":772},"        \u002F\u002F 声明一个新的数组\n",[324,52549,52550,52553,52556,52558],{"class":326,"line":10532},[324,52551,52552],{"class":863},"        let",[324,52554,52555],{"class":867}," arr ",[324,52557,913],{"class":863},[324,52559,52560],{"class":867}," []\n",[324,52562,52563,52565,52567,52570,52572,52574,52576,52578,52580,52583,52585,52587],{"class":326,"line":10541},[324,52564,4132],{"class":863},[324,52566,2389],{"class":867},[324,52568,52569],{"class":863},"let",[324,52571,10167],{"class":867},[324,52573,913],{"class":863},[324,52575,25842],{"class":916},[324,52577,10174],{"class":867},[324,52579,2319],{"class":863},[324,52581,52582],{"class":916}," 4",[324,52584,3943],{"class":867},[324,52586,3022],{"class":863},[324,52588,13171],{"class":867},[324,52590,52591],{"class":326,"line":10546},[324,52592,52593],{"class":772},"            \u002F\u002F let num = prompt(`请输入第${i}季度的数据:`)\n",[324,52595,52596],{"class":326,"line":10552},[324,52597,52598],{"class":772},"            \u002F\u002F arr.push(num)\n",[324,52600,52601,52604,52607,52609,52612,52614,52617,52619,52622],{"class":326,"line":10573},[324,52602,52603],{"class":867},"            arr.",[324,52605,52606],{"class":734},"push",[324,52608,868],{"class":867},[324,52610,52611],{"class":734},"prompt",[324,52613,868],{"class":867},[324,52615,52616],{"class":738},"`请输入第${",[324,52618,1305],{"class":867},[324,52620,52621],{"class":738},"}季度的数据:`",[324,52623,31219],{"class":867},[324,52625,52626],{"class":326,"line":10579},[324,52627,52628],{"class":772},"            \u002F\u002F push记得加小括号，不是等号赋值的形式\n",[324,52630,52631],{"class":326,"line":10593},[324,52632,3258],{"class":867},[324,52634,52635],{"class":326,"line":10599},[324,52636,52637],{"class":772},"        \u002F\u002F console.log(arr)  ['123','135','345','234']\n",[324,52639,52640],{"class":326,"line":10626},[324,52641,52642],{"class":772},"        \u002F\u002F 盒子开头\n",[324,52644,52645,52648,52651,52653,52656],{"class":326,"line":10635},[324,52646,52647],{"class":867},"        document.",[324,52649,52650],{"class":734},"write",[324,52652,868],{"class":867},[324,52654,52655],{"class":738},"` \u003Cdiv class=\"box\">`",[324,52657,874],{"class":867},[324,52659,52660],{"class":326,"line":10641},[324,52661,488],{"emptyLinePlaceholder":487},[324,52663,52664],{"class":326,"line":10649},[324,52665,52666],{"class":772},"        \u002F\u002F 盒子中间 利用循环的形式  跟数组有关系\n",[324,52668,52669,52671,52673,52675,52677,52679,52681,52683,52685,52688,52691,52693,52695],{"class":326,"line":10654},[324,52670,4132],{"class":863},[324,52672,2389],{"class":867},[324,52674,52569],{"class":863},[324,52676,10167],{"class":867},[324,52678,913],{"class":863},[324,52680,4822],{"class":916},[324,52682,10174],{"class":867},[324,52684,1774],{"class":863},[324,52686,52687],{"class":867}," arr.",[324,52689,52690],{"class":916},"length",[324,52692,3943],{"class":867},[324,52694,3022],{"class":863},[324,52696,13171],{"class":867},[324,52698,52699,52702,52704,52706],{"class":326,"line":17333},[324,52700,52701],{"class":867},"            document.",[324,52703,52650],{"class":734},[324,52705,868],{"class":867},[324,52707,52708],{"class":738},"`\n",[324,52710,52711,52714,52716,52718,52720,52722],{"class":326,"line":17339},[324,52712,52713],{"class":738},"              \u003Cdiv style=\"height: ${",[324,52715,4609],{"class":867},[324,52717,1754],{"class":738},[324,52719,1305],{"class":867},[324,52721,1804],{"class":738},[324,52723,52724],{"class":738},"}px;\">\n",[324,52726,52727,52730,52732,52734,52736,52738],{"class":326,"line":17362},[324,52728,52729],{"class":738},"                \u003Cspan>${",[324,52731,4609],{"class":867},[324,52733,1754],{"class":738},[324,52735,1305],{"class":867},[324,52737,1804],{"class":738},[324,52739,52740],{"class":738},"}\u003C\u002Fspan>\n",[324,52742,52743,52746,52748,52750,52752],{"class":326,"line":17368},[324,52744,52745],{"class":738},"                \u003Ch4>第${",[324,52747,1305],{"class":867},[324,52749,46288],{"class":863},[324,52751,25842],{"class":916},[324,52753,52754],{"class":738},"}季度\u003C\u002Fh4>\n",[324,52756,52757],{"class":326,"line":17391},[324,52758,52759],{"class":738},"              \u003C\u002Fdiv>          \n",[324,52761,52762,52765],{"class":326,"line":17405},[324,52763,52764],{"class":738},"            `",[324,52766,874],{"class":867},[324,52768,52769],{"class":326,"line":17425},[324,52770,3258],{"class":867},[324,52772,52773],{"class":326,"line":17431},[324,52774,52775],{"class":772},"        \u002F\u002F 盒子结尾\n",[324,52777,52778,52780,52782,52784,52787],{"class":326,"line":17442},[324,52779,52647],{"class":867},[324,52781,52650],{"class":734},[324,52783,868],{"class":867},[324,52785,52786],{"class":738},"` \u003C\u002Fdiv>`",[324,52788,874],{"class":867},[324,52790,52791,52793,52795],{"class":326,"line":17465},[324,52792,52498],{"class":867},[324,52794,52535],{"class":52022},[324,52796,52029],{"class":867},[324,52798,52799,52801,52803],{"class":326,"line":17487},[324,52800,52507],{"class":867},[324,52802,52522],{"class":52022},[324,52804,52029],{"class":867},[324,52806,52807],{"class":326,"line":17492},[324,52808,488],{"emptyLinePlaceholder":487},[324,52810,52811,52813,52815],{"class":326,"line":17498},[324,52812,52507],{"class":867},[324,52814,51357],{"class":52022},[324,52816,52029],{"class":867},[35,52818,52820],{"id":52819},"_284-冒泡排序","2.8.4 冒泡排序",[316,52822,52824],{"className":51355,"code":52823,"language":51357,"meta":50,"style":50},"\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",[269,52825,52826,52836,52850,52854,52862,52877,52897,52909,52917,52921,52929,52937,52969,53002,53039,53044,53063,53068,53081,53096,53112,53116,53121,53125,53135,53144,53152,53156],{"__ignoreMap":50},[324,52827,52828,52830,52832,52834],{"class":326,"line":327},[324,52829,52019],{"class":867},[324,52831,52023],{"class":52022},[324,52833,52026],{"class":734},[324,52835,52029],{"class":867},[324,52837,52838,52840,52842,52844,52846,52848],{"class":326,"line":203},[324,52839,1774],{"class":867},[324,52841,51357],{"class":52022},[324,52843,52038],{"class":734},[324,52845,913],{"class":867},[324,52847,52043],{"class":738},[324,52849,52029],{"class":867},[324,52851,52852],{"class":326,"line":338},[324,52853,488],{"emptyLinePlaceholder":487},[324,52855,52856,52858,52860],{"class":326,"line":344},[324,52857,1774],{"class":867},[324,52859,52056],{"class":52022},[324,52861,52029],{"class":867},[324,52863,52864,52867,52869,52871,52873,52875],{"class":326,"line":484},[324,52865,52866],{"class":867},"  \u003C",[324,52868,52066],{"class":52022},[324,52870,52069],{"class":734},[324,52872,913],{"class":867},[324,52874,52074],{"class":738},[324,52876,52029],{"class":867},[324,52878,52879,52881,52883,52885,52887,52889,52891,52893,52895],{"class":326,"line":491},[324,52880,52866],{"class":867},[324,52882,52066],{"class":52022},[324,52884,15649],{"class":734},[324,52886,913],{"class":867},[324,52888,52113],{"class":738},[324,52890,52093],{"class":734},[324,52892,913],{"class":867},[324,52894,52120],{"class":738},[324,52896,52029],{"class":867},[324,52898,52899,52901,52903,52905,52907],{"class":326,"line":496},[324,52900,52866],{"class":867},[324,52902,52129],{"class":52022},[324,52904,52132],{"class":867},[324,52906,52129],{"class":52022},[324,52908,52029],{"class":867},[324,52910,52911,52913,52915],{"class":326,"line":502},[324,52912,52507],{"class":867},[324,52914,52056],{"class":52022},[324,52916,52029],{"class":867},[324,52918,52919],{"class":326,"line":508},[324,52920,488],{"emptyLinePlaceholder":487},[324,52922,52923,52925,52927],{"class":326,"line":514},[324,52924,1774],{"class":867},[324,52926,52522],{"class":52022},[324,52928,52029],{"class":867},[324,52930,52931,52933,52935],{"class":326,"line":2343},[324,52932,52866],{"class":867},[324,52934,52535],{"class":52022},[324,52936,52029],{"class":867},[324,52938,52939,52942,52944,52946,52949,52951,52953,52955,52957,52959,52961,52963,52965,52967],{"class":326,"line":2348},[324,52940,52941],{"class":863},"    let",[324,52943,52555],{"class":867},[324,52945,913],{"class":863},[324,52947,52948],{"class":867}," [",[324,52950,1183],{"class":916},[324,52952,13164],{"class":867},[324,52954,1157],{"class":916},[324,52956,13164],{"class":867},[324,52958,938],{"class":916},[324,52960,13164],{"class":867},[324,52962,944],{"class":916},[324,52964,13164],{"class":867},[324,52966,1082],{"class":916},[324,52968,33968],{"class":867},[324,52970,52971,52973,52975,52977,52979,52981,52983,52985,52987,52989,52991,52994,52996,52998,53000],{"class":326,"line":2354},[324,52972,3930],{"class":863},[324,52974,2389],{"class":867},[324,52976,52569],{"class":863},[324,52978,10167],{"class":867},[324,52980,913],{"class":863},[324,52982,4822],{"class":916},[324,52984,10174],{"class":867},[324,52986,1774],{"class":863},[324,52988,52687],{"class":867},[324,52990,52690],{"class":916},[324,52992,52993],{"class":863}," -",[324,52995,25842],{"class":916},[324,52997,3943],{"class":867},[324,52999,3022],{"class":863},[324,53001,13171],{"class":867},[324,53003,53004,53007,53009,53011,53013,53015,53017,53019,53021,53023,53025,53027,53029,53031,53033,53035,53037],{"class":326,"line":2359},[324,53005,53006],{"class":863},"      for",[324,53008,2389],{"class":867},[324,53010,52569],{"class":863},[324,53012,10229],{"class":867},[324,53014,913],{"class":863},[324,53016,4822],{"class":916},[324,53018,10236],{"class":867},[324,53020,1774],{"class":863},[324,53022,52687],{"class":867},[324,53024,52690],{"class":916},[324,53026,52993],{"class":863},[324,53028,10167],{"class":867},[324,53030,1396],{"class":863},[324,53032,25842],{"class":916},[324,53034,10243],{"class":867},[324,53036,3022],{"class":863},[324,53038,13171],{"class":867},[324,53040,53041],{"class":326,"line":2373},[324,53042,53043],{"class":772},"        \u002F\u002F 开始交换,但是前提 第一个数大于第二个数才会进行交换\n",[324,53045,53046,53048,53051,53053,53056,53058,53060],{"class":326,"line":2378},[324,53047,3226],{"class":863},[324,53049,53050],{"class":867}," (arr[j] ",[324,53052,1824],{"class":863},[324,53054,53055],{"class":867}," arr[j ",[324,53057,1345],{"class":863},[324,53059,25842],{"class":916},[324,53061,53062],{"class":867},"]) {\n",[324,53064,53065],{"class":326,"line":2384},[324,53066,53067],{"class":772},"          \u002F\u002F 交换两个变量\n",[324,53069,53070,53073,53076,53078],{"class":326,"line":2405},[324,53071,53072],{"class":863},"          let",[324,53074,53075],{"class":867}," tmp ",[324,53077,913],{"class":863},[324,53079,53080],{"class":867}," arr[j]\n",[324,53082,53083,53086,53088,53090,53092,53094],{"class":326,"line":2410},[324,53084,53085],{"class":867},"          arr[j] ",[324,53087,913],{"class":863},[324,53089,53055],{"class":867},[324,53091,1345],{"class":863},[324,53093,25842],{"class":916},[324,53095,33968],{"class":867},[324,53097,53098,53101,53103,53105,53107,53109],{"class":326,"line":2424},[324,53099,53100],{"class":867},"          arr[j ",[324,53102,1345],{"class":863},[324,53104,25842],{"class":916},[324,53106,5172],{"class":867},[324,53108,913],{"class":863},[324,53110,53111],{"class":867}," tmp\n",[324,53113,53114],{"class":326,"line":2429},[324,53115,3258],{"class":867},[324,53117,53118],{"class":326,"line":2458},[324,53119,53120],{"class":867},"      }\n",[324,53122,53123],{"class":326,"line":2463},[324,53124,2917],{"class":867},[324,53126,53127,53130,53132],{"class":326,"line":2480},[324,53128,53129],{"class":867},"    document.",[324,53131,52650],{"class":734},[324,53133,53134],{"class":867},"(arr)\n",[324,53136,53137,53140,53142],{"class":326,"line":2485},[324,53138,53139],{"class":867},"  \u003C\u002F",[324,53141,52535],{"class":52022},[324,53143,52029],{"class":867},[324,53145,53146,53148,53150],{"class":326,"line":2490},[324,53147,52507],{"class":867},[324,53149,52522],{"class":52022},[324,53151,52029],{"class":867},[324,53153,53154],{"class":326,"line":2495},[324,53155,488],{"emptyLinePlaceholder":487},[324,53157,53158,53160,53162],{"class":326,"line":2509},[324,53159,52507],{"class":867},[324,53161,51357],{"class":52022},[324,53163,52029],{"class":867},[19,53165,53166],{},[48,53167],{"alt":50,"src":53168},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-055.png",[19,53170,53171],{},"实际开发中我们使用的是函数：sort()，默认按照升序",[19,53173,53174],{},"let arr = [4, 2, 5, 1, 3]",[19,53176,53177],{},"\u002F\u002F 1.升序排列写法",[19,53179,53180],{},"arr.sort(function (a, b) {",[19,53182,53183],{},"return a - b",[19,53185,53186],{},"})",[19,53188,53189],{},"console.log(arr) \u002F\u002F [1, 2, 3, 4, 5]",[19,53191,53192],{},"\u002F\u002F 降序排列写法",[19,53194,53180],{},[19,53196,53197],{},"return b - a",[19,53199,53186],{},[19,53201,53202],{},"console.log(arr) \u002F\u002F [5, 4, 3, 2, 1]",[14,53204,53206],{"id":53205},"_29-函数","2.9 函数",[19,53208,53209],{},[48,53210],{"alt":50,"src":53211},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-056.png",[19,53213,53214],{},"（）是调用的意思，为了区分哪个函数，所以前边加上函数名，因此函数的调用：函数名()",[19,53216,53217],{},"函数的声明用function",[19,53219,53220],{},"函数里边可以嵌套函数",[35,53222,53224],{"id":53223},"_291-函数传参","2.9.1 函数传参",[19,53226,53227],{},[48,53228],{"alt":50,"src":53229},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-057.png",[19,53231,53232],{},[48,53233],{"alt":50,"src":53234},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-058.png",[1871,53236,53237,53240,53243,53246,53249,53252],{},[195,53238,53239],{},"形参：声明函数时写在函数名右边小括号里的叫形参（形式上的参数）",[195,53241,53242],{},"实参：调用函数时写在函数名右边小括号里的叫实参（实际上的参数）",[195,53244,53245],{},"形参可以理解为是在这个函数内声明的变量（比如 num1 = 10）实参可以理解为是给这个变量赋值",[195,53247,53248],{},"开发中尽量保持形参和实参个数一致",[195,53250,53251],{},"我们曾经使用过的 alert('打印'), parseInt('11'), Number('11') 本质上都是函数调用的传参",[195,53253,53254],{},"形参只在函数中有用，所以不需要进行声明这个变量",[19,53256,53257],{},"可以给形参初始值，此时函数调用的时候，不放实参这个函数也可以使用，不会报错；默认值只会在缺少实参参数传递时 才会被执行，所以有参数会优先执行传递过来的实参, 否则默认为undefined",[35,53259,53261],{"id":53260},"_292-函数的返回值","2.9.2 函数的返回值",[19,53263,53264],{},[48,53265],{"alt":50,"src":53266},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-059.png",[19,53268,53269],{},[48,53270],{"alt":50,"src":53271},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-060.png",[1871,53273,53274,53277,53280,53283,53286],{},[195,53275,53276],{},"在函数体中使用 return 关键字能将内部的执行结果交给函数外部使用",[195,53278,53279],{},"return 后面代码不会再被执行，会立即结束当前函数，所以 return 后面的数据不要换行写，return要写在函数的最下边",[195,53281,53282],{},"return函数可以没有 return，这种情况函数默认返回值为 undefined",[195,53284,53285],{},"返回多个值时使用数组，让它返回数组，就能将多个值返回",[195,53287,53288],{},"断点调试:进入函数内部看执行过程F11",[35,53290,53292],{"id":53291},"_293-参数个数不同情况","2.9.3 参数个数不同情况",[316,53294,53296],{"className":51355,"code":53295,"language":51357,"meta":50,"style":50},"    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",[269,53297,53298,53303,53308,53312,53317],{"__ignoreMap":50},[324,53299,53300],{"class":326,"line":327},[324,53301,53302],{"class":867},"    function fn(a, b) {\n",[324,53304,53305],{"class":326,"line":203},[324,53306,53307],{"class":867},"      console.log(a + b);\n",[324,53309,53310],{"class":326,"line":338},[324,53311,2917],{"class":867},[324,53313,53314],{"class":326,"line":344},[324,53315,53316],{"class":867},"    fn(1, 2, 3)输出3，最后一个参数没人接，不要\n",[324,53318,53319],{"class":326,"line":484},[324,53320,53321],{"class":867},"    fn(1)输出NaN，第二个值undefined,1+undefined=NaN,计算错误\n",[35,53323,53325],{"id":53324},"_294-作用域","2.9.4 作用域",[1871,53327,53328,53334,53339,53342,53345],{},[195,53329,53330,53331],{},"一段程序代码中所用到的名字并不总是有效和可用的，而限定这个名字的可用性的代码范围就是这个名字的 ",[116,53332,53333],{},"作用域",[195,53335,53336],{},[116,53337,53338],{},"作用域的使用提高了程序逻辑的局部性，增强了程序的可靠性，减少了名字冲突",[195,53340,53341],{},"分为全局作用域和局部作用域；全局作用域的变量叫作全局变量，局部作用域的变量叫作局部变量，也称为函数作用域，函数内部有效",[195,53343,53344],{},"函数内部可以直接所使用全局变量",[195,53346,53347],{},"如果函数内部，变量没有声明，直接赋值，也当全局变量看，但是强烈不推荐，但是需要先调用函数才可以输出函数内部的变量",[19,53349,15362],{},[316,53351,53353],{"className":51355,"code":53352,"language":51357,"meta":50,"style":50},"    function fun() {\n      num = 10\n    }\n    fun()\n    console.log(num)\n   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[269,53354,53355,53360,53365,53369,53374,53379,53384],{"__ignoreMap":50},[324,53356,53357],{"class":326,"line":327},[324,53358,53359],{"class":867},"    function fun() {\n",[324,53361,53362],{"class":326,"line":203},[324,53363,53364],{"class":867},"      num = 10\n",[324,53366,53367],{"class":326,"line":338},[324,53368,2917],{"class":867},[324,53370,53371],{"class":326,"line":344},[324,53372,53373],{"class":867},"    fun()\n",[324,53375,53376],{"class":326,"line":484},[324,53377,53378],{"class":867},"    console.log(num)\n",[324,53380,53381],{"class":326,"line":491},[324,53382,53383],{"class":867},"   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n",[324,53385,53386],{"class":326,"line":496},[324,53387,53388],{"class":867},"   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[1871,53390,53391,53394],{},[195,53392,53393],{},"函数内部的形参可以看做是局部变量",[195,53395,53396],{},"不同作用域变量可以重名；相同作用域变量不可以重名",[19,53398,53399,53400],{},"变量访问原则： ",[116,53401,53402],{},"在能够访问到的情况下 先局部， 局部没有在找全局",[35,53404,53406],{"id":53405},"_295-匿名函数","2.9.5 匿名函数",[19,53408,53409],{},"函数可以分为具名函数和匿名函数",[19,53411,53412],{},"匿名函数是指没有名字的函数，它是无法直接使用的，使用的两种方式：",[192,53414,53415],{},[195,53416,53417],{},"函数表达式",[19,53419,53420],{},[48,53421],{"alt":50,"src":53422},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-061.png",[19,53424,53425],{},"里边也可以写参数",[19,53427,53428],{},"具名函数调用位置可以随意调整；",[19,53430,53431],{},"匿名函数函数表达式形式只能在声明后才可以使用",[192,53433,53434],{"start":203},[195,53435,53436],{},"立即执行函数",[19,53438,53439],{},[48,53440],{"alt":50,"src":53441},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-062.png",[19,53443,53444],{},"直接执行函数，不需要再调用！！！本质它已经调用了",[19,53446,53447],{},"写法：两个小括号，然后在第一个小括号中写function",[19,53449,53450],{},"(function () {})();",[19,53452,53453],{},"不要落下最后的;",[19,53455,53456],{},"立即执行函数必须要加;",[19,53458,53459],{},"分号写前写后都没问题",[19,53461,53462],{},"写前：",[19,53464,53465],{},"(function() {})()",[19,53467,53468],{},";(function () {})();",[19,53470,53471],{},"写后:",[19,53473,53474],{},"(function() {})();",[19,53476,53450],{},[19,53478,53479],{},"可以这样理解：最后一个小括号实质是调用前边的函数，为了保证前边的函数正常进行又给其套了一层括号，最后括号里边的数为实参，function后面的参数为形参",[19,53481,53482],{},"还有一种写法：",[19,53484,53485],{},"(function(){}());",[19,53487,53488],{},"或者:",[19,53490,53491],{},"!function(){}();",[19,53493,53494],{},"立即执行函数有时候也是可以加名字的：",[19,53496,53497],{},"(function flexible(window,document) {}(window,document));",[19,53499,53500],{},"省一些调用方法",[35,53502,53504],{"id":53503},"_296-逻辑中断","2.9.6 逻辑中断!!!",[19,53506,53507],{},[48,53508],{"alt":50,"src":53509},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-063.png",[19,53511,53512],{},"这样就不用非得给x,y初始化了",[19,53514,53515],{},[48,53516],{"alt":50,"src":53517},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-064.png",[19,53519,53520],{},"代码执行时先看左边",[19,53522,53523],{},"例如：console.log(false && 3+5)",[19,53525,53526],{},"&&逻辑与遇假则假，当执行左边为假时就不执行右边了，所以输出false",[19,53528,53529],{},"&&都是真时，就返回最后一个真值",[19,53531,53532],{},"console.log(11 && 22)",[19,53534,53535],{},"输出22",[19,53537,53538],{},"逻辑与：遇真则真",[19,53540,15362],{},[19,53542,53543],{},"let age=1",[19,53545,53546],{},"console.log(11 || age++)",[19,53548,53549],{},"不执行后边的age++，先执行左边11为真，就是真，就直接结束语句了，输出11",[19,53551,53552],{},"console.log(11 || 22)",[19,53554,53555],{},"||逻辑或遇到真就直接输出，输出结果为11",[19,53557,53558],{},"||如果都是假的话，就取最后一个假的值了",[35,53560,53562],{"id":53561},"_297-转换为boolean型","2.9.7 转换为Boolean型",[19,53564,53565],{},"显示转换：",[19,53567,53568,53571,53572],{},[116,53569,53570],{},"记忆","： ",[116,53573,53574],{},"‘’ 、0、undefined、null、false、NaN 转换为布尔值后都是false, 其余则为 true",[19,53576,53577],{},"空字符串为假，其他字符串全为真",[19,53579,53580],{},[48,53581],{"alt":50,"src":53582},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-065.png",[19,53584,53585],{},"隐式转换：",[19,53587,53588],{},[48,53589],{"alt":50,"src":53590},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-066.png",[19,53592,53593],{},"隐式转换:",[19,53595,53596],{},"null+3=3",[19,53598,53599],{},"undefined+3=NaN",[19,53601,53602],{},"null==undefined 输出true,他两个都当0看",[19,53604,53605],{},"null===undefined 输出false",[19,53607,53608],{},"undefined做任何操作都是NaN",[19,53610,53611],{},"NaN不等于NaN，NaN表示计算错误",[14,53613,53615],{"id":53614},"_210-对象","2.10 对象",[35,53617,53619],{"id":53618},"_2101-对象的介绍","2.10.1 对象的介绍",[19,53621,53622],{},"对象也是一种数据类型，里边的数据是无序的",[19,53624,53625],{},"对象由属性和方法组成",[19,53627,53628],{},[48,53629],{"alt":50,"src":53630},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-067.png",[19,53632,53633],{},[48,53634],{"alt":50,"src":53635},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-068.png",[19,53637,53638],{},[48,53639],{"alt":50,"src":53640},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-069.png",[35,53642,53644],{"id":53643},"_2102-对象属性","2.10.2 对象属性",[19,53646,53647],{},[48,53648],{"alt":50,"src":53649},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-070.png",[192,53651,53652],{},[195,53653,53654],{},"查询对象",[19,53656,53657],{},"对象名.属性 goods.uname",[19,53659,53660],{},"属性名中带有字符串时采用：对象名['属性名'] goods['uname']",[19,53662,53663],{},"不带字符串的属性名也可以使用 对象名['属性名']",[19,53665,53666],{},"[]语法里面的值如果不添加引号 默认会当成变量解析",[19,53668,53669],{},"总结：点后面的属性名一定不要加引号；[] 里面的属性名一定加引号(单引双引都🆗)",[192,53671,53672],{"start":203},[195,53673,53674],{},"重新赋值",[19,53676,53677],{},"对象名.属性=新值",[192,53679,53680],{"start":338},[195,53681,53682],{},"增加新数据",[19,53684,53677],{},[192,53686,53687],{"start":344},[195,53688,53689],{},"删除对象中的属性",[19,53691,53692],{},"delete 对象名.属性",[35,53694,53696],{"id":53695},"_2103-对象方法","2.10.3 对象方法",[19,53698,53699],{},[48,53700],{"alt":50,"src":53701},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-071.png",[19,53703,53704],{},"后边跟的是匿名函数",[19,53706,53707],{},"对象外面的叫函数；对象内部的叫方法",[19,53709,53710],{},[48,53711],{"alt":50,"src":53712},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-072.png",[35,53714,53716],{"id":53715},"_2104-遍历对象","2.10.4 遍历对象",[19,53718,53719],{},"理解为加括号的python字典遍历",[19,53721,53722],{},[48,53723],{"alt":50,"src":53724},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-073.png",[19,53726,53727],{},"k是字符串类型",[19,53729,53730],{},"用for in可以实现对数组的遍历工作，但是k为字符串，我们在遍历的时候需要用到数组的下标，下表是数组字面量，不应该为字符串，所以我们不要使用for in来遍历字典，正常for循环遍历就可以",[316,53732,53734],{"className":51355,"code":53733,"language":51357,"meta":50,"style":50},"   let arr = [1, 2, 3]\n    for (let k in arr) {\n      console.log(k)\n      console.log(arr[k])\n    }\n",[269,53735,53736,53741,53746,53751,53756],{"__ignoreMap":50},[324,53737,53738],{"class":326,"line":327},[324,53739,53740],{"class":867},"   let arr = [1, 2, 3]\n",[324,53742,53743],{"class":326,"line":203},[324,53744,53745],{"class":867},"    for (let k in arr) {\n",[324,53747,53748],{"class":326,"line":338},[324,53749,53750],{"class":867},"      console.log(k)\n",[324,53752,53753],{"class":326,"line":344},[324,53754,53755],{"class":867},"      console.log(arr[k])\n",[324,53757,53758],{"class":326,"line":484},[324,53759,2917],{"class":867},[19,53761,53762],{},[48,53763],{"alt":50,"src":53764},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-074.png",[19,53766,53767],{},"数字型控制台输出颜色偏蓝，字符串型控制台打印是黑色的",[19,53769,53770],{},"for in 用来遍历对象 k这个写啥也行，习惯使用key或k",[19,53772,53773],{},"for in 得到的k是属性名",[52535,53775,53776],{},"\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",[19,53778,53779],{},"k是字符串，不可以进行pink.k，这是不对的，k是带引号的属性名，点k的话，对象中就没有这个属性名了，所以得到的是undefined，无法准确遍历",[35,53781,53783],{"id":53782},"_2105-遍历数组对象","2.10.5 遍历数组对象、",[19,53785,53786],{},"数组中放对象信息",[316,53788,53792],{"className":53789,"code":53790,"language":53791,"meta":50,"style":50},"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",[269,53793,53794,53802,53807,53812,53817,53822,53827,53832,53837,53842,53847,53852,53857,53861,53865],{"__ignoreMap":50},[324,53795,53796,53798,53800],{"class":326,"line":327},[324,53797,1774],{"class":867},[324,53799,52535],{"class":52022},[324,53801,52029],{"class":867},[324,53803,53804],{"class":326,"line":203},[324,53805,53806],{"class":867},"    let students = [\n",[324,53808,53809],{"class":326,"line":338},[324,53810,53811],{"class":867},"      { name: '小明', age: 18, gender: '男', hometown: '河北省' },\n",[324,53813,53814],{"class":326,"line":344},[324,53815,53816],{"class":867},"      { name: '小红', age: 19, gender: '女', hometown: '河南省' },\n",[324,53818,53819],{"class":326,"line":484},[324,53820,53821],{"class":867},"      { name: '小刚', age: 17, gender: '男', hometown: '山西省' },\n",[324,53823,53824],{"class":326,"line":491},[324,53825,53826],{"class":867},"      { name: '小丽', age: 18, gender: '女', hometown: '山东省' }\n",[324,53828,53829],{"class":326,"line":496},[324,53830,53831],{"class":867},"    ]\n",[324,53833,53834],{"class":326,"line":502},[324,53835,53836],{"class":867},"    for (let i = 0; i \u003C students.length; i++) {\n",[324,53838,53839],{"class":326,"line":508},[324,53840,53841],{"class":867},"      for (let k in students[i]) {\n",[324,53843,53844],{"class":326,"line":514},[324,53845,53846],{"class":867},"        console.log(`输出第${i + 1}个同学的${k}:${students[i][k]}`)\n",[324,53848,53849],{"class":326,"line":2343},[324,53850,53851],{"class":867},"        \u002F\u002F输出每个人的名字：\n",[324,53853,53854],{"class":326,"line":2348},[324,53855,53856],{"class":867},"        \u002F\u002Fconsole.log(students[i].name)\n",[324,53858,53859],{"class":326,"line":2354},[324,53860,53120],{"class":867},[324,53862,53863],{"class":326,"line":2359},[324,53864,2917],{"class":867},[324,53866,53867,53869,53871],{"class":326,"line":2373},[324,53868,53139],{"class":867},[324,53870,52535],{"class":52022},[324,53872,52029],{"class":867},[35,53874,53876],{"id":53875},"_2106-内置对象","2.10.6 内置对象",[19,53878,53879],{},"JavaScript内部提供的对象，包含各种属性和方法给开发者调用，例如document.write()",[192,53881,53882],{},[195,53883,53884],{},"数学对象Math",[19,53886,53887],{},[48,53888],{"alt":50,"src":53889},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-075.png",[19,53891,53892],{},[25,53893,53896],{"href":53894,"rel":53895},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FMath",[29],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FMath",[19,53898,53899],{},"联想：parseInt转换为整数型，与floor相似，输入小数的数字，只取最小值",[19,53901,53902],{},"两者区别是parseInt可以传入字符串，会去掉后边的字符串，只留前边的数字",[19,53904,53905],{},"数组不可以使用Math中的max,min来求最大值与最小值",[19,53907,53908],{},"null是一个空对象，可以认为：null类似于let obj={}",[19,53910,53911],{},"null属于对象数据类型",[192,53913,53914],{"start":203},[195,53915,53916],{},"生成任意范围随机数",[19,53918,53919],{},[48,53920],{"alt":50,"src":53921},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-076.png",[19,53923,53924],{},"这里加1是想取到右边的部分，因为它是左闭右开，第一个是[0,11），永远取不到11",[19,53926,53927],{},"乘以几就取不到几",[19,53929,53930],{},"取数组中的随机元素：",[19,53932,53933],{},"let arr = ['red', 'green', 'blue']",[19,53935,53936],{},"let random = Math.floor(Math.random() * arr.length)",[19,53938,53939],{},"console.log(arr[random])",[19,53941,53942],{},"这个函数得到的是全闭区间",[19,53944,53945],{},"function getRandom(N, M) {",[19,53947,53948],{},"return Math.floor(Math.random() * (M - N + 1)) + N",[19,53950,1810],{},[19,53952,53953],{},"console.log(getRandom(4, 8))",[35,53955,53957],{"id":53956},"_2107-基本数据类型和引用数据类型","2.10.7 基本数据类型和引用数据类型",[19,53959,53960],{},[48,53961],{"alt":50,"src":53962},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-077.png",[19,53964,53965],{},[48,53966],{"alt":50,"src":53967},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-078.png",[19,53969,53970],{},[48,53971],{"alt":50,"src":53972},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-079.png",[19,53974,53975],{},"简单数据类型是直接把值放在了栈中，复杂数据类型是将值的地址放在栈中，值放在堆中，通过地址得到存放的内容",[19,53977,53978],{},[48,53979],{"alt":50,"src":53980},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-080.png",[19,53982,53983],{},[48,53984],{"alt":50,"src":53985},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-081.png",[19,53987,53988],{},"所有复杂数据类型都存放在堆中，将它内容的地址存放在栈中",[19,53990,53991],{},"简单数据类型是深拷贝，复杂数据类型是浅拷贝",[19,53993,53994],{},"js实际是没有堆栈的，这里是为了方便理解，在ts中有堆栈，ts与js百分之80是相同的",[775,53996,53997],{},"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":50,"searchDepth":203,"depth":203,"links":53999},[54000,54008,54009,54010,54011,54012,54019,54023,54029,54038],{"id":51190,"depth":203,"text":51191,"children":54001},[54002,54003,54004,54005,54006,54007],{"id":51194,"depth":338,"text":51195},{"id":51211,"depth":338,"text":51212},{"id":51251,"depth":338,"text":51252},{"id":51263,"depth":338,"text":51264},{"id":51272,"depth":338,"text":51273},{"id":51320,"depth":338,"text":51321},{"id":51330,"depth":203,"text":51331},{"id":51418,"depth":203,"text":51419},{"id":51441,"depth":203,"text":51442},{"id":51453,"depth":203,"text":51454},{"id":51640,"depth":203,"text":51641,"children":54013},[54014,54015,54016,54017,54018],{"id":51644,"depth":338,"text":51645},{"id":51653,"depth":338,"text":51654},{"id":51681,"depth":338,"text":51682},{"id":51717,"depth":338,"text":51718},{"id":51742,"depth":338,"text":51743},{"id":51754,"depth":203,"text":51755,"children":54020},[54021,54022],{"id":51775,"depth":338,"text":51776},{"id":51869,"depth":338,"text":51870},{"id":51927,"depth":203,"text":51928,"children":54024},[54025,54026,54027,54028],{"id":51931,"depth":338,"text":51932},{"id":51955,"depth":338,"text":51956},{"id":52008,"depth":338,"text":52009},{"id":52819,"depth":338,"text":52820},{"id":53205,"depth":203,"text":53206,"children":54030},[54031,54032,54033,54034,54035,54036,54037],{"id":53223,"depth":338,"text":53224},{"id":53260,"depth":338,"text":53261},{"id":53291,"depth":338,"text":53292},{"id":53324,"depth":338,"text":53325},{"id":53405,"depth":338,"text":53406},{"id":53503,"depth":338,"text":53504},{"id":53561,"depth":338,"text":53562},{"id":53614,"depth":203,"text":53615,"children":54039},[54040,54041,54042,54043,54044,54045,54046],{"id":53618,"depth":338,"text":53619},{"id":53643,"depth":338,"text":53644},{"id":53695,"depth":338,"text":53696},{"id":53715,"depth":338,"text":53716},{"id":53782,"depth":338,"text":53783},{"id":53875,"depth":338,"text":53876},{"id":53956,"depth":338,"text":53957},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch2",{"title":51182,"description":791},"wiki\u002F2025-09-02-JS学习\u002Fch2-基础语法","rK6tHUmvUvisqc9Yrr_XipbUmuD7o7U3t6tcvliyB7c",{"id":54053,"title":54054,"body":54055,"description":791,"extension":792,"meta":77395,"navigation":487,"path":77396,"seo":77397,"stem":77398,"__hash__":77399},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs.md","3.Web APIs",{"type":7,"value":54056,"toc":77335},[54057,54060,54063,54066,54071,54074,54077,54080,54084,54088,54094,54099,54107,54114,54117,54121,54126,54131,54136,54139,54142,54153,54156,54160,54163,54166,54171,54176,54181,54184,54187,54279,54282,54287,54290,54295,54298,54301,54306,54309,54314,54318,54321,54335,54339,54344,54347,54350,54354,54359,54362,54366,54370,54375,54379,54384,54387,54390,54393,54396,54399,54402,54407,54412,54440,54443,54446,54449,54454,54457,54460,54463,54466,54470,54499,54503,54508,54513,54516,54519,54522,54527,54642,54647,54652,54813,54818,54821,54825,54830,54835,54838,54841,54844,54847,54850,54853,54856,54859,54862,54865,54868,54871,54874,54877,54879,54882,54885,54888,54893,54897,55294,55297,55303,55307,55312,56594,56599,56602,56605,56608,56613,57809,57813,57819,57824,57827,57832,57837,57841,57845,57850,57853,57858,57861,57864,57868,58776,58779,58783,59004,59007,59010,59013,59239,59242,59466,59469,59473,59478,59481,59484,59712,59715,59748,59751,59755,59760,59764,59767,59770,59773,59776,59779,59782,59785,59790,61070,61074,61077,62170,62174,62177,62180,62183,62186,62190,62193,62196,62198,62206,63687,63691,63694,63697,63700,63909,63912,63916,63920,63925,63930,63933,63936,63941,63945,63950,63953,64062,64066,64071,64076,64079,64082,64086,64091,64096,64101,64104,64107,64118,64121,64126,64131,64134,64137,64210,64214,64219,64222,64224,64235,64239,64244,65570,65573,65576,65579,65581,65584,65587,65590,65593,65596,65599,65602,65605,65608,65611,65614,65617,65619,65621,65624,65628,66722,66725,66728,66744,66758,66761,66766,66772,66777,66781,66785,66790,66794,66799,67241,67246,67249,67253,67258,67261,67264,67268,67273,67277,67282,67287,67291,67296,67301,67304,67309,67314,67318,67323,67328,67432,67435,67439,67444,67810,67813,67816,67819,67822,67825,67828,67831,67834,69130,69134,69139,69144,69147,69150,69153,69156,69158,69163,69168,69171,69175,69180,69185,69190,69193,69196,69199,69202,69205,69210,69213,69217,69222,69227,69231,69236,69239,69244,69247,69250,69253,69256,69259,69264,69267,69270,69273,69276,69280,69285,69288,69292,69297,69300,69303,69307,69336,69339,69343,69347,69352,69356,69361,69364,69367,69370,69373,69376,69379,69382,69385,69388,69391,69394,69397,69400,69403,69407,69412,69417,69420,69424,69428,69433,69436,69440,69443,69446,69451,69456,69461,69466,69471,69474,69477,69482,69487,69491,69496,69499,69504,69507,69510,69513,69516,69521,69524,69533,69537,69542,69545,69548,69552,69555,69560,69564,69567,69573,69579,69583,69609,69612,71173,71176,71672,71675,71680,71685,71690,71694,71699,71704,71709,71713,71718,71721,71724,71727,71730,71734,71737,71742,71745,71750,71754,71759,71762,71767,71772,71777,71780,71783,71788,71793,71796,71799,71803,71806,71811,71814,71819,71822,71827,71832,71837,71840,71845,71910,71913,71924,71928,71933,72105,72109,72114,72117,72120,72123,72127,72138,72142,72145,72150,72155,72158,72161,72164,72167,72170,72172,72175,72178,72181,72186,72189,72194,72197,72201,72204,72207,72221,72225,72228,72283,72288,72291,72294,72299,72302,72306,72311,72441,72445,72450,72455,72536,72541,72545,72548,72553,72558,72564,72567,72570,72573,72577,72582,72585,72596,72600,72617,75664,75668,75671,75674,75677,75698,75702,75705,75713,75716,75721,75724,75727,75732,75737,75741,75762,75766,75771,75774,75777,75780,75783,75787,75792,75795,75799,75804,75807,75812,75815,75820,75823,75828,77031,77035,77040,77043,77048,77332],[10,54058,54054],{"id":54059},"_3web-apis",[19,54061,54062],{},"尽量使用const，因为绝大多数定义的变量基本上它的值都不会再改变",[19,54064,54065],{},"实际开发中的思路：有了变量先给const，如果发现它后面是要被修改的，再改为let",[19,54067,54068],{},[48,54069],{"alt":50,"src":54070},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-082.png",[19,54072,54073],{},"此时arr.push(3),给数组添加新的元素，这个元素加添加到堆中了，地址还是那个地址，因此这里的使用const来声明是没有问题的。如果此时接着写arr=[4,5,6]，此时这个就是一个新的数组，存到堆中的位置与之前那个是不同的，在栈中存了新地址，所以此时就会报错，就是不对的，如果想这样干，只能使用let来声明变量。const声明的是常量",[19,54075,54076],{},"建议数组和对象使用 const 来声明",[19,54078,54079],{},"Web APIs分为DoM(页面文档对象模型)和BoM(浏览器对象模型)",[14,54081,54083],{"id":54082},"_31-dom文档对象模型","3.1 Dom(文档对象模型)",[35,54085,54087],{"id":54086},"非常重要window是整个窗口html是dom树的根节点document代表了整个html中所有内容代表整个html页面dom树","非常重要：window是整个窗口；html是DOM树的根节点；document代表了整个html中所有内容，代表整个HTML页面（DOM树）",[19,54089,54090,54093],{},[269,54091,54092],{},"document"," = HTML 文件解析后的对象化表示；",[19,54095,54096,54098],{},[269,54097,54092],{}," ≠ HTML 文件本身",[19,54100,54101,54106],{},[116,54102,54103],{},[269,54104,54105],{},"window"," = 窗口对象，代表浏览器的这个标签页\u002F容器",[19,54108,54109,54113],{},[116,54110,54111],{},[269,54112,54092],{}," ：容器里的内容，代表当前加载的网页（DOM）",[19,54115,54116],{},"document实际上为window.document的简写",[35,54118,54120],{"id":54119},"_311-关于dom的基础知识","3.1.1 关于DoM的基础知识",[19,54122,54123],{},[48,54124],{"alt":50,"src":54125},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-083.png",[19,54127,54128],{},[48,54129],{"alt":50,"src":54130},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-084.png",[19,54132,54133],{},[48,54134],{"alt":50,"src":54135},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-085.png",[19,54137,54138],{},"console.dir()",[19,54140,54141],{},"dir用来打印对象",[1871,54143,54144,54147,54150],{},[195,54145,54146],{},"任何一个标签，都是一个对象",[195,54148,54149],{},"也就是说这些标签在HTML中就是一个标签，但是在js的DoM中从HTML获取过来就是对象，叫作DoM对象",[195,54151,54152],{},"在DoM中最大的对象是document对象，它提供的方法是用来访问和操作网页内容的，document是整个网页中最大的对象，它存放了页面的所有元素！",[19,54154,54155],{},"DoM对象可以理解为就是标签元素，在html中就是标签，修饰的时候使用的是css，在js中就是对象，通过对对象的属性进行修改来实现对标签的修饰",[35,54157,54159],{"id":54158},"_312-获取dom对象","3.1.2 获取DoM对象",[19,54161,54162],{},"css是通过选择器的方式来获取标签，对标签的样式进行修饰的",[19,54164,54165],{},"获取DoM元素现在主要是通过css选择器的方式来获取，必须牢记这一方法！！！",[19,54167,54168],{},[116,54169,54170],{},"查找元素DOM元素就是利用 JS 选择页面中标签元素",[192,54172,54173],{},[195,54174,54175],{},"利用CSS选择器来获取标签元素",[19,54177,54178],{},[48,54179],{"alt":50,"src":54180},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-086.png",[19,54182,54183],{},"里边的选择器必须必须加引号！！！",[19,54185,54186],{},"只选择第一个元素",[316,54188,54190],{"className":53789,"code":54189,"language":53791,"meta":50,"style":50},"\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",[269,54191,54192,54200,54221,54240,54248,54253,54258,54263,54271],{"__ignoreMap":50},[324,54193,54194,54196,54198],{"class":326,"line":327},[324,54195,1774],{"class":867},[324,54197,52522],{"class":52022},[324,54199,52029],{"class":867},[324,54201,54202,54204,54206,54209,54211,54214,54217,54219],{"class":326,"line":203},[324,54203,52866],{"class":867},[324,54205,52333],{"class":52022},[324,54207,54208],{"class":734}," class",[324,54210,913],{"class":867},[324,54212,54213],{"class":738},"\"box\"",[324,54215,54216],{"class":867},">123\u003C\u002F",[324,54218,52333],{"class":52022},[324,54220,52029],{"class":867},[324,54222,54223,54225,54227,54229,54231,54233,54236,54238],{"class":326,"line":338},[324,54224,52866],{"class":867},[324,54226,52333],{"class":52022},[324,54228,54208],{"class":734},[324,54230,913],{"class":867},[324,54232,54213],{"class":738},[324,54234,54235],{"class":867},">456\u003C\u002F",[324,54237,52333],{"class":52022},[324,54239,52029],{"class":867},[324,54241,54242,54244,54246],{"class":326,"line":344},[324,54243,52866],{"class":867},[324,54245,52535],{"class":52022},[324,54247,52029],{"class":867},[324,54249,54250],{"class":326,"line":484},[324,54251,54252],{"class":867},"    \u002F\u002F 1.获取匹配的第一个元素\n",[324,54254,54255],{"class":326,"line":491},[324,54256,54257],{"class":867},"    const box = document.querySelector('div')\n",[324,54259,54260],{"class":326,"line":496},[324,54261,54262],{"class":867},"    console.dir(box)\n",[324,54264,54265,54267,54269],{"class":326,"line":502},[324,54266,53139],{"class":867},[324,54268,52535],{"class":52022},[324,54270,52029],{"class":867},[324,54272,54273,54275,54277],{"class":326,"line":508},[324,54274,52507],{"class":867},[324,54276,52522],{"class":52022},[324,54278,52029],{"class":867},[19,54280,54281],{},"只选123，不选456",[19,54283,54284],{},[48,54285],{"alt":50,"src":54286},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-087.png",[19,54288,54289],{},"返回的是一个数组的集合，不能对其进行直接修改",[19,54291,54292],{},[48,54293],{"alt":50,"src":54294},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-088.png",[19,54296,54297],{},"单个标签也可以使用querySelectAll()来获取，直接通过索引号就可以使用这个元素",[19,54299,54300],{},"querySelect()的调用对象是它的父亲，并不一定用document来进行调用",[192,54302,54303],{"start":203},[195,54304,54305],{},"其他方法来获取标签元素",[19,54307,54308],{},"不要使用，还是使用css法获取DoM的元素的方法就行，下面的方法认识就ok",[19,54310,54311],{},[48,54312],{"alt":50,"src":54313},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-089.png",[35,54315,54317],{"id":54316},"_313-操作元素的内容","3.1.3 操作元素的内容",[19,54319,54320],{},"设置修改DOM元素内容有两种方式：",[1871,54322,54323,54326,54329,54332],{},[195,54324,54325],{},"元素.innerText=''",[195,54327,54328],{},"元素.innerHTML=''",[195,54330,54331],{},"不写字符串输出数字也是可以的",[195,54333,54334],{},"元素.innerHtml=1",[151,54336,54338],{"id":54337},"_3131-innertext","3.1.3.1 innerText",[19,54340,54341],{},[48,54342],{"alt":50,"src":54343},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-090.png",[19,54345,54346],{},"思路：实现了修改盒子中的内容！",[19,54348,54349],{},"它只显示纯文本，不解析标签",[151,54351,54353],{"id":54352},"_3132-innerhtml","3.1.3.2 innerHTML",[19,54355,54356],{},[48,54357],{"alt":50,"src":54358},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-091.png",[19,54360,54361],{},"相比于innerText，他的强大之处在于可以解析标签",[35,54363,54365],{"id":54364},"_314-操作元素属性","3.1.4 操作元素属性",[151,54367,54369],{"id":54368},"_3141-操作元素常用属性","3.1.4.1 操作元素常用属性",[19,54371,54372],{},[48,54373],{"alt":50,"src":54374},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-092.png",[151,54376,54378],{"id":54377},"_3142-操作元素样式属性","3.1.4.2 操作元素样式属性",[19,54380,54381],{},[48,54382],{"alt":50,"src":54383},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-093.png",[19,54385,54386],{},"后边跟的是字符串，必须加引号，然后单位也不要忘记",[19,54388,54389],{},"div.style.backgroundColor = 'hotpink'",[19,54391,54392],{},"如果按照css的写法，-表示减，就会出错",[19,54394,54395],{},"body元素不需要再获取，直接用就行！！！！！！",[19,54397,54398],{},"如果使用的是body标签，它是网页写标签部分的唯一标签，所以对body来说可以不用获取他的DOM对象，直接使用document.body.style来进行修改样式",[19,54400,54401],{},"通过该方式来修改css样式，解析之后生成的是行内样式，行内样式的权重高于内部样式，权重非常高，所以可以覆盖原有样式",[19,54403,54404],{},[48,54405],{"alt":50,"src":54406},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-094.png",[19,54408,54409],{},[48,54410],{"alt":50,"src":54411},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-095.png",[192,54413,54414,54417,54420,54423,54426,54429],{},[195,54415,54416],{},"className这个方式就是修改很多样式的时候来使用的！",[195,54418,54419],{},"常常用于一个动作特效，比如轮播图点下边按钮才动",[195,54421,54422],{},"这个只能添加类名，前边已经有classNmae，就不需要加点了，只写类名就ok!",[195,54424,54425],{},"className为属性名，如果还用class的话就导致与关键字冲突",[195,54427,54428],{},"通过操作类名来修改css时，一定要看看这个标签是否原本就有类名，如果不要之前的样式，写上div.classNmae=‘box’后会覆盖之前的nav，就是给对象中的属性改值了，就是如果要的话就写成div.className='nav box'",[195,54430,54431,54432,54437],{},"解析标签的时候就变为了",[52333,54433],{"className":54434},[54435,54436],"nav","box",[54438,54439],"br",{},[19,54441,54442],{},"例子：",[52333,54444],{"className":54445},[54435],[52535,54447,54448],{},"\n\nconst div = document.querySelector('div')\n\ndiv.className = 'box'\n\n",[19,54450,54451],{},[48,54452],{"alt":50,"src":54453},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-096.png",[19,54455,54456],{},"追加和删除类名用classList",[19,54458,54459],{},"常用于类似于开关的操作",[19,54461,54462],{},"toggle,切换一个类名意思就是：有就删掉，没有就加上（指的是盒子中是否有这个类名，不是说css中有没有这个类名，css中肯定得写类名的，不写那还要操作类控制css干嘛）",[19,54464,54465],{},"4.classList.contains()看看有没有包含某个类，如果有则返回true，没有则返回false",[151,54467,54469],{"id":54468},"_3143-牢记点","3.1.4.3 牢记点",[192,54471,54472,54475,54478,54481,54484,54487,54490,54493,54496],{},[195,54473,54474],{},"获取对象时在不忘记双引号的同时加上类选择器前的.；id选择器前的#",[195,54476,54477],{},"使用style属性操作css时不要忘记引号",[195,54479,54480],{},"使用className或者classList时也不要忘记引号",[195,54482,54483],{},"修改标签内容，也就是获取后的对象（浏览器根据html生成的js对象），通过innerText和innerHTML来实现，只不过innerText不能识别标签，innerHTML可以识别标签",[195,54485,54486],{},"获取后的标签就是一个对象，其中包含了非常多的属性值和方法，const xxx=document.querySelector('.nav')，这个xxx就是一个常量，起啥名也行，一般写成这个盒子的名或者原有类名，赋值给这个常量后，就变成对象，className等就是这个类（元素）下的方法",[195,54488,54489],{},"body就这么一个元素，所以可以对它不获取，来xiu'ga",[195,54491,54492],{},"若： let arr=['1','2',3] arr[0]=1",[195,54494,54495],{},"如果一个对象第一个属性值为‘1’，则获取该对象的属性值就是这个1",[195,54497,54498],{},"上述说明了输出对象和数组中字符串的时候是不带引号的，在修改对象属性值的时候必须加字符串必须加引号，不然中文会报错，计算机不会认为这是字符串，但是将这个字符串对应的数组加下标的方式给他，就不要加字符串了，它本身就是字符串呀这个元素",[35,54500,54502],{"id":54501},"_315-操作表单元素","3.1.5 操作表单元素",[192,54504,54505],{},[195,54506,54507],{},"天生的属性",[19,54509,54510],{},[48,54511],{"alt":50,"src":54512},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-097.png",[19,54514,54515],{},"innerHTML可以得到元素的内容 username.innerHTML,但是仅限于普通元素，表单不是通过它来进行获取的，得到表单内容用value,但是button比较特殊,它是双标签,要使用.innerHTML来获取,使用.value是无法获取的",[19,54517,54518],{},"console.log(username.innerHTML) 获取一般元素的值，对表单元素来说输出的是空，啥也没有，无法读取内容，修改内容是 username.innerHTML='修改的值'",[19,54520,54521],{},"console.log(username.value) 获取表单值 修改表单元素的值：username.value='修改的值'",[19,54523,54524],{},[48,54525],{"alt":50,"src":54526},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-098.png",[316,54528,54530],{"className":51355,"code":54529,"language":51357,"meta":50,"style":50},"在复选框中如果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",[269,54531,54532,54537,54569,54574,54579,54584,54589,54593,54598,54603,54620,54632,54637],{"__ignoreMap":50},[324,54533,54534],{"class":326,"line":327},[324,54535,54536],{"class":867},"在复选框中如果checked='checked',则可以在表单元素中只写一个checked\n",[324,54538,54539,54541,54544,54547,54549,54552,54554,54556,54558,54560,54562,54564,54567],{"class":326,"line":203},[324,54540,1774],{"class":867},[324,54542,54543],{"class":52022},"input",[324,54545,54546],{"class":734}," type",[324,54548,913],{"class":867},[324,54550,54551],{"class":738},"\"checkbox\"",[324,54553,15649],{"class":734},[324,54555,913],{"class":867},[324,54557,8381],{"class":738},[324,54559,15688],{"class":734},[324,54561,913],{"class":867},[324,54563,8381],{"class":738},[324,54565,54566],{"class":734}," checked",[324,54568,52029],{"class":867},[324,54570,54571],{"class":326,"line":338},[324,54572,54573],{"class":867},"不选的话：\n",[324,54575,54576],{"class":326,"line":344},[324,54577,54578],{"class":867},"const input = document.querySelector('input')\n",[324,54580,54581],{"class":326,"line":484},[324,54582,54583],{"class":867},"input.checked=false\n",[324,54585,54586],{"class":326,"line":491},[324,54587,54588],{"class":867},"这里写'true'也对，但是不要这样写，字符串只有空时为假，这里有隐式转换，就正常写布尔值就行\n",[324,54590,54591],{"class":326,"line":496},[324,54592,488],{"emptyLinePlaceholder":487},[324,54594,54595],{"class":326,"line":502},[324,54596,54597],{"class":867},"禁用按钮：\n",[324,54599,54600],{"class":326,"line":508},[324,54601,54602],{"class":867},"它的属性值disabled='disabled'这样可以进行，属性与值相等，就只写一个属性值就行\n",[324,54604,54605,54607,54610,54613,54616,54618],{"class":326,"line":514},[324,54606,1774],{"class":867},[324,54608,54609],{"class":52022},"button",[324,54611,54612],{"class":734}," disabled",[324,54614,54615],{"class":867},">点击\u003C\u002F",[324,54617,54609],{"class":52022},[324,54619,52029],{"class":867},[324,54621,54622,54624,54626,54628,54630],{"class":326,"line":2343},[324,54623,1774],{"class":867},[324,54625,54609],{"class":52022},[324,54627,54615],{"class":867},[324,54629,54609],{"class":52022},[324,54631,52029],{"class":867},[324,54633,54634],{"class":326,"line":2348},[324,54635,54636],{"class":867},"const bt = document.querySelector('button')\n",[324,54638,54639],{"class":326,"line":2354},[324,54640,54641],{"class":867},"bt.disabled = false\n",[192,54643,54644],{"start":203},[195,54645,54646],{},"自定义属性",[19,54648,54649],{},[48,54650],{"alt":50,"src":54651},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-099.png",[316,54653,54655],{"className":53789,"code":54654,"language":53791,"meta":50,"style":50},"\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",[269,54656,54657,54665,54693,54712,54731,54750,54769,54777,54782,54787,54792,54797,54805],{"__ignoreMap":50},[324,54658,54659,54661,54663],{"class":326,"line":327},[324,54660,1774],{"class":867},[324,54662,52522],{"class":52022},[324,54664,52029],{"class":867},[324,54666,54667,54669,54671,54674,54676,54678,54681,54683,54686,54689,54691],{"class":326,"line":203},[324,54668,52866],{"class":867},[324,54670,52333],{"class":52022},[324,54672,54673],{"class":734}," data-id",[324,54675,913],{"class":867},[324,54677,4407],{"class":738},[324,54679,54680],{"class":734}," data-spm",[324,54682,913],{"class":867},[324,54684,54685],{"class":738},"\"我不知道\"",[324,54687,54688],{"class":867},">1\u003C\u002F",[324,54690,52333],{"class":52022},[324,54692,52029],{"class":867},[324,54694,54695,54697,54699,54701,54703,54705,54708,54710],{"class":326,"line":338},[324,54696,52866],{"class":867},[324,54698,52333],{"class":52022},[324,54700,54673],{"class":734},[324,54702,913],{"class":867},[324,54704,4430],{"class":738},[324,54706,54707],{"class":867},">2\u003C\u002F",[324,54709,52333],{"class":52022},[324,54711,52029],{"class":867},[324,54713,54714,54716,54718,54720,54722,54724,54727,54729],{"class":326,"line":344},[324,54715,52866],{"class":867},[324,54717,52333],{"class":52022},[324,54719,54673],{"class":734},[324,54721,913],{"class":867},[324,54723,4443],{"class":738},[324,54725,54726],{"class":867},">3\u003C\u002F",[324,54728,52333],{"class":52022},[324,54730,52029],{"class":867},[324,54732,54733,54735,54737,54739,54741,54743,54746,54748],{"class":326,"line":484},[324,54734,52866],{"class":867},[324,54736,52333],{"class":52022},[324,54738,54673],{"class":734},[324,54740,913],{"class":867},[324,54742,4456],{"class":738},[324,54744,54745],{"class":867},">4\u003C\u002F",[324,54747,52333],{"class":52022},[324,54749,52029],{"class":867},[324,54751,54752,54754,54756,54758,54760,54762,54765,54767],{"class":326,"line":491},[324,54753,52866],{"class":867},[324,54755,52333],{"class":52022},[324,54757,54673],{"class":734},[324,54759,913],{"class":867},[324,54761,4477],{"class":738},[324,54763,54764],{"class":867},">5\u003C\u002F",[324,54766,52333],{"class":52022},[324,54768,52029],{"class":867},[324,54770,54771,54773,54775],{"class":326,"line":496},[324,54772,52866],{"class":867},[324,54774,52535],{"class":52022},[324,54776,52029],{"class":867},[324,54778,54779],{"class":326,"line":502},[324,54780,54781],{"class":867},"    const one = document.querySelector('div')\n",[324,54783,54784],{"class":326,"line":508},[324,54785,54786],{"class":867},"    console.log(one.dataset)\n",[324,54788,54789],{"class":326,"line":514},[324,54790,54791],{"class":867},"    console.log(one.dataset.id)\n",[324,54793,54794],{"class":326,"line":2343},[324,54795,54796],{"class":867},"    console.log(one.dataset.spm)\n",[324,54798,54799,54801,54803],{"class":326,"line":2348},[324,54800,53139],{"class":867},[324,54802,52535],{"class":52022},[324,54804,52029],{"class":867},[324,54806,54807,54809,54811],{"class":326,"line":2354},[324,54808,52507],{"class":867},[324,54810,52522],{"class":52022},[324,54812,52029],{"class":867},[19,54814,54815],{},[48,54816],{"alt":50,"src":54817},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-100.png",[19,54819,54820],{},"document.querySelector选择的是第一个对象（元素）",[35,54822,54824],{"id":54823},"_316-定时器-间歇函数","3.1.6 定时器-间歇函数",[19,54826,54827],{},[48,54828],{"alt":50,"src":54829},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-101.png",[19,54831,54832],{},[48,54833],{"alt":50,"src":54834},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-102.png",[19,54836,54837],{},"定时器返回的是数字，表示第几个定时器，每个定时器的都是独一无二的，表示的是第几个定时器：",[52535,54839,54840],{},"\n\nfunction fn() {\n\n   document.write(1)\n\n   }\n\nlet n = setInterval(fn, 1000)\n\n   console.log(n)\n\n",[19,54842,54843],{},"此时输出结果为1，每1000毫秒输出一个1，若：",[52535,54845,54846],{},"\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",[19,54848,54849],{},"此时输出结果就是2，每1秒输出两个1（因为前边还有一个执行输出1的定时器，两个一起作用在浏览器就每秒输出11）",[19,54851,54852],{},"当个执行时输出前有一秒的空窗期，当经过setInterval时，如果间隔时间为1000，它就是过了一秒钟才去调用函数，他不是立即执行的函数，跟后边的间隔时间有关",[19,54854,54855],{},"单位为毫秒！！！",[19,54857,54858],{},"可以搭配匿名函数来用！！！",[19,54860,54861],{},"setInterval(function () {",[19,54863,54864],{},"alert('两秒执行一次')",[19,54866,54867],{},"}, 2000)",[19,54869,54870],{},"如果有名函数的话，就不要在函数名的后边加小括号，小括号表示调用这个函数",[19,54872,54873],{},"function fn() {",[19,54875,54876],{},"document.write(1)",[19,54878,1810],{},[19,54880,54881],{},"setInterval(fn, 1000)",[19,54883,54884],{},"如果函数名后边非得加括号的话，就将这个函数再加个引号，但是尽量不要用这种方式",[19,54886,54887],{},"setInterval('fn()', 1000)",[19,54889,54890],{},[48,54891],{"alt":50,"src":54892},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-103.png",[151,54894,54896],{"id":54895},"_3161-阅读注册协议","3.1.6.1 阅读注册协议",[316,54898,54900],{"className":51355,"code":54899,"language":51357,"meta":50,"style":50},"\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",[269,54901,54902,54912,54926,54930,54938,54952,54972,54984,54992,54996,55004,55041,55046,55051,55056,55064,55072,55094,55102,55107,55129,55134,55139,55150,55155,55175,55183,55198,55213,55224,55229,55239,55249,55253,55262,55266,55274,55282,55286],{"__ignoreMap":50},[324,54903,54904,54906,54908,54910],{"class":326,"line":327},[324,54905,52019],{"class":867},[324,54907,52023],{"class":52022},[324,54909,52026],{"class":734},[324,54911,52029],{"class":867},[324,54913,54914,54916,54918,54920,54922,54924],{"class":326,"line":203},[324,54915,1774],{"class":867},[324,54917,51357],{"class":52022},[324,54919,52038],{"class":734},[324,54921,913],{"class":867},[324,54923,52043],{"class":738},[324,54925,52029],{"class":867},[324,54927,54928],{"class":326,"line":338},[324,54929,488],{"emptyLinePlaceholder":487},[324,54931,54932,54934,54936],{"class":326,"line":344},[324,54933,1774],{"class":867},[324,54935,52056],{"class":52022},[324,54937,52029],{"class":867},[324,54939,54940,54942,54944,54946,54948,54950],{"class":326,"line":484},[324,54941,52866],{"class":867},[324,54943,52066],{"class":52022},[324,54945,52069],{"class":734},[324,54947,913],{"class":867},[324,54949,52074],{"class":738},[324,54951,52029],{"class":867},[324,54953,54954,54956,54958,54960,54962,54964,54966,54968,54970],{"class":326,"line":491},[324,54955,52866],{"class":867},[324,54957,52066],{"class":52022},[324,54959,15649],{"class":734},[324,54961,913],{"class":867},[324,54963,52113],{"class":738},[324,54965,52093],{"class":734},[324,54967,913],{"class":867},[324,54969,52120],{"class":738},[324,54971,52029],{"class":867},[324,54973,54974,54976,54978,54980,54982],{"class":326,"line":496},[324,54975,52866],{"class":867},[324,54977,52129],{"class":52022},[324,54979,52132],{"class":867},[324,54981,52129],{"class":52022},[324,54983,52029],{"class":867},[324,54985,54986,54988,54990],{"class":326,"line":502},[324,54987,52507],{"class":867},[324,54989,52056],{"class":52022},[324,54991,52029],{"class":867},[324,54993,54994],{"class":326,"line":508},[324,54995,488],{"emptyLinePlaceholder":487},[324,54997,54998,55000,55002],{"class":326,"line":514},[324,54999,1774],{"class":867},[324,55001,52522],{"class":52022},[324,55003,52029],{"class":867},[324,55005,55006,55008,55011,55013,55015,55017,55019,55021,55023,55026,55028,55031,55034,55036,55039],{"class":326,"line":2343},[324,55007,52866],{"class":867},[324,55009,55010],{"class":52022},"textarea",[324,55012,15649],{"class":734},[324,55014,913],{"class":867},[324,55016,8381],{"class":738},[324,55018,15688],{"class":734},[324,55020,913],{"class":867},[324,55022,8381],{"class":738},[324,55024,55025],{"class":734}," cols",[324,55027,913],{"class":867},[324,55029,55030],{"class":738},"\"30\"",[324,55032,55033],{"class":734}," rows",[324,55035,913],{"class":867},[324,55037,55038],{"class":738},"\"10\"",[324,55040,52029],{"class":867},[324,55042,55043],{"class":326,"line":2348},[324,55044,55045],{"class":867},"        用户注册协议\n",[324,55047,55048],{"class":326,"line":2354},[324,55049,55050],{"class":867},"        欢迎注册成为京东用户！在您注册过程中，您需要完成我们的注册流程并通过点击同意的形式在线签署以下协议，请您务必仔细阅读、充分理解协议中的条款内容后再点击同意（尤其是以粗体或下划线标识的条款，因为这些条款可能会明确您应履行的义务或对您的权利有所限制）。\n",[324,55052,55053],{"class":326,"line":2359},[324,55054,55055],{"class":867},"        【请您注意】如果您不同意以下协议全部或任何条款约定，请您停止注册。您停止注册后将仅可以浏览我们的商品信息但无法享受我们的产品或服务。如您按照注册流程提示填写信息，阅读并点击同意上述协议且完成全部注册流程后，即表示您已充分阅读、理解并接受协议的全部内容，并表明您同意我们可以依据协议内容来处理您的个人信息，并同意我们将您的订单信息共享给为完成此订单所必须的第三方合作方（详情查看\n",[324,55057,55058,55060,55062],{"class":326,"line":2373},[324,55059,52498],{"class":867},[324,55061,55010],{"class":52022},[324,55063,52029],{"class":867},[324,55065,55066,55068,55070],{"class":326,"line":2378},[324,55067,52866],{"class":867},[324,55069,54438],{"class":52022},[324,55071,52029],{"class":867},[324,55073,55074,55076,55078,55080,55082,55085,55087,55090,55092],{"class":326,"line":2384},[324,55075,52866],{"class":867},[324,55077,54609],{"class":52022},[324,55079,54208],{"class":734},[324,55081,913],{"class":867},[324,55083,55084],{"class":738},"\"btn\"",[324,55086,54612],{"class":734},[324,55088,55089],{"class":867},">我已经阅读用户协议(5)\u003C\u002F",[324,55091,54609],{"class":52022},[324,55093,52029],{"class":867},[324,55095,55096,55098,55100],{"class":326,"line":2405},[324,55097,52866],{"class":867},[324,55099,52535],{"class":52022},[324,55101,52029],{"class":867},[324,55103,55104],{"class":326,"line":2410},[324,55105,55106],{"class":772},"    \u002F\u002F 1. 获取元素\n",[324,55108,55109,55111,55114,55116,55119,55122,55124,55127],{"class":326,"line":2424},[324,55110,11950],{"class":863},[324,55112,55113],{"class":916}," btn",[324,55115,14293],{"class":863},[324,55117,55118],{"class":867}," document.",[324,55120,55121],{"class":734},"querySelector",[324,55123,868],{"class":867},[324,55125,55126],{"class":738},"'.btn'",[324,55128,874],{"class":867},[324,55130,55131],{"class":326,"line":2429},[324,55132,55133],{"class":772},"    \u002F\u002F console.log(btn.innerHTML)  butto按钮特殊用innerHTML\n",[324,55135,55136],{"class":326,"line":2458},[324,55137,55138],{"class":772},"    \u002F\u002F 2. 倒计时\n",[324,55140,55141,55143,55145,55147],{"class":326,"line":2463},[324,55142,52941],{"class":863},[324,55144,10167],{"class":867},[324,55146,913],{"class":863},[324,55148,55149],{"class":916}," 5\n",[324,55151,55152],{"class":326,"line":2480},[324,55153,55154],{"class":772},"    \u002F\u002F 2.1 开启定时器\n",[324,55156,55157,55159,55162,55164,55167,55169,55172],{"class":326,"line":2485},[324,55158,52941],{"class":863},[324,55160,55161],{"class":867}," n ",[324,55163,913],{"class":863},[324,55165,55166],{"class":734}," setInterval",[324,55168,868],{"class":867},[324,55170,55171],{"class":863},"function",[324,55173,55174],{"class":867}," () {\n",[324,55176,55177,55180],{"class":326,"line":2490},[324,55178,55179],{"class":867},"      i",[324,55181,55182],{"class":863},"--\n",[324,55184,55185,55188,55190,55193,55195],{"class":326,"line":2495},[324,55186,55187],{"class":867},"      btn.innerHTML ",[324,55189,913],{"class":863},[324,55191,55192],{"class":738}," `我已经阅读用户协议(${",[324,55194,1305],{"class":867},[324,55196,55197],{"class":738},"})`\n",[324,55199,55200,55203,55206,55209,55211],{"class":326,"line":2509},[324,55201,55202],{"class":863},"      if",[324,55204,55205],{"class":867}," (i ",[324,55207,55208],{"class":863},"===",[324,55210,4822],{"class":916},[324,55212,13171],{"class":867},[324,55214,55215,55218,55221],{"class":326,"line":2514},[324,55216,55217],{"class":734},"        clearInterval",[324,55219,55220],{"class":867},"(n)  ",[324,55222,55223],{"class":772},"\u002F\u002F 关闭定时器\n",[324,55225,55226],{"class":326,"line":3306},[324,55227,55228],{"class":772},"        \u002F\u002F 定时器停了，我就可以开按钮\n",[324,55230,55231,55234,55236],{"class":326,"line":3320},[324,55232,55233],{"class":867},"        btn.disabled ",[324,55235,913],{"class":863},[324,55237,55238],{"class":916}," false\n",[324,55240,55241,55244,55246],{"class":326,"line":3328},[324,55242,55243],{"class":867},"        btn.innerHTML ",[324,55245,913],{"class":863},[324,55247,55248],{"class":738}," '同意'\n",[324,55250,55251],{"class":326,"line":3333},[324,55252,53120],{"class":867},[324,55254,55255,55258,55260],{"class":326,"line":3339},[324,55256,55257],{"class":867},"    }, ",[324,55259,7139],{"class":916},[324,55261,874],{"class":867},[324,55263,55264],{"class":326,"line":3345},[324,55265,488],{"emptyLinePlaceholder":487},[324,55267,55268,55270,55272],{"class":326,"line":3350},[324,55269,53139],{"class":867},[324,55271,52535],{"class":52022},[324,55273,52029],{"class":867},[324,55275,55276,55278,55280],{"class":326,"line":8677},[324,55277,52507],{"class":867},[324,55279,52522],{"class":52022},[324,55281,52029],{"class":867},[324,55283,55284],{"class":326,"line":8701},[324,55285,488],{"emptyLinePlaceholder":487},[324,55287,55288,55290,55292],{"class":326,"line":8706},[324,55289,52507],{"class":867},[324,55291,51357],{"class":52022},[324,55293,52029],{"class":867},[19,55295,55296],{},"不要一直想着用死循环,避免死循环",[19,55298,55299,55302],{},[269,55300,55301],{},"定时器本身就是循环",",就直接在匿名函数中写就欧克了,不要再去写循环了,尤其死循环!!!",[151,55304,55306],{"id":55305},"_3162-轮播图定时版","3.1.6.2 轮播图定时版",[192,55308,55309],{},[195,55310,55311],{},"法1",[316,55313,55315],{"className":51355,"code":55314,"language":51357,"meta":50,"style":50},"\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",[269,55316,55317,55327,55341,55345,55353,55367,55387,55399,55407,55413,55424,55435,55439,55443,55450,55462,55466,55470,55477,55489,55503,55516,55530,55534,55538,55545,55556,55567,55578,55590,55602,55614,55618,55622,55630,55640,55653,55665,55678,55682,55686,55693,55703,55715,55727,55738,55749,55759,55771,55783,55787,55791,55800,55812,55824,55852,55865,55869,55873,55880,55891,55895,55903,55911,55915,55923,55937,55952,55976,55984,55999,56012,56020,56041,56053,56065,56077,56089,56101,56113,56125,56134,56142,56150,56158,56170,56193,56212,56231,56250,56269,56288,56307,56327,56331,56351,56370,56390,56411,56422,56439,56449,56459,56469,56474,56479,56484,56489,56514,56527,56531,56554,56558,56566,56574,56582,56586],{"__ignoreMap":50},[324,55318,55319,55321,55323,55325],{"class":326,"line":327},[324,55320,52019],{"class":867},[324,55322,52023],{"class":52022},[324,55324,52026],{"class":734},[324,55326,52029],{"class":867},[324,55328,55329,55331,55333,55335,55337,55339],{"class":326,"line":203},[324,55330,1774],{"class":867},[324,55332,51357],{"class":52022},[324,55334,52038],{"class":734},[324,55336,913],{"class":867},[324,55338,52043],{"class":738},[324,55340,52029],{"class":867},[324,55342,55343],{"class":326,"line":338},[324,55344,488],{"emptyLinePlaceholder":487},[324,55346,55347,55349,55351],{"class":326,"line":344},[324,55348,1774],{"class":867},[324,55350,52056],{"class":52022},[324,55352,52029],{"class":867},[324,55354,55355,55357,55359,55361,55363,55365],{"class":326,"line":484},[324,55356,52866],{"class":867},[324,55358,52066],{"class":52022},[324,55360,52069],{"class":734},[324,55362,913],{"class":867},[324,55364,52074],{"class":738},[324,55366,52029],{"class":867},[324,55368,55369,55371,55373,55375,55377,55379,55381,55383,55385],{"class":326,"line":491},[324,55370,52866],{"class":867},[324,55372,52066],{"class":52022},[324,55374,15649],{"class":734},[324,55376,913],{"class":867},[324,55378,52113],{"class":738},[324,55380,52093],{"class":734},[324,55382,913],{"class":867},[324,55384,52120],{"class":738},[324,55386,52029],{"class":867},[324,55388,55389,55391,55393,55395,55397],{"class":326,"line":496},[324,55390,52866],{"class":867},[324,55392,52129],{"class":52022},[324,55394,52132],{"class":867},[324,55396,52129],{"class":52022},[324,55398,52029],{"class":867},[324,55400,55401,55403,55405],{"class":326,"line":502},[324,55402,52866],{"class":867},[324,55404,775],{"class":52022},[324,55406,52029],{"class":867},[324,55408,55409,55411],{"class":326,"line":508},[324,55410,7132],{"class":52022},[324,55412,16301],{"class":867},[324,55414,55415,55418,55420,55422],{"class":326,"line":514},[324,55416,55417],{"class":916},"      padding",[324,55419,52159],{"class":867},[324,55421,1056],{"class":916},[324,55423,2025],{"class":867},[324,55425,55426,55429,55431,55433],{"class":326,"line":2343},[324,55427,55428],{"class":916},"      margin",[324,55430,52159],{"class":867},[324,55432,1056],{"class":916},[324,55434,2025],{"class":867},[324,55436,55437],{"class":326,"line":2348},[324,55438,2917],{"class":867},[324,55440,55441],{"class":326,"line":2354},[324,55442,488],{"emptyLinePlaceholder":487},[324,55444,55445,55448],{"class":326,"line":2359},[324,55446,55447],{"class":52022},"    li",[324,55449,16301],{"class":867},[324,55451,55452,55455,55457,55460],{"class":326,"line":2373},[324,55453,55454],{"class":916},"      list-style",[324,55456,52159],{"class":867},[324,55458,55459],{"class":916},"none",[324,55461,2025],{"class":867},[324,55463,55464],{"class":326,"line":2378},[324,55465,2917],{"class":867},[324,55467,55468],{"class":326,"line":2384},[324,55469,488],{"emptyLinePlaceholder":487},[324,55471,55472,55475],{"class":326,"line":2405},[324,55473,55474],{"class":734},"    .box",[324,55476,16301],{"class":867},[324,55478,55479,55482,55484,55487],{"class":326,"line":2410},[324,55480,55481],{"class":916},"      position",[324,55483,52159],{"class":867},[324,55485,55486],{"class":916},"relative",[324,55488,2025],{"class":867},[324,55490,55491,55494,55496,55499,55501],{"class":326,"line":2424},[324,55492,55493],{"class":916},"      width",[324,55495,52159],{"class":867},[324,55497,55498],{"class":916},"976",[324,55500,52214],{"class":863},[324,55502,2025],{"class":867},[324,55504,55505,55508,55510,55512,55514],{"class":326,"line":2429},[324,55506,55507],{"class":916},"      height",[324,55509,52159],{"class":867},[324,55511,2270],{"class":916},[324,55513,52214],{"class":863},[324,55515,2025],{"class":867},[324,55517,55518,55520,55522,55524,55526,55528],{"class":326,"line":2458},[324,55519,55428],{"class":916},[324,55521,52159],{"class":867},[324,55523,1175],{"class":916},[324,55525,52214],{"class":863},[324,55527,52278],{"class":916},[324,55529,2025],{"class":867},[324,55531,55532],{"class":326,"line":2463},[324,55533,2917],{"class":867},[324,55535,55536],{"class":326,"line":2480},[324,55537,488],{"emptyLinePlaceholder":487},[324,55539,55540,55543],{"class":326,"line":2485},[324,55541,55542],{"class":734},"    .slider-footer",[324,55544,16301],{"class":867},[324,55546,55547,55549,55551,55554],{"class":326,"line":2490},[324,55548,55481],{"class":916},[324,55550,52159],{"class":867},[324,55552,55553],{"class":916},"absolute",[324,55555,2025],{"class":867},[324,55557,55558,55561,55563,55565],{"class":326,"line":2495},[324,55559,55560],{"class":916},"      left",[324,55562,52159],{"class":867},[324,55564,1056],{"class":916},[324,55566,2025],{"class":867},[324,55568,55569,55572,55574,55576],{"class":326,"line":2509},[324,55570,55571],{"class":916},"      bottom",[324,55573,52159],{"class":867},[324,55575,1056],{"class":916},[324,55577,2025],{"class":867},[324,55579,55580,55582,55584,55586,55588],{"class":326,"line":2514},[324,55581,55493],{"class":916},[324,55583,52159],{"class":867},[324,55585,1175],{"class":916},[324,55587,1192],{"class":863},[324,55589,2025],{"class":867},[324,55591,55592,55594,55596,55598,55600],{"class":326,"line":3306},[324,55593,55507],{"class":916},[324,55595,52159],{"class":867},[324,55597,1439],{"class":916},[324,55599,1192],{"class":863},[324,55601,2025],{"class":867},[324,55603,55604,55607,55609,55612],{"class":326,"line":3320},[324,55605,55606],{"class":916},"      background-color",[324,55608,52159],{"class":867},[324,55610,55611],{"class":916},"skyblue",[324,55613,2025],{"class":867},[324,55615,55616],{"class":326,"line":3328},[324,55617,2917],{"class":867},[324,55619,55620],{"class":326,"line":3333},[324,55621,488],{"emptyLinePlaceholder":487},[324,55623,55624,55626,55628],{"class":326,"line":3339},[324,55625,55542],{"class":734},[324,55627,7554],{"class":52022},[324,55629,16301],{"class":867},[324,55631,55632,55634,55636,55638],{"class":326,"line":3345},[324,55633,55481],{"class":916},[324,55635,52159],{"class":867},[324,55637,55553],{"class":916},[324,55639,2025],{"class":867},[324,55641,55642,55645,55647,55649,55651],{"class":326,"line":3350},[324,55643,55644],{"class":916},"      font-size",[324,55646,52159],{"class":867},[324,55648,1765],{"class":916},[324,55650,52214],{"class":863},[324,55652,2025],{"class":867},[324,55654,55655,55657,55659,55661,55663],{"class":326,"line":8677},[324,55656,55560],{"class":916},[324,55658,52159],{"class":867},[324,55660,1564],{"class":916},[324,55662,52214],{"class":863},[324,55664,2025],{"class":867},[324,55666,55667,55670,55672,55674,55676],{"class":326,"line":8701},[324,55668,55669],{"class":916},"      top",[324,55671,52159],{"class":867},[324,55673,1183],{"class":916},[324,55675,52214],{"class":863},[324,55677,2025],{"class":867},[324,55679,55680],{"class":326,"line":8706},[324,55681,2917],{"class":867},[324,55683,55684],{"class":326,"line":8712},[324,55685,488],{"emptyLinePlaceholder":487},[324,55687,55688,55691],{"class":326,"line":8739},[324,55689,55690],{"class":52022},"    ul",[324,55692,16301],{"class":867},[324,55694,55695,55697,55699,55701],{"class":326,"line":8744},[324,55696,55481],{"class":916},[324,55698,52159],{"class":867},[324,55700,55553],{"class":916},[324,55702,2025],{"class":867},[324,55704,55705,55707,55709,55711,55713],{"class":326,"line":8750},[324,55706,55669],{"class":916},[324,55708,52159],{"class":867},[324,55710,1645],{"class":916},[324,55712,52214],{"class":863},[324,55714,2025],{"class":867},[324,55716,55717,55719,55721,55723,55725],{"class":326,"line":8762},[324,55718,55560],{"class":916},[324,55720,52159],{"class":867},[324,55722,1564],{"class":916},[324,55724,52214],{"class":863},[324,55726,2025],{"class":867},[324,55728,55729,55732,55734,55736],{"class":326,"line":8774},[324,55730,55731],{"class":916},"      display",[324,55733,52159],{"class":867},[324,55735,52199],{"class":916},[324,55737,2025],{"class":867},[324,55739,55740,55743,55745,55747],{"class":326,"line":8786},[324,55741,55742],{"class":916},"      justify-content",[324,55744,52159],{"class":867},[324,55746,52390],{"class":916},[324,55748,2025],{"class":867},[324,55750,55751,55753,55755,55757],{"class":326,"line":10445},[324,55752,55481],{"class":916},[324,55754,52159],{"class":867},[324,55756,55553],{"class":916},[324,55758,2025],{"class":867},[324,55760,55761,55763,55765,55767,55769],{"class":326,"line":10470},[324,55762,55493],{"class":916},[324,55764,52159],{"class":867},[324,55766,4721],{"class":916},[324,55768,52214],{"class":863},[324,55770,2025],{"class":867},[324,55772,55773,55775,55777,55779,55781],{"class":326,"line":10493},[324,55774,55507],{"class":916},[324,55776,52159],{"class":867},[324,55778,1564],{"class":916},[324,55780,52214],{"class":863},[324,55782,2025],{"class":867},[324,55784,55785],{"class":326,"line":10517},[324,55786,2917],{"class":867},[324,55788,55789],{"class":326,"line":10522},[324,55790,488],{"emptyLinePlaceholder":487},[324,55792,55793,55795,55798],{"class":326,"line":10527},[324,55794,55690],{"class":52022},[324,55796,55797],{"class":52022}," li",[324,55799,16301],{"class":867},[324,55801,55802,55804,55806,55808,55810],{"class":326,"line":10532},[324,55803,55493],{"class":916},[324,55805,52159],{"class":867},[324,55807,1564],{"class":916},[324,55809,52214],{"class":863},[324,55811,2025],{"class":867},[324,55813,55814,55816,55818,55820,55822],{"class":326,"line":10541},[324,55815,55507],{"class":916},[324,55817,52159],{"class":867},[324,55819,1564],{"class":916},[324,55821,52214],{"class":863},[324,55823,2025],{"class":867},[324,55825,55826,55828,55830,55833,55835,55837,55839,55841,55843,55845,55847,55850],{"class":326,"line":10546},[324,55827,55606],{"class":916},[324,55829,52159],{"class":867},[324,55831,55832],{"class":916},"rgba",[324,55834,868],{"class":867},[324,55836,1056],{"class":916},[324,55838,13164],{"class":867},[324,55840,1056],{"class":916},[324,55842,13164],{"class":867},[324,55844,1056],{"class":916},[324,55846,13164],{"class":867},[324,55848,55849],{"class":916},".4",[324,55851,3448],{"class":867},[324,55853,55854,55857,55859,55861,55863],{"class":326,"line":10552},[324,55855,55856],{"class":916},"      border-radius",[324,55858,52159],{"class":867},[324,55860,1310],{"class":916},[324,55862,52214],{"class":863},[324,55864,2025],{"class":867},[324,55866,55867],{"class":326,"line":10573},[324,55868,2917],{"class":867},[324,55870,55871],{"class":326,"line":10579},[324,55872,488],{"emptyLinePlaceholder":487},[324,55874,55875,55878],{"class":326,"line":10593},[324,55876,55877],{"class":734},"    .activate",[324,55879,16301],{"class":867},[324,55881,55882,55884,55886,55889],{"class":326,"line":10599},[324,55883,55606],{"class":916},[324,55885,52159],{"class":867},[324,55887,55888],{"class":916},"#f7f7f7",[324,55890,2025],{"class":867},[324,55892,55893],{"class":326,"line":10626},[324,55894,2917],{"class":867},[324,55896,55897,55899,55901],{"class":326,"line":10635},[324,55898,53139],{"class":867},[324,55900,775],{"class":52022},[324,55902,52029],{"class":867},[324,55904,55905,55907,55909],{"class":326,"line":10641},[324,55906,52507],{"class":867},[324,55908,52056],{"class":52022},[324,55910,52029],{"class":867},[324,55912,55913],{"class":326,"line":10649},[324,55914,488],{"emptyLinePlaceholder":487},[324,55916,55917,55919,55921],{"class":326,"line":10654},[324,55918,1774],{"class":867},[324,55920,52522],{"class":52022},[324,55922,52029],{"class":867},[324,55924,55925,55927,55929,55931,55933,55935],{"class":326,"line":17333},[324,55926,52866],{"class":867},[324,55928,52333],{"class":52022},[324,55930,54208],{"class":734},[324,55932,913],{"class":867},[324,55934,54213],{"class":738},[324,55936,52029],{"class":867},[324,55938,55939,55941,55943,55945,55947,55950],{"class":326,"line":17339},[324,55940,52063],{"class":867},[324,55942,52333],{"class":52022},[324,55944,54208],{"class":734},[324,55946,913],{"class":867},[324,55948,55949],{"class":738},"\"slider-wrapper\"",[324,55951,52029],{"class":867},[324,55953,55954,55957,55959,55962,55964,55967,55970,55972,55974],{"class":326,"line":17362},[324,55955,55956],{"class":867},"      \u003C",[324,55958,48],{"class":52022},[324,55960,55961],{"class":734}," src",[324,55963,913],{"class":867},[324,55965,55966],{"class":738},"\"....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[324,55968,55969],{"class":734}," alt",[324,55971,913],{"class":867},[324,55973,8381],{"class":738},[324,55975,52029],{"class":867},[324,55977,55978,55980,55982],{"class":326,"line":17368},[324,55979,52498],{"class":867},[324,55981,52333],{"class":52022},[324,55983,52029],{"class":867},[324,55985,55986,55988,55990,55992,55994,55997],{"class":326,"line":17391},[324,55987,52063],{"class":867},[324,55989,52333],{"class":52022},[324,55991,54208],{"class":734},[324,55993,913],{"class":867},[324,55995,55996],{"class":738},"\"slider-footer\"",[324,55998,52029],{"class":867},[324,56000,56001,56003,56005,56008,56010],{"class":326,"line":17405},[324,56002,55956],{"class":867},[324,56004,19],{"class":52022},[324,56006,56007],{"class":867},">对人类来说会不会太超前了?\u003C\u002F",[324,56009,19],{"class":52022},[324,56011,52029],{"class":867},[324,56013,56014,56016,56018],{"class":326,"line":17425},[324,56015,55956],{"class":867},[324,56017,1871],{"class":52022},[324,56019,52029],{"class":867},[324,56021,56022,56025,56027,56029,56031,56034,56037,56039],{"class":326,"line":17431},[324,56023,56024],{"class":867},"        \u003C",[324,56026,195],{"class":52022},[324,56028,54208],{"class":734},[324,56030,913],{"class":867},[324,56032,56033],{"class":738},"\"activate\"",[324,56035,56036],{"class":867},">\u003C\u002F",[324,56038,195],{"class":52022},[324,56040,52029],{"class":867},[324,56042,56043,56045,56047,56049,56051],{"class":326,"line":17442},[324,56044,56024],{"class":867},[324,56046,195],{"class":52022},[324,56048,56036],{"class":867},[324,56050,195],{"class":52022},[324,56052,52029],{"class":867},[324,56054,56055,56057,56059,56061,56063],{"class":326,"line":17465},[324,56056,56024],{"class":867},[324,56058,195],{"class":52022},[324,56060,56036],{"class":867},[324,56062,195],{"class":52022},[324,56064,52029],{"class":867},[324,56066,56067,56069,56071,56073,56075],{"class":326,"line":17487},[324,56068,56024],{"class":867},[324,56070,195],{"class":52022},[324,56072,56036],{"class":867},[324,56074,195],{"class":52022},[324,56076,52029],{"class":867},[324,56078,56079,56081,56083,56085,56087],{"class":326,"line":17492},[324,56080,56024],{"class":867},[324,56082,195],{"class":52022},[324,56084,56036],{"class":867},[324,56086,195],{"class":52022},[324,56088,52029],{"class":867},[324,56090,56091,56093,56095,56097,56099],{"class":326,"line":17498},[324,56092,56024],{"class":867},[324,56094,195],{"class":52022},[324,56096,56036],{"class":867},[324,56098,195],{"class":52022},[324,56100,52029],{"class":867},[324,56102,56103,56105,56107,56109,56111],{"class":326,"line":17512},[324,56104,56024],{"class":867},[324,56106,195],{"class":52022},[324,56108,56036],{"class":867},[324,56110,195],{"class":52022},[324,56112,52029],{"class":867},[324,56114,56115,56117,56119,56121,56123],{"class":326,"line":17525},[324,56116,56024],{"class":867},[324,56118,195],{"class":52022},[324,56120,56036],{"class":867},[324,56122,195],{"class":52022},[324,56124,52029],{"class":867},[324,56126,56127,56130,56132],{"class":326,"line":17530},[324,56128,56129],{"class":867},"      \u003C\u002F",[324,56131,1871],{"class":52022},[324,56133,52029],{"class":867},[324,56135,56136,56138,56140],{"class":326,"line":17544},[324,56137,52498],{"class":867},[324,56139,52333],{"class":52022},[324,56141,52029],{"class":867},[324,56143,56144,56146,56148],{"class":326,"line":17549},[324,56145,53139],{"class":867},[324,56147,52333],{"class":52022},[324,56149,52029],{"class":867},[324,56151,56152,56154,56156],{"class":326,"line":17555},[324,56153,52866],{"class":867},[324,56155,52535],{"class":52022},[324,56157,52029],{"class":867},[324,56159,56160,56162,56165,56167],{"class":326,"line":17560},[324,56161,11950],{"class":863},[324,56163,56164],{"class":916}," arrImage",[324,56166,14293],{"class":863},[324,56168,56169],{"class":867}," [\n",[324,56171,56172,56175,56178,56181,56184,56187,56190],{"class":326,"line":17574},[324,56173,56174],{"class":867},"      { url: ",[324,56176,56177],{"class":738},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg'",[324,56179,56180],{"class":867},", title: ",[324,56182,56183],{"class":738},"'对人类来说会不会太超前了?'",[324,56185,56186],{"class":867},", color: ",[324,56188,56189],{"class":738},"'rgba(100,67,68)'",[324,56191,56192],{"class":867}," },\n",[324,56194,56195,56197,56200,56202,56205,56207,56210],{"class":326,"line":17579},[324,56196,56174],{"class":867},[324,56198,56199],{"class":738},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg'",[324,56201,56180],{"class":867},[324,56203,56204],{"class":738},"'开启剑与雪的黑暗传说!'",[324,56206,56186],{"class":867},[324,56208,56209],{"class":738},"'rgba(43,35,26)'",[324,56211,56192],{"class":867},[324,56213,56214,56216,56219,56221,56224,56226,56229],{"class":326,"line":17584},[324,56215,56174],{"class":867},[324,56217,56218],{"class":738},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg'",[324,56220,56180],{"class":867},[324,56222,56223],{"class":738},"'真正的jo厨出现了!'",[324,56225,56186],{"class":867},[324,56227,56228],{"class":738},"'rgba(36,31,33)'",[324,56230,56192],{"class":867},[324,56232,56233,56235,56238,56240,56243,56245,56248],{"class":326,"line":17598},[324,56234,56174],{"class":867},[324,56236,56237],{"class":738},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg'",[324,56239,56180],{"class":867},[324,56241,56242],{"class":738},"'李玉刚:让世界通过b站看到东方大国文化'",[324,56244,56186],{"class":867},[324,56246,56247],{"class":738},"'rgba(139,98,66)'",[324,56249,56192],{"class":867},[324,56251,56252,56254,56257,56259,56262,56264,56267],{"class":326,"line":17610},[324,56253,56174],{"class":867},[324,56255,56256],{"class":738},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg'",[324,56258,56180],{"class":867},[324,56260,56261],{"class":738},"'快来分享你的寒假日常吧'",[324,56263,56186],{"class":867},[324,56265,56266],{"class":738},"'rgba(67,90,92)'",[324,56268,56192],{"class":867},[324,56270,56271,56273,56276,56278,56281,56283,56286],{"class":326,"line":17615},[324,56272,56174],{"class":867},[324,56274,56275],{"class":738},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg'",[324,56277,56180],{"class":867},[324,56279,56280],{"class":738},"'哔哩哔哩小年YEAR'",[324,56282,56186],{"class":867},[324,56284,56285],{"class":738},"'rgba(166,131,143)'",[324,56287,56192],{"class":867},[324,56289,56290,56292,56295,56297,56300,56302,56305],{"class":326,"line":17628},[324,56291,56174],{"class":867},[324,56293,56294],{"class":738},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg'",[324,56296,56180],{"class":867},[324,56298,56299],{"class":738},"'一站式解决你的电脑配置问题'",[324,56301,56186],{"class":867},[324,56303,56304],{"class":738},"'rgba(53,29,25)'",[324,56306,56192],{"class":867},[324,56308,56309,56311,56314,56316,56319,56321,56324],{"class":326,"line":17633},[324,56310,56174],{"class":867},[324,56312,56313],{"class":738},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg'",[324,56315,56180],{"class":867},[324,56317,56318],{"class":738},"'谁不想和小猫咪贴贴呢?'",[324,56320,56186],{"class":867},[324,56322,56323],{"class":738},"'rgba(99,72,114)'",[324,56325,56326],{"class":867}," }\n",[324,56328,56329],{"class":326,"line":17638},[324,56330,53831],{"class":867},[324,56332,56333,56335,56338,56340,56342,56344,56346,56349],{"class":326,"line":17643},[324,56334,11950],{"class":863},[324,56336,56337],{"class":916}," img",[324,56339,14293],{"class":863},[324,56341,55118],{"class":867},[324,56343,55121],{"class":734},[324,56345,868],{"class":867},[324,56347,56348],{"class":738},"'.slider-wrapper img'",[324,56350,874],{"class":867},[324,56352,56353,56355,56357,56359,56361,56363,56365,56368],{"class":326,"line":17656},[324,56354,11950],{"class":863},[324,56356,7554],{"class":916},[324,56358,14293],{"class":863},[324,56360,55118],{"class":867},[324,56362,55121],{"class":734},[324,56364,868],{"class":867},[324,56366,56367],{"class":738},"'.slider-footer p'",[324,56369,874],{"class":867},[324,56371,56372,56374,56377,56379,56381,56383,56385,56388],{"class":326,"line":17661},[324,56373,11950],{"class":863},[324,56375,56376],{"class":916}," color",[324,56378,14293],{"class":863},[324,56380,55118],{"class":867},[324,56382,55121],{"class":734},[324,56384,868],{"class":867},[324,56386,56387],{"class":738},"'.slider-footer'",[324,56389,874],{"class":867},[324,56391,56392,56394,56397,56399,56401,56404,56406,56409],{"class":326,"line":33355},[324,56393,11950],{"class":863},[324,56395,56396],{"class":916}," lis",[324,56398,14293],{"class":863},[324,56400,55118],{"class":867},[324,56402,56403],{"class":734},"querySelectorAll",[324,56405,868],{"class":867},[324,56407,56408],{"class":738},"'.slider-footer ul li'",[324,56410,874],{"class":867},[324,56412,56413,56415,56417,56419],{"class":326,"line":33361},[324,56414,52941],{"class":863},[324,56416,10167],{"class":867},[324,56418,913],{"class":863},[324,56420,56421],{"class":916}," 1\n",[324,56423,56424,56426,56429,56431,56433,56435,56437],{"class":326,"line":33367},[324,56425,52941],{"class":863},[324,56427,56428],{"class":867}," timer ",[324,56430,913],{"class":863},[324,56432,55166],{"class":734},[324,56434,868],{"class":867},[324,56436,55171],{"class":863},[324,56438,55174],{"class":867},[324,56440,56441,56444,56446],{"class":326,"line":33373},[324,56442,56443],{"class":867},"      img.src ",[324,56445,913],{"class":863},[324,56447,56448],{"class":867}," arrImage[i].url\n",[324,56450,56451,56454,56456],{"class":326,"line":33379},[324,56452,56453],{"class":867},"      p.innerHTML ",[324,56455,913],{"class":863},[324,56457,56458],{"class":867}," arrImage[i].title\n",[324,56460,56461,56464,56466],{"class":326,"line":33390},[324,56462,56463],{"class":867},"      color.style.backgroundColor ",[324,56465,913],{"class":863},[324,56467,56468],{"class":867}," arrImage[i].color\n",[324,56470,56471],{"class":326,"line":33396},[324,56472,56473],{"class":772},"      \u002F\u002F let li = document.querySelector(`.slider-footer ul li:nth-child(${i + 1})`)\n",[324,56475,56476],{"class":326,"line":33416},[324,56477,56478],{"class":772},"      \u002F\u002F li.classList.add('activate')\n",[324,56480,56481],{"class":326,"line":33422},[324,56482,56483],{"class":772},"      \u002F\u002F lis[i + 1].classList.add('activate')\n",[324,56485,56486],{"class":326,"line":33433},[324,56487,56488],{"class":772},"      \u002F\u002F lis[i].classList.remove('activate')\n",[324,56490,56491,56494,56496,56498,56501,56504,56507,56509,56512],{"class":326,"line":33439},[324,56492,56493],{"class":867},"      document.",[324,56495,55121],{"class":734},[324,56497,868],{"class":867},[324,56499,56500],{"class":738},"'.activate'",[324,56502,56503],{"class":867},")?.classList.",[324,56505,56506],{"class":734},"toggle",[324,56508,868],{"class":867},[324,56510,56511],{"class":738},"'activate'",[324,56513,874],{"class":867},[324,56515,56516,56519,56521,56523,56525],{"class":326,"line":33445},[324,56517,56518],{"class":867},"      lis[i].classList.",[324,56520,6063],{"class":734},[324,56522,868],{"class":867},[324,56524,56511],{"class":738},[324,56526,874],{"class":867},[324,56528,56529],{"class":326,"line":33451},[324,56530,488],{"emptyLinePlaceholder":487},[324,56532,56533,56536,56538,56540,56542,56544,56546,56548,56551],{"class":326,"line":33457},[324,56534,56535],{"class":867},"      i ",[324,56537,913],{"class":863},[324,56539,55205],{"class":867},[324,56541,1345],{"class":863},[324,56543,25842],{"class":916},[324,56545,14443],{"class":867},[324,56547,1192],{"class":863},[324,56549,56550],{"class":867}," arrImage.",[324,56552,56553],{"class":916},"length\n",[324,56555,56556],{"class":326,"line":33463},[324,56557,488],{"emptyLinePlaceholder":487},[324,56559,56560,56562,56564],{"class":326,"line":33469},[324,56561,55257],{"class":867},[324,56563,7139],{"class":916},[324,56565,874],{"class":867},[324,56567,56568,56570,56572],{"class":326,"line":33475},[324,56569,53139],{"class":867},[324,56571,52535],{"class":52022},[324,56573,52029],{"class":867},[324,56575,56576,56578,56580],{"class":326,"line":33495},[324,56577,52507],{"class":867},[324,56579,52522],{"class":52022},[324,56581,52029],{"class":867},[324,56583,56584],{"class":326,"line":33501},[324,56585,488],{"emptyLinePlaceholder":487},[324,56587,56588,56590,56592],{"class":326,"line":33517},[324,56589,52507],{"class":867},[324,56591,51357],{"class":52022},[324,56593,52029],{"class":867},[19,56595,56596],{},[48,56597],{"alt":50,"src":56598},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-104.png",[19,56600,56601],{},"?.就是短路保护,确保输出正常进行",[19,56603,56604],{},"不要忘记取余%,有时候可以用",[19,56606,56607],{},"相同部分可以封装成函数,然后调用这部分就可以!!!",[192,56609,56610],{"start":203},[195,56611,56612],{},"法2",[316,56614,56616],{"className":51355,"code":56615,"language":51357,"meta":50,"style":50},"\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",[269,56617,56618,56628,56642,56646,56654,56668,56688,56700,56708,56714,56724,56734,56738,56742,56748,56758,56762,56766,56772,56782,56794,56806,56820,56824,56828,56834,56844,56854,56864,56876,56888,56898,56902,56906,56914,56924,56936,56948,56960,56964,56968,56974,56984,56996,57008,57018,57028,57038,57050,57062,57066,57070,57078,57090,57102,57128,57140,57144,57148,57154,57164,57168,57176,57184,57188,57196,57210,57224,57244,57252,57266,57278,57286,57304,57316,57328,57340,57352,57364,57376,57388,57396,57404,57412,57420,57431,57447,57463,57479,57495,57511,57527,57543,57559,57563,57568,57586,57604,57614,57619,57624,57635,57641,57656,57665,57669,57674,57683,57688,57697,57702,57707,57712,57735,57765,57769,57777,57781,57789,57797,57801],{"__ignoreMap":50},[324,56619,56620,56622,56624,56626],{"class":326,"line":327},[324,56621,52019],{"class":867},[324,56623,52023],{"class":52022},[324,56625,52026],{"class":734},[324,56627,52029],{"class":867},[324,56629,56630,56632,56634,56636,56638,56640],{"class":326,"line":203},[324,56631,1774],{"class":867},[324,56633,51357],{"class":52022},[324,56635,52038],{"class":734},[324,56637,913],{"class":867},[324,56639,52043],{"class":738},[324,56641,52029],{"class":867},[324,56643,56644],{"class":326,"line":338},[324,56645,488],{"emptyLinePlaceholder":487},[324,56647,56648,56650,56652],{"class":326,"line":344},[324,56649,1774],{"class":867},[324,56651,52056],{"class":52022},[324,56653,52029],{"class":867},[324,56655,56656,56658,56660,56662,56664,56666],{"class":326,"line":484},[324,56657,52866],{"class":867},[324,56659,52066],{"class":52022},[324,56661,52069],{"class":734},[324,56663,913],{"class":867},[324,56665,52074],{"class":738},[324,56667,52029],{"class":867},[324,56669,56670,56672,56674,56676,56678,56680,56682,56684,56686],{"class":326,"line":491},[324,56671,52866],{"class":867},[324,56673,52066],{"class":52022},[324,56675,15649],{"class":734},[324,56677,913],{"class":867},[324,56679,52113],{"class":738},[324,56681,52093],{"class":734},[324,56683,913],{"class":867},[324,56685,52120],{"class":738},[324,56687,52029],{"class":867},[324,56689,56690,56692,56694,56696,56698],{"class":326,"line":496},[324,56691,52866],{"class":867},[324,56693,52129],{"class":52022},[324,56695,52132],{"class":867},[324,56697,52129],{"class":52022},[324,56699,52029],{"class":867},[324,56701,56702,56704,56706],{"class":326,"line":502},[324,56703,52866],{"class":867},[324,56705,775],{"class":52022},[324,56707,52029],{"class":867},[324,56709,56710,56712],{"class":326,"line":508},[324,56711,7132],{"class":52022},[324,56713,16301],{"class":867},[324,56715,56716,56718,56720,56722],{"class":326,"line":514},[324,56717,55417],{"class":916},[324,56719,52159],{"class":867},[324,56721,1056],{"class":916},[324,56723,2025],{"class":867},[324,56725,56726,56728,56730,56732],{"class":326,"line":2343},[324,56727,55428],{"class":916},[324,56729,52159],{"class":867},[324,56731,1056],{"class":916},[324,56733,2025],{"class":867},[324,56735,56736],{"class":326,"line":2348},[324,56737,2917],{"class":867},[324,56739,56740],{"class":326,"line":2354},[324,56741,488],{"emptyLinePlaceholder":487},[324,56743,56744,56746],{"class":326,"line":2359},[324,56745,55447],{"class":52022},[324,56747,16301],{"class":867},[324,56749,56750,56752,56754,56756],{"class":326,"line":2373},[324,56751,55454],{"class":916},[324,56753,52159],{"class":867},[324,56755,55459],{"class":916},[324,56757,2025],{"class":867},[324,56759,56760],{"class":326,"line":2378},[324,56761,2917],{"class":867},[324,56763,56764],{"class":326,"line":2384},[324,56765,488],{"emptyLinePlaceholder":487},[324,56767,56768,56770],{"class":326,"line":2405},[324,56769,55474],{"class":734},[324,56771,16301],{"class":867},[324,56773,56774,56776,56778,56780],{"class":326,"line":2410},[324,56775,55481],{"class":916},[324,56777,52159],{"class":867},[324,56779,55486],{"class":916},[324,56781,2025],{"class":867},[324,56783,56784,56786,56788,56790,56792],{"class":326,"line":2424},[324,56785,55493],{"class":916},[324,56787,52159],{"class":867},[324,56789,55498],{"class":916},[324,56791,52214],{"class":863},[324,56793,2025],{"class":867},[324,56795,56796,56798,56800,56802,56804],{"class":326,"line":2429},[324,56797,55507],{"class":916},[324,56799,52159],{"class":867},[324,56801,2270],{"class":916},[324,56803,52214],{"class":863},[324,56805,2025],{"class":867},[324,56807,56808,56810,56812,56814,56816,56818],{"class":326,"line":2458},[324,56809,55428],{"class":916},[324,56811,52159],{"class":867},[324,56813,1175],{"class":916},[324,56815,52214],{"class":863},[324,56817,52278],{"class":916},[324,56819,2025],{"class":867},[324,56821,56822],{"class":326,"line":2463},[324,56823,2917],{"class":867},[324,56825,56826],{"class":326,"line":2480},[324,56827,488],{"emptyLinePlaceholder":487},[324,56829,56830,56832],{"class":326,"line":2485},[324,56831,55542],{"class":734},[324,56833,16301],{"class":867},[324,56835,56836,56838,56840,56842],{"class":326,"line":2490},[324,56837,55481],{"class":916},[324,56839,52159],{"class":867},[324,56841,55553],{"class":916},[324,56843,2025],{"class":867},[324,56845,56846,56848,56850,56852],{"class":326,"line":2495},[324,56847,55560],{"class":916},[324,56849,52159],{"class":867},[324,56851,1056],{"class":916},[324,56853,2025],{"class":867},[324,56855,56856,56858,56860,56862],{"class":326,"line":2509},[324,56857,55571],{"class":916},[324,56859,52159],{"class":867},[324,56861,1056],{"class":916},[324,56863,2025],{"class":867},[324,56865,56866,56868,56870,56872,56874],{"class":326,"line":2514},[324,56867,55493],{"class":916},[324,56869,52159],{"class":867},[324,56871,1175],{"class":916},[324,56873,1192],{"class":863},[324,56875,2025],{"class":867},[324,56877,56878,56880,56882,56884,56886],{"class":326,"line":3306},[324,56879,55507],{"class":916},[324,56881,52159],{"class":867},[324,56883,1439],{"class":916},[324,56885,1192],{"class":863},[324,56887,2025],{"class":867},[324,56889,56890,56892,56894,56896],{"class":326,"line":3320},[324,56891,55606],{"class":916},[324,56893,52159],{"class":867},[324,56895,55611],{"class":916},[324,56897,2025],{"class":867},[324,56899,56900],{"class":326,"line":3328},[324,56901,2917],{"class":867},[324,56903,56904],{"class":326,"line":3333},[324,56905,488],{"emptyLinePlaceholder":487},[324,56907,56908,56910,56912],{"class":326,"line":3339},[324,56909,55542],{"class":734},[324,56911,7554],{"class":52022},[324,56913,16301],{"class":867},[324,56915,56916,56918,56920,56922],{"class":326,"line":3345},[324,56917,55481],{"class":916},[324,56919,52159],{"class":867},[324,56921,55553],{"class":916},[324,56923,2025],{"class":867},[324,56925,56926,56928,56930,56932,56934],{"class":326,"line":3350},[324,56927,55644],{"class":916},[324,56929,52159],{"class":867},[324,56931,1765],{"class":916},[324,56933,52214],{"class":863},[324,56935,2025],{"class":867},[324,56937,56938,56940,56942,56944,56946],{"class":326,"line":8677},[324,56939,55560],{"class":916},[324,56941,52159],{"class":867},[324,56943,1564],{"class":916},[324,56945,52214],{"class":863},[324,56947,2025],{"class":867},[324,56949,56950,56952,56954,56956,56958],{"class":326,"line":8701},[324,56951,55669],{"class":916},[324,56953,52159],{"class":867},[324,56955,1183],{"class":916},[324,56957,52214],{"class":863},[324,56959,2025],{"class":867},[324,56961,56962],{"class":326,"line":8706},[324,56963,2917],{"class":867},[324,56965,56966],{"class":326,"line":8712},[324,56967,488],{"emptyLinePlaceholder":487},[324,56969,56970,56972],{"class":326,"line":8739},[324,56971,55690],{"class":52022},[324,56973,16301],{"class":867},[324,56975,56976,56978,56980,56982],{"class":326,"line":8744},[324,56977,55481],{"class":916},[324,56979,52159],{"class":867},[324,56981,55553],{"class":916},[324,56983,2025],{"class":867},[324,56985,56986,56988,56990,56992,56994],{"class":326,"line":8750},[324,56987,55669],{"class":916},[324,56989,52159],{"class":867},[324,56991,1645],{"class":916},[324,56993,52214],{"class":863},[324,56995,2025],{"class":867},[324,56997,56998,57000,57002,57004,57006],{"class":326,"line":8762},[324,56999,55560],{"class":916},[324,57001,52159],{"class":867},[324,57003,1564],{"class":916},[324,57005,52214],{"class":863},[324,57007,2025],{"class":867},[324,57009,57010,57012,57014,57016],{"class":326,"line":8774},[324,57011,55731],{"class":916},[324,57013,52159],{"class":867},[324,57015,52199],{"class":916},[324,57017,2025],{"class":867},[324,57019,57020,57022,57024,57026],{"class":326,"line":8786},[324,57021,55742],{"class":916},[324,57023,52159],{"class":867},[324,57025,52390],{"class":916},[324,57027,2025],{"class":867},[324,57029,57030,57032,57034,57036],{"class":326,"line":10445},[324,57031,55481],{"class":916},[324,57033,52159],{"class":867},[324,57035,55553],{"class":916},[324,57037,2025],{"class":867},[324,57039,57040,57042,57044,57046,57048],{"class":326,"line":10470},[324,57041,55493],{"class":916},[324,57043,52159],{"class":867},[324,57045,4721],{"class":916},[324,57047,52214],{"class":863},[324,57049,2025],{"class":867},[324,57051,57052,57054,57056,57058,57060],{"class":326,"line":10493},[324,57053,55507],{"class":916},[324,57055,52159],{"class":867},[324,57057,1564],{"class":916},[324,57059,52214],{"class":863},[324,57061,2025],{"class":867},[324,57063,57064],{"class":326,"line":10517},[324,57065,2917],{"class":867},[324,57067,57068],{"class":326,"line":10522},[324,57069,488],{"emptyLinePlaceholder":487},[324,57071,57072,57074,57076],{"class":326,"line":10527},[324,57073,55690],{"class":52022},[324,57075,55797],{"class":52022},[324,57077,16301],{"class":867},[324,57079,57080,57082,57084,57086,57088],{"class":326,"line":10532},[324,57081,55493],{"class":916},[324,57083,52159],{"class":867},[324,57085,1564],{"class":916},[324,57087,52214],{"class":863},[324,57089,2025],{"class":867},[324,57091,57092,57094,57096,57098,57100],{"class":326,"line":10541},[324,57093,55507],{"class":916},[324,57095,52159],{"class":867},[324,57097,1564],{"class":916},[324,57099,52214],{"class":863},[324,57101,2025],{"class":867},[324,57103,57104,57106,57108,57110,57112,57114,57116,57118,57120,57122,57124,57126],{"class":326,"line":10546},[324,57105,55606],{"class":916},[324,57107,52159],{"class":867},[324,57109,55832],{"class":916},[324,57111,868],{"class":867},[324,57113,1056],{"class":916},[324,57115,13164],{"class":867},[324,57117,1056],{"class":916},[324,57119,13164],{"class":867},[324,57121,1056],{"class":916},[324,57123,13164],{"class":867},[324,57125,55849],{"class":916},[324,57127,3448],{"class":867},[324,57129,57130,57132,57134,57136,57138],{"class":326,"line":10552},[324,57131,55856],{"class":916},[324,57133,52159],{"class":867},[324,57135,1310],{"class":916},[324,57137,52214],{"class":863},[324,57139,2025],{"class":867},[324,57141,57142],{"class":326,"line":10573},[324,57143,2917],{"class":867},[324,57145,57146],{"class":326,"line":10579},[324,57147,488],{"emptyLinePlaceholder":487},[324,57149,57150,57152],{"class":326,"line":10593},[324,57151,55877],{"class":734},[324,57153,16301],{"class":867},[324,57155,57156,57158,57160,57162],{"class":326,"line":10599},[324,57157,55606],{"class":916},[324,57159,52159],{"class":867},[324,57161,55888],{"class":916},[324,57163,2025],{"class":867},[324,57165,57166],{"class":326,"line":10626},[324,57167,2917],{"class":867},[324,57169,57170,57172,57174],{"class":326,"line":10635},[324,57171,53139],{"class":867},[324,57173,775],{"class":52022},[324,57175,52029],{"class":867},[324,57177,57178,57180,57182],{"class":326,"line":10641},[324,57179,52507],{"class":867},[324,57181,52056],{"class":52022},[324,57183,52029],{"class":867},[324,57185,57186],{"class":326,"line":10649},[324,57187,488],{"emptyLinePlaceholder":487},[324,57189,57190,57192,57194],{"class":326,"line":10654},[324,57191,1774],{"class":867},[324,57193,52522],{"class":52022},[324,57195,52029],{"class":867},[324,57197,57198,57200,57202,57204,57206,57208],{"class":326,"line":17333},[324,57199,52866],{"class":867},[324,57201,52333],{"class":52022},[324,57203,54208],{"class":734},[324,57205,913],{"class":867},[324,57207,54213],{"class":738},[324,57209,52029],{"class":867},[324,57211,57212,57214,57216,57218,57220,57222],{"class":326,"line":17339},[324,57213,52063],{"class":867},[324,57215,52333],{"class":52022},[324,57217,54208],{"class":734},[324,57219,913],{"class":867},[324,57221,55949],{"class":738},[324,57223,52029],{"class":867},[324,57225,57226,57228,57230,57232,57234,57236,57238,57240,57242],{"class":326,"line":17362},[324,57227,55956],{"class":867},[324,57229,48],{"class":52022},[324,57231,55961],{"class":734},[324,57233,913],{"class":867},[324,57235,55966],{"class":738},[324,57237,55969],{"class":734},[324,57239,913],{"class":867},[324,57241,8381],{"class":738},[324,57243,52029],{"class":867},[324,57245,57246,57248,57250],{"class":326,"line":17368},[324,57247,52498],{"class":867},[324,57249,52333],{"class":52022},[324,57251,52029],{"class":867},[324,57253,57254,57256,57258,57260,57262,57264],{"class":326,"line":17391},[324,57255,52063],{"class":867},[324,57257,52333],{"class":52022},[324,57259,54208],{"class":734},[324,57261,913],{"class":867},[324,57263,55996],{"class":738},[324,57265,52029],{"class":867},[324,57267,57268,57270,57272,57274,57276],{"class":326,"line":17405},[324,57269,55956],{"class":867},[324,57271,19],{"class":52022},[324,57273,56007],{"class":867},[324,57275,19],{"class":52022},[324,57277,52029],{"class":867},[324,57279,57280,57282,57284],{"class":326,"line":17425},[324,57281,55956],{"class":867},[324,57283,1871],{"class":52022},[324,57285,52029],{"class":867},[324,57287,57288,57290,57292,57294,57296,57298,57300,57302],{"class":326,"line":17431},[324,57289,56024],{"class":867},[324,57291,195],{"class":52022},[324,57293,54208],{"class":734},[324,57295,913],{"class":867},[324,57297,56033],{"class":738},[324,57299,56036],{"class":867},[324,57301,195],{"class":52022},[324,57303,52029],{"class":867},[324,57305,57306,57308,57310,57312,57314],{"class":326,"line":17442},[324,57307,56024],{"class":867},[324,57309,195],{"class":52022},[324,57311,56036],{"class":867},[324,57313,195],{"class":52022},[324,57315,52029],{"class":867},[324,57317,57318,57320,57322,57324,57326],{"class":326,"line":17465},[324,57319,56024],{"class":867},[324,57321,195],{"class":52022},[324,57323,56036],{"class":867},[324,57325,195],{"class":52022},[324,57327,52029],{"class":867},[324,57329,57330,57332,57334,57336,57338],{"class":326,"line":17487},[324,57331,56024],{"class":867},[324,57333,195],{"class":52022},[324,57335,56036],{"class":867},[324,57337,195],{"class":52022},[324,57339,52029],{"class":867},[324,57341,57342,57344,57346,57348,57350],{"class":326,"line":17492},[324,57343,56024],{"class":867},[324,57345,195],{"class":52022},[324,57347,56036],{"class":867},[324,57349,195],{"class":52022},[324,57351,52029],{"class":867},[324,57353,57354,57356,57358,57360,57362],{"class":326,"line":17498},[324,57355,56024],{"class":867},[324,57357,195],{"class":52022},[324,57359,56036],{"class":867},[324,57361,195],{"class":52022},[324,57363,52029],{"class":867},[324,57365,57366,57368,57370,57372,57374],{"class":326,"line":17512},[324,57367,56024],{"class":867},[324,57369,195],{"class":52022},[324,57371,56036],{"class":867},[324,57373,195],{"class":52022},[324,57375,52029],{"class":867},[324,57377,57378,57380,57382,57384,57386],{"class":326,"line":17525},[324,57379,56024],{"class":867},[324,57381,195],{"class":52022},[324,57383,56036],{"class":867},[324,57385,195],{"class":52022},[324,57387,52029],{"class":867},[324,57389,57390,57392,57394],{"class":326,"line":17530},[324,57391,56129],{"class":867},[324,57393,1871],{"class":52022},[324,57395,52029],{"class":867},[324,57397,57398,57400,57402],{"class":326,"line":17544},[324,57399,52498],{"class":867},[324,57401,52333],{"class":52022},[324,57403,52029],{"class":867},[324,57405,57406,57408,57410],{"class":326,"line":17549},[324,57407,53139],{"class":867},[324,57409,52333],{"class":52022},[324,57411,52029],{"class":867},[324,57413,57414,57416,57418],{"class":326,"line":17555},[324,57415,52866],{"class":867},[324,57417,52535],{"class":52022},[324,57419,52029],{"class":867},[324,57421,57422,57424,57427,57429],{"class":326,"line":17560},[324,57423,11950],{"class":863},[324,57425,57426],{"class":916}," sliderData",[324,57428,14293],{"class":863},[324,57430,56169],{"class":867},[324,57432,57433,57435,57437,57439,57441,57443,57445],{"class":326,"line":17574},[324,57434,56174],{"class":867},[324,57436,56177],{"class":738},[324,57438,56180],{"class":867},[324,57440,56183],{"class":738},[324,57442,56186],{"class":867},[324,57444,56189],{"class":738},[324,57446,56192],{"class":867},[324,57448,57449,57451,57453,57455,57457,57459,57461],{"class":326,"line":17579},[324,57450,56174],{"class":867},[324,57452,56199],{"class":738},[324,57454,56180],{"class":867},[324,57456,56204],{"class":738},[324,57458,56186],{"class":867},[324,57460,56209],{"class":738},[324,57462,56192],{"class":867},[324,57464,57465,57467,57469,57471,57473,57475,57477],{"class":326,"line":17584},[324,57466,56174],{"class":867},[324,57468,56218],{"class":738},[324,57470,56180],{"class":867},[324,57472,56223],{"class":738},[324,57474,56186],{"class":867},[324,57476,56228],{"class":738},[324,57478,56192],{"class":867},[324,57480,57481,57483,57485,57487,57489,57491,57493],{"class":326,"line":17598},[324,57482,56174],{"class":867},[324,57484,56237],{"class":738},[324,57486,56180],{"class":867},[324,57488,56242],{"class":738},[324,57490,56186],{"class":867},[324,57492,56247],{"class":738},[324,57494,56192],{"class":867},[324,57496,57497,57499,57501,57503,57505,57507,57509],{"class":326,"line":17610},[324,57498,56174],{"class":867},[324,57500,56256],{"class":738},[324,57502,56180],{"class":867},[324,57504,56261],{"class":738},[324,57506,56186],{"class":867},[324,57508,56266],{"class":738},[324,57510,56192],{"class":867},[324,57512,57513,57515,57517,57519,57521,57523,57525],{"class":326,"line":17615},[324,57514,56174],{"class":867},[324,57516,56275],{"class":738},[324,57518,56180],{"class":867},[324,57520,56280],{"class":738},[324,57522,56186],{"class":867},[324,57524,56285],{"class":738},[324,57526,56192],{"class":867},[324,57528,57529,57531,57533,57535,57537,57539,57541],{"class":326,"line":17628},[324,57530,56174],{"class":867},[324,57532,56294],{"class":738},[324,57534,56180],{"class":867},[324,57536,56299],{"class":738},[324,57538,56186],{"class":867},[324,57540,56304],{"class":738},[324,57542,56192],{"class":867},[324,57544,57545,57547,57549,57551,57553,57555,57557],{"class":326,"line":17633},[324,57546,56174],{"class":867},[324,57548,56313],{"class":738},[324,57550,56180],{"class":867},[324,57552,56318],{"class":738},[324,57554,56186],{"class":867},[324,57556,56323],{"class":738},[324,57558,56326],{"class":867},[324,57560,57561],{"class":326,"line":17638},[324,57562,53831],{"class":867},[324,57564,57565],{"class":326,"line":17643},[324,57566,57567],{"class":772},"    \u002F\u002F 1.获取元素\n",[324,57569,57570,57572,57574,57576,57578,57580,57582,57584],{"class":326,"line":17656},[324,57571,11950],{"class":863},[324,57573,56337],{"class":916},[324,57575,14293],{"class":863},[324,57577,55118],{"class":867},[324,57579,55121],{"class":734},[324,57581,868],{"class":867},[324,57583,56348],{"class":738},[324,57585,874],{"class":867},[324,57587,57588,57590,57592,57594,57596,57598,57600,57602],{"class":326,"line":17661},[324,57589,11950],{"class":863},[324,57591,7554],{"class":916},[324,57593,14293],{"class":863},[324,57595,55118],{"class":867},[324,57597,55121],{"class":734},[324,57599,868],{"class":867},[324,57601,56367],{"class":738},[324,57603,874],{"class":867},[324,57605,57606,57608,57610,57612],{"class":326,"line":33355},[324,57607,52941],{"class":863},[324,57609,10167],{"class":867},[324,57611,913],{"class":863},[324,57613,48055],{"class":916},[324,57615,57616],{"class":326,"line":33361},[324,57617,57618],{"class":772},"    \u002F\u002F 2.开启定时器\n",[324,57620,57621],{"class":326,"line":33367},[324,57622,57623],{"class":772},"    \u002F\u002F console.log(sliderData[i]) 拿到对应对象了\n",[324,57625,57626,57629,57631,57633],{"class":326,"line":33373},[324,57627,57628],{"class":734},"    setInterval",[324,57630,868],{"class":867},[324,57632,55171],{"class":863},[324,57634,55174],{"class":867},[324,57636,57637,57639],{"class":326,"line":33379},[324,57638,55179],{"class":867},[324,57640,3431],{"class":863},[324,57642,57643,57645,57647,57649,57652,57654],{"class":326,"line":33390},[324,57644,55202],{"class":863},[324,57646,55205],{"class":867},[324,57648,2441],{"class":863},[324,57650,57651],{"class":867}," sliderData.",[324,57653,52690],{"class":916},[324,57655,13171],{"class":867},[324,57657,57658,57661,57663],{"class":326,"line":33396},[324,57659,57660],{"class":867},"        i ",[324,57662,913],{"class":863},[324,57664,48055],{"class":916},[324,57666,57667],{"class":326,"line":33416},[324,57668,53120],{"class":867},[324,57670,57671],{"class":326,"line":33422},[324,57672,57673],{"class":772},"      \u002F\u002F 更换图片路径\n",[324,57675,57676,57678,57680],{"class":326,"line":33433},[324,57677,56443],{"class":867},[324,57679,913],{"class":863},[324,57681,57682],{"class":867}," sliderData[i].url\n",[324,57684,57685],{"class":326,"line":33439},[324,57686,57687],{"class":772},"      \u002F\u002F 把文字写到p里面\n",[324,57689,57690,57692,57694],{"class":326,"line":33445},[324,57691,56453],{"class":867},[324,57693,913],{"class":863},[324,57695,57696],{"class":867}," sliderData[i].title\n",[324,57698,57699],{"class":326,"line":33451},[324,57700,57701],{"class":772},"      \u002F\u002F 小圆点\n",[324,57703,57704],{"class":326,"line":33457},[324,57705,57706],{"class":772},"      \u002F\u002F 先删除以前的active\n",[324,57708,57709],{"class":326,"line":33463},[324,57710,57711],{"class":772},"      \u002F\u002F 只让当前li添加active\n",[324,57713,57714,57716,57718,57720,57723,57726,57729,57731,57733],{"class":326,"line":33469},[324,57715,56493],{"class":867},[324,57717,55121],{"class":734},[324,57719,868],{"class":867},[324,57721,57722],{"class":738},"'.slider-footer .activate'",[324,57724,57725],{"class":867},").classList.",[324,57727,57728],{"class":734},"remove",[324,57730,868],{"class":867},[324,57732,56511],{"class":738},[324,57734,874],{"class":867},[324,57736,57737,57739,57741,57743,57746,57748,57750,57752,57755,57757,57759,57761,57763],{"class":326,"line":33475},[324,57738,56493],{"class":867},[324,57740,55121],{"class":734},[324,57742,868],{"class":867},[324,57744,57745],{"class":738},"`.slider-footer ul li:nth-child(${",[324,57747,1305],{"class":867},[324,57749,46288],{"class":863},[324,57751,25842],{"class":916},[324,57753,57754],{"class":738},"})`",[324,57756,57725],{"class":867},[324,57758,6063],{"class":734},[324,57760,868],{"class":867},[324,57762,56511],{"class":738},[324,57764,874],{"class":867},[324,57766,57767],{"class":326,"line":33495},[324,57768,488],{"emptyLinePlaceholder":487},[324,57770,57771,57773,57775],{"class":326,"line":33501},[324,57772,55257],{"class":867},[324,57774,7139],{"class":916},[324,57776,874],{"class":867},[324,57778,57779],{"class":326,"line":33517},[324,57780,488],{"emptyLinePlaceholder":487},[324,57782,57783,57785,57787],{"class":326,"line":33523},[324,57784,53139],{"class":867},[324,57786,52535],{"class":52022},[324,57788,52029],{"class":867},[324,57790,57791,57793,57795],{"class":326,"line":33537},[324,57792,52507],{"class":867},[324,57794,52522],{"class":52022},[324,57796,52029],{"class":867},[324,57798,57799],{"class":326,"line":33543},[324,57800,488],{"emptyLinePlaceholder":487},[324,57802,57803,57805,57807],{"class":326,"line":33558},[324,57804,52507],{"class":867},[324,57806,51357],{"class":52022},[324,57808,52029],{"class":867},[35,57810,57812],{"id":57811},"_317-重要知识点","3.1.7 重要知识点",[19,57814,57815,57816],{},"浏览器在渲染文本时， ",[116,57817,57818],{},"没有空格或换行符就没有“断行点”",[19,57820,57821],{},[48,57822],{"alt":50,"src":57823},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-105.png",[19,57825,57826],{},"让一些文字一直在浏览器打印输出的话，如果没有空格，就一直在浏览器一行内打印；当加上空格后，在浏览器一行内打印不开时就自动换行",[19,57828,57829],{},[48,57830],{"alt":50,"src":57831},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-106.png",[19,57833,57834],{},[48,57835],{"alt":50,"src":57836},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-107.png",[14,57838,57840],{"id":57839},"_32-dom事件基础","3.2 DOM事件基础",[35,57842,57844],{"id":57843},"_321-事件监听","3.2.1 事件监听",[19,57846,57847],{},[48,57848],{"alt":50,"src":57849},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-108.png",[19,57851,57852],{},"事件监听有响应的发生",[19,57854,57855],{},[48,57856],{"alt":50,"src":57857},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-109.png",[19,57859,57860],{},"不会立即执行,跟定时器差不多,定时器是经过了间隔时间再输出;定时器是当经历事件触发之后才会执行",[19,57862,57863],{},"对于有名函数,要执行的函数名后边不要加()",[35,57865,57867],{"id":57866},"_322-随机点名案例","3.2.2 随机点名案例",[316,57869,57871],{"className":51355,"code":57870,"language":51357,"meta":50,"style":50},"\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",[269,57872,57873,57883,57897,57901,57909,57923,57943,57955,57963,57969,57979,57989,57993,57997,58004,58015,58019,58023,58029,58041,58055,58065,58077,58090,58094,58098,58105,58109,58122,58134,58146,58150,58154,58158,58165,58175,58179,58183,58192,58204,58216,58231,58235,58243,58251,58255,58263,58276,58290,58303,58323,58331,58346,58366,58386,58394,58398,58406,58411,58447,58467,58472,58491,58496,58507,58512,58523,58528,58547,58562,58567,58593,58603,58612,58617,58633,58638,58643,58648,58663,58667,58671,58676,58695,58712,58720,58725,58740,58744,58748,58756,58764,58768],{"__ignoreMap":50},[324,57874,57875,57877,57879,57881],{"class":326,"line":327},[324,57876,52019],{"class":867},[324,57878,52023],{"class":52022},[324,57880,52026],{"class":734},[324,57882,52029],{"class":867},[324,57884,57885,57887,57889,57891,57893,57895],{"class":326,"line":203},[324,57886,1774],{"class":867},[324,57888,51357],{"class":52022},[324,57890,52038],{"class":734},[324,57892,913],{"class":867},[324,57894,52043],{"class":738},[324,57896,52029],{"class":867},[324,57898,57899],{"class":326,"line":338},[324,57900,488],{"emptyLinePlaceholder":487},[324,57902,57903,57905,57907],{"class":326,"line":344},[324,57904,1774],{"class":867},[324,57906,52056],{"class":52022},[324,57908,52029],{"class":867},[324,57910,57911,57913,57915,57917,57919,57921],{"class":326,"line":484},[324,57912,52866],{"class":867},[324,57914,52066],{"class":52022},[324,57916,52069],{"class":734},[324,57918,913],{"class":867},[324,57920,52074],{"class":738},[324,57922,52029],{"class":867},[324,57924,57925,57927,57929,57931,57933,57935,57937,57939,57941],{"class":326,"line":491},[324,57926,52866],{"class":867},[324,57928,52066],{"class":52022},[324,57930,15649],{"class":734},[324,57932,913],{"class":867},[324,57934,52113],{"class":738},[324,57936,52093],{"class":734},[324,57938,913],{"class":867},[324,57940,52120],{"class":738},[324,57942,52029],{"class":867},[324,57944,57945,57947,57949,57951,57953],{"class":326,"line":496},[324,57946,52866],{"class":867},[324,57948,52129],{"class":52022},[324,57950,52132],{"class":867},[324,57952,52129],{"class":52022},[324,57954,52029],{"class":867},[324,57956,57957,57959,57961],{"class":326,"line":502},[324,57958,52866],{"class":867},[324,57960,775],{"class":52022},[324,57962,52029],{"class":867},[324,57964,57965,57967],{"class":326,"line":508},[324,57966,7132],{"class":52022},[324,57968,16301],{"class":867},[324,57970,57971,57973,57975,57977],{"class":326,"line":514},[324,57972,55428],{"class":916},[324,57974,52159],{"class":867},[324,57976,1056],{"class":916},[324,57978,2025],{"class":867},[324,57980,57981,57983,57985,57987],{"class":326,"line":2343},[324,57982,55417],{"class":916},[324,57984,52159],{"class":867},[324,57986,1056],{"class":916},[324,57988,2025],{"class":867},[324,57990,57991],{"class":326,"line":2348},[324,57992,2917],{"class":867},[324,57994,57995],{"class":326,"line":2354},[324,57996,488],{"emptyLinePlaceholder":487},[324,57998,57999,58002],{"class":326,"line":2359},[324,58000,58001],{"class":52022},"    h2",[324,58003,16301],{"class":867},[324,58005,58006,58009,58011,58013],{"class":326,"line":2373},[324,58007,58008],{"class":916},"      text-align",[324,58010,52159],{"class":867},[324,58012,52314],{"class":916},[324,58014,2025],{"class":867},[324,58016,58017],{"class":326,"line":2378},[324,58018,2917],{"class":867},[324,58020,58021],{"class":326,"line":2384},[324,58022,488],{"emptyLinePlaceholder":487},[324,58024,58025,58027],{"class":326,"line":2405},[324,58026,55474],{"class":734},[324,58028,16301],{"class":867},[324,58030,58031,58033,58035,58037,58039],{"class":326,"line":2410},[324,58032,55493],{"class":916},[324,58034,52159],{"class":867},[324,58036,2270],{"class":916},[324,58038,52214],{"class":863},[324,58040,2025],{"class":867},[324,58042,58043,58045,58047,58049,58051,58053],{"class":326,"line":2424},[324,58044,55428],{"class":916},[324,58046,52159],{"class":867},[324,58048,1520],{"class":916},[324,58050,52214],{"class":863},[324,58052,52278],{"class":916},[324,58054,2025],{"class":867},[324,58056,58057,58059,58061,58063],{"class":326,"line":2429},[324,58058,55731],{"class":916},[324,58060,52159],{"class":867},[324,58062,52199],{"class":916},[324,58064,2025],{"class":867},[324,58066,58067,58069,58071,58073,58075],{"class":326,"line":2458},[324,58068,55644],{"class":916},[324,58070,52159],{"class":867},[324,58072,1689],{"class":916},[324,58074,52214],{"class":863},[324,58076,2025],{"class":867},[324,58078,58079,58082,58084,58086,58088],{"class":326,"line":2463},[324,58080,58081],{"class":916},"      line-height",[324,58083,52159],{"class":867},[324,58085,1265],{"class":916},[324,58087,52214],{"class":863},[324,58089,2025],{"class":867},[324,58091,58092],{"class":326,"line":2480},[324,58093,2917],{"class":867},[324,58095,58096],{"class":326,"line":2485},[324,58097,488],{"emptyLinePlaceholder":487},[324,58099,58100,58103],{"class":326,"line":2490},[324,58101,58102],{"class":734},"    .qs",[324,58104,16301],{"class":867},[324,58106,58107],{"class":326,"line":2495},[324,58108,488],{"emptyLinePlaceholder":487},[324,58110,58111,58113,58115,58118,58120],{"class":326,"line":2509},[324,58112,55493],{"class":916},[324,58114,52159],{"class":867},[324,58116,58117],{"class":916},"450",[324,58119,52214],{"class":863},[324,58121,2025],{"class":867},[324,58123,58124,58126,58128,58130,58132],{"class":326,"line":2514},[324,58125,55507],{"class":916},[324,58127,52159],{"class":867},[324,58129,1265],{"class":916},[324,58131,52214],{"class":863},[324,58133,2025],{"class":867},[324,58135,58136,58139,58141,58144],{"class":326,"line":3306},[324,58137,58138],{"class":916},"      color",[324,58140,52159],{"class":867},[324,58142,58143],{"class":916},"red",[324,58145,2025],{"class":867},[324,58147,58148],{"class":326,"line":3320},[324,58149,488],{"emptyLinePlaceholder":487},[324,58151,58152],{"class":326,"line":3328},[324,58153,2917],{"class":867},[324,58155,58156],{"class":326,"line":3333},[324,58157,488],{"emptyLinePlaceholder":487},[324,58159,58160,58163],{"class":326,"line":3339},[324,58161,58162],{"class":734},"    .btns",[324,58164,16301],{"class":867},[324,58166,58167,58169,58171,58173],{"class":326,"line":3345},[324,58168,58008],{"class":916},[324,58170,52159],{"class":867},[324,58172,52314],{"class":916},[324,58174,2025],{"class":867},[324,58176,58177],{"class":326,"line":3350},[324,58178,2917],{"class":867},[324,58180,58181],{"class":326,"line":8677},[324,58182,488],{"emptyLinePlaceholder":487},[324,58184,58185,58187,58190],{"class":326,"line":8701},[324,58186,58162],{"class":734},[324,58188,58189],{"class":52022}," button",[324,58191,16301],{"class":867},[324,58193,58194,58196,58198,58200,58202],{"class":326,"line":8706},[324,58195,55493],{"class":916},[324,58197,52159],{"class":867},[324,58199,1681],{"class":916},[324,58201,52214],{"class":863},[324,58203,2025],{"class":867},[324,58205,58206,58208,58210,58212,58214],{"class":326,"line":8712},[324,58207,55507],{"class":916},[324,58209,52159],{"class":867},[324,58211,1137],{"class":916},[324,58213,52214],{"class":863},[324,58215,2025],{"class":867},[324,58217,58218,58220,58222,58224,58227,58229],{"class":326,"line":8739},[324,58219,55428],{"class":916},[324,58221,52159],{"class":867},[324,58223,1056],{"class":916},[324,58225,58226],{"class":916}," 50",[324,58228,52214],{"class":863},[324,58230,2025],{"class":867},[324,58232,58233],{"class":326,"line":8744},[324,58234,2917],{"class":867},[324,58236,58237,58239,58241],{"class":326,"line":8750},[324,58238,53139],{"class":867},[324,58240,775],{"class":52022},[324,58242,52029],{"class":867},[324,58244,58245,58247,58249],{"class":326,"line":8762},[324,58246,52507],{"class":867},[324,58248,52056],{"class":52022},[324,58250,52029],{"class":867},[324,58252,58253],{"class":326,"line":8774},[324,58254,488],{"emptyLinePlaceholder":487},[324,58256,58257,58259,58261],{"class":326,"line":8786},[324,58258,1774],{"class":867},[324,58260,52522],{"class":52022},[324,58262,52029],{"class":867},[324,58264,58265,58267,58269,58272,58274],{"class":326,"line":10445},[324,58266,52866],{"class":867},[324,58268,14],{"class":52022},[324,58270,58271],{"class":867},">随机点名\u003C\u002F",[324,58273,14],{"class":52022},[324,58275,52029],{"class":867},[324,58277,58278,58280,58282,58284,58286,58288],{"class":326,"line":10470},[324,58279,52866],{"class":867},[324,58281,52333],{"class":52022},[324,58283,54208],{"class":734},[324,58285,913],{"class":867},[324,58287,54213],{"class":738},[324,58289,52029],{"class":867},[324,58291,58292,58294,58296,58299,58301],{"class":326,"line":10493},[324,58293,52063],{"class":867},[324,58295,324],{"class":52022},[324,58297,58298],{"class":867},">名字是：\u003C\u002F",[324,58300,324],{"class":52022},[324,58302,52029],{"class":867},[324,58304,58305,58307,58309,58311,58313,58316,58319,58321],{"class":326,"line":10517},[324,58306,52063],{"class":867},[324,58308,52333],{"class":52022},[324,58310,54208],{"class":734},[324,58312,913],{"class":867},[324,58314,58315],{"class":738},"\"qs\"",[324,58317,58318],{"class":867},">这里显示姓名\u003C\u002F",[324,58320,52333],{"class":52022},[324,58322,52029],{"class":867},[324,58324,58325,58327,58329],{"class":326,"line":10522},[324,58326,53139],{"class":867},[324,58328,52333],{"class":52022},[324,58330,52029],{"class":867},[324,58332,58333,58335,58337,58339,58341,58344],{"class":326,"line":10527},[324,58334,52866],{"class":867},[324,58336,52333],{"class":52022},[324,58338,54208],{"class":734},[324,58340,913],{"class":867},[324,58342,58343],{"class":738},"\"btns\"",[324,58345,52029],{"class":867},[324,58347,58348,58350,58352,58354,58356,58359,58362,58364],{"class":326,"line":10532},[324,58349,52063],{"class":867},[324,58351,54609],{"class":52022},[324,58353,54208],{"class":734},[324,58355,913],{"class":867},[324,58357,58358],{"class":738},"\"start\"",[324,58360,58361],{"class":867},">开始\u003C\u002F",[324,58363,54609],{"class":52022},[324,58365,52029],{"class":867},[324,58367,58368,58370,58372,58374,58376,58379,58382,58384],{"class":326,"line":10541},[324,58369,52063],{"class":867},[324,58371,54609],{"class":52022},[324,58373,54208],{"class":734},[324,58375,913],{"class":867},[324,58377,58378],{"class":738},"\"end\"",[324,58380,58381],{"class":867},">结束\u003C\u002F",[324,58383,54609],{"class":52022},[324,58385,52029],{"class":867},[324,58387,58388,58390,58392],{"class":326,"line":10546},[324,58389,53139],{"class":867},[324,58391,52333],{"class":52022},[324,58393,52029],{"class":867},[324,58395,58396],{"class":326,"line":10552},[324,58397,488],{"emptyLinePlaceholder":487},[324,58399,58400,58402,58404],{"class":326,"line":10573},[324,58401,52866],{"class":867},[324,58403,52535],{"class":52022},[324,58405,52029],{"class":867},[324,58407,58408],{"class":326,"line":10579},[324,58409,58410],{"class":772},"    \u002F\u002F 数据数组\n",[324,58412,58413,58415,58418,58420,58422,58425,58427,58430,58432,58435,58437,58440,58442,58445],{"class":326,"line":10593},[324,58414,11950],{"class":863},[324,58416,58417],{"class":916}," arr",[324,58419,14293],{"class":863},[324,58421,52948],{"class":867},[324,58423,58424],{"class":738},"'马超'",[324,58426,13164],{"class":867},[324,58428,58429],{"class":738},"'黄忠'",[324,58431,13164],{"class":867},[324,58433,58434],{"class":738},"'赵云'",[324,58436,13164],{"class":867},[324,58438,58439],{"class":738},"'关羽'",[324,58441,13164],{"class":867},[324,58443,58444],{"class":738},"'张飞'",[324,58446,33968],{"class":867},[324,58448,58449,58451,58454,58456,58458,58460,58462,58465],{"class":326,"line":10599},[324,58450,11950],{"class":863},[324,58452,58453],{"class":916}," qs",[324,58455,14293],{"class":863},[324,58457,55118],{"class":867},[324,58459,55121],{"class":734},[324,58461,868],{"class":867},[324,58463,58464],{"class":738},"'.qs'",[324,58466,874],{"class":867},[324,58468,58469],{"class":326,"line":10626},[324,58470,58471],{"class":772},"    \u002F\u002F 1.业务1.开始按钮模块\n",[324,58473,58474,58476,58478,58480,58482,58484,58486,58489],{"class":326,"line":10635},[324,58475,11950],{"class":863},[324,58477,4913],{"class":916},[324,58479,14293],{"class":863},[324,58481,55118],{"class":867},[324,58483,55121],{"class":734},[324,58485,868],{"class":867},[324,58487,58488],{"class":738},"'.start'",[324,58490,874],{"class":867},[324,58492,58493],{"class":326,"line":10641},[324,58494,58495],{"class":772},"    \u002F\u002F 定义全局变量, 如果在函数里边的话就是局部变量, 另一个函数无法使用\n",[324,58497,58498,58500,58503,58505],{"class":326,"line":10649},[324,58499,52941],{"class":863},[324,58501,58502],{"class":867}," timerId ",[324,58504,913],{"class":863},[324,58506,48055],{"class":916},[324,58508,58509],{"class":326,"line":10654},[324,58510,58511],{"class":772},"    \u002F\u002F 随机号要全局变量\n",[324,58513,58514,58516,58519,58521],{"class":326,"line":17333},[324,58515,52941],{"class":863},[324,58517,58518],{"class":867}," random ",[324,58520,913],{"class":863},[324,58522,48055],{"class":916},[324,58524,58525],{"class":326,"line":17339},[324,58526,58527],{"class":772},"    \u002F\u002F 1.1 添加点击事件\n",[324,58529,58530,58533,58536,58538,58541,58543,58545],{"class":326,"line":17362},[324,58531,58532],{"class":867},"    start.",[324,58534,58535],{"class":734},"addEventListener",[324,58537,868],{"class":867},[324,58539,58540],{"class":738},"'click'",[324,58542,13164],{"class":867},[324,58544,55171],{"class":863},[324,58546,55174],{"class":867},[324,58548,58549,58552,58554,58556,58558,58560],{"class":326,"line":17368},[324,58550,58551],{"class":867},"      timerId ",[324,58553,913],{"class":863},[324,58555,55166],{"class":734},[324,58557,868],{"class":867},[324,58559,55171],{"class":863},[324,58561,55174],{"class":867},[324,58563,58564],{"class":326,"line":17391},[324,58565,58566],{"class":772},"        \u002F\u002F 随机数\n",[324,58568,58569,58572,58574,58577,58580,58583,58585,58587,58589,58591],{"class":326,"line":17405},[324,58570,58571],{"class":867},"        random ",[324,58573,913],{"class":863},[324,58575,58576],{"class":734}," parseInt",[324,58578,58579],{"class":867},"(Math.",[324,58581,58582],{"class":734},"random",[324,58584,13779],{"class":867},[324,58586,1319],{"class":863},[324,58588,52687],{"class":867},[324,58590,52690],{"class":916},[324,58592,874],{"class":867},[324,58594,58595,58598,58600],{"class":326,"line":17425},[324,58596,58597],{"class":867},"        qs.innerHTML ",[324,58599,913],{"class":863},[324,58601,58602],{"class":867}," arr[random]\n",[324,58604,58605,58608,58610],{"class":326,"line":17431},[324,58606,58607],{"class":867},"      }, ",[324,58609,1137],{"class":916},[324,58611,874],{"class":867},[324,58613,58614],{"class":326,"line":17442},[324,58615,58616],{"class":772},"      \u002F\u002F 如果数组里面只有一个值了, 不需要抽取了, 让两个按钮禁用就可以\n",[324,58618,58619,58621,58624,58626,58629,58631],{"class":326,"line":17465},[324,58620,55202],{"class":863},[324,58622,58623],{"class":867}," (arr.",[324,58625,52690],{"class":916},[324,58627,58628],{"class":863}," ===",[324,58630,25842],{"class":916},[324,58632,13171],{"class":867},[324,58634,58635],{"class":326,"line":17487},[324,58636,58637],{"class":772},"        \u002F\u002F start.disabled = true\n",[324,58639,58640],{"class":326,"line":17492},[324,58641,58642],{"class":772},"        \u002F\u002F end.disabled = true\n",[324,58644,58645],{"class":326,"line":17498},[324,58646,58647],{"class":772},"        \u002F\u002F 可以合起来写\n",[324,58649,58650,58653,58655,58658,58660],{"class":326,"line":17512},[324,58651,58652],{"class":867},"        start.disabled ",[324,58654,913],{"class":863},[324,58656,58657],{"class":867}," end.disabled ",[324,58659,913],{"class":863},[324,58661,58662],{"class":916}," true\n",[324,58664,58665],{"class":326,"line":17525},[324,58666,53120],{"class":867},[324,58668,58669],{"class":326,"line":17530},[324,58670,34183],{"class":867},[324,58672,58673],{"class":326,"line":17544},[324,58674,58675],{"class":772},"    \u002F\u002F 1.2 关闭按钮模块\n",[324,58677,58678,58680,58682,58684,58686,58688,58690,58693],{"class":326,"line":17549},[324,58679,11950],{"class":863},[324,58681,4929],{"class":916},[324,58683,14293],{"class":863},[324,58685,55118],{"class":867},[324,58687,55121],{"class":734},[324,58689,868],{"class":867},[324,58691,58692],{"class":738},"'.end'",[324,58694,874],{"class":867},[324,58696,58697,58700,58702,58704,58706,58708,58710],{"class":326,"line":17555},[324,58698,58699],{"class":867},"    end.",[324,58701,58535],{"class":734},[324,58703,868],{"class":867},[324,58705,58540],{"class":738},[324,58707,13164],{"class":867},[324,58709,55171],{"class":863},[324,58711,55174],{"class":867},[324,58713,58714,58717],{"class":326,"line":17560},[324,58715,58716],{"class":734},"      clearInterval",[324,58718,58719],{"class":867},"(timerId)\n",[324,58721,58722],{"class":326,"line":17574},[324,58723,58724],{"class":772},"      \u002F\u002F 结束了.可以删除掉当前抽取的那个数组元素\n",[324,58726,58727,58730,58733,58736,58738],{"class":326,"line":17579},[324,58728,58729],{"class":867},"      arr.",[324,58731,58732],{"class":734},"splice",[324,58734,58735],{"class":867},"(random, ",[324,58737,1082],{"class":916},[324,58739,874],{"class":867},[324,58741,58742],{"class":326,"line":17584},[324,58743,34183],{"class":867},[324,58745,58746],{"class":326,"line":17598},[324,58747,488],{"emptyLinePlaceholder":487},[324,58749,58750,58752,58754],{"class":326,"line":17610},[324,58751,53139],{"class":867},[324,58753,52535],{"class":52022},[324,58755,52029],{"class":867},[324,58757,58758,58760,58762],{"class":326,"line":17615},[324,58759,52507],{"class":867},[324,58761,52522],{"class":52022},[324,58763,52029],{"class":867},[324,58765,58766],{"class":326,"line":17628},[324,58767,488],{"emptyLinePlaceholder":487},[324,58769,58770,58772,58774],{"class":326,"line":17633},[324,58771,52507],{"class":867},[324,58773,51357],{"class":52022},[324,58775,52029],{"class":867},[19,58777,58778],{},"函数中声明的变量是局部作用变量,另一个函数是无法使用的,想使用的话,就将这个变量改为全局变量",[35,58780,58782],{"id":58781},"_323-垃圾回收机制","3.2.3 垃圾回收机制",[316,58784,58786],{"className":51355,"code":58785,"language":51357,"meta":50,"style":50},"\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",[269,58787,58788,58798,58812,58816,58824,58838,58858,58870,58878,58882,58890,58902,58910,58929,58946,58962,58972,58976,58984,58992,58996],{"__ignoreMap":50},[324,58789,58790,58792,58794,58796],{"class":326,"line":327},[324,58791,52019],{"class":867},[324,58793,52023],{"class":52022},[324,58795,52026],{"class":734},[324,58797,52029],{"class":867},[324,58799,58800,58802,58804,58806,58808,58810],{"class":326,"line":203},[324,58801,1774],{"class":867},[324,58803,51357],{"class":52022},[324,58805,52038],{"class":734},[324,58807,913],{"class":867},[324,58809,52043],{"class":738},[324,58811,52029],{"class":867},[324,58813,58814],{"class":326,"line":338},[324,58815,488],{"emptyLinePlaceholder":487},[324,58817,58818,58820,58822],{"class":326,"line":344},[324,58819,1774],{"class":867},[324,58821,52056],{"class":52022},[324,58823,52029],{"class":867},[324,58825,58826,58828,58830,58832,58834,58836],{"class":326,"line":484},[324,58827,52866],{"class":867},[324,58829,52066],{"class":52022},[324,58831,52069],{"class":734},[324,58833,913],{"class":867},[324,58835,52074],{"class":738},[324,58837,52029],{"class":867},[324,58839,58840,58842,58844,58846,58848,58850,58852,58854,58856],{"class":326,"line":491},[324,58841,52866],{"class":867},[324,58843,52066],{"class":52022},[324,58845,15649],{"class":734},[324,58847,913],{"class":867},[324,58849,52113],{"class":738},[324,58851,52093],{"class":734},[324,58853,913],{"class":867},[324,58855,52120],{"class":738},[324,58857,52029],{"class":867},[324,58859,58860,58862,58864,58866,58868],{"class":326,"line":496},[324,58861,52866],{"class":867},[324,58863,52129],{"class":52022},[324,58865,52132],{"class":867},[324,58867,52129],{"class":52022},[324,58869,52029],{"class":867},[324,58871,58872,58874,58876],{"class":326,"line":502},[324,58873,52507],{"class":867},[324,58875,52056],{"class":52022},[324,58877,52029],{"class":867},[324,58879,58880],{"class":326,"line":508},[324,58881,488],{"emptyLinePlaceholder":487},[324,58883,58884,58886,58888],{"class":326,"line":514},[324,58885,1774],{"class":867},[324,58887,52522],{"class":52022},[324,58889,52029],{"class":867},[324,58891,58892,58894,58896,58898,58900],{"class":326,"line":2343},[324,58893,52866],{"class":867},[324,58895,54609],{"class":52022},[324,58897,54615],{"class":867},[324,58899,54609],{"class":52022},[324,58901,52029],{"class":867},[324,58903,58904,58906,58908],{"class":326,"line":2348},[324,58905,52866],{"class":867},[324,58907,52535],{"class":52022},[324,58909,52029],{"class":867},[324,58911,58912,58914,58916,58918,58920,58922,58924,58927],{"class":326,"line":2354},[324,58913,11950],{"class":863},[324,58915,55113],{"class":916},[324,58917,14293],{"class":863},[324,58919,55118],{"class":867},[324,58921,55121],{"class":734},[324,58923,868],{"class":867},[324,58925,58926],{"class":738},"'button'",[324,58928,874],{"class":867},[324,58930,58931,58934,58936,58938,58940,58942,58944],{"class":326,"line":2359},[324,58932,58933],{"class":867},"    btn.",[324,58935,58535],{"class":734},[324,58937,868],{"class":867},[324,58939,58540],{"class":738},[324,58941,13164],{"class":867},[324,58943,55171],{"class":863},[324,58945,55174],{"class":867},[324,58947,58948,58951,58953,58955,58958,58960],{"class":326,"line":2373},[324,58949,58950],{"class":863},"      const",[324,58952,2970],{"class":916},[324,58954,14293],{"class":863},[324,58956,58957],{"class":867}," Math.",[324,58959,58582],{"class":734},[324,58961,2706],{"class":867},[324,58963,58964,58967,58970],{"class":326,"line":2378},[324,58965,58966],{"class":867},"      console.",[324,58968,58969],{"class":734},"log",[324,58971,881],{"class":867},[324,58973,58974],{"class":326,"line":2384},[324,58975,34183],{"class":867},[324,58977,58978,58980,58982],{"class":326,"line":2405},[324,58979,53139],{"class":867},[324,58981,52535],{"class":52022},[324,58983,52029],{"class":867},[324,58985,58986,58988,58990],{"class":326,"line":2410},[324,58987,52507],{"class":867},[324,58989,52522],{"class":52022},[324,58991,52029],{"class":867},[324,58993,58994],{"class":326,"line":2424},[324,58995,488],{"emptyLinePlaceholder":487},[324,58997,58998,59000,59002],{"class":326,"line":2429},[324,58999,52507],{"class":867},[324,59001,51357],{"class":52022},[324,59003,52029],{"class":867},[19,59005,59006],{},"当对按钮进行点击事件,就会执行函数,执行完之后这个变量就没用了,js有自动回收机制,相当于把这两行代码给删除了,当再次点击时,会创立一个新的变量出来,这个新变量与之前的那个是不同的,之前那个压根就没了,被回了,所以写const没事",[19,59008,59009],{},"常量不可以重新赋值",[19,59011,59012],{},"函数内部的变量和定义的常量在函数执行之后会有垃圾回收机制",[316,59014,59016],{"className":51355,"code":59015,"language":51357,"meta":50,"style":50},"\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",[269,59017,59018,59028,59042,59046,59054,59068,59088,59100,59108,59112,59120,59132,59140,59151,59169,59185,59199,59207,59211,59219,59227,59231],{"__ignoreMap":50},[324,59019,59020,59022,59024,59026],{"class":326,"line":327},[324,59021,52019],{"class":867},[324,59023,52023],{"class":52022},[324,59025,52026],{"class":734},[324,59027,52029],{"class":867},[324,59029,59030,59032,59034,59036,59038,59040],{"class":326,"line":203},[324,59031,1774],{"class":867},[324,59033,51357],{"class":52022},[324,59035,52038],{"class":734},[324,59037,913],{"class":867},[324,59039,52043],{"class":738},[324,59041,52029],{"class":867},[324,59043,59044],{"class":326,"line":338},[324,59045,488],{"emptyLinePlaceholder":487},[324,59047,59048,59050,59052],{"class":326,"line":344},[324,59049,1774],{"class":867},[324,59051,52056],{"class":52022},[324,59053,52029],{"class":867},[324,59055,59056,59058,59060,59062,59064,59066],{"class":326,"line":484},[324,59057,52866],{"class":867},[324,59059,52066],{"class":52022},[324,59061,52069],{"class":734},[324,59063,913],{"class":867},[324,59065,52074],{"class":738},[324,59067,52029],{"class":867},[324,59069,59070,59072,59074,59076,59078,59080,59082,59084,59086],{"class":326,"line":491},[324,59071,52866],{"class":867},[324,59073,52066],{"class":52022},[324,59075,15649],{"class":734},[324,59077,913],{"class":867},[324,59079,52113],{"class":738},[324,59081,52093],{"class":734},[324,59083,913],{"class":867},[324,59085,52120],{"class":738},[324,59087,52029],{"class":867},[324,59089,59090,59092,59094,59096,59098],{"class":326,"line":496},[324,59091,52866],{"class":867},[324,59093,52129],{"class":52022},[324,59095,52132],{"class":867},[324,59097,52129],{"class":52022},[324,59099,52029],{"class":867},[324,59101,59102,59104,59106],{"class":326,"line":502},[324,59103,52507],{"class":867},[324,59105,52056],{"class":52022},[324,59107,52029],{"class":867},[324,59109,59110],{"class":326,"line":508},[324,59111,488],{"emptyLinePlaceholder":487},[324,59113,59114,59116,59118],{"class":326,"line":514},[324,59115,1774],{"class":867},[324,59117,52522],{"class":52022},[324,59119,52029],{"class":867},[324,59121,59122,59124,59126,59128,59130],{"class":326,"line":2343},[324,59123,52866],{"class":867},[324,59125,54609],{"class":52022},[324,59127,54615],{"class":867},[324,59129,54609],{"class":52022},[324,59131,52029],{"class":867},[324,59133,59134,59136,59138],{"class":326,"line":2348},[324,59135,52866],{"class":867},[324,59137,52535],{"class":52022},[324,59139,52029],{"class":867},[324,59141,59142,59144,59146,59148],{"class":326,"line":2354},[324,59143,11950],{"class":863},[324,59145,2970],{"class":916},[324,59147,14293],{"class":863},[324,59149,59150],{"class":916}," 10\n",[324,59152,59153,59155,59157,59159,59161,59163,59165,59167],{"class":326,"line":2359},[324,59154,11950],{"class":863},[324,59156,55113],{"class":916},[324,59158,14293],{"class":863},[324,59160,55118],{"class":867},[324,59162,55121],{"class":734},[324,59164,868],{"class":867},[324,59166,58926],{"class":738},[324,59168,874],{"class":867},[324,59170,59171,59173,59175,59177,59179,59181,59183],{"class":326,"line":2373},[324,59172,58933],{"class":867},[324,59174,58535],{"class":734},[324,59176,868],{"class":867},[324,59178,58540],{"class":738},[324,59180,13164],{"class":867},[324,59182,55171],{"class":863},[324,59184,55174],{"class":867},[324,59186,59187,59189,59191,59193,59195,59197],{"class":326,"line":2378},[324,59188,58950],{"class":863},[324,59190,2970],{"class":916},[324,59192,14293],{"class":863},[324,59194,58957],{"class":867},[324,59196,58582],{"class":734},[324,59198,2706],{"class":867},[324,59200,59201,59203,59205],{"class":326,"line":2384},[324,59202,58966],{"class":867},[324,59204,58969],{"class":734},[324,59206,881],{"class":867},[324,59208,59209],{"class":326,"line":2405},[324,59210,34183],{"class":867},[324,59212,59213,59215,59217],{"class":326,"line":2410},[324,59214,53139],{"class":867},[324,59216,52535],{"class":52022},[324,59218,52029],{"class":867},[324,59220,59221,59223,59225],{"class":326,"line":2424},[324,59222,52507],{"class":867},[324,59224,52522],{"class":52022},[324,59226,52029],{"class":867},[324,59228,59229],{"class":326,"line":2429},[324,59230,488],{"emptyLinePlaceholder":487},[324,59232,59233,59235,59237],{"class":326,"line":2458},[324,59234,52507],{"class":867},[324,59236,51357],{"class":52022},[324,59238,52029],{"class":867},[19,59240,59241],{},"不会报错,num所述的作用域不同,一个在全局作用域,一个在局部作用域",[316,59243,59245],{"className":51355,"code":59244,"language":51357,"meta":50,"style":50},"\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",[269,59246,59247,59257,59271,59275,59283,59297,59317,59329,59337,59341,59349,59361,59369,59379,59397,59413,59426,59434,59438,59446,59454,59458],{"__ignoreMap":50},[324,59248,59249,59251,59253,59255],{"class":326,"line":327},[324,59250,52019],{"class":867},[324,59252,52023],{"class":52022},[324,59254,52026],{"class":734},[324,59256,52029],{"class":867},[324,59258,59259,59261,59263,59265,59267,59269],{"class":326,"line":203},[324,59260,1774],{"class":867},[324,59262,51357],{"class":52022},[324,59264,52038],{"class":734},[324,59266,913],{"class":867},[324,59268,52043],{"class":738},[324,59270,52029],{"class":867},[324,59272,59273],{"class":326,"line":338},[324,59274,488],{"emptyLinePlaceholder":487},[324,59276,59277,59279,59281],{"class":326,"line":344},[324,59278,1774],{"class":867},[324,59280,52056],{"class":52022},[324,59282,52029],{"class":867},[324,59284,59285,59287,59289,59291,59293,59295],{"class":326,"line":484},[324,59286,52866],{"class":867},[324,59288,52066],{"class":52022},[324,59290,52069],{"class":734},[324,59292,913],{"class":867},[324,59294,52074],{"class":738},[324,59296,52029],{"class":867},[324,59298,59299,59301,59303,59305,59307,59309,59311,59313,59315],{"class":326,"line":491},[324,59300,52866],{"class":867},[324,59302,52066],{"class":52022},[324,59304,15649],{"class":734},[324,59306,913],{"class":867},[324,59308,52113],{"class":738},[324,59310,52093],{"class":734},[324,59312,913],{"class":867},[324,59314,52120],{"class":738},[324,59316,52029],{"class":867},[324,59318,59319,59321,59323,59325,59327],{"class":326,"line":496},[324,59320,52866],{"class":867},[324,59322,52129],{"class":52022},[324,59324,52132],{"class":867},[324,59326,52129],{"class":52022},[324,59328,52029],{"class":867},[324,59330,59331,59333,59335],{"class":326,"line":502},[324,59332,52507],{"class":867},[324,59334,52056],{"class":52022},[324,59336,52029],{"class":867},[324,59338,59339],{"class":326,"line":508},[324,59340,488],{"emptyLinePlaceholder":487},[324,59342,59343,59345,59347],{"class":326,"line":514},[324,59344,1774],{"class":867},[324,59346,52522],{"class":52022},[324,59348,52029],{"class":867},[324,59350,59351,59353,59355,59357,59359],{"class":326,"line":2343},[324,59352,52866],{"class":867},[324,59354,54609],{"class":52022},[324,59356,54615],{"class":867},[324,59358,54609],{"class":52022},[324,59360,52029],{"class":867},[324,59362,59363,59365,59367],{"class":326,"line":2348},[324,59364,52866],{"class":867},[324,59366,52535],{"class":52022},[324,59368,52029],{"class":867},[324,59370,59371,59373,59375,59377],{"class":326,"line":2354},[324,59372,11950],{"class":863},[324,59374,2970],{"class":916},[324,59376,14293],{"class":863},[324,59378,59150],{"class":916},[324,59380,59381,59383,59385,59387,59389,59391,59393,59395],{"class":326,"line":2359},[324,59382,11950],{"class":863},[324,59384,55113],{"class":916},[324,59386,14293],{"class":863},[324,59388,55118],{"class":867},[324,59390,55121],{"class":734},[324,59392,868],{"class":867},[324,59394,58926],{"class":738},[324,59396,874],{"class":867},[324,59398,59399,59401,59403,59405,59407,59409,59411],{"class":326,"line":2373},[324,59400,58933],{"class":867},[324,59402,58535],{"class":734},[324,59404,868],{"class":867},[324,59406,58540],{"class":738},[324,59408,13164],{"class":867},[324,59410,55171],{"class":863},[324,59412,55174],{"class":867},[324,59414,59415,59418,59420,59422,59424],{"class":326,"line":2378},[324,59416,59417],{"class":867},"      num ",[324,59419,913],{"class":863},[324,59421,58957],{"class":867},[324,59423,58582],{"class":734},[324,59425,2706],{"class":867},[324,59427,59428,59430,59432],{"class":326,"line":2384},[324,59429,58966],{"class":867},[324,59431,58969],{"class":734},[324,59433,881],{"class":867},[324,59435,59436],{"class":326,"line":2405},[324,59437,34183],{"class":867},[324,59439,59440,59442,59444],{"class":326,"line":2410},[324,59441,53139],{"class":867},[324,59443,52535],{"class":52022},[324,59445,52029],{"class":867},[324,59447,59448,59450,59452],{"class":326,"line":2424},[324,59449,52507],{"class":867},[324,59451,52522],{"class":52022},[324,59453,52029],{"class":867},[324,59455,59456],{"class":326,"line":2429},[324,59457,488],{"emptyLinePlaceholder":487},[324,59459,59460,59462,59464],{"class":326,"line":2458},[324,59461,52507],{"class":867},[324,59463,51357],{"class":52022},[324,59465,52029],{"class":867},[19,59467,59468],{},"此时报错,对全局重新赋值,肯定不对,出错!!!",[35,59470,59472],{"id":59471},"_324-事件监听版本","3.2.4 事件监听版本",[19,59474,59475],{},[48,59476],{"alt":50,"src":59477},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-110.png",[19,59479,59480],{},"DOM L0和DOM L1都是用的:事件源.on事件=function(){}",[19,59482,59483],{},"这种方式会覆盖前边的事件监听:",[316,59485,59487],{"className":51355,"code":59486,"language":51357,"meta":50,"style":50},"\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",[269,59488,59489,59499,59513,59517,59525,59539,59559,59571,59579,59583,59591,59603,59611,59629,59643,59654,59658,59670,59680,59684,59692,59700,59704],{"__ignoreMap":50},[324,59490,59491,59493,59495,59497],{"class":326,"line":327},[324,59492,52019],{"class":867},[324,59494,52023],{"class":52022},[324,59496,52026],{"class":734},[324,59498,52029],{"class":867},[324,59500,59501,59503,59505,59507,59509,59511],{"class":326,"line":203},[324,59502,1774],{"class":867},[324,59504,51357],{"class":52022},[324,59506,52038],{"class":734},[324,59508,913],{"class":867},[324,59510,52043],{"class":738},[324,59512,52029],{"class":867},[324,59514,59515],{"class":326,"line":338},[324,59516,488],{"emptyLinePlaceholder":487},[324,59518,59519,59521,59523],{"class":326,"line":344},[324,59520,1774],{"class":867},[324,59522,52056],{"class":52022},[324,59524,52029],{"class":867},[324,59526,59527,59529,59531,59533,59535,59537],{"class":326,"line":484},[324,59528,52866],{"class":867},[324,59530,52066],{"class":52022},[324,59532,52069],{"class":734},[324,59534,913],{"class":867},[324,59536,52074],{"class":738},[324,59538,52029],{"class":867},[324,59540,59541,59543,59545,59547,59549,59551,59553,59555,59557],{"class":326,"line":491},[324,59542,52866],{"class":867},[324,59544,52066],{"class":52022},[324,59546,15649],{"class":734},[324,59548,913],{"class":867},[324,59550,52113],{"class":738},[324,59552,52093],{"class":734},[324,59554,913],{"class":867},[324,59556,52120],{"class":738},[324,59558,52029],{"class":867},[324,59560,59561,59563,59565,59567,59569],{"class":326,"line":496},[324,59562,52866],{"class":867},[324,59564,52129],{"class":52022},[324,59566,52132],{"class":867},[324,59568,52129],{"class":52022},[324,59570,52029],{"class":867},[324,59572,59573,59575,59577],{"class":326,"line":502},[324,59574,52507],{"class":867},[324,59576,52056],{"class":52022},[324,59578,52029],{"class":867},[324,59580,59581],{"class":326,"line":508},[324,59582,488],{"emptyLinePlaceholder":487},[324,59584,59585,59587,59589],{"class":326,"line":514},[324,59586,1774],{"class":867},[324,59588,52522],{"class":52022},[324,59590,52029],{"class":867},[324,59592,59593,59595,59597,59599,59601],{"class":326,"line":2343},[324,59594,52866],{"class":867},[324,59596,54609],{"class":52022},[324,59598,54615],{"class":867},[324,59600,54609],{"class":52022},[324,59602,52029],{"class":867},[324,59604,59605,59607,59609],{"class":326,"line":2348},[324,59606,52866],{"class":867},[324,59608,52535],{"class":52022},[324,59610,52029],{"class":867},[324,59612,59613,59615,59617,59619,59621,59623,59625,59627],{"class":326,"line":2354},[324,59614,11950],{"class":863},[324,59616,55113],{"class":916},[324,59618,14293],{"class":863},[324,59620,55118],{"class":867},[324,59622,55121],{"class":734},[324,59624,868],{"class":867},[324,59626,58926],{"class":738},[324,59628,874],{"class":867},[324,59630,59631,59633,59636,59638,59641],{"class":326,"line":2359},[324,59632,58933],{"class":867},[324,59634,59635],{"class":734},"onclick",[324,59637,14293],{"class":863},[324,59639,59640],{"class":863}," function",[324,59642,55174],{"class":867},[324,59644,59645,59648,59650,59652],{"class":326,"line":2373},[324,59646,59647],{"class":734},"      alert",[324,59649,868],{"class":867},[324,59651,1336],{"class":916},[324,59653,874],{"class":867},[324,59655,59656],{"class":326,"line":2378},[324,59657,2917],{"class":867},[324,59659,59660,59662,59664,59666,59668],{"class":326,"line":2384},[324,59661,58933],{"class":867},[324,59663,59635],{"class":734},[324,59665,14293],{"class":863},[324,59667,59640],{"class":863},[324,59669,55174],{"class":867},[324,59671,59672,59674,59676,59678],{"class":326,"line":2405},[324,59673,59647],{"class":734},[324,59675,868],{"class":867},[324,59677,1614],{"class":916},[324,59679,874],{"class":867},[324,59681,59682],{"class":326,"line":2410},[324,59683,2917],{"class":867},[324,59685,59686,59688,59690],{"class":326,"line":2424},[324,59687,53139],{"class":867},[324,59689,52535],{"class":52022},[324,59691,52029],{"class":867},[324,59693,59694,59696,59698],{"class":326,"line":2429},[324,59695,52507],{"class":867},[324,59697,52522],{"class":52022},[324,59699,52029],{"class":867},[324,59701,59702],{"class":326,"line":2458},[324,59703,488],{"emptyLinePlaceholder":487},[324,59705,59706,59708,59710],{"class":326,"line":2463},[324,59707,52507],{"class":867},[324,59709,51357],{"class":52022},[324,59711,52029],{"class":867},[19,59713,59714],{},"只要点击就输出结果为22,前边11被覆盖了",[316,59716,59718],{"className":51355,"code":59717,"language":51357,"meta":50,"style":50},"  btn.addEventListener('click', function () {\n      alert(11)\n    })\n    btn.addEventListener('click', function () {\n      alert(22)\n    })\n",[269,59719,59720,59725,59730,59734,59739,59744],{"__ignoreMap":50},[324,59721,59722],{"class":326,"line":327},[324,59723,59724],{"class":867},"  btn.addEventListener('click', function () {\n",[324,59726,59727],{"class":326,"line":203},[324,59728,59729],{"class":867},"      alert(11)\n",[324,59731,59732],{"class":326,"line":338},[324,59733,34183],{"class":867},[324,59735,59736],{"class":326,"line":344},[324,59737,59738],{"class":867},"    btn.addEventListener('click', function () {\n",[324,59740,59741],{"class":326,"line":484},[324,59742,59743],{"class":867},"      alert(22)\n",[324,59745,59746],{"class":326,"line":491},[324,59747,34183],{"class":867},[19,59749,59750],{},"点击第一次输出11,第二次点击为22",[35,59752,59754],{"id":59753},"_325-事件类型","3.2.5 事件类型",[19,59756,59757],{},[48,59758],{"alt":50,"src":59759},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-111.png",[151,59761,59763],{"id":59762},"_3251-鼠标事件","3.2.5.1 鼠标事件",[19,59765,59766],{},"补充知识:",[19,59768,59769],{},"轮播图自动播放模块,可以使用",[19,59771,59772],{},"let timerId = setInterval(function () {",[19,59774,59775],{},"\u002F\u002F 利用js自动调用点击事件 click() 一定加小括号调用函数",[19,59777,59778],{},"用js方法模拟进行点击事件,click必须加()",[19,59780,59781],{},"next.click()",[19,59783,59784],{},"}, 1000)",[19,59786,59787],{},[48,59788],{"alt":50,"src":59789},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-112.png",[316,59791,59793],{"className":53789,"code":59792,"language":53791,"meta":50,"style":50},"\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",[269,59794,59795,59799,59809,59823,59827,59835,59850,59870,59890,59903,59911,59916,59921,59925,59929,59934,59939,59944,59949,59953,59957,59962,59967,59972,59976,59980,59985,59989,59994,59999,60003,60007,60012,60017,60022,60027,60032,60036,60040,60045,60050,60055,60060,60065,60069,60073,60078,60083,60088,60093,60098,60103,60108,60113,60118,60123,60127,60131,60136,60141,60145,60149,60154,60159,60163,60168,60173,60177,60181,60186,60190,60195,60200,60204,60209,60213,60217,60222,60227,60232,60237,60242,60247,60252,60256,60260,60264,60269,60274,60279,60284,60288,60296,60304,60308,60316,60331,60345,60366,60374,60388,60401,60416,60435,60447,60459,60471,60483,60495,60507,60519,60527,60542,60566,60590,60598,60606,60614,60622,60627,60632,60637,60642,60647,60652,60657,60662,60667,60672,60676,60681,60686,60691,60696,60701,60706,60711,60716,60721,60725,60730,60735,60740,60745,60750,60755,60760,60765,60770,60775,60780,60785,60789,60793,60798,60803,60808,60812,60817,60822,60827,60832,60837,60841,60846,60850,60854,60858,60862,60866,60870,60875,60880,60885,60890,60895,60900,60905,60910,60915,60919,60923,60928,60933,60938,60943,60948,60952,60957,60962,60967,60972,60977,60982,60986,60990,60995,60999,61004,61008,61013,61018,61023,61028,61033,61038,61042,61050,61058,61062],{"__ignoreMap":50},[324,59796,59797],{"class":326,"line":327},[324,59798,488],{"emptyLinePlaceholder":487},[324,59800,59801,59803,59805,59807],{"class":326,"line":203},[324,59802,52019],{"class":867},[324,59804,52023],{"class":863},[324,59806,52026],{"class":916},[324,59808,52029],{"class":867},[324,59810,59811,59813,59815,59817,59819,59821],{"class":326,"line":338},[324,59812,1774],{"class":867},[324,59814,51357],{"class":52022},[324,59816,52038],{"class":734},[324,59818,913],{"class":867},[324,59820,52043],{"class":738},[324,59822,52029],{"class":867},[324,59824,59825],{"class":326,"line":344},[324,59826,488],{"emptyLinePlaceholder":487},[324,59828,59829,59831,59833],{"class":326,"line":484},[324,59830,1774],{"class":867},[324,59832,52056],{"class":52022},[324,59834,52029],{"class":867},[324,59836,59837,59839,59841,59843,59845,59847],{"class":326,"line":491},[324,59838,52866],{"class":867},[324,59840,52066],{"class":52022},[324,59842,52069],{"class":734},[324,59844,913],{"class":867},[324,59846,52074],{"class":738},[324,59848,59849],{"class":867}," \u002F>\n",[324,59851,59852,59854,59856,59858,59860,59862,59864,59866,59868],{"class":326,"line":496},[324,59853,52866],{"class":867},[324,59855,52066],{"class":52022},[324,59857,52085],{"class":734},[324,59859,913],{"class":867},[324,59861,52090],{"class":738},[324,59863,52093],{"class":734},[324,59865,913],{"class":867},[324,59867,52098],{"class":738},[324,59869,59849],{"class":867},[324,59871,59872,59874,59876,59878,59880,59882,59884,59886,59888],{"class":326,"line":502},[324,59873,52866],{"class":867},[324,59875,52066],{"class":52022},[324,59877,15649],{"class":734},[324,59879,913],{"class":867},[324,59881,52113],{"class":738},[324,59883,52093],{"class":734},[324,59885,913],{"class":867},[324,59887,52120],{"class":738},[324,59889,59849],{"class":867},[324,59891,59892,59894,59896,59899,59901],{"class":326,"line":508},[324,59893,52866],{"class":867},[324,59895,52129],{"class":52022},[324,59897,59898],{"class":867},">轮播图点击切换\u003C\u002F",[324,59900,52129],{"class":52022},[324,59902,52029],{"class":867},[324,59904,59905,59907,59909],{"class":326,"line":514},[324,59906,52866],{"class":867},[324,59908,775],{"class":52022},[324,59910,52029],{"class":867},[324,59912,59913],{"class":326,"line":2343},[324,59914,59915],{"class":867},"    * {\n",[324,59917,59918],{"class":326,"line":2348},[324,59919,59920],{"class":867},"      box-sizing: border-box;\n",[324,59922,59923],{"class":326,"line":2354},[324,59924,2917],{"class":867},[324,59926,59927],{"class":326,"line":2359},[324,59928,488],{"emptyLinePlaceholder":487},[324,59930,59931],{"class":326,"line":2373},[324,59932,59933],{"class":867},"    .slider {\n",[324,59935,59936],{"class":326,"line":2378},[324,59937,59938],{"class":867},"      width: 560px;\n",[324,59940,59941],{"class":326,"line":2384},[324,59942,59943],{"class":867},"      height: 400px;\n",[324,59945,59946],{"class":326,"line":2405},[324,59947,59948],{"class":867},"      overflow: hidden;\n",[324,59950,59951],{"class":326,"line":2410},[324,59952,2917],{"class":867},[324,59954,59955],{"class":326,"line":2424},[324,59956,488],{"emptyLinePlaceholder":487},[324,59958,59959],{"class":326,"line":2429},[324,59960,59961],{"class":867},"    .slider-wrapper {\n",[324,59963,59964],{"class":326,"line":2458},[324,59965,59966],{"class":867},"      width: 100%;\n",[324,59968,59969],{"class":326,"line":2463},[324,59970,59971],{"class":867},"      height: 320px;\n",[324,59973,59974],{"class":326,"line":2480},[324,59975,2917],{"class":867},[324,59977,59978],{"class":326,"line":2485},[324,59979,488],{"emptyLinePlaceholder":487},[324,59981,59982],{"class":326,"line":2490},[324,59983,59984],{"class":867},"    .slider-wrapper img {\n",[324,59986,59987],{"class":326,"line":2495},[324,59988,59966],{"class":867},[324,59990,59991],{"class":326,"line":2509},[324,59992,59993],{"class":867},"      height: 100%;\n",[324,59995,59996],{"class":326,"line":2514},[324,59997,59998],{"class":867},"      display: block;\n",[324,60000,60001],{"class":326,"line":3306},[324,60002,2917],{"class":867},[324,60004,60005],{"class":326,"line":3320},[324,60006,488],{"emptyLinePlaceholder":487},[324,60008,60009],{"class":326,"line":3328},[324,60010,60011],{"class":867},"    .slider-footer {\n",[324,60013,60014],{"class":326,"line":3333},[324,60015,60016],{"class":867},"      height: 80px;\n",[324,60018,60019],{"class":326,"line":3339},[324,60020,60021],{"class":867},"      background-color: rgb(100, 67, 68);\n",[324,60023,60024],{"class":326,"line":3345},[324,60025,60026],{"class":867},"      padding: 12px 12px 0 12px;\n",[324,60028,60029],{"class":326,"line":3350},[324,60030,60031],{"class":867},"      position: relative;\n",[324,60033,60034],{"class":326,"line":8677},[324,60035,2917],{"class":867},[324,60037,60038],{"class":326,"line":8701},[324,60039,488],{"emptyLinePlaceholder":487},[324,60041,60042],{"class":326,"line":8706},[324,60043,60044],{"class":867},"    .slider-footer .toggle {\n",[324,60046,60047],{"class":326,"line":8712},[324,60048,60049],{"class":867},"      position: absolute;\n",[324,60051,60052],{"class":326,"line":8739},[324,60053,60054],{"class":867},"      right: 0;\n",[324,60056,60057],{"class":326,"line":8744},[324,60058,60059],{"class":867},"      top: 12px;\n",[324,60061,60062],{"class":326,"line":8750},[324,60063,60064],{"class":867},"      display: flex;\n",[324,60066,60067],{"class":326,"line":8762},[324,60068,2917],{"class":867},[324,60070,60071],{"class":326,"line":8774},[324,60072,488],{"emptyLinePlaceholder":487},[324,60074,60075],{"class":326,"line":8786},[324,60076,60077],{"class":867},"    .slider-footer .toggle button {\n",[324,60079,60080],{"class":326,"line":10445},[324,60081,60082],{"class":867},"      margin-right: 12px;\n",[324,60084,60085],{"class":326,"line":10470},[324,60086,60087],{"class":867},"      width: 28px;\n",[324,60089,60090],{"class":326,"line":10493},[324,60091,60092],{"class":867},"      height: 28px;\n",[324,60094,60095],{"class":326,"line":10517},[324,60096,60097],{"class":867},"      appearance: none;\n",[324,60099,60100],{"class":326,"line":10522},[324,60101,60102],{"class":867},"      border: none;\n",[324,60104,60105],{"class":326,"line":10527},[324,60106,60107],{"class":867},"      background: rgba(255, 255, 255, 0.1);\n",[324,60109,60110],{"class":326,"line":10532},[324,60111,60112],{"class":867},"      color: #fff;\n",[324,60114,60115],{"class":326,"line":10541},[324,60116,60117],{"class":867},"      border-radius: 4px;\n",[324,60119,60120],{"class":326,"line":10546},[324,60121,60122],{"class":867},"      cursor: pointer;\n",[324,60124,60125],{"class":326,"line":10552},[324,60126,2917],{"class":867},[324,60128,60129],{"class":326,"line":10573},[324,60130,488],{"emptyLinePlaceholder":487},[324,60132,60133],{"class":326,"line":10579},[324,60134,60135],{"class":867},"    .slider-footer .toggle button:hover {\n",[324,60137,60138],{"class":326,"line":10593},[324,60139,60140],{"class":867},"      background: rgba(255, 255, 255, 0.2);\n",[324,60142,60143],{"class":326,"line":10599},[324,60144,2917],{"class":867},[324,60146,60147],{"class":326,"line":10626},[324,60148,488],{"emptyLinePlaceholder":487},[324,60150,60151],{"class":326,"line":10635},[324,60152,60153],{"class":867},"    .slider-footer p {\n",[324,60155,60156],{"class":326,"line":10641},[324,60157,60158],{"class":867},"      margin: 0;\n",[324,60160,60161],{"class":326,"line":10649},[324,60162,60112],{"class":867},[324,60164,60165],{"class":326,"line":10654},[324,60166,60167],{"class":867},"      font-size: 18px;\n",[324,60169,60170],{"class":326,"line":17333},[324,60171,60172],{"class":867},"      margin-bottom: 10px;\n",[324,60174,60175],{"class":326,"line":17339},[324,60176,2917],{"class":867},[324,60178,60179],{"class":326,"line":17362},[324,60180,488],{"emptyLinePlaceholder":487},[324,60182,60183],{"class":326,"line":17368},[324,60184,60185],{"class":867},"    .slider-indicator {\n",[324,60187,60188],{"class":326,"line":17391},[324,60189,60158],{"class":867},[324,60191,60192],{"class":326,"line":17405},[324,60193,60194],{"class":867},"      padding: 0;\n",[324,60196,60197],{"class":326,"line":17425},[324,60198,60199],{"class":867},"      list-style: none;\n",[324,60201,60202],{"class":326,"line":17431},[324,60203,60064],{"class":867},[324,60205,60206],{"class":326,"line":17442},[324,60207,60208],{"class":867},"      align-items: center;\n",[324,60210,60211],{"class":326,"line":17465},[324,60212,2917],{"class":867},[324,60214,60215],{"class":326,"line":17487},[324,60216,488],{"emptyLinePlaceholder":487},[324,60218,60219],{"class":326,"line":17492},[324,60220,60221],{"class":867},"    .slider-indicator li {\n",[324,60223,60224],{"class":326,"line":17498},[324,60225,60226],{"class":867},"      width: 8px;\n",[324,60228,60229],{"class":326,"line":17512},[324,60230,60231],{"class":867},"      height: 8px;\n",[324,60233,60234],{"class":326,"line":17525},[324,60235,60236],{"class":867},"      margin: 4px;\n",[324,60238,60239],{"class":326,"line":17530},[324,60240,60241],{"class":867},"      border-radius: 50%;\n",[324,60243,60244],{"class":326,"line":17544},[324,60245,60246],{"class":867},"      background: #fff;\n",[324,60248,60249],{"class":326,"line":17549},[324,60250,60251],{"class":867},"      opacity: 0.4;\n",[324,60253,60254],{"class":326,"line":17555},[324,60255,60122],{"class":867},[324,60257,60258],{"class":326,"line":17560},[324,60259,2917],{"class":867},[324,60261,60262],{"class":326,"line":17574},[324,60263,488],{"emptyLinePlaceholder":487},[324,60265,60266],{"class":326,"line":17579},[324,60267,60268],{"class":867},"    .slider-indicator li.active {\n",[324,60270,60271],{"class":326,"line":17584},[324,60272,60273],{"class":867},"      width: 12px;\n",[324,60275,60276],{"class":326,"line":17598},[324,60277,60278],{"class":867},"      height: 12px;\n",[324,60280,60281],{"class":326,"line":17610},[324,60282,60283],{"class":867},"      opacity: 1;\n",[324,60285,60286],{"class":326,"line":17615},[324,60287,2917],{"class":867},[324,60289,60290,60292,60294],{"class":326,"line":17628},[324,60291,53139],{"class":867},[324,60293,775],{"class":52022},[324,60295,52029],{"class":867},[324,60297,60298,60300,60302],{"class":326,"line":17633},[324,60299,52507],{"class":867},[324,60301,52056],{"class":52022},[324,60303,52029],{"class":867},[324,60305,60306],{"class":326,"line":17638},[324,60307,488],{"emptyLinePlaceholder":487},[324,60309,60310,60312,60314],{"class":326,"line":17643},[324,60311,1774],{"class":867},[324,60313,52522],{"class":52022},[324,60315,52029],{"class":867},[324,60317,60318,60320,60322,60324,60326,60329],{"class":326,"line":17656},[324,60319,52866],{"class":867},[324,60321,52333],{"class":52022},[324,60323,54208],{"class":734},[324,60325,913],{"class":867},[324,60327,60328],{"class":738},"\"slider\"",[324,60330,52029],{"class":867},[324,60332,60333,60335,60337,60339,60341,60343],{"class":326,"line":17661},[324,60334,52063],{"class":867},[324,60336,52333],{"class":52022},[324,60338,54208],{"class":734},[324,60340,913],{"class":867},[324,60342,55949],{"class":738},[324,60344,52029],{"class":867},[324,60346,60347,60349,60351,60353,60355,60358,60360,60362,60364],{"class":326,"line":33355},[324,60348,55956],{"class":867},[324,60350,48],{"class":52022},[324,60352,55961],{"class":734},[324,60354,913],{"class":867},[324,60356,60357],{"class":738},"\"...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[324,60359,55969],{"class":734},[324,60361,913],{"class":867},[324,60363,8381],{"class":738},[324,60365,59849],{"class":867},[324,60367,60368,60370,60372],{"class":326,"line":33361},[324,60369,52498],{"class":867},[324,60371,52333],{"class":52022},[324,60373,52029],{"class":867},[324,60375,60376,60378,60380,60382,60384,60386],{"class":326,"line":33367},[324,60377,52063],{"class":867},[324,60379,52333],{"class":52022},[324,60381,54208],{"class":734},[324,60383,913],{"class":867},[324,60385,55996],{"class":738},[324,60387,52029],{"class":867},[324,60389,60390,60392,60394,60397,60399],{"class":326,"line":33373},[324,60391,55956],{"class":867},[324,60393,19],{"class":52022},[324,60395,60396],{"class":867},">对人类来说会不会太超前了？\u003C\u002F",[324,60398,19],{"class":52022},[324,60400,52029],{"class":867},[324,60402,60403,60405,60407,60409,60411,60414],{"class":326,"line":33379},[324,60404,55956],{"class":867},[324,60406,1871],{"class":52022},[324,60408,54208],{"class":734},[324,60410,913],{"class":867},[324,60412,60413],{"class":738},"\"slider-indicator\"",[324,60415,52029],{"class":867},[324,60417,60418,60420,60422,60424,60426,60429,60431,60433],{"class":326,"line":33390},[324,60419,56024],{"class":867},[324,60421,195],{"class":52022},[324,60423,54208],{"class":734},[324,60425,913],{"class":867},[324,60427,60428],{"class":738},"\"active\"",[324,60430,56036],{"class":867},[324,60432,195],{"class":52022},[324,60434,52029],{"class":867},[324,60436,60437,60439,60441,60443,60445],{"class":326,"line":33396},[324,60438,56024],{"class":867},[324,60440,195],{"class":52022},[324,60442,56036],{"class":867},[324,60444,195],{"class":52022},[324,60446,52029],{"class":867},[324,60448,60449,60451,60453,60455,60457],{"class":326,"line":33416},[324,60450,56024],{"class":867},[324,60452,195],{"class":52022},[324,60454,56036],{"class":867},[324,60456,195],{"class":52022},[324,60458,52029],{"class":867},[324,60460,60461,60463,60465,60467,60469],{"class":326,"line":33422},[324,60462,56024],{"class":867},[324,60464,195],{"class":52022},[324,60466,56036],{"class":867},[324,60468,195],{"class":52022},[324,60470,52029],{"class":867},[324,60472,60473,60475,60477,60479,60481],{"class":326,"line":33433},[324,60474,56024],{"class":867},[324,60476,195],{"class":52022},[324,60478,56036],{"class":867},[324,60480,195],{"class":52022},[324,60482,52029],{"class":867},[324,60484,60485,60487,60489,60491,60493],{"class":326,"line":33439},[324,60486,56024],{"class":867},[324,60488,195],{"class":52022},[324,60490,56036],{"class":867},[324,60492,195],{"class":52022},[324,60494,52029],{"class":867},[324,60496,60497,60499,60501,60503,60505],{"class":326,"line":33445},[324,60498,56024],{"class":867},[324,60500,195],{"class":52022},[324,60502,56036],{"class":867},[324,60504,195],{"class":52022},[324,60506,52029],{"class":867},[324,60508,60509,60511,60513,60515,60517],{"class":326,"line":33451},[324,60510,56024],{"class":867},[324,60512,195],{"class":52022},[324,60514,56036],{"class":867},[324,60516,195],{"class":52022},[324,60518,52029],{"class":867},[324,60520,60521,60523,60525],{"class":326,"line":33457},[324,60522,56129],{"class":867},[324,60524,1871],{"class":52022},[324,60526,52029],{"class":867},[324,60528,60529,60531,60533,60535,60537,60540],{"class":326,"line":33463},[324,60530,55956],{"class":867},[324,60532,52333],{"class":52022},[324,60534,54208],{"class":734},[324,60536,913],{"class":867},[324,60538,60539],{"class":738},"\"toggle\"",[324,60541,52029],{"class":867},[324,60543,60544,60546,60548,60550,60552,60555,60557,60560,60562,60564],{"class":326,"line":33469},[324,60545,56024],{"class":867},[324,60547,54609],{"class":52022},[324,60549,54208],{"class":734},[324,60551,913],{"class":867},[324,60553,60554],{"class":738},"\"prev\"",[324,60556,1824],{"class":867},[324,60558,60559],{"class":916},"&lt;",[324,60561,52507],{"class":867},[324,60563,54609],{"class":52022},[324,60565,52029],{"class":867},[324,60567,60568,60570,60572,60574,60576,60579,60581,60584,60586,60588],{"class":326,"line":33475},[324,60569,56024],{"class":867},[324,60571,54609],{"class":52022},[324,60573,54208],{"class":734},[324,60575,913],{"class":867},[324,60577,60578],{"class":738},"\"next\"",[324,60580,1824],{"class":867},[324,60582,60583],{"class":916},"&gt;",[324,60585,52507],{"class":867},[324,60587,54609],{"class":52022},[324,60589,52029],{"class":867},[324,60591,60592,60594,60596],{"class":326,"line":33495},[324,60593,56129],{"class":867},[324,60595,52333],{"class":52022},[324,60597,52029],{"class":867},[324,60599,60600,60602,60604],{"class":326,"line":33501},[324,60601,52498],{"class":867},[324,60603,52333],{"class":52022},[324,60605,52029],{"class":867},[324,60607,60608,60610,60612],{"class":326,"line":33517},[324,60609,53139],{"class":867},[324,60611,52333],{"class":52022},[324,60613,52029],{"class":867},[324,60615,60616,60618,60620],{"class":326,"line":33523},[324,60617,52866],{"class":867},[324,60619,52535],{"class":52022},[324,60621,52029],{"class":867},[324,60623,60624],{"class":326,"line":33537},[324,60625,60626],{"class":867},"    \u002F\u002F 1. 初始数据\n",[324,60628,60629],{"class":326,"line":33543},[324,60630,60631],{"class":867},"    const data = [\n",[324,60633,60634],{"class":326,"line":33558},[324,60635,60636],{"class":867},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg', title: '对人类来说会不会太超前了？', color: 'rgb(100, 67, 68)' },\n",[324,60638,60639],{"class":326,"line":33564},[324,60640,60641],{"class":867},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg', title: '开启剑与雪的黑暗传说！', color: 'rgb(43, 35, 26)' },\n",[324,60643,60644],{"class":326,"line":33573},[324,60645,60646],{"class":867},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg', title: '真正的jo厨出现了！', color: 'rgb(36, 31, 33)' },\n",[324,60648,60649],{"class":326,"line":33579},[324,60650,60651],{"class":867},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg', title: '李玉刚：让世界通过B站看到东方大国文化', color: 'rgb(139, 98, 66)' },\n",[324,60653,60654],{"class":326,"line":33588},[324,60655,60656],{"class":867},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg', title: '快来分享你的寒假日常吧~', color: 'rgb(67, 90, 92)' },\n",[324,60658,60659],{"class":326,"line":33594},[324,60660,60661],{"class":867},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg', title: '哔哩哔哩小年YEAH', color: 'rgb(166, 131, 143)' },\n",[324,60663,60664],{"class":326,"line":33600},[324,60665,60666],{"class":867},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg', title: '一站式解决你的电脑配置问题！！！', color: 'rgb(53, 29, 25)' },\n",[324,60668,60669],{"class":326,"line":33609},[324,60670,60671],{"class":867},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg', title: '谁不想和小猫咪贴贴呢！', color: 'rgb(99, 72, 114)' },\n",[324,60673,60674],{"class":326,"line":33615},[324,60675,53831],{"class":867},[324,60677,60678],{"class":326,"line":33626},[324,60679,60680],{"class":867},"    \u002F\u002F 获取元素\n",[324,60682,60683],{"class":326,"line":33632},[324,60684,60685],{"class":867},"    const img = document.querySelector('.slider-wrapper img')\n",[324,60687,60688],{"class":326,"line":33651},[324,60689,60690],{"class":867},"    const p = document.querySelector('.slider-footer p')\n",[324,60692,60693],{"class":326,"line":33657},[324,60694,60695],{"class":867},"    const footer = document.querySelector('.slider-footer')\n",[324,60697,60698],{"class":326,"line":33668},[324,60699,60700],{"class":867},"    \u002F\u002F 1. 右按钮业务\n",[324,60702,60703],{"class":326,"line":33674},[324,60704,60705],{"class":867},"    \u002F\u002F 1.1 获取右侧按钮 \n",[324,60707,60708],{"class":326,"line":33694},[324,60709,60710],{"class":867},"    const next = document.querySelector('.next')\n",[324,60712,60713],{"class":326,"line":33710},[324,60714,60715],{"class":867},"    let i = 0  \u002F\u002F 信号量 控制播放图片张数\n",[324,60717,60718],{"class":326,"line":33716},[324,60719,60720],{"class":867},"    \u002F\u002F 1.2 注册点击事件\n",[324,60722,60723],{"class":326,"line":33730},[324,60724,488],{"emptyLinePlaceholder":487},[324,60726,60727],{"class":326,"line":33736},[324,60728,60729],{"class":867},"    next.addEventListener('click', function () {\n",[324,60731,60732],{"class":326,"line":33742},[324,60733,60734],{"class":867},"      \u002F\u002F console.log(11)\n",[324,60736,60737],{"class":326,"line":33753},[324,60738,60739],{"class":867},"      i++\n",[324,60741,60742],{"class":326,"line":33759},[324,60743,60744],{"class":867},"      \u002F\u002F 1.6判断条件  如果大于8 就复原为 0\n",[324,60746,60747],{"class":326,"line":33765},[324,60748,60749],{"class":867},"      \u002F\u002F if (i >= 8) {\n",[324,60751,60752],{"class":326,"line":33775},[324,60753,60754],{"class":867},"      \u002F\u002F   i = 0\n",[324,60756,60757],{"class":326,"line":33781},[324,60758,60759],{"class":867},"      \u002F\u002F }\n",[324,60761,60762],{"class":326,"line":33792},[324,60763,60764],{"class":867},"      i = i >= data.length ? 0 : i\n",[324,60766,60767],{"class":326,"line":33798},[324,60768,60769],{"class":867},"      \u002F\u002F 1.3 得到对应的对象\n",[324,60771,60772],{"class":326,"line":33808},[324,60773,60774],{"class":867},"      \u002F\u002F console.log(data[i])\n",[324,60776,60777],{"class":326,"line":33813},[324,60778,60779],{"class":867},"      \u002F\u002F 调用函数\n",[324,60781,60782],{"class":326,"line":33819},[324,60783,60784],{"class":867},"      toggle()\n",[324,60786,60787],{"class":326,"line":33868},[324,60788,34183],{"class":867},[324,60790,60791],{"class":326,"line":33915},[324,60792,488],{"emptyLinePlaceholder":487},[324,60794,60795],{"class":326,"line":33920},[324,60796,60797],{"class":867},"    \u002F\u002F 2. 左侧按钮业务\n",[324,60799,60800],{"class":326,"line":33926},[324,60801,60802],{"class":867},"    \u002F\u002F 2.1 获取左侧按钮 \n",[324,60804,60805],{"class":326,"line":33945},[324,60806,60807],{"class":867},"    const prev = document.querySelector('.prev')\n",[324,60809,60810],{"class":326,"line":33951},[324,60811,60720],{"class":867},[324,60813,60814],{"class":326,"line":33971},[324,60815,60816],{"class":867},"    prev.addEventListener('click', function () {\n",[324,60818,60819],{"class":326,"line":33977},[324,60820,60821],{"class":867},"      i--\n",[324,60823,60824],{"class":326,"line":33983},[324,60825,60826],{"class":867},"      \u002F\u002F 判断条件  如果小于0  则爬到最后一张图片索引号是 7\n",[324,60828,60829],{"class":326,"line":33993},[324,60830,60831],{"class":867},"      \u002F\u002F if (i \u003C 0) {\n",[324,60833,60834],{"class":326,"line":33998},[324,60835,60836],{"class":867},"      \u002F\u002F   i = 7\n",[324,60838,60839],{"class":326,"line":34004},[324,60840,60759],{"class":867},[324,60842,60843],{"class":326,"line":34020},[324,60844,60845],{"class":867},"      i = i \u003C 0 ? data.length - 1 : i\n",[324,60847,60848],{"class":326,"line":34065},[324,60849,60769],{"class":867},[324,60851,60852],{"class":326,"line":34071},[324,60853,60774],{"class":867},[324,60855,60856],{"class":326,"line":34077},[324,60857,60779],{"class":867},[324,60859,60860],{"class":326,"line":34083},[324,60861,60784],{"class":867},[324,60863,60864],{"class":326,"line":34094},[324,60865,34183],{"class":867},[324,60867,60868],{"class":326,"line":34100},[324,60869,488],{"emptyLinePlaceholder":487},[324,60871,60872],{"class":326,"line":34106},[324,60873,60874],{"class":867},"    \u002F\u002F 声明一个渲染的函数作为复用\n",[324,60876,60877],{"class":326,"line":34112},[324,60878,60879],{"class":867},"    function toggle() {\n",[324,60881,60882],{"class":326,"line":34130},[324,60883,60884],{"class":867},"      \u002F\u002F 1.4 渲染对应的数据\n",[324,60886,60887],{"class":326,"line":34144},[324,60888,60889],{"class":867},"      img.src = data[i].url\n",[324,60891,60892],{"class":326,"line":34153},[324,60893,60894],{"class":867},"      p.innerHTML = data[i].title\n",[324,60896,60897],{"class":326,"line":34162},[324,60898,60899],{"class":867},"      footer.style.backgroundColor = data[i].color\n",[324,60901,60902],{"class":326,"line":34171},[324,60903,60904],{"class":867},"      \u002F\u002F 1.5 更换小圆点    先移除原来的类名， 当前li再添加 这个 类名\n",[324,60906,60907],{"class":326,"line":34180},[324,60908,60909],{"class":867},"      document.querySelector('.slider-indicator .active').classList.remove('active')\n",[324,60911,60912],{"class":326,"line":34186},[324,60913,60914],{"class":867},"      document.querySelector(`.slider-indicator li:nth-child(${i + 1})`).classList.add('active')\n",[324,60916,60917],{"class":326,"line":34192},[324,60918,2917],{"class":867},[324,60920,60921],{"class":326,"line":34200},[324,60922,488],{"emptyLinePlaceholder":487},[324,60924,60925],{"class":326,"line":34205},[324,60926,60927],{"class":867},"    \u002F\u002F 3. 自动播放模块\n",[324,60929,60930],{"class":326,"line":34211},[324,60931,60932],{"class":867},"    let timerId = setInterval(function () {\n",[324,60934,60935],{"class":326,"line":34222},[324,60936,60937],{"class":867},"      \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[324,60939,60940],{"class":326,"line":34228},[324,60941,60942],{"class":867},"      next.click()\n",[324,60944,60945],{"class":326,"line":34248},[324,60946,60947],{"class":867},"    }, 1000)\n",[324,60949,60950],{"class":326,"line":34254},[324,60951,488],{"emptyLinePlaceholder":487},[324,60953,60954],{"class":326,"line":34260},[324,60955,60956],{"class":867},"    \u002F\u002F 4. 鼠标经过大盒子，停止定时器\n",[324,60958,60959],{"class":326,"line":34266},[324,60960,60961],{"class":867},"    const slider = document.querySelector('.slider')\n",[324,60963,60964],{"class":326,"line":34283},[324,60965,60966],{"class":867},"    \u002F\u002F 注册事件\n",[324,60968,60969],{"class":326,"line":34289},[324,60970,60971],{"class":867},"    slider.addEventListener('mouseenter', function () {\n",[324,60973,60974],{"class":326,"line":34295},[324,60975,60976],{"class":867},"      \u002F\u002F 停止定时器\n",[324,60978,60979],{"class":326,"line":34301},[324,60980,60981],{"class":867},"      clearInterval(timerId)\n",[324,60983,60984],{"class":326,"line":34307},[324,60985,34183],{"class":867},[324,60987,60988],{"class":326,"line":34313},[324,60989,488],{"emptyLinePlaceholder":487},[324,60991,60992],{"class":326,"line":34340},[324,60993,60994],{"class":867},"    \u002F\u002F 5. 鼠标离开大盒子，开启定时器\n",[324,60996,60997],{"class":326,"line":34364},[324,60998,60966],{"class":867},[324,61000,61001],{"class":326,"line":34370},[324,61002,61003],{"class":867},"    slider.addEventListener('mouseleave', function () {\n",[324,61005,61006],{"class":326,"line":34376},[324,61007,60976],{"class":867},[324,61009,61010],{"class":326,"line":34382},[324,61011,61012],{"class":867},"      if (timerId) clearInterval(timerId)\n",[324,61014,61015],{"class":326,"line":34393},[324,61016,61017],{"class":867},"      \u002F\u002F 开启定时器\n",[324,61019,61020],{"class":326,"line":34404},[324,61021,61022],{"class":867},"      timerId = setInterval(function () {\n",[324,61024,61025],{"class":326,"line":34410},[324,61026,61027],{"class":867},"        \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[324,61029,61030],{"class":326,"line":34427},[324,61031,61032],{"class":867},"        next.click()\n",[324,61034,61035],{"class":326,"line":34450},[324,61036,61037],{"class":867},"      }, 1000)\n",[324,61039,61040],{"class":326,"line":34473},[324,61041,34183],{"class":867},[324,61043,61044,61046,61048],{"class":326,"line":34479},[324,61045,53139],{"class":867},[324,61047,52535],{"class":52022},[324,61049,52029],{"class":867},[324,61051,61052,61054,61056],{"class":326,"line":34484},[324,61053,52507],{"class":867},[324,61055,52522],{"class":52022},[324,61057,52029],{"class":867},[324,61059,61060],{"class":326,"line":34493},[324,61061,488],{"emptyLinePlaceholder":487},[324,61063,61064,61066,61068],{"class":326,"line":34503},[324,61065,52507],{"class":867},[324,61067,51357],{"class":52022},[324,61069,52029],{"class":867},[151,61071,61073],{"id":61072},"_3252-焦点事件","3.2.5.2 焦点事件",[19,61075,61076],{},"小米搜索框案例：",[316,61078,61080],{"className":51355,"code":61079,"language":51357,"meta":50,"style":50},"\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",[269,61081,61082,61092,61106,61110,61118,61132,61152,61172,61184,61192,61198,61208,61218,61230,61234,61238,61245,61249,61260,61264,61268,61275,61286,61299,61313,61317,61321,61330,61342,61354,61368,61381,61394,61412,61423,61427,61431,61440,61457,61461,61465,61472,61482,61492,61503,61516,61528,61544,61555,61567,61571,61575,61583,61594,61611,61623,61635,61646,61650,61654,61665,61676,61680,61688,61692,61700,61704,61712,61727,61750,61765,61796,61823,61850,61877,61904,61931,61958,61967,61975,61983,61988,62008,62028,62033,62038,62056,62061,62071,62076,62090,62095,62100,62117,62126,62138,62142,62150,62158,62162],{"__ignoreMap":50},[324,61083,61084,61086,61088,61090],{"class":326,"line":327},[324,61085,52019],{"class":867},[324,61087,52023],{"class":52022},[324,61089,52026],{"class":734},[324,61091,52029],{"class":867},[324,61093,61094,61096,61098,61100,61102,61104],{"class":326,"line":203},[324,61095,1774],{"class":867},[324,61097,51357],{"class":52022},[324,61099,52038],{"class":734},[324,61101,913],{"class":867},[324,61103,52043],{"class":738},[324,61105,52029],{"class":867},[324,61107,61108],{"class":326,"line":338},[324,61109,488],{"emptyLinePlaceholder":487},[324,61111,61112,61114,61116],{"class":326,"line":344},[324,61113,1774],{"class":867},[324,61115,52056],{"class":52022},[324,61117,52029],{"class":867},[324,61119,61120,61122,61124,61126,61128,61130],{"class":326,"line":484},[324,61121,52063],{"class":867},[324,61123,52066],{"class":52022},[324,61125,52069],{"class":734},[324,61127,913],{"class":867},[324,61129,52074],{"class":738},[324,61131,52029],{"class":867},[324,61133,61134,61136,61138,61140,61142,61144,61146,61148,61150],{"class":326,"line":491},[324,61135,52063],{"class":867},[324,61137,52066],{"class":52022},[324,61139,52085],{"class":734},[324,61141,913],{"class":867},[324,61143,52090],{"class":738},[324,61145,52093],{"class":734},[324,61147,913],{"class":867},[324,61149,52098],{"class":738},[324,61151,52029],{"class":867},[324,61153,61154,61156,61158,61160,61162,61164,61166,61168,61170],{"class":326,"line":496},[324,61155,52063],{"class":867},[324,61157,52066],{"class":52022},[324,61159,15649],{"class":734},[324,61161,913],{"class":867},[324,61163,52113],{"class":738},[324,61165,52093],{"class":734},[324,61167,913],{"class":867},[324,61169,52120],{"class":738},[324,61171,52029],{"class":867},[324,61173,61174,61176,61178,61180,61182],{"class":326,"line":502},[324,61175,52063],{"class":867},[324,61177,52129],{"class":52022},[324,61179,52132],{"class":867},[324,61181,52129],{"class":52022},[324,61183,52029],{"class":867},[324,61185,61186,61188,61190],{"class":326,"line":508},[324,61187,52063],{"class":867},[324,61189,775],{"class":52022},[324,61191,52029],{"class":867},[324,61193,61194,61196],{"class":326,"line":514},[324,61195,52149],{"class":52022},[324,61197,16301],{"class":867},[324,61199,61200,61202,61204,61206],{"class":326,"line":2343},[324,61201,52156],{"class":916},[324,61203,52159],{"class":867},[324,61205,1056],{"class":916},[324,61207,2025],{"class":867},[324,61209,61210,61212,61214,61216],{"class":326,"line":2348},[324,61211,52168],{"class":916},[324,61213,52159],{"class":867},[324,61215,1056],{"class":916},[324,61217,2025],{"class":867},[324,61219,61220,61223,61225,61228],{"class":326,"line":2354},[324,61221,61222],{"class":916},"            box-sizing",[324,61224,52159],{"class":867},[324,61226,61227],{"class":916},"border-box",[324,61229,2025],{"class":867},[324,61231,61232],{"class":326,"line":2359},[324,61233,3258],{"class":867},[324,61235,61236],{"class":326,"line":2373},[324,61237,488],{"emptyLinePlaceholder":487},[324,61239,61240,61243],{"class":326,"line":2378},[324,61241,61242],{"class":52022},"        ul",[324,61244,16301],{"class":867},[324,61246,61247],{"class":326,"line":2384},[324,61248,488],{"emptyLinePlaceholder":487},[324,61250,61251,61254,61256,61258],{"class":326,"line":2405},[324,61252,61253],{"class":916},"            list-style",[324,61255,52159],{"class":867},[324,61257,55459],{"class":916},[324,61259,2025],{"class":867},[324,61261,61262],{"class":326,"line":2410},[324,61263,3258],{"class":867},[324,61265,61266],{"class":326,"line":2424},[324,61267,488],{"emptyLinePlaceholder":487},[324,61269,61270,61273],{"class":326,"line":2429},[324,61271,61272],{"class":734},"        .mi",[324,61274,16301],{"class":867},[324,61276,61277,61280,61282,61284],{"class":326,"line":2458},[324,61278,61279],{"class":916},"            position",[324,61281,52159],{"class":867},[324,61283,55486],{"class":916},[324,61285,2025],{"class":867},[324,61287,61288,61290,61292,61295,61297],{"class":326,"line":2463},[324,61289,52206],{"class":916},[324,61291,52159],{"class":867},[324,61293,61294],{"class":916},"223",[324,61296,52214],{"class":863},[324,61298,2025],{"class":867},[324,61300,61301,61303,61305,61307,61309,61311],{"class":326,"line":2480},[324,61302,52156],{"class":916},[324,61304,52159],{"class":867},[324,61306,1175],{"class":916},[324,61308,52214],{"class":863},[324,61310,52278],{"class":916},[324,61312,2025],{"class":867},[324,61314,61315],{"class":326,"line":2485},[324,61316,3258],{"class":867},[324,61318,61319],{"class":326,"line":2490},[324,61320,488],{"emptyLinePlaceholder":487},[324,61322,61323,61325,61328],{"class":326,"line":2495},[324,61324,61272],{"class":734},[324,61326,61327],{"class":52022}," input",[324,61329,16301],{"class":867},[324,61331,61332,61334,61336,61338,61340],{"class":326,"line":2509},[324,61333,52206],{"class":916},[324,61335,52159],{"class":867},[324,61337,61294],{"class":916},[324,61339,52214],{"class":863},[324,61341,2025],{"class":867},[324,61343,61344,61346,61348,61350,61352],{"class":326,"line":2514},[324,61345,52221],{"class":916},[324,61347,52159],{"class":867},[324,61349,1471],{"class":916},[324,61351,52214],{"class":863},[324,61353,2025],{"class":867},[324,61355,61356,61358,61360,61362,61364,61366],{"class":326,"line":3306},[324,61357,52168],{"class":916},[324,61359,52159],{"class":867},[324,61361,1056],{"class":916},[324,61363,2768],{"class":916},[324,61365,52214],{"class":863},[324,61367,2025],{"class":867},[324,61369,61370,61373,61375,61377,61379],{"class":326,"line":3320},[324,61371,61372],{"class":916},"            font-size",[324,61374,52159],{"class":867},[324,61376,1413],{"class":916},[324,61378,52214],{"class":863},[324,61380,2025],{"class":867},[324,61382,61383,61386,61388,61390,61392],{"class":326,"line":3328},[324,61384,61385],{"class":916},"            line-height",[324,61387,52159],{"class":867},[324,61389,1471],{"class":916},[324,61391,52214],{"class":863},[324,61393,2025],{"class":867},[324,61395,61396,61399,61401,61403,61405,61407,61410],{"class":326,"line":3333},[324,61397,61398],{"class":916},"            border",[324,61400,52159],{"class":867},[324,61402,1082],{"class":916},[324,61404,52214],{"class":863},[324,61406,52243],{"class":916},[324,61408,61409],{"class":916}," #e0e0e0",[324,61411,2025],{"class":867},[324,61413,61414,61417,61419,61421],{"class":326,"line":3339},[324,61415,61416],{"class":916},"            outline",[324,61418,52159],{"class":867},[324,61420,55459],{"class":916},[324,61422,2025],{"class":867},[324,61424,61425],{"class":326,"line":3345},[324,61426,3258],{"class":867},[324,61428,61429],{"class":326,"line":3350},[324,61430,488],{"emptyLinePlaceholder":487},[324,61432,61433,61435,61438],{"class":326,"line":8677},[324,61434,61272],{"class":734},[324,61436,61437],{"class":734}," .search",[324,61439,16301],{"class":867},[324,61441,61442,61444,61446,61448,61450,61452,61455],{"class":326,"line":8701},[324,61443,61398],{"class":916},[324,61445,52159],{"class":867},[324,61447,1082],{"class":916},[324,61449,52214],{"class":863},[324,61451,52243],{"class":916},[324,61453,61454],{"class":916}," #ff6700",[324,61456,2025],{"class":867},[324,61458,61459],{"class":326,"line":8706},[324,61460,3258],{"class":867},[324,61462,61463],{"class":326,"line":8712},[324,61464,488],{"emptyLinePlaceholder":487},[324,61466,61467,61470],{"class":326,"line":8739},[324,61468,61469],{"class":734},"        .result-list",[324,61471,16301],{"class":867},[324,61473,61474,61476,61478,61480],{"class":326,"line":8744},[324,61475,52194],{"class":916},[324,61477,52159],{"class":867},[324,61479,55459],{"class":916},[324,61481,2025],{"class":867},[324,61483,61484,61486,61488,61490],{"class":326,"line":8750},[324,61485,61279],{"class":916},[324,61487,52159],{"class":867},[324,61489,55553],{"class":916},[324,61491,2025],{"class":867},[324,61493,61494,61497,61499,61501],{"class":326,"line":8762},[324,61495,61496],{"class":916},"            left",[324,61498,52159],{"class":867},[324,61500,1056],{"class":916},[324,61502,2025],{"class":867},[324,61504,61505,61508,61510,61512,61514],{"class":326,"line":8774},[324,61506,61507],{"class":916},"            top",[324,61509,52159],{"class":867},[324,61511,1471],{"class":916},[324,61513,52214],{"class":863},[324,61515,2025],{"class":867},[324,61517,61518,61520,61522,61524,61526],{"class":326,"line":8786},[324,61519,52206],{"class":916},[324,61521,52159],{"class":867},[324,61523,61294],{"class":916},[324,61525,52214],{"class":863},[324,61527,2025],{"class":867},[324,61529,61530,61532,61534,61536,61538,61540,61542],{"class":326,"line":10445},[324,61531,61398],{"class":916},[324,61533,52159],{"class":867},[324,61535,1082],{"class":916},[324,61537,52214],{"class":863},[324,61539,52243],{"class":916},[324,61541,61454],{"class":916},[324,61543,2025],{"class":867},[324,61545,61546,61549,61551,61553],{"class":326,"line":10470},[324,61547,61548],{"class":916},"            border-top",[324,61550,52159],{"class":867},[324,61552,1056],{"class":916},[324,61554,2025],{"class":867},[324,61556,61557,61560,61562,61565],{"class":326,"line":10493},[324,61558,61559],{"class":916},"            background",[324,61561,52159],{"class":867},[324,61563,61564],{"class":916},"#fff",[324,61566,2025],{"class":867},[324,61568,61569],{"class":326,"line":10517},[324,61570,3258],{"class":867},[324,61572,61573],{"class":326,"line":10522},[324,61574,488],{"emptyLinePlaceholder":487},[324,61576,61577,61579,61581],{"class":326,"line":10527},[324,61578,61469],{"class":734},[324,61580,2130],{"class":52022},[324,61582,16301],{"class":867},[324,61584,61585,61587,61589,61592],{"class":326,"line":10532},[324,61586,52194],{"class":916},[324,61588,52159],{"class":867},[324,61590,61591],{"class":916},"block",[324,61593,2025],{"class":867},[324,61595,61596,61598,61600,61602,61604,61607,61609],{"class":326,"line":10541},[324,61597,52168],{"class":916},[324,61599,52159],{"class":867},[324,61601,1208],{"class":916},[324,61603,52214],{"class":863},[324,61605,61606],{"class":916}," 15",[324,61608,52214],{"class":863},[324,61610,2025],{"class":867},[324,61612,61613,61615,61617,61619,61621],{"class":326,"line":10546},[324,61614,61372],{"class":916},[324,61616,52159],{"class":867},[324,61618,1362],{"class":916},[324,61620,52214],{"class":863},[324,61622,2025],{"class":867},[324,61624,61625,61628,61630,61633],{"class":326,"line":10552},[324,61626,61627],{"class":916},"            color",[324,61629,52159],{"class":867},[324,61631,61632],{"class":916},"#424242",[324,61634,2025],{"class":867},[324,61636,61637,61640,61642,61644],{"class":326,"line":10573},[324,61638,61639],{"class":916},"            text-decoration",[324,61641,52159],{"class":867},[324,61643,55459],{"class":916},[324,61645,2025],{"class":867},[324,61647,61648],{"class":326,"line":10579},[324,61649,3258],{"class":867},[324,61651,61652],{"class":326,"line":10593},[324,61653,488],{"emptyLinePlaceholder":487},[324,61655,61656,61658,61660,61663],{"class":326,"line":10599},[324,61657,61469],{"class":734},[324,61659,2130],{"class":52022},[324,61661,61662],{"class":734},":hover",[324,61664,16301],{"class":867},[324,61666,61667,61669,61671,61674],{"class":326,"line":10626},[324,61668,52362],{"class":916},[324,61670,52159],{"class":867},[324,61672,61673],{"class":916},"#eee",[324,61675,2025],{"class":867},[324,61677,61678],{"class":326,"line":10635},[324,61679,3258],{"class":867},[324,61681,61682,61684,61686],{"class":326,"line":10641},[324,61683,52498],{"class":867},[324,61685,775],{"class":52022},[324,61687,52029],{"class":867},[324,61689,61690],{"class":326,"line":10649},[324,61691,488],{"emptyLinePlaceholder":487},[324,61693,61694,61696,61698],{"class":326,"line":10654},[324,61695,52507],{"class":867},[324,61697,52056],{"class":52022},[324,61699,52029],{"class":867},[324,61701,61702],{"class":326,"line":17333},[324,61703,488],{"emptyLinePlaceholder":487},[324,61705,61706,61708,61710],{"class":326,"line":17339},[324,61707,1774],{"class":867},[324,61709,52522],{"class":52022},[324,61711,52029],{"class":867},[324,61713,61714,61716,61718,61720,61722,61725],{"class":326,"line":17362},[324,61715,52063],{"class":867},[324,61717,52333],{"class":52022},[324,61719,54208],{"class":734},[324,61721,913],{"class":867},[324,61723,61724],{"class":738},"\"mi\"",[324,61726,52029],{"class":867},[324,61728,61729,61731,61733,61735,61737,61740,61743,61745,61748],{"class":326,"line":17368},[324,61730,56024],{"class":867},[324,61732,54543],{"class":52022},[324,61734,54546],{"class":734},[324,61736,913],{"class":867},[324,61738,61739],{"class":738},"\"search\"",[324,61741,61742],{"class":734}," placeholder",[324,61744,913],{"class":867},[324,61746,61747],{"class":738},"\"小米笔记本\"",[324,61749,52029],{"class":867},[324,61751,61752,61754,61756,61758,61760,61763],{"class":326,"line":17391},[324,61753,56024],{"class":867},[324,61755,1871],{"class":52022},[324,61757,54208],{"class":734},[324,61759,913],{"class":867},[324,61761,61762],{"class":738},"\"result-list\"",[324,61764,52029],{"class":867},[324,61766,61767,61770,61772,61775,61777,61780,61782,61785,61788,61790,61792,61794],{"class":326,"line":17405},[324,61768,61769],{"class":867},"            \u003C",[324,61771,195],{"class":52022},[324,61773,61774],{"class":867},">\u003C",[324,61776,25],{"class":52022},[324,61778,61779],{"class":734}," href",[324,61781,913],{"class":867},[324,61783,61784],{"class":738},"\"#\"",[324,61786,61787],{"class":867},">全部商品\u003C\u002F",[324,61789,25],{"class":52022},[324,61791,56036],{"class":867},[324,61793,195],{"class":52022},[324,61795,52029],{"class":867},[324,61797,61798,61800,61802,61804,61806,61808,61810,61812,61815,61817,61819,61821],{"class":326,"line":17425},[324,61799,61769],{"class":867},[324,61801,195],{"class":52022},[324,61803,61774],{"class":867},[324,61805,25],{"class":52022},[324,61807,61779],{"class":734},[324,61809,913],{"class":867},[324,61811,61784],{"class":738},[324,61813,61814],{"class":867},">小米11\u003C\u002F",[324,61816,25],{"class":52022},[324,61818,56036],{"class":867},[324,61820,195],{"class":52022},[324,61822,52029],{"class":867},[324,61824,61825,61827,61829,61831,61833,61835,61837,61839,61842,61844,61846,61848],{"class":326,"line":17431},[324,61826,61769],{"class":867},[324,61828,195],{"class":52022},[324,61830,61774],{"class":867},[324,61832,25],{"class":52022},[324,61834,61779],{"class":734},[324,61836,913],{"class":867},[324,61838,61784],{"class":738},[324,61840,61841],{"class":867},">小米10S\u003C\u002F",[324,61843,25],{"class":52022},[324,61845,56036],{"class":867},[324,61847,195],{"class":52022},[324,61849,52029],{"class":867},[324,61851,61852,61854,61856,61858,61860,61862,61864,61866,61869,61871,61873,61875],{"class":326,"line":17442},[324,61853,61769],{"class":867},[324,61855,195],{"class":52022},[324,61857,61774],{"class":867},[324,61859,25],{"class":52022},[324,61861,61779],{"class":734},[324,61863,913],{"class":867},[324,61865,61784],{"class":738},[324,61867,61868],{"class":867},">小米笔记本\u003C\u002F",[324,61870,25],{"class":52022},[324,61872,56036],{"class":867},[324,61874,195],{"class":52022},[324,61876,52029],{"class":867},[324,61878,61879,61881,61883,61885,61887,61889,61891,61893,61896,61898,61900,61902],{"class":326,"line":17465},[324,61880,61769],{"class":867},[324,61882,195],{"class":52022},[324,61884,61774],{"class":867},[324,61886,25],{"class":52022},[324,61888,61779],{"class":734},[324,61890,913],{"class":867},[324,61892,61784],{"class":738},[324,61894,61895],{"class":867},">小米手机\u003C\u002F",[324,61897,25],{"class":52022},[324,61899,56036],{"class":867},[324,61901,195],{"class":52022},[324,61903,52029],{"class":867},[324,61905,61906,61908,61910,61912,61914,61916,61918,61920,61923,61925,61927,61929],{"class":326,"line":17487},[324,61907,61769],{"class":867},[324,61909,195],{"class":52022},[324,61911,61774],{"class":867},[324,61913,25],{"class":52022},[324,61915,61779],{"class":734},[324,61917,913],{"class":867},[324,61919,61784],{"class":738},[324,61921,61922],{"class":867},">黑鲨4\u003C\u002F",[324,61924,25],{"class":52022},[324,61926,56036],{"class":867},[324,61928,195],{"class":52022},[324,61930,52029],{"class":867},[324,61932,61933,61935,61937,61939,61941,61943,61945,61947,61950,61952,61954,61956],{"class":326,"line":17492},[324,61934,61769],{"class":867},[324,61936,195],{"class":52022},[324,61938,61774],{"class":867},[324,61940,25],{"class":52022},[324,61942,61779],{"class":734},[324,61944,913],{"class":867},[324,61946,61784],{"class":738},[324,61948,61949],{"class":867},">空调\u003C\u002F",[324,61951,25],{"class":52022},[324,61953,56036],{"class":867},[324,61955,195],{"class":52022},[324,61957,52029],{"class":867},[324,61959,61960,61963,61965],{"class":326,"line":17498},[324,61961,61962],{"class":867},"        \u003C\u002F",[324,61964,1871],{"class":52022},[324,61966,52029],{"class":867},[324,61968,61969,61971,61973],{"class":326,"line":17512},[324,61970,52498],{"class":867},[324,61972,52333],{"class":52022},[324,61974,52029],{"class":867},[324,61976,61977,61979,61981],{"class":326,"line":17525},[324,61978,52063],{"class":867},[324,61980,52535],{"class":52022},[324,61982,52029],{"class":867},[324,61984,61985],{"class":326,"line":17530},[324,61986,61987],{"class":772},"        \u002F\u002F 1. 获取元素\n",[324,61989,61990,61993,61995,61997,61999,62001,62003,62006],{"class":326,"line":17544},[324,61991,61992],{"class":863},"        const",[324,61994,61327],{"class":916},[324,61996,14293],{"class":863},[324,61998,55118],{"class":867},[324,62000,55121],{"class":734},[324,62002,868],{"class":867},[324,62004,62005],{"class":738},"'[type=search]'",[324,62007,874],{"class":867},[324,62009,62010,62012,62015,62017,62019,62021,62023,62026],{"class":326,"line":17549},[324,62011,61992],{"class":863},[324,62013,62014],{"class":916}," ul",[324,62016,14293],{"class":863},[324,62018,55118],{"class":867},[324,62020,55121],{"class":734},[324,62022,868],{"class":867},[324,62024,62025],{"class":738},"'.result-list'",[324,62027,874],{"class":867},[324,62029,62030],{"class":326,"line":17555},[324,62031,62032],{"class":772},"        \u002F\u002F console.log(input)\n",[324,62034,62035],{"class":326,"line":17560},[324,62036,62037],{"class":772},"        \u002F\u002F 2. 监听事件 获得焦点\n",[324,62039,62040,62043,62045,62047,62050,62052,62054],{"class":326,"line":17574},[324,62041,62042],{"class":867},"        input.",[324,62044,58535],{"class":734},[324,62046,868],{"class":867},[324,62048,62049],{"class":738},"'focus'",[324,62051,13164],{"class":867},[324,62053,55171],{"class":863},[324,62055,55174],{"class":867},[324,62057,62058],{"class":326,"line":17579},[324,62059,62060],{"class":772},"            \u002F\u002F ul显示\n",[324,62062,62063,62066,62068],{"class":326,"line":17584},[324,62064,62065],{"class":867},"            ul.style.display ",[324,62067,913],{"class":863},[324,62069,62070],{"class":738}," 'block'\n",[324,62072,62073],{"class":326,"line":17598},[324,62074,62075],{"class":772},"            \u002F\u002F 添加一个带有颜色边框的类名\n",[324,62077,62078,62081,62083,62085,62088],{"class":326,"line":17610},[324,62079,62080],{"class":867},"            input.classList.",[324,62082,6063],{"class":734},[324,62084,868],{"class":867},[324,62086,62087],{"class":738},"'search'",[324,62089,874],{"class":867},[324,62091,62092],{"class":326,"line":17615},[324,62093,62094],{"class":867},"        })\n",[324,62096,62097],{"class":326,"line":17628},[324,62098,62099],{"class":772},"        \u002F\u002F 3. 监听事件 失去焦点\n",[324,62101,62102,62104,62106,62108,62111,62113,62115],{"class":326,"line":17633},[324,62103,62042],{"class":867},[324,62105,58535],{"class":734},[324,62107,868],{"class":867},[324,62109,62110],{"class":738},"'blur'",[324,62112,13164],{"class":867},[324,62114,55171],{"class":863},[324,62116,55174],{"class":867},[324,62118,62119,62121,62123],{"class":326,"line":17638},[324,62120,62065],{"class":867},[324,62122,913],{"class":863},[324,62124,62125],{"class":738}," 'none'\n",[324,62127,62128,62130,62132,62134,62136],{"class":326,"line":17643},[324,62129,62080],{"class":867},[324,62131,57728],{"class":734},[324,62133,868],{"class":867},[324,62135,62087],{"class":738},[324,62137,874],{"class":867},[324,62139,62140],{"class":326,"line":17656},[324,62141,62094],{"class":867},[324,62143,62144,62146,62148],{"class":326,"line":17661},[324,62145,52498],{"class":867},[324,62147,52535],{"class":52022},[324,62149,52029],{"class":867},[324,62151,62152,62154,62156],{"class":326,"line":33355},[324,62153,52507],{"class":867},[324,62155,52522],{"class":52022},[324,62157,52029],{"class":867},[324,62159,62160],{"class":326,"line":33361},[324,62161,488],{"emptyLinePlaceholder":487},[324,62163,62164,62166,62168],{"class":326,"line":33367},[324,62165,52507],{"class":867},[324,62167,51357],{"class":52022},[324,62169,52029],{"class":867},[151,62171,62173],{"id":62172},"_3253-键盘事件","3.2.5.3 键盘事件",[19,62175,62176],{},"评论字数统计案例",[19,62178,62179],{},"补充知识点：点击表单元素，获得焦点时盒子变大，可以使用focus伪类选择器",[19,62181,62182],{},"牢记focus伪类选择器",[52066,62184],{"charSet":62185},"UTF-8",[52066,62187],{"name":62188,"content":62189},"viewport","width=device-width, initial-scale=1.0",[52129,62191,62192],{},"Document",[775,62194,62195],{},"\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",[54543,62197],{"type":5916},[1871,62199,62200,62203],{},[195,62201,62202],{},"键盘事件代码，显示可以使用opacity样式属性，通过透明度的形式实现盒子或者文字显示和隐藏，相比于disabled来说显示效果更好一些，一定要学会使用",[195,62204,62205],{},"一定要用好placeholder，它是表单元素的属性值，表示提示文本",[316,62207,62209],{"className":51355,"code":62208,"language":51357,"meta":50,"style":50},"\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",[269,62210,62211,62221,62235,62239,62247,62261,62281,62301,62314,62322,62329,62342,62356,62366,62376,62380,62384,62391,62403,62415,62427,62439,62468,62481,62485,62489,62498,62509,62521,62532,62543,62555,62566,62578,62594,62606,62610,62614,62625,62636,62646,62658,62662,62666,62674,62685,62695,62706,62718,62731,62743,62755,62759,62763,62772,62784,62795,62808,62819,62833,62837,62841,62848,62860,62872,62882,62886,62890,62899,62911,62921,62925,62929,62940,62950,62969,62982,62986,62990,63000,63010,63014,63018,63029,63040,63052,63064,63068,63072,63083,63094,63108,63112,63116,63127,63137,63149,63153,63161,63169,63173,63181,63196,63215,63255,63268,63276,63290,63310,63318,63333,63356,63374,63389,63409,63429,63449,63457,63465,63473,63481,63501,63521,63526,63543,63552,63556,63561,63577,63585,63589,63594,63611,63616,63641,63645,63649,63654,63659,63667,63675,63679],{"__ignoreMap":50},[324,62212,62213,62215,62217,62219],{"class":326,"line":327},[324,62214,52019],{"class":867},[324,62216,52023],{"class":52022},[324,62218,52026],{"class":734},[324,62220,52029],{"class":867},[324,62222,62223,62225,62227,62229,62231,62233],{"class":326,"line":203},[324,62224,1774],{"class":867},[324,62226,51357],{"class":52022},[324,62228,52038],{"class":734},[324,62230,913],{"class":867},[324,62232,52043],{"class":738},[324,62234,52029],{"class":867},[324,62236,62237],{"class":326,"line":338},[324,62238,488],{"emptyLinePlaceholder":487},[324,62240,62241,62243,62245],{"class":326,"line":344},[324,62242,1774],{"class":867},[324,62244,52056],{"class":52022},[324,62246,52029],{"class":867},[324,62248,62249,62251,62253,62255,62257,62259],{"class":326,"line":484},[324,62250,52866],{"class":867},[324,62252,52066],{"class":52022},[324,62254,52069],{"class":734},[324,62256,913],{"class":867},[324,62258,52074],{"class":738},[324,62260,52029],{"class":867},[324,62262,62263,62265,62267,62269,62271,62273,62275,62277,62279],{"class":326,"line":491},[324,62264,52866],{"class":867},[324,62266,52066],{"class":52022},[324,62268,52085],{"class":734},[324,62270,913],{"class":867},[324,62272,52090],{"class":738},[324,62274,52093],{"class":734},[324,62276,913],{"class":867},[324,62278,52098],{"class":738},[324,62280,52029],{"class":867},[324,62282,62283,62285,62287,62289,62291,62293,62295,62297,62299],{"class":326,"line":496},[324,62284,52866],{"class":867},[324,62286,52066],{"class":52022},[324,62288,15649],{"class":734},[324,62290,913],{"class":867},[324,62292,52113],{"class":738},[324,62294,52093],{"class":734},[324,62296,913],{"class":867},[324,62298,52120],{"class":738},[324,62300,52029],{"class":867},[324,62302,62303,62305,62307,62310,62312],{"class":326,"line":502},[324,62304,52866],{"class":867},[324,62306,52129],{"class":52022},[324,62308,62309],{"class":867},">评论回车发布\u003C\u002F",[324,62311,52129],{"class":52022},[324,62313,52029],{"class":867},[324,62315,62316,62318,62320],{"class":326,"line":508},[324,62317,52866],{"class":867},[324,62319,775],{"class":52022},[324,62321,52029],{"class":867},[324,62323,62324,62327],{"class":326,"line":514},[324,62325,62326],{"class":734},"    .wrapper",[324,62328,16301],{"class":867},[324,62330,62331,62334,62336,62338,62340],{"class":326,"line":2343},[324,62332,62333],{"class":916},"      min-width",[324,62335,52159],{"class":867},[324,62337,4716],{"class":916},[324,62339,52214],{"class":863},[324,62341,2025],{"class":867},[324,62343,62344,62347,62349,62352,62354],{"class":326,"line":2348},[324,62345,62346],{"class":916},"      max-width",[324,62348,52159],{"class":867},[324,62350,62351],{"class":916},"800",[324,62353,52214],{"class":863},[324,62355,2025],{"class":867},[324,62357,62358,62360,62362,62364],{"class":326,"line":2354},[324,62359,55731],{"class":916},[324,62361,52159],{"class":867},[324,62363,52199],{"class":916},[324,62365,2025],{"class":867},[324,62367,62368,62370,62372,62374],{"class":326,"line":2359},[324,62369,55742],{"class":916},[324,62371,52159],{"class":867},[324,62373,52302],{"class":916},[324,62375,2025],{"class":867},[324,62377,62378],{"class":326,"line":2373},[324,62379,2917],{"class":867},[324,62381,62382],{"class":326,"line":2378},[324,62383,488],{"emptyLinePlaceholder":487},[324,62385,62386,62389],{"class":326,"line":2384},[324,62387,62388],{"class":734},"    .avatar",[324,62390,16301],{"class":867},[324,62392,62393,62395,62397,62399,62401],{"class":326,"line":2405},[324,62394,55493],{"class":916},[324,62396,52159],{"class":867},[324,62398,1471],{"class":916},[324,62400,52214],{"class":863},[324,62402,2025],{"class":867},[324,62404,62405,62407,62409,62411,62413],{"class":326,"line":2410},[324,62406,55507],{"class":916},[324,62408,52159],{"class":867},[324,62410,1471],{"class":916},[324,62412,52214],{"class":863},[324,62414,2025],{"class":867},[324,62416,62417,62419,62421,62423,62425],{"class":326,"line":2424},[324,62418,55856],{"class":916},[324,62420,52159],{"class":867},[324,62422,1520],{"class":916},[324,62424,1192],{"class":863},[324,62426,2025],{"class":867},[324,62428,62429,62432,62434,62437],{"class":326,"line":2429},[324,62430,62431],{"class":916},"      overflow",[324,62433,52159],{"class":867},[324,62435,62436],{"class":916},"hidden",[324,62438,2025],{"class":867},[324,62440,62441,62444,62446,62449,62451,62454,62456,62459,62461,62463,62466],{"class":326,"line":2458},[324,62442,62443],{"class":916},"      background",[324,62445,52159],{"class":867},[324,62447,62448],{"class":916},"url",[324,62450,868],{"class":867},[324,62452,62453],{"class":5945},"...\u002F..\u002Fpublic\u002Fimages\u002Favatar.jpg",[324,62455,14443],{"class":867},[324,62457,62458],{"class":916},"no-repeat",[324,62460,17873],{"class":916},[324,62462,25702],{"class":867},[324,62464,62465],{"class":916},"cover",[324,62467,2025],{"class":867},[324,62469,62470,62473,62475,62477,62479],{"class":326,"line":2463},[324,62471,62472],{"class":916},"      margin-right",[324,62474,52159],{"class":867},[324,62476,1564],{"class":916},[324,62478,52214],{"class":863},[324,62480,2025],{"class":867},[324,62482,62483],{"class":326,"line":2480},[324,62484,2917],{"class":867},[324,62486,62487],{"class":326,"line":2485},[324,62488,488],{"emptyLinePlaceholder":487},[324,62490,62491,62493,62496],{"class":326,"line":2490},[324,62492,62326],{"class":734},[324,62494,62495],{"class":52022}," textarea",[324,62497,16301],{"class":867},[324,62499,62500,62503,62505,62507],{"class":326,"line":2495},[324,62501,62502],{"class":916},"      outline",[324,62504,52159],{"class":867},[324,62506,55459],{"class":916},[324,62508,2025],{"class":867},[324,62510,62511,62514,62516,62519],{"class":326,"line":2509},[324,62512,62513],{"class":916},"      border-color",[324,62515,52159],{"class":867},[324,62517,62518],{"class":916},"transparent",[324,62520,2025],{"class":867},[324,62522,62523,62526,62528,62530],{"class":326,"line":2514},[324,62524,62525],{"class":916},"      resize",[324,62527,52159],{"class":867},[324,62529,55459],{"class":916},[324,62531,2025],{"class":867},[324,62533,62534,62536,62538,62541],{"class":326,"line":3306},[324,62535,62443],{"class":916},[324,62537,52159],{"class":867},[324,62539,62540],{"class":916},"#f5f5f5",[324,62542,2025],{"class":867},[324,62544,62545,62547,62549,62551,62553],{"class":326,"line":3320},[324,62546,55856],{"class":916},[324,62548,52159],{"class":867},[324,62550,1157],{"class":916},[324,62552,52214],{"class":863},[324,62554,2025],{"class":867},[324,62556,62557,62560,62562,62564],{"class":326,"line":3328},[324,62558,62559],{"class":916},"      flex",[324,62561,52159],{"class":867},[324,62563,1082],{"class":916},[324,62565,2025],{"class":867},[324,62567,62568,62570,62572,62574,62576],{"class":326,"line":3333},[324,62569,55417],{"class":916},[324,62571,52159],{"class":867},[324,62573,1310],{"class":916},[324,62575,52214],{"class":863},[324,62577,2025],{"class":867},[324,62579,62580,62583,62585,62587,62590,62592],{"class":326,"line":3339},[324,62581,62582],{"class":916},"      transition",[324,62584,52159],{"class":867},[324,62586,28843],{"class":916},[324,62588,62589],{"class":916}," 0.5",[324,62591,1559],{"class":863},[324,62593,2025],{"class":867},[324,62595,62596,62598,62600,62602,62604],{"class":326,"line":3345},[324,62597,55507],{"class":916},[324,62599,52159],{"class":867},[324,62601,1815],{"class":916},[324,62603,52214],{"class":863},[324,62605,2025],{"class":867},[324,62607,62608],{"class":326,"line":3350},[324,62609,2917],{"class":867},[324,62611,62612],{"class":326,"line":8677},[324,62613,488],{"emptyLinePlaceholder":487},[324,62615,62616,62618,62620,62623],{"class":326,"line":8701},[324,62617,62326],{"class":734},[324,62619,62495],{"class":52022},[324,62621,62622],{"class":734},":focus",[324,62624,16301],{"class":867},[324,62626,62627,62629,62631,62634],{"class":326,"line":8706},[324,62628,62513],{"class":916},[324,62630,52159],{"class":867},[324,62632,62633],{"class":916},"#e4e4e4",[324,62635,2025],{"class":867},[324,62637,62638,62640,62642,62644],{"class":326,"line":8712},[324,62639,62443],{"class":916},[324,62641,52159],{"class":867},[324,62643,61564],{"class":916},[324,62645,2025],{"class":867},[324,62647,62648,62650,62652,62654,62656],{"class":326,"line":8739},[324,62649,55507],{"class":916},[324,62651,52159],{"class":867},[324,62653,1520],{"class":916},[324,62655,52214],{"class":863},[324,62657,2025],{"class":867},[324,62659,62660],{"class":326,"line":8744},[324,62661,2917],{"class":867},[324,62663,62664],{"class":326,"line":8750},[324,62665,488],{"emptyLinePlaceholder":487},[324,62667,62668,62670,62672],{"class":326,"line":8762},[324,62669,62326],{"class":734},[324,62671,58189],{"class":52022},[324,62673,16301],{"class":867},[324,62675,62676,62678,62680,62683],{"class":326,"line":8774},[324,62677,62443],{"class":916},[324,62679,52159],{"class":867},[324,62681,62682],{"class":916},"#00aeec",[324,62684,2025],{"class":867},[324,62686,62687,62689,62691,62693],{"class":326,"line":8786},[324,62688,58138],{"class":916},[324,62690,52159],{"class":867},[324,62692,61564],{"class":916},[324,62694,2025],{"class":867},[324,62696,62697,62700,62702,62704],{"class":326,"line":10445},[324,62698,62699],{"class":916},"      border",[324,62701,52159],{"class":867},[324,62703,55459],{"class":916},[324,62705,2025],{"class":867},[324,62707,62708,62710,62712,62714,62716],{"class":326,"line":10470},[324,62709,55856],{"class":916},[324,62711,52159],{"class":867},[324,62713,1157],{"class":916},[324,62715,52214],{"class":863},[324,62717,2025],{"class":867},[324,62719,62720,62723,62725,62727,62729],{"class":326,"line":10493},[324,62721,62722],{"class":916},"      margin-left",[324,62724,52159],{"class":867},[324,62726,1310],{"class":916},[324,62728,52214],{"class":863},[324,62730,2025],{"class":867},[324,62732,62733,62735,62737,62739,62741],{"class":326,"line":10517},[324,62734,55493],{"class":916},[324,62736,52159],{"class":867},[324,62738,1220],{"class":916},[324,62740,52214],{"class":863},[324,62742,2025],{"class":867},[324,62744,62745,62748,62750,62753],{"class":326,"line":10522},[324,62746,62747],{"class":916},"      cursor",[324,62749,52159],{"class":867},[324,62751,62752],{"class":916},"pointer",[324,62754,2025],{"class":867},[324,62756,62757],{"class":326,"line":10527},[324,62758,2917],{"class":867},[324,62760,62761],{"class":326,"line":10532},[324,62762,488],{"emptyLinePlaceholder":487},[324,62764,62765,62767,62770],{"class":326,"line":10541},[324,62766,62326],{"class":734},[324,62768,62769],{"class":734}," .total",[324,62771,16301],{"class":867},[324,62773,62774,62776,62778,62780,62782],{"class":326,"line":10546},[324,62775,62472],{"class":916},[324,62777,52159],{"class":867},[324,62779,1476],{"class":916},[324,62781,52214],{"class":863},[324,62783,2025],{"class":867},[324,62785,62786,62788,62790,62793],{"class":326,"line":10552},[324,62787,58138],{"class":916},[324,62789,52159],{"class":867},[324,62791,62792],{"class":916},"#999",[324,62794,2025],{"class":867},[324,62796,62797,62800,62802,62804,62806],{"class":326,"line":10573},[324,62798,62799],{"class":916},"      margin-top",[324,62801,52159],{"class":867},[324,62803,1183],{"class":916},[324,62805,52214],{"class":863},[324,62807,2025],{"class":867},[324,62809,62810,62813,62815,62817],{"class":326,"line":10579},[324,62811,62812],{"class":916},"      opacity",[324,62814,52159],{"class":867},[324,62816,1056],{"class":916},[324,62818,2025],{"class":867},[324,62820,62821,62823,62825,62827,62829,62831],{"class":326,"line":10593},[324,62822,62582],{"class":916},[324,62824,52159],{"class":867},[324,62826,28843],{"class":916},[324,62828,62589],{"class":916},[324,62830,1559],{"class":863},[324,62832,2025],{"class":867},[324,62834,62835],{"class":326,"line":10599},[324,62836,2917],{"class":867},[324,62838,62839],{"class":326,"line":10626},[324,62840,488],{"emptyLinePlaceholder":487},[324,62842,62843,62846],{"class":326,"line":10635},[324,62844,62845],{"class":734},"    .list",[324,62847,16301],{"class":867},[324,62849,62850,62852,62854,62856,62858],{"class":326,"line":10641},[324,62851,62333],{"class":916},[324,62853,52159],{"class":867},[324,62855,4716],{"class":916},[324,62857,52214],{"class":863},[324,62859,2025],{"class":867},[324,62861,62862,62864,62866,62868,62870],{"class":326,"line":10649},[324,62863,62346],{"class":916},[324,62865,52159],{"class":867},[324,62867,62351],{"class":916},[324,62869,52214],{"class":863},[324,62871,2025],{"class":867},[324,62873,62874,62876,62878,62880],{"class":326,"line":10654},[324,62875,55731],{"class":916},[324,62877,52159],{"class":867},[324,62879,52199],{"class":916},[324,62881,2025],{"class":867},[324,62883,62884],{"class":326,"line":17333},[324,62885,2917],{"class":867},[324,62887,62888],{"class":326,"line":17339},[324,62889,488],{"emptyLinePlaceholder":487},[324,62891,62892,62894,62897],{"class":326,"line":17362},[324,62893,62845],{"class":734},[324,62895,62896],{"class":734}," .item",[324,62898,16301],{"class":867},[324,62900,62901,62903,62905,62907,62909],{"class":326,"line":17368},[324,62902,55493],{"class":916},[324,62904,52159],{"class":867},[324,62906,1175],{"class":916},[324,62908,1192],{"class":863},[324,62910,2025],{"class":867},[324,62912,62913,62915,62917,62919],{"class":326,"line":17391},[324,62914,55731],{"class":916},[324,62916,52159],{"class":867},[324,62918,52199],{"class":916},[324,62920,2025],{"class":867},[324,62922,62923],{"class":326,"line":17405},[324,62924,2917],{"class":867},[324,62926,62927],{"class":326,"line":17425},[324,62928,488],{"emptyLinePlaceholder":487},[324,62930,62931,62933,62935,62938],{"class":326,"line":17431},[324,62932,62845],{"class":734},[324,62934,62896],{"class":734},[324,62936,62937],{"class":734}," .info",[324,62939,16301],{"class":867},[324,62941,62942,62944,62946,62948],{"class":326,"line":17442},[324,62943,62559],{"class":916},[324,62945,52159],{"class":867},[324,62947,1082],{"class":916},[324,62949,2025],{"class":867},[324,62951,62952,62955,62957,62959,62961,62964,62967],{"class":326,"line":17465},[324,62953,62954],{"class":916},"      border-bottom",[324,62956,52159],{"class":867},[324,62958,1082],{"class":916},[324,62960,52214],{"class":863},[324,62962,62963],{"class":916}," dashed",[324,62965,62966],{"class":916}," #e4e4e4",[324,62968,2025],{"class":867},[324,62970,62971,62974,62976,62978,62980],{"class":326,"line":17487},[324,62972,62973],{"class":916},"      padding-bottom",[324,62975,52159],{"class":867},[324,62977,1310],{"class":916},[324,62979,52214],{"class":863},[324,62981,2025],{"class":867},[324,62983,62984],{"class":326,"line":17492},[324,62985,2917],{"class":867},[324,62987,62988],{"class":326,"line":17498},[324,62989,488],{"emptyLinePlaceholder":487},[324,62991,62992,62994,62996,62998],{"class":326,"line":17512},[324,62993,62845],{"class":734},[324,62995,62896],{"class":734},[324,62997,7554],{"class":52022},[324,62999,16301],{"class":867},[324,63001,63002,63004,63006,63008],{"class":326,"line":17525},[324,63003,55428],{"class":916},[324,63005,52159],{"class":867},[324,63007,1056],{"class":916},[324,63009,2025],{"class":867},[324,63011,63012],{"class":326,"line":17530},[324,63013,2917],{"class":867},[324,63015,63016],{"class":326,"line":17544},[324,63017,488],{"emptyLinePlaceholder":487},[324,63019,63020,63022,63024,63027],{"class":326,"line":17549},[324,63021,62845],{"class":734},[324,63023,62896],{"class":734},[324,63025,63026],{"class":734}," .name",[324,63028,16301],{"class":867},[324,63030,63031,63033,63035,63038],{"class":326,"line":17555},[324,63032,58138],{"class":916},[324,63034,52159],{"class":867},[324,63036,63037],{"class":916},"#FB7299",[324,63039,2025],{"class":867},[324,63041,63042,63044,63046,63048,63050],{"class":326,"line":17560},[324,63043,55644],{"class":916},[324,63045,52159],{"class":867},[324,63047,1413],{"class":916},[324,63049,52214],{"class":863},[324,63051,2025],{"class":867},[324,63053,63054,63057,63059,63062],{"class":326,"line":17574},[324,63055,63056],{"class":916},"      font-weight",[324,63058,52159],{"class":867},[324,63060,63061],{"class":916},"bold",[324,63063,2025],{"class":867},[324,63065,63066],{"class":326,"line":17579},[324,63067,2917],{"class":867},[324,63069,63070],{"class":326,"line":17584},[324,63071,488],{"emptyLinePlaceholder":487},[324,63073,63074,63076,63078,63081],{"class":326,"line":17598},[324,63075,62845],{"class":734},[324,63077,62896],{"class":734},[324,63079,63080],{"class":734}," .text",[324,63082,16301],{"class":867},[324,63084,63085,63087,63089,63092],{"class":326,"line":17610},[324,63086,58138],{"class":916},[324,63088,52159],{"class":867},[324,63090,63091],{"class":916},"#333",[324,63093,2025],{"class":867},[324,63095,63096,63098,63100,63102,63104,63106],{"class":326,"line":17615},[324,63097,55417],{"class":916},[324,63099,52159],{"class":867},[324,63101,1310],{"class":916},[324,63103,52214],{"class":863},[324,63105,4822],{"class":916},[324,63107,2025],{"class":867},[324,63109,63110],{"class":326,"line":17628},[324,63111,2917],{"class":867},[324,63113,63114],{"class":326,"line":17633},[324,63115,488],{"emptyLinePlaceholder":487},[324,63117,63118,63120,63122,63125],{"class":326,"line":17638},[324,63119,62845],{"class":734},[324,63121,62896],{"class":734},[324,63123,63124],{"class":734}," .time",[324,63126,16301],{"class":867},[324,63128,63129,63131,63133,63135],{"class":326,"line":17643},[324,63130,58138],{"class":916},[324,63132,52159],{"class":867},[324,63134,62792],{"class":916},[324,63136,2025],{"class":867},[324,63138,63139,63141,63143,63145,63147],{"class":326,"line":17656},[324,63140,55644],{"class":916},[324,63142,52159],{"class":867},[324,63144,1362],{"class":916},[324,63146,52214],{"class":863},[324,63148,2025],{"class":867},[324,63150,63151],{"class":326,"line":17661},[324,63152,2917],{"class":867},[324,63154,63155,63157,63159],{"class":326,"line":33355},[324,63156,53139],{"class":867},[324,63158,775],{"class":52022},[324,63160,52029],{"class":867},[324,63162,63163,63165,63167],{"class":326,"line":33361},[324,63164,52507],{"class":867},[324,63166,52056],{"class":52022},[324,63168,52029],{"class":867},[324,63170,63171],{"class":326,"line":33367},[324,63172,488],{"emptyLinePlaceholder":487},[324,63174,63175,63177,63179],{"class":326,"line":33373},[324,63176,1774],{"class":867},[324,63178,52522],{"class":52022},[324,63180,52029],{"class":867},[324,63182,63183,63185,63187,63189,63191,63194],{"class":326,"line":33379},[324,63184,52866],{"class":867},[324,63186,52333],{"class":52022},[324,63188,54208],{"class":734},[324,63190,913],{"class":867},[324,63192,63193],{"class":738},"\"wrapper\"",[324,63195,52029],{"class":867},[324,63197,63198,63200,63202,63204,63206,63209,63211,63213],{"class":326,"line":33390},[324,63199,52063],{"class":867},[324,63201,1305],{"class":52022},[324,63203,54208],{"class":734},[324,63205,913],{"class":867},[324,63207,63208],{"class":738},"\"avatar\"",[324,63210,56036],{"class":867},[324,63212,1305],{"class":52022},[324,63214,52029],{"class":867},[324,63216,63217,63219,63221,63223,63225,63228,63230,63232,63235,63237,63239,63241,63244,63246,63249,63251,63253],{"class":326,"line":33396},[324,63218,52063],{"class":867},[324,63220,55010],{"class":52022},[324,63222,15688],{"class":734},[324,63224,913],{"class":867},[324,63226,63227],{"class":738},"\"tx\"",[324,63229,61742],{"class":734},[324,63231,913],{"class":867},[324,63233,63234],{"class":738},"\"发一条友善的评论\"",[324,63236,55033],{"class":734},[324,63238,913],{"class":867},[324,63240,4430],{"class":738},[324,63242,63243],{"class":734}," maxlength",[324,63245,913],{"class":867},[324,63247,63248],{"class":738},"\"200\"",[324,63250,56036],{"class":867},[324,63252,55010],{"class":52022},[324,63254,52029],{"class":867},[324,63256,63257,63259,63261,63264,63266],{"class":326,"line":33416},[324,63258,52063],{"class":867},[324,63260,54609],{"class":52022},[324,63262,63263],{"class":867},">发布\u003C\u002F",[324,63265,54609],{"class":52022},[324,63267,52029],{"class":867},[324,63269,63270,63272,63274],{"class":326,"line":33422},[324,63271,53139],{"class":867},[324,63273,52333],{"class":52022},[324,63275,52029],{"class":867},[324,63277,63278,63280,63282,63284,63286,63288],{"class":326,"line":33433},[324,63279,52866],{"class":867},[324,63281,52333],{"class":52022},[324,63283,54208],{"class":734},[324,63285,913],{"class":867},[324,63287,63193],{"class":738},[324,63289,52029],{"class":867},[324,63291,63292,63294,63296,63298,63300,63303,63306,63308],{"class":326,"line":33439},[324,63293,52063],{"class":867},[324,63295,324],{"class":52022},[324,63297,54208],{"class":734},[324,63299,913],{"class":867},[324,63301,63302],{"class":738},"\"total\"",[324,63304,63305],{"class":867},">0\u002F200字\u003C\u002F",[324,63307,324],{"class":52022},[324,63309,52029],{"class":867},[324,63311,63312,63314,63316],{"class":326,"line":33445},[324,63313,53139],{"class":867},[324,63315,52333],{"class":52022},[324,63317,52029],{"class":867},[324,63319,63320,63322,63324,63326,63328,63331],{"class":326,"line":33451},[324,63321,52866],{"class":867},[324,63323,52333],{"class":52022},[324,63325,54208],{"class":734},[324,63327,913],{"class":867},[324,63329,63330],{"class":738},"\"list\"",[324,63332,52029],{"class":867},[324,63334,63335,63337,63339,63341,63343,63346,63349,63351,63354],{"class":326,"line":33457},[324,63336,52063],{"class":867},[324,63338,52333],{"class":52022},[324,63340,54208],{"class":734},[324,63342,913],{"class":867},[324,63344,63345],{"class":738},"\"item\"",[324,63347,63348],{"class":734}," style",[324,63350,913],{"class":867},[324,63352,63353],{"class":738},"\"display: none;\"",[324,63355,52029],{"class":867},[324,63357,63358,63360,63362,63364,63366,63368,63370,63372],{"class":326,"line":33463},[324,63359,55956],{"class":867},[324,63361,1305],{"class":52022},[324,63363,54208],{"class":734},[324,63365,913],{"class":867},[324,63367,63208],{"class":738},[324,63369,56036],{"class":867},[324,63371,1305],{"class":52022},[324,63373,52029],{"class":867},[324,63375,63376,63378,63380,63382,63384,63387],{"class":326,"line":33469},[324,63377,55956],{"class":867},[324,63379,52333],{"class":52022},[324,63381,54208],{"class":734},[324,63383,913],{"class":867},[324,63385,63386],{"class":738},"\"info\"",[324,63388,52029],{"class":867},[324,63390,63391,63393,63395,63397,63399,63402,63405,63407],{"class":326,"line":33475},[324,63392,56024],{"class":867},[324,63394,19],{"class":52022},[324,63396,54208],{"class":734},[324,63398,913],{"class":867},[324,63400,63401],{"class":738},"\"name\"",[324,63403,63404],{"class":867},">清风徐来\u003C\u002F",[324,63406,19],{"class":52022},[324,63408,52029],{"class":867},[324,63410,63411,63413,63415,63417,63419,63422,63425,63427],{"class":326,"line":33495},[324,63412,56024],{"class":867},[324,63414,19],{"class":52022},[324,63416,54208],{"class":734},[324,63418,913],{"class":867},[324,63420,63421],{"class":738},"\"text\"",[324,63423,63424],{"class":867},">大家都辛苦啦，感谢各位大大的努力，能圆满完成真是太好了[笑哭][支持]\u003C\u002F",[324,63426,19],{"class":52022},[324,63428,52029],{"class":867},[324,63430,63431,63433,63435,63437,63439,63442,63445,63447],{"class":326,"line":33501},[324,63432,56024],{"class":867},[324,63434,19],{"class":52022},[324,63436,54208],{"class":734},[324,63438,913],{"class":867},[324,63440,63441],{"class":738},"\"time\"",[324,63443,63444],{"class":867},">2022-10-10 20:29:21\u003C\u002F",[324,63446,19],{"class":52022},[324,63448,52029],{"class":867},[324,63450,63451,63453,63455],{"class":326,"line":33517},[324,63452,56129],{"class":867},[324,63454,52333],{"class":52022},[324,63456,52029],{"class":867},[324,63458,63459,63461,63463],{"class":326,"line":33523},[324,63460,52498],{"class":867},[324,63462,52333],{"class":52022},[324,63464,52029],{"class":867},[324,63466,63467,63469,63471],{"class":326,"line":33537},[324,63468,53139],{"class":867},[324,63470,52333],{"class":52022},[324,63472,52029],{"class":867},[324,63474,63475,63477,63479],{"class":326,"line":33543},[324,63476,52866],{"class":867},[324,63478,52535],{"class":52022},[324,63480,52029],{"class":867},[324,63482,63483,63485,63488,63490,63492,63494,63496,63499],{"class":326,"line":33558},[324,63484,11950],{"class":863},[324,63486,63487],{"class":916}," tx",[324,63489,14293],{"class":863},[324,63491,55118],{"class":867},[324,63493,55121],{"class":734},[324,63495,868],{"class":867},[324,63497,63498],{"class":738},"'#tx'",[324,63500,874],{"class":867},[324,63502,63503,63505,63508,63510,63512,63514,63516,63519],{"class":326,"line":33564},[324,63504,11950],{"class":863},[324,63506,63507],{"class":916}," total",[324,63509,14293],{"class":863},[324,63511,55118],{"class":867},[324,63513,55121],{"class":734},[324,63515,868],{"class":867},[324,63517,63518],{"class":738},"'.total'",[324,63520,874],{"class":867},[324,63522,63523],{"class":326,"line":33573},[324,63524,63525],{"class":772},"    \u002F\u002F 1. 当我们文本域获得了焦点，就让 total 显示出来\n",[324,63527,63528,63531,63533,63535,63537,63539,63541],{"class":326,"line":33579},[324,63529,63530],{"class":867},"    tx.",[324,63532,58535],{"class":734},[324,63534,868],{"class":867},[324,63536,62049],{"class":738},[324,63538,13164],{"class":867},[324,63540,55171],{"class":863},[324,63542,55174],{"class":867},[324,63544,63545,63548,63550],{"class":326,"line":33588},[324,63546,63547],{"class":867},"      total.style.opacity ",[324,63549,913],{"class":863},[324,63551,56421],{"class":916},[324,63553,63554],{"class":326,"line":33594},[324,63555,34183],{"class":867},[324,63557,63558],{"class":326,"line":33600},[324,63559,63560],{"class":772},"    \u002F\u002F 2. 当我们文本域失去了焦点，就让 total 隐藏出来\n",[324,63562,63563,63565,63567,63569,63571,63573,63575],{"class":326,"line":33609},[324,63564,63530],{"class":867},[324,63566,58535],{"class":734},[324,63568,868],{"class":867},[324,63570,62110],{"class":738},[324,63572,13164],{"class":867},[324,63574,55171],{"class":863},[324,63576,55174],{"class":867},[324,63578,63579,63581,63583],{"class":326,"line":33615},[324,63580,63547],{"class":867},[324,63582,913],{"class":863},[324,63584,48055],{"class":916},[324,63586,63587],{"class":326,"line":33626},[324,63588,34183],{"class":867},[324,63590,63591],{"class":326,"line":33632},[324,63592,63593],{"class":772},"    \u002F\u002F 3. 检测用户输入\n",[324,63595,63596,63598,63600,63602,63605,63607,63609],{"class":326,"line":33651},[324,63597,63530],{"class":867},[324,63599,58535],{"class":734},[324,63601,868],{"class":867},[324,63603,63604],{"class":738},"'input'",[324,63606,13164],{"class":867},[324,63608,55171],{"class":863},[324,63610,55174],{"class":867},[324,63612,63613],{"class":326,"line":33657},[324,63614,63615],{"class":772},"      \u002F\u002F console.log(tx.value.length)  得到输入的长度\n",[324,63617,63618,63621,63623,63626,63629,63631,63634,63636,63638],{"class":326,"line":33668},[324,63619,63620],{"class":867},"      total.innerHTML ",[324,63622,913],{"class":863},[324,63624,63625],{"class":738}," `${",[324,63627,63628],{"class":867},"tx",[324,63630,1422],{"class":738},[324,63632,63633],{"class":867},"value",[324,63635,1422],{"class":738},[324,63637,52690],{"class":916},[324,63639,63640],{"class":738},"}\u002F200字`\n",[324,63642,63643],{"class":326,"line":33674},[324,63644,34183],{"class":867},[324,63646,63647],{"class":326,"line":33694},[324,63648,488],{"emptyLinePlaceholder":487},[324,63650,63651],{"class":326,"line":33710},[324,63652,63653],{"class":772},"    \u002F\u002F const str = 'andy'\n",[324,63655,63656],{"class":326,"line":33716},[324,63657,63658],{"class":772},"    \u002F\u002F console.log(str.length)\n",[324,63660,63661,63663,63665],{"class":326,"line":33730},[324,63662,53139],{"class":867},[324,63664,52535],{"class":52022},[324,63666,52029],{"class":867},[324,63668,63669,63671,63673],{"class":326,"line":33736},[324,63670,52507],{"class":867},[324,63672,52522],{"class":52022},[324,63674,52029],{"class":867},[324,63676,63677],{"class":326,"line":33742},[324,63678,488],{"emptyLinePlaceholder":487},[324,63680,63681,63683,63685],{"class":326,"line":33753},[324,63682,52507],{"class":867},[324,63684,51357],{"class":52022},[324,63686,52029],{"class":867},[151,63688,63690],{"id":63689},"_3254-change事件","3.2.5.4 change事件",[19,63692,63693],{},"在输入框中，获得焦点，不输入任何内容，再失去焦点，则会不会触发事件，函数不会执行",[19,63695,63696],{},"第一次要输入内容时，获得焦点，输入内容，失去焦点，函数执行",[19,63698,63699],{},"后边如果获得焦点不输入任何内容，表单里的内容只要不变，函数就不会去执行",[316,63701,63703],{"className":51355,"code":63702,"language":51357,"meta":50,"style":50},"\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",[269,63704,63705,63715,63729,63733,63741,63755,63775,63787,63795,63799,63807,63821,63829,63847,63865,63877,63881,63889,63897,63901],{"__ignoreMap":50},[324,63706,63707,63709,63711,63713],{"class":326,"line":327},[324,63708,52019],{"class":867},[324,63710,52023],{"class":52022},[324,63712,52026],{"class":734},[324,63714,52029],{"class":867},[324,63716,63717,63719,63721,63723,63725,63727],{"class":326,"line":203},[324,63718,1774],{"class":867},[324,63720,51357],{"class":52022},[324,63722,52038],{"class":734},[324,63724,913],{"class":867},[324,63726,52043],{"class":738},[324,63728,52029],{"class":867},[324,63730,63731],{"class":326,"line":338},[324,63732,488],{"emptyLinePlaceholder":487},[324,63734,63735,63737,63739],{"class":326,"line":344},[324,63736,1774],{"class":867},[324,63738,52056],{"class":52022},[324,63740,52029],{"class":867},[324,63742,63743,63745,63747,63749,63751,63753],{"class":326,"line":484},[324,63744,52866],{"class":867},[324,63746,52066],{"class":52022},[324,63748,52069],{"class":734},[324,63750,913],{"class":867},[324,63752,52074],{"class":738},[324,63754,52029],{"class":867},[324,63756,63757,63759,63761,63763,63765,63767,63769,63771,63773],{"class":326,"line":491},[324,63758,52866],{"class":867},[324,63760,52066],{"class":52022},[324,63762,15649],{"class":734},[324,63764,913],{"class":867},[324,63766,52113],{"class":738},[324,63768,52093],{"class":734},[324,63770,913],{"class":867},[324,63772,52120],{"class":738},[324,63774,52029],{"class":867},[324,63776,63777,63779,63781,63783,63785],{"class":326,"line":496},[324,63778,52866],{"class":867},[324,63780,52129],{"class":52022},[324,63782,52132],{"class":867},[324,63784,52129],{"class":52022},[324,63786,52029],{"class":867},[324,63788,63789,63791,63793],{"class":326,"line":502},[324,63790,52507],{"class":867},[324,63792,52056],{"class":52022},[324,63794,52029],{"class":867},[324,63796,63797],{"class":326,"line":508},[324,63798,488],{"emptyLinePlaceholder":487},[324,63800,63801,63803,63805],{"class":326,"line":514},[324,63802,1774],{"class":867},[324,63804,52522],{"class":52022},[324,63806,52029],{"class":867},[324,63808,63809,63811,63813,63815,63817,63819],{"class":326,"line":2343},[324,63810,52866],{"class":867},[324,63812,54543],{"class":52022},[324,63814,54546],{"class":734},[324,63816,913],{"class":867},[324,63818,63421],{"class":738},[324,63820,52029],{"class":867},[324,63822,63823,63825,63827],{"class":326,"line":2348},[324,63824,52866],{"class":867},[324,63826,52535],{"class":52022},[324,63828,52029],{"class":867},[324,63830,63831,63833,63835,63837,63839,63841,63843,63845],{"class":326,"line":2354},[324,63832,11950],{"class":863},[324,63834,61327],{"class":916},[324,63836,14293],{"class":863},[324,63838,55118],{"class":867},[324,63840,55121],{"class":734},[324,63842,868],{"class":867},[324,63844,63604],{"class":738},[324,63846,874],{"class":867},[324,63848,63849,63852,63854,63856,63859,63861,63863],{"class":326,"line":2359},[324,63850,63851],{"class":867},"    input.",[324,63853,58535],{"class":734},[324,63855,868],{"class":867},[324,63857,63858],{"class":738},"'change'",[324,63860,13164],{"class":867},[324,63862,55171],{"class":863},[324,63864,55174],{"class":867},[324,63866,63867,63869,63871,63873,63875],{"class":326,"line":2373},[324,63868,58966],{"class":867},[324,63870,58969],{"class":734},[324,63872,868],{"class":867},[324,63874,1457],{"class":916},[324,63876,874],{"class":867},[324,63878,63879],{"class":326,"line":2378},[324,63880,34183],{"class":867},[324,63882,63883,63885,63887],{"class":326,"line":2384},[324,63884,53139],{"class":867},[324,63886,52535],{"class":52022},[324,63888,52029],{"class":867},[324,63890,63891,63893,63895],{"class":326,"line":2405},[324,63892,52507],{"class":867},[324,63894,52522],{"class":52022},[324,63896,52029],{"class":867},[324,63898,63899],{"class":326,"line":2410},[324,63900,488],{"emptyLinePlaceholder":487},[324,63902,63903,63905,63907],{"class":326,"line":2424},[324,63904,52507],{"class":867},[324,63906,51357],{"class":52022},[324,63908,52029],{"class":867},[19,63910,63911],{},"总结：内容发生改变才回去触发",[35,63913,63915],{"id":63914},"_326-事件对象","3.2.6 事件对象",[151,63917,63919],{"id":63918},"_3261-事件对象的介绍","3.2.6.1 事件对象的介绍",[19,63921,63922],{},[48,63923],{"alt":50,"src":63924},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-113.png",[19,63926,63927],{},[48,63928],{"alt":50,"src":63929},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-114.png",[19,63931,63932],{},"点击一次，就输出了事件对象，它是个对象",[19,63934,63935],{},"只有事件监听中里边的执行函数括号里边的内容才是事件对象，其他的函数后边括号中的变量是一个形参",[19,63937,63938],{},[48,63939],{"alt":50,"src":63940},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-115.png",[151,63942,63944],{"id":63943},"_3262-事件对象的属性","3.2.6.2 事件对象的属性",[19,63946,63947],{},[48,63948],{"alt":50,"src":63949},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-116.png",[19,63951,63952],{},"实现按特殊字符才是实现打印输出效果：",[316,63954,63956],{"className":53789,"code":63955,"language":53791,"meta":50,"style":50},"\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",[269,63957,63958,63966,63971,63985,63993,63998,64003,64008,64013,64018,64023,64028,64033,64038,64042,64046,64054],{"__ignoreMap":50},[324,63959,63960,63962,63964],{"class":326,"line":327},[324,63961,1774],{"class":867},[324,63963,52522],{"class":52022},[324,63965,52029],{"class":867},[324,63967,63968],{"class":326,"line":203},[324,63969,63970],{"class":772},"  \u003C!-- \u003Cbutton>点击\u003C\u002Fbutton> -->\n",[324,63972,63973,63975,63977,63979,63981,63983],{"class":326,"line":338},[324,63974,52866],{"class":867},[324,63976,54543],{"class":52022},[324,63978,54546],{"class":734},[324,63980,913],{"class":867},[324,63982,63421],{"class":738},[324,63984,52029],{"class":867},[324,63986,63987,63989,63991],{"class":326,"line":344},[324,63988,52866],{"class":867},[324,63990,52535],{"class":52022},[324,63992,52029],{"class":867},[324,63994,63995],{"class":326,"line":484},[324,63996,63997],{"class":867},"    \u002F\u002F const btn = document.querySelector('button')\n",[324,63999,64000],{"class":326,"line":491},[324,64001,64002],{"class":867},"    \u002F\u002F btn.addEventListener('click', function (e) {\n",[324,64004,64005],{"class":326,"line":496},[324,64006,64007],{"class":867},"    \u002F\u002F   console.log(e);\n",[324,64009,64010],{"class":326,"line":502},[324,64011,64012],{"class":867},"    \u002F\u002F })\n",[324,64014,64015],{"class":326,"line":508},[324,64016,64017],{"class":867},"    \u002F\u002F 按回车键才进行触发这个事件的话一定要使用事件对象\n",[324,64019,64020],{"class":326,"line":514},[324,64021,64022],{"class":867},"    const input = document.querySelector('input')\n",[324,64024,64025],{"class":326,"line":2343},[324,64026,64027],{"class":867},"    input.addEventListener('keyup', function (e) {\n",[324,64029,64030],{"class":326,"line":2348},[324,64031,64032],{"class":867},"      if (e.key === 'Enter') {\n",[324,64034,64035],{"class":326,"line":2354},[324,64036,64037],{"class":867},"        console.log('我按下了回车键')\n",[324,64039,64040],{"class":326,"line":2359},[324,64041,53120],{"class":867},[324,64043,64044],{"class":326,"line":2373},[324,64045,34183],{"class":867},[324,64047,64048,64050,64052],{"class":326,"line":2378},[324,64049,53139],{"class":867},[324,64051,52535],{"class":52022},[324,64053,52029],{"class":867},[324,64055,64056,64058,64060],{"class":326,"line":2384},[324,64057,52507],{"class":867},[324,64059,52522],{"class":52022},[324,64061,52029],{"class":867},[151,64063,64065],{"id":64064},"_3263-trim方法","3.2.6.3 trim方法",[19,64067,64068],{},[48,64069],{"alt":50,"src":64070},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-117.png",[19,64072,64073],{},[48,64074],{"alt":50,"src":64075},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-118.png",[19,64077,64078],{},"打印输出出现了空格，可以去除两侧的空格，不会去除左右的空格",[19,64080,64081],{},"str.trim()",[35,64083,64085],{"id":64084},"_327-环境对象","3.2.7 环境对象",[19,64087,64088],{},[48,64089],{"alt":50,"src":64090},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-119.png",[19,64092,64093],{},[48,64094],{"alt":50,"src":64095},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-120.png",[19,64097,64098],{},[48,64099],{"alt":50,"src":64100},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-121.png",[19,64102,64103],{},"实际函数调用是window.fn()",[19,64105,64106],{},"普通函数里面this指向的是window",[1871,64108,64109,64112,64115],{},[195,64110,64111],{},"在普通函数下，this指向的是window",[195,64113,64114],{},"在事件监听中this指向的是调用者，例如下面的开关，this指向的是button",[195,64116,64117],{},"箭头函数没有this",[19,64119,64120],{},"粗略记法就是：谁调用，this就指向谁",[19,64122,64123],{},[48,64124],{"alt":50,"src":64125},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-122.png",[19,64127,64128],{},[48,64129],{"alt":50,"src":64130},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-123.png",[19,64132,64133],{},"这里button调用的这个执行函数，所以this就是button，this就表示它自己",[19,64135,64136],{},"this的用处，点击按钮，按钮自己的字变为粉色：",[316,64138,64140],{"className":53789,"code":64139,"language":53791,"meta":50,"style":50},"\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",[269,64141,64142,64150,64162,64170,64175,64180,64185,64190,64194,64202],{"__ignoreMap":50},[324,64143,64144,64146,64148],{"class":326,"line":327},[324,64145,1774],{"class":867},[324,64147,52522],{"class":52022},[324,64149,52029],{"class":867},[324,64151,64152,64154,64156,64158,64160],{"class":326,"line":203},[324,64153,52866],{"class":867},[324,64155,54609],{"class":52022},[324,64157,54615],{"class":867},[324,64159,54609],{"class":52022},[324,64161,52029],{"class":867},[324,64163,64164,64166,64168],{"class":326,"line":338},[324,64165,52866],{"class":867},[324,64167,52535],{"class":52022},[324,64169,52029],{"class":867},[324,64171,64172],{"class":326,"line":344},[324,64173,64174],{"class":867},"    const button = document.querySelector('button')\n",[324,64176,64177],{"class":326,"line":484},[324,64178,64179],{"class":867},"    button.addEventListener('click', function () {\n",[324,64181,64182],{"class":326,"line":491},[324,64183,64184],{"class":867},"      \u002F\u002F console.log(this);\n",[324,64186,64187],{"class":326,"line":496},[324,64188,64189],{"class":867},"      this.style.color = 'pink'\n",[324,64191,64192],{"class":326,"line":502},[324,64193,34183],{"class":867},[324,64195,64196,64198,64200],{"class":326,"line":508},[324,64197,53139],{"class":867},[324,64199,52535],{"class":52022},[324,64201,52029],{"class":867},[324,64203,64204,64206,64208],{"class":326,"line":514},[324,64205,52507],{"class":867},[324,64207,52522],{"class":52022},[324,64209,52029],{"class":867},[35,64211,64213],{"id":64212},"_328-回调函数","3.2.8 回调函数",[19,64215,64216],{},[48,64217],{"alt":50,"src":64218},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-124.png",[19,64220,64221],{},"定时器本身就是个函数，fn函数作为参数传递给了这个定时器这个函数，过了一秒钟就调用这个函数，fn就是回调函数",[19,64223,12061],{},[1871,64225,64226,64229,64232],{},[195,64227,64228],{},"把函数当做另外一个函数的参数传递，这个函数就叫回调函数",[195,64230,64231],{},"回调函数本质还是函数，只不过把它当成参数使用",[195,64233,64234],{},"使用匿名函数做为回调函数比较常见",[35,64236,64238],{"id":64237},"_329-tab栏切换","3.2.9 tab栏切换",[19,64240,64241],{},[48,64242],{"alt":50,"src":64243},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-125.png",[316,64245,64247],{"className":51355,"code":64246,"language":51357,"meta":50,"style":50},"\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",[269,64248,64249,64259,64273,64277,64285,64299,64319,64339,64352,64360,64366,64376,64386,64390,64394,64401,64414,64427,64439,64455,64459,64463,64470,64482,64494,64506,64516,64526,64530,64534,64543,64555,64566,64578,64582,64586,64594,64604,64614,64624,64628,64632,64642,64656,64668,64672,64676,64688,64699,64716,64726,64730,64734,64749,64760,64770,64774,64778,64785,64800,64804,64808,64816,64826,64830,64834,64843,64853,64857,64865,64873,64877,64885,64900,64915,64928,64936,64970,64997,65024,65051,65078,65086,65094,65109,65146,65181,65216,65251,65286,65294,65302,65310,65315,65320,65340,65345,65374,65379,65384,65402,65407,65412,65417,65439,65444,65460,65464,65469,65474,65495,65500,65529,65533,65538,65542,65550,65558,65562],{"__ignoreMap":50},[324,64250,64251,64253,64255,64257],{"class":326,"line":327},[324,64252,52019],{"class":867},[324,64254,52023],{"class":52022},[324,64256,52026],{"class":734},[324,64258,52029],{"class":867},[324,64260,64261,64263,64265,64267,64269,64271],{"class":326,"line":203},[324,64262,1774],{"class":867},[324,64264,51357],{"class":52022},[324,64266,52038],{"class":734},[324,64268,913],{"class":867},[324,64270,52043],{"class":738},[324,64272,52029],{"class":867},[324,64274,64275],{"class":326,"line":338},[324,64276,488],{"emptyLinePlaceholder":487},[324,64278,64279,64281,64283],{"class":326,"line":344},[324,64280,1774],{"class":867},[324,64282,52056],{"class":52022},[324,64284,52029],{"class":867},[324,64286,64287,64289,64291,64293,64295,64297],{"class":326,"line":484},[324,64288,52866],{"class":867},[324,64290,52066],{"class":52022},[324,64292,52069],{"class":734},[324,64294,913],{"class":867},[324,64296,52074],{"class":738},[324,64298,59849],{"class":867},[324,64300,64301,64303,64305,64307,64309,64311,64313,64315,64317],{"class":326,"line":491},[324,64302,52866],{"class":867},[324,64304,52066],{"class":52022},[324,64306,52085],{"class":734},[324,64308,913],{"class":867},[324,64310,52090],{"class":738},[324,64312,52093],{"class":734},[324,64314,913],{"class":867},[324,64316,52098],{"class":738},[324,64318,59849],{"class":867},[324,64320,64321,64323,64325,64327,64329,64331,64333,64335,64337],{"class":326,"line":496},[324,64322,52866],{"class":867},[324,64324,52066],{"class":52022},[324,64326,15649],{"class":734},[324,64328,913],{"class":867},[324,64330,52113],{"class":738},[324,64332,52093],{"class":734},[324,64334,913],{"class":867},[324,64336,52120],{"class":738},[324,64338,59849],{"class":867},[324,64340,64341,64343,64345,64348,64350],{"class":326,"line":502},[324,64342,52866],{"class":867},[324,64344,52129],{"class":52022},[324,64346,64347],{"class":867},">tab栏切换\u003C\u002F",[324,64349,52129],{"class":52022},[324,64351,52029],{"class":867},[324,64353,64354,64356,64358],{"class":326,"line":508},[324,64355,52866],{"class":867},[324,64357,775],{"class":52022},[324,64359,52029],{"class":867},[324,64361,64362,64364],{"class":326,"line":514},[324,64363,7132],{"class":52022},[324,64365,16301],{"class":867},[324,64367,64368,64370,64372,64374],{"class":326,"line":2343},[324,64369,55428],{"class":916},[324,64371,52159],{"class":867},[324,64373,1056],{"class":916},[324,64375,2025],{"class":867},[324,64377,64378,64380,64382,64384],{"class":326,"line":2348},[324,64379,55417],{"class":916},[324,64381,52159],{"class":867},[324,64383,1056],{"class":916},[324,64385,2025],{"class":867},[324,64387,64388],{"class":326,"line":2354},[324,64389,2917],{"class":867},[324,64391,64392],{"class":326,"line":2359},[324,64393,488],{"emptyLinePlaceholder":487},[324,64395,64396,64399],{"class":326,"line":2373},[324,64397,64398],{"class":734},"    .tab",[324,64400,16301],{"class":867},[324,64402,64403,64405,64407,64410,64412],{"class":326,"line":2378},[324,64404,55493],{"class":916},[324,64406,52159],{"class":867},[324,64408,64409],{"class":916},"590",[324,64411,52214],{"class":863},[324,64413,2025],{"class":867},[324,64415,64416,64418,64420,64423,64425],{"class":326,"line":2384},[324,64417,55507],{"class":916},[324,64419,52159],{"class":867},[324,64421,64422],{"class":916},"340",[324,64424,52214],{"class":863},[324,64426,2025],{"class":867},[324,64428,64429,64431,64433,64435,64437],{"class":326,"line":2405},[324,64430,55428],{"class":916},[324,64432,52159],{"class":867},[324,64434,1564],{"class":916},[324,64436,52214],{"class":863},[324,64438,2025],{"class":867},[324,64440,64441,64443,64445,64447,64449,64451,64453],{"class":326,"line":2410},[324,64442,62699],{"class":916},[324,64444,52159],{"class":867},[324,64446,1082],{"class":916},[324,64448,52214],{"class":863},[324,64450,52243],{"class":916},[324,64452,62966],{"class":916},[324,64454,2025],{"class":867},[324,64456,64457],{"class":326,"line":2424},[324,64458,2917],{"class":867},[324,64460,64461],{"class":326,"line":2429},[324,64462,488],{"emptyLinePlaceholder":487},[324,64464,64465,64468],{"class":326,"line":2458},[324,64466,64467],{"class":734},"    .tab-nav",[324,64469,16301],{"class":867},[324,64471,64472,64474,64476,64478,64480],{"class":326,"line":2463},[324,64473,55493],{"class":916},[324,64475,52159],{"class":867},[324,64477,1175],{"class":916},[324,64479,1192],{"class":863},[324,64481,2025],{"class":867},[324,64483,64484,64486,64488,64490,64492],{"class":326,"line":2480},[324,64485,55507],{"class":916},[324,64487,52159],{"class":867},[324,64489,1771],{"class":916},[324,64491,52214],{"class":863},[324,64493,2025],{"class":867},[324,64495,64496,64498,64500,64502,64504],{"class":326,"line":2485},[324,64497,58081],{"class":916},[324,64499,52159],{"class":867},[324,64501,1771],{"class":916},[324,64503,52214],{"class":863},[324,64505,2025],{"class":867},[324,64507,64508,64510,64512,64514],{"class":326,"line":2490},[324,64509,55731],{"class":916},[324,64511,52159],{"class":867},[324,64513,52199],{"class":916},[324,64515,2025],{"class":867},[324,64517,64518,64520,64522,64524],{"class":326,"line":2495},[324,64519,55742],{"class":916},[324,64521,52159],{"class":867},[324,64523,52390],{"class":916},[324,64525,2025],{"class":867},[324,64527,64528],{"class":326,"line":2509},[324,64529,2917],{"class":867},[324,64531,64532],{"class":326,"line":2514},[324,64533,488],{"emptyLinePlaceholder":487},[324,64535,64536,64538,64541],{"class":326,"line":3306},[324,64537,64467],{"class":734},[324,64539,64540],{"class":52022}," h3",[324,64542,16301],{"class":867},[324,64544,64545,64547,64549,64551,64553],{"class":326,"line":3320},[324,64546,55644],{"class":916},[324,64548,52159],{"class":867},[324,64550,1664],{"class":916},[324,64552,52214],{"class":863},[324,64554,2025],{"class":867},[324,64556,64557,64559,64561,64564],{"class":326,"line":3328},[324,64558,63056],{"class":916},[324,64560,52159],{"class":867},[324,64562,64563],{"class":916},"normal",[324,64565,2025],{"class":867},[324,64567,64568,64570,64572,64574,64576],{"class":326,"line":3333},[324,64569,62722],{"class":916},[324,64571,52159],{"class":867},[324,64573,1564],{"class":916},[324,64575,52214],{"class":863},[324,64577,2025],{"class":867},[324,64579,64580],{"class":326,"line":3339},[324,64581,2917],{"class":867},[324,64583,64584],{"class":326,"line":3345},[324,64585,488],{"emptyLinePlaceholder":487},[324,64587,64588,64590,64592],{"class":326,"line":3350},[324,64589,64467],{"class":734},[324,64591,62014],{"class":52022},[324,64593,16301],{"class":867},[324,64595,64596,64598,64600,64602],{"class":326,"line":8677},[324,64597,55454],{"class":916},[324,64599,52159],{"class":867},[324,64601,55459],{"class":916},[324,64603,2025],{"class":867},[324,64605,64606,64608,64610,64612],{"class":326,"line":8701},[324,64607,55731],{"class":916},[324,64609,52159],{"class":867},[324,64611,52199],{"class":916},[324,64613,2025],{"class":867},[324,64615,64616,64618,64620,64622],{"class":326,"line":8706},[324,64617,55742],{"class":916},[324,64619,52159],{"class":867},[324,64621,52302],{"class":916},[324,64623,2025],{"class":867},[324,64625,64626],{"class":326,"line":8712},[324,64627,2917],{"class":867},[324,64629,64630],{"class":326,"line":8739},[324,64631,488],{"emptyLinePlaceholder":487},[324,64633,64634,64636,64638,64640],{"class":326,"line":8744},[324,64635,64467],{"class":734},[324,64637,62014],{"class":52022},[324,64639,55797],{"class":52022},[324,64641,16301],{"class":867},[324,64643,64644,64646,64648,64650,64652,64654],{"class":326,"line":8750},[324,64645,55428],{"class":916},[324,64647,52159],{"class":867},[324,64649,1056],{"class":916},[324,64651,9679],{"class":916},[324,64653,52214],{"class":863},[324,64655,2025],{"class":867},[324,64657,64658,64660,64662,64664,64666],{"class":326,"line":8762},[324,64659,55644],{"class":916},[324,64661,52159],{"class":867},[324,64663,1413],{"class":916},[324,64665,52214],{"class":863},[324,64667,2025],{"class":867},[324,64669,64670],{"class":326,"line":8774},[324,64671,2917],{"class":867},[324,64673,64674],{"class":326,"line":8786},[324,64675,488],{"emptyLinePlaceholder":487},[324,64677,64678,64680,64682,64684,64686],{"class":326,"line":10445},[324,64679,64467],{"class":734},[324,64681,62014],{"class":52022},[324,64683,55797],{"class":52022},[324,64685,2130],{"class":52022},[324,64687,16301],{"class":867},[324,64689,64690,64693,64695,64697],{"class":326,"line":10470},[324,64691,64692],{"class":916},"      text-decoration",[324,64694,52159],{"class":867},[324,64696,55459],{"class":916},[324,64698,2025],{"class":867},[324,64700,64701,64703,64705,64707,64709,64711,64714],{"class":326,"line":10493},[324,64702,62954],{"class":916},[324,64704,52159],{"class":867},[324,64706,944],{"class":916},[324,64708,52214],{"class":863},[324,64710,52243],{"class":916},[324,64712,64713],{"class":916}," transparent",[324,64715,2025],{"class":867},[324,64717,64718,64720,64722,64724],{"class":326,"line":10517},[324,64719,58138],{"class":916},[324,64721,52159],{"class":867},[324,64723,63091],{"class":916},[324,64725,2025],{"class":867},[324,64727,64728],{"class":326,"line":10522},[324,64729,2917],{"class":867},[324,64731,64732],{"class":326,"line":10527},[324,64733,488],{"emptyLinePlaceholder":487},[324,64735,64736,64738,64740,64742,64744,64747],{"class":326,"line":10532},[324,64737,64467],{"class":734},[324,64739,62014],{"class":52022},[324,64741,55797],{"class":52022},[324,64743,2130],{"class":52022},[324,64745,64746],{"class":734},".active",[324,64748,16301],{"class":867},[324,64750,64751,64753,64755,64758],{"class":326,"line":10541},[324,64752,62513],{"class":916},[324,64754,52159],{"class":867},[324,64756,64757],{"class":916},"#e1251b",[324,64759,2025],{"class":867},[324,64761,64762,64764,64766,64768],{"class":326,"line":10546},[324,64763,58138],{"class":916},[324,64765,52159],{"class":867},[324,64767,64757],{"class":916},[324,64769,2025],{"class":867},[324,64771,64772],{"class":326,"line":10552},[324,64773,2917],{"class":867},[324,64775,64776],{"class":326,"line":10573},[324,64777,488],{"emptyLinePlaceholder":487},[324,64779,64780,64783],{"class":326,"line":10579},[324,64781,64782],{"class":734},"    .tab-content",[324,64784,16301],{"class":867},[324,64786,64787,64789,64791,64793,64796,64798],{"class":326,"line":10593},[324,64788,55417],{"class":916},[324,64790,52159],{"class":867},[324,64792,1056],{"class":916},[324,64794,64795],{"class":916}," 16",[324,64797,52214],{"class":863},[324,64799,2025],{"class":867},[324,64801,64802],{"class":326,"line":10599},[324,64803,2917],{"class":867},[324,64805,64806],{"class":326,"line":10626},[324,64807,488],{"emptyLinePlaceholder":487},[324,64809,64810,64812,64814],{"class":326,"line":10635},[324,64811,64782],{"class":734},[324,64813,62896],{"class":734},[324,64815,16301],{"class":867},[324,64817,64818,64820,64822,64824],{"class":326,"line":10641},[324,64819,55731],{"class":916},[324,64821,52159],{"class":867},[324,64823,55459],{"class":916},[324,64825,2025],{"class":867},[324,64827,64828],{"class":326,"line":10649},[324,64829,2917],{"class":867},[324,64831,64832],{"class":326,"line":10654},[324,64833,488],{"emptyLinePlaceholder":487},[324,64835,64836,64838,64841],{"class":326,"line":17333},[324,64837,64782],{"class":734},[324,64839,64840],{"class":734}," .item.active",[324,64842,16301],{"class":867},[324,64844,64845,64847,64849,64851],{"class":326,"line":17339},[324,64846,55731],{"class":916},[324,64848,52159],{"class":867},[324,64850,61591],{"class":916},[324,64852,2025],{"class":867},[324,64854,64855],{"class":326,"line":17362},[324,64856,2917],{"class":867},[324,64858,64859,64861,64863],{"class":326,"line":17368},[324,64860,53139],{"class":867},[324,64862,775],{"class":52022},[324,64864,52029],{"class":867},[324,64866,64867,64869,64871],{"class":326,"line":17391},[324,64868,52507],{"class":867},[324,64870,52056],{"class":52022},[324,64872,52029],{"class":867},[324,64874,64875],{"class":326,"line":17405},[324,64876,488],{"emptyLinePlaceholder":487},[324,64878,64879,64881,64883],{"class":326,"line":17425},[324,64880,1774],{"class":867},[324,64882,52522],{"class":52022},[324,64884,52029],{"class":867},[324,64886,64887,64889,64891,64893,64895,64898],{"class":326,"line":17431},[324,64888,52866],{"class":867},[324,64890,52333],{"class":52022},[324,64892,54208],{"class":734},[324,64894,913],{"class":867},[324,64896,64897],{"class":738},"\"tab\"",[324,64899,52029],{"class":867},[324,64901,64902,64904,64906,64908,64910,64913],{"class":326,"line":17442},[324,64903,52063],{"class":867},[324,64905,52333],{"class":52022},[324,64907,54208],{"class":734},[324,64909,913],{"class":867},[324,64911,64912],{"class":738},"\"tab-nav\"",[324,64914,52029],{"class":867},[324,64916,64917,64919,64921,64924,64926],{"class":326,"line":17465},[324,64918,55956],{"class":867},[324,64920,35],{"class":52022},[324,64922,64923],{"class":867},">每日特价\u003C\u002F",[324,64925,35],{"class":52022},[324,64927,52029],{"class":867},[324,64929,64930,64932,64934],{"class":326,"line":17487},[324,64931,55956],{"class":867},[324,64933,1871],{"class":52022},[324,64935,52029],{"class":867},[324,64937,64938,64940,64942,64944,64946,64948,64950,64952,64954,64956,64959,64962,64964,64966,64968],{"class":326,"line":17492},[324,64939,56024],{"class":867},[324,64941,195],{"class":52022},[324,64943,61774],{"class":867},[324,64945,25],{"class":52022},[324,64947,54208],{"class":734},[324,64949,913],{"class":867},[324,64951,60428],{"class":738},[324,64953,61779],{"class":734},[324,64955,913],{"class":867},[324,64957,64958],{"class":738},"\"javascript:;\"",[324,64960,64961],{"class":867},">精选\u003C\u002F",[324,64963,25],{"class":52022},[324,64965,56036],{"class":867},[324,64967,195],{"class":52022},[324,64969,52029],{"class":867},[324,64971,64972,64974,64976,64978,64980,64982,64984,64986,64989,64991,64993,64995],{"class":326,"line":17498},[324,64973,56024],{"class":867},[324,64975,195],{"class":52022},[324,64977,61774],{"class":867},[324,64979,25],{"class":52022},[324,64981,61779],{"class":734},[324,64983,913],{"class":867},[324,64985,64958],{"class":738},[324,64987,64988],{"class":867},">美食\u003C\u002F",[324,64990,25],{"class":52022},[324,64992,56036],{"class":867},[324,64994,195],{"class":52022},[324,64996,52029],{"class":867},[324,64998,64999,65001,65003,65005,65007,65009,65011,65013,65016,65018,65020,65022],{"class":326,"line":17512},[324,65000,56024],{"class":867},[324,65002,195],{"class":52022},[324,65004,61774],{"class":867},[324,65006,25],{"class":52022},[324,65008,61779],{"class":734},[324,65010,913],{"class":867},[324,65012,64958],{"class":738},[324,65014,65015],{"class":867},">百货\u003C\u002F",[324,65017,25],{"class":52022},[324,65019,56036],{"class":867},[324,65021,195],{"class":52022},[324,65023,52029],{"class":867},[324,65025,65026,65028,65030,65032,65034,65036,65038,65040,65043,65045,65047,65049],{"class":326,"line":17525},[324,65027,56024],{"class":867},[324,65029,195],{"class":52022},[324,65031,61774],{"class":867},[324,65033,25],{"class":52022},[324,65035,61779],{"class":734},[324,65037,913],{"class":867},[324,65039,64958],{"class":738},[324,65041,65042],{"class":867},">个护\u003C\u002F",[324,65044,25],{"class":52022},[324,65046,56036],{"class":867},[324,65048,195],{"class":52022},[324,65050,52029],{"class":867},[324,65052,65053,65055,65057,65059,65061,65063,65065,65067,65070,65072,65074,65076],{"class":326,"line":17530},[324,65054,56024],{"class":867},[324,65056,195],{"class":52022},[324,65058,61774],{"class":867},[324,65060,25],{"class":52022},[324,65062,61779],{"class":734},[324,65064,913],{"class":867},[324,65066,64958],{"class":738},[324,65068,65069],{"class":867},">预告\u003C\u002F",[324,65071,25],{"class":52022},[324,65073,56036],{"class":867},[324,65075,195],{"class":52022},[324,65077,52029],{"class":867},[324,65079,65080,65082,65084],{"class":326,"line":17544},[324,65081,56129],{"class":867},[324,65083,1871],{"class":52022},[324,65085,52029],{"class":867},[324,65087,65088,65090,65092],{"class":326,"line":17549},[324,65089,52498],{"class":867},[324,65091,52333],{"class":52022},[324,65093,52029],{"class":867},[324,65095,65096,65098,65100,65102,65104,65107],{"class":326,"line":17555},[324,65097,52063],{"class":867},[324,65099,52333],{"class":52022},[324,65101,54208],{"class":734},[324,65103,913],{"class":867},[324,65105,65106],{"class":738},"\"tab-content\"",[324,65108,52029],{"class":867},[324,65110,65111,65113,65115,65117,65119,65122,65124,65126,65128,65130,65133,65135,65137,65139,65142,65144],{"class":326,"line":17560},[324,65112,55956],{"class":867},[324,65114,52333],{"class":52022},[324,65116,54208],{"class":734},[324,65118,913],{"class":867},[324,65120,65121],{"class":738},"\"item active\"",[324,65123,61774],{"class":867},[324,65125,48],{"class":52022},[324,65127,55961],{"class":734},[324,65129,913],{"class":867},[324,65131,65132],{"class":738},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab00.png\"",[324,65134,55969],{"class":734},[324,65136,913],{"class":867},[324,65138,8381],{"class":738},[324,65140,65141],{"class":867}," \u002F>\u003C\u002F",[324,65143,52333],{"class":52022},[324,65145,52029],{"class":867},[324,65147,65148,65150,65152,65154,65156,65158,65160,65162,65164,65166,65169,65171,65173,65175,65177,65179],{"class":326,"line":17574},[324,65149,55956],{"class":867},[324,65151,52333],{"class":52022},[324,65153,54208],{"class":734},[324,65155,913],{"class":867},[324,65157,63345],{"class":738},[324,65159,61774],{"class":867},[324,65161,48],{"class":52022},[324,65163,55961],{"class":734},[324,65165,913],{"class":867},[324,65167,65168],{"class":738},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab01.png\"",[324,65170,55969],{"class":734},[324,65172,913],{"class":867},[324,65174,8381],{"class":738},[324,65176,65141],{"class":867},[324,65178,52333],{"class":52022},[324,65180,52029],{"class":867},[324,65182,65183,65185,65187,65189,65191,65193,65195,65197,65199,65201,65204,65206,65208,65210,65212,65214],{"class":326,"line":17579},[324,65184,55956],{"class":867},[324,65186,52333],{"class":52022},[324,65188,54208],{"class":734},[324,65190,913],{"class":867},[324,65192,63345],{"class":738},[324,65194,61774],{"class":867},[324,65196,48],{"class":52022},[324,65198,55961],{"class":734},[324,65200,913],{"class":867},[324,65202,65203],{"class":738},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab02.png\"",[324,65205,55969],{"class":734},[324,65207,913],{"class":867},[324,65209,8381],{"class":738},[324,65211,65141],{"class":867},[324,65213,52333],{"class":52022},[324,65215,52029],{"class":867},[324,65217,65218,65220,65222,65224,65226,65228,65230,65232,65234,65236,65239,65241,65243,65245,65247,65249],{"class":326,"line":17584},[324,65219,55956],{"class":867},[324,65221,52333],{"class":52022},[324,65223,54208],{"class":734},[324,65225,913],{"class":867},[324,65227,63345],{"class":738},[324,65229,61774],{"class":867},[324,65231,48],{"class":52022},[324,65233,55961],{"class":734},[324,65235,913],{"class":867},[324,65237,65238],{"class":738},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab03.png\"",[324,65240,55969],{"class":734},[324,65242,913],{"class":867},[324,65244,8381],{"class":738},[324,65246,65141],{"class":867},[324,65248,52333],{"class":52022},[324,65250,52029],{"class":867},[324,65252,65253,65255,65257,65259,65261,65263,65265,65267,65269,65271,65274,65276,65278,65280,65282,65284],{"class":326,"line":17598},[324,65254,55956],{"class":867},[324,65256,52333],{"class":52022},[324,65258,54208],{"class":734},[324,65260,913],{"class":867},[324,65262,63345],{"class":738},[324,65264,61774],{"class":867},[324,65266,48],{"class":52022},[324,65268,55961],{"class":734},[324,65270,913],{"class":867},[324,65272,65273],{"class":738},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab04.png\"",[324,65275,55969],{"class":734},[324,65277,913],{"class":867},[324,65279,8381],{"class":738},[324,65281,65141],{"class":867},[324,65283,52333],{"class":52022},[324,65285,52029],{"class":867},[324,65287,65288,65290,65292],{"class":326,"line":17610},[324,65289,52498],{"class":867},[324,65291,52333],{"class":52022},[324,65293,52029],{"class":867},[324,65295,65296,65298,65300],{"class":326,"line":17615},[324,65297,53139],{"class":867},[324,65299,52333],{"class":52022},[324,65301,52029],{"class":867},[324,65303,65304,65306,65308],{"class":326,"line":17628},[324,65305,52866],{"class":867},[324,65307,52535],{"class":52022},[324,65309,52029],{"class":867},[324,65311,65312],{"class":326,"line":17633},[324,65313,65314],{"class":772},"    \u002F\u002F 1. a 模块制作 要给 5个链接绑定鼠标经过事件\n",[324,65316,65317],{"class":326,"line":17638},[324,65318,65319],{"class":772},"    \u002F\u002F 1.1 获取 a 元素 \n",[324,65321,65322,65324,65327,65329,65331,65333,65335,65338],{"class":326,"line":17643},[324,65323,11950],{"class":863},[324,65325,65326],{"class":916}," as",[324,65328,14293],{"class":863},[324,65330,55118],{"class":867},[324,65332,56403],{"class":734},[324,65334,868],{"class":867},[324,65336,65337],{"class":738},"'.tab-nav a'",[324,65339,874],{"class":867},[324,65341,65342],{"class":326,"line":17656},[324,65343,65344],{"class":772},"    \u002F\u002F console.log(as) \n",[324,65346,65347,65349,65351,65353,65355,65357,65359,65361,65363,65366,65368,65370,65372],{"class":326,"line":17661},[324,65348,3930],{"class":863},[324,65350,2389],{"class":867},[324,65352,52569],{"class":863},[324,65354,10167],{"class":867},[324,65356,913],{"class":863},[324,65358,4822],{"class":916},[324,65360,10174],{"class":867},[324,65362,1774],{"class":863},[324,65364,65365],{"class":867}," as.",[324,65367,52690],{"class":916},[324,65369,3943],{"class":867},[324,65371,3022],{"class":863},[324,65373,13171],{"class":867},[324,65375,65376],{"class":326,"line":33355},[324,65377,65378],{"class":772},"      \u002F\u002F console.log(as[i])\n",[324,65380,65381],{"class":326,"line":33361},[324,65382,65383],{"class":772},"      \u002F\u002F 要给 5个链接绑定鼠标经过事件\n",[324,65385,65386,65389,65391,65393,65396,65398,65400],{"class":326,"line":33367},[324,65387,65388],{"class":867},"      as[i].",[324,65390,58535],{"class":734},[324,65392,868],{"class":867},[324,65394,65395],{"class":738},"'mouseenter'",[324,65397,13164],{"class":867},[324,65399,55171],{"class":863},[324,65401,55174],{"class":867},[324,65403,65404],{"class":326,"line":33373},[324,65405,65406],{"class":772},"        \u002F\u002F console.log('鼠标经过')\n",[324,65408,65409],{"class":326,"line":33379},[324,65410,65411],{"class":772},"        \u002F\u002F 排他思想  \n",[324,65413,65414],{"class":326,"line":33390},[324,65415,65416],{"class":772},"        \u002F\u002F 干掉别人 移除类active\n",[324,65418,65419,65421,65423,65425,65428,65430,65432,65434,65437],{"class":326,"line":33396},[324,65420,52647],{"class":867},[324,65422,55121],{"class":734},[324,65424,868],{"class":867},[324,65426,65427],{"class":738},"'.tab-nav .active'",[324,65429,57725],{"class":867},[324,65431,57728],{"class":734},[324,65433,868],{"class":867},[324,65435,65436],{"class":738},"'active'",[324,65438,874],{"class":867},[324,65440,65441],{"class":326,"line":33416},[324,65442,65443],{"class":772},"        \u002F\u002F 我登基 我添加类 active  this 当前的那个 a \n",[324,65445,65446,65449,65452,65454,65456,65458],{"class":326,"line":33422},[324,65447,65448],{"class":916},"        this",[324,65450,65451],{"class":867},".classList.",[324,65453,6063],{"class":734},[324,65455,868],{"class":867},[324,65457,65436],{"class":738},[324,65459,874],{"class":867},[324,65461,65462],{"class":326,"line":33433},[324,65463,488],{"emptyLinePlaceholder":487},[324,65465,65466],{"class":326,"line":33439},[324,65467,65468],{"class":772},"        \u002F\u002F 下面5个大盒子 一一对应  .item \n",[324,65470,65471],{"class":326,"line":33445},[324,65472,65473],{"class":772},"        \u002F\u002F 干掉别人\n",[324,65475,65476,65478,65480,65482,65485,65487,65489,65491,65493],{"class":326,"line":33451},[324,65477,52647],{"class":867},[324,65479,55121],{"class":734},[324,65481,868],{"class":867},[324,65483,65484],{"class":738},"'.tab-content .active'",[324,65486,57725],{"class":867},[324,65488,57728],{"class":734},[324,65490,868],{"class":867},[324,65492,65436],{"class":738},[324,65494,874],{"class":867},[324,65496,65497],{"class":326,"line":33457},[324,65498,65499],{"class":772},"        \u002F\u002F 对应序号的那个 item 显示 添加 active 类\n",[324,65501,65502,65504,65506,65508,65511,65513,65515,65517,65519,65521,65523,65525,65527],{"class":326,"line":33463},[324,65503,52647],{"class":867},[324,65505,55121],{"class":734},[324,65507,868],{"class":867},[324,65509,65510],{"class":738},"`.tab-content .item:nth-child(${",[324,65512,1305],{"class":867},[324,65514,46288],{"class":863},[324,65516,25842],{"class":916},[324,65518,57754],{"class":738},[324,65520,57725],{"class":867},[324,65522,6063],{"class":734},[324,65524,868],{"class":867},[324,65526,65436],{"class":738},[324,65528,874],{"class":867},[324,65530,65531],{"class":326,"line":33469},[324,65532,488],{"emptyLinePlaceholder":487},[324,65534,65535],{"class":326,"line":33475},[324,65536,65537],{"class":867},"      })\n",[324,65539,65540],{"class":326,"line":33495},[324,65541,2917],{"class":867},[324,65543,65544,65546,65548],{"class":326,"line":33501},[324,65545,53139],{"class":867},[324,65547,52535],{"class":52022},[324,65549,52029],{"class":867},[324,65551,65552,65554,65556],{"class":326,"line":33517},[324,65553,52507],{"class":867},[324,65555,52522],{"class":52022},[324,65557,52029],{"class":867},[324,65559,65560],{"class":326,"line":33523},[324,65561,488],{"emptyLinePlaceholder":487},[324,65563,65564,65566,65568],{"class":326,"line":33537},[324,65565,52507],{"class":867},[324,65567,51357],{"class":52022},[324,65569,52029],{"class":867},[19,65571,65572],{},"总结：不要忘记this，还有tab栏优先考虑使用循环！！！",[19,65574,65575],{},"在监听事件中，this指向的就是他的调用者",[19,65577,65578],{},"补充：如果刚开始是没有active选中的，可以进行.active(使用这个类)的对象元素的获取，如果没有就是null，空为假，然后就可以进行if语句的判断，如果假的话就不用执行删除，真的话就删除，然后再添加active这个类就可以！",[19,65580,54442],{},[19,65582,65583],{},"(function () {",[19,65585,65586],{},"const list = document.querySelector('.xtx-elevator-list')",[19,65588,65589],{},"list.addEventListener('click', function (e) {",[19,65591,65592],{},"if (e.target.tagName === 'A') {",[19,65594,65595],{},"\u002F\u002F 排他思想",[19,65597,65598],{},"\u002F\u002F 在不知道有么有active这个类的情况下不能上来就删除",[19,65600,65601],{},"const old = document.querySelector('.xtx-elevator-list .active')",[19,65603,65604],{},"\u002F\u002F console.log(old);",[19,65606,65607],{},"\u002F\u002F 判断",[19,65609,65610],{},"\u002F\u002F 没有的话old=null，空为假，就不执行后边的操作",[19,65612,65613],{},"if (old) old.classList.remove('active')",[19,65615,65616],{},"e.target.classList.add('active')",[19,65618,1810],{},[19,65620,53186],{},[19,65622,65623],{},"})();",[35,65625,65627],{"id":65626},"_3210-按钮全选或反选案例","3.2.10 按钮全选或反选案例",[316,65629,65631],{"className":51355,"code":65630,"language":51357,"meta":50,"style":50},"\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",[269,65632,65633,65643,65647,65655,65659,65673,65687,65699,65707,65713,65723,65733,65737,65741,65748,65760,65771,65788,65801,65815,65825,65829,65833,65840,65851,65869,65879,65891,65895,65899,65906,65923,65934,65946,65950,65954,65961,65973,65977,65985,65993,65997,66005,66013,66021,66036,66080,66088,66101,66114,66127,66135,66143,66151,66179,66187,66199,66212,66225,66233,66241,66249,66275,66283,66296,66308,66321,66329,66337,66345,66371,66379,66392,66404,66417,66425,66433,66441,66446,66466,66471,66491,66496,66513,66518,66526,66531,66560,66573,66577,66581,66586,66590,66618,66623,66640,66645,66650,66655,66660,66686,66690,66694,66702,66710,66714],{"__ignoreMap":50},[324,65634,65635,65637,65639,65641],{"class":326,"line":327},[324,65636,52019],{"class":867},[324,65638,52023],{"class":52022},[324,65640,52026],{"class":734},[324,65642,52029],{"class":867},[324,65644,65645],{"class":326,"line":203},[324,65646,488],{"emptyLinePlaceholder":487},[324,65648,65649,65651,65653],{"class":326,"line":338},[324,65650,1774],{"class":867},[324,65652,51357],{"class":52022},[324,65654,52029],{"class":867},[324,65656,65657],{"class":326,"line":344},[324,65658,488],{"emptyLinePlaceholder":487},[324,65660,65661,65663,65665,65667,65669,65671],{"class":326,"line":484},[324,65662,1774],{"class":867},[324,65664,52056],{"class":52022},[324,65666,52038],{"class":734},[324,65668,913],{"class":867},[324,65670,52043],{"class":738},[324,65672,52029],{"class":867},[324,65674,65675,65677,65679,65681,65683,65685],{"class":326,"line":491},[324,65676,52866],{"class":867},[324,65678,52066],{"class":52022},[324,65680,52069],{"class":734},[324,65682,913],{"class":867},[324,65684,52074],{"class":738},[324,65686,52029],{"class":867},[324,65688,65689,65691,65693,65695,65697],{"class":326,"line":496},[324,65690,52866],{"class":867},[324,65692,52129],{"class":52022},[324,65694,56036],{"class":867},[324,65696,52129],{"class":52022},[324,65698,52029],{"class":867},[324,65700,65701,65703,65705],{"class":326,"line":502},[324,65702,52866],{"class":867},[324,65704,775],{"class":52022},[324,65706,52029],{"class":867},[324,65708,65709,65711],{"class":326,"line":508},[324,65710,7132],{"class":52022},[324,65712,16301],{"class":867},[324,65714,65715,65717,65719,65721],{"class":326,"line":514},[324,65716,55428],{"class":916},[324,65718,52159],{"class":867},[324,65720,1056],{"class":916},[324,65722,2025],{"class":867},[324,65724,65725,65727,65729,65731],{"class":326,"line":2343},[324,65726,55417],{"class":916},[324,65728,52159],{"class":867},[324,65730,1056],{"class":916},[324,65732,2025],{"class":867},[324,65734,65735],{"class":326,"line":2348},[324,65736,2917],{"class":867},[324,65738,65739],{"class":326,"line":2354},[324,65740,488],{"emptyLinePlaceholder":487},[324,65742,65743,65746],{"class":326,"line":2359},[324,65744,65745],{"class":52022},"    table",[324,65747,16301],{"class":867},[324,65749,65750,65753,65755,65758],{"class":326,"line":2373},[324,65751,65752],{"class":916},"      border-collapse",[324,65754,52159],{"class":867},[324,65756,65757],{"class":916},"collapse",[324,65759,2025],{"class":867},[324,65761,65762,65765,65767,65769],{"class":326,"line":2378},[324,65763,65764],{"class":916},"      border-spacing",[324,65766,52159],{"class":867},[324,65768,1056],{"class":916},[324,65770,2025],{"class":867},[324,65772,65773,65775,65777,65779,65781,65783,65786],{"class":326,"line":2384},[324,65774,62699],{"class":916},[324,65776,52159],{"class":867},[324,65778,1082],{"class":916},[324,65780,52214],{"class":863},[324,65782,52243],{"class":916},[324,65784,65785],{"class":916}," #c0c0c0",[324,65787,2025],{"class":867},[324,65789,65790,65792,65794,65797,65799],{"class":326,"line":2405},[324,65791,55493],{"class":916},[324,65793,52159],{"class":867},[324,65795,65796],{"class":916},"500",[324,65798,52214],{"class":863},[324,65800,2025],{"class":867},[324,65802,65803,65805,65807,65809,65811,65813],{"class":326,"line":2410},[324,65804,55428],{"class":916},[324,65806,52159],{"class":867},[324,65808,1175],{"class":916},[324,65810,52214],{"class":863},[324,65812,52278],{"class":916},[324,65814,2025],{"class":867},[324,65816,65817,65819,65821,65823],{"class":326,"line":2424},[324,65818,58008],{"class":916},[324,65820,52159],{"class":867},[324,65822,52314],{"class":916},[324,65824,2025],{"class":867},[324,65826,65827],{"class":326,"line":2429},[324,65828,2917],{"class":867},[324,65830,65831],{"class":326,"line":2458},[324,65832,488],{"emptyLinePlaceholder":487},[324,65834,65835,65838],{"class":326,"line":2463},[324,65836,65837],{"class":52022},"    th",[324,65839,16301],{"class":867},[324,65841,65842,65844,65846,65849],{"class":326,"line":2480},[324,65843,55606],{"class":916},[324,65845,52159],{"class":867},[324,65847,65848],{"class":916},"#09c",[324,65850,2025],{"class":867},[324,65852,65853,65856,65858,65860,65862,65864,65867],{"class":326,"line":2485},[324,65854,65855],{"class":916},"      font",[324,65857,52159],{"class":867},[324,65859,63061],{"class":916},[324,65861,64795],{"class":916},[324,65863,52214],{"class":863},[324,65865,65866],{"class":738}," \"微软雅黑\"",[324,65868,2025],{"class":867},[324,65870,65871,65873,65875,65877],{"class":326,"line":2490},[324,65872,58138],{"class":916},[324,65874,52159],{"class":867},[324,65876,61564],{"class":916},[324,65878,2025],{"class":867},[324,65880,65881,65883,65885,65887,65889],{"class":326,"line":2495},[324,65882,55507],{"class":916},[324,65884,52159],{"class":867},[324,65886,1664],{"class":916},[324,65888,52214],{"class":863},[324,65890,2025],{"class":867},[324,65892,65893],{"class":326,"line":2509},[324,65894,2917],{"class":867},[324,65896,65897],{"class":326,"line":2514},[324,65898,488],{"emptyLinePlaceholder":487},[324,65900,65901,65904],{"class":326,"line":3306},[324,65902,65903],{"class":52022},"    td",[324,65905,16301],{"class":867},[324,65907,65908,65910,65912,65914,65916,65918,65921],{"class":326,"line":3320},[324,65909,62699],{"class":916},[324,65911,52159],{"class":867},[324,65913,1082],{"class":916},[324,65915,52214],{"class":863},[324,65917,52243],{"class":916},[324,65919,65920],{"class":916}," #d0d0d0",[324,65922,2025],{"class":867},[324,65924,65925,65927,65929,65932],{"class":326,"line":3328},[324,65926,58138],{"class":916},[324,65928,52159],{"class":867},[324,65930,65931],{"class":916},"#404060",[324,65933,2025],{"class":867},[324,65935,65936,65938,65940,65942,65944],{"class":326,"line":3333},[324,65937,55417],{"class":916},[324,65939,52159],{"class":867},[324,65941,1310],{"class":916},[324,65943,52214],{"class":863},[324,65945,2025],{"class":867},[324,65947,65948],{"class":326,"line":3339},[324,65949,2917],{"class":867},[324,65951,65952],{"class":326,"line":3345},[324,65953,488],{"emptyLinePlaceholder":487},[324,65955,65956,65959],{"class":326,"line":3350},[324,65957,65958],{"class":734},"    .allCheck",[324,65960,16301],{"class":867},[324,65962,65963,65965,65967,65969,65971],{"class":326,"line":8677},[324,65964,55493],{"class":916},[324,65966,52159],{"class":867},[324,65968,1476],{"class":916},[324,65970,52214],{"class":863},[324,65972,2025],{"class":867},[324,65974,65975],{"class":326,"line":8701},[324,65976,2917],{"class":867},[324,65978,65979,65981,65983],{"class":326,"line":8706},[324,65980,53139],{"class":867},[324,65982,775],{"class":52022},[324,65984,52029],{"class":867},[324,65986,65987,65989,65991],{"class":326,"line":8712},[324,65988,52507],{"class":867},[324,65990,52056],{"class":52022},[324,65992,52029],{"class":867},[324,65994,65995],{"class":326,"line":8739},[324,65996,488],{"emptyLinePlaceholder":487},[324,65998,65999,66001,66003],{"class":326,"line":8744},[324,66000,1774],{"class":867},[324,66002,52522],{"class":52022},[324,66004,52029],{"class":867},[324,66006,66007,66009,66011],{"class":326,"line":8750},[324,66008,52866],{"class":867},[324,66010,1003],{"class":52022},[324,66012,52029],{"class":867},[324,66014,66015,66017,66019],{"class":326,"line":8762},[324,66016,52063],{"class":867},[324,66018,1009],{"class":52022},[324,66020,52029],{"class":867},[324,66022,66023,66025,66027,66029,66031,66034],{"class":326,"line":8774},[324,66024,55956],{"class":867},[324,66026,1012],{"class":52022},[324,66028,54208],{"class":734},[324,66030,913],{"class":867},[324,66032,66033],{"class":738},"\"allCheck\"",[324,66035,52029],{"class":867},[324,66037,66038,66040,66042,66044,66046,66048,66050,66052,66054,66056,66058,66061,66064,66066,66068,66070,66073,66076,66078],{"class":326,"line":8786},[324,66039,56024],{"class":867},[324,66041,54543],{"class":52022},[324,66043,54546],{"class":734},[324,66045,913],{"class":867},[324,66047,54551],{"class":738},[324,66049,15649],{"class":734},[324,66051,913],{"class":867},[324,66053,8381],{"class":738},[324,66055,15688],{"class":734},[324,66057,913],{"class":867},[324,66059,66060],{"class":738},"\"checkAll\"",[324,66062,66063],{"class":867},"> \u003C",[324,66065,324],{"class":52022},[324,66067,54208],{"class":734},[324,66069,913],{"class":867},[324,66071,66072],{"class":738},"\"all\"",[324,66074,66075],{"class":867},">全选\u003C\u002F",[324,66077,324],{"class":52022},[324,66079,52029],{"class":867},[324,66081,66082,66084,66086],{"class":326,"line":10445},[324,66083,56129],{"class":867},[324,66085,1012],{"class":52022},[324,66087,52029],{"class":867},[324,66089,66090,66092,66094,66097,66099],{"class":326,"line":10470},[324,66091,55956],{"class":867},[324,66093,1012],{"class":52022},[324,66095,66096],{"class":867},">商品\u003C\u002F",[324,66098,1012],{"class":52022},[324,66100,52029],{"class":867},[324,66102,66103,66105,66107,66110,66112],{"class":326,"line":10493},[324,66104,55956],{"class":867},[324,66106,1012],{"class":52022},[324,66108,66109],{"class":867},">商家\u003C\u002F",[324,66111,1012],{"class":52022},[324,66113,52029],{"class":867},[324,66115,66116,66118,66120,66123,66125],{"class":326,"line":10517},[324,66117,55956],{"class":867},[324,66119,1012],{"class":52022},[324,66121,66122],{"class":867},">价格\u003C\u002F",[324,66124,1012],{"class":52022},[324,66126,52029],{"class":867},[324,66128,66129,66131,66133],{"class":326,"line":10522},[324,66130,52498],{"class":867},[324,66132,1009],{"class":52022},[324,66134,52029],{"class":867},[324,66136,66137,66139,66141],{"class":326,"line":10527},[324,66138,52063],{"class":867},[324,66140,1009],{"class":52022},[324,66142,52029],{"class":867},[324,66144,66145,66147,66149],{"class":326,"line":10532},[324,66146,55956],{"class":867},[324,66148,1054],{"class":52022},[324,66150,52029],{"class":867},[324,66152,66153,66155,66157,66159,66161,66163,66165,66167,66170,66172,66174,66177],{"class":326,"line":10541},[324,66154,56024],{"class":867},[324,66156,54543],{"class":52022},[324,66158,54546],{"class":734},[324,66160,913],{"class":867},[324,66162,54551],{"class":738},[324,66164,15649],{"class":734},[324,66166,913],{"class":867},[324,66168,66169],{"class":738},"\"check\"",[324,66171,54208],{"class":734},[324,66173,913],{"class":867},[324,66175,66176],{"class":738},"\"ck\"",[324,66178,52029],{"class":867},[324,66180,66181,66183,66185],{"class":326,"line":10546},[324,66182,56129],{"class":867},[324,66184,1054],{"class":52022},[324,66186,52029],{"class":867},[324,66188,66189,66191,66193,66195,66197],{"class":326,"line":10552},[324,66190,55956],{"class":867},[324,66192,1054],{"class":52022},[324,66194,61895],{"class":867},[324,66196,1054],{"class":52022},[324,66198,52029],{"class":867},[324,66200,66201,66203,66205,66208,66210],{"class":326,"line":10573},[324,66202,55956],{"class":867},[324,66204,1054],{"class":52022},[324,66206,66207],{"class":867},">小米\u003C\u002F",[324,66209,1054],{"class":52022},[324,66211,52029],{"class":867},[324,66213,66214,66216,66218,66221,66223],{"class":326,"line":10579},[324,66215,55956],{"class":867},[324,66217,1054],{"class":52022},[324,66219,66220],{"class":867},">￥1999\u003C\u002F",[324,66222,1054],{"class":52022},[324,66224,52029],{"class":867},[324,66226,66227,66229,66231],{"class":326,"line":10593},[324,66228,52498],{"class":867},[324,66230,1009],{"class":52022},[324,66232,52029],{"class":867},[324,66234,66235,66237,66239],{"class":326,"line":10599},[324,66236,52063],{"class":867},[324,66238,1009],{"class":52022},[324,66240,52029],{"class":867},[324,66242,66243,66245,66247],{"class":326,"line":10626},[324,66244,55956],{"class":867},[324,66246,1054],{"class":52022},[324,66248,52029],{"class":867},[324,66250,66251,66253,66255,66257,66259,66261,66263,66265,66267,66269,66271,66273],{"class":326,"line":10635},[324,66252,56024],{"class":867},[324,66254,54543],{"class":52022},[324,66256,54546],{"class":734},[324,66258,913],{"class":867},[324,66260,54551],{"class":738},[324,66262,15649],{"class":734},[324,66264,913],{"class":867},[324,66266,66169],{"class":738},[324,66268,54208],{"class":734},[324,66270,913],{"class":867},[324,66272,66176],{"class":738},[324,66274,52029],{"class":867},[324,66276,66277,66279,66281],{"class":326,"line":10641},[324,66278,56129],{"class":867},[324,66280,1054],{"class":52022},[324,66282,52029],{"class":867},[324,66284,66285,66287,66289,66292,66294],{"class":326,"line":10649},[324,66286,55956],{"class":867},[324,66288,1054],{"class":52022},[324,66290,66291],{"class":867},">小米净水器\u003C\u002F",[324,66293,1054],{"class":52022},[324,66295,52029],{"class":867},[324,66297,66298,66300,66302,66304,66306],{"class":326,"line":10654},[324,66299,55956],{"class":867},[324,66301,1054],{"class":52022},[324,66303,66207],{"class":867},[324,66305,1054],{"class":52022},[324,66307,52029],{"class":867},[324,66309,66310,66312,66314,66317,66319],{"class":326,"line":17333},[324,66311,55956],{"class":867},[324,66313,1054],{"class":52022},[324,66315,66316],{"class":867},">￥4999\u003C\u002F",[324,66318,1054],{"class":52022},[324,66320,52029],{"class":867},[324,66322,66323,66325,66327],{"class":326,"line":17339},[324,66324,52498],{"class":867},[324,66326,1009],{"class":52022},[324,66328,52029],{"class":867},[324,66330,66331,66333,66335],{"class":326,"line":17362},[324,66332,52063],{"class":867},[324,66334,1009],{"class":52022},[324,66336,52029],{"class":867},[324,66338,66339,66341,66343],{"class":326,"line":17368},[324,66340,55956],{"class":867},[324,66342,1054],{"class":52022},[324,66344,52029],{"class":867},[324,66346,66347,66349,66351,66353,66355,66357,66359,66361,66363,66365,66367,66369],{"class":326,"line":17391},[324,66348,56024],{"class":867},[324,66350,54543],{"class":52022},[324,66352,54546],{"class":734},[324,66354,913],{"class":867},[324,66356,54551],{"class":738},[324,66358,15649],{"class":734},[324,66360,913],{"class":867},[324,66362,66169],{"class":738},[324,66364,54208],{"class":734},[324,66366,913],{"class":867},[324,66368,66176],{"class":738},[324,66370,52029],{"class":867},[324,66372,66373,66375,66377],{"class":326,"line":17405},[324,66374,56129],{"class":867},[324,66376,1054],{"class":52022},[324,66378,52029],{"class":867},[324,66380,66381,66383,66385,66388,66390],{"class":326,"line":17425},[324,66382,55956],{"class":867},[324,66384,1054],{"class":52022},[324,66386,66387],{"class":867},">小米电视\u003C\u002F",[324,66389,1054],{"class":52022},[324,66391,52029],{"class":867},[324,66393,66394,66396,66398,66400,66402],{"class":326,"line":17431},[324,66395,55956],{"class":867},[324,66397,1054],{"class":52022},[324,66399,66207],{"class":867},[324,66401,1054],{"class":52022},[324,66403,52029],{"class":867},[324,66405,66406,66408,66410,66413,66415],{"class":326,"line":17442},[324,66407,55956],{"class":867},[324,66409,1054],{"class":52022},[324,66411,66412],{"class":867},">￥5999\u003C\u002F",[324,66414,1054],{"class":52022},[324,66416,52029],{"class":867},[324,66418,66419,66421,66423],{"class":326,"line":17465},[324,66420,52498],{"class":867},[324,66422,1009],{"class":52022},[324,66424,52029],{"class":867},[324,66426,66427,66429,66431],{"class":326,"line":17487},[324,66428,53139],{"class":867},[324,66430,1003],{"class":52022},[324,66432,52029],{"class":867},[324,66434,66435,66437,66439],{"class":326,"line":17492},[324,66436,52866],{"class":867},[324,66438,52535],{"class":52022},[324,66440,52029],{"class":867},[324,66442,66443],{"class":326,"line":17498},[324,66444,66445],{"class":772},"    \u002F\u002F 1. 获取大复选框\n",[324,66447,66448,66450,66453,66455,66457,66459,66461,66464],{"class":326,"line":17512},[324,66449,11950],{"class":863},[324,66451,66452],{"class":916}," checkAll",[324,66454,14293],{"class":863},[324,66456,55118],{"class":867},[324,66458,55121],{"class":734},[324,66460,868],{"class":867},[324,66462,66463],{"class":738},"'#checkAll'",[324,66465,874],{"class":867},[324,66467,66468],{"class":326,"line":17525},[324,66469,66470],{"class":772},"    \u002F\u002F 2. 获取所有的小复选框\n",[324,66472,66473,66475,66478,66480,66482,66484,66486,66489],{"class":326,"line":17530},[324,66474,11950],{"class":863},[324,66476,66477],{"class":916}," cks",[324,66479,14293],{"class":863},[324,66481,55118],{"class":867},[324,66483,56403],{"class":734},[324,66485,868],{"class":867},[324,66487,66488],{"class":738},"'.ck'",[324,66490,874],{"class":867},[324,66492,66493],{"class":326,"line":17544},[324,66494,66495],{"class":772},"    \u002F\u002F 3. 点击大复选框  注册事件\n",[324,66497,66498,66501,66503,66505,66507,66509,66511],{"class":326,"line":17549},[324,66499,66500],{"class":867},"    checkAll.",[324,66502,58535],{"class":734},[324,66504,868],{"class":867},[324,66506,58540],{"class":738},[324,66508,13164],{"class":867},[324,66510,55171],{"class":863},[324,66512,55174],{"class":867},[324,66514,66515],{"class":326,"line":17555},[324,66516,66517],{"class":772},"      \u002F\u002F 得到当前大复选框的选中状态\n",[324,66519,66520,66523],{"class":326,"line":17560},[324,66521,66522],{"class":772},"      \u002F\u002F console.log(checkAll.checked)",[324,66524,66525],{"class":772},"  \u002F\u002F 得到 是 true 或者是 false\n",[324,66527,66528],{"class":326,"line":17574},[324,66529,66530],{"class":772},"      \u002F\u002F 4. 遍历所有的小复选框 让小复选框的checked  =  大复选框的 checked\n",[324,66532,66533,66535,66537,66539,66541,66543,66545,66547,66549,66552,66554,66556,66558],{"class":326,"line":17579},[324,66534,53006],{"class":863},[324,66536,2389],{"class":867},[324,66538,52569],{"class":863},[324,66540,10167],{"class":867},[324,66542,913],{"class":863},[324,66544,4822],{"class":916},[324,66546,10174],{"class":867},[324,66548,1774],{"class":863},[324,66550,66551],{"class":867}," cks.",[324,66553,52690],{"class":916},[324,66555,3943],{"class":867},[324,66557,3022],{"class":863},[324,66559,13171],{"class":867},[324,66561,66562,66565,66567,66570],{"class":326,"line":17584},[324,66563,66564],{"class":867},"        cks[i].checked ",[324,66566,913],{"class":863},[324,66568,66569],{"class":916}," this",[324,66571,66572],{"class":867},".checked\n",[324,66574,66575],{"class":326,"line":17598},[324,66576,53120],{"class":867},[324,66578,66579],{"class":326,"line":17610},[324,66580,34183],{"class":867},[324,66582,66583],{"class":326,"line":17615},[324,66584,66585],{"class":772},"    \u002F\u002F 5. 小复选框控制大复选框\n",[324,66587,66588],{"class":326,"line":17628},[324,66589,488],{"emptyLinePlaceholder":487},[324,66591,66592,66594,66596,66598,66600,66602,66604,66606,66608,66610,66612,66614,66616],{"class":326,"line":17633},[324,66593,3930],{"class":863},[324,66595,2389],{"class":867},[324,66597,52569],{"class":863},[324,66599,10167],{"class":867},[324,66601,913],{"class":863},[324,66603,4822],{"class":916},[324,66605,10174],{"class":867},[324,66607,1774],{"class":863},[324,66609,66551],{"class":867},[324,66611,52690],{"class":916},[324,66613,3943],{"class":867},[324,66615,3022],{"class":863},[324,66617,13171],{"class":867},[324,66619,66620],{"class":326,"line":17638},[324,66621,66622],{"class":772},"      \u002F\u002F 5.1 给所有的小复选框添加点击事件\n",[324,66624,66625,66628,66630,66632,66634,66636,66638],{"class":326,"line":17643},[324,66626,66627],{"class":867},"      cks[i].",[324,66629,58535],{"class":734},[324,66631,868],{"class":867},[324,66633,58540],{"class":738},[324,66635,13164],{"class":867},[324,66637,55171],{"class":863},[324,66639,55174],{"class":867},[324,66641,66642],{"class":326,"line":17656},[324,66643,66644],{"class":772},"        \u002F\u002F 判断选中的小复选框个数 是不是等于  总的小复选框个数\n",[324,66646,66647],{"class":326,"line":17661},[324,66648,66649],{"class":772},"        \u002F\u002F 一定要写到点击里面，因为每次要获得最新的个数\n",[324,66651,66652],{"class":326,"line":33355},[324,66653,66654],{"class":772},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length)\n",[324,66656,66657],{"class":326,"line":33361},[324,66658,66659],{"class":772},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length === cks.length)\n",[324,66661,66662,66665,66667,66669,66671,66673,66676,66678,66680,66682,66684],{"class":326,"line":33367},[324,66663,66664],{"class":867},"        checkAll.checked ",[324,66666,913],{"class":863},[324,66668,55118],{"class":867},[324,66670,56403],{"class":734},[324,66672,868],{"class":867},[324,66674,66675],{"class":738},"'.ck:checked'",[324,66677,31548],{"class":867},[324,66679,52690],{"class":916},[324,66681,58628],{"class":863},[324,66683,66551],{"class":867},[324,66685,56553],{"class":916},[324,66687,66688],{"class":326,"line":33373},[324,66689,65537],{"class":867},[324,66691,66692],{"class":326,"line":33379},[324,66693,2917],{"class":867},[324,66695,66696,66698,66700],{"class":326,"line":33390},[324,66697,53139],{"class":867},[324,66699,52535],{"class":52022},[324,66701,52029],{"class":867},[324,66703,66704,66706,66708],{"class":326,"line":33396},[324,66705,52507],{"class":867},[324,66707,52522],{"class":52022},[324,66709,52029],{"class":867},[324,66711,66712],{"class":326,"line":33416},[324,66713,488],{"emptyLinePlaceholder":487},[324,66715,66716,66718,66720],{"class":326,"line":33422},[324,66717,52507],{"class":867},[324,66719,51357],{"class":52022},[324,66721,52029],{"class":867},[19,66723,66724],{},"一定要懂思路，反选做不出来去了解布尔值！！！",[19,66726,66727],{},"用好之间比较得到的布尔值！！！",[19,66729,66730,66731,66734,66735,2389,66738,1448,66740,66743],{},"在 JS 里访问的时候，",[269,66732,66733],{},"checkbox.checked"," 是一个 ",[116,66736,66737],{},"布尔值",[269,66739,2094],{},[269,66741,66742],{},"false",")，不是字符串，也就是说js通过这个属性值可以实现对复选按钮选择与否的控制",[19,66745,66746,66747,66750,66751],{},"HTML 的 ",[269,66748,66749],{},"checked=\"checked\""," 只是 ",[116,66752,66753,66754,66757],{},"初始值；JS 的 ",[269,66755,66756],{},".checked"," 表示当前实时状态，值是个布尔值，是true和false",[19,66759,66760],{},"：checked是一个伪类选择器",[19,66762,66763],{},[48,66764],{"alt":50,"src":66765},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-126.png",[19,66767,66768,66771],{},[66769,66770],"checked",{},"是一个伪类选择器，这个伪类选择器是对被勾选的复选框的样式进行处理",[19,66773,66774],{},[48,66775],{"alt":50,"src":66776},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-127.png",[14,66778,66780],{"id":66779},"_33-dom事件进阶","3.3 DOM事件进阶",[35,66782,66784],{"id":66783},"_331-事件流","3.3.1 事件流",[19,66786,66787],{},[48,66788],{"alt":50,"src":66789},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-128.png",[151,66791,66793],{"id":66792},"_3311-事件捕获","3.3.1.1 事件捕获",[19,66795,66796],{},[48,66797],{"alt":50,"src":66798},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-129.png",[316,66800,66802],{"className":51355,"code":66801,"language":51357,"meta":50,"style":50},"\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",[269,66803,66804,66814,66828,66832,66840,66854,66874,66886,66894,66901,66913,66925,66935,66939,66943,66950,66962,66974,66984,66988,66996,67004,67008,67016,67031,67050,67058,67066,67086,67106,67122,67133,67141,67158,67169,67177,67194,67205,67213,67221,67229,67233],{"__ignoreMap":50},[324,66805,66806,66808,66810,66812],{"class":326,"line":327},[324,66807,52019],{"class":867},[324,66809,52023],{"class":52022},[324,66811,52026],{"class":734},[324,66813,52029],{"class":867},[324,66815,66816,66818,66820,66822,66824,66826],{"class":326,"line":203},[324,66817,1774],{"class":867},[324,66819,51357],{"class":52022},[324,66821,52038],{"class":734},[324,66823,913],{"class":867},[324,66825,52043],{"class":738},[324,66827,52029],{"class":867},[324,66829,66830],{"class":326,"line":338},[324,66831,488],{"emptyLinePlaceholder":487},[324,66833,66834,66836,66838],{"class":326,"line":344},[324,66835,1774],{"class":867},[324,66837,52056],{"class":52022},[324,66839,52029],{"class":867},[324,66841,66842,66844,66846,66848,66850,66852],{"class":326,"line":484},[324,66843,52866],{"class":867},[324,66845,52066],{"class":52022},[324,66847,52069],{"class":734},[324,66849,913],{"class":867},[324,66851,52074],{"class":738},[324,66853,52029],{"class":867},[324,66855,66856,66858,66860,66862,66864,66866,66868,66870,66872],{"class":326,"line":491},[324,66857,52866],{"class":867},[324,66859,52066],{"class":52022},[324,66861,15649],{"class":734},[324,66863,913],{"class":867},[324,66865,52113],{"class":738},[324,66867,52093],{"class":734},[324,66869,913],{"class":867},[324,66871,52120],{"class":738},[324,66873,52029],{"class":867},[324,66875,66876,66878,66880,66882,66884],{"class":326,"line":496},[324,66877,52866],{"class":867},[324,66879,52129],{"class":52022},[324,66881,52132],{"class":867},[324,66883,52129],{"class":52022},[324,66885,52029],{"class":867},[324,66887,66888,66890,66892],{"class":326,"line":502},[324,66889,52866],{"class":867},[324,66891,775],{"class":52022},[324,66893,52029],{"class":867},[324,66895,66896,66899],{"class":326,"line":508},[324,66897,66898],{"class":734},"    .father",[324,66900,16301],{"class":867},[324,66902,66903,66905,66907,66909,66911],{"class":326,"line":514},[324,66904,55493],{"class":916},[324,66906,52159],{"class":867},[324,66908,65796],{"class":916},[324,66910,52214],{"class":863},[324,66912,2025],{"class":867},[324,66914,66915,66917,66919,66921,66923],{"class":326,"line":2343},[324,66916,55507],{"class":916},[324,66918,52159],{"class":867},[324,66920,65796],{"class":916},[324,66922,52214],{"class":863},[324,66924,2025],{"class":867},[324,66926,66927,66929,66931,66933],{"class":326,"line":2348},[324,66928,55606],{"class":916},[324,66930,52159],{"class":867},[324,66932,52367],{"class":916},[324,66934,2025],{"class":867},[324,66936,66937],{"class":326,"line":2354},[324,66938,2917],{"class":867},[324,66940,66941],{"class":326,"line":2359},[324,66942,488],{"emptyLinePlaceholder":487},[324,66944,66945,66948],{"class":326,"line":2373},[324,66946,66947],{"class":734},"    .son",[324,66949,16301],{"class":867},[324,66951,66952,66954,66956,66958,66960],{"class":326,"line":2378},[324,66953,55493],{"class":916},[324,66955,52159],{"class":867},[324,66957,2453],{"class":916},[324,66959,52214],{"class":863},[324,66961,2025],{"class":867},[324,66963,66964,66966,66968,66970,66972],{"class":326,"line":2384},[324,66965,55507],{"class":916},[324,66967,52159],{"class":867},[324,66969,2453],{"class":916},[324,66971,52214],{"class":863},[324,66973,2025],{"class":867},[324,66975,66976,66978,66980,66982],{"class":326,"line":2405},[324,66977,55606],{"class":916},[324,66979,52159],{"class":867},[324,66981,55611],{"class":916},[324,66983,2025],{"class":867},[324,66985,66986],{"class":326,"line":2410},[324,66987,2917],{"class":867},[324,66989,66990,66992,66994],{"class":326,"line":2424},[324,66991,53139],{"class":867},[324,66993,775],{"class":52022},[324,66995,52029],{"class":867},[324,66997,66998,67000,67002],{"class":326,"line":2429},[324,66999,52507],{"class":867},[324,67001,52056],{"class":52022},[324,67003,52029],{"class":867},[324,67005,67006],{"class":326,"line":2458},[324,67007,488],{"emptyLinePlaceholder":487},[324,67009,67010,67012,67014],{"class":326,"line":2463},[324,67011,1774],{"class":867},[324,67013,52522],{"class":52022},[324,67015,52029],{"class":867},[324,67017,67018,67020,67022,67024,67026,67029],{"class":326,"line":2480},[324,67019,52866],{"class":867},[324,67021,52333],{"class":52022},[324,67023,54208],{"class":734},[324,67025,913],{"class":867},[324,67027,67028],{"class":738},"\"father\"",[324,67030,52029],{"class":867},[324,67032,67033,67035,67037,67039,67041,67044,67046,67048],{"class":326,"line":2485},[324,67034,52063],{"class":867},[324,67036,52333],{"class":52022},[324,67038,54208],{"class":734},[324,67040,913],{"class":867},[324,67042,67043],{"class":738},"\"son\"",[324,67045,56036],{"class":867},[324,67047,52333],{"class":52022},[324,67049,52029],{"class":867},[324,67051,67052,67054,67056],{"class":326,"line":2490},[324,67053,53139],{"class":867},[324,67055,52333],{"class":52022},[324,67057,52029],{"class":867},[324,67059,67060,67062,67064],{"class":326,"line":2495},[324,67061,52866],{"class":867},[324,67063,52535],{"class":52022},[324,67065,52029],{"class":867},[324,67067,67068,67070,67073,67075,67077,67079,67081,67084],{"class":326,"line":2509},[324,67069,11950],{"class":863},[324,67071,67072],{"class":916}," fa",[324,67074,14293],{"class":863},[324,67076,55118],{"class":867},[324,67078,55121],{"class":734},[324,67080,868],{"class":867},[324,67082,67083],{"class":738},"'.father'",[324,67085,874],{"class":867},[324,67087,67088,67090,67093,67095,67097,67099,67101,67104],{"class":326,"line":2514},[324,67089,11950],{"class":863},[324,67091,67092],{"class":916}," son",[324,67094,14293],{"class":863},[324,67096,55118],{"class":867},[324,67098,55121],{"class":734},[324,67100,868],{"class":867},[324,67102,67103],{"class":738},"'.son'",[324,67105,874],{"class":867},[324,67107,67108,67110,67112,67114,67116,67118,67120],{"class":326,"line":3306},[324,67109,53129],{"class":867},[324,67111,58535],{"class":734},[324,67113,868],{"class":867},[324,67115,58540],{"class":738},[324,67117,13164],{"class":867},[324,67119,55171],{"class":863},[324,67121,55174],{"class":867},[324,67123,67124,67126,67128,67131],{"class":326,"line":3320},[324,67125,59647],{"class":734},[324,67127,868],{"class":867},[324,67129,67130],{"class":738},"'woshiu1'",[324,67132,874],{"class":867},[324,67134,67135,67137,67139],{"class":326,"line":3328},[324,67136,55257],{"class":867},[324,67138,2094],{"class":916},[324,67140,874],{"class":867},[324,67142,67143,67146,67148,67150,67152,67154,67156],{"class":326,"line":3333},[324,67144,67145],{"class":867},"    fa.",[324,67147,58535],{"class":734},[324,67149,868],{"class":867},[324,67151,58540],{"class":738},[324,67153,13164],{"class":867},[324,67155,55171],{"class":863},[324,67157,55174],{"class":867},[324,67159,67160,67162,67164,67167],{"class":326,"line":3339},[324,67161,59647],{"class":734},[324,67163,868],{"class":867},[324,67165,67166],{"class":738},"'1'",[324,67168,874],{"class":867},[324,67170,67171,67173,67175],{"class":326,"line":3345},[324,67172,55257],{"class":867},[324,67174,2094],{"class":916},[324,67176,874],{"class":867},[324,67178,67179,67182,67184,67186,67188,67190,67192],{"class":326,"line":3350},[324,67180,67181],{"class":867},"    son.",[324,67183,58535],{"class":734},[324,67185,868],{"class":867},[324,67187,58540],{"class":738},[324,67189,13164],{"class":867},[324,67191,55171],{"class":863},[324,67193,55174],{"class":867},[324,67195,67196,67198,67200,67203],{"class":326,"line":8677},[324,67197,59647],{"class":734},[324,67199,868],{"class":867},[324,67201,67202],{"class":738},"'2'",[324,67204,874],{"class":867},[324,67206,67207,67209,67211],{"class":326,"line":8701},[324,67208,55257],{"class":867},[324,67210,2094],{"class":916},[324,67212,874],{"class":867},[324,67214,67215,67217,67219],{"class":326,"line":8706},[324,67216,53139],{"class":867},[324,67218,52535],{"class":52022},[324,67220,52029],{"class":867},[324,67222,67223,67225,67227],{"class":326,"line":8712},[324,67224,52507],{"class":867},[324,67226,52522],{"class":52022},[324,67228,52029],{"class":867},[324,67230,67231],{"class":326,"line":8739},[324,67232,488],{"emptyLinePlaceholder":487},[324,67234,67235,67237,67239],{"class":326,"line":8744},[324,67236,52507],{"class":867},[324,67238,51357],{"class":52022},[324,67240,52029],{"class":867},[19,67242,67243],{},[48,67244],{"alt":50,"src":67245},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-130.png",[19,67247,67248],{},"点击小盒子，先从最大盒子开始执行，先弹出woshiu1，再弹出1，最后弹出2；点击粉色盒子：先弹出woshiu1，再弹出1；点击浏览器其他区域，弹出woshiu1，捕获就是从最大对象（元素）开始往下找",[151,67250,67252],{"id":67251},"_3312-事件冒泡","3.3.1.2 事件冒泡",[19,67254,67255],{},[48,67256],{"alt":50,"src":67257},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-131.png",[19,67259,67260],{},"反着来",[19,67262,67263],{},"注意是同名事件，比如都是‘click’",[151,67265,67267],{"id":67266},"_3313-阻止冒泡","3.3.1.3 阻止冒泡",[19,67269,67270],{},[48,67271],{"alt":50,"src":67272},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-132.png",[151,67274,67276],{"id":67275},"_3314-解绑事件","3.3.1.4 解绑事件",[19,67278,67279],{},[48,67280],{"alt":50,"src":67281},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-133.png",[19,67283,67284],{},[48,67285],{"alt":50,"src":67286},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-134.png",[151,67288,67290],{"id":67289},"_3315-事件类型和注册事件的区别","3.3.1.5 事件类型和注册事件的区别",[192,67292,67293],{},[195,67294,67295],{},"事件类型的区别",[19,67297,67298],{},[48,67299],{"alt":50,"src":67300},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-135.png",[19,67302,67303],{},"mouseover有冒泡，如果想实现鼠标经过有冒泡效果，就不要使用mouseenter,用mouseover",[192,67305,67306],{"start":203},[195,67307,67308],{},"注册事件的区别",[19,67310,67311],{},[48,67312],{"alt":50,"src":67313},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-136.png",[151,67315,67317],{"id":67316},"_3316-阻止冒泡","3.3.1.6 阻止冒泡",[19,67319,67320],{},[48,67321],{"alt":50,"src":67322},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-137.png",[19,67324,67325],{},[48,67326],{"alt":50,"src":67327},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-138.png",[316,67329,67331],{"className":53789,"code":67330,"language":53791,"meta":50,"style":50},"\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",[269,67332,67333,67341,67358,67381,67389,67394,67399,67404,67408,67416,67424],{"__ignoreMap":50},[324,67334,67335,67337,67339],{"class":326,"line":327},[324,67336,1774],{"class":867},[324,67338,52522],{"class":52022},[324,67340,52029],{"class":867},[324,67342,67343,67345,67348,67351,67353,67356],{"class":326,"line":203},[324,67344,52866],{"class":867},[324,67346,67347],{"class":52022},"form",[324,67349,67350],{"class":734}," action",[324,67352,913],{"class":867},[324,67354,67355],{"class":738},"\"http:\u002F\u002Fwww.itcast.cn\"",[324,67357,52029],{"class":867},[324,67359,67360,67362,67364,67366,67368,67371,67374,67376,67379],{"class":326,"line":338},[324,67361,52063],{"class":867},[324,67363,54543],{"class":52022},[324,67365,54546],{"class":734},[324,67367,913],{"class":867},[324,67369,67370],{"class":738},"\"submit\"",[324,67372,67373],{"class":734}," value",[324,67375,913],{"class":867},[324,67377,67378],{"class":738},"\"免费注册\"",[324,67380,52029],{"class":867},[324,67382,67383,67385,67387],{"class":326,"line":344},[324,67384,52063],{"class":867},[324,67386,52535],{"class":52022},[324,67388,52029],{"class":867},[324,67390,67391],{"class":326,"line":484},[324,67392,67393],{"class":867},"      const form = document.querySelector('form')\n",[324,67395,67396],{"class":326,"line":491},[324,67397,67398],{"class":867},"      form.addEventListener('submit', function (e) {\n",[324,67400,67401],{"class":326,"line":496},[324,67402,67403],{"class":867},"        e.preventDefault()\n",[324,67405,67406],{"class":326,"line":502},[324,67407,65537],{"class":867},[324,67409,67410,67412,67414],{"class":326,"line":508},[324,67411,52498],{"class":867},[324,67413,52535],{"class":52022},[324,67415,52029],{"class":867},[324,67417,67418,67420,67422],{"class":326,"line":514},[324,67419,53139],{"class":867},[324,67421,67347],{"class":52022},[324,67423,52029],{"class":867},[324,67425,67426,67428,67430],{"class":326,"line":2343},[324,67427,52507],{"class":867},[324,67429,52522],{"class":52022},[324,67431,52029],{"class":867},[19,67433,67434],{},"点击不在跳转！！！",[35,67436,67438],{"id":67437},"_332-事件委托","3.3.2 事件委托",[19,67440,67441],{},[48,67442],{"alt":50,"src":67443},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-139.png",[316,67445,67447],{"className":51355,"code":67446,"language":51357,"meta":50,"style":50},"\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",[269,67448,67449,67459,67473,67477,67485,67499,67519,67531,67539,67543,67551,67559,67571,67583,67595,67607,67619,67632,67640,67648,67653,67672,67693,67698,67703,67708,67713,67722,67726,67736,67740,67745,67750,67764,67774,67778,67782,67790,67798,67802],{"__ignoreMap":50},[324,67450,67451,67453,67455,67457],{"class":326,"line":327},[324,67452,52019],{"class":867},[324,67454,52023],{"class":52022},[324,67456,52026],{"class":734},[324,67458,52029],{"class":867},[324,67460,67461,67463,67465,67467,67469,67471],{"class":326,"line":203},[324,67462,1774],{"class":867},[324,67464,51357],{"class":52022},[324,67466,52038],{"class":734},[324,67468,913],{"class":867},[324,67470,52043],{"class":738},[324,67472,52029],{"class":867},[324,67474,67475],{"class":326,"line":338},[324,67476,488],{"emptyLinePlaceholder":487},[324,67478,67479,67481,67483],{"class":326,"line":344},[324,67480,1774],{"class":867},[324,67482,52056],{"class":52022},[324,67484,52029],{"class":867},[324,67486,67487,67489,67491,67493,67495,67497],{"class":326,"line":484},[324,67488,52866],{"class":867},[324,67490,52066],{"class":52022},[324,67492,52069],{"class":734},[324,67494,913],{"class":867},[324,67496,52074],{"class":738},[324,67498,52029],{"class":867},[324,67500,67501,67503,67505,67507,67509,67511,67513,67515,67517],{"class":326,"line":491},[324,67502,52866],{"class":867},[324,67504,52066],{"class":52022},[324,67506,15649],{"class":734},[324,67508,913],{"class":867},[324,67510,52113],{"class":738},[324,67512,52093],{"class":734},[324,67514,913],{"class":867},[324,67516,52120],{"class":738},[324,67518,52029],{"class":867},[324,67520,67521,67523,67525,67527,67529],{"class":326,"line":496},[324,67522,52866],{"class":867},[324,67524,52129],{"class":52022},[324,67526,52132],{"class":867},[324,67528,52129],{"class":52022},[324,67530,52029],{"class":867},[324,67532,67533,67535,67537],{"class":326,"line":502},[324,67534,52507],{"class":867},[324,67536,52056],{"class":52022},[324,67538,52029],{"class":867},[324,67540,67541],{"class":326,"line":508},[324,67542,488],{"emptyLinePlaceholder":487},[324,67544,67545,67547,67549],{"class":326,"line":514},[324,67546,1774],{"class":867},[324,67548,52522],{"class":52022},[324,67550,52029],{"class":867},[324,67552,67553,67555,67557],{"class":326,"line":2343},[324,67554,52866],{"class":867},[324,67556,1871],{"class":52022},[324,67558,52029],{"class":867},[324,67560,67561,67563,67565,67567,67569],{"class":326,"line":2348},[324,67562,52063],{"class":867},[324,67564,195],{"class":52022},[324,67566,54688],{"class":867},[324,67568,195],{"class":52022},[324,67570,52029],{"class":867},[324,67572,67573,67575,67577,67579,67581],{"class":326,"line":2354},[324,67574,52063],{"class":867},[324,67576,195],{"class":52022},[324,67578,54707],{"class":867},[324,67580,195],{"class":52022},[324,67582,52029],{"class":867},[324,67584,67585,67587,67589,67591,67593],{"class":326,"line":2359},[324,67586,52063],{"class":867},[324,67588,195],{"class":52022},[324,67590,54726],{"class":867},[324,67592,195],{"class":52022},[324,67594,52029],{"class":867},[324,67596,67597,67599,67601,67603,67605],{"class":326,"line":2373},[324,67598,52063],{"class":867},[324,67600,195],{"class":52022},[324,67602,54745],{"class":867},[324,67604,195],{"class":52022},[324,67606,52029],{"class":867},[324,67608,67609,67611,67613,67615,67617],{"class":326,"line":2378},[324,67610,52063],{"class":867},[324,67612,195],{"class":52022},[324,67614,54764],{"class":867},[324,67616,195],{"class":52022},[324,67618,52029],{"class":867},[324,67620,67621,67623,67625,67628,67630],{"class":326,"line":2384},[324,67622,52063],{"class":867},[324,67624,19],{"class":52022},[324,67626,67627],{"class":867},">我不需要变色\u003C\u002F",[324,67629,19],{"class":52022},[324,67631,52029],{"class":867},[324,67633,67634,67636,67638],{"class":326,"line":2405},[324,67635,53139],{"class":867},[324,67637,1871],{"class":52022},[324,67639,52029],{"class":867},[324,67641,67642,67644,67646],{"class":326,"line":2410},[324,67643,52866],{"class":867},[324,67645,52535],{"class":52022},[324,67647,52029],{"class":867},[324,67649,67650],{"class":326,"line":2424},[324,67651,67652],{"class":772},"    \u002F\u002F 点击每个li，当前文字变为红色\n",[324,67654,67655,67657,67659,67661,67663,67665,67667,67670],{"class":326,"line":2429},[324,67656,11950],{"class":863},[324,67658,62014],{"class":916},[324,67660,14293],{"class":863},[324,67662,55118],{"class":867},[324,67664,55121],{"class":734},[324,67666,868],{"class":867},[324,67668,67669],{"class":738},"'ul'",[324,67671,874],{"class":867},[324,67673,67674,67677,67679,67681,67683,67685,67687,67689,67691],{"class":326,"line":2458},[324,67675,67676],{"class":867},"    ul.",[324,67678,58535],{"class":734},[324,67680,868],{"class":867},[324,67682,58540],{"class":738},[324,67684,13164],{"class":867},[324,67686,55171],{"class":863},[324,67688,2389],{"class":867},[324,67690,941],{"class":5945},[324,67692,13171],{"class":867},[324,67694,67695],{"class":326,"line":2463},[324,67696,67697],{"class":772},"      \u002F\u002F alert(1)\n",[324,67699,67700],{"class":326,"line":2480},[324,67701,67702],{"class":772},"      \u002F\u002F e.target就是我们点击的对象\n",[324,67704,67705],{"class":326,"line":2485},[324,67706,67707],{"class":772},"      \u002F\u002F 当点击时会获得事件对象，事件对象下面target属性中里边就是li\n",[324,67709,67710],{"class":326,"line":2490},[324,67711,67712],{"class":772},"      \u002F\u002F e.target.style.color = 'red'\n",[324,67714,67715,67717,67719],{"class":326,"line":2495},[324,67716,58966],{"class":867},[324,67718,58969],{"class":734},[324,67720,67721],{"class":867},"(e)\n",[324,67723,67724],{"class":326,"line":2509},[324,67725,488],{"emptyLinePlaceholder":487},[324,67727,67728,67730,67733],{"class":326,"line":2514},[324,67729,58966],{"class":867},[324,67731,67732],{"class":734},"dir",[324,67734,67735],{"class":867},"(e.target)\n",[324,67737,67738],{"class":326,"line":3306},[324,67739,488],{"emptyLinePlaceholder":487},[324,67741,67742],{"class":326,"line":3320},[324,67743,67744],{"class":772},"      \u002F\u002F 我们需求，我们只有点击li才会变色\n",[324,67746,67747],{"class":326,"line":3328},[324,67748,67749],{"class":772},"      \u002F\u002F 通过tagName来进行判断\n",[324,67751,67752,67754,67757,67759,67762],{"class":326,"line":3333},[324,67753,55202],{"class":863},[324,67755,67756],{"class":867}," (e.target.tagName ",[324,67758,55208],{"class":863},[324,67760,67761],{"class":738}," 'LI'",[324,67763,13171],{"class":867},[324,67765,67766,67769,67771],{"class":326,"line":3339},[324,67767,67768],{"class":867},"        e.target.style.color ",[324,67770,913],{"class":863},[324,67772,67773],{"class":738}," 'red'\n",[324,67775,67776],{"class":326,"line":3345},[324,67777,53120],{"class":867},[324,67779,67780],{"class":326,"line":3350},[324,67781,34183],{"class":867},[324,67783,67784,67786,67788],{"class":326,"line":8677},[324,67785,53139],{"class":867},[324,67787,52535],{"class":52022},[324,67789,52029],{"class":867},[324,67791,67792,67794,67796],{"class":326,"line":8701},[324,67793,52507],{"class":867},[324,67795,52522],{"class":52022},[324,67797,52029],{"class":867},[324,67799,67800],{"class":326,"line":8706},[324,67801,488],{"emptyLinePlaceholder":487},[324,67803,67804,67806,67808],{"class":326,"line":8712},[324,67805,52507],{"class":867},[324,67807,51357],{"class":52022},[324,67809,52029],{"class":867},[19,67811,67812],{},"当进行点击时，会获得事件对象的信息，这个对象中有一个属性为target，里边存放了点击的那个对象，然后target中又有属性值为tagName为所点击对象的名字，如果只想点击确定的对象实现某功能的话，就可以使用tagName来进行判断，对于p标签，只有点击p标签的时候执行效果，使用的是",[19,67814,67815],{},"if(e.target.ragName==='P') {}",[19,67817,67818],{},"一定要大写，可能写源码的人为了区分跟获取的p对象，才必须得大写",[19,67820,67821],{},"通过事件委托的方式实现tab栏切换改造：",[19,67823,67824],{},"一定要记住自定义属性！！！！！！",[19,67826,67827],{},"自定义属性内容都存放在了dataset这个属性中了，也就是获取值的时候就得",[19,67829,67830],{},"id是自定义的属性名",[19,67832,67833],{},"dataset.id 获取的是后面自定义属性的内容（标号），这些内容是个字符串，如果需要的是数字的话可以用parseint()，优先用隐式转换，直接在前加个+就ok",[316,67835,67837],{"className":51355,"code":67836,"language":51357,"meta":50,"style":50},"\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",[269,67838,67839,67849,67863,67867,67875,67889,67909,67929,67941,67949,67955,67965,67975,67979,67983,67989,68001,68013,68025,68041,68045,68049,68055,68067,68079,68091,68101,68111,68115,68119,68127,68139,68149,68161,68165,68169,68177,68187,68197,68207,68211,68215,68225,68239,68251,68255,68259,68271,68281,68297,68307,68311,68315,68329,68339,68349,68353,68357,68363,68377,68381,68385,68393,68403,68407,68411,68420,68430,68434,68442,68450,68454,68462,68476,68490,68502,68510,68549,68581,68613,68645,68677,68685,68693,68707,68741,68775,68809,68843,68877,68885,68893,68901,68906,68911,68930,68935,68955,68963,68968,68981,69002,69015,69019,69024,69029,69042,69062,69090,69094,69098,69102,69110,69118,69122],{"__ignoreMap":50},[324,67840,67841,67843,67845,67847],{"class":326,"line":327},[324,67842,52019],{"class":867},[324,67844,52023],{"class":52022},[324,67846,52026],{"class":734},[324,67848,52029],{"class":867},[324,67850,67851,67853,67855,67857,67859,67861],{"class":326,"line":203},[324,67852,1774],{"class":867},[324,67854,51357],{"class":52022},[324,67856,52038],{"class":734},[324,67858,913],{"class":867},[324,67860,52043],{"class":738},[324,67862,52029],{"class":867},[324,67864,67865],{"class":326,"line":338},[324,67866,488],{"emptyLinePlaceholder":487},[324,67868,67869,67871,67873],{"class":326,"line":344},[324,67870,1774],{"class":867},[324,67872,52056],{"class":52022},[324,67874,52029],{"class":867},[324,67876,67877,67879,67881,67883,67885,67887],{"class":326,"line":484},[324,67878,52866],{"class":867},[324,67880,52066],{"class":52022},[324,67882,52069],{"class":734},[324,67884,913],{"class":867},[324,67886,52074],{"class":738},[324,67888,59849],{"class":867},[324,67890,67891,67893,67895,67897,67899,67901,67903,67905,67907],{"class":326,"line":491},[324,67892,52866],{"class":867},[324,67894,52066],{"class":52022},[324,67896,52085],{"class":734},[324,67898,913],{"class":867},[324,67900,52090],{"class":738},[324,67902,52093],{"class":734},[324,67904,913],{"class":867},[324,67906,52098],{"class":738},[324,67908,59849],{"class":867},[324,67910,67911,67913,67915,67917,67919,67921,67923,67925,67927],{"class":326,"line":496},[324,67912,52866],{"class":867},[324,67914,52066],{"class":52022},[324,67916,15649],{"class":734},[324,67918,913],{"class":867},[324,67920,52113],{"class":738},[324,67922,52093],{"class":734},[324,67924,913],{"class":867},[324,67926,52120],{"class":738},[324,67928,59849],{"class":867},[324,67930,67931,67933,67935,67937,67939],{"class":326,"line":502},[324,67932,52866],{"class":867},[324,67934,52129],{"class":52022},[324,67936,64347],{"class":867},[324,67938,52129],{"class":52022},[324,67940,52029],{"class":867},[324,67942,67943,67945,67947],{"class":326,"line":508},[324,67944,52866],{"class":867},[324,67946,775],{"class":52022},[324,67948,52029],{"class":867},[324,67950,67951,67953],{"class":326,"line":514},[324,67952,7132],{"class":52022},[324,67954,16301],{"class":867},[324,67956,67957,67959,67961,67963],{"class":326,"line":2343},[324,67958,55428],{"class":916},[324,67960,52159],{"class":867},[324,67962,1056],{"class":916},[324,67964,2025],{"class":867},[324,67966,67967,67969,67971,67973],{"class":326,"line":2348},[324,67968,55417],{"class":916},[324,67970,52159],{"class":867},[324,67972,1056],{"class":916},[324,67974,2025],{"class":867},[324,67976,67977],{"class":326,"line":2354},[324,67978,2917],{"class":867},[324,67980,67981],{"class":326,"line":2359},[324,67982,488],{"emptyLinePlaceholder":487},[324,67984,67985,67987],{"class":326,"line":2373},[324,67986,64398],{"class":734},[324,67988,16301],{"class":867},[324,67990,67991,67993,67995,67997,67999],{"class":326,"line":2378},[324,67992,55493],{"class":916},[324,67994,52159],{"class":867},[324,67996,64409],{"class":916},[324,67998,52214],{"class":863},[324,68000,2025],{"class":867},[324,68002,68003,68005,68007,68009,68011],{"class":326,"line":2384},[324,68004,55507],{"class":916},[324,68006,52159],{"class":867},[324,68008,64422],{"class":916},[324,68010,52214],{"class":863},[324,68012,2025],{"class":867},[324,68014,68015,68017,68019,68021,68023],{"class":326,"line":2405},[324,68016,55428],{"class":916},[324,68018,52159],{"class":867},[324,68020,1564],{"class":916},[324,68022,52214],{"class":863},[324,68024,2025],{"class":867},[324,68026,68027,68029,68031,68033,68035,68037,68039],{"class":326,"line":2410},[324,68028,62699],{"class":916},[324,68030,52159],{"class":867},[324,68032,1082],{"class":916},[324,68034,52214],{"class":863},[324,68036,52243],{"class":916},[324,68038,62966],{"class":916},[324,68040,2025],{"class":867},[324,68042,68043],{"class":326,"line":2424},[324,68044,2917],{"class":867},[324,68046,68047],{"class":326,"line":2429},[324,68048,488],{"emptyLinePlaceholder":487},[324,68050,68051,68053],{"class":326,"line":2458},[324,68052,64467],{"class":734},[324,68054,16301],{"class":867},[324,68056,68057,68059,68061,68063,68065],{"class":326,"line":2463},[324,68058,55493],{"class":916},[324,68060,52159],{"class":867},[324,68062,1175],{"class":916},[324,68064,1192],{"class":863},[324,68066,2025],{"class":867},[324,68068,68069,68071,68073,68075,68077],{"class":326,"line":2480},[324,68070,55507],{"class":916},[324,68072,52159],{"class":867},[324,68074,1771],{"class":916},[324,68076,52214],{"class":863},[324,68078,2025],{"class":867},[324,68080,68081,68083,68085,68087,68089],{"class":326,"line":2485},[324,68082,58081],{"class":916},[324,68084,52159],{"class":867},[324,68086,1771],{"class":916},[324,68088,52214],{"class":863},[324,68090,2025],{"class":867},[324,68092,68093,68095,68097,68099],{"class":326,"line":2490},[324,68094,55731],{"class":916},[324,68096,52159],{"class":867},[324,68098,52199],{"class":916},[324,68100,2025],{"class":867},[324,68102,68103,68105,68107,68109],{"class":326,"line":2495},[324,68104,55742],{"class":916},[324,68106,52159],{"class":867},[324,68108,52390],{"class":916},[324,68110,2025],{"class":867},[324,68112,68113],{"class":326,"line":2509},[324,68114,2917],{"class":867},[324,68116,68117],{"class":326,"line":2514},[324,68118,488],{"emptyLinePlaceholder":487},[324,68120,68121,68123,68125],{"class":326,"line":3306},[324,68122,64467],{"class":734},[324,68124,64540],{"class":52022},[324,68126,16301],{"class":867},[324,68128,68129,68131,68133,68135,68137],{"class":326,"line":3320},[324,68130,55644],{"class":916},[324,68132,52159],{"class":867},[324,68134,1664],{"class":916},[324,68136,52214],{"class":863},[324,68138,2025],{"class":867},[324,68140,68141,68143,68145,68147],{"class":326,"line":3328},[324,68142,63056],{"class":916},[324,68144,52159],{"class":867},[324,68146,64563],{"class":916},[324,68148,2025],{"class":867},[324,68150,68151,68153,68155,68157,68159],{"class":326,"line":3333},[324,68152,62722],{"class":916},[324,68154,52159],{"class":867},[324,68156,1564],{"class":916},[324,68158,52214],{"class":863},[324,68160,2025],{"class":867},[324,68162,68163],{"class":326,"line":3339},[324,68164,2917],{"class":867},[324,68166,68167],{"class":326,"line":3345},[324,68168,488],{"emptyLinePlaceholder":487},[324,68170,68171,68173,68175],{"class":326,"line":3350},[324,68172,64467],{"class":734},[324,68174,62014],{"class":52022},[324,68176,16301],{"class":867},[324,68178,68179,68181,68183,68185],{"class":326,"line":8677},[324,68180,55454],{"class":916},[324,68182,52159],{"class":867},[324,68184,55459],{"class":916},[324,68186,2025],{"class":867},[324,68188,68189,68191,68193,68195],{"class":326,"line":8701},[324,68190,55731],{"class":916},[324,68192,52159],{"class":867},[324,68194,52199],{"class":916},[324,68196,2025],{"class":867},[324,68198,68199,68201,68203,68205],{"class":326,"line":8706},[324,68200,55742],{"class":916},[324,68202,52159],{"class":867},[324,68204,52302],{"class":916},[324,68206,2025],{"class":867},[324,68208,68209],{"class":326,"line":8712},[324,68210,2917],{"class":867},[324,68212,68213],{"class":326,"line":8739},[324,68214,488],{"emptyLinePlaceholder":487},[324,68216,68217,68219,68221,68223],{"class":326,"line":8744},[324,68218,64467],{"class":734},[324,68220,62014],{"class":52022},[324,68222,55797],{"class":52022},[324,68224,16301],{"class":867},[324,68226,68227,68229,68231,68233,68235,68237],{"class":326,"line":8750},[324,68228,55428],{"class":916},[324,68230,52159],{"class":867},[324,68232,1056],{"class":916},[324,68234,9679],{"class":916},[324,68236,52214],{"class":863},[324,68238,2025],{"class":867},[324,68240,68241,68243,68245,68247,68249],{"class":326,"line":8762},[324,68242,55644],{"class":916},[324,68244,52159],{"class":867},[324,68246,1413],{"class":916},[324,68248,52214],{"class":863},[324,68250,2025],{"class":867},[324,68252,68253],{"class":326,"line":8774},[324,68254,2917],{"class":867},[324,68256,68257],{"class":326,"line":8786},[324,68258,488],{"emptyLinePlaceholder":487},[324,68260,68261,68263,68265,68267,68269],{"class":326,"line":10445},[324,68262,64467],{"class":734},[324,68264,62014],{"class":52022},[324,68266,55797],{"class":52022},[324,68268,2130],{"class":52022},[324,68270,16301],{"class":867},[324,68272,68273,68275,68277,68279],{"class":326,"line":10470},[324,68274,64692],{"class":916},[324,68276,52159],{"class":867},[324,68278,55459],{"class":916},[324,68280,2025],{"class":867},[324,68282,68283,68285,68287,68289,68291,68293,68295],{"class":326,"line":10493},[324,68284,62954],{"class":916},[324,68286,52159],{"class":867},[324,68288,944],{"class":916},[324,68290,52214],{"class":863},[324,68292,52243],{"class":916},[324,68294,64713],{"class":916},[324,68296,2025],{"class":867},[324,68298,68299,68301,68303,68305],{"class":326,"line":10517},[324,68300,58138],{"class":916},[324,68302,52159],{"class":867},[324,68304,63091],{"class":916},[324,68306,2025],{"class":867},[324,68308,68309],{"class":326,"line":10522},[324,68310,2917],{"class":867},[324,68312,68313],{"class":326,"line":10527},[324,68314,488],{"emptyLinePlaceholder":487},[324,68316,68317,68319,68321,68323,68325,68327],{"class":326,"line":10532},[324,68318,64467],{"class":734},[324,68320,62014],{"class":52022},[324,68322,55797],{"class":52022},[324,68324,2130],{"class":52022},[324,68326,64746],{"class":734},[324,68328,16301],{"class":867},[324,68330,68331,68333,68335,68337],{"class":326,"line":10541},[324,68332,62513],{"class":916},[324,68334,52159],{"class":867},[324,68336,64757],{"class":916},[324,68338,2025],{"class":867},[324,68340,68341,68343,68345,68347],{"class":326,"line":10546},[324,68342,58138],{"class":916},[324,68344,52159],{"class":867},[324,68346,64757],{"class":916},[324,68348,2025],{"class":867},[324,68350,68351],{"class":326,"line":10552},[324,68352,2917],{"class":867},[324,68354,68355],{"class":326,"line":10573},[324,68356,488],{"emptyLinePlaceholder":487},[324,68358,68359,68361],{"class":326,"line":10579},[324,68360,64782],{"class":734},[324,68362,16301],{"class":867},[324,68364,68365,68367,68369,68371,68373,68375],{"class":326,"line":10593},[324,68366,55417],{"class":916},[324,68368,52159],{"class":867},[324,68370,1056],{"class":916},[324,68372,64795],{"class":916},[324,68374,52214],{"class":863},[324,68376,2025],{"class":867},[324,68378,68379],{"class":326,"line":10599},[324,68380,2917],{"class":867},[324,68382,68383],{"class":326,"line":10626},[324,68384,488],{"emptyLinePlaceholder":487},[324,68386,68387,68389,68391],{"class":326,"line":10635},[324,68388,64782],{"class":734},[324,68390,62896],{"class":734},[324,68392,16301],{"class":867},[324,68394,68395,68397,68399,68401],{"class":326,"line":10641},[324,68396,55731],{"class":916},[324,68398,52159],{"class":867},[324,68400,55459],{"class":916},[324,68402,2025],{"class":867},[324,68404,68405],{"class":326,"line":10649},[324,68406,2917],{"class":867},[324,68408,68409],{"class":326,"line":10654},[324,68410,488],{"emptyLinePlaceholder":487},[324,68412,68413,68415,68418],{"class":326,"line":17333},[324,68414,64782],{"class":734},[324,68416,68417],{"class":734}," .active",[324,68419,16301],{"class":867},[324,68421,68422,68424,68426,68428],{"class":326,"line":17339},[324,68423,55731],{"class":916},[324,68425,52159],{"class":867},[324,68427,61591],{"class":916},[324,68429,2025],{"class":867},[324,68431,68432],{"class":326,"line":17362},[324,68433,2917],{"class":867},[324,68435,68436,68438,68440],{"class":326,"line":17368},[324,68437,53139],{"class":867},[324,68439,775],{"class":52022},[324,68441,52029],{"class":867},[324,68443,68444,68446,68448],{"class":326,"line":17391},[324,68445,52507],{"class":867},[324,68447,52056],{"class":52022},[324,68449,52029],{"class":867},[324,68451,68452],{"class":326,"line":17405},[324,68453,488],{"emptyLinePlaceholder":487},[324,68455,68456,68458,68460],{"class":326,"line":17425},[324,68457,1774],{"class":867},[324,68459,52522],{"class":52022},[324,68461,52029],{"class":867},[324,68463,68464,68466,68468,68470,68472,68474],{"class":326,"line":17431},[324,68465,52866],{"class":867},[324,68467,52333],{"class":52022},[324,68469,54208],{"class":734},[324,68471,913],{"class":867},[324,68473,64897],{"class":738},[324,68475,52029],{"class":867},[324,68477,68478,68480,68482,68484,68486,68488],{"class":326,"line":17442},[324,68479,52063],{"class":867},[324,68481,52333],{"class":52022},[324,68483,54208],{"class":734},[324,68485,913],{"class":867},[324,68487,64912],{"class":738},[324,68489,52029],{"class":867},[324,68491,68492,68494,68496,68498,68500],{"class":326,"line":17465},[324,68493,55956],{"class":867},[324,68495,35],{"class":52022},[324,68497,64923],{"class":867},[324,68499,35],{"class":52022},[324,68501,52029],{"class":867},[324,68503,68504,68506,68508],{"class":326,"line":17487},[324,68505,55956],{"class":867},[324,68507,1871],{"class":52022},[324,68509,52029],{"class":867},[324,68511,68512,68514,68516,68518,68520,68522,68524,68526,68528,68530,68532,68534,68536,68539,68541,68543,68545,68547],{"class":326,"line":17492},[324,68513,56024],{"class":867},[324,68515,195],{"class":52022},[324,68517,61774],{"class":867},[324,68519,25],{"class":52022},[324,68521,54208],{"class":734},[324,68523,913],{"class":867},[324,68525,60428],{"class":738},[324,68527,61779],{"class":734},[324,68529,913],{"class":867},[324,68531,64958],{"class":738},[324,68533,54673],{"class":734},[324,68535,913],{"class":867},[324,68537,68538],{"class":738},"\"0\"",[324,68540,64961],{"class":867},[324,68542,25],{"class":52022},[324,68544,56036],{"class":867},[324,68546,195],{"class":52022},[324,68548,52029],{"class":867},[324,68550,68551,68553,68555,68557,68559,68561,68563,68565,68567,68569,68571,68573,68575,68577,68579],{"class":326,"line":17498},[324,68552,56024],{"class":867},[324,68554,195],{"class":52022},[324,68556,61774],{"class":867},[324,68558,25],{"class":52022},[324,68560,61779],{"class":734},[324,68562,913],{"class":867},[324,68564,64958],{"class":738},[324,68566,54673],{"class":734},[324,68568,913],{"class":867},[324,68570,4407],{"class":738},[324,68572,64988],{"class":867},[324,68574,25],{"class":52022},[324,68576,56036],{"class":867},[324,68578,195],{"class":52022},[324,68580,52029],{"class":867},[324,68582,68583,68585,68587,68589,68591,68593,68595,68597,68599,68601,68603,68605,68607,68609,68611],{"class":326,"line":17512},[324,68584,56024],{"class":867},[324,68586,195],{"class":52022},[324,68588,61774],{"class":867},[324,68590,25],{"class":52022},[324,68592,61779],{"class":734},[324,68594,913],{"class":867},[324,68596,64958],{"class":738},[324,68598,54673],{"class":734},[324,68600,913],{"class":867},[324,68602,4430],{"class":738},[324,68604,65015],{"class":867},[324,68606,25],{"class":52022},[324,68608,56036],{"class":867},[324,68610,195],{"class":52022},[324,68612,52029],{"class":867},[324,68614,68615,68617,68619,68621,68623,68625,68627,68629,68631,68633,68635,68637,68639,68641,68643],{"class":326,"line":17525},[324,68616,56024],{"class":867},[324,68618,195],{"class":52022},[324,68620,61774],{"class":867},[324,68622,25],{"class":52022},[324,68624,61779],{"class":734},[324,68626,913],{"class":867},[324,68628,64958],{"class":738},[324,68630,54673],{"class":734},[324,68632,913],{"class":867},[324,68634,4443],{"class":738},[324,68636,65042],{"class":867},[324,68638,25],{"class":52022},[324,68640,56036],{"class":867},[324,68642,195],{"class":52022},[324,68644,52029],{"class":867},[324,68646,68647,68649,68651,68653,68655,68657,68659,68661,68663,68665,68667,68669,68671,68673,68675],{"class":326,"line":17530},[324,68648,56024],{"class":867},[324,68650,195],{"class":52022},[324,68652,61774],{"class":867},[324,68654,25],{"class":52022},[324,68656,61779],{"class":734},[324,68658,913],{"class":867},[324,68660,64958],{"class":738},[324,68662,54673],{"class":734},[324,68664,913],{"class":867},[324,68666,4456],{"class":738},[324,68668,65069],{"class":867},[324,68670,25],{"class":52022},[324,68672,56036],{"class":867},[324,68674,195],{"class":52022},[324,68676,52029],{"class":867},[324,68678,68679,68681,68683],{"class":326,"line":17544},[324,68680,56129],{"class":867},[324,68682,1871],{"class":52022},[324,68684,52029],{"class":867},[324,68686,68687,68689,68691],{"class":326,"line":17549},[324,68688,52498],{"class":867},[324,68690,52333],{"class":52022},[324,68692,52029],{"class":867},[324,68694,68695,68697,68699,68701,68703,68705],{"class":326,"line":17555},[324,68696,52063],{"class":867},[324,68698,52333],{"class":52022},[324,68700,54208],{"class":734},[324,68702,913],{"class":867},[324,68704,65106],{"class":738},[324,68706,52029],{"class":867},[324,68708,68709,68711,68713,68715,68717,68719,68721,68723,68725,68727,68729,68731,68733,68735,68737,68739],{"class":326,"line":17560},[324,68710,55956],{"class":867},[324,68712,52333],{"class":52022},[324,68714,54208],{"class":734},[324,68716,913],{"class":867},[324,68718,65121],{"class":738},[324,68720,61774],{"class":867},[324,68722,48],{"class":52022},[324,68724,55961],{"class":734},[324,68726,913],{"class":867},[324,68728,65132],{"class":738},[324,68730,55969],{"class":734},[324,68732,913],{"class":867},[324,68734,8381],{"class":738},[324,68736,65141],{"class":867},[324,68738,52333],{"class":52022},[324,68740,52029],{"class":867},[324,68742,68743,68745,68747,68749,68751,68753,68755,68757,68759,68761,68763,68765,68767,68769,68771,68773],{"class":326,"line":17574},[324,68744,55956],{"class":867},[324,68746,52333],{"class":52022},[324,68748,54208],{"class":734},[324,68750,913],{"class":867},[324,68752,63345],{"class":738},[324,68754,61774],{"class":867},[324,68756,48],{"class":52022},[324,68758,55961],{"class":734},[324,68760,913],{"class":867},[324,68762,65168],{"class":738},[324,68764,55969],{"class":734},[324,68766,913],{"class":867},[324,68768,8381],{"class":738},[324,68770,65141],{"class":867},[324,68772,52333],{"class":52022},[324,68774,52029],{"class":867},[324,68776,68777,68779,68781,68783,68785,68787,68789,68791,68793,68795,68797,68799,68801,68803,68805,68807],{"class":326,"line":17579},[324,68778,55956],{"class":867},[324,68780,52333],{"class":52022},[324,68782,54208],{"class":734},[324,68784,913],{"class":867},[324,68786,63345],{"class":738},[324,68788,61774],{"class":867},[324,68790,48],{"class":52022},[324,68792,55961],{"class":734},[324,68794,913],{"class":867},[324,68796,65203],{"class":738},[324,68798,55969],{"class":734},[324,68800,913],{"class":867},[324,68802,8381],{"class":738},[324,68804,65141],{"class":867},[324,68806,52333],{"class":52022},[324,68808,52029],{"class":867},[324,68810,68811,68813,68815,68817,68819,68821,68823,68825,68827,68829,68831,68833,68835,68837,68839,68841],{"class":326,"line":17584},[324,68812,55956],{"class":867},[324,68814,52333],{"class":52022},[324,68816,54208],{"class":734},[324,68818,913],{"class":867},[324,68820,63345],{"class":738},[324,68822,61774],{"class":867},[324,68824,48],{"class":52022},[324,68826,55961],{"class":734},[324,68828,913],{"class":867},[324,68830,65238],{"class":738},[324,68832,55969],{"class":734},[324,68834,913],{"class":867},[324,68836,8381],{"class":738},[324,68838,65141],{"class":867},[324,68840,52333],{"class":52022},[324,68842,52029],{"class":867},[324,68844,68845,68847,68849,68851,68853,68855,68857,68859,68861,68863,68865,68867,68869,68871,68873,68875],{"class":326,"line":17598},[324,68846,55956],{"class":867},[324,68848,52333],{"class":52022},[324,68850,54208],{"class":734},[324,68852,913],{"class":867},[324,68854,63345],{"class":738},[324,68856,61774],{"class":867},[324,68858,48],{"class":52022},[324,68860,55961],{"class":734},[324,68862,913],{"class":867},[324,68864,65273],{"class":738},[324,68866,55969],{"class":734},[324,68868,913],{"class":867},[324,68870,8381],{"class":738},[324,68872,65141],{"class":867},[324,68874,52333],{"class":52022},[324,68876,52029],{"class":867},[324,68878,68879,68881,68883],{"class":326,"line":17610},[324,68880,52498],{"class":867},[324,68882,52333],{"class":52022},[324,68884,52029],{"class":867},[324,68886,68887,68889,68891],{"class":326,"line":17615},[324,68888,53139],{"class":867},[324,68890,52333],{"class":52022},[324,68892,52029],{"class":867},[324,68894,68895,68897,68899],{"class":326,"line":17628},[324,68896,52866],{"class":867},[324,68898,52535],{"class":52022},[324,68900,52029],{"class":867},[324,68902,68903],{"class":326,"line":17633},[324,68904,68905],{"class":772},"    \u002F\u002F 采取事件委托的形式，tab栏切换\n",[324,68907,68908],{"class":326,"line":17638},[324,68909,68910],{"class":772},"    \u002F\u002F 1.获取ul父元素，因为ul只有一个\n",[324,68912,68913,68915,68917,68919,68921,68923,68925,68928],{"class":326,"line":17643},[324,68914,11950],{"class":863},[324,68916,62014],{"class":916},[324,68918,14293],{"class":863},[324,68920,55118],{"class":867},[324,68922,55121],{"class":734},[324,68924,868],{"class":867},[324,68926,68927],{"class":738},"'.tab-nav ul'",[324,68929,874],{"class":867},[324,68931,68932],{"class":326,"line":17656},[324,68933,68934],{"class":772},"    \u002F\u002F 2.添加事件\n",[324,68936,68937,68939,68941,68943,68945,68947,68949,68951,68953],{"class":326,"line":17661},[324,68938,67676],{"class":867},[324,68940,58535],{"class":734},[324,68942,868],{"class":867},[324,68944,58540],{"class":738},[324,68946,13164],{"class":867},[324,68948,55171],{"class":863},[324,68950,2389],{"class":867},[324,68952,941],{"class":5945},[324,68954,13171],{"class":867},[324,68956,68957,68959,68961],{"class":326,"line":33355},[324,68958,58966],{"class":867},[324,68960,67732],{"class":734},[324,68962,67735],{"class":867},[324,68964,68965],{"class":326,"line":33361},[324,68966,68967],{"class":772},"      \u002F\u002Fe.targer是我们点击的对象\n",[324,68969,68970,68972,68974,68976,68979],{"class":326,"line":33367},[324,68971,55202],{"class":863},[324,68973,67756],{"class":867},[324,68975,55208],{"class":863},[324,68977,68978],{"class":738}," 'A'",[324,68980,13171],{"class":867},[324,68982,68983,68985,68987,68989,68992,68994,68996,68998,69000],{"class":326,"line":33373},[324,68984,52647],{"class":867},[324,68986,55121],{"class":734},[324,68988,868],{"class":867},[324,68990,68991],{"class":738},"'.active'",[324,68993,57725],{"class":867},[324,68995,57728],{"class":734},[324,68997,868],{"class":867},[324,68999,65436],{"class":738},[324,69001,874],{"class":867},[324,69003,69004,69007,69009,69011,69013],{"class":326,"line":33379},[324,69005,69006],{"class":867},"        e.target.classList.",[324,69008,6063],{"class":734},[324,69010,868],{"class":867},[324,69012,65436],{"class":738},[324,69014,874],{"class":867},[324,69016,69017],{"class":326,"line":33390},[324,69018,488],{"emptyLinePlaceholder":487},[324,69020,69021],{"class":326,"line":33396},[324,69022,69023],{"class":772},"        \u002F\u002F 下面大盒子模块\n",[324,69025,69026],{"class":326,"line":33416},[324,69027,69028],{"class":772},"        \u002F\u002F console.log(e.target.dataset.id)\n",[324,69030,69031,69033,69035,69037,69039],{"class":326,"line":33422},[324,69032,61992],{"class":863},[324,69034,3761],{"class":916},[324,69036,14293],{"class":863},[324,69038,46288],{"class":863},[324,69040,69041],{"class":867},"e.target.dataset.id\n",[324,69043,69044,69046,69048,69050,69052,69054,69056,69058,69060],{"class":326,"line":33433},[324,69045,52647],{"class":867},[324,69047,55121],{"class":734},[324,69049,868],{"class":867},[324,69051,65484],{"class":738},[324,69053,57725],{"class":867},[324,69055,57728],{"class":734},[324,69057,868],{"class":867},[324,69059,65436],{"class":738},[324,69061,874],{"class":867},[324,69063,69064,69066,69068,69070,69072,69074,69076,69078,69080,69082,69084,69086,69088],{"class":326,"line":33439},[324,69065,52647],{"class":867},[324,69067,55121],{"class":734},[324,69069,868],{"class":867},[324,69071,65510],{"class":738},[324,69073,1305],{"class":867},[324,69075,46288],{"class":863},[324,69077,25842],{"class":916},[324,69079,57754],{"class":738},[324,69081,57725],{"class":867},[324,69083,6063],{"class":734},[324,69085,868],{"class":867},[324,69087,65436],{"class":738},[324,69089,874],{"class":867},[324,69091,69092],{"class":326,"line":33445},[324,69093,488],{"emptyLinePlaceholder":487},[324,69095,69096],{"class":326,"line":33451},[324,69097,53120],{"class":867},[324,69099,69100],{"class":326,"line":33457},[324,69101,34183],{"class":867},[324,69103,69104,69106,69108],{"class":326,"line":33463},[324,69105,53139],{"class":867},[324,69107,52535],{"class":52022},[324,69109,52029],{"class":867},[324,69111,69112,69114,69116],{"class":326,"line":33469},[324,69113,52507],{"class":867},[324,69115,52522],{"class":52022},[324,69117,52029],{"class":867},[324,69119,69120],{"class":326,"line":33475},[324,69121,488],{"emptyLinePlaceholder":487},[324,69123,69124,69126,69128],{"class":326,"line":33495},[324,69125,52507],{"class":867},[324,69127,51357],{"class":52022},[324,69129,52029],{"class":867},[35,69131,69133],{"id":69132},"_333-页面加载事件","3.3.3 页面加载事件",[192,69135,69136],{},[195,69137,69138],{},"load",[19,69140,69141],{},[48,69142],{"alt":50,"src":69143},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-140.png",[19,69145,69146],{},"window代表整个窗口，比document还要大",[19,69148,69149],{},"并不一定非得window才可以用，其他的DOM对象也可以用",[19,69151,69152],{},"img.addEventListener('load', function () {",[19,69154,69155],{},"\u002F\u002F 等待图片加载完毕，再去执行里面的代码",[19,69157,53186],{},[192,69159,69160],{"start":203},[195,69161,69162],{},"DOMContentLoaded",[19,69164,69165],{},[48,69166],{"alt":50,"src":69167},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-141.png",[19,69169,69170],{},"这个主要是给html标签，给的是文档进行处理的，所以不是对整个页面，不是window,是document",[35,69172,69174],{"id":69173},"_334-元素滚动事件","3.3.4 元素滚动事件",[19,69176,69177],{},[48,69178],{"alt":50,"src":69179},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-142.png",[19,69181,69182],{},[48,69183],{"alt":50,"src":69184},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-143.png",[19,69186,69187],{},[48,69188],{"alt":50,"src":69189},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-144.png",[19,69191,69192],{},"scrollTop和scrollLeft都是属性，他不是方法，所以后面不需要加括号",[19,69194,69195],{},"获得的是数字型数据，不带单位",[19,69197,69198],{},"scrollTop可读写，既可以获得数据，也可以进行赋值操作",[19,69200,69201],{},"body作为document的属性可以直接通过document.boby进行获取，但是html不可以这样获取",[19,69203,69204],{},"它是通过document.documentElement来获取",[19,69206,69207],{},[48,69208],{"alt":50,"src":69209},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-145.png",[19,69211,69212],{},"让页面滚动，scrollTo()是方法，上边那个scrollTop是属性值",[35,69214,69216],{"id":69215},"_335-页面缩放事件","3.3.5 页面缩放事件",[19,69218,69219],{},[48,69220],{"alt":50,"src":69221},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-146.png",[19,69223,69224],{},[48,69225],{"alt":50,"src":69226},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-147.png",[35,69228,69230],{"id":69229},"_336-元素尺寸位置","3.3.6 元素尺寸位置",[19,69232,69233],{},[48,69234],{"alt":50,"src":69235},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-148.png",[19,69237,69238],{},"offsetWidth和offsetHeight相比于clientWidth和clientHeight来说多了包含边框",[19,69240,69241],{},[48,69242],{"alt":50,"src":69243},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-149.png",[19,69245,69246],{},"scrollLeft和scrollTop与滚动有关系，是读写的，而offsetLeft和offsetTop与盒子的位置有关系，只可以读取，不可以进行赋值操作",[19,69248,69249],{},"offsetTop和offsetLeft 得到位置以带有定位的父级为准，如果都没有则以 文档左上角为准",[19,69251,69252],{},"pageX和pageY可以获取鼠标在页面中的坐标，要搭配事件对象使用",[19,69254,69255],{},"大盒子中套了一个小盒子，大盒子为相对定位，小盒子为绝对定位，则我对小盒子使用offsetTop和offsetLeft获取的位置是从小盒子的外边框到大盒子的内边框的距离，如果我们想获得小盒子在浏览器页面的位置可以使用 getBoundingClientRect() 这个函数不会受定位盒子的影响",[19,69257,69258],{},"getBoundingClientRect()这个方法得到的是一个对象，包含left,top等属性",[19,69260,69261],{},[48,69262],{"alt":50,"src":69263},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-150.png",[19,69265,69266],{},"getBoundingClientRect()是相对于浏览器可视页面的距离，滚动条稍微向下滚动一些，getBoundingClientRect().top的值就不准了，如果想得到鼠标在盒子中的y方向的距离，此时需要：e.pageY-box.getBoundingClientRect().top-document.documentElement.scrollTop",[19,69268,69269],{},"多减一下滚动的距离(HTML文档在window窗口内滚动的距离)，就可以得到鼠标在box盒子中相对父盒子的距离",[19,69271,69272],{},"浏览器页面由于基本不会进行左右拖动，可以不用考虑这方面的因素，鼠标相对于浏览器可视区域左侧的距离为：",[19,69274,69275],{},"e.pageX-box.getBoundingClientRect()",[35,69277,69279],{"id":69278},"_337-获取元素位置的另一种方法","3.3.7 获取元素位置的另一种方法",[19,69281,69282],{},[48,69283],{"alt":50,"src":69284},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-151.png",[19,69286,69287],{},"这个是相对于视口来说的，它是个方法，不是属性值",[35,69289,69291],{"id":69290},"_338-总结","3.3.8 总结",[19,69293,69294],{},[48,69295],{"alt":50,"src":69296},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-152.png",[19,69298,69299],{},"clientWidth\u002FclientHeight和offsetWidth\u002FoffsetHeight都是可读的，不能进行赋值操作",[19,69301,69302],{},"修改盒子的宽高只能通过width和height来实现",[35,69304,69306],{"id":69305},"_339-页面滚动丝滑css写法","3.3.9 页面滚动丝滑css写法",[316,69308,69310],{"className":51355,"code":69309,"language":51357,"meta":50,"style":50},"\u002F* 页面滑动 *\u002F\nhtml {\n  \u002F* 让滚动条丝滑的滚动 *\u002F\n  scroll-behavior: smooth;\n}\n",[269,69311,69312,69317,69322,69327,69332],{"__ignoreMap":50},[324,69313,69314],{"class":326,"line":327},[324,69315,69316],{"class":867},"\u002F* 页面滑动 *\u002F\n",[324,69318,69319],{"class":326,"line":203},[324,69320,69321],{"class":867},"html {\n",[324,69323,69324],{"class":326,"line":338},[324,69325,69326],{"class":867},"  \u002F* 让滚动条丝滑的滚动 *\u002F\n",[324,69328,69329],{"class":326,"line":344},[324,69330,69331],{"class":867},"  scroll-behavior: smooth;\n",[324,69333,69334],{"class":326,"line":484},[324,69335,2296],{"class":867},[19,69337,69338],{},"默认是auto",[35,69340,69342],{"id":69341},"_3310-日期对象","3.3.10 日期对象",[151,69344,69346],{"id":69345},"_33101-实例化","3.3.10.1 实例化",[19,69348,69349],{},[48,69350],{"alt":50,"src":69351},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-153.png",[151,69353,69355],{"id":69354},"_33102-时期对象方法","3.3.10.2 时期对象方法",[19,69357,69358],{},[48,69359],{"alt":50,"src":69360},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-154.png",[19,69362,69363],{},"月份+1",[19,69365,69366],{},"老外认为第一天为0，星期天",[19,69368,69369],{},"方法使用的时候必须要跟括号",[19,69371,69372],{},"快速获得日期",[19,69374,69375],{},"\u002F\u002F 得到年月日",[19,69377,69378],{},"\u002F\u002F div.innerHTML = date.toLocaleDateString()",[19,69380,69381],{},"\u002F\u002F 得到当地日期",[19,69383,69384],{},"\u002F\u002F div.innerHTML = date.toLocaleString()",[19,69386,69387],{},"\u002F\u002F 得到当地时间",[19,69389,69390],{},"\u002F\u002F div.innerHTML = date.toLocaleTimeString()",[19,69392,69393],{},"注意再使用定时器时，在定时器外也写一个获得时间，不然刷新浏览器刚开始由于定时器要间隔一段时间采取调用函数，会导致一开始不显示",[19,69395,69396],{},"如果不考虑快速的方式，要设置自己的样式的话，自己封装一个函数！！！",[52535,69398,69399],{},"\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",[19,69401,69402],{},"学会去封装函数！",[151,69404,69406],{"id":69405},"_33103-时间戳","3.3.10.3 时间戳",[19,69408,69409],{},[48,69410],{"alt":50,"src":69411},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-155.png",[19,69413,69414],{},[48,69415],{"alt":50,"src":69416},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-156.png",[19,69418,69419],{},"三种方法记住一个就可以",[35,69421,69423],{"id":69422},"_3311-节点操作","3.3.11 节点操作",[151,69425,69427],{"id":69426},"_33111-dom节点","3.3.11.1 DOM节点",[19,69429,69430],{},[48,69431],{"alt":50,"src":69432},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-157.png",[19,69434,69435],{},"我们主要用的就是元素节点，因为对元素节点操作就可以实现对标签内容样式的修改，就不需要使用属性节点和文本节点来操作了，后边的增删改查都是对元素节点来进行操作的",[151,69437,69439],{"id":69438},"_33112-查找节点","3.3.11.2 查找节点",[19,69441,69442],{},"前边的document.querySelector()是获取的元素",[19,69444,69445],{},"这里是通过关系来获取！！！，就是正常通过document.querySelector()获取元素，这个元素是个对象，此时他的父亲儿子啥的就不用再使用document.querySelector()来获取了，直接通过关系来获取",[19,69447,69448],{},[48,69449],{"alt":50,"src":69450},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-158.png",[192,69452,69453],{},[195,69454,69455],{},"父节点",[19,69457,69458],{},[48,69459],{"alt":50,"src":69460},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-159.png",[192,69462,69463],{"start":203},[195,69464,69465],{},"子节点",[19,69467,69468],{},[48,69469],{"alt":50,"src":69470},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-160.png",[19,69472,69473],{},"如果使用childNodes来获得子节点，还包括文本节点、注释节点等，但是这些对我们来说没啥用，所以children来获取子节点，他就是个标签",[19,69475,69476],{},"children获得的是伪数组，是亲儿子",[192,69478,69479],{"start":338},[195,69480,69481],{},"兄弟节点",[19,69483,69484],{},[48,69485],{"alt":50,"src":69486},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-161.png",[151,69488,69490],{"id":69489},"_33113-增加节点","3.3.11.3 增加节点",[19,69492,69493],{},[48,69494],{"alt":50,"src":69495},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-162.png",[19,69497,69498],{},"创建好之后给它通过innerHTML添加内容是不显示的内容的，因为只是创建了节点，还不知道节点在哪里",[19,69500,69501],{},[48,69502],{"alt":50,"src":69503},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-163.png",[19,69505,69506],{},"在主体板块制作时，就是将各个信息写成数组对象的形式，然后利用循环来添加和追加节点，并将信息使用innerHTML来实现效果输出，因为innerHTML可以实现对标签的解析",[19,69508,69509],{},"下面是写法的部分展示，就按照下边的格式来写",[19,69511,69512],{},"例：",[52535,69514,69515],{},"\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",[19,69517,69518],{},[48,69519],{"alt":50,"src":69520},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-164.png",[19,69522,69523],{},"false只克隆标签，里边的内容不会克隆过来",[316,69525,69527],{"className":51355,"code":69526,"language":51357,"meta":50,"style":50},"    ul.appendChild(ul.children[1].cloneNode(true))\n",[269,69528,69529],{"__ignoreMap":50},[324,69530,69531],{"class":326,"line":327},[324,69532,69526],{"class":867},[151,69534,69536],{"id":69535},"_33114-删除节点","3.3.11.4 删除节点",[19,69538,69539],{},[48,69540],{"alt":50,"src":69541},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-165.png",[19,69543,69544],{},"父亲删儿子",[19,69546,69547],{},"removeChild是真删除节点了，直接从HTML中删除了；而display: none;只是隐藏起来了盒子，而且还不占位置",[35,69549,69551],{"id":69550},"_3312-m端事件","3.3.12 M端事件",[19,69553,69554],{},"M端就是移动端",[19,69556,69557],{},[48,69558],{"alt":50,"src":69559},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-166.png",[35,69561,69563],{"id":69562},"_3313-插件","3.3.13 插件",[19,69565,69566],{},"要熟悉官网！！！",[19,69568,69569],{},[25,69570,69571],{"href":69571,"rel":69572},"https:\u002F\u002Fwww.swiper.com.cn\u002F",[29],[19,69574,69575],{},[25,69576,69577],{"href":69577,"rel":69578},"https:\u002F\u002Fwww.swiper.com.cn\u002Fdemo\u002Findex.html",[29],[35,69580,69582],{"id":69581},"_3314-学生信息表","3.3.14 学生信息表",[192,69584,69585,69588,69591,69594,69597,69600,69603,69606],{},[195,69586,69587],{},"对于表单元素，添加事件监听的时候，事件类型应当为submit，即给form标签添加事件监听，事件类型为submit",[195,69589,69590],{},"提交表单的时候不能跳转刷新，应当使用阻止跳转 e.preventDefault() 点任何地方都不可以跳转",[195,69592,69593],{},"在提交信息之后内容填写的内容应当清空，清空的操作(this就是指的form,因为是对它添加的事件监听)：this.reset()",[195,69595,69596],{},"用好表单元素自带的属性，value,name等",[195,69598,69599],{},"删除操作的时不要删DOM节点，删除的是数组中的数据，要使用的是自定义属性，让它自己生成，循环的时候加上自定义属性",[195,69601,69602],{},"不要忘记事件对象",[195,69604,69605],{},"selecte选择标签，里边的option的value一定要写，不然通过.value的形式获取不到值",[195,69607,69608],{},"表单元素不要具备记录标签，就是过段事件点击填写，不显示上次输入的内容：给form的属性autocomplete设为off，这个属性两个值，on是记录，off是不记录",[19,69610,69611],{},"结构：",[316,69613,69615],{"className":51355,"code":69614,"language":51357,"meta":50,"style":50},"\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",[269,69616,69617,69627,69641,69645,69653,69667,69687,69708,69721,69745,69753,69757,69765,69778,69799,69827,69855,69860,69882,69902,69921,69929,69957,69979,69999,70019,70039,70059,70079,70087,70107,70115,70119,70132,70140,70148,70156,70169,70182,70195,70208,70221,70234,70247,70255,70263,70271,70276,70281,70286,70291,70296,70301,70306,70311,70316,70321,70326,70331,70336,70344,70352,70360,70364,70384,70403,70423,70443,70463,70483,70487,70492,70512,70517,70527,70532,70537,70557,70579,70584,70594,70598,70602,70607,70612,70641,70655,70670,70674,70678,70682,70687,70698,70711,70716,70721,70726,70731,70736,70740,70745,70750,70759,70764,70769,70781,70786,70793,70797,70802,70812,70817,70827,70832,70860,70881,70891,70911,70929,70946,70963,70980,70997,71001,71011,71016,71021,71026,71037,71041,71045,71049,71054,71059,71080,71092,71097,71102,71107,71121,71126,71133,71137,71141,71149,71153,71161,71165],{"__ignoreMap":50},[324,69618,69619,69621,69623,69625],{"class":326,"line":327},[324,69620,52019],{"class":867},[324,69622,52023],{"class":52022},[324,69624,52026],{"class":734},[324,69626,52029],{"class":867},[324,69628,69629,69631,69633,69635,69637,69639],{"class":326,"line":203},[324,69630,1774],{"class":867},[324,69632,51357],{"class":52022},[324,69634,52038],{"class":734},[324,69636,913],{"class":867},[324,69638,52043],{"class":738},[324,69640,52029],{"class":867},[324,69642,69643],{"class":326,"line":338},[324,69644,488],{"emptyLinePlaceholder":487},[324,69646,69647,69649,69651],{"class":326,"line":344},[324,69648,1774],{"class":867},[324,69650,52056],{"class":52022},[324,69652,52029],{"class":867},[324,69654,69655,69657,69659,69661,69663,69665],{"class":326,"line":484},[324,69656,52866],{"class":867},[324,69658,52066],{"class":52022},[324,69660,52069],{"class":734},[324,69662,913],{"class":867},[324,69664,52074],{"class":738},[324,69666,59849],{"class":867},[324,69668,69669,69671,69673,69675,69677,69679,69681,69683,69685],{"class":326,"line":491},[324,69670,52866],{"class":867},[324,69672,52066],{"class":52022},[324,69674,15649],{"class":734},[324,69676,913],{"class":867},[324,69678,52113],{"class":738},[324,69680,52093],{"class":734},[324,69682,913],{"class":867},[324,69684,52120],{"class":738},[324,69686,59849],{"class":867},[324,69688,69689,69691,69693,69695,69697,69699,69701,69703,69706],{"class":326,"line":496},[324,69690,52866],{"class":867},[324,69692,52066],{"class":52022},[324,69694,52085],{"class":734},[324,69696,913],{"class":867},[324,69698,52090],{"class":738},[324,69700,52093],{"class":734},[324,69702,913],{"class":867},[324,69704,69705],{"class":738},"\"ie=edge\"",[324,69707,59849],{"class":867},[324,69709,69710,69712,69714,69717,69719],{"class":326,"line":502},[324,69711,52866],{"class":867},[324,69713,52129],{"class":52022},[324,69715,69716],{"class":867},">学生信息管理\u003C\u002F",[324,69718,52129],{"class":52022},[324,69720,52029],{"class":867},[324,69722,69723,69725,69728,69731,69733,69736,69738,69740,69743],{"class":326,"line":508},[324,69724,52866],{"class":867},[324,69726,69727],{"class":52022},"link",[324,69729,69730],{"class":734}," rel",[324,69732,913],{"class":867},[324,69734,69735],{"class":738},"\"stylesheet\"",[324,69737,61779],{"class":734},[324,69739,913],{"class":867},[324,69741,69742],{"class":738},"\"css\u002Findex.css\"",[324,69744,59849],{"class":867},[324,69746,69747,69749,69751],{"class":326,"line":514},[324,69748,52507],{"class":867},[324,69750,52056],{"class":52022},[324,69752,52029],{"class":867},[324,69754,69755],{"class":326,"line":2343},[324,69756,488],{"emptyLinePlaceholder":487},[324,69758,69759,69761,69763],{"class":326,"line":2348},[324,69760,1774],{"class":867},[324,69762,52522],{"class":52022},[324,69764,52029],{"class":867},[324,69766,69767,69769,69771,69774,69776],{"class":326,"line":2354},[324,69768,52866],{"class":867},[324,69770,10],{"class":52022},[324,69772,69773],{"class":867},">新增学员\u003C\u002F",[324,69775,10],{"class":52022},[324,69777,52029],{"class":867},[324,69779,69780,69782,69784,69786,69788,69790,69793,69795,69797],{"class":326,"line":2359},[324,69781,52866],{"class":867},[324,69783,67347],{"class":52022},[324,69785,54208],{"class":734},[324,69787,913],{"class":867},[324,69789,63386],{"class":738},[324,69791,69792],{"class":734}," autocomplete",[324,69794,913],{"class":867},[324,69796,32498],{"class":738},[324,69798,52029],{"class":867},[324,69800,69801,69804,69806,69808,69810,69812,69814,69816,69819,69821,69823,69825],{"class":326,"line":2373},[324,69802,69803],{"class":867},"    姓名：\u003C",[324,69805,54543],{"class":52022},[324,69807,54546],{"class":734},[324,69809,913],{"class":867},[324,69811,63421],{"class":738},[324,69813,54208],{"class":734},[324,69815,913],{"class":867},[324,69817,69818],{"class":738},"\"uname\"",[324,69820,15649],{"class":734},[324,69822,913],{"class":867},[324,69824,69818],{"class":738},[324,69826,59849],{"class":867},[324,69828,69829,69832,69834,69836,69838,69840,69842,69844,69847,69849,69851,69853],{"class":326,"line":2378},[324,69830,69831],{"class":867},"    年龄：\u003C",[324,69833,54543],{"class":52022},[324,69835,54546],{"class":734},[324,69837,913],{"class":867},[324,69839,63421],{"class":738},[324,69841,54208],{"class":734},[324,69843,913],{"class":867},[324,69845,69846],{"class":738},"\"age\"",[324,69848,15649],{"class":734},[324,69850,913],{"class":867},[324,69852,69846],{"class":738},[324,69854,59849],{"class":867},[324,69856,69857],{"class":326,"line":2384},[324,69858,69859],{"class":867},"    性别:\n",[324,69861,69862,69864,69867,69869,69871,69874,69876,69878,69880],{"class":326,"line":2405},[324,69863,52063],{"class":867},[324,69865,69866],{"class":52022},"select",[324,69868,15649],{"class":734},[324,69870,913],{"class":867},[324,69872,69873],{"class":738},"\"gender\"",[324,69875,54208],{"class":734},[324,69877,913],{"class":867},[324,69879,69873],{"class":738},[324,69881,52029],{"class":867},[324,69883,69884,69886,69889,69891,69893,69895,69898,69900],{"class":326,"line":2410},[324,69885,55956],{"class":867},[324,69887,69888],{"class":52022},"option",[324,69890,67373],{"class":734},[324,69892,913],{"class":867},[324,69894,10690],{"class":738},[324,69896,69897],{"class":867},">男\u003C\u002F",[324,69899,69888],{"class":52022},[324,69901,52029],{"class":867},[324,69903,69904,69906,69908,69910,69912,69914,69917,69919],{"class":326,"line":2424},[324,69905,55956],{"class":867},[324,69907,69888],{"class":52022},[324,69909,67373],{"class":734},[324,69911,913],{"class":867},[324,69913,10759],{"class":738},[324,69915,69916],{"class":867},">女\u003C\u002F",[324,69918,69888],{"class":52022},[324,69920,52029],{"class":867},[324,69922,69923,69925,69927],{"class":326,"line":2429},[324,69924,52498],{"class":867},[324,69926,69866],{"class":52022},[324,69928,52029],{"class":867},[324,69930,69931,69934,69936,69938,69940,69942,69944,69946,69949,69951,69953,69955],{"class":326,"line":2458},[324,69932,69933],{"class":867},"    薪资：\u003C",[324,69935,54543],{"class":52022},[324,69937,54546],{"class":734},[324,69939,913],{"class":867},[324,69941,63421],{"class":738},[324,69943,54208],{"class":734},[324,69945,913],{"class":867},[324,69947,69948],{"class":738},"\"salary\"",[324,69950,15649],{"class":734},[324,69952,913],{"class":867},[324,69954,69948],{"class":738},[324,69956,59849],{"class":867},[324,69958,69959,69962,69964,69966,69968,69971,69973,69975,69977],{"class":326,"line":2463},[324,69960,69961],{"class":867},"    就业城市：\u003C",[324,69963,69866],{"class":52022},[324,69965,15649],{"class":734},[324,69967,913],{"class":867},[324,69969,69970],{"class":738},"\"city\"",[324,69972,54208],{"class":734},[324,69974,913],{"class":867},[324,69976,69970],{"class":738},[324,69978,52029],{"class":867},[324,69980,69981,69983,69985,69987,69989,69992,69995,69997],{"class":326,"line":2480},[324,69982,55956],{"class":867},[324,69984,69888],{"class":52022},[324,69986,67373],{"class":734},[324,69988,913],{"class":867},[324,69990,69991],{"class":738},"\"北京\"",[324,69993,69994],{"class":867},">北京\u003C\u002F",[324,69996,69888],{"class":52022},[324,69998,52029],{"class":867},[324,70000,70001,70003,70005,70007,70009,70012,70015,70017],{"class":326,"line":2485},[324,70002,55956],{"class":867},[324,70004,69888],{"class":52022},[324,70006,67373],{"class":734},[324,70008,913],{"class":867},[324,70010,70011],{"class":738},"\"上海\"",[324,70013,70014],{"class":867},">上海\u003C\u002F",[324,70016,69888],{"class":52022},[324,70018,52029],{"class":867},[324,70020,70021,70023,70025,70027,70029,70032,70035,70037],{"class":326,"line":2490},[324,70022,55956],{"class":867},[324,70024,69888],{"class":52022},[324,70026,67373],{"class":734},[324,70028,913],{"class":867},[324,70030,70031],{"class":738},"\"广州\"",[324,70033,70034],{"class":867},">广州\u003C\u002F",[324,70036,69888],{"class":52022},[324,70038,52029],{"class":867},[324,70040,70041,70043,70045,70047,70049,70052,70055,70057],{"class":326,"line":2495},[324,70042,55956],{"class":867},[324,70044,69888],{"class":52022},[324,70046,67373],{"class":734},[324,70048,913],{"class":867},[324,70050,70051],{"class":738},"\"深圳\"",[324,70053,70054],{"class":867},">深圳\u003C\u002F",[324,70056,69888],{"class":52022},[324,70058,52029],{"class":867},[324,70060,70061,70063,70065,70067,70069,70072,70075,70077],{"class":326,"line":2509},[324,70062,55956],{"class":867},[324,70064,69888],{"class":52022},[324,70066,67373],{"class":734},[324,70068,913],{"class":867},[324,70070,70071],{"class":738},"\"曹县\"",[324,70073,70074],{"class":867},">曹县\u003C\u002F",[324,70076,69888],{"class":52022},[324,70078,52029],{"class":867},[324,70080,70081,70083,70085],{"class":326,"line":2514},[324,70082,52498],{"class":867},[324,70084,69866],{"class":52022},[324,70086,52029],{"class":867},[324,70088,70089,70091,70093,70095,70097,70100,70103,70105],{"class":326,"line":3306},[324,70090,52063],{"class":867},[324,70092,54609],{"class":52022},[324,70094,54208],{"class":734},[324,70096,913],{"class":867},[324,70098,70099],{"class":738},"\"add\"",[324,70101,70102],{"class":867},">录入\u003C\u002F",[324,70104,54609],{"class":52022},[324,70106,52029],{"class":867},[324,70108,70109,70111,70113],{"class":326,"line":3320},[324,70110,53139],{"class":867},[324,70112,67347],{"class":52022},[324,70114,52029],{"class":867},[324,70116,70117],{"class":326,"line":3328},[324,70118,488],{"emptyLinePlaceholder":487},[324,70120,70121,70123,70125,70128,70130],{"class":326,"line":3333},[324,70122,52866],{"class":867},[324,70124,10],{"class":52022},[324,70126,70127],{"class":867},">就业榜\u003C\u002F",[324,70129,10],{"class":52022},[324,70131,52029],{"class":867},[324,70133,70134,70136,70138],{"class":326,"line":3339},[324,70135,52866],{"class":867},[324,70137,1003],{"class":52022},[324,70139,52029],{"class":867},[324,70141,70142,70144,70146],{"class":326,"line":3345},[324,70143,52063],{"class":867},[324,70145,1006],{"class":52022},[324,70147,52029],{"class":867},[324,70149,70150,70152,70154],{"class":326,"line":3350},[324,70151,55956],{"class":867},[324,70153,1009],{"class":52022},[324,70155,52029],{"class":867},[324,70157,70158,70160,70162,70165,70167],{"class":326,"line":8677},[324,70159,56024],{"class":867},[324,70161,1012],{"class":52022},[324,70163,70164],{"class":867},">序号\u003C\u002F",[324,70166,1012],{"class":52022},[324,70168,52029],{"class":867},[324,70170,70171,70173,70175,70178,70180],{"class":326,"line":8701},[324,70172,56024],{"class":867},[324,70174,1012],{"class":52022},[324,70176,70177],{"class":867},">姓名\u003C\u002F",[324,70179,1012],{"class":52022},[324,70181,52029],{"class":867},[324,70183,70184,70186,70188,70191,70193],{"class":326,"line":8706},[324,70185,56024],{"class":867},[324,70187,1012],{"class":52022},[324,70189,70190],{"class":867},">年龄\u003C\u002F",[324,70192,1012],{"class":52022},[324,70194,52029],{"class":867},[324,70196,70197,70199,70201,70204,70206],{"class":326,"line":8712},[324,70198,56024],{"class":867},[324,70200,1012],{"class":52022},[324,70202,70203],{"class":867},">性别\u003C\u002F",[324,70205,1012],{"class":52022},[324,70207,52029],{"class":867},[324,70209,70210,70212,70214,70217,70219],{"class":326,"line":8739},[324,70211,56024],{"class":867},[324,70213,1012],{"class":52022},[324,70215,70216],{"class":867},">薪资\u003C\u002F",[324,70218,1012],{"class":52022},[324,70220,52029],{"class":867},[324,70222,70223,70225,70227,70230,70232],{"class":326,"line":8744},[324,70224,56024],{"class":867},[324,70226,1012],{"class":52022},[324,70228,70229],{"class":867},">就业城市\u003C\u002F",[324,70231,1012],{"class":52022},[324,70233,52029],{"class":867},[324,70235,70236,70238,70240,70243,70245],{"class":326,"line":8750},[324,70237,56024],{"class":867},[324,70239,1012],{"class":52022},[324,70241,70242],{"class":867},">操作\u003C\u002F",[324,70244,1012],{"class":52022},[324,70246,52029],{"class":867},[324,70248,70249,70251,70253],{"class":326,"line":8762},[324,70250,56129],{"class":867},[324,70252,1009],{"class":52022},[324,70254,52029],{"class":867},[324,70256,70257,70259,70261],{"class":326,"line":8774},[324,70258,52498],{"class":867},[324,70260,1006],{"class":52022},[324,70262,52029],{"class":867},[324,70264,70265,70267,70269],{"class":326,"line":8786},[324,70266,52063],{"class":867},[324,70268,1049],{"class":52022},[324,70270,52029],{"class":867},[324,70272,70273],{"class":326,"line":10445},[324,70274,70275],{"class":772},"      \u003C!-- \n",[324,70277,70278],{"class":326,"line":10470},[324,70279,70280],{"class":772},"        \u003Ctr>\n",[324,70282,70283],{"class":326,"line":10493},[324,70284,70285],{"class":772},"          \u003Ctd>1001\u003C\u002Ftd>\n",[324,70287,70288],{"class":326,"line":10517},[324,70289,70290],{"class":772},"          \u003Ctd>欧阳霸天\u003C\u002Ftd>\n",[324,70292,70293],{"class":326,"line":10522},[324,70294,70295],{"class":772},"          \u003Ctd>19\u003C\u002Ftd>\n",[324,70297,70298],{"class":326,"line":10527},[324,70299,70300],{"class":772},"          \u003Ctd>男\u003C\u002Ftd>\n",[324,70302,70303],{"class":326,"line":10532},[324,70304,70305],{"class":772},"          \u003Ctd>15000\u003C\u002Ftd>\n",[324,70307,70308],{"class":326,"line":10541},[324,70309,70310],{"class":772},"          \u003Ctd>上海\u003C\u002Ftd>\n",[324,70312,70313],{"class":326,"line":10546},[324,70314,70315],{"class":772},"          \u003Ctd>\n",[324,70317,70318],{"class":326,"line":10552},[324,70319,70320],{"class":772},"            \u003Ca href=\"javascript:\">删除\u003C\u002Fa>\n",[324,70322,70323],{"class":326,"line":10573},[324,70324,70325],{"class":772},"          \u003C\u002Ftd>\n",[324,70327,70328],{"class":326,"line":10579},[324,70329,70330],{"class":772},"        \u003C\u002Ftr> \n",[324,70332,70333],{"class":326,"line":10593},[324,70334,70335],{"class":772},"        -->\n",[324,70337,70338,70340,70342],{"class":326,"line":10599},[324,70339,52498],{"class":867},[324,70341,1049],{"class":52022},[324,70343,52029],{"class":867},[324,70345,70346,70348,70350],{"class":326,"line":10626},[324,70347,53139],{"class":867},[324,70349,1003],{"class":52022},[324,70351,52029],{"class":867},[324,70353,70354,70356,70358],{"class":326,"line":10635},[324,70355,52866],{"class":867},[324,70357,52535],{"class":52022},[324,70359,52029],{"class":867},[324,70361,70362],{"class":326,"line":10641},[324,70363,60680],{"class":772},[324,70365,70366,70368,70371,70373,70375,70377,70379,70382],{"class":326,"line":10649},[324,70367,11950],{"class":863},[324,70369,70370],{"class":916}," uname",[324,70372,14293],{"class":863},[324,70374,55118],{"class":867},[324,70376,55121],{"class":734},[324,70378,868],{"class":867},[324,70380,70381],{"class":738},"'.uname'",[324,70383,874],{"class":867},[324,70385,70386,70388,70390,70392,70394,70396,70398,70401],{"class":326,"line":10654},[324,70387,11950],{"class":863},[324,70389,16418],{"class":916},[324,70391,14293],{"class":863},[324,70393,55118],{"class":867},[324,70395,55121],{"class":734},[324,70397,868],{"class":867},[324,70399,70400],{"class":738},"'.age'",[324,70402,874],{"class":867},[324,70404,70405,70407,70410,70412,70414,70416,70418,70421],{"class":326,"line":17333},[324,70406,11950],{"class":863},[324,70408,70409],{"class":916}," gender",[324,70411,14293],{"class":863},[324,70413,55118],{"class":867},[324,70415,55121],{"class":734},[324,70417,868],{"class":867},[324,70419,70420],{"class":738},"'.gender'",[324,70422,874],{"class":867},[324,70424,70425,70427,70430,70432,70434,70436,70438,70441],{"class":326,"line":17339},[324,70426,11950],{"class":863},[324,70428,70429],{"class":916}," salary",[324,70431,14293],{"class":863},[324,70433,55118],{"class":867},[324,70435,55121],{"class":734},[324,70437,868],{"class":867},[324,70439,70440],{"class":738},"'.salary'",[324,70442,874],{"class":867},[324,70444,70445,70447,70450,70452,70454,70456,70458,70461],{"class":326,"line":17362},[324,70446,11950],{"class":863},[324,70448,70449],{"class":916}," city",[324,70451,14293],{"class":863},[324,70453,55118],{"class":867},[324,70455,55121],{"class":734},[324,70457,868],{"class":867},[324,70459,70460],{"class":738},"'.city'",[324,70462,874],{"class":867},[324,70464,70465,70467,70470,70472,70474,70476,70478,70481],{"class":326,"line":17368},[324,70466,11950],{"class":863},[324,70468,70469],{"class":916}," tbody",[324,70471,14293],{"class":863},[324,70473,55118],{"class":867},[324,70475,55121],{"class":734},[324,70477,868],{"class":867},[324,70479,70480],{"class":738},"'tbody'",[324,70482,874],{"class":867},[324,70484,70485],{"class":326,"line":17391},[324,70486,488],{"emptyLinePlaceholder":487},[324,70488,70489],{"class":326,"line":17405},[324,70490,70491],{"class":772},"    \u002F\u002F 获取所有带有name属性的元素\n",[324,70493,70494,70496,70499,70501,70503,70505,70507,70510],{"class":326,"line":17425},[324,70495,11950],{"class":863},[324,70497,70498],{"class":916}," items",[324,70500,14293],{"class":863},[324,70502,55118],{"class":867},[324,70504,56403],{"class":734},[324,70506,868],{"class":867},[324,70508,70509],{"class":738},"'[name]'",[324,70511,874],{"class":867},[324,70513,70514],{"class":326,"line":17431},[324,70515,70516],{"class":772},"    \u002F\u002F 声明一个空的数组\n",[324,70518,70519,70521,70523,70525],{"class":326,"line":17442},[324,70520,11950],{"class":863},[324,70522,58417],{"class":916},[324,70524,14293],{"class":863},[324,70526,52560],{"class":867},[324,70528,70529],{"class":326,"line":17465},[324,70530,70531],{"class":772},"    \u002F\u002F 1.录入模块\n",[324,70533,70534],{"class":326,"line":17487},[324,70535,70536],{"class":772},"    \u002F\u002F 1.1这是一个表单提交事件\n",[324,70538,70539,70541,70544,70546,70548,70550,70552,70555],{"class":326,"line":17492},[324,70540,11950],{"class":863},[324,70542,70543],{"class":916}," info",[324,70545,14293],{"class":863},[324,70547,55118],{"class":867},[324,70549,55121],{"class":734},[324,70551,868],{"class":867},[324,70553,70554],{"class":738},"'.info'",[324,70556,874],{"class":867},[324,70558,70559,70562,70564,70566,70569,70571,70573,70575,70577],{"class":326,"line":17498},[324,70560,70561],{"class":867},"    info.",[324,70563,58535],{"class":734},[324,70565,868],{"class":867},[324,70567,70568],{"class":738},"'submit'",[324,70570,13164],{"class":867},[324,70572,55171],{"class":863},[324,70574,2389],{"class":867},[324,70576,941],{"class":5945},[324,70578,13171],{"class":867},[324,70580,70581],{"class":326,"line":17512},[324,70582,70583],{"class":772},"      \u002F\u002F 阻止默认行为，点击按钮之后不进行跳转\n",[324,70585,70586,70589,70592],{"class":326,"line":17525},[324,70587,70588],{"class":867},"      e.",[324,70590,70591],{"class":734},"preventDefault",[324,70593,2706],{"class":867},[324,70595,70596],{"class":326,"line":17530},[324,70597,60734],{"class":772},[324,70599,70600],{"class":326,"line":17544},[324,70601,488],{"emptyLinePlaceholder":487},[324,70603,70604],{"class":326,"line":17549},[324,70605,70606],{"class":772},"      \u002F\u002F 这里进行表单验证  如果不通过,直接添加中断,不需要添加数据\n",[324,70608,70609],{"class":326,"line":17555},[324,70610,70611],{"class":772},"      \u002F\u002F 先遍历循环\n",[324,70613,70614,70616,70618,70620,70622,70624,70626,70628,70630,70633,70635,70637,70639],{"class":326,"line":17560},[324,70615,53006],{"class":863},[324,70617,2389],{"class":867},[324,70619,52569],{"class":863},[324,70621,10167],{"class":867},[324,70623,913],{"class":863},[324,70625,4822],{"class":916},[324,70627,10174],{"class":867},[324,70629,1774],{"class":863},[324,70631,70632],{"class":867}," items.",[324,70634,52690],{"class":916},[324,70636,3943],{"class":867},[324,70638,3022],{"class":863},[324,70640,13171],{"class":867},[324,70642,70643,70645,70648,70650,70653],{"class":326,"line":17574},[324,70644,3226],{"class":863},[324,70646,70647],{"class":867}," (items[i].value ",[324,70649,55208],{"class":863},[324,70651,70652],{"class":738}," ''",[324,70654,13171],{"class":867},[324,70656,70657,70660,70663,70665,70668],{"class":326,"line":17579},[324,70658,70659],{"class":863},"          return",[324,70661,70662],{"class":734}," alert",[324,70664,868],{"class":867},[324,70666,70667],{"class":738},"'输入内容不能为空'",[324,70669,874],{"class":867},[324,70671,70672],{"class":326,"line":17584},[324,70673,3258],{"class":867},[324,70675,70676],{"class":326,"line":17598},[324,70677,53120],{"class":867},[324,70679,70680],{"class":326,"line":17610},[324,70681,488],{"emptyLinePlaceholder":487},[324,70683,70684],{"class":326,"line":17615},[324,70685,70686],{"class":772},"      \u002F\u002F 创建新的对象\n",[324,70688,70689,70691,70694,70696],{"class":326,"line":17628},[324,70690,58950],{"class":863},[324,70692,70693],{"class":916}," obj",[324,70695,14293],{"class":863},[324,70697,16301],{"class":867},[324,70699,70700,70703,70705,70707,70709],{"class":326,"line":17633},[324,70701,70702],{"class":867},"        stuID: arr.",[324,70704,52690],{"class":916},[324,70706,46288],{"class":863},[324,70708,25842],{"class":916},[324,70710,32188],{"class":867},[324,70712,70713],{"class":326,"line":17638},[324,70714,70715],{"class":867},"        uname: uname.value,\n",[324,70717,70718],{"class":326,"line":17643},[324,70719,70720],{"class":867},"        age: age.value,\n",[324,70722,70723],{"class":326,"line":17656},[324,70724,70725],{"class":867},"        gender: gender.value,\n",[324,70727,70728],{"class":326,"line":17661},[324,70729,70730],{"class":867},"        salary: salary.value,\n",[324,70732,70733],{"class":326,"line":33355},[324,70734,70735],{"class":867},"        city: city.value\n",[324,70737,70738],{"class":326,"line":33361},[324,70739,53120],{"class":867},[324,70741,70742],{"class":326,"line":33367},[324,70743,70744],{"class":772},"      \u002F\u002F console.log(obj);\n",[324,70746,70747],{"class":326,"line":33373},[324,70748,70749],{"class":772},"      \u002F\u002F 追加到数组里面\n",[324,70751,70752,70754,70756],{"class":326,"line":33379},[324,70753,58729],{"class":867},[324,70755,52606],{"class":734},[324,70757,70758],{"class":867},"(obj)\n",[324,70760,70761],{"class":326,"line":33390},[324,70762,70763],{"class":772},"      \u002F\u002F console.log(arr);\n",[324,70765,70766],{"class":326,"line":33396},[324,70767,70768],{"class":772},"      \u002F\u002F 清空表单  reset重置表单\n",[324,70770,70771,70774,70776,70779],{"class":326,"line":33416},[324,70772,70773],{"class":916},"      this",[324,70775,1422],{"class":867},[324,70777,70778],{"class":734},"reset",[324,70780,2706],{"class":867},[324,70782,70783],{"class":326,"line":33422},[324,70784,70785],{"class":772},"      \u002F\u002F 调用渲染函数\n",[324,70787,70788,70791],{"class":326,"line":33433},[324,70789,70790],{"class":734},"      render",[324,70792,2706],{"class":867},[324,70794,70795],{"class":326,"line":33439},[324,70796,34183],{"class":867},[324,70798,70799],{"class":326,"line":33445},[324,70800,70801],{"class":772},"    \u002F\u002F 2.渲染函数(因为增加和删除都需要渲染)\n",[324,70803,70804,70807,70810],{"class":326,"line":33451},[324,70805,70806],{"class":863},"    function",[324,70808,70809],{"class":734}," render",[324,70811,11582],{"class":867},[324,70813,70814],{"class":326,"line":33457},[324,70815,70816],{"class":772},"      \u002F\u002F 先清空tbody,把最新数组里面的数据渲染完毕\n",[324,70818,70819,70822,70824],{"class":326,"line":33463},[324,70820,70821],{"class":867},"      tbody.innerHTML ",[324,70823,913],{"class":863},[324,70825,70826],{"class":738}," ''\n",[324,70828,70829],{"class":326,"line":33469},[324,70830,70831],{"class":772},"      \u002F\u002F 遍历数组\n",[324,70833,70834,70836,70838,70840,70842,70844,70846,70848,70850,70852,70854,70856,70858],{"class":326,"line":33475},[324,70835,53006],{"class":863},[324,70837,2389],{"class":867},[324,70839,52569],{"class":863},[324,70841,10167],{"class":867},[324,70843,913],{"class":863},[324,70845,4822],{"class":916},[324,70847,10174],{"class":867},[324,70849,1774],{"class":863},[324,70851,52687],{"class":867},[324,70853,52690],{"class":916},[324,70855,3943],{"class":867},[324,70857,3022],{"class":863},[324,70859,13171],{"class":867},[324,70861,70862,70864,70867,70869,70871,70874,70876,70879],{"class":326,"line":33495},[324,70863,61992],{"class":863},[324,70865,70866],{"class":916}," tr",[324,70868,14293],{"class":863},[324,70870,55118],{"class":867},[324,70872,70873],{"class":734},"createElement",[324,70875,868],{"class":867},[324,70877,70878],{"class":738},"'tr'",[324,70880,874],{"class":867},[324,70882,70883,70886,70888],{"class":326,"line":33501},[324,70884,70885],{"class":867},"        tr.innerHTML ",[324,70887,913],{"class":863},[324,70889,70890],{"class":738}," `\n",[324,70892,70893,70896,70898,70900,70902,70905,70908],{"class":326,"line":33517},[324,70894,70895],{"class":738},"        \u003Ctd>${",[324,70897,4609],{"class":867},[324,70899,1754],{"class":738},[324,70901,1305],{"class":867},[324,70903,70904],{"class":738},"].",[324,70906,70907],{"class":867},"stuID",[324,70909,70910],{"class":738},"}\u003C\u002Ftd>\n",[324,70912,70913,70916,70918,70920,70922,70924,70927],{"class":326,"line":33523},[324,70914,70915],{"class":738},"          \u003Ctd>${",[324,70917,4609],{"class":867},[324,70919,1754],{"class":738},[324,70921,1305],{"class":867},[324,70923,70904],{"class":738},[324,70925,70926],{"class":867},"uname",[324,70928,70910],{"class":738},[324,70930,70931,70933,70935,70937,70939,70941,70944],{"class":326,"line":33537},[324,70932,70915],{"class":738},[324,70934,4609],{"class":867},[324,70936,1754],{"class":738},[324,70938,1305],{"class":867},[324,70940,70904],{"class":738},[324,70942,70943],{"class":867},"age",[324,70945,70910],{"class":738},[324,70947,70948,70950,70952,70954,70956,70958,70961],{"class":326,"line":33543},[324,70949,70915],{"class":738},[324,70951,4609],{"class":867},[324,70953,1754],{"class":738},[324,70955,1305],{"class":867},[324,70957,70904],{"class":738},[324,70959,70960],{"class":867},"gender",[324,70962,70910],{"class":738},[324,70964,70965,70967,70969,70971,70973,70975,70978],{"class":326,"line":33558},[324,70966,70915],{"class":738},[324,70968,4609],{"class":867},[324,70970,1754],{"class":738},[324,70972,1305],{"class":867},[324,70974,70904],{"class":738},[324,70976,70977],{"class":867},"salary",[324,70979,70910],{"class":738},[324,70981,70982,70984,70986,70988,70990,70992,70995],{"class":326,"line":33564},[324,70983,70915],{"class":738},[324,70985,4609],{"class":867},[324,70987,1754],{"class":738},[324,70989,1305],{"class":867},[324,70991,70904],{"class":738},[324,70993,70994],{"class":867},"city",[324,70996,70910],{"class":738},[324,70998,70999],{"class":326,"line":33573},[324,71000,70315],{"class":738},[324,71002,71003,71006,71008],{"class":326,"line":33579},[324,71004,71005],{"class":738},"            \u003Ca href=\"javascript:\" data-id=${",[324,71007,1305],{"class":867},[324,71009,71010],{"class":738},"}>删除\u003C\u002Fa>\n",[324,71012,71013],{"class":326,"line":33588},[324,71014,71015],{"class":738},"          \u003C\u002Ftd> \n",[324,71017,71018],{"class":326,"line":33594},[324,71019,71020],{"class":738},"          `\n",[324,71022,71023],{"class":326,"line":33600},[324,71024,71025],{"class":772},"        \u002F\u002F 追加元素 父元素.appendChild(子元素)\n",[324,71027,71028,71031,71034],{"class":326,"line":33609},[324,71029,71030],{"class":867},"        tbody.",[324,71032,71033],{"class":734},"appendChild",[324,71035,71036],{"class":867},"(tr)\n",[324,71038,71039],{"class":326,"line":33615},[324,71040,53120],{"class":867},[324,71042,71043],{"class":326,"line":33626},[324,71044,2917],{"class":867},[324,71046,71047],{"class":326,"line":33632},[324,71048,488],{"emptyLinePlaceholder":487},[324,71050,71051],{"class":326,"line":33651},[324,71052,71053],{"class":772},"    \u002F\u002F 3.删除委托\n",[324,71055,71056],{"class":326,"line":33657},[324,71057,71058],{"class":772},"    \u002F\u002F 3.1 事件委托 tbody\n",[324,71060,71061,71064,71066,71068,71070,71072,71074,71076,71078],{"class":326,"line":33668},[324,71062,71063],{"class":867},"    tbody.",[324,71065,58535],{"class":734},[324,71067,868],{"class":867},[324,71069,58540],{"class":738},[324,71071,13164],{"class":867},[324,71073,55171],{"class":863},[324,71075,2389],{"class":867},[324,71077,941],{"class":5945},[324,71079,13171],{"class":867},[324,71081,71082,71084,71086,71088,71090],{"class":326,"line":33674},[324,71083,55202],{"class":863},[324,71085,67756],{"class":867},[324,71087,55208],{"class":863},[324,71089,68978],{"class":738},[324,71091,13171],{"class":867},[324,71093,71094],{"class":326,"line":33694},[324,71095,71096],{"class":772},"        \u002F\u002F 得到当前元素的自定义属性 data-id\n",[324,71098,71099],{"class":326,"line":33710},[324,71100,71101],{"class":772},"        \u002F\u002F console.log(e.target.dataset.id);\n",[324,71103,71104],{"class":326,"line":33716},[324,71105,71106],{"class":772},"        \u002F\u002F 删除arr 数组里面对应的数据\n",[324,71108,71109,71112,71114,71117,71119],{"class":326,"line":33730},[324,71110,71111],{"class":867},"        arr.",[324,71113,58732],{"class":734},[324,71115,71116],{"class":867},"(e.target.dataset.id, ",[324,71118,1082],{"class":916},[324,71120,874],{"class":867},[324,71122,71123],{"class":326,"line":33736},[324,71124,71125],{"class":772},"        \u002F\u002F 重新渲染一次\n",[324,71127,71128,71131],{"class":326,"line":33742},[324,71129,71130],{"class":734},"        render",[324,71132,2706],{"class":867},[324,71134,71135],{"class":326,"line":33753},[324,71136,53120],{"class":867},[324,71138,71139],{"class":326,"line":33759},[324,71140,34183],{"class":867},[324,71142,71143,71145,71147],{"class":326,"line":33765},[324,71144,53139],{"class":867},[324,71146,52535],{"class":52022},[324,71148,52029],{"class":867},[324,71150,71151],{"class":326,"line":33775},[324,71152,488],{"emptyLinePlaceholder":487},[324,71154,71155,71157,71159],{"class":326,"line":33781},[324,71156,52507],{"class":867},[324,71158,52522],{"class":52022},[324,71160,52029],{"class":867},[324,71162,71163],{"class":326,"line":33792},[324,71164,488],{"emptyLinePlaceholder":487},[324,71166,71167,71169,71171],{"class":326,"line":33798},[324,71168,52507],{"class":867},[324,71170,51357],{"class":52022},[324,71172,52029],{"class":867},[19,71174,71175],{},"样式：",[316,71177,71181],{"className":71178,"code":71179,"language":71180,"meta":50,"style":50},"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",[269,71182,71183,71188,71198,71207,71211,71215,71220,71230,71235,71239,71244,71254,71259,71268,71272,71276,71281,71286,71296,71306,71311,71315,71320,71329,71339,71344,71354,71364,71368,71373,71381,71385,71390,71395,71400,71408,71417,71421,71426,71435,71439,71444,71453,71457,71462,71471,71480,71488,71492,71497,71506,71516,71525,71535,71541,71550,71560,71570,71574,71579,71588,71596,71606,71614,71623,71632,71642,71650,71654,71659,71668],{"__ignoreMap":50},[324,71184,71185],{"class":326,"line":327},[324,71186,71187],{"class":867},"* {\n",[324,71189,71190,71193,71195],{"class":326,"line":203},[324,71191,71192],{"class":52022},"  margin",[324,71194,52159],{"class":867},[324,71196,71197],{"class":738},"0;\n",[324,71199,71200,71203,71205],{"class":326,"line":338},[324,71201,71202],{"class":738},"  padding",[324,71204,52159],{"class":867},[324,71206,71197],{"class":738},[324,71208,71209],{"class":326,"line":344},[324,71210,2296],{"class":867},[324,71212,71213],{"class":326,"line":484},[324,71214,488],{"emptyLinePlaceholder":487},[324,71216,71217],{"class":326,"line":491},[324,71218,71219],{"class":738},"a {\n",[324,71221,71222,71225,71227],{"class":326,"line":496},[324,71223,71224],{"class":52022},"  text-decoration",[324,71226,52159],{"class":867},[324,71228,71229],{"class":738},"none;\n",[324,71231,71232],{"class":326,"line":502},[324,71233,71234],{"class":738},"  color:#721c24;\n",[324,71236,71237],{"class":326,"line":508},[324,71238,2296],{"class":867},[324,71240,71241],{"class":326,"line":514},[324,71242,71243],{"class":738},"h1 {\n",[324,71245,71246,71249,71251],{"class":326,"line":2343},[324,71247,71248],{"class":52022},"  text-align",[324,71250,52159],{"class":867},[324,71252,71253],{"class":738},"center;\n",[324,71255,71256],{"class":326,"line":2348},[324,71257,71258],{"class":738},"  color:#333;\n",[324,71260,71261,71263,71265],{"class":326,"line":2354},[324,71262,71192],{"class":52022},[324,71264,52159],{"class":867},[324,71266,71267],{"class":738},"20px 0;\n",[324,71269,71270],{"class":326,"line":2359},[324,71271,3403],{"class":867},[324,71273,71274],{"class":326,"line":2373},[324,71275,2296],{"class":867},[324,71277,71278],{"class":326,"line":2378},[324,71279,71280],{"class":738},"table {\n",[324,71282,71283],{"class":326,"line":2384},[324,71284,71285],{"class":738},"  margin:0 auto;\n",[324,71287,71288,71291,71293],{"class":326,"line":2405},[324,71289,71290],{"class":52022},"  width",[324,71292,52159],{"class":867},[324,71294,71295],{"class":738},"800px;\n",[324,71297,71298,71301,71303],{"class":326,"line":2410},[324,71299,71300],{"class":52022},"  border-collapse",[324,71302,52159],{"class":867},[324,71304,71305],{"class":738},"collapse;\n",[324,71307,71308],{"class":326,"line":2424},[324,71309,71310],{"class":738},"  color:#004085;\n",[324,71312,71313],{"class":326,"line":2429},[324,71314,2296],{"class":867},[324,71316,71317],{"class":326,"line":2458},[324,71318,71319],{"class":738},"th {\n",[324,71321,71322,71324,71326],{"class":326,"line":2463},[324,71323,71202],{"class":52022},[324,71325,52159],{"class":867},[324,71327,71328],{"class":738},"10px;\n",[324,71330,71331,71334,71336],{"class":326,"line":2480},[324,71332,71333],{"class":52022},"  background",[324,71335,52159],{"class":867},[324,71337,71338],{"class":772},"#cfe5ff;\n",[324,71340,71341],{"class":326,"line":2485},[324,71342,71343],{"class":867},"  \n",[324,71345,71346,71349,71351],{"class":326,"line":2490},[324,71347,71348],{"class":52022},"  font-size",[324,71350,52159],{"class":867},[324,71352,71353],{"class":738},"20px;\n",[324,71355,71356,71359,71361],{"class":326,"line":2495},[324,71357,71358],{"class":52022},"  font-weight",[324,71360,52159],{"class":867},[324,71362,71363],{"class":738},"400;\n",[324,71365,71366],{"class":326,"line":2509},[324,71367,2296],{"class":867},[324,71369,71370],{"class":326,"line":2514},[324,71371,71372],{"class":738},"td,th {\n",[324,71374,71375,71378],{"class":326,"line":3306},[324,71376,71377],{"class":738},"  border:1px solid",[324,71379,71380],{"class":772}," #b8daff;\n",[324,71382,71383],{"class":326,"line":3320},[324,71384,2296],{"class":867},[324,71386,71387],{"class":326,"line":3328},[324,71388,71389],{"class":738},"td {\n",[324,71391,71392],{"class":326,"line":3333},[324,71393,71394],{"class":738},"  padding:10px;\n",[324,71396,71397],{"class":326,"line":3339},[324,71398,71399],{"class":738},"  color:#666;\n",[324,71401,71402,71404,71406],{"class":326,"line":3345},[324,71403,71248],{"class":52022},[324,71405,52159],{"class":867},[324,71407,71253],{"class":738},[324,71409,71410,71412,71414],{"class":326,"line":3350},[324,71411,71348],{"class":52022},[324,71413,52159],{"class":867},[324,71415,71416],{"class":738},"16px;\n",[324,71418,71419],{"class":326,"line":8677},[324,71420,2296],{"class":867},[324,71422,71423],{"class":326,"line":8701},[324,71424,71425],{"class":738},"tbody tr {\n",[324,71427,71428,71430,71432],{"class":326,"line":8706},[324,71429,71333],{"class":52022},[324,71431,52159],{"class":867},[324,71433,71434],{"class":772},"#fff;\n",[324,71436,71437],{"class":326,"line":8712},[324,71438,2296],{"class":867},[324,71440,71441],{"class":326,"line":8739},[324,71442,71443],{"class":738},"tbody tr:hover {\n",[324,71445,71446,71448,71450],{"class":326,"line":8744},[324,71447,71333],{"class":52022},[324,71449,52159],{"class":867},[324,71451,71452],{"class":772},"#e1ecf8;\n",[324,71454,71455],{"class":326,"line":8750},[324,71456,2296],{"class":867},[324,71458,71459],{"class":326,"line":8762},[324,71460,71461],{"class":738},".info {\n",[324,71463,71464,71466,71468],{"class":326,"line":8774},[324,71465,71290],{"class":52022},[324,71467,52159],{"class":867},[324,71469,71470],{"class":738},"900px;\n",[324,71472,71473,71475,71477],{"class":326,"line":8786},[324,71474,71192],{"class":52022},[324,71476,52159],{"class":867},[324,71478,71479],{"class":738},"50px auto;\n",[324,71481,71482,71484,71486],{"class":326,"line":10445},[324,71483,71248],{"class":52022},[324,71485,52159],{"class":867},[324,71487,71253],{"class":738},[324,71489,71490],{"class":326,"line":10470},[324,71491,2296],{"class":867},[324,71493,71494],{"class":326,"line":10493},[324,71495,71496],{"class":738},".info  input, .info select {\n",[324,71498,71499,71501,71503],{"class":326,"line":10517},[324,71500,71290],{"class":52022},[324,71502,52159],{"class":867},[324,71504,71505],{"class":738},"80px;\n",[324,71507,71508,71511,71513],{"class":326,"line":10522},[324,71509,71510],{"class":52022},"  height",[324,71512,52159],{"class":867},[324,71514,71515],{"class":738},"27px;\n",[324,71517,71518,71521,71523],{"class":326,"line":10527},[324,71519,71520],{"class":52022},"  outline",[324,71522,52159],{"class":867},[324,71524,71229],{"class":738},[324,71526,71527,71530,71532],{"class":326,"line":10532},[324,71528,71529],{"class":52022},"  border-radius",[324,71531,52159],{"class":867},[324,71533,71534],{"class":738},"5px;\n",[324,71536,71537,71539],{"class":326,"line":10541},[324,71538,71377],{"class":738},[324,71540,71380],{"class":772},[324,71542,71543,71546,71548],{"class":326,"line":10546},[324,71544,71545],{"class":52022},"  padding-left",[324,71547,52159],{"class":867},[324,71549,71534],{"class":738},[324,71551,71552,71555,71557],{"class":326,"line":10552},[324,71553,71554],{"class":52022},"  box-sizing",[324,71556,52159],{"class":867},[324,71558,71559],{"class":738},"border-box;\n",[324,71561,71562,71565,71567],{"class":326,"line":10573},[324,71563,71564],{"class":52022},"  margin-right",[324,71566,52159],{"class":867},[324,71568,71569],{"class":738},"15px;\n",[324,71571,71572],{"class":326,"line":10579},[324,71573,2296],{"class":867},[324,71575,71576],{"class":326,"line":10593},[324,71577,71578],{"class":738},".info button {\n",[324,71580,71581,71583,71585],{"class":326,"line":10599},[324,71582,71290],{"class":52022},[324,71584,52159],{"class":867},[324,71586,71587],{"class":738},"60px;\n",[324,71589,71590,71592,71594],{"class":326,"line":10626},[324,71591,71510],{"class":52022},[324,71593,52159],{"class":867},[324,71595,71515],{"class":738},[324,71597,71598,71601,71603],{"class":326,"line":10635},[324,71599,71600],{"class":52022},"  background-color",[324,71602,52159],{"class":867},[324,71604,71605],{"class":772},"#004085;\n",[324,71607,71608,71610,71612],{"class":326,"line":10641},[324,71609,71520],{"class":52022},[324,71611,52159],{"class":867},[324,71613,71229],{"class":738},[324,71615,71616,71619,71621],{"class":326,"line":10649},[324,71617,71618],{"class":52022},"  border",[324,71620,52159],{"class":867},[324,71622,71197],{"class":738},[324,71624,71625,71628,71630],{"class":326,"line":10654},[324,71626,71627],{"class":52022},"  color",[324,71629,52159],{"class":867},[324,71631,71434],{"class":772},[324,71633,71634,71637,71639],{"class":326,"line":17333},[324,71635,71636],{"class":52022},"  cursor",[324,71638,52159],{"class":867},[324,71640,71641],{"class":738},"pointer;\n",[324,71643,71644,71646,71648],{"class":326,"line":17339},[324,71645,71529],{"class":52022},[324,71647,52159],{"class":867},[324,71649,71534],{"class":738},[324,71651,71652],{"class":326,"line":17362},[324,71653,2296],{"class":867},[324,71655,71656],{"class":326,"line":17368},[324,71657,71658],{"class":738},".info .age {\n",[324,71660,71661,71663,71665],{"class":326,"line":17391},[324,71662,71290],{"class":52022},[324,71664,52159],{"class":867},[324,71666,71667],{"class":738},"50px;\n",[324,71669,71670],{"class":326,"line":17405},[324,71671,2296],{"class":867},[19,71673,71674],{},"思路：",[19,71676,71677],{},[48,71678],{"alt":50,"src":71679},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-167.png",[19,71681,71682],{},[48,71683],{"alt":50,"src":71684},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-168.png",[19,71686,71687],{},[48,71688],{"alt":50,"src":71689},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-169.png",[35,71691,71693],{"id":71692},"_3315-重绘回流","3.3.15 重绘回流",[19,71695,71696],{},[48,71697],{"alt":50,"src":71698},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-170.png",[19,71700,71701],{},[48,71702],{"alt":50,"src":71703},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-171.png",[19,71705,71706],{},[48,71707],{"alt":50,"src":71708},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-172.png",[14,71710,71712],{"id":71711},"_34-bom","3.4 BOM",[19,71714,71715],{},[48,71716],{"alt":50,"src":71717},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-173.png",[19,71719,71720],{},"平时写的document省略了window而已，实际上是window.document",[19,71722,71723],{},"函数也是这样，调用的时候实际为window.fn()",[19,71725,71726],{},"var声明标量也是这样的，const和let是挂载在自己的作用域内，所以如果写：const num=10 console.log(window.num)会输出undefined",[19,71728,71729],{},"window大部分情况下可以省略",[35,71731,71733],{"id":71732},"_341-定时器-延时函数","3.4.1 定时器-延时函数",[19,71735,71736],{},"只执行一次",[19,71738,71739],{},[48,71740],{"alt":50,"src":71741},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-174.png",[19,71743,71744],{},"某些特殊情况下，如递归函数中，我需要自己调用自己，此时就需要清除一下延时函数了",[19,71746,71747],{},[48,71748],{"alt":50,"src":71749},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-175.png",[35,71751,71753],{"id":71752},"_342-js执行机制","3.4.2 JS执行机制",[19,71755,71756],{},[48,71757],{"alt":50,"src":71758},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-176.png",[19,71760,71761],{},"两个的结果都是1111 3333 2222",[19,71763,71764],{},[48,71765],{"alt":50,"src":71766},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-177.png",[19,71768,71769],{},[48,71770],{"alt":50,"src":71771},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-178.png",[19,71773,71774],{},[48,71775],{"alt":50,"src":71776},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-179.png",[19,71778,71779],{},"总结：同步任务是立马可以执行的，异步是需要事件的",[19,71781,71782],{},"工作流程：",[19,71784,71785],{},[48,71786],{"alt":50,"src":71787},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-180.png",[19,71789,71790],{},[48,71791],{"alt":50,"src":71792},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-181.png",[19,71794,71795],{},"js只能进行单线程的操作，右边部分是浏览器操作，在浏览的作用下可以实现多线程任务",[19,71797,71798],{},"由于主线程不断的重复获得任务、执行任务、再获取任务、再执行，所以这种机制被称为事件循环（ event loop）",[35,71800,71802],{"id":71801},"_343-location对象","3.4.3 location对象",[19,71804,71805],{},"location对象属于window这个全局对象下的，可以 省略window",[19,71807,71808],{},[48,71809],{"alt":50,"src":71810},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-182.png",[19,71812,71813],{},"href可以跳转页面",[192,71815,71816],{},[195,71817,71818],{},"search:在表单中提交信息之后,上边的网址后面会包含自己的信息",[19,71820,71821],{},"search得到提交信息之后网站后边的地址",[19,71823,71824],{},[48,71825],{"alt":50,"src":71826},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-183.png",[19,71828,71829],{},[48,71830],{"alt":50,"src":71831},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-184.png",[192,71833,71834],{"start":203},[195,71835,71836],{},"hash:这个获取单页面应用#后边的地址",[19,71838,71839],{},"如下,点击我的音乐等按钮,浏览器不会刷新,只是刷新下边的内容,此时网站后边的地址为#",[19,71841,71842],{},[48,71843],{"alt":50,"src":71844},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-185.png",[316,71846,71848],{"className":53789,"code":71847,"language":53791,"meta":50,"style":50},"  \u003Ca href=\"#\u002Fmy\">我的\u003C\u002Fa>\n  \u003Ca href=\"#\u002Ffriend\">关注\u003C\u002Fa>\n  \u003Ca href=\"#\u002Fdownload\">下载\u003C\u002Fa>\n",[269,71849,71850,71870,71890],{"__ignoreMap":50},[324,71851,71852,71854,71856,71858,71860,71863,71866,71868],{"class":326,"line":327},[324,71853,52866],{"class":867},[324,71855,25],{"class":52022},[324,71857,61779],{"class":734},[324,71859,913],{"class":867},[324,71861,71862],{"class":738},"\"#\u002Fmy\"",[324,71864,71865],{"class":867},">我的\u003C\u002F",[324,71867,25],{"class":52022},[324,71869,52029],{"class":867},[324,71871,71872,71874,71876,71878,71880,71883,71886,71888],{"class":326,"line":203},[324,71873,52866],{"class":867},[324,71875,25],{"class":52022},[324,71877,61779],{"class":734},[324,71879,913],{"class":867},[324,71881,71882],{"class":738},"\"#\u002Ffriend\"",[324,71884,71885],{"class":867},">关注\u003C\u002F",[324,71887,25],{"class":52022},[324,71889,52029],{"class":867},[324,71891,71892,71894,71896,71898,71900,71903,71906,71908],{"class":326,"line":338},[324,71893,52866],{"class":867},[324,71895,25],{"class":52022},[324,71897,61779],{"class":734},[324,71899,913],{"class":867},[324,71901,71902],{"class":738},"\"#\u002Fdownload\"",[324,71904,71905],{"class":867},">下载\u003C\u002F",[324,71907,25],{"class":52022},[324,71909,52029],{"class":867},[19,71911,71912],{},"就是当时候提前写好每部分,一点就会换过来写好的这部分,浏览器不会刷新,在vue中会详细说明",[192,71914,71915],{"start":338},[195,71916,71917,71918,71920,71921,71923],{},"reload 类似于浏览器中点击F5,进行刷新操作,它是个方法!!! 用的时候要加()",[54438,71919],{},"  强制刷新是从在线重新获取数据(ctrl+f5) location.reload(true)",[54438,71922],{},"  刷新是从本地获取数据 (f5) location.reload(false)",[35,71925,71927],{"id":71926},"_345-navigator对象","3.4.5 navigator对象",[19,71929,71930],{},[48,71931],{"alt":50,"src":71932},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-186.png",[316,71934,71938],{"className":71935,"code":71936,"language":71937,"meta":50,"style":50},"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",[269,71939,71940,71945,71956,71968,71973,72024,72065,72070,72083,72095,72100],{"__ignoreMap":50},[324,71941,71942],{"class":326,"line":327},[324,71943,71944],{"class":772},"\u002F\u002F 检测 userAgent（浏览器信息） \n",[324,71946,71947,71949,71951,71953],{"class":326,"line":203},[324,71948,1091],{"class":863},[324,71950,868],{"class":867},[324,71952,55171],{"class":863},[324,71954,71955],{"class":867}," () { \n",[324,71957,71958,71960,71963,71965],{"class":326,"line":338},[324,71959,7521],{"class":863},[324,71961,71962],{"class":916}," userAgent",[324,71964,14293],{"class":863},[324,71966,71967],{"class":867}," navigator.userAgent \n",[324,71969,71970],{"class":326,"line":344},[324,71971,71972],{"class":772},"\u002F\u002F 验证是否为Android或iPhone \n",[324,71974,71975,71977,71980,71982,71985,71988,71990,71992,71995,71997,72000,72004,72006,72008,72010,72013,72015,72017,72019,72021],{"class":326,"line":484},[324,71976,7521],{"class":863},[324,71978,71979],{"class":916}," android",[324,71981,14293],{"class":863},[324,71983,71984],{"class":867}," userAgent.",[324,71986,71987],{"class":734},"match",[324,71989,868],{"class":867},[324,71991,1448],{"class":738},[324,71993,71994],{"class":48699},"(Android);",[324,71996,1850],{"class":863},[324,71998,71999],{"class":916},"[\\s",[324,72001,72003],{"class":72002},"snhLl","\\\u002F",[324,72005,1804],{"class":916},[324,72007,1345],{"class":863},[324,72009,868],{"class":48699},[324,72011,72012],{"class":916},"[\\d.]",[324,72014,1345],{"class":863},[324,72016,1293],{"class":48699},[324,72018,1850],{"class":863},[324,72020,1448],{"class":738},[324,72022,72023],{"class":867},") \n",[324,72025,72026,72028,72031,72033,72035,72037,72039,72041,72044,72047,72050,72052,72054,72057,72059,72061,72063],{"class":326,"line":491},[324,72027,7521],{"class":863},[324,72029,72030],{"class":916}," iphone",[324,72032,14293],{"class":863},[324,72034,71984],{"class":867},[324,72036,71987],{"class":734},[324,72038,868],{"class":867},[324,72040,1448],{"class":738},[324,72042,72043],{"class":48699},"(iPhone",[324,72045,72046],{"class":916},"\\s",[324,72048,72049],{"class":48699},"OS)",[324,72051,72046],{"class":916},[324,72053,868],{"class":48699},[324,72055,72056],{"class":916},"[\\d_]",[324,72058,1345],{"class":863},[324,72060,1293],{"class":48699},[324,72062,1448],{"class":738},[324,72064,72023],{"class":867},[324,72066,72067],{"class":326,"line":496},[324,72068,72069],{"class":772},"\u002F\u002F 如果是Android或iPhone，则跳转至移动站点 \n",[324,72071,72072,72074,72077,72080],{"class":326,"line":502},[324,72073,2262],{"class":863},[324,72075,72076],{"class":867}," (android ",[324,72078,72079],{"class":863},"||",[324,72081,72082],{"class":867}," iphone) { \n",[324,72084,72085,72088,72090,72093],{"class":326,"line":508},[324,72086,72087],{"class":867},"location.href ",[324,72089,913],{"class":863},[324,72091,72092],{"class":738}," 'http:\u002F\u002Fm.itcast.cn'",[324,72094,3403],{"class":867},[324,72096,72097],{"class":326,"line":514},[324,72098,72099],{"class":867},"} \n",[324,72101,72102],{"class":326,"line":2343},[324,72103,72104],{"class":867},"})()\n",[35,72106,72108],{"id":72107},"_346-histroy对象","3.4.6 histroy对象",[19,72110,72111],{},[48,72112],{"alt":50,"src":72113},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-187.png",[19,72115,72116],{},"浏览器地址的前进与后退!!!",[19,72118,72119],{},"history.back() 等效于 history.go(-1)",[19,72121,72122],{},"history.forward() 等效于 history.go(1)",[14,72124,72126],{"id":72125},"_35-本地存储","3.5 本地存储",[192,72128,72129,72132,72135],{},[195,72130,72131],{},"数据存储在用户浏览器中",[195,72133,72134],{},"设置、读取方便、甚至页面刷新不丢失数据",[195,72136,72137],{},"容量较大，sessionStorage和localStorage约 5M 左右",[35,72139,72141],{"id":72140},"_351-本地存储分类-localstorage","3.5.1 本地存储分类- localStorage",[19,72143,72144],{},"只能存储字符串",[19,72146,72147],{},[48,72148],{"alt":50,"src":72149},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-188.png",[19,72151,72152],{},[48,72153],{"alt":50,"src":72154},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-189.png",[19,72156,72157],{},"键值对要加引号,不然就会当变量来看了",[19,72159,72160],{},"localStorage.setItem('uname', 'pink')",[19,72162,72163],{},"刷新之后信息不再丢失",[19,72165,72166],{},"操作key,value会跟着变",[19,72168,72169],{},"删除只删除键就可以,即名字",[19,72171,72160],{},[19,72173,72174],{},"改:",[19,72176,72177],{},"localStorage.setItem('uname','red')",[19,72179,72180],{},"有这个键就是改,没有这个键就是改",[19,72182,72183],{},[48,72184],{"alt":50,"src":72185},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-190.png",[19,72187,72188],{},"这个是全部删除,但是如果代码没有改动的话,一刷新,这些数据又都会存储在这里边,在测试中使用:",[19,72190,72191],{},[48,72192],{"alt":50,"src":72193},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-191.png",[19,72195,72196],{},"本地存储只能存储字符串,在存储数据时,文字必须使用引号,不然字母会被看成变量,数字可以不加引号,但是本地存储之后都会变成字符串",[35,72198,72200],{"id":72199},"_352-本地存储分类-sessionstorage","3.5.2 本地存储分类- sessionStorage",[19,72202,72203],{},"相比于localStorage来说,关闭浏览器就会消失,但是localStorage关闭浏览器是不会消失的",[19,72205,72206],{},"特性:",[192,72208,72209,72212,72215,72218],{},[195,72210,72211],{},"生命周期为关闭浏览器窗口",[195,72213,72214],{},"在同一个窗口(页面)下数据可以共享",[195,72216,72217],{},"以键值对的形式存储使用",[195,72219,72220],{},"用法跟localStorage 基本相同",[35,72222,72224],{"id":72223},"_353-存储复杂数据类型","3.5.3 存储复杂数据类型",[19,72226,72227],{},"本地只能存储字符串,无法直接存储复杂数据类型",[316,72229,72231],{"className":53789,"code":72230,"language":53791,"meta":50,"style":50},"\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",[269,72232,72233,72241,72246,72251,72256,72261,72265,72270,72275],{"__ignoreMap":50},[324,72234,72235,72237,72239],{"class":326,"line":327},[324,72236,1774],{"class":867},[324,72238,52535],{"class":52022},[324,72240,52029],{"class":867},[324,72242,72243],{"class":326,"line":203},[324,72244,72245],{"class":867},"    const obj = {\n",[324,72247,72248],{"class":326,"line":338},[324,72249,72250],{"class":867},"      uname: 'pink老师',\n",[324,72252,72253],{"class":326,"line":344},[324,72254,72255],{"class":867},"      age: 18,\n",[324,72257,72258],{"class":326,"line":484},[324,72259,72260],{"class":867},"      gender: '女'\n",[324,72262,72263],{"class":326,"line":491},[324,72264,2917],{"class":867},[324,72266,72267],{"class":326,"line":496},[324,72268,72269],{"class":867},"    \u002F\u002F 存储复杂数据类型\n",[324,72271,72272],{"class":326,"line":502},[324,72273,72274],{"class":867},"    localStorage.setItem('obj', obj)\n",[324,72276,72277,72279,72281],{"class":326,"line":508},[324,72278,53139],{"class":867},[324,72280,52535],{"class":52022},[324,72282,52029],{"class":867},[19,72284,72285],{},[48,72286],{"alt":50,"src":72287},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-192.png",[19,72289,72290],{},"如果获取一下数据:",[19,72292,72293],{},"log(localStorage.getItem('obj'))",[19,72295,72296],{},[48,72297],{"alt":50,"src":72298},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-193.png",[19,72300,72301],{},"发现直接存对象是使用不了的!!!",[151,72303,72305],{"id":72304},"_3531-复杂对象转化为jso字符串","3.5.3.1 复杂对象转化为JSO字符串",[19,72307,72308],{},[48,72309],{"alt":50,"src":72310},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-194.png",[316,72312,72314],{"className":51355,"code":72313,"language":51357,"meta":50,"style":50},"\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",[269,72315,72316,72324,72334,72344,72353,72361,72365,72369,72395,72414,72422,72426,72431,72436],{"__ignoreMap":50},[324,72317,72318,72320,72322],{"class":326,"line":327},[324,72319,1774],{"class":867},[324,72321,52535],{"class":52022},[324,72323,52029],{"class":867},[324,72325,72326,72328,72330,72332],{"class":326,"line":203},[324,72327,11950],{"class":863},[324,72329,70693],{"class":916},[324,72331,14293],{"class":863},[324,72333,16301],{"class":867},[324,72335,72336,72339,72342],{"class":326,"line":338},[324,72337,72338],{"class":867},"      uname: ",[324,72340,72341],{"class":738},"'pink老师'",[324,72343,32188],{"class":867},[324,72345,72346,72349,72351],{"class":326,"line":344},[324,72347,72348],{"class":867},"      age: ",[324,72350,1514],{"class":916},[324,72352,32188],{"class":867},[324,72354,72355,72358],{"class":326,"line":484},[324,72356,72357],{"class":867},"      gender: ",[324,72359,72360],{"class":738},"'女'\n",[324,72362,72363],{"class":326,"line":491},[324,72364,2917],{"class":867},[324,72366,72367],{"class":326,"line":496},[324,72368,72269],{"class":772},[324,72370,72371,72374,72377,72379,72382,72384,72387,72389,72392],{"class":326,"line":502},[324,72372,72373],{"class":867},"  localStorage.",[324,72375,72376],{"class":734},"setItem",[324,72378,868],{"class":867},[324,72380,72381],{"class":738},"'obj'",[324,72383,13164],{"class":867},[324,72385,72386],{"class":916},"JSON",[324,72388,1422],{"class":867},[324,72390,72391],{"class":734},"stringify",[324,72393,72394],{"class":867},"(obj))\n",[324,72396,72397,72400,72402,72405,72408,72410,72412],{"class":326,"line":508},[324,72398,72399],{"class":867},"  console.",[324,72401,58969],{"class":734},[324,72403,72404],{"class":867},"(localStorage.",[324,72406,72407],{"class":734},"getItem",[324,72409,868],{"class":867},[324,72411,72381],{"class":738},[324,72413,31219],{"class":867},[324,72415,72416,72418,72420],{"class":326,"line":514},[324,72417,53139],{"class":867},[324,72419,52535],{"class":52022},[324,72421,52029],{"class":867},[324,72423,72424],{"class":326,"line":2343},[324,72425,71343],{"class":867},[324,72427,72428],{"class":326,"line":2348},[324,72429,72430],{"class":867},"  输出:{\"uname\":\"pink老师\",\"age\":18,\"gender\":\"女\"}\n",[324,72432,72433],{"class":326,"line":2354},[324,72434,72435],{"class":867},"  类型是字符串的\n",[324,72437,72438],{"class":326,"line":2359},[324,72439,72440],{"class":867},"  JSON对象 属性和值有引号,而且引号统一是双引号\n",[151,72442,72444],{"id":72443},"_3532-json字符串转化为对象","3.5.3.2 JSON字符串转化为对象",[19,72446,72447],{},[48,72448],{"alt":50,"src":72449},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-195.png",[19,72451,72452],{},[48,72453],{"alt":50,"src":72454},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-196.png",[316,72456,72458],{"className":53789,"code":72457,"language":53791,"meta":50,"style":50},"  \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",[269,72459,72460,72468,72472,72476,72480,72484,72488,72493,72498,72503,72508,72513,72518,72523,72528],{"__ignoreMap":50},[324,72461,72462,72464,72466],{"class":326,"line":327},[324,72463,52866],{"class":867},[324,72465,52535],{"class":52022},[324,72467,52029],{"class":867},[324,72469,72470],{"class":326,"line":203},[324,72471,72245],{"class":867},[324,72473,72474],{"class":326,"line":338},[324,72475,72250],{"class":867},[324,72477,72478],{"class":326,"line":344},[324,72479,72255],{"class":867},[324,72481,72482],{"class":326,"line":484},[324,72483,72260],{"class":867},[324,72485,72486],{"class":326,"line":491},[324,72487,2917],{"class":867},[324,72489,72490],{"class":326,"line":496},[324,72491,72492],{"class":867},"    \u002F\u002F 1.存储复杂数据类型\n",[324,72494,72495],{"class":326,"line":502},[324,72496,72497],{"class":867},"    \u002F\u002F localStorage.setItem('obj', obj)\n",[324,72499,72500],{"class":326,"line":508},[324,72501,72502],{"class":867},"    \u002F\u002F console.log(localStorage.getItem('obj'))\n",[324,72504,72505],{"class":326,"line":514},[324,72506,72507],{"class":867},"    \u002F\u002F 2.复杂数据类型存储必须转换为JSON字符串存储\n",[324,72509,72510],{"class":326,"line":2343},[324,72511,72512],{"class":867},"    localStorage.setItem('obj', JSON.stringify(obj))\n",[324,72514,72515],{"class":326,"line":2348},[324,72516,72517],{"class":867},"    \u002F\u002F 取\n",[324,72519,72520],{"class":326,"line":2354},[324,72521,72522],{"class":867},"    \u002F\u002F console.log(typeof localStorage.getItem('obj'))\n",[324,72524,72525],{"class":326,"line":2359},[324,72526,72527],{"class":867},"    console.log(JSON.parse(localStorage.getItem('obj')))\n",[324,72529,72530,72532,72534],{"class":326,"line":2373},[324,72531,53139],{"class":867},[324,72533,52535],{"class":52022},[324,72535,52029],{"class":867},[19,72537,72538],{},[48,72539],{"alt":50,"src":72540},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-197.png",[35,72542,72544],{"id":72543},"_356-数组map方法","3.5.6 数组map方法",[19,72546,72547],{},"map多和join一起使用，使用map，将原数组的内容给小盒子，然后遍历完得到好多小盒子（就是小盒子填上了内容），这些小盒子就作为元素添加到了新的数组中，新的数组使用join的方法，比如新数组叫newArr，然后新数组newArr.join(''),元素之间不再有分隔符，转为了一个字符串塞给了大盒子，就可以实现对大盒子的填充",[19,72549,72550],{},[48,72551],{"alt":50,"src":72552},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-198.png",[19,72554,72555],{},[48,72556],{"alt":50,"src":72557},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-199.png",[19,72559,72560,72563],{},[116,72561,72562],{},"map 也称为映射。"," 映射是个术语，指两个元素的集之间元素相互“对应”的关系",[19,72565,72566],{},"map有返回值，但是forEach没有返回值",[19,72568,72569],{},"map是个方法。用的时候要加 ()",[19,72571,72572],{},"map返回的是一个数组",[35,72574,72576],{"id":72575},"_357-数组中join方法","3.5.7 数组中join方法",[19,72578,72579],{},[48,72580],{"alt":50,"src":72581},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-200.png",[19,72583,72584],{},"类似于python中拼接字符串一样！",[192,72586,72587,72590,72593],{},[195,72588,72589],{},"小括号为空则逗号分开",[195,72591,72592],{},"小括号为空字符串 ''，则元素之间没有分隔符",[195,72594,72595],{},"小括号用啥符号就用进行分割",[35,72597,72599],{"id":72598},"_358-学生就业统计表本地存储","3.5.8 学生就业统计表本地存储",[192,72601,72602,72605,72608,72611,72614],{},[195,72603,72604],{},"记住本地时间获取快速方式：new Date().toDateString()",[195,72606,72607],{},"尽量减少DOM操作，用好map+join的渲染方式",[195,72609,72610],{},"输入内容为空不执行，可以使用！,获取输入的内容，!输入的内容 如果输入了字，那这个字符串的非为假，放到if语句中就不执行，如果没有输入字，那么输入的字符串的非为真，就去执行if语句",[195,72612,72613],{},"return可以实现函数的结束",[195,72615,72616],{},"禁止跳转是 preventDefault() 不要忘记",[316,72618,72620],{"className":51355,"code":72619,"language":51357,"meta":50,"style":50},"\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",[269,72621,72622,72632,72646,72650,72658,72672,72692,72704,72712,72718,72728,72738,72742,72746,72752,72762,72774,72778,72782,72789,72801,72815,72825,72829,72833,72840,72847,72854,72866,72878,72888,72900,72904,72908,72915,72922,72934,72946,72956,72968,72998,73002,73006,73013,73025,73037,73061,73071,73081,73085,73089,73097,73108,73120,73132,73144,73161,73173,73185,73189,73193,73200,73212,73224,73236,73247,73265,73278,73290,73314,73325,73329,73333,73341,73351,73355,73359,73365,73377,73388,73398,73402,73406,73412,73434,73438,73442,73448,73454,73466,73476,73488,73518,73531,73548,73552,73556,73567,73589,73599,73603,73607,73620,73630,73642,73654,73666,73678,73688,73698,73708,73719,73732,73736,73744,73752,73756,73764,73777,73797,73830,73863,73896,73922,73940,73958,73966,73992,74010,74028,74046,74064,74082,74090,74098,74116,74124,74153,74161,74169,74177,74190,74202,74214,74226,74238,74250,74263,74275,74283,74291,74299,74304,74309,74313,74317,74321,74325,74329,74333,74338,74343,74348,74353,74361,74369,74377,74382,74387,74392,74397,74402,74407,74412,74417,74422,74427,74432,74437,74442,74447,74451,74456,74461,74471,74480,74484,74489,74498,74514,74556,74596,74635,74700,74708,74712,74717,74735,74743,74748,74753,74783,74789,74794,74807,74819,74831,74843,74855,74867,74879,74883,74893,74897,74902,74907,74911,74920,74924,74929,74934,74953,74958,74978,74982,74987,74991,74996,75014,75032,75050,75069,75088,75107,75112,75118,75139,75145,75154,75160,75166,75172,75199,75212,75217,75227,75233,75239,75245,75251,75256,75262,75268,75274,75280,75313,75318,75323,75328,75333,75339,75345,75351,75362,75367,75373,75380,75394,75400,75424,75429,75434,75440,75446,75467,75473,75486,75492,75498,75504,75510,75515,75521,75527,75533,75551,75565,75571,75579,75585,75607,75612,75617,75622,75627,75632,75641,75650,75655],{"__ignoreMap":50},[324,72623,72624,72626,72628,72630],{"class":326,"line":327},[324,72625,52019],{"class":867},[324,72627,52023],{"class":52022},[324,72629,52026],{"class":734},[324,72631,52029],{"class":867},[324,72633,72634,72636,72638,72640,72642,72644],{"class":326,"line":203},[324,72635,1774],{"class":867},[324,72637,51357],{"class":52022},[324,72639,52038],{"class":734},[324,72641,913],{"class":867},[324,72643,52043],{"class":738},[324,72645,52029],{"class":867},[324,72647,72648],{"class":326,"line":338},[324,72649,488],{"emptyLinePlaceholder":487},[324,72651,72652,72654,72656],{"class":326,"line":344},[324,72653,1774],{"class":867},[324,72655,52056],{"class":52022},[324,72657,52029],{"class":867},[324,72659,72660,72662,72664,72666,72668,72670],{"class":326,"line":484},[324,72661,52866],{"class":867},[324,72663,52066],{"class":52022},[324,72665,52069],{"class":734},[324,72667,913],{"class":867},[324,72669,52074],{"class":738},[324,72671,52029],{"class":867},[324,72673,72674,72676,72678,72680,72682,72684,72686,72688,72690],{"class":326,"line":491},[324,72675,52866],{"class":867},[324,72677,52066],{"class":52022},[324,72679,15649],{"class":734},[324,72681,913],{"class":867},[324,72683,52113],{"class":738},[324,72685,52093],{"class":734},[324,72687,913],{"class":867},[324,72689,52120],{"class":738},[324,72691,52029],{"class":867},[324,72693,72694,72696,72698,72700,72702],{"class":326,"line":496},[324,72695,52866],{"class":867},[324,72697,52129],{"class":52022},[324,72699,52132],{"class":867},[324,72701,52129],{"class":52022},[324,72703,52029],{"class":867},[324,72705,72706,72708,72710],{"class":326,"line":502},[324,72707,52866],{"class":867},[324,72709,775],{"class":52022},[324,72711,52029],{"class":867},[324,72713,72714,72716],{"class":326,"line":508},[324,72715,7132],{"class":52022},[324,72717,16301],{"class":867},[324,72719,72720,72722,72724,72726],{"class":326,"line":514},[324,72721,55417],{"class":916},[324,72723,52159],{"class":867},[324,72725,1056],{"class":916},[324,72727,2025],{"class":867},[324,72729,72730,72732,72734,72736],{"class":326,"line":2343},[324,72731,55428],{"class":916},[324,72733,52159],{"class":867},[324,72735,1056],{"class":916},[324,72737,2025],{"class":867},[324,72739,72740],{"class":326,"line":2348},[324,72741,2917],{"class":867},[324,72743,72744],{"class":326,"line":2354},[324,72745,488],{"emptyLinePlaceholder":487},[324,72747,72748,72750],{"class":326,"line":2359},[324,72749,58001],{"class":52022},[324,72751,16301],{"class":867},[324,72753,72754,72756,72758,72760],{"class":326,"line":2373},[324,72755,58008],{"class":916},[324,72757,52159],{"class":867},[324,72759,52314],{"class":916},[324,72761,2025],{"class":867},[324,72763,72764,72766,72768,72770,72772],{"class":326,"line":2378},[324,72765,62799],{"class":916},[324,72767,52159],{"class":867},[324,72769,1564],{"class":916},[324,72771,52214],{"class":863},[324,72773,2025],{"class":867},[324,72775,72776],{"class":326,"line":2384},[324,72777,2917],{"class":867},[324,72779,72780],{"class":326,"line":2405},[324,72781,488],{"emptyLinePlaceholder":487},[324,72783,72784,72787],{"class":326,"line":2410},[324,72785,72786],{"class":734},"    .info",[324,72788,16301],{"class":867},[324,72790,72791,72793,72795,72797,72799],{"class":326,"line":2424},[324,72792,55493],{"class":916},[324,72794,52159],{"class":867},[324,72796,52211],{"class":916},[324,72798,52214],{"class":863},[324,72800,2025],{"class":867},[324,72802,72803,72805,72807,72809,72811,72813],{"class":326,"line":2429},[324,72804,55428],{"class":916},[324,72806,52159],{"class":867},[324,72808,1310],{"class":916},[324,72810,52214],{"class":863},[324,72812,52278],{"class":916},[324,72814,2025],{"class":867},[324,72816,72817,72819,72821,72823],{"class":326,"line":2458},[324,72818,58008],{"class":916},[324,72820,52159],{"class":867},[324,72822,52314],{"class":916},[324,72824,2025],{"class":867},[324,72826,72827],{"class":326,"line":2463},[324,72828,2917],{"class":867},[324,72830,72831],{"class":326,"line":2480},[324,72832,488],{"emptyLinePlaceholder":487},[324,72834,72835,72838],{"class":326,"line":2485},[324,72836,72837],{"class":734},"    .uname",[324,72839,32188],{"class":867},[324,72841,72842,72845],{"class":326,"line":2490},[324,72843,72844],{"class":734},"    .age",[324,72846,32188],{"class":867},[324,72848,72849,72852],{"class":326,"line":2495},[324,72850,72851],{"class":734},"    .salary",[324,72853,16301],{"class":867},[324,72855,72856,72858,72860,72862,72864],{"class":326,"line":2509},[324,72857,55493],{"class":916},[324,72859,52159],{"class":867},[324,72861,1175],{"class":916},[324,72863,52214],{"class":863},[324,72865,2025],{"class":867},[324,72867,72868,72870,72872,72874,72876],{"class":326,"line":2514},[324,72869,55507],{"class":916},[324,72871,52159],{"class":867},[324,72873,1564],{"class":916},[324,72875,52214],{"class":863},[324,72877,2025],{"class":867},[324,72879,72880,72882,72884,72886],{"class":326,"line":3306},[324,72881,62502],{"class":916},[324,72883,52159],{"class":867},[324,72885,55459],{"class":916},[324,72887,2025],{"class":867},[324,72889,72890,72892,72894,72896,72898],{"class":326,"line":3320},[324,72891,62472],{"class":916},[324,72893,52159],{"class":867},[324,72895,1439],{"class":916},[324,72897,52214],{"class":863},[324,72899,2025],{"class":867},[324,72901,72902],{"class":326,"line":3328},[324,72903,2917],{"class":867},[324,72905,72906],{"class":326,"line":3333},[324,72907,488],{"emptyLinePlaceholder":487},[324,72909,72910,72913],{"class":326,"line":3339},[324,72911,72912],{"class":734},"    .gender",[324,72914,32188],{"class":867},[324,72916,72917,72920],{"class":326,"line":3345},[324,72918,72919],{"class":734},"    .city",[324,72921,16301],{"class":867},[324,72923,72924,72926,72928,72930,72932],{"class":326,"line":3350},[324,72925,55493],{"class":916},[324,72927,52159],{"class":867},[324,72929,1175],{"class":916},[324,72931,52214],{"class":863},[324,72933,2025],{"class":867},[324,72935,72936,72938,72940,72942,72944],{"class":326,"line":8677},[324,72937,55507],{"class":916},[324,72939,52159],{"class":867},[324,72941,1689],{"class":916},[324,72943,52214],{"class":863},[324,72945,2025],{"class":867},[324,72947,72948,72950,72952,72954],{"class":326,"line":8701},[324,72949,62502],{"class":916},[324,72951,52159],{"class":867},[324,72953,55459],{"class":916},[324,72955,2025],{"class":867},[324,72957,72958,72960,72962,72964,72966],{"class":326,"line":8706},[324,72959,62472],{"class":916},[324,72961,52159],{"class":867},[324,72963,1439],{"class":916},[324,72965,52214],{"class":863},[324,72967,2025],{"class":867},[324,72969,72970,72972,72974,72976,72978,72980,72983,72985,72987,72989,72992,72994,72996],{"class":326,"line":8712},[324,72971,62699],{"class":916},[324,72973,52159],{"class":867},[324,72975,1082],{"class":916},[324,72977,52214],{"class":863},[324,72979,52243],{"class":916},[324,72981,72982],{"class":916}," rgb",[324,72984,868],{"class":867},[324,72986,2453],{"class":916},[324,72988,13164],{"class":867},[324,72990,72991],{"class":916},"197",[324,72993,13164],{"class":867},[324,72995,72991],{"class":916},[324,72997,3448],{"class":867},[324,72999,73000],{"class":326,"line":8739},[324,73001,2917],{"class":867},[324,73003,73004],{"class":326,"line":8744},[324,73005,488],{"emptyLinePlaceholder":487},[324,73007,73008,73011],{"class":326,"line":8750},[324,73009,73010],{"class":52022},"    button",[324,73012,16301],{"class":867},[324,73014,73015,73017,73019,73021,73023],{"class":326,"line":8762},[324,73016,55507],{"class":916},[324,73018,52159],{"class":867},[324,73020,1689],{"class":916},[324,73022,52214],{"class":863},[324,73024,2025],{"class":867},[324,73026,73027,73029,73031,73033,73035],{"class":326,"line":8774},[324,73028,55493],{"class":916},[324,73030,52159],{"class":867},[324,73032,1348],{"class":916},[324,73034,52214],{"class":863},[324,73036,2025],{"class":867},[324,73038,73039,73041,73043,73046,73048,73050,73052,73055,73057,73059],{"class":326,"line":8786},[324,73040,55606],{"class":916},[324,73042,52159],{"class":867},[324,73044,73045],{"class":916},"rgb",[324,73047,868],{"class":867},[324,73049,1833],{"class":916},[324,73051,13164],{"class":867},[324,73053,73054],{"class":916},"187",[324,73056,13164],{"class":867},[324,73058,1163],{"class":916},[324,73060,3448],{"class":867},[324,73062,73063,73065,73067,73069],{"class":326,"line":10445},[324,73064,58138],{"class":916},[324,73066,52159],{"class":867},[324,73068,61564],{"class":916},[324,73070,2025],{"class":867},[324,73072,73073,73075,73077,73079],{"class":326,"line":10470},[324,73074,62699],{"class":916},[324,73076,52159],{"class":867},[324,73078,1056],{"class":916},[324,73080,2025],{"class":867},[324,73082,73083],{"class":326,"line":10493},[324,73084,2917],{"class":867},[324,73086,73087],{"class":326,"line":10517},[324,73088,488],{"emptyLinePlaceholder":487},[324,73090,73091,73093,73095],{"class":326,"line":10522},[324,73092,73010],{"class":52022},[324,73094,52410],{"class":52022},[324,73096,16301],{"class":867},[324,73098,73099,73101,73103,73106],{"class":326,"line":10527},[324,73100,55731],{"class":916},[324,73102,52159],{"class":867},[324,73104,73105],{"class":916},"inline-block",[324,73107,2025],{"class":867},[324,73109,73110,73112,73114,73116,73118],{"class":326,"line":10532},[324,73111,55493],{"class":916},[324,73113,52159],{"class":867},[324,73115,1310],{"class":916},[324,73117,52214],{"class":863},[324,73119,2025],{"class":867},[324,73121,73122,73124,73126,73128,73130],{"class":326,"line":10541},[324,73123,55507],{"class":916},[324,73125,52159],{"class":867},[324,73127,1310],{"class":916},[324,73129,52214],{"class":863},[324,73131,2025],{"class":867},[324,73133,73134,73136,73138,73140,73142],{"class":326,"line":10546},[324,73135,58081],{"class":916},[324,73137,52159],{"class":867},[324,73139,1336],{"class":916},[324,73141,52214],{"class":863},[324,73143,2025],{"class":867},[324,73145,73146,73148,73150,73152,73154,73156,73159],{"class":326,"line":10552},[324,73147,62699],{"class":916},[324,73149,52159],{"class":867},[324,73151,1082],{"class":916},[324,73153,52214],{"class":863},[324,73155,52243],{"class":916},[324,73157,73158],{"class":916}," #fff",[324,73160,2025],{"class":867},[324,73162,73163,73165,73167,73169,73171],{"class":326,"line":10573},[324,73164,55856],{"class":916},[324,73166,52159],{"class":867},[324,73168,1183],{"class":916},[324,73170,52214],{"class":863},[324,73172,2025],{"class":867},[324,73174,73175,73177,73179,73181,73183],{"class":326,"line":10579},[324,73176,62472],{"class":916},[324,73178,52159],{"class":867},[324,73180,1082],{"class":916},[324,73182,52214],{"class":863},[324,73184,2025],{"class":867},[324,73186,73187],{"class":326,"line":10593},[324,73188,2917],{"class":867},[324,73190,73191],{"class":326,"line":10599},[324,73192,488],{"emptyLinePlaceholder":487},[324,73194,73195,73198],{"class":326,"line":10626},[324,73196,73197],{"class":734},"    .total",[324,73199,16301],{"class":867},[324,73201,73202,73204,73206,73208,73210],{"class":326,"line":10635},[324,73203,55493],{"class":916},[324,73205,52159],{"class":867},[324,73207,62351],{"class":916},[324,73209,52214],{"class":863},[324,73211,2025],{"class":867},[324,73213,73214,73216,73218,73220,73222],{"class":326,"line":10641},[324,73215,55507],{"class":916},[324,73217,52159],{"class":867},[324,73219,1265],{"class":916},[324,73221,52214],{"class":863},[324,73223,2025],{"class":867},[324,73225,73226,73228,73230,73232,73234],{"class":326,"line":10649},[324,73227,58081],{"class":916},[324,73229,52159],{"class":867},[324,73231,1265],{"class":916},[324,73233,52214],{"class":863},[324,73235,2025],{"class":867},[324,73237,73238,73240,73242,73245],{"class":326,"line":10654},[324,73239,58008],{"class":916},[324,73241,52159],{"class":867},[324,73243,73244],{"class":916},"right",[324,73246,2025],{"class":867},[324,73248,73249,73251,73253,73255,73257,73259,73261,73263],{"class":326,"line":17333},[324,73250,55428],{"class":916},[324,73252,52159],{"class":867},[324,73254,1265],{"class":916},[324,73256,52214],{"class":863},[324,73258,52278],{"class":916},[324,73260,2768],{"class":916},[324,73262,52214],{"class":863},[324,73264,2025],{"class":867},[324,73266,73267,73270,73272,73274,73276],{"class":326,"line":17339},[324,73268,73269],{"class":916},"      padding-right",[324,73271,52159],{"class":867},[324,73273,1310],{"class":916},[324,73275,52214],{"class":863},[324,73277,2025],{"class":867},[324,73279,73280,73282,73284,73286,73288],{"class":326,"line":17362},[324,73281,55644],{"class":916},[324,73283,52159],{"class":867},[324,73285,1387],{"class":916},[324,73287,52214],{"class":863},[324,73289,2025],{"class":867},[324,73291,73292,73294,73296,73298,73300,73303,73305,73308,73310,73312],{"class":326,"line":17368},[324,73293,55606],{"class":916},[324,73295,52159],{"class":867},[324,73297,73045],{"class":916},[324,73299,868],{"class":867},[324,73301,73302],{"class":916},"237",[324,73304,13164],{"class":867},[324,73306,73307],{"class":916},"235",[324,73309,13164],{"class":867},[324,73311,73307],{"class":916},[324,73313,3448],{"class":867},[324,73315,73316,73319,73321,73323],{"class":326,"line":17391},[324,73317,73318],{"class":916},"      box-sizing",[324,73320,52159],{"class":867},[324,73322,61227],{"class":916},[324,73324,2025],{"class":867},[324,73326,73327],{"class":326,"line":17405},[324,73328,2917],{"class":867},[324,73330,73331],{"class":326,"line":17425},[324,73332,488],{"emptyLinePlaceholder":487},[324,73334,73335,73337,73339],{"class":326,"line":17431},[324,73336,73197],{"class":734},[324,73338,52410],{"class":52022},[324,73340,16301],{"class":867},[324,73342,73343,73345,73347,73349],{"class":326,"line":17442},[324,73344,58138],{"class":916},[324,73346,52159],{"class":867},[324,73348,58143],{"class":916},[324,73350,2025],{"class":867},[324,73352,73353],{"class":326,"line":17465},[324,73354,2917],{"class":867},[324,73356,73357],{"class":326,"line":17487},[324,73358,488],{"emptyLinePlaceholder":487},[324,73360,73361,73363],{"class":326,"line":17492},[324,73362,65745],{"class":52022},[324,73364,16301],{"class":867},[324,73366,73367,73369,73371,73373,73375],{"class":326,"line":17498},[324,73368,55493],{"class":916},[324,73370,52159],{"class":867},[324,73372,62351],{"class":916},[324,73374,52214],{"class":863},[324,73376,2025],{"class":867},[324,73378,73379,73381,73383,73386],{"class":326,"line":17512},[324,73380,55428],{"class":916},[324,73382,52159],{"class":867},[324,73384,73385],{"class":916},"auto",[324,73387,2025],{"class":867},[324,73389,73390,73392,73394,73396],{"class":326,"line":17525},[324,73391,65752],{"class":916},[324,73393,52159],{"class":867},[324,73395,65757],{"class":916},[324,73397,2025],{"class":867},[324,73399,73400],{"class":326,"line":17530},[324,73401,2917],{"class":867},[324,73403,73404],{"class":326,"line":17544},[324,73405,488],{"emptyLinePlaceholder":487},[324,73407,73408,73410],{"class":326,"line":17549},[324,73409,65837],{"class":52022},[324,73411,16301],{"class":867},[324,73413,73414,73416,73418,73420,73422,73424,73426,73428,73430,73432],{"class":326,"line":17555},[324,73415,55606],{"class":916},[324,73417,52159],{"class":867},[324,73419,73045],{"class":916},[324,73421,868],{"class":867},[324,73423,73302],{"class":916},[324,73425,13164],{"class":867},[324,73427,73307],{"class":916},[324,73429,13164],{"class":867},[324,73431,73307],{"class":916},[324,73433,3448],{"class":867},[324,73435,73436],{"class":326,"line":17560},[324,73437,2917],{"class":867},[324,73439,73440],{"class":326,"line":17574},[324,73441,488],{"emptyLinePlaceholder":487},[324,73443,73444,73446],{"class":326,"line":17579},[324,73445,65837],{"class":52022},[324,73447,32188],{"class":867},[324,73449,73450,73452],{"class":326,"line":17584},[324,73451,65903],{"class":52022},[324,73453,16301],{"class":867},[324,73455,73456,73458,73460,73462,73464],{"class":326,"line":17598},[324,73457,55507],{"class":916},[324,73459,52159],{"class":867},[324,73461,1137],{"class":916},[324,73463,52214],{"class":863},[324,73465,2025],{"class":867},[324,73467,73468,73470,73472,73474],{"class":326,"line":17610},[324,73469,58008],{"class":916},[324,73471,52159],{"class":867},[324,73473,24463],{"class":916},[324,73475,2025],{"class":867},[324,73477,73478,73480,73482,73484,73486],{"class":326,"line":17615},[324,73479,55644],{"class":916},[324,73481,52159],{"class":867},[324,73483,1413],{"class":916},[324,73485,52214],{"class":863},[324,73487,2025],{"class":867},[324,73489,73490,73492,73494,73496,73498,73500,73502,73504,73507,73509,73512,73514,73516],{"class":326,"line":17628},[324,73491,62699],{"class":916},[324,73493,52159],{"class":867},[324,73495,1082],{"class":916},[324,73497,52214],{"class":863},[324,73499,52243],{"class":916},[324,73501,72982],{"class":916},[324,73503,868],{"class":867},[324,73505,73506],{"class":916},"228",[324,73508,13164],{"class":867},[324,73510,73511],{"class":916},"225",[324,73513,13164],{"class":867},[324,73515,73511],{"class":916},[324,73517,3448],{"class":867},[324,73519,73520,73523,73525,73527,73529],{"class":326,"line":17633},[324,73521,73522],{"class":916},"      padding-left",[324,73524,52159],{"class":867},[324,73526,1183],{"class":916},[324,73528,52214],{"class":863},[324,73530,2025],{"class":867},[324,73532,73533,73535,73537,73539,73542,73544,73546],{"class":326,"line":17638},[324,73534,62582],{"class":916},[324,73536,52159],{"class":867},[324,73538,28843],{"class":916},[324,73540,73541],{"class":916}," linear",[324,73543,62589],{"class":916},[324,73545,1559],{"class":863},[324,73547,2025],{"class":867},[324,73549,73550],{"class":326,"line":17643},[324,73551,2917],{"class":867},[324,73553,73554],{"class":326,"line":17656},[324,73555,488],{"emptyLinePlaceholder":487},[324,73557,73558,73561,73563,73565],{"class":326,"line":17661},[324,73559,73560],{"class":52022},"    tbody",[324,73562,70866],{"class":52022},[324,73564,61662],{"class":734},[324,73566,16301],{"class":867},[324,73568,73569,73571,73573,73575,73577,73579,73581,73583,73585,73587],{"class":326,"line":33355},[324,73570,55606],{"class":916},[324,73572,52159],{"class":867},[324,73574,73045],{"class":916},[324,73576,868],{"class":867},[324,73578,73302],{"class":916},[324,73580,13164],{"class":867},[324,73582,73307],{"class":916},[324,73584,13164],{"class":867},[324,73586,73307],{"class":916},[324,73588,3448],{"class":867},[324,73590,73591,73593,73595,73597],{"class":326,"line":33361},[324,73592,62747],{"class":916},[324,73594,52159],{"class":867},[324,73596,62752],{"class":916},[324,73598,2025],{"class":867},[324,73600,73601],{"class":326,"line":33367},[324,73602,2917],{"class":867},[324,73604,73605],{"class":326,"line":33373},[324,73606,488],{"emptyLinePlaceholder":487},[324,73608,73609,73611,73613,73616,73618],{"class":326,"line":33379},[324,73610,73560],{"class":52022},[324,73612,70866],{"class":52022},[324,73614,73615],{"class":52022}," td",[324,73617,2130],{"class":52022},[324,73619,16301],{"class":867},[324,73621,73622,73624,73626,73628],{"class":326,"line":33390},[324,73623,55731],{"class":916},[324,73625,52159],{"class":867},[324,73627,61591],{"class":916},[324,73629,2025],{"class":867},[324,73631,73632,73634,73636,73638,73640],{"class":326,"line":33396},[324,73633,55493],{"class":916},[324,73635,52159],{"class":867},[324,73637,1771],{"class":916},[324,73639,52214],{"class":863},[324,73641,2025],{"class":867},[324,73643,73644,73646,73648,73650,73652],{"class":326,"line":33416},[324,73645,55507],{"class":916},[324,73647,52159],{"class":867},[324,73649,1689],{"class":916},[324,73651,52214],{"class":863},[324,73653,2025],{"class":867},[324,73655,73656,73658,73660,73662,73664],{"class":326,"line":33422},[324,73657,58081],{"class":916},[324,73659,52159],{"class":867},[324,73661,1689],{"class":916},[324,73663,52214],{"class":863},[324,73665,2025],{"class":867},[324,73667,73668,73670,73672,73674,73676],{"class":326,"line":33433},[324,73669,62799],{"class":916},[324,73671,52159],{"class":867},[324,73673,944],{"class":916},[324,73675,52214],{"class":863},[324,73677,2025],{"class":867},[324,73679,73680,73682,73684,73686],{"class":326,"line":33439},[324,73681,58138],{"class":916},[324,73683,52159],{"class":867},[324,73685,61564],{"class":916},[324,73687,2025],{"class":867},[324,73689,73690,73692,73694,73696],{"class":326,"line":33445},[324,73691,58008],{"class":916},[324,73693,52159],{"class":867},[324,73695,52314],{"class":916},[324,73697,2025],{"class":867},[324,73699,73700,73702,73704,73706],{"class":326,"line":33451},[324,73701,64692],{"class":916},[324,73703,52159],{"class":867},[324,73705,55459],{"class":916},[324,73707,2025],{"class":867},[324,73709,73710,73712,73714,73717],{"class":326,"line":33457},[324,73711,55606],{"class":916},[324,73713,52159],{"class":867},[324,73715,73716],{"class":916},"orange",[324,73718,2025],{"class":867},[324,73720,73721,73723,73725,73728,73730],{"class":326,"line":33463},[324,73722,55856],{"class":916},[324,73724,52159],{"class":867},[324,73726,73727],{"class":916},"12.5",[324,73729,52214],{"class":863},[324,73731,2025],{"class":867},[324,73733,73734],{"class":326,"line":33469},[324,73735,2917],{"class":867},[324,73737,73738,73740,73742],{"class":326,"line":33475},[324,73739,53139],{"class":867},[324,73741,775],{"class":52022},[324,73743,52029],{"class":867},[324,73745,73746,73748,73750],{"class":326,"line":33495},[324,73747,52507],{"class":867},[324,73749,52056],{"class":52022},[324,73751,52029],{"class":867},[324,73753,73754],{"class":326,"line":33501},[324,73755,488],{"emptyLinePlaceholder":487},[324,73757,73758,73760,73762],{"class":326,"line":33517},[324,73759,1774],{"class":867},[324,73761,52522],{"class":52022},[324,73763,52029],{"class":867},[324,73765,73766,73768,73770,73773,73775],{"class":326,"line":33523},[324,73767,52866],{"class":867},[324,73769,14],{"class":52022},[324,73771,73772],{"class":867},">学生就业统计表\u003C\u002F",[324,73774,14],{"class":52022},[324,73776,52029],{"class":867},[324,73778,73779,73781,73783,73785,73787,73789,73791,73793,73795],{"class":326,"line":33537},[324,73780,52866],{"class":867},[324,73782,67347],{"class":52022},[324,73784,54208],{"class":734},[324,73786,913],{"class":867},[324,73788,63386],{"class":738},[324,73790,69792],{"class":734},[324,73792,913],{"class":867},[324,73794,32498],{"class":738},[324,73796,52029],{"class":867},[324,73798,73799,73801,73803,73805,73807,73809,73811,73813,73815,73817,73819,73822,73824,73826,73828],{"class":326,"line":33543},[324,73800,52063],{"class":867},[324,73802,54543],{"class":52022},[324,73804,54546],{"class":734},[324,73806,913],{"class":867},[324,73808,63421],{"class":738},[324,73810,15649],{"class":734},[324,73812,913],{"class":867},[324,73814,69818],{"class":738},[324,73816,61742],{"class":734},[324,73818,913],{"class":867},[324,73820,73821],{"class":738},"\"姓名\"",[324,73823,54208],{"class":734},[324,73825,913],{"class":867},[324,73827,69818],{"class":738},[324,73829,52029],{"class":867},[324,73831,73832,73834,73836,73838,73840,73842,73844,73846,73848,73850,73852,73855,73857,73859,73861],{"class":326,"line":33558},[324,73833,52063],{"class":867},[324,73835,54543],{"class":52022},[324,73837,54546],{"class":734},[324,73839,913],{"class":867},[324,73841,63421],{"class":738},[324,73843,15649],{"class":734},[324,73845,913],{"class":867},[324,73847,69846],{"class":738},[324,73849,61742],{"class":734},[324,73851,913],{"class":867},[324,73853,73854],{"class":738},"\"年龄\"",[324,73856,54208],{"class":734},[324,73858,913],{"class":867},[324,73860,69846],{"class":738},[324,73862,52029],{"class":867},[324,73864,73865,73867,73869,73871,73873,73875,73877,73879,73881,73883,73885,73888,73890,73892,73894],{"class":326,"line":33564},[324,73866,52063],{"class":867},[324,73868,54543],{"class":52022},[324,73870,54546],{"class":734},[324,73872,913],{"class":867},[324,73874,63421],{"class":738},[324,73876,15649],{"class":734},[324,73878,913],{"class":867},[324,73880,69948],{"class":738},[324,73882,61742],{"class":734},[324,73884,913],{"class":867},[324,73886,73887],{"class":738},"\"薪资\"",[324,73889,54208],{"class":734},[324,73891,913],{"class":867},[324,73893,69948],{"class":738},[324,73895,52029],{"class":867},[324,73897,73898,73900,73902,73904,73906,73908,73910,73912,73914,73916,73918,73920],{"class":326,"line":33573},[324,73899,52063],{"class":867},[324,73901,69866],{"class":52022},[324,73903,15649],{"class":734},[324,73905,913],{"class":867},[324,73907,69873],{"class":738},[324,73909,15688],{"class":734},[324,73911,913],{"class":867},[324,73913,8381],{"class":738},[324,73915,54208],{"class":734},[324,73917,913],{"class":867},[324,73919,69873],{"class":738},[324,73921,52029],{"class":867},[324,73923,73924,73926,73928,73930,73932,73934,73936,73938],{"class":326,"line":33579},[324,73925,55956],{"class":867},[324,73927,69888],{"class":52022},[324,73929,67373],{"class":734},[324,73931,913],{"class":867},[324,73933,10690],{"class":738},[324,73935,69897],{"class":867},[324,73937,69888],{"class":52022},[324,73939,52029],{"class":867},[324,73941,73942,73944,73946,73948,73950,73952,73954,73956],{"class":326,"line":33588},[324,73943,55956],{"class":867},[324,73945,69888],{"class":52022},[324,73947,67373],{"class":734},[324,73949,913],{"class":867},[324,73951,10759],{"class":738},[324,73953,69916],{"class":867},[324,73955,69888],{"class":52022},[324,73957,52029],{"class":867},[324,73959,73960,73962,73964],{"class":326,"line":33594},[324,73961,52498],{"class":867},[324,73963,69866],{"class":52022},[324,73965,52029],{"class":867},[324,73967,73968,73970,73972,73974,73976,73978,73980,73982,73984,73986,73988,73990],{"class":326,"line":33600},[324,73969,52063],{"class":867},[324,73971,69866],{"class":52022},[324,73973,15649],{"class":734},[324,73975,913],{"class":867},[324,73977,69970],{"class":738},[324,73979,15688],{"class":734},[324,73981,913],{"class":867},[324,73983,8381],{"class":738},[324,73985,54208],{"class":734},[324,73987,913],{"class":867},[324,73989,69970],{"class":738},[324,73991,52029],{"class":867},[324,73993,73994,73996,73998,74000,74002,74004,74006,74008],{"class":326,"line":33609},[324,73995,55956],{"class":867},[324,73997,69888],{"class":52022},[324,73999,67373],{"class":734},[324,74001,913],{"class":867},[324,74003,69991],{"class":738},[324,74005,69994],{"class":867},[324,74007,69888],{"class":52022},[324,74009,52029],{"class":867},[324,74011,74012,74014,74016,74018,74020,74022,74024,74026],{"class":326,"line":33615},[324,74013,55956],{"class":867},[324,74015,69888],{"class":52022},[324,74017,67373],{"class":734},[324,74019,913],{"class":867},[324,74021,70011],{"class":738},[324,74023,70014],{"class":867},[324,74025,69888],{"class":52022},[324,74027,52029],{"class":867},[324,74029,74030,74032,74034,74036,74038,74040,74042,74044],{"class":326,"line":33626},[324,74031,55956],{"class":867},[324,74033,69888],{"class":52022},[324,74035,67373],{"class":734},[324,74037,913],{"class":867},[324,74039,70031],{"class":738},[324,74041,70034],{"class":867},[324,74043,69888],{"class":52022},[324,74045,52029],{"class":867},[324,74047,74048,74050,74052,74054,74056,74058,74060,74062],{"class":326,"line":33632},[324,74049,55956],{"class":867},[324,74051,69888],{"class":52022},[324,74053,67373],{"class":734},[324,74055,913],{"class":867},[324,74057,70051],{"class":738},[324,74059,70054],{"class":867},[324,74061,69888],{"class":52022},[324,74063,52029],{"class":867},[324,74065,74066,74068,74070,74072,74074,74076,74078,74080],{"class":326,"line":33651},[324,74067,55956],{"class":867},[324,74069,69888],{"class":52022},[324,74071,67373],{"class":734},[324,74073,913],{"class":867},[324,74075,70071],{"class":738},[324,74077,70074],{"class":867},[324,74079,69888],{"class":52022},[324,74081,52029],{"class":867},[324,74083,74084,74086,74088],{"class":326,"line":33657},[324,74085,52498],{"class":867},[324,74087,69866],{"class":52022},[324,74089,52029],{"class":867},[324,74091,74092,74094,74096],{"class":326,"line":33668},[324,74093,52063],{"class":867},[324,74095,54609],{"class":52022},[324,74097,52029],{"class":867},[324,74099,74100,74102,74104,74107,74109,74112,74114],{"class":326,"line":33674},[324,74101,55956],{"class":867},[324,74103,324],{"class":52022},[324,74105,74106],{"class":867},">+\u003C\u002F",[324,74108,324],{"class":52022},[324,74110,74111],{"class":867},">添加\u003C\u002F",[324,74113,54609],{"class":52022},[324,74115,52029],{"class":867},[324,74117,74118,74120,74122],{"class":326,"line":33694},[324,74119,53139],{"class":867},[324,74121,67347],{"class":52022},[324,74123,52029],{"class":867},[324,74125,74126,74128,74130,74132,74134,74136,74139,74141,74144,74146,74149,74151],{"class":326,"line":33710},[324,74127,52866],{"class":867},[324,74129,52333],{"class":52022},[324,74131,54208],{"class":734},[324,74133,913],{"class":867},[324,74135,63302],{"class":738},[324,74137,74138],{"class":867},">共有数据 \u003C",[324,74140,324],{"class":52022},[324,74142,74143],{"class":867},">0\u003C\u002F",[324,74145,324],{"class":52022},[324,74147,74148],{"class":867},"> 条\u003C\u002F",[324,74150,52333],{"class":52022},[324,74152,52029],{"class":867},[324,74154,74155,74157,74159],{"class":326,"line":33716},[324,74156,52866],{"class":867},[324,74158,1003],{"class":52022},[324,74160,52029],{"class":867},[324,74162,74163,74165,74167],{"class":326,"line":33730},[324,74164,52063],{"class":867},[324,74166,1006],{"class":52022},[324,74168,52029],{"class":867},[324,74170,74171,74173,74175],{"class":326,"line":33736},[324,74172,55956],{"class":867},[324,74174,1009],{"class":52022},[324,74176,52029],{"class":867},[324,74178,74179,74181,74183,74186,74188],{"class":326,"line":33742},[324,74180,56024],{"class":867},[324,74182,1012],{"class":52022},[324,74184,74185],{"class":867},">ID\u003C\u002F",[324,74187,1012],{"class":52022},[324,74189,52029],{"class":867},[324,74191,74192,74194,74196,74198,74200],{"class":326,"line":33753},[324,74193,56024],{"class":867},[324,74195,1012],{"class":52022},[324,74197,70177],{"class":867},[324,74199,1012],{"class":52022},[324,74201,52029],{"class":867},[324,74203,74204,74206,74208,74210,74212],{"class":326,"line":33759},[324,74205,56024],{"class":867},[324,74207,1012],{"class":52022},[324,74209,70190],{"class":867},[324,74211,1012],{"class":52022},[324,74213,52029],{"class":867},[324,74215,74216,74218,74220,74222,74224],{"class":326,"line":33765},[324,74217,56024],{"class":867},[324,74219,1012],{"class":52022},[324,74221,70203],{"class":867},[324,74223,1012],{"class":52022},[324,74225,52029],{"class":867},[324,74227,74228,74230,74232,74234,74236],{"class":326,"line":33775},[324,74229,56024],{"class":867},[324,74231,1012],{"class":52022},[324,74233,70216],{"class":867},[324,74235,1012],{"class":52022},[324,74237,52029],{"class":867},[324,74239,74240,74242,74244,74246,74248],{"class":326,"line":33781},[324,74241,56024],{"class":867},[324,74243,1012],{"class":52022},[324,74245,70229],{"class":867},[324,74247,1012],{"class":52022},[324,74249,52029],{"class":867},[324,74251,74252,74254,74256,74259,74261],{"class":326,"line":33792},[324,74253,56024],{"class":867},[324,74255,1012],{"class":52022},[324,74257,74258],{"class":867},">录入时间\u003C\u002F",[324,74260,1012],{"class":52022},[324,74262,52029],{"class":867},[324,74264,74265,74267,74269,74271,74273],{"class":326,"line":33798},[324,74266,56024],{"class":867},[324,74268,1012],{"class":52022},[324,74270,70242],{"class":867},[324,74272,1012],{"class":52022},[324,74274,52029],{"class":867},[324,74276,74277,74279,74281],{"class":326,"line":33808},[324,74278,56129],{"class":867},[324,74280,1009],{"class":52022},[324,74282,52029],{"class":867},[324,74284,74285,74287,74289],{"class":326,"line":33813},[324,74286,52498],{"class":867},[324,74288,1006],{"class":52022},[324,74290,52029],{"class":867},[324,74292,74293,74295,74297],{"class":326,"line":33819},[324,74294,52063],{"class":867},[324,74296,1049],{"class":52022},[324,74298,52029],{"class":867},[324,74300,74301],{"class":326,"line":33868},[324,74302,74303],{"class":772},"      \u003C!-- \u003Ctr>\n",[324,74305,74306],{"class":326,"line":33915},[324,74307,74308],{"class":772},"        \u003Ctd>1\u003C\u002Ftd>\n",[324,74310,74311],{"class":326,"line":33920},[324,74312,74308],{"class":772},[324,74314,74315],{"class":326,"line":33926},[324,74316,74308],{"class":772},[324,74318,74319],{"class":326,"line":33945},[324,74320,74308],{"class":772},[324,74322,74323],{"class":326,"line":33951},[324,74324,74308],{"class":772},[324,74326,74327],{"class":326,"line":33971},[324,74328,74308],{"class":772},[324,74330,74331],{"class":326,"line":33977},[324,74332,74308],{"class":772},[324,74334,74335],{"class":326,"line":33983},[324,74336,74337],{"class":772},"        \u003Ctd>\n",[324,74339,74340],{"class":326,"line":33993},[324,74341,74342],{"class":772},"          \u003Ca href=\"#\" data-id=\"\">\u003C\u002Fa>\n",[324,74344,74345],{"class":326,"line":33998},[324,74346,74347],{"class":772},"        \u003C\u002Ftd>\n",[324,74349,74350],{"class":326,"line":34004},[324,74351,74352],{"class":772},"      \u003C\u002Ftr> -->\n",[324,74354,74355,74357,74359],{"class":326,"line":34020},[324,74356,52498],{"class":867},[324,74358,1049],{"class":52022},[324,74360,52029],{"class":867},[324,74362,74363,74365,74367],{"class":326,"line":34065},[324,74364,53139],{"class":867},[324,74366,1003],{"class":52022},[324,74368,52029],{"class":867},[324,74370,74371,74373,74375],{"class":326,"line":34071},[324,74372,52866],{"class":867},[324,74374,52535],{"class":52022},[324,74376,52029],{"class":867},[324,74378,74379],{"class":326,"line":34077},[324,74380,74381],{"class":772},"    \u002F\u002F const initData = [{\n",[324,74383,74384],{"class":326,"line":34083},[324,74385,74386],{"class":772},"    \u002F\u002F   unameId: 1,\n",[324,74388,74389],{"class":326,"line":34094},[324,74390,74391],{"class":772},"    \u002F\u002F   uname: '华晨宇',\n",[324,74393,74394],{"class":326,"line":34100},[324,74395,74396],{"class":772},"    \u002F\u002F   age: 22,\n",[324,74398,74399],{"class":326,"line":34106},[324,74400,74401],{"class":772},"    \u002F\u002F   salary: 12000,\n",[324,74403,74404],{"class":326,"line":34112},[324,74405,74406],{"class":772},"    \u002F\u002F   gender: '男',\n",[324,74408,74409],{"class":326,"line":34130},[324,74410,74411],{"class":772},"    \u002F\u002F   city: '北京',\n",[324,74413,74414],{"class":326,"line":34144},[324,74415,74416],{"class":772},"    \u002F\u002F   time: '2099\u002F9\u002F9 08:08:08'\n",[324,74418,74419],{"class":326,"line":34153},[324,74420,74421],{"class":772},"    \u002F\u002F }]\n",[324,74423,74424],{"class":326,"line":34162},[324,74425,74426],{"class":772},"    \u002F\u002F localStorage.setItem('data', JSON.stringify(initData))\n",[324,74428,74429],{"class":326,"line":34171},[324,74430,74431],{"class":772},"    \u002F\u002F 1.渲染业务\n",[324,74433,74434],{"class":326,"line":34180},[324,74435,74436],{"class":772},"    \u002F\u002F 1.1 先读取本地存储的数据\n",[324,74438,74439],{"class":326,"line":34186},[324,74440,74441],{"class":772},"    \u002F\u002F (1) 本地存储有数据记得转换为对象然后存储到变量里面，后期用于渲染页面\n",[324,74443,74444],{"class":326,"line":34192},[324,74445,74446],{"class":772},"    \u002F\u002F (2) 如果没有数据，则用空数组来代替\n",[324,74448,74449],{"class":326,"line":34200},[324,74450,488],{"emptyLinePlaceholder":487},[324,74452,74453],{"class":326,"line":34205},[324,74454,74455],{"class":772},"    \u002F\u002F 下面这句话意思是去本地存储读取最新的数据\n",[324,74457,74458],{"class":326,"line":34211},[324,74459,74460],{"class":772},"    \u002F\u002F const arr = JSON.parse(localStorage.getItem('data')) || []\n",[324,74462,74463,74465,74467,74469],{"class":326,"line":34222},[324,74464,11950],{"class":863},[324,74466,58417],{"class":916},[324,74468,14293],{"class":863},[324,74470,52560],{"class":867},[324,74472,74473,74476,74478],{"class":326,"line":34228},[324,74474,74475],{"class":867},"    console.",[324,74477,58969],{"class":734},[324,74479,53134],{"class":867},[324,74481,74482],{"class":326,"line":34248},[324,74483,488],{"emptyLinePlaceholder":487},[324,74485,74486],{"class":326,"line":34254},[324,74487,74488],{"class":772},"    \u002F\u002F 时间函数\n",[324,74490,74491,74493,74496],{"class":326,"line":34260},[324,74492,70806],{"class":863},[324,74494,74495],{"class":734}," getTime",[324,74497,11582],{"class":867},[324,74499,74500,74502,74505,74507,74509,74512],{"class":326,"line":34266},[324,74501,58950],{"class":863},[324,74503,74504],{"class":916}," date",[324,74506,14293],{"class":863},[324,74508,12307],{"class":863},[324,74510,74511],{"class":734}," Date",[324,74513,2706],{"class":867},[324,74515,74516,74518,74520,74522,74525,74528,74530,74532,74534,74537,74540,74542,74544,74546,74548,74550,74552,74554],{"class":326,"line":34283},[324,74517,58950],{"class":863},[324,74519,16820],{"class":916},[324,74521,14293],{"class":863},[324,74523,74524],{"class":867}," date.",[324,74526,74527],{"class":734},"getHours",[324,74529,13779],{"class":867},[324,74531,1774],{"class":863},[324,74533,2768],{"class":916},[324,74535,74536],{"class":863}," ?",[324,74538,74539],{"class":738}," '0'",[324,74541,46288],{"class":863},[324,74543,74524],{"class":867},[324,74545,74527],{"class":734},[324,74547,13779],{"class":867},[324,74549,1723],{"class":863},[324,74551,74524],{"class":867},[324,74553,74527],{"class":734},[324,74555,2706],{"class":867},[324,74557,74558,74560,74563,74565,74567,74570,74572,74574,74576,74578,74580,74582,74584,74586,74588,74590,74592,74594],{"class":326,"line":34289},[324,74559,58950],{"class":863},[324,74561,74562],{"class":916}," m",[324,74564,14293],{"class":863},[324,74566,74524],{"class":867},[324,74568,74569],{"class":734},"getMinutes",[324,74571,13779],{"class":867},[324,74573,1774],{"class":863},[324,74575,2768],{"class":916},[324,74577,74536],{"class":863},[324,74579,74539],{"class":738},[324,74581,46288],{"class":863},[324,74583,74524],{"class":867},[324,74585,74569],{"class":734},[324,74587,13779],{"class":867},[324,74589,1723],{"class":863},[324,74591,74524],{"class":867},[324,74593,74569],{"class":734},[324,74595,2706],{"class":867},[324,74597,74598,74600,74602,74604,74606,74609,74611,74613,74615,74617,74619,74621,74623,74625,74627,74629,74631,74633],{"class":326,"line":34295},[324,74599,58950],{"class":863},[324,74601,9157],{"class":916},[324,74603,14293],{"class":863},[324,74605,74524],{"class":867},[324,74607,74608],{"class":734},"getSeconds",[324,74610,13779],{"class":867},[324,74612,1774],{"class":863},[324,74614,2768],{"class":916},[324,74616,74536],{"class":863},[324,74618,74539],{"class":738},[324,74620,46288],{"class":863},[324,74622,74524],{"class":867},[324,74624,74608],{"class":734},[324,74626,13779],{"class":867},[324,74628,1723],{"class":863},[324,74630,74524],{"class":867},[324,74632,74608],{"class":734},[324,74634,2706],{"class":867},[324,74636,74637,74639,74642,74644,74646,74649,74651,74654,74656,74659,74661,74663,74666,74668,74670,74672,74674,74676,74678,74681,74683,74686,74688,74691,74693,74695,74697],{"class":326,"line":34301},[324,74638,58950],{"class":863},[324,74640,74641],{"class":916}," str",[324,74643,14293],{"class":863},[324,74645,63625],{"class":738},[324,74647,74648],{"class":867},"date",[324,74650,1422],{"class":738},[324,74652,74653],{"class":734},"getFullYear",[324,74655,3156],{"class":738},[324,74657,74658],{"class":738},"}\u002F${",[324,74660,74648],{"class":867},[324,74662,1422],{"class":738},[324,74664,74665],{"class":734},"getMonth",[324,74667,13779],{"class":738},[324,74669,1345],{"class":863},[324,74671,25842],{"class":916},[324,74673,74658],{"class":738},[324,74675,74648],{"class":867},[324,74677,1422],{"class":738},[324,74679,74680],{"class":734},"getDate",[324,74682,3156],{"class":738},[324,74684,74685],{"class":738},"} ${",[324,74687,1279],{"class":867},[324,74689,74690],{"class":738},"}:${",[324,74692,1408],{"class":867},[324,74694,74690],{"class":738},[324,74696,1559],{"class":867},[324,74698,74699],{"class":738},"}`\n",[324,74701,74702,74705],{"class":326,"line":34307},[324,74703,74704],{"class":863},"      return",[324,74706,74707],{"class":867}," str\n",[324,74709,74710],{"class":326,"line":34313},[324,74711,2917],{"class":867},[324,74713,74714],{"class":326,"line":34340},[324,74715,74716],{"class":772},"    \u002F\u002F 渲染函数\n",[324,74718,74719,74721,74723,74725,74727,74729,74731,74733],{"class":326,"line":34364},[324,74720,11950],{"class":863},[324,74722,70469],{"class":916},[324,74724,14293],{"class":863},[324,74726,55118],{"class":867},[324,74728,55121],{"class":734},[324,74730,868],{"class":867},[324,74732,70480],{"class":738},[324,74734,874],{"class":867},[324,74736,74737,74739,74741],{"class":326,"line":34370},[324,74738,70806],{"class":863},[324,74740,70809],{"class":734},[324,74742,11582],{"class":867},[324,74744,74745],{"class":326,"line":34376},[324,74746,74747],{"class":772},"      \u002F\u002F (1) 利用map遍历数组，返回对应tr的数组\n",[324,74749,74750],{"class":326,"line":34382},[324,74751,74752],{"class":772},"      \u002F\u002F map遍历的是数组，这里里边存的都是对象，所以ele就是代表里边的对象\n",[324,74754,74755,74757,74760,74762,74764,74767,74769,74771,74773,74776,74778,74781],{"class":326,"line":34393},[324,74756,58950],{"class":863},[324,74758,74759],{"class":916}," trArr",[324,74761,14293],{"class":863},[324,74763,52687],{"class":867},[324,74765,74766],{"class":734},"map",[324,74768,868],{"class":867},[324,74770,55171],{"class":863},[324,74772,2389],{"class":867},[324,74774,74775],{"class":5945},"ele",[324,74777,13164],{"class":867},[324,74779,74780],{"class":5945},"index",[324,74782,13171],{"class":867},[324,74784,74785,74787],{"class":326,"line":34404},[324,74786,15481],{"class":863},[324,74788,70890],{"class":738},[324,74790,74791],{"class":326,"line":34410},[324,74792,74793],{"class":738},"      \u003Ctr>\n",[324,74795,74796,74798,74800,74802,74805],{"class":326,"line":34427},[324,74797,70895],{"class":738},[324,74799,74775],{"class":867},[324,74801,1422],{"class":738},[324,74803,74804],{"class":867},"unameId",[324,74806,70910],{"class":738},[324,74808,74809,74811,74813,74815,74817],{"class":326,"line":34450},[324,74810,70895],{"class":738},[324,74812,74775],{"class":867},[324,74814,1422],{"class":738},[324,74816,70926],{"class":867},[324,74818,70910],{"class":738},[324,74820,74821,74823,74825,74827,74829],{"class":326,"line":34473},[324,74822,70895],{"class":738},[324,74824,74775],{"class":867},[324,74826,1422],{"class":738},[324,74828,70943],{"class":867},[324,74830,70910],{"class":738},[324,74832,74833,74835,74837,74839,74841],{"class":326,"line":34479},[324,74834,70895],{"class":738},[324,74836,74775],{"class":867},[324,74838,1422],{"class":738},[324,74840,70960],{"class":867},[324,74842,70910],{"class":738},[324,74844,74845,74847,74849,74851,74853],{"class":326,"line":34484},[324,74846,70895],{"class":738},[324,74848,74775],{"class":867},[324,74850,1422],{"class":738},[324,74852,70977],{"class":867},[324,74854,70910],{"class":738},[324,74856,74857,74859,74861,74863,74865],{"class":326,"line":34493},[324,74858,70895],{"class":738},[324,74860,74775],{"class":867},[324,74862,1422],{"class":738},[324,74864,70994],{"class":867},[324,74866,70910],{"class":738},[324,74868,74869,74871,74873,74875,74877],{"class":326,"line":34503},[324,74870,70895],{"class":738},[324,74872,74775],{"class":867},[324,74874,1422],{"class":738},[324,74876,3117],{"class":867},[324,74878,70910],{"class":738},[324,74880,74881],{"class":326,"line":34509},[324,74882,74337],{"class":738},[324,74884,74885,74888,74890],{"class":326,"line":34514},[324,74886,74887],{"class":738},"          \u003Ca href=\"#\" data-id=\"${",[324,74889,74780],{"class":867},[324,74891,74892],{"class":738},"}\">删除\u003C\u002Fa>\n",[324,74894,74895],{"class":326,"line":34520},[324,74896,74347],{"class":738},[324,74898,74899],{"class":326,"line":34533},[324,74900,74901],{"class":738},"      \u003C\u002Ftr>\n",[324,74903,74904],{"class":326,"line":34539},[324,74905,74906],{"class":738},"  `\n",[324,74908,74909],{"class":326,"line":34550},[324,74910,65537],{"class":867},[324,74912,74913,74915,74917],{"class":326,"line":34561},[324,74914,58966],{"class":867},[324,74916,58969],{"class":734},[324,74918,74919],{"class":867},"(trArr)\n",[324,74921,74922],{"class":326,"line":34580},[324,74923,488],{"emptyLinePlaceholder":487},[324,74925,74926],{"class":326,"line":50240},[324,74927,74928],{"class":772},"      \u002F\u002F (2) 把数组转换为字符串join\n",[324,74930,74931],{"class":326,"line":50245},[324,74932,74933],{"class":772},"      \u002F\u002F (3) 把生成的字符串追加给tobody\n",[324,74935,74936,74938,74940,74943,74946,74948,74951],{"class":326,"line":50254},[324,74937,70821],{"class":867},[324,74939,913],{"class":863},[324,74941,74942],{"class":867}," trArr.",[324,74944,74945],{"class":734},"join",[324,74947,868],{"class":867},[324,74949,74950],{"class":738},"''",[324,74952,874],{"class":867},[324,74954,74955],{"class":326,"line":50263},[324,74956,74957],{"class":772},"      \u002F\u002F 显示共有几条\n",[324,74959,74960,74962,74964,74966,74969,74972,74974,74976],{"class":326,"line":50268},[324,74961,56493],{"class":867},[324,74963,55121],{"class":734},[324,74965,868],{"class":867},[324,74967,74968],{"class":738},"'.total span'",[324,74970,74971],{"class":867},").innerHTML ",[324,74973,913],{"class":863},[324,74975,52687],{"class":867},[324,74977,56553],{"class":916},[324,74979,74980],{"class":326,"line":50273},[324,74981,2917],{"class":867},[324,74983,74984],{"class":326,"line":50278},[324,74985,74986],{"class":772},"    \u002F\u002F render()\n",[324,74988,74989],{"class":326,"line":50291},[324,74990,488],{"emptyLinePlaceholder":487},[324,74992,74993],{"class":326,"line":50296},[324,74994,74995],{"class":772},"    \u002F\u002F 获取DOM对象\n",[324,74997,74998,75000,75002,75004,75006,75008,75010,75012],{"class":326,"line":50305},[324,74999,11950],{"class":863},[324,75001,70543],{"class":916},[324,75003,14293],{"class":863},[324,75005,55118],{"class":867},[324,75007,55121],{"class":734},[324,75009,868],{"class":867},[324,75011,70554],{"class":738},[324,75013,874],{"class":867},[324,75015,75016,75018,75020,75022,75024,75026,75028,75030],{"class":326,"line":50314},[324,75017,11950],{"class":863},[324,75019,70370],{"class":916},[324,75021,14293],{"class":863},[324,75023,55118],{"class":867},[324,75025,55121],{"class":734},[324,75027,868],{"class":867},[324,75029,70381],{"class":738},[324,75031,874],{"class":867},[324,75033,75034,75036,75038,75040,75042,75044,75046,75048],{"class":326,"line":50331},[324,75035,11950],{"class":863},[324,75037,16418],{"class":916},[324,75039,14293],{"class":863},[324,75041,55118],{"class":867},[324,75043,55121],{"class":734},[324,75045,868],{"class":867},[324,75047,70400],{"class":738},[324,75049,874],{"class":867},[324,75051,75053,75055,75057,75059,75061,75063,75065,75067],{"class":326,"line":75052},231,[324,75054,11950],{"class":863},[324,75056,70429],{"class":916},[324,75058,14293],{"class":863},[324,75060,55118],{"class":867},[324,75062,55121],{"class":734},[324,75064,868],{"class":867},[324,75066,70440],{"class":738},[324,75068,874],{"class":867},[324,75070,75072,75074,75076,75078,75080,75082,75084,75086],{"class":326,"line":75071},232,[324,75073,11950],{"class":863},[324,75075,70409],{"class":916},[324,75077,14293],{"class":863},[324,75079,55118],{"class":867},[324,75081,55121],{"class":734},[324,75083,868],{"class":867},[324,75085,70420],{"class":738},[324,75087,874],{"class":867},[324,75089,75091,75093,75095,75097,75099,75101,75103,75105],{"class":326,"line":75090},233,[324,75092,11950],{"class":863},[324,75094,70449],{"class":916},[324,75096,14293],{"class":863},[324,75098,55118],{"class":867},[324,75100,55121],{"class":734},[324,75102,868],{"class":867},[324,75104,70460],{"class":738},[324,75106,874],{"class":867},[324,75108,75110],{"class":326,"line":75109},234,[324,75111,488],{"emptyLinePlaceholder":487},[324,75113,75115],{"class":326,"line":75114},235,[324,75116,75117],{"class":772},"    \u002F\u002F form表单注册提交事件，阻止默认行为\n",[324,75119,75121,75123,75125,75127,75129,75131,75133,75135,75137],{"class":326,"line":75120},236,[324,75122,70561],{"class":867},[324,75124,58535],{"class":734},[324,75126,868],{"class":867},[324,75128,70568],{"class":738},[324,75130,13164],{"class":867},[324,75132,55171],{"class":863},[324,75134,2389],{"class":867},[324,75136,941],{"class":5945},[324,75138,13171],{"class":867},[324,75140,75142],{"class":326,"line":75141},237,[324,75143,75144],{"class":772},"      \u002F\u002F 禁止浏览器跳转\n",[324,75146,75148,75150,75152],{"class":326,"line":75147},238,[324,75149,70588],{"class":867},[324,75151,70591],{"class":734},[324,75153,2706],{"class":867},[324,75155,75157],{"class":326,"line":75156},239,[324,75158,75159],{"class":772},"      \u002F\u002F 非空判断\n",[324,75161,75163],{"class":326,"line":75162},240,[324,75164,75165],{"class":772},"      \u002F\u002F !代表取反的意思，输入的是字符串，如果输入了内容，字符串就是真，取反之后就为假\n",[324,75167,75169],{"class":326,"line":75168},241,[324,75170,75171],{"class":772},"      \u002F\u002F 就不执行if语句，如果没输入取反就为真，就执行了if语句，表示信息输入不全\n",[324,75173,75175,75177,75179,75181,75184,75186,75189,75192,75194,75196],{"class":326,"line":75174},242,[324,75176,55202],{"class":863},[324,75178,2389],{"class":867},[324,75180,1091],{"class":863},[324,75182,75183],{"class":867},"uname.value ",[324,75185,72079],{"class":863},[324,75187,75188],{"class":863}," !",[324,75190,75191],{"class":867},"age.value ",[324,75193,72079],{"class":863},[324,75195,75188],{"class":863},[324,75197,75198],{"class":867},"salary.value) {\n",[324,75200,75202,75204,75206,75208,75210],{"class":326,"line":75201},243,[324,75203,15481],{"class":863},[324,75205,70662],{"class":734},[324,75207,868],{"class":867},[324,75209,70667],{"class":738},[324,75211,874],{"class":867},[324,75213,75215],{"class":326,"line":75214},244,[324,75216,53120],{"class":867},[324,75218,75220,75222,75224],{"class":326,"line":75219},245,[324,75221,58729],{"class":867},[324,75223,52606],{"class":734},[324,75225,75226],{"class":867},"({\n",[324,75228,75230],{"class":326,"line":75229},246,[324,75231,75232],{"class":772},"        \u002F\u002F 这里是push，给数组添加对象，原来的数组如果只有一个对象的话，数组长度为1，\n",[324,75234,75236],{"class":326,"line":75235},247,[324,75237,75238],{"class":772},"        \u002F\u002F 在加上现在这个对象，数组里边的对象就有两个了，数组长度为2，所以新加的这个\n",[324,75240,75242],{"class":326,"line":75241},248,[324,75243,75244],{"class":772},"        \u002F\u002F 对象的序号应为数组长度+1\n",[324,75246,75248],{"class":326,"line":75247},249,[324,75249,75250],{"class":772},"        \u002F\u002F unameId: arr.length + 1,\n",[324,75252,75254],{"class":326,"line":75253},250,[324,75255,488],{"emptyLinePlaceholder":487},[324,75257,75259],{"class":326,"line":75258},251,[324,75260,75261],{"class":772},"        \u002F\u002F 因为是push  元素从数组的最后边添加，如果按照上边按照数组长度的方式来计算的话会出现图中两个数据ID分别为1，2\n",[324,75263,75265],{"class":326,"line":75264},252,[324,75266,75267],{"class":772},"        \u002F\u002F 删除1后，在添加一个数据，此时就都为2，2了\n",[324,75269,75271],{"class":326,"line":75270},253,[324,75272,75273],{"class":772},"        \u002F\u002F 必须进行判断，因为当全删除之后，就没有数据了，就不能通过数组中最后元素的unameId来获取了，此时直接给它赋值为1就可以\n",[324,75275,75277],{"class":326,"line":75276},254,[324,75278,75279],{"class":772},"        \u002F\u002F 0当假看\n",[324,75281,75283,75286,75288,75290,75293,75295,75297,75299,75302,75304,75306,75309,75311],{"class":326,"line":75282},255,[324,75284,75285],{"class":867},"        unameId: arr.",[324,75287,52690],{"class":916},[324,75289,74536],{"class":863},[324,75291,75292],{"class":867}," arr[arr.",[324,75294,52690],{"class":916},[324,75296,52993],{"class":863},[324,75298,25842],{"class":916},[324,75300,75301],{"class":867},"].unameId ",[324,75303,1345],{"class":863},[324,75305,25842],{"class":916},[324,75307,75308],{"class":863}," :",[324,75310,25842],{"class":916},[324,75312,32188],{"class":867},[324,75314,75316],{"class":326,"line":75315},256,[324,75317,70715],{"class":867},[324,75319,75321],{"class":326,"line":75320},257,[324,75322,70720],{"class":867},[324,75324,75326],{"class":326,"line":75325},258,[324,75327,70730],{"class":867},[324,75329,75331],{"class":326,"line":75330},259,[324,75332,70725],{"class":867},[324,75334,75336],{"class":326,"line":75335},260,[324,75337,75338],{"class":867},"        city: city.value,\n",[324,75340,75342],{"class":326,"line":75341},261,[324,75343,75344],{"class":772},"        \u002F\u002F 这里的时间可以不去封装函数，直接使用toLocaleString()方法\n",[324,75346,75348],{"class":326,"line":75347},262,[324,75349,75350],{"class":772},"        \u002F\u002F time: new Date().toDateString()\n",[324,75352,75354,75357,75360],{"class":326,"line":75353},263,[324,75355,75356],{"class":867},"        time: ",[324,75358,75359],{"class":734},"getTime",[324,75361,2706],{"class":867},[324,75363,75365],{"class":326,"line":75364},264,[324,75366,65537],{"class":867},[324,75368,75370],{"class":326,"line":75369},265,[324,75371,75372],{"class":772},"      \u002F\u002F 渲染页面和重置表单 （reset()方法）\n",[324,75374,75376,75378],{"class":326,"line":75375},266,[324,75377,70790],{"class":734},[324,75379,2706],{"class":867},[324,75381,75383,75385,75387,75389,75391],{"class":326,"line":75382},267,[324,75384,70773],{"class":916},[324,75386,1422],{"class":867},[324,75388,70778],{"class":734},[324,75390,13779],{"class":867},[324,75392,75393],{"class":772},"\u002F\u002F重置表单\n",[324,75395,75397],{"class":326,"line":75396},268,[324,75398,75399],{"class":772},"      \u002F\u002F 把数据重新存放在本地存储里面，记得转换为JOSN字符串存储\n",[324,75401,75403,75406,75408,75410,75413,75415,75417,75419,75421],{"class":326,"line":75402},269,[324,75404,75405],{"class":867},"      localStorage.",[324,75407,72376],{"class":734},[324,75409,868],{"class":867},[324,75411,75412],{"class":738},"'data'",[324,75414,13164],{"class":867},[324,75416,72386],{"class":916},[324,75418,1422],{"class":867},[324,75420,72391],{"class":734},[324,75422,75423],{"class":867},"(arr))\n",[324,75425,75427],{"class":326,"line":75426},270,[324,75428,34183],{"class":867},[324,75430,75432],{"class":326,"line":75431},271,[324,75433,488],{"emptyLinePlaceholder":487},[324,75435,75437],{"class":326,"line":75436},272,[324,75438,75439],{"class":772},"    \u002F\u002F 3.删除业务\n",[324,75441,75443],{"class":326,"line":75442},273,[324,75444,75445],{"class":772},"    \u002F\u002F 3.1 采取事件委托的形式，给body注册点击事件\n",[324,75447,75449,75451,75453,75455,75457,75459,75461,75463,75465],{"class":326,"line":75448},274,[324,75450,71063],{"class":867},[324,75452,58535],{"class":734},[324,75454,868],{"class":867},[324,75456,58540],{"class":738},[324,75458,13164],{"class":867},[324,75460,55171],{"class":863},[324,75462,2389],{"class":867},[324,75464,941],{"class":5945},[324,75466,13171],{"class":867},[324,75468,75470],{"class":326,"line":75469},275,[324,75471,75472],{"class":772},"      \u002F\u002F 判断是否点击的是删除按钮\n",[324,75474,75476,75478,75480,75482,75484],{"class":326,"line":75475},276,[324,75477,55202],{"class":863},[324,75479,67756],{"class":867},[324,75481,55208],{"class":863},[324,75483,68978],{"class":738},[324,75485,13171],{"class":867},[324,75487,75489],{"class":326,"line":75488},277,[324,75490,75491],{"class":772},"        \u002F\u002F alert(1)\n",[324,75493,75495],{"class":326,"line":75494},278,[324,75496,75497],{"class":772},"        \u002F\u002F 3.2 得到当前点击的索引号。渲染数据的时候，动态给a链接添加自定义属性例如data-id='0'\n",[324,75499,75501],{"class":326,"line":75500},279,[324,75502,75503],{"class":772},"        \u002F\u002F console.log(e.target)\n",[324,75505,75507],{"class":326,"line":75506},280,[324,75508,75509],{"class":772},"        \u002F\u002F 3.3 根据索引号，利用splice删除数组这条数据\n",[324,75511,75513],{"class":326,"line":75512},281,[324,75514,488],{"emptyLinePlaceholder":487},[324,75516,75518],{"class":326,"line":75517},282,[324,75519,75520],{"class":772},"        \u002F\u002F 确认框，确然是否真的要删除\n",[324,75522,75524],{"class":326,"line":75523},283,[324,75525,75526],{"class":772},"        \u002F\u002F confirm()为确认框\n",[324,75528,75530],{"class":326,"line":75529},284,[324,75531,75532],{"class":772},"        \u002F\u002F confirm会返回两个值，如果点击确定，就会返回true，如果点击取消，就会返回false\n",[324,75534,75536,75538,75540,75543,75545,75548],{"class":326,"line":75535},285,[324,75537,3226],{"class":863},[324,75539,2389],{"class":867},[324,75541,75542],{"class":734},"confirm",[324,75544,868],{"class":867},[324,75546,75547],{"class":738},"'您确定要删除这条数据吗？'",[324,75549,75550],{"class":867},")) {\n",[324,75552,75554,75557,75559,75561,75563],{"class":326,"line":75553},286,[324,75555,75556],{"class":867},"          arr.",[324,75558,58732],{"class":734},[324,75560,71116],{"class":867},[324,75562,1082],{"class":916},[324,75564,874],{"class":867},[324,75566,75568],{"class":326,"line":75567},287,[324,75569,75570],{"class":772},"          \u002F\u002F 3.4 重新渲染页面\n",[324,75572,75574,75577],{"class":326,"line":75573},288,[324,75575,75576],{"class":734},"          render",[324,75578,2706],{"class":867},[324,75580,75582],{"class":326,"line":75581},289,[324,75583,75584],{"class":772},"          \u002F\u002F 3.5 把最新arr数组存到本地存储\n",[324,75586,75588,75591,75593,75595,75597,75599,75601,75603,75605],{"class":326,"line":75587},290,[324,75589,75590],{"class":867},"          localStorage.",[324,75592,72376],{"class":734},[324,75594,868],{"class":867},[324,75596,75412],{"class":738},[324,75598,13164],{"class":867},[324,75600,72386],{"class":916},[324,75602,1422],{"class":867},[324,75604,72391],{"class":734},[324,75606,75423],{"class":867},[324,75608,75610],{"class":326,"line":75609},291,[324,75611,3258],{"class":867},[324,75613,75615],{"class":326,"line":75614},292,[324,75616,53120],{"class":867},[324,75618,75620],{"class":326,"line":75619},293,[324,75621,488],{"emptyLinePlaceholder":487},[324,75623,75625],{"class":326,"line":75624},294,[324,75626,34183],{"class":867},[324,75628,75630],{"class":326,"line":75629},295,[324,75631,488],{"emptyLinePlaceholder":487},[324,75633,75635,75637,75639],{"class":326,"line":75634},296,[324,75636,53139],{"class":867},[324,75638,52535],{"class":52022},[324,75640,52029],{"class":867},[324,75642,75644,75646,75648],{"class":326,"line":75643},297,[324,75645,52507],{"class":867},[324,75647,52522],{"class":52022},[324,75649,52029],{"class":867},[324,75651,75653],{"class":326,"line":75652},298,[324,75654,488],{"emptyLinePlaceholder":487},[324,75656,75658,75660,75662],{"class":326,"line":75657},299,[324,75659,52507],{"class":867},[324,75661,51357],{"class":52022},[324,75663,52029],{"class":867},[14,75665,75667],{"id":75666},"_36-正则表达式","3.6 正则表达式",[19,75669,75670],{},"正则表达式（Regular Expression）是用于匹配字符串中字符组合的模式。在 JavaScript中，正则表达式也是对",[19,75672,75673],{},"象，通常用来查找、替换那些符合正则表达式的文本，许多语言都支持正则表达式。",[19,75675,75676],{},"正则表达式的作用：",[1871,75678,75679,75686,75692],{},[195,75680,75681,75682,75685],{},"表单验证（ ",[116,75683,75684],{},"匹配"," ）",[195,75687,75688,75689,75685],{},"过滤敏感词（ ",[116,75690,75691],{},"替换",[195,75693,75694,75695,75685],{},"字符串中提取我们想要的部分（ ",[116,75696,75697],{},"提取",[35,75699,75701],{"id":75700},"_361-语法","3.6.1 语法",[19,75703,75704],{},"正则表达式使用步骤：",[192,75706,75707,75710],{},[195,75708,75709],{},"定义规则",[195,75711,75712],{},"查找是否匹配",[19,75714,75715],{},"正则表达式里边不需要写引号",[19,75717,75718],{},[48,75719],{"alt":50,"src":75720},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-201.png",[19,75722,75723],{},"记忆方法：先有规则，再有在看后边的数据是否可以与前边规则匹配",[19,75725,75726],{},"reg.test(str)",[19,75728,75729],{},[48,75730],{"alt":50,"src":75731},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-202.png",[19,75733,75734],{},[48,75735],{"alt":50,"src":75736},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-203.png",[35,75738,75740],{"id":75739},"_362-元字符","3.6.2 元字符",[192,75742,75743,75746,75749,75752,75759],{},[195,75744,75745],{},"普通字符：大多数的字符仅能够描述它们本身，这些字符称作普通字符，例如所有的字母和数字。也就是说普通字符只能够匹配字符串中与它们相同的字符。",[195,75747,75748],{},"元字符（特殊字符）：是一些具有特殊含义的字符，可以极大提高了灵活性和强大的匹配功能。",[195,75750,75751],{},"比如，规定用户只能输入英文26个英文字母，普通字符的话 abcdefghijklm….. 但是换成元字符写法： [a-z]",[195,75753,75754,75755],{},"正则验证工具：",[25,75756,75757],{"href":75757,"rel":75758},"https:\u002F\u002Ftool.oschina.net\u002Fregex",[29],[195,75760,75761],{},"分类：边界符（表示位置，开头和结尾，必须用什么开头，用什么结尾）、量词（（表示重复次数）、字符类（比如 \\d 表示 0~9）",[151,75763,75765],{"id":75764},"_3621-边界符","3.6.2.1 边界符",[19,75767,75768],{},[48,75769],{"alt":50,"src":75770},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-204.png",[19,75772,75773],{},"console.log(\u002F^哈$\u002F.test('哈哈')) \u002F\u002Ffalse 加上量词之后会true",[19,75775,75776],{},"只有console.log(\u002F^哈$\u002F.test('哈'))这样才会true，开头结尾都写的话就是精准匹配",[19,75778,75779],{},"只匹配一次",[19,75781,75782],{},"两个其中一个来进行匹配的话，可以使用| ：\u002F我是|它会\u002F",[151,75784,75786],{"id":75785},"_3622-量词","3.6.2.2 量词",[19,75788,75789],{},[48,75790],{"alt":50,"src":75791},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-205.png",[19,75793,75794],{},"console.log(\u002F^哈*$\u002F.test('哈好哈')) \u002F\u002Ffalse，只允许里边只允许有哈，不允许出现任何其他字符",[151,75796,75798],{"id":75797},"_3623-元字符","3.6.2.3 元字符",[19,75800,75801],{},[48,75802],{"alt":50,"src":75803},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-206.png",[19,75805,75806],{},"匹配的是a或b或c []只选一个",[19,75808,75809],{},[48,75810],{"alt":50,"src":75811},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-207.png",[19,75813,75814],{},"qq号是从1开始的，第一个为1-9已经进行匹配完成了，从第二位开始0-9都可以了，大括号{}只重复前边离他最近的那个字符，{}就近原则",[19,75816,75817],{},[48,75818],{"alt":50,"src":75819},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-208.png",[19,75821,75822],{},"（2）. 匹配除换行符之外的任何单个字符，除了换行都行",[19,75824,75825],{},[48,75826],{"alt":50,"src":75827},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-209.png",[316,75829,75831],{"className":51355,"code":75830,"language":51357,"meta":50,"style":50},"\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",[269,75832,75833,75843,75857,75861,75869,75883,75903,75915,75923,75927,75935,75943,75948,75979,76006,76034,76038,76043,76071,76102,76107,76112,76143,76175,76207,76211,76216,76247,76277,76307,76311,76316,76347,76378,76408,76438,76442,76447,76480,76484,76489,76520,76551,76555,76560,76591,76621,76652,76656,76661,76693,76724,76755,76782,76813,76845,76878,76909,76940,76972,77003,77011,77019,77023],{"__ignoreMap":50},[324,75834,75835,75837,75839,75841],{"class":326,"line":327},[324,75836,52019],{"class":867},[324,75838,52023],{"class":52022},[324,75840,52026],{"class":734},[324,75842,52029],{"class":867},[324,75844,75845,75847,75849,75851,75853,75855],{"class":326,"line":203},[324,75846,1774],{"class":867},[324,75848,51357],{"class":52022},[324,75850,52038],{"class":734},[324,75852,913],{"class":867},[324,75854,52043],{"class":738},[324,75856,52029],{"class":867},[324,75858,75859],{"class":326,"line":338},[324,75860,488],{"emptyLinePlaceholder":487},[324,75862,75863,75865,75867],{"class":326,"line":344},[324,75864,1774],{"class":867},[324,75866,52056],{"class":52022},[324,75868,52029],{"class":867},[324,75870,75871,75873,75875,75877,75879,75881],{"class":326,"line":484},[324,75872,52866],{"class":867},[324,75874,52066],{"class":52022},[324,75876,52069],{"class":734},[324,75878,913],{"class":867},[324,75880,52074],{"class":738},[324,75882,52029],{"class":867},[324,75884,75885,75887,75889,75891,75893,75895,75897,75899,75901],{"class":326,"line":491},[324,75886,52866],{"class":867},[324,75888,52066],{"class":52022},[324,75890,15649],{"class":734},[324,75892,913],{"class":867},[324,75894,52113],{"class":738},[324,75896,52093],{"class":734},[324,75898,913],{"class":867},[324,75900,52120],{"class":738},[324,75902,52029],{"class":867},[324,75904,75905,75907,75909,75911,75913],{"class":326,"line":496},[324,75906,52866],{"class":867},[324,75908,52129],{"class":52022},[324,75910,52132],{"class":867},[324,75912,52129],{"class":52022},[324,75914,52029],{"class":867},[324,75916,75917,75919,75921],{"class":326,"line":502},[324,75918,52507],{"class":867},[324,75920,52056],{"class":52022},[324,75922,52029],{"class":867},[324,75924,75925],{"class":326,"line":508},[324,75926,488],{"emptyLinePlaceholder":487},[324,75928,75929,75931,75933],{"class":326,"line":514},[324,75930,1774],{"class":867},[324,75932,52522],{"class":52022},[324,75934,52029],{"class":867},[324,75936,75937,75939,75941],{"class":326,"line":2343},[324,75938,52866],{"class":867},[324,75940,52535],{"class":52022},[324,75942,52029],{"class":867},[324,75944,75945],{"class":326,"line":2348},[324,75946,75947],{"class":772},"    \u002F\u002F 元字符中\n",[324,75949,75950,75952,75954,75956,75958,75961,75963,75965,75968,75970,75973,75976],{"class":326,"line":2354},[324,75951,74475],{"class":867},[324,75953,58969],{"class":734},[324,75955,868],{"class":867},[324,75957,1448],{"class":738},[324,75959,75960],{"class":48699},"哈",[324,75962,1448],{"class":738},[324,75964,1422],{"class":867},[324,75966,75967],{"class":734},"test",[324,75969,868],{"class":867},[324,75971,75972],{"class":738},"'哈'",[324,75974,75975],{"class":867},"))  ",[324,75977,75978],{"class":772},"\u002F\u002Ftrue\n",[324,75980,75981,75983,75985,75987,75989,75991,75993,75995,75997,75999,76002,76004],{"class":326,"line":2359},[324,75982,74475],{"class":867},[324,75984,58969],{"class":734},[324,75986,868],{"class":867},[324,75988,1448],{"class":738},[324,75990,75960],{"class":48699},[324,75992,1448],{"class":738},[324,75994,1422],{"class":867},[324,75996,75967],{"class":734},[324,75998,868],{"class":867},[324,76000,76001],{"class":738},"'哈哈'",[324,76003,75975],{"class":867},[324,76005,75978],{"class":772},[324,76007,76008,76010,76012,76014,76016,76018,76020,76022,76024,76026,76029,76032],{"class":326,"line":2373},[324,76009,74475],{"class":867},[324,76011,58969],{"class":734},[324,76013,868],{"class":867},[324,76015,1448],{"class":738},[324,76017,75960],{"class":48699},[324,76019,1448],{"class":738},[324,76021,1422],{"class":867},[324,76023,75967],{"class":734},[324,76025,868],{"class":867},[324,76027,76028],{"class":738},"'二哈'",[324,76030,76031],{"class":867},"))   ",[324,76033,75978],{"class":772},[324,76035,76036],{"class":326,"line":2378},[324,76037,488],{"emptyLinePlaceholder":487},[324,76039,76040],{"class":326,"line":2384},[324,76041,76042],{"class":772},"    \u002F\u002F 1.边界符\n",[324,76044,76045,76047,76049,76051,76053,76055,76057,76059,76061,76063,76065,76067,76069],{"class":326,"line":2405},[324,76046,74475],{"class":867},[324,76048,58969],{"class":734},[324,76050,868],{"class":867},[324,76052,1448],{"class":738},[324,76054,1830],{"class":863},[324,76056,75960],{"class":48699},[324,76058,1448],{"class":738},[324,76060,1422],{"class":867},[324,76062,75967],{"class":734},[324,76064,868],{"class":867},[324,76066,75972],{"class":738},[324,76068,75975],{"class":867},[324,76070,75978],{"class":772},[324,76072,76073,76075,76077,76079,76081,76083,76085,76087,76089,76091,76093,76095,76097,76099],{"class":326,"line":2410},[324,76074,74475],{"class":867},[324,76076,58969],{"class":734},[324,76078,868],{"class":867},[324,76080,1448],{"class":738},[324,76082,1830],{"class":863},[324,76084,75960],{"class":48699},[324,76086,1166],{"class":863},[324,76088,1448],{"class":738},[324,76090,1422],{"class":867},[324,76092,75967],{"class":734},[324,76094,868],{"class":867},[324,76096,76001],{"class":738},[324,76098,75975],{"class":867},[324,76100,76101],{"class":772},"\u002F\u002Ffalse\n",[324,76103,76104],{"class":326,"line":2424},[324,76105,76106],{"class":772},"    \u002F\u002F 2.量词\n",[324,76108,76109],{"class":326,"line":2429},[324,76110,76111],{"class":772},"    \u002F\u002F 量词 * 类似于 >= 0\n",[324,76113,76114,76116,76118,76120,76122,76124,76126,76129,76131,76133,76135,76137,76139,76141],{"class":326,"line":2458},[324,76115,74475],{"class":867},[324,76117,58969],{"class":734},[324,76119,868],{"class":867},[324,76121,1448],{"class":738},[324,76123,1830],{"class":863},[324,76125,75960],{"class":48699},[324,76127,76128],{"class":863},"*$",[324,76130,1448],{"class":738},[324,76132,1422],{"class":867},[324,76134,75967],{"class":734},[324,76136,868],{"class":867},[324,76138,76001],{"class":738},[324,76140,75975],{"class":867},[324,76142,75978],{"class":772},[324,76144,76145,76147,76149,76151,76153,76155,76157,76159,76161,76163,76165,76167,76170,76172],{"class":326,"line":2463},[324,76146,74475],{"class":867},[324,76148,58969],{"class":734},[324,76150,868],{"class":867},[324,76152,1448],{"class":738},[324,76154,1830],{"class":863},[324,76156,75960],{"class":48699},[324,76158,76128],{"class":863},[324,76160,1448],{"class":738},[324,76162,1422],{"class":867},[324,76164,75967],{"class":734},[324,76166,868],{"class":867},[324,76168,76169],{"class":738},"'二哈好傻'",[324,76171,75975],{"class":867},[324,76173,76174],{"class":772},"\u002F\u002Ffalse 必须以哈开头或结尾\n",[324,76176,76177,76179,76181,76183,76185,76187,76189,76191,76193,76195,76197,76199,76202,76204],{"class":326,"line":2480},[324,76178,74475],{"class":867},[324,76180,58969],{"class":734},[324,76182,868],{"class":867},[324,76184,1448],{"class":738},[324,76186,1830],{"class":863},[324,76188,75960],{"class":48699},[324,76190,76128],{"class":863},[324,76192,1448],{"class":738},[324,76194,1422],{"class":867},[324,76196,75967],{"class":734},[324,76198,868],{"class":867},[324,76200,76201],{"class":738},"'哈好哈'",[324,76203,76031],{"class":867},[324,76205,76206],{"class":772},"\u002F\u002Ffalse，只允许里边只有哈，不允许出现任何其他字符\n",[324,76208,76209],{"class":326,"line":2485},[324,76210,488],{"emptyLinePlaceholder":487},[324,76212,76213],{"class":326,"line":2490},[324,76214,76215],{"class":772},"    \u002F\u002F +类似于>=1\n",[324,76217,76218,76220,76222,76224,76226,76228,76230,76233,76235,76237,76239,76241,76243,76245],{"class":326,"line":2495},[324,76219,74475],{"class":867},[324,76221,58969],{"class":734},[324,76223,868],{"class":867},[324,76225,1448],{"class":738},[324,76227,1830],{"class":863},[324,76229,75960],{"class":48699},[324,76231,76232],{"class":863},"+$",[324,76234,1448],{"class":738},[324,76236,1422],{"class":867},[324,76238,75967],{"class":734},[324,76240,868],{"class":867},[324,76242,76001],{"class":738},[324,76244,75975],{"class":867},[324,76246,75978],{"class":772},[324,76248,76249,76251,76253,76255,76257,76259,76261,76263,76265,76267,76269,76271,76273,76275],{"class":326,"line":2509},[324,76250,74475],{"class":867},[324,76252,58969],{"class":734},[324,76254,868],{"class":867},[324,76256,1448],{"class":738},[324,76258,1830],{"class":863},[324,76260,75960],{"class":48699},[324,76262,76232],{"class":863},[324,76264,1448],{"class":738},[324,76266,1422],{"class":867},[324,76268,75967],{"class":734},[324,76270,868],{"class":867},[324,76272,76169],{"class":738},[324,76274,75975],{"class":867},[324,76276,76174],{"class":772},[324,76278,76279,76281,76283,76285,76287,76289,76291,76293,76295,76297,76299,76301,76303,76305],{"class":326,"line":2514},[324,76280,74475],{"class":867},[324,76282,58969],{"class":734},[324,76284,868],{"class":867},[324,76286,1448],{"class":738},[324,76288,1830],{"class":863},[324,76290,75960],{"class":48699},[324,76292,76232],{"class":863},[324,76294,1448],{"class":738},[324,76296,1422],{"class":867},[324,76298,75967],{"class":734},[324,76300,868],{"class":867},[324,76302,76201],{"class":738},[324,76304,76031],{"class":867},[324,76306,76101],{"class":772},[324,76308,76309],{"class":326,"line":3306},[324,76310,488],{"emptyLinePlaceholder":487},[324,76312,76313],{"class":326,"line":3320},[324,76314,76315],{"class":772},"    \u002F\u002F ?类似于0次或一次\n",[324,76317,76318,76320,76322,76324,76326,76328,76331,76333,76335,76337,76339,76341,76343,76345],{"class":326,"line":3328},[324,76319,74475],{"class":867},[324,76321,58969],{"class":734},[324,76323,868],{"class":867},[324,76325,1448],{"class":738},[324,76327,1830],{"class":863},[324,76329,76330],{"class":48699},"哈？",[324,76332,1166],{"class":863},[324,76334,1448],{"class":738},[324,76336,1422],{"class":867},[324,76338,75967],{"class":734},[324,76340,868],{"class":867},[324,76342,74950],{"class":738},[324,76344,76031],{"class":867},[324,76346,75978],{"class":772},[324,76348,76349,76351,76353,76355,76357,76359,76361,76364,76366,76368,76370,76372,76374,76376],{"class":326,"line":3333},[324,76350,74475],{"class":867},[324,76352,58969],{"class":734},[324,76354,868],{"class":867},[324,76356,1448],{"class":738},[324,76358,1830],{"class":863},[324,76360,75960],{"class":48699},[324,76362,76363],{"class":863},"?$",[324,76365,1448],{"class":738},[324,76367,1422],{"class":867},[324,76369,75967],{"class":734},[324,76371,868],{"class":867},[324,76373,76001],{"class":738},[324,76375,75975],{"class":867},[324,76377,76101],{"class":772},[324,76379,76380,76382,76384,76386,76388,76390,76392,76394,76396,76398,76400,76402,76404,76406],{"class":326,"line":3339},[324,76381,74475],{"class":867},[324,76383,58969],{"class":734},[324,76385,868],{"class":867},[324,76387,1448],{"class":738},[324,76389,1830],{"class":863},[324,76391,75960],{"class":48699},[324,76393,76363],{"class":863},[324,76395,1448],{"class":738},[324,76397,1422],{"class":867},[324,76399,75967],{"class":734},[324,76401,868],{"class":867},[324,76403,76169],{"class":738},[324,76405,75975],{"class":867},[324,76407,76174],{"class":772},[324,76409,76410,76412,76414,76416,76418,76420,76422,76424,76426,76428,76430,76432,76434,76436],{"class":326,"line":3345},[324,76411,74475],{"class":867},[324,76413,58969],{"class":734},[324,76415,868],{"class":867},[324,76417,1448],{"class":738},[324,76419,1830],{"class":863},[324,76421,75960],{"class":48699},[324,76423,76363],{"class":863},[324,76425,1448],{"class":738},[324,76427,1422],{"class":867},[324,76429,75967],{"class":734},[324,76431,868],{"class":867},[324,76433,76201],{"class":738},[324,76435,75975],{"class":867},[324,76437,76101],{"class":772},[324,76439,76440],{"class":326,"line":3350},[324,76441,488],{"emptyLinePlaceholder":487},[324,76443,76444],{"class":326,"line":8677},[324,76445,76446],{"class":772},"    \u002F\u002F {n}写几，就必须出现几次\n",[324,76448,76449,76451,76453,76455,76457,76459,76461,76464,76466,76468,76470,76472,76475,76478],{"class":326,"line":8701},[324,76450,74475],{"class":867},[324,76452,58969],{"class":734},[324,76454,868],{"class":867},[324,76456,1448],{"class":738},[324,76458,1830],{"class":863},[324,76460,75960],{"class":48699},[324,76462,76463],{"class":863},"{4}$",[324,76465,1448],{"class":738},[324,76467,1422],{"class":867},[324,76469,75967],{"class":734},[324,76471,868],{"class":867},[324,76473,76474],{"class":738},"'哈哈哈哈'",[324,76476,76477],{"class":867},")) ",[324,76479,75978],{"class":772},[324,76481,76482],{"class":326,"line":8706},[324,76483,488],{"emptyLinePlaceholder":487},[324,76485,76486],{"class":326,"line":8712},[324,76487,76488],{"class":772},"    \u002F\u002F {n,}大于等于n次\n",[324,76490,76491,76493,76495,76497,76499,76501,76503,76506,76508,76510,76512,76514,76516,76518],{"class":326,"line":8739},[324,76492,74475],{"class":867},[324,76494,58969],{"class":734},[324,76496,868],{"class":867},[324,76498,1448],{"class":738},[324,76500,1830],{"class":863},[324,76502,75960],{"class":48699},[324,76504,76505],{"class":863},"{4,}$",[324,76507,1448],{"class":738},[324,76509,1422],{"class":867},[324,76511,75967],{"class":734},[324,76513,868],{"class":867},[324,76515,76474],{"class":738},[324,76517,76477],{"class":867},[324,76519,75978],{"class":772},[324,76521,76522,76524,76526,76528,76530,76532,76534,76536,76538,76540,76542,76544,76547,76549],{"class":326,"line":8744},[324,76523,74475],{"class":867},[324,76525,58969],{"class":734},[324,76527,868],{"class":867},[324,76529,1448],{"class":738},[324,76531,1830],{"class":863},[324,76533,75960],{"class":48699},[324,76535,76505],{"class":863},[324,76537,1448],{"class":738},[324,76539,1422],{"class":867},[324,76541,75967],{"class":734},[324,76543,868],{"class":867},[324,76545,76546],{"class":738},"'哈哈哈哈哈'",[324,76548,76477],{"class":867},[324,76550,75978],{"class":772},[324,76552,76553],{"class":326,"line":8750},[324,76554,488],{"emptyLinePlaceholder":487},[324,76556,76557],{"class":326,"line":8762},[324,76558,76559],{"class":772},"    \u002F\u002F 重复{n,m} 重复n到m次，逗号两侧不能有空格\n",[324,76561,76562,76564,76566,76568,76570,76572,76574,76577,76579,76581,76583,76585,76587,76589],{"class":326,"line":8774},[324,76563,74475],{"class":867},[324,76565,58969],{"class":734},[324,76567,868],{"class":867},[324,76569,1448],{"class":738},[324,76571,1830],{"class":863},[324,76573,75960],{"class":48699},[324,76575,76576],{"class":863},"{4,6}$",[324,76578,1448],{"class":738},[324,76580,1422],{"class":867},[324,76582,75967],{"class":734},[324,76584,868],{"class":867},[324,76586,76474],{"class":738},[324,76588,76477],{"class":867},[324,76590,75978],{"class":772},[324,76592,76593,76595,76597,76599,76601,76603,76605,76607,76609,76611,76613,76615,76617,76619],{"class":326,"line":8786},[324,76594,74475],{"class":867},[324,76596,58969],{"class":734},[324,76598,868],{"class":867},[324,76600,1448],{"class":738},[324,76602,1830],{"class":863},[324,76604,75960],{"class":48699},[324,76606,76576],{"class":863},[324,76608,1448],{"class":738},[324,76610,1422],{"class":867},[324,76612,75967],{"class":734},[324,76614,868],{"class":867},[324,76616,76546],{"class":738},[324,76618,76477],{"class":867},[324,76620,75978],{"class":772},[324,76622,76623,76625,76627,76629,76631,76633,76635,76637,76639,76641,76643,76645,76648,76650],{"class":326,"line":10445},[324,76624,74475],{"class":867},[324,76626,58969],{"class":734},[324,76628,868],{"class":867},[324,76630,1448],{"class":738},[324,76632,1830],{"class":863},[324,76634,75960],{"class":48699},[324,76636,76576],{"class":863},[324,76638,1448],{"class":738},[324,76640,1422],{"class":867},[324,76642,75967],{"class":734},[324,76644,868],{"class":867},[324,76646,76647],{"class":738},"'哈哈哈哈哈哈哈'",[324,76649,76477],{"class":867},[324,76651,76101],{"class":772},[324,76653,76654],{"class":326,"line":10470},[324,76655,488],{"emptyLinePlaceholder":487},[324,76657,76658],{"class":326,"line":10493},[324,76659,76660],{"class":772},"    \u002F\u002F 3.字符类 [abc] 只选一个字符\n",[324,76662,76663,76665,76667,76669,76671,76673,76676,76678,76680,76682,76684,76686,76689,76691],{"class":326,"line":10517},[324,76664,74475],{"class":867},[324,76666,58969],{"class":734},[324,76668,868],{"class":867},[324,76670,1448],{"class":738},[324,76672,1830],{"class":863},[324,76674,76675],{"class":916},"[abc]",[324,76677,1166],{"class":863},[324,76679,1448],{"class":738},[324,76681,1422],{"class":867},[324,76683,75967],{"class":734},[324,76685,868],{"class":867},[324,76687,76688],{"class":738},"'a'",[324,76690,75975],{"class":867},[324,76692,75978],{"class":772},[324,76694,76695,76697,76699,76701,76703,76705,76707,76709,76711,76713,76715,76717,76720,76722],{"class":326,"line":10522},[324,76696,74475],{"class":867},[324,76698,58969],{"class":734},[324,76700,868],{"class":867},[324,76702,1448],{"class":738},[324,76704,1830],{"class":863},[324,76706,76675],{"class":916},[324,76708,1166],{"class":863},[324,76710,1448],{"class":738},[324,76712,1422],{"class":867},[324,76714,75967],{"class":734},[324,76716,868],{"class":867},[324,76718,76719],{"class":738},"'b'",[324,76721,75975],{"class":867},[324,76723,75978],{"class":772},[324,76725,76726,76728,76730,76732,76734,76736,76738,76740,76742,76744,76746,76748,76751,76753],{"class":326,"line":10527},[324,76727,74475],{"class":867},[324,76729,58969],{"class":734},[324,76731,868],{"class":867},[324,76733,1448],{"class":738},[324,76735,1830],{"class":863},[324,76737,76675],{"class":916},[324,76739,1166],{"class":863},[324,76741,1448],{"class":738},[324,76743,1422],{"class":867},[324,76745,75967],{"class":734},[324,76747,868],{"class":867},[324,76749,76750],{"class":738},"'c'",[324,76752,75975],{"class":867},[324,76754,75978],{"class":772},[324,76756,76757,76759,76761,76763,76765,76767,76769,76771,76773,76775,76778,76780],{"class":326,"line":10532},[324,76758,74475],{"class":867},[324,76760,58969],{"class":734},[324,76762,868],{"class":867},[324,76764,1448],{"class":738},[324,76766,76675],{"class":916},[324,76768,1448],{"class":738},[324,76770,1422],{"class":867},[324,76772,75967],{"class":734},[324,76774,868],{"class":867},[324,76776,76777],{"class":738},"'ab'",[324,76779,75975],{"class":867},[324,76781,75978],{"class":772},[324,76783,76784,76786,76788,76790,76792,76794,76796,76798,76800,76802,76804,76806,76808,76810],{"class":326,"line":10541},[324,76785,74475],{"class":867},[324,76787,58969],{"class":734},[324,76789,868],{"class":867},[324,76791,1448],{"class":738},[324,76793,1830],{"class":863},[324,76795,76675],{"class":916},[324,76797,1166],{"class":863},[324,76799,1448],{"class":738},[324,76801,1422],{"class":867},[324,76803,75967],{"class":734},[324,76805,868],{"class":867},[324,76807,76777],{"class":738},[324,76809,75975],{"class":867},[324,76811,76812],{"class":772},"\u002F\u002Ffalse     不加精确匹配，就是true\n",[324,76814,76815,76817,76819,76821,76823,76825,76827,76830,76832,76834,76836,76838,76840,76842],{"class":326,"line":10546},[324,76816,74475],{"class":867},[324,76818,58969],{"class":734},[324,76820,868],{"class":867},[324,76822,1448],{"class":738},[324,76824,1830],{"class":863},[324,76826,76675],{"class":916},[324,76828,76829],{"class":863},"{2}$",[324,76831,1448],{"class":738},[324,76833,1422],{"class":867},[324,76835,75967],{"class":734},[324,76837,868],{"class":867},[324,76839,76777],{"class":738},[324,76841,75975],{"class":867},[324,76843,76844],{"class":772},"\u002F\u002Ftrue   可以选两个\n",[324,76846,76847,76849,76851,76853,76855,76857,76860,76862,76864,76866,76868,76870,76873,76875],{"class":326,"line":10552},[324,76848,74475],{"class":867},[324,76850,58969],{"class":734},[324,76852,868],{"class":867},[324,76854,1448],{"class":738},[324,76856,1830],{"class":863},[324,76858,76859],{"class":916},"[a-z]",[324,76861,1166],{"class":863},[324,76863,1448],{"class":738},[324,76865,1422],{"class":867},[324,76867,75967],{"class":734},[324,76869,868],{"class":867},[324,76871,76872],{"class":738},"'p'",[324,76874,76031],{"class":867},[324,76876,76877],{"class":772},"\u002F\u002Ftrue   依然只能选一个\n",[324,76879,76880,76882,76884,76886,76888,76890,76893,76895,76897,76899,76901,76903,76905,76907],{"class":326,"line":10573},[324,76881,74475],{"class":867},[324,76883,58969],{"class":734},[324,76885,868],{"class":867},[324,76887,1448],{"class":738},[324,76889,1830],{"class":863},[324,76891,76892],{"class":916},"[A-Z]",[324,76894,1166],{"class":863},[324,76896,1448],{"class":738},[324,76898,1422],{"class":867},[324,76900,75967],{"class":734},[324,76902,868],{"class":867},[324,76904,76872],{"class":738},[324,76906,76031],{"class":867},[324,76908,76101],{"class":772},[324,76910,76911,76913,76915,76917,76919,76921,76923,76925,76927,76929,76931,76933,76936,76938],{"class":326,"line":10579},[324,76912,74475],{"class":867},[324,76914,58969],{"class":734},[324,76916,868],{"class":867},[324,76918,1448],{"class":738},[324,76920,1830],{"class":863},[324,76922,76892],{"class":916},[324,76924,1166],{"class":863},[324,76926,1448],{"class":738},[324,76928,1422],{"class":867},[324,76930,75967],{"class":734},[324,76932,868],{"class":867},[324,76934,76935],{"class":738},"'P'",[324,76937,76031],{"class":867},[324,76939,75978],{"class":772},[324,76941,76942,76944,76946,76948,76950,76952,76955,76957,76959,76961,76963,76965,76968,76970],{"class":326,"line":10593},[324,76943,74475],{"class":867},[324,76945,58969],{"class":734},[324,76947,868],{"class":867},[324,76949,1448],{"class":738},[324,76951,1830],{"class":863},[324,76953,76954],{"class":916},"[0-9]",[324,76956,1166],{"class":863},[324,76958,1448],{"class":738},[324,76960,1422],{"class":867},[324,76962,75967],{"class":734},[324,76964,868],{"class":867},[324,76966,76967],{"class":738},"'0'",[324,76969,76031],{"class":867},[324,76971,75978],{"class":772},[324,76973,76974,76976,76978,76980,76982,76984,76987,76989,76991,76993,76995,76997,76999,77001],{"class":326,"line":10599},[324,76975,74475],{"class":867},[324,76977,58969],{"class":734},[324,76979,868],{"class":867},[324,76981,1448],{"class":738},[324,76983,1830],{"class":863},[324,76985,76986],{"class":916},"[a-zA-Z0-9]",[324,76988,1166],{"class":863},[324,76990,1448],{"class":738},[324,76992,1422],{"class":867},[324,76994,75967],{"class":734},[324,76996,868],{"class":867},[324,76998,76872],{"class":738},[324,77000,75975],{"class":867},[324,77002,75978],{"class":772},[324,77004,77005,77007,77009],{"class":326,"line":10626},[324,77006,53139],{"class":867},[324,77008,52535],{"class":52022},[324,77010,52029],{"class":867},[324,77012,77013,77015,77017],{"class":326,"line":10635},[324,77014,52507],{"class":867},[324,77016,52522],{"class":52022},[324,77018,52029],{"class":867},[324,77020,77021],{"class":326,"line":10641},[324,77022,488],{"emptyLinePlaceholder":487},[324,77024,77025,77027,77029],{"class":326,"line":10649},[324,77026,52507],{"class":867},[324,77028,51357],{"class":52022},[324,77030,52029],{"class":867},[151,77032,77034],{"id":77033},"_3624-修饰符","3.6.2.4 修饰符",[19,77036,77037],{},[48,77038],{"alt":50,"src":77039},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-210.png",[19,77041,77042],{},"replace是个方法，使用的时候一定不要忘记括号()",[19,77044,77045],{},[48,77046],{"alt":50,"src":77047},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-211.png",[316,77049,77051],{"className":51355,"code":77050,"language":51357,"meta":50,"style":50},"\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",[269,77052,77053,77063,77077,77085,77099,77119,77131,77139,77147,77155,77187,77218,77223,77255,77266,77299,77308,77316,77324],{"__ignoreMap":50},[324,77054,77055,77057,77059,77061],{"class":326,"line":327},[324,77056,52019],{"class":867},[324,77058,52023],{"class":52022},[324,77060,52026],{"class":734},[324,77062,52029],{"class":867},[324,77064,77065,77067,77069,77071,77073,77075],{"class":326,"line":203},[324,77066,1774],{"class":867},[324,77068,51357],{"class":52022},[324,77070,52038],{"class":734},[324,77072,913],{"class":867},[324,77074,52043],{"class":738},[324,77076,52029],{"class":867},[324,77078,77079,77081,77083],{"class":326,"line":338},[324,77080,1774],{"class":867},[324,77082,52056],{"class":52022},[324,77084,52029],{"class":867},[324,77086,77087,77089,77091,77093,77095,77097],{"class":326,"line":344},[324,77088,52866],{"class":867},[324,77090,52066],{"class":52022},[324,77092,52069],{"class":734},[324,77094,913],{"class":867},[324,77096,52074],{"class":738},[324,77098,52029],{"class":867},[324,77100,77101,77103,77105,77107,77109,77111,77113,77115,77117],{"class":326,"line":484},[324,77102,52866],{"class":867},[324,77104,52066],{"class":52022},[324,77106,15649],{"class":734},[324,77108,913],{"class":867},[324,77110,52113],{"class":738},[324,77112,52093],{"class":734},[324,77114,913],{"class":867},[324,77116,52120],{"class":738},[324,77118,52029],{"class":867},[324,77120,77121,77123,77125,77127,77129],{"class":326,"line":491},[324,77122,52866],{"class":867},[324,77124,52129],{"class":52022},[324,77126,52132],{"class":867},[324,77128,52129],{"class":52022},[324,77130,52029],{"class":867},[324,77132,77133,77135,77137],{"class":326,"line":496},[324,77134,52507],{"class":867},[324,77136,52056],{"class":52022},[324,77138,52029],{"class":867},[324,77140,77141,77143,77145],{"class":326,"line":502},[324,77142,1774],{"class":867},[324,77144,52522],{"class":52022},[324,77146,52029],{"class":867},[324,77148,77149,77151,77153],{"class":326,"line":508},[324,77150,52866],{"class":867},[324,77152,52535],{"class":52022},[324,77154,52029],{"class":867},[324,77156,77157,77159,77161,77163,77165,77167,77170,77172,77174,77176,77178,77180,77183,77185],{"class":326,"line":514},[324,77158,74475],{"class":867},[324,77160,58969],{"class":734},[324,77162,868],{"class":867},[324,77164,1448],{"class":738},[324,77166,1830],{"class":863},[324,77168,77169],{"class":48699},"java",[324,77171,1166],{"class":863},[324,77173,1448],{"class":738},[324,77175,1422],{"class":867},[324,77177,75967],{"class":734},[324,77179,868],{"class":867},[324,77181,77182],{"class":738},"'java'",[324,77184,76477],{"class":867},[324,77186,75978],{"class":772},[324,77188,77189,77191,77193,77195,77197,77199,77201,77203,77205,77207,77209,77211,77214,77216],{"class":326,"line":2343},[324,77190,74475],{"class":867},[324,77192,58969],{"class":734},[324,77194,868],{"class":867},[324,77196,1448],{"class":738},[324,77198,1830],{"class":863},[324,77200,77169],{"class":48699},[324,77202,1166],{"class":863},[324,77204,1448],{"class":738},[324,77206,1422],{"class":867},[324,77208,75967],{"class":734},[324,77210,868],{"class":867},[324,77212,77213],{"class":738},"'Java'",[324,77215,76477],{"class":867},[324,77217,76101],{"class":772},[324,77219,77220],{"class":326,"line":2348},[324,77221,77222],{"class":772},"    \u002F\u002F 不区分大小写、\n",[324,77224,77225,77227,77229,77231,77233,77235,77237,77239,77241,77243,77245,77247,77249,77251,77253],{"class":326,"line":2354},[324,77226,74475],{"class":867},[324,77228,58969],{"class":734},[324,77230,868],{"class":867},[324,77232,1448],{"class":738},[324,77234,1830],{"class":863},[324,77236,77169],{"class":48699},[324,77238,1166],{"class":863},[324,77240,1448],{"class":738},[324,77242,1305],{"class":863},[324,77244,1422],{"class":867},[324,77246,75967],{"class":734},[324,77248,868],{"class":867},[324,77250,77213],{"class":738},[324,77252,76477],{"class":867},[324,77254,75978],{"class":772},[324,77256,77257,77259,77261,77263],{"class":326,"line":2359},[324,77258,11950],{"class":863},[324,77260,74641],{"class":916},[324,77262,14293],{"class":863},[324,77264,77265],{"class":738}," 'java是一门编程语言，学完java工资很高'\n",[324,77267,77268,77270,77273,77275,77278,77281,77283,77285,77287,77289,77292,77294,77297],{"class":326,"line":2373},[324,77269,11950],{"class":863},[324,77271,77272],{"class":916}," result",[324,77274,14293],{"class":863},[324,77276,77277],{"class":867}," str.",[324,77279,77280],{"class":734},"replace",[324,77282,868],{"class":867},[324,77284,1448],{"class":738},[324,77286,77169],{"class":48699},[324,77288,1448],{"class":738},[324,77290,77291],{"class":863},"ig",[324,77293,13164],{"class":867},[324,77295,77296],{"class":738},"'前端'",[324,77298,874],{"class":867},[324,77300,77301,77303,77305],{"class":326,"line":2378},[324,77302,74475],{"class":867},[324,77304,58969],{"class":734},[324,77306,77307],{"class":867},"(result)\n",[324,77309,77310,77312,77314],{"class":326,"line":2384},[324,77311,53139],{"class":867},[324,77313,52535],{"class":52022},[324,77315,52029],{"class":867},[324,77317,77318,77320,77322],{"class":326,"line":2405},[324,77319,52507],{"class":867},[324,77321,52522],{"class":52022},[324,77323,52029],{"class":867},[324,77325,77326,77328,77330],{"class":326,"line":2410},[324,77327,52507],{"class":867},[324,77329,51357],{"class":52022},[324,77331,52029],{"class":867},[775,77333,77334],{},"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":50,"searchDepth":203,"depth":203,"links":77336},[77337,77347,77359,77376,77383,77391],{"id":54082,"depth":203,"text":54083,"children":77338},[77339,77340,77341,77342,77343,77344,77345,77346],{"id":54086,"depth":338,"text":54087},{"id":54119,"depth":338,"text":54120},{"id":54158,"depth":338,"text":54159},{"id":54316,"depth":338,"text":54317},{"id":54364,"depth":338,"text":54365},{"id":54501,"depth":338,"text":54502},{"id":54823,"depth":338,"text":54824},{"id":57811,"depth":338,"text":57812},{"id":57839,"depth":203,"text":57840,"children":77348},[77349,77350,77351,77352,77353,77354,77355,77356,77357,77358],{"id":57843,"depth":338,"text":57844},{"id":57866,"depth":338,"text":57867},{"id":58781,"depth":338,"text":58782},{"id":59471,"depth":338,"text":59472},{"id":59753,"depth":338,"text":59754},{"id":63914,"depth":338,"text":63915},{"id":64084,"depth":338,"text":64085},{"id":64212,"depth":338,"text":64213},{"id":64237,"depth":338,"text":64238},{"id":65626,"depth":338,"text":65627},{"id":66779,"depth":203,"text":66780,"children":77360},[77361,77362,77363,77364,77365,77366,77367,77368,77369,77370,77371,77372,77373,77374,77375],{"id":66783,"depth":338,"text":66784},{"id":67437,"depth":338,"text":67438},{"id":69132,"depth":338,"text":69133},{"id":69173,"depth":338,"text":69174},{"id":69215,"depth":338,"text":69216},{"id":69229,"depth":338,"text":69230},{"id":69278,"depth":338,"text":69279},{"id":69290,"depth":338,"text":69291},{"id":69305,"depth":338,"text":69306},{"id":69341,"depth":338,"text":69342},{"id":69422,"depth":338,"text":69423},{"id":69550,"depth":338,"text":69551},{"id":69562,"depth":338,"text":69563},{"id":69581,"depth":338,"text":69582},{"id":71692,"depth":338,"text":71693},{"id":71711,"depth":203,"text":71712,"children":77377},[77378,77379,77380,77381,77382],{"id":71732,"depth":338,"text":71733},{"id":71752,"depth":338,"text":71753},{"id":71801,"depth":338,"text":71802},{"id":71926,"depth":338,"text":71927},{"id":72107,"depth":338,"text":72108},{"id":72125,"depth":203,"text":72126,"children":77384},[77385,77386,77387,77388,77389,77390],{"id":72140,"depth":338,"text":72141},{"id":72199,"depth":338,"text":72200},{"id":72223,"depth":338,"text":72224},{"id":72543,"depth":338,"text":72544},{"id":72575,"depth":338,"text":72576},{"id":72598,"depth":338,"text":72599},{"id":75666,"depth":203,"text":75667,"children":77392},[77393,77394],{"id":75700,"depth":338,"text":75701},{"id":75739,"depth":338,"text":75740},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch3-web-apis",{"title":54054,"description":791},"wiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs","fsyWKB50sKQwy-LTDR6QPET-tuocjiLU1OtngUya7UQ",{"id":77401,"title":77402,"body":77403,"description":791,"extension":792,"meta":93540,"navigation":487,"path":93541,"seo":93542,"stem":93543,"__hash__":93544},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch4-js进阶.md","4.js进阶",{"type":7,"value":77404,"toc":93476},[77405,77408,77411,77415,77419,77424,77429,77440,77444,77449,77452,77456,77459,77464,77468,77472,77475,77480,77483,77487,77490,77498,77501,77505,77510,77515,77518,77522,77527,77532,77535,77539,77544,77547,77552,77555,77560,77563,77568,77573,77576,77579,77583,77588,77593,77596,77600,77604,77607,77610,77613,77617,77621,77626,77631,77634,77638,77643,77648,77651,77654,77657,77660,77663,77666,77669,77672,77675,77680,77684,77689,77694,77697,77700,77703,77706,77709,77712,77715,77718,77722,77726,77729,77732,77735,77740,77742,77745,77748,77751,77754,77757,77760,77763,77766,77769,77772,77775,77778,77781,77786,77791,77796,77799,77803,77806,77811,77815,77817,77828,77833,77934,77937,77940,77943,77946,77949,77952,77955,77958,77960,77963,77966,77969,77972,77975,77977,77980,77983,77986,77989,77992,77995,77997,78000,78002,78004,78007,78011,78015,78018,78021,78024,78027,78030,78033,78036,78039,78042,78047,78167,78170,78173,78178,78181,78184,78187,78190,78195,78198,78201,78204,78207,78212,78215,78315,78380,78454,78458,78461,78464,78468,78471,78485,78514,78517,78520,78523,78526,78529,78532,78535,78537,78540,78543,78546,78549,78553,78558,78562,78567,78642,78645,78828,78831,78834,78837,78840,78843,78845,78848,78851,78854,78857,78860,78863,78865,78869,78872,78877,78880,78883,78886,78889,78891,78896,78899,78902,78905,78908,78910,78915,78918,78921,78923,78925,78928,78932,78935,78938,78943,78946,78949,78952,79002,79007,79011,79016,79019,79088,79091,79100,79104,79109,79112,79115,79123,79126,79143,80945,80949,80953,80958,80961,80965,80971,80977,81129,81134,81139,81142,81145,81148,81151,81154,81157,81160,81163,81166,81169,81172,81175,81180,81184,81187,81198,81202,81207,81210,81213,81216,81219,81222,81224,81227,81230,81233,81236,81238,81255,81258,81262,81265,81270,81275,81278,81281,81285,81288,81291,81300,81303,81307,81310,81315,81320,81387,81391,81394,81397,81402,81407,81493,81498,81502,81505,81508,81523,81526,81531,81535,81540,81649,81652,81663,81813,81817,81822,81931,81935,81940,81945,81950,81953,81960,81980,82016,82180,82185,82188,82193,82200,82203,82206,82209,82268,82324,82380,82384,82389,82704,82707,82711,82714,82719,82828,82833,82837,82842,82846,82917,82921,82923,82926,82929,82967,83243,83247,83264,83330,83364,83368,83371,83376,83405,83412,83421,83426,83441,83446,83455,83458,83595,83599,83661,83665,83670,83915,83919,83924,83927,83930,83933,83936,83940,83945,85526,85530,85534,85540,85543,85548,85552,85555,85560,85563,85574,85578,85583,85587,85592,85597,85600,85605,85609,85613,85616,85621,85626,85629,85632,85635,85757,85762,85864,85867,85870,85874,85879,86051,86056,86060,86063,86068,86134,86139,86142,86273,86276,86281,86284,86287,86378,86383,86386,86389,86392,86395,86400,86405,86408,86413,86418,86423,86427,86430,86433,86438,86443,86448,86453,86507,86510,86513,86518,86521,86524,86529,86534,86539,86543,86548,86562,86567,86570,86575,86579,86584,86589,86594,86599,86604,86609,86614,86619,86622,86626,86631,86634,86637,86640,86645,86650,86653,86656,86660,86663,86666,86671,86676,86681,86686,86689,86694,86699,86760,86765,86768,86773,88014,88019,88023,88027,88032,88035,88040,88045,88048,88053,88055,88060,88064,88067,88070,88081,88085,88090,88095,88150,88155,88160,88165,88376,88381,88385,88390,88393,88395,88398,88401,88848,88853,88860,88866,88869,88872,89136,89141,89145,89410,89415,89419,89424,89429,89434,89439,89770,89773,89778,89783,89786,89790,89794,89799,89804,89809,89814,89819,89824,89828,89831,89836,89841,89844,89918,89923,89928,89933,89935,89938,90308,90313,90318,90323,90326,90329,90431,90436,90441,90544,90548,90553,90557,90561,90566,90571,90574,90579,90582,90585,90978,90983,90986,90989,90992,90995,91515,91519,91524,91529,91534,91537,91542,91545,91548,91930,91935,91937,91939,91942,91945,92457,92461,92522,92525,92528,92531,92535,92538,92543,92548,93473],[10,77406,77402],{"id":77407},"_4js进阶",[19,77409,77410],{},"这部分是对es6的新特性和es7,es8等的描述，统称为es6+",[14,77412,77414],{"id":77413},"_41-作用域","4.1 作用域",[35,77416,77418],{"id":77417},"_411-局部作用域","4.1.1 局部作用域",[19,77420,77421],{},[48,77422],{"alt":50,"src":77423},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-212.png",[19,77425,77426],{},[48,77427],{"alt":50,"src":77428},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-213.png",[1871,77430,77431,77434,77437],{},[195,77432,77433],{},"函数作用域在函数内部",[195,77435,77436],{},"块级作用域在{}",[195,77438,77439],{},"对象的那个{}不是作用域，不是块作用域",[35,77441,77443],{"id":77442},"_412-全局作用域","4.1.2 全局作用域",[19,77445,77446],{},[48,77447],{"alt":50,"src":77448},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-214.png",[19,77450,77451],{},"window.a=10不要这样写",[35,77453,77455],{"id":77454},"_413-作用域链","4.1.3 作用域链",[19,77457,77458],{},"变量查找机制",[19,77460,77461],{},[48,77462],{"alt":50,"src":77463},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-215.png",[14,77465,77467],{"id":77466},"_42-垃圾回收机制","4.2 垃圾回收机制",[35,77469,77471],{"id":77470},"_421-大体介绍","4.2.1 大体介绍",[19,77473,77474],{},"垃圾回收机制(Garbage Collection) 简称 GC",[19,77476,77477],{},[48,77478],{"alt":50,"src":77479},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-216.png",[19,77481,77482],{},"内存泄漏：程序中分配的内存由于某种原因程序未释放或无法释放叫作泄露",[35,77484,77486],{"id":77485},"_422-js垃圾回收机制算法说明","4.2.2 JS垃圾回收机制算法说明",[19,77488,77489],{},"堆栈空间分配区别：",[192,77491,77492,77495],{},[195,77493,77494],{},"栈（操作系统）: 由操作系统自动分配释放函数的参数值、局部变量等，基本数据类型放到栈里面。",[195,77496,77497],{},"堆（操作系统）: 一般由程序员分配释放，若程序员不释放，由垃圾回收机制回收。复杂数据类型放到堆里面。",[19,77499,77500],{},"目前常见的浏览器垃圾回收算法: 引用计数法 和 标记清除法",[151,77502,77504],{"id":77503},"_4221-引用计数","4.2.2.1 引用计数",[19,77506,77507],{},[48,77508],{"alt":50,"src":77509},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-217.png",[19,77511,77512],{},[48,77513],{"alt":50,"src":77514},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-218.png",[19,77516,77517],{},"如果不写o1.a=o2和o2.a=o1，则函数执行完之后，o1和o2都是局部变量，会自动被系统回收掉，加上这个之后堆内的这两个对象相互指引，引用次数不为0，导致了变量的无法回收，就产生了内存泄漏",[151,77519,77521],{"id":77520},"_4222-标记清除法","4.2.2.2 标记清除法",[19,77523,77524],{},[48,77525],{"alt":50,"src":77526},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-219.png",[19,77528,77529],{},[48,77530],{"alt":50,"src":77531},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-220.png",[19,77533,77534],{},"这个算法就是全局开始的，找到就是有用，找不到就是没用，就清除",[14,77536,77538],{"id":77537},"_43-闭包","4.3 闭包",[19,77540,77541],{},[48,77542],{"alt":50,"src":77543},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-221.png",[19,77545,77546],{},"闭包：内层函数+外层函数的变量",[19,77548,77549],{},[48,77550],{"alt":50,"src":77551},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-222.png",[19,77553,77554],{},"closure就是闭包",[19,77556,77557],{},[48,77558],{"alt":50,"src":77559},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-223.png",[19,77561,77562],{},"内层函数必须包含外层函数的变量才是闭包",[19,77564,77565],{},[48,77566],{"alt":50,"src":77567},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-224.png",[19,77569,77570],{},[48,77571],{"alt":50,"src":77572},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-225.png",[19,77574,77575],{},"闭包可能会引起内存泄漏",[19,77577,77578],{},"闭包作用：封闭数据，实现数据私有，外部也可以访问函数内部的变量",[14,77580,77582],{"id":77581},"_44-变量提升","4.4 变量提升",[19,77584,77585],{},[48,77586],{"alt":50,"src":77587},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-226.png",[19,77589,77590],{},[48,77591],{"alt":50,"src":77592},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-227.png",[19,77594,77595],{},"在代码执行之前，先去检测当前作用域下所有var声明的变量，把所有var声明的变量提到当前作用域的前边，只提升声明，但不提升赋值",[14,77597,77599],{"id":77598},"_45-函数进阶","4.5 函数进阶",[35,77601,77603],{"id":77602},"_451-函数提升","4.5.1 函数提升",[19,77605,77606],{},"在程序执行之前会把所有函数声明提升到当前作用域的最前面",[19,77608,77609],{},"只提升函数声明，不提升函数调用",[52535,77611,77612],{},"\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",[35,77614,77616],{"id":77615},"_452-函数参数","4.5.2 函数参数",[151,77618,77620],{"id":77619},"_4521-动态参数","4.5.2.1 动态参数",[19,77622,77623],{},[48,77624],{"alt":50,"src":77625},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-228.png",[19,77627,77628],{},[48,77629],{"alt":50,"src":77630},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-229.png",[19,77632,77633],{},"箭头函数里边没有arguments",[151,77635,77637],{"id":77636},"_4522-剩余参数","4.5.2.2 剩余参数",[19,77639,77640],{},[48,77641],{"alt":50,"src":77642},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-230.png",[19,77644,77645],{},[48,77646],{"alt":50,"src":77647},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-231.png",[19,77649,77650],{},"剩余参数使用的时候不需要写...",[19,77652,77653],{},"剩余参数更加的灵活，我可以在函数括号中写上参数，然后再写...arr，如果是：",[19,77655,77656],{},"  function getSum(a,b,...arr) {",[19,77658,77659],{},"  console.log(11)",[19,77661,77662],{},"  }",[19,77664,77665],{},"  getSum(1,2,3,4)",[19,77667,77668],{},"  将1传给a，2传给b，剩下的传给剩余参数",[19,77670,77671],{},"  getSum(1,2)",[19,77673,77674],{},"  将1传给a，2传给b，剩余参数为一个空数组",[19,77676,77677],{},[48,77678],{"alt":50,"src":77679},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-232.png",[151,77681,77683],{"id":77682},"_4523-展开运算符与剩余参数的区别","4.5.2.3 展开运算符与剩余参数的区别",[19,77685,77686],{},[48,77687],{"alt":50,"src":77688},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-233.png",[19,77690,77691],{},[48,77692],{"alt":50,"src":77693},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-234.png",[19,77695,77696],{},"...arr其实是等价于1,2,3的，这样才可以丢给Math对象来求最值",[19,77698,77699],{},"展开运算符可以用于数组之间的合并：",[19,77701,77702],{},"const arr1 = [1, 2, 3]",[19,77704,77705],{},"const arr2 = [3, 4, 5]",[19,77707,77708],{},"const arr = [...arr1, ...arr2]",[19,77710,77711],{},"console.log(arr) \u002F\u002F输出[1,2,3,3,4,5]",[19,77713,77714],{},"剩余参数：函数参数使用，得到真数组",[19,77716,77717],{},"展开运算符：数组中使用，数组展开",[35,77719,77721],{"id":77720},"_453-箭头函数","4.5.3 箭头函数",[151,77723,77725],{"id":77724},"_4531-语法基本介绍","4.5.3.1 语法基本介绍",[19,77727,77728],{},"箭头函数不是为了替代以前的函数，不是意味着以前的函数不再写了，箭头函数是为了替代原来需要匿名函数的地方",[19,77730,77731],{},"它不是万能的！！！",[19,77733,77734],{},"箭头函数在vue中用的非常多，必须保证百分百会！！！",[19,77736,77737],{},[48,77738],{"alt":50,"src":77739},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-235.png",[19,77741,897],{},[19,77743,77744],{},"① 只有一个形参的时候，可以省略小括号：",[19,77746,77747],{},"const fn=x=>{console.log(x)}",[19,77749,77750],{},"② 只有一行代码时可以省略大括号：",[19,77752,77753],{},"const fn=x=>console.log(11)",[19,77755,77756],{},"③ 如果函数有返回值的话，如果只有一行代码的话return可以省略，大括号也可以省略，写在一行中：",[19,77758,77759],{},"const fn=x=>x+x",[19,77761,77762],{},"④ 没有参数或者两个参数及以上的都不可以省去括号",[19,77764,77765],{},"⑤ 阻止表单默认提交：",[19,77767,77768],{},"const form = document.querySelector('form')",[19,77770,77771],{},"form.addEventListener('click', ev => ev.preventDefault())",[19,77773,77774],{},"⑤ 箭头函数可以直接返回一个对象，理解为自带return的：",[19,77776,77777],{},"const fn=uname=>({uname:uname})",[19,77779,77780],{},"对象是需要大括号的，函数也有大括号，函数的大括号和对象大括号冲突了，所以将对象用小括号进行包住，这个等价会有一个返回值",[19,77782,77783],{},[48,77784],{"alt":50,"src":77785},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-236.png",[19,77787,77788],{},[48,77789],{"alt":50,"src":77790},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-237.png",[19,77792,77793],{},[48,77794],{"alt":50,"src":77795},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-238.png",[19,77797,77798],{},"一定不要忘记用()，有()就理解为自带return",[151,77800,77802],{"id":77801},"_4532-箭头函数参数","4.5.3.2 箭头函数参数",[19,77804,77805],{},"箭头函数是没有动态参数的arguments",[19,77807,77808],{},[48,77809],{"alt":50,"src":77810},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-239.png",[151,77812,77814],{"id":77813},"_4533-箭头函数this","4.5.3.3 箭头函数this",[19,77816,12061],{},[192,77818,77819,77822,77825],{},[195,77820,77821],{},"可以理解为箭头函数中this值就看它父亲的this的指向",[195,77823,77824],{},"事件回调函数使用箭头函数时，this 为全局的 window",[195,77826,77827],{},"DOM事件回调函数最好不要使用箭头函数，尤其是需要用到this的时候",[19,77829,77830],{},[48,77831],{"alt":50,"src":77832},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-240.png",[316,77834,77836],{"className":53789,"code":77835,"language":53791,"meta":50,"style":50},"  \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",[269,77837,77838,77846,77851,77856,77861,77866,77871,77875,77880,77884,77888,77893,77898,77903,77907,77911,77916,77921,77926],{"__ignoreMap":50},[324,77839,77840,77842,77844],{"class":326,"line":327},[324,77841,52866],{"class":867},[324,77843,52535],{"class":52022},[324,77845,52029],{"class":867},[324,77847,77848],{"class":326,"line":203},[324,77849,77850],{"class":867},"    \u002F\u002F 1.以前this的指向：谁调用的这个函数，this就指向谁\n",[324,77852,77853],{"class":326,"line":338},[324,77854,77855],{"class":867},"    console.log(this) \u002F\u002F指向window\n",[324,77857,77858],{"class":326,"line":344},[324,77859,77860],{"class":867},"    \u002F\u002F window.console.log(111)   实际写法，window进行了省略\n",[324,77862,77863],{"class":326,"line":484},[324,77864,77865],{"class":867},"    function fn() {\n",[324,77867,77868],{"class":326,"line":491},[324,77869,77870],{"class":867},"      console.log(this)  \u002F\u002F指向window\n",[324,77872,77873],{"class":326,"line":496},[324,77874,2917],{"class":867},[324,77876,77877],{"class":326,"line":502},[324,77878,77879],{"class":867},"    window.fn()\u002F\u002F实际写法，调用时可以省略window\n",[324,77881,77882],{"class":326,"line":508},[324,77883,488],{"emptyLinePlaceholder":487},[324,77885,77886],{"class":326,"line":514},[324,77887,72245],{"class":867},[324,77889,77890],{"class":326,"line":2343},[324,77891,77892],{"class":867},"      name: 'andy',\n",[324,77894,77895],{"class":326,"line":2348},[324,77896,77897],{"class":867},"      sayHai: function () {\n",[324,77899,77900],{"class":326,"line":2354},[324,77901,77902],{"class":867},"        console.log(this)\n",[324,77904,77905],{"class":326,"line":2359},[324,77906,53120],{"class":867},[324,77908,77909],{"class":326,"line":2373},[324,77910,2917],{"class":867},[324,77912,77913],{"class":326,"line":2378},[324,77914,77915],{"class":867},"    obj.sayHai() \u002F\u002Fthis指向obj\n",[324,77917,77918],{"class":326,"line":2384},[324,77919,77920],{"class":867},"    \u002F\u002F 2.箭头函数的this\n",[324,77922,77923],{"class":326,"line":2405},[324,77924,77925],{"class":867},"    const fn = () => console.log(this)\n",[324,77927,77928,77930,77932],{"class":326,"line":2410},[324,77929,53139],{"class":867},[324,77931,52535],{"class":52022},[324,77933,52029],{"class":867},[19,77935,77936],{},"2.箭头函数的this 是上一层作用域的this指向，箭头函数是不会创建自己的this的",[19,77938,77939],{},"const fn = () => console.log(this)",[19,77941,77942],{},"fn() \u002F\u002F指向window",[19,77944,77945],{},"\u002F\u002F 3.对象方法箭头函数 this",[19,77947,77948],{},"①",[19,77950,77951],{},"const obj = {",[19,77953,77954],{},"uname: 'pink老师',",[19,77956,77957],{},"sayHai: () => console.log(this) \u002F\u002Fthis指向的是window",[19,77959,1810],{},[19,77961,77962],{},"调用对象里边的函数",[19,77964,77965],{},"箭头函数里不会创建自己的this，所以在箭头函数没有this，所以会往这个箭头函数上方去寻找，对象是没有作用域的，上一层的作用域是指向window的，因为obj在这个作用域，也就是说可以看obj的this的指向，指向window，所以这个this指向window，obj实际为window.obj",[19,77967,77968],{},"obj.sayHai()",[19,77970,77971],{},"②",[19,77973,77974],{},"const obj1 = {",[19,77976,77954],{},[19,77978,77979],{},"sayHai: function () {",[19,77981,77982],{},"let i = 10",[19,77984,77985],{},"const count = () => {",[19,77987,77988],{},"console.log(this)",[19,77990,77991],{},"这个this指向的是obj1,箭头函数不会创建this，所以不指向这个作用域的的父亲",[19,77993,77994],{},"也就是count，这个作用域的上层作用域在这个匿名函数中，这个匿名函数的this指向的obj1",[19,77996,1810],{},[19,77998,77999],{},"count()",[19,78001,1810],{},[19,78003,1810],{},[19,78005,78006],{},"obj1.sayHai()",[14,78008,78010],{"id":78009},"_46-解构赋值","4.6 解构赋值",[35,78012,78014],{"id":78013},"_461-数组解构","4.6.1 数组解构",[19,78016,78017],{},"以前要是使用数组中的值的话：",[19,78019,78020],{},"假设一个数组我存放了3个值，分别为最大值，最小值和平均值，我要使用里边的值的话，我需要再去声明这个常量",[19,78022,78023],{},"const arr=[100,60,80]",[19,78025,78026],{},"const max=arr[0]",[19,78028,78029],{},"const min=arr[1]",[19,78031,78032],{},"const avg=arr[2]",[19,78034,78035],{},"要写很多行代码，较为麻烦，所以我们需要用到数组解构",[19,78037,78038],{},"用数组解构的话：const [max,min,avr]=[100,60,80]",[19,78040,78041],{},"这个写法就类似于上边的那种用很多const的方法",[19,78043,78044],{},[48,78045],{"alt":50,"src":78046},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-241.png",[316,78048,78050],{"className":51355,"code":78049,"language":51357,"meta":50,"style":50},"①变量之间交换值:\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",[269,78051,78052,78057,78062,78067,78072,78077,78081,78085,78090,78094,78099,78104,78108,78113,78118,78129,78139,78144,78149,78154,78158,78162],{"__ignoreMap":50},[324,78053,78054],{"class":326,"line":327},[324,78055,78056],{"class":867},"①变量之间交换值:\n",[324,78058,78059],{"class":326,"line":203},[324,78060,78061],{"class":867},"let a=1\n",[324,78063,78064],{"class":326,"line":338},[324,78065,78066],{"class":867},"let b=2;\n",[324,78068,78069],{"class":326,"line":344},[324,78070,78071],{"class":867},"必须加这行代码，不然就会报错\n",[324,78073,78074],{"class":326,"line":484},[324,78075,78076],{"class":867},"[b,a]=[a,b]\n",[324,78078,78079],{"class":326,"line":491},[324,78080,488],{"emptyLinePlaceholder":487},[324,78082,78083],{"class":326,"line":496},[324,78084,488],{"emptyLinePlaceholder":487},[324,78086,78087],{"class":326,"line":502},[324,78088,78089],{"class":867},"可以写成下面的方式：\n",[324,78091,78092],{"class":326,"line":508},[324,78093,78061],{"class":867},[324,78095,78096],{"class":326,"line":514},[324,78097,78098],{"class":867},"let b=2\n",[324,78100,78101],{"class":326,"line":2343},[324,78102,78103],{"class":867},";[b,a]=[a,b]\n",[324,78105,78106],{"class":326,"line":2348},[324,78107,488],{"emptyLinePlaceholder":487},[324,78109,78110],{"class":326,"line":2354},[324,78111,78112],{"class":867},"②排序\n",[324,78114,78115],{"class":326,"line":2359},[324,78116,78117],{"class":867},"const arr1 = [2, 6, 4, 3, 5, 1]\n",[324,78119,78120,78123,78126],{"class":326,"line":2373},[324,78121,78122],{"class":867},"for (let i = 0; i ",[324,78124,1774],{"class":78125},"s7hpK",[324,78127,78128],{"class":867}," arr1.length; i++) {\n",[324,78130,78131,78134,78136],{"class":326,"line":2378},[324,78132,78133],{"class":867},"   for (let j = 0; j ",[324,78135,1774],{"class":78125},[324,78137,78138],{"class":867}," arr1.length - 1; j++) {\n",[324,78140,78141],{"class":326,"line":2384},[324,78142,78143],{"class":867},"      if (arr1[j] > arr1[j + 1]) {\n",[324,78145,78146],{"class":326,"line":2405},[324,78147,78148],{"class":867},"         [arr1[j + 1], arr1[j]] = [arr1[j], arr1[j + 1]]\n",[324,78150,78151],{"class":326,"line":2410},[324,78152,78153],{"class":867},"       }\n",[324,78155,78156],{"class":326,"line":2424},[324,78157,5038],{"class":867},[324,78159,78160],{"class":326,"line":2429},[324,78161,2296],{"class":867},[324,78163,78164],{"class":326,"line":2458},[324,78165,78166],{"class":867},"console.log(arr1)\n",[19,78168,78169],{},"数组解构的细节：",[19,78171,78172],{},"①变量多，单元值少",[19,78174,78175],{},[48,78176],{"alt":50,"src":78177},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-242.png",[19,78179,78180],{},"防止出现undefined的方法：",[19,78182,78183],{},"const [a=0,b=0] =[1]",[19,78185,78186],{},"a为1，b为0；优先执行传过来的参数，没有参数传过来就是用自己的参数",[19,78188,78189],{},"②变量少，单元值多",[19,78191,78192],{},[48,78193],{"alt":50,"src":78194},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-243.png",[19,78196,78197],{},"此时可以使用剩余参数来接收多余的值",[19,78199,78200],{},"const [a,b,...c]=[1,2,3,4]",[19,78202,78203],{},"console.log(c) 输出[3,4]",[19,78205,78206],{},"③可以按需导入，忽略某些返回值",[19,78208,78209],{},[48,78210],{"alt":50,"src":78211},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-244.png",[19,78213,78214],{},"④支持多维数组的结构",[316,78216,78220],{"className":78217,"code":78218,"language":78219,"meta":50,"style":50},"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",[269,78221,78222,78250,78266,78281,78296],{"__ignoreMap":50},[324,78223,78224,78226,78228,78230,78232,78234,78236,78238,78241,78243,78245,78247],{"class":326,"line":327},[324,78225,7521],{"class":863},[324,78227,52555],{"class":867},[324,78229,913],{"class":863},[324,78231,52948],{"class":867},[324,78233,1082],{"class":916},[324,78235,13164],{"class":867},[324,78237,944],{"class":916},[324,78239,78240],{"class":867},", [",[324,78242,938],{"class":916},[324,78244,13164],{"class":867},[324,78246,1157],{"class":916},[324,78248,78249],{"class":867},"]]\n",[324,78251,78252,78255,78257,78259,78261,78263],{"class":326,"line":203},[324,78253,78254],{"class":867},"console.",[324,78256,58969],{"class":734},[324,78258,4580],{"class":867},[324,78260,1056],{"class":916},[324,78262,4945],{"class":867},[324,78264,78265],{"class":772},"  \u002F\u002F1\n",[324,78267,78268,78270,78272,78274,78276,78278],{"class":326,"line":338},[324,78269,78254],{"class":867},[324,78271,58969],{"class":734},[324,78273,4580],{"class":867},[324,78275,1082],{"class":916},[324,78277,4945],{"class":867},[324,78279,78280],{"class":772},"  \u002F\u002F2\n",[324,78282,78283,78285,78287,78289,78291,78293],{"class":326,"line":344},[324,78284,78254],{"class":867},[324,78286,58969],{"class":734},[324,78288,4580],{"class":867},[324,78290,944],{"class":916},[324,78292,4945],{"class":867},[324,78294,78295],{"class":772},"  \u002F\u002F[3,4]\n",[324,78297,78298,78300,78302,78304,78306,78308,78310,78312],{"class":326,"line":484},[324,78299,78254],{"class":867},[324,78301,58969],{"class":734},[324,78303,4580],{"class":867},[324,78305,944],{"class":916},[324,78307,5630],{"class":867},[324,78309,1056],{"class":916},[324,78311,4945],{"class":867},[324,78313,78314],{"class":772},"  \u002F\u002F3\n",[316,78316,78318],{"className":78217,"code":78317,"language":78219,"meta":50,"style":50},"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",[269,78319,78320,78347,78358,78369],{"__ignoreMap":50},[324,78321,78322,78324,78327,78329,78331,78333,78335,78337,78339,78341,78343,78345],{"class":326,"line":327},[324,78323,7521],{"class":863},[324,78325,78326],{"class":867}," [a, b, c] ",[324,78328,913],{"class":863},[324,78330,52948],{"class":867},[324,78332,1082],{"class":916},[324,78334,13164],{"class":867},[324,78336,944],{"class":916},[324,78338,78240],{"class":867},[324,78340,938],{"class":916},[324,78342,13164],{"class":867},[324,78344,1157],{"class":916},[324,78346,78249],{"class":867},[324,78348,78349,78351,78353,78356],{"class":326,"line":203},[324,78350,78254],{"class":867},[324,78352,58969],{"class":734},[324,78354,78355],{"class":867},"(a)",[324,78357,78265],{"class":772},[324,78359,78360,78362,78364,78367],{"class":326,"line":338},[324,78361,78254],{"class":867},[324,78363,58969],{"class":734},[324,78365,78366],{"class":867},"(b)",[324,78368,78280],{"class":772},[324,78370,78371,78373,78375,78378],{"class":326,"line":344},[324,78372,78254],{"class":867},[324,78374,58969],{"class":734},[324,78376,78377],{"class":867},"(c)",[324,78379,78295],{"class":772},[316,78381,78383],{"className":78217,"code":78382,"language":78219,"meta":50,"style":50},"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",[269,78384,78385,78412,78422,78432,78442],{"__ignoreMap":50},[324,78386,78387,78389,78392,78394,78396,78398,78400,78402,78404,78406,78408,78410],{"class":326,"line":327},[324,78388,7521],{"class":863},[324,78390,78391],{"class":867}," [a, b, [c, d]] ",[324,78393,913],{"class":863},[324,78395,52948],{"class":867},[324,78397,1082],{"class":916},[324,78399,13164],{"class":867},[324,78401,944],{"class":916},[324,78403,78240],{"class":867},[324,78405,938],{"class":916},[324,78407,13164],{"class":867},[324,78409,1157],{"class":916},[324,78411,78249],{"class":867},[324,78413,78414,78416,78418,78420],{"class":326,"line":203},[324,78415,78254],{"class":867},[324,78417,58969],{"class":734},[324,78419,78355],{"class":867},[324,78421,78265],{"class":772},[324,78423,78424,78426,78428,78430],{"class":326,"line":338},[324,78425,78254],{"class":867},[324,78427,58969],{"class":734},[324,78429,78366],{"class":867},[324,78431,78280],{"class":772},[324,78433,78434,78436,78438,78440],{"class":326,"line":344},[324,78435,78254],{"class":867},[324,78437,58969],{"class":734},[324,78439,78377],{"class":867},[324,78441,78314],{"class":772},[324,78443,78444,78446,78448,78451],{"class":326,"line":484},[324,78445,78254],{"class":867},[324,78447,58969],{"class":734},[324,78449,78450],{"class":867},"(d)",[324,78452,78453],{"class":772},"  \u002F\u002F4\n",[35,78455,78457],{"id":78456},"_462-对象解构","4.6.2 对象解构",[19,78459,78460],{},"对象解构是将对象属性和方法快速批量赋值给一系列变量的简洁语法",[19,78462,78463],{},"用的非常非常多！！！！！！",[151,78465,78467],{"id":78466},"_4621-对象解构的基本用法","4.6.2.1 对象解构的基本用法",[19,78469,78470],{},"基本语法：",[192,78472,78473,78476,78479,78482],{},[195,78474,78475],{},"赋值运算符 = 左侧的 {} 用于批量声明变量，右侧对象的属性值将被赋值给左侧的变量",[195,78477,78478],{},"对象属性的值将被赋值给与属性名相同的变量",[195,78480,78481],{},"注意解构的变量名不要和外面的变量名冲突否则报错",[195,78483,78484],{},"对象中找不到与变量名一致的属性时变量值为 undefined",[316,78486,78488],{"className":51355,"code":78487,"language":51357,"meta":50,"style":50},"const obj = {\n   uname: 'pink老师',\n   age: 18,\n}\nconst { uname, age } = obj\n",[269,78489,78490,78495,78500,78505,78509],{"__ignoreMap":50},[324,78491,78492],{"class":326,"line":327},[324,78493,78494],{"class":867},"const obj = {\n",[324,78496,78497],{"class":326,"line":203},[324,78498,78499],{"class":867},"   uname: 'pink老师',\n",[324,78501,78502],{"class":326,"line":338},[324,78503,78504],{"class":867},"   age: 18,\n",[324,78506,78507],{"class":326,"line":344},[324,78508,2296],{"class":867},[324,78510,78511],{"class":326,"line":484},[324,78512,78513],{"class":867},"const { uname, age } = obj\n",[19,78515,78516],{},"上方代码这样写等价于：",[19,78518,78519],{},"const uname等价于obj.uname",[19,78521,78522],{},"变量名可以重新改名：",[19,78524,78525],{},"const uname='red老师'",[19,78527,78528],{},"const user={",[19,78530,78531],{},"  uname:'pink老师',",[19,78533,78534],{},"  age:18",[19,78536,1810],{},[19,78538,78539],{},"const {uname,age}=user",[19,78541,78542],{},"解构的变量名与全局变量名冲突，此时会报错，解决方案是改解构变量名，因为全局变量名可能有很多代码正在使用，不能改，一改就会影响其他部分，所以要改解构变量名",[19,78544,78545],{},"const {旧变量名：新变量名}=对象",[19,78547,78548],{},"const {uname:username,age}=user",[151,78550,78552],{"id":78551},"_4622-数组对象的解构","4.6.2.2 数组对象的解构",[19,78554,78555],{},[48,78556],{"alt":50,"src":78557},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-245.png",[151,78559,78561],{"id":78560},"_4623-多级对象解构","4.6.2.3 多级对象解构",[19,78563,78564],{},[48,78565],{"alt":50,"src":78566},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-246.png",[316,78568,78570],{"className":53789,"code":78569,"language":53791,"meta":50,"style":50},"  \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",[269,78571,78572,78580,78585,78590,78595,78600,78605,78610,78615,78620,78624,78629,78634],{"__ignoreMap":50},[324,78573,78574,78576,78578],{"class":326,"line":327},[324,78575,52866],{"class":867},[324,78577,52535],{"class":52022},[324,78579,52029],{"class":867},[324,78581,78582],{"class":326,"line":203},[324,78583,78584],{"class":867},"    const pig = {\n",[324,78586,78587],{"class":326,"line":338},[324,78588,78589],{"class":867},"      name: '佩奇',\n",[324,78591,78592],{"class":326,"line":344},[324,78593,78594],{"class":867},"      family: {\n",[324,78596,78597],{"class":326,"line":484},[324,78598,78599],{"class":867},"        mother: '猪妈妈',\n",[324,78601,78602],{"class":326,"line":491},[324,78603,78604],{"class":867},"        father: '猪爸爸',\n",[324,78606,78607],{"class":326,"line":496},[324,78608,78609],{"class":867},"        sister: '乔治'\n",[324,78611,78612],{"class":326,"line":502},[324,78613,78614],{"class":867},"      },\n",[324,78616,78617],{"class":326,"line":508},[324,78618,78619],{"class":867},"      age: 6\n",[324,78621,78622],{"class":326,"line":514},[324,78623,2917],{"class":867},[324,78625,78626],{"class":326,"line":2343},[324,78627,78628],{"class":867},"    \u002F\u002F 多级对象解构\n",[324,78630,78631],{"class":326,"line":2348},[324,78632,78633],{"class":867},"    const { name, family: { mother, father, sister }, age } = pig\n",[324,78635,78636,78638,78640],{"class":326,"line":2354},[324,78637,53139],{"class":867},[324,78639,52535],{"class":52022},[324,78641,52029],{"class":867},[19,78643,78644],{},"多级对象跟多维数组不同的是，需要指定是哪个对象",[316,78646,78649],{"className":78647,"code":78648,"language":77169,"meta":50,"style":50},"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",[269,78650,78651,78656,78667,78679,78691,78700,78704,78715,78727,78737,78742,78746,78756,78767,78776,78780,78784,78795,78806,78815,78819,78824],{"__ignoreMap":50},[324,78652,78653],{"class":326,"line":327},[324,78654,78655],{"class":772},"    \u002F\u002F 这是后台传递过来的数据\n",[324,78657,78658,78660,78663,78665],{"class":326,"line":203},[324,78659,11950],{"class":863},[324,78661,78662],{"class":867}," msg ",[324,78664,913],{"class":863},[324,78666,16301],{"class":867},[324,78668,78669,78672,78674,78677],{"class":326,"line":338},[324,78670,78671],{"class":738},"      \"code\"",[324,78673,1723],{"class":863},[324,78675,78676],{"class":916}," 200",[324,78678,32188],{"class":867},[324,78680,78681,78684,78686,78689],{"class":326,"line":344},[324,78682,78683],{"class":738},"      \"msg\"",[324,78685,1723],{"class":863},[324,78687,78688],{"class":738}," \"获取新闻列表成功\"",[324,78690,32188],{"class":867},[324,78692,78693,78696,78698],{"class":326,"line":484},[324,78694,78695],{"class":738},"      \"data\"",[324,78697,1723],{"class":863},[324,78699,56169],{"class":867},[324,78701,78702],{"class":326,"line":491},[324,78703,3239],{"class":867},[324,78705,78706,78709,78711,78713],{"class":326,"line":496},[324,78707,78708],{"class":738},"          \"id\"",[324,78710,1723],{"class":863},[324,78712,25842],{"class":916},[324,78714,32188],{"class":867},[324,78716,78717,78720,78722,78725],{"class":326,"line":502},[324,78718,78719],{"class":738},"          \"title\"",[324,78721,1723],{"class":863},[324,78723,78724],{"class":738}," \"5G商用自己，三大运用商收入下降\"",[324,78726,32188],{"class":867},[324,78728,78729,78732,78734],{"class":326,"line":508},[324,78730,78731],{"class":738},"          \"count\"",[324,78733,1723],{"class":863},[324,78735,78736],{"class":916}," 58\n",[324,78738,78739],{"class":326,"line":514},[324,78740,78741],{"class":867},"        },\n",[324,78743,78744],{"class":326,"line":2343},[324,78745,3239],{"class":867},[324,78747,78748,78750,78752,78754],{"class":326,"line":2348},[324,78749,78708],{"class":738},[324,78751,1723],{"class":863},[324,78753,15484],{"class":916},[324,78755,32188],{"class":867},[324,78757,78758,78760,78762,78765],{"class":326,"line":2354},[324,78759,78719],{"class":738},[324,78761,1723],{"class":863},[324,78763,78764],{"class":738}," \"国际媒体头条速览\"",[324,78766,32188],{"class":867},[324,78768,78769,78771,78773],{"class":326,"line":2359},[324,78770,78731],{"class":738},[324,78772,1723],{"class":863},[324,78774,78775],{"class":916}," 56\n",[324,78777,78778],{"class":326,"line":2373},[324,78779,78741],{"class":867},[324,78781,78782],{"class":326,"line":2378},[324,78783,3239],{"class":867},[324,78785,78786,78788,78790,78793],{"class":326,"line":2384},[324,78787,78708],{"class":738},[324,78789,1723],{"class":863},[324,78791,78792],{"class":916}," 3",[324,78794,32188],{"class":867},[324,78796,78797,78799,78801,78804],{"class":326,"line":2405},[324,78798,78719],{"class":738},[324,78800,1723],{"class":863},[324,78802,78803],{"class":738}," \"乌克兰和俄罗斯持续冲突\"",[324,78805,32188],{"class":867},[324,78807,78808,78810,78812],{"class":326,"line":2410},[324,78809,78731],{"class":738},[324,78811,1723],{"class":863},[324,78813,78814],{"class":916}," 1669\n",[324,78816,78817],{"class":326,"line":2424},[324,78818,78741],{"class":867},[324,78820,78821],{"class":326,"line":2429},[324,78822,78823],{"class":867},"      ]\n",[324,78825,78826],{"class":326,"line":2458},[324,78827,2917],{"class":867},[19,78829,78830],{},"1.针对后台的数据，如果我只要data的话，只需要： const {data}=msg",[19,78832,78833],{},"对象里边的属性和方法是无序的，我们只要里边的其中一个值的话，只需要：const{要的那个属性}=对象",[19,78835,78836],{},"\u002F\u002F上面msg是后台传递过来的数据，我们需要把data选出当做参数传递给函数 function render(arr) { const { data } = arr \u002F\u002F 我们只要 data 数据 \u002F\u002F 内部处理 console.log(data) } render(msg) msg是个对象，为实参，arr为形参，上述代码可以实现msg内部的data对象的输出，我们也可以按照下方的形式来写：",[19,78838,78839],{},"function({data}) {",[19,78841,78842],{},"console.log(data)",[19,78844,1810],{},[19,78846,78847],{},"render(msg)",[19,78849,78850],{},"实参传递给形参的时候解构了",[19,78852,78853],{},"这样可以节省空间，放在函数里解构，只有函数调用的时候才会用到，放在外面的话内存就要存好几遍这些数据",[19,78855,78856],{},"2.为了防止msg里面的data名字混淆，要求渲染函数里面的数据名改为 myData",[19,78858,78859],{},"function render({data:mydata}) {",[19,78861,78862],{},"  console.log(data)",[19,78864,1810],{},[35,78866,78868],{"id":78867},"_463-总结代码加分号的情况","4.6.3 总结代码加分号的情况",[19,78870,78871],{},"有两种情况：一个是数组结构，一个是立即执行函数",[192,78873,78874],{},[195,78875,78876],{},"如果对一个数组进行遍历，有两种方式：",[19,78878,78879],{},"①法1",[19,78881,78882],{},"const arr=[1,2,3]",[19,78884,78885],{},"arr.map(function(item,index) {",[19,78887,78888],{},"  console.log(item)",[19,78890,53186],{},[19,78892,78893],{},[48,78894],{"alt":50,"src":78895},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-247.png",[19,78897,78898],{},"②法2",[19,78900,78901],{},"const str='pink'",[19,78903,78904],{},"[1,2,3].map(function(item,index) {",[19,78906,78907],{},"console.log(item)",[19,78909,53186],{},[19,78911,78912],{},[48,78913],{"alt":50,"src":78914},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-248.png",[19,78916,78917],{},"此时会报错",[19,78919,78920],{},"他会认为是const str='pink' [1,2,3].map(function(item,index) {",[19,78922,78907],{},[19,78924,53186],{},[19,78926,78927],{},"内部会当成这样处理，所以我们用分号进行隔开",[14,78929,78931],{"id":78930},"_47-遍历数组foreach方法","4.7 遍历数组forEach方法",[19,78933,78934],{},"forEach多和字符串来进行联合使用，使用forEach遍历后加到小盒子中，字符串str+=小盒子，然后将字符串加到大盒子中，大盒子使用innerHTML",[19,78936,78937],{},"可以理解为加强版的for循环",[19,78939,78940],{},[48,78941],{"alt":50,"src":78942},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-249.png",[19,78944,78945],{},"里边不写return，不返回数组，只遍历不返回",[19,78947,78948],{},"map是返回数组",[19,78950,78951],{},"forEach主要用于遍历数组对象",[316,78953,78955],{"className":53789,"code":78954,"language":53791,"meta":50,"style":50},"  \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",[269,78956,78957,78965,78970,78975,78980,78985,78989,78994],{"__ignoreMap":50},[324,78958,78959,78961,78963],{"class":326,"line":327},[324,78960,52866],{"class":867},[324,78962,52535],{"class":52022},[324,78964,52029],{"class":867},[324,78966,78967],{"class":326,"line":203},[324,78968,78969],{"class":867},"    const arr = ['red', 'green', 'pink']\n",[324,78971,78972],{"class":326,"line":338},[324,78973,78974],{"class":867},"    const result = arr.forEach(function (item, index) {\n",[324,78976,78977],{"class":326,"line":344},[324,78978,78979],{"class":867},"      console.log(item)\n",[324,78981,78982],{"class":326,"line":484},[324,78983,78984],{"class":867},"      console.log(index)\n",[324,78986,78987],{"class":326,"line":491},[324,78988,34183],{"class":867},[324,78990,78991],{"class":326,"line":496},[324,78992,78993],{"class":867},"    console.log(result)\n",[324,78995,78996,78998,79000],{"class":326,"line":502},[324,78997,53139],{"class":867},[324,78999,52535],{"class":52022},[324,79001,52029],{"class":867},[19,79003,79004],{},[48,79005],{"alt":50,"src":79006},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-250.png",[14,79008,79010],{"id":79009},"_48-筛选数组-filter方法","4.8 筛选数组 filter方法",[19,79012,79013],{},[48,79014],{"alt":50,"src":79015},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-251.png",[19,79017,79018],{},"只能写比较符，写加号不写任何作用，map中写比较符也不起任何作用，每种方法都有其各自的作用，但是有一点他们两个方法返回的都是新数组",[316,79020,79022],{"className":53789,"code":79021,"language":53791,"meta":50,"style":50},"\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",[269,79023,79024,79032,79040,79045,79050,79054,79058,79063,79067,79072,79080],{"__ignoreMap":50},[324,79025,79026,79028,79030],{"class":326,"line":327},[324,79027,1774],{"class":867},[324,79029,52522],{"class":52022},[324,79031,52029],{"class":867},[324,79033,79034,79036,79038],{"class":326,"line":203},[324,79035,52866],{"class":867},[324,79037,52535],{"class":52022},[324,79039,52029],{"class":867},[324,79041,79042],{"class":326,"line":338},[324,79043,79044],{"class":867},"    const arr = [10, 20, 30]\n",[324,79046,79047],{"class":326,"line":344},[324,79048,79049],{"class":867},"    const newArr = arr.filter(function (item, index) {\n",[324,79051,79052],{"class":326,"line":484},[324,79053,78979],{"class":867},[324,79055,79056],{"class":326,"line":491},[324,79057,78984],{"class":867},[324,79059,79060],{"class":326,"line":496},[324,79061,79062],{"class":867},"      return item >= 20\n",[324,79064,79065],{"class":326,"line":502},[324,79066,34183],{"class":867},[324,79068,79069],{"class":326,"line":508},[324,79070,79071],{"class":867},"    console.log(newArr)\n",[324,79073,79074,79076,79078],{"class":326,"line":514},[324,79075,53139],{"class":867},[324,79077,52535],{"class":52022},[324,79079,52029],{"class":867},[324,79081,79082,79084,79086],{"class":326,"line":2343},[324,79083,52507],{"class":867},[324,79085,52522],{"class":52022},[324,79087,52029],{"class":867},[19,79089,79090],{},"这个也可以写成箭头函数：",[316,79092,79094],{"className":51355,"code":79093,"language":51357,"meta":50,"style":50},"const newArr = arr.filter(item => item >= 20)\n",[269,79095,79096],{"__ignoreMap":50},[324,79097,79098],{"class":326,"line":327},[324,79099,79093],{"class":867},[14,79101,79103],{"id":79102},"_49-商品列表价格筛选","4.9 商品列表价格筛选",[19,79105,79106],{},[48,79107],{"alt":50,"src":79108},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-252.png",[19,79110,79111],{},"步骤：",[19,79113,79114],{},"①：渲染页面模块",[1871,79116,79117,79120],{},[195,79118,79119],{},"初始化需要渲染页面，同时，点击不同的需求，还会重新渲染页面，所以渲染做成一个函数",[195,79121,79122],{},"用forEach+字符串的形式",[19,79124,79125],{},"②：点击不同需求，显示不同页面内容",[1871,79127,79128,79131,79134,79137,79140],{},[195,79129,79130],{},"点击采取事件委托方式 .filter",[195,79132,79133],{},"利用过滤函数 filter 筛选出符合条件的数据，因为生成的是一个数组，传递给渲染函数即可",[195,79135,79136],{},"筛选条件是根据点击的 data-index 来判断",[195,79138,79139],{},"可以使用对象解构，把事件对象解构",[195,79141,79142],{},"因为全部区间不需要筛选，直接把goodList渲染即可",[316,79144,79146],{"className":51355,"code":79145,"language":51357,"meta":50,"style":50},"\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",[269,79147,79148,79158,79172,79176,79184,79198,79218,79230,79238,79244,79254,79264,79274,79278,79282,79288,79301,79313,79323,79335,79339,79343,79350,79363,79375,79392,79410,79423,79427,79431,79443,79453,79457,79461,79468,79509,79536,79546,79550,79554,79562,79574,79578,79582,79590,79602,79614,79625,79629,79633,79642,79654,79665,79669,79673,79682,79694,79706,79710,79714,79721,79731,79743,79755,79770,79774,79778,79786,79802,79812,79822,79832,79844,79848,79852,79862,79873,79883,79887,79895,79903,79907,79915,79930,79956,79981,80006,80025,80033,80047,80052,80057,80062,80067,80072,80080,80088,80093,80104,80109,80119,80129,80139,80149,80153,80157,80166,80175,80184,80193,80197,80201,80210,80219,80228,80237,80241,80245,80254,80263,80272,80281,80285,80289,80298,80307,80316,80325,80329,80333,80342,80351,80360,80369,80373,80377,80386,80395,80404,80413,80417,80421,80430,80439,80447,80456,80460,80464,80468,80473,80485,80490,80502,80506,80523,80551,80560,80565,80575,80585,80594,80599,80604,80608,80613,80630,80634,80639,80647,80652,80679,80684,80704,80709,80721,80726,80731,80736,80747,80761,80798,80816,80849,80866,80890,80894,80899,80905,80909,80913,80917,80925,80933,80937],{"__ignoreMap":50},[324,79149,79150,79152,79154,79156],{"class":326,"line":327},[324,79151,52019],{"class":867},[324,79153,52023],{"class":52022},[324,79155,52026],{"class":734},[324,79157,52029],{"class":867},[324,79159,79160,79162,79164,79166,79168,79170],{"class":326,"line":203},[324,79161,1774],{"class":867},[324,79163,51357],{"class":52022},[324,79165,52038],{"class":734},[324,79167,913],{"class":867},[324,79169,52043],{"class":738},[324,79171,52029],{"class":867},[324,79173,79174],{"class":326,"line":338},[324,79175,488],{"emptyLinePlaceholder":487},[324,79177,79178,79180,79182],{"class":326,"line":344},[324,79179,1774],{"class":867},[324,79181,52056],{"class":52022},[324,79183,52029],{"class":867},[324,79185,79186,79188,79190,79192,79194,79196],{"class":326,"line":484},[324,79187,52866],{"class":867},[324,79189,52066],{"class":52022},[324,79191,52069],{"class":734},[324,79193,913],{"class":867},[324,79195,52074],{"class":738},[324,79197,52029],{"class":867},[324,79199,79200,79202,79204,79206,79208,79210,79212,79214,79216],{"class":326,"line":491},[324,79201,52866],{"class":867},[324,79203,52066],{"class":52022},[324,79205,15649],{"class":734},[324,79207,913],{"class":867},[324,79209,52113],{"class":738},[324,79211,52093],{"class":734},[324,79213,913],{"class":867},[324,79215,52120],{"class":738},[324,79217,52029],{"class":867},[324,79219,79220,79222,79224,79226,79228],{"class":326,"line":496},[324,79221,52866],{"class":867},[324,79223,52129],{"class":52022},[324,79225,52132],{"class":867},[324,79227,52129],{"class":52022},[324,79229,52029],{"class":867},[324,79231,79232,79234,79236],{"class":326,"line":502},[324,79233,52866],{"class":867},[324,79235,775],{"class":52022},[324,79237,52029],{"class":867},[324,79239,79240,79242],{"class":326,"line":508},[324,79241,7132],{"class":52022},[324,79243,16301],{"class":867},[324,79245,79246,79248,79250,79252],{"class":326,"line":514},[324,79247,55417],{"class":916},[324,79249,52159],{"class":867},[324,79251,1056],{"class":916},[324,79253,2025],{"class":867},[324,79255,79256,79258,79260,79262],{"class":326,"line":2343},[324,79257,55428],{"class":916},[324,79259,52159],{"class":867},[324,79261,1056],{"class":916},[324,79263,2025],{"class":867},[324,79265,79266,79268,79270,79272],{"class":326,"line":2348},[324,79267,73318],{"class":916},[324,79269,52159],{"class":867},[324,79271,61227],{"class":916},[324,79273,2025],{"class":867},[324,79275,79276],{"class":326,"line":2354},[324,79277,2917],{"class":867},[324,79279,79280],{"class":326,"line":2359},[324,79281,488],{"emptyLinePlaceholder":487},[324,79283,79284,79286],{"class":326,"line":2373},[324,79285,62845],{"class":734},[324,79287,16301],{"class":867},[324,79289,79290,79292,79294,79297,79299],{"class":326,"line":2378},[324,79291,55493],{"class":916},[324,79293,52159],{"class":867},[324,79295,79296],{"class":916},"990",[324,79298,52214],{"class":863},[324,79300,2025],{"class":867},[324,79302,79303,79305,79307,79309,79311],{"class":326,"line":2384},[324,79304,55428],{"class":916},[324,79306,52159],{"class":867},[324,79308,1056],{"class":916},[324,79310,52278],{"class":916},[324,79312,2025],{"class":867},[324,79314,79315,79317,79319,79321],{"class":326,"line":2405},[324,79316,55731],{"class":916},[324,79318,52159],{"class":867},[324,79320,52199],{"class":916},[324,79322,2025],{"class":867},[324,79324,79325,79328,79330,79333],{"class":326,"line":2410},[324,79326,79327],{"class":916},"      flex-wrap",[324,79329,52159],{"class":867},[324,79331,79332],{"class":916},"wrap",[324,79334,2025],{"class":867},[324,79336,79337],{"class":326,"line":2424},[324,79338,2917],{"class":867},[324,79340,79341],{"class":326,"line":2429},[324,79342,488],{"emptyLinePlaceholder":487},[324,79344,79345,79348],{"class":326,"line":2458},[324,79346,79347],{"class":734},"    .item",[324,79349,16301],{"class":867},[324,79351,79352,79354,79356,79359,79361],{"class":326,"line":2463},[324,79353,55493],{"class":916},[324,79355,52159],{"class":867},[324,79357,79358],{"class":916},"240",[324,79360,52214],{"class":863},[324,79362,2025],{"class":867},[324,79364,79365,79367,79369,79371,79373],{"class":326,"line":2480},[324,79366,62722],{"class":916},[324,79368,52159],{"class":867},[324,79370,1310],{"class":916},[324,79372,52214],{"class":863},[324,79374,2025],{"class":867},[324,79376,79377,79379,79381,79383,79385,79388,79390],{"class":326,"line":2485},[324,79378,55417],{"class":916},[324,79380,52159],{"class":867},[324,79382,1564],{"class":916},[324,79384,52214],{"class":863},[324,79386,79387],{"class":916}," 30",[324,79389,52214],{"class":863},[324,79391,2025],{"class":867},[324,79393,79394,79396,79398,79400,79403,79406,79408],{"class":326,"line":2490},[324,79395,62582],{"class":916},[324,79397,52159],{"class":867},[324,79399,28843],{"class":916},[324,79401,79402],{"class":916}," ease",[324,79404,79405],{"class":916}," .5",[324,79407,1559],{"class":863},[324,79409,2025],{"class":867},[324,79411,79412,79415,79417,79419,79421],{"class":326,"line":2495},[324,79413,79414],{"class":916},"      margin-bottom",[324,79416,52159],{"class":867},[324,79418,1564],{"class":916},[324,79420,52214],{"class":863},[324,79422,2025],{"class":867},[324,79424,79425],{"class":326,"line":2509},[324,79426,2917],{"class":867},[324,79428,79429],{"class":326,"line":2514},[324,79430,488],{"emptyLinePlaceholder":487},[324,79432,79433,79436,79438,79441],{"class":326,"line":3306},[324,79434,79435],{"class":734},"    .item:nth-child",[324,79437,868],{"class":867},[324,79439,79440],{"class":916},"4n",[324,79442,13171],{"class":867},[324,79444,79445,79447,79449,79451],{"class":326,"line":3320},[324,79446,62722],{"class":916},[324,79448,52159],{"class":867},[324,79450,1056],{"class":916},[324,79452,2025],{"class":867},[324,79454,79455],{"class":326,"line":3328},[324,79456,2917],{"class":867},[324,79458,79459],{"class":326,"line":3333},[324,79460,488],{"emptyLinePlaceholder":487},[324,79462,79463,79466],{"class":326,"line":3339},[324,79464,79465],{"class":734},"    .item:hover",[324,79467,16301],{"class":867},[324,79469,79470,79473,79475,79477,79479,79481,79483,79485,79487,79490,79492,79494,79496,79498,79500,79502,79504,79507],{"class":326,"line":3345},[324,79471,79472],{"class":916},"      box-shadow",[324,79474,52159],{"class":867},[324,79476,1056],{"class":916},[324,79478,52214],{"class":863},[324,79480,4822],{"class":916},[324,79482,52214],{"class":863},[324,79484,2878],{"class":916},[324,79486,52214],{"class":863},[324,79488,79489],{"class":916}," rgba",[324,79491,868],{"class":867},[324,79493,1056],{"class":916},[324,79495,13164],{"class":867},[324,79497,1056],{"class":916},[324,79499,13164],{"class":867},[324,79501,1056],{"class":916},[324,79503,13164],{"class":867},[324,79505,79506],{"class":916},".2",[324,79508,3448],{"class":867},[324,79510,79511,79514,79516,79519,79521,79523,79525,79528,79530,79532,79534],{"class":326,"line":3350},[324,79512,79513],{"class":916},"      transform",[324,79515,52159],{"class":867},[324,79517,79518],{"class":916},"translate3d",[324,79520,868],{"class":867},[324,79522,1056],{"class":916},[324,79524,13164],{"class":867},[324,79526,79527],{"class":916},"-4",[324,79529,52214],{"class":863},[324,79531,13164],{"class":867},[324,79533,1056],{"class":916},[324,79535,3448],{"class":867},[324,79537,79538,79540,79542,79544],{"class":326,"line":8677},[324,79539,62747],{"class":916},[324,79541,52159],{"class":867},[324,79543,62752],{"class":916},[324,79545,2025],{"class":867},[324,79547,79548],{"class":326,"line":8701},[324,79549,2917],{"class":867},[324,79551,79552],{"class":326,"line":8706},[324,79553,488],{"emptyLinePlaceholder":487},[324,79555,79556,79558,79560],{"class":326,"line":8712},[324,79557,79347],{"class":734},[324,79559,56337],{"class":52022},[324,79561,16301],{"class":867},[324,79563,79564,79566,79568,79570,79572],{"class":326,"line":8739},[324,79565,55493],{"class":916},[324,79567,52159],{"class":867},[324,79569,1175],{"class":916},[324,79571,1192],{"class":863},[324,79573,2025],{"class":867},[324,79575,79576],{"class":326,"line":8744},[324,79577,2917],{"class":867},[324,79579,79580],{"class":326,"line":8750},[324,79581,488],{"emptyLinePlaceholder":487},[324,79583,79584,79586,79588],{"class":326,"line":8762},[324,79585,79347],{"class":734},[324,79587,63026],{"class":734},[324,79589,16301],{"class":867},[324,79591,79592,79594,79596,79598,79600],{"class":326,"line":8774},[324,79593,55644],{"class":916},[324,79595,52159],{"class":867},[324,79597,1514],{"class":916},[324,79599,52214],{"class":863},[324,79601,2025],{"class":867},[324,79603,79604,79606,79608,79610,79612],{"class":326,"line":8786},[324,79605,79414],{"class":916},[324,79607,52159],{"class":867},[324,79609,1310],{"class":916},[324,79611,52214],{"class":863},[324,79613,2025],{"class":867},[324,79615,79616,79618,79620,79623],{"class":326,"line":10445},[324,79617,58138],{"class":916},[324,79619,52159],{"class":867},[324,79621,79622],{"class":916},"#666",[324,79624,2025],{"class":867},[324,79626,79627],{"class":326,"line":10470},[324,79628,2917],{"class":867},[324,79630,79631],{"class":326,"line":10493},[324,79632,488],{"emptyLinePlaceholder":487},[324,79634,79635,79637,79640],{"class":326,"line":10517},[324,79636,79347],{"class":734},[324,79638,79639],{"class":734}," .price",[324,79641,16301],{"class":867},[324,79643,79644,79646,79648,79650,79652],{"class":326,"line":10522},[324,79645,55644],{"class":916},[324,79647,52159],{"class":867},[324,79649,1614],{"class":916},[324,79651,52214],{"class":863},[324,79653,2025],{"class":867},[324,79655,79656,79658,79660,79663],{"class":326,"line":10527},[324,79657,58138],{"class":916},[324,79659,52159],{"class":867},[324,79661,79662],{"class":916},"firebrick",[324,79664,2025],{"class":867},[324,79666,79667],{"class":326,"line":10532},[324,79668,2917],{"class":867},[324,79670,79671],{"class":326,"line":10541},[324,79672,488],{"emptyLinePlaceholder":487},[324,79674,79675,79677,79680],{"class":326,"line":10546},[324,79676,79347],{"class":734},[324,79678,79679],{"class":734}," .price::before",[324,79681,16301],{"class":867},[324,79683,79684,79687,79689,79692],{"class":326,"line":10552},[324,79685,79686],{"class":916},"      content",[324,79688,52159],{"class":867},[324,79690,79691],{"class":738},"'￥'",[324,79693,2025],{"class":867},[324,79695,79696,79698,79700,79702,79704],{"class":326,"line":10573},[324,79697,55644],{"class":916},[324,79699,52159],{"class":867},[324,79701,1413],{"class":916},[324,79703,52214],{"class":863},[324,79705,2025],{"class":867},[324,79707,79708],{"class":326,"line":10579},[324,79709,2917],{"class":867},[324,79711,79712],{"class":326,"line":10593},[324,79713,488],{"emptyLinePlaceholder":487},[324,79715,79716,79719],{"class":326,"line":10599},[324,79717,79718],{"class":734},"    .filter",[324,79720,16301],{"class":867},[324,79722,79723,79725,79727,79729],{"class":326,"line":10626},[324,79724,55731],{"class":916},[324,79726,52159],{"class":867},[324,79728,52199],{"class":916},[324,79730,2025],{"class":867},[324,79732,79733,79735,79737,79739,79741],{"class":326,"line":10635},[324,79734,55493],{"class":916},[324,79736,52159],{"class":867},[324,79738,79296],{"class":916},[324,79740,52214],{"class":863},[324,79742,2025],{"class":867},[324,79744,79745,79747,79749,79751,79753],{"class":326,"line":10641},[324,79746,55428],{"class":916},[324,79748,52159],{"class":867},[324,79750,1056],{"class":916},[324,79752,52278],{"class":916},[324,79754,2025],{"class":867},[324,79756,79757,79759,79761,79763,79765,79767],{"class":326,"line":10649},[324,79758,55417],{"class":916},[324,79760,52159],{"class":867},[324,79762,1520],{"class":916},[324,79764,52214],{"class":863},[324,79766,79387],{"class":916},[324,79768,79769],{"class":863},"px\n",[324,79771,79772],{"class":326,"line":10654},[324,79773,2917],{"class":867},[324,79775,79776],{"class":326,"line":17333},[324,79777,488],{"emptyLinePlaceholder":487},[324,79779,79780,79782,79784],{"class":326,"line":17339},[324,79781,79718],{"class":734},[324,79783,2130],{"class":52022},[324,79785,16301],{"class":867},[324,79787,79788,79790,79792,79794,79796,79798,79800],{"class":326,"line":17362},[324,79789,55417],{"class":916},[324,79791,52159],{"class":867},[324,79793,1310],{"class":916},[324,79795,52214],{"class":863},[324,79797,9679],{"class":916},[324,79799,52214],{"class":863},[324,79801,2025],{"class":867},[324,79803,79804,79806,79808,79810],{"class":326,"line":17368},[324,79805,62443],{"class":916},[324,79807,52159],{"class":867},[324,79809,62540],{"class":916},[324,79811,2025],{"class":867},[324,79813,79814,79816,79818,79820],{"class":326,"line":17391},[324,79815,58138],{"class":916},[324,79817,52159],{"class":867},[324,79819,79622],{"class":916},[324,79821,2025],{"class":867},[324,79823,79824,79826,79828,79830],{"class":326,"line":17405},[324,79825,64692],{"class":916},[324,79827,52159],{"class":867},[324,79829,55459],{"class":916},[324,79831,2025],{"class":867},[324,79833,79834,79836,79838,79840,79842],{"class":326,"line":17425},[324,79835,62472],{"class":916},[324,79837,52159],{"class":867},[324,79839,1564],{"class":916},[324,79841,52214],{"class":863},[324,79843,2025],{"class":867},[324,79845,79846],{"class":326,"line":17431},[324,79847,2917],{"class":867},[324,79849,79850],{"class":326,"line":17442},[324,79851,488],{"emptyLinePlaceholder":487},[324,79853,79854,79856,79858,79860],{"class":326,"line":17465},[324,79855,79718],{"class":734},[324,79857,2130],{"class":52022},[324,79859,62622],{"class":734},[324,79861,16301],{"class":867},[324,79863,79864,79866,79868,79871],{"class":326,"line":17487},[324,79865,55606],{"class":916},[324,79867,52159],{"class":867},[324,79869,79870],{"class":916},"#05943c",[324,79872,2025],{"class":867},[324,79874,79875,79877,79879,79881],{"class":326,"line":17492},[324,79876,58138],{"class":916},[324,79878,52159],{"class":867},[324,79880,61564],{"class":916},[324,79882,2025],{"class":867},[324,79884,79885],{"class":326,"line":17498},[324,79886,2917],{"class":867},[324,79888,79889,79891,79893],{"class":326,"line":17512},[324,79890,53139],{"class":867},[324,79892,775],{"class":52022},[324,79894,52029],{"class":867},[324,79896,79897,79899,79901],{"class":326,"line":17525},[324,79898,52507],{"class":867},[324,79900,52056],{"class":52022},[324,79902,52029],{"class":867},[324,79904,79905],{"class":326,"line":17530},[324,79906,488],{"emptyLinePlaceholder":487},[324,79908,79909,79911,79913],{"class":326,"line":17544},[324,79910,1774],{"class":867},[324,79912,52522],{"class":52022},[324,79914,52029],{"class":867},[324,79916,79917,79919,79921,79923,79925,79928],{"class":326,"line":17549},[324,79918,52866],{"class":867},[324,79920,52333],{"class":52022},[324,79922,54208],{"class":734},[324,79924,913],{"class":867},[324,79926,79927],{"class":738},"\"filter\"",[324,79929,52029],{"class":867},[324,79931,79932,79934,79936,79938,79940,79942,79945,79947,79949,79952,79954],{"class":326,"line":17555},[324,79933,52063],{"class":867},[324,79935,25],{"class":52022},[324,79937,61779],{"class":734},[324,79939,913],{"class":867},[324,79941,61784],{"class":738},[324,79943,79944],{"class":734}," data-index",[324,79946,913],{"class":867},[324,79948,4407],{"class":738},[324,79950,79951],{"class":867},">0-100元\u003C\u002F",[324,79953,25],{"class":52022},[324,79955,52029],{"class":867},[324,79957,79958,79960,79962,79964,79966,79968,79970,79972,79974,79977,79979],{"class":326,"line":17560},[324,79959,52063],{"class":867},[324,79961,25],{"class":52022},[324,79963,61779],{"class":734},[324,79965,913],{"class":867},[324,79967,61784],{"class":738},[324,79969,79944],{"class":734},[324,79971,913],{"class":867},[324,79973,4430],{"class":738},[324,79975,79976],{"class":867},">100-300元\u003C\u002F",[324,79978,25],{"class":52022},[324,79980,52029],{"class":867},[324,79982,79983,79985,79987,79989,79991,79993,79995,79997,79999,80002,80004],{"class":326,"line":17574},[324,79984,52063],{"class":867},[324,79986,25],{"class":52022},[324,79988,61779],{"class":734},[324,79990,913],{"class":867},[324,79992,61784],{"class":738},[324,79994,79944],{"class":734},[324,79996,913],{"class":867},[324,79998,4443],{"class":738},[324,80000,80001],{"class":867},">300元以上\u003C\u002F",[324,80003,25],{"class":52022},[324,80005,52029],{"class":867},[324,80007,80008,80010,80012,80014,80016,80018,80021,80023],{"class":326,"line":17579},[324,80009,52063],{"class":867},[324,80011,25],{"class":52022},[324,80013,61779],{"class":734},[324,80015,913],{"class":867},[324,80017,61784],{"class":738},[324,80019,80020],{"class":867},">全部区间\u003C\u002F",[324,80022,25],{"class":52022},[324,80024,52029],{"class":867},[324,80026,80027,80029,80031],{"class":326,"line":17584},[324,80028,53139],{"class":867},[324,80030,52333],{"class":52022},[324,80032,52029],{"class":867},[324,80034,80035,80037,80039,80041,80043,80045],{"class":326,"line":17598},[324,80036,52866],{"class":867},[324,80038,52333],{"class":52022},[324,80040,54208],{"class":734},[324,80042,913],{"class":867},[324,80044,63330],{"class":738},[324,80046,52029],{"class":867},[324,80048,80049],{"class":326,"line":17610},[324,80050,80051],{"class":772},"    \u003C!-- \u003Cdiv class=\"item\">\n",[324,80053,80054],{"class":326,"line":17615},[324,80055,80056],{"class":772},"      \u003Cimg src=\"\" alt=\"\">\n",[324,80058,80059],{"class":326,"line":17628},[324,80060,80061],{"class":772},"      \u003Cp class=\"name\">\u003C\u002Fp>\n",[324,80063,80064],{"class":326,"line":17633},[324,80065,80066],{"class":772},"      \u003Cp class=\"price\">\u003C\u002Fp>\n",[324,80068,80069],{"class":326,"line":17638},[324,80070,80071],{"class":772},"    \u003C\u002Fdiv> -->\n",[324,80073,80074,80076,80078],{"class":326,"line":17643},[324,80075,53139],{"class":867},[324,80077,52333],{"class":52022},[324,80079,52029],{"class":867},[324,80081,80082,80084,80086],{"class":326,"line":17656},[324,80083,52866],{"class":867},[324,80085,52535],{"class":52022},[324,80087,52029],{"class":867},[324,80089,80090],{"class":326,"line":17661},[324,80091,80092],{"class":772},"    \u002F\u002F 2. 初始化数据\n",[324,80094,80095,80097,80100,80102],{"class":326,"line":33355},[324,80096,11950],{"class":863},[324,80098,80099],{"class":916}," goodsList",[324,80101,14293],{"class":863},[324,80103,56169],{"class":867},[324,80105,80106],{"class":326,"line":33361},[324,80107,80108],{"class":867},"      {\n",[324,80110,80111,80114,80117],{"class":326,"line":33367},[324,80112,80113],{"class":867},"        id: ",[324,80115,80116],{"class":738},"'4001172'",[324,80118,32188],{"class":867},[324,80120,80121,80124,80127],{"class":326,"line":33373},[324,80122,80123],{"class":867},"        name: ",[324,80125,80126],{"class":738},"'称心如意手摇咖啡磨豆机咖啡豆研磨机'",[324,80128,32188],{"class":867},[324,80130,80131,80134,80137],{"class":326,"line":33379},[324,80132,80133],{"class":867},"        price: ",[324,80135,80136],{"class":738},"'289.00'",[324,80138,32188],{"class":867},[324,80140,80141,80144,80147],{"class":326,"line":33390},[324,80142,80143],{"class":867},"        picture: ",[324,80145,80146],{"class":738},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F84a59ff9c58a77032564e61f716846d6.jpg'",[324,80148,32188],{"class":867},[324,80150,80151],{"class":326,"line":33396},[324,80152,78614],{"class":867},[324,80154,80155],{"class":326,"line":33416},[324,80156,80108],{"class":867},[324,80158,80159,80161,80164],{"class":326,"line":33422},[324,80160,80113],{"class":867},[324,80162,80163],{"class":738},"'4001594'",[324,80165,32188],{"class":867},[324,80167,80168,80170,80173],{"class":326,"line":33433},[324,80169,80123],{"class":867},[324,80171,80172],{"class":738},"'日式黑陶功夫茶组双侧把茶具礼盒装'",[324,80174,32188],{"class":867},[324,80176,80177,80179,80182],{"class":326,"line":33439},[324,80178,80133],{"class":867},[324,80180,80181],{"class":738},"'288.00'",[324,80183,32188],{"class":867},[324,80185,80186,80188,80191],{"class":326,"line":33445},[324,80187,80143],{"class":867},[324,80189,80190],{"class":738},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F3346b7b92f9563c7a7e24c7ead883f18.jpg'",[324,80192,32188],{"class":867},[324,80194,80195],{"class":326,"line":33451},[324,80196,78614],{"class":867},[324,80198,80199],{"class":326,"line":33457},[324,80200,80108],{"class":867},[324,80202,80203,80205,80208],{"class":326,"line":33463},[324,80204,80113],{"class":867},[324,80206,80207],{"class":738},"'4001009'",[324,80209,32188],{"class":867},[324,80211,80212,80214,80217],{"class":326,"line":33469},[324,80213,80123],{"class":867},[324,80215,80216],{"class":738},"'竹制干泡茶盘正方形沥水茶台品茶盘'",[324,80218,32188],{"class":867},[324,80220,80221,80223,80226],{"class":326,"line":33475},[324,80222,80133],{"class":867},[324,80224,80225],{"class":738},"'109.00'",[324,80227,32188],{"class":867},[324,80229,80230,80232,80235],{"class":326,"line":33495},[324,80231,80143],{"class":867},[324,80233,80234],{"class":738},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F2d942d6bc94f1e230763e1a5a3b379e1.png'",[324,80236,32188],{"class":867},[324,80238,80239],{"class":326,"line":33501},[324,80240,78614],{"class":867},[324,80242,80243],{"class":326,"line":33517},[324,80244,80108],{"class":867},[324,80246,80247,80249,80252],{"class":326,"line":33523},[324,80248,80113],{"class":867},[324,80250,80251],{"class":738},"'4001874'",[324,80253,32188],{"class":867},[324,80255,80256,80258,80261],{"class":326,"line":33537},[324,80257,80123],{"class":867},[324,80259,80260],{"class":738},"'古法温酒汝瓷酒具套装白酒杯莲花温酒器'",[324,80262,32188],{"class":867},[324,80264,80265,80267,80270],{"class":326,"line":33543},[324,80266,80133],{"class":867},[324,80268,80269],{"class":738},"'488.00'",[324,80271,32188],{"class":867},[324,80273,80274,80276,80279],{"class":326,"line":33558},[324,80275,80143],{"class":867},[324,80277,80278],{"class":738},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F44e51622800e4fceb6bee8e616da85fd.png'",[324,80280,32188],{"class":867},[324,80282,80283],{"class":326,"line":33564},[324,80284,78614],{"class":867},[324,80286,80287],{"class":326,"line":33573},[324,80288,80108],{"class":867},[324,80290,80291,80293,80296],{"class":326,"line":33579},[324,80292,80113],{"class":867},[324,80294,80295],{"class":738},"'4001649'",[324,80297,32188],{"class":867},[324,80299,80300,80302,80305],{"class":326,"line":33588},[324,80301,80123],{"class":867},[324,80303,80304],{"class":738},"'大师监制龙泉青瓷茶叶罐'",[324,80306,32188],{"class":867},[324,80308,80309,80311,80314],{"class":326,"line":33594},[324,80310,80133],{"class":867},[324,80312,80313],{"class":738},"'139.00'",[324,80315,32188],{"class":867},[324,80317,80318,80320,80323],{"class":326,"line":33600},[324,80319,80143],{"class":867},[324,80321,80322],{"class":738},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F4356c9fc150753775fe56b465314f1eb.png'",[324,80324,32188],{"class":867},[324,80326,80327],{"class":326,"line":33609},[324,80328,78614],{"class":867},[324,80330,80331],{"class":326,"line":33615},[324,80332,80108],{"class":867},[324,80334,80335,80337,80340],{"class":326,"line":33626},[324,80336,80113],{"class":867},[324,80338,80339],{"class":738},"'3997185'",[324,80341,32188],{"class":867},[324,80343,80344,80346,80349],{"class":326,"line":33632},[324,80345,80123],{"class":867},[324,80347,80348],{"class":738},"'与众不同的口感汝瓷白酒杯套组1壶4杯'",[324,80350,32188],{"class":867},[324,80352,80353,80355,80358],{"class":326,"line":33651},[324,80354,80133],{"class":867},[324,80356,80357],{"class":738},"'108.00'",[324,80359,32188],{"class":867},[324,80361,80362,80364,80367],{"class":326,"line":33657},[324,80363,80143],{"class":867},[324,80365,80366],{"class":738},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8e21c794dfd3a4e8573273ddae50bce2.jpg'",[324,80368,32188],{"class":867},[324,80370,80371],{"class":326,"line":33668},[324,80372,78614],{"class":867},[324,80374,80375],{"class":326,"line":33674},[324,80376,80108],{"class":867},[324,80378,80379,80381,80384],{"class":326,"line":33694},[324,80380,80113],{"class":867},[324,80382,80383],{"class":738},"'3997403'",[324,80385,32188],{"class":867},[324,80387,80388,80390,80393],{"class":326,"line":33710},[324,80389,80123],{"class":867},[324,80391,80392],{"class":738},"'手工吹制更厚实白酒杯壶套装6壶6杯'",[324,80394,32188],{"class":867},[324,80396,80397,80399,80402],{"class":326,"line":33716},[324,80398,80133],{"class":867},[324,80400,80401],{"class":738},"'100.00'",[324,80403,32188],{"class":867},[324,80405,80406,80408,80411],{"class":326,"line":33730},[324,80407,80143],{"class":867},[324,80409,80410],{"class":738},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002Faf2371a65f60bce152a61fc22745ff3f.jpg'",[324,80412,32188],{"class":867},[324,80414,80415],{"class":326,"line":33736},[324,80416,78614],{"class":867},[324,80418,80419],{"class":326,"line":33742},[324,80420,80108],{"class":867},[324,80422,80423,80425,80428],{"class":326,"line":33753},[324,80424,80113],{"class":867},[324,80426,80427],{"class":738},"'3998274'",[324,80429,32188],{"class":867},[324,80431,80432,80434,80437],{"class":326,"line":33759},[324,80433,80123],{"class":867},[324,80435,80436],{"class":738},"'德国百年工艺高端水晶玻璃红酒杯2支装'",[324,80438,32188],{"class":867},[324,80440,80441,80443,80445],{"class":326,"line":33765},[324,80442,80133],{"class":867},[324,80444,80313],{"class":738},[324,80446,32188],{"class":867},[324,80448,80449,80451,80454],{"class":326,"line":33775},[324,80450,80143],{"class":867},[324,80452,80453],{"class":738},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8896b897b3ec6639bbd1134d66b9715c.jpg'",[324,80455,32188],{"class":867},[324,80457,80458],{"class":326,"line":33781},[324,80459,78614],{"class":867},[324,80461,80462],{"class":326,"line":33792},[324,80463,53831],{"class":867},[324,80465,80466],{"class":326,"line":33798},[324,80467,488],{"emptyLinePlaceholder":487},[324,80469,80470],{"class":326,"line":33808},[324,80471,80472],{"class":772},"    \u002F\u002F 1.渲染函数\n",[324,80474,80475,80477,80479,80481,80483],{"class":326,"line":33813},[324,80476,70806],{"class":863},[324,80478,70809],{"class":734},[324,80480,868],{"class":867},[324,80482,4609],{"class":5945},[324,80484,13171],{"class":867},[324,80486,80487],{"class":326,"line":33819},[324,80488,80489],{"class":772},"      \u002F\u002F 声明空字符串\n",[324,80491,80492,80495,80498,80500],{"class":326,"line":33868},[324,80493,80494],{"class":863},"      let",[324,80496,80497],{"class":867}," str ",[324,80499,913],{"class":863},[324,80501,70826],{"class":738},[324,80503,80504],{"class":326,"line":33915},[324,80505,70831],{"class":772},[324,80507,80508,80510,80513,80515,80518,80521],{"class":326,"line":33920},[324,80509,58729],{"class":867},[324,80511,80512],{"class":734},"forEach",[324,80514,868],{"class":867},[324,80516,80517],{"class":5945},"item",[324,80519,80520],{"class":863}," =>",[324,80522,16301],{"class":867},[324,80524,80525,80527,80530,80533,80535,80538,80540,80543,80546,80548],{"class":326,"line":33926},[324,80526,61992],{"class":863},[324,80528,80529],{"class":867}," { ",[324,80531,80532],{"class":916},"name",[324,80534,13164],{"class":867},[324,80536,80537],{"class":916},"price",[324,80539,13164],{"class":867},[324,80541,80542],{"class":916},"picture",[324,80544,80545],{"class":867}," } ",[324,80547,913],{"class":863},[324,80549,80550],{"class":867}," item\n",[324,80552,80553,80556,80558],{"class":326,"line":33945},[324,80554,80555],{"class":867},"        str ",[324,80557,10206],{"class":863},[324,80559,70890],{"class":738},[324,80561,80562],{"class":326,"line":33951},[324,80563,80564],{"class":738},"          \u003Cdiv class=\"item\">\n",[324,80566,80567,80570,80572],{"class":326,"line":33971},[324,80568,80569],{"class":738},"            \u003Cimg src=\"${",[324,80571,80542],{"class":867},[324,80573,80574],{"class":738},"}\" alt=\"\">\n",[324,80576,80577,80580,80582],{"class":326,"line":33977},[324,80578,80579],{"class":738},"            \u003Cp class=\"name\">${",[324,80581,80532],{"class":867},[324,80583,80584],{"class":738},"}\u003C\u002Fp>\n",[324,80586,80587,80590,80592],{"class":326,"line":33983},[324,80588,80589],{"class":738},"            \u003Cp class=\"price\">${",[324,80591,80537],{"class":867},[324,80593,80584],{"class":738},[324,80595,80596],{"class":326,"line":33993},[324,80597,80598],{"class":738},"          \u003C\u002Fdiv>\n",[324,80600,80601],{"class":326,"line":33998},[324,80602,80603],{"class":738},"        `\n",[324,80605,80606],{"class":326,"line":34004},[324,80607,65537],{"class":867},[324,80609,80610],{"class":326,"line":34020},[324,80611,80612],{"class":772},"      \u002F\u002F 追加给List\n",[324,80614,80615,80617,80619,80621,80624,80626,80628],{"class":326,"line":34065},[324,80616,56493],{"class":867},[324,80618,55121],{"class":734},[324,80620,868],{"class":867},[324,80622,80623],{"class":738},"'.list'",[324,80625,74971],{"class":867},[324,80627,913],{"class":863},[324,80629,74707],{"class":867},[324,80631,80632],{"class":326,"line":34071},[324,80633,2917],{"class":867},[324,80635,80636],{"class":326,"line":34077},[324,80637,80638],{"class":772},"    \u002F\u002F 页面一打开就需要渲染\n",[324,80640,80641,80644],{"class":326,"line":34083},[324,80642,80643],{"class":734},"    render",[324,80645,80646],{"class":867},"(goodsList)\n",[324,80648,80649],{"class":326,"line":34094},[324,80650,80651],{"class":772},"    \u002F\u002F 2.过滤筛选\n",[324,80653,80654,80656,80658,80660,80663,80665,80667,80669,80671,80673,80675,80677],{"class":326,"line":34100},[324,80655,53129],{"class":867},[324,80657,55121],{"class":734},[324,80659,868],{"class":867},[324,80661,80662],{"class":738},"'.filter'",[324,80664,31548],{"class":867},[324,80666,58535],{"class":734},[324,80668,868],{"class":867},[324,80670,58540],{"class":738},[324,80672,13164],{"class":867},[324,80674,941],{"class":5945},[324,80676,80520],{"class":863},[324,80678,16301],{"class":867},[324,80680,80681],{"class":326,"line":34106},[324,80682,80683],{"class":772},"      \u002F\u002F 我们需要根据自定属性值来判断点击的哪个小盒子a,即需要获取e.target.dataset.index\n",[324,80685,80686,80688,80690,80693,80695,80697,80699,80701],{"class":326,"line":34112},[324,80687,58950],{"class":863},[324,80689,80529],{"class":867},[324,80691,80692],{"class":916},"tagName",[324,80694,13164],{"class":867},[324,80696,32259],{"class":916},[324,80698,80545],{"class":867},[324,80700,913],{"class":863},[324,80702,80703],{"class":867}," e.target\n",[324,80705,80706],{"class":326,"line":34130},[324,80707,80708],{"class":772},"      \u002F\u002F 判断\n",[324,80710,80711,80713,80715,80717,80719],{"class":326,"line":34144},[324,80712,55202],{"class":863},[324,80714,67756],{"class":867},[324,80716,55208],{"class":863},[324,80718,68978],{"class":738},[324,80720,13171],{"class":867},[324,80722,80723],{"class":326,"line":34153},[324,80724,80725],{"class":772},"        \u002F\u002F console.log(11)\n",[324,80727,80728],{"class":326,"line":34162},[324,80729,80730],{"class":772},"        \u002F\u002F 创建用于接收新对象的数组，这个新数组直接覆盖掉它就行，或者这边let arr=[]也可以\n",[324,80732,80733],{"class":326,"line":34171},[324,80734,80735],{"class":772},"        \u002F\u002F 这里就给goodslist就行，因为如果下边的if不执行的话，我点击全部区间就会生效，因为渲染了个空数组\n",[324,80737,80738,80740,80742,80744],{"class":326,"line":34180},[324,80739,52552],{"class":863},[324,80741,52555],{"class":867},[324,80743,913],{"class":863},[324,80745,80746],{"class":867}," goodsList\n",[324,80748,80749,80751,80754,80756,80759],{"class":326,"line":34186},[324,80750,3226],{"class":863},[324,80752,80753],{"class":867}," (dataset.index ",[324,80755,55208],{"class":863},[324,80757,80758],{"class":738}," '1'",[324,80760,13171],{"class":867},[324,80762,80763,80766,80768,80771,80774,80776,80778,80780,80783,80785,80787,80790,80792,80794,80796],{"class":326,"line":34192},[324,80764,80765],{"class":867},"          arr ",[324,80767,913],{"class":863},[324,80769,80770],{"class":867}," goodsList.",[324,80772,80773],{"class":734},"filter",[324,80775,868],{"class":867},[324,80777,80517],{"class":5945},[324,80779,80520],{"class":863},[324,80781,80782],{"class":867}," item.price ",[324,80784,2441],{"class":863},[324,80786,4822],{"class":916},[324,80788,80789],{"class":863}," &&",[324,80791,80782],{"class":867},[324,80793,2319],{"class":863},[324,80795,6483],{"class":916},[324,80797,874],{"class":867},[324,80799,80800,80803,80805,80807,80809,80811,80814],{"class":326,"line":34200},[324,80801,80802],{"class":867},"        } ",[324,80804,2432],{"class":863},[324,80806,2435],{"class":863},[324,80808,80753],{"class":867},[324,80810,55208],{"class":863},[324,80812,80813],{"class":738}," '2'",[324,80815,13171],{"class":867},[324,80817,80818,80820,80822,80824,80826,80828,80830,80832,80834,80836,80838,80840,80842,80844,80847],{"class":326,"line":34205},[324,80819,80765],{"class":867},[324,80821,913],{"class":863},[324,80823,80770],{"class":867},[324,80825,80773],{"class":734},[324,80827,868],{"class":867},[324,80829,80517],{"class":5945},[324,80831,80520],{"class":863},[324,80833,80782],{"class":867},[324,80835,2441],{"class":863},[324,80837,6483],{"class":916},[324,80839,80789],{"class":863},[324,80841,80782],{"class":867},[324,80843,2319],{"class":863},[324,80845,80846],{"class":916}," 300",[324,80848,874],{"class":867},[324,80850,80851,80853,80855,80857,80859,80861,80864],{"class":326,"line":34211},[324,80852,80802],{"class":867},[324,80854,2432],{"class":863},[324,80856,2435],{"class":863},[324,80858,80753],{"class":867},[324,80860,55208],{"class":863},[324,80862,80863],{"class":738}," '3'",[324,80865,13171],{"class":867},[324,80867,80868,80870,80872,80874,80876,80878,80880,80882,80884,80886,80888],{"class":326,"line":34222},[324,80869,80765],{"class":867},[324,80871,913],{"class":863},[324,80873,80770],{"class":867},[324,80875,80773],{"class":734},[324,80877,868],{"class":867},[324,80879,80517],{"class":5945},[324,80881,80520],{"class":863},[324,80883,80782],{"class":867},[324,80885,2441],{"class":863},[324,80887,80846],{"class":916},[324,80889,874],{"class":867},[324,80891,80892],{"class":326,"line":34228},[324,80893,3258],{"class":867},[324,80895,80896],{"class":326,"line":34248},[324,80897,80898],{"class":772},"        \u002F\u002F 渲染函数\n",[324,80900,80901,80903],{"class":326,"line":34254},[324,80902,71130],{"class":734},[324,80904,53134],{"class":867},[324,80906,80907],{"class":326,"line":34260},[324,80908,53120],{"class":867},[324,80910,80911],{"class":326,"line":34266},[324,80912,488],{"emptyLinePlaceholder":487},[324,80914,80915],{"class":326,"line":34283},[324,80916,34183],{"class":867},[324,80918,80919,80921,80923],{"class":326,"line":34289},[324,80920,53139],{"class":867},[324,80922,52535],{"class":52022},[324,80924,52029],{"class":867},[324,80926,80927,80929,80931],{"class":326,"line":34295},[324,80928,52507],{"class":867},[324,80930,52522],{"class":52022},[324,80932,52029],{"class":867},[324,80934,80935],{"class":326,"line":34301},[324,80936,488],{"emptyLinePlaceholder":487},[324,80938,80939,80941,80943],{"class":326,"line":34307},[324,80940,52507],{"class":867},[324,80942,51357],{"class":52022},[324,80944,52029],{"class":867},[14,80946,80948],{"id":80947},"_410-深入了解对象","4.10 深入了解对象",[35,80950,80952],{"id":80951},"_4101-创建对象","4.10.1 创建对象",[19,80954,80955],{},[48,80956],{"alt":50,"src":80957},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-253.png",[19,80959,80960],{},"这个new Object方法创建对象也是一种函数的形式进行创建的，但是这个写法是写死的，只能这样写，它是系统给我们的创造函数",[35,80962,80964],{"id":80963},"_4102-构造函数","4.10.2 构造函数",[19,80966,80967,80970],{},[116,80968,80969],{},"构造函数 ："," 是一种特殊的函数，主要用来初始化对象",[19,80972,80973,80976],{},[116,80974,80975],{},"使用场景："," 常规的 {...} 语法允许创建一个对象。比如我们创建了佩奇的对象，继续创建乔治的对象还需要重新写一 遍，此时可以通过构造函数来快速创建多个类似的对象",[316,80978,80980],{"className":51355,"code":80979,"language":51357,"meta":50,"style":50},"\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",[269,80981,80982,80990,80995,81016,81029,81041,81053,81057,81062,81089,81094,81121],{"__ignoreMap":50},[324,80983,80984,80986,80988],{"class":326,"line":327},[324,80985,1774],{"class":867},[324,80987,52535],{"class":52022},[324,80989,52029],{"class":867},[324,80991,80992],{"class":326,"line":203},[324,80993,80994],{"class":772},"\u002F\u002F例：\n",[324,80996,80997,80999,81002,81004,81006,81008,81010,81012,81014],{"class":326,"line":338},[324,80998,55171],{"class":863},[324,81000,81001],{"class":734}," Pig",[324,81003,868],{"class":867},[324,81005,80532],{"class":5945},[324,81007,1242],{"class":867},[324,81009,70943],{"class":5945},[324,81011,1242],{"class":867},[324,81013,70960],{"class":5945},[324,81015,13171],{"class":867},[324,81017,81018,81021,81024,81026],{"class":326,"line":344},[324,81019,81020],{"class":916},"    this",[324,81022,81023],{"class":867},".name",[324,81025,913],{"class":863},[324,81027,81028],{"class":867},"name\n",[324,81030,81031,81033,81036,81038],{"class":326,"line":484},[324,81032,81020],{"class":916},[324,81034,81035],{"class":867},".age",[324,81037,913],{"class":863},[324,81039,81040],{"class":867},"age\n",[324,81042,81043,81045,81048,81050],{"class":326,"line":491},[324,81044,81020],{"class":916},[324,81046,81047],{"class":867},".gender",[324,81049,913],{"class":863},[324,81051,81052],{"class":867},"gender    \n",[324,81054,81055],{"class":326,"line":496},[324,81056,2296],{"class":867},[324,81058,81059],{"class":326,"line":502},[324,81060,81061],{"class":772},"\u002F\u002F创建佩奇对象\n",[324,81063,81064,81066,81069,81071,81073,81075,81078,81080,81082,81084,81087],{"class":326,"line":508},[324,81065,7521],{"class":863},[324,81067,81068],{"class":916}," Peppa",[324,81070,12446],{"class":863},[324,81072,81001],{"class":734},[324,81074,868],{"class":867},[324,81076,81077],{"class":738},"'佩奇'",[324,81079,1242],{"class":867},[324,81081,1208],{"class":916},[324,81083,1242],{"class":867},[324,81085,81086],{"class":738},"'女'",[324,81088,874],{"class":867},[324,81090,81091],{"class":326,"line":514},[324,81092,81093],{"class":772},"\u002F\u002F创建乔治对象\n",[324,81095,81096,81098,81101,81103,81105,81107,81110,81112,81114,81116,81119],{"class":326,"line":2343},[324,81097,7521],{"class":863},[324,81099,81100],{"class":916}," George",[324,81102,12446],{"class":863},[324,81104,81001],{"class":734},[324,81106,868],{"class":867},[324,81108,81109],{"class":738},"'乔治'",[324,81111,1242],{"class":867},[324,81113,938],{"class":916},[324,81115,1242],{"class":867},[324,81117,81118],{"class":738},"'男'",[324,81120,874],{"class":867},[324,81122,81123,81125,81127],{"class":326,"line":2348},[324,81124,52507],{"class":867},[324,81126,52535],{"class":52022},[324,81128,52029],{"class":867},[19,81130,81131],{},[48,81132],{"alt":50,"src":81133},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-254.png",[19,81135,81136],{},[48,81137],{"alt":50,"src":81138},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-255.png",[19,81140,81141],{},"这里非常重要的点：这里是构造函数来初始化对象， 过一会回来调用Pig，一会要new它，所以this指向的是对象，不是window，this指向的就是对象",[19,81143,81144],{},"无new就是纯函数了，有new说明这个函数是专门用于创建对象的",[19,81146,81147],{},"this.uname=uname 这里的第一uname是属性，第二个uname是形参",[19,81149,81150],{},"在利用对象字面量创建对象和new Object创建对象中都是用的是：不是=",[19,81152,81153],{},"这里用等号是因为：对象.属性=值",[19,81155,81156],{},"①利用对象字面量创建对象",[19,81158,81159],{},"const o={",[19,81161,81162],{},"name:'pink'",[19,81164,81165],{},"} ②利用new Object创建对象",[19,81167,81168],{},"const o=new Object({name:'pink'})",[19,81170,81171],{},"构造函数内部不需要写return，构造函数自动返回创建的新的对象",[19,81173,81174],{},"构造函数创建对象的执行过程：",[19,81176,81177],{},[48,81178],{"alt":50,"src":81179},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-256.png",[35,81181,81183],{"id":81182},"_4103-实例成员","4.10.3 实例成员",[19,81185,81186],{},"通过构造函数创建的对象称为实例对象，实例对象中的属性和方法称为实例成员",[192,81188,81189,81192,81195],{},[195,81190,81191],{},"实例对象的属性和方法即为实例成员",[195,81193,81194],{},"为构造函数传入参数，动态创建结构相同但值不同的对象",[195,81196,81197],{},"构造函数创建的实例对象彼此独立互不影响",[35,81199,81201],{"id":81200},"_4104-静态成员","4.10.4 静态成员",[19,81203,81204],{},[48,81205],{"alt":50,"src":81206},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-257.png",[19,81208,81209],{},"静态成员有Date.now() Math.PI Math.random()",[19,81211,81212],{},"构造函数理解为一个特殊的对象，给这个对象添加的属性和方法就是静态成员",[19,81214,81215],{},"对象的属性和方法只能该对象使用，该对象方法中的this指向的就是该对象（构造函数）",[19,81217,81218],{},"function Pig(name) n {",[19,81220,81221],{},"this.name=name",[19,81223,1810],{},[19,81225,81226],{},"Pig.eyes=2",[19,81228,81229],{},"Pig.sayHai=function () { console.log(this) }",[19,81231,81232],{},"Pig.sayHai() \u002F\u002F指向就是构造函数",[19,81234,81235],{},"console.log(Pig.eyes) \u002F\u002F2",[19,81237,12061],{},[192,81239,81240,81243,81246,81249,81252],{},[195,81241,81242],{},"实例对象的属性和方法即为实例成员；实例对象相互独立，实例成员当前实例对象使用",[195,81244,81245],{},"静态成员是写在构造函数身上的，构造函数的属性和方法被称为静态成员；静态成员只能函数访问",[195,81247,81248],{},"构造函数内部的属性不是静态成员，内部是通过this.属性名=值，它是给实例对象创建的",[195,81250,81251],{},"构造函数外部创建的，构造函数名.属性名=值 是静态成员",[195,81253,81254],{},"实例对象无法访问静态成员，静态成员只依附在这个构造函数上",[19,81256,81257],{},"自己的理解：构造函数可以认为是一个升级版的函数，它就是一个对象",[35,81259,81261],{"id":81260},"_4105-内置构造函数","4.10.5 内置构造函数",[19,81263,81264],{},"内置构造函数包含：",[19,81266,81267],{},[48,81268],{"alt":50,"src":81269},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-258.png",[19,81271,81272],{},[48,81273],{"alt":50,"src":81274},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-259.png",[19,81276,81277],{},"这些基本数据类型，js对他们进行了包装",[52535,81279,81280],{},"\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",[151,81282,81284],{"id":81283},"_41051-object","4.10.5.1 Object",[19,81286,81287],{},"Object 是内置的构造函数，用于创建普通对象",[19,81289,81290],{},"平时最好还是使用字面量的形式声明对象，而不是使用Object这个这个内置函数",[316,81292,81294],{"className":51355,"code":81293,"language":51357,"meta":50,"style":50},"const user=new Object({name:'小明',age:15})\n",[269,81295,81296],{"__ignoreMap":50},[324,81297,81298],{"class":326,"line":327},[324,81299,81293],{"class":867},[19,81301,81302],{},"三个常用的静态方法：",[575,81304,81306],{"id":81305},"_410511-objectkeys和objectvalues","4.10.5.1.1 Object.keys和Object.values",[19,81308,81309],{},"它是创建对象那个构造函数里边的静态方法，是一个静态成员，使用的时候是函数名.方法（）",[19,81311,81312],{},[48,81313],{"alt":50,"src":81314},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-260.png",[19,81316,81317],{},[48,81318],{"alt":50,"src":81319},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-261.png",[316,81321,81323],{"className":53789,"code":81322,"language":53791,"meta":50,"style":50},"\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",[269,81324,81325,81333,81341,81346,81351,81356,81361,81366,81371,81379],{"__ignoreMap":50},[324,81326,81327,81329,81331],{"class":326,"line":327},[324,81328,1774],{"class":867},[324,81330,52522],{"class":52022},[324,81332,52029],{"class":867},[324,81334,81335,81337,81339],{"class":326,"line":203},[324,81336,52866],{"class":867},[324,81338,52535],{"class":52022},[324,81340,52029],{"class":867},[324,81342,81343],{"class":326,"line":338},[324,81344,81345],{"class":867},"    const o = { name: 'pink', age: 6 }\n",[324,81347,81348],{"class":326,"line":344},[324,81349,81350],{"class":867},"    \u002F\u002F 获得所有属性名\n",[324,81352,81353],{"class":326,"line":484},[324,81354,81355],{"class":867},"    const arr = Object.keys(o)\n",[324,81357,81358],{"class":326,"line":491},[324,81359,81360],{"class":867},"    console.log(arr)\n",[324,81362,81363],{"class":326,"line":496},[324,81364,81365],{"class":867},"    \u002F\u002F 获得所有属性值\n",[324,81367,81368],{"class":326,"line":502},[324,81369,81370],{"class":867},"    console.log(Object.values(o))\n",[324,81372,81373,81375,81377],{"class":326,"line":508},[324,81374,53139],{"class":867},[324,81376,52535],{"class":52022},[324,81378,52029],{"class":867},[324,81380,81381,81383,81385],{"class":326,"line":514},[324,81382,52507],{"class":867},[324,81384,52522],{"class":52022},[324,81386,52029],{"class":867},[575,81388,81390],{"id":81389},"_410512-object-assign","4.10.5.1.2 Object. assign",[19,81392,81393],{},"Object.assign(oo,o)",[19,81395,81396],{},"后的东西添加给前 是追加",[19,81398,81399],{},[48,81400],{"alt":50,"src":81401},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-262.png",[19,81403,81404],{},[48,81405],{"alt":50,"src":81406},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-263.png",[316,81408,81410],{"className":53789,"code":81409,"language":53791,"meta":50,"style":50},"\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",[269,81411,81412,81420,81428,81432,81436,81440,81444,81448,81452,81457,81462,81467,81472,81477,81485],{"__ignoreMap":50},[324,81413,81414,81416,81418],{"class":326,"line":327},[324,81415,1774],{"class":867},[324,81417,52522],{"class":52022},[324,81419,52029],{"class":867},[324,81421,81422,81424,81426],{"class":326,"line":203},[324,81423,52866],{"class":867},[324,81425,52535],{"class":52022},[324,81427,52029],{"class":867},[324,81429,81430],{"class":326,"line":338},[324,81431,81345],{"class":867},[324,81433,81434],{"class":326,"line":344},[324,81435,81350],{"class":867},[324,81437,81438],{"class":326,"line":484},[324,81439,81355],{"class":867},[324,81441,81442],{"class":326,"line":491},[324,81443,81360],{"class":867},[324,81445,81446],{"class":326,"line":496},[324,81447,81365],{"class":867},[324,81449,81450],{"class":326,"line":502},[324,81451,81370],{"class":867},[324,81453,81454],{"class":326,"line":508},[324,81455,81456],{"class":867},"    const oo = {}\n",[324,81458,81459],{"class":326,"line":514},[324,81460,81461],{"class":867},"    Object.assign(oo, o)\n",[324,81463,81464],{"class":326,"line":2343},[324,81465,81466],{"class":867},"    console.log(oo)\n",[324,81468,81469],{"class":326,"line":2348},[324,81470,81471],{"class":867},"    Object.assign(o, { gender: '女' })\n",[324,81473,81474],{"class":326,"line":2354},[324,81475,81476],{"class":867},"    console.log(o)\n",[324,81478,81479,81481,81483],{"class":326,"line":2359},[324,81480,53139],{"class":867},[324,81482,52535],{"class":52022},[324,81484,52029],{"class":867},[324,81486,81487,81489,81491],{"class":326,"line":2373},[324,81488,52507],{"class":867},[324,81490,52522],{"class":52022},[324,81492,52029],{"class":867},[19,81494,81495],{},[48,81496],{"alt":50,"src":81497},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-264.png",[151,81499,81501],{"id":81500},"_41052-array","4.10.5.2 Array",[19,81503,81504],{},"Array 是内置的构造函数，用于创建数组",[19,81506,81507],{},"这个也是平时最好使用字面量的方式创建数组，而不是使用Array构造函数创建",[316,81509,81511],{"className":51355,"code":81510,"language":51357,"meta":50,"style":50},"const arr=new Array(3,5)\nconsole.log(arr)  \u002F\u002F[3,5]\n",[269,81512,81513,81518],{"__ignoreMap":50},[324,81514,81515],{"class":326,"line":327},[324,81516,81517],{"class":867},"const arr=new Array(3,5)\n",[324,81519,81520],{"class":326,"line":203},[324,81521,81522],{"class":867},"console.log(arr)  \u002F\u002F[3,5]\n",[19,81524,81525],{},"Array的实例方法，这个方法是实例成员",[19,81527,81528],{},[48,81529],{"alt":50,"src":81530},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-265.png",[575,81532,81534],{"id":81533},"_410521-reduce","4.10.5.2.1 reduce",[19,81536,81537],{},[48,81538],{"alt":50,"src":81539},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-266.png",[316,81541,81543],{"className":53789,"code":81542,"language":53791,"meta":50,"style":50},"\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",[269,81544,81545,81553,81561,81566,81571,81576,81581,81585,81590,81595,81600,81604,81609,81614,81618,81623,81628,81633,81641],{"__ignoreMap":50},[324,81546,81547,81549,81551],{"class":326,"line":327},[324,81548,1774],{"class":867},[324,81550,52522],{"class":52022},[324,81552,52029],{"class":867},[324,81554,81555,81557,81559],{"class":326,"line":203},[324,81556,52866],{"class":867},[324,81558,52535],{"class":52022},[324,81560,52029],{"class":867},[324,81562,81563],{"class":326,"line":338},[324,81564,81565],{"class":867},"    const arr = [1, 5, 8]\n",[324,81567,81568],{"class":326,"line":344},[324,81569,81570],{"class":867},"    \u002F\u002F 1.没有初始值\n",[324,81572,81573],{"class":326,"line":484},[324,81574,81575],{"class":867},"    const total = arr.reduce(function (prev, current) {\n",[324,81577,81578],{"class":326,"line":491},[324,81579,81580],{"class":867},"      return prev + current\n",[324,81582,81583],{"class":326,"line":496},[324,81584,34183],{"class":867},[324,81586,81587],{"class":326,"line":502},[324,81588,81589],{"class":867},"    console.log(total)   \u002F\u002F14\n",[324,81591,81592],{"class":326,"line":508},[324,81593,81594],{"class":867},"    \u002F\u002F 2.有初始值\n",[324,81596,81597],{"class":326,"line":514},[324,81598,81599],{"class":867},"    const total1 = arr.reduce(function (prev, current) {\n",[324,81601,81602],{"class":326,"line":2343},[324,81603,81580],{"class":867},[324,81605,81606],{"class":326,"line":2348},[324,81607,81608],{"class":867},"    }, 10)\n",[324,81610,81611],{"class":326,"line":2354},[324,81612,81613],{"class":867},"    console.log(total1)  \u002F\u002F14+10=24 最后结果为24\n",[324,81615,81616],{"class":326,"line":2359},[324,81617,488],{"emptyLinePlaceholder":487},[324,81619,81620],{"class":326,"line":2373},[324,81621,81622],{"class":867},"    \u002F\u002F 3.箭头函数写法\n",[324,81624,81625],{"class":326,"line":2378},[324,81626,81627],{"class":867},"    const total2 = arr.reduce((prev, current) => prev + current, 10)\n",[324,81629,81630],{"class":326,"line":2384},[324,81631,81632],{"class":867},"    console.log(total2)   \u002F\u002F24\n",[324,81634,81635,81637,81639],{"class":326,"line":2405},[324,81636,53139],{"class":867},[324,81638,52535],{"class":52022},[324,81640,52029],{"class":867},[324,81642,81643,81645,81647],{"class":326,"line":2410},[324,81644,52507],{"class":867},[324,81646,52522],{"class":52022},[324,81648,52029],{"class":867},[19,81650,81651],{},"执行过程：",[192,81653,81654,81657,81660],{},[195,81655,81656],{},"如果没有起始值，则上一次值以数组的第一个数组元素的值",[195,81658,81659],{},"每一次循环，把返回值给作为下一次循环的上一次值",[195,81661,81662],{},"如果有起始值，则起始值作为上一次值",[316,81664,81666],{"className":53789,"code":81665,"language":53791,"meta":50,"style":50},"\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",[269,81667,81668,81676,81684,81688,81692,81696,81700,81704,81708,81713,81718,81723,81728,81733,81737,81741,81745,81749,81753,81757,81762,81766,81771,81775,81780,81785,81789,81793,81797,81805],{"__ignoreMap":50},[324,81669,81670,81672,81674],{"class":326,"line":327},[324,81671,1774],{"class":867},[324,81673,52522],{"class":52022},[324,81675,52029],{"class":867},[324,81677,81678,81680,81682],{"class":326,"line":203},[324,81679,52866],{"class":867},[324,81681,52535],{"class":52022},[324,81683,52029],{"class":867},[324,81685,81686],{"class":326,"line":338},[324,81687,81565],{"class":867},[324,81689,81690],{"class":326,"line":344},[324,81691,81570],{"class":867},[324,81693,81694],{"class":326,"line":484},[324,81695,81575],{"class":867},[324,81697,81698],{"class":326,"line":491},[324,81699,81580],{"class":867},[324,81701,81702],{"class":326,"line":496},[324,81703,34183],{"class":867},[324,81705,81706],{"class":326,"line":502},[324,81707,81589],{"class":867},[324,81709,81710],{"class":326,"line":508},[324,81711,81712],{"class":867},"    \u002F\u002F 上一次值         当前值           返回值（第一次循环）\n",[324,81714,81715],{"class":326,"line":514},[324,81716,81717],{"class":867},"    \u002F\u002F     1              5                    6\n",[324,81719,81720],{"class":326,"line":2343},[324,81721,81722],{"class":867},"    \u002F\u002F 上一次值         当前值           返回值（第二次循环）\n",[324,81724,81725],{"class":326,"line":2348},[324,81726,81727],{"class":867},"    \u002F\u002F     6              8                    14\n",[324,81729,81730],{"class":326,"line":2354},[324,81731,81732],{"class":867},"    \u002F\u002F 无初始值时，循环次数是比数组长度小一的\n",[324,81734,81735],{"class":326,"line":2359},[324,81736,81594],{"class":867},[324,81738,81739],{"class":326,"line":2373},[324,81740,81599],{"class":867},[324,81742,81743],{"class":326,"line":2378},[324,81744,81580],{"class":867},[324,81746,81747],{"class":326,"line":2384},[324,81748,81608],{"class":867},[324,81750,81751],{"class":326,"line":2405},[324,81752,81613],{"class":867},[324,81754,81755],{"class":326,"line":2410},[324,81756,81712],{"class":867},[324,81758,81759],{"class":326,"line":2424},[324,81760,81761],{"class":867},"    \u002F\u002F     10             1                     11\n",[324,81763,81764],{"class":326,"line":2429},[324,81765,81722],{"class":867},[324,81767,81768],{"class":326,"line":2458},[324,81769,81770],{"class":867},"    \u002F\u002F     11             5                    16\n",[324,81772,81773],{"class":326,"line":2463},[324,81774,81722],{"class":867},[324,81776,81777],{"class":326,"line":2480},[324,81778,81779],{"class":867},"    \u002F\u002F     16             8                    24\n",[324,81781,81782],{"class":326,"line":2485},[324,81783,81784],{"class":867},"    \u002F\u002F 有初始值时循环次数就是数组的长度\n",[324,81786,81787],{"class":326,"line":2490},[324,81788,81622],{"class":867},[324,81790,81791],{"class":326,"line":2495},[324,81792,81627],{"class":867},[324,81794,81795],{"class":326,"line":2509},[324,81796,81632],{"class":867},[324,81798,81799,81801,81803],{"class":326,"line":2514},[324,81800,53139],{"class":867},[324,81802,52535],{"class":52022},[324,81804,52029],{"class":867},[324,81806,81807,81809,81811],{"class":326,"line":3306},[324,81808,52507],{"class":867},[324,81810,52522],{"class":52022},[324,81812,52029],{"class":867},[575,81814,81816],{"id":81815},"_410522-员工涨薪案例","4.10.5.2.2 员工涨薪案例",[19,81818,81819],{},[48,81820],{"alt":50,"src":81821},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-267.png",[316,81823,81825],{"className":53789,"code":81824,"language":53791,"meta":50,"style":50},"\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",[269,81826,81827,81835,81843,81848,81853,81858,81863,81867,81872,81877,81882,81887,81892,81897,81901,81906,81910,81915,81923],{"__ignoreMap":50},[324,81828,81829,81831,81833],{"class":326,"line":327},[324,81830,1774],{"class":867},[324,81832,52522],{"class":52022},[324,81834,52029],{"class":867},[324,81836,81837,81839,81841],{"class":326,"line":203},[324,81838,52866],{"class":867},[324,81840,52535],{"class":52022},[324,81842,52029],{"class":867},[324,81844,81845],{"class":326,"line":338},[324,81846,81847],{"class":867},"    const arr = [\n",[324,81849,81850],{"class":326,"line":344},[324,81851,81852],{"class":867},"      { name: '张三', salary: 10000 },\n",[324,81854,81855],{"class":326,"line":484},[324,81856,81857],{"class":867},"      { name: '李四', salary: 10000 },\n",[324,81859,81860],{"class":326,"line":491},[324,81861,81862],{"class":867},"      { name: '王五', salary: 10000 }\n",[324,81864,81865],{"class":326,"line":496},[324,81866,53831],{"class":867},[324,81868,81869],{"class":326,"line":502},[324,81870,81871],{"class":867},"    \u002F\u002F 如果是个数组对象的话从0开始，起始值设为0，不然从数组第一个开始的话，就是加一个对象了\n",[324,81873,81874],{"class":326,"line":508},[324,81875,81876],{"class":867},"    \u002F\u002F prev是累计值\n",[324,81878,81879],{"class":326,"line":514},[324,81880,81881],{"class":867},"    const total = arr.reduce((prev, current) => prev + current.salary * 1.3, 0)\n",[324,81883,81884],{"class":326,"line":2343},[324,81885,81886],{"class":867},"    console.log(total)\n",[324,81888,81889],{"class":326,"line":2348},[324,81890,81891],{"class":867},"    \u002F\u002F 上一次值        当前值       返回值（第一次遍历）\n",[324,81893,81894],{"class":326,"line":2354},[324,81895,81896],{"class":867},"    \u002F\u002F    0       10000*1.3=13000       13000\n",[324,81898,81899],{"class":326,"line":2359},[324,81900,81891],{"class":867},[324,81902,81903],{"class":326,"line":2373},[324,81904,81905],{"class":867},"    \u002F\u002F  13000     10000*1.3=13000       26000\n",[324,81907,81908],{"class":326,"line":2378},[324,81909,81891],{"class":867},[324,81911,81912],{"class":326,"line":2384},[324,81913,81914],{"class":867},"    \u002F\u002F  26000     10000*1.3=13000       39000\n",[324,81916,81917,81919,81921],{"class":326,"line":2405},[324,81918,53139],{"class":867},[324,81920,52535],{"class":52022},[324,81922,52029],{"class":867},[324,81924,81925,81927,81929],{"class":326,"line":2410},[324,81926,52507],{"class":867},[324,81928,52522],{"class":52022},[324,81930,52029],{"class":867},[575,81932,81934],{"id":81933},"_410523-array的其他方法","4.10.5.2.3 Array的其他方法",[19,81936,81937],{},[48,81938],{"alt":50,"src":81939},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-268.png",[19,81941,81942],{},[48,81943],{"alt":50,"src":81944},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-269.png",[192,81946,81947],{},[195,81948,81949],{},"find()",[19,81951,81952],{},"循环查找，找到第一个就ok",[19,81954,81955],{},[25,81956,81959],{"href":81957,"rel":81958},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Ffind",[29],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Ffind",[316,81961,81963],{"className":51355,"code":81962,"language":51357,"meta":50,"style":50},"const array1 = [5, 12, 8, 130, 44]\nconst found = array1.find((element) => element > 10)\nconsole.log(found)  \u002F\u002F12\n",[269,81964,81965,81970,81975],{"__ignoreMap":50},[324,81966,81967],{"class":326,"line":327},[324,81968,81969],{"class":867},"const array1 = [5, 12, 8, 130, 44]\n",[324,81971,81972],{"class":326,"line":203},[324,81973,81974],{"class":867},"const found = array1.find((element) => element > 10)\n",[324,81976,81977],{"class":326,"line":338},[324,81978,81979],{"class":867},"console.log(found)  \u002F\u002F12\n",[19,81981,81982,81984,81985,81990,81991,81994,81995,81997,81998,82003,82004,82006,82007,82009,82010,82012,82013],{},[269,81983,81949],{}," 方法是一个",[25,81986,81989],{"href":81987,"rel":81988},"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",[29],"迭代方法","。它按索引升序顺序为数组中的每个元素调用提供的 ",[269,81992,81993],{},"callbackFn"," 函数，直到 ",[269,81996,81993],{}," 返回一个",[25,81999,82002],{"href":82000,"rel":82001},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FGlossary\u002FTruthy",[29],"真值","。然后 ",[269,82005,81949],{}," 返回该元素并停止迭代数组。如果 ",[269,82008,81993],{}," 从未返回真值，则 ",[269,82011,81949],{}," 返回 ",[269,82014,82015],{},"[undefined](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002Fundefined)",[316,82017,82019],{"className":53789,"code":82018,"language":53791,"meta":50,"style":50},"\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",[269,82020,82021,82029,82037,82042,82047,82052,82056,82061,82066,82070,82075,82080,82084,82088,82093,82098,82102,82106,82111,82116,82121,82126,82131,82135,82140,82145,82150,82155,82159,82164,82172],{"__ignoreMap":50},[324,82022,82023,82025,82027],{"class":326,"line":327},[324,82024,1774],{"class":867},[324,82026,52522],{"class":52022},[324,82028,52029],{"class":867},[324,82030,82031,82033,82035],{"class":326,"line":203},[324,82032,52866],{"class":867},[324,82034,52535],{"class":52022},[324,82036,52029],{"class":867},[324,82038,82039],{"class":326,"line":338},[324,82040,82041],{"class":867},"    const arr = ['red', 'blue', 'green']\n",[324,82043,82044],{"class":326,"line":344},[324,82045,82046],{"class":867},"    const found = arr.find(item => item === 'pink')\n",[324,82048,82049],{"class":326,"line":484},[324,82050,82051],{"class":867},"    console.log(found)   \u002F\u002F没有，输出undefined\n",[324,82053,82054],{"class":326,"line":491},[324,82055,488],{"emptyLinePlaceholder":487},[324,82057,82058],{"class":326,"line":496},[324,82059,82060],{"class":867},"    \u002F\u002F 使用场景，用于查找数据\n",[324,82062,82063],{"class":326,"line":502},[324,82064,82065],{"class":867},"    const arr1 = [\n",[324,82067,82068],{"class":326,"line":508},[324,82069,80108],{"class":867},[324,82071,82072],{"class":326,"line":514},[324,82073,82074],{"class":867},"        name: '小米',\n",[324,82076,82077],{"class":326,"line":2343},[324,82078,82079],{"class":867},"        price: 1999\n",[324,82081,82082],{"class":326,"line":2348},[324,82083,78614],{"class":867},[324,82085,82086],{"class":326,"line":2354},[324,82087,80108],{"class":867},[324,82089,82090],{"class":326,"line":2359},[324,82091,82092],{"class":867},"        name: '华为',\n",[324,82094,82095],{"class":326,"line":2373},[324,82096,82097],{"class":867},"        price: 3999\n",[324,82099,82100],{"class":326,"line":2378},[324,82101,53120],{"class":867},[324,82103,82104],{"class":326,"line":2384},[324,82105,53831],{"class":867},[324,82107,82108],{"class":326,"line":2405},[324,82109,82110],{"class":867},"    \u002F\u002F 这小米这个对象，并且返回这个对象\n",[324,82112,82113],{"class":326,"line":2410},[324,82114,82115],{"class":867},"    \u002F\u002F const found1 = arr1.find(item => {\n",[324,82117,82118],{"class":326,"line":2424},[324,82119,82120],{"class":867},"    \u002F\u002F   if (item.name === '小米') {\n",[324,82122,82123],{"class":326,"line":2429},[324,82124,82125],{"class":867},"    \u002F\u002F     return item\n",[324,82127,82128],{"class":326,"line":2458},[324,82129,82130],{"class":867},"    \u002F\u002F   }\n",[324,82132,82133],{"class":326,"line":2463},[324,82134,64012],{"class":867},[324,82136,82137],{"class":326,"line":2480},[324,82138,82139],{"class":867},"    \u002F\u002F 另一种写法\n",[324,82141,82142],{"class":326,"line":2485},[324,82143,82144],{"class":867},"    const found1 = arr1.find(item => {\n",[324,82146,82147],{"class":326,"line":2490},[324,82148,82149],{"class":867},"      \u002F\u002F 这个return是为了在找到小米之后退出函数，但是这个函数返回的是包含小米的这个对象\n",[324,82151,82152],{"class":326,"line":2495},[324,82153,82154],{"class":867},"      return item.name = '小米'\n",[324,82156,82157],{"class":326,"line":2509},[324,82158,34183],{"class":867},[324,82160,82161],{"class":326,"line":2514},[324,82162,82163],{"class":867},"    console.log(found1)\n",[324,82165,82166,82168,82170],{"class":326,"line":3306},[324,82167,53139],{"class":867},[324,82169,52535],{"class":52022},[324,82171,52029],{"class":867},[324,82173,82174,82176,82178],{"class":326,"line":3320},[324,82175,52507],{"class":867},[324,82177,52522],{"class":52022},[324,82179,52029],{"class":867},[19,82181,82182],{},[48,82183],{"alt":50,"src":82184},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-270.png",[19,82186,82187],{},"上面还可以进一步的省略，写为：const found1 = arr1.find(item => item.name === '小米')",[192,82189,82190],{"start":203},[195,82191,82192],{},"every()返回的是布尔值",[19,82194,82195],{},[25,82196,82199],{"href":82197,"rel":82198},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Fevery",[29],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Fevery",[19,82201,82202],{},"filter是筛选之后返回的是数组，every()返回的是筛选后的布尔值",[19,82204,82205],{},"some是只有有一个就没问题",[19,82207,82208],{},"every是必须全是才行",[316,82210,82214],{"className":82211,"code":82212,"language":82213,"meta":50,"style":50},"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",[269,82215,82216,82232,82246,82250,82259],{"__ignoreMap":50},[324,82217,82218,82220,82223,82225,82227,82230],{"class":326,"line":327},[324,82219,55171],{"class":863},[324,82221,82222],{"class":867}," isBigEnough(element, ",[324,82224,74780],{"class":863},[324,82226,13164],{"class":867},[324,82228,82229],{"class":863},"array",[324,82231,13171],{"class":867},[324,82233,82234,82237,82240,82242,82244],{"class":326,"line":203},[324,82235,82236],{"class":863},"  return",[324,82238,82239],{"class":867}," element ",[324,82241,2441],{"class":863},[324,82243,2768],{"class":916},[324,82245,2025],{"class":867},[324,82247,82248],{"class":326,"line":338},[324,82249,2296],{"class":867},[324,82251,82252,82255,82257],{"class":326,"line":344},[324,82253,82254],{"class":867},"[12, 5, 8, 130, 44].every(isBigEnough); ",[324,82256,34051],{"class":863},[324,82258,55238],{"class":867},[324,82260,82261,82264,82266],{"class":326,"line":484},[324,82262,82263],{"class":867},"[12, 54, 18, 130, 44].every(isBigEnough); ",[324,82265,34051],{"class":863},[324,82267,58662],{"class":867},[316,82269,82271],{"className":53789,"code":82270,"language":53791,"meta":50,"style":50},"\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",[269,82272,82273,82281,82289,82294,82298,82303,82308,82316],{"__ignoreMap":50},[324,82274,82275,82277,82279],{"class":326,"line":327},[324,82276,1774],{"class":867},[324,82278,52522],{"class":52022},[324,82280,52029],{"class":867},[324,82282,82283,82285,82287],{"class":326,"line":203},[324,82284,52866],{"class":867},[324,82286,52535],{"class":52022},[324,82288,52029],{"class":867},[324,82290,82291],{"class":326,"line":338},[324,82292,82293],{"class":867},"    \u002F\u002F every 每个是否都符合条件，如果都符合返回true，否则返回false\n",[324,82295,82296],{"class":326,"line":344},[324,82297,79044],{"class":867},[324,82299,82300],{"class":326,"line":484},[324,82301,82302],{"class":867},"    const flag = arr.every(item => item >= 10)\n",[324,82304,82305],{"class":326,"line":491},[324,82306,82307],{"class":867},"    console.log(flag)    \u002F\u002Ftrue\n",[324,82309,82310,82312,82314],{"class":326,"line":496},[324,82311,53139],{"class":867},[324,82313,52535],{"class":52022},[324,82315,52029],{"class":867},[324,82317,82318,82320,82322],{"class":326,"line":502},[324,82319,52507],{"class":867},[324,82321,52522],{"class":52022},[324,82323,52029],{"class":867},[316,82325,82327],{"className":53789,"code":82326,"language":53791,"meta":50,"style":50},"\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",[269,82328,82329,82337,82345,82349,82354,82359,82364,82372],{"__ignoreMap":50},[324,82330,82331,82333,82335],{"class":326,"line":327},[324,82332,1774],{"class":867},[324,82334,52522],{"class":52022},[324,82336,52029],{"class":867},[324,82338,82339,82341,82343],{"class":326,"line":203},[324,82340,52866],{"class":867},[324,82342,52535],{"class":52022},[324,82344,52029],{"class":867},[324,82346,82347],{"class":326,"line":338},[324,82348,82293],{"class":867},[324,82350,82351],{"class":326,"line":344},[324,82352,82353],{"class":867},"    const arr = [10, 0, 5]\n",[324,82355,82356],{"class":326,"line":484},[324,82357,82358],{"class":867},"    const flag = arr.some(item => item >= 10)\n",[324,82360,82361],{"class":326,"line":491},[324,82362,82363],{"class":867},"    console.log(flag)   \u002F\u002Ftrue\n",[324,82365,82366,82368,82370],{"class":326,"line":496},[324,82367,53139],{"class":867},[324,82369,52535],{"class":52022},[324,82371,52029],{"class":867},[324,82373,82374,82376,82378],{"class":326,"line":502},[324,82375,52507],{"class":867},[324,82377,52522],{"class":52022},[324,82379,52029],{"class":867},[575,82381,82383],{"id":82382},"_410524-处理数据案例","4.10.5.2.4 处理数据案例",[19,82385,82386],{},[48,82387],{"alt":50,"src":82388},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-271.png",[316,82390,82392],{"className":51355,"code":82391,"language":51357,"meta":50,"style":50},"\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",[269,82393,82394,82404,82418,82422,82430,82444,82464,82476,82484,82491,82503,82515,82527,82539,82549,82559,82563,82571,82579,82583,82591,82603,82611,82633,82638,82643,82676,82684,82692,82696],{"__ignoreMap":50},[324,82395,82396,82398,82400,82402],{"class":326,"line":327},[324,82397,52019],{"class":867},[324,82399,52023],{"class":52022},[324,82401,52026],{"class":734},[324,82403,52029],{"class":867},[324,82405,82406,82408,82410,82412,82414,82416],{"class":326,"line":203},[324,82407,1774],{"class":867},[324,82409,51357],{"class":52022},[324,82411,52038],{"class":734},[324,82413,913],{"class":867},[324,82415,52043],{"class":738},[324,82417,52029],{"class":867},[324,82419,82420],{"class":326,"line":338},[324,82421,488],{"emptyLinePlaceholder":487},[324,82423,82424,82426,82428],{"class":326,"line":344},[324,82425,1774],{"class":867},[324,82427,52056],{"class":52022},[324,82429,52029],{"class":867},[324,82431,82432,82434,82436,82438,82440,82442],{"class":326,"line":484},[324,82433,52866],{"class":867},[324,82435,52066],{"class":52022},[324,82437,52069],{"class":734},[324,82439,913],{"class":867},[324,82441,52074],{"class":738},[324,82443,52029],{"class":867},[324,82445,82446,82448,82450,82452,82454,82456,82458,82460,82462],{"class":326,"line":491},[324,82447,52866],{"class":867},[324,82449,52066],{"class":52022},[324,82451,15649],{"class":734},[324,82453,913],{"class":867},[324,82455,52113],{"class":738},[324,82457,52093],{"class":734},[324,82459,913],{"class":867},[324,82461,52120],{"class":738},[324,82463,52029],{"class":867},[324,82465,82466,82468,82470,82472,82474],{"class":326,"line":496},[324,82467,52866],{"class":867},[324,82469,52129],{"class":52022},[324,82471,52132],{"class":867},[324,82473,52129],{"class":52022},[324,82475,52029],{"class":867},[324,82477,82478,82480,82482],{"class":326,"line":502},[324,82479,52866],{"class":867},[324,82481,775],{"class":52022},[324,82483,52029],{"class":867},[324,82485,82486,82489],{"class":326,"line":508},[324,82487,82488],{"class":52022},"    div",[324,82490,16301],{"class":867},[324,82492,82493,82495,82497,82499,82501],{"class":326,"line":514},[324,82494,55493],{"class":916},[324,82496,52159],{"class":867},[324,82498,2453],{"class":916},[324,82500,52214],{"class":863},[324,82502,2025],{"class":867},[324,82504,82505,82507,82509,82511,82513],{"class":326,"line":2343},[324,82506,55507],{"class":916},[324,82508,52159],{"class":867},[324,82510,1265],{"class":916},[324,82512,52214],{"class":863},[324,82514,2025],{"class":867},[324,82516,82517,82519,82521,82523,82525],{"class":326,"line":2348},[324,82518,58081],{"class":916},[324,82520,52159],{"class":867},[324,82522,1265],{"class":916},[324,82524,52214],{"class":863},[324,82526,2025],{"class":867},[324,82528,82529,82531,82533,82535,82537],{"class":326,"line":2354},[324,82530,65855],{"class":916},[324,82532,52159],{"class":867},[324,82534,1362],{"class":916},[324,82536,52214],{"class":863},[324,82538,2025],{"class":867},[324,82540,82541,82543,82545,82547],{"class":326,"line":2359},[324,82542,58008],{"class":916},[324,82544,52159],{"class":867},[324,82546,52314],{"class":916},[324,82548,2025],{"class":867},[324,82550,82551,82553,82555,82557],{"class":326,"line":2373},[324,82552,55606],{"class":916},[324,82554,52159],{"class":867},[324,82556,52367],{"class":916},[324,82558,2025],{"class":867},[324,82560,82561],{"class":326,"line":2378},[324,82562,2917],{"class":867},[324,82564,82565,82567,82569],{"class":326,"line":2384},[324,82566,53139],{"class":867},[324,82568,775],{"class":52022},[324,82570,52029],{"class":867},[324,82572,82573,82575,82577],{"class":326,"line":2405},[324,82574,52507],{"class":867},[324,82576,52056],{"class":52022},[324,82578,52029],{"class":867},[324,82580,82581],{"class":326,"line":2410},[324,82582,488],{"emptyLinePlaceholder":487},[324,82584,82585,82587,82589],{"class":326,"line":2424},[324,82586,1774],{"class":867},[324,82588,52522],{"class":52022},[324,82590,52029],{"class":867},[324,82592,82593,82595,82597,82599,82601],{"class":326,"line":2429},[324,82594,52866],{"class":867},[324,82596,52333],{"class":52022},[324,82598,56036],{"class":867},[324,82600,52333],{"class":52022},[324,82602,52029],{"class":867},[324,82604,82605,82607,82609],{"class":326,"line":2458},[324,82606,52866],{"class":867},[324,82608,52535],{"class":52022},[324,82610,52029],{"class":867},[324,82612,82613,82615,82618,82620,82623,82626,82628,82631],{"class":326,"line":2463},[324,82614,11950],{"class":863},[324,82616,82617],{"class":916}," spec",[324,82619,14293],{"class":863},[324,82621,82622],{"class":867}," { size: ",[324,82624,82625],{"class":738},"'40cm*40cm'",[324,82627,56186],{"class":867},[324,82629,82630],{"class":738},"'黑色'",[324,82632,56326],{"class":867},[324,82634,82635],{"class":326,"line":2480},[324,82636,82637],{"class":772},"    \u002F\u002F const arr = Object.values(spec)\n",[324,82639,82640],{"class":326,"line":2485},[324,82641,82642],{"class":772},"    \u002F\u002F document.querySelector('div').innerHTML = arr.join('\u002F')\n",[324,82644,82645,82647,82649,82651,82654,82656,82658,82661,82664,82667,82669,82671,82674],{"class":326,"line":2490},[324,82646,53129],{"class":867},[324,82648,55121],{"class":734},[324,82650,868],{"class":867},[324,82652,82653],{"class":738},"'div'",[324,82655,74971],{"class":867},[324,82657,913],{"class":863},[324,82659,82660],{"class":867}," Object.",[324,82662,82663],{"class":734},"values",[324,82665,82666],{"class":867},"(spec).",[324,82668,74945],{"class":734},[324,82670,868],{"class":867},[324,82672,82673],{"class":738},"'\u002F'",[324,82675,874],{"class":867},[324,82677,82678,82680,82682],{"class":326,"line":2495},[324,82679,53139],{"class":867},[324,82681,52535],{"class":52022},[324,82683,52029],{"class":867},[324,82685,82686,82688,82690],{"class":326,"line":2509},[324,82687,52507],{"class":867},[324,82689,52522],{"class":52022},[324,82691,52029],{"class":867},[324,82693,82694],{"class":326,"line":2514},[324,82695,488],{"emptyLinePlaceholder":487},[324,82697,82698,82700,82702],{"class":326,"line":3306},[324,82699,52507],{"class":867},[324,82701,51357],{"class":52022},[324,82703,52029],{"class":867},[19,82705,82706],{},"一定要记住Object是内置构造函数，他的那三个方法都是静态方法",[575,82708,82710],{"id":82709},"_410525-arrayfrom方法","4.10.5.2.5 Array.from()方法",[19,82712,82713],{},"静态方法，将伪数组转换为真数组",[19,82715,82716],{},[48,82717],{"alt":50,"src":82718},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-272.png",[316,82720,82722],{"className":53789,"code":82721,"language":53791,"meta":50,"style":50},"\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",[269,82723,82724,82732,82740,82752,82764,82776,82784,82792,82797,82802,82807,82812,82820],{"__ignoreMap":50},[324,82725,82726,82728,82730],{"class":326,"line":327},[324,82727,1774],{"class":867},[324,82729,52522],{"class":52022},[324,82731,52029],{"class":867},[324,82733,82734,82736,82738],{"class":326,"line":203},[324,82735,52866],{"class":867},[324,82737,1871],{"class":52022},[324,82739,52029],{"class":867},[324,82741,82742,82744,82746,82748,82750],{"class":326,"line":338},[324,82743,52063],{"class":867},[324,82745,195],{"class":52022},[324,82747,56036],{"class":867},[324,82749,195],{"class":52022},[324,82751,52029],{"class":867},[324,82753,82754,82756,82758,82760,82762],{"class":326,"line":344},[324,82755,52063],{"class":867},[324,82757,195],{"class":52022},[324,82759,56036],{"class":867},[324,82761,195],{"class":52022},[324,82763,52029],{"class":867},[324,82765,82766,82768,82770,82772,82774],{"class":326,"line":484},[324,82767,52063],{"class":867},[324,82769,195],{"class":52022},[324,82771,56036],{"class":867},[324,82773,195],{"class":52022},[324,82775,52029],{"class":867},[324,82777,82778,82780,82782],{"class":326,"line":491},[324,82779,53139],{"class":867},[324,82781,1871],{"class":52022},[324,82783,52029],{"class":867},[324,82785,82786,82788,82790],{"class":326,"line":496},[324,82787,52866],{"class":867},[324,82789,52535],{"class":52022},[324,82791,52029],{"class":867},[324,82793,82794],{"class":326,"line":502},[324,82795,82796],{"class":867},"    const lis = document.querySelectorAll('li')\n",[324,82798,82799],{"class":326,"line":508},[324,82800,82801],{"class":867},"    const liss = Array.from(lis)\n",[324,82803,82804],{"class":326,"line":514},[324,82805,82806],{"class":867},"    liss.pop()\n",[324,82808,82809],{"class":326,"line":2343},[324,82810,82811],{"class":867},"    console.log(liss)\n",[324,82813,82814,82816,82818],{"class":326,"line":2348},[324,82815,53139],{"class":867},[324,82817,52535],{"class":52022},[324,82819,52029],{"class":867},[324,82821,82822,82824,82826],{"class":326,"line":2354},[324,82823,52507],{"class":867},[324,82825,52522],{"class":52022},[324,82827,52029],{"class":867},[19,82829,82830],{},[48,82831],{"alt":50,"src":82832},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-273.png",[151,82834,82836],{"id":82835},"_41053-string","4.10.5.3 String",[19,82838,82839],{},[48,82840],{"alt":50,"src":82841},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-274.png",[575,82843,82845],{"id":82844},"_410531-split字符串变数组","4.10.5.3.1 split()字符串变数组",[316,82847,82849],{"className":53789,"code":82848,"language":53791,"meta":50,"style":50},"\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",[269,82850,82851,82859,82867,82872,82877,82882,82886,82891,82896,82901,82909],{"__ignoreMap":50},[324,82852,82853,82855,82857],{"class":326,"line":327},[324,82854,1774],{"class":867},[324,82856,52522],{"class":52022},[324,82858,52029],{"class":867},[324,82860,82861,82863,82865],{"class":326,"line":203},[324,82862,52866],{"class":867},[324,82864,52535],{"class":52022},[324,82866,52029],{"class":867},[324,82868,82869],{"class":326,"line":338},[324,82870,82871],{"class":867},"    \u002F\u002F 把字符串转化为数组\n",[324,82873,82874],{"class":326,"line":344},[324,82875,82876],{"class":867},"    const str = 'pink,red'\n",[324,82878,82879],{"class":326,"line":484},[324,82880,82881],{"class":867},"    const arr = str.split(',')\n",[324,82883,82884],{"class":326,"line":491},[324,82885,81360],{"class":867},[324,82887,82888],{"class":326,"line":496},[324,82889,82890],{"class":867},"    const str1 = '2025-8-25'\n",[324,82892,82893],{"class":326,"line":502},[324,82894,82895],{"class":867},"    const arr1 = str1.split('-')\n",[324,82897,82898],{"class":326,"line":508},[324,82899,82900],{"class":867},"    console.log(arr1)\n",[324,82902,82903,82905,82907],{"class":326,"line":514},[324,82904,53139],{"class":867},[324,82906,52535],{"class":52022},[324,82908,52029],{"class":867},[324,82910,82911,82913,82915],{"class":326,"line":2343},[324,82912,52507],{"class":867},[324,82914,52522],{"class":52022},[324,82916,52029],{"class":867},[575,82918,82920],{"id":82919},"_410532-字符串的截取","4.10.5.3.2 字符串的截取",[19,82922,5910],{},[19,82924,82925],{},"substring(indexStart)",[19,82927,82928],{},"substring(indexStart, indexEnd)",[1871,82930,82931,82942,82954,82964],{},[195,82932,82933,82934,82937,82938,82941],{},"如果省略了 ",[269,82935,82936],{},"indexEnd","，则 ",[269,82939,82940],{},"substring()"," 提取字符直到字符串的末尾",[195,82943,82944,82945,82948,82949,82937,82951,82953],{},"如果 ",[269,82946,82947],{},"indexStart"," 等于 ",[269,82950,82936],{},[269,82952,82940],{}," 返回一个空字符串",[195,82955,82944,82956,82958,82959,82937,82961,82963],{},[269,82957,82947],{}," 大于 ",[269,82960,82936],{},[269,82962,82940],{}," 的效果就像交换了这两个参数一样",[195,82965,82966],{},"结束的索引号不包含想要截取的部分",[316,82968,82970],{"className":82211,"code":82969,"language":82213,"meta":50,"style":50},"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",[269,82971,82972,82984,82988,83022,83052,83056,83087,83091,83118,83148,83178,83182,83213],{"__ignoreMap":50},[324,82973,82974,82977,82979,82982],{"class":326,"line":327},[324,82975,82976],{"class":867},"const anyString ",[324,82978,913],{"class":863},[324,82980,82981],{"class":738}," \"Mozilla\"",[324,82983,2025],{"class":867},[324,82985,82986],{"class":326,"line":203},[324,82987,488],{"emptyLinePlaceholder":487},[324,82989,82990,82993,82995,82997,82999,83002,83004,83007,83009,83011,83013,83015,83017,83019],{"class":326,"line":338},[324,82991,82992],{"class":916},"console",[324,82994,1422],{"class":867},[324,82996,58969],{"class":916},[324,82998,868],{"class":867},[324,83000,83001],{"class":916},"anyString",[324,83003,1422],{"class":867},[324,83005,83006],{"class":916},"substring",[324,83008,868],{"class":867},[324,83010,1056],{"class":916},[324,83012,13164],{"class":867},[324,83014,1082],{"class":916},[324,83016,75975],{"class":867},[324,83018,34051],{"class":863},[324,83020,83021],{"class":738}," 'M'\n",[324,83023,83024,83026,83028,83030,83032,83034,83036,83038,83040,83042,83044,83046,83048,83050],{"class":326,"line":344},[324,83025,82992],{"class":916},[324,83027,1422],{"class":867},[324,83029,58969],{"class":916},[324,83031,868],{"class":867},[324,83033,83001],{"class":916},[324,83035,1422],{"class":867},[324,83037,83006],{"class":916},[324,83039,868],{"class":867},[324,83041,1082],{"class":916},[324,83043,13164],{"class":867},[324,83045,1056],{"class":916},[324,83047,75975],{"class":867},[324,83049,34051],{"class":863},[324,83051,83021],{"class":738},[324,83053,83054],{"class":326,"line":484},[324,83055,488],{"emptyLinePlaceholder":487},[324,83057,83058,83060,83062,83064,83066,83068,83070,83072,83074,83076,83078,83080,83082,83084],{"class":326,"line":491},[324,83059,82992],{"class":916},[324,83061,1422],{"class":867},[324,83063,58969],{"class":916},[324,83065,868],{"class":867},[324,83067,83001],{"class":916},[324,83069,1422],{"class":867},[324,83071,83006],{"class":916},[324,83073,868],{"class":867},[324,83075,1056],{"class":916},[324,83077,13164],{"class":867},[324,83079,1208],{"class":916},[324,83081,75975],{"class":867},[324,83083,34051],{"class":863},[324,83085,83086],{"class":738}," 'Mozill'\n",[324,83088,83089],{"class":326,"line":496},[324,83090,488],{"emptyLinePlaceholder":487},[324,83092,83093,83095,83097,83099,83101,83103,83105,83107,83109,83111,83113,83115],{"class":326,"line":502},[324,83094,82992],{"class":916},[324,83096,1422],{"class":867},[324,83098,58969],{"class":916},[324,83100,868],{"class":867},[324,83102,83001],{"class":916},[324,83104,1422],{"class":867},[324,83106,83006],{"class":916},[324,83108,868],{"class":867},[324,83110,1157],{"class":916},[324,83112,75975],{"class":867},[324,83114,34051],{"class":863},[324,83116,83117],{"class":738}," 'lla'\n",[324,83119,83120,83122,83124,83126,83128,83130,83132,83134,83136,83138,83140,83142,83144,83146],{"class":326,"line":508},[324,83121,82992],{"class":916},[324,83123,1422],{"class":867},[324,83125,58969],{"class":916},[324,83127,868],{"class":867},[324,83129,83001],{"class":916},[324,83131,1422],{"class":867},[324,83133,83006],{"class":916},[324,83135,868],{"class":867},[324,83137,1157],{"class":916},[324,83139,13164],{"class":867},[324,83141,1233],{"class":916},[324,83143,76031],{"class":867},[324,83145,34051],{"class":863},[324,83147,83117],{"class":738},[324,83149,83150,83152,83154,83156,83158,83160,83162,83164,83166,83168,83170,83172,83174,83176],{"class":326,"line":514},[324,83151,82992],{"class":916},[324,83153,1422],{"class":867},[324,83155,58969],{"class":916},[324,83157,868],{"class":867},[324,83159,83001],{"class":916},[324,83161,1422],{"class":867},[324,83163,83006],{"class":916},[324,83165,868],{"class":867},[324,83167,1233],{"class":916},[324,83169,13164],{"class":867},[324,83171,1157],{"class":916},[324,83173,75975],{"class":867},[324,83175,34051],{"class":863},[324,83177,83117],{"class":738},[324,83179,83180],{"class":326,"line":2343},[324,83181,488],{"emptyLinePlaceholder":487},[324,83183,83184,83186,83188,83190,83192,83194,83196,83198,83200,83202,83204,83206,83208,83210],{"class":326,"line":2348},[324,83185,82992],{"class":916},[324,83187,1422],{"class":867},[324,83189,58969],{"class":916},[324,83191,868],{"class":867},[324,83193,83001],{"class":916},[324,83195,1422],{"class":867},[324,83197,83006],{"class":916},[324,83199,868],{"class":867},[324,83201,1056],{"class":916},[324,83203,13164],{"class":867},[324,83205,1233],{"class":916},[324,83207,75975],{"class":867},[324,83209,34051],{"class":863},[324,83211,83212],{"class":738}," 'Mozilla'\n",[324,83214,83215,83217,83219,83221,83223,83225,83227,83229,83231,83233,83235,83237,83239,83241],{"class":326,"line":2354},[324,83216,82992],{"class":916},[324,83218,1422],{"class":867},[324,83220,58969],{"class":916},[324,83222,868],{"class":867},[324,83224,83001],{"class":916},[324,83226,1422],{"class":867},[324,83228,83006],{"class":916},[324,83230,868],{"class":867},[324,83232,1056],{"class":916},[324,83234,13164],{"class":867},[324,83236,1310],{"class":916},[324,83238,75975],{"class":867},[324,83240,34051],{"class":863},[324,83242,83212],{"class":738},[575,83244,83246],{"id":83245},"_410533-startswith","4.10.5.3.3 startsWith",[19,83248,83249,83252,83253,83258,83259,83261,83262],{},[269,83250,83251],{},"[String](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString)"," 的 ",[116,83254,83255],{},[269,83256,83257],{},"startsWith()"," 方法用来判断当前字符串是否以另外一个给定的子字符串开头，并根据判断结果返回 ",[269,83260,2094],{}," 或 ",[269,83263,66742],{},[316,83265,83267],{"className":78217,"code":83266,"language":78219,"meta":50,"style":50},"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",[269,83268,83269,83281,83300,83305,83325],{"__ignoreMap":50},[324,83270,83271,83273,83276,83278],{"class":326,"line":327},[324,83272,7521],{"class":863},[324,83274,83275],{"class":867}," str1 ",[324,83277,913],{"class":863},[324,83279,83280],{"class":738}," \"Saturday night plans\"\n",[324,83282,83283,83285,83287,83290,83293,83295,83298],{"class":326,"line":203},[324,83284,78254],{"class":867},[324,83286,58969],{"class":734},[324,83288,83289],{"class":867},"(str1.",[324,83291,83292],{"class":734},"startsWith",[324,83294,868],{"class":867},[324,83296,83297],{"class":738},"\"Sat\"",[324,83299,31219],{"class":867},[324,83301,83302],{"class":326,"line":338},[324,83303,83304],{"class":772},"\u002F\u002F Expected output: true\n",[324,83306,83307,83309,83311,83313,83315,83317,83319,83321,83323],{"class":326,"line":344},[324,83308,78254],{"class":867},[324,83310,58969],{"class":734},[324,83312,83289],{"class":867},[324,83314,83292],{"class":734},[324,83316,868],{"class":867},[324,83318,83297],{"class":738},[324,83320,13164],{"class":867},[324,83322,938],{"class":916},[324,83324,31219],{"class":867},[324,83326,83327],{"class":326,"line":484},[324,83328,83329],{"class":772},"\u002F\u002F Expected output: false\n",[316,83331,83333],{"className":51355,"code":83332,"language":51357,"meta":50,"style":50},"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",[269,83334,83335,83340,83345,83349,83354,83359],{"__ignoreMap":50},[324,83336,83337],{"class":326,"line":327},[324,83338,83339],{"class":867},"startsWith(searchString)\n",[324,83341,83342],{"class":326,"line":203},[324,83343,83344],{"class":867},"startsWith(searchString, position)       position指的是第一个字符的索引，默认为0\n",[324,83346,83347],{"class":326,"line":338},[324,83348,488],{"emptyLinePlaceholder":487},[324,83350,83351],{"class":326,"line":344},[324,83352,83353],{"class":867},"const str3 = 'pink老师上课中'\n",[324,83355,83356],{"class":326,"line":484},[324,83357,83358],{"class":867},"console.log(str3.startsWith('pink'))   \u002F\u002Ftrue\n",[324,83360,83361],{"class":326,"line":491},[324,83362,83363],{"class":867},"console.log(str3.startsWith('p'))   \u002F\u002Ftrue\n",[575,83365,83367],{"id":83366},"_410534-includes","4.10.5.3.4 includes",[19,83369,83370],{},"includes(searchString) includes(searchString, position)",[192,83372,83373],{},[195,83374,83375],{},"searchString:",[19,83377,83378,83379,83381,83382,83387,83388,83393,83394,22229,83397,83400,83401,83404],{},"一个要在 ",[269,83380,2034],{}," 中查找的字符串。",[25,83383,83386],{"href":83384,"rel":83385},"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",[29],"不能是正则表达式","。所有非正则表达式的值都会被",[25,83389,83392],{"href":83390,"rel":83391},"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",[29],"强制转换为字符串","，因此如果该参数被省略或传入 ",[269,83395,83396],{},"undefined",[269,83398,83399],{},"includes()"," 方法会在字符串中搜索 ",[269,83402,83403],{},"\"undefined\"","，这通常不是你想要的",[192,83406,83407],{"start":203},[195,83408,83409,1723],{},[269,83410,83411],{},"[position 可选](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString\u002Fincludes#position)",[19,83413,83414,83415,83418,83419],{},"在字符串中开始搜索 ",[269,83416,83417],{},"searchString"," 的位置。默认值为 ",[269,83420,1056],{},[192,83422,83423],{"start":338},[195,83424,83425],{},"返回值：",[19,83427,83428,83429,83431,83432,83436,83437],{},"如果在给定的字符串中找到了要搜索的字符串（包括 ",[269,83430,83417],{}," 为空字符串的情况），则返回 ",[116,83433,83434],{},[269,83435,2094],{}," ，否则返回 ",[116,83438,83439],{},[269,83440,66742],{},[192,83442,83443],{"start":344},[195,83444,83445],{},"异常：",[19,83447,82944,83448,14524,83450,83454],{},[269,83449,83417],{},[25,83451,83453],{"href":83384,"rel":83452},[29],"是一个正则表达式","，则会抛出",[19,83456,83457],{},"只要是有就是true，不需要非得以谁开头结尾",[316,83459,83461],{"className":78217,"code":83460,"language":78219,"meta":50,"style":50},"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",[269,83462,83463,83474,83497,83516,83536,83558,83577],{"__ignoreMap":50},[324,83464,83465,83467,83469,83471],{"class":326,"line":327},[324,83466,7521],{"class":863},[324,83468,80497],{"class":867},[324,83470,913],{"class":863},[324,83472,83473],{"class":738}," \"To be, or not to be, that is the question.\"\n",[324,83475,83476,83478,83480,83483,83486,83488,83491,83494],{"class":326,"line":203},[324,83477,78254],{"class":867},[324,83479,58969],{"class":734},[324,83481,83482],{"class":867},"(str.",[324,83484,83485],{"class":734},"includes",[324,83487,868],{"class":867},[324,83489,83490],{"class":738},"\"To be\"",[324,83492,83493],{"class":867},"))",[324,83495,83496],{"class":772},"  \u002F\u002F true\n",[324,83498,83499,83501,83503,83505,83507,83509,83512,83514],{"class":326,"line":338},[324,83500,78254],{"class":867},[324,83502,58969],{"class":734},[324,83504,83482],{"class":867},[324,83506,83485],{"class":734},[324,83508,868],{"class":867},[324,83510,83511],{"class":738},"\"question\"",[324,83513,83493],{"class":867},[324,83515,83496],{"class":772},[324,83517,83518,83520,83522,83524,83526,83528,83531,83533],{"class":326,"line":344},[324,83519,78254],{"class":867},[324,83521,58969],{"class":734},[324,83523,83482],{"class":867},[324,83525,83485],{"class":734},[324,83527,868],{"class":867},[324,83529,83530],{"class":738},"\"nonexistent\"",[324,83532,83493],{"class":867},[324,83534,83535],{"class":772},"  \u002F\u002F false\n",[324,83537,83538,83540,83542,83544,83546,83548,83550,83552,83554,83556],{"class":326,"line":484},[324,83539,78254],{"class":867},[324,83541,58969],{"class":734},[324,83543,83482],{"class":867},[324,83545,83485],{"class":734},[324,83547,868],{"class":867},[324,83549,83490],{"class":738},[324,83551,13164],{"class":867},[324,83553,1082],{"class":916},[324,83555,83493],{"class":867},[324,83557,83535],{"class":772},[324,83559,83560,83562,83564,83566,83568,83570,83573,83575],{"class":326,"line":491},[324,83561,78254],{"class":867},[324,83563,58969],{"class":734},[324,83565,83482],{"class":867},[324,83567,83485],{"class":734},[324,83569,868],{"class":867},[324,83571,83572],{"class":738},"\"TO BE\"",[324,83574,83493],{"class":867},[324,83576,83535],{"class":772},[324,83578,83579,83581,83583,83585,83587,83589,83591,83593],{"class":326,"line":496},[324,83580,78254],{"class":867},[324,83582,58969],{"class":734},[324,83584,83482],{"class":867},[324,83586,83485],{"class":734},[324,83588,868],{"class":867},[324,83590,8381],{"class":738},[324,83592,83493],{"class":867},[324,83594,83496],{"class":772},[575,83596,83598],{"id":83597},"_410535-转换为字符串","4.10.5.3.5 转换为字符串",[316,83600,83602],{"className":53789,"code":83601,"language":53791,"meta":50,"style":50},"\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",[269,83603,83604,83612,83620,83625,83630,83635,83640,83645,83653],{"__ignoreMap":50},[324,83605,83606,83608,83610],{"class":326,"line":327},[324,83607,1774],{"class":867},[324,83609,52522],{"class":52022},[324,83611,52029],{"class":867},[324,83613,83614,83616,83618],{"class":326,"line":203},[324,83615,52866],{"class":867},[324,83617,52535],{"class":52022},[324,83619,52029],{"class":867},[324,83621,83622],{"class":326,"line":338},[324,83623,83624],{"class":867},"    const num = 10\n",[324,83626,83627],{"class":326,"line":344},[324,83628,83629],{"class":867},"    \u002F\u002F 强制转换\n",[324,83631,83632],{"class":326,"line":484},[324,83633,83634],{"class":867},"    console.log(String(num))\n",[324,83636,83637],{"class":326,"line":491},[324,83638,83639],{"class":867},"    \u002F\u002F toString()方法转换\n",[324,83641,83642],{"class":326,"line":496},[324,83643,83644],{"class":867},"    console.log(num.toString())\n",[324,83646,83647,83649,83651],{"class":326,"line":502},[324,83648,53139],{"class":867},[324,83650,52535],{"class":52022},[324,83652,52029],{"class":867},[324,83654,83655,83657,83659],{"class":326,"line":508},[324,83656,52507],{"class":867},[324,83658,52522],{"class":52022},[324,83660,52029],{"class":867},[575,83662,83664],{"id":83663},"_410536-显示赠品练习","4.10.5.3.6 显示赠品练习",[19,83666,83667],{},[48,83668],{"alt":50,"src":83669},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-275.png",[316,83671,83673],{"className":51355,"code":83672,"language":51357,"meta":50,"style":50},"\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",[269,83674,83675,83685,83699,83703,83711,83725,83745,83757,83765,83769,83777,83789,83797,83809,83814,83819,83824,83871,83887,83895,83903,83907],{"__ignoreMap":50},[324,83676,83677,83679,83681,83683],{"class":326,"line":327},[324,83678,52019],{"class":867},[324,83680,52023],{"class":52022},[324,83682,52026],{"class":734},[324,83684,52029],{"class":867},[324,83686,83687,83689,83691,83693,83695,83697],{"class":326,"line":203},[324,83688,1774],{"class":867},[324,83690,51357],{"class":52022},[324,83692,52038],{"class":734},[324,83694,913],{"class":867},[324,83696,52043],{"class":738},[324,83698,52029],{"class":867},[324,83700,83701],{"class":326,"line":338},[324,83702,488],{"emptyLinePlaceholder":487},[324,83704,83705,83707,83709],{"class":326,"line":344},[324,83706,1774],{"class":867},[324,83708,52056],{"class":52022},[324,83710,52029],{"class":867},[324,83712,83713,83715,83717,83719,83721,83723],{"class":326,"line":484},[324,83714,52866],{"class":867},[324,83716,52066],{"class":52022},[324,83718,52069],{"class":734},[324,83720,913],{"class":867},[324,83722,52074],{"class":738},[324,83724,52029],{"class":867},[324,83726,83727,83729,83731,83733,83735,83737,83739,83741,83743],{"class":326,"line":491},[324,83728,52866],{"class":867},[324,83730,52066],{"class":52022},[324,83732,15649],{"class":734},[324,83734,913],{"class":867},[324,83736,52113],{"class":738},[324,83738,52093],{"class":734},[324,83740,913],{"class":867},[324,83742,52120],{"class":738},[324,83744,52029],{"class":867},[324,83746,83747,83749,83751,83753,83755],{"class":326,"line":496},[324,83748,52866],{"class":867},[324,83750,52129],{"class":52022},[324,83752,52132],{"class":867},[324,83754,52129],{"class":52022},[324,83756,52029],{"class":867},[324,83758,83759,83761,83763],{"class":326,"line":502},[324,83760,52507],{"class":867},[324,83762,52056],{"class":52022},[324,83764,52029],{"class":867},[324,83766,83767],{"class":326,"line":508},[324,83768,488],{"emptyLinePlaceholder":487},[324,83770,83771,83773,83775],{"class":326,"line":514},[324,83772,1774],{"class":867},[324,83774,52522],{"class":52022},[324,83776,52029],{"class":867},[324,83778,83779,83781,83783,83785,83787],{"class":326,"line":2343},[324,83780,52866],{"class":867},[324,83782,52333],{"class":52022},[324,83784,56036],{"class":867},[324,83786,52333],{"class":52022},[324,83788,52029],{"class":867},[324,83790,83791,83793,83795],{"class":326,"line":2348},[324,83792,52866],{"class":867},[324,83794,52535],{"class":52022},[324,83796,52029],{"class":867},[324,83798,83799,83801,83804,83806],{"class":326,"line":2354},[324,83800,11950],{"class":863},[324,83802,83803],{"class":916}," gift",[324,83805,14293],{"class":863},[324,83807,83808],{"class":738}," '50g的茶叶，清洗球'\n",[324,83810,83811],{"class":326,"line":2359},[324,83812,83813],{"class":772},"    \u002F\u002F 1.把字符串拆分为数组\n",[324,83815,83816],{"class":326,"line":2373},[324,83817,83818],{"class":772},"    \u002F\u002F console.log(gift.split(','))\n",[324,83820,83821],{"class":326,"line":2378},[324,83822,83823],{"class":772},"    \u002F\u002F 2.根据数组元素的个数生成对应的标签\n",[324,83825,83826,83828,83830,83832,83835,83838,83840,83843,83845,83847,83849,83851,83853,83856,83858,83861,83863,83865,83867,83869],{"class":326,"line":2384},[324,83827,11950],{"class":863},[324,83829,74641],{"class":916},[324,83831,14293],{"class":863},[324,83833,83834],{"class":867}," gift.",[324,83836,83837],{"class":734},"split",[324,83839,868],{"class":867},[324,83841,83842],{"class":738},"'，'",[324,83844,31548],{"class":867},[324,83846,74766],{"class":734},[324,83848,868],{"class":867},[324,83850,80517],{"class":5945},[324,83852,80520],{"class":863},[324,83854,83855],{"class":738}," `\u003Cspan>【赠品】${",[324,83857,80517],{"class":867},[324,83859,83860],{"class":738},"}\u003C\u002Fspan>\u003Cbr>`",[324,83862,31548],{"class":867},[324,83864,74945],{"class":734},[324,83866,868],{"class":867},[324,83868,74950],{"class":738},[324,83870,874],{"class":867},[324,83872,83873,83875,83877,83879,83881,83883,83885],{"class":326,"line":2405},[324,83874,53129],{"class":867},[324,83876,55121],{"class":734},[324,83878,868],{"class":867},[324,83880,82653],{"class":738},[324,83882,74971],{"class":867},[324,83884,913],{"class":863},[324,83886,74707],{"class":867},[324,83888,83889,83891,83893],{"class":326,"line":2410},[324,83890,53139],{"class":867},[324,83892,52535],{"class":52022},[324,83894,52029],{"class":867},[324,83896,83897,83899,83901],{"class":326,"line":2424},[324,83898,52507],{"class":867},[324,83900,52522],{"class":52022},[324,83902,52029],{"class":867},[324,83904,83905],{"class":326,"line":2429},[324,83906,488],{"emptyLinePlaceholder":487},[324,83908,83909,83911,83913],{"class":326,"line":2458},[324,83910,52507],{"class":867},[324,83912,51357],{"class":52022},[324,83914,52029],{"class":867},[151,83916,83918],{"id":83917},"_41054-number","4.10.5.4 Number",[19,83920,83921],{},[48,83922],{"alt":50,"src":83923},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-276.png",[19,83925,83926],{},"整数也可以进行toFixed来保留小数",[19,83928,83929],{},"比如：",[19,83931,83932],{},"const price=10",[19,83934,83935],{},"console.log(price.tofixed(2)) \u002F\u002F输出：10.00",[151,83937,83939],{"id":83938},"_41055-购物车展示","4.10.5.5 购物车展示",[19,83941,83942],{},[48,83943],{"alt":50,"src":83944},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-277.png",[316,83946,83948],{"className":51355,"code":83947,"language":51357,"meta":50,"style":50},"\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",[269,83949,83950,83960,83974,83978,83986,84000,84020,84032,84040,84046,84056,84066,84076,84080,84084,84090,84102,84116,84120,84124,84130,84142,84158,84168,84184,84188,84192,84198,84208,84218,84222,84226,84234,84246,84258,84270,84274,84278,84286,84298,84302,84306,84317,84327,84339,84351,84361,84365,84369,84377,84386,84398,84408,84418,84422,84426,84434,84443,84450,84460,84472,84476,84480,84489,84499,84510,84522,84534,84538,84542,84551,84561,84572,84576,84580,84586,84598,84610,84620,84630,84648,84660,84664,84668,84677,84689,84699,84709,84721,84725,84733,84741,84745,84753,84767,84775,84789,84817,84825,84833,84843,84847,84855,84863,84872,84880,84889,84899,84903,84907,84915,84923,84932,84940,84948,84961,84965,84969,84977,84985,84994,85002,85010,85025,85029,85033,85041,85049,85058,85066,85074,85088,85096,85100,85104,85109,85135,85140,85177,85182,85205,85210,85264,85269,85305,85309,85315,85320,85329,85343,85352,85371,85380,85390,85395,85400,85413,85418,85472,85498,85506,85514,85518],{"__ignoreMap":50},[324,83951,83952,83954,83956,83958],{"class":326,"line":327},[324,83953,52019],{"class":867},[324,83955,52023],{"class":52022},[324,83957,52026],{"class":734},[324,83959,52029],{"class":867},[324,83961,83962,83964,83966,83968,83970,83972],{"class":326,"line":203},[324,83963,1774],{"class":867},[324,83965,51357],{"class":52022},[324,83967,52038],{"class":734},[324,83969,913],{"class":867},[324,83971,52043],{"class":738},[324,83973,52029],{"class":867},[324,83975,83976],{"class":326,"line":338},[324,83977,488],{"emptyLinePlaceholder":487},[324,83979,83980,83982,83984],{"class":326,"line":344},[324,83981,1774],{"class":867},[324,83983,52056],{"class":52022},[324,83985,52029],{"class":867},[324,83987,83988,83990,83992,83994,83996,83998],{"class":326,"line":484},[324,83989,52866],{"class":867},[324,83991,52066],{"class":52022},[324,83993,52069],{"class":734},[324,83995,913],{"class":867},[324,83997,52074],{"class":738},[324,83999,52029],{"class":867},[324,84001,84002,84004,84006,84008,84010,84012,84014,84016,84018],{"class":326,"line":491},[324,84003,52866],{"class":867},[324,84005,52066],{"class":52022},[324,84007,15649],{"class":734},[324,84009,913],{"class":867},[324,84011,52113],{"class":738},[324,84013,52093],{"class":734},[324,84015,913],{"class":867},[324,84017,52120],{"class":738},[324,84019,52029],{"class":867},[324,84021,84022,84024,84026,84028,84030],{"class":326,"line":496},[324,84023,52866],{"class":867},[324,84025,52129],{"class":52022},[324,84027,52132],{"class":867},[324,84029,52129],{"class":52022},[324,84031,52029],{"class":867},[324,84033,84034,84036,84038],{"class":326,"line":502},[324,84035,52866],{"class":867},[324,84037,775],{"class":52022},[324,84039,52029],{"class":867},[324,84041,84042,84044],{"class":326,"line":508},[324,84043,7132],{"class":52022},[324,84045,16301],{"class":867},[324,84047,84048,84050,84052,84054],{"class":326,"line":514},[324,84049,55417],{"class":916},[324,84051,52159],{"class":867},[324,84053,1056],{"class":916},[324,84055,2025],{"class":867},[324,84057,84058,84060,84062,84064],{"class":326,"line":2343},[324,84059,55428],{"class":916},[324,84061,52159],{"class":867},[324,84063,1056],{"class":916},[324,84065,2025],{"class":867},[324,84067,84068,84070,84072,84074],{"class":326,"line":2348},[324,84069,73318],{"class":916},[324,84071,52159],{"class":867},[324,84073,61227],{"class":916},[324,84075,2025],{"class":867},[324,84077,84078],{"class":326,"line":2354},[324,84079,2917],{"class":867},[324,84081,84082],{"class":326,"line":2359},[324,84083,488],{"emptyLinePlaceholder":487},[324,84085,84086,84088],{"class":326,"line":2373},[324,84087,62845],{"class":734},[324,84089,16301],{"class":867},[324,84091,84092,84094,84096,84098,84100],{"class":326,"line":2378},[324,84093,55493],{"class":916},[324,84095,52159],{"class":867},[324,84097,79296],{"class":916},[324,84099,52214],{"class":863},[324,84101,2025],{"class":867},[324,84103,84104,84106,84108,84110,84112,84114],{"class":326,"line":2384},[324,84105,55428],{"class":916},[324,84107,52159],{"class":867},[324,84109,1175],{"class":916},[324,84111,52214],{"class":863},[324,84113,52278],{"class":916},[324,84115,2025],{"class":867},[324,84117,84118],{"class":326,"line":2405},[324,84119,2917],{"class":867},[324,84121,84122],{"class":326,"line":2410},[324,84123,488],{"emptyLinePlaceholder":487},[324,84125,84126,84128],{"class":326,"line":2424},[324,84127,79347],{"class":734},[324,84129,16301],{"class":867},[324,84131,84132,84134,84136,84138,84140],{"class":326,"line":2429},[324,84133,55417],{"class":916},[324,84135,52159],{"class":867},[324,84137,1439],{"class":916},[324,84139,52214],{"class":863},[324,84141,2025],{"class":867},[324,84143,84144,84146,84148,84150,84152,84154,84156],{"class":326,"line":2458},[324,84145,62582],{"class":916},[324,84147,52159],{"class":867},[324,84149,28843],{"class":916},[324,84151,79402],{"class":916},[324,84153,79405],{"class":916},[324,84155,1559],{"class":863},[324,84157,2025],{"class":867},[324,84159,84160,84162,84164,84166],{"class":326,"line":2463},[324,84161,55731],{"class":916},[324,84163,52159],{"class":867},[324,84165,52199],{"class":916},[324,84167,2025],{"class":867},[324,84169,84170,84172,84174,84176,84178,84180,84182],{"class":326,"line":2480},[324,84171,62699],{"class":916},[324,84173,52159],{"class":867},[324,84175,1082],{"class":916},[324,84177,52214],{"class":863},[324,84179,52243],{"class":916},[324,84181,62966],{"class":916},[324,84183,2025],{"class":867},[324,84185,84186],{"class":326,"line":2485},[324,84187,2917],{"class":867},[324,84189,84190],{"class":326,"line":2490},[324,84191,488],{"emptyLinePlaceholder":487},[324,84193,84194,84196],{"class":326,"line":2495},[324,84195,79465],{"class":734},[324,84197,16301],{"class":867},[324,84199,84200,84202,84204,84206],{"class":326,"line":2509},[324,84201,62747],{"class":916},[324,84203,52159],{"class":867},[324,84205,62752],{"class":916},[324,84207,2025],{"class":867},[324,84209,84210,84212,84214,84216],{"class":326,"line":2514},[324,84211,55606],{"class":916},[324,84213,52159],{"class":867},[324,84215,62540],{"class":916},[324,84217,2025],{"class":867},[324,84219,84220],{"class":326,"line":3306},[324,84221,2917],{"class":867},[324,84223,84224],{"class":326,"line":3320},[324,84225,488],{"emptyLinePlaceholder":487},[324,84227,84228,84230,84232],{"class":326,"line":3328},[324,84229,79347],{"class":734},[324,84231,56337],{"class":52022},[324,84233,16301],{"class":867},[324,84235,84236,84238,84240,84242,84244],{"class":326,"line":3333},[324,84237,55493],{"class":916},[324,84239,52159],{"class":867},[324,84241,1476],{"class":916},[324,84243,52214],{"class":863},[324,84245,2025],{"class":867},[324,84247,84248,84250,84252,84254,84256],{"class":326,"line":3339},[324,84249,55507],{"class":916},[324,84251,52159],{"class":867},[324,84253,1476],{"class":916},[324,84255,52214],{"class":863},[324,84257,2025],{"class":867},[324,84259,84260,84262,84264,84266,84268],{"class":326,"line":3345},[324,84261,62472],{"class":916},[324,84263,52159],{"class":867},[324,84265,1183],{"class":916},[324,84267,52214],{"class":863},[324,84269,2025],{"class":867},[324,84271,84272],{"class":326,"line":3350},[324,84273,2917],{"class":867},[324,84275,84276],{"class":326,"line":8677},[324,84277,488],{"emptyLinePlaceholder":487},[324,84279,84280,84282,84284],{"class":326,"line":8701},[324,84281,79347],{"class":734},[324,84283,63026],{"class":734},[324,84285,16301],{"class":867},[324,84287,84288,84290,84292,84294,84296],{"class":326,"line":8706},[324,84289,55493],{"class":916},[324,84291,52159],{"class":867},[324,84293,2453],{"class":916},[324,84295,52214],{"class":863},[324,84297,2025],{"class":867},[324,84299,84300],{"class":326,"line":8712},[324,84301,2917],{"class":867},[324,84303,84304],{"class":326,"line":8739},[324,84305,488],{"emptyLinePlaceholder":487},[324,84307,84308,84310,84312,84315],{"class":326,"line":8744},[324,84309,79347],{"class":734},[324,84311,63026],{"class":734},[324,84313,84314],{"class":734}," .tag",[324,84316,16301],{"class":867},[324,84318,84319,84321,84323,84325],{"class":326,"line":8750},[324,84320,55731],{"class":916},[324,84322,52159],{"class":867},[324,84324,61591],{"class":916},[324,84326,2025],{"class":867},[324,84328,84329,84331,84333,84335,84337],{"class":326,"line":8762},[324,84330,55417],{"class":916},[324,84332,52159],{"class":867},[324,84334,944],{"class":916},[324,84336,52214],{"class":863},[324,84338,2025],{"class":867},[324,84340,84341,84343,84345,84347,84349],{"class":326,"line":8774},[324,84342,55644],{"class":916},[324,84344,52159],{"class":867},[324,84346,1362],{"class":916},[324,84348,52214],{"class":863},[324,84350,2025],{"class":867},[324,84352,84353,84355,84357,84359],{"class":326,"line":8786},[324,84354,58138],{"class":916},[324,84356,52159],{"class":867},[324,84358,62792],{"class":916},[324,84360,2025],{"class":867},[324,84362,84363],{"class":326,"line":10445},[324,84364,2917],{"class":867},[324,84366,84367],{"class":326,"line":10470},[324,84368,488],{"emptyLinePlaceholder":487},[324,84370,84371,84373,84375],{"class":326,"line":10493},[324,84372,79347],{"class":734},[324,84374,79639],{"class":734},[324,84376,32188],{"class":867},[324,84378,84379,84381,84384],{"class":326,"line":10517},[324,84380,79347],{"class":734},[324,84382,84383],{"class":734}," .sub-total",[324,84385,16301],{"class":867},[324,84387,84388,84390,84392,84394,84396],{"class":326,"line":10522},[324,84389,55644],{"class":916},[324,84391,52159],{"class":867},[324,84393,1514],{"class":916},[324,84395,52214],{"class":863},[324,84397,2025],{"class":867},[324,84399,84400,84402,84404,84406],{"class":326,"line":10527},[324,84401,58138],{"class":916},[324,84403,52159],{"class":867},[324,84405,79662],{"class":916},[324,84407,2025],{"class":867},[324,84409,84410,84412,84414,84416],{"class":326,"line":10532},[324,84411,62559],{"class":916},[324,84413,52159],{"class":867},[324,84415,1082],{"class":916},[324,84417,2025],{"class":867},[324,84419,84420],{"class":326,"line":10541},[324,84421,2917],{"class":867},[324,84423,84424],{"class":326,"line":10546},[324,84425,488],{"emptyLinePlaceholder":487},[324,84427,84428,84430,84432],{"class":326,"line":10552},[324,84429,79347],{"class":734},[324,84431,79679],{"class":734},[324,84433,32188],{"class":867},[324,84435,84436,84438,84441],{"class":326,"line":10573},[324,84437,79347],{"class":734},[324,84439,84440],{"class":734}," .sub-total::before",[324,84442,32188],{"class":867},[324,84444,84445,84448],{"class":326,"line":10579},[324,84446,84447],{"class":734},"    .amount::before",[324,84449,16301],{"class":867},[324,84451,84452,84454,84456,84458],{"class":326,"line":10593},[324,84453,79686],{"class":916},[324,84455,52159],{"class":867},[324,84457,79691],{"class":738},[324,84459,2025],{"class":867},[324,84461,84462,84464,84466,84468,84470],{"class":326,"line":10599},[324,84463,55644],{"class":916},[324,84465,52159],{"class":867},[324,84467,1362],{"class":916},[324,84469,52214],{"class":863},[324,84471,2025],{"class":867},[324,84473,84474],{"class":326,"line":10626},[324,84475,2917],{"class":867},[324,84477,84478],{"class":326,"line":10635},[324,84479,488],{"emptyLinePlaceholder":487},[324,84481,84482,84484,84487],{"class":326,"line":10641},[324,84483,79347],{"class":734},[324,84485,84486],{"class":734}," .spec",[324,84488,16301],{"class":867},[324,84490,84491,84493,84495,84497],{"class":326,"line":10649},[324,84492,62559],{"class":916},[324,84494,52159],{"class":867},[324,84496,944],{"class":916},[324,84498,2025],{"class":867},[324,84500,84501,84503,84505,84508],{"class":326,"line":10654},[324,84502,58138],{"class":916},[324,84504,52159],{"class":867},[324,84506,84507],{"class":916},"#888",[324,84509,2025],{"class":867},[324,84511,84512,84514,84516,84518,84520],{"class":326,"line":17333},[324,84513,55644],{"class":916},[324,84515,52159],{"class":867},[324,84517,1413],{"class":916},[324,84519,52214],{"class":863},[324,84521,2025],{"class":867},[324,84523,84524,84526,84528,84530,84532],{"class":326,"line":17339},[324,84525,62722],{"class":916},[324,84527,52159],{"class":867},[324,84529,1564],{"class":916},[324,84531,52214],{"class":863},[324,84533,2025],{"class":867},[324,84535,84536],{"class":326,"line":17362},[324,84537,2917],{"class":867},[324,84539,84540],{"class":326,"line":17368},[324,84541,488],{"emptyLinePlaceholder":487},[324,84543,84544,84546,84549],{"class":326,"line":17391},[324,84545,79347],{"class":734},[324,84547,84548],{"class":734}," .count",[324,84550,16301],{"class":867},[324,84552,84553,84555,84557,84559],{"class":326,"line":17405},[324,84554,62559],{"class":916},[324,84556,52159],{"class":867},[324,84558,1082],{"class":916},[324,84560,2025],{"class":867},[324,84562,84563,84565,84567,84570],{"class":326,"line":17425},[324,84564,58138],{"class":916},[324,84566,52159],{"class":867},[324,84568,84569],{"class":916},"#aaa",[324,84571,2025],{"class":867},[324,84573,84574],{"class":326,"line":17431},[324,84575,2917],{"class":867},[324,84577,84578],{"class":326,"line":17442},[324,84579,488],{"emptyLinePlaceholder":487},[324,84581,84582,84584],{"class":326,"line":17465},[324,84583,73197],{"class":734},[324,84585,16301],{"class":867},[324,84587,84588,84590,84592,84594,84596],{"class":326,"line":17487},[324,84589,55493],{"class":916},[324,84591,52159],{"class":867},[324,84593,79296],{"class":916},[324,84595,52214],{"class":863},[324,84597,2025],{"class":867},[324,84599,84600,84602,84604,84606,84608],{"class":326,"line":17492},[324,84601,55428],{"class":916},[324,84603,52159],{"class":867},[324,84605,1056],{"class":916},[324,84607,52278],{"class":916},[324,84609,2025],{"class":867},[324,84611,84612,84614,84616,84618],{"class":326,"line":17498},[324,84613,55731],{"class":916},[324,84615,52159],{"class":867},[324,84617,52199],{"class":916},[324,84619,2025],{"class":867},[324,84621,84622,84624,84626,84628],{"class":326,"line":17512},[324,84623,55742],{"class":916},[324,84625,52159],{"class":867},[324,84627,52302],{"class":916},[324,84629,2025],{"class":867},[324,84631,84632,84635,84637,84639,84641,84643,84646],{"class":326,"line":17525},[324,84633,84634],{"class":916},"      border-top",[324,84636,52159],{"class":867},[324,84638,1082],{"class":916},[324,84640,52214],{"class":863},[324,84642,52243],{"class":916},[324,84644,84645],{"class":916}," #4e4e4e",[324,84647,2025],{"class":867},[324,84649,84650,84652,84654,84656,84658],{"class":326,"line":17530},[324,84651,55417],{"class":916},[324,84653,52159],{"class":867},[324,84655,1564],{"class":916},[324,84657,52214],{"class":863},[324,84659,2025],{"class":867},[324,84661,84662],{"class":326,"line":17544},[324,84663,2917],{"class":867},[324,84665,84666],{"class":326,"line":17549},[324,84667,488],{"emptyLinePlaceholder":487},[324,84669,84670,84672,84675],{"class":326,"line":17555},[324,84671,73197],{"class":734},[324,84673,84674],{"class":734}," .amount",[324,84676,16301],{"class":867},[324,84678,84679,84681,84683,84685,84687],{"class":326,"line":17560},[324,84680,55644],{"class":916},[324,84682,52159],{"class":867},[324,84684,1514],{"class":916},[324,84686,52214],{"class":863},[324,84688,2025],{"class":867},[324,84690,84691,84693,84695,84697],{"class":326,"line":17574},[324,84692,58138],{"class":916},[324,84694,52159],{"class":867},[324,84696,79662],{"class":916},[324,84698,2025],{"class":867},[324,84700,84701,84703,84705,84707],{"class":326,"line":17579},[324,84702,63056],{"class":916},[324,84704,52159],{"class":867},[324,84706,52211],{"class":916},[324,84708,2025],{"class":867},[324,84710,84711,84713,84715,84717,84719],{"class":326,"line":17584},[324,84712,62472],{"class":916},[324,84714,52159],{"class":867},[324,84716,1520],{"class":916},[324,84718,52214],{"class":863},[324,84720,2025],{"class":867},[324,84722,84723],{"class":326,"line":17598},[324,84724,2917],{"class":867},[324,84726,84727,84729,84731],{"class":326,"line":17610},[324,84728,53139],{"class":867},[324,84730,775],{"class":52022},[324,84732,52029],{"class":867},[324,84734,84735,84737,84739],{"class":326,"line":17615},[324,84736,52507],{"class":867},[324,84738,52056],{"class":52022},[324,84740,52029],{"class":867},[324,84742,84743],{"class":326,"line":17628},[324,84744,488],{"emptyLinePlaceholder":487},[324,84746,84747,84749,84751],{"class":326,"line":17633},[324,84748,1774],{"class":867},[324,84750,52522],{"class":52022},[324,84752,52029],{"class":867},[324,84754,84755,84757,84759,84761,84763,84765],{"class":326,"line":17638},[324,84756,52866],{"class":867},[324,84758,52333],{"class":52022},[324,84760,54208],{"class":734},[324,84762,913],{"class":867},[324,84764,63330],{"class":738},[324,84766,52029],{"class":867},[324,84768,84769,84771,84773],{"class":326,"line":17643},[324,84770,53139],{"class":867},[324,84772,52333],{"class":52022},[324,84774,52029],{"class":867},[324,84776,84777,84779,84781,84783,84785,84787],{"class":326,"line":17656},[324,84778,52866],{"class":867},[324,84780,52333],{"class":52022},[324,84782,54208],{"class":734},[324,84784,913],{"class":867},[324,84786,63302],{"class":738},[324,84788,52029],{"class":867},[324,84790,84791,84793,84795,84798,84800,84802,84804,84807,84809,84811,84813,84815],{"class":326,"line":17661},[324,84792,52063],{"class":867},[324,84794,52333],{"class":52022},[324,84796,84797],{"class":867},">合计：\u003C",[324,84799,324],{"class":52022},[324,84801,54208],{"class":734},[324,84803,913],{"class":867},[324,84805,84806],{"class":738},"\"amount\"",[324,84808,56036],{"class":867},[324,84810,324],{"class":52022},[324,84812,56036],{"class":867},[324,84814,52333],{"class":52022},[324,84816,52029],{"class":867},[324,84818,84819,84821,84823],{"class":326,"line":33355},[324,84820,53139],{"class":867},[324,84822,52333],{"class":52022},[324,84824,52029],{"class":867},[324,84826,84827,84829,84831],{"class":326,"line":33361},[324,84828,52866],{"class":867},[324,84830,52535],{"class":52022},[324,84832,52029],{"class":867},[324,84834,84835,84837,84839,84841],{"class":326,"line":33367},[324,84836,11950],{"class":863},[324,84838,80099],{"class":916},[324,84840,14293],{"class":863},[324,84842,56169],{"class":867},[324,84844,84845],{"class":326,"line":33373},[324,84846,80108],{"class":867},[324,84848,84849,84851,84853],{"class":326,"line":33379},[324,84850,80113],{"class":867},[324,84852,80116],{"class":738},[324,84854,32188],{"class":867},[324,84856,84857,84859,84861],{"class":326,"line":33390},[324,84858,80123],{"class":867},[324,84860,80126],{"class":738},[324,84862,32188],{"class":867},[324,84864,84865,84867,84870],{"class":326,"line":33396},[324,84866,80133],{"class":867},[324,84868,84869],{"class":916},"289.9",[324,84871,32188],{"class":867},[324,84873,84874,84876,84878],{"class":326,"line":33416},[324,84875,80143],{"class":867},[324,84877,80146],{"class":738},[324,84879,32188],{"class":867},[324,84881,84882,84885,84887],{"class":326,"line":33422},[324,84883,84884],{"class":867},"        count: ",[324,84886,944],{"class":916},[324,84888,32188],{"class":867},[324,84890,84891,84894,84897],{"class":326,"line":33433},[324,84892,84893],{"class":867},"        spec: { color: ",[324,84895,84896],{"class":738},"'白色'",[324,84898,56326],{"class":867},[324,84900,84901],{"class":326,"line":33439},[324,84902,78614],{"class":867},[324,84904,84905],{"class":326,"line":33445},[324,84906,80108],{"class":867},[324,84908,84909,84911,84913],{"class":326,"line":33451},[324,84910,80113],{"class":867},[324,84912,80207],{"class":738},[324,84914,32188],{"class":867},[324,84916,84917,84919,84921],{"class":326,"line":33457},[324,84918,80123],{"class":867},[324,84920,80216],{"class":738},[324,84922,32188],{"class":867},[324,84924,84925,84927,84930],{"class":326,"line":33463},[324,84926,80133],{"class":867},[324,84928,84929],{"class":916},"109.8",[324,84931,32188],{"class":867},[324,84933,84934,84936,84938],{"class":326,"line":33469},[324,84935,80143],{"class":867},[324,84937,80234],{"class":738},[324,84939,32188],{"class":867},[324,84941,84942,84944,84946],{"class":326,"line":33475},[324,84943,84884],{"class":867},[324,84945,938],{"class":916},[324,84947,32188],{"class":867},[324,84949,84950,84953,84955,84957,84959],{"class":326,"line":33495},[324,84951,84952],{"class":867},"        spec: { size: ",[324,84954,82625],{"class":738},[324,84956,56186],{"class":867},[324,84958,82630],{"class":738},[324,84960,56326],{"class":867},[324,84962,84963],{"class":326,"line":33501},[324,84964,78614],{"class":867},[324,84966,84967],{"class":326,"line":33517},[324,84968,80108],{"class":867},[324,84970,84971,84973,84975],{"class":326,"line":33523},[324,84972,80113],{"class":867},[324,84974,80251],{"class":738},[324,84976,32188],{"class":867},[324,84978,84979,84981,84983],{"class":326,"line":33537},[324,84980,80123],{"class":867},[324,84982,80260],{"class":738},[324,84984,32188],{"class":867},[324,84986,84987,84989,84992],{"class":326,"line":33543},[324,84988,80133],{"class":867},[324,84990,84991],{"class":916},"488",[324,84993,32188],{"class":867},[324,84995,84996,84998,85000],{"class":326,"line":33558},[324,84997,80143],{"class":867},[324,84999,80278],{"class":738},[324,85001,32188],{"class":867},[324,85003,85004,85006,85008],{"class":326,"line":33564},[324,85005,84884],{"class":867},[324,85007,1082],{"class":916},[324,85009,32188],{"class":867},[324,85011,85012,85014,85017,85020,85023],{"class":326,"line":33573},[324,85013,84893],{"class":867},[324,85015,85016],{"class":738},"'青色'",[324,85018,85019],{"class":867},", sum: ",[324,85021,85022],{"class":738},"'一大四小'",[324,85024,56326],{"class":867},[324,85026,85027],{"class":326,"line":33579},[324,85028,78614],{"class":867},[324,85030,85031],{"class":326,"line":33588},[324,85032,80108],{"class":867},[324,85034,85035,85037,85039],{"class":326,"line":33594},[324,85036,80113],{"class":867},[324,85038,80295],{"class":738},[324,85040,32188],{"class":867},[324,85042,85043,85045,85047],{"class":326,"line":33600},[324,85044,80123],{"class":867},[324,85046,80304],{"class":738},[324,85048,32188],{"class":867},[324,85050,85051,85053,85056],{"class":326,"line":33609},[324,85052,80133],{"class":867},[324,85054,85055],{"class":916},"139",[324,85057,32188],{"class":867},[324,85059,85060,85062,85064],{"class":326,"line":33615},[324,85061,80143],{"class":867},[324,85063,80322],{"class":738},[324,85065,32188],{"class":867},[324,85067,85068,85070,85072],{"class":326,"line":33626},[324,85069,84884],{"class":867},[324,85071,1082],{"class":916},[324,85073,32188],{"class":867},[324,85075,85076,85078,85081,85083,85086],{"class":326,"line":33632},[324,85077,84952],{"class":867},[324,85079,85080],{"class":738},"'小号'",[324,85082,56186],{"class":867},[324,85084,85085],{"class":738},"'紫色'",[324,85087,56192],{"class":867},[324,85089,85090,85093],{"class":326,"line":33651},[324,85091,85092],{"class":867},"        gift: ",[324,85094,85095],{"class":738},"'50g茶叶,清洗球'\n",[324,85097,85098],{"class":326,"line":33657},[324,85099,53120],{"class":867},[324,85101,85102],{"class":326,"line":33668},[324,85103,53831],{"class":867},[324,85105,85106],{"class":326,"line":33674},[324,85107,85108],{"class":772},"    \u002F\u002F  1.根据数据渲染页面\n",[324,85110,85111,85113,85115,85117,85119,85121,85123,85125,85127,85129,85131,85133],{"class":326,"line":33694},[324,85112,53129],{"class":867},[324,85114,55121],{"class":734},[324,85116,868],{"class":867},[324,85118,80623],{"class":738},[324,85120,74971],{"class":867},[324,85122,913],{"class":863},[324,85124,80770],{"class":867},[324,85126,74766],{"class":734},[324,85128,868],{"class":867},[324,85130,80517],{"class":5945},[324,85132,80520],{"class":863},[324,85134,16301],{"class":867},[324,85136,85137],{"class":326,"line":33710},[324,85138,85139],{"class":772},"      \u002F\u002F 对象解构\n",[324,85141,85142,85144,85146,85148,85150,85152,85154,85157,85159,85161,85163,85166,85168,85171,85173,85175],{"class":326,"line":33716},[324,85143,58950],{"class":863},[324,85145,80529],{"class":867},[324,85147,80542],{"class":916},[324,85149,13164],{"class":867},[324,85151,80532],{"class":916},[324,85153,13164],{"class":867},[324,85155,85156],{"class":916},"count",[324,85158,13164],{"class":867},[324,85160,80537],{"class":916},[324,85162,13164],{"class":867},[324,85164,85165],{"class":916},"spec",[324,85167,13164],{"class":867},[324,85169,85170],{"class":916},"gift",[324,85172,80545],{"class":867},[324,85174,913],{"class":863},[324,85176,80550],{"class":867},[324,85178,85179],{"class":326,"line":33730},[324,85180,85181],{"class":772},"      \u002F\u002F 规格文字模块处理\n",[324,85183,85184,85186,85189,85191,85193,85195,85197,85199,85201,85203],{"class":326,"line":33736},[324,85185,58950],{"class":863},[324,85187,85188],{"class":916}," text",[324,85190,14293],{"class":863},[324,85192,82660],{"class":867},[324,85194,82663],{"class":734},[324,85196,82666],{"class":867},[324,85198,74945],{"class":734},[324,85200,868],{"class":867},[324,85202,82673],{"class":738},[324,85204,874],{"class":867},[324,85206,85207],{"class":326,"line":33742},[324,85208,85209],{"class":772},"      \u002F\u002F 处理赠品模块\n",[324,85211,85212,85214,85216,85218,85221,85223,85225,85227,85229,85232,85234,85236,85238,85240,85242,85245,85247,85250,85252,85254,85256,85258,85260,85262],{"class":326,"line":33753},[324,85213,58950],{"class":863},[324,85215,74641],{"class":916},[324,85217,14293],{"class":863},[324,85219,85220],{"class":867}," gift ",[324,85222,1850],{"class":863},[324,85224,83834],{"class":867},[324,85226,83837],{"class":734},[324,85228,868],{"class":867},[324,85230,85231],{"class":738},"','",[324,85233,31548],{"class":867},[324,85235,74766],{"class":734},[324,85237,868],{"class":867},[324,85239,80517],{"class":5945},[324,85241,80520],{"class":863},[324,85243,85244],{"class":738}," `\u003Cspan class=\"tag\">【赠品】${",[324,85246,80517],{"class":867},[324,85248,85249],{"class":738},"}\u003C\u002Fspan>`",[324,85251,31548],{"class":867},[324,85253,74945],{"class":734},[324,85255,868],{"class":867},[324,85257,74950],{"class":738},[324,85259,14443],{"class":867},[324,85261,1723],{"class":863},[324,85263,70826],{"class":738},[324,85265,85266],{"class":326,"line":33759},[324,85267,85268],{"class":772},"      \u002F\u002F 计算小计模块，保留两位小数,在计算有关小数的问题时，我们要将其转化为整数，然后再除回去，就可以避免小数计算时精度的问题\n",[324,85270,85271,85273,85276,85278,85281,85283,85285,85287,85290,85292,85294,85296,85299,85301,85303],{"class":326,"line":33765},[324,85272,58950],{"class":863},[324,85274,85275],{"class":916}," subtotal",[324,85277,14293],{"class":863},[324,85279,85280],{"class":867}," ((price ",[324,85282,1319],{"class":863},[324,85284,6483],{"class":916},[324,85286,7247],{"class":863},[324,85288,85289],{"class":867}," count) ",[324,85291,1448],{"class":863},[324,85293,6483],{"class":916},[324,85295,31548],{"class":867},[324,85297,85298],{"class":734},"toFixed",[324,85300,868],{"class":867},[324,85302,944],{"class":916},[324,85304,874],{"class":867},[324,85306,85307],{"class":326,"line":33775},[324,85308,488],{"emptyLinePlaceholder":487},[324,85310,85311,85313],{"class":326,"line":33781},[324,85312,74704],{"class":863},[324,85314,70890],{"class":738},[324,85316,85317],{"class":326,"line":33792},[324,85318,85319],{"class":738},"        \u003Cdiv class=\"item\">\n",[324,85321,85322,85325,85327],{"class":326,"line":33798},[324,85323,85324],{"class":738},"          \u003Cimg src=\"${",[324,85326,80542],{"class":867},[324,85328,80574],{"class":738},[324,85330,85331,85334,85336,85339,85341],{"class":326,"line":33808},[324,85332,85333],{"class":738},"          \u003Cp class=\"name\">${",[324,85335,80532],{"class":867},[324,85337,85338],{"class":738},"}${",[324,85340,2034],{"class":867},[324,85342,80584],{"class":738},[324,85344,85345,85348,85350],{"class":326,"line":33813},[324,85346,85347],{"class":738},"          \u003Cp class=\"spec\">${",[324,85349,5916],{"class":867},[324,85351,80584],{"class":738},[324,85353,85354,85357,85359,85361,85363,85365,85367,85369],{"class":326,"line":33819},[324,85355,85356],{"class":738},"          \u003Cp class=\"price\">${",[324,85358,80537],{"class":867},[324,85360,1422],{"class":738},[324,85362,85298],{"class":734},[324,85364,868],{"class":738},[324,85366,944],{"class":916},[324,85368,1293],{"class":738},[324,85370,80584],{"class":738},[324,85372,85373,85376,85378],{"class":326,"line":33868},[324,85374,85375],{"class":738},"          \u003Cp class=\"count\">x${",[324,85377,85156],{"class":867},[324,85379,80584],{"class":738},[324,85381,85382,85385,85388],{"class":326,"line":33915},[324,85383,85384],{"class":738},"          \u003Cp class=\"sub-total\">${",[324,85386,85387],{"class":867},"subtotal",[324,85389,80584],{"class":738},[324,85391,85392],{"class":326,"line":33920},[324,85393,85394],{"class":738},"        \u003C\u002Fdiv> \n",[324,85396,85397],{"class":326,"line":33926},[324,85398,85399],{"class":738},"             `\n",[324,85401,85402,85405,85407,85409,85411],{"class":326,"line":33945},[324,85403,85404],{"class":867},"    }).",[324,85406,74945],{"class":734},[324,85408,868],{"class":867},[324,85410,74950],{"class":738},[324,85412,874],{"class":867},[324,85414,85415],{"class":326,"line":33951},[324,85416,85417],{"class":772},"    \u002F\u002F 合计模块   prev为累计值   item为当前元素   为了保证精度也先把它转化为整数计算完再变回去\n",[324,85419,85420,85422,85424,85426,85428,85431,85433,85436,85438,85440,85442,85445,85448,85450,85453,85455,85457,85459,85462,85464,85466,85468,85470],{"class":326,"line":33971},[324,85421,11950],{"class":863},[324,85423,63507],{"class":916},[324,85425,14293],{"class":863},[324,85427,80770],{"class":867},[324,85429,85430],{"class":734},"reduce",[324,85432,3106],{"class":867},[324,85434,85435],{"class":5945},"prev",[324,85437,13164],{"class":867},[324,85439,80517],{"class":5945},[324,85441,14443],{"class":867},[324,85443,85444],{"class":863},"=>",[324,85446,85447],{"class":867}," prev ",[324,85449,1345],{"class":863},[324,85451,85452],{"class":867}," (item.price ",[324,85454,1319],{"class":863},[324,85456,6483],{"class":916},[324,85458,7247],{"class":863},[324,85460,85461],{"class":867}," item.count) ",[324,85463,1448],{"class":863},[324,85465,6483],{"class":916},[324,85467,13164],{"class":867},[324,85469,1056],{"class":916},[324,85471,874],{"class":867},[324,85473,85474,85476,85478,85480,85483,85485,85487,85490,85492,85494,85496],{"class":326,"line":33977},[324,85475,53129],{"class":867},[324,85477,55121],{"class":734},[324,85479,868],{"class":867},[324,85481,85482],{"class":738},"'.amount'",[324,85484,74971],{"class":867},[324,85486,913],{"class":863},[324,85488,85489],{"class":867}," total.",[324,85491,85298],{"class":734},[324,85493,868],{"class":867},[324,85495,944],{"class":916},[324,85497,874],{"class":867},[324,85499,85500,85502,85504],{"class":326,"line":33983},[324,85501,53139],{"class":867},[324,85503,52535],{"class":52022},[324,85505,52029],{"class":867},[324,85507,85508,85510,85512],{"class":326,"line":33993},[324,85509,52507],{"class":867},[324,85511,52522],{"class":52022},[324,85513,52029],{"class":867},[324,85515,85516],{"class":326,"line":33998},[324,85517,488],{"emptyLinePlaceholder":487},[324,85519,85520,85522,85524],{"class":326,"line":34004},[324,85521,52507],{"class":867},[324,85523,51357],{"class":52022},[324,85525,52029],{"class":867},[14,85527,85529],{"id":85528},"_411-编程思想","4.11 编程思想",[35,85531,85533],{"id":85532},"_4111-面向过程介绍","4.11.1 面向过程介绍",[19,85535,85536,85539],{},[116,85537,85538],{},"面向过程"," 就是分析出解决问题所需要的步骤，然后用函数把这些步骤一步一步实现，使用的时候再一个一个的依次",[19,85541,85542],{},"调用就可以了",[19,85544,85545],{},[48,85546],{"alt":50,"src":85547},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-278.png",[35,85549,85551],{"id":85550},"_4112-面向对象","4.11.2 面向对象",[19,85553,85554],{},"面向对象编程具有灵活、代码可复用、容易维护和开发的优点，更适合多人合作的大型软件项目",[19,85556,85557],{},[48,85558],{"alt":50,"src":85559},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-279.png",[19,85561,85562],{},"面向对象的特性：",[1871,85564,85565,85568,85571],{},[195,85566,85567],{},"封装性",[195,85569,85570],{},"继承性",[195,85572,85573],{},"多态性",[35,85575,85577],{"id":85576},"_4113-两者比较","4.11.3 两者比较",[19,85579,85580],{},[48,85581],{"alt":50,"src":85582},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-280.png",[14,85584,85586],{"id":85585},"_412-构造函数回顾","4.12 构造函数回顾",[19,85588,85589],{},[48,85590],{"alt":50,"src":85591},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-281.png",[19,85593,85594],{},[48,85595],{"alt":50,"src":85596},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-282.png",[19,85598,85599],{},"构造函数在进行实例化创建对象的时候，会先创建一个空的对象，这个空的对象，属性和方法存在堆里，栈里存放存放堆里内容的地址，然后构造函数的this指向新对象；执行构造函数代码，修改this，添加新的属性；返回新对象，这样导致了一个问题，相同的方法在各自的堆里都存了一下，导致了内存的浪费问题",[19,85601,85602],{},[48,85603],{"alt":50,"src":85604},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-283.png",[14,85606,85608],{"id":85607},"_413-原型","4.13 原型",[35,85610,85612],{"id":85611},"_4131-原型对象的认识","4.13.1 原型对象的认识",[19,85614,85615],{},"可以解决构造函数有时导致内存浪费问题，实现方法共享",[19,85617,85618],{},[48,85619],{"alt":50,"src":85620},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-284.png",[19,85622,85623],{},[48,85624],{"alt":50,"src":85625},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-285.png",[19,85627,85628],{},"原型是构造函数的属性，它也是一个对象",[19,85630,85631],{},"公共的属性写在构造函数里边，因为这个属性一会在实例化的时候会赋值",[19,85633,85634],{},"公共的方法写在原型对象身上，这样就可以一起使用了",[316,85636,85638],{"className":53789,"code":85637,"language":53791,"meta":50,"style":50},"\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",[269,85639,85640,85648,85653,85661,85666,85671,85676,85681,85686,85690,85694,85698,85703,85708,85712,85717,85722,85727,85732,85737,85741,85749],{"__ignoreMap":50},[324,85641,85642,85644,85646],{"class":326,"line":327},[324,85643,1774],{"class":867},[324,85645,52522],{"class":52022},[324,85647,52029],{"class":867},[324,85649,85650],{"class":326,"line":203},[324,85651,85652],{"class":772},"  \u003C!-- 构造函数  公共的属性和方法  封装到构造函数里面了 -->\n",[324,85654,85655,85657,85659],{"class":326,"line":338},[324,85656,52866],{"class":867},[324,85658,52535],{"class":52022},[324,85660,52029],{"class":867},[324,85662,85663],{"class":326,"line":344},[324,85664,85665],{"class":867},"    function Star(uname, age) {\n",[324,85667,85668],{"class":326,"line":484},[324,85669,85670],{"class":867},"      this.uname = uname,\n",[324,85672,85673],{"class":326,"line":491},[324,85674,85675],{"class":867},"        this.age = age\n",[324,85677,85678],{"class":326,"line":496},[324,85679,85680],{"class":867},"      \u002F\u002F this.sing = function () {\n",[324,85682,85683],{"class":326,"line":502},[324,85684,85685],{"class":867},"      \u002F\u002F   console.log('唱歌')\n",[324,85687,85688],{"class":326,"line":508},[324,85689,488],{"emptyLinePlaceholder":487},[324,85691,85692],{"class":326,"line":514},[324,85693,60759],{"class":867},[324,85695,85696],{"class":326,"line":2343},[324,85697,2917],{"class":867},[324,85699,85700],{"class":326,"line":2348},[324,85701,85702],{"class":867},"    Star.prototype.sing = function () {\n",[324,85704,85705],{"class":326,"line":2354},[324,85706,85707],{"class":867},"      console.log('唱歌')\n",[324,85709,85710],{"class":326,"line":2359},[324,85711,2917],{"class":867},[324,85713,85714],{"class":326,"line":2373},[324,85715,85716],{"class":867},"    \u002F\u002F console.dir(Star.prototype)\n",[324,85718,85719],{"class":326,"line":2378},[324,85720,85721],{"class":867},"    const pink = new Star('pink', 18)\n",[324,85723,85724],{"class":326,"line":2384},[324,85725,85726],{"class":867},"    const red = new Star('red', 20)\n",[324,85728,85729],{"class":326,"line":2405},[324,85730,85731],{"class":867},"    pink.sing()\n",[324,85733,85734],{"class":326,"line":2410},[324,85735,85736],{"class":867},"    console.log(pink.sing = red.sing)   \u002F\u002F如果不使用圆型对象就是false，使用之后就是true,现在是true\n",[324,85738,85739],{"class":326,"line":2424},[324,85740,488],{"emptyLinePlaceholder":487},[324,85742,85743,85745,85747],{"class":326,"line":2429},[324,85744,53139],{"class":867},[324,85746,52535],{"class":52022},[324,85748,52029],{"class":867},[324,85750,85751,85753,85755],{"class":326,"line":2458},[324,85752,52507],{"class":867},[324,85754,52522],{"class":52022},[324,85756,52029],{"class":867},[19,85758,85759],{},[48,85760],{"alt":50,"src":85761},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-286.png",[316,85763,85765],{"className":53789,"code":85764,"language":53791,"meta":50,"style":50},"\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",[269,85766,85767,85775,85783,85788,85793,85798,85803,85807,85812,85817,85822,85826,85831,85835,85839,85844,85848,85856],{"__ignoreMap":50},[324,85768,85769,85771,85773],{"class":326,"line":327},[324,85770,1774],{"class":867},[324,85772,52522],{"class":52022},[324,85774,52029],{"class":867},[324,85776,85777,85779,85781],{"class":326,"line":203},[324,85778,52866],{"class":867},[324,85780,52535],{"class":52022},[324,85782,52029],{"class":867},[324,85784,85785],{"class":326,"line":338},[324,85786,85787],{"class":867},"    let that\n",[324,85789,85790],{"class":326,"line":344},[324,85791,85792],{"class":867},"    function Star(uname) {\n",[324,85794,85795],{"class":326,"line":484},[324,85796,85797],{"class":867},"      this.uname = uname\n",[324,85799,85800],{"class":326,"line":491},[324,85801,85802],{"class":867},"      that = this\n",[324,85804,85805],{"class":326,"line":496},[324,85806,2917],{"class":867},[324,85808,85809],{"class":326,"line":502},[324,85810,85811],{"class":867},"    \u002F\u002F 实例对象是 ldh\n",[324,85813,85814],{"class":326,"line":508},[324,85815,85816],{"class":867},"    const ldh = new Star('刘德华')\n",[324,85818,85819],{"class":326,"line":514},[324,85820,85821],{"class":867},"    console.log(that === ldh)    \u002F\u002Ftrue   说明构造函数里的this就是实例对象\n",[324,85823,85824],{"class":326,"line":2343},[324,85825,488],{"emptyLinePlaceholder":487},[324,85827,85828],{"class":326,"line":2348},[324,85829,85830],{"class":867},"    Star.sing = function () {\n",[324,85832,85833],{"class":326,"line":2354},[324,85834,85707],{"class":867},[324,85836,85837],{"class":326,"line":2359},[324,85838,2917],{"class":867},[324,85840,85841],{"class":326,"line":2373},[324,85842,85843],{"class":867},"    ldh.sing()    \u002F\u002F原型对象里的函数this指向的也是实例对象\n",[324,85845,85846],{"class":326,"line":2378},[324,85847,488],{"emptyLinePlaceholder":487},[324,85849,85850,85852,85854],{"class":326,"line":2384},[324,85851,53139],{"class":867},[324,85853,52535],{"class":52022},[324,85855,52029],{"class":867},[324,85857,85858,85860,85862],{"class":326,"line":2405},[324,85859,52507],{"class":867},[324,85861,52522],{"class":52022},[324,85863,52029],{"class":867},[19,85865,85866],{},"构造函数的this指向的是实例对象；",[19,85868,85869],{},"原型对象的this指向的也是实例对象（因为是实例对象去调用这个方法）",[35,85871,85873],{"id":85872},"_4132-数组扩展方法","4.13.2 数组扩展方法",[19,85875,85876],{},[48,85877],{"alt":50,"src":85878},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-287.png",[316,85880,85882],{"className":53789,"code":85881,"language":53791,"meta":50,"style":50},"\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",[269,85883,85884,85892,85900,85905,85910,85915,85920,85925,85930,85935,85940,85945,85950,85954,85959,85964,85969,85974,85978,85983,85988,85993,85998,86002,86007,86012,86017,86022,86026,86031,86035,86043],{"__ignoreMap":50},[324,85885,85886,85888,85890],{"class":326,"line":327},[324,85887,1774],{"class":867},[324,85889,52522],{"class":52022},[324,85891,52029],{"class":867},[324,85893,85894,85896,85898],{"class":326,"line":203},[324,85895,52866],{"class":867},[324,85897,52535],{"class":52022},[324,85899,52029],{"class":867},[324,85901,85902],{"class":326,"line":338},[324,85903,85904],{"class":867},"    \u002F\u002F 注意数组不可以直接用min和max求最值\n",[324,85906,85907],{"class":326,"line":344},[324,85908,85909],{"class":867},"    const arr = [1, 2, 3]\n",[324,85911,85912],{"class":326,"line":484},[324,85913,85914],{"class":867},"    \u002F\u002F 自己定义数组的扩展方法\n",[324,85916,85917],{"class":326,"line":491},[324,85918,85919],{"class":867},"    \u002F\u002F 1.我们定义的这个方法，任何一个数组实例对象都可以使用\n",[324,85921,85922],{"class":326,"line":496},[324,85923,85924],{"class":867},"    \u002F\u002F 2.自定义的方法写到prototype身上\n",[324,85926,85927],{"class":326,"line":502},[324,85928,85929],{"class":867},"    \u002F\u002F ①.最大值\n",[324,85931,85932],{"class":326,"line":508},[324,85933,85934],{"class":867},"    Array.prototype.max = function () {\n",[324,85936,85937],{"class":326,"line":514},[324,85938,85939],{"class":867},"      \u002F\u002F 使用展开运算符,这里不是剩余运算符   ...为展开运算符\n",[324,85941,85942],{"class":326,"line":2343},[324,85943,85944],{"class":867},"      return Math.max(...this)\n",[324,85946,85947],{"class":326,"line":2348},[324,85948,85949],{"class":867},"      \u002F\u002F 原型对象中函数的this指向的是实例对象   这里指向的是arr\n",[324,85951,85952],{"class":326,"line":2354},[324,85953,2917],{"class":867},[324,85955,85956],{"class":326,"line":2359},[324,85957,85958],{"class":867},"    console.log(arr.max())\n",[324,85960,85961],{"class":326,"line":2373},[324,85962,85963],{"class":867},"    \u002F\u002F ②最小值\n",[324,85965,85966],{"class":326,"line":2378},[324,85967,85968],{"class":867},"    Array.prototype.min = function () {\n",[324,85970,85971],{"class":326,"line":2384},[324,85972,85973],{"class":867},"      return Math.min(...this)\n",[324,85975,85976],{"class":326,"line":2405},[324,85977,2917],{"class":867},[324,85979,85980],{"class":326,"line":2410},[324,85981,85982],{"class":867},"    console.log(arr.min())\n",[324,85984,85985],{"class":326,"line":2424},[324,85986,85987],{"class":867},"    \u002F\u002F③求和\n",[324,85989,85990],{"class":326,"line":2429},[324,85991,85992],{"class":867},"    Array.prototype.sum = function () {\n",[324,85994,85995],{"class":326,"line":2458},[324,85996,85997],{"class":867},"      return this.reduce((prev, current) => prev + current, 0)\n",[324,85999,86000],{"class":326,"line":2463},[324,86001,2917],{"class":867},[324,86003,86004],{"class":326,"line":2480},[324,86005,86006],{"class":867},"    console.log(arr.sum())\n",[324,86008,86009],{"class":326,"line":2485},[324,86010,86011],{"class":867},"    \u002F\u002F ③排序\n",[324,86013,86014],{"class":326,"line":2490},[324,86015,86016],{"class":867},"    Array.prototype.rever = function () {\n",[324,86018,86019],{"class":326,"line":2495},[324,86020,86021],{"class":867},"      return this.reverse()\n",[324,86023,86024],{"class":326,"line":2509},[324,86025,2917],{"class":867},[324,86027,86028],{"class":326,"line":2514},[324,86029,86030],{"class":867},"    console.log(arr.rever())\n",[324,86032,86033],{"class":326,"line":3306},[324,86034,488],{"emptyLinePlaceholder":487},[324,86036,86037,86039,86041],{"class":326,"line":3320},[324,86038,53139],{"class":867},[324,86040,52535],{"class":52022},[324,86042,52029],{"class":867},[324,86044,86045,86047,86049],{"class":326,"line":3328},[324,86046,52507],{"class":867},[324,86048,52522],{"class":52022},[324,86050,52029],{"class":867},[19,86052,86053],{},[48,86054],{"alt":50,"src":86055},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-288.png",[35,86057,86059],{"id":86058},"_4133-constructor-属性","4.13.3 constructor 属性",[19,86061,86062],{},"每个原型对象里面都有个constructor 属性（constructor 构造函数）",[19,86064,86065],{},[48,86066],{"alt":50,"src":86067},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-289.png",[316,86069,86071],{"className":53789,"code":86070,"language":53791,"meta":50,"style":50},"\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",[269,86072,86073,86081,86089,86094,86099,86103,86108,86113,86118,86126],{"__ignoreMap":50},[324,86074,86075,86077,86079],{"class":326,"line":327},[324,86076,1774],{"class":867},[324,86078,52522],{"class":52022},[324,86080,52029],{"class":867},[324,86082,86083,86085,86087],{"class":326,"line":203},[324,86084,52866],{"class":867},[324,86086,52535],{"class":52022},[324,86088,52029],{"class":867},[324,86090,86091],{"class":326,"line":338},[324,86092,86093],{"class":867},"    \u002F\u002Fconstructor   单词是构造函数的意思\n",[324,86095,86096],{"class":326,"line":344},[324,86097,86098],{"class":867},"    function Star() {\n",[324,86100,86101],{"class":326,"line":484},[324,86102,2917],{"class":867},[324,86104,86105],{"class":326,"line":491},[324,86106,86107],{"class":867},"    const ldh = new Star()\n",[324,86109,86110],{"class":326,"line":496},[324,86111,86112],{"class":867},"    console.log(Star.prototype)\n",[324,86114,86115],{"class":326,"line":502},[324,86116,86117],{"class":867},"    console.log(Star.prototype.constructor === Star)\n",[324,86119,86120,86122,86124],{"class":326,"line":508},[324,86121,53139],{"class":867},[324,86123,52535],{"class":52022},[324,86125,52029],{"class":867},[324,86127,86128,86130,86132],{"class":326,"line":514},[324,86129,52507],{"class":867},[324,86131,52522],{"class":52022},[324,86133,52029],{"class":867},[19,86135,86136],{},[48,86137],{"alt":50,"src":86138},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-290.png",[19,86140,86141],{},"问题：如果很多的公共方法的话,那么要写太多了,较为繁琐,所以我们考虑将这些方法塞一个对象中，例：",[316,86143,86145],{"className":53789,"code":86144,"language":53791,"meta":50,"style":50},"  \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",[269,86146,86147,86155,86159,86163,86167,86172,86177,86182,86186,86191,86196,86201,86206,86211,86216,86220,86224,86229,86234,86239,86243,86248,86253,86257,86261,86265],{"__ignoreMap":50},[324,86148,86149,86151,86153],{"class":326,"line":327},[324,86150,52866],{"class":867},[324,86152,52535],{"class":52022},[324,86154,52029],{"class":867},[324,86156,86157],{"class":326,"line":203},[324,86158,86093],{"class":867},[324,86160,86161],{"class":326,"line":338},[324,86162,86098],{"class":867},[324,86164,86165],{"class":326,"line":344},[324,86166,2917],{"class":867},[324,86168,86169],{"class":326,"line":484},[324,86170,86171],{"class":867},"    \u002F\u002F const ldh = new Star()\n",[324,86173,86174],{"class":326,"line":491},[324,86175,86176],{"class":867},"    \u002F\u002F console.log(Star.prototype)\n",[324,86178,86179],{"class":326,"line":496},[324,86180,86181],{"class":867},"    \u002F\u002F console.log(Star.prototype.constructor === Star)\n",[324,86183,86184],{"class":326,"line":502},[324,86185,488],{"emptyLinePlaceholder":487},[324,86187,86188],{"class":326,"line":508},[324,86189,86190],{"class":867},"    \u002F\u002F 如果很多的公共方法的话,那么要写太多了,较为繁琐\n",[324,86192,86193],{"class":326,"line":514},[324,86194,86195],{"class":867},"    \u002F\u002F Star.prototype.sing = function () {\n",[324,86197,86198],{"class":326,"line":2343},[324,86199,86200],{"class":867},"    \u002F\u002F   console.log('唱歌')\n",[324,86202,86203],{"class":326,"line":2348},[324,86204,86205],{"class":867},"    \u002F\u002F }\n",[324,86207,86208],{"class":326,"line":2354},[324,86209,86210],{"class":867},"    \u002F\u002F Star.prototype.dance = function () {\n",[324,86212,86213],{"class":326,"line":2359},[324,86214,86215],{"class":867},"    \u002F\u002F   console.log('跳舞')\n",[324,86217,86218],{"class":326,"line":2373},[324,86219,86205],{"class":867},[324,86221,86222],{"class":326,"line":2378},[324,86223,86112],{"class":867},[324,86225,86226],{"class":326,"line":2384},[324,86227,86228],{"class":867},"    Star.prototype = {\n",[324,86230,86231],{"class":326,"line":2405},[324,86232,86233],{"class":867},"      sing: function () {\n",[324,86235,86236],{"class":326,"line":2410},[324,86237,86238],{"class":867},"        console.log('唱歌')\n",[324,86240,86241],{"class":326,"line":2424},[324,86242,78614],{"class":867},[324,86244,86245],{"class":326,"line":2429},[324,86246,86247],{"class":867},"      dance: function () {\n",[324,86249,86250],{"class":326,"line":2458},[324,86251,86252],{"class":867},"        console.log('跳舞')\n",[324,86254,86255],{"class":326,"line":2463},[324,86256,53120],{"class":867},[324,86258,86259],{"class":326,"line":2480},[324,86260,2917],{"class":867},[324,86262,86263],{"class":326,"line":2485},[324,86264,86112],{"class":867},[324,86266,86267,86269,86271],{"class":326,"line":2490},[324,86268,53139],{"class":867},[324,86270,52535],{"class":52022},[324,86272,52029],{"class":867},[19,86274,86275],{},"进行输出结果后会发现：",[19,86277,86278],{},[48,86279],{"alt":50,"src":86280},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-291.png",[19,86282,86283],{},"将方法塞进这个原型对象中，打印后没有constructor，也就是说这个原型对象是谁的不知道了，因为这里进行了赋值操作，把以前的内容直接给覆盖了，赋值把以前的原型对象给覆盖了，指向了现在自己创建的这个对象了",[19,86285,86286],{},"所以，要重新指回创造这个原型对象的构造函数",[316,86288,86290],{"className":71935,"code":86289,"language":71937,"meta":50,"style":50},"Star.prototype = {\n\u002F\u002F 要重新指回创造这个原型对象的构造函数\n  constructor: Star,\n  sing: function () {\n    console.log('唱歌')\n   },\n   dance: function () {\n     console.log('跳舞')\n   }\n}\n",[269,86291,86292,86306,86311,86316,86327,86340,86345,86356,86370,86374],{"__ignoreMap":50},[324,86293,86294,86297,86299,86302,86304],{"class":326,"line":327},[324,86295,86296],{"class":916},"Star",[324,86298,1422],{"class":867},[324,86300,86301],{"class":916},"prototype",[324,86303,14293],{"class":863},[324,86305,16301],{"class":867},[324,86307,86308],{"class":326,"line":203},[324,86309,86310],{"class":772},"\u002F\u002F 要重新指回创造这个原型对象的构造函数\n",[324,86312,86313],{"class":326,"line":338},[324,86314,86315],{"class":867},"  constructor: Star,\n",[324,86317,86318,86321,86323,86325],{"class":326,"line":344},[324,86319,86320],{"class":734},"  sing",[324,86322,52159],{"class":867},[324,86324,55171],{"class":863},[324,86326,55174],{"class":867},[324,86328,86329,86331,86333,86335,86338],{"class":326,"line":484},[324,86330,74475],{"class":867},[324,86332,58969],{"class":734},[324,86334,868],{"class":867},[324,86336,86337],{"class":738},"'唱歌'",[324,86339,874],{"class":867},[324,86341,86342],{"class":326,"line":491},[324,86343,86344],{"class":867},"   },\n",[324,86346,86347,86350,86352,86354],{"class":326,"line":496},[324,86348,86349],{"class":734},"   dance",[324,86351,52159],{"class":867},[324,86353,55171],{"class":863},[324,86355,55174],{"class":867},[324,86357,86358,86361,86363,86365,86368],{"class":326,"line":502},[324,86359,86360],{"class":867},"     console.",[324,86362,58969],{"class":734},[324,86364,868],{"class":867},[324,86366,86367],{"class":738},"'跳舞'",[324,86369,874],{"class":867},[324,86371,86372],{"class":326,"line":508},[324,86373,5038],{"class":867},[324,86375,86376],{"class":326,"line":514},[324,86377,2296],{"class":867},[19,86379,86380],{},[48,86381],{"alt":50,"src":86382},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-292.png",[19,86384,86385],{},"总结1：",[19,86387,86388],{},"如果有多个对象的方法，我们可以给原型对象采取对象形式赋值，但是这样就会覆盖构造函数原型对象原来的内容，这样修改后的原型对象 constructor 就不再指向当前构造函数了",[19,86390,86391],{},"此时，我们可以在修改后的原型对象中，添加一个 constructor 指向原来的构造函数",[19,86393,86394],{},"constructor指的是他的来源",[19,86396,86397],{},[48,86398],{"alt":50,"src":86399},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-293.png",[19,86401,86402],{},[48,86403],{"alt":50,"src":86404},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-294.png",[19,86406,86407],{},"总结2：",[19,86409,86410],{},[48,86411],{"alt":50,"src":86412},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-295.png",[19,86414,86415],{},[48,86416],{"alt":50,"src":86417},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-296.png",[19,86419,86420],{},[48,86421],{"alt":50,"src":86422},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-297.png",[35,86424,86426],{"id":86425},"_4134-对象原型","4.13.4 对象原型",[19,86428,86429],{},"解释实例对象可以访问原型对象里边的方法的问题（解释实例对象如何拿到方法的问题）",[19,86431,86432],{},"对象原型就是__proto__这个属性",[19,86434,86435],{},[48,86436],{"alt":50,"src":86437},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-298.png",[19,86439,86440],{},[48,86441],{"alt":50,"src":86442},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-299.png",[19,86444,86445],{},[48,86446],{"alt":50,"src":86447},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-300.png",[19,86449,86450],{},[48,86451],{"alt":50,"src":86452},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-301.png",[316,86454,86456],{"className":53789,"code":86455,"language":53791,"meta":50,"style":50},"\u003Cbody>\n  \u003Cscript>\n    function Star() {\n    }\n    const ldh = new Star()\n    console.log(ldh)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[269,86457,86458,86466,86474,86478,86482,86486,86491,86499],{"__ignoreMap":50},[324,86459,86460,86462,86464],{"class":326,"line":327},[324,86461,1774],{"class":867},[324,86463,52522],{"class":52022},[324,86465,52029],{"class":867},[324,86467,86468,86470,86472],{"class":326,"line":203},[324,86469,52866],{"class":867},[324,86471,52535],{"class":52022},[324,86473,52029],{"class":867},[324,86475,86476],{"class":326,"line":338},[324,86477,86098],{"class":867},[324,86479,86480],{"class":326,"line":344},[324,86481,2917],{"class":867},[324,86483,86484],{"class":326,"line":484},[324,86485,86107],{"class":867},[324,86487,86488],{"class":326,"line":491},[324,86489,86490],{"class":867},"    console.log(ldh)\n",[324,86492,86493,86495,86497],{"class":326,"line":496},[324,86494,53139],{"class":867},[324,86496,52535],{"class":52022},[324,86498,52029],{"class":867},[324,86500,86501,86503,86505],{"class":326,"line":502},[324,86502,52507],{"class":867},[324,86504,52522],{"class":52022},[324,86506,52029],{"class":867},[19,86508,86509],{},"__proto__是非标准属性，在浏览器中的写法可能不同，下面是谷歌浏览器的表示方法，最新的浏览器基本上都是使用的下面这种方式，就理解为两个是相同的就可以，这个是只读的，不可以进行修改",[19,86511,86512],{},"原型对象中[[Prototype]]只是现在大部分浏览器对对象原型的展示，以前浏览器使用的是__proto__，但是要访问这个原型对象的话，还是得使用__proto__",[19,86514,86515],{},[48,86516],{"alt":50,"src":86517},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-302.png",[19,86519,86520],{},"理解总结: 对象原型__proto__指向该构造函数的原型对象",[19,86522,86523],{},"对象原型指向原型对象",[19,86525,86526],{},[48,86527],{"alt":50,"src":86528},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-303.png",[19,86530,86531],{},[48,86532],{"alt":50,"src":86533},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-304.png",[19,86535,86536],{},[48,86537],{"alt":50,"src":86538},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-305.png",[35,86540,86542],{"id":86541},"_4135-构造函数对象原型和原型对象总结","4.13.5 构造函数，对象原型和原型对象总结",[19,86544,86545],{},[48,86546],{"alt":50,"src":86547},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-306.png",[192,86549,86550,86553,86556,86559],{},[195,86551,86552],{},"构造函数通过new的形式实例化得到实例对象",[195,86554,86555],{},"每一个实例对象中都有一个__proto__属性，这个属性中有constructor属性，指向构造函数",[195,86557,86558],{},"构造函数公共的属性和方法放在原型对象中，这个原型对象（prototype）是构造函数本身的一个属性，它指向的是一个对象。只要创建一个构造函数就会自动产生一个原型对象。原型对象属于构造函数，构造函数通过prototype引用它，原型对象有一个constructor属性，指回构造函数",[195,86560,86561],{},"每个实例对象的__proto__属性都会指向原型对象（prototype）",[19,86563,86564],{},[48,86565],{"alt":50,"src":86566},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-307.png",[19,86568,86569],{},"题目梳理：",[19,86571,86572],{},[48,86573],{"alt":50,"src":86574},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-308.png",[35,86576,86578],{"id":86577},"_4136-原型继承","4.13.6 原型继承",[19,86580,86581],{},[48,86582],{"alt":50,"src":86583},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-309.png",[19,86585,86586],{},[48,86587],{"alt":50,"src":86588},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-310.png",[19,86590,86591],{},[48,86592],{"alt":50,"src":86593},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-311.png",[19,86595,86596],{},[48,86597],{"alt":50,"src":86598},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-312.png",[19,86600,86601],{},[48,86602],{"alt":50,"src":86603},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-313.png",[19,86605,86606],{},[48,86607],{"alt":50,"src":86608},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-314.png",[19,86610,86611],{},[48,86612],{"alt":50,"src":86613},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-315.png",[19,86615,86616],{},[48,86617],{"alt":50,"src":86618},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-316.png",[19,86620,86621],{},"回顾：构造函数每次new得到对象都是不同的",[35,86623,86625],{"id":86624},"_4137-原型链","4.13.7 原型链",[19,86627,86628],{},[48,86629],{"alt":50,"src":86630},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-317.png",[19,86632,86633],{},"只要是对象就有对象原型，它可以通过__proto__属性来访问原型对象，获取公共的属性和方法，然后每个原型对象都会有一个[[prototype]]，它是个指针，用来查看它自己的原型对象的信息，然后会提供一个__proto__的属性以供对象原型来访问，__proto__这个属性就理解为是对象原型，这个对象原型就在对象实例中。其实__proto__就是浏览器给开发者的接口，用来访问[[prototype]]",[19,86635,86636],{},"对象原型指向原型对象，这个原型对象本身就含有对象原型，因为所有对象都有一个对象原型__proto__，所以这个原型对象可以通过它内部的对象原型__proto__指向他自己的原型对象",[19,86638,86639],{},"大哥是Object",[19,86641,86642],{},[48,86643],{"alt":50,"src":86644},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-318.png",[19,86646,86647],{},[48,86648],{"alt":50,"src":86649},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-319.png",[19,86651,86652],{},"ldh属于构造函数的，由这个构造函数构成的，只要是在这个链上就是true",[19,86654,86655],{},"万物皆对象",[35,86657,86659],{"id":86658},"_4138-消息提示对象封装","4.13.8 消息提示对象封装",[19,86661,86662],{},"模态框",[19,86664,86665],{},"以后遇见这个效果直接使用这个就行",[19,86667,86668],{},[48,86669],{"alt":50,"src":86670},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-320.png",[19,86672,86673],{},[48,86674],{"alt":50,"src":86675},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-321.png",[19,86677,86678],{},[48,86679],{"alt":50,"src":86680},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-322.png",[19,86682,86683],{},[48,86684],{"alt":50,"src":86685},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-323.png",[19,86687,86688],{},"补充知识点：",[192,86690,86691],{},[195,86692,86693],{},"append()",[19,86695,86696],{},[48,86697],{"alt":50,"src":86698},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-324.png",[316,86700,86702],{"className":51355,"code":86701,"language":51357,"meta":50,"style":50},"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",[269,86703,86704,86709,86714,86719,86723,86727,86731,86736,86741,86746,86750],{"__ignoreMap":50},[324,86705,86706],{"class":326,"line":327},[324,86707,86708],{"class":867},"append(param1)\n",[324,86710,86711],{"class":326,"line":203},[324,86712,86713],{"class":867},"append(param1, param2)\n",[324,86715,86716],{"class":326,"line":338},[324,86717,86718],{"class":867},"append(param1, param2, \u002F* …, *\u002F paramN)\n",[324,86720,86721],{"class":326,"line":344},[324,86722,488],{"emptyLinePlaceholder":487},[324,86724,86725],{"class":326,"line":484},[324,86726,488],{"emptyLinePlaceholder":487},[324,86728,86729],{"class":326,"line":491},[324,86730,488],{"emptyLinePlaceholder":487},[324,86732,86733],{"class":326,"line":496},[324,86734,86735],{"class":867},"let div = document.createElement(\"div\");\n",[324,86737,86738],{"class":326,"line":502},[324,86739,86740],{"class":867},"let p = document.createElement(\"p\");\n",[324,86742,86743],{"class":326,"line":508},[324,86744,86745],{"class":867},"div.append(p);\n",[324,86747,86748],{"class":326,"line":514},[324,86749,488],{"emptyLinePlaceholder":487},[324,86751,86752,86755,86757],{"class":326,"line":2343},[324,86753,86754],{"class":867},"console.log(div.childNodes); \u002F\u002F NodeList [ \u003C",[324,86756,19],{"class":52022},[324,86758,86759],{"class":867},"> ]\n",[192,86761,86762],{"start":203},[195,86763,86764],{},"remove()",[19,86766,86767],{},"自己删自己",[19,86769,86770],{},[48,86771],{"alt":50,"src":86772},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-325.png",[316,86774,86776],{"className":51355,"code":86775,"language":51357,"meta":50,"style":50},"\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",[269,86777,86778,86788,86802,86806,86814,86828,86848,86860,86868,86875,86887,86900,86935,86947,86958,86970,86982,86994,87021,87031,87035,87039,87048,87060,87074,87084,87096,87100,87104,87114,87125,87135,87145,87158,87171,87181,87185,87189,87198,87208,87220,87224,87228,87237,87247,87257,87269,87273,87277,87287,87303,87314,87324,87334,87346,87358,87370,87374,87378,87391,87402,87406,87414,87422,87426,87434,87454,87474,87482,87487,87513,87518,87523,87542,87547,87559,87564,87575,87585,87595,87600,87605,87609,87614,87619,87624,87644,87649,87669,87674,87688,87693,87698,87703,87719,87723,87728,87757,87762,87767,87772,87783,87787,87791,87795,87800,87825,87830,87855,87860,87869,87873,87878,87903,87907,87932,87936,87945,87949,87954,87972,87982,87986,87994,88002,88006],{"__ignoreMap":50},[324,86779,86780,86782,86784,86786],{"class":326,"line":327},[324,86781,52019],{"class":867},[324,86783,52023],{"class":52022},[324,86785,52026],{"class":734},[324,86787,52029],{"class":867},[324,86789,86790,86792,86794,86796,86798,86800],{"class":326,"line":203},[324,86791,1774],{"class":867},[324,86793,51357],{"class":52022},[324,86795,52038],{"class":734},[324,86797,913],{"class":867},[324,86799,52043],{"class":738},[324,86801,52029],{"class":867},[324,86803,86804],{"class":326,"line":338},[324,86805,488],{"emptyLinePlaceholder":487},[324,86807,86808,86810,86812],{"class":326,"line":344},[324,86809,1774],{"class":867},[324,86811,52056],{"class":52022},[324,86813,52029],{"class":867},[324,86815,86816,86818,86820,86822,86824,86826],{"class":326,"line":484},[324,86817,52866],{"class":867},[324,86819,52066],{"class":52022},[324,86821,52069],{"class":734},[324,86823,913],{"class":867},[324,86825,52074],{"class":738},[324,86827,52029],{"class":867},[324,86829,86830,86832,86834,86836,86838,86840,86842,86844,86846],{"class":326,"line":491},[324,86831,52866],{"class":867},[324,86833,52066],{"class":52022},[324,86835,15649],{"class":734},[324,86837,913],{"class":867},[324,86839,52113],{"class":738},[324,86841,52093],{"class":734},[324,86843,913],{"class":867},[324,86845,52120],{"class":738},[324,86847,52029],{"class":867},[324,86849,86850,86852,86854,86856,86858],{"class":326,"line":496},[324,86851,52866],{"class":867},[324,86853,52129],{"class":52022},[324,86855,52132],{"class":867},[324,86857,52129],{"class":52022},[324,86859,52029],{"class":867},[324,86861,86862,86864,86866],{"class":326,"line":502},[324,86863,52866],{"class":867},[324,86865,775],{"class":52022},[324,86867,52029],{"class":867},[324,86869,86870,86873],{"class":326,"line":508},[324,86871,86872],{"class":734},"    .modal",[324,86874,16301],{"class":867},[324,86876,86877,86879,86881,86883,86885],{"class":326,"line":514},[324,86878,55493],{"class":916},[324,86880,52159],{"class":867},[324,86882,4702],{"class":916},[324,86884,52214],{"class":863},[324,86886,2025],{"class":867},[324,86888,86889,86892,86894,86896,86898],{"class":326,"line":2343},[324,86890,86891],{"class":916},"      min-height",[324,86893,52159],{"class":867},[324,86895,1175],{"class":916},[324,86897,52214],{"class":863},[324,86899,2025],{"class":867},[324,86901,86902,86904,86906,86908,86910,86912,86914,86916,86918,86920,86922,86924,86926,86928,86930,86933],{"class":326,"line":2348},[324,86903,79472],{"class":916},[324,86905,52159],{"class":867},[324,86907,1056],{"class":916},[324,86909,4822],{"class":916},[324,86911,2768],{"class":916},[324,86913,52214],{"class":863},[324,86915,79489],{"class":916},[324,86917,868],{"class":867},[324,86919,1056],{"class":916},[324,86921,13164],{"class":867},[324,86923,1056],{"class":916},[324,86925,13164],{"class":867},[324,86927,1056],{"class":916},[324,86929,13164],{"class":867},[324,86931,86932],{"class":916},"0.1",[324,86934,3448],{"class":867},[324,86936,86937,86939,86941,86943,86945],{"class":326,"line":2354},[324,86938,55856],{"class":916},[324,86940,52159],{"class":867},[324,86942,1157],{"class":916},[324,86944,52214],{"class":863},[324,86946,2025],{"class":867},[324,86948,86949,86951,86953,86956],{"class":326,"line":2359},[324,86950,55481],{"class":916},[324,86952,52159],{"class":867},[324,86954,86955],{"class":916},"fixed",[324,86957,2025],{"class":867},[324,86959,86960,86963,86965,86968],{"class":326,"line":2373},[324,86961,86962],{"class":916},"      z-index",[324,86964,52159],{"class":867},[324,86966,86967],{"class":916},"999",[324,86969,2025],{"class":867},[324,86971,86972,86974,86976,86978,86980],{"class":326,"line":2378},[324,86973,55560],{"class":916},[324,86975,52159],{"class":867},[324,86977,1520],{"class":916},[324,86979,1192],{"class":863},[324,86981,2025],{"class":867},[324,86983,86984,86986,86988,86990,86992],{"class":326,"line":2384},[324,86985,55669],{"class":916},[324,86987,52159],{"class":867},[324,86989,1520],{"class":916},[324,86991,1192],{"class":863},[324,86993,2025],{"class":867},[324,86995,86996,86998,87000,87002,87004,87007,87009,87011,87013,87015,87017,87019],{"class":326,"line":2405},[324,86997,79513],{"class":916},[324,86999,52159],{"class":867},[324,87001,79518],{"class":916},[324,87003,868],{"class":867},[324,87005,87006],{"class":916},"-50",[324,87008,1192],{"class":863},[324,87010,13164],{"class":867},[324,87012,87006],{"class":916},[324,87014,1192],{"class":863},[324,87016,13164],{"class":867},[324,87018,1056],{"class":916},[324,87020,3448],{"class":867},[324,87022,87023,87025,87027,87029],{"class":326,"line":2410},[324,87024,55606],{"class":916},[324,87026,52159],{"class":867},[324,87028,61564],{"class":916},[324,87030,2025],{"class":867},[324,87032,87033],{"class":326,"line":2424},[324,87034,2917],{"class":867},[324,87036,87037],{"class":326,"line":2429},[324,87038,488],{"emptyLinePlaceholder":487},[324,87040,87041,87043,87046],{"class":326,"line":2458},[324,87042,86872],{"class":734},[324,87044,87045],{"class":734}," .header",[324,87047,16301],{"class":867},[324,87049,87050,87052,87054,87056,87058],{"class":326,"line":2463},[324,87051,58081],{"class":916},[324,87053,52159],{"class":867},[324,87055,1265],{"class":916},[324,87057,52214],{"class":863},[324,87059,2025],{"class":867},[324,87061,87062,87064,87066,87068,87070,87072],{"class":326,"line":2480},[324,87063,55417],{"class":916},[324,87065,52159],{"class":867},[324,87067,1056],{"class":916},[324,87069,2768],{"class":916},[324,87071,52214],{"class":863},[324,87073,2025],{"class":867},[324,87075,87076,87078,87080,87082],{"class":326,"line":2485},[324,87077,55481],{"class":916},[324,87079,52159],{"class":867},[324,87081,55486],{"class":916},[324,87083,2025],{"class":867},[324,87085,87086,87088,87090,87092,87094],{"class":326,"line":2490},[324,87087,55644],{"class":916},[324,87089,52159],{"class":867},[324,87091,1564],{"class":916},[324,87093,52214],{"class":863},[324,87095,2025],{"class":867},[324,87097,87098],{"class":326,"line":2495},[324,87099,2917],{"class":867},[324,87101,87102],{"class":326,"line":2509},[324,87103,488],{"emptyLinePlaceholder":487},[324,87105,87106,87108,87110,87112],{"class":326,"line":2514},[324,87107,86872],{"class":734},[324,87109,87045],{"class":734},[324,87111,3761],{"class":52022},[324,87113,16301],{"class":867},[324,87115,87116,87119,87121,87123],{"class":326,"line":3306},[324,87117,87118],{"class":916},"      font-style",[324,87120,52159],{"class":867},[324,87122,64563],{"class":916},[324,87124,2025],{"class":867},[324,87126,87127,87129,87131,87133],{"class":326,"line":3320},[324,87128,58138],{"class":916},[324,87130,52159],{"class":867},[324,87132,62792],{"class":916},[324,87134,2025],{"class":867},[324,87136,87137,87139,87141,87143],{"class":326,"line":3328},[324,87138,55481],{"class":916},[324,87140,52159],{"class":867},[324,87142,55553],{"class":916},[324,87144,2025],{"class":867},[324,87146,87147,87150,87152,87154,87156],{"class":326,"line":3333},[324,87148,87149],{"class":916},"      right",[324,87151,52159],{"class":867},[324,87153,1439],{"class":916},[324,87155,52214],{"class":863},[324,87157,2025],{"class":867},[324,87159,87160,87162,87164,87167,87169],{"class":326,"line":3339},[324,87161,55669],{"class":916},[324,87163,52159],{"class":867},[324,87165,87166],{"class":916},"-2",[324,87168,52214],{"class":863},[324,87170,2025],{"class":867},[324,87172,87173,87175,87177,87179],{"class":326,"line":3345},[324,87174,62747],{"class":916},[324,87176,52159],{"class":867},[324,87178,62752],{"class":916},[324,87180,2025],{"class":867},[324,87182,87183],{"class":326,"line":3350},[324,87184,2917],{"class":867},[324,87186,87187],{"class":326,"line":8677},[324,87188,488],{"emptyLinePlaceholder":487},[324,87190,87191,87193,87196],{"class":326,"line":8701},[324,87192,86872],{"class":734},[324,87194,87195],{"class":734}," .body",[324,87197,16301],{"class":867},[324,87199,87200,87202,87204,87206],{"class":326,"line":8706},[324,87201,58008],{"class":916},[324,87203,52159],{"class":867},[324,87205,52314],{"class":916},[324,87207,2025],{"class":867},[324,87209,87210,87212,87214,87216,87218],{"class":326,"line":8712},[324,87211,55417],{"class":916},[324,87213,52159],{"class":867},[324,87215,1310],{"class":916},[324,87217,52214],{"class":863},[324,87219,2025],{"class":867},[324,87221,87222],{"class":326,"line":8739},[324,87223,2917],{"class":867},[324,87225,87226],{"class":326,"line":8744},[324,87227,488],{"emptyLinePlaceholder":487},[324,87229,87230,87232,87235],{"class":326,"line":8750},[324,87231,86872],{"class":734},[324,87233,87234],{"class":734}," .footer",[324,87236,16301],{"class":867},[324,87238,87239,87241,87243,87245],{"class":326,"line":8762},[324,87240,55731],{"class":916},[324,87242,52159],{"class":867},[324,87244,52199],{"class":916},[324,87246,2025],{"class":867},[324,87248,87249,87251,87253,87255],{"class":326,"line":8774},[324,87250,55742],{"class":916},[324,87252,52159],{"class":867},[324,87254,52302],{"class":916},[324,87256,2025],{"class":867},[324,87258,87259,87261,87263,87265,87267],{"class":326,"line":8786},[324,87260,55417],{"class":916},[324,87262,52159],{"class":867},[324,87264,1310],{"class":916},[324,87266,52214],{"class":863},[324,87268,2025],{"class":867},[324,87270,87271],{"class":326,"line":10445},[324,87272,2917],{"class":867},[324,87274,87275],{"class":326,"line":10470},[324,87276,488],{"emptyLinePlaceholder":487},[324,87278,87279,87281,87283,87285],{"class":326,"line":10493},[324,87280,86872],{"class":734},[324,87282,87234],{"class":734},[324,87284,2130],{"class":52022},[324,87286,16301],{"class":867},[324,87288,87289,87291,87293,87295,87297,87299,87301],{"class":326,"line":10517},[324,87290,55417],{"class":916},[324,87292,52159],{"class":867},[324,87294,938],{"class":916},[324,87296,52214],{"class":863},[324,87298,2813],{"class":916},[324,87300,52214],{"class":863},[324,87302,2025],{"class":867},[324,87304,87305,87307,87309,87312],{"class":326,"line":10522},[324,87306,62443],{"class":916},[324,87308,52159],{"class":867},[324,87310,87311],{"class":916},"#ccc",[324,87313,2025],{"class":867},[324,87315,87316,87318,87320,87322],{"class":326,"line":10527},[324,87317,64692],{"class":916},[324,87319,52159],{"class":867},[324,87321,55459],{"class":916},[324,87323,2025],{"class":867},[324,87325,87326,87328,87330,87332],{"class":326,"line":10532},[324,87327,58138],{"class":916},[324,87329,52159],{"class":867},[324,87331,61564],{"class":916},[324,87333,2025],{"class":867},[324,87335,87336,87338,87340,87342,87344],{"class":326,"line":10541},[324,87337,55856],{"class":916},[324,87339,52159],{"class":867},[324,87341,944],{"class":916},[324,87343,52214],{"class":863},[324,87345,2025],{"class":867},[324,87347,87348,87350,87352,87354,87356],{"class":326,"line":10546},[324,87349,62472],{"class":916},[324,87351,52159],{"class":867},[324,87353,1310],{"class":916},[324,87355,52214],{"class":863},[324,87357,2025],{"class":867},[324,87359,87360,87362,87364,87366,87368],{"class":326,"line":10552},[324,87361,55644],{"class":916},[324,87363,52159],{"class":867},[324,87365,1413],{"class":916},[324,87367,52214],{"class":863},[324,87369,2025],{"class":867},[324,87371,87372],{"class":326,"line":10573},[324,87373,2917],{"class":867},[324,87375,87376],{"class":326,"line":10579},[324,87377,488],{"emptyLinePlaceholder":487},[324,87379,87380,87382,87384,87386,87389],{"class":326,"line":10593},[324,87381,86872],{"class":734},[324,87383,87234],{"class":734},[324,87385,2130],{"class":52022},[324,87387,87388],{"class":734},".submit",[324,87390,16301],{"class":867},[324,87392,87393,87395,87397,87400],{"class":326,"line":10599},[324,87394,55606],{"class":916},[324,87396,52159],{"class":867},[324,87398,87399],{"class":916},"#369",[324,87401,2025],{"class":867},[324,87403,87404],{"class":326,"line":10626},[324,87405,2917],{"class":867},[324,87407,87408,87410,87412],{"class":326,"line":10635},[324,87409,53139],{"class":867},[324,87411,775],{"class":52022},[324,87413,52029],{"class":867},[324,87415,87416,87418,87420],{"class":326,"line":10641},[324,87417,52507],{"class":867},[324,87419,52056],{"class":52022},[324,87421,52029],{"class":867},[324,87423,87424],{"class":326,"line":10649},[324,87425,488],{"emptyLinePlaceholder":487},[324,87427,87428,87430,87432],{"class":326,"line":10654},[324,87429,1774],{"class":867},[324,87431,52522],{"class":52022},[324,87433,52029],{"class":867},[324,87435,87436,87438,87440,87442,87444,87447,87450,87452],{"class":326,"line":17333},[324,87437,52866],{"class":867},[324,87439,54609],{"class":52022},[324,87441,15688],{"class":734},[324,87443,913],{"class":867},[324,87445,87446],{"class":738},"\"delete\"",[324,87448,87449],{"class":867},">删除\u003C\u002F",[324,87451,54609],{"class":52022},[324,87453,52029],{"class":867},[324,87455,87456,87458,87460,87462,87464,87467,87470,87472],{"class":326,"line":17339},[324,87457,52866],{"class":867},[324,87459,54609],{"class":52022},[324,87461,15688],{"class":734},[324,87463,913],{"class":867},[324,87465,87466],{"class":738},"\"login\"",[324,87468,87469],{"class":867},">登录\u003C\u002F",[324,87471,54609],{"class":52022},[324,87473,52029],{"class":867},[324,87475,87476,87478,87480],{"class":326,"line":17362},[324,87477,52866],{"class":867},[324,87479,52535],{"class":52022},[324,87481,52029],{"class":867},[324,87483,87484],{"class":326,"line":17368},[324,87485,87486],{"class":772},"    \u002F\u002F 1.Model 构造函数的封装  模态框\n",[324,87488,87489,87491,87494,87496,87498,87500,87502,87504,87507,87509,87511],{"class":326,"line":17391},[324,87490,70806],{"class":863},[324,87492,87493],{"class":734}," Modal",[324,87495,868],{"class":867},[324,87497,52129],{"class":5945},[324,87499,14293],{"class":863},[324,87501,70652],{"class":738},[324,87503,13164],{"class":867},[324,87505,87506],{"class":5945},"message",[324,87508,14293],{"class":863},[324,87510,70652],{"class":738},[324,87512,13171],{"class":867},[324,87514,87515],{"class":326,"line":17405},[324,87516,87517],{"class":772},"      \u002F\u002F 创建Model 模态框盒子\n",[324,87519,87520],{"class":326,"line":17425},[324,87521,87522],{"class":772},"      \u002F\u002F 1.1 创建div标签\n",[324,87524,87525,87527,87530,87532,87534,87536,87538,87540],{"class":326,"line":17431},[324,87526,70773],{"class":916},[324,87528,87529],{"class":867},".modalBox ",[324,87531,913],{"class":863},[324,87533,55118],{"class":867},[324,87535,70873],{"class":734},[324,87537,868],{"class":867},[324,87539,82653],{"class":738},[324,87541,874],{"class":867},[324,87543,87544],{"class":326,"line":17442},[324,87545,87546],{"class":772},"      \u002F\u002F 1.2 给div 添加类名为model\n",[324,87548,87549,87551,87554,87556],{"class":326,"line":17465},[324,87550,70773],{"class":916},[324,87552,87553],{"class":867},".modalBox.className ",[324,87555,913],{"class":863},[324,87557,87558],{"class":738}," 'modal'\n",[324,87560,87561],{"class":326,"line":17487},[324,87562,87563],{"class":772},"      \u002F\u002F 1.3 model盒子内部填充2个div标签并且修改文字内容 \n",[324,87565,87566,87568,87571,87573],{"class":326,"line":17492},[324,87567,70773],{"class":916},[324,87569,87570],{"class":867},".modalBox.innerHTML ",[324,87572,913],{"class":863},[324,87574,70890],{"class":738},[324,87576,87577,87580,87582],{"class":326,"line":17498},[324,87578,87579],{"class":738},"        \u003Cdiv class=\"header\">${",[324,87581,52129],{"class":867},[324,87583,87584],{"class":738},"}\u003Ci>x\u003C\u002Fi>\u003C\u002Fdiv>\n",[324,87586,87587,87590,87592],{"class":326,"line":17512},[324,87588,87589],{"class":738},"        \u003Cdiv class=\"body\">${",[324,87591,87506],{"class":867},[324,87593,87594],{"class":738},"}\u003C\u002Fdiv>\n",[324,87596,87597],{"class":326,"line":17525},[324,87598,87599],{"class":738},"      `\n",[324,87601,87602],{"class":326,"line":17530},[324,87603,87604],{"class":772},"      \u002F\u002F console.log(this.modalBox)\n",[324,87606,87607],{"class":326,"line":17544},[324,87608,2917],{"class":867},[324,87610,87611],{"class":326,"line":17549},[324,87612,87613],{"class":772},"    \u002F\u002F new Model('温馨提示', '您没有删除权限操作')\n",[324,87615,87616],{"class":326,"line":17555},[324,87617,87618],{"class":772},"    \u002F\u002F new Model('友情提示', '您还没有登录呢')\n",[324,87620,87621],{"class":326,"line":17560},[324,87622,87623],{"class":772},"    \u002F\u002F 2.给构造函数原型对象挂载open方法\n",[324,87625,87626,87629,87631,87633,87635,87638,87640,87642],{"class":326,"line":17574},[324,87627,87628],{"class":916},"    Modal",[324,87630,1422],{"class":867},[324,87632,86301],{"class":916},[324,87634,1422],{"class":867},[324,87636,87637],{"class":734},"open",[324,87639,14293],{"class":863},[324,87641,59640],{"class":863},[324,87643,55174],{"class":867},[324,87645,87646],{"class":326,"line":17579},[324,87647,87648],{"class":772},"      \u002F\u002F 准备open显示的时候，先判断页面中有没有modal盒子，有就移除，没有加添加\n",[324,87650,87651,87653,87656,87658,87660,87662,87664,87667],{"class":326,"line":17584},[324,87652,58950],{"class":863},[324,87654,87655],{"class":916}," box",[324,87657,14293],{"class":863},[324,87659,55118],{"class":867},[324,87661,55121],{"class":734},[324,87663,868],{"class":867},[324,87665,87666],{"class":738},"'.modal'",[324,87668,874],{"class":867},[324,87670,87671],{"class":326,"line":17598},[324,87672,87673],{"class":772},"      \u002F\u002F 使用逻辑中断来判断   若前边为假则中断，box.remove()就不执行了，就接着执行后边的代码；如果box为真，则执行box.remove()，再接着执行后边的代码\n",[324,87675,87676,87679,87681,87684,87686],{"class":326,"line":17610},[324,87677,87678],{"class":867},"      box ",[324,87680,2446],{"class":863},[324,87682,87683],{"class":867}," box.",[324,87685,57728],{"class":734},[324,87687,2706],{"class":867},[324,87689,87690],{"class":326,"line":17615},[324,87691,87692],{"class":772},"      \u002F\u002F 主要这个方法不要用箭头函数\n",[324,87694,87695],{"class":326,"line":17628},[324,87696,87697],{"class":772},"      \u002F\u002F 把刚才创建的modelBox 显示到页面body中\n",[324,87699,87700],{"class":326,"line":17633},[324,87701,87702],{"class":772},"      \u002F\u002F append可以增加对象\n",[324,87704,87705,87708,87711,87713,87716],{"class":326,"line":17638},[324,87706,87707],{"class":867},"      document.body.",[324,87709,87710],{"class":734},"append",[324,87712,868],{"class":867},[324,87714,87715],{"class":916},"this",[324,87717,87718],{"class":867},".modalBox)\n",[324,87720,87721],{"class":326,"line":17643},[324,87722,488],{"emptyLinePlaceholder":487},[324,87724,87725],{"class":326,"line":17656},[324,87726,87727],{"class":772},"      \u002F\u002F要等到盒子显示出来，就可以绑定点击事件了\n",[324,87729,87730,87732,87735,87737,87739,87742,87744,87746,87748,87750,87753,87755],{"class":326,"line":17661},[324,87731,70773],{"class":916},[324,87733,87734],{"class":867},".modalBox.",[324,87736,55121],{"class":734},[324,87738,868],{"class":867},[324,87740,87741],{"class":738},"'i'",[324,87743,31548],{"class":867},[324,87745,58535],{"class":734},[324,87747,868],{"class":867},[324,87749,58540],{"class":738},[324,87751,87752],{"class":867},", () ",[324,87754,85444],{"class":863},[324,87756,16301],{"class":867},[324,87758,87759],{"class":326,"line":33355},[324,87760,87761],{"class":772},"        \u002F\u002F 这个地方需要用到箭头函数\n",[324,87763,87764],{"class":326,"line":33361},[324,87765,87766],{"class":772},"        \u002F\u002F 这个this是指向的是上上级 是实例对象\n",[324,87768,87769],{"class":326,"line":33367},[324,87770,87771],{"class":772},"        \u002F\u002F 如果不用箭头函数的话，就指向的是i这个DOM对象了\n",[324,87773,87774,87776,87778,87781],{"class":326,"line":33373},[324,87775,65448],{"class":916},[324,87777,1422],{"class":867},[324,87779,87780],{"class":734},"close",[324,87782,2706],{"class":867},[324,87784,87785],{"class":326,"line":33379},[324,87786,65537],{"class":867},[324,87788,87789],{"class":326,"line":33390},[324,87790,2917],{"class":867},[324,87792,87793],{"class":326,"line":33396},[324,87794,488],{"emptyLinePlaceholder":487},[324,87796,87797],{"class":326,"line":33416},[324,87798,87799],{"class":772},"    \u002F\u002F 测试一下 点击 删除按钮\n",[324,87801,87802,87804,87806,87808,87811,87813,87815,87817,87819,87821,87823],{"class":326,"line":33422},[324,87803,53129],{"class":867},[324,87805,55121],{"class":734},[324,87807,868],{"class":867},[324,87809,87810],{"class":738},"'#delete'",[324,87812,31548],{"class":867},[324,87814,58535],{"class":734},[324,87816,868],{"class":867},[324,87818,58540],{"class":738},[324,87820,87752],{"class":867},[324,87822,85444],{"class":863},[324,87824,16301],{"class":867},[324,87826,87827],{"class":326,"line":33433},[324,87828,87829],{"class":772},"      \u002F\u002F 先调用Model构造函数\n",[324,87831,87832,87834,87837,87839,87841,87843,87845,87848,87850,87853],{"class":326,"line":33439},[324,87833,58950],{"class":863},[324,87835,87836],{"class":916}," del",[324,87838,14293],{"class":863},[324,87840,12307],{"class":863},[324,87842,87493],{"class":734},[324,87844,868],{"class":867},[324,87846,87847],{"class":738},"'温馨的提示'",[324,87849,13164],{"class":867},[324,87851,87852],{"class":738},"'您没有删除权限操作'",[324,87854,874],{"class":867},[324,87856,87857],{"class":326,"line":33445},[324,87858,87859],{"class":772},"      \u002F\u002F 实例对象调用open方法\n",[324,87861,87862,87865,87867],{"class":326,"line":33451},[324,87863,87864],{"class":867},"      del.",[324,87866,87637],{"class":734},[324,87868,2706],{"class":867},[324,87870,87871],{"class":326,"line":33457},[324,87872,34183],{"class":867},[324,87874,87875],{"class":326,"line":33463},[324,87876,87877],{"class":772},"    \u002F\u002F 测试一下 点击 登录按钮\n",[324,87879,87880,87882,87884,87886,87889,87891,87893,87895,87897,87899,87901],{"class":326,"line":33469},[324,87881,53129],{"class":867},[324,87883,55121],{"class":734},[324,87885,868],{"class":867},[324,87887,87888],{"class":738},"'#login'",[324,87890,31548],{"class":867},[324,87892,58535],{"class":734},[324,87894,868],{"class":867},[324,87896,58540],{"class":738},[324,87898,87752],{"class":867},[324,87900,85444],{"class":863},[324,87902,16301],{"class":867},[324,87904,87905],{"class":326,"line":33475},[324,87906,87829],{"class":772},[324,87908,87909,87911,87914,87916,87918,87920,87922,87925,87927,87930],{"class":326,"line":33495},[324,87910,58950],{"class":863},[324,87912,87913],{"class":916}," log",[324,87915,14293],{"class":863},[324,87917,12307],{"class":863},[324,87919,87493],{"class":734},[324,87921,868],{"class":867},[324,87923,87924],{"class":738},"'友情提示'",[324,87926,13164],{"class":867},[324,87928,87929],{"class":738},"'您还没有登录呢'",[324,87931,874],{"class":867},[324,87933,87934],{"class":326,"line":33501},[324,87935,87859],{"class":772},[324,87937,87938,87941,87943],{"class":326,"line":33517},[324,87939,87940],{"class":867},"      log.",[324,87942,87637],{"class":734},[324,87944,2706],{"class":867},[324,87946,87947],{"class":326,"line":33523},[324,87948,34183],{"class":867},[324,87950,87951],{"class":326,"line":33537},[324,87952,87953],{"class":772},"    \u002F\u002F 3.给构造函数原型对象挂载close方法\n",[324,87955,87956,87958,87960,87962,87964,87966,87968,87970],{"class":326,"line":33543},[324,87957,87628],{"class":916},[324,87959,1422],{"class":867},[324,87961,86301],{"class":916},[324,87963,1422],{"class":867},[324,87965,87780],{"class":734},[324,87967,14293],{"class":863},[324,87969,59640],{"class":863},[324,87971,55174],{"class":867},[324,87973,87974,87976,87978,87980],{"class":326,"line":33558},[324,87975,70773],{"class":916},[324,87977,87734],{"class":867},[324,87979,57728],{"class":734},[324,87981,2706],{"class":867},[324,87983,87984],{"class":326,"line":33564},[324,87985,2917],{"class":867},[324,87987,87988,87990,87992],{"class":326,"line":33573},[324,87989,53139],{"class":867},[324,87991,52535],{"class":52022},[324,87993,52029],{"class":867},[324,87995,87996,87998,88000],{"class":326,"line":33579},[324,87997,52507],{"class":867},[324,87999,52522],{"class":52022},[324,88001,52029],{"class":867},[324,88003,88004],{"class":326,"line":33588},[324,88005,488],{"emptyLinePlaceholder":487},[324,88007,88008,88010,88012],{"class":326,"line":33594},[324,88009,52507],{"class":867},[324,88011,51357],{"class":52022},[324,88013,52029],{"class":867},[19,88015,88016],{},[48,88017],{"alt":50,"src":88018},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-326.png",[14,88020,88022],{"id":88021},"_414-深浅拷贝","4.14 深浅拷贝",[35,88024,88026],{"id":88025},"_4141-浅拷贝","4.14.1 浅拷贝",[19,88028,88029],{},[48,88030],{"alt":50,"src":88031},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-327.png",[19,88033,88034],{},"展开运算符也可以对对象使用，将对象的键值取出放到新对象中",[19,88036,88037],{},[48,88038],{"alt":50,"src":88039},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-328.png",[19,88041,88042],{},[48,88043],{"alt":50,"src":88044},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-329.png",[19,88046,88047],{},"下边这个情况的时候，浅拷贝只拷贝外面这一层，外面这一层是把值给了这个新对象，里层的这个对象在拷贝的时候还是拷贝的地址，所以一改里层对象的值，原来的对象和拷贝的对象的值就都变了，这样拷贝就会有问题",[19,88049,88050],{},[48,88051],{"alt":50,"src":88052},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-330.png",[19,88054,12061],{},[19,88056,88057],{},[48,88058],{"alt":50,"src":88059},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-331.png",[35,88061,88063],{"id":88062},"_4142-深拷贝","4.14.2 深拷贝",[19,88065,88066],{},"深拷贝：拷贝的是对象，不是地址",[19,88068,88069],{},"常用的三种方法：",[192,88071,88072,88075,88078],{},[195,88073,88074],{},"通过递归实现深拷贝",[195,88076,88077],{},"lodash\u002FcloneDeep",[195,88079,88080],{},"通过JSON.stringify()实现",[151,88082,88084],{"id":88083},"_41421-递归函数","4.14.2.1 递归函数",[19,88086,88087],{},[48,88088],{"alt":50,"src":88089},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-332.png",[192,88091,88092],{},[195,88093,88094],{},"死递归占溢出：",[316,88096,88098],{"className":53789,"code":88097,"language":53791,"meta":50,"style":50},"\u003Cbody>\n  \u003Cscript>\n    function fn() {\n      fn()\n    }\n    fn()\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[269,88099,88100,88108,88116,88120,88125,88129,88134,88142],{"__ignoreMap":50},[324,88101,88102,88104,88106],{"class":326,"line":327},[324,88103,1774],{"class":867},[324,88105,52522],{"class":52022},[324,88107,52029],{"class":867},[324,88109,88110,88112,88114],{"class":326,"line":203},[324,88111,52866],{"class":867},[324,88113,52535],{"class":52022},[324,88115,52029],{"class":867},[324,88117,88118],{"class":326,"line":338},[324,88119,77865],{"class":867},[324,88121,88122],{"class":326,"line":344},[324,88123,88124],{"class":867},"      fn()\n",[324,88126,88127],{"class":326,"line":484},[324,88128,2917],{"class":867},[324,88130,88131],{"class":326,"line":491},[324,88132,88133],{"class":867},"    fn()\n",[324,88135,88136,88138,88140],{"class":326,"line":496},[324,88137,53139],{"class":867},[324,88139,52535],{"class":52022},[324,88141,52029],{"class":867},[324,88143,88144,88146,88148],{"class":326,"line":502},[324,88145,52507],{"class":867},[324,88147,52522],{"class":52022},[324,88149,52029],{"class":867},[192,88151,88152],{"start":203},[195,88153,88154],{},"递归函数要加判断条件：",[19,88156,88157],{},[48,88158],{"alt":50,"src":88159},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-333.png",[192,88161,88162],{"start":338},[195,88163,88164],{},"应用：利用递归函数实现setTimeout模拟setInterval效果",[316,88166,88168],{"className":51355,"code":88167,"language":51357,"meta":50,"style":50},"\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",[269,88169,88170,88180,88194,88198,88206,88220,88240,88252,88260,88264,88272,88284,88292,88300,88325,88337,88341,88348,88356,88364,88368],{"__ignoreMap":50},[324,88171,88172,88174,88176,88178],{"class":326,"line":327},[324,88173,52019],{"class":867},[324,88175,52023],{"class":52022},[324,88177,52026],{"class":734},[324,88179,52029],{"class":867},[324,88181,88182,88184,88186,88188,88190,88192],{"class":326,"line":203},[324,88183,1774],{"class":867},[324,88185,51357],{"class":52022},[324,88187,52038],{"class":734},[324,88189,913],{"class":867},[324,88191,52043],{"class":738},[324,88193,52029],{"class":867},[324,88195,88196],{"class":326,"line":338},[324,88197,488],{"emptyLinePlaceholder":487},[324,88199,88200,88202,88204],{"class":326,"line":344},[324,88201,1774],{"class":867},[324,88203,52056],{"class":52022},[324,88205,52029],{"class":867},[324,88207,88208,88210,88212,88214,88216,88218],{"class":326,"line":484},[324,88209,52866],{"class":867},[324,88211,52066],{"class":52022},[324,88213,52069],{"class":734},[324,88215,913],{"class":867},[324,88217,52074],{"class":738},[324,88219,52029],{"class":867},[324,88221,88222,88224,88226,88228,88230,88232,88234,88236,88238],{"class":326,"line":491},[324,88223,52866],{"class":867},[324,88225,52066],{"class":52022},[324,88227,15649],{"class":734},[324,88229,913],{"class":867},[324,88231,52113],{"class":738},[324,88233,52093],{"class":734},[324,88235,913],{"class":867},[324,88237,52120],{"class":738},[324,88239,52029],{"class":867},[324,88241,88242,88244,88246,88248,88250],{"class":326,"line":496},[324,88243,52866],{"class":867},[324,88245,52129],{"class":52022},[324,88247,52132],{"class":867},[324,88249,52129],{"class":52022},[324,88251,52029],{"class":867},[324,88253,88254,88256,88258],{"class":326,"line":502},[324,88255,52507],{"class":867},[324,88257,52056],{"class":52022},[324,88259,52029],{"class":867},[324,88261,88262],{"class":326,"line":508},[324,88263,488],{"emptyLinePlaceholder":487},[324,88265,88266,88268,88270],{"class":326,"line":514},[324,88267,1774],{"class":867},[324,88269,52522],{"class":52022},[324,88271,52029],{"class":867},[324,88273,88274,88276,88278,88280,88282],{"class":326,"line":2343},[324,88275,52866],{"class":867},[324,88277,52333],{"class":52022},[324,88279,56036],{"class":867},[324,88281,52333],{"class":52022},[324,88283,52029],{"class":867},[324,88285,88286,88288,88290],{"class":326,"line":2348},[324,88287,52866],{"class":867},[324,88289,52535],{"class":52022},[324,88291,52029],{"class":867},[324,88293,88294,88296,88298],{"class":326,"line":2354},[324,88295,70806],{"class":863},[324,88297,74495],{"class":734},[324,88299,11582],{"class":867},[324,88301,88302,88304,88306,88308,88310,88312,88314,88316,88318,88320,88323],{"class":326,"line":2359},[324,88303,56493],{"class":867},[324,88305,55121],{"class":734},[324,88307,868],{"class":867},[324,88309,82653],{"class":738},[324,88311,74971],{"class":867},[324,88313,913],{"class":863},[324,88315,12307],{"class":863},[324,88317,74511],{"class":734},[324,88319,17990],{"class":867},[324,88321,88322],{"class":734},"toLocaleString",[324,88324,2706],{"class":867},[324,88326,88327,88330,88333,88335],{"class":326,"line":2373},[324,88328,88329],{"class":734},"      setTimeout",[324,88331,88332],{"class":867},"(getTime, ",[324,88334,7139],{"class":916},[324,88336,874],{"class":867},[324,88338,88339],{"class":326,"line":2378},[324,88340,2917],{"class":867},[324,88342,88343,88346],{"class":326,"line":2384},[324,88344,88345],{"class":734},"    getTime",[324,88347,2706],{"class":867},[324,88349,88350,88352,88354],{"class":326,"line":2405},[324,88351,53139],{"class":867},[324,88353,52535],{"class":52022},[324,88355,52029],{"class":867},[324,88357,88358,88360,88362],{"class":326,"line":2410},[324,88359,52507],{"class":867},[324,88361,52522],{"class":52022},[324,88363,52029],{"class":867},[324,88365,88366],{"class":326,"line":2424},[324,88367,488],{"emptyLinePlaceholder":487},[324,88369,88370,88372,88374],{"class":326,"line":2429},[324,88371,52507],{"class":867},[324,88373,51357],{"class":52022},[324,88375,52029],{"class":867},[19,88377,88378],{},[48,88379],{"alt":50,"src":88380},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-334.png",[192,88382,88383],{"start":344},[195,88384,88074],{},[19,88386,88387],{},[48,88388],{"alt":50,"src":88389},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-335.png",[19,88391,88392],{},"现在的这个递归函数还是一个浅拷贝的函数，通过将旧值给新值的方式进行，简单数据直接就是把值给他了，但是复杂数据是把他的地址给他",[19,88394,39911],{},[19,88396,88397],{},"这个是简易版的递归函数深拷贝",[19,88399,88400],{},"一定要注意先数组再对象，因为万物皆可对象",[316,88402,88404],{"className":51355,"code":88403,"language":51357,"meta":50,"style":50},"\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",[269,88405,88406,88416,88430,88434,88442,88456,88476,88488,88496,88500,88508,88516,88526,88535,88543,88559,88563,88571,88575,88579,88591,88596,88615,88631,88636,88641,88646,88661,88666,88671,88680,88688,88705,88713,88719,88727,88732,88737,88746,88750,88754,88758,88769,88778,88788,88802,88812,88820,88828,88836,88840],{"__ignoreMap":50},[324,88407,88408,88410,88412,88414],{"class":326,"line":327},[324,88409,52019],{"class":867},[324,88411,52023],{"class":52022},[324,88413,52026],{"class":734},[324,88415,52029],{"class":867},[324,88417,88418,88420,88422,88424,88426,88428],{"class":326,"line":203},[324,88419,1774],{"class":867},[324,88421,51357],{"class":52022},[324,88423,52038],{"class":734},[324,88425,913],{"class":867},[324,88427,52043],{"class":738},[324,88429,52029],{"class":867},[324,88431,88432],{"class":326,"line":338},[324,88433,488],{"emptyLinePlaceholder":487},[324,88435,88436,88438,88440],{"class":326,"line":344},[324,88437,1774],{"class":867},[324,88439,52056],{"class":52022},[324,88441,52029],{"class":867},[324,88443,88444,88446,88448,88450,88452,88454],{"class":326,"line":484},[324,88445,52866],{"class":867},[324,88447,52066],{"class":52022},[324,88449,52069],{"class":734},[324,88451,913],{"class":867},[324,88453,52074],{"class":738},[324,88455,52029],{"class":867},[324,88457,88458,88460,88462,88464,88466,88468,88470,88472,88474],{"class":326,"line":491},[324,88459,52866],{"class":867},[324,88461,52066],{"class":52022},[324,88463,15649],{"class":734},[324,88465,913],{"class":867},[324,88467,52113],{"class":738},[324,88469,52093],{"class":734},[324,88471,913],{"class":867},[324,88473,52120],{"class":738},[324,88475,52029],{"class":867},[324,88477,88478,88480,88482,88484,88486],{"class":326,"line":496},[324,88479,52866],{"class":867},[324,88481,52129],{"class":52022},[324,88483,52132],{"class":867},[324,88485,52129],{"class":52022},[324,88487,52029],{"class":867},[324,88489,88490,88492,88494],{"class":326,"line":502},[324,88491,52507],{"class":867},[324,88493,52056],{"class":52022},[324,88495,52029],{"class":867},[324,88497,88498],{"class":326,"line":508},[324,88499,488],{"emptyLinePlaceholder":487},[324,88501,88502,88504,88506],{"class":326,"line":514},[324,88503,1774],{"class":867},[324,88505,52522],{"class":52022},[324,88507,52029],{"class":867},[324,88509,88510,88512,88514],{"class":326,"line":2343},[324,88511,52866],{"class":867},[324,88513,52535],{"class":52022},[324,88515,52029],{"class":867},[324,88517,88518,88520,88522,88524],{"class":326,"line":2348},[324,88519,11950],{"class":863},[324,88521,70693],{"class":916},[324,88523,14293],{"class":863},[324,88525,16301],{"class":867},[324,88527,88528,88530,88533],{"class":326,"line":2354},[324,88529,72338],{"class":867},[324,88531,88532],{"class":738},"'pink'",[324,88534,32188],{"class":867},[324,88536,88537,88539,88541],{"class":326,"line":2359},[324,88538,72348],{"class":867},[324,88540,1514],{"class":916},[324,88542,32188],{"class":867},[324,88544,88545,88548,88551,88553,88556],{"class":326,"line":2373},[324,88546,88547],{"class":867},"      hobby: [",[324,88549,88550],{"class":738},"'乒乓球'",[324,88552,13164],{"class":867},[324,88554,88555],{"class":738},"'足球'",[324,88557,88558],{"class":867},"],\n",[324,88560,88561],{"class":326,"line":2378},[324,88562,78594],{"class":867},[324,88564,88565,88568],{"class":326,"line":2384},[324,88566,88567],{"class":867},"        baby: ",[324,88569,88570],{"class":738},"'小pink'\n",[324,88572,88573],{"class":326,"line":2405},[324,88574,53120],{"class":867},[324,88576,88577],{"class":326,"line":2410},[324,88578,2917],{"class":867},[324,88580,88581,88583,88586,88588],{"class":326,"line":2424},[324,88582,11950],{"class":863},[324,88584,88585],{"class":916}," o",[324,88587,14293],{"class":863},[324,88589,88590],{"class":867}," {}\n",[324,88592,88593],{"class":326,"line":2429},[324,88594,88595],{"class":772},"    \u002F\u002F 拷贝函数\n",[324,88597,88598,88600,88603,88605,88608,88610,88613],{"class":326,"line":2458},[324,88599,70806],{"class":863},[324,88601,88602],{"class":734}," deepCopy",[324,88604,868],{"class":867},[324,88606,88607],{"class":5945},"newObj",[324,88609,13164],{"class":867},[324,88611,88612],{"class":5945},"oldObj",[324,88614,13171],{"class":867},[324,88616,88617,88619,88621,88623,88626,88628],{"class":326,"line":2463},[324,88618,53006],{"class":863},[324,88620,2389],{"class":867},[324,88622,52569],{"class":863},[324,88624,88625],{"class":867}," k ",[324,88627,26767],{"class":863},[324,88629,88630],{"class":867}," oldObj) {\n",[324,88632,88633],{"class":326,"line":2480},[324,88634,88635],{"class":772},"        \u002F\u002F 处理数组的问题\n",[324,88637,88638],{"class":326,"line":2485},[324,88639,88640],{"class":772},"        \u002F\u002F 判断是否属于数组\n",[324,88642,88643],{"class":326,"line":2490},[324,88644,88645],{"class":772},"        \u002F\u002F 一定先写数组，因为万物皆对象，数组也属于对象，把对象写前边的话，数组就执行对象的操作了，就无法正常运行了\n",[324,88647,88648,88650,88653,88656,88659],{"class":326,"line":2495},[324,88649,3226],{"class":863},[324,88651,88652],{"class":867}," (oldObj[k] ",[324,88654,88655],{"class":863},"instanceof",[324,88657,88658],{"class":734}," Array",[324,88660,13171],{"class":867},[324,88662,88663],{"class":326,"line":2509},[324,88664,88665],{"class":772},"          \u002F\u002F newObj[k]  接收的内容放到[]\n",[324,88667,88668],{"class":326,"line":2514},[324,88669,88670],{"class":772},"          \u002F\u002F oldObj[k]  就是['乒乓球','足球']\n",[324,88672,88673,88676,88678],{"class":326,"line":3306},[324,88674,88675],{"class":867},"          newObj[k] ",[324,88677,913],{"class":863},[324,88679,52560],{"class":867},[324,88681,88682,88685],{"class":326,"line":3320},[324,88683,88684],{"class":734},"          deepCopy",[324,88686,88687],{"class":867},"(newObj[k], oldObj[k])\n",[324,88689,88690,88692,88694,88696,88698,88700,88703],{"class":326,"line":3328},[324,88691,80802],{"class":867},[324,88693,2432],{"class":863},[324,88695,2435],{"class":863},[324,88697,88652],{"class":867},[324,88699,88655],{"class":863},[324,88701,88702],{"class":734}," Object",[324,88704,13171],{"class":867},[324,88706,88707,88709,88711],{"class":326,"line":3333},[324,88708,88675],{"class":867},[324,88710,913],{"class":863},[324,88712,88590],{"class":867},[324,88714,88715,88717],{"class":326,"line":3339},[324,88716,88684],{"class":734},[324,88718,88687],{"class":867},[324,88720,88721,88723,88725],{"class":326,"line":3345},[324,88722,80802],{"class":867},[324,88724,2432],{"class":863},[324,88726,16301],{"class":867},[324,88728,88729],{"class":326,"line":3350},[324,88730,88731],{"class":772},"          \u002F\u002F  k 是属性名  属性值为oldObj[k]\n",[324,88733,88734],{"class":326,"line":8677},[324,88735,88736],{"class":772},"          \u002F\u002F newObj[k]与newObj写法是等价的\n",[324,88738,88739,88741,88743],{"class":326,"line":8701},[324,88740,88675],{"class":867},[324,88742,913],{"class":863},[324,88744,88745],{"class":867}," oldObj[k]\n",[324,88747,88748],{"class":326,"line":8706},[324,88749,3258],{"class":867},[324,88751,88752],{"class":326,"line":8712},[324,88753,53120],{"class":867},[324,88755,88756],{"class":326,"line":8739},[324,88757,2917],{"class":867},[324,88759,88760,88763,88766],{"class":326,"line":8744},[324,88761,88762],{"class":734},"    deepCopy",[324,88764,88765],{"class":867},"(o, obj) ",[324,88767,88768],{"class":772},"\u002F\u002F函数调用 两个参数 o是新对象，obj是旧对象\n",[324,88770,88771,88773,88775],{"class":326,"line":8750},[324,88772,74475],{"class":867},[324,88774,58969],{"class":734},[324,88776,88777],{"class":867},"(o)\n",[324,88779,88780,88783,88785],{"class":326,"line":8762},[324,88781,88782],{"class":867},"    o.age ",[324,88784,913],{"class":863},[324,88786,88787],{"class":916}," 20\n",[324,88789,88790,88793,88795,88797,88799],{"class":326,"line":8774},[324,88791,88792],{"class":867},"    o.hobby[",[324,88794,1056],{"class":916},[324,88796,5172],{"class":867},[324,88798,913],{"class":863},[324,88800,88801],{"class":738}," '篮球'\n",[324,88803,88804,88807,88809],{"class":326,"line":8786},[324,88805,88806],{"class":867},"    o.family ",[324,88808,913],{"class":863},[324,88810,88811],{"class":738}," '老pink'\n",[324,88813,88814,88816,88818],{"class":326,"line":10445},[324,88815,74475],{"class":867},[324,88817,58969],{"class":734},[324,88819,70758],{"class":867},[324,88821,88822,88824,88826],{"class":326,"line":10470},[324,88823,53139],{"class":867},[324,88825,52535],{"class":52022},[324,88827,52029],{"class":867},[324,88829,88830,88832,88834],{"class":326,"line":10493},[324,88831,52507],{"class":867},[324,88833,52522],{"class":52022},[324,88835,52029],{"class":867},[324,88837,88838],{"class":326,"line":10517},[324,88839,488],{"emptyLinePlaceholder":487},[324,88841,88842,88844,88846],{"class":326,"line":10522},[324,88843,52507],{"class":867},[324,88845,51357],{"class":52022},[324,88847,52029],{"class":867},[19,88849,88850],{},[48,88851],{"alt":50,"src":88852},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-336.png",[151,88854,88856,88857],{"id":88855},"_41422-js库lodash里面clonedeep内部实现了深拷贝","4.14.2.2 ",[116,88858,88859],{},"js库lodash里面cloneDeep内部实现了深拷贝",[19,88861,88862],{},[25,88863,88864],{"href":88864,"rel":88865},"https:\u002F\u002Fwww.lodashjs.com\u002F",[29],[19,88867,88868],{},"lodash里边的方法都要加上一个下划线_",[19,88870,88871],{},"_.cloneDeep()",[316,88873,88875],{"className":51355,"code":88874,"language":51357,"meta":50,"style":50},"\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",[269,88876,88877,88887,88901,88905,88913,88927,88947,88959,88967,88971,88979,88984,89003,89011,89021,89029,89037,89049,89053,89059,89063,89067,89083,89091,89100,89108,89116,89124,89128],{"__ignoreMap":50},[324,88878,88879,88881,88883,88885],{"class":326,"line":327},[324,88880,52019],{"class":867},[324,88882,52023],{"class":52022},[324,88884,52026],{"class":734},[324,88886,52029],{"class":867},[324,88888,88889,88891,88893,88895,88897,88899],{"class":326,"line":203},[324,88890,1774],{"class":867},[324,88892,51357],{"class":52022},[324,88894,52038],{"class":734},[324,88896,913],{"class":867},[324,88898,52043],{"class":738},[324,88900,52029],{"class":867},[324,88902,88903],{"class":326,"line":338},[324,88904,488],{"emptyLinePlaceholder":487},[324,88906,88907,88909,88911],{"class":326,"line":344},[324,88908,1774],{"class":867},[324,88910,52056],{"class":52022},[324,88912,52029],{"class":867},[324,88914,88915,88917,88919,88921,88923,88925],{"class":326,"line":484},[324,88916,52866],{"class":867},[324,88918,52066],{"class":52022},[324,88920,52069],{"class":734},[324,88922,913],{"class":867},[324,88924,52074],{"class":738},[324,88926,52029],{"class":867},[324,88928,88929,88931,88933,88935,88937,88939,88941,88943,88945],{"class":326,"line":491},[324,88930,52866],{"class":867},[324,88932,52066],{"class":52022},[324,88934,15649],{"class":734},[324,88936,913],{"class":867},[324,88938,52113],{"class":738},[324,88940,52093],{"class":734},[324,88942,913],{"class":867},[324,88944,52120],{"class":738},[324,88946,52029],{"class":867},[324,88948,88949,88951,88953,88955,88957],{"class":326,"line":496},[324,88950,52866],{"class":867},[324,88952,52129],{"class":52022},[324,88954,52132],{"class":867},[324,88956,52129],{"class":52022},[324,88958,52029],{"class":867},[324,88960,88961,88963,88965],{"class":326,"line":502},[324,88962,52507],{"class":867},[324,88964,52056],{"class":52022},[324,88966,52029],{"class":867},[324,88968,88969],{"class":326,"line":508},[324,88970,488],{"emptyLinePlaceholder":487},[324,88972,88973,88975,88977],{"class":326,"line":514},[324,88974,1774],{"class":867},[324,88976,52522],{"class":52022},[324,88978,52029],{"class":867},[324,88980,88981],{"class":326,"line":2343},[324,88982,88983],{"class":772},"  \u003C!-- 先引用这个库 -->\n",[324,88985,88986,88988,88990,88992,88994,88997,88999,89001],{"class":326,"line":2348},[324,88987,52866],{"class":867},[324,88989,52535],{"class":52022},[324,88991,55961],{"class":734},[324,88993,913],{"class":867},[324,88995,88996],{"class":738},"\"lodash.min.js\"",[324,88998,56036],{"class":867},[324,89000,52535],{"class":52022},[324,89002,52029],{"class":867},[324,89004,89005,89007,89009],{"class":326,"line":2354},[324,89006,52866],{"class":867},[324,89008,52535],{"class":52022},[324,89010,52029],{"class":867},[324,89012,89013,89015,89017,89019],{"class":326,"line":2359},[324,89014,11950],{"class":863},[324,89016,70693],{"class":916},[324,89018,14293],{"class":863},[324,89020,16301],{"class":867},[324,89022,89023,89025,89027],{"class":326,"line":2373},[324,89024,72338],{"class":867},[324,89026,88532],{"class":738},[324,89028,32188],{"class":867},[324,89030,89031,89033,89035],{"class":326,"line":2378},[324,89032,72348],{"class":867},[324,89034,1514],{"class":916},[324,89036,32188],{"class":867},[324,89038,89039,89041,89043,89045,89047],{"class":326,"line":2384},[324,89040,88547],{"class":867},[324,89042,88550],{"class":738},[324,89044,13164],{"class":867},[324,89046,88555],{"class":738},[324,89048,88558],{"class":867},[324,89050,89051],{"class":326,"line":2405},[324,89052,78594],{"class":867},[324,89054,89055,89057],{"class":326,"line":2410},[324,89056,88567],{"class":867},[324,89058,88570],{"class":738},[324,89060,89061],{"class":326,"line":2424},[324,89062,53120],{"class":867},[324,89064,89065],{"class":326,"line":2429},[324,89066,2917],{"class":867},[324,89068,89069,89071,89073,89075,89078,89081],{"class":326,"line":2458},[324,89070,11950],{"class":863},[324,89072,88585],{"class":916},[324,89074,14293],{"class":863},[324,89076,89077],{"class":867}," _.",[324,89079,89080],{"class":734},"cloneDeep",[324,89082,70758],{"class":867},[324,89084,89085,89087,89089],{"class":326,"line":2463},[324,89086,74475],{"class":867},[324,89088,58969],{"class":734},[324,89090,88777],{"class":867},[324,89092,89093,89096,89098],{"class":326,"line":2480},[324,89094,89095],{"class":867},"    o.family.baby ",[324,89097,913],{"class":863},[324,89099,88811],{"class":738},[324,89101,89102,89104,89106],{"class":326,"line":2485},[324,89103,74475],{"class":867},[324,89105,58969],{"class":734},[324,89107,70758],{"class":867},[324,89109,89110,89112,89114],{"class":326,"line":2490},[324,89111,53139],{"class":867},[324,89113,52535],{"class":52022},[324,89115,52029],{"class":867},[324,89117,89118,89120,89122],{"class":326,"line":2495},[324,89119,52507],{"class":867},[324,89121,52522],{"class":52022},[324,89123,52029],{"class":867},[324,89125,89126],{"class":326,"line":2509},[324,89127,488],{"emptyLinePlaceholder":487},[324,89129,89130,89132,89134],{"class":326,"line":2514},[324,89131,52507],{"class":867},[324,89133,51357],{"class":52022},[324,89135,52029],{"class":867},[19,89137,89138],{},[48,89139],{"alt":50,"src":89140},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-337.png",[151,89142,89144],{"id":89143},"_41423-利用json实现深拷贝","4.14.2.3 利用JSON实现深拷贝",[316,89146,89148],{"className":51355,"code":89147,"language":51357,"meta":50,"style":50},"\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",[269,89149,89150,89160,89174,89178,89186,89200,89220,89232,89240,89244,89252,89260,89270,89278,89286,89298,89302,89308,89312,89316,89321,89326,89331,89357,89365,89374,89382,89390,89398,89402],{"__ignoreMap":50},[324,89151,89152,89154,89156,89158],{"class":326,"line":327},[324,89153,52019],{"class":867},[324,89155,52023],{"class":52022},[324,89157,52026],{"class":734},[324,89159,52029],{"class":867},[324,89161,89162,89164,89166,89168,89170,89172],{"class":326,"line":203},[324,89163,1774],{"class":867},[324,89165,51357],{"class":52022},[324,89167,52038],{"class":734},[324,89169,913],{"class":867},[324,89171,52043],{"class":738},[324,89173,52029],{"class":867},[324,89175,89176],{"class":326,"line":338},[324,89177,488],{"emptyLinePlaceholder":487},[324,89179,89180,89182,89184],{"class":326,"line":344},[324,89181,1774],{"class":867},[324,89183,52056],{"class":52022},[324,89185,52029],{"class":867},[324,89187,89188,89190,89192,89194,89196,89198],{"class":326,"line":484},[324,89189,52866],{"class":867},[324,89191,52066],{"class":52022},[324,89193,52069],{"class":734},[324,89195,913],{"class":867},[324,89197,52074],{"class":738},[324,89199,52029],{"class":867},[324,89201,89202,89204,89206,89208,89210,89212,89214,89216,89218],{"class":326,"line":491},[324,89203,52866],{"class":867},[324,89205,52066],{"class":52022},[324,89207,15649],{"class":734},[324,89209,913],{"class":867},[324,89211,52113],{"class":738},[324,89213,52093],{"class":734},[324,89215,913],{"class":867},[324,89217,52120],{"class":738},[324,89219,52029],{"class":867},[324,89221,89222,89224,89226,89228,89230],{"class":326,"line":496},[324,89223,52866],{"class":867},[324,89225,52129],{"class":52022},[324,89227,52132],{"class":867},[324,89229,52129],{"class":52022},[324,89231,52029],{"class":867},[324,89233,89234,89236,89238],{"class":326,"line":502},[324,89235,52507],{"class":867},[324,89237,52056],{"class":52022},[324,89239,52029],{"class":867},[324,89241,89242],{"class":326,"line":508},[324,89243,488],{"emptyLinePlaceholder":487},[324,89245,89246,89248,89250],{"class":326,"line":514},[324,89247,1774],{"class":867},[324,89249,52522],{"class":52022},[324,89251,52029],{"class":867},[324,89253,89254,89256,89258],{"class":326,"line":2343},[324,89255,52866],{"class":867},[324,89257,52535],{"class":52022},[324,89259,52029],{"class":867},[324,89261,89262,89264,89266,89268],{"class":326,"line":2348},[324,89263,11950],{"class":863},[324,89265,70693],{"class":916},[324,89267,14293],{"class":863},[324,89269,16301],{"class":867},[324,89271,89272,89274,89276],{"class":326,"line":2354},[324,89273,72338],{"class":867},[324,89275,88532],{"class":738},[324,89277,32188],{"class":867},[324,89279,89280,89282,89284],{"class":326,"line":2359},[324,89281,72348],{"class":867},[324,89283,1514],{"class":916},[324,89285,32188],{"class":867},[324,89287,89288,89290,89292,89294,89296],{"class":326,"line":2373},[324,89289,88547],{"class":867},[324,89291,88550],{"class":738},[324,89293,13164],{"class":867},[324,89295,88555],{"class":738},[324,89297,88558],{"class":867},[324,89299,89300],{"class":326,"line":2378},[324,89301,78594],{"class":867},[324,89303,89304,89306],{"class":326,"line":2384},[324,89305,88567],{"class":867},[324,89307,88570],{"class":738},[324,89309,89310],{"class":326,"line":2405},[324,89311,53120],{"class":867},[324,89313,89314],{"class":326,"line":2410},[324,89315,2917],{"class":867},[324,89317,89318],{"class":326,"line":2424},[324,89319,89320],{"class":772},"    \u002F\u002F stringify 把对象转换为 JOSN 字符串; parse 把字符串转换为对象\n",[324,89322,89323],{"class":326,"line":2429},[324,89324,89325],{"class":772},"    \u002F\u002F 字符串就是简单数据类型了，就直接存值了，然后再转化为对象，然后就在堆里存值了，栈里存地址\n",[324,89327,89328],{"class":326,"line":2458},[324,89329,89330],{"class":772},"    \u002F\u002F 但是与原来对象没有联系了，独立了，修改值不会改变原对象了，中间经过了转化为字符串\n",[324,89332,89333,89335,89337,89339,89342,89344,89347,89349,89351,89353,89355],{"class":326,"line":2463},[324,89334,11950],{"class":863},[324,89336,88585],{"class":916},[324,89338,14293],{"class":863},[324,89340,89341],{"class":916}," JSON",[324,89343,1422],{"class":867},[324,89345,89346],{"class":734},"parse",[324,89348,868],{"class":867},[324,89350,72386],{"class":916},[324,89352,1422],{"class":867},[324,89354,72391],{"class":734},[324,89356,72394],{"class":867},[324,89358,89359,89361,89363],{"class":326,"line":2480},[324,89360,74475],{"class":867},[324,89362,58969],{"class":734},[324,89364,88777],{"class":867},[324,89366,89367,89369,89371],{"class":326,"line":2485},[324,89368,89095],{"class":867},[324,89370,913],{"class":863},[324,89372,89373],{"class":738}," '123'\n",[324,89375,89376,89378,89380],{"class":326,"line":2490},[324,89377,74475],{"class":867},[324,89379,58969],{"class":734},[324,89381,70758],{"class":867},[324,89383,89384,89386,89388],{"class":326,"line":2495},[324,89385,53139],{"class":867},[324,89387,52535],{"class":52022},[324,89389,52029],{"class":867},[324,89391,89392,89394,89396],{"class":326,"line":2509},[324,89393,52507],{"class":867},[324,89395,52522],{"class":52022},[324,89397,52029],{"class":867},[324,89399,89400],{"class":326,"line":2514},[324,89401,488],{"emptyLinePlaceholder":487},[324,89403,89404,89406,89408],{"class":326,"line":3306},[324,89405,52507],{"class":867},[324,89407,51357],{"class":52022},[324,89409,52029],{"class":867},[19,89411,89412],{},[48,89413],{"alt":50,"src":89414},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-338.png",[14,89416,89418],{"id":89417},"_415-异常处理","4.15 异常处理",[192,89420,89421],{},[195,89422,89423],{},"throw抛异常",[19,89425,89426],{},[48,89427],{"alt":50,"src":89428},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-339.png",[192,89430,89431],{"start":203},[195,89432,89433],{},"try\u002Fcatch 捕获错误信息",[19,89435,89436],{},[48,89437],{"alt":50,"src":89438},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-340.png",[316,89440,89442],{"className":51355,"code":89441,"language":51357,"meta":50,"style":50},"\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",[269,89443,89444,89454,89468,89472,89480,89494,89514,89526,89534,89538,89546,89558,89566,89575,89582,89587,89606,89615,89626,89631,89641,89646,89651,89656,89673,89677,89682,89689,89701,89705,89717,89721,89725,89730,89735,89742,89750,89758,89762],{"__ignoreMap":50},[324,89445,89446,89448,89450,89452],{"class":326,"line":327},[324,89447,52019],{"class":867},[324,89449,52023],{"class":52022},[324,89451,52026],{"class":734},[324,89453,52029],{"class":867},[324,89455,89456,89458,89460,89462,89464,89466],{"class":326,"line":203},[324,89457,1774],{"class":867},[324,89459,51357],{"class":52022},[324,89461,52038],{"class":734},[324,89463,913],{"class":867},[324,89465,52043],{"class":738},[324,89467,52029],{"class":867},[324,89469,89470],{"class":326,"line":338},[324,89471,488],{"emptyLinePlaceholder":487},[324,89473,89474,89476,89478],{"class":326,"line":344},[324,89475,1774],{"class":867},[324,89477,52056],{"class":52022},[324,89479,52029],{"class":867},[324,89481,89482,89484,89486,89488,89490,89492],{"class":326,"line":484},[324,89483,52866],{"class":867},[324,89485,52066],{"class":52022},[324,89487,52069],{"class":734},[324,89489,913],{"class":867},[324,89491,52074],{"class":738},[324,89493,52029],{"class":867},[324,89495,89496,89498,89500,89502,89504,89506,89508,89510,89512],{"class":326,"line":491},[324,89497,52866],{"class":867},[324,89499,52066],{"class":52022},[324,89501,15649],{"class":734},[324,89503,913],{"class":867},[324,89505,52113],{"class":738},[324,89507,52093],{"class":734},[324,89509,913],{"class":867},[324,89511,52120],{"class":738},[324,89513,52029],{"class":867},[324,89515,89516,89518,89520,89522,89524],{"class":326,"line":496},[324,89517,52866],{"class":867},[324,89519,52129],{"class":52022},[324,89521,52132],{"class":867},[324,89523,52129],{"class":52022},[324,89525,52029],{"class":867},[324,89527,89528,89530,89532],{"class":326,"line":502},[324,89529,52507],{"class":867},[324,89531,52056],{"class":52022},[324,89533,52029],{"class":867},[324,89535,89536],{"class":326,"line":508},[324,89537,488],{"emptyLinePlaceholder":487},[324,89539,89540,89542,89544],{"class":326,"line":514},[324,89541,1774],{"class":867},[324,89543,52522],{"class":52022},[324,89545,52029],{"class":867},[324,89547,89548,89550,89552,89554,89556],{"class":326,"line":2343},[324,89549,52866],{"class":867},[324,89551,19],{"class":52022},[324,89553,54216],{"class":867},[324,89555,19],{"class":52022},[324,89557,52029],{"class":867},[324,89559,89560,89562,89564],{"class":326,"line":2348},[324,89561,52866],{"class":867},[324,89563,52535],{"class":52022},[324,89565,52029],{"class":867},[324,89567,89568,89570,89573],{"class":326,"line":2354},[324,89569,70806],{"class":863},[324,89571,89572],{"class":734}," fn",[324,89574,11582],{"class":867},[324,89576,89577,89580],{"class":326,"line":2359},[324,89578,89579],{"class":863},"      try",[324,89581,16301],{"class":867},[324,89583,89584],{"class":326,"line":2373},[324,89585,89586],{"class":772},"        \u002F\u002F 可能发生错误的代码  要写到try中\n",[324,89588,89589,89591,89593,89595,89597,89599,89601,89604],{"class":326,"line":2378},[324,89590,61992],{"class":863},[324,89592,7554],{"class":916},[324,89594,14293],{"class":863},[324,89596,55118],{"class":867},[324,89598,55121],{"class":734},[324,89600,868],{"class":867},[324,89602,89603],{"class":738},"'.p'",[324,89605,874],{"class":867},[324,89607,89608,89611,89613],{"class":326,"line":2384},[324,89609,89610],{"class":867},"        p.style.color ",[324,89612,913],{"class":863},[324,89614,67773],{"class":738},[324,89616,89617,89620,89623],{"class":326,"line":2405},[324,89618,89619],{"class":867},"      } ",[324,89621,89622],{"class":863},"catch",[324,89624,89625],{"class":867}," (err) {\n",[324,89627,89628],{"class":326,"line":2410},[324,89629,89630],{"class":772},"        \u002F\u002F 拦截错误，提示浏览器提供的错误信息，但是不中断程序的执行\n",[324,89632,89633,89636,89638],{"class":326,"line":2424},[324,89634,89635],{"class":867},"        console.",[324,89637,58969],{"class":734},[324,89639,89640],{"class":867},"(err.message)\n",[324,89642,89643],{"class":326,"line":2429},[324,89644,89645],{"class":772},"        \u002F\u002F 想要中断程序，需要加return\n",[324,89647,89648],{"class":326,"line":2458},[324,89649,89650],{"class":772},"        \u002F\u002F return\n",[324,89652,89653],{"class":326,"line":2463},[324,89654,89655],{"class":772},"        \u002F\u002F 或者不用return，搭配throw来使用，因为throw可以中断程序\n",[324,89657,89658,89661,89663,89666,89668,89671],{"class":326,"line":2480},[324,89659,89660],{"class":863},"        throw",[324,89662,12307],{"class":863},[324,89664,89665],{"class":734}," Error",[324,89667,868],{"class":867},[324,89669,89670],{"class":738},"'你看看，选择器错误了吧'",[324,89672,874],{"class":867},[324,89674,89675],{"class":326,"line":2485},[324,89676,53120],{"class":867},[324,89678,89679],{"class":326,"line":2490},[324,89680,89681],{"class":772},"      \u002F\u002F finally时不管程序对不对，都要去执行的代码\n",[324,89683,89684,89687],{"class":326,"line":2495},[324,89685,89686],{"class":863},"      finally",[324,89688,16301],{"class":867},[324,89690,89691,89694,89696,89699],{"class":326,"line":2509},[324,89692,89693],{"class":734},"        alert",[324,89695,868],{"class":867},[324,89697,89698],{"class":738},"'弹出对话框'",[324,89700,874],{"class":867},[324,89702,89703],{"class":326,"line":2514},[324,89704,53120],{"class":867},[324,89706,89707,89709,89711,89713,89715],{"class":326,"line":3306},[324,89708,58966],{"class":867},[324,89710,58969],{"class":734},[324,89712,868],{"class":867},[324,89714,1336],{"class":916},[324,89716,874],{"class":867},[324,89718,89719],{"class":326,"line":3320},[324,89720,488],{"emptyLinePlaceholder":487},[324,89722,89723],{"class":326,"line":3328},[324,89724,2917],{"class":867},[324,89726,89727],{"class":326,"line":3333},[324,89728,89729],{"class":772},"    \u002F\u002F catch后边括号的是形参，写啥内容都行，保存了浏览器提供的错误信息\n",[324,89731,89732],{"class":326,"line":3339},[324,89733,89734],{"class":772},"    \u002F\u002F message是一个属性，没有错误信息时，catch就不会执行\n",[324,89736,89737,89740],{"class":326,"line":3345},[324,89738,89739],{"class":734},"    fn",[324,89741,2706],{"class":867},[324,89743,89744,89746,89748],{"class":326,"line":3350},[324,89745,53139],{"class":867},[324,89747,52535],{"class":52022},[324,89749,52029],{"class":867},[324,89751,89752,89754,89756],{"class":326,"line":8677},[324,89753,52507],{"class":867},[324,89755,52522],{"class":52022},[324,89757,52029],{"class":867},[324,89759,89760],{"class":326,"line":8701},[324,89761,488],{"emptyLinePlaceholder":487},[324,89763,89764,89766,89768],{"class":326,"line":8706},[324,89765,52507],{"class":867},[324,89767,51357],{"class":52022},[324,89769,52029],{"class":867},[19,89771,89772],{},"try和catch去处理可能有错误的代码，finally去处理不管有没有错误一定会执行的代码",[192,89774,89775],{"start":338},[195,89776,89777],{},"debugger",[19,89779,89780],{},[48,89781],{"alt":50,"src":89782},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-341.png",[19,89784,89785],{},"在代码比较长的情况用比较方便，在检查代码的时候输上debugger，浏览器f12，直接就跳转断点位置，剩下的调式与之前在浏览器手动打断点方式相同",[14,89787,89789],{"id":89788},"_416-处理this","4.16 处理this",[35,89791,89793],{"id":89792},"_4161-this的指向","4.16.1 this的指向",[192,89795,89796],{},[195,89797,89798],{},"普通函数的this",[19,89800,89801],{},[48,89802],{"alt":50,"src":89803},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-342.png",[192,89805,89806],{"start":203},[195,89807,89808],{},"箭头函数的this",[19,89810,89811],{},[48,89812],{"alt":50,"src":89813},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-343.png",[19,89815,89816],{},[48,89817],{"alt":50,"src":89818},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-344.png",[19,89820,89821],{},[48,89822],{"alt":50,"src":89823},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-345.png",[35,89825,89827],{"id":89826},"_4162-this的改变","4.16.2 this的改变",[19,89829,89830],{},"call() apply() bind()",[192,89832,89833],{},[195,89834,89835],{},"call()",[19,89837,89838],{},[48,89839],{"alt":50,"src":89840},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-346.png",[19,89842,89843],{},"两个作用：①调用函数；②改变this指向",[316,89845,89847],{"className":53789,"code":89846,"language":53791,"meta":50,"style":50},"\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",[269,89848,89849,89857,89865,89869,89874,89878,89883,89888,89893,89897,89902,89910],{"__ignoreMap":50},[324,89850,89851,89853,89855],{"class":326,"line":327},[324,89852,1774],{"class":867},[324,89854,52522],{"class":52022},[324,89856,52029],{"class":867},[324,89858,89859,89861,89863],{"class":326,"line":203},[324,89860,52866],{"class":867},[324,89862,52535],{"class":52022},[324,89864,52029],{"class":867},[324,89866,89867],{"class":326,"line":338},[324,89868,72245],{"class":867},[324,89870,89871],{"class":326,"line":344},[324,89872,89873],{"class":867},"      uname: 'pink'\n",[324,89875,89876],{"class":326,"line":484},[324,89877,2917],{"class":867},[324,89879,89880],{"class":326,"line":491},[324,89881,89882],{"class":867},"    function fn(x, y) {\n",[324,89884,89885],{"class":326,"line":496},[324,89886,89887],{"class":867},"      console.log(this)  \u002F\u002Fwindow\n",[324,89889,89890],{"class":326,"line":502},[324,89891,89892],{"class":867},"      console.log(x + y)\n",[324,89894,89895],{"class":326,"line":508},[324,89896,2917],{"class":867},[324,89898,89899],{"class":326,"line":514},[324,89900,89901],{"class":867},"    fn.call(obj, 1, 2)\n",[324,89903,89904,89906,89908],{"class":326,"line":2343},[324,89905,53139],{"class":867},[324,89907,52535],{"class":52022},[324,89909,52029],{"class":867},[324,89911,89912,89914,89916],{"class":326,"line":2348},[324,89913,52507],{"class":867},[324,89915,52522],{"class":52022},[324,89917,52029],{"class":867},[19,89919,89920],{},[48,89921],{"alt":50,"src":89922},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-347.png",[192,89924,89925],{"start":203},[195,89926,89927],{},"apply()",[19,89929,89930],{},[48,89931],{"alt":50,"src":89932},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-348.png",[19,89934,89843],{},[19,89936,89937],{},"call传递的是普通参数，而apply必须传递的是数组",[316,89939,89941],{"className":51355,"code":89940,"language":51357,"meta":50,"style":50},"\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",[269,89942,89943,89953,89967,89971,89979,89993,90013,90025,90033,90037,90045,90053,90063,90070,90074,90079,90095,90107,90121,90125,90130,90149,90154,90158,90163,90168,90176,90181,90203,90208,90224,90240,90252,90256,90261,90280,90288,90296,90300],{"__ignoreMap":50},[324,89944,89945,89947,89949,89951],{"class":326,"line":327},[324,89946,52019],{"class":867},[324,89948,52023],{"class":52022},[324,89950,52026],{"class":734},[324,89952,52029],{"class":867},[324,89954,89955,89957,89959,89961,89963,89965],{"class":326,"line":203},[324,89956,1774],{"class":867},[324,89958,51357],{"class":52022},[324,89960,52038],{"class":734},[324,89962,913],{"class":867},[324,89964,52043],{"class":738},[324,89966,52029],{"class":867},[324,89968,89969],{"class":326,"line":338},[324,89970,488],{"emptyLinePlaceholder":487},[324,89972,89973,89975,89977],{"class":326,"line":344},[324,89974,1774],{"class":867},[324,89976,52056],{"class":52022},[324,89978,52029],{"class":867},[324,89980,89981,89983,89985,89987,89989,89991],{"class":326,"line":484},[324,89982,52866],{"class":867},[324,89984,52066],{"class":52022},[324,89986,52069],{"class":734},[324,89988,913],{"class":867},[324,89990,52074],{"class":738},[324,89992,52029],{"class":867},[324,89994,89995,89997,89999,90001,90003,90005,90007,90009,90011],{"class":326,"line":491},[324,89996,52866],{"class":867},[324,89998,52066],{"class":52022},[324,90000,15649],{"class":734},[324,90002,913],{"class":867},[324,90004,52113],{"class":738},[324,90006,52093],{"class":734},[324,90008,913],{"class":867},[324,90010,52120],{"class":738},[324,90012,52029],{"class":867},[324,90014,90015,90017,90019,90021,90023],{"class":326,"line":496},[324,90016,52866],{"class":867},[324,90018,52129],{"class":52022},[324,90020,52132],{"class":867},[324,90022,52129],{"class":52022},[324,90024,52029],{"class":867},[324,90026,90027,90029,90031],{"class":326,"line":502},[324,90028,52507],{"class":867},[324,90030,52056],{"class":52022},[324,90032,52029],{"class":867},[324,90034,90035],{"class":326,"line":508},[324,90036,488],{"emptyLinePlaceholder":487},[324,90038,90039,90041,90043],{"class":326,"line":514},[324,90040,1774],{"class":867},[324,90042,52522],{"class":52022},[324,90044,52029],{"class":867},[324,90046,90047,90049,90051],{"class":326,"line":2343},[324,90048,52866],{"class":867},[324,90050,52535],{"class":52022},[324,90052,52029],{"class":867},[324,90054,90055,90057,90059,90061],{"class":326,"line":2348},[324,90056,11950],{"class":863},[324,90058,70693],{"class":916},[324,90060,14293],{"class":863},[324,90062,16301],{"class":867},[324,90064,90065,90067],{"class":326,"line":2354},[324,90066,72348],{"class":867},[324,90068,90069],{"class":916},"18\n",[324,90071,90072],{"class":326,"line":2359},[324,90073,2917],{"class":867},[324,90075,90076],{"class":326,"line":2373},[324,90077,90078],{"class":772},"    \u002F\u002F 形参接收的不是数组，是数组里的值，但实参必须是数组\n",[324,90080,90081,90083,90085,90087,90089,90091,90093],{"class":326,"line":2378},[324,90082,70806],{"class":863},[324,90084,89572],{"class":734},[324,90086,868],{"class":867},[324,90088,1684],{"class":5945},[324,90090,13164],{"class":867},[324,90092,1709],{"class":5945},[324,90094,13171],{"class":867},[324,90096,90097,90099,90101,90103,90105],{"class":326,"line":2384},[324,90098,58966],{"class":867},[324,90100,58969],{"class":734},[324,90102,868],{"class":867},[324,90104,87715],{"class":916},[324,90106,874],{"class":867},[324,90108,90109,90111,90113,90116,90118],{"class":326,"line":2405},[324,90110,58966],{"class":867},[324,90112,58969],{"class":734},[324,90114,90115],{"class":867},"(x ",[324,90117,1345],{"class":863},[324,90119,90120],{"class":867}," y)\n",[324,90122,90123],{"class":326,"line":2410},[324,90124,2917],{"class":867},[324,90126,90127],{"class":326,"line":2424},[324,90128,90129],{"class":772},"    \u002F\u002F fn.apply(this指向谁, 数组参数)\n",[324,90131,90132,90135,90138,90141,90143,90145,90147],{"class":326,"line":2429},[324,90133,90134],{"class":867},"    fn.",[324,90136,90137],{"class":734},"apply",[324,90139,90140],{"class":867},"(obj, [",[324,90142,1082],{"class":916},[324,90144,13164],{"class":867},[324,90146,944],{"class":916},[324,90148,5386],{"class":867},[324,90150,90151],{"class":326,"line":2458},[324,90152,90153],{"class":772},"    \u002F\u002F 和call一样，返回值就是函数的返回值，因为他就是在调用函数\n",[324,90155,90156],{"class":326,"line":2463},[324,90157,488],{"emptyLinePlaceholder":487},[324,90159,90160],{"class":326,"line":2480},[324,90161,90162],{"class":772},"    \u002F\u002F 使用场景：求数组最大值\n",[324,90164,90165],{"class":326,"line":2485},[324,90166,90167],{"class":772},"    \u002F\u002F const max = Math.max(1, 2, 3)\n",[324,90169,90170,90173],{"class":326,"line":2490},[324,90171,90172],{"class":772},"    \u002F\u002F console.log(max)",[324,90174,90175],{"class":772},"   \u002F\u002F3\n",[324,90177,90178],{"class":326,"line":2495},[324,90179,90180],{"class":772},"    \u002F\u002F 指向空或者Math都是可以的\n",[324,90182,90183,90185,90187,90189,90191,90193,90195,90197,90199,90201],{"class":326,"line":2509},[324,90184,11950],{"class":863},[324,90186,58417],{"class":916},[324,90188,14293],{"class":863},[324,90190,52948],{"class":867},[324,90192,1175],{"class":916},[324,90194,13164],{"class":867},[324,90196,1368],{"class":916},[324,90198,13164],{"class":867},[324,90200,1399],{"class":916},[324,90202,33968],{"class":867},[324,90204,90205],{"class":326,"line":2514},[324,90206,90207],{"class":772},"    \u002F\u002F apply这个方法实参必须是数组，形参是接收的是数组中的每一个值\n",[324,90209,90210,90212,90214,90216,90219,90221],{"class":326,"line":3306},[324,90211,11950],{"class":863},[324,90213,6680],{"class":916},[324,90215,14293],{"class":863},[324,90217,90218],{"class":867}," Math.max.",[324,90220,90137],{"class":734},[324,90222,90223],{"class":867},"(Math, arr)\n",[324,90225,90226,90228,90231,90233,90236,90238],{"class":326,"line":3320},[324,90227,11950],{"class":863},[324,90229,90230],{"class":916}," min",[324,90232,14293],{"class":863},[324,90234,90235],{"class":867}," Math.min.",[324,90237,90137],{"class":734},[324,90239,90223],{"class":867},[324,90241,90242,90244,90246,90249],{"class":326,"line":3328},[324,90243,74475],{"class":867},[324,90245,58969],{"class":734},[324,90247,90248],{"class":867},"(max, min)     ",[324,90250,90251],{"class":772},"\u002F\u002F100,4\n",[324,90253,90254],{"class":326,"line":3333},[324,90255,488],{"emptyLinePlaceholder":487},[324,90257,90258],{"class":326,"line":3339},[324,90259,90260],{"class":772},"    \u002F\u002F 求最大值的另一种方式:展开运算符\n",[324,90262,90263,90265,90267,90270,90272,90274,90277],{"class":326,"line":3345},[324,90264,74475],{"class":867},[324,90266,58969],{"class":734},[324,90268,90269],{"class":867},"(Max.",[324,90271,6744],{"class":734},[324,90273,868],{"class":867},[324,90275,90276],{"class":863},"...",[324,90278,90279],{"class":867},"arr))\n",[324,90281,90282,90284,90286],{"class":326,"line":3350},[324,90283,53139],{"class":867},[324,90285,52535],{"class":52022},[324,90287,52029],{"class":867},[324,90289,90290,90292,90294],{"class":326,"line":8677},[324,90291,52507],{"class":867},[324,90293,52522],{"class":52022},[324,90295,52029],{"class":867},[324,90297,90298],{"class":326,"line":8701},[324,90299,488],{"emptyLinePlaceholder":487},[324,90301,90302,90304,90306],{"class":326,"line":8706},[324,90303,52507],{"class":867},[324,90305,51357],{"class":52022},[324,90307,52029],{"class":867},[19,90309,90310],{},[48,90311],{"alt":50,"src":90312},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-349.png",[192,90314,90315],{"start":338},[195,90316,90317],{},"bind()",[19,90319,90320],{},[48,90321],{"alt":50,"src":90322},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-350.png",[19,90324,90325],{},"bind()相比于call和apply来说不会调用函数，call和apply只要一写就直接调用函数",[19,90327,90328],{},"bind的语法跟call很相似",[316,90330,90332],{"className":53789,"code":90331,"language":53791,"meta":50,"style":50},"\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",[269,90333,90334,90342,90350,90354,90359,90363,90367,90372,90376,90381,90386,90391,90396,90401,90406,90411,90415,90423],{"__ignoreMap":50},[324,90335,90336,90338,90340],{"class":326,"line":327},[324,90337,1774],{"class":867},[324,90339,52522],{"class":52022},[324,90341,52029],{"class":867},[324,90343,90344,90346,90348],{"class":326,"line":203},[324,90345,52866],{"class":867},[324,90347,52535],{"class":52022},[324,90349,52029],{"class":867},[324,90351,90352],{"class":326,"line":338},[324,90353,72245],{"class":867},[324,90355,90356],{"class":326,"line":344},[324,90357,90358],{"class":867},"      age: 18\n",[324,90360,90361],{"class":326,"line":484},[324,90362,2917],{"class":867},[324,90364,90365],{"class":326,"line":491},[324,90366,77865],{"class":867},[324,90368,90369],{"class":326,"line":496},[324,90370,90371],{"class":867},"      console.log(this)\n",[324,90373,90374],{"class":326,"line":502},[324,90375,2917],{"class":867},[324,90377,90378],{"class":326,"line":508},[324,90379,90380],{"class":867},"    \u002F\u002F 1.bind 不会调用函数\n",[324,90382,90383],{"class":326,"line":514},[324,90384,90385],{"class":867},"    \u002F\u002F 2.bind能改变this的指向\n",[324,90387,90388],{"class":326,"line":2343},[324,90389,90390],{"class":867},"    fn.bind()\n",[324,90392,90393],{"class":326,"line":2348},[324,90394,90395],{"class":867},"    \u002F\u002F 3.返回值是一个函数,他相当于进行的是对原函数拷贝,然后新函数的这个this指向我们设定的那个指定值\n",[324,90397,90398],{"class":326,"line":2354},[324,90399,90400],{"class":867},"    const fun = fn.bind(obj)\n",[324,90402,90403],{"class":326,"line":2359},[324,90404,90405],{"class":867},"    \u002F\u002F console.log(fun)\n",[324,90407,90408],{"class":326,"line":2373},[324,90409,90410],{"class":867},"    \u002F\u002F 调用,查看this的指向\n",[324,90412,90413],{"class":326,"line":2378},[324,90414,53373],{"class":867},[324,90416,90417,90419,90421],{"class":326,"line":2384},[324,90418,53139],{"class":867},[324,90420,52535],{"class":52022},[324,90422,52029],{"class":867},[324,90424,90425,90427,90429],{"class":326,"line":2405},[324,90426,52507],{"class":867},[324,90428,52522],{"class":52022},[324,90430,52029],{"class":867},[19,90432,90433],{},[48,90434],{"alt":50,"src":90435},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-351.png",[192,90437,90438],{"start":344},[195,90439,90440],{},"按钮案例：按钮点击之后被禁用，两秒之后自动变为不禁用状态，要求尽可能多的用this",[316,90442,90444],{"className":53789,"code":90443,"language":53791,"meta":50,"style":50},"\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",[269,90445,90446,90454,90467,90475,90480,90484,90489,90494,90499,90504,90509,90514,90519,90524,90528,90536],{"__ignoreMap":50},[324,90447,90448,90450,90452],{"class":326,"line":327},[324,90449,1774],{"class":867},[324,90451,52522],{"class":52022},[324,90453,52029],{"class":867},[324,90455,90456,90458,90460,90463,90465],{"class":326,"line":203},[324,90457,52866],{"class":867},[324,90459,54609],{"class":52022},[324,90461,90462],{"class":867},">禁用\u003C\u002F",[324,90464,54609],{"class":52022},[324,90466,52029],{"class":867},[324,90468,90469,90471,90473],{"class":326,"line":338},[324,90470,52866],{"class":867},[324,90472,52535],{"class":52022},[324,90474,52029],{"class":867},[324,90476,90477],{"class":326,"line":344},[324,90478,90479],{"class":867},"    const btn = document.querySelector('button')\n",[324,90481,90482],{"class":326,"line":484},[324,90483,59738],{"class":867},[324,90485,90486],{"class":326,"line":491},[324,90487,90488],{"class":867},"      this.disabled = true\n",[324,90490,90491],{"class":326,"line":496},[324,90492,90493],{"class":867},"      \u002F\u002F 定时器是window进行调用的\n",[324,90495,90496],{"class":326,"line":502},[324,90497,90498],{"class":867},"      setTimeout(function () {\n",[324,90500,90501],{"class":326,"line":508},[324,90502,90503],{"class":867},"        \u002F\u002F 在这个普通函数里面，我们要this由原来的window 改为 btn\n",[324,90505,90506],{"class":326,"line":514},[324,90507,90508],{"class":867},"        this.disabled = false\n",[324,90510,90511],{"class":326,"line":2343},[324,90512,90513],{"class":867},"      }.bind(this), 2000)\n",[324,90515,90516],{"class":326,"line":2348},[324,90517,90518],{"class":867},"      \u002F\u002F 上边的这个this是在延时函数外面的，所以这个this跟上边的那个this是相同的，就是指的是btn\n",[324,90520,90521],{"class":326,"line":2354},[324,90522,90523],{"class":867},"      \u002F\u002F .bind(this)之后就已经拷贝完之前对象了，就可以等两秒之后延时函数来调用它就可以了\n",[324,90525,90526],{"class":326,"line":2359},[324,90527,34183],{"class":867},[324,90529,90530,90532,90534],{"class":326,"line":2373},[324,90531,53139],{"class":867},[324,90533,52535],{"class":52022},[324,90535,52029],{"class":867},[324,90537,90538,90540,90542],{"class":326,"line":2378},[324,90539,52507],{"class":867},[324,90541,52522],{"class":52022},[324,90543,52029],{"class":867},[192,90545,90546],{"start":484},[195,90547,22682],{},[19,90549,90550],{},[48,90551],{"alt":50,"src":90552},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-352.png",[14,90554,90556],{"id":90555},"_417-性能优化","4.17 性能优化",[35,90558,90560],{"id":90559},"_4171-防抖","4.17.1 防抖",[19,90562,90563],{},[48,90564],{"alt":50,"src":90565},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-353.png",[19,90567,90568],{},[116,90569,90570],{},"案例：利用防抖来处理-鼠标经过盒子显示文字（要求:鼠标在盒子上移动，里面的数字就会变化+1）",[19,90572,90573],{},"防抖实现方式：",[1871,90575,90576],{},[195,90577,90578],{},"lodash 提供了防抖处理",[19,90580,90581],{},"_.debounce(func,[wait=0],[options={}])",[19,90583,90584],{},"创建一个debounced（防抖函数），该函数会从上一次被调用后，延迟wait毫秒后调用func方法。",[316,90586,90588],{"className":51355,"code":90587,"language":51357,"meta":50,"style":50},"\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",[269,90589,90590,90600,90614,90618,90626,90640,90660,90672,90680,90686,90696,90708,90720,90731,90743,90753,90763,90776,90780,90788,90796,90800,90808,90826,90844,90852,90871,90881,90890,90901,90906,90910,90915,90920,90925,90950,90958,90966,90970],{"__ignoreMap":50},[324,90591,90592,90594,90596,90598],{"class":326,"line":327},[324,90593,52019],{"class":867},[324,90595,52023],{"class":52022},[324,90597,52026],{"class":734},[324,90599,52029],{"class":867},[324,90601,90602,90604,90606,90608,90610,90612],{"class":326,"line":203},[324,90603,1774],{"class":867},[324,90605,51357],{"class":52022},[324,90607,52038],{"class":734},[324,90609,913],{"class":867},[324,90611,52043],{"class":738},[324,90613,52029],{"class":867},[324,90615,90616],{"class":326,"line":338},[324,90617,488],{"emptyLinePlaceholder":487},[324,90619,90620,90622,90624],{"class":326,"line":344},[324,90621,1774],{"class":867},[324,90623,52056],{"class":52022},[324,90625,52029],{"class":867},[324,90627,90628,90630,90632,90634,90636,90638],{"class":326,"line":484},[324,90629,52866],{"class":867},[324,90631,52066],{"class":52022},[324,90633,52069],{"class":734},[324,90635,913],{"class":867},[324,90637,52074],{"class":738},[324,90639,52029],{"class":867},[324,90641,90642,90644,90646,90648,90650,90652,90654,90656,90658],{"class":326,"line":491},[324,90643,52866],{"class":867},[324,90645,52066],{"class":52022},[324,90647,15649],{"class":734},[324,90649,913],{"class":867},[324,90651,52113],{"class":738},[324,90653,52093],{"class":734},[324,90655,913],{"class":867},[324,90657,52120],{"class":738},[324,90659,52029],{"class":867},[324,90661,90662,90664,90666,90668,90670],{"class":326,"line":496},[324,90663,52866],{"class":867},[324,90665,52129],{"class":52022},[324,90667,52132],{"class":867},[324,90669,52129],{"class":52022},[324,90671,52029],{"class":867},[324,90673,90674,90676,90678],{"class":326,"line":502},[324,90675,52866],{"class":867},[324,90677,775],{"class":52022},[324,90679,52029],{"class":867},[324,90681,90682,90684],{"class":326,"line":508},[324,90683,55474],{"class":734},[324,90685,16301],{"class":867},[324,90687,90688,90690,90692,90694],{"class":326,"line":514},[324,90689,73318],{"class":916},[324,90691,52159],{"class":867},[324,90693,61227],{"class":916},[324,90695,2025],{"class":867},[324,90697,90698,90700,90702,90704,90706],{"class":326,"line":2343},[324,90699,55493],{"class":916},[324,90701,52159],{"class":867},[324,90703,2453],{"class":916},[324,90705,52214],{"class":863},[324,90707,2025],{"class":867},[324,90709,90710,90712,90714,90716,90718],{"class":326,"line":2348},[324,90711,55507],{"class":916},[324,90713,52159],{"class":867},[324,90715,2453],{"class":916},[324,90717,52214],{"class":863},[324,90719,2025],{"class":867},[324,90721,90722,90724,90726,90729],{"class":326,"line":2354},[324,90723,55606],{"class":916},[324,90725,52159],{"class":867},[324,90727,90728],{"class":916},"gray",[324,90730,2025],{"class":867},[324,90732,90733,90735,90737,90739,90741],{"class":326,"line":2359},[324,90734,55644],{"class":916},[324,90736,52159],{"class":867},[324,90738,1689],{"class":916},[324,90740,52214],{"class":863},[324,90742,2025],{"class":867},[324,90744,90745,90747,90749,90751],{"class":326,"line":2373},[324,90746,58138],{"class":916},[324,90748,52159],{"class":867},[324,90750,61564],{"class":916},[324,90752,2025],{"class":867},[324,90754,90755,90757,90759,90761],{"class":326,"line":2378},[324,90756,58008],{"class":916},[324,90758,52159],{"class":867},[324,90760,52314],{"class":916},[324,90762,2025],{"class":867},[324,90764,90765,90768,90770,90772,90774],{"class":326,"line":2384},[324,90766,90767],{"class":916},"      padding-top",[324,90769,52159],{"class":867},[324,90771,1183],{"class":916},[324,90773,52214],{"class":863},[324,90775,2025],{"class":867},[324,90777,90778],{"class":326,"line":2405},[324,90779,2917],{"class":867},[324,90781,90782,90784,90786],{"class":326,"line":2410},[324,90783,53139],{"class":867},[324,90785,775],{"class":52022},[324,90787,52029],{"class":867},[324,90789,90790,90792,90794],{"class":326,"line":2424},[324,90791,52507],{"class":867},[324,90793,52056],{"class":52022},[324,90795,52029],{"class":867},[324,90797,90798],{"class":326,"line":2429},[324,90799,488],{"emptyLinePlaceholder":487},[324,90801,90802,90804,90806],{"class":326,"line":2458},[324,90803,1774],{"class":867},[324,90805,52522],{"class":52022},[324,90807,52029],{"class":867},[324,90809,90810,90812,90814,90816,90818,90820,90822,90824],{"class":326,"line":2463},[324,90811,52866],{"class":867},[324,90813,52333],{"class":52022},[324,90815,54208],{"class":734},[324,90817,913],{"class":867},[324,90819,54213],{"class":738},[324,90821,56036],{"class":867},[324,90823,52333],{"class":52022},[324,90825,52029],{"class":867},[324,90827,90828,90830,90832,90834,90836,90838,90840,90842],{"class":326,"line":2480},[324,90829,52866],{"class":867},[324,90831,52535],{"class":52022},[324,90833,55961],{"class":734},[324,90835,913],{"class":867},[324,90837,88996],{"class":738},[324,90839,56036],{"class":867},[324,90841,52535],{"class":52022},[324,90843,52029],{"class":867},[324,90845,90846,90848,90850],{"class":326,"line":2485},[324,90847,52866],{"class":867},[324,90849,52535],{"class":52022},[324,90851,52029],{"class":867},[324,90853,90854,90856,90858,90860,90862,90864,90866,90869],{"class":326,"line":2490},[324,90855,11950],{"class":863},[324,90857,87655],{"class":916},[324,90859,14293],{"class":863},[324,90861,55118],{"class":867},[324,90863,55121],{"class":734},[324,90865,868],{"class":867},[324,90867,90868],{"class":738},"'.box'",[324,90870,874],{"class":867},[324,90872,90873,90875,90877,90879],{"class":326,"line":2495},[324,90874,52941],{"class":863},[324,90876,10167],{"class":867},[324,90878,913],{"class":863},[324,90880,48055],{"class":916},[324,90882,90883,90885,90888],{"class":326,"line":2509},[324,90884,70806],{"class":863},[324,90886,90887],{"class":734}," mouseMove",[324,90889,11582],{"class":867},[324,90891,90892,90895,90897,90899],{"class":326,"line":2514},[324,90893,90894],{"class":867},"      box.innerHTML ",[324,90896,913],{"class":863},[324,90898,3761],{"class":867},[324,90900,3431],{"class":863},[324,90902,90903],{"class":326,"line":3306},[324,90904,90905],{"class":772},"      \u002F\u002F 如果里面存在大量消耗性能的代码，比如dom操作，比如数据处理，可能会造成卡顿\n",[324,90907,90908],{"class":326,"line":3320},[324,90909,2917],{"class":867},[324,90911,90912],{"class":326,"line":3328},[324,90913,90914],{"class":772},"    \u002F\u002F box.addEventListener('mousemove', mouseMove)\n",[324,90916,90917],{"class":326,"line":3333},[324,90918,90919],{"class":772},"    \u002F\u002F 利用lodash库实现防抖 -500毫秒之后才去+1\n",[324,90921,90922],{"class":326,"line":3339},[324,90923,90924],{"class":772},"    \u002F\u002F 以前在事件监听中的执行函数是不可以加括号的，加括号就成调用了，但是现在是需要传递参数的，所以必须加\n",[324,90926,90927,90930,90932,90934,90937,90940,90943,90946,90948],{"class":326,"line":3345},[324,90928,90929],{"class":867},"    box.",[324,90931,58535],{"class":734},[324,90933,868],{"class":867},[324,90935,90936],{"class":738},"'mousemove'",[324,90938,90939],{"class":867},", _.",[324,90941,90942],{"class":734},"debounce",[324,90944,90945],{"class":867},"(mouseMove, ",[324,90947,65796],{"class":916},[324,90949,31219],{"class":867},[324,90951,90952,90954,90956],{"class":326,"line":3350},[324,90953,53139],{"class":867},[324,90955,52535],{"class":52022},[324,90957,52029],{"class":867},[324,90959,90960,90962,90964],{"class":326,"line":8677},[324,90961,52507],{"class":867},[324,90963,52522],{"class":52022},[324,90965,52029],{"class":867},[324,90967,90968],{"class":326,"line":8701},[324,90969,488],{"emptyLinePlaceholder":487},[324,90971,90972,90974,90976],{"class":326,"line":8706},[324,90973,52507],{"class":867},[324,90975,51357],{"class":52022},[324,90977,52029],{"class":867},[1871,90979,90980],{},[195,90981,90982],{},"手写一个防抖函数来处理",[19,90984,90985],{},"防抖的核心就是利用定时器来实现的：",[19,90987,90988],{},"①声明一个定时器变量",[19,90990,90991],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器先清除以前的定时器",[19,90993,90994],{},"③如果没有定时器则开启定时器，记得存到变量里面",[316,90996,90998],{"className":51355,"code":90997,"language":51357,"meta":50,"style":50},"\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",[269,90999,91000,91010,91024,91028,91036,91050,91070,91082,91090,91096,91106,91118,91130,91140,91152,91162,91172,91184,91188,91196,91204,91208,91216,91234,91252,91260,91278,91288,91296,91306,91310,91314,91318,91323,91328,91333,91338,91343,91348,91366,91373,91378,91386,91391,91404,91420,91430,91435,91439,91443,91463,91467,91472,91477,91482,91487,91495,91503,91507],{"__ignoreMap":50},[324,91001,91002,91004,91006,91008],{"class":326,"line":327},[324,91003,52019],{"class":867},[324,91005,52023],{"class":52022},[324,91007,52026],{"class":734},[324,91009,52029],{"class":867},[324,91011,91012,91014,91016,91018,91020,91022],{"class":326,"line":203},[324,91013,1774],{"class":867},[324,91015,51357],{"class":52022},[324,91017,52038],{"class":734},[324,91019,913],{"class":867},[324,91021,52043],{"class":738},[324,91023,52029],{"class":867},[324,91025,91026],{"class":326,"line":338},[324,91027,488],{"emptyLinePlaceholder":487},[324,91029,91030,91032,91034],{"class":326,"line":344},[324,91031,1774],{"class":867},[324,91033,52056],{"class":52022},[324,91035,52029],{"class":867},[324,91037,91038,91040,91042,91044,91046,91048],{"class":326,"line":484},[324,91039,52866],{"class":867},[324,91041,52066],{"class":52022},[324,91043,52069],{"class":734},[324,91045,913],{"class":867},[324,91047,52074],{"class":738},[324,91049,52029],{"class":867},[324,91051,91052,91054,91056,91058,91060,91062,91064,91066,91068],{"class":326,"line":491},[324,91053,52866],{"class":867},[324,91055,52066],{"class":52022},[324,91057,15649],{"class":734},[324,91059,913],{"class":867},[324,91061,52113],{"class":738},[324,91063,52093],{"class":734},[324,91065,913],{"class":867},[324,91067,52120],{"class":738},[324,91069,52029],{"class":867},[324,91071,91072,91074,91076,91078,91080],{"class":326,"line":496},[324,91073,52866],{"class":867},[324,91075,52129],{"class":52022},[324,91077,52132],{"class":867},[324,91079,52129],{"class":52022},[324,91081,52029],{"class":867},[324,91083,91084,91086,91088],{"class":326,"line":502},[324,91085,52866],{"class":867},[324,91087,775],{"class":52022},[324,91089,52029],{"class":867},[324,91091,91092,91094],{"class":326,"line":508},[324,91093,55474],{"class":734},[324,91095,16301],{"class":867},[324,91097,91098,91100,91102,91104],{"class":326,"line":514},[324,91099,73318],{"class":916},[324,91101,52159],{"class":867},[324,91103,61227],{"class":916},[324,91105,2025],{"class":867},[324,91107,91108,91110,91112,91114,91116],{"class":326,"line":2343},[324,91109,55493],{"class":916},[324,91111,52159],{"class":867},[324,91113,2453],{"class":916},[324,91115,52214],{"class":863},[324,91117,2025],{"class":867},[324,91119,91120,91122,91124,91126,91128],{"class":326,"line":2348},[324,91121,55507],{"class":916},[324,91123,52159],{"class":867},[324,91125,2453],{"class":916},[324,91127,52214],{"class":863},[324,91129,2025],{"class":867},[324,91131,91132,91134,91136,91138],{"class":326,"line":2354},[324,91133,55606],{"class":916},[324,91135,52159],{"class":867},[324,91137,90728],{"class":916},[324,91139,2025],{"class":867},[324,91141,91142,91144,91146,91148,91150],{"class":326,"line":2359},[324,91143,55644],{"class":916},[324,91145,52159],{"class":867},[324,91147,1689],{"class":916},[324,91149,52214],{"class":863},[324,91151,2025],{"class":867},[324,91153,91154,91156,91158,91160],{"class":326,"line":2373},[324,91155,58138],{"class":916},[324,91157,52159],{"class":867},[324,91159,61564],{"class":916},[324,91161,2025],{"class":867},[324,91163,91164,91166,91168,91170],{"class":326,"line":2378},[324,91165,58008],{"class":916},[324,91167,52159],{"class":867},[324,91169,52314],{"class":916},[324,91171,2025],{"class":867},[324,91173,91174,91176,91178,91180,91182],{"class":326,"line":2384},[324,91175,90767],{"class":916},[324,91177,52159],{"class":867},[324,91179,1183],{"class":916},[324,91181,52214],{"class":863},[324,91183,2025],{"class":867},[324,91185,91186],{"class":326,"line":2405},[324,91187,2917],{"class":867},[324,91189,91190,91192,91194],{"class":326,"line":2410},[324,91191,53139],{"class":867},[324,91193,775],{"class":52022},[324,91195,52029],{"class":867},[324,91197,91198,91200,91202],{"class":326,"line":2424},[324,91199,52507],{"class":867},[324,91201,52056],{"class":52022},[324,91203,52029],{"class":867},[324,91205,91206],{"class":326,"line":2429},[324,91207,488],{"emptyLinePlaceholder":487},[324,91209,91210,91212,91214],{"class":326,"line":2458},[324,91211,1774],{"class":867},[324,91213,52522],{"class":52022},[324,91215,52029],{"class":867},[324,91217,91218,91220,91222,91224,91226,91228,91230,91232],{"class":326,"line":2463},[324,91219,52866],{"class":867},[324,91221,52333],{"class":52022},[324,91223,54208],{"class":734},[324,91225,913],{"class":867},[324,91227,54213],{"class":738},[324,91229,56036],{"class":867},[324,91231,52333],{"class":52022},[324,91233,52029],{"class":867},[324,91235,91236,91238,91240,91242,91244,91246,91248,91250],{"class":326,"line":2480},[324,91237,52866],{"class":867},[324,91239,52535],{"class":52022},[324,91241,55961],{"class":734},[324,91243,913],{"class":867},[324,91245,88996],{"class":738},[324,91247,56036],{"class":867},[324,91249,52535],{"class":52022},[324,91251,52029],{"class":867},[324,91253,91254,91256,91258],{"class":326,"line":2485},[324,91255,52866],{"class":867},[324,91257,52535],{"class":52022},[324,91259,52029],{"class":867},[324,91261,91262,91264,91266,91268,91270,91272,91274,91276],{"class":326,"line":2490},[324,91263,11950],{"class":863},[324,91265,87655],{"class":916},[324,91267,14293],{"class":863},[324,91269,55118],{"class":867},[324,91271,55121],{"class":734},[324,91273,868],{"class":867},[324,91275,90868],{"class":738},[324,91277,874],{"class":867},[324,91279,91280,91282,91284,91286],{"class":326,"line":2495},[324,91281,52941],{"class":863},[324,91283,10167],{"class":867},[324,91285,913],{"class":863},[324,91287,48055],{"class":916},[324,91289,91290,91292,91294],{"class":326,"line":2509},[324,91291,70806],{"class":863},[324,91293,90887],{"class":734},[324,91295,11582],{"class":867},[324,91297,91298,91300,91302,91304],{"class":326,"line":2514},[324,91299,90894],{"class":867},[324,91301,913],{"class":863},[324,91303,3761],{"class":867},[324,91305,3431],{"class":863},[324,91307,91308],{"class":326,"line":3306},[324,91309,90905],{"class":772},[324,91311,91312],{"class":326,"line":3320},[324,91313,2917],{"class":867},[324,91315,91316],{"class":326,"line":3328},[324,91317,90914],{"class":772},[324,91319,91320],{"class":326,"line":3333},[324,91321,91322],{"class":772},"    \u002F\u002F 手写防抖函数\n",[324,91324,91325],{"class":326,"line":3339},[324,91326,91327],{"class":772},"    \u002F\u002F 核心是利用延时器setTimeout来实现的\n",[324,91329,91330],{"class":326,"line":3345},[324,91331,91332],{"class":772},"    \u002F\u002F 1.声明定时器变量\n",[324,91334,91335],{"class":326,"line":3350},[324,91336,91337],{"class":772},"    \u002F\u002F 2.每次鼠标移动(事件触发)的时候都要先判断是否有定时器,如果有先清除以前的定时器\n",[324,91339,91340],{"class":326,"line":8677},[324,91341,91342],{"class":772},"    \u002F\u002F 3.如果没有定时器,则开启定时器,存入到定时器变量里面\n",[324,91344,91345],{"class":326,"line":8701},[324,91346,91347],{"class":772},"    \u002F\u002F 4.定时器里面写函数调用\n",[324,91349,91350,91352,91355,91357,91360,91362,91364],{"class":326,"line":8706},[324,91351,70806],{"class":863},[324,91353,91354],{"class":734}," debounce",[324,91356,868],{"class":867},[324,91358,91359],{"class":5945},"fn",[324,91361,13164],{"class":867},[324,91363,1584],{"class":5945},[324,91365,13171],{"class":867},[324,91367,91368,91370],{"class":326,"line":8712},[324,91369,80494],{"class":863},[324,91371,91372],{"class":867}," timer\n",[324,91374,91375],{"class":326,"line":8739},[324,91376,91377],{"class":772},"      \u002F\u002F return 返回一个匿名函数\n",[324,91379,91380,91382,91384],{"class":326,"line":8744},[324,91381,74704],{"class":863},[324,91383,59640],{"class":863},[324,91385,55174],{"class":867},[324,91387,91388],{"class":326,"line":8750},[324,91389,91390],{"class":772},"        \u002F\u002F 这里边写第二三四步\n",[324,91392,91393,91395,91398,91401],{"class":326,"line":8762},[324,91394,3226],{"class":863},[324,91396,91397],{"class":867}," (timer) ",[324,91399,91400],{"class":734},"clearTimeout",[324,91402,91403],{"class":867},"(timer)\n",[324,91405,91406,91409,91411,91414,91416,91418],{"class":326,"line":8774},[324,91407,91408],{"class":867},"        timer ",[324,91410,913],{"class":863},[324,91412,91413],{"class":734}," setTimeout",[324,91415,868],{"class":867},[324,91417,55171],{"class":863},[324,91419,55174],{"class":867},[324,91421,91422,91425,91427],{"class":326,"line":8786},[324,91423,91424],{"class":734},"          fn",[324,91426,13779],{"class":867},[324,91428,91429],{"class":772},"\u002F\u002F加小括号调用fn }, t)\n",[324,91431,91432],{"class":326,"line":10445},[324,91433,91434],{"class":867},"        }, t)\n",[324,91436,91437],{"class":326,"line":10470},[324,91438,53120],{"class":867},[324,91440,91441],{"class":326,"line":10493},[324,91442,2917],{"class":867},[324,91444,91445,91447,91449,91451,91453,91455,91457,91459,91461],{"class":326,"line":10517},[324,91446,90929],{"class":867},[324,91448,58535],{"class":734},[324,91450,868],{"class":867},[324,91452,90936],{"class":738},[324,91454,13164],{"class":867},[324,91456,90942],{"class":734},[324,91458,90945],{"class":867},[324,91460,65796],{"class":916},[324,91462,31219],{"class":867},[324,91464,91465],{"class":326,"line":10522},[324,91466,488],{"emptyLinePlaceholder":487},[324,91468,91469],{"class":326,"line":10527},[324,91470,91471],{"class":772},"    \u002F\u002F debounce(mouseMove, 500)是在调用函数,一调用就会拿到return后边的内容\n",[324,91473,91474],{"class":326,"line":10532},[324,91475,91476],{"class":772},"    \u002F\u002F 相当于debounce(mouseMove, 500) = function () {\u002F\u002F 这里边写第二三四步}\n",[324,91478,91479],{"class":326,"line":10541},[324,91480,91481],{"class":772},"    \u002F\u002F 我们移动鼠标时想要实现的是这个匿名函数\n",[324,91483,91484],{"class":326,"line":10546},[324,91485,91486],{"class":772},"    \u002F\u002F 要的其实是这个函数名,事件中的执行函数不能写括号,写括号就是函数调用\n",[324,91488,91489,91491,91493],{"class":326,"line":10552},[324,91490,53139],{"class":867},[324,91492,52535],{"class":52022},[324,91494,52029],{"class":867},[324,91496,91497,91499,91501],{"class":326,"line":10573},[324,91498,52507],{"class":867},[324,91500,52522],{"class":52022},[324,91502,52029],{"class":867},[324,91504,91505],{"class":326,"line":10579},[324,91506,488],{"emptyLinePlaceholder":487},[324,91508,91509,91511,91513],{"class":326,"line":10593},[324,91510,52507],{"class":867},[324,91512,51357],{"class":52022},[324,91514,52029],{"class":867},[35,91516,91518],{"id":91517},"_4172-节流","4.17.2 节流",[19,91520,91521],{},[48,91522],{"alt":50,"src":91523},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-354.png",[19,91525,91526],{},[48,91527],{"alt":50,"src":91528},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-355.png",[19,91530,91531],{},[116,91532,91533],{},"案例：利用节流来处理-鼠标滑过盒子显示文字（要求：鼠标在盒子上移动，不管移动多少次，每隔500ms才+1）",[19,91535,91536],{},"实现方式：",[1871,91538,91539],{},[195,91540,91541],{},"lodash 提供的节流函数来处理",[19,91543,91544],{},"_.throttle(func,[wait=0],[options=])",[19,91546,91547],{},"创建一个节流函数，在wait秒内最多执行func一次的函数",[316,91549,91551],{"className":51355,"code":91550,"language":51357,"meta":50,"style":50},"\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",[269,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,91902,91910,91918,91922],{"__ignoreMap":50},[324,91554,91555,91557,91559,91561],{"class":326,"line":327},[324,91556,52019],{"class":867},[324,91558,52023],{"class":52022},[324,91560,52026],{"class":734},[324,91562,52029],{"class":867},[324,91564,91565,91567,91569,91571,91573,91575],{"class":326,"line":203},[324,91566,1774],{"class":867},[324,91568,51357],{"class":52022},[324,91570,52038],{"class":734},[324,91572,913],{"class":867},[324,91574,52043],{"class":738},[324,91576,52029],{"class":867},[324,91578,91579],{"class":326,"line":338},[324,91580,488],{"emptyLinePlaceholder":487},[324,91582,91583,91585,91587],{"class":326,"line":344},[324,91584,1774],{"class":867},[324,91586,52056],{"class":52022},[324,91588,52029],{"class":867},[324,91590,91591,91593,91595,91597,91599,91601],{"class":326,"line":484},[324,91592,52866],{"class":867},[324,91594,52066],{"class":52022},[324,91596,52069],{"class":734},[324,91598,913],{"class":867},[324,91600,52074],{"class":738},[324,91602,52029],{"class":867},[324,91604,91605,91607,91609,91611,91613,91615,91617,91619,91621],{"class":326,"line":491},[324,91606,52866],{"class":867},[324,91608,52066],{"class":52022},[324,91610,15649],{"class":734},[324,91612,913],{"class":867},[324,91614,52113],{"class":738},[324,91616,52093],{"class":734},[324,91618,913],{"class":867},[324,91620,52120],{"class":738},[324,91622,52029],{"class":867},[324,91624,91625,91627,91629,91631,91633],{"class":326,"line":496},[324,91626,52866],{"class":867},[324,91628,52129],{"class":52022},[324,91630,52132],{"class":867},[324,91632,52129],{"class":52022},[324,91634,52029],{"class":867},[324,91636,91637,91639,91641],{"class":326,"line":502},[324,91638,52866],{"class":867},[324,91640,775],{"class":52022},[324,91642,52029],{"class":867},[324,91644,91645,91647],{"class":326,"line":508},[324,91646,55474],{"class":734},[324,91648,16301],{"class":867},[324,91650,91651,91653,91655,91657],{"class":326,"line":514},[324,91652,73318],{"class":916},[324,91654,52159],{"class":867},[324,91656,61227],{"class":916},[324,91658,2025],{"class":867},[324,91660,91661,91663,91665,91667,91669],{"class":326,"line":2343},[324,91662,55493],{"class":916},[324,91664,52159],{"class":867},[324,91666,2453],{"class":916},[324,91668,52214],{"class":863},[324,91670,2025],{"class":867},[324,91672,91673,91675,91677,91679,91681],{"class":326,"line":2348},[324,91674,55507],{"class":916},[324,91676,52159],{"class":867},[324,91678,2453],{"class":916},[324,91680,52214],{"class":863},[324,91682,2025],{"class":867},[324,91684,91685,91687,91689,91691],{"class":326,"line":2354},[324,91686,55606],{"class":916},[324,91688,52159],{"class":867},[324,91690,90728],{"class":916},[324,91692,2025],{"class":867},[324,91694,91695,91697,91699,91701,91703],{"class":326,"line":2359},[324,91696,55644],{"class":916},[324,91698,52159],{"class":867},[324,91700,1689],{"class":916},[324,91702,52214],{"class":863},[324,91704,2025],{"class":867},[324,91706,91707,91709,91711,91713],{"class":326,"line":2373},[324,91708,58138],{"class":916},[324,91710,52159],{"class":867},[324,91712,61564],{"class":916},[324,91714,2025],{"class":867},[324,91716,91717,91719,91721,91723],{"class":326,"line":2378},[324,91718,58008],{"class":916},[324,91720,52159],{"class":867},[324,91722,52314],{"class":916},[324,91724,2025],{"class":867},[324,91726,91727,91729,91731,91733,91735],{"class":326,"line":2384},[324,91728,90767],{"class":916},[324,91730,52159],{"class":867},[324,91732,1183],{"class":916},[324,91734,52214],{"class":863},[324,91736,2025],{"class":867},[324,91738,91739],{"class":326,"line":2405},[324,91740,2917],{"class":867},[324,91742,91743,91745,91747],{"class":326,"line":2410},[324,91744,53139],{"class":867},[324,91746,775],{"class":52022},[324,91748,52029],{"class":867},[324,91750,91751,91753,91755],{"class":326,"line":2424},[324,91752,52507],{"class":867},[324,91754,52056],{"class":52022},[324,91756,52029],{"class":867},[324,91758,91759],{"class":326,"line":2429},[324,91760,488],{"emptyLinePlaceholder":487},[324,91762,91763,91765,91767],{"class":326,"line":2458},[324,91764,1774],{"class":867},[324,91766,52522],{"class":52022},[324,91768,52029],{"class":867},[324,91770,91771,91773,91775,91777,91779,91781,91783,91785],{"class":326,"line":2463},[324,91772,52866],{"class":867},[324,91774,52333],{"class":52022},[324,91776,54208],{"class":734},[324,91778,913],{"class":867},[324,91780,54213],{"class":738},[324,91782,56036],{"class":867},[324,91784,52333],{"class":52022},[324,91786,52029],{"class":867},[324,91788,91789,91791,91793,91795,91797,91799,91801,91803],{"class":326,"line":2480},[324,91790,52866],{"class":867},[324,91792,52535],{"class":52022},[324,91794,55961],{"class":734},[324,91796,913],{"class":867},[324,91798,88996],{"class":738},[324,91800,56036],{"class":867},[324,91802,52535],{"class":52022},[324,91804,52029],{"class":867},[324,91806,91807,91809,91811],{"class":326,"line":2485},[324,91808,52866],{"class":867},[324,91810,52535],{"class":52022},[324,91812,52029],{"class":867},[324,91814,91815,91817,91819,91821,91823,91825,91827,91829],{"class":326,"line":2490},[324,91816,11950],{"class":863},[324,91818,87655],{"class":916},[324,91820,14293],{"class":863},[324,91822,55118],{"class":867},[324,91824,55121],{"class":734},[324,91826,868],{"class":867},[324,91828,90868],{"class":738},[324,91830,874],{"class":867},[324,91832,91833,91835,91837,91839],{"class":326,"line":2495},[324,91834,52941],{"class":863},[324,91836,10167],{"class":867},[324,91838,913],{"class":863},[324,91840,48055],{"class":916},[324,91842,91843,91845,91847],{"class":326,"line":2509},[324,91844,70806],{"class":863},[324,91846,90887],{"class":734},[324,91848,11582],{"class":867},[324,91850,91851,91853,91855,91857],{"class":326,"line":2514},[324,91852,90894],{"class":867},[324,91854,913],{"class":863},[324,91856,3761],{"class":867},[324,91858,3431],{"class":863},[324,91860,91861],{"class":326,"line":3306},[324,91862,90905],{"class":772},[324,91864,91865],{"class":326,"line":3320},[324,91866,2917],{"class":867},[324,91868,91869],{"class":326,"line":3328},[324,91870,90914],{"class":772},[324,91872,91873],{"class":326,"line":3333},[324,91874,91875],{"class":772},"    \u002F\u002F 利用lodash库实现节流 -500毫秒之后才去加1\n",[324,91877,91878],{"class":326,"line":3339},[324,91879,91880],{"class":772},"    \u002F\u002F 语法:_.throttle(fun,时间)\n",[324,91882,91883,91885,91887,91889,91891,91893,91896,91898,91900],{"class":326,"line":3345},[324,91884,90929],{"class":867},[324,91886,58535],{"class":734},[324,91888,868],{"class":867},[324,91890,90936],{"class":738},[324,91892,90939],{"class":867},[324,91894,91895],{"class":734},"throttle",[324,91897,90945],{"class":867},[324,91899,65796],{"class":916},[324,91901,31219],{"class":867},[324,91903,91904,91906,91908],{"class":326,"line":3350},[324,91905,53139],{"class":867},[324,91907,52535],{"class":52022},[324,91909,52029],{"class":867},[324,91911,91912,91914,91916],{"class":326,"line":8677},[324,91913,52507],{"class":867},[324,91915,52522],{"class":52022},[324,91917,52029],{"class":867},[324,91919,91920],{"class":326,"line":8701},[324,91921,488],{"emptyLinePlaceholder":487},[324,91923,91924,91926,91928],{"class":326,"line":8706},[324,91925,52507],{"class":867},[324,91927,51357],{"class":52022},[324,91929,52029],{"class":867},[1871,91931,91932],{},[195,91933,91934],{},"手写一个节流函数来处理",[19,91936,71674],{},[19,91938,90988],{},[19,91940,91941],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器则不开启新定时器",[19,91943,91944],{},"③如果没有定时器则开启定时器，记得存放到变量里面:定时器里面调用执行的函数；定时器里面要把定时器清空",[316,91946,91948],{"className":51355,"code":91947,"language":51357,"meta":50,"style":50},"\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",[269,91949,91950,91960,91974,91978,91986,92000,92020,92032,92040,92046,92056,92068,92080,92090,92102,92112,92122,92134,92138,92146,92154,92158,92166,92184,92202,92210,92228,92238,92246,92256,92260,92264,92268,92273,92278,92283,92288,92293,92298,92315,92321,92329,92340,92355,92362,92367,92372,92382,92387,92392,92397,92401,92405,92409,92429,92437,92445,92449],{"__ignoreMap":50},[324,91951,91952,91954,91956,91958],{"class":326,"line":327},[324,91953,52019],{"class":867},[324,91955,52023],{"class":52022},[324,91957,52026],{"class":734},[324,91959,52029],{"class":867},[324,91961,91962,91964,91966,91968,91970,91972],{"class":326,"line":203},[324,91963,1774],{"class":867},[324,91965,51357],{"class":52022},[324,91967,52038],{"class":734},[324,91969,913],{"class":867},[324,91971,52043],{"class":738},[324,91973,52029],{"class":867},[324,91975,91976],{"class":326,"line":338},[324,91977,488],{"emptyLinePlaceholder":487},[324,91979,91980,91982,91984],{"class":326,"line":344},[324,91981,1774],{"class":867},[324,91983,52056],{"class":52022},[324,91985,52029],{"class":867},[324,91987,91988,91990,91992,91994,91996,91998],{"class":326,"line":484},[324,91989,52866],{"class":867},[324,91991,52066],{"class":52022},[324,91993,52069],{"class":734},[324,91995,913],{"class":867},[324,91997,52074],{"class":738},[324,91999,52029],{"class":867},[324,92001,92002,92004,92006,92008,92010,92012,92014,92016,92018],{"class":326,"line":491},[324,92003,52866],{"class":867},[324,92005,52066],{"class":52022},[324,92007,15649],{"class":734},[324,92009,913],{"class":867},[324,92011,52113],{"class":738},[324,92013,52093],{"class":734},[324,92015,913],{"class":867},[324,92017,52120],{"class":738},[324,92019,52029],{"class":867},[324,92021,92022,92024,92026,92028,92030],{"class":326,"line":496},[324,92023,52866],{"class":867},[324,92025,52129],{"class":52022},[324,92027,52132],{"class":867},[324,92029,52129],{"class":52022},[324,92031,52029],{"class":867},[324,92033,92034,92036,92038],{"class":326,"line":502},[324,92035,52866],{"class":867},[324,92037,775],{"class":52022},[324,92039,52029],{"class":867},[324,92041,92042,92044],{"class":326,"line":508},[324,92043,55474],{"class":734},[324,92045,16301],{"class":867},[324,92047,92048,92050,92052,92054],{"class":326,"line":514},[324,92049,73318],{"class":916},[324,92051,52159],{"class":867},[324,92053,61227],{"class":916},[324,92055,2025],{"class":867},[324,92057,92058,92060,92062,92064,92066],{"class":326,"line":2343},[324,92059,55493],{"class":916},[324,92061,52159],{"class":867},[324,92063,2453],{"class":916},[324,92065,52214],{"class":863},[324,92067,2025],{"class":867},[324,92069,92070,92072,92074,92076,92078],{"class":326,"line":2348},[324,92071,55507],{"class":916},[324,92073,52159],{"class":867},[324,92075,2453],{"class":916},[324,92077,52214],{"class":863},[324,92079,2025],{"class":867},[324,92081,92082,92084,92086,92088],{"class":326,"line":2354},[324,92083,55606],{"class":916},[324,92085,52159],{"class":867},[324,92087,90728],{"class":916},[324,92089,2025],{"class":867},[324,92091,92092,92094,92096,92098,92100],{"class":326,"line":2359},[324,92093,55644],{"class":916},[324,92095,52159],{"class":867},[324,92097,1689],{"class":916},[324,92099,52214],{"class":863},[324,92101,2025],{"class":867},[324,92103,92104,92106,92108,92110],{"class":326,"line":2373},[324,92105,58138],{"class":916},[324,92107,52159],{"class":867},[324,92109,61564],{"class":916},[324,92111,2025],{"class":867},[324,92113,92114,92116,92118,92120],{"class":326,"line":2378},[324,92115,58008],{"class":916},[324,92117,52159],{"class":867},[324,92119,52314],{"class":916},[324,92121,2025],{"class":867},[324,92123,92124,92126,92128,92130,92132],{"class":326,"line":2384},[324,92125,90767],{"class":916},[324,92127,52159],{"class":867},[324,92129,1183],{"class":916},[324,92131,52214],{"class":863},[324,92133,2025],{"class":867},[324,92135,92136],{"class":326,"line":2405},[324,92137,2917],{"class":867},[324,92139,92140,92142,92144],{"class":326,"line":2410},[324,92141,53139],{"class":867},[324,92143,775],{"class":52022},[324,92145,52029],{"class":867},[324,92147,92148,92150,92152],{"class":326,"line":2424},[324,92149,52507],{"class":867},[324,92151,52056],{"class":52022},[324,92153,52029],{"class":867},[324,92155,92156],{"class":326,"line":2429},[324,92157,488],{"emptyLinePlaceholder":487},[324,92159,92160,92162,92164],{"class":326,"line":2458},[324,92161,1774],{"class":867},[324,92163,52522],{"class":52022},[324,92165,52029],{"class":867},[324,92167,92168,92170,92172,92174,92176,92178,92180,92182],{"class":326,"line":2463},[324,92169,52866],{"class":867},[324,92171,52333],{"class":52022},[324,92173,54208],{"class":734},[324,92175,913],{"class":867},[324,92177,54213],{"class":738},[324,92179,56036],{"class":867},[324,92181,52333],{"class":52022},[324,92183,52029],{"class":867},[324,92185,92186,92188,92190,92192,92194,92196,92198,92200],{"class":326,"line":2480},[324,92187,52866],{"class":867},[324,92189,52535],{"class":52022},[324,92191,55961],{"class":734},[324,92193,913],{"class":867},[324,92195,88996],{"class":738},[324,92197,56036],{"class":867},[324,92199,52535],{"class":52022},[324,92201,52029],{"class":867},[324,92203,92204,92206,92208],{"class":326,"line":2485},[324,92205,52866],{"class":867},[324,92207,52535],{"class":52022},[324,92209,52029],{"class":867},[324,92211,92212,92214,92216,92218,92220,92222,92224,92226],{"class":326,"line":2490},[324,92213,11950],{"class":863},[324,92215,87655],{"class":916},[324,92217,14293],{"class":863},[324,92219,55118],{"class":867},[324,92221,55121],{"class":734},[324,92223,868],{"class":867},[324,92225,90868],{"class":738},[324,92227,874],{"class":867},[324,92229,92230,92232,92234,92236],{"class":326,"line":2495},[324,92231,52941],{"class":863},[324,92233,10167],{"class":867},[324,92235,913],{"class":863},[324,92237,48055],{"class":916},[324,92239,92240,92242,92244],{"class":326,"line":2509},[324,92241,70806],{"class":863},[324,92243,90887],{"class":734},[324,92245,11582],{"class":867},[324,92247,92248,92250,92252,92254],{"class":326,"line":2514},[324,92249,90894],{"class":867},[324,92251,913],{"class":863},[324,92253,3761],{"class":867},[324,92255,3431],{"class":863},[324,92257,92258],{"class":326,"line":3306},[324,92259,90905],{"class":772},[324,92261,92262],{"class":326,"line":3320},[324,92263,2917],{"class":867},[324,92265,92266],{"class":326,"line":3328},[324,92267,90914],{"class":772},[324,92269,92270],{"class":326,"line":3333},[324,92271,92272],{"class":772},"    \u002F\u002F 手写节流函数  每隔500ms+1\n",[324,92274,92275],{"class":326,"line":3339},[324,92276,92277],{"class":772},"    \u002F\u002F 1.声明一个定时器变量\n",[324,92279,92280],{"class":326,"line":3345},[324,92281,92282],{"class":772},"    \u002F\u002F 2.当鼠标每次滑动都先判断是否有定时器,如果有定时器则不开启新定时器\n",[324,92284,92285],{"class":326,"line":3350},[324,92286,92287],{"class":772},"    \u002F\u002F 3.如果没有定时器则开启定时器,记得存到变量里面\n",[324,92289,92290],{"class":326,"line":8677},[324,92291,92292],{"class":772},"    \u002F\u002F 3.1定时器里面调用执行函数\n",[324,92294,92295],{"class":326,"line":8701},[324,92296,92297],{"class":772},"    \u002F\u002F 3.2定时器里面要把定时器清空\n",[324,92299,92300,92302,92305,92307,92309,92311,92313],{"class":326,"line":8706},[324,92301,70806],{"class":863},[324,92303,92304],{"class":734}," throttle",[324,92306,868],{"class":867},[324,92308,91359],{"class":5945},[324,92310,13164],{"class":867},[324,92312,1584],{"class":5945},[324,92314,13171],{"class":867},[324,92316,92317,92319],{"class":326,"line":8712},[324,92318,80494],{"class":863},[324,92320,91372],{"class":867},[324,92322,92323,92325,92327],{"class":326,"line":8739},[324,92324,74704],{"class":863},[324,92326,59640],{"class":863},[324,92328,55174],{"class":867},[324,92330,92331,92333,92335,92337],{"class":326,"line":8744},[324,92332,3226],{"class":863},[324,92334,2389],{"class":867},[324,92336,1091],{"class":863},[324,92338,92339],{"class":867},"timer) {\n",[324,92341,92342,92345,92347,92349,92351,92353],{"class":326,"line":8750},[324,92343,92344],{"class":867},"          timer ",[324,92346,913],{"class":863},[324,92348,91413],{"class":734},[324,92350,868],{"class":867},[324,92352,55171],{"class":863},[324,92354,55174],{"class":867},[324,92356,92357,92360],{"class":326,"line":8762},[324,92358,92359],{"class":734},"            fn",[324,92361,2706],{"class":867},[324,92363,92364],{"class":326,"line":8774},[324,92365,92366],{"class":772},"            \u002F\u002F 清空定时器,当时间到了,定时器就停止了,但原来那个timer还有,\n",[324,92368,92369],{"class":326,"line":8786},[324,92370,92371],{"class":772},"            \u002F\u002F 所以需要清除定时器,这样timer就是空的了,然后就又重复执行了\n",[324,92373,92374,92377,92379],{"class":326,"line":10445},[324,92375,92376],{"class":867},"            timer ",[324,92378,913],{"class":863},[324,92380,92381],{"class":916}," null\n",[324,92383,92384],{"class":326,"line":10470},[324,92385,92386],{"class":772},"            \u002F\u002F 不能用clearTimeout(timer)\n",[324,92388,92389],{"class":326,"line":10493},[324,92390,92391],{"class":772},"            \u002F\u002F 在开启的定时器里边是无法清除定时器的\n",[324,92393,92394],{"class":326,"line":10517},[324,92395,92396],{"class":867},"          }, t)\n",[324,92398,92399],{"class":326,"line":10522},[324,92400,3258],{"class":867},[324,92402,92403],{"class":326,"line":10527},[324,92404,53120],{"class":867},[324,92406,92407],{"class":326,"line":10532},[324,92408,2917],{"class":867},[324,92410,92411,92413,92415,92417,92419,92421,92423,92425,92427],{"class":326,"line":10541},[324,92412,90929],{"class":867},[324,92414,58535],{"class":734},[324,92416,868],{"class":867},[324,92418,90936],{"class":738},[324,92420,13164],{"class":867},[324,92422,91895],{"class":734},[324,92424,90945],{"class":867},[324,92426,65796],{"class":916},[324,92428,31219],{"class":867},[324,92430,92431,92433,92435],{"class":326,"line":10546},[324,92432,53139],{"class":867},[324,92434,52535],{"class":52022},[324,92436,52029],{"class":867},[324,92438,92439,92441,92443],{"class":326,"line":10552},[324,92440,52507],{"class":867},[324,92442,52522],{"class":52022},[324,92444,52029],{"class":867},[324,92446,92447],{"class":326,"line":10573},[324,92448,488],{"emptyLinePlaceholder":487},[324,92450,92451,92453,92455],{"class":326,"line":10579},[324,92452,52507],{"class":867},[324,92454,51357],{"class":52022},[324,92456,52029],{"class":867},[35,92458,92460],{"id":92459},"_4173-清除定时器遇到的问题","4.17.3 清除定时器遇到的问题",[316,92462,92464],{"className":53789,"code":92463,"language":53791,"meta":50,"style":50},"\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",[269,92465,92466,92474,92482,92487,92492,92497,92502,92506,92514],{"__ignoreMap":50},[324,92467,92468,92470,92472],{"class":326,"line":327},[324,92469,1774],{"class":867},[324,92471,52522],{"class":52022},[324,92473,52029],{"class":867},[324,92475,92476,92478,92480],{"class":326,"line":203},[324,92477,52866],{"class":867},[324,92479,52535],{"class":52022},[324,92481,52029],{"class":867},[324,92483,92484],{"class":326,"line":338},[324,92485,92486],{"class":867},"    let timer = null\n",[324,92488,92489],{"class":326,"line":344},[324,92490,92491],{"class":867},"    timer = setTimeout(() => {\n",[324,92493,92494],{"class":326,"line":484},[324,92495,92496],{"class":867},"      clearTimeout(timer)\n",[324,92498,92499],{"class":326,"line":491},[324,92500,92501],{"class":867},"      console.log(timer)\n",[324,92503,92504],{"class":326,"line":496},[324,92505,60947],{"class":867},[324,92507,92508,92510,92512],{"class":326,"line":502},[324,92509,53139],{"class":867},[324,92511,52535],{"class":52022},[324,92513,52029],{"class":867},[324,92515,92516,92518,92520],{"class":326,"line":508},[324,92517,52507],{"class":867},[324,92519,52522],{"class":52022},[324,92521,52029],{"class":867},[19,92523,92524],{},"输出为1",[19,92526,92527],{},"在开启的定时器里边写清除定时器",[19,92529,92530],{},"总结：在setTimeout中是无法删除定时器的，因为定时器还在运作，所以使用timer=null 而不是clearTimeout(timer)",[35,92532,92534],{"id":92533},"_4174-节流综合案例","4.17.4 节流综合案例",[19,92536,92537],{},"页面打开，可以记录上一次的视频播放位置",[19,92539,92540],{},[48,92541],{"alt":50,"src":92542},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-356.png",[19,92544,92545],{},[48,92546],{"alt":50,"src":92547},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-357.png",[316,92549,92551],{"className":51355,"code":92550,"language":51357,"meta":50,"style":50},"\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",[269,92552,92553,92563,92577,92581,92589,92603,92623,92643,92665,92678,92686,92692,92702,92712,92722,92726,92730,92737,92750,92762,92766,92770,92780,92792,92806,92810,92814,92821,92831,92844,92856,92866,92876,92892,92904,92908,92912,92920,92930,92942,92952,92962,92972,92976,92980,92990,93001,93005,93013,93021,93025,93033,93048,93063,93078,93099,93107,93115,93130,93152,93160,93175,93201,93227,93253,93261,93269,93288,93296,93301,93320,93325,93343,93348,93353,93361,93366,93380,93388,93393,93410,93414,93419,93441,93445,93453,93461,93465],{"__ignoreMap":50},[324,92554,92555,92557,92559,92561],{"class":326,"line":327},[324,92556,52019],{"class":867},[324,92558,52023],{"class":52022},[324,92560,52026],{"class":734},[324,92562,52029],{"class":867},[324,92564,92565,92567,92569,92571,92573,92575],{"class":326,"line":203},[324,92566,1774],{"class":867},[324,92568,51357],{"class":52022},[324,92570,52038],{"class":734},[324,92572,913],{"class":867},[324,92574,52043],{"class":738},[324,92576,52029],{"class":867},[324,92578,92579],{"class":326,"line":338},[324,92580,488],{"emptyLinePlaceholder":487},[324,92582,92583,92585,92587],{"class":326,"line":344},[324,92584,1774],{"class":867},[324,92586,52056],{"class":52022},[324,92588,52029],{"class":867},[324,92590,92591,92593,92595,92597,92599,92601],{"class":326,"line":484},[324,92592,52866],{"class":867},[324,92594,52066],{"class":52022},[324,92596,52069],{"class":734},[324,92598,913],{"class":867},[324,92600,52074],{"class":738},[324,92602,59849],{"class":867},[324,92604,92605,92607,92609,92611,92613,92615,92617,92619,92621],{"class":326,"line":491},[324,92606,52866],{"class":867},[324,92608,52066],{"class":52022},[324,92610,52085],{"class":734},[324,92612,913],{"class":867},[324,92614,52090],{"class":738},[324,92616,52093],{"class":734},[324,92618,913],{"class":867},[324,92620,52098],{"class":738},[324,92622,59849],{"class":867},[324,92624,92625,92627,92629,92631,92633,92635,92637,92639,92641],{"class":326,"line":496},[324,92626,52866],{"class":867},[324,92628,52066],{"class":52022},[324,92630,15649],{"class":734},[324,92632,913],{"class":867},[324,92634,52113],{"class":738},[324,92636,52093],{"class":734},[324,92638,913],{"class":867},[324,92640,52120],{"class":738},[324,92642,59849],{"class":867},[324,92644,92645,92647,92649,92651,92653,92656,92658,92660,92663],{"class":326,"line":502},[324,92646,52866],{"class":867},[324,92648,52066],{"class":52022},[324,92650,15649],{"class":734},[324,92652,913],{"class":867},[324,92654,92655],{"class":738},"\"referrer\"",[324,92657,52093],{"class":734},[324,92659,913],{"class":867},[324,92661,92662],{"class":738},"\"never\"",[324,92664,59849],{"class":867},[324,92666,92667,92669,92671,92674,92676],{"class":326,"line":508},[324,92668,52866],{"class":867},[324,92670,52129],{"class":52022},[324,92672,92673],{"class":867},">综合案例\u003C\u002F",[324,92675,52129],{"class":52022},[324,92677,52029],{"class":867},[324,92679,92680,92682,92684],{"class":326,"line":514},[324,92681,52866],{"class":867},[324,92683,775],{"class":52022},[324,92685,52029],{"class":867},[324,92687,92688,92690],{"class":326,"line":2343},[324,92689,7132],{"class":52022},[324,92691,16301],{"class":867},[324,92693,92694,92696,92698,92700],{"class":326,"line":2348},[324,92695,55417],{"class":916},[324,92697,52159],{"class":867},[324,92699,1056],{"class":916},[324,92701,2025],{"class":867},[324,92703,92704,92706,92708,92710],{"class":326,"line":2354},[324,92705,55428],{"class":916},[324,92707,52159],{"class":867},[324,92709,1056],{"class":916},[324,92711,2025],{"class":867},[324,92713,92714,92716,92718,92720],{"class":326,"line":2359},[324,92715,73318],{"class":916},[324,92717,52159],{"class":867},[324,92719,61227],{"class":916},[324,92721,2025],{"class":867},[324,92723,92724],{"class":326,"line":2373},[324,92725,2917],{"class":867},[324,92727,92728],{"class":326,"line":2378},[324,92729,488],{"emptyLinePlaceholder":487},[324,92731,92732,92735],{"class":326,"line":2384},[324,92733,92734],{"class":734},"    .container",[324,92736,16301],{"class":867},[324,92738,92739,92741,92743,92746,92748],{"class":326,"line":2405},[324,92740,55493],{"class":916},[324,92742,52159],{"class":867},[324,92744,92745],{"class":916},"1200",[324,92747,52214],{"class":863},[324,92749,2025],{"class":867},[324,92751,92752,92754,92756,92758,92760],{"class":326,"line":2410},[324,92753,55428],{"class":916},[324,92755,52159],{"class":867},[324,92757,1056],{"class":916},[324,92759,52278],{"class":916},[324,92761,2025],{"class":867},[324,92763,92764],{"class":326,"line":2424},[324,92765,2917],{"class":867},[324,92767,92768],{"class":326,"line":2429},[324,92769,488],{"emptyLinePlaceholder":487},[324,92771,92772,92775,92778],{"class":326,"line":2458},[324,92773,92774],{"class":734},"    .video",[324,92776,92777],{"class":52022}," video",[324,92779,16301],{"class":867},[324,92781,92782,92784,92786,92788,92790],{"class":326,"line":2463},[324,92783,55493],{"class":916},[324,92785,52159],{"class":867},[324,92787,1175],{"class":916},[324,92789,1192],{"class":863},[324,92791,2025],{"class":867},[324,92793,92794,92796,92798,92800,92802,92804],{"class":326,"line":2480},[324,92795,55417],{"class":916},[324,92797,52159],{"class":867},[324,92799,1564],{"class":916},[324,92801,52214],{"class":863},[324,92803,4822],{"class":916},[324,92805,2025],{"class":867},[324,92807,92808],{"class":326,"line":2485},[324,92809,2917],{"class":867},[324,92811,92812],{"class":326,"line":2490},[324,92813,488],{"emptyLinePlaceholder":487},[324,92815,92816,92819],{"class":326,"line":2495},[324,92817,92818],{"class":734},"    .elevator",[324,92820,16301],{"class":867},[324,92822,92823,92825,92827,92829],{"class":326,"line":2509},[324,92824,55481],{"class":916},[324,92826,52159],{"class":867},[324,92828,86955],{"class":916},[324,92830,2025],{"class":867},[324,92832,92833,92835,92837,92840,92842],{"class":326,"line":2514},[324,92834,55669],{"class":916},[324,92836,52159],{"class":867},[324,92838,92839],{"class":916},"280",[324,92841,52214],{"class":863},[324,92843,2025],{"class":867},[324,92845,92846,92848,92850,92852,92854],{"class":326,"line":3306},[324,92847,87149],{"class":916},[324,92849,52159],{"class":867},[324,92851,1564],{"class":916},[324,92853,52214],{"class":863},[324,92855,2025],{"class":867},[324,92857,92858,92860,92862,92864],{"class":326,"line":3320},[324,92859,86962],{"class":916},[324,92861,52159],{"class":867},[324,92863,86967],{"class":916},[324,92865,2025],{"class":867},[324,92867,92868,92870,92872,92874],{"class":326,"line":3328},[324,92869,62443],{"class":916},[324,92871,52159],{"class":867},[324,92873,61564],{"class":916},[324,92875,2025],{"class":867},[324,92877,92878,92880,92882,92884,92886,92888,92890],{"class":326,"line":3333},[324,92879,62699],{"class":916},[324,92881,52159],{"class":867},[324,92883,1082],{"class":916},[324,92885,52214],{"class":863},[324,92887,52243],{"class":916},[324,92889,62966],{"class":916},[324,92891,2025],{"class":867},[324,92893,92894,92896,92898,92900,92902],{"class":326,"line":3339},[324,92895,55493],{"class":916},[324,92897,52159],{"class":867},[324,92899,1771],{"class":916},[324,92901,52214],{"class":863},[324,92903,2025],{"class":867},[324,92905,92906],{"class":326,"line":3345},[324,92907,2917],{"class":867},[324,92909,92910],{"class":326,"line":3350},[324,92911,488],{"emptyLinePlaceholder":487},[324,92913,92914,92916,92918],{"class":326,"line":8677},[324,92915,92818],{"class":734},[324,92917,2130],{"class":52022},[324,92919,16301],{"class":867},[324,92921,92922,92924,92926,92928],{"class":326,"line":8701},[324,92923,55731],{"class":916},[324,92925,52159],{"class":867},[324,92927,61591],{"class":916},[324,92929,2025],{"class":867},[324,92931,92932,92934,92936,92938,92940],{"class":326,"line":8706},[324,92933,55417],{"class":916},[324,92935,52159],{"class":867},[324,92937,1310],{"class":916},[324,92939,52214],{"class":863},[324,92941,2025],{"class":867},[324,92943,92944,92946,92948,92950],{"class":326,"line":8712},[324,92945,64692],{"class":916},[324,92947,52159],{"class":867},[324,92949,55459],{"class":916},[324,92951,2025],{"class":867},[324,92953,92954,92956,92958,92960],{"class":326,"line":8739},[324,92955,58008],{"class":916},[324,92957,52159],{"class":867},[324,92959,52314],{"class":916},[324,92961,2025],{"class":867},[324,92963,92964,92966,92968,92970],{"class":326,"line":8744},[324,92965,58138],{"class":916},[324,92967,52159],{"class":867},[324,92969,62792],{"class":916},[324,92971,2025],{"class":867},[324,92973,92974],{"class":326,"line":8750},[324,92975,2917],{"class":867},[324,92977,92978],{"class":326,"line":8762},[324,92979,488],{"emptyLinePlaceholder":487},[324,92981,92982,92984,92986,92988],{"class":326,"line":8774},[324,92983,92818],{"class":734},[324,92985,2130],{"class":52022},[324,92987,64746],{"class":734},[324,92989,16301],{"class":867},[324,92991,92992,92994,92996,92999],{"class":326,"line":8786},[324,92993,58138],{"class":916},[324,92995,52159],{"class":867},[324,92997,92998],{"class":916},"#1286ff",[324,93000,2025],{"class":867},[324,93002,93003],{"class":326,"line":10445},[324,93004,2917],{"class":867},[324,93006,93007,93009,93011],{"class":326,"line":10470},[324,93008,53139],{"class":867},[324,93010,775],{"class":52022},[324,93012,52029],{"class":867},[324,93014,93015,93017,93019],{"class":326,"line":10493},[324,93016,52507],{"class":867},[324,93018,52056],{"class":52022},[324,93020,52029],{"class":867},[324,93022,93023],{"class":326,"line":10517},[324,93024,488],{"emptyLinePlaceholder":487},[324,93026,93027,93029,93031],{"class":326,"line":10522},[324,93028,1774],{"class":867},[324,93030,52522],{"class":52022},[324,93032,52029],{"class":867},[324,93034,93035,93037,93039,93041,93043,93046],{"class":326,"line":10527},[324,93036,52866],{"class":867},[324,93038,52333],{"class":52022},[324,93040,54208],{"class":734},[324,93042,913],{"class":867},[324,93044,93045],{"class":738},"\"container\"",[324,93047,52029],{"class":867},[324,93049,93050,93052,93054,93056,93058,93061],{"class":326,"line":10532},[324,93051,52063],{"class":867},[324,93053,52333],{"class":52022},[324,93055,54208],{"class":734},[324,93057,913],{"class":867},[324,93059,93060],{"class":738},"\"header\"",[324,93062,52029],{"class":867},[324,93064,93065,93067,93069,93071,93073,93076],{"class":326,"line":10541},[324,93066,55956],{"class":867},[324,93068,25],{"class":52022},[324,93070,61779],{"class":734},[324,93072,913],{"class":867},[324,93074,93075],{"class":738},"\"http:\u002F\u002Fpip.itcast.cn\"",[324,93077,52029],{"class":867},[324,93079,93080,93082,93084,93086,93088,93091,93093,93095,93097],{"class":326,"line":10546},[324,93081,56024],{"class":867},[324,93083,48],{"class":52022},[324,93085,55961],{"class":734},[324,93087,913],{"class":867},[324,93089,93090],{"class":738},"\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS学习-367.png\"",[324,93092,55969],{"class":734},[324,93094,913],{"class":867},[324,93096,8381],{"class":738},[324,93098,59849],{"class":867},[324,93100,93101,93103,93105],{"class":326,"line":10552},[324,93102,56129],{"class":867},[324,93104,25],{"class":52022},[324,93106,52029],{"class":867},[324,93108,93109,93111,93113],{"class":326,"line":10573},[324,93110,52498],{"class":867},[324,93112,52333],{"class":52022},[324,93114,52029],{"class":867},[324,93116,93117,93119,93121,93123,93125,93128],{"class":326,"line":10579},[324,93118,52063],{"class":867},[324,93120,52333],{"class":52022},[324,93122,54208],{"class":734},[324,93124,913],{"class":867},[324,93126,93127],{"class":738},"\"video\"",[324,93129,52029],{"class":867},[324,93131,93132,93134,93136,93138,93140,93143,93146,93148,93150],{"class":326,"line":10593},[324,93133,55956],{"class":867},[324,93135,28905],{"class":52022},[324,93137,55961],{"class":734},[324,93139,913],{"class":867},[324,93141,93142],{"class":738},"\"https:\u002F\u002Fv.itheima.net\u002FLapADhV6.mp4\"",[324,93144,93145],{"class":734}," controls",[324,93147,56036],{"class":867},[324,93149,28905],{"class":52022},[324,93151,52029],{"class":867},[324,93153,93154,93156,93158],{"class":326,"line":10599},[324,93155,52498],{"class":867},[324,93157,52333],{"class":52022},[324,93159,52029],{"class":867},[324,93161,93162,93164,93166,93168,93170,93173],{"class":326,"line":10626},[324,93163,52063],{"class":867},[324,93165,52333],{"class":52022},[324,93167,54208],{"class":734},[324,93169,913],{"class":867},[324,93171,93172],{"class":738},"\"elevator\"",[324,93174,52029],{"class":867},[324,93176,93177,93179,93181,93183,93185,93187,93190,93192,93194,93197,93199],{"class":326,"line":10635},[324,93178,55956],{"class":867},[324,93180,25],{"class":52022},[324,93182,61779],{"class":734},[324,93184,913],{"class":867},[324,93186,64958],{"class":738},[324,93188,93189],{"class":734}," data-ref",[324,93191,913],{"class":867},[324,93193,93127],{"class":738},[324,93195,93196],{"class":867},">视频介绍\u003C\u002F",[324,93198,25],{"class":52022},[324,93200,52029],{"class":867},[324,93202,93203,93205,93207,93209,93211,93213,93215,93217,93220,93223,93225],{"class":326,"line":10641},[324,93204,55956],{"class":867},[324,93206,25],{"class":52022},[324,93208,61779],{"class":734},[324,93210,913],{"class":867},[324,93212,64958],{"class":738},[324,93214,93189],{"class":734},[324,93216,913],{"class":867},[324,93218,93219],{"class":738},"\"intro\"",[324,93221,93222],{"class":867},">课程简介\u003C\u002F",[324,93224,25],{"class":52022},[324,93226,52029],{"class":867},[324,93228,93229,93231,93233,93235,93237,93239,93241,93243,93246,93249,93251],{"class":326,"line":10649},[324,93230,55956],{"class":867},[324,93232,25],{"class":52022},[324,93234,61779],{"class":734},[324,93236,913],{"class":867},[324,93238,64958],{"class":738},[324,93240,93189],{"class":734},[324,93242,913],{"class":867},[324,93244,93245],{"class":738},"\"outline\"",[324,93247,93248],{"class":867},">评论列表\u003C\u002F",[324,93250,25],{"class":52022},[324,93252,52029],{"class":867},[324,93254,93255,93257,93259],{"class":326,"line":10654},[324,93256,52498],{"class":867},[324,93258,52333],{"class":52022},[324,93260,52029],{"class":867},[324,93262,93263,93265,93267],{"class":326,"line":17333},[324,93264,53139],{"class":867},[324,93266,52333],{"class":52022},[324,93268,52029],{"class":867},[324,93270,93271,93273,93275,93277,93279,93282,93284,93286],{"class":326,"line":17339},[324,93272,52866],{"class":867},[324,93274,52535],{"class":52022},[324,93276,55961],{"class":734},[324,93278,913],{"class":867},[324,93280,93281],{"class":738},"\"https:\u002F\u002Fcdn.jsdelivr.net\u002Fnpm\u002Flodash@4.17.21\u002Flodash.min.js\"",[324,93283,56036],{"class":867},[324,93285,52535],{"class":52022},[324,93287,52029],{"class":867},[324,93289,93290,93292,93294],{"class":326,"line":17362},[324,93291,52866],{"class":867},[324,93293,52535],{"class":52022},[324,93295,52029],{"class":867},[324,93297,93298],{"class":326,"line":17368},[324,93299,93300],{"class":772},"    \u002F\u002F 1.获取元素 要对视频进行操作\n",[324,93302,93303,93305,93307,93309,93311,93313,93315,93318],{"class":326,"line":17391},[324,93304,11950],{"class":863},[324,93306,92777],{"class":916},[324,93308,14293],{"class":863},[324,93310,55118],{"class":867},[324,93312,55121],{"class":734},[324,93314,868],{"class":867},[324,93316,93317],{"class":738},"'video'",[324,93319,874],{"class":867},[324,93321,93322],{"class":326,"line":17405},[324,93323,93324],{"class":772},"    \u002F\u002F 这个事件类似于点击事件的另外一个写法.onclick\n",[324,93326,93327,93330,93332,93334,93336,93339,93341],{"class":326,"line":17425},[324,93328,93329],{"class":867},"    video.ontimeupdate ",[324,93331,913],{"class":863},[324,93333,89077],{"class":867},[324,93335,91895],{"class":734},[324,93337,93338],{"class":867},"(() ",[324,93340,85444],{"class":863},[324,93342,16301],{"class":867},[324,93344,93345],{"class":326,"line":17431},[324,93346,93347],{"class":772},"      \u002F\u002F 要进行本地存储,存当前播放的时间\n",[324,93349,93350],{"class":326,"line":17442},[324,93351,93352],{"class":772},"      \u002F\u002F 控制台输出当前的时间\n",[324,93354,93355,93358],{"class":326,"line":17465},[324,93356,93357],{"class":772},"      \u002F\u002F console.log(video.currentTime)",[324,93359,93360],{"class":772},"  \u002F\u002F获得当前的视频时间\n",[324,93362,93363],{"class":326,"line":17487},[324,93364,93365],{"class":772},"      \u002F\u002F 简单数据类型本地存储直接存储就可以,把当前的时间存储到本地存储\n",[324,93367,93368,93370,93372,93374,93377],{"class":326,"line":17492},[324,93369,75405],{"class":867},[324,93371,72376],{"class":734},[324,93373,868],{"class":867},[324,93375,93376],{"class":738},"'currentTime'",[324,93378,93379],{"class":867},", video.currentTime)\n",[324,93381,93382,93384,93386],{"class":326,"line":17498},[324,93383,55257],{"class":867},[324,93385,7139],{"class":916},[324,93387,874],{"class":867},[324,93389,93390],{"class":326,"line":17512},[324,93391,93392],{"class":772},"    \u002F\u002F 打开页面触发事件,就从本地存储里面取出事件,赋值给 video.currentTime\n",[324,93394,93395,93398,93401,93403,93406,93408],{"class":326,"line":17525},[324,93396,93397],{"class":867},"    video.",[324,93399,93400],{"class":734},"onloadeddata",[324,93402,14293],{"class":863},[324,93404,93405],{"class":867}," () ",[324,93407,85444],{"class":863},[324,93409,16301],{"class":867},[324,93411,93412],{"class":326,"line":17530},[324,93413,60734],{"class":772},[324,93415,93416],{"class":326,"line":17544},[324,93417,93418],{"class":772},"      \u002F\u002F 第一次打开的话,若本地存储无数据的话,就从0开始,从视频的开头开始,使用逻辑中断\n",[324,93420,93421,93424,93426,93429,93431,93433,93435,93437,93439],{"class":326,"line":17549},[324,93422,93423],{"class":867},"      video.currentTime ",[324,93425,913],{"class":863},[324,93427,93428],{"class":867}," localStorage.",[324,93430,72407],{"class":734},[324,93432,868],{"class":867},[324,93434,93376],{"class":738},[324,93436,14443],{"class":867},[324,93438,72079],{"class":863},[324,93440,48055],{"class":916},[324,93442,93443],{"class":326,"line":17555},[324,93444,2917],{"class":867},[324,93446,93447,93449,93451],{"class":326,"line":17560},[324,93448,53139],{"class":867},[324,93450,52535],{"class":52022},[324,93452,52029],{"class":867},[324,93454,93455,93457,93459],{"class":326,"line":17574},[324,93456,52507],{"class":867},[324,93458,52522],{"class":52022},[324,93460,52029],{"class":867},[324,93462,93463],{"class":326,"line":17579},[324,93464,488],{"emptyLinePlaceholder":487},[324,93466,93467,93469,93471],{"class":326,"line":17584},[324,93468,52507],{"class":867},[324,93470,51357],{"class":52022},[324,93472,52029],{"class":867},[775,93474,93475],{},"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":50,"searchDepth":203,"depth":203,"links":93477},[93478,93483,93487,93488,93489,93494,93499,93500,93501,93502,93509,93514,93515,93525,93529,93530,93534],{"id":77413,"depth":203,"text":77414,"children":93479},[93480,93481,93482],{"id":77417,"depth":338,"text":77418},{"id":77442,"depth":338,"text":77443},{"id":77454,"depth":338,"text":77455},{"id":77466,"depth":203,"text":77467,"children":93484},[93485,93486],{"id":77470,"depth":338,"text":77471},{"id":77485,"depth":338,"text":77486},{"id":77537,"depth":203,"text":77538},{"id":77581,"depth":203,"text":77582},{"id":77598,"depth":203,"text":77599,"children":93490},[93491,93492,93493],{"id":77602,"depth":338,"text":77603},{"id":77615,"depth":338,"text":77616},{"id":77720,"depth":338,"text":77721},{"id":78009,"depth":203,"text":78010,"children":93495},[93496,93497,93498],{"id":78013,"depth":338,"text":78014},{"id":78456,"depth":338,"text":78457},{"id":78867,"depth":338,"text":78868},{"id":78930,"depth":203,"text":78931},{"id":79009,"depth":203,"text":79010},{"id":79102,"depth":203,"text":79103},{"id":80947,"depth":203,"text":80948,"children":93503},[93504,93505,93506,93507,93508],{"id":80951,"depth":338,"text":80952},{"id":80963,"depth":338,"text":80964},{"id":81182,"depth":338,"text":81183},{"id":81200,"depth":338,"text":81201},{"id":81260,"depth":338,"text":81261},{"id":85528,"depth":203,"text":85529,"children":93510},[93511,93512,93513],{"id":85532,"depth":338,"text":85533},{"id":85550,"depth":338,"text":85551},{"id":85576,"depth":338,"text":85577},{"id":85585,"depth":203,"text":85586},{"id":85607,"depth":203,"text":85608,"children":93516},[93517,93518,93519,93520,93521,93522,93523,93524],{"id":85611,"depth":338,"text":85612},{"id":85872,"depth":338,"text":85873},{"id":86058,"depth":338,"text":86059},{"id":86425,"depth":338,"text":86426},{"id":86541,"depth":338,"text":86542},{"id":86577,"depth":338,"text":86578},{"id":86624,"depth":338,"text":86625},{"id":86658,"depth":338,"text":86659},{"id":88021,"depth":203,"text":88022,"children":93526},[93527,93528],{"id":88025,"depth":338,"text":88026},{"id":88062,"depth":338,"text":88063},{"id":89417,"depth":203,"text":89418},{"id":89788,"depth":203,"text":89789,"children":93531},[93532,93533],{"id":89792,"depth":338,"text":89793},{"id":89826,"depth":338,"text":89827},{"id":90555,"depth":203,"text":90556,"children":93535},[93536,93537,93538,93539],{"id":90559,"depth":338,"text":90560},{"id":91517,"depth":338,"text":91518},{"id":92459,"depth":338,"text":92460},{"id":92533,"depth":338,"text":92534},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch4-js",{"title":77402,"description":791},"wiki\u002F2025-09-02-JS学习\u002Fch4-js进阶","1dCbxNw1t9V3NJEB9OsdCj0OlTGnowDQ4ULzKgRbbCM",{"id":93546,"title":93547,"body":93548,"description":93559,"extension":792,"meta":93560,"navigation":487,"path":93562,"seo":93563,"stem":93564,"__hash__":93565},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Findex.md","JS学习",{"type":7,"value":93549,"toc":93557},[93550],[19,93551,93552,93553],{},"这部分学完，学vue之前先通一下框架前置知识，参考下面文档，后续整理这部分和vue\n",[25,93554,93555],{"href":93555,"rel":93556},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FENYhd6upDopC2Kxl5NicDeIEnkh?from=from_copylink",[29],{"title":50,"searchDepth":203,"depth":203,"links":93558},[],"三件套第三套学习",{"category":93561},"前端","\u002Fwiki\u002F2025-09-02-js",{"title":93547,"description":93559},"wiki\u002F2025-09-02-JS学习\u002Findex","lIV547GozsMOKKj0rXMMspVZbD8AexWpLGp2d1VgrPo",{"id":93567,"title":93568,"body":93569,"description":791,"extension":792,"meta":93674,"navigation":487,"path":93675,"seo":93676,"stem":93677,"__hash__":93678},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch1-安装.md","1.安装",{"type":7,"value":93570,"toc":93669},[93571,93578,93581,93584,93587,93591,93600,93603,93606,93610,93619,93622,93626,93629,93649,93652,93666],[19,93572,93573],{},[25,93574,93577],{"href":93575,"rel":93576},"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html%E8%8F%9C%E9%B8%9F%E6%95%99%E7%A8%8B",[29],"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html菜鸟教程",[10,93579,93568],{"id":93580},"_1安装",[19,93582,93583],{},"numpy是科学计算基础库,底层是C语言",[19,93585,93586],{},"三种方式：",[14,93588,93590],{"id":93589},"_11-通过pip安装","1.1 通过pip安装",[316,93592,93594],{"className":31100,"code":93593,"language":31102,"meta":50,"style":50},"pip install numpy\n",[269,93595,93596],{"__ignoreMap":50},[324,93597,93598],{"class":326,"line":327},[324,93599,93593],{"class":867},[19,93601,93602],{},"首选方式，自动处理依赖项",[19,93604,93605],{},"在提示系统命令符中使用cmd",[14,93607,93609],{"id":93608},"_12-通过anaconda安装","1.2 通过Anaconda安装",[316,93611,93613],{"className":31100,"code":93612,"language":31102,"meta":50,"style":50},"conda install numpy\n",[269,93614,93615],{"__ignoreMap":50},[324,93616,93617],{"class":326,"line":327},[324,93618,93612],{"class":867},[19,93620,93621],{},"自动解决环境依赖",[14,93623,93625],{"id":93624},"_13-通过系统包管理器linuxmacos","1.3 通过系统包管理器（linux\u002Fmacos）",[19,93627,93628],{},"对于Debian\u002FUbuntu",[316,93630,93632],{"className":31100,"code":93631,"language":31102,"meta":50,"style":50},"sudo apt-get install python3-numpy\n",[269,93633,93634],{"__ignoreMap":50},[324,93635,93636,93639,93641,93644,93646],{"class":326,"line":327},[324,93637,93638],{"class":867},"sudo apt",[324,93640,1396],{"class":863},[324,93642,93643],{"class":867},"get install python3",[324,93645,1396],{"class":863},[324,93647,93648],{"class":867},"numpy\n",[19,93650,93651],{},"对于Fedora:",[316,93653,93655],{"className":31100,"code":93654,"language":31102,"meta":50,"style":50},"sudo dnf install python3-numpy\n",[269,93656,93657],{"__ignoreMap":50},[324,93658,93659,93662,93664],{"class":326,"line":327},[324,93660,93661],{"class":867},"sudo dnf install python3",[324,93663,1396],{"class":863},[324,93665,93648],{"class":867},[775,93667,93668],{},"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":50,"searchDepth":203,"depth":203,"links":93670},[93671,93672,93673],{"id":93589,"depth":203,"text":93590},{"id":93608,"depth":203,"text":93609},{"id":93624,"depth":203,"text":93625},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch1",{"title":93568,"description":791},"wiki\u002F2025-08-14-numpy\u002Fch1-安装","_ZuIZAeV_nnjZGVbsLzTQoAT37M5Q_lcOQxAgl9-cB4",{"id":93680,"title":93681,"body":93682,"description":791,"extension":792,"meta":93795,"navigation":487,"path":93796,"seo":93797,"stem":93798,"__hash__":93799},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch10-算数函数.md","10.算数函数",{"type":7,"value":93683,"toc":93793},[93684,93687,93690,93693,93696,93699,93702,93705,93708,93711,93787,93790],[10,93685,93681],{"id":93686},"_10算数函数",[19,93688,93689],{},"加减乘除运算跟python基础语法没区别",[19,93691,93692],{},"除了python那种方法外还可以使用函数",[19,93694,93695],{},"加：np.add(a,b)",[19,93697,93698],{},"减：np.subtract(a,b)",[19,93700,93701],{},"乘：np.multiply(a,b)",[19,93703,93704],{},"除：np.divide(a,b) == a\u002Fb",[19,93706,93707],{},"取余：np.mod(a,b) == a%b",[19,93709,93710],{},"必须会的用法：",[316,93712,93714],{"className":31100,"code":93713,"language":31102,"meta":50,"style":50},"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",[269,93715,93716,93738,93759,93769,93782],{"__ignoreMap":50},[324,93717,93718,93720,93722,93725,93727,93730,93732,93734,93736],{"class":326,"line":327},[324,93719,25],{"class":867},[324,93721,913],{"class":863},[324,93723,93724],{"class":867},"np.arange(",[324,93726,1284],{"class":916},[324,93728,93729],{"class":867},").reshape(",[324,93731,938],{"class":916},[324,93733,1242],{"class":867},[324,93735,938],{"class":916},[324,93737,874],{"class":867},[324,93739,93740,93742,93744,93747,93749,93751,93753,93755,93757],{"class":326,"line":203},[324,93741,1127],{"class":867},[324,93743,913],{"class":863},[324,93745,93746],{"class":867},"np.array([",[324,93748,1310],{"class":916},[324,93750,1242],{"class":867},[324,93752,1310],{"class":916},[324,93754,1242],{"class":867},[324,93756,1310],{"class":916},[324,93758,5386],{"class":867},[324,93760,93761,93764,93766],{"class":326,"line":338},[324,93762,93763],{"class":867},"result",[324,93765,913],{"class":863},[324,93767,93768],{"class":867},"np.empty_like(a)\n",[324,93770,93771,93774,93777,93779],{"class":326,"line":344},[324,93772,93773],{"class":867},"np.add(a,b,",[324,93775,93776],{"class":5945},"out",[324,93778,913],{"class":863},[324,93780,93781],{"class":867},"result)\n",[324,93783,93784],{"class":326,"line":484},[324,93785,93786],{"class":867},"result\n",[19,93788,93789],{},"总结：使用函数可以使用out参数将结果放到具体的位置，在进行运算时，两个数组形状不同时，会进行广播操作，变成一样的",[775,93791,93792],{},"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":50,"searchDepth":203,"depth":203,"links":93794},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch10",{"title":93681,"description":791},"wiki\u002F2025-08-14-numpy\u002Fch10-算数函数","MRir4Wr30-SYAykqeiub6_1Xao5nccQZ6Li54ohb_SQ",{"id":93801,"title":93802,"body":93803,"description":791,"extension":792,"meta":94565,"navigation":487,"path":94566,"seo":94567,"stem":94568,"__hash__":94569},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch11-统计函数.md","11.统计函数",{"type":7,"value":93804,"toc":94552},[93805,93808,93811,93814,93818,93857,93861,93905,93965,93969,93972,94011,94014,94059,94063,94099,94103,94172,94176,94240,94244,94247,94250,94253,94256,94292,94296,94336,94340,94412,94415,94419,94482,94486,94549],[10,93806,93802],{"id":93807},"_11统计函数",[19,93809,93810],{},"sum max min mean",[19,93812,93813],{},"这些有axis参数，可以指定方向",[14,93815,93817],{"id":93816},"_111-sum求和函数","11.1 sum()求和函数",[316,93819,93821],{"className":31100,"code":93820,"language":31102,"meta":50,"style":50},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.sum(a)#求和\n",[269,93822,93823,93828,93849],{"__ignoreMap":50},[324,93824,93825],{"class":326,"line":327},[324,93826,93827],{"class":772},"#创建一维数组\n",[324,93829,93830,93832,93834,93837,93839,93841,93843,93845,93847],{"class":326,"line":203},[324,93831,25],{"class":867},[324,93833,913],{"class":863},[324,93835,93836],{"class":867},"np.random.randint(",[324,93838,1082],{"class":916},[324,93840,1242],{"class":867},[324,93842,1175],{"class":916},[324,93844,1242],{"class":867},[324,93846,1564],{"class":916},[324,93848,874],{"class":867},[324,93850,93851,93854],{"class":326,"line":338},[324,93852,93853],{"class":867},"np.sum(a)",[324,93855,93856],{"class":772},"#求和\n",[14,93858,93860],{"id":93859},"_112-max求最大值函数","11.2 max()求最大值函数",[316,93862,93864],{"className":31100,"code":93863,"language":31102,"meta":50,"style":50},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.max(a)\n#最大索引(求最大元素的索引)arg\nnp.argmax(a)\n",[269,93865,93866,93870,93890,93895,93900],{"__ignoreMap":50},[324,93867,93868],{"class":326,"line":327},[324,93869,93827],{"class":772},[324,93871,93872,93874,93876,93878,93880,93882,93884,93886,93888],{"class":326,"line":203},[324,93873,25],{"class":867},[324,93875,913],{"class":863},[324,93877,93836],{"class":867},[324,93879,1082],{"class":916},[324,93881,1242],{"class":867},[324,93883,1175],{"class":916},[324,93885,1242],{"class":867},[324,93887,1564],{"class":916},[324,93889,874],{"class":867},[324,93891,93892],{"class":326,"line":338},[324,93893,93894],{"class":867},"np.max(a)\n",[324,93896,93897],{"class":326,"line":344},[324,93898,93899],{"class":772},"#最大索引(求最大元素的索引)arg\n",[324,93901,93902],{"class":326,"line":484},[324,93903,93904],{"class":867},"np.argmax(a)\n",[316,93906,93908],{"className":31100,"code":93907,"language":31102,"meta":50,"style":50},"a = np.array([1, 5, 3])\nb = np.array([3, 2, 4])\n\nprint(np.maximum(a, b))   # [3 5 4]，每个位置上取较大值\n",[269,93909,93910,93931,93951,93955],{"__ignoreMap":50},[324,93911,93912,93914,93916,93919,93921,93923,93925,93927,93929],{"class":326,"line":327},[324,93913,11648],{"class":867},[324,93915,913],{"class":863},[324,93917,93918],{"class":867}," np.array([",[324,93920,1082],{"class":916},[324,93922,13164],{"class":867},[324,93924,1183],{"class":916},[324,93926,13164],{"class":867},[324,93928,938],{"class":916},[324,93930,5386],{"class":867},[324,93932,93933,93935,93937,93939,93941,93943,93945,93947,93949],{"class":326,"line":203},[324,93934,11674],{"class":867},[324,93936,913],{"class":863},[324,93938,93918],{"class":867},[324,93940,938],{"class":916},[324,93942,13164],{"class":867},[324,93944,944],{"class":916},[324,93946,13164],{"class":867},[324,93948,1157],{"class":916},[324,93950,5386],{"class":867},[324,93952,93953],{"class":326,"line":338},[324,93954,488],{"emptyLinePlaceholder":487},[324,93956,93957,93959,93962],{"class":326,"line":344},[324,93958,31137],{"class":916},[324,93960,93961],{"class":867},"(np.maximum(a, b))   ",[324,93963,93964],{"class":772},"# [3 5 4]，每个位置上取较大值\n",[14,93966,93968],{"id":93967},"_113-mean求平均值函数","11.3 mean()求平均值函数",[19,93970,93971],{},"①一维数组：",[316,93973,93975],{"className":31100,"code":93974,"language":31102,"meta":50,"style":50},"#创建一维数组\na=np.random.randint(1,100,20)\n#求平均值\nnp.mean(a)\n",[269,93976,93977,93981,94001,94006],{"__ignoreMap":50},[324,93978,93979],{"class":326,"line":327},[324,93980,93827],{"class":772},[324,93982,93983,93985,93987,93989,93991,93993,93995,93997,93999],{"class":326,"line":203},[324,93984,25],{"class":867},[324,93986,913],{"class":863},[324,93988,93836],{"class":867},[324,93990,1082],{"class":916},[324,93992,1242],{"class":867},[324,93994,1175],{"class":916},[324,93996,1242],{"class":867},[324,93998,1564],{"class":916},[324,94000,874],{"class":867},[324,94002,94003],{"class":326,"line":338},[324,94004,94005],{"class":772},"#求平均值\n",[324,94007,94008],{"class":326,"line":344},[324,94009,94010],{"class":867},"np.mean(a)\n",[19,94012,94013],{},"②二维数组",[316,94015,94017],{"className":31100,"code":94016,"language":31102,"meta":50,"style":50},"#二维数组\naa=np.arange(1,13).reshape(3,4)\n#对数组中的所有数求平均\nnp.mean(aa)\n",[269,94018,94019,94024,94049,94054],{"__ignoreMap":50},[324,94020,94021],{"class":326,"line":327},[324,94022,94023],{"class":772},"#二维数组\n",[324,94025,94026,94029,94031,94033,94035,94037,94039,94041,94043,94045,94047],{"class":326,"line":203},[324,94027,94028],{"class":867},"aa",[324,94030,913],{"class":863},[324,94032,93724],{"class":867},[324,94034,1082],{"class":916},[324,94036,1242],{"class":867},[324,94038,1387],{"class":916},[324,94040,93729],{"class":867},[324,94042,938],{"class":916},[324,94044,1242],{"class":867},[324,94046,1157],{"class":916},[324,94048,874],{"class":867},[324,94050,94051],{"class":326,"line":338},[324,94052,94053],{"class":772},"#对数组中的所有数求平均\n",[324,94055,94056],{"class":326,"line":344},[324,94057,94058],{"class":867},"np.mean(aa)\n",[14,94060,94062],{"id":94061},"_114-median求中位数函数","11.4 median()求中位数函数",[316,94064,94066],{"className":31100,"code":94065,"language":31102,"meta":50,"style":50},"#求中位数\nb=np.arange(1,10)\nnp.median(b)\n#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[269,94067,94068,94073,94089,94094],{"__ignoreMap":50},[324,94069,94070],{"class":326,"line":327},[324,94071,94072],{"class":772},"#求中位数\n",[324,94074,94075,94077,94079,94081,94083,94085,94087],{"class":326,"line":203},[324,94076,1127],{"class":867},[324,94078,913],{"class":863},[324,94080,93724],{"class":867},[324,94082,1082],{"class":916},[324,94084,1242],{"class":867},[324,94086,1310],{"class":916},[324,94088,874],{"class":867},[324,94090,94091],{"class":326,"line":338},[324,94092,94093],{"class":867},"np.median(b)\n",[324,94095,94096],{"class":326,"line":344},[324,94097,94098],{"class":772},"#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[14,94100,94102],{"id":94101},"_115-power求幂运算函数","11.5 power()求幂运算函数",[316,94104,94106],{"className":31100,"code":94105,"language":31102,"meta":50,"style":50},"b=np.arange(1,10)\n#幂运算\n#第一个参数是要进行幂运算的数列，第二个参数是为方\nnp.power(b,2)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b)\nnp.power(b,2,out=y)\n",[269,94107,94108,94124,94129,94134,94143,94148,94157],{"__ignoreMap":50},[324,94109,94110,94112,94114,94116,94118,94120,94122],{"class":326,"line":327},[324,94111,1127],{"class":867},[324,94113,913],{"class":863},[324,94115,93724],{"class":867},[324,94117,1082],{"class":916},[324,94119,1242],{"class":867},[324,94121,1310],{"class":916},[324,94123,874],{"class":867},[324,94125,94126],{"class":326,"line":203},[324,94127,94128],{"class":772},"#幂运算\n",[324,94130,94131],{"class":326,"line":338},[324,94132,94133],{"class":772},"#第一个参数是要进行幂运算的数列，第二个参数是为方\n",[324,94135,94136,94139,94141],{"class":326,"line":344},[324,94137,94138],{"class":867},"np.power(b,",[324,94140,944],{"class":916},[324,94142,874],{"class":867},[324,94144,94145],{"class":326,"line":484},[324,94146,94147],{"class":772},"#或者以下代码，将数据存储起来\n",[324,94149,94150,94152,94154],{"class":326,"line":491},[324,94151,1709],{"class":867},[324,94153,913],{"class":863},[324,94155,94156],{"class":867},"np.empty_like(b)\n",[324,94158,94159,94161,94163,94165,94167,94169],{"class":326,"line":496},[324,94160,94138],{"class":867},[324,94162,944],{"class":916},[324,94164,1242],{"class":867},[324,94166,93776],{"class":5945},[324,94168,913],{"class":863},[324,94170,94171],{"class":867},"y)\n",[14,94173,94175],{"id":94174},"_116-sqrt求开方函数","11.6 sqrt()求开方函数",[316,94177,94179],{"className":31100,"code":94178,"language":31102,"meta":50,"style":50},"b=np.arange(1,10)\n#开方\nnp.sqrt(b)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b,dtype=float)\nnp.sqrt(b,out=y)\n",[269,94180,94181,94197,94202,94207,94211,94229],{"__ignoreMap":50},[324,94182,94183,94185,94187,94189,94191,94193,94195],{"class":326,"line":327},[324,94184,1127],{"class":867},[324,94186,913],{"class":863},[324,94188,93724],{"class":867},[324,94190,1082],{"class":916},[324,94192,1242],{"class":867},[324,94194,1310],{"class":916},[324,94196,874],{"class":867},[324,94198,94199],{"class":326,"line":203},[324,94200,94201],{"class":772},"#开方\n",[324,94203,94204],{"class":326,"line":338},[324,94205,94206],{"class":867},"np.sqrt(b)\n",[324,94208,94209],{"class":326,"line":344},[324,94210,94147],{"class":772},[324,94212,94213,94215,94217,94220,94223,94225,94227],{"class":326,"line":484},[324,94214,1709],{"class":867},[324,94216,913],{"class":863},[324,94218,94219],{"class":867},"np.empty_like(b,",[324,94221,94222],{"class":5945},"dtype",[324,94224,913],{"class":863},[324,94226,907],{"class":916},[324,94228,874],{"class":867},[324,94230,94231,94234,94236,94238],{"class":326,"line":491},[324,94232,94233],{"class":867},"np.sqrt(b,",[324,94235,93776],{"class":5945},[324,94237,913],{"class":863},[324,94239,94171],{"class":867},[14,94241,94243],{"id":94242},"_117-cumsum累计求和函数","11.7 cumsum()累计求和函数",[19,94245,94246],{},"对数组中的元素累计求和，可指定轴",[19,94248,94249],{},"#累计求和的意思是：",[19,94251,94252],{},"a = np.array([1, 2, 3, 4])",[19,94254,94255],{},"[1, 1+2, 1+2+3, 1+2+3+4] → [1, 3, 6, 10]",[316,94257,94259],{"className":31100,"code":94258,"language":31102,"meta":50,"style":50},"b=np.arange(1,10)\nnp.cumsum(b)\n#结果：\n#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[269,94260,94261,94277,94282,94287],{"__ignoreMap":50},[324,94262,94263,94265,94267,94269,94271,94273,94275],{"class":326,"line":327},[324,94264,1127],{"class":867},[324,94266,913],{"class":863},[324,94268,93724],{"class":867},[324,94270,1082],{"class":916},[324,94272,1242],{"class":867},[324,94274,1310],{"class":916},[324,94276,874],{"class":867},[324,94278,94279],{"class":326,"line":203},[324,94280,94281],{"class":867},"np.cumsum(b)\n",[324,94283,94284],{"class":326,"line":338},[324,94285,94286],{"class":772},"#结果：\n",[324,94288,94289],{"class":326,"line":344},[324,94290,94291],{"class":772},"#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[14,94293,94295],{"id":94294},"_118-cumprod累计求积函数","11.8 cumprod()累计求积函数",[316,94297,94299],{"className":31100,"code":94298,"language":31102,"meta":50,"style":50},"b=np.arange(1,10)\n#对数组中的元素累计求积，可指定轴\nnp.cumprod(b)\n#结果：\n#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[269,94300,94301,94317,94322,94327,94331],{"__ignoreMap":50},[324,94302,94303,94305,94307,94309,94311,94313,94315],{"class":326,"line":327},[324,94304,1127],{"class":867},[324,94306,913],{"class":863},[324,94308,93724],{"class":867},[324,94310,1082],{"class":916},[324,94312,1242],{"class":867},[324,94314,1310],{"class":916},[324,94316,874],{"class":867},[324,94318,94319],{"class":326,"line":203},[324,94320,94321],{"class":772},"#对数组中的元素累计求积，可指定轴\n",[324,94323,94324],{"class":326,"line":338},[324,94325,94326],{"class":867},"np.cumprod(b)\n",[324,94328,94329],{"class":326,"line":344},[324,94330,94286],{"class":772},[324,94332,94333],{"class":326,"line":484},[324,94334,94335],{"class":772},"#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[14,94337,94339],{"id":94338},"_119-uniqu删除重复元素排序","11.9 uniqu()删除重复元素+排序",[316,94341,94343],{"className":31100,"code":94342,"language":31102,"meta":50,"style":50},"#删除数组中的重复数据，并对数据进行排序\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",[269,94344,94345,94350,94398,94403,94407],{"__ignoreMap":50},[324,94346,94347],{"class":326,"line":327},[324,94348,94349],{"class":772},"#删除数组中的重复数据，并对数据进行排序\n",[324,94351,94352,94354,94356,94358,94360,94362,94364,94366,94368,94370,94372,94374,94376,94378,94380,94382,94384,94386,94388,94390,94392,94394,94396],{"class":326,"line":203},[324,94353,25],{"class":867},[324,94355,913],{"class":863},[324,94357,93746],{"class":867},[324,94359,1082],{"class":916},[324,94361,1242],{"class":867},[324,94363,944],{"class":916},[324,94365,1242],{"class":867},[324,94367,938],{"class":916},[324,94369,1242],{"class":867},[324,94371,1362],{"class":916},[324,94373,1242],{"class":867},[324,94375,938],{"class":916},[324,94377,1242],{"class":867},[324,94379,1310],{"class":916},[324,94381,1242],{"class":867},[324,94383,1062],{"class":916},[324,94385,1242],{"class":867},[324,94387,1056],{"class":916},[324,94389,1242],{"class":867},[324,94391,1639],{"class":916},[324,94393,1242],{"class":867},[324,94395,1157],{"class":916},[324,94397,5386],{"class":867},[324,94399,94400],{"class":326,"line":338},[324,94401,94402],{"class":867},"np.unique(a)\n",[324,94404,94405],{"class":326,"line":344},[324,94406,94286],{"class":772},[324,94408,94409],{"class":326,"line":484},[324,94410,94411],{"class":772},"#array([ 0,  1,  2,  3,  4, 10, 12, 23, 32])\n",[19,94413,94414],{},"升序形式排序",[14,94416,94418],{"id":94417},"_1110-nonzero返回非零元素索引","11.10 nonzero()返回非零元素索引",[316,94420,94422],{"className":31100,"code":94421,"language":31102,"meta":50,"style":50},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#返回数组中非零元素的索引\nnp.nonzero(a)\n",[269,94423,94424,94472,94477],{"__ignoreMap":50},[324,94425,94426,94428,94430,94432,94434,94436,94438,94440,94442,94444,94446,94448,94450,94452,94454,94456,94458,94460,94462,94464,94466,94468,94470],{"class":326,"line":327},[324,94427,25],{"class":867},[324,94429,913],{"class":863},[324,94431,93746],{"class":867},[324,94433,1082],{"class":916},[324,94435,1242],{"class":867},[324,94437,944],{"class":916},[324,94439,1242],{"class":867},[324,94441,938],{"class":916},[324,94443,1242],{"class":867},[324,94445,1362],{"class":916},[324,94447,1242],{"class":867},[324,94449,938],{"class":916},[324,94451,1242],{"class":867},[324,94453,1310],{"class":916},[324,94455,1242],{"class":867},[324,94457,1062],{"class":916},[324,94459,1242],{"class":867},[324,94461,1056],{"class":916},[324,94463,1242],{"class":867},[324,94465,1639],{"class":916},[324,94467,1242],{"class":867},[324,94469,1157],{"class":916},[324,94471,5386],{"class":867},[324,94473,94474],{"class":326,"line":203},[324,94475,94476],{"class":772},"#返回数组中非零元素的索引\n",[324,94478,94479],{"class":326,"line":338},[324,94480,94481],{"class":867},"np.nonzero(a)\n",[14,94483,94485],{"id":94484},"_1111-ptp计算最值之差","11.11 ptp()计算最值之差",[316,94487,94489],{"className":31100,"code":94488,"language":31102,"meta":50,"style":50},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#计算一组数中最大值与最小值的差，可指定轴\nnp.ptp(a)\n",[269,94490,94491,94539,94544],{"__ignoreMap":50},[324,94492,94493,94495,94497,94499,94501,94503,94505,94507,94509,94511,94513,94515,94517,94519,94521,94523,94525,94527,94529,94531,94533,94535,94537],{"class":326,"line":327},[324,94494,25],{"class":867},[324,94496,913],{"class":863},[324,94498,93746],{"class":867},[324,94500,1082],{"class":916},[324,94502,1242],{"class":867},[324,94504,944],{"class":916},[324,94506,1242],{"class":867},[324,94508,938],{"class":916},[324,94510,1242],{"class":867},[324,94512,1362],{"class":916},[324,94514,1242],{"class":867},[324,94516,938],{"class":916},[324,94518,1242],{"class":867},[324,94520,1310],{"class":916},[324,94522,1242],{"class":867},[324,94524,1062],{"class":916},[324,94526,1242],{"class":867},[324,94528,1056],{"class":916},[324,94530,1242],{"class":867},[324,94532,1639],{"class":916},[324,94534,1242],{"class":867},[324,94536,1157],{"class":916},[324,94538,5386],{"class":867},[324,94540,94541],{"class":326,"line":203},[324,94542,94543],{"class":772},"#计算一组数中最大值与最小值的差，可指定轴\n",[324,94545,94546],{"class":326,"line":338},[324,94547,94548],{"class":867},"np.ptp(a)\n",[775,94550,94551],{},"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":50,"searchDepth":203,"depth":203,"links":94553},[94554,94555,94556,94557,94558,94559,94560,94561,94562,94563,94564],{"id":93816,"depth":203,"text":93817},{"id":93859,"depth":203,"text":93860},{"id":93967,"depth":203,"text":93968},{"id":94061,"depth":203,"text":94062},{"id":94101,"depth":203,"text":94102},{"id":94174,"depth":203,"text":94175},{"id":94242,"depth":203,"text":94243},{"id":94294,"depth":203,"text":94295},{"id":94338,"depth":203,"text":94339},{"id":94417,"depth":203,"text":94418},{"id":94484,"depth":203,"text":94485},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch11",{"title":93802,"description":791},"wiki\u002F2025-08-14-numpy\u002Fch11-统计函数","CTRvDo_rBDOrpNMU-fbOBmv8zkqxGfIkMB9rSWJBiro",{"id":94571,"title":94572,"body":94573,"description":791,"extension":792,"meta":95228,"navigation":487,"path":95229,"seo":95230,"stem":95231,"__hash__":95232},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数.md","12.其他常用函数",{"type":7,"value":94574,"toc":95216},[94575,94578,94582,94585,94801,94805,94808,95017,95021,95087,95092,95096,95099,95102,95140,95144,95147,95152,95156,95159,95162,95167,95171,95174,95178,95181,95184,95189,95193,95196,95199,95204,95208,95213],[10,94576,94572],{"id":94577},"_12其他常用函数",[14,94579,94581],{"id":94580},"_121-tile元素按行列复制扩展","12.1 tile()元素按行列复制扩展",[19,94583,94584],{},"将数组的数据按照行列复制扩展",[316,94586,94588],{"className":31100,"code":94587,"language":31102,"meta":50,"style":50},"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",[269,94589,94590,94606,94615,94619,94624,94629,94642,94646,94651,94656,94661,94665,94670,94694,94706,94710,94714,94719,94724,94729,94734,94738,94751,94755,94759,94764,94769,94774,94779,94784,94788,94792,94797],{"__ignoreMap":50},[324,94591,94592,94594,94596,94598,94600,94602,94604],{"class":326,"line":327},[324,94593,25],{"class":867},[324,94595,913],{"class":863},[324,94597,93724],{"class":867},[324,94599,1082],{"class":916},[324,94601,1242],{"class":867},[324,94603,1183],{"class":916},[324,94605,874],{"class":867},[324,94607,94608,94611,94613],{"class":326,"line":203},[324,94609,94610],{"class":867},"np.tile(a,",[324,94612,944],{"class":916},[324,94614,874],{"class":867},[324,94616,94617],{"class":326,"line":338},[324,94618,94286],{"class":772},[324,94620,94621],{"class":326,"line":344},[324,94622,94623],{"class":772},"#array([1, 2, 3, 4, 1, 2, 3, 4])\n",[324,94625,94626],{"class":326,"line":484},[324,94627,94628],{"class":772},"#行复制两次，列复制三次\n",[324,94630,94631,94634,94636,94638,94640],{"class":326,"line":491},[324,94632,94633],{"class":867},"np.tile(a,(",[324,94635,944],{"class":916},[324,94637,1242],{"class":867},[324,94639,938],{"class":916},[324,94641,31219],{"class":867},[324,94643,94644],{"class":326,"line":496},[324,94645,94286],{"class":772},[324,94647,94648],{"class":326,"line":502},[324,94649,94650],{"class":738},"'''\n",[324,94652,94653],{"class":326,"line":508},[324,94654,94655],{"class":738},"array([[1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4],\n",[324,94657,94658],{"class":326,"line":514},[324,94659,94660],{"class":738},"       [1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4]])\n",[324,94662,94663],{"class":326,"line":2343},[324,94664,94650],{"class":738},[324,94666,94667],{"class":326,"line":2348},[324,94668,94669],{"class":772},"#创建二维数组\n",[324,94671,94672,94674,94676,94678,94680,94682,94684,94686,94688,94690,94692],{"class":326,"line":2354},[324,94673,94028],{"class":867},[324,94675,913],{"class":863},[324,94677,93724],{"class":867},[324,94679,1082],{"class":916},[324,94681,1242],{"class":867},[324,94683,1387],{"class":916},[324,94685,93729],{"class":867},[324,94687,1157],{"class":916},[324,94689,1242],{"class":867},[324,94691,938],{"class":916},[324,94693,874],{"class":867},[324,94695,94696,94699,94701,94703],{"class":326,"line":2359},[324,94697,94698],{"class":867},"np.tile(aa,",[324,94700,944],{"class":916},[324,94702,1293],{"class":867},[324,94704,94705],{"class":772},"#一个数的时候就是行\n",[324,94707,94708],{"class":326,"line":2373},[324,94709,94286],{"class":772},[324,94711,94712],{"class":326,"line":2378},[324,94713,94650],{"class":738},[324,94715,94716],{"class":326,"line":2384},[324,94717,94718],{"class":738},"array([[ 1,  2,  3,  1,  2,  3],\n",[324,94720,94721],{"class":326,"line":2405},[324,94722,94723],{"class":738},"       [ 4,  5,  6,  4,  5,  6],\n",[324,94725,94726],{"class":326,"line":2410},[324,94727,94728],{"class":738},"       [ 7,  8,  9,  7,  8,  9],\n",[324,94730,94731],{"class":326,"line":2424},[324,94732,94733],{"class":738},"       [10, 11, 12, 10, 11, 12]])\n",[324,94735,94736],{"class":326,"line":2429},[324,94737,94650],{"class":738},[324,94739,94740,94743,94745,94747,94749],{"class":326,"line":2458},[324,94741,94742],{"class":867},"np.tile(aa,(",[324,94744,944],{"class":916},[324,94746,1242],{"class":867},[324,94748,938],{"class":916},[324,94750,31219],{"class":867},[324,94752,94753],{"class":326,"line":2463},[324,94754,94286],{"class":772},[324,94756,94757],{"class":326,"line":2480},[324,94758,94650],{"class":738},[324,94760,94761],{"class":326,"line":2485},[324,94762,94763],{"class":738},"array([[ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[324,94765,94766],{"class":326,"line":2490},[324,94767,94768],{"class":738},"       [ 4,  5,  6,  4,  5,  6,  4,  5,  6],\n",[324,94770,94771],{"class":326,"line":2495},[324,94772,94773],{"class":738},"       [ 7,  8,  9,  7,  8,  9,  7,  8,  9],\n",[324,94775,94776],{"class":326,"line":2509},[324,94777,94778],{"class":738},"       [10, 11, 12, 10, 11, 12, 10, 11, 12],\n",[324,94780,94781],{"class":326,"line":2514},[324,94782,94783],{"class":738},"       [ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[324,94785,94786],{"class":326,"line":3306},[324,94787,94768],{"class":738},[324,94789,94790],{"class":326,"line":3320},[324,94791,94773],{"class":738},[324,94793,94794],{"class":326,"line":3328},[324,94795,94796],{"class":738},"       [10, 11, 12, 10, 11, 12, 10, 11, 12]])\n",[324,94798,94799],{"class":326,"line":3333},[324,94800,94650],{"class":738},[14,94802,94804],{"id":94803},"_122-repeat元素重复若干","12.2 repeat()元素重复若干",[19,94806,94807],{},"repeat()将数组中的每个元素重复若干次",[316,94809,94811],{"className":31100,"code":94810,"language":31102,"meta":50,"style":50},"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",[269,94812,94813,94829,94838,94842,94847,94871,94876,94885,94889,94894,94898,94903,94919,94923,94927,94932,94937,94942,94946,94951,94955,94960,94965,94969,94985,94989,94993,94998,95003,95008,95013],{"__ignoreMap":50},[324,94814,94815,94817,94819,94821,94823,94825,94827],{"class":326,"line":327},[324,94816,25],{"class":867},[324,94818,913],{"class":863},[324,94820,93724],{"class":867},[324,94822,1082],{"class":916},[324,94824,1242],{"class":867},[324,94826,1183],{"class":916},[324,94828,874],{"class":867},[324,94830,94831,94834,94836],{"class":326,"line":203},[324,94832,94833],{"class":867},"np.repeat(a,",[324,94835,938],{"class":916},[324,94837,874],{"class":867},[324,94839,94840],{"class":326,"line":338},[324,94841,94286],{"class":772},[324,94843,94844],{"class":326,"line":344},[324,94845,94846],{"class":772},"#array([1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4])\n",[324,94848,94849,94851,94853,94855,94857,94859,94861,94863,94865,94867,94869],{"class":326,"line":484},[324,94850,94028],{"class":867},[324,94852,913],{"class":863},[324,94854,93724],{"class":867},[324,94856,1082],{"class":916},[324,94858,1242],{"class":867},[324,94860,1387],{"class":916},[324,94862,93729],{"class":867},[324,94864,1157],{"class":916},[324,94866,1242],{"class":867},[324,94868,938],{"class":916},[324,94870,874],{"class":867},[324,94872,94873],{"class":326,"line":491},[324,94874,94875],{"class":772},"#这个重复之后二维变成一维\n",[324,94877,94878,94881,94883],{"class":326,"line":496},[324,94879,94880],{"class":867},"np.repeat(aa,",[324,94882,944],{"class":916},[324,94884,874],{"class":867},[324,94886,94887],{"class":326,"line":502},[324,94888,94650],{"class":738},[324,94890,94891],{"class":326,"line":508},[324,94892,94893],{"class":738},"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",[324,94895,94896],{"class":326,"line":514},[324,94897,94650],{"class":738},[324,94899,94900],{"class":326,"line":2343},[324,94901,94902],{"class":772},"#指定axis\n",[324,94904,94905,94907,94909,94911,94913,94915,94917],{"class":326,"line":2348},[324,94906,94880],{"class":867},[324,94908,944],{"class":916},[324,94910,1242],{"class":867},[324,94912,48236],{"class":5945},[324,94914,913],{"class":863},[324,94916,1056],{"class":916},[324,94918,874],{"class":867},[324,94920,94921],{"class":326,"line":2354},[324,94922,94286],{"class":772},[324,94924,94925],{"class":326,"line":2359},[324,94926,94650],{"class":738},[324,94928,94929],{"class":326,"line":2373},[324,94930,94931],{"class":738},"array([[ 1,  2,  3],\n",[324,94933,94934],{"class":326,"line":2378},[324,94935,94936],{"class":738},"       [ 1,  2,  3],\n",[324,94938,94939],{"class":326,"line":2384},[324,94940,94941],{"class":738},"       [ 4,  5,  6],\n",[324,94943,94944],{"class":326,"line":2405},[324,94945,94941],{"class":738},[324,94947,94948],{"class":326,"line":2410},[324,94949,94950],{"class":738},"       [ 7,  8,  9],\n",[324,94952,94953],{"class":326,"line":2424},[324,94954,94950],{"class":738},[324,94956,94957],{"class":326,"line":2429},[324,94958,94959],{"class":738},"       [10, 11, 12],\n",[324,94961,94962],{"class":326,"line":2458},[324,94963,94964],{"class":738},"       [10, 11, 12]])\n",[324,94966,94967],{"class":326,"line":2463},[324,94968,94650],{"class":738},[324,94970,94971,94973,94975,94977,94979,94981,94983],{"class":326,"line":2480},[324,94972,94880],{"class":867},[324,94974,944],{"class":916},[324,94976,1242],{"class":867},[324,94978,48236],{"class":5945},[324,94980,913],{"class":863},[324,94982,1082],{"class":916},[324,94984,874],{"class":867},[324,94986,94987],{"class":326,"line":2485},[324,94988,94286],{"class":772},[324,94990,94991],{"class":326,"line":2490},[324,94992,94650],{"class":738},[324,94994,94995],{"class":326,"line":2495},[324,94996,94997],{"class":738},"array([[ 1,  1,  2,  2,  3,  3],\n",[324,94999,95000],{"class":326,"line":2509},[324,95001,95002],{"class":738},"       [ 4,  4,  5,  5,  6,  6],\n",[324,95004,95005],{"class":326,"line":2514},[324,95006,95007],{"class":738},"       [ 7,  7,  8,  8,  9,  9],\n",[324,95009,95010],{"class":326,"line":3306},[324,95011,95012],{"class":738},"       [10, 10, 11, 11, 12, 12]])\n",[324,95014,95015],{"class":326,"line":3320},[324,95016,94650],{"class":738},[14,95018,95020],{"id":95019},"_123-roll沿指定轴对数组元素移位","12.3 roll()沿指定轴对数组元素移位",[316,95022,95024],{"className":31100,"code":95023,"language":31102,"meta":50,"style":50},"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",[269,95025,95026,95042,95047,95059,95063,95068,95078,95082],{"__ignoreMap":50},[324,95027,95028,95030,95032,95034,95036,95038,95040],{"class":326,"line":327},[324,95029,25],{"class":867},[324,95031,913],{"class":863},[324,95033,93724],{"class":867},[324,95035,1082],{"class":916},[324,95037,1242],{"class":867},[324,95039,1183],{"class":916},[324,95041,874],{"class":867},[324,95043,95044],{"class":326,"line":203},[324,95045,95046],{"class":772},"#array([，2，3，4])\n",[324,95048,95049,95052,95054,95056],{"class":326,"line":338},[324,95050,95051],{"class":867},"np.roll(a,",[324,95053,944],{"class":916},[324,95055,1293],{"class":867},[324,95057,95058],{"class":772},"#传正数向后调多少位，传负数向前调多少位\n",[324,95060,95061],{"class":326,"line":344},[324,95062,94286],{"class":772},[324,95064,95065],{"class":326,"line":484},[324,95066,95067],{"class":772},"#array([3, 4, 1, 2])\n",[324,95069,95070,95072,95074,95076],{"class":326,"line":491},[324,95071,95051],{"class":867},[324,95073,1396],{"class":863},[324,95075,1082],{"class":916},[324,95077,874],{"class":867},[324,95079,95080],{"class":326,"line":496},[324,95081,94286],{"class":772},[324,95083,95084],{"class":326,"line":502},[324,95085,95086],{"class":772},"#array([2, 3, 4, 1])\n",[19,95088,95089],{},[48,95090],{"alt":50,"src":95091},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-032.png",[14,95093,95095],{"id":95094},"_124-resize重新调整数组大小","12.4 resize()重新调整数组大小",[19,95097,95098],{},"resize()重新调整数组的大小",[19,95100,95101],{},"reshape修改数组的维度，数组元素个数不能改变，要保持一致",[316,95103,95105],{"className":31100,"code":95104,"language":31102,"meta":50,"style":50},"#resize()重新调整 数组的大小，数组元素个数可以不相同\nnp.resize(aa,(2,6))\nnp.resize(aa,(2,9))#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[269,95106,95107,95112,95125],{"__ignoreMap":50},[324,95108,95109],{"class":326,"line":327},[324,95110,95111],{"class":772},"#resize()重新调整 数组的大小，数组元素个数可以不相同\n",[324,95113,95114,95117,95119,95121,95123],{"class":326,"line":203},[324,95115,95116],{"class":867},"np.resize(aa,(",[324,95118,944],{"class":916},[324,95120,1242],{"class":867},[324,95122,1208],{"class":916},[324,95124,31219],{"class":867},[324,95126,95127,95129,95131,95133,95135,95137],{"class":326,"line":338},[324,95128,95116],{"class":867},[324,95130,944],{"class":916},[324,95132,1242],{"class":867},[324,95134,1284],{"class":916},[324,95136,83493],{"class":867},[324,95138,95139],{"class":772},"#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[14,95141,95143],{"id":95142},"_125-placeput函数","12.5 place()\u002Fput()函数",[19,95145,95146],{},"将数组中满足条件的元素\u002F指定的元素替换为指定的值",[19,95148,95149],{},[48,95150],{"alt":50,"src":95151},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-033.png",[14,95153,95155],{"id":95154},"_126-保存加载文件","12.6 保存加载文件",[19,95157,95158],{},"savetxt():将数据保存到txt文件中",[19,95160,95161],{},"loadtxt():从文件加载数据",[19,95163,95164],{},[48,95165],{"alt":50,"src":95166},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-034.png",[14,95168,95170],{"id":95169},"_127-genfromtxt函数","12.7 genfromtxt()函数",[19,95172,95173],{},"根据文件内容中生成数据，可以指定缺失值的处理等",[14,95175,95177],{"id":95176},"_128-anyall函数","12.8 any()\u002Fall()函数",[19,95179,95180],{},"any():如果数组中存在一个True的元素（或者能转化为True的元素），则返回True",[19,95182,95183],{},"all():如果数组中所有的元素都为True（或者能转为True的元素），则返回True",[19,95185,95186],{},[48,95187],{"alt":50,"src":95188},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-035.png",[14,95190,95192],{"id":95191},"_129-where语句","12.9 where语句",[19,95194,95195],{},"np.where(条件,x,y)",[19,95197,95198],{},"如果条件为True,对应值为x,否则对应值为y",[19,95200,95201],{},[48,95202],{"alt":50,"src":95203},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-036.png",[14,95205,95207],{"id":95206},"_1210-dot矩阵","12.10 dot()矩阵",[19,95209,95210],{},[48,95211],{"alt":50,"src":95212},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-037.png",[775,95214,95215],{},"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":50,"searchDepth":203,"depth":203,"links":95217},[95218,95219,95220,95221,95222,95223,95224,95225,95226,95227],{"id":94580,"depth":203,"text":94581},{"id":94803,"depth":203,"text":94804},{"id":95019,"depth":203,"text":95020},{"id":95094,"depth":203,"text":95095},{"id":95142,"depth":203,"text":95143},{"id":95154,"depth":203,"text":95155},{"id":95169,"depth":203,"text":95170},{"id":95176,"depth":203,"text":95177},{"id":95191,"depth":203,"text":95192},{"id":95206,"depth":203,"text":95207},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch12",{"title":94572,"description":791},"wiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数","76m9lUtNWFfwZSyqhRkq4vsOUuH9yUlcqSR0mAAIVZs",{"id":95234,"title":95235,"body":95236,"description":791,"extension":792,"meta":95589,"navigation":487,"path":95590,"seo":95591,"stem":95592,"__hash__":95593},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch13-数组排序.md","13.数组排序",{"type":7,"value":95237,"toc":95587},[95238,95241,95244,95247,95250,95253,95318,95320,95584],[10,95239,95235],{"id":95240},"_13数组排序",[19,95242,95243],{},"排序主要用到的方法是np.sort和np.argsort",[19,95245,95246],{},"其中np.sort()对数组直接排序",[19,95248,95249],{},"而np.argsort()是返回排序后的原始索引",[19,95251,95252],{},"①一维数组",[316,95254,95256],{"className":31100,"code":95255,"language":31102,"meta":50,"style":50},"#创建一维数组\na=np.array([3,12,8,23,67,123,6,10])\nnp.sort(a)#升序排序\nnp.argsort(a)#按照元素大小来索引排序\n",[269,95257,95258,95262,95302,95310],{"__ignoreMap":50},[324,95259,95260],{"class":326,"line":327},[324,95261,93827],{"class":772},[324,95263,95264,95266,95268,95270,95272,95274,95276,95278,95280,95282,95284,95286,95288,95290,95292,95294,95296,95298,95300],{"class":326,"line":203},[324,95265,25],{"class":867},[324,95267,913],{"class":863},[324,95269,93746],{"class":867},[324,95271,938],{"class":916},[324,95273,1242],{"class":867},[324,95275,1362],{"class":916},[324,95277,1242],{"class":867},[324,95279,1259],{"class":916},[324,95281,1242],{"class":867},[324,95283,1639],{"class":916},[324,95285,1242],{"class":867},[324,95287,1143],{"class":916},[324,95289,1242],{"class":867},[324,95291,1757],{"class":916},[324,95293,1242],{"class":867},[324,95295,1208],{"class":916},[324,95297,1242],{"class":867},[324,95299,1310],{"class":916},[324,95301,5386],{"class":867},[324,95303,95304,95307],{"class":326,"line":338},[324,95305,95306],{"class":867},"np.sort(a)",[324,95308,95309],{"class":772},"#升序排序\n",[324,95311,95312,95315],{"class":326,"line":344},[324,95313,95314],{"class":867},"np.argsort(a)",[324,95316,95317],{"class":772},"#按照元素大小来索引排序\n",[19,95319,94013],{},[316,95321,95323],{"className":31100,"code":95322,"language":31102,"meta":50,"style":50},"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",[269,95324,95325,95337,95363,95368,95372,95377,95382,95387,95392,95396,95404,95408,95413,95418,95423,95428,95432,95437,95450,95454,95459,95464,95469,95474,95478,95483,95495,95499,95503,95507,95511,95515,95519,95524,95539,95544,95553,95558,95562,95566,95571,95575,95580],{"__ignoreMap":50},[324,95326,95327,95330,95332,95334],{"class":326,"line":327},[324,95328,95329],{"class":867},"np.random.seed(",[324,95331,1056],{"class":916},[324,95333,1293],{"class":867},[324,95335,95336],{"class":772},"#保证每次值一样\n",[324,95338,95339,95341,95343,95345,95347,95349,95351,95353,95355,95357,95359,95361],{"class":326,"line":203},[324,95340,94028],{"class":867},[324,95342,913],{"class":863},[324,95344,93836],{"class":867},[324,95346,1175],{"class":916},[324,95348,1242],{"class":867},[324,95350,32218],{"class":5945},[324,95352,913],{"class":863},[324,95354,868],{"class":867},[324,95356,1157],{"class":916},[324,95358,1242],{"class":867},[324,95360,1208],{"class":916},[324,95362,31219],{"class":867},[324,95364,95365],{"class":326,"line":338},[324,95366,95367],{"class":772},"#原数组：\n",[324,95369,95370],{"class":326,"line":344},[324,95371,94650],{"class":738},[324,95373,95374],{"class":326,"line":484},[324,95375,95376],{"class":738},"array([[44, 47, 64, 67, 67,  9],\n",[324,95378,95379],{"class":326,"line":491},[324,95380,95381],{"class":738},"       [83, 21, 36, 87, 70, 88],\n",[324,95383,95384],{"class":326,"line":496},[324,95385,95386],{"class":738},"       [88, 12, 58, 65, 39, 87],\n",[324,95388,95389],{"class":326,"line":502},[324,95390,95391],{"class":738},"       [46, 88, 81, 37, 25, 77]], dtype=int32)\n",[324,95393,95394],{"class":326,"line":508},[324,95395,94650],{"class":738},[324,95397,95398,95401],{"class":326,"line":514},[324,95399,95400],{"class":867},"np.sort(aa)",[324,95402,95403],{"class":772},"#每行进行了排序\n",[324,95405,95406],{"class":326,"line":2343},[324,95407,94650],{"class":738},[324,95409,95410],{"class":326,"line":2348},[324,95411,95412],{"class":738},"array([[ 9, 44, 47, 64, 67, 67],\n",[324,95414,95415],{"class":326,"line":2354},[324,95416,95417],{"class":738},"       [21, 36, 70, 83, 87, 88],\n",[324,95419,95420],{"class":326,"line":2359},[324,95421,95422],{"class":738},"       [12, 39, 58, 65, 87, 88],\n",[324,95424,95425],{"class":326,"line":2373},[324,95426,95427],{"class":738},"       [25, 37, 46, 77, 81, 88]], dtype=int32)\n",[324,95429,95430],{"class":326,"line":2378},[324,95431,94650],{"class":738},[324,95433,95434],{"class":326,"line":2384},[324,95435,95436],{"class":772},"#axis=0时\n",[324,95438,95439,95442,95444,95446,95448],{"class":326,"line":2405},[324,95440,95441],{"class":867},"np.sort(aa,",[324,95443,48236],{"class":5945},[324,95445,913],{"class":863},[324,95447,1056],{"class":916},[324,95449,874],{"class":867},[324,95451,95452],{"class":326,"line":2410},[324,95453,94650],{"class":738},[324,95455,95456],{"class":326,"line":2424},[324,95457,95458],{"class":738},"array([[44, 12, 36, 37, 25,  9],\n",[324,95460,95461],{"class":326,"line":2429},[324,95462,95463],{"class":738},"       [46, 21, 58, 65, 39, 77],\n",[324,95465,95466],{"class":326,"line":2458},[324,95467,95468],{"class":738},"       [83, 47, 64, 67, 67, 87],\n",[324,95470,95471],{"class":326,"line":2463},[324,95472,95473],{"class":738},"       [88, 88, 81, 87, 70, 88]], dtype=int32)\n",[324,95475,95476],{"class":326,"line":2480},[324,95477,94650],{"class":738},[324,95479,95480],{"class":326,"line":2485},[324,95481,95482],{"class":772},"#axis=1时,为默认值\n",[324,95484,95485,95487,95489,95491,95493],{"class":326,"line":2490},[324,95486,95441],{"class":867},[324,95488,48236],{"class":5945},[324,95490,913],{"class":863},[324,95492,1082],{"class":916},[324,95494,874],{"class":867},[324,95496,95497],{"class":326,"line":2495},[324,95498,94650],{"class":738},[324,95500,95501],{"class":326,"line":2509},[324,95502,95412],{"class":738},[324,95504,95505],{"class":326,"line":2514},[324,95506,95417],{"class":738},[324,95508,95509],{"class":326,"line":3306},[324,95510,95422],{"class":738},[324,95512,95513],{"class":326,"line":3320},[324,95514,95427],{"class":738},[324,95516,95517],{"class":326,"line":3328},[324,95518,94650],{"class":738},[324,95520,95521],{"class":326,"line":3333},[324,95522,95523],{"class":772},"#按最后一列排序\n",[324,95525,95526,95528,95530,95533,95535,95537],{"class":326,"line":3339},[324,95527,1127],{"class":867},[324,95529,913],{"class":863},[324,95531,95532],{"class":867},"aa[:,",[324,95534,1396],{"class":863},[324,95536,1082],{"class":916},[324,95538,33968],{"class":867},[324,95540,95541],{"class":326,"line":3345},[324,95542,95543],{"class":772},"#获取最后一列排好序的索引\n",[324,95545,95546,95548,95550],{"class":326,"line":3350},[324,95547,74780],{"class":867},[324,95549,913],{"class":863},[324,95551,95552],{"class":867},"np.argsort(b)\n",[324,95554,95555],{"class":326,"line":8677},[324,95556,95557],{"class":867},"aa[index]\n",[324,95559,95560],{"class":326,"line":8701},[324,95561,94650],{"class":738},[324,95563,95564],{"class":326,"line":8706},[324,95565,95376],{"class":738},[324,95567,95568],{"class":326,"line":8712},[324,95569,95570],{"class":738},"       [46, 88, 81, 37, 25, 77],\n",[324,95572,95573],{"class":326,"line":8739},[324,95574,95386],{"class":738},[324,95576,95577],{"class":326,"line":8744},[324,95578,95579],{"class":738},"       [83, 21, 36, 87, 70, 88]], dtype=int32)\n",[324,95581,95582],{"class":326,"line":8750},[324,95583,94650],{"class":738},[775,95585,95586],{},"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":50,"searchDepth":203,"depth":203,"links":95588},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch13",{"title":95235,"description":791},"wiki\u002F2025-08-14-numpy\u002Fch13-数组排序","YRMPYd2prDU8JgTg-B-BGwJLUAaNpeoVr1nYyQDLx-E",{"id":95595,"title":95596,"body":95597,"description":791,"extension":792,"meta":95627,"navigation":487,"path":95628,"seo":95629,"stem":95630,"__hash__":95631},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch14-广播机制.md","14.广播机制",{"type":7,"value":95598,"toc":95625},[95599,95602,95605,95608,95611,95614,95617,95620],[10,95600,95596],{"id":95601},"_14广播机制",[19,95603,95604],{},"广播的规则：",[19,95606,95607],{},"1.如果两个数组维度个数不同，那么小维度的数组形状会在左边补1，",[19,95609,95610],{},"例如1和[1,2]这两个维度个数是不同的，一个是数，是个标量是0维的，另一个是一维的，第一个数形状往左补1，之后就可以进行广播了",[19,95612,95613],{},"2.如果两个数组形状在任何维度上都不匹配，数组的形状会沿着维度为1的维度扩展到匹配上另一个数组的形状",[19,95615,95616],{},"3.如果没有维度形状为1，则会引发异常",[19,95618,95619],{},"也就是只有维度或者个数为1才可以进行广播操作",[19,95621,95622],{},[48,95623],{"alt":50,"src":95624},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-038.png",{"title":50,"searchDepth":203,"depth":203,"links":95626},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch14",{"title":95596,"description":791},"wiki\u002F2025-08-14-numpy\u002Fch14-广播机制","tBGxTdhgyt2-aB8OANfZ0iuefn4ogRK9zJPGTd5aepM",{"id":95633,"title":95634,"body":95635,"description":791,"extension":792,"meta":95733,"navigation":487,"path":95734,"seo":95735,"stem":95736,"__hash__":95737},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch15-比较掩码.md","15.比较掩码",{"type":7,"value":95636,"toc":95731},[95637,95640,95643,95728],[10,95638,95634],{"id":95639},"_15比较掩码",[19,95641,95642],{},"比较操作，会返回与参与运算数组形状相同的数组，其中，满足条件的为True，不满足的为False",[316,95644,95646],{"className":31100,"code":95645,"language":31102,"meta":50,"style":50},"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",[269,95647,95648,95694,95705,95719,95723],{"__ignoreMap":50},[324,95649,95650,95652,95654,95657,95659,95661,95663,95665,95667,95669,95671,95673,95675,95677,95679,95681,95683,95685,95687,95689,95691],{"class":326,"line":327},[324,95651,25],{"class":867},[324,95653,913],{"class":863},[324,95655,95656],{"class":867},"np.array([[",[324,95658,1082],{"class":916},[324,95660,1242],{"class":867},[324,95662,944],{"class":916},[324,95664,1242],{"class":867},[324,95666,938],{"class":916},[324,95668,48752],{"class":867},[324,95670,1336],{"class":916},[324,95672,1242],{"class":867},[324,95674,1362],{"class":916},[324,95676,1242],{"class":867},[324,95678,1387],{"class":916},[324,95680,48752],{"class":867},[324,95682,1589],{"class":916},[324,95684,1242],{"class":867},[324,95686,1614],{"class":916},[324,95688,1242],{"class":867},[324,95690,1639],{"class":916},[324,95692,95693],{"class":867},"]])\n",[324,95695,95696,95698,95700,95702],{"class":326,"line":203},[324,95697,25],{"class":867},[324,95699,1774],{"class":863},[324,95701,1564],{"class":916},[324,95703,95704],{"class":772},"#结果是一个由True,False组成的数组\n",[324,95706,95707,95710,95712,95714,95716],{"class":326,"line":338},[324,95708,95709],{"class":867},"a[a",[324,95711,1774],{"class":863},[324,95713,1564],{"class":916},[324,95715,1804],{"class":867},[324,95717,95718],{"class":772},"#小于20的元素会存到这个数组中\n",[324,95720,95721],{"class":326,"line":344},[324,95722,94286],{"class":772},[324,95724,95725],{"class":326,"line":484},[324,95726,95727],{"class":772},"#array([ 1,  2,  3, 11, 12, 13])\n",[775,95729,95730],{},"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":50,"searchDepth":203,"depth":203,"links":95732},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch15",{"title":95634,"description":791},"wiki\u002F2025-08-14-numpy\u002Fch15-比较掩码","V-_h5mng53PyRw-HZ8Pqcf_eugrdn6nQafLIp3MtxIQ",{"id":95739,"title":95740,"body":95741,"description":791,"extension":792,"meta":95833,"navigation":487,"path":95834,"seo":95835,"stem":95836,"__hash__":95837},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time.md","16.魔法命令time",{"type":7,"value":95742,"toc":95831},[95743,95746,95749,95752,95755,95758,95823,95828],[10,95744,95740],{"id":95745},"_16魔法命令time",[19,95747,95748],{},"魔法命令是ipython提供特殊命令，能实现一些特殊功能，比如统计时间(time\u002Ftimeit)和占用内存(memit\u002Fmprun)等功能,魔法命令有种形式：",[19,95750,95751],{},"%:行模式",[19,95753,95754],{},"%%:单元格模式",[19,95756,95757],{},"IPython 是一个“更强大、更智能”的 Python 交互式命令行工具，比你平时在终端运行的 python 要聪明得多。",[316,95759,95761],{"className":31100,"code":95760,"language":31102,"meta":50,"style":50},"#程序执行时间\nimport time \n#获取时间\nstart=time.time()\ntime.sleep(0.4)#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n#获取时间\nend=time.time()\nend-start\n",[269,95762,95763,95768,95775,95780,95789,95802,95806,95814],{"__ignoreMap":50},[324,95764,95765],{"class":326,"line":327},[324,95766,95767],{"class":772},"#程序执行时间\n",[324,95769,95770,95772],{"class":326,"line":203},[324,95771,31114],{"class":863},[324,95773,95774],{"class":867}," time \n",[324,95776,95777],{"class":326,"line":338},[324,95778,95779],{"class":772},"#获取时间\n",[324,95781,95782,95785,95787],{"class":326,"line":344},[324,95783,95784],{"class":867},"start",[324,95786,913],{"class":863},[324,95788,33140],{"class":867},[324,95790,95791,95794,95797,95799],{"class":326,"line":484},[324,95792,95793],{"class":867},"time.sleep(",[324,95795,95796],{"class":916},"0.4",[324,95798,1293],{"class":867},[324,95800,95801],{"class":772},"#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n",[324,95803,95804],{"class":326,"line":491},[324,95805,95779],{"class":772},[324,95807,95808,95810,95812],{"class":326,"line":496},[324,95809,46523],{"class":867},[324,95811,913],{"class":863},[324,95813,33140],{"class":867},[324,95815,95816,95818,95820],{"class":326,"line":502},[324,95817,46523],{"class":867},[324,95819,1396],{"class":863},[324,95821,95822],{"class":867},"start\n",[19,95824,95825],{},[48,95826],{"alt":50,"src":95827},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-039.png",[775,95829,95830],{},"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":50,"searchDepth":203,"depth":203,"links":95832},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-time",{"title":95740,"description":791},"wiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time","sXkJphYISGOvSIO4DBYVj2ay2H8EAPXBtiKncmz3UYg",{"id":95839,"title":95840,"body":95841,"description":791,"extension":792,"meta":95876,"navigation":487,"path":95877,"seo":95878,"stem":95879,"__hash__":95880},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit.md","17.魔法命令timeit",{"type":7,"value":95842,"toc":95874},[95843,95846,95849,95852,95855,95858,95861,95864,95869],[10,95844,95840],{"id":95845},"_17魔法命令timeit",[19,95847,95848],{},"timeit可以循环执行被统计语句，得到平均执行时间，支持行模式和单元格模式",[19,95850,95851],{},"timeit命令参数，-n指定每轮测试次数，-r指定测试轮数(默认为7)",[19,95853,95854],{},"单元格模式：",[19,95856,95857],{},"第一行语句(与timeit同一行语句)为初始化语句，作用为后续代码中变量提供初始化功能",[19,95859,95860],{},"初始化语句执行次数由轮数来决定",[19,95862,95863],{},"初始化语句每轮测试只执行一次，且不参与计时。第二行至整个单元格末尾语句会执行相应次数，并参与计时",[19,95865,95866],{},[48,95867],{"alt":50,"src":95868},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-040.png",[19,95870,95871],{},[48,95872],{"alt":50,"src":95873},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-041.png",{"title":50,"searchDepth":203,"depth":203,"links":95875},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-timeit",{"title":95840,"description":791},"wiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit","pW8ECg15-MLllhus9EYlvtlq7IM7eh8dhh-Da8iot-E",{"id":95882,"title":95883,"body":95884,"description":791,"extension":792,"meta":95902,"navigation":487,"path":95903,"seo":95904,"stem":95905,"__hash__":95906},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run.md","18.魔法命令writefile和run",{"type":7,"value":95885,"toc":95900},[95886,95889,95892,95895],[10,95887,95883],{"id":95888},"_18魔法命令writefile和run",[19,95890,95891],{},"writefile将单元格内容写入到文件中。如果文件不存在则创建，如果文件存在，则覆盖文件。如果指定-a参数，则追加内容，不覆盖",[19,95893,95894],{},"run运行外部python文件，运行结束后，外部文件中定义的变量得到保留",[19,95896,95897],{},[48,95898],{"alt":50,"src":95899},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-042.png",{"title":50,"searchDepth":203,"depth":203,"links":95901},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-writefilerun",{"title":95883,"description":791},"wiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run","d1MzkGQ-Ew6zFK9h2luqGJC1C8knZuKt2r-JshvcU5w",{"id":95908,"title":95909,"body":95910,"description":791,"extension":792,"meta":95963,"navigation":487,"path":95964,"seo":95965,"stem":95966,"__hash__":95967},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit.md","19.魔法命令memit",{"type":7,"value":95911,"toc":95961},[95912,95915,95918,95920,95923,95926,95931,95934,95937,95940,95943,95946,95949,95952,95955,95958],[10,95913,95909],{"id":95914},"_19魔法命令memit",[19,95916,95917],{},"memit：用于分析语句内存使用情况，memit支持行模式与单元格模式。单元格模式下，初始化语句不会参与计算内存。第二行至整个单元格末尾会参与计算内存",[19,95919,25324],{},[19,95921,95922],{},"memit不是Ipython的内置，需要安装memory_profiler模块(pip install memory_profiler)",[19,95924,95925],{},"安装后，需要通过%load_ext memory_profiler载入，才能使用",[19,95927,95928],{},[48,95929],{"alt":50,"src":95930},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-043.png",[19,95932,95933],{},"补充：",[19,95935,95936],{},"Python 3.12+ 版本已经完全移除了 distutils 模块，而许多工具链（包括 IPython 的旧版本）仍依赖它",[19,95938,95939],{},"在 Python 3.10+ 版本中，distutils 库已被弃用，并在 Python 3.12 中完全移除。在加载 memory_profiler 扩展时，因为 IPython 的旧版本依赖 distutils,当前python版本太高，所以如果不升级升级 IPython 和依赖库或者降python版本的话会报错",[19,95941,95942],{},"解决方法：",[19,95944,95945],{},"1.cmd",[19,95947,95948],{},"2.依次输入以下代码：",[19,95950,95951],{},"#升级 IPython 到兼容 Python 3.12+ 的版本",[19,95953,95954],{},"pip install --upgrade ipython",[19,95956,95957],{},"#升级 memory_profiler 和 setuptools",[19,95959,95960],{},"pip install --upgrade memory_profiler setuptools",{"title":50,"searchDepth":203,"depth":203,"links":95962},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-memit",{"title":95909,"description":791},"wiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit","RR91kMGRr4TrWwPmp50vrP41mF4J7yHdo92EdcUVh2s",{"id":95969,"title":95970,"body":95971,"description":791,"extension":792,"meta":97617,"navigation":487,"path":97618,"seo":97619,"stem":97620,"__hash__":97621},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch2-创建数组.md","2.创建数组",{"type":7,"value":95972,"toc":97587},[95973,95976,95980,95984,96045,96048,96053,96057,96062,96067,96072,96077,96080,96085,96089,96093,96126,96129,96132,96135,96187,96190,96226,96229,96271,96275,96296,96298,96335,96337,96342,96344,96349,96353,96356,96384,96388,96392,96445,96449,96541,96545,96549,96552,96557,96561,96586,96591,96595,96598,96601,96604,96607,96610,96613,96616,96628,96632,96636,96639,96671,96674,96697,96700,96726,96729,96755,96758,96792,96795,96857,96861,96864,96868,96871,96897,96900,96903,96908,96911,96980,96982,96987,97048,97051,97062,97068,97073,97077,97080,97093,97097,97112,97114,97137,97139,97165,97168,97171,97174,97222,97224,97229,97233,97237,97264,97268,97295,97298,97303,97308,97398,97402,97460,97465,97468,97471,97513,97517,97573,97578,97581,97584],[10,95974,95970],{"id":95975},"_2创建数组",[14,95977,95979],{"id":95978},"_21-array函数创建数组","2.1 array()函数创建数组",[35,95981,95983],{"id":95982},"_221-函数语句","2.2.1 函数语句",[316,95985,95987],{"className":31100,"code":95986,"language":31102,"meta":50,"style":50},"numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)\n",[269,95988,95989],{"__ignoreMap":50},[324,95990,95991,95994,95997,95999,96001,96003,96005,96007,96010,96012,96015,96017,96020,96022,96024,96026,96029,96031,96034,96036,96039,96041,96043],{"class":326,"line":327},[324,95992,95993],{"class":867},"numpy.array(",[324,95995,95996],{"class":916},"object",[324,95998,13164],{"class":867},[324,96000,94222],{"class":5945},[324,96002,14293],{"class":863},[324,96004,39655],{"class":916},[324,96006,13164],{"class":867},[324,96008,96009],{"class":5945},"copy",[324,96011,14293],{"class":863},[324,96013,96014],{"class":916}," True",[324,96016,13164],{"class":867},[324,96018,96019],{"class":5945},"order",[324,96021,14293],{"class":863},[324,96023,39655],{"class":916},[324,96025,13164],{"class":867},[324,96027,96028],{"class":5945},"subok",[324,96030,14293],{"class":863},[324,96032,96033],{"class":916}," False",[324,96035,13164],{"class":867},[324,96037,96038],{"class":5945},"ndmin",[324,96040,14293],{"class":863},[324,96042,4822],{"class":916},[324,96044,874],{"class":867},[19,96046,96047],{},"参数：",[19,96049,96050],{},[48,96051],{"alt":50,"src":96052},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-001.png",[35,96054,96056],{"id":96055},"_222-实例","2.2.2 实例",[19,96058,96059],{},[48,96060],{"alt":50,"src":96061},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-002.png",[19,96063,96064],{},[48,96065],{"alt":50,"src":96066},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-003.png",[19,96068,96069],{},[48,96070],{"alt":50,"src":96071},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-004.png",[19,96073,96074],{},[48,96075],{"alt":50,"src":96076},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-005.png",[19,96078,96079],{},"在使用admin属性指定维度时，如果是ndim=3，表示创建一个三维的数组；如果ndim=4，表示创建了一个四维的数组，上述结果就变为：",[19,96081,96082],{},[48,96083],{"alt":50,"src":96084},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-006.png",[14,96086,96088],{"id":96087},"_22-随机数创建数组","2.2 随机数创建数组",[35,96090,96092],{"id":96091},"_221-random语句","2.2.1 random语句",[316,96094,96096],{"className":31100,"code":96095,"language":31102,"meta":50,"style":50},"#random.random()\n#确定随机种子,就是每次运行结果是相同的\nnp.random.seed(0)\nnp.random.random()\n#生成一个随机的数目\n",[269,96097,96098,96103,96108,96116,96121],{"__ignoreMap":50},[324,96099,96100],{"class":326,"line":327},[324,96101,96102],{"class":772},"#random.random()\n",[324,96104,96105],{"class":326,"line":203},[324,96106,96107],{"class":772},"#确定随机种子,就是每次运行结果是相同的\n",[324,96109,96110,96112,96114],{"class":326,"line":338},[324,96111,95329],{"class":867},[324,96113,1056],{"class":916},[324,96115,874],{"class":867},[324,96117,96118],{"class":326,"line":344},[324,96119,96120],{"class":867},"np.random.random()\n",[324,96122,96123],{"class":326,"line":484},[324,96124,96125],{"class":772},"#生成一个随机的数目\n",[19,96127,96128],{},"使用seed()函数后就可以保证每次生成的随机数都是一样的，不会再变了",[19,96130,96131],{},"可以指定数组形状 size",[19,96133,96134],{},"①生成一维数组",[316,96136,96138],{"className":31100,"code":96137,"language":31102,"meta":50,"style":50},"#random.random(size())\nnp.random.random(size=5)\n#生成一位的五个元素\na=np.random.random(size=4)\na.shape #输出数组形状\n",[269,96139,96140,96145,96158,96163,96179],{"__ignoreMap":50},[324,96141,96142],{"class":326,"line":327},[324,96143,96144],{"class":772},"#random.random(size())\n",[324,96146,96147,96150,96152,96154,96156],{"class":326,"line":203},[324,96148,96149],{"class":867},"np.random.random(",[324,96151,32218],{"class":5945},[324,96153,913],{"class":863},[324,96155,1183],{"class":916},[324,96157,874],{"class":867},[324,96159,96160],{"class":326,"line":338},[324,96161,96162],{"class":772},"#生成一位的五个元素\n",[324,96164,96165,96167,96169,96171,96173,96175,96177],{"class":326,"line":344},[324,96166,25],{"class":867},[324,96168,913],{"class":863},[324,96170,96149],{"class":867},[324,96172,32218],{"class":5945},[324,96174,913],{"class":863},[324,96176,1157],{"class":916},[324,96178,874],{"class":867},[324,96180,96181,96184],{"class":326,"line":484},[324,96182,96183],{"class":867},"a.shape ",[324,96185,96186],{"class":772},"#输出数组形状\n",[19,96188,96189],{},"②生成二维数组",[316,96191,96193],{"className":31100,"code":96192,"language":31102,"meta":50,"style":50},"#二维数组\naa=np.random.random(size=(4,5))\n#生成四行五列的数组\n",[269,96194,96195,96199,96221],{"__ignoreMap":50},[324,96196,96197],{"class":326,"line":327},[324,96198,94023],{"class":772},[324,96200,96201,96203,96205,96207,96209,96211,96213,96215,96217,96219],{"class":326,"line":203},[324,96202,94028],{"class":867},[324,96204,913],{"class":863},[324,96206,96149],{"class":867},[324,96208,32218],{"class":5945},[324,96210,913],{"class":863},[324,96212,868],{"class":867},[324,96214,1157],{"class":916},[324,96216,1242],{"class":867},[324,96218,1183],{"class":916},[324,96220,31219],{"class":867},[324,96222,96223],{"class":326,"line":338},[324,96224,96225],{"class":772},"#生成四行五列的数组\n",[19,96227,96228],{},"③生成三维数组",[316,96230,96232],{"className":31100,"code":96231,"language":31102,"meta":50,"style":50},"#三维数组\naaa=np.random.random(size=(2,3,4))\naaa.shape\n",[269,96233,96234,96239,96266],{"__ignoreMap":50},[324,96235,96236],{"class":326,"line":327},[324,96237,96238],{"class":772},"#三维数组\n",[324,96240,96241,96244,96246,96248,96250,96252,96254,96256,96258,96260,96262,96264],{"class":326,"line":203},[324,96242,96243],{"class":867},"aaa",[324,96245,913],{"class":863},[324,96247,96149],{"class":867},[324,96249,32218],{"class":5945},[324,96251,913],{"class":863},[324,96253,868],{"class":867},[324,96255,944],{"class":916},[324,96257,1242],{"class":867},[324,96259,938],{"class":916},[324,96261,1242],{"class":867},[324,96263,1157],{"class":916},[324,96265,31219],{"class":867},[324,96267,96268],{"class":326,"line":338},[324,96269,96270],{"class":867},"aaa.shape\n",[35,96272,96274],{"id":96273},"_222-randint语句","2.2.2 randint语句",[316,96276,96278],{"className":31100,"code":96277,"language":31102,"meta":50,"style":50},"#生成随机的整数 random.randint(low,high,size)\nnp.random.randint(5) #0~5中的随机一个数\n",[269,96279,96280,96285],{"__ignoreMap":50},[324,96281,96282],{"class":326,"line":327},[324,96283,96284],{"class":772},"#生成随机的整数 random.randint(low,high,size)\n",[324,96286,96287,96289,96291,96293],{"class":326,"line":203},[324,96288,93836],{"class":867},[324,96290,1183],{"class":916},[324,96292,14443],{"class":867},[324,96294,96295],{"class":772},"#0~5中的随机一个数\n",[19,96297,96134],{},[316,96299,96301],{"className":31100,"code":96300,"language":31102,"meta":50,"style":50},"#一维\nnp.random.randint(1,11,size=(10))\n#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[269,96302,96303,96308,96330],{"__ignoreMap":50},[324,96304,96305],{"class":326,"line":327},[324,96306,96307],{"class":772},"#一维\n",[324,96309,96310,96312,96314,96316,96318,96320,96322,96324,96326,96328],{"class":326,"line":203},[324,96311,93836],{"class":867},[324,96313,1082],{"class":916},[324,96315,1242],{"class":867},[324,96317,1336],{"class":916},[324,96319,1242],{"class":867},[324,96321,32218],{"class":5945},[324,96323,913],{"class":863},[324,96325,868],{"class":867},[324,96327,1310],{"class":916},[324,96329,31219],{"class":867},[324,96331,96332],{"class":326,"line":338},[324,96333,96334],{"class":772},"#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[19,96336,96189],{},[19,96338,96339],{},[48,96340],{"alt":50,"src":96341},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-007.png",[19,96343,96228],{},[19,96345,96346],{},[48,96347],{"alt":50,"src":96348},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-008.png",[35,96350,96352],{"id":96351},"_222-rand语句","2.2.2 rand语句",[19,96354,96355],{},"Numpy 的函数，生成均匀分布的随机数（0-1）",[316,96357,96359],{"className":31100,"code":96358,"language":31102,"meta":50,"style":50},"np.random.rand(100,10)\n#第一个参数100：行数，表示有100个样本\n#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[269,96360,96361,96374,96379],{"__ignoreMap":50},[324,96362,96363,96366,96368,96370,96372],{"class":326,"line":327},[324,96364,96365],{"class":867},"np.random.rand(",[324,96367,1175],{"class":916},[324,96369,1242],{"class":867},[324,96371,1310],{"class":916},[324,96373,874],{"class":867},[324,96375,96376],{"class":326,"line":203},[324,96377,96378],{"class":772},"#第一个参数100：行数，表示有100个样本\n",[324,96380,96381],{"class":326,"line":338},[324,96382,96383],{"class":772},"#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[14,96385,96387],{"id":96386},"_23-arange创建数组","2.3 arange()创建数组",[35,96389,96391],{"id":96390},"_231-函数语句","2.3.1 函数语句",[316,96393,96395],{"className":31100,"code":96394,"language":31102,"meta":50,"style":50},"numpy.arange([start,] stop[, step], dtype=None)\n#参数\n\"\"\"\nstart:起始值，可选，默认从 0 开始。\nstop:结束值（不包含该值）。\nstep:步长，可选，默认是 1。可以为浮点数。\ndtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n\"\"\"\n",[269,96396,96397,96411,96416,96421,96426,96431,96436,96441],{"__ignoreMap":50},[324,96398,96399,96402,96404,96406,96409],{"class":326,"line":327},[324,96400,96401],{"class":867},"numpy.arange([start,] stop[, step], ",[324,96403,94222],{"class":5945},[324,96405,913],{"class":863},[324,96407,96408],{"class":916},"None",[324,96410,874],{"class":867},[324,96412,96413],{"class":326,"line":203},[324,96414,96415],{"class":772},"#参数\n",[324,96417,96418],{"class":326,"line":338},[324,96419,96420],{"class":738},"\"\"\"\n",[324,96422,96423],{"class":326,"line":344},[324,96424,96425],{"class":738},"start:起始值，可选，默认从 0 开始。\n",[324,96427,96428],{"class":326,"line":484},[324,96429,96430],{"class":738},"stop:结束值（不包含该值）。\n",[324,96432,96433],{"class":326,"line":491},[324,96434,96435],{"class":738},"step:步长，可选，默认是 1。可以为浮点数。\n",[324,96437,96438],{"class":326,"line":496},[324,96439,96440],{"class":738},"dtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n",[324,96442,96443],{"class":326,"line":502},[324,96444,96420],{"class":738},[35,96446,96448],{"id":96447},"_232-实例","2.3.2 实例",[316,96450,96452],{"className":31100,"code":96451,"language":31102,"meta":50,"style":50},"#创建一维数组\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",[269,96453,96454,96458,96482,96487,96492,96496,96519,96523,96527,96532,96537],{"__ignoreMap":50},[324,96455,96456],{"class":326,"line":327},[324,96457,93827],{"class":772},[324,96459,96460,96462,96464,96466,96468,96470,96472,96474,96476,96478,96480],{"class":326,"line":203},[324,96461,93724],{"class":867},[324,96463,1082],{"class":916},[324,96465,1242],{"class":867},[324,96467,1589],{"class":916},[324,96469,1242],{"class":867},[324,96471,1082],{"class":916},[324,96473,1242],{"class":867},[324,96475,94222],{"class":5945},[324,96477,913],{"class":863},[324,96479,871],{"class":916},[324,96481,874],{"class":867},[324,96483,96484],{"class":326,"line":338},[324,96485,96486],{"class":772},"#输出结果：\n",[324,96488,96489],{"class":326,"line":344},[324,96490,96491],{"class":772},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17,18, 19, 20])\n",[324,96493,96494],{"class":326,"line":484},[324,96495,94669],{"class":772},[324,96497,96498,96501,96503,96505,96507,96510,96512,96514,96516],{"class":326,"line":491},[324,96499,96500],{"class":867},"np.array([np.arange(",[324,96502,1082],{"class":916},[324,96504,1242],{"class":867},[324,96506,1157],{"class":916},[324,96508,96509],{"class":867},"),np.arange(",[324,96511,1157],{"class":916},[324,96513,1242],{"class":867},[324,96515,1233],{"class":916},[324,96517,96518],{"class":867},")])\n",[324,96520,96521],{"class":326,"line":496},[324,96522,94286],{"class":772},[324,96524,96525],{"class":326,"line":502},[324,96526,96420],{"class":738},[324,96528,96529],{"class":326,"line":508},[324,96530,96531],{"class":738},"array([[1, 2, 3],\n",[324,96533,96534],{"class":326,"line":514},[324,96535,96536],{"class":738},"       [4, 5, 6]])\n",[324,96538,96539],{"class":326,"line":2343},[324,96540,96420],{"class":738},[14,96542,96544],{"id":96543},"_24-生态分布","2.4 生态分布",[35,96546,96548],{"id":96547},"_241-标准正态分布","2.4.1 标准正态分布",[19,96550,96551],{},"randn()函数返回一个或一组数据，具有标准正态分布（期望为0，方差为1）",[19,96553,96554],{},[48,96555],{"alt":50,"src":96556},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-009.png",[35,96558,96560],{"id":96559},"_242-常规正态分布","2.4.2 常规正态分布",[316,96562,96564],{"className":31100,"code":96563,"language":31102,"meta":50,"style":50},"random.normal(loc,scale,size)也可以生成正态分布\n#loc:期望\n#scale:方差\n#size:用于确定是几维的数列\n",[269,96565,96566,96571,96576,96581],{"__ignoreMap":50},[324,96567,96568],{"class":326,"line":327},[324,96569,96570],{"class":867},"random.normal(loc,scale,size)也可以生成正态分布\n",[324,96572,96573],{"class":326,"line":203},[324,96574,96575],{"class":772},"#loc:期望\n",[324,96577,96578],{"class":326,"line":338},[324,96579,96580],{"class":772},"#scale:方差\n",[324,96582,96583],{"class":326,"line":344},[324,96584,96585],{"class":772},"#size:用于确定是几维的数列\n",[19,96587,96588],{},[48,96589],{"alt":50,"src":96590},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-010.png",[14,96592,96594],{"id":96593},"_25-ndarry属性数组属性","2.5 ndarry属性（数组属性）",[19,96596,96597],{},"ndim:秩，维度个数",[19,96599,96600],{},"size:数组元素的个数",[19,96602,96603],{},"shape:数组的形状",[19,96605,96606],{},"dtype:数组元素的类型",[19,96608,96609],{},"itemsize:每个元素的大小，以字节为单位，一个字节8位 (结果其实就是数组的元素类型结果除8)",[19,96611,96612],{},"他们都是属性，通过数组.属性的形式来确定",[19,96614,96615],{},"如果需要输出多个可以通过以下方式：",[316,96617,96619],{"className":31100,"code":96618,"language":31102,"meta":50,"style":50},"print(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[269,96620,96621],{"__ignoreMap":50},[324,96622,96623,96625],{"class":326,"line":327},[324,96624,31137],{"class":916},[324,96626,96627],{"class":867},"(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[14,96629,96631],{"id":96630},"_26-其他方式创建数组","2.6 其他方式创建数组",[35,96633,96635],{"id":96634},"_261-zeros创建数组","2.6.1 zeros()创建数组",[19,96637,96638],{},"①创建一维数组",[316,96640,96642],{"className":31100,"code":96641,"language":31102,"meta":50,"style":50},"np.zeros(10)\n\"\"\"\n输出结果：\narray([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n\"\"\"\n",[269,96643,96644,96653,96657,96662,96667],{"__ignoreMap":50},[324,96645,96646,96649,96651],{"class":326,"line":327},[324,96647,96648],{"class":867},"np.zeros(",[324,96650,1310],{"class":916},[324,96652,874],{"class":867},[324,96654,96655],{"class":326,"line":203},[324,96656,96420],{"class":738},[324,96658,96659],{"class":326,"line":338},[324,96660,96661],{"class":738},"输出结果：\n",[324,96663,96664],{"class":326,"line":344},[324,96665,96666],{"class":738},"array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n",[324,96668,96669],{"class":326,"line":484},[324,96670,96420],{"class":738},[19,96672,96673],{},"上方代码等价于：",[316,96675,96677],{"className":31100,"code":96676,"language":31102,"meta":50,"style":50},"np.zeros(shape=(10))#创建10个元素的0数组\n",[269,96678,96679],{"__ignoreMap":50},[324,96680,96681,96683,96686,96688,96690,96692,96694],{"class":326,"line":327},[324,96682,96648],{"class":867},[324,96684,96685],{"class":5945},"shape",[324,96687,913],{"class":863},[324,96689,868],{"class":867},[324,96691,1310],{"class":916},[324,96693,83493],{"class":867},[324,96695,96696],{"class":772},"#创建10个元素的0数组\n",[19,96698,96699],{},"也可以指定类型",[316,96701,96703],{"className":31100,"code":96702,"language":31102,"meta":50,"style":50},"#指定类型\nnp.zeros(5,dtype=int)\n",[269,96704,96705,96710],{"__ignoreMap":50},[324,96706,96707],{"class":326,"line":327},[324,96708,96709],{"class":772},"#指定类型\n",[324,96711,96712,96714,96716,96718,96720,96722,96724],{"class":326,"line":203},[324,96713,96648],{"class":867},[324,96715,1183],{"class":916},[324,96717,1242],{"class":867},[324,96719,94222],{"class":5945},[324,96721,913],{"class":863},[324,96723,871],{"class":916},[324,96725,874],{"class":867},[19,96727,96728],{},"②创建二维数组",[316,96730,96732],{"className":31100,"code":96731,"language":31102,"meta":50,"style":50},"np.zeros((3,4),dtype=int)\n",[269,96733,96734],{"__ignoreMap":50},[324,96735,96736,96739,96741,96743,96745,96747,96749,96751,96753],{"class":326,"line":327},[324,96737,96738],{"class":867},"np.zeros((",[324,96740,938],{"class":916},[324,96742,1242],{"class":867},[324,96744,1157],{"class":916},[324,96746,42978],{"class":867},[324,96748,94222],{"class":5945},[324,96750,913],{"class":863},[324,96752,871],{"class":916},[324,96754,874],{"class":867},[19,96756,96757],{},"③创建三维数组",[316,96759,96761],{"className":31100,"code":96760,"language":31102,"meta":50,"style":50},"#创建三维数组\nnp.zeros((3,4,5),dtype=int)\n",[269,96762,96763,96768],{"__ignoreMap":50},[324,96764,96765],{"class":326,"line":327},[324,96766,96767],{"class":772},"#创建三维数组\n",[324,96769,96770,96772,96774,96776,96778,96780,96782,96784,96786,96788,96790],{"class":326,"line":203},[324,96771,96738],{"class":867},[324,96773,938],{"class":916},[324,96775,1242],{"class":867},[324,96777,1157],{"class":916},[324,96779,1242],{"class":867},[324,96781,1183],{"class":916},[324,96783,42978],{"class":867},[324,96785,94222],{"class":5945},[324,96787,913],{"class":863},[324,96789,871],{"class":916},[324,96791,874],{"class":867},[19,96793,96794],{},"④zeros_like:根据传入的数组形状创建全为0的数组",[316,96796,96798],{"className":31100,"code":96797,"language":31102,"meta":50,"style":50},"#使用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",[269,96799,96800,96805,96820,96825,96830,96852],{"__ignoreMap":50},[324,96801,96802],{"class":326,"line":327},[324,96803,96804],{"class":772},"#使用zeros_like将创建的一维数组变成全0的数组\n",[324,96806,96807,96809,96811,96813,96815,96817],{"class":326,"line":203},[324,96808,25],{"class":867},[324,96810,913],{"class":863},[324,96812,93724],{"class":867},[324,96814,1157],{"class":916},[324,96816,1293],{"class":867},[324,96818,96819],{"class":772},"#这个得到的结果：一维数组0，1，2，3\n",[324,96821,96822],{"class":326,"line":338},[324,96823,96824],{"class":867},"np.zeros_like(a)\n",[324,96826,96827],{"class":326,"line":344},[324,96828,96829],{"class":772},"#使用zeros_like将创建的二维数组变成全0的数组\n",[324,96831,96832,96834,96836,96838,96840,96842,96844,96846,96848,96850],{"class":326,"line":484},[324,96833,94028],{"class":867},[324,96835,913],{"class":863},[324,96837,96149],{"class":867},[324,96839,32218],{"class":5945},[324,96841,913],{"class":863},[324,96843,868],{"class":867},[324,96845,1157],{"class":916},[324,96847,1242],{"class":867},[324,96849,1183],{"class":916},[324,96851,31219],{"class":867},[324,96853,96854],{"class":326,"line":491},[324,96855,96856],{"class":867},"np.zeros_like(aa)\n",[35,96858,96860],{"id":96859},"_262-ones创建数组","2.6.2 ones()创建数组",[19,96862,96863],{},"与zeros的用法一模一样，两者如果不指定元素类型的话，都默认为浮点型",[35,96865,96867],{"id":96866},"_263-empty创建数组","2.6.3 empty()创建数组",[19,96869,96870],{},"①empty()用法",[316,96872,96874],{"className":31100,"code":96873,"language":31102,"meta":50,"style":50},"numpy.empty(shape,dtype=float,order='c')\n",[269,96875,96876],{"__ignoreMap":50},[324,96877,96878,96881,96883,96885,96887,96889,96891,96893,96895],{"class":326,"line":327},[324,96879,96880],{"class":867},"numpy.empty(shape,",[324,96882,94222],{"class":5945},[324,96884,913],{"class":863},[324,96886,907],{"class":916},[324,96888,1242],{"class":867},[324,96890,96019],{"class":5945},[324,96892,913],{"class":863},[324,96894,76750],{"class":738},[324,96896,874],{"class":867},[19,96898,96899],{},"创建的一个指定形状(shape)、数据类型(dtype)且未初始化的数组，里边的元素的值是之前内存的值",[19,96901,96902],{},"order:有\"C\"和\"F\"两个选项,分别代表，行优先和列优先，在计算机内存中的存储元素的顺序。",[19,96904,96905],{},[48,96906],{"alt":50,"src":96907},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-011.png",[19,96909,96910],{},"②empty()用法",[316,96912,96914],{"className":31100,"code":96913,"language":31102,"meta":50,"style":50},"y=np.empty(10,dtype=int)\nx=np.arange(5)\nnp.add(2,x,out=y[:5])\n#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\ny\n",[269,96915,96916,96937,96949,96970,96975],{"__ignoreMap":50},[324,96917,96918,96920,96922,96925,96927,96929,96931,96933,96935],{"class":326,"line":327},[324,96919,1709],{"class":867},[324,96921,913],{"class":863},[324,96923,96924],{"class":867},"np.empty(",[324,96926,1310],{"class":916},[324,96928,1242],{"class":867},[324,96930,94222],{"class":5945},[324,96932,913],{"class":863},[324,96934,871],{"class":916},[324,96936,874],{"class":867},[324,96938,96939,96941,96943,96945,96947],{"class":326,"line":203},[324,96940,1684],{"class":867},[324,96942,913],{"class":863},[324,96944,93724],{"class":867},[324,96946,1183],{"class":916},[324,96948,874],{"class":867},[324,96950,96951,96954,96956,96959,96961,96963,96966,96968],{"class":326,"line":338},[324,96952,96953],{"class":867},"np.add(",[324,96955,944],{"class":916},[324,96957,96958],{"class":867},",x,",[324,96960,93776],{"class":5945},[324,96962,913],{"class":863},[324,96964,96965],{"class":867},"y[:",[324,96967,1183],{"class":916},[324,96969,5386],{"class":867},[324,96971,96972],{"class":326,"line":344},[324,96973,96974],{"class":772},"#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\n",[324,96976,96977],{"class":326,"line":484},[324,96978,96979],{"class":867},"y\n",[19,96981,12243],{},[19,96983,96984],{},[48,96985],{"alt":50,"src":96986},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-012.png",[316,96988,96990],{"className":31100,"code":96989,"language":31102,"meta":50,"style":50},"x=np.arange(1,6)\ny=np.empty(5,dtype=int)\nnp.add(x,2,out=y)\n#将数列x中的每个元素都加2，然后放到y数列中去\n",[269,96991,96992,97008,97028,97043],{"__ignoreMap":50},[324,96993,96994,96996,96998,97000,97002,97004,97006],{"class":326,"line":327},[324,96995,1684],{"class":867},[324,96997,913],{"class":863},[324,96999,93724],{"class":867},[324,97001,1082],{"class":916},[324,97003,1242],{"class":867},[324,97005,1208],{"class":916},[324,97007,874],{"class":867},[324,97009,97010,97012,97014,97016,97018,97020,97022,97024,97026],{"class":326,"line":203},[324,97011,1709],{"class":867},[324,97013,913],{"class":863},[324,97015,96924],{"class":867},[324,97017,1183],{"class":916},[324,97019,1242],{"class":867},[324,97021,94222],{"class":5945},[324,97023,913],{"class":863},[324,97025,871],{"class":916},[324,97027,874],{"class":867},[324,97029,97030,97033,97035,97037,97039,97041],{"class":326,"line":338},[324,97031,97032],{"class":867},"np.add(x,",[324,97034,944],{"class":916},[324,97036,1242],{"class":867},[324,97038,93776],{"class":5945},[324,97040,913],{"class":863},[324,97042,94171],{"class":867},[324,97044,97045],{"class":326,"line":344},[324,97046,97047],{"class":772},"#将数列x中的每个元素都加2，然后放到y数列中去\n",[19,97049,97050],{},"③empty_like()",[19,97052,97053],{},[116,97054,97055,97056,97061],{},"创建一个",[116,97057,97058],{},[116,97059,97060],{},"与给定数组形状和数据类型相同","，但内容未初始化的新数组。",[19,97063,97064,97067],{},[269,97065,97066],{},"np.empty_like()","不会清空内存中的原数据，它只是分配一块与原数组相同大小和类型的内存区域。",[19,97069,97070],{},[48,97071],{"alt":50,"src":97072},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-013.png",[35,97074,97076],{"id":97075},"_264-用法","2.6.4 ？？用法",[19,97078,97079],{},"当想查看一个函数的参数时，可以通过？？来实现",[316,97081,97083],{"className":31100,"code":97082,"language":31102,"meta":50,"style":50},"np.full??\n",[269,97084,97085],{"__ignoreMap":50},[324,97086,97087,97090],{"class":326,"line":327},[324,97088,97089],{"class":867},"np.full",[324,97091,97092],{"class":78125},"??\n",[35,97094,97096],{"id":97095},"_265-full创建数组","2.6.5 full()创建数组",[316,97098,97100],{"className":31100,"code":97099,"language":31102,"meta":50,"style":50},"full(shape,fill_value)\n创建全为某个指定值的数组\n",[269,97101,97102,97107],{"__ignoreMap":50},[324,97103,97104],{"class":326,"line":327},[324,97105,97106],{"class":867},"full(shape,fill_value)\n",[324,97108,97109],{"class":326,"line":203},[324,97110,97111],{"class":867},"创建全为某个指定值的数组\n",[19,97113,95252],{},[316,97115,97117],{"className":31100,"code":97116,"language":31102,"meta":50,"style":50},"#创建一个一维数组,以20进行填充\nnp.full(10,20)\n",[269,97118,97119,97124],{"__ignoreMap":50},[324,97120,97121],{"class":326,"line":327},[324,97122,97123],{"class":772},"#创建一个一维数组,以20进行填充\n",[324,97125,97126,97129,97131,97133,97135],{"class":326,"line":203},[324,97127,97128],{"class":867},"np.full(",[324,97130,1310],{"class":916},[324,97132,1242],{"class":867},[324,97134,1564],{"class":916},[324,97136,874],{"class":867},[19,97138,94013],{},[316,97140,97142],{"className":31100,"code":97141,"language":31102,"meta":50,"style":50},"#创建二维数组\nnp.full((3,5),11)\n",[269,97143,97144,97148],{"__ignoreMap":50},[324,97145,97146],{"class":326,"line":327},[324,97147,94669],{"class":772},[324,97149,97150,97153,97155,97157,97159,97161,97163],{"class":326,"line":203},[324,97151,97152],{"class":867},"np.full((",[324,97154,938],{"class":916},[324,97156,1242],{"class":867},[324,97158,1183],{"class":916},[324,97160,42978],{"class":867},[324,97162,1336],{"class":916},[324,97164,874],{"class":867},[19,97166,97167],{},"③full_like用法",[19,97169,97170],{},"跟上边的zeros_like()和ones_like()的用法一模一样",[19,97172,97173],{},"这里是指定填充而已",[316,97175,97177],{"className":31100,"code":97176,"language":31102,"meta":50,"style":50},"#创建一个指定形状数组\na=np.arange(1,37).reshape(4,9)\n#进行指定填充\nnp.full_like(a,10)\n",[269,97178,97179,97184,97208,97213],{"__ignoreMap":50},[324,97180,97181],{"class":326,"line":327},[324,97182,97183],{"class":772},"#创建一个指定形状数组\n",[324,97185,97186,97188,97190,97192,97194,97196,97198,97200,97202,97204,97206],{"class":326,"line":203},[324,97187,25],{"class":867},[324,97189,913],{"class":863},[324,97191,93724],{"class":867},[324,97193,1082],{"class":916},[324,97195,1242],{"class":867},[324,97197,1189],{"class":916},[324,97199,93729],{"class":867},[324,97201,1157],{"class":916},[324,97203,1242],{"class":867},[324,97205,1284],{"class":916},[324,97207,874],{"class":867},[324,97209,97210],{"class":326,"line":338},[324,97211,97212],{"class":772},"#进行指定填充\n",[324,97214,97215,97218,97220],{"class":326,"line":344},[324,97216,97217],{"class":867},"np.full_like(a,",[324,97219,1310],{"class":916},[324,97221,874],{"class":867},[19,97223,12243],{},[19,97225,97226],{},[48,97227],{"alt":50,"src":97228},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-014.png",[35,97230,97232],{"id":97231},"_266-创建单位矩阵","2.6.6 创建单位矩阵",[151,97234,97236],{"id":97235},"_2661-法1eye函数","2.6.6.1 法1：eye()函数",[316,97238,97240],{"className":31100,"code":97239,"language":31102,"meta":50,"style":50},"np.eye(4,dtype=int)\n#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[269,97241,97242,97259],{"__ignoreMap":50},[324,97243,97244,97247,97249,97251,97253,97255,97257],{"class":326,"line":327},[324,97245,97246],{"class":867},"np.eye(",[324,97248,1157],{"class":916},[324,97250,1242],{"class":867},[324,97252,94222],{"class":5945},[324,97254,913],{"class":863},[324,97256,871],{"class":916},[324,97258,874],{"class":867},[324,97260,97261],{"class":326,"line":203},[324,97262,97263],{"class":772},"#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[151,97265,97267],{"id":97266},"_2662-法2identity","2.6.6.2 法2：identity()",[316,97269,97271],{"className":31100,"code":97270,"language":31102,"meta":50,"style":50},"#identity()\nnp.identity(5,dtype=int)\n",[269,97272,97273,97278],{"__ignoreMap":50},[324,97274,97275],{"class":326,"line":327},[324,97276,97277],{"class":772},"#identity()\n",[324,97279,97280,97283,97285,97287,97289,97291,97293],{"class":326,"line":203},[324,97281,97282],{"class":867},"np.identity(",[324,97284,1183],{"class":916},[324,97286,1242],{"class":867},[324,97288,94222],{"class":5945},[324,97290,913],{"class":863},[324,97292,871],{"class":916},[324,97294,874],{"class":867},[19,97296,97297],{},"两个函数是有区别的",[19,97299,97300],{},[48,97301],{"alt":50,"src":97302},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-015.png",[19,97304,97305],{},[48,97306],{"alt":50,"src":97307},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-016.png",[316,97309,97311],{"className":31100,"code":97310,"language":31102,"meta":50,"style":50},"# 创建一个 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",[269,97312,97313,97318,97330,97335,97340,97345,97350,97354,97359,97379,97383,97388,97393],{"__ignoreMap":50},[324,97314,97315],{"class":326,"line":327},[324,97316,97317],{"class":772},"# 创建一个 3 行 4 列的矩阵，对角线在第 0 条（默认）\n",[324,97319,97320,97322,97324,97326,97328],{"class":326,"line":203},[324,97321,97246],{"class":867},[324,97323,938],{"class":916},[324,97325,13164],{"class":867},[324,97327,1157],{"class":916},[324,97329,874],{"class":867},[324,97331,97332],{"class":326,"line":338},[324,97333,97334],{"class":772},"# 输出:\n",[324,97336,97337],{"class":326,"line":344},[324,97338,97339],{"class":772},"# [[1. 0. 0. 0.]\n",[324,97341,97342],{"class":326,"line":484},[324,97343,97344],{"class":772},"#  [0. 1. 0. 0.]\n",[324,97346,97347],{"class":326,"line":491},[324,97348,97349],{"class":772},"#  [0. 0. 1. 0.]]\n",[324,97351,97352],{"class":326,"line":496},[324,97353,488],{"emptyLinePlaceholder":487},[324,97355,97356],{"class":326,"line":502},[324,97357,97358],{"class":772},"# 对角线向上偏移1\n",[324,97360,97361,97363,97365,97367,97369,97371,97373,97375,97377],{"class":326,"line":508},[324,97362,97246],{"class":867},[324,97364,938],{"class":916},[324,97366,13164],{"class":867},[324,97368,1157],{"class":916},[324,97370,13164],{"class":867},[324,97372,1357],{"class":5945},[324,97374,913],{"class":863},[324,97376,1082],{"class":916},[324,97378,874],{"class":867},[324,97380,97381],{"class":326,"line":514},[324,97382,97334],{"class":772},[324,97384,97385],{"class":326,"line":2343},[324,97386,97387],{"class":772},"# [[0. 1. 0. 0.]\n",[324,97389,97390],{"class":326,"line":2348},[324,97391,97392],{"class":772},"#  [0. 0. 1. 0.]\n",[324,97394,97395],{"class":326,"line":2354},[324,97396,97397],{"class":772},"#  [0. 0. 0. 1.]]\n",[35,97399,97401],{"id":97400},"_267-linspace创建等差数列","2.6.7 linspace创建等差数列",[316,97403,97405],{"className":31100,"code":97404,"language":31102,"meta":50,"style":50},"#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",[269,97406,97407,97412,97416,97421,97426,97431,97436,97441,97446,97451,97456],{"__ignoreMap":50},[324,97408,97409],{"class":326,"line":327},[324,97410,97411],{"class":772},"#linspace函数用于创建一个一维数组，数组是一个等差数列构成的，格式如下：\n",[324,97413,97414],{"class":326,"line":203},[324,97415,96420],{"class":738},[324,97417,97418],{"class":326,"line":338},[324,97419,97420],{"class":738},"np.linspace(start,|stop,num=50,endpoint=True,retstep=False,dtype=None)\n",[324,97422,97423],{"class":326,"line":344},[324,97424,97425],{"class":738},"参数介绍：\n",[324,97427,97428],{"class":326,"line":484},[324,97429,97430],{"class":738},"start：序列的起始值\n",[324,97432,97433],{"class":326,"line":491},[324,97434,97435],{"class":738},"stop:序列的终止值，如果endpoint为True，该值包含数列中\n",[324,97437,97438],{"class":326,"line":496},[324,97439,97440],{"class":738},"num：要生长的等步长的样本数量，默认为50\n",[324,97442,97443],{"class":326,"line":502},[324,97444,97445],{"class":738},"endpoint：该值为True时，数列中包含stop值，反之不包含，默认是True\n",[324,97447,97448],{"class":326,"line":508},[324,97449,97450],{"class":738},"retstep：如果为True时，生长的数组中会显示间距，反之不显示\n",[324,97452,97453],{"class":326,"line":514},[324,97454,97455],{"class":738},"dtype：ndarry的数据类型\n",[324,97457,97458],{"class":326,"line":2343},[324,97459,96420],{"class":738},[19,97461,97462],{},[48,97463],{"alt":50,"src":97464},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-017.png",[19,97466,97467],{},"这里num=是可以省略的",[19,97469,97470],{},"也就是下方两行代码结果是一模一样的",[316,97472,97474],{"className":31100,"code":97473,"language":31102,"meta":50,"style":50},"np.linspace(1,5,5)\nnp.linspace(1,5,num=5)\n",[269,97475,97476,97493],{"__ignoreMap":50},[324,97477,97478,97481,97483,97485,97487,97489,97491],{"class":326,"line":327},[324,97479,97480],{"class":867},"np.linspace(",[324,97482,1082],{"class":916},[324,97484,1242],{"class":867},[324,97486,1183],{"class":916},[324,97488,1242],{"class":867},[324,97490,1183],{"class":916},[324,97492,874],{"class":867},[324,97494,97495,97497,97499,97501,97503,97505,97507,97509,97511],{"class":326,"line":203},[324,97496,97480],{"class":867},[324,97498,1082],{"class":916},[324,97500,1242],{"class":867},[324,97502,1183],{"class":916},[324,97504,1242],{"class":867},[324,97506,2396],{"class":5945},[324,97508,913],{"class":863},[324,97510,1183],{"class":916},[324,97512,874],{"class":867},[35,97514,97516],{"id":97515},"_268-logspace创建等比数列","2.6.8 logspace创建等比数列",[316,97518,97520],{"className":31100,"code":97519,"language":31102,"meta":50,"style":50},"#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",[269,97521,97522,97527,97531,97536,97541,97546,97551,97555,97560,97565,97569],{"__ignoreMap":50},[324,97523,97524],{"class":326,"line":327},[324,97525,97526],{"class":772},"#logspace函数用于创建一个等比数列，格式如下：\n",[324,97528,97529],{"class":326,"line":203},[324,97530,96420],{"class":738},[324,97532,97533],{"class":326,"line":338},[324,97534,97535],{"class":738},"np.logspace(start,stop,num=50,endpoint=True,base=10.0,dtype=None)\n",[324,97537,97538],{"class":326,"line":344},[324,97539,97540],{"class":738},"参数为：\n",[324,97542,97543],{"class":326,"line":484},[324,97544,97545],{"class":738},"start:序列的起始位置为：base**start\n",[324,97547,97548],{"class":326,"line":491},[324,97549,97550],{"class":738},"stop：序列的终止值为：base**stop。如果endpoint为True，该值包含于数列\n",[324,97552,97553],{"class":326,"line":496},[324,97554,97440],{"class":738},[324,97556,97557],{"class":326,"line":502},[324,97558,97559],{"class":738},"endpoint：是否包含 stop 这个值，默认是 True\n",[324,97561,97562],{"class":326,"line":508},[324,97563,97564],{"class":738},"base：对数的底数，默认是 10（常见对数）\n",[324,97566,97567],{"class":326,"line":514},[324,97568,97455],{"class":738},[324,97570,97571],{"class":326,"line":2343},[324,97572,96420],{"class":738},[19,97574,97575],{},[48,97576],{"alt":50,"src":97577},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-018.png",[19,97579,97580],{},"logspace()函数中的num参数也是可以不写num=的",[19,97582,97583],{},"endpoint是不可以省略的",[775,97585,97586],{},"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":50,"searchDepth":203,"depth":203,"links":97588},[97589,97593,97598,97602,97606,97607],{"id":95978,"depth":203,"text":95979,"children":97590},[97591,97592],{"id":95982,"depth":338,"text":95983},{"id":96055,"depth":338,"text":96056},{"id":96087,"depth":203,"text":96088,"children":97594},[97595,97596,97597],{"id":96091,"depth":338,"text":96092},{"id":96273,"depth":338,"text":96274},{"id":96351,"depth":338,"text":96352},{"id":96386,"depth":203,"text":96387,"children":97599},[97600,97601],{"id":96390,"depth":338,"text":96391},{"id":96447,"depth":338,"text":96448},{"id":96543,"depth":203,"text":96544,"children":97603},[97604,97605],{"id":96547,"depth":338,"text":96548},{"id":96559,"depth":338,"text":96560},{"id":96593,"depth":203,"text":96594},{"id":96630,"depth":203,"text":96631,"children":97608},[97609,97610,97611,97612,97613,97614,97615,97616],{"id":96634,"depth":338,"text":96635},{"id":96859,"depth":338,"text":96860},{"id":96866,"depth":338,"text":96867},{"id":97075,"depth":338,"text":97076},{"id":97095,"depth":338,"text":97096},{"id":97231,"depth":338,"text":97232},{"id":97400,"depth":338,"text":97401},{"id":97515,"depth":338,"text":97516},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch2",{"title":95970,"description":791},"wiki\u002F2025-08-14-numpy\u002Fch2-创建数组","SNWxvUgIzXm5wtETKP1GjU_wdSkG_XaKQiBCRZRvxfw",{"id":97623,"title":97624,"body":97625,"description":791,"extension":792,"meta":97718,"navigation":487,"path":97719,"seo":97720,"stem":97721,"__hash__":97722},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun.md","20.魔法命令mprun",{"type":7,"value":97626,"toc":97716},[97627,97630,97633,97636,97639,97642,97645,97648,97651,97654,97657,97660,97662,97665,97668,97673,97676,97679,97713],[10,97628,97624],{"id":97629},"_20魔法命令mprun",[19,97631,97632],{},"逐行分析数据内存的使用情况",[19,97634,97635],{},"语法格式：",[19,97637,97638],{},"%mprun -f 模块名.函数名 模块名.函数名()",[19,97640,97641],{},"分析结果列如下：",[19,97643,97644],{},"Line行号",[19,97646,97647],{},"Mem usage内存使用大小",[19,97649,97650],{},"increment内存增量",[19,97652,97653],{},"Line content代码内容",[19,97655,97656],{},"补充说明：",[19,97658,97659],{},"mprun不是Ipython内置，需要安装memory_profiler模块",[19,97661,95925],{},[19,97663,97664],{},"mprun测试的函数必须定义在独立模块中，不能定义在交互式Ipython环境中,要把它写入文件当中",[19,97666,97667],{},"如果需要重新加载模块，可以调用importlib模块提供reload函数",[19,97669,97670],{},[48,97671],{"alt":50,"src":97672},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-044.png",[19,97674,97675],{},"这个时候如果将函数里边range()范围改了，则重新运行之后，结果increment的每一句代码是不变的",[19,97677,97678],{},"这时候需要重新加载模块",[316,97680,97682],{"className":31100,"code":97681,"language":31102,"meta":50,"style":50},"#重新加载模块\nimport importlib\nimportlib.reload(mprun_test)\n%mprun -f mprun_test.fun_test mprun_test.fun_test()\n",[269,97683,97684,97689,97696,97701],{"__ignoreMap":50},[324,97685,97686],{"class":326,"line":327},[324,97687,97688],{"class":772},"#重新加载模块\n",[324,97690,97691,97693],{"class":326,"line":203},[324,97692,31114],{"class":863},[324,97694,97695],{"class":867}," importlib\n",[324,97697,97698],{"class":326,"line":338},[324,97699,97700],{"class":867},"importlib.reload(mprun_test)\n",[324,97702,97703,97705,97708,97710],{"class":326,"line":344},[324,97704,1192],{"class":863},[324,97706,97707],{"class":867},"mprun ",[324,97709,1396],{"class":863},[324,97711,97712],{"class":867},"f mprun_test.fun_test mprun_test.fun_test()\n",[775,97714,97715],{},"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":50,"searchDepth":203,"depth":203,"links":97717},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-mprun",{"title":97624,"description":791},"wiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun","IgHoOma_sVJYUvOa_nR1WsKoZkVZVARozypIz67Eesc",{"id":97724,"title":97725,"body":97726,"description":791,"extension":792,"meta":97743,"navigation":487,"path":97744,"seo":97745,"stem":97746,"__hash__":97747},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片.md","3.一维数组的索引和切片",{"type":7,"value":97727,"toc":97741},[97728,97731,97736],[10,97729,97725],{"id":97730},"_3一维数组的索引和切片",[19,97732,97733],{},[48,97734],{"alt":50,"src":97735},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-019.png",[19,97737,97738],{},[48,97739],{"alt":50,"src":97740},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-020.png",{"title":50,"searchDepth":203,"depth":203,"links":97742},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch3",{"title":97725,"description":791},"wiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片","HCjbAhTUAFlQa91QLrommm7yUYNAMWkOQ3-g6Ha153Q",{"id":97749,"title":97750,"body":97751,"description":791,"extension":792,"meta":98234,"navigation":487,"path":98235,"seo":98236,"stem":98237,"__hash__":98238},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片.md","4.二维数组的索引与切片",{"type":7,"value":97752,"toc":98232},[97753,97756,97759,97764,97797,97800,97838,97841,97875,97878,97983,97986,98023,98026,98127,98130,98181,98184,98226,98229],[10,97754,97750],{"id":97755},"_4二维数组的索引与切片",[19,97757,97758],{},"①获取指定单个元素",[19,97760,97761],{},[48,97762],{"alt":50,"src":97763},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-021.png",[316,97765,97767],{"className":31100,"code":97766,"language":31102,"meta":50,"style":50},"#获取元素9\n#先获取所在行，再获取所在列\n#数组[行索引号，列索引号]\na[1,2]\n",[269,97768,97769,97774,97779,97784],{"__ignoreMap":50},[324,97770,97771],{"class":326,"line":327},[324,97772,97773],{"class":772},"#获取元素9\n",[324,97775,97776],{"class":326,"line":203},[324,97777,97778],{"class":772},"#先获取所在行，再获取所在列\n",[324,97780,97781],{"class":326,"line":338},[324,97782,97783],{"class":772},"#数组[行索引号，列索引号]\n",[324,97785,97786,97789,97791,97793,97795],{"class":326,"line":344},[324,97787,97788],{"class":867},"a[",[324,97790,1082],{"class":916},[324,97792,1242],{"class":867},[324,97794,944],{"class":916},[324,97796,33968],{"class":867},[19,97798,97799],{},"②获取整行元素",[316,97801,97803],{"className":31100,"code":97802,"language":31102,"meta":50,"style":50},"#获取整行 数组[行索引号]\n#这个的效果与   数组[行索引号，：]效果是一样的\na[2]\n#也可以负索引获取一行\na[-1]\n",[269,97804,97805,97810,97815,97823,97828],{"__ignoreMap":50},[324,97806,97807],{"class":326,"line":327},[324,97808,97809],{"class":772},"#获取整行 数组[行索引号]\n",[324,97811,97812],{"class":326,"line":203},[324,97813,97814],{"class":772},"#这个的效果与   数组[行索引号，：]效果是一样的\n",[324,97816,97817,97819,97821],{"class":326,"line":338},[324,97818,97788],{"class":867},[324,97820,944],{"class":916},[324,97822,33968],{"class":867},[324,97824,97825],{"class":326,"line":344},[324,97826,97827],{"class":772},"#也可以负索引获取一行\n",[324,97829,97830,97832,97834,97836],{"class":326,"line":484},[324,97831,97788],{"class":867},[324,97833,1396],{"class":863},[324,97835,1082],{"class":916},[324,97837,33968],{"class":867},[19,97839,97840],{},"③获取整列元素",[316,97842,97844],{"className":31100,"code":97843,"language":31102,"meta":50,"style":50},"#获取整列 数组名[:,列索引]\na[:,2]\n#也可以负索引获取一列\na[:,-1]\n",[269,97845,97846,97851,97860,97865],{"__ignoreMap":50},[324,97847,97848],{"class":326,"line":327},[324,97849,97850],{"class":772},"#获取整列 数组名[:,列索引]\n",[324,97852,97853,97856,97858],{"class":326,"line":203},[324,97854,97855],{"class":867},"a[:,",[324,97857,944],{"class":916},[324,97859,33968],{"class":867},[324,97861,97862],{"class":326,"line":338},[324,97863,97864],{"class":772},"#也可以负索引获取一列\n",[324,97866,97867,97869,97871,97873],{"class":326,"line":344},[324,97868,97855],{"class":867},[324,97870,1396],{"class":863},[324,97872,1082],{"class":916},[324,97874,33968],{"class":867},[19,97876,97877],{},"④部分行部分列的元素",[316,97879,97881],{"className":31100,"code":97880,"language":31102,"meta":50,"style":50},"#部分行部分列 数组名[行切片，列切片]\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",[269,97882,97883,97888,97898,97902,97906,97911,97916,97920,97932,97936,97940,97945,97950,97955,97960,97964,97969],{"__ignoreMap":50},[324,97884,97885],{"class":326,"line":327},[324,97886,97887],{"class":772},"#部分行部分列 数组名[行切片，列切片]\n",[324,97889,97890,97893,97895],{"class":326,"line":203},[324,97891,97892],{"class":867},"a[:",[324,97894,944],{"class":916},[324,97896,97897],{"class":867},",:]\n",[324,97899,97900],{"class":326,"line":338},[324,97901,94286],{"class":772},[324,97903,97904],{"class":326,"line":344},[324,97905,94650],{"class":738},[324,97907,97908],{"class":326,"line":484},[324,97909,97910],{"class":738},"array([[ 1,  2,  3,  4,  5,  6],\n",[324,97912,97913],{"class":326,"line":491},[324,97914,97915],{"class":738},"       [ 7,  8,  9, 10, 11, 12]])\n",[324,97917,97918],{"class":326,"line":496},[324,97919,94650],{"class":738},[324,97921,97922,97924,97926,97928,97930],{"class":326,"line":502},[324,97923,97855],{"class":867},[324,97925,1082],{"class":916},[324,97927,1723],{"class":867},[324,97929,1157],{"class":916},[324,97931,33968],{"class":867},[324,97933,97934],{"class":326,"line":508},[324,97935,94286],{"class":772},[324,97937,97938],{"class":326,"line":514},[324,97939,94650],{"class":738},[324,97941,97942],{"class":326,"line":2343},[324,97943,97944],{"class":738},"array([[ 2,  3,  4],\n",[324,97946,97947],{"class":326,"line":2348},[324,97948,97949],{"class":738},"       [ 8,  9, 10],\n",[324,97951,97952],{"class":326,"line":2354},[324,97953,97954],{"class":738},"       [14, 15, 16],\n",[324,97956,97957],{"class":326,"line":2359},[324,97958,97959],{"class":738},"       [20, 21, 22]])\n",[324,97961,97962],{"class":326,"line":2373},[324,97963,94650],{"class":738},[324,97965,97966],{"class":326,"line":2378},[324,97967,97968],{"class":772},"#对列行同时进行切片，使用了step参数\n",[324,97970,97971,97974,97976,97979,97981],{"class":326,"line":2384},[324,97972,97973],{"class":867},"a[::",[324,97975,944],{"class":916},[324,97977,97978],{"class":867},",::",[324,97980,944],{"class":916},[324,97982,33968],{"class":867},[19,97984,97985],{},"⑤同时获取两个元素",[316,97987,97989],{"className":31100,"code":97988,"language":31102,"meta":50,"style":50},"#同时获取第三行第二列，第四行第一列\n#逗号前边括号为行的所有索引，逗号后边为列的所有索引\na[(2,3),(1,0)]\n",[269,97990,97991,97996,98001],{"__ignoreMap":50},[324,97992,97993],{"class":326,"line":327},[324,97994,97995],{"class":772},"#同时获取第三行第二列，第四行第一列\n",[324,97997,97998],{"class":326,"line":203},[324,97999,98000],{"class":772},"#逗号前边括号为行的所有索引，逗号后边为列的所有索引\n",[324,98002,98003,98006,98008,98010,98012,98014,98016,98018,98020],{"class":326,"line":338},[324,98004,98005],{"class":867},"a[(",[324,98007,944],{"class":916},[324,98009,1242],{"class":867},[324,98011,938],{"class":916},[324,98013,42969],{"class":867},[324,98015,1082],{"class":916},[324,98017,1242],{"class":867},[324,98019,1056],{"class":916},[324,98021,98022],{"class":867},")]\n",[19,98024,98025],{},"⑥切片，对行进行反向获取",[316,98027,98029],{"className":31100,"code":98028,"language":31102,"meta":50,"style":50},"#切片 对所有行进行反向获取\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",[269,98030,98031,98036,98046,98050,98054,98059,98064,98069,98074,98078,98083,98099,98103,98108,98113,98118,98123],{"__ignoreMap":50},[324,98032,98033],{"class":326,"line":327},[324,98034,98035],{"class":772},"#切片 对所有行进行反向获取\n",[324,98037,98038,98040,98042,98044],{"class":326,"line":203},[324,98039,97973],{"class":867},[324,98041,1396],{"class":863},[324,98043,1082],{"class":916},[324,98045,33968],{"class":867},[324,98047,98048],{"class":326,"line":338},[324,98049,94286],{"class":772},[324,98051,98052],{"class":326,"line":344},[324,98053,94650],{"class":738},[324,98055,98056],{"class":326,"line":484},[324,98057,98058],{"class":738},"array([[19, 20, 21, 22, 23, 24],\n",[324,98060,98061],{"class":326,"line":491},[324,98062,98063],{"class":738},"       [13, 14, 15, 16, 17, 18],\n",[324,98065,98066],{"class":326,"line":496},[324,98067,98068],{"class":738},"       [ 7,  8,  9, 10, 11, 12],\n",[324,98070,98071],{"class":326,"line":502},[324,98072,98073],{"class":738},"       [ 1,  2,  3,  4,  5,  6]])\n",[324,98075,98076],{"class":326,"line":508},[324,98077,94650],{"class":738},[324,98079,98080],{"class":326,"line":514},[324,98081,98082],{"class":772},"#对行列都进行反向切片获取\n",[324,98084,98085,98087,98089,98091,98093,98095,98097],{"class":326,"line":2343},[324,98086,97973],{"class":867},[324,98088,1396],{"class":863},[324,98090,1082],{"class":916},[324,98092,97978],{"class":867},[324,98094,1396],{"class":863},[324,98096,1082],{"class":916},[324,98098,33968],{"class":867},[324,98100,98101],{"class":326,"line":2348},[324,98102,94650],{"class":738},[324,98104,98105],{"class":326,"line":2354},[324,98106,98107],{"class":738},"array([[24, 23, 22, 21, 20, 19],\n",[324,98109,98110],{"class":326,"line":2359},[324,98111,98112],{"class":738},"       [18, 17, 16, 15, 14, 13],\n",[324,98114,98115],{"class":326,"line":2373},[324,98116,98117],{"class":738},"       [12, 11, 10,  9,  8,  7],\n",[324,98119,98120],{"class":326,"line":2378},[324,98121,98122],{"class":738},"       [ 6,  5,  4,  3,  2,  1]])\n",[324,98124,98125],{"class":326,"line":2384},[324,98126,94650],{"class":738},[19,98128,98129],{},"⑦修改元素",[316,98131,98133],{"className":31100,"code":98132,"language":31102,"meta":50,"style":50},"#获取前两行和前两列\nsub_a=a[:2,:2]\n#修改sub_a第一个元素的值\nsub_a[0,0]=100\n",[269,98134,98135,98140,98158,98163],{"__ignoreMap":50},[324,98136,98137],{"class":326,"line":327},[324,98138,98139],{"class":772},"#获取前两行和前两列\n",[324,98141,98142,98145,98147,98149,98151,98154,98156],{"class":326,"line":203},[324,98143,98144],{"class":867},"sub_a",[324,98146,913],{"class":863},[324,98148,97892],{"class":867},[324,98150,944],{"class":916},[324,98152,98153],{"class":867},",:",[324,98155,944],{"class":916},[324,98157,33968],{"class":867},[324,98159,98160],{"class":326,"line":338},[324,98161,98162],{"class":772},"#修改sub_a第一个元素的值\n",[324,98164,98165,98168,98170,98172,98174,98176,98178],{"class":326,"line":344},[324,98166,98167],{"class":867},"sub_a[",[324,98169,1056],{"class":916},[324,98171,1242],{"class":867},[324,98173,1056],{"class":916},[324,98175,1804],{"class":867},[324,98177,913],{"class":863},[324,98179,98180],{"class":916},"100\n",[19,98182,98183],{},"⑧数组复制copy()",[316,98185,98187],{"className":31100,"code":98186,"language":31102,"meta":50,"style":50},"#数组复制\ncopy_a=np.copy(sub_a)\n#修改copy_a后不影响原数组\ncopy_a[0,0]=100\n",[269,98188,98189,98194,98204,98209],{"__ignoreMap":50},[324,98190,98191],{"class":326,"line":327},[324,98192,98193],{"class":772},"#数组复制\n",[324,98195,98196,98199,98201],{"class":326,"line":203},[324,98197,98198],{"class":867},"copy_a",[324,98200,913],{"class":863},[324,98202,98203],{"class":867},"np.copy(sub_a)\n",[324,98205,98206],{"class":326,"line":338},[324,98207,98208],{"class":772},"#修改copy_a后不影响原数组\n",[324,98210,98211,98214,98216,98218,98220,98222,98224],{"class":326,"line":344},[324,98212,98213],{"class":867},"copy_a[",[324,98215,1056],{"class":916},[324,98217,1242],{"class":867},[324,98219,1056],{"class":916},[324,98221,1804],{"class":867},[324,98223,913],{"class":863},[324,98225,98180],{"class":916},[19,98227,98228],{},"使用copy()指令后创建的数组，对这个新的数组的元素进行改变，原数组的元素值是不会发生改变的",[775,98230,98231],{},"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":50,"searchDepth":203,"depth":203,"links":98233},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch4",{"title":97750,"description":791},"wiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片","FhYeIq3Ginq9ubG9YAvy-kWp6vFdXYGIbw8SBQgChuk",{"id":98240,"title":98241,"body":98242,"description":791,"extension":792,"meta":98734,"navigation":487,"path":98735,"seo":98736,"stem":98737,"__hash__":98738},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度.md","5.改变数组的维度",{"type":7,"value":98243,"toc":98726},[98244,98247,98251,98254,98257,98310,98313,98338,98341,98360,98380,98383,98399,98403,98449,98453,98495,98499,98502,98505,98508,98511,98514,98576,98636,98640,98643,98700,98704,98709,98718,98723],[10,98245,98241],{"id":98246},"_5改变数组的维度",[14,98248,98250],{"id":98249},"_51-使用reshape","5.1 使用reshape()",[19,98252,98253],{},"通过reshape方法可以将一维数组变成二维数组、三维或者多维数组，也可以通过reshape方法将多维数组变成一维",[19,98255,98256],{},"①一维数组转换为二维数组",[316,98258,98260],{"className":31100,"code":98259,"language":31102,"meta":50,"style":50},"a=np.arange(1,13)\n#将一维数组进行转换\n#注意点：元素个数不可以变\n#转换维度要保持一致，不一致就异常！！！\naa=a.reshape(2,6)\n",[269,98261,98262,98278,98283,98288,98293],{"__ignoreMap":50},[324,98263,98264,98266,98268,98270,98272,98274,98276],{"class":326,"line":327},[324,98265,25],{"class":867},[324,98267,913],{"class":863},[324,98269,93724],{"class":867},[324,98271,1082],{"class":916},[324,98273,1242],{"class":867},[324,98275,1387],{"class":916},[324,98277,874],{"class":867},[324,98279,98280],{"class":326,"line":203},[324,98281,98282],{"class":772},"#将一维数组进行转换\n",[324,98284,98285],{"class":326,"line":338},[324,98286,98287],{"class":772},"#注意点：元素个数不可以变\n",[324,98289,98290],{"class":326,"line":344},[324,98291,98292],{"class":772},"#转换维度要保持一致，不一致就异常！！！\n",[324,98294,98295,98297,98299,98302,98304,98306,98308],{"class":326,"line":484},[324,98296,94028],{"class":867},[324,98298,913],{"class":863},[324,98300,98301],{"class":867},"a.reshape(",[324,98303,944],{"class":916},[324,98305,1242],{"class":867},[324,98307,1208],{"class":916},[324,98309,874],{"class":867},[19,98311,98312],{},"②一维数组转换为三维数组",[316,98314,98316],{"className":31100,"code":98315,"language":31102,"meta":50,"style":50},"aaa=a.reshape(2,3,2)\n",[269,98317,98318],{"__ignoreMap":50},[324,98319,98320,98322,98324,98326,98328,98330,98332,98334,98336],{"class":326,"line":327},[324,98321,96243],{"class":867},[324,98323,913],{"class":863},[324,98325,98301],{"class":867},[324,98327,944],{"class":916},[324,98329,1242],{"class":867},[324,98331,938],{"class":916},[324,98333,1242],{"class":867},[324,98335,944],{"class":916},[324,98337,874],{"class":867},[19,98339,98340],{},"③二维数组转化为一维数组",[316,98342,98344],{"className":31100,"code":98343,"language":31102,"meta":50,"style":50},"#知道元素个数：\naa.reshape(12)\n",[269,98345,98346,98351],{"__ignoreMap":50},[324,98347,98348],{"class":326,"line":327},[324,98349,98350],{"class":772},"#知道元素个数：\n",[324,98352,98353,98356,98358],{"class":326,"line":203},[324,98354,98355],{"class":867},"aa.reshape(",[324,98357,1362],{"class":916},[324,98359,874],{"class":867},[316,98361,98363],{"className":31100,"code":98362,"language":31102,"meta":50,"style":50},"#不知道元素个数，参数传递-1\naa.reshape(-1)\n",[269,98364,98365,98370],{"__ignoreMap":50},[324,98366,98367],{"class":326,"line":327},[324,98368,98369],{"class":772},"#不知道元素个数，参数传递-1\n",[324,98371,98372,98374,98376,98378],{"class":326,"line":203},[324,98373,98355],{"class":867},[324,98375,1396],{"class":863},[324,98377,1082],{"class":916},[324,98379,874],{"class":867},[19,98381,98382],{},"④三维数组转换为一维数组",[316,98384,98386],{"className":31100,"code":98385,"language":31102,"meta":50,"style":50},"aaa.reshape(-1)\n",[269,98387,98388],{"__ignoreMap":50},[324,98389,98390,98393,98395,98397],{"class":326,"line":327},[324,98391,98392],{"class":867},"aaa.reshape(",[324,98394,1396],{"class":863},[324,98396,1082],{"class":916},[324,98398,874],{"class":867},[14,98400,98402],{"id":98401},"_52-使用revel转换为一维数组","5.2 使用revel()转换为一维数组",[316,98404,98406],{"className":31100,"code":98405,"language":31102,"meta":50,"style":50},"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",[269,98407,98408,98435,98440,98444],{"__ignoreMap":50},[324,98409,98410,98412,98414,98416,98418,98420,98422,98424,98426,98428,98430,98432],{"class":326,"line":327},[324,98411,94028],{"class":867},[324,98413,913],{"class":863},[324,98415,93724],{"class":867},[324,98417,1082],{"class":916},[324,98419,1242],{"class":867},[324,98421,1387],{"class":916},[324,98423,93729],{"class":867},[324,98425,944],{"class":916},[324,98427,1242],{"class":867},[324,98429,1208],{"class":916},[324,98431,1293],{"class":867},[324,98433,98434],{"class":772},"#转换为2行6列的数组\n",[324,98436,98437],{"class":326,"line":203},[324,98438,98439],{"class":867},"aa.revel()\n",[324,98441,98442],{"class":326,"line":338},[324,98443,94286],{"class":772},[324,98445,98446],{"class":326,"line":344},[324,98447,98448],{"class":772},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12])\n",[14,98450,98452],{"id":98451},"_53-使用flatten转换为一维数组","5.3 使用flatten()转换为一维数组",[316,98454,98456],{"className":31100,"code":98455,"language":31102,"meta":50,"style":50},"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",[269,98457,98458,98482,98487,98491],{"__ignoreMap":50},[324,98459,98460,98462,98464,98466,98468,98470,98472,98474,98476,98478,98480],{"class":326,"line":327},[324,98461,94028],{"class":867},[324,98463,913],{"class":863},[324,98465,93724],{"class":867},[324,98467,1082],{"class":916},[324,98469,1242],{"class":867},[324,98471,1387],{"class":916},[324,98473,93729],{"class":867},[324,98475,944],{"class":916},[324,98477,1242],{"class":867},[324,98479,1208],{"class":916},[324,98481,874],{"class":867},[324,98483,98484],{"class":326,"line":203},[324,98485,98486],{"class":867},"aa.flatten()\n",[324,98488,98489],{"class":326,"line":338},[324,98490,94286],{"class":772},[324,98492,98493],{"class":326,"line":344},[324,98494,98448],{"class":772},[14,98496,98498],{"id":98497},"_54-使用resize","5.4 使用resize()",[19,98500,98501],{},"改变数组的维度还可以直接设置numpy数组的shape属性（元组类型）",[19,98503,98504],{},"通过resize方法可以改变数组的维度",[19,98506,98507],{},"#resize修改数组维度",[19,98509,98510],{},"#以元组的形式指定形状",[19,98512,98513],{},"#改变的是原数组",[316,98515,98517],{"className":31100,"code":98516,"language":31102,"meta":50,"style":50},"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",[269,98518,98519,98535,98555,98568,98572],{"__ignoreMap":50},[324,98520,98521,98523,98525,98527,98529,98531,98533],{"class":326,"line":327},[324,98522,25],{"class":867},[324,98524,913],{"class":863},[324,98526,93724],{"class":867},[324,98528,1082],{"class":916},[324,98530,1242],{"class":867},[324,98532,1387],{"class":916},[324,98534,874],{"class":867},[324,98536,98537,98540,98542,98544,98546,98548,98550,98552],{"class":326,"line":203},[324,98538,98539],{"class":867},"a.shape",[324,98541,913],{"class":863},[324,98543,868],{"class":867},[324,98545,944],{"class":916},[324,98547,1242],{"class":867},[324,98549,1208],{"class":916},[324,98551,1293],{"class":867},[324,98553,98554],{"class":772},"#改变了原数组\n",[324,98556,98557,98559,98561,98564,98566],{"class":326,"line":338},[324,98558,25],{"class":867},[324,98560,913],{"class":863},[324,98562,98563],{"class":867},"resize((",[324,98565,1362],{"class":916},[324,98567,31219],{"class":867},[324,98569,98570],{"class":326,"line":344},[324,98571,94286],{"class":772},[324,98573,98574],{"class":326,"line":484},[324,98575,98448],{"class":772},[316,98577,98579],{"className":31100,"code":98578,"language":31102,"meta":50,"style":50},"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",[269,98580,98581,98594,98598,98602,98607,98612,98617,98622,98627,98632],{"__ignoreMap":50},[324,98582,98583,98586,98588,98590,98592],{"class":326,"line":327},[324,98584,98585],{"class":867},"a.resize((",[324,98587,1208],{"class":916},[324,98589,1242],{"class":867},[324,98591,944],{"class":916},[324,98593,31219],{"class":867},[324,98595,98596],{"class":326,"line":203},[324,98597,94286],{"class":772},[324,98599,98600],{"class":326,"line":338},[324,98601,94650],{"class":738},[324,98603,98604],{"class":326,"line":344},[324,98605,98606],{"class":738},"array([[ 1,  2],\n",[324,98608,98609],{"class":326,"line":484},[324,98610,98611],{"class":738},"       [ 3,  4],\n",[324,98613,98614],{"class":326,"line":491},[324,98615,98616],{"class":738},"       [ 5,  6],\n",[324,98618,98619],{"class":326,"line":496},[324,98620,98621],{"class":738},"       [ 7,  8],\n",[324,98623,98624],{"class":326,"line":502},[324,98625,98626],{"class":738},"       [ 9, 10],\n",[324,98628,98629],{"class":326,"line":508},[324,98630,98631],{"class":738},"       [11, 12]])\n",[324,98633,98634],{"class":326,"line":514},[324,98635,94650],{"class":738},[14,98637,98639],{"id":98638},"_55-使用数组shape属性修改","5.5 使用数组shape属性修改",[19,98641,98642],{},"改变了原数组",[316,98644,98646],{"className":31100,"code":98645,"language":31102,"meta":50,"style":50},"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",[269,98647,98648,98664,98680,98684,98688,98692,98696],{"__ignoreMap":50},[324,98649,98650,98652,98654,98656,98658,98660,98662],{"class":326,"line":327},[324,98651,25],{"class":867},[324,98653,913],{"class":863},[324,98655,93724],{"class":867},[324,98657,1082],{"class":916},[324,98659,1242],{"class":867},[324,98661,1387],{"class":916},[324,98663,874],{"class":867},[324,98665,98666,98668,98670,98672,98674,98676,98678],{"class":326,"line":203},[324,98667,98539],{"class":867},[324,98669,913],{"class":863},[324,98671,868],{"class":867},[324,98673,944],{"class":916},[324,98675,1242],{"class":867},[324,98677,1208],{"class":916},[324,98679,874],{"class":867},[324,98681,98682],{"class":326,"line":338},[324,98683,94286],{"class":772},[324,98685,98686],{"class":326,"line":344},[324,98687,94650],{"class":738},[324,98689,98690],{"class":326,"line":484},[324,98691,97910],{"class":738},[324,98693,98694],{"class":326,"line":491},[324,98695,97915],{"class":738},[324,98697,98698],{"class":326,"line":496},[324,98699,94650],{"class":738},[14,98701,98703],{"id":98702},"_56-重要比较","5.6 重要比较：",[19,98705,98706],{},[48,98707],{"alt":50,"src":98708},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-022.png",[19,98710,98711,98712,98714,98715,98717],{},"口诀：NumPy 函数要么用 ",[269,98713,96685],{},"，要么用 ",[269,98716,32218],{},"，创建结构用 shape，造数据用 size",[19,98719,98720],{},[48,98721],{"alt":50,"src":98722},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-023.png",[775,98724,98725],{},"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":50,"searchDepth":203,"depth":203,"links":98727},[98728,98729,98730,98731,98732,98733],{"id":98249,"depth":203,"text":98250},{"id":98401,"depth":203,"text":98402},{"id":98451,"depth":203,"text":98452},{"id":98497,"depth":203,"text":98498},{"id":98638,"depth":203,"text":98639},{"id":98702,"depth":203,"text":98703},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch5",{"title":98241,"description":791},"wiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度","L8Yh7Y4Z2Znl_Umc9cbqdOtHItjOa-jg0HqonMYnr74",{"id":98740,"title":98741,"body":98742,"description":791,"extension":792,"meta":99814,"navigation":487,"path":99815,"seo":99816,"stem":99817,"__hash__":99818},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接.md","6.数组的拼接",{"type":7,"value":98743,"toc":99808},[98744,98747,98751,98754,98757,98760,98825,98828,98868,98871,98953,98956,98961,98983,98985,98990,98995,98998,99001,99156,99159,99361,99365,99368,99371,99439,99441,99446,99449,99452,99532,99536,99539,99541,99614,99616,99621,99623,99703,99707,99710,99713,99716,99719,99722,99725,99805],[10,98745,98741],{"id":98746},"_6数组的拼接",[14,98748,98750],{"id":98749},"_61-使用concatenate数组拼接","6.1 使用concatenate数组拼接",[19,98752,98753],{},"使用concatenate进行数组拼接连接沿现有轴的数组数列",[19,98755,98756],{},"函数内部传两个数列构成的数列或者元组",[19,98758,98759],{},"①一维数组的拼接",[316,98761,98763],{"className":31100,"code":98762,"language":31102,"meta":50,"style":50},"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",[269,98764,98765,98785,98805,98810,98815,98820],{"__ignoreMap":50},[324,98766,98767,98769,98771,98773,98775,98777,98779,98781,98783],{"class":326,"line":327},[324,98768,25],{"class":867},[324,98770,913],{"class":863},[324,98772,93746],{"class":867},[324,98774,1082],{"class":916},[324,98776,1242],{"class":867},[324,98778,944],{"class":916},[324,98780,1242],{"class":867},[324,98782,938],{"class":916},[324,98784,5386],{"class":867},[324,98786,98787,98789,98791,98793,98795,98797,98799,98801,98803],{"class":326,"line":203},[324,98788,1127],{"class":867},[324,98790,913],{"class":863},[324,98792,93746],{"class":867},[324,98794,1157],{"class":916},[324,98796,1242],{"class":867},[324,98798,1183],{"class":916},[324,98800,1242],{"class":867},[324,98802,1208],{"class":916},[324,98804,5386],{"class":867},[324,98806,98807],{"class":326,"line":338},[324,98808,98809],{"class":772},"#调用concatenate进行数组拼接\n",[324,98811,98812],{"class":326,"line":344},[324,98813,98814],{"class":867},"np.concatenate((a,b))\n",[324,98816,98817],{"class":326,"line":484},[324,98818,98819],{"class":772},"#这里函数内部是以数列或者元组的形式进行传递的，也可以使用数列\n",[324,98821,98822],{"class":326,"line":491},[324,98823,98824],{"class":772},"#np.concatenate([a,b])\n",[19,98826,98827],{},"②一维多个数组拼接",[316,98829,98831],{"className":31100,"code":98830,"language":31102,"meta":50,"style":50},"#也可以多个数组进行拼接\nc=np.array([10,11,13])\nc\nnp.concatenate((a,b,c))\n",[269,98832,98833,98838,98858,98863],{"__ignoreMap":50},[324,98834,98835],{"class":326,"line":327},[324,98836,98837],{"class":772},"#也可以多个数组进行拼接\n",[324,98839,98840,98842,98844,98846,98848,98850,98852,98854,98856],{"class":326,"line":203},[324,98841,1152],{"class":867},[324,98843,913],{"class":863},[324,98845,93746],{"class":867},[324,98847,1310],{"class":916},[324,98849,1242],{"class":867},[324,98851,1336],{"class":916},[324,98853,1242],{"class":867},[324,98855,1387],{"class":916},[324,98857,5386],{"class":867},[324,98859,98860],{"class":326,"line":338},[324,98861,98862],{"class":867},"c\n",[324,98864,98865],{"class":326,"line":344},[324,98866,98867],{"class":867},"np.concatenate((a,b,c))\n",[19,98869,98870],{},"③二维数组拼接",[316,98872,98874],{"className":31100,"code":98873,"language":31102,"meta":50,"style":50},"#二维数组使用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",[269,98875,98876,98881,98905,98930,98935,98940],{"__ignoreMap":50},[324,98877,98878],{"class":326,"line":327},[324,98879,98880],{"class":772},"#二维数组使用concatenate进行拼接\n",[324,98882,98883,98885,98887,98889,98891,98893,98895,98897,98899,98901,98903],{"class":326,"line":203},[324,98884,94028],{"class":867},[324,98886,913],{"class":863},[324,98888,93724],{"class":867},[324,98890,1082],{"class":916},[324,98892,1242],{"class":867},[324,98894,1387],{"class":916},[324,98896,93729],{"class":867},[324,98898,938],{"class":916},[324,98900,1242],{"class":867},[324,98902,1157],{"class":916},[324,98904,874],{"class":867},[324,98906,98907,98910,98912,98914,98916,98918,98920,98922,98924,98926,98928],{"class":326,"line":338},[324,98908,98909],{"class":867},"bb",[324,98911,913],{"class":863},[324,98913,93724],{"class":867},[324,98915,1201],{"class":916},[324,98917,1242],{"class":867},[324,98919,1506],{"class":916},[324,98921,93729],{"class":867},[324,98923,938],{"class":916},[324,98925,1242],{"class":867},[324,98927,1157],{"class":916},[324,98929,874],{"class":867},[324,98931,98932],{"class":326,"line":344},[324,98933,98934],{"class":772},"#调用concatenate进行拼接,axis默认值为0，按行;axis=1时按列\n",[324,98936,98937],{"class":326,"line":484},[324,98938,98939],{"class":772},"#concatenate是有两个参数的，一个是要拼接数组组成的数列或者元组，另一个是轴axis\n",[324,98941,98942,98945,98947,98949,98951],{"class":326,"line":491},[324,98943,98944],{"class":867},"np.concatenate((aa,bb),",[324,98946,48236],{"class":5945},[324,98948,913],{"class":863},[324,98950,1056],{"class":916},[324,98952,874],{"class":867},[19,98954,98955],{},"结果：",[19,98957,98958],{},[48,98959],{"alt":50,"src":98960},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-024.png",[316,98962,98964],{"className":31100,"code":98963,"language":31102,"meta":50,"style":50},"#指定axis为1进行拼接\nnp.concatenate((aa,bb),axis=1)\n",[269,98965,98966,98971],{"__ignoreMap":50},[324,98967,98968],{"class":326,"line":327},[324,98969,98970],{"class":772},"#指定axis为1进行拼接\n",[324,98972,98973,98975,98977,98979,98981],{"class":326,"line":203},[324,98974,98944],{"class":867},[324,98976,48236],{"class":5945},[324,98978,913],{"class":863},[324,98980,1082],{"class":916},[324,98982,874],{"class":867},[19,98984,98955],{},[19,98986,98987],{},[48,98988],{"alt":50,"src":98989},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-025.png",[19,98991,98992],{},[116,98993,98994],{},"二维数组总结：0竖着方向，1横着方向",[19,98996,98997],{},"④三维数组拼接",[19,98999,99000],{},"#concatenate()三维数组拼接，axis有三个维度0，1，2",[316,99002,99004],{"className":31100,"code":99003,"language":31102,"meta":50,"style":50},"#两个三行六列\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",[269,99005,99006,99011,99039,99069,99074,99091,99096,99101,99106,99123,99128,99133,99138,99151],{"__ignoreMap":50},[324,99007,99008],{"class":326,"line":327},[324,99009,99010],{"class":772},"#两个三行六列\n",[324,99012,99013,99015,99017,99019,99021,99023,99025,99027,99029,99031,99033,99035,99037],{"class":326,"line":203},[324,99014,96243],{"class":867},[324,99016,913],{"class":863},[324,99018,93724],{"class":867},[324,99020,1082],{"class":916},[324,99022,1242],{"class":867},[324,99024,1189],{"class":916},[324,99026,93729],{"class":867},[324,99028,944],{"class":916},[324,99030,1242],{"class":867},[324,99032,938],{"class":916},[324,99034,1242],{"class":867},[324,99036,1208],{"class":916},[324,99038,874],{"class":867},[324,99040,99041,99044,99046,99048,99050,99052,99055,99057,99059,99061,99063,99065,99067],{"class":326,"line":338},[324,99042,99043],{"class":867},"bbb",[324,99045,913],{"class":863},[324,99047,93724],{"class":867},[324,99049,1201],{"class":916},[324,99051,1242],{"class":867},[324,99053,99054],{"class":916},"137",[324,99056,93729],{"class":867},[324,99058,944],{"class":916},[324,99060,1242],{"class":867},[324,99062,938],{"class":916},[324,99064,1242],{"class":867},[324,99066,1208],{"class":916},[324,99068,874],{"class":867},[324,99070,99071],{"class":326,"line":344},[324,99072,99073],{"class":772},"#axis=0\n",[324,99075,99076,99078,99080,99083,99085,99087,99089],{"class":326,"line":484},[324,99077,1559],{"class":867},[324,99079,913],{"class":863},[324,99081,99082],{"class":867},"np.concatenate((aaa,bbb),",[324,99084,48236],{"class":5945},[324,99086,913],{"class":863},[324,99088,1056],{"class":916},[324,99090,874],{"class":867},[324,99092,99093],{"class":326,"line":491},[324,99094,99095],{"class":867},"s.shape\n",[324,99097,99098],{"class":326,"line":496},[324,99099,99100],{"class":772},"#输出：(4,3,6)\n",[324,99102,99103],{"class":326,"line":502},[324,99104,99105],{"class":772},"#axis=1\n",[324,99107,99108,99111,99113,99115,99117,99119,99121],{"class":326,"line":508},[324,99109,99110],{"class":867},"ss",[324,99112,913],{"class":863},[324,99114,99082],{"class":867},[324,99116,48236],{"class":5945},[324,99118,913],{"class":863},[324,99120,1082],{"class":916},[324,99122,874],{"class":867},[324,99124,99125],{"class":326,"line":514},[324,99126,99127],{"class":867},"ss.shape\n",[324,99129,99130],{"class":326,"line":2343},[324,99131,99132],{"class":772},"#输出：(2,6,6)\n",[324,99134,99135],{"class":326,"line":2348},[324,99136,99137],{"class":772},"#axis=2\n",[324,99139,99140,99142,99144,99146,99148],{"class":326,"line":2354},[324,99141,99082],{"class":867},[324,99143,48236],{"class":5945},[324,99145,913],{"class":863},[324,99147,944],{"class":916},[324,99149,99150],{"class":867},").shape\n",[324,99152,99153],{"class":326,"line":2359},[324,99154,99155],{"class":772},"#输出：（2，3，12）\n",[19,99157,99158],{},"⑤四维数组拼接",[316,99160,99162],{"className":31100,"code":99161,"language":31102,"meta":50,"style":50},"#两个三行六列\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",[269,99163,99164,99168,99196,99224,99249,99275,99279,99292,99297,99301,99313,99318,99322,99334,99339,99344,99356],{"__ignoreMap":50},[324,99165,99166],{"class":326,"line":327},[324,99167,99010],{"class":772},[324,99169,99170,99172,99174,99176,99178,99180,99182,99184,99186,99188,99190,99192,99194],{"class":326,"line":203},[324,99171,96243],{"class":867},[324,99173,913],{"class":863},[324,99175,93724],{"class":867},[324,99177,1082],{"class":916},[324,99179,1242],{"class":867},[324,99181,1189],{"class":916},[324,99183,93729],{"class":867},[324,99185,944],{"class":916},[324,99187,1242],{"class":867},[324,99189,938],{"class":916},[324,99191,1242],{"class":867},[324,99193,1208],{"class":916},[324,99195,874],{"class":867},[324,99197,99198,99200,99202,99204,99206,99208,99210,99212,99214,99216,99218,99220,99222],{"class":326,"line":338},[324,99199,99043],{"class":867},[324,99201,913],{"class":863},[324,99203,93724],{"class":867},[324,99205,1201],{"class":916},[324,99207,1242],{"class":867},[324,99209,99054],{"class":916},[324,99211,93729],{"class":867},[324,99213,944],{"class":916},[324,99215,1242],{"class":867},[324,99217,938],{"class":916},[324,99219,1242],{"class":867},[324,99221,1208],{"class":916},[324,99223,874],{"class":867},[324,99225,99226,99229,99231,99233,99235,99237,99239,99241,99243,99245,99247],{"class":326,"line":344},[324,99227,99228],{"class":867},"aaaa",[324,99230,913],{"class":863},[324,99232,98392],{"class":867},[324,99234,944],{"class":916},[324,99236,1242],{"class":867},[324,99238,938],{"class":916},[324,99240,1242],{"class":867},[324,99242,938],{"class":916},[324,99244,1242],{"class":867},[324,99246,944],{"class":916},[324,99248,874],{"class":867},[324,99250,99251,99254,99256,99259,99261,99263,99265,99267,99269,99271,99273],{"class":326,"line":484},[324,99252,99253],{"class":867},"bbbb",[324,99255,913],{"class":863},[324,99257,99258],{"class":867},"bbb.reshape(",[324,99260,944],{"class":916},[324,99262,1242],{"class":867},[324,99264,938],{"class":916},[324,99266,1242],{"class":867},[324,99268,938],{"class":916},[324,99270,1242],{"class":867},[324,99272,944],{"class":916},[324,99274,874],{"class":867},[324,99276,99277],{"class":326,"line":491},[324,99278,99073],{"class":772},[324,99280,99281,99284,99286,99288,99290],{"class":326,"line":496},[324,99282,99283],{"class":867},"np.concatenate((aaaa,bbbb),",[324,99285,48236],{"class":5945},[324,99287,913],{"class":863},[324,99289,1056],{"class":916},[324,99291,99150],{"class":867},[324,99293,99294],{"class":326,"line":502},[324,99295,99296],{"class":772},"#结果：（4，3，3，2）\n",[324,99298,99299],{"class":326,"line":508},[324,99300,99105],{"class":772},[324,99302,99303,99305,99307,99309,99311],{"class":326,"line":514},[324,99304,99283],{"class":867},[324,99306,48236],{"class":5945},[324,99308,913],{"class":863},[324,99310,1082],{"class":916},[324,99312,99150],{"class":867},[324,99314,99315],{"class":326,"line":2343},[324,99316,99317],{"class":772},"#结果：（2，6，3，2）\n",[324,99319,99320],{"class":326,"line":2348},[324,99321,99137],{"class":772},[324,99323,99324,99326,99328,99330,99332],{"class":326,"line":2354},[324,99325,99283],{"class":867},[324,99327,48236],{"class":5945},[324,99329,913],{"class":863},[324,99331,944],{"class":916},[324,99333,99150],{"class":867},[324,99335,99336],{"class":326,"line":2359},[324,99337,99338],{"class":772},"#结果：（2，3，6，2）\n",[324,99340,99341],{"class":326,"line":2373},[324,99342,99343],{"class":772},"#axis=3\n",[324,99345,99346,99348,99350,99352,99354],{"class":326,"line":2378},[324,99347,99283],{"class":867},[324,99349,48236],{"class":5945},[324,99351,913],{"class":863},[324,99353,938],{"class":916},[324,99355,99150],{"class":867},[324,99357,99358],{"class":326,"line":2384},[324,99359,99360],{"class":772},"#结果：（2，3，3，4）\n",[14,99362,99364],{"id":99363},"_62-使用hstack数组拼接","6.2 使用hstack数组拼接",[19,99366,99367],{},"使用hstack进行数组拼接，水平堆叠序列中的数组(列方向)",[19,99369,99370],{},"①二维数组",[316,99372,99374],{"className":31100,"code":99373,"language":31102,"meta":50,"style":50},"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",[269,99375,99376,99400,99424,99429,99434],{"__ignoreMap":50},[324,99377,99378,99380,99382,99384,99386,99388,99390,99392,99394,99396,99398],{"class":326,"line":327},[324,99379,94028],{"class":867},[324,99381,913],{"class":863},[324,99383,93724],{"class":867},[324,99385,1082],{"class":916},[324,99387,1242],{"class":867},[324,99389,1387],{"class":916},[324,99391,93729],{"class":867},[324,99393,938],{"class":916},[324,99395,1242],{"class":867},[324,99397,1157],{"class":916},[324,99399,874],{"class":867},[324,99401,99402,99404,99406,99408,99410,99412,99414,99416,99418,99420,99422],{"class":326,"line":203},[324,99403,98909],{"class":867},[324,99405,913],{"class":863},[324,99407,93724],{"class":867},[324,99409,1201],{"class":916},[324,99411,1242],{"class":867},[324,99413,1506],{"class":916},[324,99415,93729],{"class":867},[324,99417,938],{"class":916},[324,99419,1242],{"class":867},[324,99421,1157],{"class":916},[324,99423,874],{"class":867},[324,99425,99426],{"class":326,"line":338},[324,99427,99428],{"class":867},"np.hstack((aa,bb))\n",[324,99430,99431],{"class":326,"line":344},[324,99432,99433],{"class":772},"#跟concatenate函数方法一样，把要拼接的数组放到数列或者元组中去\n",[324,99435,99436],{"class":326,"line":484},[324,99437,99438],{"class":772},"#np.hstack([aa,bb])\n",[19,99440,98955],{},[19,99442,99443],{},[48,99444],{"alt":50,"src":99445},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-026.png",[19,99447,99448],{},"等效于concatenate()函数中axis=1时的情况",[19,99450,99451],{},"②三维数组",[316,99453,99455],{"className":31100,"code":99454,"language":31102,"meta":50,"style":50},"#两个三行六列\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",[269,99456,99457,99461,99489,99517,99522,99527],{"__ignoreMap":50},[324,99458,99459],{"class":326,"line":327},[324,99460,99010],{"class":772},[324,99462,99463,99465,99467,99469,99471,99473,99475,99477,99479,99481,99483,99485,99487],{"class":326,"line":203},[324,99464,96243],{"class":867},[324,99466,913],{"class":863},[324,99468,93724],{"class":867},[324,99470,1082],{"class":916},[324,99472,1242],{"class":867},[324,99474,1189],{"class":916},[324,99476,93729],{"class":867},[324,99478,944],{"class":916},[324,99480,1242],{"class":867},[324,99482,938],{"class":916},[324,99484,1242],{"class":867},[324,99486,1208],{"class":916},[324,99488,874],{"class":867},[324,99490,99491,99493,99495,99497,99499,99501,99503,99505,99507,99509,99511,99513,99515],{"class":326,"line":338},[324,99492,99043],{"class":867},[324,99494,913],{"class":863},[324,99496,93724],{"class":867},[324,99498,1201],{"class":916},[324,99500,1242],{"class":867},[324,99502,99054],{"class":916},[324,99504,93729],{"class":867},[324,99506,944],{"class":916},[324,99508,1242],{"class":867},[324,99510,938],{"class":916},[324,99512,1242],{"class":867},[324,99514,1208],{"class":916},[324,99516,874],{"class":867},[324,99518,99519],{"class":326,"line":344},[324,99520,99521],{"class":772},"#使用hstack\n",[324,99523,99524],{"class":326,"line":484},[324,99525,99526],{"class":867},"np.hstack((aaa,bbb)).shape\n",[324,99528,99529],{"class":326,"line":491},[324,99530,99531],{"class":772},"#输出：（2，6，6）\n",[14,99533,99535],{"id":99534},"_63-使用vstack数组拼接","6.3 使用vstack数组拼接",[19,99537,99538],{},"使用vstack进行数组拼接，竖直堆叠序列中的数组(行方向)",[19,99540,99370],{},[316,99542,99544],{"className":31100,"code":99543,"language":31102,"meta":50,"style":50},"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",[269,99545,99546,99570,99594,99599,99604,99609],{"__ignoreMap":50},[324,99547,99548,99550,99552,99554,99556,99558,99560,99562,99564,99566,99568],{"class":326,"line":327},[324,99549,94028],{"class":867},[324,99551,913],{"class":863},[324,99553,93724],{"class":867},[324,99555,1082],{"class":916},[324,99557,1242],{"class":867},[324,99559,1387],{"class":916},[324,99561,93729],{"class":867},[324,99563,938],{"class":916},[324,99565,1242],{"class":867},[324,99567,1157],{"class":916},[324,99569,874],{"class":867},[324,99571,99572,99574,99576,99578,99580,99582,99584,99586,99588,99590,99592],{"class":326,"line":203},[324,99573,98909],{"class":867},[324,99575,913],{"class":863},[324,99577,93724],{"class":867},[324,99579,1201],{"class":916},[324,99581,1242],{"class":867},[324,99583,1506],{"class":916},[324,99585,93729],{"class":867},[324,99587,938],{"class":916},[324,99589,1242],{"class":867},[324,99591,1157],{"class":916},[324,99593,874],{"class":867},[324,99595,99596],{"class":326,"line":338},[324,99597,99598],{"class":772},"#vstack 垂直方向进行堆叠\n",[324,99600,99601],{"class":326,"line":344},[324,99602,99603],{"class":867},"np.vstack((aa,bb))\n",[324,99605,99606],{"class":326,"line":484},[324,99607,99608],{"class":772},"#与hstack传的参数类似，等价于：\n",[324,99610,99611],{"class":326,"line":491},[324,99612,99613],{"class":867},"np.vstack([aa,bb])\n",[19,99615,98955],{},[19,99617,99618],{},[48,99619],{"alt":50,"src":99620},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-027.png",[19,99622,99451],{},[316,99624,99626],{"className":31100,"code":99625,"language":31102,"meta":50,"style":50},"#两个三行六列\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",[269,99627,99628,99632,99660,99688,99693,99698],{"__ignoreMap":50},[324,99629,99630],{"class":326,"line":327},[324,99631,99010],{"class":772},[324,99633,99634,99636,99638,99640,99642,99644,99646,99648,99650,99652,99654,99656,99658],{"class":326,"line":203},[324,99635,96243],{"class":867},[324,99637,913],{"class":863},[324,99639,93724],{"class":867},[324,99641,1082],{"class":916},[324,99643,1242],{"class":867},[324,99645,1189],{"class":916},[324,99647,93729],{"class":867},[324,99649,944],{"class":916},[324,99651,1242],{"class":867},[324,99653,938],{"class":916},[324,99655,1242],{"class":867},[324,99657,1208],{"class":916},[324,99659,874],{"class":867},[324,99661,99662,99664,99666,99668,99670,99672,99674,99676,99678,99680,99682,99684,99686],{"class":326,"line":338},[324,99663,99043],{"class":867},[324,99665,913],{"class":863},[324,99667,93724],{"class":867},[324,99669,1201],{"class":916},[324,99671,1242],{"class":867},[324,99673,99054],{"class":916},[324,99675,93729],{"class":867},[324,99677,944],{"class":916},[324,99679,1242],{"class":867},[324,99681,938],{"class":916},[324,99683,1242],{"class":867},[324,99685,1208],{"class":916},[324,99687,874],{"class":867},[324,99689,99690],{"class":326,"line":344},[324,99691,99692],{"class":772},"#使用vstack\n",[324,99694,99695],{"class":326,"line":484},[324,99696,99697],{"class":867},"np.vstack((aaa,bbb)).shape\n",[324,99699,99700],{"class":326,"line":491},[324,99701,99702],{"class":772},"#输出：（4，3，6）\n",[14,99704,99706],{"id":99705},"_64-使用dstack数组拼接","6.4 使用dstack数组拼接",[19,99708,99709],{},"该方法是三维数组特有的方法",[19,99711,99712],{},"也就是说",[19,99714,99715],{},"一维数组拼接方法用：concatenate()",[19,99717,99718],{},"二维数组拼接方法用: concatenate(),hstack(),vstack()",[19,99720,99721],{},"三维数组拼接方法用: concatenate(),hstack(),vstack(),dstack()",[19,99723,99724],{},"四维数组及多维数组只能用concatenate进行拼接",[316,99726,99728],{"className":31100,"code":99727,"language":31102,"meta":50,"style":50},"#两个三行六列\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",[269,99729,99730,99734,99762,99790,99795,99800],{"__ignoreMap":50},[324,99731,99732],{"class":326,"line":327},[324,99733,99010],{"class":772},[324,99735,99736,99738,99740,99742,99744,99746,99748,99750,99752,99754,99756,99758,99760],{"class":326,"line":203},[324,99737,96243],{"class":867},[324,99739,913],{"class":863},[324,99741,93724],{"class":867},[324,99743,1082],{"class":916},[324,99745,1242],{"class":867},[324,99747,1189],{"class":916},[324,99749,93729],{"class":867},[324,99751,944],{"class":916},[324,99753,1242],{"class":867},[324,99755,938],{"class":916},[324,99757,1242],{"class":867},[324,99759,1208],{"class":916},[324,99761,874],{"class":867},[324,99763,99764,99766,99768,99770,99772,99774,99776,99778,99780,99782,99784,99786,99788],{"class":326,"line":338},[324,99765,99043],{"class":867},[324,99767,913],{"class":863},[324,99769,93724],{"class":867},[324,99771,1201],{"class":916},[324,99773,1242],{"class":867},[324,99775,99054],{"class":916},[324,99777,93729],{"class":867},[324,99779,944],{"class":916},[324,99781,1242],{"class":867},[324,99783,938],{"class":916},[324,99785,1242],{"class":867},[324,99787,1208],{"class":916},[324,99789,874],{"class":867},[324,99791,99792],{"class":326,"line":344},[324,99793,99794],{"class":772},"#使用dstack\n",[324,99796,99797],{"class":326,"line":484},[324,99798,99799],{"class":867},"np.dstack((aaa,bbb)).shape\n",[324,99801,99802],{"class":326,"line":491},[324,99803,99804],{"class":772},"#结果：（2，3，12）\n",[775,99806,99807],{},"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":50,"searchDepth":203,"depth":203,"links":99809},[99810,99811,99812,99813],{"id":98749,"depth":203,"text":98750},{"id":99363,"depth":203,"text":99364},{"id":99534,"depth":203,"text":99535},{"id":99705,"depth":203,"text":99706},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch6",{"title":98741,"description":791},"wiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接","0lcecFbbCD7708gTYIcl02jIknmUZ4PA0g3J__NnHUY",{"id":99820,"title":99821,"body":99822,"description":791,"extension":792,"meta":100097,"navigation":487,"path":100098,"seo":100099,"stem":100100,"__hash__":100101},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch7-数组转置.md","7.数组转置",{"type":7,"value":99823,"toc":100095},[99824,99827,99830,99924,99927,99930,99933,99936,99939,99942,99945,99948,100092],[10,99825,99821],{"id":99826},"_7数组转置",[19,99828,99829],{},"使用transpose()函数",[316,99831,99833],{"className":31100,"code":99832,"language":31102,"meta":50,"style":50},"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",[269,99834,99835,99845,99869,99874,99879,99884,99889,99897,99901,99905,99910,99915,99920],{"__ignoreMap":50},[324,99836,99837,99839,99841,99843],{"class":326,"line":327},[324,99838,31114],{"class":863},[324,99840,32102],{"class":867},[324,99842,32105],{"class":863},[324,99844,32108],{"class":867},[324,99846,99847,99849,99851,99853,99855,99857,99859,99861,99863,99865,99867],{"class":326,"line":203},[324,99848,25],{"class":867},[324,99850,913],{"class":863},[324,99852,32439],{"class":867},[324,99854,1082],{"class":916},[324,99856,1242],{"class":867},[324,99858,1387],{"class":916},[324,99860,93729],{"class":867},[324,99862,1157],{"class":916},[324,99864,1242],{"class":867},[324,99866,938],{"class":916},[324,99868,874],{"class":867},[324,99870,99871],{"class":326,"line":338},[324,99872,99873],{"class":772},"#二维数组转置\n",[324,99875,99876],{"class":326,"line":344},[324,99877,99878],{"class":772},"#调用transpose()函数\n",[324,99880,99881],{"class":326,"line":484},[324,99882,99883],{"class":867},"a.transpose()\n",[324,99885,99886],{"class":326,"line":491},[324,99887,99888],{"class":772},"#对于二维数组也可以采用.T来实现\n",[324,99890,99891,99894],{"class":326,"line":496},[324,99892,99893],{"class":867},"a.T",[324,99895,99896],{"class":772},"#与上述代码一样\n",[324,99898,99899],{"class":326,"line":502},[324,99900,94286],{"class":772},[324,99902,99903],{"class":326,"line":508},[324,99904,94650],{"class":738},[324,99906,99907],{"class":326,"line":514},[324,99908,99909],{"class":738},"array([[ 1,  4,  7, 10],\n",[324,99911,99912],{"class":326,"line":2343},[324,99913,99914],{"class":738},"       [ 2,  5,  8, 11],\n",[324,99916,99917],{"class":326,"line":2348},[324,99918,99919],{"class":738},"       [ 3,  6,  9, 12]])\n",[324,99921,99922],{"class":326,"line":2354},[324,99923,94650],{"class":738},[19,99925,99926],{},"也可以使用np.transpose()的形式",[19,99928,99929],{},"#多维数组进行转置 np.transpose()",[19,99931,99932],{},"#对二维数组也可以使用np.transpose()进行转置",[19,99934,99935],{},"#这个有两个维度，第一个是数组，第二个是维度,可以是数列也可以是元组的形式传到这个函数中",[19,99937,99938],{},"第二个参数，维度可以理解为用axis中的数来理解",[19,99940,99941],{},"对于二维数组，axis是有两个值的0，1 进行转置就传（1,0）两者进行了替换",[19,99943,99944],{},"对于三维数组，axis是有三个值的0，1，2，进行转置，想换哪个就将默认的(0,1,2)进行改",[19,99946,99947],{},"四维及以上的数组也是一样的道理",[316,99949,99951],{"className":31100,"code":99950,"language":31102,"meta":50,"style":50},"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",[269,99952,99953,99981,99986,99991,99996,100014,100019,100051,100056,100061,100066,100087],{"__ignoreMap":50},[324,99954,99955,99957,99959,99961,99963,99965,99967,99969,99971,99973,99975,99977,99979],{"class":326,"line":327},[324,99956,1684],{"class":867},[324,99958,913],{"class":863},[324,99960,93724],{"class":867},[324,99962,1082],{"class":916},[324,99964,1242],{"class":867},[324,99966,1189],{"class":916},[324,99968,93729],{"class":867},[324,99970,938],{"class":916},[324,99972,1242],{"class":867},[324,99974,1208],{"class":916},[324,99976,1242],{"class":867},[324,99978,944],{"class":916},[324,99980,874],{"class":867},[324,99982,99983],{"class":326,"line":203},[324,99984,99985],{"class":867},"x.shape\n",[324,99987,99988],{"class":326,"line":338},[324,99989,99990],{"class":772},"#结果：（3,6,2）\n",[324,99992,99993],{"class":326,"line":344},[324,99994,99995],{"class":772},"#使用np.transpose()进行转置 变为(2,6,3)\n",[324,99997,99998,100001,100003,100005,100007,100009,100011],{"class":326,"line":484},[324,99999,100000],{"class":867},"np.transpose(x,(",[324,100002,944],{"class":916},[324,100004,1242],{"class":867},[324,100006,1082],{"class":916},[324,100008,1242],{"class":867},[324,100010,1056],{"class":916},[324,100012,100013],{"class":867},")).shape\n",[324,100015,100016],{"class":326,"line":491},[324,100017,100018],{"class":772},"#结果：(2,6,3)\n",[324,100020,100021,100023,100025,100027,100029,100031,100033,100035,100037,100039,100041,100043,100045,100047,100049],{"class":326,"line":496},[324,100022,99228],{"class":867},[324,100024,913],{"class":863},[324,100026,93724],{"class":867},[324,100028,1082],{"class":916},[324,100030,1242],{"class":867},[324,100032,1189],{"class":916},[324,100034,93729],{"class":867},[324,100036,938],{"class":916},[324,100038,1242],{"class":867},[324,100040,944],{"class":916},[324,100042,1242],{"class":867},[324,100044,1082],{"class":916},[324,100046,1242],{"class":867},[324,100048,1208],{"class":916},[324,100050,874],{"class":867},[324,100052,100053],{"class":326,"line":502},[324,100054,100055],{"class":867},"aaaa.shape\n",[324,100057,100058],{"class":326,"line":508},[324,100059,100060],{"class":772},"#结果：（3，2，1，6）\n",[324,100062,100063],{"class":326,"line":514},[324,100064,100065],{"class":772},"#使用np.transpose()进行转置 变为(2,1,3,6)\n",[324,100067,100068,100071,100073,100075,100077,100079,100081,100083,100085],{"class":326,"line":2343},[324,100069,100070],{"class":867},"np.transpose(aaaa,(",[324,100072,1082],{"class":916},[324,100074,1242],{"class":867},[324,100076,944],{"class":916},[324,100078,1242],{"class":867},[324,100080,1056],{"class":916},[324,100082,1242],{"class":867},[324,100084,938],{"class":916},[324,100086,100013],{"class":867},[324,100088,100089],{"class":326,"line":2348},[324,100090,100091],{"class":772},"#结果：(2,1,3,6)\n",[775,100093,100094],{},"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":50,"searchDepth":203,"depth":203,"links":100096},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch7",{"title":99821,"description":791},"wiki\u002F2025-08-14-numpy\u002Fch7-数组转置","b8e_wXc-54BtMmzlK4i2-r72ortHX_8oUIL58EtJh-E",{"id":100103,"title":100104,"body":100105,"description":791,"extension":792,"meta":100839,"navigation":487,"path":100840,"seo":100841,"stem":100842,"__hash__":100843},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch8-数组分割.md","8.数组分割",{"type":7,"value":100106,"toc":100837},[100107,100110,100113,100116,100119,100122,100125,100128,100131,100240,100243,100246,100834],[10,100108,100104],{"id":100109},"_8数组分割",[19,100111,100112],{},"split分割",[19,100114,100115],{},"numpy.split(ary,indics_or_sections,axis)",[19,100117,100118],{},"解释：",[19,100120,100121],{},"ary:被分割的数组",[19,100123,100124],{},"indics_or_sections:如果是一个整数，就用该数平均切分，如果是一个数组，为沿轴切分的位置(左开右闭)",[19,100126,100127],{},"axis:沿着哪个维度进行切向，默认为0，横向切分。为1时，纵向切分",[19,100129,100130],{},"①一维数组的分割",[316,100132,100134],{"className":31100,"code":100133,"language":31102,"meta":50,"style":50},"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",[269,100135,100136,100152,100157,100166,100170,100175,100183,100187,100192,100197,100210,100214,100219,100231,100235],{"__ignoreMap":50},[324,100137,100138,100140,100142,100144,100146,100148,100150],{"class":326,"line":327},[324,100139,25],{"class":867},[324,100141,913],{"class":863},[324,100143,93724],{"class":867},[324,100145,1082],{"class":916},[324,100147,1242],{"class":867},[324,100149,1284],{"class":916},[324,100151,874],{"class":867},[324,100153,100154],{"class":326,"line":203},[324,100155,100156],{"class":772},"#如果传入整数，必须能够平分，否则会报错\n",[324,100158,100159,100162,100164],{"class":326,"line":338},[324,100160,100161],{"class":867},"np.split(a,",[324,100163,944],{"class":916},[324,100165,874],{"class":867},[324,100167,100168],{"class":326,"line":344},[324,100169,94286],{"class":772},[324,100171,100172],{"class":326,"line":484},[324,100173,100174],{"class":772},"#[array([1, 2, 3, 4]), array([5, 6, 7, 8])]\n",[324,100176,100177,100179,100181],{"class":326,"line":491},[324,100178,100161],{"class":867},[324,100180,1157],{"class":916},[324,100182,874],{"class":867},[324,100184,100185],{"class":326,"line":496},[324,100186,94286],{"class":772},[324,100188,100189],{"class":326,"line":502},[324,100190,100191],{"class":772},"#[array([1, 2]), array([3, 4]), array([5, 6]), array([7, 8])]\n",[324,100193,100194],{"class":326,"line":508},[324,100195,100196],{"class":772},"#传入数组\n",[324,100198,100199,100202,100204,100206,100208],{"class":326,"line":514},[324,100200,100201],{"class":867},"np.split(a,[",[324,100203,938],{"class":916},[324,100205,1242],{"class":867},[324,100207,1183],{"class":916},[324,100209,5386],{"class":867},[324,100211,100212],{"class":326,"line":2343},[324,100213,94286],{"class":772},[324,100215,100216],{"class":326,"line":2348},[324,100217,100218],{"class":772},"#[array([1, 2, 3]), array([4, 5]), array([6, 7, 8])]\n",[324,100220,100221,100223,100225,100227,100229],{"class":326,"line":2354},[324,100222,100201],{"class":867},[324,100224,1183],{"class":916},[324,100226,1242],{"class":867},[324,100228,1233],{"class":916},[324,100230,5386],{"class":867},[324,100232,100233],{"class":326,"line":2359},[324,100234,94286],{"class":772},[324,100236,100237],{"class":326,"line":2373},[324,100238,100239],{"class":772},"#[array([1, 2, 3, 4, 5]), array([6, 7]), array([8])]\n",[19,100241,100242],{},"②二维数组的分割",[19,100244,100245],{},"使用split()",[316,100247,100249],{"className":31100,"code":100248,"language":31102,"meta":50,"style":50},"#二维数组分割\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",[269,100250,100251,100256,100280,100285,100294,100298,100302,100307,100312,100317,100322,100327,100332,100337,100341,100354,100358,100362,100366,100370,100374,100379,100384,100389,100393,100398,100414,100418,100422,100427,100432,100437,100442,100447,100452,100457,100462,100467,100472,100477,100482,100487,100492,100497,100502,100507,100512,100516,100520,100540,100544,100548,100553,100558,100563,100568,100573,100578,100583,100588,100593,100598,100603,100608,100613,100618,100623,100628,100633,100638,100642,100647,100656,100660,100664,100668,100672,100676,100680,100684,100688,100692,100701,100705,100709,100713,100717,100721,100725,100729,100733,100737,100741,100745,100749,100753,100757,100761,100765,100769,100773,100777,100781,100785,100798,100802,100806,100810,100814,100818,100822,100826,100830],{"__ignoreMap":50},[324,100252,100253],{"class":326,"line":327},[324,100254,100255],{"class":772},"#二维数组分割\n",[324,100257,100258,100260,100262,100264,100266,100268,100270,100272,100274,100276,100278],{"class":326,"line":203},[324,100259,94028],{"class":867},[324,100261,913],{"class":863},[324,100263,93724],{"class":867},[324,100265,1082],{"class":916},[324,100267,1242],{"class":867},[324,100269,1189],{"class":916},[324,100271,93729],{"class":867},[324,100273,1208],{"class":916},[324,100275,1242],{"class":867},[324,100277,1208],{"class":916},[324,100279,874],{"class":867},[324,100281,100282],{"class":326,"line":338},[324,100283,100284],{"class":772},"#默认axis=0  传入整数平均分,按行来的\n",[324,100286,100287,100290,100292],{"class":326,"line":344},[324,100288,100289],{"class":867},"np.split(aa,",[324,100291,938],{"class":916},[324,100293,874],{"class":867},[324,100295,100296],{"class":326,"line":484},[324,100297,96486],{"class":772},[324,100299,100300],{"class":326,"line":491},[324,100301,94650],{"class":738},[324,100303,100304],{"class":326,"line":496},[324,100305,100306],{"class":738},"[array([[ 1,  2,  3,  4,  5,  6],\n",[324,100308,100309],{"class":326,"line":502},[324,100310,100311],{"class":738},"        [ 7,  8,  9, 10, 11, 12]]),\n",[324,100313,100314],{"class":326,"line":508},[324,100315,100316],{"class":738}," array([[13, 14, 15, 16, 17, 18],\n",[324,100318,100319],{"class":326,"line":514},[324,100320,100321],{"class":738},"        [19, 20, 21, 22, 23, 24]]),\n",[324,100323,100324],{"class":326,"line":2343},[324,100325,100326],{"class":738}," array([[25, 26, 27, 28, 29, 30],\n",[324,100328,100329],{"class":326,"line":2348},[324,100330,100331],{"class":738},"        [31, 32, 33, 34, 35, 36]])]\n",[324,100333,100334],{"class":326,"line":2354},[324,100335,100336],{"class":738}," '''\n",[324,100338,100339],{"class":326,"line":2359},[324,100340,100196],{"class":772},[324,100342,100343,100346,100348,100350,100352],{"class":326,"line":2373},[324,100344,100345],{"class":867},"np.split(aa,[",[324,100347,944],{"class":916},[324,100349,1242],{"class":867},[324,100351,1183],{"class":916},[324,100353,5386],{"class":867},[324,100355,100356],{"class":326,"line":2378},[324,100357,96486],{"class":772},[324,100359,100360],{"class":326,"line":2384},[324,100361,94650],{"class":738},[324,100363,100364],{"class":326,"line":2405},[324,100365,100306],{"class":738},[324,100367,100368],{"class":326,"line":2410},[324,100369,100311],{"class":738},[324,100371,100372],{"class":326,"line":2424},[324,100373,100316],{"class":738},[324,100375,100376],{"class":326,"line":2429},[324,100377,100378],{"class":738},"        [19, 20, 21, 22, 23, 24],\n",[324,100380,100381],{"class":326,"line":2458},[324,100382,100383],{"class":738},"        [25, 26, 27, 28, 29, 30]]),\n",[324,100385,100386],{"class":326,"line":2463},[324,100387,100388],{"class":738}," array([[31, 32, 33, 34, 35, 36]])]\n",[324,100390,100391],{"class":326,"line":2480},[324,100392,94650],{"class":738},[324,100394,100395],{"class":326,"line":2485},[324,100396,100397],{"class":772},"#axis=1 按照列来分\n",[324,100399,100400,100402,100404,100406,100408,100410,100412],{"class":326,"line":2490},[324,100401,100289],{"class":867},[324,100403,938],{"class":916},[324,100405,1242],{"class":867},[324,100407,48236],{"class":5945},[324,100409,913],{"class":863},[324,100411,1082],{"class":916},[324,100413,874],{"class":867},[324,100415,100416],{"class":326,"line":2495},[324,100417,96486],{"class":772},[324,100419,100420],{"class":326,"line":2509},[324,100421,94650],{"class":738},[324,100423,100424],{"class":326,"line":2514},[324,100425,100426],{"class":738},"[array([[ 1,  2],\n",[324,100428,100429],{"class":326,"line":3306},[324,100430,100431],{"class":738},"        [ 7,  8],\n",[324,100433,100434],{"class":326,"line":3320},[324,100435,100436],{"class":738},"        [13, 14],\n",[324,100438,100439],{"class":326,"line":3328},[324,100440,100441],{"class":738},"        [19, 20],\n",[324,100443,100444],{"class":326,"line":3333},[324,100445,100446],{"class":738},"        [25, 26],\n",[324,100448,100449],{"class":326,"line":3339},[324,100450,100451],{"class":738},"        [31, 32]]),\n",[324,100453,100454],{"class":326,"line":3345},[324,100455,100456],{"class":738}," array([[ 3,  4],\n",[324,100458,100459],{"class":326,"line":3350},[324,100460,100461],{"class":738},"        [ 9, 10],\n",[324,100463,100464],{"class":326,"line":8677},[324,100465,100466],{"class":738},"        [15, 16],\n",[324,100468,100469],{"class":326,"line":8701},[324,100470,100471],{"class":738},"        [21, 22],\n",[324,100473,100474],{"class":326,"line":8706},[324,100475,100476],{"class":738},"        [27, 28],\n",[324,100478,100479],{"class":326,"line":8712},[324,100480,100481],{"class":738},"        [33, 34]]),\n",[324,100483,100484],{"class":326,"line":8739},[324,100485,100486],{"class":738}," array([[ 5,  6],\n",[324,100488,100489],{"class":326,"line":8744},[324,100490,100491],{"class":738},"        [11, 12],\n",[324,100493,100494],{"class":326,"line":8750},[324,100495,100496],{"class":738},"        [17, 18],\n",[324,100498,100499],{"class":326,"line":8762},[324,100500,100501],{"class":738},"        [23, 24],\n",[324,100503,100504],{"class":326,"line":8774},[324,100505,100506],{"class":738},"        [29, 30],\n",[324,100508,100509],{"class":326,"line":8786},[324,100510,100511],{"class":738},"        [35, 36]])]\n",[324,100513,100514],{"class":326,"line":10445},[324,100515,100336],{"class":738},[324,100517,100518],{"class":326,"line":10470},[324,100519,100196],{"class":772},[324,100521,100522,100524,100526,100528,100530,100532,100534,100536,100538],{"class":326,"line":10493},[324,100523,100345],{"class":867},[324,100525,1082],{"class":916},[324,100527,1242],{"class":867},[324,100529,944],{"class":916},[324,100531,42331],{"class":867},[324,100533,48236],{"class":5945},[324,100535,913],{"class":863},[324,100537,1082],{"class":916},[324,100539,874],{"class":867},[324,100541,100542],{"class":326,"line":10517},[324,100543,94286],{"class":772},[324,100545,100546],{"class":326,"line":10522},[324,100547,94650],{"class":738},[324,100549,100550],{"class":326,"line":10527},[324,100551,100552],{"class":738},"[array([[ 1],\n",[324,100554,100555],{"class":326,"line":10532},[324,100556,100557],{"class":738},"        [ 7],\n",[324,100559,100560],{"class":326,"line":10541},[324,100561,100562],{"class":738},"        [13],\n",[324,100564,100565],{"class":326,"line":10546},[324,100566,100567],{"class":738},"        [19],\n",[324,100569,100570],{"class":326,"line":10552},[324,100571,100572],{"class":738},"        [25],\n",[324,100574,100575],{"class":326,"line":10573},[324,100576,100577],{"class":738},"        [31]]),\n",[324,100579,100580],{"class":326,"line":10579},[324,100581,100582],{"class":738}," array([[ 2],\n",[324,100584,100585],{"class":326,"line":10593},[324,100586,100587],{"class":738},"        [ 8],\n",[324,100589,100590],{"class":326,"line":10599},[324,100591,100592],{"class":738},"        [14],\n",[324,100594,100595],{"class":326,"line":10626},[324,100596,100597],{"class":738},"        [20],\n",[324,100599,100600],{"class":326,"line":10635},[324,100601,100602],{"class":738},"        [26],\n",[324,100604,100605],{"class":326,"line":10641},[324,100606,100607],{"class":738},"        [32]]),\n",[324,100609,100610],{"class":326,"line":10649},[324,100611,100612],{"class":738}," array([[ 3,  4,  5,  6],\n",[324,100614,100615],{"class":326,"line":10654},[324,100616,100617],{"class":738},"        [ 9, 10, 11, 12],\n",[324,100619,100620],{"class":326,"line":17333},[324,100621,100622],{"class":738},"        [15, 16, 17, 18],\n",[324,100624,100625],{"class":326,"line":17339},[324,100626,100627],{"class":738},"        [21, 22, 23, 24],\n",[324,100629,100630],{"class":326,"line":17362},[324,100631,100632],{"class":738},"        [27, 28, 29, 30],\n",[324,100634,100635],{"class":326,"line":17368},[324,100636,100637],{"class":738},"        [33, 34, 35, 36]])]\n",[324,100639,100640],{"class":326,"line":17391},[324,100641,94650],{"class":738},[324,100643,100644],{"class":326,"line":17405},[324,100645,100646],{"class":772},"#在处理二维数组时也可以直接用vsplit()和hsplit()函数\n",[324,100648,100649,100652,100654],{"class":326,"line":17425},[324,100650,100651],{"class":867},"np.vsplit(aa,",[324,100653,938],{"class":916},[324,100655,874],{"class":867},[324,100657,100658],{"class":326,"line":17431},[324,100659,94286],{"class":772},[324,100661,100662],{"class":326,"line":17442},[324,100663,94650],{"class":738},[324,100665,100666],{"class":326,"line":17465},[324,100667,100306],{"class":738},[324,100669,100670],{"class":326,"line":17487},[324,100671,100311],{"class":738},[324,100673,100674],{"class":326,"line":17492},[324,100675,100316],{"class":738},[324,100677,100678],{"class":326,"line":17498},[324,100679,100321],{"class":738},[324,100681,100682],{"class":326,"line":17512},[324,100683,100326],{"class":738},[324,100685,100686],{"class":326,"line":17525},[324,100687,100331],{"class":738},[324,100689,100690],{"class":326,"line":17530},[324,100691,94650],{"class":738},[324,100693,100694,100697,100699],{"class":326,"line":17544},[324,100695,100696],{"class":867},"np.hsplit(aa,",[324,100698,938],{"class":916},[324,100700,874],{"class":867},[324,100702,100703],{"class":326,"line":17549},[324,100704,94286],{"class":772},[324,100706,100707],{"class":326,"line":17555},[324,100708,94650],{"class":738},[324,100710,100711],{"class":326,"line":17560},[324,100712,100426],{"class":738},[324,100714,100715],{"class":326,"line":17574},[324,100716,100431],{"class":738},[324,100718,100719],{"class":326,"line":17579},[324,100720,100436],{"class":738},[324,100722,100723],{"class":326,"line":17584},[324,100724,100441],{"class":738},[324,100726,100727],{"class":326,"line":17598},[324,100728,100446],{"class":738},[324,100730,100731],{"class":326,"line":17610},[324,100732,100451],{"class":738},[324,100734,100735],{"class":326,"line":17615},[324,100736,100456],{"class":738},[324,100738,100739],{"class":326,"line":17628},[324,100740,100461],{"class":738},[324,100742,100743],{"class":326,"line":17633},[324,100744,100466],{"class":738},[324,100746,100747],{"class":326,"line":17638},[324,100748,100471],{"class":738},[324,100750,100751],{"class":326,"line":17643},[324,100752,100476],{"class":738},[324,100754,100755],{"class":326,"line":17656},[324,100756,100481],{"class":738},[324,100758,100759],{"class":326,"line":17661},[324,100760,100486],{"class":738},[324,100762,100763],{"class":326,"line":33355},[324,100764,100491],{"class":738},[324,100766,100767],{"class":326,"line":33361},[324,100768,100496],{"class":738},[324,100770,100771],{"class":326,"line":33367},[324,100772,100501],{"class":738},[324,100774,100775],{"class":326,"line":33373},[324,100776,100506],{"class":738},[324,100778,100779],{"class":326,"line":33379},[324,100780,100511],{"class":738},[324,100782,100783],{"class":326,"line":33390},[324,100784,94650],{"class":738},[324,100786,100787,100790,100792,100794,100796],{"class":326,"line":33396},[324,100788,100789],{"class":867},"np.vsplit(aa,[",[324,100791,944],{"class":916},[324,100793,1242],{"class":867},[324,100795,1183],{"class":916},[324,100797,5386],{"class":867},[324,100799,100800],{"class":326,"line":33416},[324,100801,94286],{"class":772},[324,100803,100804],{"class":326,"line":33422},[324,100805,94650],{"class":738},[324,100807,100808],{"class":326,"line":33433},[324,100809,100306],{"class":738},[324,100811,100812],{"class":326,"line":33439},[324,100813,100311],{"class":738},[324,100815,100816],{"class":326,"line":33445},[324,100817,100316],{"class":738},[324,100819,100820],{"class":326,"line":33451},[324,100821,100378],{"class":738},[324,100823,100824],{"class":326,"line":33457},[324,100825,100383],{"class":738},[324,100827,100828],{"class":326,"line":33463},[324,100829,100388],{"class":738},[324,100831,100832],{"class":326,"line":33469},[324,100833,100336],{"class":738},[775,100835,100836],{},"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":50,"searchDepth":203,"depth":203,"links":100838},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch8",{"title":100104,"description":791},"wiki\u002F2025-08-14-numpy\u002Fch8-数组分割","EtL2Bly4jiNepAsv1SVPdwecsVcwy45QHq2yubCBEUA",{"id":100845,"title":100846,"body":100847,"description":791,"extension":792,"meta":101341,"navigation":487,"path":101342,"seo":101343,"stem":101344,"__hash__":101345},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch9-数学函数.md","9.数学函数",{"type":7,"value":100848,"toc":101332},[100849,100852,100855,100880,100884,100943,100995,100999,101001,101037,101091,101093,101131,101202,101206,101211,101215,101218,101251,101254,101258,101261,101264,101267,101270,101275,101279,101282,101285,101288,101291,101296,101300,101305,101308,101329],[10,100850,100846],{"id":100851},"_9数学函数",[19,100853,100854],{},"补充回顾：python的列表推导式",[316,100856,100858],{"className":31100,"code":100857,"language":31102,"meta":50,"style":50},"[1\u002Fi for i in a]\n",[269,100859,100860],{"__ignoreMap":50},[324,100861,100862,100864,100866,100868,100871,100873,100875,100877],{"class":326,"line":327},[324,100863,1754],{"class":867},[324,100865,1082],{"class":916},[324,100867,1448],{"class":863},[324,100869,100870],{"class":867},"i ",[324,100872,3754],{"class":863},[324,100874,10167],{"class":867},[324,100876,26767],{"class":863},[324,100878,100879],{"class":867}," a]\n",[14,100881,100883],{"id":100882},"_91-求倒数","9.1 求倒数",[316,100885,100887],{"className":31100,"code":100886,"language":31102,"meta":50,"style":50},"#数组求倒数\na=[1,2,3,4,5]\nb=np.array(a)#将列表转换为数组\n1\u002Fb\n",[269,100888,100889,100894,100922,100934],{"__ignoreMap":50},[324,100890,100891],{"class":326,"line":327},[324,100892,100893],{"class":772},"#数组求倒数\n",[324,100895,100896,100898,100900,100902,100904,100906,100908,100910,100912,100914,100916,100918,100920],{"class":326,"line":203},[324,100897,25],{"class":867},[324,100899,913],{"class":863},[324,100901,1754],{"class":867},[324,100903,1082],{"class":916},[324,100905,1242],{"class":867},[324,100907,944],{"class":916},[324,100909,1242],{"class":867},[324,100911,938],{"class":916},[324,100913,1242],{"class":867},[324,100915,1157],{"class":916},[324,100917,1242],{"class":867},[324,100919,1183],{"class":916},[324,100921,33968],{"class":867},[324,100923,100924,100926,100928,100931],{"class":326,"line":338},[324,100925,1127],{"class":867},[324,100927,913],{"class":863},[324,100929,100930],{"class":867},"np.array(a)",[324,100932,100933],{"class":772},"#将列表转换为数组\n",[324,100935,100936,100938,100940],{"class":326,"line":344},[324,100937,1082],{"class":916},[324,100939,1448],{"class":863},[324,100941,100942],{"class":867},"b\n",[316,100944,100946],{"className":31100,"code":100945,"language":31102,"meta":50,"style":50},"a=[1,2,3,4,5]\nb=np.array(a)\n#调用numpy中的函数reciprocal()\nnp.reciprocal(b)\n",[269,100947,100948,100976,100985,100990],{"__ignoreMap":50},[324,100949,100950,100952,100954,100956,100958,100960,100962,100964,100966,100968,100970,100972,100974],{"class":326,"line":327},[324,100951,25],{"class":867},[324,100953,913],{"class":863},[324,100955,1754],{"class":867},[324,100957,1082],{"class":916},[324,100959,1242],{"class":867},[324,100961,944],{"class":916},[324,100963,1242],{"class":867},[324,100965,938],{"class":916},[324,100967,1242],{"class":867},[324,100969,1157],{"class":916},[324,100971,1242],{"class":867},[324,100973,1183],{"class":916},[324,100975,33968],{"class":867},[324,100977,100978,100980,100982],{"class":326,"line":203},[324,100979,1127],{"class":867},[324,100981,913],{"class":863},[324,100983,100984],{"class":867},"np.array(a)\n",[324,100986,100987],{"class":326,"line":338},[324,100988,100989],{"class":772},"#调用numpy中的函数reciprocal()\n",[324,100991,100992],{"class":326,"line":344},[324,100993,100994],{"class":867},"np.reciprocal(b)\n",[14,100996,100998],{"id":100997},"_92-求平方","9.2 求平方",[19,101000,95252],{},[316,101002,101004],{"className":31100,"code":101003,"language":31102,"meta":50,"style":50},"#square()，求平方\n#一维数组\na=np.arange(1,10)\nnp.square(a)\n",[269,101005,101006,101011,101016,101032],{"__ignoreMap":50},[324,101007,101008],{"class":326,"line":327},[324,101009,101010],{"class":772},"#square()，求平方\n",[324,101012,101013],{"class":326,"line":203},[324,101014,101015],{"class":772},"#一维数组\n",[324,101017,101018,101020,101022,101024,101026,101028,101030],{"class":326,"line":338},[324,101019,25],{"class":867},[324,101021,913],{"class":863},[324,101023,93724],{"class":867},[324,101025,1082],{"class":916},[324,101027,1242],{"class":867},[324,101029,1310],{"class":916},[324,101031,874],{"class":867},[324,101033,101034],{"class":326,"line":344},[324,101035,101036],{"class":867},"np.square(a)\n",[316,101038,101040],{"className":31100,"code":101039,"language":31102,"meta":50,"style":50},"#或者通过循环遍历的形式来计算\n#这是一个列表\n[i*i for i in a]#这个求完之后在数列当中\nnp.array([i*i for i in a])\n",[269,101041,101042,101047,101052,101073],{"__ignoreMap":50},[324,101043,101044],{"class":326,"line":327},[324,101045,101046],{"class":772},"#或者通过循环遍历的形式来计算\n",[324,101048,101049],{"class":326,"line":203},[324,101050,101051],{"class":772},"#这是一个列表\n",[324,101053,101054,101057,101059,101061,101063,101065,101067,101070],{"class":326,"line":338},[324,101055,101056],{"class":867},"[i",[324,101058,1319],{"class":863},[324,101060,100870],{"class":867},[324,101062,3754],{"class":863},[324,101064,10167],{"class":867},[324,101066,26767],{"class":863},[324,101068,101069],{"class":867}," a]",[324,101071,101072],{"class":772},"#这个求完之后在数列当中\n",[324,101074,101075,101078,101080,101082,101084,101086,101088],{"class":326,"line":344},[324,101076,101077],{"class":867},"np.array([i",[324,101079,1319],{"class":863},[324,101081,100870],{"class":867},[324,101083,3754],{"class":863},[324,101085,10167],{"class":867},[324,101087,26767],{"class":863},[324,101089,101090],{"class":867}," a])\n",[19,101092,94013],{},[316,101094,101096],{"className":31100,"code":101095,"language":31102,"meta":50,"style":50},"#二维数组\naa=np.arange(1,13).reshape(4,3)\nnp.square(aa)\n",[269,101097,101098,101102,101126],{"__ignoreMap":50},[324,101099,101100],{"class":326,"line":327},[324,101101,94023],{"class":772},[324,101103,101104,101106,101108,101110,101112,101114,101116,101118,101120,101122,101124],{"class":326,"line":203},[324,101105,94028],{"class":867},[324,101107,913],{"class":863},[324,101109,93724],{"class":867},[324,101111,1082],{"class":916},[324,101113,1242],{"class":867},[324,101115,1387],{"class":916},[324,101117,93729],{"class":867},[324,101119,1157],{"class":916},[324,101121,1242],{"class":867},[324,101123,938],{"class":916},[324,101125,874],{"class":867},[324,101127,101128],{"class":326,"line":338},[324,101129,101130],{"class":867},"np.square(aa)\n",[316,101132,101134],{"className":31100,"code":101133,"language":31102,"meta":50,"style":50},"#传统的方式\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",[269,101135,101136,101141,101150,101166,101182,101197],{"__ignoreMap":50},[324,101137,101138],{"class":326,"line":327},[324,101139,101140],{"class":772},"#传统的方式\n",[324,101142,101143,101145,101147],{"class":326,"line":203},[324,101144,98909],{"class":867},[324,101146,913],{"class":863},[324,101148,101149],{"class":867},"np.empty_like(aa)\n",[324,101151,101152,101154,101156,101158,101160,101162,101164],{"class":326,"line":338},[324,101153,3754],{"class":863},[324,101155,10167],{"class":867},[324,101157,26767],{"class":863},[324,101159,33165],{"class":916},[324,101161,868],{"class":867},[324,101163,1157],{"class":916},[324,101165,31508],{"class":867},[324,101167,101168,101170,101172,101174,101176,101178,101180],{"class":326,"line":344},[324,101169,3930],{"class":863},[324,101171,10229],{"class":867},[324,101173,26767],{"class":863},[324,101175,33165],{"class":916},[324,101177,868],{"class":867},[324,101179,938],{"class":916},[324,101181,31508],{"class":867},[324,101183,101184,101187,101189,101192,101194],{"class":326,"line":484},[324,101185,101186],{"class":867},"        bb[i,j]",[324,101188,913],{"class":863},[324,101190,101191],{"class":867},"aa[i,j]",[324,101193,1319],{"class":863},[324,101195,101196],{"class":867},"aa[i,j]\n",[324,101198,101199],{"class":326,"line":491},[324,101200,101201],{"class":867},"bb\n",[14,101203,101205],{"id":101204},"_93-求各元素的符号","9.3 求各元素的符号",[19,101207,101208],{},[48,101209],{"alt":50,"src":101210},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-028.png",[14,101212,101214],{"id":101213},"_94-modf函数","9.4 modf函数",[19,101216,101217],{},"计算各元素的小数部分和整数部分以两个独立的数组返回",[316,101219,101221],{"className":31100,"code":101220,"language":31102,"meta":50,"style":50},"a=np.arange(-10,10,0.3)\nnp.modf(a)\n",[269,101222,101223,101246],{"__ignoreMap":50},[324,101224,101225,101227,101229,101231,101233,101235,101237,101239,101241,101244],{"class":326,"line":327},[324,101226,25],{"class":867},[324,101228,913],{"class":863},[324,101230,93724],{"class":867},[324,101232,1396],{"class":863},[324,101234,1310],{"class":916},[324,101236,1242],{"class":867},[324,101238,1310],{"class":916},[324,101240,1242],{"class":867},[324,101242,101243],{"class":916},"0.3",[324,101245,874],{"class":867},[324,101247,101248],{"class":326,"line":203},[324,101249,101250],{"class":867},"np.modf(a)\n",[19,101252,101253],{},"总结：就是得到两个数组，一个是由小数部分组成，另一个数组是由整数部分组成",[14,101255,101257],{"id":101256},"_95-向上取整向下取整四舍五入","9.5 向上取整、向下取整、四舍五入",[19,101259,101260],{},"np.cell()",[19,101262,101263],{},"np.floor()",[19,101265,101266],{},"np.rint()",[19,101268,101269],{},"对各元素分别向上取整、向下取整、四舍五入",[19,101271,101272],{},[48,101273],{"alt":50,"src":101274},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-029.png",[14,101276,101278],{"id":101277},"_96-around函数","9.6 around()函数",[19,101280,101281],{},"around()函数也可以实现对数的小数位数进行操作",[19,101283,101284],{},"其中的参数：",[19,101286,101287],{},"1.要传的数组",[19,101289,101290],{},"2.decimals:舍入的小数位数。默认值为0。如果为负，整数将四舍五入到小数点左侧的位置",[19,101292,101293],{},[48,101294],{"alt":50,"src":101295},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-030.png",[14,101297,101299],{"id":101298},"_97-三角函数","9.7 三角函数",[19,101301,101302],{},[48,101303],{"alt":50,"src":101304},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-031.png",[19,101306,101307],{},"引入图像模块非常重要",[316,101309,101311],{"className":31100,"code":101310,"language":31102,"meta":50,"style":50},"from matplotlib import pyplot as plt\n",[269,101312,101313],{"__ignoreMap":50},[324,101314,101315,101317,101320,101322,101325,101327],{"class":326,"line":327},[324,101316,31459],{"class":863},[324,101318,101319],{"class":867}," matplotlib ",[324,101321,31114],{"class":863},[324,101323,101324],{"class":867}," pyplot ",[324,101326,32105],{"class":863},[324,101328,32159],{"class":867},[775,101330,101331],{},"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":50,"searchDepth":203,"depth":203,"links":101333},[101334,101335,101336,101337,101338,101339,101340],{"id":100882,"depth":203,"text":100883},{"id":100997,"depth":203,"text":100998},{"id":101204,"depth":203,"text":101205},{"id":101213,"depth":203,"text":101214},{"id":101256,"depth":203,"text":101257},{"id":101277,"depth":203,"text":101278},{"id":101298,"depth":203,"text":101299},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch9",{"title":100846,"description":791},"wiki\u002F2025-08-14-numpy\u002Fch9-数学函数","1vxUPQoUv_FZuP3od2FOv2EdjAo9vkX9v0c_KhgwghE",{"id":101347,"title":101348,"body":101349,"description":791,"extension":792,"meta":101353,"navigation":487,"path":101354,"seo":101355,"stem":101356,"__hash__":101357},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Findex.md","numpy",{"type":7,"value":101350,"toc":101351},[],{"title":50,"searchDepth":203,"depth":203,"links":101352},[],{"category":51142},"\u002Fwiki\u002F2025-08-14-numpy",{"title":101348,"description":791},"wiki\u002F2025-08-14-numpy\u002Findex","LNFBKvmcgRD1D7XQFRHkBXoHVybQyN9jvfse3YyadCE",{"id":101359,"title":101360,"body":101361,"description":50,"extension":792,"meta":103368,"navigation":487,"path":103369,"seo":103370,"stem":103371,"__hash__":103372},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序.md","1.环境安装与第一个 MuJoCo 程序",{"type":7,"value":101362,"toc":103344},[101363,101366,101370,101373,101376,101382,101385,101408,101411,101445,101448,101489,101493,101496,101589,101592,101636,101639,101656,101659,101673,101676,101679,101724,101727,101763,101767,101770,101776,101781,101801,101805,101808,101874,101877,101895,101899,101902,101931,101941,101947,101951,101954,101960,101971,101975,101978,102008,102011,102291,102294,102297,102308,102311,102314,102336,102343,102346,102364,102367,102370,102384,102392,102395,102421,102427,102430,102433,102443,102455,102475,102484,102504,102514,102538,102551,102565,102570,102611,102628,102653,102665,102685,102691,102736,102755,102772,102785,102801,102808,102820,102829,102864,102885,102910,102923,102947,102962,102987,102990,103011,103020,103023,103034,103038,103041,103047,103059,103066,103070,103073,103085,103088,103102,103105,103115,103125,103128,103168,103171,103175,103181,103184,103198,103202,103205,103238,103242,103245,103268,103276,103279,103285,103291,103294,103297,103325,103329,103332,103338,103341],[10,101364,101360],{"id":101365},"_1环境安装与第一个-mujoco-程序",[14,101367,101369],{"id":101368},"_1目标说明","1.目标说明",[19,101371,101372],{},"本章完成 MuJoCo 官方 Python bindings 的安装，并运行第一个最小仿真程序。这个程序只做一件事：创建一个红色小方块，让它在重力作用下下落。",[19,101374,101375],{},"如果你是纯新手，本章最重要的目标不是记住所有安装命令，而是理解 MuJoCo 程序的最小闭环：",[316,101377,101380],{"className":101378,"code":101379,"language":5916,"meta":50},[5914],"写 XML\n→ 编译成 model\n→ 创建 data\n→ 调用 mj_step\n→ 读取仿真状态\n",[269,101381,101379],{"__ignoreMap":50},[19,101383,101384],{},"需要掌握:",[192,101386,101387,101390,101393,101398,101403],{},[195,101388,101389],{},"Fedora 44 下 MuJoCo 的系统依赖",[195,101391,101392],{},"Python 虚拟环境创建",[195,101394,101395],{},[269,101396,101397],{},"mujoco.MjModel",[195,101399,101400],{},[269,101401,101402],{},"mujoco.MjData",[195,101404,101405],{},[269,101406,101407],{},"mujoco.mj_step(model, data)",[19,101409,101410],{},"MuJoCo 中最重要的两个对象:",[1003,101412,101413,101423],{},[1006,101414,101415],{},[1009,101416,101417,101420],{},[1012,101418,101419],{"align":24463},"对象",[1012,101421,101422],{"align":24463},"含义",[1049,101424,101425,101435],{},[1009,101426,101427,101432],{},[1054,101428,101429],{"align":24463},[269,101430,101431],{},"MjModel",[1054,101433,101434],{"align":24463},"模型结构，来自 XML，基本不随时间变化",[1009,101436,101437,101442],{},[1054,101438,101439],{"align":24463},[269,101440,101441],{},"MjData",[1054,101443,101444],{"align":24463},"仿真状态，包含位置、速度、力、时间等，会随仿真推进变化",[19,101446,101447],{},"可以先用一个类比理解：",[1003,101449,101450,101460],{},[1006,101451,101452],{},[1009,101453,101454,101457],{},[1012,101455,101456],{"align":24463},"类比",[1012,101458,101459],{"align":24463},"MuJoCo 对象",[1049,101461,101462,101471,101480],{},[1009,101463,101464,101467],{},[1054,101465,101466],{"align":24463},"游戏地图和角色配置",[1054,101468,101469],{"align":24463},[269,101470,101431],{},[1009,101472,101473,101476],{},[1054,101474,101475],{"align":24463},"游戏运行到当前帧的状态",[1054,101477,101478],{"align":24463},[269,101479,101441],{},[1009,101481,101482,101485],{},[1054,101483,101484],{"align":24463},"前进一帧",[1054,101486,101487],{"align":24463},[269,101488,101407],{},[14,101490,101492],{"id":101491},"_2环境与依赖安装","2.环境与依赖安装",[19,101494,101495],{},"Fedora 44 系统依赖:",[316,101497,101499],{"className":24549,"code":101498,"language":24551,"meta":50,"style":50},"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",[269,101500,101501,101513,101526,101539,101549,101559,101578],{"__ignoreMap":50},[324,101502,101503,101505,101507,101509,101511],{"class":326,"line":327},[324,101504,735],{"class":734},[324,101506,27038],{"class":738},[324,101508,760],{"class":738},[324,101510,27123],{"class":916},[324,101512,25402],{"class":916},[324,101514,101515,101518,101521,101524],{"class":326,"line":203},[324,101516,101517],{"class":738},"  python3",[324,101519,101520],{"class":738}," python3-pip",[324,101522,101523],{"class":738}," python3-virtualenv",[324,101525,25402],{"class":916},[324,101527,101528,101531,101534,101537],{"class":326,"line":338},[324,101529,101530],{"class":738},"  mesa-libGL",[324,101532,101533],{"class":738}," mesa-libGLU",[324,101535,101536],{"class":738}," mesa-dri-drivers",[324,101538,25402],{"class":916},[324,101540,101541,101544,101547],{"class":326,"line":344},[324,101542,101543],{"class":738},"  libglvnd-glx",[324,101545,101546],{"class":738}," libglvnd-opengl",[324,101548,25402],{"class":916},[324,101550,101551,101554,101557],{"class":326,"line":484},[324,101552,101553],{"class":738},"  glfw",[324,101555,101556],{"class":738}," glfw-devel",[324,101558,25402],{"class":916},[324,101560,101561,101564,101567,101570,101573,101576],{"class":326,"line":491},[324,101562,101563],{"class":738},"  libX11",[324,101565,101566],{"class":738}," libXcursor",[324,101568,101569],{"class":738}," libXi",[324,101571,101572],{"class":738}," libXinerama",[324,101574,101575],{"class":738}," libXrandr",[324,101577,25402],{"class":916},[324,101579,101580,101583,101586],{"class":326,"line":496},[324,101581,101582],{"class":738},"  gcc",[324,101584,101585],{"class":738}," gcc-c++",[324,101587,101588],{"class":738}," make\n",[19,101590,101591],{},"创建 Python 环境:",[316,101593,101595],{"className":24549,"code":101594,"language":24551,"meta":50,"style":50},"python3 -m venv .venv\nsource .venv\u002Fbin\u002Factivate\npython -m pip install --upgrade pip\n",[269,101596,101597,101611,101619],{"__ignoreMap":50},[324,101598,101599,101602,101605,101608],{"class":326,"line":327},[324,101600,101601],{"class":734},"python3",[324,101603,101604],{"class":916}," -m",[324,101606,101607],{"class":738}," venv",[324,101609,101610],{"class":738}," .venv\n",[324,101612,101613,101616],{"class":326,"line":203},[324,101614,101615],{"class":916},"source",[324,101617,101618],{"class":738}," .venv\u002Fbin\u002Factivate\n",[324,101620,101621,101623,101625,101628,101630,101633],{"class":326,"line":338},[324,101622,31102],{"class":734},[324,101624,101604],{"class":916},[324,101626,101627],{"class":738}," pip",[324,101629,760],{"class":738},[324,101631,101632],{"class":916}," --upgrade",[324,101634,101635],{"class":738}," pip\n",[19,101637,101638],{},"pip 安装:",[316,101640,101642],{"className":24549,"code":101641,"language":24551,"meta":50,"style":50},"pip install \"mujoco>=2.3\" numpy\n",[269,101643,101644],{"__ignoreMap":50},[324,101645,101646,101648,101650,101653],{"class":326,"line":327},[324,101647,24558],{"class":734},[324,101649,760],{"class":738},[324,101651,101652],{"class":738}," \"mujoco>=2.3\"",[324,101654,101655],{"class":738}," numpy\n",[19,101657,101658],{},"安装完成后，先做最小检查：",[316,101660,101662],{"className":24549,"code":101661,"language":24551,"meta":50,"style":50},"python -c \"import mujoco; print(mujoco.__version__)\"\n",[269,101663,101664],{"__ignoreMap":50},[324,101665,101666,101668,101670],{"class":326,"line":327},[324,101667,31102],{"class":734},[324,101669,31080],{"class":916},[324,101671,101672],{"class":738}," \"import mujoco; print(mujoco.__version__)\"\n",[19,101674,101675],{},"只要能打印版本号，说明 Python 已经能找到 MuJoCo。",[19,101677,101678],{},"conda 安装:",[316,101680,101682],{"className":24549,"code":101681,"language":24551,"meta":50,"style":50},"conda create -n mujoco-study python=3.10 -y\nconda activate mujoco-study\npip install \"mujoco>=2.3\" numpy\n",[269,101683,101684,101704,101714],{"__ignoreMap":50},[324,101685,101686,101688,101690,101692,101695,101698,101701],{"class":326,"line":327},[324,101687,31052],{"class":734},[324,101689,29898],{"class":738},[324,101691,25839],{"class":916},[324,101693,101694],{"class":738}," mujoco-study",[324,101696,101697],{"class":738}," python=",[324,101699,101700],{"class":916},"3.10",[324,101702,101703],{"class":916}," -y\n",[324,101705,101706,101708,101711],{"class":326,"line":203},[324,101707,31052],{"class":734},[324,101709,101710],{"class":738}," activate",[324,101712,101713],{"class":738}," mujoco-study\n",[324,101715,101716,101718,101720,101722],{"class":326,"line":338},[324,101717,24558],{"class":734},[324,101719,760],{"class":738},[324,101721,101652],{"class":738},[324,101723,101655],{"class":738},[19,101725,101726],{},"版本冲突说明:",[192,101728,101729,101735,101744,101753],{},[195,101730,101731,101732,29107],{},"不要安装 ",[269,101733,101734],{},"mujoco-py",[195,101736,101737,101738,300,101740,101743],{},"如果旧项目里同时安装了 ",[269,101739,101734],{},[269,101741,101742],{},"mujoco","，建议新建干净虚拟环境。",[195,101745,101746,101749,101750,29107],{},[269,101747,101748],{},"mujoco>=2.3"," 官方 Python bindings 已包含 MuJoCo 原生库，不需要手动下载旧版 ",[269,101751,101752],{},"~\u002F.mujoco\u002Fmujoco210",[195,101754,101755,101756,83261,101759,101762],{},"离屏渲染可能涉及 OpenGL 后端，",[269,101757,101758],{},"MUJOCO_GL=egl",[269,101760,101761],{},"MUJOCO_GL=osmesa"," 在不同机器上可能存在版本差异。",[14,101764,101766],{"id":101765},"_3核心概念解释","3.核心概念解释",[19,101768,101769],{},"MuJoCo 的基本执行流程:",[316,101771,101774],{"className":101772,"code":101773,"language":5916,"meta":50},[5914],"XML 字符串\u002F文件\n→ MjModel\n→ MjData\n→ mj_step\n→ 读取 data 中的状态\n",[269,101775,101773],{"__ignoreMap":50},[19,101777,101778,101780],{},[269,101779,101431],{}," 存放模型定义，例如关节数量、几何体数量、actuator 数量、timestep、body 层级结构。",[19,101782,101783,101785,101786,1077,101789,1077,101792,1077,101795,1077,101798,29107],{},[269,101784,101441],{}," 存放仿真运行时状态，例如 ",[269,101787,101788],{},"data.time",[269,101790,101791],{},"data.qpos",[269,101793,101794],{},"data.qvel",[269,101796,101797],{},"data.ctrl",[269,101799,101800],{},"data.xpos",[35,101802,101804],{"id":101803},"xml-是什么","XML 是什么",[19,101806,101807],{},"MuJoCo 默认使用 MJCF XML 描述模型。你暂时不用完整学习 XML，只要知道它是一种带层级结构的文本格式：",[316,101809,101811],{"className":53789,"code":101810,"language":53791,"meta":50,"style":50},"\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",[269,101812,101813,101835,101866],{"__ignoreMap":50},[324,101814,101815,101817,101819,101821,101823,101825,101828,101830,101833],{"class":326,"line":327},[324,101816,1774],{"class":867},[324,101818,52522],{"class":52022},[324,101820,15649],{"class":734},[324,101822,913],{"class":867},[324,101824,54213],{"class":738},[324,101826,101827],{"class":734}," pos",[324,101829,913],{"class":867},[324,101831,101832],{"class":738},"\"0 0 1\"",[324,101834,52029],{"class":867},[324,101836,101837,101839,101842,101844,101846,101849,101851,101853,101855,101858,101860,101863],{"class":326,"line":203},[324,101838,52866],{"class":867},[324,101840,101841],{"class":52022},"geom",[324,101843,15649],{"class":734},[324,101845,913],{"class":867},[324,101847,101848],{"class":738},"\"box_geom\"",[324,101850,54546],{"class":734},[324,101852,913],{"class":867},[324,101854,54213],{"class":738},[324,101856,101857],{"class":734}," size",[324,101859,913],{"class":867},[324,101861,101862],{"class":738},"\"0.1 0.1 0.1\"",[324,101864,101865],{"class":867},"\u002F>\n",[324,101867,101868,101870,101872],{"class":326,"line":338},[324,101869,52507],{"class":867},[324,101871,52522],{"class":52022},[324,101873,52029],{"class":867},[19,101875,101876],{},"这段意思是：",[192,101878,101879,101885,101892],{},[195,101880,101881,101882,101884],{},"创建一个叫 ",[269,101883,54436],{}," 的刚体。",[195,101886,101887,101888,101891],{},"它初始放在 ",[269,101889,101890],{},"(0, 0, 1)","，也就是 z 轴高度为 1。",[195,101893,101894],{},"它里面有一个盒子形状的几何体。",[35,101896,101898],{"id":101897},"timestep-是什么","timestep 是什么",[19,101900,101901],{},"XML 里的：",[316,101903,101905],{"className":53789,"code":101904,"language":53791,"meta":50,"style":50},"\u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[269,101906,101907],{"__ignoreMap":50},[324,101908,101909,101911,101913,101916,101918,101921,101924,101926,101929],{"class":326,"line":327},[324,101910,1774],{"class":867},[324,101912,69888],{"class":52022},[324,101914,101915],{"class":734}," timestep",[324,101917,913],{"class":867},[324,101919,101920],{"class":738},"\"0.01\"",[324,101922,101923],{"class":734}," gravity",[324,101925,913],{"class":867},[324,101927,101928],{"class":738},"\"0 0 -9.81\"",[324,101930,101865],{"class":867},[19,101932,101933,101934,101937,101938,101940],{},"表示每调用一次 ",[269,101935,101936],{},"mj_step","，仿真时间前进 ",[269,101939,39708],{}," 秒。循环 100 次，大约就是 1 秒：",[316,101942,101945],{"className":101943,"code":101944,"language":5916,"meta":50},[5914],"100 steps * 0.01 second\u002Fstep = 1.0 second\n",[269,101946,101944],{"__ignoreMap":50},[35,101948,101950],{"id":101949},"为什么-freejoint-的-qpos-是-7-维","为什么 freejoint 的 qpos 是 7 维",[19,101952,101953],{},"自由物体在三维空间里可以平移和旋转。MuJoCo 用：",[316,101955,101958],{"className":101956,"code":101957,"language":5916,"meta":50},[5914],"x y z qw qx qy qz\n",[269,101959,101957],{"__ignoreMap":50},[19,101961,101962,101963,101966,101967,101970],{},"表示一个自由刚体的位置和姿态。其中 ",[269,101964,101965],{},"x y z"," 是位置，",[269,101968,101969],{},"qw qx qy qz"," 是四元数，用来表示旋转。新手不需要马上掌握四元数，只要知道它是“姿态”的表示方法。",[14,101972,101974],{"id":101973},"_4最小可运行代码mre","4.最小可运行代码（MRE）",[19,101976,101977],{},"新建文件:",[316,101979,101981],{"className":24549,"code":101980,"language":24551,"meta":50,"style":50},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\ntouch ch1_first_sim.py\n",[269,101982,101983,101993,102000],{"__ignoreMap":50},[324,101984,101985,101988,101990],{"class":326,"line":327},[324,101986,101987],{"class":734},"mkdir",[324,101989,29938],{"class":916},[324,101991,101992],{"class":738}," mujoco_tutorial\n",[324,101994,101995,101998],{"class":326,"line":203},[324,101996,101997],{"class":916},"cd",[324,101999,101992],{"class":738},[324,102001,102002,102005],{"class":326,"line":338},[324,102003,102004],{"class":734},"touch",[324,102006,102007],{"class":738}," ch1_first_sim.py\n",[19,102009,102010],{},"写入:",[316,102012,102014],{"className":31100,"code":102013,"language":31102,"meta":50,"style":50},"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",[269,102015,102016,102023,102027,102031,102041,102046,102051,102055,102060,102065,102069,102074,102079,102084,102089,102094,102099,102103,102107,102111,102124,102138,102148,102152,102164,102176,102188,102200,102212,102216,102233,102238,102242,102253,102264,102268,102272,102286],{"__ignoreMap":50},[324,102017,102018,102020],{"class":326,"line":327},[324,102019,31114],{"class":863},[324,102021,102022],{"class":867}," mujoco\n",[324,102024,102025],{"class":326,"line":203},[324,102026,488],{"emptyLinePlaceholder":487},[324,102028,102029],{"class":326,"line":338},[324,102030,488],{"emptyLinePlaceholder":487},[324,102032,102033,102036,102038],{"class":326,"line":344},[324,102034,102035],{"class":916},"XML",[324,102037,14293],{"class":863},[324,102039,102040],{"class":738}," \"\"\"\n",[324,102042,102043],{"class":326,"line":484},[324,102044,102045],{"class":738},"\u003Cmujoco model=\"first_sim\">\n",[324,102047,102048],{"class":326,"line":491},[324,102049,102050],{"class":738},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[324,102052,102053],{"class":326,"line":496},[324,102054,488],{"emptyLinePlaceholder":487},[324,102056,102057],{"class":326,"line":502},[324,102058,102059],{"class":738},"  \u003Cworldbody>\n",[324,102061,102062],{"class":326,"line":508},[324,102063,102064],{"class":738},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[324,102066,102067],{"class":326,"line":514},[324,102068,488],{"emptyLinePlaceholder":487},[324,102070,102071],{"class":326,"line":2343},[324,102072,102073],{"class":738},"    \u003Cbody name=\"box\" pos=\"0 0 1\">\n",[324,102075,102076],{"class":326,"line":2348},[324,102077,102078],{"class":738},"      \u003Cfreejoint name=\"box_free\"\u002F>\n",[324,102080,102081],{"class":326,"line":2354},[324,102082,102083],{"class":738},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[324,102085,102086],{"class":326,"line":2359},[324,102087,102088],{"class":738},"    \u003C\u002Fbody>\n",[324,102090,102091],{"class":326,"line":2373},[324,102092,102093],{"class":738},"  \u003C\u002Fworldbody>\n",[324,102095,102096],{"class":326,"line":2378},[324,102097,102098],{"class":738},"\u003C\u002Fmujoco>\n",[324,102100,102101],{"class":326,"line":2384},[324,102102,96420],{"class":738},[324,102104,102105],{"class":326,"line":2405},[324,102106,488],{"emptyLinePlaceholder":487},[324,102108,102109],{"class":326,"line":2410},[324,102110,488],{"emptyLinePlaceholder":487},[324,102112,102113,102115,102117,102120,102122],{"class":326,"line":2424},[324,102114,32669],{"class":863},[324,102116,2703],{"class":734},[324,102118,102119],{"class":867},"() -> ",[324,102121,96408],{"class":916},[324,102123,4468],{"class":867},[324,102125,102126,102129,102131,102134,102136],{"class":326,"line":2429},[324,102127,102128],{"class":867},"    model ",[324,102130,913],{"class":863},[324,102132,102133],{"class":867}," mujoco.MjModel.from_xml_string(",[324,102135,102035],{"class":916},[324,102137,874],{"class":867},[324,102139,102140,102143,102145],{"class":326,"line":2458},[324,102141,102142],{"class":867},"    data ",[324,102144,913],{"class":863},[324,102146,102147],{"class":867}," mujoco.MjData(model)\n",[324,102149,102150],{"class":326,"line":2463},[324,102151,488],{"emptyLinePlaceholder":487},[324,102153,102154,102156,102158,102161],{"class":326,"line":2480},[324,102155,32021],{"class":916},[324,102157,868],{"class":867},[324,102159,102160],{"class":738},"\"nq:\"",[324,102162,102163],{"class":867},", model.nq)\n",[324,102165,102166,102168,102170,102173],{"class":326,"line":2485},[324,102167,32021],{"class":916},[324,102169,868],{"class":867},[324,102171,102172],{"class":738},"\"nv:\"",[324,102174,102175],{"class":867},", model.nv)\n",[324,102177,102178,102180,102182,102185],{"class":326,"line":2490},[324,102179,32021],{"class":916},[324,102181,868],{"class":867},[324,102183,102184],{"class":738},"\"nu:\"",[324,102186,102187],{"class":867},", model.nu)\n",[324,102189,102190,102192,102194,102197],{"class":326,"line":2495},[324,102191,32021],{"class":916},[324,102193,868],{"class":867},[324,102195,102196],{"class":738},"\"initial time:\"",[324,102198,102199],{"class":867},", data.time)\n",[324,102201,102202,102204,102206,102209],{"class":326,"line":2509},[324,102203,32021],{"class":916},[324,102205,868],{"class":867},[324,102207,102208],{"class":738},"\"initial qpos:\"",[324,102210,102211],{"class":867},", data.qpos.copy())\n",[324,102213,102214],{"class":326,"line":2514},[324,102215,488],{"emptyLinePlaceholder":487},[324,102217,102218,102220,102223,102225,102227,102229,102231],{"class":326,"line":3306},[324,102219,3930],{"class":863},[324,102221,102222],{"class":867}," _ ",[324,102224,26767],{"class":863},[324,102226,33165],{"class":916},[324,102228,868],{"class":867},[324,102230,1175],{"class":916},[324,102232,31508],{"class":867},[324,102234,102235],{"class":326,"line":3320},[324,102236,102237],{"class":867},"        mujoco.mj_step(model, data)\n",[324,102239,102240],{"class":326,"line":3328},[324,102241,488],{"emptyLinePlaceholder":487},[324,102243,102244,102246,102248,102251],{"class":326,"line":3333},[324,102245,32021],{"class":916},[324,102247,868],{"class":867},[324,102249,102250],{"class":738},"\"final time:\"",[324,102252,102199],{"class":867},[324,102254,102255,102257,102259,102262],{"class":326,"line":3339},[324,102256,32021],{"class":916},[324,102258,868],{"class":867},[324,102260,102261],{"class":738},"\"final qpos:\"",[324,102263,102211],{"class":867},[324,102265,102266],{"class":326,"line":3345},[324,102267,488],{"emptyLinePlaceholder":487},[324,102269,102270],{"class":326,"line":3350},[324,102271,488],{"emptyLinePlaceholder":487},[324,102273,102274,102276,102278,102281,102284],{"class":326,"line":8677},[324,102275,2262],{"class":863},[324,102277,31942],{"class":916},[324,102279,102280],{"class":863}," ==",[324,102282,102283],{"class":738}," \"__main__\"",[324,102285,4468],{"class":867},[324,102287,102288],{"class":326,"line":8701},[324,102289,102290],{"class":867},"    main()\n",[35,102292,102293],{"id":102293},"代码逐段解释",[19,102295,102296],{},"导入库：",[316,102298,102300],{"className":31100,"code":102299,"language":31102,"meta":50,"style":50},"import mujoco\n",[269,102301,102302],{"__ignoreMap":50},[324,102303,102304,102306],{"class":326,"line":327},[324,102305,31114],{"class":863},[324,102307,102022],{"class":867},[19,102309,102310],{},"这里导入的是官方 Python bindings。后面所有 MuJoCo API 都从这个模块里调用。",[19,102312,102313],{},"定义 XML：",[316,102315,102317],{"className":31100,"code":102316,"language":31102,"meta":50,"style":50},"XML = \"\"\"\n...\n\"\"\"\n",[269,102318,102319,102327,102332],{"__ignoreMap":50},[324,102320,102321,102323,102325],{"class":326,"line":327},[324,102322,102035],{"class":916},[324,102324,14293],{"class":863},[324,102326,102040],{"class":738},[324,102328,102329],{"class":326,"line":203},[324,102330,102331],{"class":738},"...\n",[324,102333,102334],{"class":326,"line":338},[324,102335,96420],{"class":738},[19,102337,102338,102339,102342],{},"三引号字符串里放的是 MuJoCo 模型。这个模型包含地面和一个带 ",[269,102340,102341],{},"freejoint"," 的方块。",[19,102344,102345],{},"编译模型：",[316,102347,102349],{"className":31100,"code":102348,"language":31102,"meta":50,"style":50},"model = mujoco.MjModel.from_xml_string(XML)\n",[269,102350,102351],{"__ignoreMap":50},[324,102352,102353,102356,102358,102360,102362],{"class":326,"line":327},[324,102354,102355],{"class":867},"model ",[324,102357,913],{"class":863},[324,102359,102133],{"class":867},[324,102361,102035],{"class":916},[324,102363,874],{"class":867},[19,102365,102366],{},"这一步会检查 XML 是否合法，并把文本模型编译成 MuJoCo 内部可运行的物理模型。",[19,102368,102369],{},"创建数据：",[316,102371,102373],{"className":31100,"code":102372,"language":31102,"meta":50,"style":50},"data = mujoco.MjData(model)\n",[269,102374,102375],{"__ignoreMap":50},[324,102376,102377,102380,102382],{"class":326,"line":327},[324,102378,102379],{"class":867},"data ",[324,102381,913],{"class":863},[324,102383,102147],{"class":867},[19,102385,102386,102388,102389,102391],{},[269,102387,34123],{}," 会保存仿真当前状态。刚创建时，时间是 ",[269,102390,1056],{},"，方块还在初始位置。",[19,102393,102394],{},"推进仿真：",[316,102396,102398],{"className":31100,"code":102397,"language":31102,"meta":50,"style":50},"for _ in range(100):\n    mujoco.mj_step(model, data)\n",[269,102399,102400,102416],{"__ignoreMap":50},[324,102401,102402,102404,102406,102408,102410,102412,102414],{"class":326,"line":327},[324,102403,3754],{"class":863},[324,102405,102222],{"class":867},[324,102407,26767],{"class":863},[324,102409,33165],{"class":916},[324,102411,868],{"class":867},[324,102413,1175],{"class":916},[324,102415,31508],{"class":867},[324,102417,102418],{"class":326,"line":203},[324,102419,102420],{"class":867},"    mujoco.mj_step(model, data)\n",[19,102422,102423,102424,102426],{},"每次 ",[269,102425,101936],{}," 前进一步。这里循环 100 次，所以仿真大约运行 1 秒。",[35,102428,102429],{"id":102429},"代码逐行细讲",[19,102431,102432],{},"下面把完整代码按新手视角拆开讲。",[316,102434,102435],{"className":31100,"code":102299,"language":31102,"meta":50,"style":50},[269,102436,102437],{"__ignoreMap":50},[324,102438,102439,102441],{"class":326,"line":327},[324,102440,31114],{"class":863},[324,102442,102022],{"class":867},[19,102444,102445,102447,102448,1077,102450,1077,102452,29107],{},[269,102446,31114],{}," 是 Python 的导入语句。这里的意思是：把 MuJoCo 官方 Python 包导入进来，后面才能写 ",[269,102449,101397],{},[269,102451,101402],{},[269,102453,102454],{},"mujoco.mj_step",[316,102456,102457],{"className":31100,"code":102316,"language":31102,"meta":50,"style":50},[269,102458,102459,102467,102471],{"__ignoreMap":50},[324,102460,102461,102463,102465],{"class":326,"line":327},[324,102462,102035],{"class":916},[324,102464,14293],{"class":863},[324,102466,102040],{"class":738},[324,102468,102469],{"class":326,"line":203},[324,102470,102331],{"class":738},[324,102472,102473],{"class":326,"line":338},[324,102474,96420],{"class":738},[19,102476,102477,102479,102480,102483],{},[269,102478,102035],{}," 是一个变量名。右边的三引号 ",[269,102481,102482],{},"\"\"\""," 表示多行字符串。因为 MuJoCo 模型通常有很多行，所以用三引号保存 XML 文本最方便。",[316,102485,102486],{"className":53789,"code":102045,"language":53791,"meta":50,"style":50},[269,102487,102488],{"__ignoreMap":50},[324,102489,102490,102492,102494,102497,102499,102502],{"class":326,"line":327},[324,102491,1774],{"class":867},[324,102493,101742],{"class":52022},[324,102495,102496],{"class":734}," model",[324,102498,913],{"class":867},[324,102500,102501],{"class":738},"\"first_sim\"",[324,102503,52029],{"class":867},[19,102505,102506,102507,102510,102511,29107],{},"这是 XML 的根标签。",[269,102508,102509],{},"model=\"first_sim\""," 给这个模型起了一个名字，叫 ",[269,102512,102513],{},"first_sim",[316,102515,102516],{"className":53789,"code":101904,"language":53791,"meta":50,"style":50},[269,102517,102518],{"__ignoreMap":50},[324,102519,102520,102522,102524,102526,102528,102530,102532,102534,102536],{"class":326,"line":327},[324,102521,1774],{"class":867},[324,102523,69888],{"class":52022},[324,102525,101915],{"class":734},[324,102527,913],{"class":867},[324,102529,101920],{"class":738},[324,102531,101923],{"class":734},[324,102533,913],{"class":867},[324,102535,101928],{"class":738},[324,102537,101865],{"class":867},[19,102539,102540,102542,102543,102546,102547,102550],{},[269,102541,69888],{}," 用来设置仿真参数。",[269,102544,102545],{},"timestep=\"0.01\""," 表示每一步是 0.01 秒。",[269,102548,102549],{},"gravity=\"0 0 -9.81\""," 表示重力方向沿 z 轴向下，大小约为 9.81。",[316,102552,102554],{"className":53789,"code":102553,"language":53791,"meta":50,"style":50},"\u003Cworldbody>\n",[269,102555,102556],{"__ignoreMap":50},[324,102557,102558,102560,102563],{"class":326,"line":327},[324,102559,1774],{"class":867},[324,102561,102562],{"class":52022},"worldbody",[324,102564,52029],{"class":867},[19,102566,102567,102569],{},[269,102568,102562],{}," 表示世界里直接存在的物体都写在这里。你可以把它理解为“场景根节点”。",[316,102571,102573],{"className":53789,"code":102572,"language":53791,"meta":50,"style":50},"\u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[269,102574,102575],{"__ignoreMap":50},[324,102576,102577,102579,102581,102583,102585,102588,102590,102592,102595,102597,102599,102602,102604,102606,102609],{"class":326,"line":327},[324,102578,1774],{"class":867},[324,102580,101841],{"class":52022},[324,102582,15649],{"class":734},[324,102584,913],{"class":867},[324,102586,102587],{"class":738},"\"floor\"",[324,102589,54546],{"class":734},[324,102591,913],{"class":867},[324,102593,102594],{"class":738},"\"plane\"",[324,102596,101857],{"class":734},[324,102598,913],{"class":867},[324,102600,102601],{"class":738},"\"2 2 0.1\"",[324,102603,79489],{"class":734},[324,102605,913],{"class":867},[324,102607,102608],{"class":738},"\"0.8 0.8 0.8 1\"",[324,102610,101865],{"class":867},[19,102612,102613,102614,102616,102617,102620,102621,102624,102625,102627],{},"这行创建地面。",[269,102615,101841],{}," 是几何体。",[269,102618,102619],{},"name=\"floor\""," 是名字。",[269,102622,102623],{},"type=\"plane\""," 表示平面。",[269,102626,55832],{}," 是颜色，四个数字分别表示红、绿、蓝、透明度。",[316,102629,102631],{"className":53789,"code":102630,"language":53791,"meta":50,"style":50},"\u003Cbody name=\"box\" pos=\"0 0 1\">\n",[269,102632,102633],{"__ignoreMap":50},[324,102634,102635,102637,102639,102641,102643,102645,102647,102649,102651],{"class":326,"line":327},[324,102636,1774],{"class":867},[324,102638,52522],{"class":52022},[324,102640,15649],{"class":734},[324,102642,913],{"class":867},[324,102644,54213],{"class":738},[324,102646,101827],{"class":734},[324,102648,913],{"class":867},[324,102650,101832],{"class":738},[324,102652,52029],{"class":867},[19,102654,102655,102656,29107,102658,102661,102662,102664],{},"这行创建一个刚体，名字叫 ",[269,102657,54436],{},[269,102659,102660],{},"pos=\"0 0 1\""," 表示它一开始在世界坐标 ",[269,102663,101890],{},"，也就是离地面 1 米高。",[316,102666,102668],{"className":53789,"code":102667,"language":53791,"meta":50,"style":50},"\u003Cfreejoint name=\"box_free\"\u002F>\n",[269,102669,102670],{"__ignoreMap":50},[324,102671,102672,102674,102676,102678,102680,102683],{"class":326,"line":327},[324,102673,1774],{"class":867},[324,102675,102341],{"class":52022},[324,102677,15649],{"class":734},[324,102679,913],{"class":867},[324,102681,102682],{"class":738},"\"box_free\"",[324,102684,101865],{"class":867},[19,102686,102687,102688,102690],{},"这行很重要。",[269,102689,102341],{}," 表示这个刚体可以在三维空间自由移动和旋转。如果没有它，box 会被固定住，不会掉下来。",[316,102692,102694],{"className":53789,"code":102693,"language":53791,"meta":50,"style":50},"\u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[269,102695,102696],{"__ignoreMap":50},[324,102697,102698,102700,102702,102704,102706,102708,102710,102712,102714,102716,102718,102720,102723,102725,102727,102729,102731,102734],{"class":326,"line":327},[324,102699,1774],{"class":867},[324,102701,101841],{"class":52022},[324,102703,15649],{"class":734},[324,102705,913],{"class":867},[324,102707,101848],{"class":738},[324,102709,54546],{"class":734},[324,102711,913],{"class":867},[324,102713,54213],{"class":738},[324,102715,101857],{"class":734},[324,102717,913],{"class":867},[324,102719,101862],{"class":738},[324,102721,102722],{"class":734}," mass",[324,102724,913],{"class":867},[324,102726,4407],{"class":738},[324,102728,79489],{"class":734},[324,102730,913],{"class":867},[324,102732,102733],{"class":738},"\"1 0 0 1\"",[324,102735,101865],{"class":867},[19,102737,102738,102739,102742,102743,102746,102747,102750,102751,102754],{},"这行给 box body 添加一个盒子形状。",[269,102740,102741],{},"type=\"box\""," 表示形状是盒子。",[269,102744,102745],{},"size=\"0.1 0.1 0.1\""," 表示三个方向的半边长都是 0.1。",[269,102748,102749],{},"mass=\"1\""," 表示质量是 1。",[269,102752,102753],{},"rgba=\"1 0 0 1\""," 表示红色。",[316,102756,102758],{"className":31100,"code":102757,"language":31102,"meta":50,"style":50},"def main() -> None:\n",[269,102759,102760],{"__ignoreMap":50},[324,102761,102762,102764,102766,102768,102770],{"class":326,"line":327},[324,102763,32669],{"class":863},[324,102765,2703],{"class":734},[324,102767,102119],{"class":867},[324,102769,96408],{"class":916},[324,102771,4468],{"class":867},[19,102773,102774,102776,102777,102780,102781,102784],{},[269,102775,32669],{}," 用来定义函数。这里定义了一个叫 ",[269,102778,102779],{},"main"," 的函数。",[269,102782,102783],{},"-> None"," 是类型提示，表示这个函数不返回有意义的结果。初学时可以先把它理解成注释，不影响运行。",[316,102786,102787],{"className":31100,"code":102348,"language":31102,"meta":50,"style":50},[269,102788,102789],{"__ignoreMap":50},[324,102790,102791,102793,102795,102797,102799],{"class":326,"line":327},[324,102792,102355],{"class":867},[324,102794,913],{"class":863},[324,102796,102133],{"class":867},[324,102798,102035],{"class":916},[324,102800,874],{"class":867},[19,102802,102803,102804,102807],{},"这行把 XML 字符串编译成 MuJoCo 模型。",[269,102805,102806],{},"model"," 保存的是“静态结构”，比如有几个 body、有几个 joint、时间步长是多少。",[316,102809,102810],{"className":31100,"code":102372,"language":31102,"meta":50,"style":50},[269,102811,102812],{"__ignoreMap":50},[324,102813,102814,102816,102818],{"class":326,"line":327},[324,102815,102379],{"class":867},[324,102817,913],{"class":863},[324,102819,102147],{"class":867},[19,102821,102822,102823,102825,102826,102828],{},"这行创建仿真数据。",[269,102824,34123],{}," 保存的是“当前状态”，比如当前时间、位置、速度。仿真每前进一步，",[269,102827,34123],{}," 都会变化。",[316,102830,102832],{"className":31100,"code":102831,"language":31102,"meta":50,"style":50},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"nu:\", model.nu)\n",[269,102833,102834,102844,102854],{"__ignoreMap":50},[324,102835,102836,102838,102840,102842],{"class":326,"line":327},[324,102837,31137],{"class":916},[324,102839,868],{"class":867},[324,102841,102160],{"class":738},[324,102843,102163],{"class":867},[324,102845,102846,102848,102850,102852],{"class":326,"line":203},[324,102847,31137],{"class":916},[324,102849,868],{"class":867},[324,102851,102172],{"class":738},[324,102853,102175],{"class":867},[324,102855,102856,102858,102860,102862],{"class":326,"line":338},[324,102857,31137],{"class":916},[324,102859,868],{"class":867},[324,102861,102184],{"class":738},[324,102863,102187],{"class":867},[19,102865,102866,102868,102869,102872,102873,102876,102877,102880,102881,102884],{},[269,102867,31137],{}," 用来输出信息。",[269,102870,102871],{},"model.nq"," 是位置变量数量，",[269,102874,102875],{},"model.nv"," 是速度变量数量，",[269,102878,102879],{},"model.nu"," 是控制输入数量。这个例子没有电机，所以 ",[269,102882,102883],{},"nu"," 是 0。",[316,102886,102888],{"className":31100,"code":102887,"language":31102,"meta":50,"style":50},"print(\"initial time:\", data.time)\nprint(\"initial qpos:\", data.qpos.copy())\n",[269,102889,102890,102900],{"__ignoreMap":50},[324,102891,102892,102894,102896,102898],{"class":326,"line":327},[324,102893,31137],{"class":916},[324,102895,868],{"class":867},[324,102897,102196],{"class":738},[324,102899,102199],{"class":867},[324,102901,102902,102904,102906,102908],{"class":326,"line":203},[324,102903,31137],{"class":916},[324,102905,868],{"class":867},[324,102907,102208],{"class":738},[324,102909,102211],{"class":867},[19,102911,102912,102913,102915,102916,102918,102919,102922],{},"这里打印初始时间和初始位置。",[269,102914,101788],{}," 一开始是 0。",[269,102917,101791],{}," 是位置数组。",[269,102920,102921],{},".copy()"," 表示复制一份数组再打印，避免以后数组变化时影响你理解输出。",[316,102924,102925],{"className":31100,"code":102397,"language":31102,"meta":50,"style":50},[269,102926,102927,102943],{"__ignoreMap":50},[324,102928,102929,102931,102933,102935,102937,102939,102941],{"class":326,"line":327},[324,102930,3754],{"class":863},[324,102932,102222],{"class":867},[324,102934,26767],{"class":863},[324,102936,33165],{"class":916},[324,102938,868],{"class":867},[324,102940,1175],{"class":916},[324,102942,31508],{"class":867},[324,102944,102945],{"class":326,"line":203},[324,102946,102420],{"class":867},[19,102948,102949,102951,102952,102955,102956,102958,102959,102961],{},[269,102950,3754],{}," 是循环。",[269,102953,102954],{},"range(100)"," 表示循环 100 次。",[269,102957,1856],{}," 是一个临时变量名，表示“我不关心当前是第几次”。每次循环都会调用一次 ",[269,102960,101936],{},"，仿真就前进一步。",[316,102963,102965],{"className":31100,"code":102964,"language":31102,"meta":50,"style":50},"print(\"final time:\", data.time)\nprint(\"final qpos:\", data.qpos.copy())\n",[269,102966,102967,102977],{"__ignoreMap":50},[324,102968,102969,102971,102973,102975],{"class":326,"line":327},[324,102970,31137],{"class":916},[324,102972,868],{"class":867},[324,102974,102250],{"class":738},[324,102976,102199],{"class":867},[324,102978,102979,102981,102983,102985],{"class":326,"line":203},[324,102980,31137],{"class":916},[324,102982,868],{"class":867},[324,102984,102261],{"class":738},[324,102986,102211],{"class":867},[19,102988,102989],{},"循环结束后，再打印最终时间和最终位置。你会看到时间从 0 变成约 1.0，方块的位置也变了。",[316,102991,102993],{"className":31100,"code":102992,"language":31102,"meta":50,"style":50},"if __name__ == \"__main__\":\n    main()\n",[269,102994,102995,103007],{"__ignoreMap":50},[324,102996,102997,102999,103001,103003,103005],{"class":326,"line":327},[324,102998,2262],{"class":863},[324,103000,31942],{"class":916},[324,103002,102280],{"class":863},[324,103004,102283],{"class":738},[324,103006,4468],{"class":867},[324,103008,103009],{"class":326,"line":203},[324,103010,102290],{"class":867},[19,103012,103013,103014,103017,103018,29107],{},"这是 Python 常见写法。意思是：如果你直接运行这个文件，就调用 ",[269,103015,103016],{},"main()"," 函数。如果这个文件被别的文件导入，就不会自动运行 ",[269,103019,103016],{},[19,103021,103022],{},"运行:",[316,103024,103026],{"className":24549,"code":103025,"language":24551,"meta":50,"style":50},"python ch1_first_sim.py\n",[269,103027,103028],{"__ignoreMap":50},[324,103029,103030,103032],{"class":326,"line":327},[324,103031,31102],{"class":734},[324,103033,102007],{"class":738},[14,103035,103037],{"id":103036},"_5运行结果说明","5.运行结果说明",[19,103039,103040],{},"你应该看到类似输出:",[316,103042,103045],{"className":103043,"code":103044,"language":5916,"meta":50},[5914],"nq: 7\nnv: 6\nnu: 0\ninitial time: 0.0\nfinal time: 1.0000000000000007\n",[269,103046,103044],{"__ignoreMap":50},[19,103048,103049,103051,103052,103055,103056,29107],{},[269,103050,102341],{}," 有 7 个位置变量: ",[269,103053,103054],{},"x y z qw qx qy qz","。自由刚体有 6 个速度变量: ",[269,103057,103058],{},"vx vy vz wx wy wz",[19,103060,103061,103062,103065],{},"你还会看到 ",[269,103063,103064],{},"final qpos"," 里的 z 坐标比初始时小。原因是方块受到重力作用向下掉落。如果方块撞到地面，MuJoCo 会计算碰撞，让它不会无限向下穿透。",[14,103067,103069],{"id":103068},"_6验证步骤","6.验证步骤",[19,103071,103072],{},"确认版本:",[316,103074,103075],{"className":24549,"code":101661,"language":24551,"meta":50,"style":50},[269,103076,103077],{"__ignoreMap":50},[324,103078,103079,103081,103083],{"class":326,"line":327},[324,103080,31102],{"class":734},[324,103082,31080],{"class":916},[324,103084,101672],{"class":738},[19,103086,103087],{},"确认导入的是官方 bindings:",[316,103089,103091],{"className":24549,"code":103090,"language":24551,"meta":50,"style":50},"python -c \"import mujoco; print(mujoco)\"\n",[269,103092,103093],{"__ignoreMap":50},[324,103094,103095,103097,103099],{"class":326,"line":327},[324,103096,31102],{"class":734},[324,103098,31080],{"class":916},[324,103100,103101],{"class":738}," \"import mujoco; print(mujoco)\"\n",[19,103103,103104],{},"运行程序:",[316,103106,103107],{"className":24549,"code":103025,"language":24551,"meta":50,"style":50},[269,103108,103109],{"__ignoreMap":50},[324,103110,103111,103113],{"class":326,"line":327},[324,103112,31102],{"class":734},[324,103114,102007],{"class":738},[19,103116,103117,103118,103121,103122,29107],{},"检查 ",[269,103119,103120],{},"final time"," 是否约等于 ",[269,103123,103124],{},"1.0",[19,103126,103127],{},"再做几个小实验：",[192,103129,103130,103140,103148,103161],{},[195,103131,103132,103133,103135,103136,103139],{},"把 ",[269,103134,102660],{}," 改成 ",[269,103137,103138],{},"pos=\"0 0 2\"","，观察初始高度变化。",[195,103141,103132,103142,103135,103144,103147],{},[269,103143,102549],{},[269,103145,103146],{},"gravity=\"0 0 -1\"","，观察下落是否变慢。",[195,103149,103132,103150,103135,103152,103155,103156,103158,103159,29107],{},[269,103151,102545],{},[269,103153,103154],{},"timestep=\"0.005\"","，观察 100 步后的 ",[269,103157,103120],{}," 是否变成约 ",[269,103160,36051],{},[195,103162,103163,103164,103167],{},"删除 ",[269,103165,103166],{},"\u003Cfreejoint name=\"box_free\"\u002F>","，观察方块是否还会下落。",[19,103169,103170],{},"第 4 个实验很关键：没有自由关节时，body 会被固定在父节点上，不能自由运动。",[14,103172,103174],{"id":103173},"_7常见错误与解决方案","7.常见错误与解决方案",[35,103176,103178],{"id":103177},"modulenotfounderror-no-module-named-mujoco",[269,103179,103180],{},"ModuleNotFoundError: No module named 'mujoco'",[19,103182,103183],{},"解决:",[316,103185,103187],{"className":24549,"code":103186,"language":24551,"meta":50,"style":50},"pip install \"mujoco>=2.3\"\n",[269,103188,103189],{"__ignoreMap":50},[324,103190,103191,103193,103195],{"class":326,"line":327},[324,103192,24558],{"class":734},[324,103194,760],{"class":738},[324,103196,103197],{"class":738}," \"mujoco>=2.3\"\n",[35,103199,103201],{"id":103200},"图形或-opengl-相关报错","图形或 OpenGL 相关报错",[19,103203,103204],{},"先安装系统依赖:",[316,103206,103208],{"className":24549,"code":103207,"language":24551,"meta":50,"style":50},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel libX11 libXi libXrandr\n",[269,103209,103210],{"__ignoreMap":50},[324,103211,103212,103214,103216,103218,103220,103223,103225,103228,103230,103233,103235],{"class":326,"line":327},[324,103213,735],{"class":734},[324,103215,27038],{"class":738},[324,103217,760],{"class":738},[324,103219,27123],{"class":916},[324,103221,103222],{"class":738}," mesa-libGL",[324,103224,101536],{"class":738},[324,103226,103227],{"class":738}," glfw",[324,103229,101556],{"class":738},[324,103231,103232],{"class":738}," libX11",[324,103234,101569],{"class":738},[324,103236,103237],{"class":738}," libXrandr\n",[35,103239,103241],{"id":103240},"xml-解析失败","XML 解析失败",[19,103243,103244],{},"检查:",[192,103246,103247,103250,103253,103259],{},[195,103248,103249],{},"标签是否闭合",[195,103251,103252],{},"属性是否带引号",[195,103254,103255,103256],{},"根节点是否是 ",[269,103257,103258],{},"\u003Cmujoco>",[195,103260,103261,103263,103264,103267],{},[269,103262,52522],{}," 是否放在 ",[269,103265,103266],{},"\u003Cworldbody>"," 内部",[35,103269,103271,103273,103274],{"id":103270},"final-time-不是严格等于-10",[269,103272,103120],{}," 不是严格等于 ",[269,103275,103124],{},[19,103277,103278],{},"这通常不是错误。浮点数计算可能得到：",[316,103280,103283],{"className":103281,"code":103282,"language":5916,"meta":50},[5914],"1.0000000000000007\n",[269,103284,103282],{"__ignoreMap":50},[19,103286,103287,103288,103290],{},"只要接近 ",[269,103289,103124],{}," 就正常。",[35,103292,103293],{"id":103293},"方块没有掉下来",[19,103295,103296],{},"检查：",[192,103298,103299,103305,103311,103316],{},[195,103300,103301,103302],{},"方块 body 里是否有 ",[269,103303,103304],{},"\u003Cfreejoint\u002F>",[195,103306,103307,103308],{},"重力是否是 ",[269,103309,103310],{},"0 0 -9.81",[195,103312,103313,103314],{},"是否真的调用了 ",[269,103315,101407],{},[195,103317,103318,103319,103321,103322],{},"你看的是否是 ",[269,103320,103064],{},"，不是 ",[269,103323,103324],{},"initial qpos",[14,103326,103328],{"id":103327},"_8本章小结","8.本章小结",[19,103330,103331],{},"本章你已经完成了 MuJoCo 的最小闭环：",[316,103333,103336],{"className":103334,"code":103335,"language":5916,"meta":50},[5914],"XML 模型 → MjModel → MjData → mj_step → 读取状态\n",[269,103337,103335],{"__ignoreMap":50},[19,103339,103340],{},"后面所有复杂任务，本质都是在这个闭环上继续增加内容：更多 body、更多 joint、更多 actuator、更复杂的控制逻辑和奖励函数。",[775,103342,103343],{},"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":50,"searchDepth":203,"depth":203,"links":103345},[103346,103347,103348,103353,103357,103358,103359,103367],{"id":101368,"depth":203,"text":101369},{"id":101491,"depth":203,"text":101492},{"id":101765,"depth":203,"text":101766,"children":103349},[103350,103351,103352],{"id":101803,"depth":338,"text":101804},{"id":101897,"depth":338,"text":101898},{"id":101949,"depth":338,"text":101950},{"id":101973,"depth":203,"text":101974,"children":103354},[103355,103356],{"id":102293,"depth":338,"text":102293},{"id":102429,"depth":338,"text":102429},{"id":103036,"depth":203,"text":103037},{"id":103068,"depth":203,"text":103069},{"id":103173,"depth":203,"text":103174,"children":103360},[103361,103362,103363,103364,103366],{"id":103177,"depth":338,"text":103180},{"id":103200,"depth":338,"text":103201},{"id":103240,"depth":338,"text":103241},{"id":103270,"depth":338,"text":103365},"final time 不是严格等于 1.0",{"id":103293,"depth":338,"text":103293},{"id":103327,"depth":203,"text":103328},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch1-mujoco",{"title":101360,"description":50},"wiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序","QXJQc687vjITkT3uIIPeKVan841uz4ykZnCT7hX2FiY",{"id":103374,"title":103375,"body":103376,"description":50,"extension":792,"meta":105032,"navigation":487,"path":105033,"seo":105034,"stem":105035,"__hash__":105036},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础.md","2.XML 与 MJCF 物理建模基础",{"type":7,"value":103377,"toc":105008},[103378,103381,103383,103386,103389,103406,103501,103504,103510,103512,103514,103538,103541,103555,103558,103599,103601,103614,103616,103619,103667,103679,103682,103685,103691,103704,103771,103774,103793,103796,103799,103805,103807,103816,103819,103823,103832,103914,103923,103927,103933,103947,103957,103959,104289,104292,104304,104306,104317,104319,104322,104340,104343,104346,104364,104375,104378,104393,104403,104405,104426,104443,104463,104469,104509,104525,104541,104547,104550,104574,104590,104595,104625,104642,104667,104670,104685,104694,104709,104718,104733,104740,104742,104752,104765,104772,104775,104814,104821,104823,104875,104877,104883,104886,104893,104900,104903,104905,104923,104926,104929,104963,104975,104977,104980,105002,105005],[10,103379,103375],{"id":103380},"_2xml-与-mjcf-物理建模基础",[14,103382,101369],{"id":101368},[19,103384,103385],{},"本章学习 MuJoCo 的 MJCF XML 基础。MJCF 是 MuJoCo 使用的模型描述格式。你不需要先完整学习 XML 语言，只需要掌握 MuJoCo 常用标签，以及它们之间的层级关系。",[19,103387,103388],{},"本章结束后，你应该能看懂一个简单模型里：",[192,103390,103391,103394,103397,103400,103403],{},[195,103392,103393],{},"地面在哪里。",[195,103395,103396],{},"物体初始位置在哪里。",[195,103398,103399],{},"几何体是什么形状。",[195,103401,103402],{},"哪些 body 可以自由运动。",[195,103404,103405],{},"如何用名字在 Python 里找到 XML 中的对象。",[1003,103407,103408,103418],{},[1006,103409,103410],{},[1009,103411,103412,103415],{},[1012,103413,103414],{"align":24463},"标签",[1012,103416,103417],{"align":24463},"作用",[1049,103419,103420,103429,103439,103448,103458,103468,103481,103491],{},[1009,103421,103422,103426],{},[1054,103423,103424],{"align":24463},[269,103425,103258],{},[1054,103427,103428],{"align":24463},"根节点",[1009,103430,103431,103436],{},[1054,103432,103433],{"align":24463},[269,103434,103435],{},"\u003Coption>",[1054,103437,103438],{"align":24463},"仿真参数",[1009,103440,103441,103445],{},[1054,103442,103443],{"align":24463},[269,103444,103266],{},[1054,103446,103447],{"align":24463},"世界中的物体",[1009,103449,103450,103455],{},[1054,103451,103452],{"align":24463},[269,103453,103454],{},"\u003Cbody>",[1054,103456,103457],{"align":24463},"刚体",[1009,103459,103460,103465],{},[1054,103461,103462],{"align":24463},[269,103463,103464],{},"\u003Cgeom>",[1054,103466,103467],{"align":24463},"几何体、碰撞体、可视体",[1009,103469,103470,103478],{},[1054,103471,103472,25702,103475],{"align":24463},[269,103473,103474],{},"\u003Cjoint>",[269,103476,103477],{},"\u003Cfreejoint>",[1054,103479,103480],{"align":24463},"关节",[1009,103482,103483,103488],{},[1054,103484,103485],{"align":24463},[269,103486,103487],{},"\u003Csite>",[1054,103489,103490],{"align":24463},"标记点",[1009,103492,103493,103498],{},[1054,103494,103495],{"align":24463},[269,103496,103497],{},"\u003Cactuator>",[1054,103499,103500],{"align":24463},"控制器",[19,103502,103503],{},"初学时可以先记住：",[316,103505,103508],{"className":103506,"code":103507,"language":5916,"meta":50},[5914],"body 是刚体，geom 是形状，joint 是运动方式，site 是标记点。\n",[269,103509,103507],{"__ignoreMap":50},[14,103511,101492],{"id":101491},[19,103513,101495],{},[316,103515,103517],{"className":24549,"code":103516,"language":24551,"meta":50,"style":50},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel\n",[269,103518,103519],{"__ignoreMap":50},[324,103520,103521,103523,103525,103527,103529,103531,103533,103535],{"class":326,"line":327},[324,103522,735],{"class":734},[324,103524,27038],{"class":738},[324,103526,760],{"class":738},[324,103528,27123],{"class":916},[324,103530,103222],{"class":738},[324,103532,101536],{"class":738},[324,103534,103227],{"class":738},[324,103536,103537],{"class":738}," glfw-devel\n",[19,103539,103540],{},"pip:",[316,103542,103543],{"className":24549,"code":101641,"language":24551,"meta":50,"style":50},[269,103544,103545],{"__ignoreMap":50},[324,103546,103547,103549,103551,103553],{"class":326,"line":327},[324,103548,24558],{"class":734},[324,103550,760],{"class":738},[324,103552,101652],{"class":738},[324,103554,101655],{"class":738},[19,103556,103557],{},"conda:",[316,103559,103561],{"className":24549,"code":103560,"language":24551,"meta":50,"style":50},"conda create -n mujoco-xml python=3.10 -y\nconda activate mujoco-xml\npip install \"mujoco>=2.3\" numpy\n",[269,103562,103563,103580,103589],{"__ignoreMap":50},[324,103564,103565,103567,103569,103571,103574,103576,103578],{"class":326,"line":327},[324,103566,31052],{"class":734},[324,103568,29898],{"class":738},[324,103570,25839],{"class":916},[324,103572,103573],{"class":738}," mujoco-xml",[324,103575,101697],{"class":738},[324,103577,101700],{"class":916},[324,103579,101703],{"class":916},[324,103581,103582,103584,103586],{"class":326,"line":203},[324,103583,31052],{"class":734},[324,103585,101710],{"class":738},[324,103587,103588],{"class":738}," mujoco-xml\n",[324,103590,103591,103593,103595,103597],{"class":326,"line":338},[324,103592,24558],{"class":734},[324,103594,760],{"class":738},[324,103596,101652],{"class":738},[324,103598,101655],{"class":738},[19,103600,101726],{},[192,103602,103603,103606,103611],{},[195,103604,103605],{},"MJCF XML 标签随 MuJoCo 版本会持续扩展。",[195,103607,103608,103609,29107],{},"本章使用基础标签，适用于 ",[269,103610,101748],{},[195,103612,103613],{},"某些新 XML 属性可能存在版本差异，本文避免使用高版本专属属性。",[14,103615,101766],{"id":101765},[19,103617,103618],{},"MJCF 是 MuJoCo 的 XML 建模格式。最小结构:",[316,103620,103622],{"className":53789,"code":103621,"language":53791,"meta":50,"style":50},"\u003Cmujoco model=\"name\">\n  \u003Cworldbody>\n    ...\n  \u003C\u002Fworldbody>\n\u003C\u002Fmujoco>\n",[269,103623,103624,103638,103646,103651,103659],{"__ignoreMap":50},[324,103625,103626,103628,103630,103632,103634,103636],{"class":326,"line":327},[324,103627,1774],{"class":867},[324,103629,101742],{"class":52022},[324,103631,102496],{"class":734},[324,103633,913],{"class":867},[324,103635,63401],{"class":738},[324,103637,52029],{"class":867},[324,103639,103640,103642,103644],{"class":326,"line":203},[324,103641,52866],{"class":867},[324,103643,102562],{"class":52022},[324,103645,52029],{"class":867},[324,103647,103648],{"class":326,"line":338},[324,103649,103650],{"class":867},"    ...\n",[324,103652,103653,103655,103657],{"class":326,"line":344},[324,103654,53139],{"class":867},[324,103656,102562],{"class":52022},[324,103658,52029],{"class":867},[324,103660,103661,103663,103665],{"class":326,"line":484},[324,103662,52507],{"class":867},[324,103664,101742],{"class":52022},[324,103666,52029],{"class":867},[19,103668,103669,103671,103672,103674,103675,103678],{},[269,103670,52522],{}," 表示刚体。",[269,103673,101841],{}," 表示几何形状，可以用于碰撞、质量、渲染。",[269,103676,103677],{},"joint"," 表示刚体相对父刚体如何运动。",[35,103680,103681],{"id":103681},"层级结构非常重要",[19,103683,103684],{},"MuJoCo 模型不是一堆平铺的物体，而是一棵树：",[316,103686,103689],{"className":103687,"code":103688,"language":5916,"meta":50},[5914],"worldbody\n├── floor geom\n└── red_box body\n    ├── freejoint\n    ├── red_box_geom\n    └── box_center site\n",[269,103690,103688],{"__ignoreMap":50},[19,103692,103693,300,103696,103699,103700,103703],{},[269,103694,103695],{},"red_box_geom",[269,103697,103698],{},"box_center"," 都属于 ",[269,103701,103702],{},"red_box"," 这个 body。body 移动时，它内部的 geom 和 site 也会跟着移动。",[316,103705,103707],{"className":53789,"code":103706,"language":53791,"meta":50,"style":50},"\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",[269,103708,103709,103729,103743,103763],{"__ignoreMap":50},[324,103710,103711,103713,103715,103717,103719,103721,103723,103725,103727],{"class":326,"line":327},[324,103712,1774],{"class":867},[324,103714,52522],{"class":52022},[324,103716,15649],{"class":734},[324,103718,913],{"class":867},[324,103720,54213],{"class":738},[324,103722,101827],{"class":734},[324,103724,913],{"class":867},[324,103726,101832],{"class":738},[324,103728,52029],{"class":867},[324,103730,103731,103733,103735,103737,103739,103741],{"class":326,"line":203},[324,103732,52866],{"class":867},[324,103734,102341],{"class":52022},[324,103736,15649],{"class":734},[324,103738,913],{"class":867},[324,103740,102682],{"class":738},[324,103742,101865],{"class":867},[324,103744,103745,103747,103749,103751,103753,103755,103757,103759,103761],{"class":326,"line":338},[324,103746,52866],{"class":867},[324,103748,101841],{"class":52022},[324,103750,54546],{"class":734},[324,103752,913],{"class":867},[324,103754,54213],{"class":738},[324,103756,101857],{"class":734},[324,103758,913],{"class":867},[324,103760,101862],{"class":738},[324,103762,101865],{"class":867},[324,103764,103765,103767,103769],{"class":326,"line":344},[324,103766,52507],{"class":867},[324,103768,52522],{"class":52022},[324,103770,52029],{"class":867},[19,103772,103773],{},"含义:",[192,103775,103776,103782,103787,103790],{},[195,103777,103778,103779,103781],{},"创建名为 ",[269,103780,54436],{}," 的刚体",[195,103783,103784,103785],{},"初始位置在世界坐标 ",[269,103786,101890],{},[195,103788,103789],{},"它有一个自由关节",[195,103791,103792],{},"它有一个盒子几何体",[35,103794,103795],{"id":103795},"坐标怎么理解",[19,103797,103798],{},"MuJoCo 默认使用三维坐标：",[316,103800,103803],{"className":103801,"code":103802,"language":5916,"meta":50},[5914],"x: 左右方向\ny: 前后方向\nz: 上下方向\n",[269,103804,103802],{"__ignoreMap":50},[19,103806,15362],{},[316,103808,103810],{"className":53789,"code":103809,"language":53791,"meta":50,"style":50},"pos=\"0 0 1\"\n",[269,103811,103812],{"__ignoreMap":50},[324,103813,103814],{"class":326,"line":327},[324,103815,103809],{"class":867},[19,103817,103818],{},"表示 x=0、y=0、z=1，也就是放在世界原点上方 1 米的位置。",[35,103820,103822],{"id":103821},"geom-的-size-怎么理解","geom 的 size 怎么理解",[19,103824,103825,103826,83252,103829,103831],{},"不同 ",[269,103827,103828],{},"type",[269,103830,32218],{}," 含义不同：",[1003,103833,103834,103849],{},[1006,103835,103836],{},[1009,103837,103838,103842,103847],{},[1012,103839,103840],{"align":24463},[269,103841,103828],{},[1012,103843,103844,103846],{"align":24463},[269,103845,32218],{}," 示例",[1012,103848,101422],{"align":24463},[1049,103850,103851,103865,103880,103899],{},[1009,103852,103853,103857,103862],{},[1054,103854,103855],{"align":24463},[269,103856,54436],{},[1054,103858,103859],{"align":24463},[269,103860,103861],{},"size=\"0.1 0.2 0.3\"",[1054,103863,103864],{"align":24463},"x\u002Fy\u002Fz 半边长，不是完整长度",[1009,103866,103867,103872,103877],{},[1054,103868,103869],{"align":24463},[269,103870,103871],{},"sphere",[1054,103873,103874],{"align":24463},[269,103875,103876],{},"size=\"0.1\"",[1054,103878,103879],{"align":24463},"球半径",[1009,103881,103882,103887,103892],{},[1054,103883,103884],{"align":24463},[269,103885,103886],{},"capsule",[1054,103888,103889],{"align":24463},[269,103890,103891],{},"size=\"0.03\"",[1054,103893,103894,103895,103898],{"align":24463},"胶囊半径，长度常用 ",[269,103896,103897],{},"fromto"," 指定",[1009,103900,103901,103906,103911],{},[1054,103902,103903],{"align":24463},[269,103904,103905],{},"plane",[1054,103907,103908],{"align":24463},[269,103909,103910],{},"size=\"3 3 0.1\"",[1054,103912,103913],{"align":24463},"可视平面大小，通常当地面",[19,103915,103916,103917,103919,103920,103922],{},"最容易踩坑的是 box：",[269,103918,102745],{}," 表示边长大约是 ",[269,103921,32759],{},"，因为 MuJoCo 用的是半边长。",[35,103924,103926],{"id":103925},"site-是什么","site 是什么",[19,103928,103929,103932],{},[269,103930,103931],{},"site"," 是一个不参与碰撞的小标记点。它常用于：",[192,103934,103935,103938,103941,103944],{},[195,103936,103937],{},"标记机械臂末端。",[195,103939,103940],{},"标记目标位置。",[195,103942,103943],{},"放传感器或相机参考点。",[195,103945,103946],{},"在 Python 中读取某个关键点的世界坐标。",[19,103948,103949,103950,300,103953,103956],{},"在后面的 Reacher 任务中，",[269,103951,103952],{},"tip",[269,103954,103955],{},"target"," 就会用 site 表示。",[14,103958,101974],{"id":101973},[316,103960,103962],{"className":31100,"code":103961,"language":31102,"meta":50,"style":50},"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",[269,103963,103964,103970,103980,103984,103988,103996,104001,104005,104009,104013,104018,104022,104027,104032,104037,104042,104046,104050,104054,104058,104062,104066,104078,104090,104098,104102,104117,104132,104136,104149,104164,104177,104190,104194,104210,104214,104218,104229,104241,104253,104265,104269,104273,104285],{"__ignoreMap":50},[324,103965,103966,103968],{"class":326,"line":327},[324,103967,31114],{"class":863},[324,103969,102022],{"class":867},[324,103971,103972,103974,103976,103978],{"class":326,"line":203},[324,103973,31114],{"class":863},[324,103975,32102],{"class":867},[324,103977,32105],{"class":863},[324,103979,32108],{"class":867},[324,103981,103982],{"class":326,"line":338},[324,103983,488],{"emptyLinePlaceholder":487},[324,103985,103986],{"class":326,"line":344},[324,103987,488],{"emptyLinePlaceholder":487},[324,103989,103990,103992,103994],{"class":326,"line":484},[324,103991,102035],{"class":916},[324,103993,14293],{"class":863},[324,103995,102040],{"class":738},[324,103997,103998],{"class":326,"line":491},[324,103999,104000],{"class":738},"\u003Cmujoco model=\"xml_basic\">\n",[324,104002,104003],{"class":326,"line":496},[324,104004,102050],{"class":738},[324,104006,104007],{"class":326,"line":502},[324,104008,488],{"emptyLinePlaceholder":487},[324,104010,104011],{"class":326,"line":508},[324,104012,102059],{"class":738},[324,104014,104015],{"class":326,"line":514},[324,104016,104017],{"class":738},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.7 0.7 0.7 1\"\u002F>\n",[324,104019,104020],{"class":326,"line":2343},[324,104021,488],{"emptyLinePlaceholder":487},[324,104023,104024],{"class":326,"line":2348},[324,104025,104026],{"class":738},"    \u003Cbody name=\"red_box\" pos=\"0 0 1\">\n",[324,104028,104029],{"class":326,"line":2354},[324,104030,104031],{"class":738},"      \u003Cfreejoint name=\"red_box_free\"\u002F>\n",[324,104033,104034],{"class":326,"line":2359},[324,104035,104036],{"class":738},"      \u003Cgeom name=\"red_box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[324,104038,104039],{"class":326,"line":2373},[324,104040,104041],{"class":738},"      \u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[324,104043,104044],{"class":326,"line":2378},[324,104045,102088],{"class":738},[324,104047,104048],{"class":326,"line":2384},[324,104049,102093],{"class":738},[324,104051,104052],{"class":326,"line":2405},[324,104053,102098],{"class":738},[324,104055,104056],{"class":326,"line":2410},[324,104057,96420],{"class":738},[324,104059,104060],{"class":326,"line":2424},[324,104061,488],{"emptyLinePlaceholder":487},[324,104063,104064],{"class":326,"line":2429},[324,104065,488],{"emptyLinePlaceholder":487},[324,104067,104068,104070,104072,104074,104076],{"class":326,"line":2458},[324,104069,32669],{"class":863},[324,104071,2703],{"class":734},[324,104073,102119],{"class":867},[324,104075,96408],{"class":916},[324,104077,4468],{"class":867},[324,104079,104080,104082,104084,104086,104088],{"class":326,"line":2463},[324,104081,102128],{"class":867},[324,104083,913],{"class":863},[324,104085,102133],{"class":867},[324,104087,102035],{"class":916},[324,104089,874],{"class":867},[324,104091,104092,104094,104096],{"class":326,"line":2480},[324,104093,102142],{"class":867},[324,104095,913],{"class":863},[324,104097,102147],{"class":867},[324,104099,104100],{"class":326,"line":2485},[324,104101,488],{"emptyLinePlaceholder":487},[324,104103,104104,104107,104109,104112,104115],{"class":326,"line":2490},[324,104105,104106],{"class":867},"    box_body_id ",[324,104108,913],{"class":863},[324,104110,104111],{"class":867}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, ",[324,104113,104114],{"class":738},"\"red_box\"",[324,104116,874],{"class":867},[324,104118,104119,104122,104124,104127,104130],{"class":326,"line":2495},[324,104120,104121],{"class":867},"    site_id ",[324,104123,913],{"class":863},[324,104125,104126],{"class":867}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, ",[324,104128,104129],{"class":738},"\"box_center\"",[324,104131,874],{"class":867},[324,104133,104134],{"class":326,"line":2509},[324,104135,488],{"emptyLinePlaceholder":487},[324,104137,104138,104140,104143,104145,104147],{"class":326,"line":2514},[324,104139,3830],{"class":863},[324,104141,104142],{"class":867}," box_body_id ",[324,104144,1774],{"class":863},[324,104146,4822],{"class":916},[324,104148,4468],{"class":867},[324,104150,104151,104154,104157,104159,104162],{"class":326,"line":3306},[324,104152,104153],{"class":863},"        raise",[324,104155,104156],{"class":916}," RuntimeError",[324,104158,868],{"class":867},[324,104160,104161],{"class":738},"\"body red_box not found\"",[324,104163,874],{"class":867},[324,104165,104166,104168,104171,104173,104175],{"class":326,"line":3320},[324,104167,3830],{"class":863},[324,104169,104170],{"class":867}," site_id ",[324,104172,1774],{"class":863},[324,104174,4822],{"class":916},[324,104176,4468],{"class":867},[324,104178,104179,104181,104183,104185,104188],{"class":326,"line":3328},[324,104180,104153],{"class":863},[324,104182,104156],{"class":916},[324,104184,868],{"class":867},[324,104186,104187],{"class":738},"\"site box_center not found\"",[324,104189,874],{"class":867},[324,104191,104192],{"class":326,"line":3333},[324,104193,488],{"emptyLinePlaceholder":487},[324,104195,104196,104198,104200,104202,104204,104206,104208],{"class":326,"line":3339},[324,104197,3930],{"class":863},[324,104199,102222],{"class":867},[324,104201,26767],{"class":863},[324,104203,33165],{"class":916},[324,104205,868],{"class":867},[324,104207,2453],{"class":916},[324,104209,31508],{"class":867},[324,104211,104212],{"class":326,"line":3345},[324,104213,102237],{"class":867},[324,104215,104216],{"class":326,"line":3350},[324,104217,488],{"emptyLinePlaceholder":487},[324,104219,104220,104222,104224,104227],{"class":326,"line":8677},[324,104221,32021],{"class":916},[324,104223,868],{"class":867},[324,104225,104226],{"class":738},"\"simulation time:\"",[324,104228,102199],{"class":867},[324,104230,104231,104233,104235,104238],{"class":326,"line":8701},[324,104232,32021],{"class":916},[324,104234,868],{"class":867},[324,104236,104237],{"class":738},"\"box body position:\"",[324,104239,104240],{"class":867},", data.xpos[box_body_id].copy())\n",[324,104242,104243,104245,104247,104250],{"class":326,"line":8706},[324,104244,32021],{"class":916},[324,104246,868],{"class":867},[324,104248,104249],{"class":738},"\"site position:\"",[324,104251,104252],{"class":867},", data.site_xpos[site_id].copy())\n",[324,104254,104255,104257,104259,104262],{"class":326,"line":8712},[324,104256,32021],{"class":916},[324,104258,868],{"class":867},[324,104260,104261],{"class":738},"\"box qpos:\"",[324,104263,104264],{"class":867},", np.array(data.qpos))\n",[324,104266,104267],{"class":326,"line":8739},[324,104268,488],{"emptyLinePlaceholder":487},[324,104270,104271],{"class":326,"line":8744},[324,104272,488],{"emptyLinePlaceholder":487},[324,104274,104275,104277,104279,104281,104283],{"class":326,"line":8750},[324,104276,2262],{"class":863},[324,104278,31942],{"class":916},[324,104280,102280],{"class":863},[324,104282,102283],{"class":738},[324,104284,4468],{"class":867},[324,104286,104287],{"class":326,"line":8762},[324,104288,102290],{"class":867},[19,104290,104291],{},"保存为：",[316,104293,104295],{"className":24549,"code":104294,"language":24551,"meta":50,"style":50},"touch ch2_xml_basic.py\n",[269,104296,104297],{"__ignoreMap":50},[324,104298,104299,104301],{"class":326,"line":327},[324,104300,102004],{"class":734},[324,104302,104303],{"class":738}," ch2_xml_basic.py\n",[19,104305,103022],{},[316,104307,104309],{"className":24549,"code":104308,"language":24551,"meta":50,"style":50},"python ch2_xml_basic.py\n",[269,104310,104311],{"__ignoreMap":50},[324,104312,104313,104315],{"class":326,"line":327},[324,104314,31102],{"class":734},[324,104316,104303],{"class":738},[35,104318,102293],{"id":102293},[19,104320,104321],{},"用名字查找 body：",[316,104323,104325],{"className":31100,"code":104324,"language":31102,"meta":50,"style":50},"box_body_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, \"red_box\")\n",[269,104326,104327],{"__ignoreMap":50},[324,104328,104329,104332,104334,104336,104338],{"class":326,"line":327},[324,104330,104331],{"class":867},"box_body_id ",[324,104333,913],{"class":863},[324,104335,104111],{"class":867},[324,104337,104114],{"class":738},[324,104339,874],{"class":867},[19,104341,104342],{},"MuJoCo 内部主要用数字 ID 管理对象。你在 XML 里写的是名字，Python 读取数组时常常需要先把名字转成 ID。",[19,104344,104345],{},"用名字查找 site：",[316,104347,104349],{"className":31100,"code":104348,"language":31102,"meta":50,"style":50},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"box_center\")\n",[269,104350,104351],{"__ignoreMap":50},[324,104352,104353,104356,104358,104360,104362],{"class":326,"line":327},[324,104354,104355],{"class":867},"site_id ",[324,104357,913],{"class":863},[324,104359,104126],{"class":867},[324,104361,104129],{"class":738},[324,104363,874],{"class":867},[19,104365,104366,104367,104370,104371,104374],{},"注意第二个参数是对象类型。查 body 就用 ",[269,104368,104369],{},"mjOBJ_BODY","，查 site 就用 ",[269,104372,104373],{},"mjOBJ_SITE","。名字相同但类型不同，也不是同一个对象。",[19,104376,104377],{},"读取世界坐标：",[316,104379,104381],{"className":31100,"code":104380,"language":31102,"meta":50,"style":50},"data.xpos[box_body_id]\ndata.site_xpos[site_id]\n",[269,104382,104383,104388],{"__ignoreMap":50},[324,104384,104385],{"class":326,"line":327},[324,104386,104387],{"class":867},"data.xpos[box_body_id]\n",[324,104389,104390],{"class":326,"line":203},[324,104391,104392],{"class":867},"data.site_xpos[site_id]\n",[19,104394,104395,104398,104399,104402],{},[269,104396,104397],{},"xpos"," 是 body 的世界坐标，",[269,104400,104401],{},"site_xpos"," 是 site 的世界坐标。",[35,104404,102429],{"id":102429},[316,104406,104408],{"className":31100,"code":104407,"language":31102,"meta":50,"style":50},"import mujoco\nimport numpy as np\n",[269,104409,104410,104416],{"__ignoreMap":50},[324,104411,104412,104414],{"class":326,"line":327},[324,104413,31114],{"class":863},[324,104415,102022],{"class":867},[324,104417,104418,104420,104422,104424],{"class":326,"line":203},[324,104419,31114],{"class":863},[324,104421,32102],{"class":867},[324,104423,32105],{"class":863},[324,104425,32108],{"class":867},[19,104427,104428,104429,104432,104433,104436,104437,1077,104440,29107],{},"第一行导入 MuJoCo。第二行导入 NumPy，并给它起别名 ",[269,104430,104431],{},"np","。NumPy 是 Python 里处理数组和数值计算最常用的库。",[269,104434,104435],{},"as np"," 是习惯写法，后面就可以写 ",[269,104438,104439],{},"np.array(...)",[269,104441,104442],{},"np.round(...)",[316,104444,104445],{"className":31100,"code":102316,"language":31102,"meta":50,"style":50},[269,104446,104447,104455,104459],{"__ignoreMap":50},[324,104448,104449,104451,104453],{"class":326,"line":327},[324,104450,102035],{"class":916},[324,104452,14293],{"class":863},[324,104454,102040],{"class":738},[324,104456,104457],{"class":326,"line":203},[324,104458,102331],{"class":738},[324,104460,104461],{"class":326,"line":338},[324,104462,96420],{"class":738},[19,104464,104465,104466,29107],{},"这里把 MJCF 模型保存成字符串。Python 不会理解 XML 的物理含义，真正解析 XML 的是 ",[269,104467,104468],{},"mujoco.MjModel.from_xml_string(XML)",[316,104470,104472],{"className":53789,"code":104471,"language":53791,"meta":50,"style":50},"\u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[269,104473,104474],{"__ignoreMap":50},[324,104475,104476,104478,104480,104482,104484,104486,104488,104490,104493,104495,104497,104500,104502,104504,104507],{"class":326,"line":327},[324,104477,1774],{"class":867},[324,104479,103931],{"class":52022},[324,104481,15649],{"class":734},[324,104483,913],{"class":867},[324,104485,104129],{"class":738},[324,104487,101827],{"class":734},[324,104489,913],{"class":867},[324,104491,104492],{"class":738},"\"0 0 0\"",[324,104494,101857],{"class":734},[324,104496,913],{"class":867},[324,104498,104499],{"class":738},"\"0.03\"",[324,104501,79489],{"class":734},[324,104503,913],{"class":867},[324,104505,104506],{"class":738},"\"0 1 0 1\"",[324,104508,101865],{"class":867},[19,104510,104511,104513,104514,104517,104518,104520,104521,104524],{},[269,104512,103931],{}," 是标记点。",[269,104515,104516],{},"pos=\"0 0 0\""," 表示这个点在 red_box body 的局部原点。",[269,104519,103891],{}," 表示显示出来的小球大小。",[269,104522,104523],{},"rgba=\"0 1 0 1\""," 表示绿色。",[316,104526,104527],{"className":31100,"code":104324,"language":31102,"meta":50,"style":50},[269,104528,104529],{"__ignoreMap":50},[324,104530,104531,104533,104535,104537,104539],{"class":326,"line":327},[324,104532,104331],{"class":867},[324,104534,913],{"class":863},[324,104536,104111],{"class":867},[324,104538,104114],{"class":738},[324,104540,874],{"class":867},[19,104542,104543,104544,104546],{},"这行的作用是：根据名字 ",[269,104545,104114],{}," 找到对应 body 的数字 ID。MuJoCo 内部数组不用名字索引，而是用数字索引，所以要先把名字转换成 ID。",[19,104548,104549],{},"拆开看：",[192,104551,104552,104558,104563,104569],{},[195,104553,104554,104557],{},[269,104555,104556],{},"mujoco.mj_name2id"," 是 MuJoCo 提供的查找函数。",[195,104559,104560,104562],{},[269,104561,102806],{}," 是被查询的模型。",[195,104564,104565,104568],{},[269,104566,104567],{},"mujoco.mjtObj.mjOBJ_BODY"," 表示要找的是 body。",[195,104570,104571,104573],{},[269,104572,104114],{}," 是 XML 里写的名字。",[316,104575,104576],{"className":31100,"code":104348,"language":31102,"meta":50,"style":50},[269,104577,104578],{"__ignoreMap":50},[324,104579,104580,104582,104584,104586,104588],{"class":326,"line":327},[324,104581,104355],{"class":867},[324,104583,913],{"class":863},[324,104585,104126],{"class":867},[324,104587,104129],{"class":738},[324,104589,874],{"class":867},[19,104591,104592,104593,29107],{},"这行同理，只是查找对象类型换成了 site，名字换成了 ",[269,104594,104129],{},[316,104596,104598],{"className":31100,"code":104597,"language":31102,"meta":50,"style":50},"if box_body_id \u003C 0:\n    raise RuntimeError(\"body red_box not found\")\n",[269,104599,104600,104612],{"__ignoreMap":50},[324,104601,104602,104604,104606,104608,104610],{"class":326,"line":327},[324,104603,2262],{"class":863},[324,104605,104142],{"class":867},[324,104607,1774],{"class":863},[324,104609,4822],{"class":916},[324,104611,4468],{"class":867},[324,104613,104614,104617,104619,104621,104623],{"class":326,"line":203},[324,104615,104616],{"class":863},"    raise",[324,104618,104156],{"class":916},[324,104620,868],{"class":867},[324,104622,104161],{"class":738},[324,104624,874],{"class":867},[19,104626,104627,104629,104630,104633,104634,104637,104638,104641],{},[269,104628,2262],{}," 是条件判断。",[269,104631,104632],{},"mj_name2id"," 找不到对象时会返回 ",[269,104635,104636],{},"-1","。所以如果 ID 小于 0，就说明名字写错了。",[269,104639,104640],{},"raise RuntimeError(...)"," 表示主动抛出错误，让程序停下来并告诉你原因。",[316,104643,104645],{"className":31100,"code":104644,"language":31102,"meta":50,"style":50},"for _ in range(200):\n    mujoco.mj_step(model, data)\n",[269,104646,104647,104663],{"__ignoreMap":50},[324,104648,104649,104651,104653,104655,104657,104659,104661],{"class":326,"line":327},[324,104650,3754],{"class":863},[324,104652,102222],{"class":867},[324,104654,26767],{"class":863},[324,104656,33165],{"class":916},[324,104658,868],{"class":867},[324,104660,2453],{"class":916},[324,104662,31508],{"class":867},[324,104664,104665],{"class":326,"line":203},[324,104666,102420],{"class":867},[19,104668,104669],{},"这段让仿真运行 200 步。因为 timestep 是 0.01，所以仿真时间约为 2 秒。",[316,104671,104673],{"className":31100,"code":104672,"language":31102,"meta":50,"style":50},"print(\"box body position:\", data.xpos[box_body_id].copy())\n",[269,104674,104675],{"__ignoreMap":50},[324,104676,104677,104679,104681,104683],{"class":326,"line":327},[324,104678,31137],{"class":916},[324,104680,868],{"class":867},[324,104682,104237],{"class":738},[324,104684,104240],{"class":867},[19,104686,104687,104689,104690,104693],{},[269,104688,101800],{}," 保存所有 body 的世界坐标。",[269,104691,104692],{},"data.xpos[box_body_id]"," 表示取出 red_box 这个 body 的世界坐标。",[316,104695,104697],{"className":31100,"code":104696,"language":31102,"meta":50,"style":50},"print(\"site position:\", data.site_xpos[site_id].copy())\n",[269,104698,104699],{"__ignoreMap":50},[324,104700,104701,104703,104705,104707],{"class":326,"line":327},[324,104702,31137],{"class":916},[324,104704,868],{"class":867},[324,104706,104249],{"class":738},[324,104708,104252],{"class":867},[19,104710,104711,104714,104715,104717],{},[269,104712,104713],{},"data.site_xpos"," 保存所有 site 的世界坐标。因为 ",[269,104716,103698],{}," 放在 box 的中心，所以它的位置通常和 box body 的位置接近。",[316,104719,104721],{"className":31100,"code":104720,"language":31102,"meta":50,"style":50},"print(\"box qpos:\", np.array(data.qpos))\n",[269,104722,104723],{"__ignoreMap":50},[324,104724,104725,104727,104729,104731],{"class":326,"line":327},[324,104726,31137],{"class":916},[324,104728,868],{"class":867},[324,104730,104261],{"class":738},[324,104732,104264],{"class":867},[19,104734,104735,104736,104739],{},"这里打印广义位置数组。",[269,104737,104738],{},"np.array(data.qpos)"," 把 MuJoCo 内部数组转成 NumPy 数组，方便显示和后续计算。",[14,104741,103037],{"id":103036},[19,104743,104744,104745,104748,104749,29107],{},"程序会输出 ",[269,104746,104747],{},"simulation time","、box 的世界坐标、site 的世界坐标和 ",[269,104750,104751],{},"qpos",[19,104753,104754,104756,104757,104760,104761,104764],{},[269,104755,104692],{}," 是 body 的世界坐标位置。",[269,104758,104759],{},"data.site_xpos[site_id]"," 是 site 的世界坐标位置。",[269,104762,104763],{},"mujoco.mj_name2id(...)"," 用名字查找模型元素 ID。",[19,104766,82944,104767,83252,104769,104771],{},[269,104768,103698],{},[269,104770,104516],{},"，那么它位于 box body 的局部原点。由于这个例子里 site 放在 body 中心，所以 body position 和 site position 通常非常接近。",[19,104773,104774],{},"如果你把 site 改成：",[316,104776,104778],{"className":53789,"code":104777,"language":53791,"meta":50,"style":50},"\u003Csite name=\"box_top\" pos=\"0 0 0.15\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[269,104779,104780],{"__ignoreMap":50},[324,104781,104782,104784,104786,104788,104790,104793,104795,104797,104800,104802,104804,104806,104808,104810,104812],{"class":326,"line":327},[324,104783,1774],{"class":867},[324,104785,103931],{"class":52022},[324,104787,15649],{"class":734},[324,104789,913],{"class":867},[324,104791,104792],{"class":738},"\"box_top\"",[324,104794,101827],{"class":734},[324,104796,913],{"class":867},[324,104798,104799],{"class":738},"\"0 0 0.15\"",[324,104801,101857],{"class":734},[324,104803,913],{"class":867},[324,104805,104499],{"class":738},[324,104807,79489],{"class":734},[324,104809,913],{"class":867},[324,104811,104506],{"class":738},[324,104813,101865],{"class":867},[19,104815,104816,104817,104820],{},"那么 site 会在盒子局部坐标的上方，输出的 ",[269,104818,104819],{},"site position"," 就会比 body position 的 z 坐标更高。",[14,104822,103069],{"id":103068},[192,104824,104825,104834,104837,104844,104850,104861],{},[195,104826,103132,104827,104829,104830,103135,104832,29107],{},[269,104828,103702],{}," 的初始高度从 ",[269,104831,1082],{},[269,104833,944],{},[195,104835,104836],{},"重新运行程序。",[195,104838,104839,104840,104843],{},"观察 ",[269,104841,104842],{},"box qpos"," 和最终位置是否变化。",[195,104845,104846,104847,104849],{},"故意把 ",[269,104848,103931],{}," 名称改错，确认程序能报错。",[195,104851,103132,104852,104854,104855,103135,104857,104860],{},[269,104853,101841],{}," 的颜色 ",[269,104856,102753],{},[269,104858,104859],{},"rgba=\"0 0 1 1\"","，后面用 viewer 看颜色变化。",[195,104862,103132,104863,83252,104865,103135,104868,104871,104872,104874],{},[269,104864,103698],{},[269,104866,104867],{},"pos",[269,104869,104870],{},"0 0 0.2","，观察 ",[269,104873,104819],{}," 如何变化。",[14,104876,103174],{"id":103173},[35,104878,104880],{"id":104879},"xml-error-schema-violation",[269,104881,104882],{},"XML Error: Schema violation",[19,104884,104885],{},"说明 XML 标签或属性不合法。查官方 XML Reference，确认标签放在正确父标签下面，属性名拼写正确。",[35,104887,104889,82012,104891],{"id":104888},"mj_name2id-返回-1",[269,104890,104632],{},[269,104892,104636],{},[19,104894,104895,104896,104899],{},"说明名字没有找到。检查 XML 中 ",[269,104897,104898],{},"name=\"...\"","，并确认对象类型正确。",[35,104901,104902],{"id":104902},"物体不下落",[19,104904,103244],{},[192,104906,104907,104912,104917],{},[195,104908,104909,104910],{},"body 是否有 ",[269,104911,102341],{},[195,104913,104914,104915],{},"gravity 是否为 ",[269,104916,103310],{},[195,104918,104919,104920,104922],{},"body 是否被固定在 ",[269,104921,102562],{}," 中",[35,104924,104925],{"id":104925},"坐标看起来不符合预期",[19,104927,104928],{},"先区分两种坐标：",[1003,104930,104931,104940],{},[1006,104932,104933],{},[1009,104934,104935,104938],{},[1012,104936,104937],{"align":24463},"坐标",[1012,104939,101422],{"align":24463},[1049,104941,104942,104952],{},[1009,104943,104944,104949],{},[1054,104945,104946,104947],{"align":24463},"XML 里的 ",[269,104948,104867],{},[1054,104950,104951],{"align":24463},"相对父 body 的局部坐标",[1009,104953,104954,104960],{},[1054,104955,104956,25702,104958],{"align":24463},[269,104957,101800],{},[269,104959,104713],{},[1054,104961,104962],{"align":24463},"仿真更新后的世界坐标",[19,104964,104965,104966,104968,104969,83261,104972,104974],{},"如果你修改了 ",[269,104967,101791],{},"，但还没调用 ",[269,104970,104971],{},"mj_forward",[269,104973,101936],{},"，世界坐标可能还没有更新。",[14,104976,103328],{"id":103327},[19,104978,104979],{},"MJCF 建模先掌握四件事：",[192,104981,104982,104987,104992,104997],{},[195,104983,104984,104986],{},[269,104985,52522],{}," 表示刚体层级。",[195,104988,104989,104991],{},[269,104990,101841],{}," 表示形状、碰撞和质量。",[195,104993,104994,104996],{},[269,104995,103677],{}," 决定 body 能不能动、怎么动。",[195,104998,104999,105001],{},[269,105000,103931],{}," 用来标记关键点，方便 Python 读取位置。",[19,105003,105004],{},"只要能看懂 body、geom、joint、site，后面搭建 Cartpole 和 Reacher 就不会迷路。",[775,105006,105007],{},"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":50,"searchDepth":203,"depth":203,"links":105009},[105010,105011,105012,105018,105022,105023,105024,105031],{"id":101368,"depth":203,"text":101369},{"id":101491,"depth":203,"text":101492},{"id":101765,"depth":203,"text":101766,"children":105013},[105014,105015,105016,105017],{"id":103681,"depth":338,"text":103681},{"id":103795,"depth":338,"text":103795},{"id":103821,"depth":338,"text":103822},{"id":103925,"depth":338,"text":103926},{"id":101973,"depth":203,"text":101974,"children":105019},[105020,105021],{"id":102293,"depth":338,"text":102293},{"id":102429,"depth":338,"text":102429},{"id":103036,"depth":203,"text":103037},{"id":103068,"depth":203,"text":103069},{"id":103173,"depth":203,"text":103174,"children":105025},[105026,105027,105029,105030],{"id":104879,"depth":338,"text":104882},{"id":104888,"depth":338,"text":105028},"mj_name2id 返回 -1",{"id":104902,"depth":338,"text":104902},{"id":104925,"depth":338,"text":104925},{"id":103327,"depth":203,"text":103328},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch2-xmlmjcf",{"title":103375,"description":50},"wiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础","Y8Y5A098PzvFI7G-_y7JK19FBEdoto95izJP4Ykw-IM",{"id":105038,"title":105039,"body":105040,"description":50,"extension":792,"meta":106535,"navigation":487,"path":106536,"seo":106537,"stem":106538,"__hash__":106539},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口.md","3.Python 控制接口：读取状态与推进仿真",{"type":7,"value":105041,"toc":106507},[105042,105045,105047,105050,105053,105091,105094,105100,105103,105105,105107,105134,105136,105150,105152,105193,105195,105219,105221,105224,105233,105242,105245,105254,105262,105271,105274,105284,105287,105339,105346,105352,105360,105408,105411,105430,105433,105441,105445,105454,105487,105489,105837,105839,105851,105853,105864,105866,105869,105890,105896,105899,105924,105934,105937,105945,105948,105951,105972,105983,105985,106005,106008,106029,106038,106057,106063,106088,106091,106105,106112,106136,106139,106147,106156,106172,106184,106192,106201,106203,106206,106230,106235,106238,106260,106262,106301,106303,106310,106312,106320,106323,106326,106338,106379,106386,106397,106404,106407,106456,106459,106462,106468,106470,106475,106501,106504],[10,105043,105039],{"id":105044},"_3python-控制接口读取状态与推进仿真",[14,105046,101369],{"id":101368},[19,105048,105049],{},"本章理解 Python 如何控制 MuJoCo 仿真。",[19,105051,105052],{},"你将学习:",[192,105054,105055,105060,105065,105069,105074,105085],{},[195,105056,105057],{},[269,105058,105059],{},"MjModel.from_xml_string",[195,105061,105062],{},[269,105063,105064],{},"MjData(model)",[195,105066,105067],{},[269,105068,101936],{},[195,105070,105071],{},[269,105072,105073],{},"mj_resetData",[195,105075,105076,105077,1077,105079,1077,105082],{},"读取 ",[269,105078,104751],{},[269,105080,105081],{},"qvel",[269,105083,105084],{},"ctrl",[195,105086,105087,105088],{},"使用 ",[269,105089,105090],{},"model.opt.timestep",[19,105092,105093],{},"从这一章开始，你要把 MuJoCo 当成一个“状态机”来看：",[316,105095,105098],{"className":105096,"code":105097,"language":5916,"meta":50},[5914],"当前状态 data\n    + 当前控制 data.ctrl\n    + 模型参数 model\n          ↓\n      mj_step\n          ↓\n新的状态 data\n",[269,105099,105097],{"__ignoreMap":50},[19,105101,105102],{},"后面写控制器、奖励函数、强化学习环境，都是围绕这个状态机展开。",[14,105104,101492],{"id":101491},[19,105106,101495],{},[316,105108,105110],{"className":24549,"code":105109,"language":24551,"meta":50,"style":50},"sudo dnf install -y python3 python3-pip mesa-libGL mesa-dri-drivers glfw\n",[269,105111,105112],{"__ignoreMap":50},[324,105113,105114,105116,105118,105120,105122,105125,105127,105129,105131],{"class":326,"line":327},[324,105115,735],{"class":734},[324,105117,27038],{"class":738},[324,105119,760],{"class":738},[324,105121,27123],{"class":916},[324,105123,105124],{"class":738}," python3",[324,105126,101520],{"class":738},[324,105128,103222],{"class":738},[324,105130,101536],{"class":738},[324,105132,105133],{"class":738}," glfw\n",[19,105135,103540],{},[316,105137,105138],{"className":24549,"code":101641,"language":24551,"meta":50,"style":50},[269,105139,105140],{"__ignoreMap":50},[324,105141,105142,105144,105146,105148],{"class":326,"line":327},[324,105143,24558],{"class":734},[324,105145,760],{"class":738},[324,105147,101652],{"class":738},[324,105149,101655],{"class":738},[19,105151,103557],{},[316,105153,105155],{"className":24549,"code":105154,"language":24551,"meta":50,"style":50},"conda create -n mujoco-python-api python=3.10 -y\nconda activate mujoco-python-api\npip install \"mujoco>=2.3\" numpy\n",[269,105156,105157,105174,105183],{"__ignoreMap":50},[324,105158,105159,105161,105163,105165,105168,105170,105172],{"class":326,"line":327},[324,105160,31052],{"class":734},[324,105162,29898],{"class":738},[324,105164,25839],{"class":916},[324,105166,105167],{"class":738}," mujoco-python-api",[324,105169,101697],{"class":738},[324,105171,101700],{"class":916},[324,105173,101703],{"class":916},[324,105175,105176,105178,105180],{"class":326,"line":203},[324,105177,31052],{"class":734},[324,105179,101710],{"class":738},[324,105181,105182],{"class":738}," mujoco-python-api\n",[324,105184,105185,105187,105189,105191],{"class":326,"line":338},[324,105186,24558],{"class":734},[324,105188,760],{"class":738},[324,105190,101652],{"class":738},[324,105192,101655],{"class":738},[19,105194,101726],{},[192,105196,105197,105204,105213],{},[195,105198,105199,300,105201,105203],{},[269,105200,101397],{},[269,105202,101402],{}," 是官方 Python bindings 的类名。",[195,105205,105206,105207,105210,105211,29107],{},"官方 Python API 中结构体名称使用大写开头，例如 C API 的 ",[269,105208,105209],{},"mjModel"," 在 Python 中是 ",[269,105212,101431],{},[195,105214,105215,105216,29107],{},"不要使用 ",[269,105217,105218],{},"sim = mujoco_py.MjSim(...)",[14,105220,101766],{"id":101765},[19,105222,105223],{},"仿真推进核心代码:",[316,105225,105227],{"className":31100,"code":105226,"language":31102,"meta":50,"style":50},"mujoco.mj_step(model, data)\n",[269,105228,105229],{"__ignoreMap":50},[324,105230,105231],{"class":326,"line":327},[324,105232,105226],{"class":867},[19,105234,105235,105236,1077,105238,1077,105240,29107],{},"这一步会根据当前状态和控制量计算力，推进动力学，并更新 ",[269,105237,101791],{},[269,105239,101794],{},[269,105241,101788],{},[19,105243,105244],{},"重置仿真:",[316,105246,105248],{"className":31100,"code":105247,"language":31102,"meta":50,"style":50},"mujoco.mj_resetData(model, data)\n",[269,105249,105250],{"__ignoreMap":50},[324,105251,105252],{"class":326,"line":327},[324,105253,105247],{"class":867},[19,105255,105256,105257,83261,105259,105261],{},"如果手动修改了 ",[269,105258,101791],{},[269,105260,101794],{},"，通常应调用:",[316,105263,105265],{"className":31100,"code":105264,"language":31102,"meta":50,"style":50},"mujoco.mj_forward(model, data)\n",[269,105266,105267],{"__ignoreMap":50},[324,105268,105269],{"class":326,"line":327},[324,105270,105264],{"class":867},[19,105272,105273],{},"让 MuJoCo 根据新状态更新派生量，例如 body 世界坐标。",[35,105275,105277,1077,105279,1077,105281,105283],{"id":105276},"qposqvelctrl-是什么",[269,105278,104751],{},[269,105280,105081],{},[269,105282,105084],{}," 是什么",[19,105285,105286],{},"这三个数组是 MuJoCo Python 控制里最常见的数组：",[1003,105288,105289,105301],{},[1006,105290,105291],{},[1009,105292,105293,105296,105298],{},[1012,105294,105295],{"align":24463},"字段",[1012,105297,101422],{"align":24463},[1012,105299,105300],{"align":24463},"谁来修改",[1049,105302,105303,105315,105327],{},[1009,105304,105305,105309,105312],{},[1054,105306,105307],{"align":24463},[269,105308,101791],{},[1054,105310,105311],{"align":24463},"广义位置，例如小车位置、关节角、自由物体位置姿态",[1054,105313,105314],{"align":24463},"MuJoCo 更新，也可以手动设置初始状态",[1009,105316,105317,105321,105324],{},[1054,105318,105319],{"align":24463},[269,105320,101794],{},[1054,105322,105323],{"align":24463},"广义速度，例如小车速度、关节角速度",[1054,105325,105326],{"align":24463},"MuJoCo 更新，也可以手动清零",[1009,105328,105329,105333,105336],{},[1054,105330,105331],{"align":24463},[269,105332,101797],{},[1054,105334,105335],{"align":24463},"actuator 的控制输入",[1054,105337,105338],{"align":24463},"主要由你的控制代码写入",[19,105340,9754,105341,300,105343,105345],{},[269,105342,104751],{},[269,105344,105081],{}," 不一定同维。自由刚体就是典型例子：",[316,105347,105350],{"className":105348,"code":105349,"language":5916,"meta":50},[5914],"freejoint: qpos 7 维，qvel 6 维\n",[269,105351,105349],{"__ignoreMap":50},[35,105353,105355,300,105357,105359],{"id":105354},"mj_step-和-mj_forward-的区别",[269,105356,101936],{},[269,105358,104971],{}," 的区别",[1003,105361,105362,105375],{},[1006,105363,105364],{},[1009,105365,105366,105369,105372],{},[1012,105367,105368],{"align":24463},"函数",[1012,105370,105371],{"align":24463},"是否推进时间",[1012,105373,105374],{"align":24463},"什么时候用",[1049,105376,105377,105390],{},[1009,105378,105379,105384,105387],{},[1054,105380,105381],{"align":24463},[269,105382,105383],{},"mj_step(model, data)",[1054,105385,105386],{"align":24463},"是",[1054,105388,105389],{"align":24463},"正常仿真循环，每调用一次前进一步",[1009,105391,105392,105397,105400],{},[1054,105393,105394],{"align":24463},[269,105395,105396],{},"mj_forward(model, data)",[1054,105398,105399],{"align":24463},"否",[1054,105401,105402,105403,1077,105405,105407],{"align":24463},"手动改了 ",[269,105404,104751],{},[269,105406,105081],{}," 后，刷新派生量",[19,105409,105410],{},"例如你写：",[316,105412,105414],{"className":31100,"code":105413,"language":31102,"meta":50,"style":50},"data.qpos[2] = 2.0\n",[269,105415,105416],{"__ignoreMap":50},[324,105417,105418,105421,105423,105425,105427],{"class":326,"line":327},[324,105419,105420],{"class":867},"data.qpos[",[324,105422,944],{"class":916},[324,105424,5172],{"class":867},[324,105426,913],{"class":863},[324,105428,105429],{"class":916}," 2.0\n",[19,105431,105432],{},"这只是改了“原始状态数组”。MuJoCo 还没有重新计算 body 世界坐标、site 世界坐标等派生数据，所以要接着调用：",[316,105434,105435],{"className":31100,"code":105264,"language":31102,"meta":50,"style":50},[269,105436,105437],{"__ignoreMap":50},[324,105438,105439],{"class":326,"line":327},[324,105440,105264],{"class":867},[35,105442,105444],{"id":105443},"为什么-reset-后要重新设置状态","为什么 reset 后要重新设置状态",[19,105446,105447,105450,105451,105453],{},[269,105448,105449],{},"mujoco.mj_resetData(model, data)"," 会把 ",[269,105452,34123],{}," 重置回模型默认状态。如果你想每次 episode 从随机姿态开始，常见写法是：",[316,105455,105457],{"className":31100,"code":105456,"language":31102,"meta":50,"style":50},"mujoco.mj_resetData(model, data)\ndata.qpos[:] = random_qpos\ndata.qvel[:] = 0.0\nmujoco.mj_forward(model, data)\n",[269,105458,105459,105463,105473,105483],{"__ignoreMap":50},[324,105460,105461],{"class":326,"line":327},[324,105462,105247],{"class":867},[324,105464,105465,105468,105470],{"class":326,"line":203},[324,105466,105467],{"class":867},"data.qpos[:] ",[324,105469,913],{"class":863},[324,105471,105472],{"class":867}," random_qpos\n",[324,105474,105475,105478,105480],{"class":326,"line":338},[324,105476,105477],{"class":867},"data.qvel[:] ",[324,105479,913],{"class":863},[324,105481,105482],{"class":916}," 0.0\n",[324,105484,105485],{"class":326,"line":344},[324,105486,105264],{"class":867},[14,105488,101974],{"id":101973},[316,105490,105492],{"className":31100,"code":105491,"language":31102,"meta":50,"style":50},"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",[269,105493,105494,105500,105510,105514,105518,105526,105531,105535,105539,105543,105548,105552,105557,105562,105567,105571,105575,105579,105583,105587,105591,105610,105617,105629,105640,105656,105672,105676,105680,105692,105704,105712,105716,105727,105731,105747,105751,105755,105764,105768,105773,105782,105786,105799,105804,105813,105817,105821,105833],{"__ignoreMap":50},[324,105495,105496,105498],{"class":326,"line":327},[324,105497,31114],{"class":863},[324,105499,102022],{"class":867},[324,105501,105502,105504,105506,105508],{"class":326,"line":203},[324,105503,31114],{"class":863},[324,105505,32102],{"class":867},[324,105507,32105],{"class":863},[324,105509,32108],{"class":867},[324,105511,105512],{"class":326,"line":338},[324,105513,488],{"emptyLinePlaceholder":487},[324,105515,105516],{"class":326,"line":344},[324,105517,488],{"emptyLinePlaceholder":487},[324,105519,105520,105522,105524],{"class":326,"line":484},[324,105521,102035],{"class":916},[324,105523,14293],{"class":863},[324,105525,102040],{"class":738},[324,105527,105528],{"class":326,"line":491},[324,105529,105530],{"class":738},"\u003Cmujoco model=\"state_api\">\n",[324,105532,105533],{"class":326,"line":496},[324,105534,102050],{"class":738},[324,105536,105537],{"class":326,"line":502},[324,105538,488],{"emptyLinePlaceholder":487},[324,105540,105541],{"class":326,"line":508},[324,105542,102059],{"class":738},[324,105544,105545],{"class":326,"line":514},[324,105546,105547],{"class":738},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\"\u002F>\n",[324,105549,105550],{"class":326,"line":2343},[324,105551,488],{"emptyLinePlaceholder":487},[324,105553,105554],{"class":326,"line":2348},[324,105555,105556],{"class":738},"    \u003Cbody name=\"ball\" pos=\"0 0 1\">\n",[324,105558,105559],{"class":326,"line":2354},[324,105560,105561],{"class":738},"      \u003Cfreejoint name=\"ball_free\"\u002F>\n",[324,105563,105564],{"class":326,"line":2359},[324,105565,105566],{"class":738},"      \u003Cgeom name=\"ball_geom\" type=\"sphere\" size=\"0.1\" mass=\"1\" rgba=\"0 0.2 1 1\"\u002F>\n",[324,105568,105569],{"class":326,"line":2373},[324,105570,102088],{"class":738},[324,105572,105573],{"class":326,"line":2378},[324,105574,102093],{"class":738},[324,105576,105577],{"class":326,"line":2384},[324,105578,102098],{"class":738},[324,105580,105581],{"class":326,"line":2405},[324,105582,96420],{"class":738},[324,105584,105585],{"class":326,"line":2410},[324,105586,488],{"emptyLinePlaceholder":487},[324,105588,105589],{"class":326,"line":2424},[324,105590,488],{"emptyLinePlaceholder":487},[324,105592,105593,105595,105598,105601,105603,105606,105608],{"class":326,"line":2429},[324,105594,32669],{"class":863},[324,105596,105597],{"class":734}," print_state",[324,105599,105600],{"class":867},"(prefix: ",[324,105602,2034],{"class":916},[324,105604,105605],{"class":867},", model: mujoco.MjModel, data: mujoco.MjData) -> ",[324,105607,96408],{"class":916},[324,105609,4468],{"class":867},[324,105611,105612,105614],{"class":326,"line":2458},[324,105613,32021],{"class":916},[324,105615,105616],{"class":867},"(prefix)\n",[324,105618,105619,105621,105623,105626],{"class":326,"line":2463},[324,105620,32021],{"class":916},[324,105622,868],{"class":867},[324,105624,105625],{"class":738},"\"  timestep:\"",[324,105627,105628],{"class":867},", model.opt.timestep)\n",[324,105630,105631,105633,105635,105638],{"class":326,"line":2480},[324,105632,32021],{"class":916},[324,105634,868],{"class":867},[324,105636,105637],{"class":738},"\"  time:\"",[324,105639,102199],{"class":867},[324,105641,105642,105644,105646,105649,105652,105654],{"class":326,"line":2485},[324,105643,32021],{"class":916},[324,105645,868],{"class":867},[324,105647,105648],{"class":738},"\"  qpos:\"",[324,105650,105651],{"class":867},", np.round(data.qpos.copy(), ",[324,105653,1157],{"class":916},[324,105655,31219],{"class":867},[324,105657,105658,105660,105662,105665,105668,105670],{"class":326,"line":2490},[324,105659,32021],{"class":916},[324,105661,868],{"class":867},[324,105663,105664],{"class":738},"\"  qvel:\"",[324,105666,105667],{"class":867},", np.round(data.qvel.copy(), ",[324,105669,1157],{"class":916},[324,105671,31219],{"class":867},[324,105673,105674],{"class":326,"line":2495},[324,105675,488],{"emptyLinePlaceholder":487},[324,105677,105678],{"class":326,"line":2509},[324,105679,488],{"emptyLinePlaceholder":487},[324,105681,105682,105684,105686,105688,105690],{"class":326,"line":2514},[324,105683,32669],{"class":863},[324,105685,2703],{"class":734},[324,105687,102119],{"class":867},[324,105689,96408],{"class":916},[324,105691,4468],{"class":867},[324,105693,105694,105696,105698,105700,105702],{"class":326,"line":3306},[324,105695,102128],{"class":867},[324,105697,913],{"class":863},[324,105699,102133],{"class":867},[324,105701,102035],{"class":916},[324,105703,874],{"class":867},[324,105705,105706,105708,105710],{"class":326,"line":3320},[324,105707,102142],{"class":867},[324,105709,913],{"class":863},[324,105711,102147],{"class":867},[324,105713,105714],{"class":326,"line":3328},[324,105715,488],{"emptyLinePlaceholder":487},[324,105717,105718,105721,105724],{"class":326,"line":3333},[324,105719,105720],{"class":867},"    print_state(",[324,105722,105723],{"class":738},"\"initial\"",[324,105725,105726],{"class":867},", model, data)\n",[324,105728,105729],{"class":326,"line":3339},[324,105730,488],{"emptyLinePlaceholder":487},[324,105732,105733,105735,105737,105739,105741,105743,105745],{"class":326,"line":3345},[324,105734,3930],{"class":863},[324,105736,102222],{"class":867},[324,105738,26767],{"class":863},[324,105740,33165],{"class":916},[324,105742,868],{"class":867},[324,105744,1520],{"class":916},[324,105746,31508],{"class":867},[324,105748,105749],{"class":326,"line":3350},[324,105750,102237],{"class":867},[324,105752,105753],{"class":326,"line":8677},[324,105754,488],{"emptyLinePlaceholder":487},[324,105756,105757,105759,105762],{"class":326,"line":8701},[324,105758,105720],{"class":867},[324,105760,105761],{"class":738},"\"after 50 steps\"",[324,105763,105726],{"class":867},[324,105765,105766],{"class":326,"line":8706},[324,105767,488],{"emptyLinePlaceholder":487},[324,105769,105770],{"class":326,"line":8712},[324,105771,105772],{"class":867},"    mujoco.mj_resetData(model, data)\n",[324,105774,105775,105777,105780],{"class":326,"line":8739},[324,105776,105720],{"class":867},[324,105778,105779],{"class":738},"\"after reset\"",[324,105781,105726],{"class":867},[324,105783,105784],{"class":326,"line":8744},[324,105785,488],{"emptyLinePlaceholder":487},[324,105787,105788,105791,105793,105795,105797],{"class":326,"line":8750},[324,105789,105790],{"class":867},"    data.qpos[",[324,105792,944],{"class":916},[324,105794,5172],{"class":867},[324,105796,913],{"class":863},[324,105798,105429],{"class":916},[324,105800,105801],{"class":326,"line":8762},[324,105802,105803],{"class":867},"    mujoco.mj_forward(model, data)\n",[324,105805,105806,105808,105811],{"class":326,"line":8774},[324,105807,105720],{"class":867},[324,105809,105810],{"class":738},"\"after manual qpos edit\"",[324,105812,105726],{"class":867},[324,105814,105815],{"class":326,"line":8786},[324,105816,488],{"emptyLinePlaceholder":487},[324,105818,105819],{"class":326,"line":10445},[324,105820,488],{"emptyLinePlaceholder":487},[324,105822,105823,105825,105827,105829,105831],{"class":326,"line":10470},[324,105824,2262],{"class":863},[324,105826,31942],{"class":916},[324,105828,102280],{"class":863},[324,105830,102283],{"class":738},[324,105832,4468],{"class":867},[324,105834,105835],{"class":326,"line":10493},[324,105836,102290],{"class":867},[19,105838,104291],{},[316,105840,105842],{"className":24549,"code":105841,"language":24551,"meta":50,"style":50},"touch ch3_python_state.py\n",[269,105843,105844],{"__ignoreMap":50},[324,105845,105846,105848],{"class":326,"line":327},[324,105847,102004],{"class":734},[324,105849,105850],{"class":738}," ch3_python_state.py\n",[19,105852,103022],{},[316,105854,105856],{"className":24549,"code":105855,"language":24551,"meta":50,"style":50},"python ch3_python_state.py\n",[269,105857,105858],{"__ignoreMap":50},[324,105859,105860,105862],{"class":326,"line":327},[324,105861,31102],{"class":734},[324,105863,105850],{"class":738},[35,105865,102293],{"id":102293},[19,105867,105868],{},"打印状态的函数：",[316,105870,105872],{"className":31100,"code":105871,"language":31102,"meta":50,"style":50},"def print_state(prefix: str, model: mujoco.MjModel, data: mujoco.MjData) -> None:\n",[269,105873,105874],{"__ignoreMap":50},[324,105875,105876,105878,105880,105882,105884,105886,105888],{"class":326,"line":327},[324,105877,32669],{"class":863},[324,105879,105597],{"class":734},[324,105881,105600],{"class":867},[324,105883,2034],{"class":916},[324,105885,105605],{"class":867},[324,105887,96408],{"class":916},[324,105889,4468],{"class":867},[19,105891,105892,105893,105895],{},"这个函数不是 MuJoCo 必需的，只是为了让你更清楚地看到每个阶段 ",[269,105894,34123],{}," 里发生了什么。",[19,105897,105898],{},"推进 50 步：",[316,105900,105902],{"className":31100,"code":105901,"language":31102,"meta":50,"style":50},"for _ in range(50):\n    mujoco.mj_step(model, data)\n",[269,105903,105904,105920],{"__ignoreMap":50},[324,105905,105906,105908,105910,105912,105914,105916,105918],{"class":326,"line":327},[324,105907,3754],{"class":863},[324,105909,102222],{"class":867},[324,105911,26767],{"class":863},[324,105913,33165],{"class":916},[324,105915,868],{"class":867},[324,105917,1520],{"class":916},[324,105919,31508],{"class":867},[324,105921,105922],{"class":326,"line":203},[324,105923,102420],{"class":867},[19,105925,105926,105927,105930,105931,105933],{},"由于 ",[269,105928,105929],{},"timestep=0.01","，所以 50 步后时间约为 ",[269,105932,36051],{}," 秒。",[19,105935,105936],{},"重置：",[316,105938,105939],{"className":31100,"code":105247,"language":31102,"meta":50,"style":50},[269,105940,105941],{"__ignoreMap":50},[324,105942,105943],{"class":326,"line":327},[324,105944,105247],{"class":867},[19,105946,105947],{},"这会把时间、位置、速度恢复到初始状态。",[19,105949,105950],{},"手动改高度：",[316,105952,105954],{"className":31100,"code":105953,"language":31102,"meta":50,"style":50},"data.qpos[2] = 2.0\nmujoco.mj_forward(model, data)\n",[269,105955,105956,105968],{"__ignoreMap":50},[324,105957,105958,105960,105962,105964,105966],{"class":326,"line":327},[324,105959,105420],{"class":867},[324,105961,944],{"class":916},[324,105963,5172],{"class":867},[324,105965,913],{"class":863},[324,105967,105429],{"class":916},[324,105969,105970],{"class":326,"line":203},[324,105971,105264],{"class":867},[19,105973,105974,105975,105978,105979,105982],{},"这个例子里 ",[269,105976,105977],{},"qpos[2]"," 是 freejoint 的 z 坐标。改成 ",[269,105980,105981],{},"2.0"," 表示把小球放到更高的位置。",[35,105984,102429],{"id":102429},[316,105986,105987],{"className":31100,"code":105871,"language":31102,"meta":50,"style":50},[269,105988,105989],{"__ignoreMap":50},[324,105990,105991,105993,105995,105997,105999,106001,106003],{"class":326,"line":327},[324,105992,32669],{"class":863},[324,105994,105597],{"class":734},[324,105996,105600],{"class":867},[324,105998,2034],{"class":916},[324,106000,105605],{"class":867},[324,106002,96408],{"class":916},[324,106004,4468],{"class":867},[19,106006,106007],{},"这里定义了一个辅助函数，用来打印状态。括号里的三个参数分别是：",[192,106009,106010,106019,106024],{},[195,106011,106012,106015,106016,106018],{},[269,106013,106014],{},"prefix","：一段文字，比如 ",[269,106017,105723],{},"，用来说明现在打印的是哪个阶段。",[195,106020,106021,106023],{},[269,106022,102806],{},"：MuJoCo 模型。",[195,106025,106026,106028],{},[269,106027,34123],{},"：MuJoCo 当前状态。",[19,106030,106031,1077,106034,106037],{},[269,106032,106033],{},"prefix: str",[269,106035,106036],{},"model: mujoco.MjModel"," 这些是类型提示。它们帮助人和编辑器理解变量类型，不会改变程序运行逻辑。",[316,106039,106041],{"className":31100,"code":106040,"language":31102,"meta":50,"style":50},"print(\"  qpos:\", np.round(data.qpos.copy(), 4))\n",[269,106042,106043],{"__ignoreMap":50},[324,106044,106045,106047,106049,106051,106053,106055],{"class":326,"line":327},[324,106046,31137],{"class":916},[324,106048,868],{"class":867},[324,106050,105648],{"class":738},[324,106052,105651],{"class":867},[324,106054,1157],{"class":916},[324,106056,31219],{"class":867},[19,106058,106059,106062],{},[269,106060,106061],{},"np.round(..., 4)"," 表示保留 4 位小数。仿真输出可能有很多小数，保留 4 位更容易看。",[316,106064,106066],{"className":31100,"code":106065,"language":31102,"meta":50,"style":50},"model = mujoco.MjModel.from_xml_string(XML)\ndata = mujoco.MjData(model)\n",[269,106067,106068,106080],{"__ignoreMap":50},[324,106069,106070,106072,106074,106076,106078],{"class":326,"line":327},[324,106071,102355],{"class":867},[324,106073,913],{"class":863},[324,106075,102133],{"class":867},[324,106077,102035],{"class":916},[324,106079,874],{"class":867},[324,106081,106082,106084,106086],{"class":326,"line":203},[324,106083,102379],{"class":867},[324,106085,913],{"class":863},[324,106087,102147],{"class":867},[19,106089,106090],{},"这两行是所有 MuJoCo 程序的常见开头：先编译模型，再创建运行数据。",[316,106092,106094],{"className":31100,"code":106093,"language":31102,"meta":50,"style":50},"print_state(\"initial\", model, data)\n",[269,106095,106096],{"__ignoreMap":50},[324,106097,106098,106101,106103],{"class":326,"line":327},[324,106099,106100],{"class":867},"print_state(",[324,106102,105723],{"class":738},[324,106104,105726],{"class":867},[19,106106,106107,106108,106111],{},"调用刚才定义的 ",[269,106109,106110],{},"print_state"," 函数，打印初始状态。",[316,106113,106114],{"className":31100,"code":105901,"language":31102,"meta":50,"style":50},[269,106115,106116,106132],{"__ignoreMap":50},[324,106117,106118,106120,106122,106124,106126,106128,106130],{"class":326,"line":327},[324,106119,3754],{"class":863},[324,106121,102222],{"class":867},[324,106123,26767],{"class":863},[324,106125,33165],{"class":916},[324,106127,868],{"class":867},[324,106129,1520],{"class":916},[324,106131,31508],{"class":867},[324,106133,106134],{"class":326,"line":203},[324,106135,102420],{"class":867},[19,106137,106138],{},"循环 50 次，每次推进 0.01 秒，所以最后时间约为 0.5 秒。",[316,106140,106141],{"className":31100,"code":105247,"language":31102,"meta":50,"style":50},[269,106142,106143],{"__ignoreMap":50},[324,106144,106145],{"class":326,"line":327},[324,106146,105247],{"class":867},[19,106148,106149,106150,106152,106153,106155],{},"重置 ",[269,106151,34123],{},"。注意它不会重新创建 ",[269,106154,102806],{},"，因为模型结构没有变，只是状态回到初始值。",[316,106157,106158],{"className":31100,"code":105413,"language":31102,"meta":50,"style":50},[269,106159,106160],{"__ignoreMap":50},[324,106161,106162,106164,106166,106168,106170],{"class":326,"line":327},[324,106163,105420],{"class":867},[324,106165,944],{"class":916},[324,106167,5172],{"class":867},[324,106169,913],{"class":863},[324,106171,105429],{"class":916},[19,106173,106174,106175,1077,106178,1077,106181,106183],{},"这行是“手动改状态”。在 freejoint 中，",[269,106176,106177],{},"qpos[0]",[269,106179,106180],{},"qpos[1]",[269,106182,105977],{}," 分别是 x、y、z 坐标，所以这里把小球高度改成 2.0。",[316,106185,106186],{"className":31100,"code":105264,"language":31102,"meta":50,"style":50},[269,106187,106188],{"__ignoreMap":50},[324,106189,106190],{"class":326,"line":327},[324,106191,105264],{"class":867},[19,106193,106194,106195,106197,106198,106200],{},"手动改完 ",[269,106196,104751],{}," 后，调用 ",[269,106199,104971],{}," 让 MuJoCo 重新计算派生状态。它不推进时间，只刷新当前状态对应的世界坐标、碰撞信息等。",[14,106202,103037],{"id":103036},[19,106204,106205],{},"你会看到:",[192,106207,106208,106213,106218,106221],{},[195,106209,106210,106211],{},"初始时间为 ",[269,106212,1056],{},[195,106214,106215,106216],{},"50 步后时间约为 ",[269,106217,36051],{},[195,106219,106220],{},"reset 后状态恢复",[195,106222,106223,106224,106227,106228],{},"手动修改 ",[269,106225,106226],{},"data.qpos[2]"," 后，小球高度变为 ",[269,106229,105981],{},[19,106231,106232,106234],{},[269,106233,105977],{}," 在这个例子中表示自由刚体的 z 坐标。",[19,106236,106237],{},"输出里可以重点看三件事：",[192,106239,106240,106248,106253],{},[195,106241,106242,106244,106245,106247],{},[269,106243,3117],{}," 是否随着 ",[269,106246,101936],{}," 增加。",[195,106249,106250,106252],{},[269,106251,104751],{}," 的 z 坐标是否因为下落而变化。",[195,106254,106255,106257,106258,29107],{},[269,106256,105073],{}," 后时间是否回到 ",[269,106259,1056],{},[14,106261,103069],{"id":103068},[192,106263,106264,106270,106276,106282,106285,106294],{},[195,106265,106266,106267,29107],{},"修改 timestep 为 ",[269,106268,106269],{},"0.005",[195,106271,106272,106273,29107],{},"重新运行，检查 50 步后时间是否约为 ",[269,106274,106275],{},"0.25",[195,106277,106278,106279,29107],{},"修改重力为 ",[269,106280,106281],{},"0 0 -1.0",[195,106283,106284],{},"观察小球下降速度是否变慢。",[195,106286,103132,106287,103135,106290,106293],{},[269,106288,106289],{},"data.qpos[2] = 2.0",[269,106291,106292],{},"data.qpos[0] = 1.0","，观察 x 坐标是否变化。",[195,106295,106296,106297,106300],{},"注释掉 ",[269,106298,106299],{},"mujoco.mj_forward(model, data)","，观察派生状态是否可能没有及时更新。",[14,106302,103174],{"id":103173},[35,106304,106306,106307,106309],{"id":106305},"修改-dataqpos-后位置没有更新","修改 ",[269,106308,101791],{}," 后位置没有更新",[19,106311,103183],{},[316,106313,106314],{"className":31100,"code":105264,"language":31102,"meta":50,"style":50},[269,106315,106316],{"__ignoreMap":50},[324,106317,106318],{"class":326,"line":327},[324,106319,105264],{"class":867},[35,106321,106322],{"id":106322},"数组维度看不懂",[19,106324,106325],{},"打印模型维度:",[316,106327,106329],{"className":31100,"code":106328,"language":31102,"meta":50,"style":50},"print(model.nq, model.nv, model.nu)\n",[269,106330,106331],{"__ignoreMap":50},[324,106332,106333,106335],{"class":326,"line":327},[324,106334,31137],{"class":916},[324,106336,106337],{"class":867},"(model.nq, model.nv, model.nu)\n",[1003,106339,106340,106348],{},[1006,106341,106342],{},[1009,106343,106344,106346],{},[1012,106345,105295],{"align":24463},[1012,106347,101422],{"align":24463},[1049,106349,106350,106360,106370],{},[1009,106351,106352,106357],{},[1054,106353,106354],{"align":24463},[269,106355,106356],{},"nq",[1054,106358,106359],{"align":24463},"位置变量数量",[1009,106361,106362,106367],{},[1054,106363,106364],{"align":24463},[269,106365,106366],{},"nv",[1054,106368,106369],{"align":24463},"速度变量数量",[1009,106371,106372,106376],{},[1054,106373,106374],{"align":24463},[269,106375,102883],{},[1054,106377,106378],{"align":24463},"控制输入数量",[35,106380,106382,106383,106385],{"id":106381},"误以为-qpos-一定等于关节数","误以为 ",[269,106384,104751],{}," 一定等于关节数",[19,106387,106388,106389,83252,106391,106393,106394,106396],{},"不是。例如 ",[269,106390,102341],{},[269,106392,104751],{}," 是 7 维，但 ",[269,106395,105081],{}," 是 6 维。",[35,106398,106400,106401,106403],{"id":106399},"不知道某个元素在-qpos-的第几位","不知道某个元素在 ",[269,106402,104751],{}," 的第几位",[19,106405,106406],{},"初学时可以先打印：",[316,106408,106410],{"className":31100,"code":106409,"language":31102,"meta":50,"style":50},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"qpos:\", data.qpos)\nprint(\"qvel:\", data.qvel)\n",[269,106411,106412,106422,106432,106444],{"__ignoreMap":50},[324,106413,106414,106416,106418,106420],{"class":326,"line":327},[324,106415,31137],{"class":916},[324,106417,868],{"class":867},[324,106419,102160],{"class":738},[324,106421,102163],{"class":867},[324,106423,106424,106426,106428,106430],{"class":326,"line":203},[324,106425,31137],{"class":916},[324,106427,868],{"class":867},[324,106429,102172],{"class":738},[324,106431,102175],{"class":867},[324,106433,106434,106436,106438,106441],{"class":326,"line":338},[324,106435,31137],{"class":916},[324,106437,868],{"class":867},[324,106439,106440],{"class":738},"\"qpos:\"",[324,106442,106443],{"class":867},", data.qpos)\n",[324,106445,106446,106448,106450,106453],{"class":326,"line":344},[324,106447,31137],{"class":916},[324,106449,868],{"class":867},[324,106451,106452],{"class":738},"\"qvel:\"",[324,106454,106455],{"class":867},", data.qvel)\n",[19,106457,106458],{},"更复杂模型中，可以用 MuJoCo 的 joint 地址字段查询，不过本教程先保持简单。前几章的模型维度都很小，直接打印数组就能看懂。",[35,106460,106461],{"id":106461},"仿真结果每次都一样",[19,106463,106464,106465,106467],{},"这是正常的。MuJoCo 本身是确定性仿真，只要初始状态、模型参数、控制输入一样，结果通常就一样。想要每次不同，需要你自己在 reset 时随机化 ",[269,106466,104751],{},"、目标点或控制输入。",[14,106469,103328],{"id":103327},[19,106471,106472,106473,272],{},"Python 控制 MuJoCo 的核心就是读写 ",[269,106474,34123],{},[192,106476,106477,106485,106490,106495],{},[195,106478,106479,106480,300,106482,106484],{},"用 ",[269,106481,101791],{},[269,106483,101794],{}," 读取状态。",[195,106486,106479,106487,106489],{},[269,106488,101797],{}," 写入控制。",[195,106491,106479,106492,106494],{},[269,106493,101936],{}," 推进时间。",[195,106496,106497,106498,106500],{},"手动改状态后用 ",[269,106499,104971],{}," 刷新派生量。",[19,106502,106503],{},"理解这一章后，就可以进入关节和 actuator 控制。",[775,106505,106506],{},"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":50,"searchDepth":203,"depth":203,"links":106508},[106509,106510,106511,106518,106522,106523,106524,106534],{"id":101368,"depth":203,"text":101369},{"id":101491,"depth":203,"text":101492},{"id":101765,"depth":203,"text":101766,"children":106512},[106513,106515,106517],{"id":105276,"depth":338,"text":106514},"qpos、qvel、ctrl 是什么",{"id":105354,"depth":338,"text":106516},"mj_step 和 mj_forward 的区别",{"id":105443,"depth":338,"text":105444},{"id":101973,"depth":203,"text":101974,"children":106519},[106520,106521],{"id":102293,"depth":338,"text":102293},{"id":102429,"depth":338,"text":102429},{"id":103036,"depth":203,"text":103037},{"id":103068,"depth":203,"text":103069},{"id":103173,"depth":203,"text":103174,"children":106525},[106526,106528,106529,106531,106533],{"id":106305,"depth":338,"text":106527},"修改 data.qpos 后位置没有更新",{"id":106322,"depth":338,"text":106322},{"id":106381,"depth":338,"text":106530},"误以为 qpos 一定等于关节数",{"id":106399,"depth":338,"text":106532},"不知道某个元素在 qpos 的第几位",{"id":106461,"depth":338,"text":106461},{"id":103327,"depth":203,"text":103328},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch3-python",{"title":105039,"description":50},"wiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口","FAugzO4y0q2LsXaOuxDoqmSxVFhJdD5Lw49NR_xgjZI",{"id":106541,"title":106542,"body":106543,"description":50,"extension":792,"meta":108233,"navigation":487,"path":108234,"seo":108235,"stem":108236,"__hash__":108237},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制.md","4.关节、Actuator 与力控制",{"type":7,"value":106544,"toc":108209},[106545,106548,106550,106553,106555,106580,106583,106602,106605,106607,106609,106633,106635,106649,106651,106692,106694,106718,106720,106723,106757,106759,106772,106775,106843,106852,106856,106859,106893,106899,106902,106906,106945,106948,106968,106972,107015,107017,107046,107049,107055,107058,107060,107454,107456,107468,107470,107481,107483,107486,107515,107523,107526,107561,107564,107566,107574,107577,107579,107590,107600,107620,107623,107659,107671,107719,107738,107780,107793,107821,107826,107847,107857,107875,107878,107912,107915,107935,107938,107957,107963,107965,107968,107974,107980,107990,107993,107999,108008,108010,108056,108058,108064,108070,108073,108076,108096,108099,108105,108111,108113,108136,108139,108142,108151,108154,108192,108194,108197,108203,108206],[10,106546,106542],{"id":106547},"_4关节actuator-与力控制",[14,106549,101369],{"id":101368},[19,106551,106552],{},"本章用 MuJoCo 搭建一个单关节摆杆，并通过 actuator 控制它运动。",[19,106554,105052],{},[192,106556,106557,106563,106568,106572,106577],{},[195,106558,106559,106562],{},[269,106560,106561],{},"hinge"," 关节",[195,106564,106565],{},[269,106566,106567],{},"\u003Cactuator>\u003Cmotor ...\u002F>\u003C\u002Factuator>",[195,106569,106570],{},[269,106571,101797],{},[195,106573,106574],{},[269,106575,106576],{},"ctrlrange",[195,106578,106579],{},"读取关节角和角速度",[19,106581,106582],{},"这章是从“物体自己掉落”进入“我主动控制物体”的关键一步。你会第一次写：",[316,106584,106586],{"className":31100,"code":106585,"language":31102,"meta":50,"style":50},"data.ctrl[0] = ...\n",[269,106587,106588],{"__ignoreMap":50},[324,106589,106590,106593,106595,106597,106599],{"class":326,"line":327},[324,106591,106592],{"class":867},"data.ctrl[",[324,106594,1056],{"class":916},[324,106596,5172],{"class":867},[324,106598,913],{"class":863},[324,106600,106601],{"class":916}," ...\n",[19,106603,106604],{},"这行代码就是控制算法和 MuJoCo 物理世界之间的接口。",[14,106606,101492],{"id":101491},[19,106608,101495],{},[316,106610,106611],{"className":24549,"code":105109,"language":24551,"meta":50,"style":50},[269,106612,106613],{"__ignoreMap":50},[324,106614,106615,106617,106619,106621,106623,106625,106627,106629,106631],{"class":326,"line":327},[324,106616,735],{"class":734},[324,106618,27038],{"class":738},[324,106620,760],{"class":738},[324,106622,27123],{"class":916},[324,106624,105124],{"class":738},[324,106626,101520],{"class":738},[324,106628,103222],{"class":738},[324,106630,101536],{"class":738},[324,106632,105133],{"class":738},[19,106634,103540],{},[316,106636,106637],{"className":24549,"code":101641,"language":24551,"meta":50,"style":50},[269,106638,106639],{"__ignoreMap":50},[324,106640,106641,106643,106645,106647],{"class":326,"line":327},[324,106642,24558],{"class":734},[324,106644,760],{"class":738},[324,106646,101652],{"class":738},[324,106648,101655],{"class":738},[19,106650,103557],{},[316,106652,106654],{"className":24549,"code":106653,"language":24551,"meta":50,"style":50},"conda create -n mujoco-control python=3.10 -y\nconda activate mujoco-control\npip install \"mujoco>=2.3\" numpy\n",[269,106655,106656,106673,106682],{"__ignoreMap":50},[324,106657,106658,106660,106662,106664,106667,106669,106671],{"class":326,"line":327},[324,106659,31052],{"class":734},[324,106661,29898],{"class":738},[324,106663,25839],{"class":916},[324,106665,106666],{"class":738}," mujoco-control",[324,106668,101697],{"class":738},[324,106670,101700],{"class":916},[324,106672,101703],{"class":916},[324,106674,106675,106677,106679],{"class":326,"line":203},[324,106676,31052],{"class":734},[324,106678,101710],{"class":738},[324,106680,106681],{"class":738}," mujoco-control\n",[324,106683,106684,106686,106688,106690],{"class":326,"line":338},[324,106685,24558],{"class":734},[324,106687,760],{"class":738},[324,106689,101652],{"class":738},[324,106691,101655],{"class":738},[19,106693,101726],{},[192,106695,106696,106702,106709,106715],{},[195,106697,106698,106701],{},[269,106699,106700],{},"\u003Cmotor>"," 是 MuJoCo XML Reference 中的 actuator shortcut。",[195,106703,106704,106706,106707,29107],{},[269,106705,101797],{}," 长度等于 ",[269,106708,102879],{},[195,106710,82944,106711,106714],{},[269,106712,106713],{},"model.nu == 0","，说明 XML 没有定义 actuator。",[195,106716,106717],{},"actuator 细节在 MuJoCo 不同版本中有扩展，本文只使用基础 motor。",[14,106719,101766],{"id":101765},[19,106721,106722],{},"关节决定 body 如何运动:",[316,106724,106726],{"className":53789,"code":106725,"language":53791,"meta":50,"style":50},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[269,106727,106728],{"__ignoreMap":50},[324,106729,106730,106732,106734,106736,106738,106741,106743,106745,106747,106750,106752,106755],{"class":326,"line":327},[324,106731,1774],{"class":867},[324,106733,103677],{"class":52022},[324,106735,15649],{"class":734},[324,106737,913],{"class":867},[324,106739,106740],{"class":738},"\"hinge\"",[324,106742,54546],{"class":734},[324,106744,913],{"class":867},[324,106746,106740],{"class":738},[324,106748,106749],{"class":734}," axis",[324,106751,913],{"class":867},[324,106753,106754],{"class":738},"\"0 1 0\"",[324,106756,101865],{"class":867},[19,106758,103773],{},[192,106760,106761,106766,106769],{},[195,106762,106763,106764],{},"名字是 ",[269,106765,106561],{},[195,106767,106768],{},"类型是旋转关节",[195,106770,106771],{},"绕 y 轴旋转",[19,106773,106774],{},"actuator 决定如何施加控制:",[316,106776,106778],{"className":53789,"code":106777,"language":53791,"meta":50,"style":50},"\u003Cactuator>\n  \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n\u003C\u002Factuator>\n",[269,106779,106780,106789,106835],{"__ignoreMap":50},[324,106781,106782,106784,106787],{"class":326,"line":327},[324,106783,1774],{"class":867},[324,106785,106786],{"class":52022},"actuator",[324,106788,52029],{"class":867},[324,106790,106791,106793,106796,106798,106800,106803,106806,106808,106810,106813,106815,106817,106820,106822,106825,106828,106830,106833],{"class":326,"line":203},[324,106792,52866],{"class":867},[324,106794,106795],{"class":52022},"motor",[324,106797,15649],{"class":734},[324,106799,913],{"class":867},[324,106801,106802],{"class":738},"\"hinge_motor\"",[324,106804,106805],{"class":734}," joint",[324,106807,913],{"class":867},[324,106809,106740],{"class":738},[324,106811,106812],{"class":734}," gear",[324,106814,913],{"class":867},[324,106816,4407],{"class":738},[324,106818,106819],{"class":734}," ctrlrange",[324,106821,913],{"class":867},[324,106823,106824],{"class":738},"\"-2 2\"",[324,106826,106827],{"class":734}," ctrllimited",[324,106829,913],{"class":867},[324,106831,106832],{"class":738},"\"true\"",[324,106834,101865],{"class":867},[324,106836,106837,106839,106841],{"class":326,"line":338},[324,106838,52507],{"class":867},[324,106840,106786],{"class":52022},[324,106842,52029],{"class":867},[19,106844,106845,106848,106849,29107],{},[269,106846,106847],{},"data.ctrl[0]"," 会变成电机输入，控制输入限制在 ",[269,106850,106851],{},"[-2, 2]",[35,106853,106855],{"id":106854},"joint-和-actuator-的关系","joint 和 actuator 的关系",[19,106857,106858],{},"很多新手会把 joint 和 actuator 混在一起。它们不是一回事：",[1003,106860,106861,106871],{},[1006,106862,106863],{},[1009,106864,106865,106867,106869],{},[1012,106866,26477],{"align":24463},[1012,106868,103417],{"align":24463},[1012,106870,101456],{"align":24463},[1049,106872,106873,106883],{},[1009,106874,106875,106877,106880],{},[1054,106876,103677],{"align":24463},[1054,106878,106879],{"align":24463},"定义能怎么动",[1054,106881,106882],{"align":24463},"门轴允许门旋转",[1009,106884,106885,106887,106890],{},[1054,106886,106786],{"align":24463},[1054,106888,106889],{"align":24463},"定义怎么施力或控制",[1054,106891,106892],{"align":24463},"人推门、马达带动门",[19,106894,106895,106896,106898],{},"只有 joint，没有 actuator，物体仍然可能因为重力、碰撞、初速度而动，但你不能通过 ",[269,106897,101797],{}," 主动控制它。",[19,106900,106901],{},"只有 actuator，没有正确引用 joint，模型会编译失败或没有控制效果。",[35,106903,106905],{"id":106904},"hinge-joint","hinge joint",[316,106907,106909],{"className":53789,"code":106908,"language":53791,"meta":50,"style":50},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[269,106910,106911],{"__ignoreMap":50},[324,106912,106913,106915,106917,106919,106921,106923,106925,106927,106929,106931,106933,106935,106938,106940,106943],{"class":326,"line":327},[324,106914,1774],{"class":867},[324,106916,103677],{"class":52022},[324,106918,15649],{"class":734},[324,106920,913],{"class":867},[324,106922,106740],{"class":738},[324,106924,54546],{"class":734},[324,106926,913],{"class":867},[324,106928,106740],{"class":738},[324,106930,106749],{"class":734},[324,106932,913],{"class":867},[324,106934,106754],{"class":738},[324,106936,106937],{"class":734}," damping",[324,106939,913],{"class":867},[324,106941,106942],{"class":738},"\"0.1\"",[324,106944,101865],{"class":867},[19,106946,106947],{},"含义：",[192,106949,106950,106956,106962],{},[195,106951,106952,106955],{},[269,106953,106954],{},"type=\"hinge\"","：只能绕一个轴旋转。",[195,106957,106958,106961],{},[269,106959,106960],{},"axis=\"0 1 0\"","：绕 y 轴旋转。",[195,106963,106964,106967],{},[269,106965,106966],{},"damping=\"0.1\"","：阻尼，类似摩擦，会让运动慢慢衰减。",[35,106969,106971],{"id":106970},"motor-actuator","motor actuator",[316,106973,106975],{"className":53789,"code":106974,"language":53791,"meta":50,"style":50},"\u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[269,106976,106977],{"__ignoreMap":50},[324,106978,106979,106981,106983,106985,106987,106989,106991,106993,106995,106997,106999,107001,107003,107005,107007,107009,107011,107013],{"class":326,"line":327},[324,106980,1774],{"class":867},[324,106982,106795],{"class":52022},[324,106984,15649],{"class":734},[324,106986,913],{"class":867},[324,106988,106802],{"class":738},[324,106990,106805],{"class":734},[324,106992,913],{"class":867},[324,106994,106740],{"class":738},[324,106996,106812],{"class":734},[324,106998,913],{"class":867},[324,107000,4407],{"class":738},[324,107002,106819],{"class":734},[324,107004,913],{"class":867},[324,107006,106824],{"class":738},[324,107008,106827],{"class":734},[324,107010,913],{"class":867},[324,107012,106832],{"class":738},[324,107014,101865],{"class":867},[19,107016,106947],{},[192,107018,107019,107028,107034,107040],{},[195,107020,107021,107024,107025,107027],{},[269,107022,107023],{},"joint=\"hinge\"","：这个电机作用在名为 ",[269,107026,106561],{}," 的关节上。",[195,107029,107030,107033],{},[269,107031,107032],{},"gear=\"1\"","：控制输入到力\u002F力矩的放大比例。",[195,107035,107036,107039],{},[269,107037,107038],{},"ctrlrange=\"-2 2\"","：允许的控制输入范围。",[195,107041,107042,107045],{},[269,107043,107044],{},"ctrllimited=\"true\"","：启用控制范围限制。",[19,107047,107048],{},"简单理解：",[316,107050,107053],{"className":107051,"code":107052,"language":5916,"meta":50},[5914],"实际施加效果 ≈ data.ctrl[0] * gear\n",[269,107054,107052],{"__ignoreMap":50},[19,107056,107057],{},"真实细节比这更复杂，但这个近似足够帮助入门。",[14,107059,101974],{"id":101973},[316,107061,107063],{"className":31100,"code":107062,"language":31102,"meta":50,"style":50},"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",[269,107064,107065,107072,107076,107082,107092,107096,107100,107108,107113,107118,107122,107126,107131,107136,107140,107145,107150,107155,107160,107164,107168,107172,107177,107182,107187,107191,107195,107199,107203,107215,107227,107235,107239,107249,107259,107269,107273,107286,107299,107303,107320,107334,107369,107373,107377,107388,107403,107418,107430,107434,107438,107450],{"__ignoreMap":50},[324,107066,107067,107069],{"class":326,"line":327},[324,107068,31114],{"class":863},[324,107070,107071],{"class":867}," math\n",[324,107073,107074],{"class":326,"line":203},[324,107075,488],{"emptyLinePlaceholder":487},[324,107077,107078,107080],{"class":326,"line":338},[324,107079,31114],{"class":863},[324,107081,102022],{"class":867},[324,107083,107084,107086,107088,107090],{"class":326,"line":344},[324,107085,31114],{"class":863},[324,107087,32102],{"class":867},[324,107089,32105],{"class":863},[324,107091,32108],{"class":867},[324,107093,107094],{"class":326,"line":484},[324,107095,488],{"emptyLinePlaceholder":487},[324,107097,107098],{"class":326,"line":491},[324,107099,488],{"emptyLinePlaceholder":487},[324,107101,107102,107104,107106],{"class":326,"line":496},[324,107103,102035],{"class":916},[324,107105,14293],{"class":863},[324,107107,102040],{"class":738},[324,107109,107110],{"class":326,"line":502},[324,107111,107112],{"class":738},"\u003Cmujoco model=\"one_link_motor\">\n",[324,107114,107115],{"class":326,"line":508},[324,107116,107117],{"class":738},"  \u003Coption timestep=\"0.002\" gravity=\"0 0 -9.81\"\u002F>\n",[324,107119,107120],{"class":326,"line":514},[324,107121,488],{"emptyLinePlaceholder":487},[324,107123,107124],{"class":326,"line":2343},[324,107125,102059],{"class":738},[324,107127,107128],{"class":326,"line":2348},[324,107129,107130],{"class":738},"    \u003Cbody name=\"base\" pos=\"0 0 0.5\">\n",[324,107132,107133],{"class":326,"line":2354},[324,107134,107135],{"class":738},"      \u003Cgeom name=\"base_geom\" type=\"sphere\" size=\"0.05\" rgba=\"0.2 0.2 0.2 1\"\u002F>\n",[324,107137,107138],{"class":326,"line":2359},[324,107139,488],{"emptyLinePlaceholder":487},[324,107141,107142],{"class":326,"line":2373},[324,107143,107144],{"class":738},"      \u003Cbody name=\"link\" pos=\"0 0 0\">\n",[324,107146,107147],{"class":326,"line":2378},[324,107148,107149],{"class":738},"        \u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[324,107151,107152],{"class":326,"line":2384},[324,107153,107154],{"class":738},"        \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",[324,107156,107157],{"class":326,"line":2405},[324,107158,107159],{"class":738},"      \u003C\u002Fbody>\n",[324,107161,107162],{"class":326,"line":2410},[324,107163,102088],{"class":738},[324,107165,107166],{"class":326,"line":2424},[324,107167,102093],{"class":738},[324,107169,107170],{"class":326,"line":2429},[324,107171,488],{"emptyLinePlaceholder":487},[324,107173,107174],{"class":326,"line":2458},[324,107175,107176],{"class":738},"  \u003Cactuator>\n",[324,107178,107179],{"class":326,"line":2463},[324,107180,107181],{"class":738},"    \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[324,107183,107184],{"class":326,"line":2480},[324,107185,107186],{"class":738},"  \u003C\u002Factuator>\n",[324,107188,107189],{"class":326,"line":2485},[324,107190,102098],{"class":738},[324,107192,107193],{"class":326,"line":2490},[324,107194,96420],{"class":738},[324,107196,107197],{"class":326,"line":2495},[324,107198,488],{"emptyLinePlaceholder":487},[324,107200,107201],{"class":326,"line":2509},[324,107202,488],{"emptyLinePlaceholder":487},[324,107204,107205,107207,107209,107211,107213],{"class":326,"line":2514},[324,107206,32669],{"class":863},[324,107208,2703],{"class":734},[324,107210,102119],{"class":867},[324,107212,96408],{"class":916},[324,107214,4468],{"class":867},[324,107216,107217,107219,107221,107223,107225],{"class":326,"line":3306},[324,107218,102128],{"class":867},[324,107220,913],{"class":863},[324,107222,102133],{"class":867},[324,107224,102035],{"class":916},[324,107226,874],{"class":867},[324,107228,107229,107231,107233],{"class":326,"line":3320},[324,107230,102142],{"class":867},[324,107232,913],{"class":863},[324,107234,102147],{"class":867},[324,107236,107237],{"class":326,"line":3328},[324,107238,488],{"emptyLinePlaceholder":487},[324,107240,107241,107243,107245,107247],{"class":326,"line":3333},[324,107242,32021],{"class":916},[324,107244,868],{"class":867},[324,107246,102160],{"class":738},[324,107248,102163],{"class":867},[324,107250,107251,107253,107255,107257],{"class":326,"line":3339},[324,107252,32021],{"class":916},[324,107254,868],{"class":867},[324,107256,102172],{"class":738},[324,107258,102175],{"class":867},[324,107260,107261,107263,107265,107267],{"class":326,"line":3345},[324,107262,32021],{"class":916},[324,107264,868],{"class":867},[324,107266,102184],{"class":738},[324,107268,102187],{"class":867},[324,107270,107271],{"class":326,"line":3350},[324,107272,488],{"emptyLinePlaceholder":487},[324,107274,107275,107277,107280,107282,107284],{"class":326,"line":8677},[324,107276,3830],{"class":863},[324,107278,107279],{"class":867}," model.nu ",[324,107281,21677],{"class":863},[324,107283,25842],{"class":916},[324,107285,4468],{"class":867},[324,107287,107288,107290,107292,107294,107297],{"class":326,"line":8701},[324,107289,104153],{"class":863},[324,107291,104156],{"class":916},[324,107293,868],{"class":867},[324,107295,107296],{"class":738},"\"expected exactly one actuator\"",[324,107298,874],{"class":867},[324,107300,107301],{"class":326,"line":8706},[324,107302,488],{"emptyLinePlaceholder":487},[324,107304,107305,107307,107309,107311,107313,107315,107318],{"class":326,"line":8712},[324,107306,3930],{"class":863},[324,107308,32338],{"class":867},[324,107310,26767],{"class":863},[324,107312,33165],{"class":916},[324,107314,868],{"class":867},[324,107316,107317],{"class":916},"2000",[324,107319,31508],{"class":867},[324,107321,107322,107325,107327,107329,107331],{"class":326,"line":8739},[324,107323,107324],{"class":867},"        t ",[324,107326,913],{"class":863},[324,107328,32338],{"class":867},[324,107330,1319],{"class":863},[324,107332,107333],{"class":867}," model.opt.timestep\n",[324,107335,107336,107339,107341,107343,107345,107348,107350,107353,107355,107357,107360,107362,107364,107366],{"class":326,"line":8744},[324,107337,107338],{"class":867},"        data.ctrl[",[324,107340,1056],{"class":916},[324,107342,5172],{"class":867},[324,107344,913],{"class":863},[324,107346,107347],{"class":916}," 1.5",[324,107349,7247],{"class":863},[324,107351,107352],{"class":867}," math.sin(",[324,107354,105981],{"class":916},[324,107356,7247],{"class":863},[324,107358,107359],{"class":867}," math.pi ",[324,107361,1319],{"class":863},[324,107363,62589],{"class":916},[324,107365,7247],{"class":863},[324,107367,107368],{"class":867}," t)\n",[324,107370,107371],{"class":326,"line":8750},[324,107372,102237],{"class":867},[324,107374,107375],{"class":326,"line":8762},[324,107376,488],{"emptyLinePlaceholder":487},[324,107378,107379,107381,107383,107386],{"class":326,"line":8774},[324,107380,32021],{"class":916},[324,107382,868],{"class":867},[324,107384,107385],{"class":738},"\"time:\"",[324,107387,102199],{"class":867},[324,107389,107390,107392,107394,107397,107399,107401],{"class":326,"line":8786},[324,107391,32021],{"class":916},[324,107393,868],{"class":867},[324,107395,107396],{"class":738},"\"joint qpos:\"",[324,107398,105651],{"class":867},[324,107400,1157],{"class":916},[324,107402,31219],{"class":867},[324,107404,107405,107407,107409,107412,107414,107416],{"class":326,"line":10445},[324,107406,32021],{"class":916},[324,107408,868],{"class":867},[324,107410,107411],{"class":738},"\"joint qvel:\"",[324,107413,105667],{"class":867},[324,107415,1157],{"class":916},[324,107417,31219],{"class":867},[324,107419,107420,107422,107424,107427],{"class":326,"line":10470},[324,107421,32021],{"class":916},[324,107423,868],{"class":867},[324,107425,107426],{"class":738},"\"last ctrl:\"",[324,107428,107429],{"class":867},", data.ctrl.copy())\n",[324,107431,107432],{"class":326,"line":10493},[324,107433,488],{"emptyLinePlaceholder":487},[324,107435,107436],{"class":326,"line":10517},[324,107437,488],{"emptyLinePlaceholder":487},[324,107439,107440,107442,107444,107446,107448],{"class":326,"line":10522},[324,107441,2262],{"class":863},[324,107443,31942],{"class":916},[324,107445,102280],{"class":863},[324,107447,102283],{"class":738},[324,107449,4468],{"class":867},[324,107451,107452],{"class":326,"line":10527},[324,107453,102290],{"class":867},[19,107455,104291],{},[316,107457,107459],{"className":24549,"code":107458,"language":24551,"meta":50,"style":50},"touch ch4_joint_motor.py\n",[269,107460,107461],{"__ignoreMap":50},[324,107462,107463,107465],{"class":326,"line":327},[324,107464,102004],{"class":734},[324,107466,107467],{"class":738}," ch4_joint_motor.py\n",[19,107469,103022],{},[316,107471,107473],{"className":24549,"code":107472,"language":24551,"meta":50,"style":50},"python ch4_joint_motor.py\n",[269,107474,107475],{"__ignoreMap":50},[324,107476,107477,107479],{"class":326,"line":327},[324,107478,31102],{"class":734},[324,107480,107467],{"class":738},[35,107482,102293],{"id":102293},[19,107484,107485],{},"检查 actuator 数量：",[316,107487,107489],{"className":31100,"code":107488,"language":31102,"meta":50,"style":50},"if model.nu != 1:\n    raise RuntimeError(\"expected exactly one actuator\")\n",[269,107490,107491,107503],{"__ignoreMap":50},[324,107492,107493,107495,107497,107499,107501],{"class":326,"line":327},[324,107494,2262],{"class":863},[324,107496,107279],{"class":867},[324,107498,21677],{"class":863},[324,107500,25842],{"class":916},[324,107502,4468],{"class":867},[324,107504,107505,107507,107509,107511,107513],{"class":326,"line":203},[324,107506,104616],{"class":863},[324,107508,104156],{"class":916},[324,107510,868],{"class":867},[324,107512,107296],{"class":738},[324,107514,874],{"class":867},[19,107516,107517,107519,107520,107522],{},[269,107518,102879],{}," 是控制输入维度。这个模型只有一个 motor，所以 ",[269,107521,101797],{}," 长度应该是 1。",[19,107524,107525],{},"产生正弦控制信号：",[316,107527,107529],{"className":31100,"code":107528,"language":31102,"meta":50,"style":50},"data.ctrl[0] = 1.5 * math.sin(2.0 * math.pi * 0.5 * t)\n",[269,107530,107531],{"__ignoreMap":50},[324,107532,107533,107535,107537,107539,107541,107543,107545,107547,107549,107551,107553,107555,107557,107559],{"class":326,"line":327},[324,107534,106592],{"class":867},[324,107536,1056],{"class":916},[324,107538,5172],{"class":867},[324,107540,913],{"class":863},[324,107542,107347],{"class":916},[324,107544,7247],{"class":863},[324,107546,107352],{"class":867},[324,107548,105981],{"class":916},[324,107550,7247],{"class":863},[324,107552,107359],{"class":867},[324,107554,1319],{"class":863},[324,107556,62589],{"class":916},[324,107558,7247],{"class":863},[324,107560,107368],{"class":867},[19,107562,107563],{},"这表示电机输入会在正负之间周期变化。你可以把它理解成一会儿往一个方向推，一会儿往反方向推。",[19,107565,102394],{},[316,107567,107568],{"className":31100,"code":105226,"language":31102,"meta":50,"style":50},[269,107569,107570],{"__ignoreMap":50},[324,107571,107572],{"class":326,"line":327},[324,107573,105226],{"class":867},[19,107575,107576],{},"MuJoCo 根据当前电机输入、重力、阻尼、质量等参数计算下一步状态。",[35,107578,102429],{"id":102429},[316,107580,107582],{"className":31100,"code":107581,"language":31102,"meta":50,"style":50},"import math\n",[269,107583,107584],{"__ignoreMap":50},[324,107585,107586,107588],{"class":326,"line":327},[324,107587,31114],{"class":863},[324,107589,107071],{"class":867},[19,107591,107592,107593,300,107596,107599],{},"导入 Python 标准库里的数学模块。后面要用 ",[269,107594,107595],{},"math.sin",[269,107597,107598],{},"math.pi"," 生成周期变化的控制信号。",[316,107601,107602],{"className":31100,"code":104407,"language":31102,"meta":50,"style":50},[269,107603,107604,107610],{"__ignoreMap":50},[324,107605,107606,107608],{"class":326,"line":327},[324,107607,31114],{"class":863},[324,107609,102022],{"class":867},[324,107611,107612,107614,107616,107618],{"class":326,"line":203},[324,107613,31114],{"class":863},[324,107615,32102],{"class":867},[324,107617,32105],{"class":863},[324,107619,32108],{"class":867},[19,107621,107622],{},"导入 MuJoCo 和 NumPy。MuJoCo 负责仿真，NumPy 负责数组显示和数值处理。",[316,107624,107625],{"className":53789,"code":106908,"language":53791,"meta":50,"style":50},[269,107626,107627],{"__ignoreMap":50},[324,107628,107629,107631,107633,107635,107637,107639,107641,107643,107645,107647,107649,107651,107653,107655,107657],{"class":326,"line":327},[324,107630,1774],{"class":867},[324,107632,103677],{"class":52022},[324,107634,15649],{"class":734},[324,107636,913],{"class":867},[324,107638,106740],{"class":738},[324,107640,54546],{"class":734},[324,107642,913],{"class":867},[324,107644,106740],{"class":738},[324,107646,106749],{"class":734},[324,107648,913],{"class":867},[324,107650,106754],{"class":738},[324,107652,106937],{"class":734},[324,107654,913],{"class":867},[324,107656,106942],{"class":738},[324,107658,101865],{"class":867},[19,107660,107661,107662,107664,107665,107667,107668,107670],{},"这行定义关节。",[269,107663,106561],{}," 表示旋转关节。",[269,107666,106960],{}," 表示绕 y 轴旋转。",[269,107669,106966],{}," 表示有一点阻尼，运动不会完全无损耗。",[316,107672,107674],{"className":53789,"code":107673,"language":53791,"meta":50,"style":50},"\u003Cgeom name=\"link_geom\" type=\"capsule\" fromto=\"0 0 0 0 0 0.5\" size=\"0.03\" mass=\"0.5\"\u002F>\n",[269,107675,107676],{"__ignoreMap":50},[324,107677,107678,107680,107682,107684,107686,107689,107691,107693,107696,107699,107701,107704,107706,107708,107710,107712,107714,107717],{"class":326,"line":327},[324,107679,1774],{"class":867},[324,107681,101841],{"class":52022},[324,107683,15649],{"class":734},[324,107685,913],{"class":867},[324,107687,107688],{"class":738},"\"link_geom\"",[324,107690,54546],{"class":734},[324,107692,913],{"class":867},[324,107694,107695],{"class":738},"\"capsule\"",[324,107697,107698],{"class":734}," fromto",[324,107700,913],{"class":867},[324,107702,107703],{"class":738},"\"0 0 0 0 0 0.5\"",[324,107705,101857],{"class":734},[324,107707,913],{"class":867},[324,107709,104499],{"class":738},[324,107711,102722],{"class":734},[324,107713,913],{"class":867},[324,107715,107716],{"class":738},"\"0.5\"",[324,107718,101865],{"class":867},[19,107720,107721,107722,107724,107725,107727,107728,107731,107732,29107,107735,107737],{},"这行定义摆杆的形状。",[269,107723,103886],{}," 是胶囊体，适合表示杆子。",[269,107726,103897],{}," 前三个数是起点，后三个数是终点，所以这根杆从 ",[269,107729,107730],{},"(0,0,0)"," 延伸到 ",[269,107733,107734],{},"(0,0,0.5)",[269,107736,103891],{}," 是半径。",[316,107739,107740],{"className":53789,"code":106974,"language":53791,"meta":50,"style":50},[269,107741,107742],{"__ignoreMap":50},[324,107743,107744,107746,107748,107750,107752,107754,107756,107758,107760,107762,107764,107766,107768,107770,107772,107774,107776,107778],{"class":326,"line":327},[324,107745,1774],{"class":867},[324,107747,106795],{"class":52022},[324,107749,15649],{"class":734},[324,107751,913],{"class":867},[324,107753,106802],{"class":738},[324,107755,106805],{"class":734},[324,107757,913],{"class":867},[324,107759,106740],{"class":738},[324,107761,106812],{"class":734},[324,107763,913],{"class":867},[324,107765,4407],{"class":738},[324,107767,106819],{"class":734},[324,107769,913],{"class":867},[324,107771,106824],{"class":738},[324,107773,106827],{"class":734},[324,107775,913],{"class":867},[324,107777,106832],{"class":738},[324,107779,101865],{"class":867},[19,107781,107782,107783,107785,107786,107789,107790,107792],{},"这行定义电机。它作用在 ",[269,107784,106561],{}," 关节上。",[269,107787,107788],{},"gear"," 可以理解成放大倍数。",[269,107791,106576],{}," 限制控制输入范围。",[316,107794,107795],{"className":31100,"code":107488,"language":31102,"meta":50,"style":50},[269,107796,107797,107809],{"__ignoreMap":50},[324,107798,107799,107801,107803,107805,107807],{"class":326,"line":327},[324,107800,2262],{"class":863},[324,107802,107279],{"class":867},[324,107804,21677],{"class":863},[324,107806,25842],{"class":916},[324,107808,4468],{"class":867},[324,107810,107811,107813,107815,107817,107819],{"class":326,"line":203},[324,107812,104616],{"class":863},[324,107814,104156],{"class":916},[324,107816,868],{"class":867},[324,107818,107296],{"class":738},[324,107820,874],{"class":867},[19,107822,107823,107825],{},[269,107824,102879],{}," 是控制输入数量。这个 XML 只定义了一个 motor，所以应该等于 1。如果不是 1，说明模型和预期不一致，继续运行可能会出错。",[316,107827,107829],{"className":31100,"code":107828,"language":31102,"meta":50,"style":50},"for step in range(2000):\n",[269,107830,107831],{"__ignoreMap":50},[324,107832,107833,107835,107837,107839,107841,107843,107845],{"class":326,"line":327},[324,107834,3754],{"class":863},[324,107836,32338],{"class":867},[324,107838,26767],{"class":863},[324,107840,33165],{"class":916},[324,107842,868],{"class":867},[324,107844,107317],{"class":916},[324,107846,31508],{"class":867},[19,107848,107849,107850,107852,107853,107856],{},"循环 2000 步。这里没有用 ",[269,107851,1856],{},"，而是用 ",[269,107854,107855],{},"step","，因为后面要用当前步数计算时间。",[316,107858,107860],{"className":31100,"code":107859,"language":31102,"meta":50,"style":50},"t = step * model.opt.timestep\n",[269,107861,107862],{"__ignoreMap":50},[324,107863,107864,107867,107869,107871,107873],{"class":326,"line":327},[324,107865,107866],{"class":867},"t ",[324,107868,913],{"class":863},[324,107870,32338],{"class":867},[324,107872,1319],{"class":863},[324,107874,107333],{"class":867},[19,107876,107877],{},"当前仿真时间可以用“步数乘以时间步长”估算。比如 step=100，timestep=0.002，那么 t=0.2 秒。",[316,107879,107880],{"className":31100,"code":107528,"language":31102,"meta":50,"style":50},[269,107881,107882],{"__ignoreMap":50},[324,107883,107884,107886,107888,107890,107892,107894,107896,107898,107900,107902,107904,107906,107908,107910],{"class":326,"line":327},[324,107885,106592],{"class":867},[324,107887,1056],{"class":916},[324,107889,5172],{"class":867},[324,107891,913],{"class":863},[324,107893,107347],{"class":916},[324,107895,7247],{"class":863},[324,107897,107352],{"class":867},[324,107899,105981],{"class":916},[324,107901,7247],{"class":863},[324,107903,107359],{"class":867},[324,107905,1319],{"class":863},[324,107907,62589],{"class":916},[324,107909,7247],{"class":863},[324,107911,107368],{"class":867},[19,107913,107914],{},"这行给电机输入一个正弦波。拆开看：",[192,107916,107917,107923,107929],{},[195,107918,107919,107922],{},[269,107920,107921],{},"math.sin(...)"," 产生 -1 到 1 之间周期变化的值。",[195,107924,107925,107928],{},[269,107926,107927],{},"1.5 *"," 把范围放大成 -1.5 到 1.5。",[195,107930,107931,107934],{},[269,107932,107933],{},"data.ctrl[0] = ..."," 把结果写入第 0 个 actuator。",[19,107936,107937],{},"因为正弦值一会儿正一会儿负，所以电机会来回推动关节。",[316,107939,107941],{"className":31100,"code":107940,"language":31102,"meta":50,"style":50},"print(\"joint qpos:\", np.round(data.qpos.copy(), 4))\n",[269,107942,107943],{"__ignoreMap":50},[324,107944,107945,107947,107949,107951,107953,107955],{"class":326,"line":327},[324,107946,31137],{"class":916},[324,107948,868],{"class":867},[324,107950,107396],{"class":738},[324,107952,105651],{"class":867},[324,107954,1157],{"class":916},[324,107956,31219],{"class":867},[19,107958,107959,107960,107962],{},"打印关节角度。这个模型只有一个 hinge joint，所以 ",[269,107961,101791],{}," 只有一个数。",[14,107964,103037],{"id":103036},[19,107966,107967],{},"输出类似:",[316,107969,107972],{"className":107970,"code":107971,"language":5916,"meta":50},[5914],"nq: 1\nnv: 1\nnu: 1\ntime: 4.0\njoint qpos: [...]\njoint qvel: [...]\nlast ctrl: [...]\n",[269,107973,107971],{"__ignoreMap":50},[19,107975,107976,107977,107979],{},"这里 ",[269,107978,106847],{}," 是电机输入。",[19,107981,107982,107985,107986,107989],{},[269,107983,107984],{},"joint qpos"," 是关节角度，单位通常是弧度。",[269,107987,107988],{},"joint qvel"," 是角速度，单位通常是弧度每秒。",[19,107991,107992],{},"角度单位提示：",[316,107994,107997],{"className":107995,"code":107996,"language":5916,"meta":50},[5914],"pi rad ≈ 180 degrees\n1 rad ≈ 57.3 degrees\n",[269,107998,107996],{"__ignoreMap":50},[19,108000,108001,108002,108004,108005,108007],{},"如果你看到 ",[269,108003,104751],{}," 是 ",[269,108006,36051],{},"，大约就是 28.6 度。",[14,108009,103069],{"id":103068},[192,108011,108012,108019,108022,108029,108032,108040,108048],{},[195,108013,103132,108014,103135,108016,29107],{},[269,108015,107032],{},[269,108017,108018],{},"gear=\"5\"",[195,108020,108021],{},"重新运行，观察关节运动是否更剧烈。",[195,108023,103132,108024,103135,108026,29107],{},[269,108025,106576],{},[269,108027,108028],{},"-0.2 0.2",[195,108030,108031],{},"重新运行，观察控制能力是否变弱。",[195,108033,108034,108035,108037,108038,29107],{},"去掉 actuator，确认 ",[269,108036,102879],{}," 变成 ",[269,108039,1056],{},[195,108041,103132,108042,103135,108044,108047],{},[269,108043,106966],{},[269,108045,108046],{},"damping=\"2.0\"","，观察运动是否更难被带动。",[195,108049,103132,108050,103135,108052,108055],{},[269,108051,106960],{},[269,108053,108054],{},"axis=\"1 0 0\"","，用 viewer 观察旋转方向变化。",[14,108057,103174],{"id":103173},[35,108059,108061],{"id":108060},"indexerror-index-0-is-out-of-bounds",[269,108062,108063],{},"IndexError: index 0 is out of bounds",[19,108065,108066,108067,108069],{},"原因是 ",[269,108068,106713],{},"，没有 actuator。",[35,108071,108072],{"id":108072},"关节几乎不动",[19,108074,108075],{},"可能原因:",[192,108077,108078,108083,108087,108093],{},[195,108079,108080,108082],{},[269,108081,107788],{}," 太小",[195,108084,108085,108082],{},[269,108086,106576],{},[195,108088,108089,108092],{},[269,108090,108091],{},"damping"," 太大",[195,108094,108095],{},"重力方向导致运动不明显",[35,108097,108098],{"id":108098},"模型编译失败",[19,108100,108101,108102,108104],{},"检查 actuator 引用的 ",[269,108103,107023],{}," 是否存在，joint 名称是否拼写一致。",[35,108106,108108,108110],{"id":108107},"datactrl0-写了但没有效果",[269,108109,106847],{}," 写了但没有效果",[19,108112,103296],{},[192,108114,108115,108120,108123,108128,108133],{},[195,108116,108117,108119],{},[269,108118,102879],{}," 是否大于 0。",[195,108121,108122],{},"motor 是否引用了正确 joint。",[195,108124,108125,108127],{},[269,108126,107788],{}," 是否太小。",[195,108129,108130,108132],{},[269,108131,106576],{}," 是否把输入限制得太小。",[195,108134,108135],{},"body 是否真的有可动 joint。",[35,108137,108138],{"id":108138},"控制输入超过范围会怎样",[19,108140,108141],{},"如果设置了：",[316,108143,108145],{"className":53789,"code":108144,"language":53791,"meta":50,"style":50},"ctrlrange=\"-2 2\" ctrllimited=\"true\"\n",[269,108146,108147],{"__ignoreMap":50},[324,108148,108149],{"class":326,"line":327},[324,108150,108144],{"class":867},[19,108152,108153],{},"MuJoCo 会把控制输入限制在这个范围附近。为了让代码更清晰，实际控制任务里仍建议在 Python 里自己写：",[316,108155,108157],{"className":31100,"code":108156,"language":31102,"meta":50,"style":50},"action = np.clip(action, -2.0, 2.0)\ndata.ctrl[0] = action\n",[269,108158,108159,108179],{"__ignoreMap":50},[324,108160,108161,108164,108166,108169,108171,108173,108175,108177],{"class":326,"line":327},[324,108162,108163],{"class":867},"action ",[324,108165,913],{"class":863},[324,108167,108168],{"class":867}," np.clip(action, ",[324,108170,1396],{"class":863},[324,108172,105981],{"class":916},[324,108174,13164],{"class":867},[324,108176,105981],{"class":916},[324,108178,874],{"class":867},[324,108180,108181,108183,108185,108187,108189],{"class":326,"line":203},[324,108182,106592],{"class":867},[324,108184,1056],{"class":916},[324,108186,5172],{"class":867},[324,108188,913],{"class":863},[324,108190,108191],{"class":867}," action\n",[14,108193,103328],{"id":103327},[19,108195,108196],{},"这一章建立了控制任务的基本形式：",[316,108198,108201],{"className":108199,"code":108200,"language":5916,"meta":50},[5914],"读取状态 qpos\u002Fqvel\n→ 计算控制 ctrl\n→ 写入 data.ctrl\n→ mj_step 推进仿真\n",[269,108202,108200],{"__ignoreMap":50},[19,108204,108205],{},"后面的 Cartpole 和 Reacher 只是把这个形式扩展到更多关节和更复杂的观测、奖励。",[775,108207,108208],{},"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":50,"searchDepth":203,"depth":203,"links":108210},[108211,108212,108213,108218,108222,108223,108224,108232],{"id":101368,"depth":203,"text":101369},{"id":101491,"depth":203,"text":101492},{"id":101765,"depth":203,"text":101766,"children":108214},[108215,108216,108217],{"id":106854,"depth":338,"text":106855},{"id":106904,"depth":338,"text":106905},{"id":106970,"depth":338,"text":106971},{"id":101973,"depth":203,"text":101974,"children":108219},[108220,108221],{"id":102293,"depth":338,"text":102293},{"id":102429,"depth":338,"text":102429},{"id":103036,"depth":203,"text":103037},{"id":103068,"depth":203,"text":103069},{"id":103173,"depth":203,"text":103174,"children":108225},[108226,108227,108228,108229,108231],{"id":108060,"depth":338,"text":108063},{"id":108072,"depth":338,"text":108072},{"id":108098,"depth":338,"text":108098},{"id":108107,"depth":338,"text":108230},"data.ctrl[0] 写了但没有效果",{"id":108138,"depth":338,"text":108138},{"id":103327,"depth":203,"text":103328},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch4-actuator",{"title":106542,"description":50},"wiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制","mt4nnL0lFlzEpGWxxST3l_nQ01XJuTf2fsJ_L9rP9Ag",{"id":108239,"title":108240,"body":108241,"description":50,"extension":792,"meta":110150,"navigation":487,"path":110151,"seo":110152,"stem":110153,"__hash__":110154},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer.md","5.Viewer 可视化与 Renderer 离屏渲染",{"type":7,"value":108242,"toc":110126},[108243,108246,108248,108251,108259,108262,108279,108282,108307,108310,108356,108358,108360,108415,108417,108436,108438,108481,108484,108501,108504,108520,108530,108537,108539,108542,108545,108579,108582,108630,108634,108637,108651,108660,108664,108667,108692,108695,108699,108712,108715,108721,108724,108739,108741,108744,109004,109006,109018,109021,109333,109335,109347,109349,109352,109367,109372,109375,109397,109400,109403,109437,109440,109444,109455,109458,109475,109478,109492,109499,109519,109526,109540,109543,109555,109570,109590,109593,109615,109618,109622,109637,109648,109663,109666,109696,109712,109741,109749,109773,109776,109794,109804,109816,109823,109832,109838,109847,109850,109852,109861,109864,109879,109881,109884,109895,109898,109909,109912,109930,109932,109949,109952,109980,109982,109986,109989,110019,110025,110028,110032,110040,110043,110045,110066,110069,110072,110088,110091,110107,110109,110112,110123],[10,108244,108240],{"id":108245},"_5viewer-可视化与-renderer-离屏渲染",[14,108247,101369],{"id":101368},[19,108249,108250],{},"本章掌握两类可视化方式:",[192,108252,108253,108256],{},[195,108254,108255],{},"交互式 viewer: 适合人工观察仿真",[195,108257,108258],{},"离屏 renderer: 适合生成图像观测、保存数据、训练视觉策略",[19,108260,108261],{},"使用官方接口:",[316,108263,108265],{"className":31100,"code":108264,"language":31102,"meta":50,"style":50},"import mujoco.viewer\nmujoco.viewer.launch_passive(model, data)\n",[269,108266,108267,108274],{"__ignoreMap":50},[324,108268,108269,108271],{"class":326,"line":327},[324,108270,31114],{"class":863},[324,108272,108273],{"class":867}," mujoco.viewer\n",[324,108275,108276],{"class":326,"line":203},[324,108277,108278],{"class":867},"mujoco.viewer.launch_passive(model, data)\n",[19,108280,108281],{},"以及:",[316,108283,108285],{"className":31100,"code":108284,"language":31102,"meta":50,"style":50},"renderer = mujoco.Renderer(model)\nimage = renderer.render()\n",[269,108286,108287,108297],{"__ignoreMap":50},[324,108288,108289,108292,108294],{"class":326,"line":327},[324,108290,108291],{"class":867},"renderer ",[324,108293,913],{"class":863},[324,108295,108296],{"class":867}," mujoco.Renderer(model)\n",[324,108298,108299,108302,108304],{"class":326,"line":203},[324,108300,108301],{"class":867},"image ",[324,108303,913],{"class":863},[324,108305,108306],{"class":867}," renderer.render()\n",[19,108308,108309],{},"新手建议先理解二者区别：",[1003,108311,108312,108328],{},[1006,108313,108314],{},[1009,108315,108316,108319,108322,108325],{},[1012,108317,108318],{"align":24463},"工具",[1012,108320,108321],{"align":24463},"用途",[1012,108323,108324],{"align":24463},"是否打开窗口",[1012,108326,108327],{"align":24463},"常见场景",[1049,108329,108330,108343],{},[1009,108331,108332,108335,108338,108340],{},[1054,108333,108334],{"align":24463},"Viewer",[1054,108336,108337],{"align":24463},"人眼实时观察仿真",[1054,108339,105386],{"align":24463},[1054,108341,108342],{"align":24463},"调试模型、看控制效果",[1009,108344,108345,108348,108351,108353],{},[1054,108346,108347],{"align":24463},"Renderer",[1054,108349,108350],{"align":24463},"生成图像数组",[1054,108352,105399],{"align":24463},[1054,108354,108355],{"align":24463},"保存图片、训练视觉策略、服务器批量采集",[14,108357,101492],{"id":101491},[19,108359,101495],{},[316,108361,108363],{"className":24549,"code":108362,"language":24551,"meta":50,"style":50},"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",[269,108364,108365,108377,108387,108395,108403],{"__ignoreMap":50},[324,108366,108367,108369,108371,108373,108375],{"class":326,"line":327},[324,108368,735],{"class":734},[324,108370,27038],{"class":738},[324,108372,760],{"class":738},[324,108374,27123],{"class":916},[324,108376,25402],{"class":916},[324,108378,108379,108381,108383,108385],{"class":326,"line":203},[324,108380,101530],{"class":738},[324,108382,101533],{"class":738},[324,108384,101536],{"class":738},[324,108386,25402],{"class":916},[324,108388,108389,108391,108393],{"class":326,"line":338},[324,108390,101543],{"class":738},[324,108392,101546],{"class":738},[324,108394,25402],{"class":916},[324,108396,108397,108399,108401],{"class":326,"line":344},[324,108398,101553],{"class":738},[324,108400,101556],{"class":738},[324,108402,25402],{"class":916},[324,108404,108405,108407,108409,108411,108413],{"class":326,"line":484},[324,108406,101563],{"class":738},[324,108408,101566],{"class":738},[324,108410,101569],{"class":738},[324,108412,101572],{"class":738},[324,108414,103237],{"class":738},[19,108416,103540],{},[316,108418,108420],{"className":24549,"code":108419,"language":24551,"meta":50,"style":50},"pip install \"mujoco>=2.3\" numpy pillow\n",[269,108421,108422],{"__ignoreMap":50},[324,108423,108424,108426,108428,108430,108433],{"class":326,"line":327},[324,108425,24558],{"class":734},[324,108427,760],{"class":738},[324,108429,101652],{"class":738},[324,108431,108432],{"class":738}," numpy",[324,108434,108435],{"class":738}," pillow\n",[19,108437,103557],{},[316,108439,108441],{"className":24549,"code":108440,"language":24551,"meta":50,"style":50},"conda create -n mujoco-render python=3.10 -y\nconda activate mujoco-render\npip install \"mujoco>=2.3\" numpy pillow\n",[269,108442,108443,108460,108469],{"__ignoreMap":50},[324,108444,108445,108447,108449,108451,108454,108456,108458],{"class":326,"line":327},[324,108446,31052],{"class":734},[324,108448,29898],{"class":738},[324,108450,25839],{"class":916},[324,108452,108453],{"class":738}," mujoco-render",[324,108455,101697],{"class":738},[324,108457,101700],{"class":916},[324,108459,101703],{"class":916},[324,108461,108462,108464,108466],{"class":326,"line":203},[324,108463,31052],{"class":734},[324,108465,101710],{"class":738},[324,108467,108468],{"class":738}," mujoco-render\n",[324,108470,108471,108473,108475,108477,108479],{"class":326,"line":338},[324,108472,24558],{"class":734},[324,108474,760],{"class":738},[324,108476,101652],{"class":738},[324,108478,108432],{"class":738},[324,108480,108435],{"class":738},[19,108482,108483],{},"离屏渲染后端:",[316,108485,108487],{"className":24549,"code":108486,"language":24551,"meta":50,"style":50},"export MUJOCO_GL=egl\n",[269,108488,108489],{"__ignoreMap":50},[324,108490,108491,108493,108496,108498],{"class":326,"line":327},[324,108492,25766],{"class":863},[324,108494,108495],{"class":867}," MUJOCO_GL",[324,108497,913],{"class":863},[324,108499,108500],{"class":867},"egl\n",[19,108502,108503],{},"或:",[316,108505,108507],{"className":24549,"code":108506,"language":24551,"meta":50,"style":50},"export MUJOCO_GL=osmesa\n",[269,108508,108509],{"__ignoreMap":50},[324,108510,108511,108513,108515,108517],{"class":326,"line":327},[324,108512,25766],{"class":863},[324,108514,108495],{"class":867},[324,108516,913],{"class":863},[324,108518,108519],{"class":867},"osmesa\n",[19,108521,108522,108523,108526,108527,29107],{},"可能存在版本差异: 不同显卡驱动、Mesa、EGL 支持情况不同。如果 ",[269,108524,108525],{},"egl"," 失败，再尝试 ",[269,108528,108529],{},"osmesa",[19,108531,108532,108533,108536],{},"如果你在本机桌面环境运行，通常先不要设置 ",[269,108534,108535],{},"MUJOCO_GL","，直接运行 viewer。只有在远程服务器、无显示器环境或保存离屏图片时报 OpenGL 错误时，再尝试设置。",[14,108538,101766],{"id":101765},[19,108540,108541],{},"Viewer 是实时窗口。Renderer 是把仿真画面渲染成 NumPy 图像数组。",[19,108543,108544],{},"典型 viewer 流程:",[316,108546,108548],{"className":31100,"code":108547,"language":31102,"meta":50,"style":50},"with mujoco.viewer.launch_passive(model, data) as viewer:\n    while viewer.is_running():\n        mujoco.mj_step(model, data)\n        viewer.sync()\n",[269,108549,108550,108563,108570,108574],{"__ignoreMap":50},[324,108551,108552,108555,108558,108560],{"class":326,"line":327},[324,108553,108554],{"class":863},"with",[324,108556,108557],{"class":867}," mujoco.viewer.launch_passive(model, data) ",[324,108559,32105],{"class":863},[324,108561,108562],{"class":867}," viewer:\n",[324,108564,108565,108567],{"class":326,"line":203},[324,108566,2981],{"class":863},[324,108568,108569],{"class":867}," viewer.is_running():\n",[324,108571,108572],{"class":326,"line":338},[324,108573,102237],{"class":867},[324,108575,108576],{"class":326,"line":344},[324,108577,108578],{"class":867},"        viewer.sync()\n",[19,108580,108581],{},"典型 renderer 流程:",[316,108583,108585],{"className":31100,"code":108584,"language":31102,"meta":50,"style":50},"renderer = mujoco.Renderer(model, height=480, width=640)\nmujoco.mj_step(model, data)\nrenderer.update_scene(data)\nimage = renderer.render()\n",[269,108586,108587,108613,108617,108622],{"__ignoreMap":50},[324,108588,108589,108591,108593,108596,108598,108600,108602,108604,108606,108608,108611],{"class":326,"line":327},[324,108590,108291],{"class":867},[324,108592,913],{"class":863},[324,108594,108595],{"class":867}," mujoco.Renderer(model, ",[324,108597,25705],{"class":5945},[324,108599,913],{"class":863},[324,108601,43064],{"class":916},[324,108603,13164],{"class":867},[324,108605,25701],{"class":5945},[324,108607,913],{"class":863},[324,108609,108610],{"class":916},"640",[324,108612,874],{"class":867},[324,108614,108615],{"class":326,"line":203},[324,108616,105226],{"class":867},[324,108618,108619],{"class":326,"line":338},[324,108620,108621],{"class":867},"renderer.update_scene(data)\n",[324,108623,108624,108626,108628],{"class":326,"line":344},[324,108625,108301],{"class":867},[324,108627,913],{"class":863},[324,108629,108306],{"class":867},[35,108631,108633],{"id":108632},"viewer-的同步逻辑","viewer 的同步逻辑",[19,108635,108636],{},"viewer 只是显示窗口，不会自动帮你推进仿真。你仍然需要：",[316,108638,108640],{"className":31100,"code":108639,"language":31102,"meta":50,"style":50},"mujoco.mj_step(model, data)\nviewer.sync()\n",[269,108641,108642,108646],{"__ignoreMap":50},[324,108643,108644],{"class":326,"line":327},[324,108645,105226],{"class":867},[324,108647,108648],{"class":326,"line":203},[324,108649,108650],{"class":867},"viewer.sync()\n",[19,108652,108653,108655,108656,108659],{},[269,108654,101936],{}," 负责算物理，",[269,108657,108658],{},"viewer.sync()"," 负责把最新状态同步到窗口。",[35,108661,108663],{"id":108662},"为什么要-sleep","为什么要 sleep",[19,108665,108666],{},"如果不控制循环速度，仿真可能跑得非常快，窗口里一闪而过。示例代码用：",[316,108668,108670],{"className":31100,"code":108669,"language":31102,"meta":50,"style":50},"sleep_time = model.opt.timestep - (time.time() - step_start)\n",[269,108671,108672],{"__ignoreMap":50},[324,108673,108674,108677,108679,108682,108684,108687,108689],{"class":326,"line":327},[324,108675,108676],{"class":867},"sleep_time ",[324,108678,913],{"class":863},[324,108680,108681],{"class":867}," model.opt.timestep ",[324,108683,1396],{"class":863},[324,108685,108686],{"class":867}," (time.time() ",[324,108688,1396],{"class":863},[324,108690,108691],{"class":867}," step_start)\n",[19,108693,108694],{},"让真实时间尽量接近仿真时间。例如 timestep 是 0.01 秒，就尽量每 0.01 秒显示一步。",[35,108696,108698],{"id":108697},"renderer-输出是什么","renderer 输出是什么",[316,108700,108702],{"className":31100,"code":108701,"language":31102,"meta":50,"style":50},"image = renderer.render()\n",[269,108703,108704],{"__ignoreMap":50},[324,108705,108706,108708,108710],{"class":326,"line":327},[324,108707,108301],{"class":867},[324,108709,913],{"class":863},[324,108711,108306],{"class":867},[19,108713,108714],{},"得到的是 NumPy 数组，形状通常是：",[316,108716,108719],{"className":108717,"code":108718,"language":5916,"meta":50},[5914],"(height, width, 3)\n",[269,108720,108718],{"__ignoreMap":50},[19,108722,108723],{},"最后一维的 3 表示 RGB 三个颜色通道。保存图片时可以交给 Pillow：",[316,108725,108727],{"className":31100,"code":108726,"language":31102,"meta":50,"style":50},"Image.fromarray(image).save(\"render_output.png\")\n",[269,108728,108729],{"__ignoreMap":50},[324,108730,108731,108734,108737],{"class":326,"line":327},[324,108732,108733],{"class":867},"Image.fromarray(image).save(",[324,108735,108736],{"class":738},"\"render_output.png\"",[324,108738,874],{"class":867},[14,108740,101974],{"id":101973},[19,108742,108743],{},"交互式 Viewer:",[316,108745,108747],{"className":31100,"code":108746,"language":31102,"meta":50,"style":50},"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",[269,108748,108749,108755,108759,108765,108771,108775,108779,108787,108792,108796,108800,108804,108809,108814,108818,108822,108826,108831,108835,108839,108843,108847,108851,108855,108867,108879,108887,108891,108901,108921,108931,108936,108941,108945,108962,108975,108980,108984,108988,109000],{"__ignoreMap":50},[324,108750,108751,108753],{"class":326,"line":327},[324,108752,31114],{"class":863},[324,108754,32551],{"class":867},[324,108756,108757],{"class":326,"line":203},[324,108758,488],{"emptyLinePlaceholder":487},[324,108760,108761,108763],{"class":326,"line":338},[324,108762,31114],{"class":863},[324,108764,102022],{"class":867},[324,108766,108767,108769],{"class":326,"line":344},[324,108768,31114],{"class":863},[324,108770,108273],{"class":867},[324,108772,108773],{"class":326,"line":484},[324,108774,488],{"emptyLinePlaceholder":487},[324,108776,108777],{"class":326,"line":491},[324,108778,488],{"emptyLinePlaceholder":487},[324,108780,108781,108783,108785],{"class":326,"line":496},[324,108782,102035],{"class":916},[324,108784,14293],{"class":863},[324,108786,102040],{"class":738},[324,108788,108789],{"class":326,"line":502},[324,108790,108791],{"class":738},"\u003Cmujoco model=\"viewer_demo\">\n",[324,108793,108794],{"class":326,"line":508},[324,108795,102050],{"class":738},[324,108797,108798],{"class":326,"line":514},[324,108799,488],{"emptyLinePlaceholder":487},[324,108801,108802],{"class":326,"line":2343},[324,108803,102059],{"class":738},[324,108805,108806],{"class":326,"line":2348},[324,108807,108808],{"class":738},"    \u003Clight name=\"top_light\" pos=\"0 0 3\"\u002F>\n",[324,108810,108811],{"class":326,"line":2354},[324,108812,108813],{"class":738},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[324,108815,108816],{"class":326,"line":2359},[324,108817,488],{"emptyLinePlaceholder":487},[324,108819,108820],{"class":326,"line":2373},[324,108821,102073],{"class":738},[324,108823,108824],{"class":326,"line":2378},[324,108825,102078],{"class":738},[324,108827,108828],{"class":326,"line":2384},[324,108829,108830],{"class":738},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[324,108832,108833],{"class":326,"line":2405},[324,108834,102088],{"class":738},[324,108836,108837],{"class":326,"line":2410},[324,108838,102093],{"class":738},[324,108840,108841],{"class":326,"line":2424},[324,108842,102098],{"class":738},[324,108844,108845],{"class":326,"line":2429},[324,108846,96420],{"class":738},[324,108848,108849],{"class":326,"line":2458},[324,108850,488],{"emptyLinePlaceholder":487},[324,108852,108853],{"class":326,"line":2463},[324,108854,488],{"emptyLinePlaceholder":487},[324,108856,108857,108859,108861,108863,108865],{"class":326,"line":2480},[324,108858,32669],{"class":863},[324,108860,2703],{"class":734},[324,108862,102119],{"class":867},[324,108864,96408],{"class":916},[324,108866,4468],{"class":867},[324,108868,108869,108871,108873,108875,108877],{"class":326,"line":2485},[324,108870,102128],{"class":867},[324,108872,913],{"class":863},[324,108874,102133],{"class":867},[324,108876,102035],{"class":916},[324,108878,874],{"class":867},[324,108880,108881,108883,108885],{"class":326,"line":2490},[324,108882,102142],{"class":867},[324,108884,913],{"class":863},[324,108886,102147],{"class":867},[324,108888,108889],{"class":326,"line":2495},[324,108890,488],{"emptyLinePlaceholder":487},[324,108892,108893,108895,108897,108899],{"class":326,"line":2509},[324,108894,34900],{"class":863},[324,108896,108557],{"class":867},[324,108898,32105],{"class":863},[324,108900,108562],{"class":867},[324,108902,108903,108906,108909,108911,108914,108916,108919],{"class":326,"line":2514},[324,108904,108905],{"class":863},"        while",[324,108907,108908],{"class":867}," viewer.is_running() ",[324,108910,31184],{"class":863},[324,108912,108913],{"class":867}," data.time ",[324,108915,1774],{"class":863},[324,108917,108918],{"class":916}," 5.0",[324,108920,4468],{"class":867},[324,108922,108923,108926,108928],{"class":326,"line":3306},[324,108924,108925],{"class":867},"            step_start ",[324,108927,913],{"class":863},[324,108929,108930],{"class":867}," time.time()\n",[324,108932,108933],{"class":326,"line":3320},[324,108934,108935],{"class":867},"            mujoco.mj_step(model, data)\n",[324,108937,108938],{"class":326,"line":3328},[324,108939,108940],{"class":867},"            viewer.sync()\n",[324,108942,108943],{"class":326,"line":3333},[324,108944,488],{"emptyLinePlaceholder":487},[324,108946,108947,108950,108952,108954,108956,108958,108960],{"class":326,"line":3339},[324,108948,108949],{"class":867},"            sleep_time ",[324,108951,913],{"class":863},[324,108953,108681],{"class":867},[324,108955,1396],{"class":863},[324,108957,108686],{"class":867},[324,108959,1396],{"class":863},[324,108961,108691],{"class":867},[324,108963,108964,108966,108969,108971,108973],{"class":326,"line":3345},[324,108965,5371],{"class":863},[324,108967,108968],{"class":867}," sleep_time ",[324,108970,1824],{"class":863},[324,108972,4822],{"class":916},[324,108974,4468],{"class":867},[324,108976,108977],{"class":326,"line":3350},[324,108978,108979],{"class":867},"                time.sleep(sleep_time)\n",[324,108981,108982],{"class":326,"line":8677},[324,108983,488],{"emptyLinePlaceholder":487},[324,108985,108986],{"class":326,"line":8701},[324,108987,488],{"emptyLinePlaceholder":487},[324,108989,108990,108992,108994,108996,108998],{"class":326,"line":8706},[324,108991,2262],{"class":863},[324,108993,31942],{"class":916},[324,108995,102280],{"class":863},[324,108997,102283],{"class":738},[324,108999,4468],{"class":867},[324,109001,109002],{"class":326,"line":8712},[324,109003,102290],{"class":867},[19,109005,104291],{},[316,109007,109009],{"className":24549,"code":109008,"language":24551,"meta":50,"style":50},"touch ch5_viewer.py\n",[269,109010,109011],{"__ignoreMap":50},[324,109012,109013,109015],{"class":326,"line":327},[324,109014,102004],{"class":734},[324,109016,109017],{"class":738}," ch5_viewer.py\n",[19,109019,109020],{},"离屏 Renderer 保存图片:",[316,109022,109024],{"className":31100,"code":109023,"language":31102,"meta":50,"style":50},"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",[269,109025,109026,109038,109042,109048,109058,109062,109066,109074,109079,109083,109087,109091,109095,109100,109104,109108,109112,109116,109120,109124,109128,109132,109136,109140,109144,109156,109168,109176,109201,109205,109221,109225,109229,109244,109253,109257,109271,109276,109281,109285,109297,109309,109313,109317,109329],{"__ignoreMap":50},[324,109027,109028,109030,109033,109035],{"class":326,"line":327},[324,109029,31459],{"class":863},[324,109031,109032],{"class":867}," pathlib ",[324,109034,31114],{"class":863},[324,109036,109037],{"class":867}," Path\n",[324,109039,109040],{"class":326,"line":203},[324,109041,488],{"emptyLinePlaceholder":487},[324,109043,109044,109046],{"class":326,"line":338},[324,109045,31114],{"class":863},[324,109047,102022],{"class":867},[324,109049,109050,109052,109054,109056],{"class":326,"line":344},[324,109051,31459],{"class":863},[324,109053,47985],{"class":916},[324,109055,47988],{"class":863},[324,109057,47991],{"class":867},[324,109059,109060],{"class":326,"line":484},[324,109061,488],{"emptyLinePlaceholder":487},[324,109063,109064],{"class":326,"line":491},[324,109065,488],{"emptyLinePlaceholder":487},[324,109067,109068,109070,109072],{"class":326,"line":496},[324,109069,102035],{"class":916},[324,109071,14293],{"class":863},[324,109073,102040],{"class":738},[324,109075,109076],{"class":326,"line":502},[324,109077,109078],{"class":738},"\u003Cmujoco model=\"renderer_demo\">\n",[324,109080,109081],{"class":326,"line":508},[324,109082,102050],{"class":738},[324,109084,109085],{"class":326,"line":514},[324,109086,488],{"emptyLinePlaceholder":487},[324,109088,109089],{"class":326,"line":2343},[324,109090,102059],{"class":738},[324,109092,109093],{"class":326,"line":2348},[324,109094,108808],{"class":738},[324,109096,109097],{"class":326,"line":2354},[324,109098,109099],{"class":738},"    \u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[324,109101,109102],{"class":326,"line":2359},[324,109103,108813],{"class":738},[324,109105,109106],{"class":326,"line":2373},[324,109107,488],{"emptyLinePlaceholder":487},[324,109109,109110],{"class":326,"line":2378},[324,109111,102073],{"class":738},[324,109113,109114],{"class":326,"line":2384},[324,109115,102078],{"class":738},[324,109117,109118],{"class":326,"line":2405},[324,109119,108830],{"class":738},[324,109121,109122],{"class":326,"line":2410},[324,109123,102088],{"class":738},[324,109125,109126],{"class":326,"line":2424},[324,109127,102093],{"class":738},[324,109129,109130],{"class":326,"line":2429},[324,109131,102098],{"class":738},[324,109133,109134],{"class":326,"line":2458},[324,109135,96420],{"class":738},[324,109137,109138],{"class":326,"line":2463},[324,109139,488],{"emptyLinePlaceholder":487},[324,109141,109142],{"class":326,"line":2480},[324,109143,488],{"emptyLinePlaceholder":487},[324,109145,109146,109148,109150,109152,109154],{"class":326,"line":2485},[324,109147,32669],{"class":863},[324,109149,2703],{"class":734},[324,109151,102119],{"class":867},[324,109153,96408],{"class":916},[324,109155,4468],{"class":867},[324,109157,109158,109160,109162,109164,109166],{"class":326,"line":2490},[324,109159,102128],{"class":867},[324,109161,913],{"class":863},[324,109163,102133],{"class":867},[324,109165,102035],{"class":916},[324,109167,874],{"class":867},[324,109169,109170,109172,109174],{"class":326,"line":2495},[324,109171,102142],{"class":867},[324,109173,913],{"class":863},[324,109175,102147],{"class":867},[324,109177,109178,109181,109183,109185,109187,109189,109191,109193,109195,109197,109199],{"class":326,"line":2509},[324,109179,109180],{"class":867},"    renderer ",[324,109182,913],{"class":863},[324,109184,108595],{"class":867},[324,109186,25705],{"class":5945},[324,109188,913],{"class":863},[324,109190,43064],{"class":916},[324,109192,13164],{"class":867},[324,109194,25701],{"class":5945},[324,109196,913],{"class":863},[324,109198,108610],{"class":916},[324,109200,874],{"class":867},[324,109202,109203],{"class":326,"line":2514},[324,109204,488],{"emptyLinePlaceholder":487},[324,109206,109207,109209,109211,109213,109215,109217,109219],{"class":326,"line":3306},[324,109208,3930],{"class":863},[324,109210,102222],{"class":867},[324,109212,26767],{"class":863},[324,109214,33165],{"class":916},[324,109216,868],{"class":867},[324,109218,1175],{"class":916},[324,109220,31508],{"class":867},[324,109222,109223],{"class":326,"line":3320},[324,109224,102237],{"class":867},[324,109226,109227],{"class":326,"line":3328},[324,109228,488],{"emptyLinePlaceholder":487},[324,109230,109231,109234,109237,109239,109242],{"class":326,"line":3333},[324,109232,109233],{"class":867},"    renderer.update_scene(data, ",[324,109235,109236],{"class":5945},"camera",[324,109238,913],{"class":863},[324,109240,109241],{"class":738},"\"fixed_camera\"",[324,109243,874],{"class":867},[324,109245,109246,109249,109251],{"class":326,"line":3339},[324,109247,109248],{"class":867},"    image ",[324,109250,913],{"class":863},[324,109252,108306],{"class":867},[324,109254,109255],{"class":326,"line":3345},[324,109256,488],{"emptyLinePlaceholder":487},[324,109258,109259,109262,109264,109267,109269],{"class":326,"line":3350},[324,109260,109261],{"class":867},"    output_path ",[324,109263,913],{"class":863},[324,109265,109266],{"class":867}," Path(",[324,109268,108736],{"class":738},[324,109270,874],{"class":867},[324,109272,109273],{"class":326,"line":8677},[324,109274,109275],{"class":867},"    Image.fromarray(image).save(output_path)\n",[324,109277,109278],{"class":326,"line":8701},[324,109279,109280],{"class":867},"    renderer.close()\n",[324,109282,109283],{"class":326,"line":8706},[324,109284,488],{"emptyLinePlaceholder":487},[324,109286,109287,109289,109291,109294],{"class":326,"line":8712},[324,109288,32021],{"class":916},[324,109290,868],{"class":867},[324,109292,109293],{"class":738},"\"saved:\"",[324,109295,109296],{"class":867},", output_path.resolve())\n",[324,109298,109299,109301,109303,109306],{"class":326,"line":8739},[324,109300,32021],{"class":916},[324,109302,868],{"class":867},[324,109304,109305],{"class":738},"\"image shape:\"",[324,109307,109308],{"class":867},", image.shape)\n",[324,109310,109311],{"class":326,"line":8744},[324,109312,488],{"emptyLinePlaceholder":487},[324,109314,109315],{"class":326,"line":8750},[324,109316,488],{"emptyLinePlaceholder":487},[324,109318,109319,109321,109323,109325,109327],{"class":326,"line":8762},[324,109320,2262],{"class":863},[324,109322,31942],{"class":916},[324,109324,102280],{"class":863},[324,109326,102283],{"class":738},[324,109328,4468],{"class":867},[324,109330,109331],{"class":326,"line":8774},[324,109332,102290],{"class":867},[19,109334,104291],{},[316,109336,109338],{"className":24549,"code":109337,"language":24551,"meta":50,"style":50},"touch ch5_renderer.py\n",[269,109339,109340],{"__ignoreMap":50},[324,109341,109342,109344],{"class":326,"line":327},[324,109343,102004],{"class":734},[324,109345,109346],{"class":738}," ch5_renderer.py\n",[35,109348,102293],{"id":102293},[19,109350,109351],{},"viewer 上下文：",[316,109353,109355],{"className":31100,"code":109354,"language":31102,"meta":50,"style":50},"with mujoco.viewer.launch_passive(model, data) as viewer:\n",[269,109356,109357],{"__ignoreMap":50},[324,109358,109359,109361,109363,109365],{"class":326,"line":327},[324,109360,108554],{"class":863},[324,109362,108557],{"class":867},[324,109364,32105],{"class":863},[324,109366,108562],{"class":867},[19,109368,109369,109371],{},[269,109370,108554],{}," 语句会创建窗口，并在退出时自动清理资源。",[19,109373,109374],{},"窗口循环：",[316,109376,109378],{"className":31100,"code":109377,"language":31102,"meta":50,"style":50},"while viewer.is_running() and data.time \u003C 5.0:\n",[269,109379,109380],{"__ignoreMap":50},[324,109381,109382,109385,109387,109389,109391,109393,109395],{"class":326,"line":327},[324,109383,109384],{"class":863},"while",[324,109386,108908],{"class":867},[324,109388,31184],{"class":863},[324,109390,108913],{"class":867},[324,109392,1774],{"class":863},[324,109394,108918],{"class":916},[324,109396,4468],{"class":867},[19,109398,109399],{},"只要窗口没有被关闭，并且仿真时间还没到 5 秒，就继续运行。",[19,109401,109402],{},"固定相机：",[316,109404,109406],{"className":53789,"code":109405,"language":53791,"meta":50,"style":50},"\u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[269,109407,109408],{"__ignoreMap":50},[324,109409,109410,109412,109414,109416,109418,109420,109422,109424,109427,109430,109432,109435],{"class":326,"line":327},[324,109411,1774],{"class":867},[324,109413,109236],{"class":52022},[324,109415,15649],{"class":734},[324,109417,913],{"class":867},[324,109419,109241],{"class":738},[324,109421,101827],{"class":734},[324,109423,913],{"class":867},[324,109425,109426],{"class":738},"\"1.5 -2.0 1.2\"",[324,109428,109429],{"class":734}," xyaxes",[324,109431,913],{"class":867},[324,109433,109434],{"class":738},"\"1 0.75 0 0 0 1\"",[324,109436,101865],{"class":867},[19,109438,109439],{},"Renderer 示例中定义了一个固定相机。这样每次保存的图片视角一致，适合做数据采集。",[35,109441,109443],{"id":109442},"viewer-代码逐行细讲","Viewer 代码逐行细讲",[316,109445,109447],{"className":31100,"code":109446,"language":31102,"meta":50,"style":50},"import time\n",[269,109448,109449],{"__ignoreMap":50},[324,109450,109451,109453],{"class":326,"line":327},[324,109452,31114],{"class":863},[324,109454,32551],{"class":867},[19,109456,109457],{},"导入时间模块。后面用它控制 viewer 循环速度，让画面不要跑得太快。",[316,109459,109461],{"className":31100,"code":109460,"language":31102,"meta":50,"style":50},"import mujoco\nimport mujoco.viewer\n",[269,109462,109463,109469],{"__ignoreMap":50},[324,109464,109465,109467],{"class":326,"line":327},[324,109466,31114],{"class":863},[324,109468,102022],{"class":867},[324,109470,109471,109473],{"class":326,"line":203},[324,109472,31114],{"class":863},[324,109474,108273],{"class":867},[19,109476,109477],{},"第一行导入 MuJoCo 基础功能。第二行导入 MuJoCo 的 viewer 模块，用来打开交互式窗口。",[316,109479,109480],{"className":31100,"code":109354,"language":31102,"meta":50,"style":50},[269,109481,109482],{"__ignoreMap":50},[324,109483,109484,109486,109488,109490],{"class":326,"line":327},[324,109485,108554],{"class":863},[324,109487,108557],{"class":867},[324,109489,32105],{"class":863},[324,109491,108562],{"class":867},[19,109493,109494,109495,109498],{},"打开一个 viewer 窗口。",[269,109496,109497],{},"launch_passive"," 的意思是“被动 viewer”：它负责显示，但仿真推进仍然由你的 Python 代码控制。",[316,109500,109501],{"className":31100,"code":109377,"language":31102,"meta":50,"style":50},[269,109502,109503],{"__ignoreMap":50},[324,109504,109505,109507,109509,109511,109513,109515,109517],{"class":326,"line":327},[324,109506,109384],{"class":863},[324,109508,108908],{"class":867},[324,109510,31184],{"class":863},[324,109512,108913],{"class":867},[324,109514,1774],{"class":863},[324,109516,108918],{"class":916},[324,109518,4468],{"class":867},[19,109520,109521,109522,109525],{},"只要窗口还开着，并且仿真时间小于 5 秒，就继续循环。如果你手动关闭窗口，",[269,109523,109524],{},"viewer.is_running()"," 会变成 false，循环结束。",[316,109527,109529],{"className":31100,"code":109528,"language":31102,"meta":50,"style":50},"step_start = time.time()\n",[269,109530,109531],{"__ignoreMap":50},[324,109532,109533,109536,109538],{"class":326,"line":327},[324,109534,109535],{"class":867},"step_start ",[324,109537,913],{"class":863},[324,109539,108930],{"class":867},[19,109541,109542],{},"记录当前真实时间。后面用它计算这一轮循环花了多久。",[316,109544,109545],{"className":31100,"code":108639,"language":31102,"meta":50,"style":50},[269,109546,109547,109551],{"__ignoreMap":50},[324,109548,109549],{"class":326,"line":327},[324,109550,105226],{"class":867},[324,109552,109553],{"class":326,"line":203},[324,109554,108650],{"class":867},[19,109556,109557,109559,109560,109562,109563,109565,109566,109569],{},[269,109558,101936],{}," 推进物理仿真。",[269,109561,108658],{}," 把最新的 ",[269,109564,34123],{}," 同步到窗口里显示。没有 ",[269,109567,109568],{},"sync()","，窗口可能看不到最新状态。",[316,109571,109572],{"className":31100,"code":108669,"language":31102,"meta":50,"style":50},[269,109573,109574],{"__ignoreMap":50},[324,109575,109576,109578,109580,109582,109584,109586,109588],{"class":326,"line":327},[324,109577,108676],{"class":867},[324,109579,913],{"class":863},[324,109581,108681],{"class":867},[324,109583,1396],{"class":863},[324,109585,108686],{"class":867},[324,109587,1396],{"class":863},[324,109589,108691],{"class":867},[19,109591,109592],{},"计算还需要等待多久。假设 timestep 是 0.01 秒，而这一轮计算只花了 0.003 秒，那就 sleep 约 0.007 秒。",[316,109594,109596],{"className":31100,"code":109595,"language":31102,"meta":50,"style":50},"if sleep_time > 0:\n    time.sleep(sleep_time)\n",[269,109597,109598,109610],{"__ignoreMap":50},[324,109599,109600,109602,109604,109606,109608],{"class":326,"line":327},[324,109601,2262],{"class":863},[324,109603,108968],{"class":867},[324,109605,1824],{"class":863},[324,109607,4822],{"class":916},[324,109609,4468],{"class":867},[324,109611,109612],{"class":326,"line":203},[324,109613,109614],{"class":867},"    time.sleep(sleep_time)\n",[19,109616,109617],{},"如果还有剩余时间，就暂停一会儿。这样 viewer 看起来更接近真实速度。",[35,109619,109621],{"id":109620},"renderer-代码逐行细讲","Renderer 代码逐行细讲",[316,109623,109625],{"className":31100,"code":109624,"language":31102,"meta":50,"style":50},"from pathlib import Path\n",[269,109626,109627],{"__ignoreMap":50},[324,109628,109629,109631,109633,109635],{"class":326,"line":327},[324,109630,31459],{"class":863},[324,109632,109032],{"class":867},[324,109634,31114],{"class":863},[324,109636,109037],{"class":867},[19,109638,109639,109640,109643,109644,109647],{},"导入 ",[269,109641,109642],{},"Path","，用来处理文件路径。相比直接写字符串，",[269,109645,109646],{},"Path(\"render_output.png\")"," 更清晰。",[316,109649,109651],{"className":31100,"code":109650,"language":31102,"meta":50,"style":50},"from PIL import Image\n",[269,109652,109653],{"__ignoreMap":50},[324,109654,109655,109657,109659,109661],{"class":326,"line":327},[324,109656,31459],{"class":863},[324,109658,47985],{"class":916},[324,109660,47988],{"class":863},[324,109662,47991],{"class":867},[19,109664,109665],{},"导入 Pillow 的图片工具。MuJoCo Renderer 输出的是数组，Pillow 可以把数组保存成 PNG 图片。",[316,109667,109668],{"className":53789,"code":109405,"language":53791,"meta":50,"style":50},[269,109669,109670],{"__ignoreMap":50},[324,109671,109672,109674,109676,109678,109680,109682,109684,109686,109688,109690,109692,109694],{"class":326,"line":327},[324,109673,1774],{"class":867},[324,109675,109236],{"class":52022},[324,109677,15649],{"class":734},[324,109679,913],{"class":867},[324,109681,109241],{"class":738},[324,109683,101827],{"class":734},[324,109685,913],{"class":867},[324,109687,109426],{"class":738},[324,109689,109429],{"class":734},[324,109691,913],{"class":867},[324,109693,109434],{"class":738},[324,109695,101865],{"class":867},[19,109697,109698,109699,109701,109702,109704,109705,109708,109709,109711],{},"定义一个相机。",[269,109700,80532],{}," 是相机名字。",[269,109703,104867],{}," 是相机在世界里的位置。",[269,109706,109707],{},"xyaxes"," 控制相机朝向，初学时可以先照抄，后面通过改 ",[269,109710,104867],{}," 来调视角。",[316,109713,109715],{"className":31100,"code":109714,"language":31102,"meta":50,"style":50},"renderer = mujoco.Renderer(model, height=480, width=640)\n",[269,109716,109717],{"__ignoreMap":50},[324,109718,109719,109721,109723,109725,109727,109729,109731,109733,109735,109737,109739],{"class":326,"line":327},[324,109720,108291],{"class":867},[324,109722,913],{"class":863},[324,109724,108595],{"class":867},[324,109726,25705],{"class":5945},[324,109728,913],{"class":863},[324,109730,43064],{"class":916},[324,109732,13164],{"class":867},[324,109734,25701],{"class":5945},[324,109736,913],{"class":863},[324,109738,108610],{"class":916},[324,109740,874],{"class":867},[19,109742,109743,109744,300,109746,109748],{},"创建离屏渲染器。",[269,109745,25705],{},[269,109747,25701],{}," 决定输出图片大小。",[316,109750,109751],{"className":31100,"code":102397,"language":31102,"meta":50,"style":50},[269,109752,109753,109769],{"__ignoreMap":50},[324,109754,109755,109757,109759,109761,109763,109765,109767],{"class":326,"line":327},[324,109756,3754],{"class":863},[324,109758,102222],{"class":867},[324,109760,26767],{"class":863},[324,109762,33165],{"class":916},[324,109764,868],{"class":867},[324,109766,1175],{"class":916},[324,109768,31508],{"class":867},[324,109770,109771],{"class":326,"line":203},[324,109772,102420],{"class":867},[19,109774,109775],{},"先让仿真跑 100 步。这样保存图片时，方块已经下落了一段时间。",[316,109777,109779],{"className":31100,"code":109778,"language":31102,"meta":50,"style":50},"renderer.update_scene(data, camera=\"fixed_camera\")\n",[269,109780,109781],{"__ignoreMap":50},[324,109782,109783,109786,109788,109790,109792],{"class":326,"line":327},[324,109784,109785],{"class":867},"renderer.update_scene(data, ",[324,109787,109236],{"class":5945},[324,109789,913],{"class":863},[324,109791,109241],{"class":738},[324,109793,874],{"class":867},[19,109795,109796,109797,109799,109800,109803],{},"告诉 renderer：用当前 ",[269,109798,34123],{}," 的状态更新画面，并使用名为 ",[269,109801,109802],{},"fixed_camera"," 的相机视角。",[316,109805,109806],{"className":31100,"code":108701,"language":31102,"meta":50,"style":50},[269,109807,109808],{"__ignoreMap":50},[324,109809,109810,109812,109814],{"class":326,"line":327},[324,109811,108301],{"class":867},[324,109813,913],{"class":863},[324,109815,108306],{"class":867},[19,109817,109818,109819,109822],{},"真正渲染出图像。",[269,109820,109821],{},"image"," 是一个 NumPy 数组，不是文件。",[316,109824,109826],{"className":31100,"code":109825,"language":31102,"meta":50,"style":50},"Image.fromarray(image).save(output_path)\n",[269,109827,109828],{"__ignoreMap":50},[324,109829,109830],{"class":326,"line":327},[324,109831,109825],{"class":867},[19,109833,109834,109835,29107],{},"把数组转换成图片，并保存到 ",[269,109836,109837],{},"render_output.png",[316,109839,109841],{"className":31100,"code":109840,"language":31102,"meta":50,"style":50},"renderer.close()\n",[269,109842,109843],{"__ignoreMap":50},[324,109844,109845],{"class":326,"line":327},[324,109846,109840],{"class":867},[19,109848,109849],{},"关闭 renderer，释放图形资源。写小脚本时不一定马上出问题，但养成关闭资源的习惯更好。",[14,109851,103037],{"id":103036},[19,109853,109854,109855,109857,109858,29107],{},"Viewer 示例会打开窗口，显示红色方块下落。Renderer 示例会生成 ",[269,109856,109837],{},"，并输出图像数组形状，例如 ",[269,109859,109860],{},"(480, 640, 3)",[19,109862,109863],{},"如果图片里看不到方块，先检查：",[192,109865,109866,109869,109872],{},[195,109867,109868],{},"方块是否掉到相机视野外。",[195,109870,109871],{},"camera 位置是否合理。",[195,109873,109874,109875,109878],{},"是否在 ",[269,109876,109877],{},"renderer.update_scene(data, camera=\"fixed_camera\")"," 里指定了正确相机名。",[14,109880,103069],{"id":103068},[19,109882,109883],{},"运行 viewer:",[316,109885,109887],{"className":24549,"code":109886,"language":24551,"meta":50,"style":50},"python ch5_viewer.py\n",[269,109888,109889],{"__ignoreMap":50},[324,109890,109891,109893],{"class":326,"line":327},[324,109892,31102],{"class":734},[324,109894,109017],{"class":738},[19,109896,109897],{},"运行 renderer:",[316,109899,109901],{"className":24549,"code":109900,"language":24551,"meta":50,"style":50},"python ch5_renderer.py\n",[269,109902,109903],{"__ignoreMap":50},[324,109904,109905,109907],{"class":326,"line":327},[324,109906,31102],{"class":734},[324,109908,109346],{"class":738},[19,109910,109911],{},"如果在服务器上运行:",[316,109913,109915],{"className":24549,"code":109914,"language":24551,"meta":50,"style":50},"MUJOCO_GL=egl python ch5_renderer.py\n",[269,109916,109917],{"__ignoreMap":50},[324,109918,109919,109921,109923,109925,109928],{"class":326,"line":327},[324,109920,108535],{"class":867},[324,109922,913],{"class":863},[324,109924,108525],{"class":738},[324,109926,109927],{"class":734}," python",[324,109929,109346],{"class":738},[19,109931,108503],{},[316,109933,109935],{"className":24549,"code":109934,"language":24551,"meta":50,"style":50},"MUJOCO_GL=osmesa python ch5_renderer.py\n",[269,109936,109937],{"__ignoreMap":50},[324,109938,109939,109941,109943,109945,109947],{"class":326,"line":327},[324,109940,108535],{"class":867},[324,109942,913],{"class":863},[324,109944,108529],{"class":738},[324,109946,109927],{"class":734},[324,109948,109346],{"class":738},[19,109950,109951],{},"再做几个练习：",[192,109953,109954,109961,109964,109970],{},[195,109955,109956,109957,109960],{},"把 renderer 分辨率改成 ",[269,109958,109959],{},"height=240, width=320","，观察输出 shape。",[195,109962,109963],{},"把方块颜色改成蓝色，重新保存图片。",[195,109965,109966,109967,109969],{},"把相机 ",[269,109968,104867],{}," 改远一点，观察画面中物体是否变小。",[195,109971,109972,109973,103135,109976,109979],{},"把 viewer 示例中的 ",[269,109974,109975],{},"data.time \u003C 5.0",[269,109977,109978],{},"data.time \u003C 20.0","，观察更长时间。",[14,109981,103174],{"id":103173},[35,109983,109985],{"id":109984},"viewer-窗口打不开","viewer 窗口打不开",[19,109987,109988],{},"安装:",[316,109990,109992],{"className":24549,"code":109991,"language":24551,"meta":50,"style":50},"sudo dnf install -y glfw glfw-devel libX11 libXi libXrandr libXcursor libXinerama\n",[269,109993,109994],{"__ignoreMap":50},[324,109995,109996,109998,110000,110002,110004,110006,110008,110010,110012,110014,110016],{"class":326,"line":327},[324,109997,735],{"class":734},[324,109999,27038],{"class":738},[324,110001,760],{"class":738},[324,110003,27123],{"class":916},[324,110005,103227],{"class":738},[324,110007,101556],{"class":738},[324,110009,103232],{"class":738},[324,110011,101569],{"class":738},[324,110013,101575],{"class":738},[324,110015,101566],{"class":738},[324,110017,110018],{"class":738}," libXinerama\n",[35,110020,110022],{"id":110021},"glfwerror",[269,110023,110024],{},"GLFWError",[19,110026,110027],{},"可能是图形环境不可用。本机桌面优先测试 X11；远程服务器优先使用 Renderer 离屏渲染。",[35,110029,110031],{"id":110030},"renderer-报-opengl-后端错误","Renderer 报 OpenGL 后端错误",[19,110033,110034,110035,83261,110037,110039],{},"尝试 ",[269,110036,101758],{},[269,110038,101761],{},"。可能存在版本差异。",[35,110041,110042],{"id":110042},"保存图片是黑的",[19,110044,103296],{},[192,110046,110047,110050,110053,110063],{},[195,110048,110049],{},"XML 里是否有 light。",[195,110051,110052],{},"相机是否对着模型。",[195,110054,110055,110056,110059,110060,29107],{},"是否先 ",[269,110057,110058],{},"renderer.update_scene(data, camera=\"...\")"," 再 ",[269,110061,110062],{},"renderer.render()",[195,110064,110065],{},"物体是否已经掉出视野。",[35,110067,110068],{"id":110068},"远程服务器没有显示器",[19,110070,110071],{},"不要强行打开 viewer。优先使用 Renderer，并尝试：",[316,110073,110074],{"className":24549,"code":109914,"language":24551,"meta":50,"style":50},[269,110075,110076],{"__ignoreMap":50},[324,110077,110078,110080,110082,110084,110086],{"class":326,"line":327},[324,110079,108535],{"class":867},[324,110081,913],{"class":863},[324,110083,108525],{"class":738},[324,110085,109927],{"class":734},[324,110087,109346],{"class":738},[19,110089,110090],{},"如果 EGL 不可用，再尝试：",[316,110092,110093],{"className":24549,"code":109934,"language":24551,"meta":50,"style":50},[269,110094,110095],{"__ignoreMap":50},[324,110096,110097,110099,110101,110103,110105],{"class":326,"line":327},[324,110098,108535],{"class":867},[324,110100,913],{"class":863},[324,110102,108529],{"class":738},[324,110104,109927],{"class":734},[324,110106,109346],{"class":738},[14,110108,103328],{"id":103327},[19,110110,110111],{},"Viewer 用来调试，Renderer 用来生成图像。实际项目里常见流程是：",[192,110113,110114,110117,110120],{},[195,110115,110116],{},"先用 viewer 看模型和控制是否正常。",[195,110118,110119],{},"再用 renderer 保存图片或构造视觉观测。",[195,110121,110122],{},"最后把状态、动作、图像、奖励组织成训练数据。",[775,110124,110125],{},"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":50,"searchDepth":203,"depth":203,"links":110127},[110128,110129,110130,110135,110140,110141,110142,110149],{"id":101368,"depth":203,"text":101369},{"id":101491,"depth":203,"text":101492},{"id":101765,"depth":203,"text":101766,"children":110131},[110132,110133,110134],{"id":108632,"depth":338,"text":108633},{"id":108662,"depth":338,"text":108663},{"id":108697,"depth":338,"text":108698},{"id":101973,"depth":203,"text":101974,"children":110136},[110137,110138,110139],{"id":102293,"depth":338,"text":102293},{"id":109442,"depth":338,"text":109443},{"id":109620,"depth":338,"text":109621},{"id":103036,"depth":203,"text":103037},{"id":103068,"depth":203,"text":103069},{"id":103173,"depth":203,"text":103174,"children":110143},[110144,110145,110146,110147,110148],{"id":109984,"depth":338,"text":109985},{"id":110021,"depth":338,"text":110024},{"id":110030,"depth":338,"text":110031},{"id":110042,"depth":338,"text":110042},{"id":110068,"depth":338,"text":110068},{"id":103327,"depth":203,"text":103328},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch5-viewerrenderer",{"title":108240,"description":50},"wiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer","jkU4Bk_-8dFZQfBSHYyB6vru9sna8eICeXSnh5-FQI8",{"id":110156,"title":110157,"body":110158,"description":50,"extension":792,"meta":112069,"navigation":487,"path":112070,"seo":112071,"stem":112072,"__hash__":112073},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务.md","6.控制任务：Cartpole",{"type":7,"value":110159,"toc":112045},[110160,110163,110165,110168,110170,110189,110192,110198,110201,110203,110205,110229,110231,110245,110247,110288,110290,110301,110303,110306,110312,110315,110349,110352,110384,110387,110419,110423,110426,110466,110469,110475,110478,110484,110488,110491,110497,110500,110504,110507,110547,110549,110562,110565,110567,111149,111151,111163,111166,111177,111179,111182,111201,111213,111216,111237,111240,111243,111286,111289,111292,111312,111319,111321,111339,111354,111357,111363,111366,111372,111389,111396,111427,111438,111472,111483,111500,111509,111517,111522,111536,111539,111560,111566,111580,111585,111615,111625,111650,111658,111681,111684,111700,111703,111711,111717,111739,111752,111773,111782,111821,111832,111834,111837,111843,111846,111849,111855,111858,111878,111881,111883,111922,111924,111927,111935,111938,111941,111968,111971,111981,111987,111990,111996,111998,112004,112008,112011,112013,112016,112040,112043],[10,110161,110157],{"id":110162},"_6控制任务cartpole",[14,110164,101369],{"id":101368},[19,110166,110167],{},"本章搭建一个最小 Cartpole 控制任务。",[19,110169,105052],{},[192,110171,110172,110175,110177,110180,110183,110186],{},[195,110173,110174],{},"slide joint",[195,110176,106905],{},[195,110178,110179],{},"cart force actuator",[195,110181,110182],{},"状态观测",[195,110184,110185],{},"简单控制循环",[195,110187,110188],{},"reward 设计雏形",[19,110190,110191],{},"Cartpole 是强化学习里最经典的入门任务之一。它的目标很直观：",[316,110193,110196],{"className":110194,"code":110195,"language":5916,"meta":50},[5914],"小车可以左右移动\n杆子铰接在小车上\n控制小车左右施力\n尽量让杆子保持不倒\n",[269,110197,110195],{"__ignoreMap":50},[19,110199,110200],{},"这章不是为了做出最强控制器，而是为了让你看懂一个 MuJoCo 控制任务由哪些部分组成。",[14,110202,101492],{"id":101491},[19,110204,101495],{},[316,110206,110207],{"className":24549,"code":105109,"language":24551,"meta":50,"style":50},[269,110208,110209],{"__ignoreMap":50},[324,110210,110211,110213,110215,110217,110219,110221,110223,110225,110227],{"class":326,"line":327},[324,110212,735],{"class":734},[324,110214,27038],{"class":738},[324,110216,760],{"class":738},[324,110218,27123],{"class":916},[324,110220,105124],{"class":738},[324,110222,101520],{"class":738},[324,110224,103222],{"class":738},[324,110226,101536],{"class":738},[324,110228,105133],{"class":738},[19,110230,103540],{},[316,110232,110233],{"className":24549,"code":101641,"language":24551,"meta":50,"style":50},[269,110234,110235],{"__ignoreMap":50},[324,110236,110237,110239,110241,110243],{"class":326,"line":327},[324,110238,24558],{"class":734},[324,110240,760],{"class":738},[324,110242,101652],{"class":738},[324,110244,101655],{"class":738},[19,110246,103557],{},[316,110248,110250],{"className":24549,"code":110249,"language":24551,"meta":50,"style":50},"conda create -n mujoco-cartpole python=3.10 -y\nconda activate mujoco-cartpole\npip install \"mujoco>=2.3\" numpy\n",[269,110251,110252,110269,110278],{"__ignoreMap":50},[324,110253,110254,110256,110258,110260,110263,110265,110267],{"class":326,"line":327},[324,110255,31052],{"class":734},[324,110257,29898],{"class":738},[324,110259,25839],{"class":916},[324,110261,110262],{"class":738}," mujoco-cartpole",[324,110264,101697],{"class":738},[324,110266,101700],{"class":916},[324,110268,101703],{"class":916},[324,110270,110271,110273,110275],{"class":326,"line":203},[324,110272,31052],{"class":734},[324,110274,101710],{"class":738},[324,110276,110277],{"class":738}," mujoco-cartpole\n",[324,110279,110280,110282,110284,110286],{"class":326,"line":338},[324,110281,24558],{"class":734},[324,110283,760],{"class":738},[324,110285,101652],{"class":738},[324,110287,101655],{"class":738},[19,110289,101726],{},[192,110291,110292,110295,110298],{},[195,110293,110294],{},"本章不依赖 Gymnasium。",[195,110296,110297],{},"Cartpole XML 是简化教学模型，不等同于 Gymnasium 官方 CartPole 参数。",[195,110299,110300],{},"如果后续要对齐 Gymnasium，需要单独匹配质量、长度、奖励、终止条件。",[14,110302,101766],{"id":101765},[19,110304,110305],{},"Cartpole 的模型结构:",[316,110307,110310],{"className":110308,"code":110309,"language":5916,"meta":50},[5914],"world\n└── cart body\n    ├── slide joint: cart_x\n    └── pole body\n        └── hinge joint: pole_hinge\n",[269,110311,110309],{"__ignoreMap":50},[19,110313,110314],{},"小车通过 slide joint 左右移动:",[316,110316,110318],{"className":53789,"code":110317,"language":53791,"meta":50,"style":50},"\u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\"\u002F>\n",[269,110319,110320],{"__ignoreMap":50},[324,110321,110322,110324,110326,110328,110330,110333,110335,110337,110340,110342,110344,110347],{"class":326,"line":327},[324,110323,1774],{"class":867},[324,110325,103677],{"class":52022},[324,110327,15649],{"class":734},[324,110329,913],{"class":867},[324,110331,110332],{"class":738},"\"cart_x\"",[324,110334,54546],{"class":734},[324,110336,913],{"class":867},[324,110338,110339],{"class":738},"\"slide\"",[324,110341,106749],{"class":734},[324,110343,913],{"class":867},[324,110345,110346],{"class":738},"\"1 0 0\"",[324,110348,101865],{"class":867},[19,110350,110351],{},"杆子通过 hinge joint 旋转:",[316,110353,110355],{"className":53789,"code":110354,"language":53791,"meta":50,"style":50},"\u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[269,110356,110357],{"__ignoreMap":50},[324,110358,110359,110361,110363,110365,110367,110370,110372,110374,110376,110378,110380,110382],{"class":326,"line":327},[324,110360,1774],{"class":867},[324,110362,103677],{"class":52022},[324,110364,15649],{"class":734},[324,110366,913],{"class":867},[324,110368,110369],{"class":738},"\"pole_hinge\"",[324,110371,54546],{"class":734},[324,110373,913],{"class":867},[324,110375,106740],{"class":738},[324,110377,106749],{"class":734},[324,110379,913],{"class":867},[324,110381,106754],{"class":738},[324,110383,101865],{"class":867},[19,110385,110386],{},"控制力作用在小车 slide joint 上:",[316,110388,110390],{"className":53789,"code":110389,"language":53791,"meta":50,"style":50},"\u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\"\u002F>\n",[269,110391,110392],{"__ignoreMap":50},[324,110393,110394,110396,110398,110400,110402,110405,110407,110409,110411,110413,110415,110417],{"class":326,"line":327},[324,110395,1774],{"class":867},[324,110397,106795],{"class":52022},[324,110399,15649],{"class":734},[324,110401,913],{"class":867},[324,110403,110404],{"class":738},"\"cart_motor\"",[324,110406,106805],{"class":734},[324,110408,913],{"class":867},[324,110410,110332],{"class":738},[324,110412,106812],{"class":734},[324,110414,913],{"class":867},[324,110416,55038],{"class":738},[324,110418,101865],{"class":867},[35,110420,110422],{"id":110421},"cartpole-的状态是什么","Cartpole 的状态是什么",[19,110424,110425],{},"这个简化模型有两个关节：",[1003,110427,110428,110439],{},[1006,110429,110430],{},[1009,110431,110432,110434,110436],{},[1012,110433,103480],{"align":24463},[1012,110435,24464],{"align":24463},[1012,110437,110438],{"align":24463},"对应状态",[1049,110440,110441,110454],{},[1009,110442,110443,110448,110451],{},[1054,110444,110445],{"align":24463},[269,110446,110447],{},"cart_x",[1054,110449,110450],{"align":24463},"slide",[1054,110452,110453],{"align":24463},"小车 x 位置",[1009,110455,110456,110461,110463],{},[1054,110457,110458],{"align":24463},[269,110459,110460],{},"pole_hinge",[1054,110462,106561],{"align":24463},[1054,110464,110465],{"align":24463},"杆子角度",[19,110467,110468],{},"所以：",[316,110470,110473],{"className":110471,"code":110472,"language":5916,"meta":50},[5914],"data.qpos = [cart_x, pole_angle]\ndata.qvel = [cart_x_velocity, pole_angular_velocity]\n",[269,110474,110472],{"__ignoreMap":50},[19,110476,110477],{},"把它们拼起来就是观测：",[316,110479,110482],{"className":110480,"code":110481,"language":5916,"meta":50},[5914],"obs = [cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[269,110483,110481],{"__ignoreMap":50},[35,110485,110487],{"id":110486},"action-是什么","action 是什么",[19,110489,110490],{},"本章只有一个 actuator：",[316,110492,110495],{"className":110493,"code":110494,"language":5916,"meta":50},[5914],"data.ctrl[0] = action\n",[269,110496,110494],{"__ignoreMap":50},[19,110498,110499],{},"这个 action 会通过 motor 作用在小车的 slide joint 上。action 为正，小车倾向于向 x 正方向运动；action 为负，小车倾向于向 x 负方向运动。",[35,110501,110503],{"id":110502},"reward-是什么","reward 是什么",[19,110505,110506],{},"奖励函数：",[316,110508,110510],{"className":31100,"code":110509,"language":31102,"meta":50,"style":50},"return float(1.0 - 0.1 * cart_x * cart_x - pole_angle * pole_angle)\n",[269,110511,110512],{"__ignoreMap":50},[324,110513,110514,110516,110519,110521,110523,110525,110528,110530,110533,110535,110537,110539,110542,110544],{"class":326,"line":327},[324,110515,17775],{"class":863},[324,110517,110518],{"class":916}," float",[324,110520,868],{"class":867},[324,110522,103124],{"class":916},[324,110524,52993],{"class":863},[324,110526,110527],{"class":916}," 0.1",[324,110529,7247],{"class":863},[324,110531,110532],{"class":867}," cart_x ",[324,110534,1319],{"class":863},[324,110536,110532],{"class":867},[324,110538,1396],{"class":863},[324,110540,110541],{"class":867}," pole_angle ",[324,110543,1319],{"class":863},[324,110545,110546],{"class":867}," pole_angle)\n",[19,110548,106947],{},[192,110550,110551,110556,110559],{},[195,110552,110553,110554,29107],{},"基础奖励是 ",[269,110555,103124],{},[195,110557,110558],{},"小车离中心越远，扣分越多。",[195,110560,110561],{},"杆子角度越大，扣分越多。",[19,110563,110564],{},"这只是教学用 reward。真实任务还可能加入终止条件、角速度惩罚、动作惩罚等。",[14,110566,101974],{"id":101973},[316,110568,110570],{"className":31100,"code":110569,"language":31102,"meta":50,"style":50},"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",[269,110571,110572,110578,110588,110592,110596,110604,110609,110613,110617,110621,110626,110630,110635,110640,110645,110649,110654,110659,110664,110668,110672,110676,110680,110684,110689,110693,110697,110701,110705,110709,110719,110726,110730,110734,110748,110762,110775,110805,110809,110813,110825,110837,110845,110849,110862,110866,110870,110879,110883,110899,110909,110922,110935,110939,110962,110980,110984,110996,111000,111004,111014,111024,111028,111044,111085,111089,111109,111125,111129,111133,111145],{"__ignoreMap":50},[324,110573,110574,110576],{"class":326,"line":327},[324,110575,31114],{"class":863},[324,110577,102022],{"class":867},[324,110579,110580,110582,110584,110586],{"class":326,"line":203},[324,110581,31114],{"class":863},[324,110583,32102],{"class":867},[324,110585,32105],{"class":863},[324,110587,32108],{"class":867},[324,110589,110590],{"class":326,"line":338},[324,110591,488],{"emptyLinePlaceholder":487},[324,110593,110594],{"class":326,"line":344},[324,110595,488],{"emptyLinePlaceholder":487},[324,110597,110598,110600,110602],{"class":326,"line":484},[324,110599,102035],{"class":916},[324,110601,14293],{"class":863},[324,110603,102040],{"class":738},[324,110605,110606],{"class":326,"line":491},[324,110607,110608],{"class":738},"\u003Cmujoco model=\"cartpole\">\n",[324,110610,110611],{"class":326,"line":496},[324,110612,102050],{"class":738},[324,110614,110615],{"class":326,"line":502},[324,110616,488],{"emptyLinePlaceholder":487},[324,110618,110619],{"class":326,"line":508},[324,110620,102059],{"class":738},[324,110622,110623],{"class":326,"line":514},[324,110624,110625],{"class":738},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"4 1 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[324,110627,110628],{"class":326,"line":2343},[324,110629,488],{"emptyLinePlaceholder":487},[324,110631,110632],{"class":326,"line":2348},[324,110633,110634],{"class":738},"    \u003Cbody name=\"cart\" pos=\"0 0 0.2\">\n",[324,110636,110637],{"class":326,"line":2354},[324,110638,110639],{"class":738},"      \u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\" damping=\"0.05\"\u002F>\n",[324,110641,110642],{"class":326,"line":2359},[324,110643,110644],{"class":738},"      \u003Cgeom name=\"cart_geom\" type=\"box\" size=\"0.2 0.1 0.1\" mass=\"1\" rgba=\"0.1 0.3 1 1\"\u002F>\n",[324,110646,110647],{"class":326,"line":2373},[324,110648,488],{"emptyLinePlaceholder":487},[324,110650,110651],{"class":326,"line":2378},[324,110652,110653],{"class":738},"      \u003Cbody name=\"pole\" pos=\"0 0 0.1\">\n",[324,110655,110656],{"class":326,"line":2384},[324,110657,110658],{"class":738},"        \u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.01\"\u002F>\n",[324,110660,110661],{"class":326,"line":2405},[324,110662,110663],{"class":738},"        \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",[324,110665,110666],{"class":326,"line":2410},[324,110667,107159],{"class":738},[324,110669,110670],{"class":326,"line":2424},[324,110671,102088],{"class":738},[324,110673,110674],{"class":326,"line":2429},[324,110675,102093],{"class":738},[324,110677,110678],{"class":326,"line":2458},[324,110679,488],{"emptyLinePlaceholder":487},[324,110681,110682],{"class":326,"line":2463},[324,110683,107176],{"class":738},[324,110685,110686],{"class":326,"line":2480},[324,110687,110688],{"class":738},"    \u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[324,110690,110691],{"class":326,"line":2485},[324,110692,107186],{"class":738},[324,110694,110695],{"class":326,"line":2490},[324,110696,102098],{"class":738},[324,110698,110699],{"class":326,"line":2495},[324,110700,96420],{"class":738},[324,110702,110703],{"class":326,"line":2509},[324,110704,488],{"emptyLinePlaceholder":487},[324,110706,110707],{"class":326,"line":2514},[324,110708,488],{"emptyLinePlaceholder":487},[324,110710,110711,110713,110716],{"class":326,"line":3306},[324,110712,32669],{"class":863},[324,110714,110715],{"class":734}," get_observation",[324,110717,110718],{"class":867},"(data: mujoco.MjData) -> np.ndarray:\n",[324,110720,110721,110723],{"class":326,"line":3320},[324,110722,4819],{"class":863},[324,110724,110725],{"class":867}," np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[324,110727,110728],{"class":326,"line":3328},[324,110729,488],{"emptyLinePlaceholder":487},[324,110731,110732],{"class":326,"line":3333},[324,110733,488],{"emptyLinePlaceholder":487},[324,110735,110736,110738,110741,110744,110746],{"class":326,"line":3339},[324,110737,32669],{"class":863},[324,110739,110740],{"class":734}," compute_reward",[324,110742,110743],{"class":867},"(obs: np.ndarray) -> ",[324,110745,907],{"class":916},[324,110747,4468],{"class":867},[324,110749,110750,110753,110755,110758,110760],{"class":326,"line":3345},[324,110751,110752],{"class":867},"    cart_x ",[324,110754,913],{"class":863},[324,110756,110757],{"class":867}," obs[",[324,110759,1056],{"class":916},[324,110761,33968],{"class":867},[324,110763,110764,110767,110769,110771,110773],{"class":326,"line":3350},[324,110765,110766],{"class":867},"    pole_angle ",[324,110768,913],{"class":863},[324,110770,110757],{"class":867},[324,110772,1082],{"class":916},[324,110774,33968],{"class":867},[324,110776,110777,110779,110781,110783,110785,110787,110789,110791,110793,110795,110797,110799,110801,110803],{"class":326,"line":8677},[324,110778,4819],{"class":863},[324,110780,110518],{"class":916},[324,110782,868],{"class":867},[324,110784,103124],{"class":916},[324,110786,52993],{"class":863},[324,110788,110527],{"class":916},[324,110790,7247],{"class":863},[324,110792,110532],{"class":867},[324,110794,1319],{"class":863},[324,110796,110532],{"class":867},[324,110798,1396],{"class":863},[324,110800,110541],{"class":867},[324,110802,1319],{"class":863},[324,110804,110546],{"class":867},[324,110806,110807],{"class":326,"line":8701},[324,110808,488],{"emptyLinePlaceholder":487},[324,110810,110811],{"class":326,"line":8706},[324,110812,488],{"emptyLinePlaceholder":487},[324,110814,110815,110817,110819,110821,110823],{"class":326,"line":8712},[324,110816,32669],{"class":863},[324,110818,2703],{"class":734},[324,110820,102119],{"class":867},[324,110822,96408],{"class":916},[324,110824,4468],{"class":867},[324,110826,110827,110829,110831,110833,110835],{"class":326,"line":8739},[324,110828,102128],{"class":867},[324,110830,913],{"class":863},[324,110832,102133],{"class":867},[324,110834,102035],{"class":916},[324,110836,874],{"class":867},[324,110838,110839,110841,110843],{"class":326,"line":8744},[324,110840,102142],{"class":867},[324,110842,913],{"class":863},[324,110844,102147],{"class":867},[324,110846,110847],{"class":326,"line":8750},[324,110848,488],{"emptyLinePlaceholder":487},[324,110850,110851,110853,110855,110857,110859],{"class":326,"line":8762},[324,110852,105790],{"class":867},[324,110854,1082],{"class":916},[324,110856,5172],{"class":867},[324,110858,913],{"class":863},[324,110860,110861],{"class":916}," 0.1\n",[324,110863,110864],{"class":326,"line":8774},[324,110865,105803],{"class":867},[324,110867,110868],{"class":326,"line":8786},[324,110869,488],{"emptyLinePlaceholder":487},[324,110871,110872,110875,110877],{"class":326,"line":10445},[324,110873,110874],{"class":867},"    total_reward ",[324,110876,913],{"class":863},[324,110878,105482],{"class":916},[324,110880,110881],{"class":326,"line":10470},[324,110882,488],{"emptyLinePlaceholder":487},[324,110884,110885,110887,110889,110891,110893,110895,110897],{"class":326,"line":10493},[324,110886,3930],{"class":863},[324,110888,32338],{"class":867},[324,110890,26767],{"class":863},[324,110892,33165],{"class":916},[324,110894,868],{"class":867},[324,110896,7139],{"class":916},[324,110898,31508],{"class":867},[324,110900,110901,110904,110906],{"class":326,"line":10517},[324,110902,110903],{"class":867},"        obs ",[324,110905,913],{"class":863},[324,110907,110908],{"class":867}," get_observation(data)\n",[324,110910,110911,110914,110916,110918,110920],{"class":326,"line":10522},[324,110912,110913],{"class":867},"        pole_angle ",[324,110915,913],{"class":863},[324,110917,110757],{"class":867},[324,110919,1082],{"class":916},[324,110921,33968],{"class":867},[324,110923,110924,110927,110929,110931,110933],{"class":326,"line":10527},[324,110925,110926],{"class":867},"        pole_angular_velocity ",[324,110928,913],{"class":863},[324,110930,110757],{"class":867},[324,110932,938],{"class":916},[324,110934,33968],{"class":867},[324,110936,110937],{"class":326,"line":10532},[324,110938,488],{"emptyLinePlaceholder":487},[324,110940,110941,110944,110946,110949,110951,110953,110955,110957,110959],{"class":326,"line":10541},[324,110942,110943],{"class":867},"        action ",[324,110945,913],{"class":863},[324,110947,110948],{"class":916}," 2.0",[324,110950,7247],{"class":863},[324,110952,110541],{"class":867},[324,110954,1345],{"class":863},[324,110956,62589],{"class":916},[324,110958,7247],{"class":863},[324,110960,110961],{"class":867}," pole_angular_velocity\n",[324,110963,110964,110966,110968,110970,110972,110974,110976,110978],{"class":326,"line":10546},[324,110965,110943],{"class":867},[324,110967,913],{"class":863},[324,110969,108168],{"class":867},[324,110971,1396],{"class":863},[324,110973,103124],{"class":916},[324,110975,13164],{"class":867},[324,110977,103124],{"class":916},[324,110979,874],{"class":867},[324,110981,110982],{"class":326,"line":10552},[324,110983,488],{"emptyLinePlaceholder":487},[324,110985,110986,110988,110990,110992,110994],{"class":326,"line":10573},[324,110987,107338],{"class":867},[324,110989,1056],{"class":916},[324,110991,5172],{"class":867},[324,110993,913],{"class":863},[324,110995,108191],{"class":867},[324,110997,110998],{"class":326,"line":10579},[324,110999,102237],{"class":867},[324,111001,111002],{"class":326,"line":10593},[324,111003,488],{"emptyLinePlaceholder":487},[324,111005,111006,111009,111011],{"class":326,"line":10599},[324,111007,111008],{"class":867},"        reward ",[324,111010,913],{"class":863},[324,111012,111013],{"class":867}," compute_reward(get_observation(data))\n",[324,111015,111016,111019,111021],{"class":326,"line":10626},[324,111017,111018],{"class":867},"        total_reward ",[324,111020,10206],{"class":863},[324,111022,111023],{"class":867}," reward\n",[324,111025,111026],{"class":326,"line":10635},[324,111027,488],{"emptyLinePlaceholder":487},[324,111029,111030,111032,111034,111036,111038,111040,111042],{"class":326,"line":10641},[324,111031,3226],{"class":863},[324,111033,32338],{"class":867},[324,111035,1192],{"class":863},[324,111037,6483],{"class":916},[324,111039,102280],{"class":863},[324,111041,4822],{"class":916},[324,111043,4468],{"class":867},[324,111045,111046,111048,111050,111053,111056,111059,111062,111064,111067,111070,111072,111074,111076,111078,111081,111083],{"class":326,"line":10649},[324,111047,35372],{"class":916},[324,111049,868],{"class":867},[324,111051,111052],{"class":738},"\"step:\"",[324,111054,111055],{"class":867},", step, ",[324,111057,111058],{"class":738},"\"obs:\"",[324,111060,111061],{"class":867},", np.round(obs, ",[324,111063,938],{"class":916},[324,111065,111066],{"class":867},"), ",[324,111068,111069],{"class":738},"\"action:\"",[324,111071,13164],{"class":867},[324,111073,32740],{"class":916},[324,111075,868],{"class":867},[324,111077,907],{"class":916},[324,111079,111080],{"class":867},"(action), ",[324,111082,938],{"class":916},[324,111084,31219],{"class":867},[324,111086,111087],{"class":326,"line":10654},[324,111088,488],{"emptyLinePlaceholder":487},[324,111090,111091,111093,111095,111098,111100,111102,111105,111107],{"class":326,"line":17333},[324,111092,32021],{"class":916},[324,111094,868],{"class":867},[324,111096,111097],{"class":738},"\"total_reward:\"",[324,111099,13164],{"class":867},[324,111101,32740],{"class":916},[324,111103,111104],{"class":867},"(total_reward, ",[324,111106,938],{"class":916},[324,111108,31219],{"class":867},[324,111110,111111,111113,111115,111118,111121,111123],{"class":326,"line":17339},[324,111112,32021],{"class":916},[324,111114,868],{"class":867},[324,111116,111117],{"class":738},"\"final obs:\"",[324,111119,111120],{"class":867},", np.round(get_observation(data), ",[324,111122,938],{"class":916},[324,111124,31219],{"class":867},[324,111126,111127],{"class":326,"line":17362},[324,111128,488],{"emptyLinePlaceholder":487},[324,111130,111131],{"class":326,"line":17368},[324,111132,488],{"emptyLinePlaceholder":487},[324,111134,111135,111137,111139,111141,111143],{"class":326,"line":17391},[324,111136,2262],{"class":863},[324,111138,31942],{"class":916},[324,111140,102280],{"class":863},[324,111142,102283],{"class":738},[324,111144,4468],{"class":867},[324,111146,111147],{"class":326,"line":17405},[324,111148,102290],{"class":867},[19,111150,104291],{},[316,111152,111154],{"className":24549,"code":111153,"language":24551,"meta":50,"style":50},"touch ch6_cartpole.py\n",[269,111155,111156],{"__ignoreMap":50},[324,111157,111158,111160],{"class":326,"line":327},[324,111159,102004],{"class":734},[324,111161,111162],{"class":738}," ch6_cartpole.py\n",[19,111164,111165],{},"运行：",[316,111167,111169],{"className":24549,"code":111168,"language":24551,"meta":50,"style":50},"python ch6_cartpole.py\n",[269,111170,111171],{"__ignoreMap":50},[324,111172,111173,111175],{"class":326,"line":327},[324,111174,31102],{"class":734},[324,111176,111162],{"class":738},[35,111178,102293],{"id":102293},[19,111180,111181],{},"构造观测：",[316,111183,111185],{"className":31100,"code":111184,"language":31102,"meta":50,"style":50},"def get_observation(data: mujoco.MjData) -> np.ndarray:\n    return np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[269,111186,111187,111195],{"__ignoreMap":50},[324,111188,111189,111191,111193],{"class":326,"line":327},[324,111190,32669],{"class":863},[324,111192,110715],{"class":734},[324,111194,110718],{"class":867},[324,111196,111197,111199],{"class":326,"line":203},[324,111198,4819],{"class":863},[324,111200,110725],{"class":867},[19,111202,111203,111206,111207,111209,111210,111212],{},[269,111204,111205],{},"np.concatenate"," 把位置数组和速度数组拼成一个更长的数组。这里 ",[269,111208,104751],{}," 2 维，",[269,111211,105081],{}," 2 维，所以 obs 是 4 维。",[19,111214,111215],{},"设置初始角度：",[316,111217,111219],{"className":31100,"code":111218,"language":31102,"meta":50,"style":50},"data.qpos[1] = 0.1\nmujoco.mj_forward(model, data)\n",[269,111220,111221,111233],{"__ignoreMap":50},[324,111222,111223,111225,111227,111229,111231],{"class":326,"line":327},[324,111224,105420],{"class":867},[324,111226,1082],{"class":916},[324,111228,5172],{"class":867},[324,111230,913],{"class":863},[324,111232,110861],{"class":916},[324,111234,111235],{"class":326,"line":203},[324,111236,105264],{"class":867},[19,111238,111239],{},"这让杆子一开始有一点倾斜。如果完全竖直且没有扰动，系统可能太“安静”，不利于观察控制效果。",[19,111241,111242],{},"简单反馈控制：",[316,111244,111246],{"className":31100,"code":111245,"language":31102,"meta":50,"style":50},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\naction = np.clip(action, -1.0, 1.0)\n",[269,111247,111248,111268],{"__ignoreMap":50},[324,111249,111250,111252,111254,111256,111258,111260,111262,111264,111266],{"class":326,"line":327},[324,111251,108163],{"class":867},[324,111253,913],{"class":863},[324,111255,110948],{"class":916},[324,111257,7247],{"class":863},[324,111259,110541],{"class":867},[324,111261,1345],{"class":863},[324,111263,62589],{"class":916},[324,111265,7247],{"class":863},[324,111267,110961],{"class":867},[324,111269,111270,111272,111274,111276,111278,111280,111282,111284],{"class":326,"line":203},[324,111271,108163],{"class":867},[324,111273,913],{"class":863},[324,111275,108168],{"class":867},[324,111277,1396],{"class":863},[324,111279,103124],{"class":916},[324,111281,13164],{"class":867},[324,111283,103124],{"class":916},[324,111285,874],{"class":867},[19,111287,111288],{},"这不是严格推导出来的最优控制，只是一个教学例子：根据杆子的角度和角速度，决定给小车施加多大力。",[19,111290,111291],{},"限制动作：",[316,111293,111295],{"className":31100,"code":111294,"language":31102,"meta":50,"style":50},"np.clip(action, -1.0, 1.0)\n",[269,111296,111297],{"__ignoreMap":50},[324,111298,111299,111302,111304,111306,111308,111310],{"class":326,"line":327},[324,111300,111301],{"class":867},"np.clip(action, ",[324,111303,1396],{"class":863},[324,111305,103124],{"class":916},[324,111307,13164],{"class":867},[324,111309,103124],{"class":916},[324,111311,874],{"class":867},[19,111313,111314,111315,111318],{},"因为 XML 里 ",[269,111316,111317],{},"ctrlrange=\"-1 1\"","，所以 Python 里也把 action 限制在这个范围内。",[35,111320,102429],{"id":102429},[316,111322,111323],{"className":31100,"code":111184,"language":31102,"meta":50,"style":50},[269,111324,111325,111333],{"__ignoreMap":50},[324,111326,111327,111329,111331],{"class":326,"line":327},[324,111328,32669],{"class":863},[324,111330,110715],{"class":734},[324,111332,110718],{"class":867},[324,111334,111335,111337],{"class":326,"line":203},[324,111336,4819],{"class":863},[324,111338,110725],{"class":867},[19,111340,111341,111342,111345,111346,111349,111350,111353],{},"这段定义了一个函数，用来获取当前观测。",[269,111343,111344],{},"data.qpos.copy()"," 是位置数组副本，",[269,111347,111348],{},"data.qvel.copy()"," 是速度数组副本。",[269,111351,111352],{},"np.concatenate(...)"," 把两个数组首尾拼接起来。",[19,111355,111356],{},"在本章模型里：",[316,111358,111361],{"className":111359,"code":111360,"language":5916,"meta":50},[5914],"data.qpos = [小车位置, 杆子角度]\ndata.qvel = [小车速度, 杆子角速度]\n",[269,111362,111360],{"__ignoreMap":50},[19,111364,111365],{},"所以返回的 obs 是：",[316,111367,111370],{"className":111368,"code":111369,"language":5916,"meta":50},[5914],"[小车位置, 杆子角度, 小车速度, 杆子角速度]\n",[269,111371,111369],{"__ignoreMap":50},[316,111373,111375],{"className":31100,"code":111374,"language":31102,"meta":50,"style":50},"def compute_reward(obs: np.ndarray) -> float:\n",[269,111376,111377],{"__ignoreMap":50},[324,111378,111379,111381,111383,111385,111387],{"class":326,"line":327},[324,111380,32669],{"class":863},[324,111382,110740],{"class":734},[324,111384,110743],{"class":867},[324,111386,907],{"class":916},[324,111388,4468],{"class":867},[19,111390,111391,111392,111395],{},"这行定义奖励函数。输入是观测 ",[269,111393,111394],{},"obs","，输出是一个浮点数奖励。",[316,111397,111399],{"className":31100,"code":111398,"language":31102,"meta":50,"style":50},"cart_x = obs[0]\npole_angle = obs[1]\n",[269,111400,111401,111414],{"__ignoreMap":50},[324,111402,111403,111406,111408,111410,111412],{"class":326,"line":327},[324,111404,111405],{"class":867},"cart_x ",[324,111407,913],{"class":863},[324,111409,110757],{"class":867},[324,111411,1056],{"class":916},[324,111413,33968],{"class":867},[324,111415,111416,111419,111421,111423,111425],{"class":326,"line":203},[324,111417,111418],{"class":867},"pole_angle ",[324,111420,913],{"class":863},[324,111422,110757],{"class":867},[324,111424,1082],{"class":916},[324,111426,33968],{"class":867},[19,111428,111429,111430,111433,111434,111437],{},"数组索引从 0 开始。",[269,111431,111432],{},"obs[0]"," 是第一个元素，也就是小车位置。",[269,111435,111436],{},"obs[1]"," 是第二个元素，也就是杆子角度。",[316,111439,111440],{"className":31100,"code":110509,"language":31102,"meta":50,"style":50},[269,111441,111442],{"__ignoreMap":50},[324,111443,111444,111446,111448,111450,111452,111454,111456,111458,111460,111462,111464,111466,111468,111470],{"class":326,"line":327},[324,111445,17775],{"class":863},[324,111447,110518],{"class":916},[324,111449,868],{"class":867},[324,111451,103124],{"class":916},[324,111453,52993],{"class":863},[324,111455,110527],{"class":916},[324,111457,7247],{"class":863},[324,111459,110532],{"class":867},[324,111461,1319],{"class":863},[324,111463,110532],{"class":867},[324,111465,1396],{"class":863},[324,111467,110541],{"class":867},[324,111469,1319],{"class":863},[324,111471,110546],{"class":867},[19,111473,111474,111475,111478,111479,111482],{},"这行计算奖励。",[269,111476,111477],{},"cart_x * cart_x"," 是小车位置的平方，",[269,111480,111481],{},"pole_angle * pole_angle"," 是杆子角度的平方。平方的特点是无论正负都会变成正数，所以偏离中心和角度偏离都会扣分。",[316,111484,111486],{"className":31100,"code":111485,"language":31102,"meta":50,"style":50},"data.qpos[1] = 0.1\n",[269,111487,111488],{"__ignoreMap":50},[324,111489,111490,111492,111494,111496,111498],{"class":326,"line":327},[324,111491,105420],{"class":867},[324,111493,1082],{"class":916},[324,111495,5172],{"class":867},[324,111497,913],{"class":863},[324,111499,110861],{"class":916},[19,111501,111502,111503,111505,111506,111508],{},"手动设置杆子的初始角度。因为 ",[269,111504,106177],{}," 是小车位置，",[269,111507,106180],{}," 是杆子角度，所以这里改的是杆子。",[316,111510,111511],{"className":31100,"code":105264,"language":31102,"meta":50,"style":50},[269,111512,111513],{"__ignoreMap":50},[324,111514,111515],{"class":326,"line":327},[324,111516,105264],{"class":867},[19,111518,106223,111519,111521],{},[269,111520,104751],{}," 后，刷新 MuJoCo 内部派生状态。否则有些坐标、碰撞或可视化信息可能还停留在旧状态。",[316,111523,111525],{"className":31100,"code":111524,"language":31102,"meta":50,"style":50},"total_reward = 0.0\n",[269,111526,111527],{"__ignoreMap":50},[324,111528,111529,111532,111534],{"class":326,"line":327},[324,111530,111531],{"class":867},"total_reward ",[324,111533,913],{"class":863},[324,111535,105482],{"class":916},[19,111537,111538],{},"创建一个变量，用来累计整个 episode 的奖励。初始值是 0。",[316,111540,111542],{"className":31100,"code":111541,"language":31102,"meta":50,"style":50},"for step in range(1000):\n",[269,111543,111544],{"__ignoreMap":50},[324,111545,111546,111548,111550,111552,111554,111556,111558],{"class":326,"line":327},[324,111547,3754],{"class":863},[324,111549,32338],{"class":867},[324,111551,26767],{"class":863},[324,111553,33165],{"class":916},[324,111555,868],{"class":867},[324,111557,7139],{"class":916},[324,111559,31508],{"class":867},[19,111561,111562,111563,111565],{},"循环 1000 步。",[269,111564,107855],{}," 是当前步数，从 0 到 999。",[316,111567,111569],{"className":31100,"code":111568,"language":31102,"meta":50,"style":50},"obs = get_observation(data)\n",[269,111570,111571],{"__ignoreMap":50},[324,111572,111573,111576,111578],{"class":326,"line":327},[324,111574,111575],{"class":867},"obs ",[324,111577,913],{"class":863},[324,111579,110908],{"class":867},[19,111581,111582,111583,29107],{},"读取当前状态，保存到 ",[269,111584,111394],{},[316,111586,111588],{"className":31100,"code":111587,"language":31102,"meta":50,"style":50},"pole_angle = obs[1]\npole_angular_velocity = obs[3]\n",[269,111589,111590,111602],{"__ignoreMap":50},[324,111591,111592,111594,111596,111598,111600],{"class":326,"line":327},[324,111593,111418],{"class":867},[324,111595,913],{"class":863},[324,111597,110757],{"class":867},[324,111599,1082],{"class":916},[324,111601,33968],{"class":867},[324,111603,111604,111607,111609,111611,111613],{"class":326,"line":203},[324,111605,111606],{"class":867},"pole_angular_velocity ",[324,111608,913],{"class":863},[324,111610,110757],{"class":867},[324,111612,938],{"class":916},[324,111614,33968],{"class":867},[19,111616,111617,111618,111621,111622,29107],{},"取出杆子角度和杆子角速度。为什么角速度是 ",[269,111619,111620],{},"obs[3]","？因为 obs 的顺序是 ",[269,111623,111624],{},"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]",[316,111626,111628],{"className":31100,"code":111627,"language":31102,"meta":50,"style":50},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\n",[269,111629,111630],{"__ignoreMap":50},[324,111631,111632,111634,111636,111638,111640,111642,111644,111646,111648],{"class":326,"line":327},[324,111633,108163],{"class":867},[324,111635,913],{"class":863},[324,111637,110948],{"class":916},[324,111639,7247],{"class":863},[324,111641,110541],{"class":867},[324,111643,1345],{"class":863},[324,111645,62589],{"class":916},[324,111647,7247],{"class":863},[324,111649,110961],{"class":867},[19,111651,111652,111653,300,111655,111657],{},"这是一个简单反馈控制器。它根据杆子当前角度和角速度算出动作。",[269,111654,105981],{},[269,111656,36051],{}," 是人为设置的系数，不是固定公式。",[316,111659,111661],{"className":31100,"code":111660,"language":31102,"meta":50,"style":50},"action = np.clip(action, -1.0, 1.0)\n",[269,111662,111663],{"__ignoreMap":50},[324,111664,111665,111667,111669,111671,111673,111675,111677,111679],{"class":326,"line":327},[324,111666,108163],{"class":867},[324,111668,913],{"class":863},[324,111670,108168],{"class":867},[324,111672,1396],{"class":863},[324,111674,103124],{"class":916},[324,111676,13164],{"class":867},[324,111678,103124],{"class":916},[324,111680,874],{"class":867},[19,111682,111683],{},"把 action 限制在 -1 到 1 之间。如果 action 算出来是 3，会变成 1；如果是 -4，会变成 -1。",[316,111685,111686],{"className":31100,"code":110494,"language":31102,"meta":50,"style":50},[269,111687,111688],{"__ignoreMap":50},[324,111689,111690,111692,111694,111696,111698],{"class":326,"line":327},[324,111691,106592],{"class":867},[324,111693,1056],{"class":916},[324,111695,5172],{"class":867},[324,111697,913],{"class":863},[324,111699,108191],{"class":867},[19,111701,111702],{},"把动作写入第 0 个 actuator，也就是小车电机。真正的“控制 MuJoCo”就是通过这行发生的。",[316,111704,111705],{"className":31100,"code":105226,"language":31102,"meta":50,"style":50},[269,111706,111707],{"__ignoreMap":50},[324,111708,111709],{"class":326,"line":327},[324,111710,105226],{"class":867},[19,111712,111713,111714,111716],{},"让仿真前进一步。MuJoCo 会根据刚刚写入的 ",[269,111715,106847],{}," 计算小车和杆子的下一刻状态。",[316,111718,111720],{"className":31100,"code":111719,"language":31102,"meta":50,"style":50},"reward = compute_reward(get_observation(data))\ntotal_reward += reward\n",[269,111721,111722,111731],{"__ignoreMap":50},[324,111723,111724,111727,111729],{"class":326,"line":327},[324,111725,111726],{"class":867},"reward ",[324,111728,913],{"class":863},[324,111730,111013],{"class":867},[324,111732,111733,111735,111737],{"class":326,"line":203},[324,111734,111531],{"class":867},[324,111736,10206],{"class":863},[324,111738,111023],{"class":867},[19,111740,111741,111742,111744,111745,111748,111749,29107],{},"先根据新状态计算奖励，再把它加到累计奖励中。",[269,111743,10206],{}," 是简写，",[269,111746,111747],{},"total_reward += reward"," 等价于 ",[269,111750,111751],{},"total_reward = total_reward + reward",[316,111753,111755],{"className":31100,"code":111754,"language":31102,"meta":50,"style":50},"if step % 100 == 0:\n",[269,111756,111757],{"__ignoreMap":50},[324,111758,111759,111761,111763,111765,111767,111769,111771],{"class":326,"line":327},[324,111760,2262],{"class":863},[324,111762,32338],{"class":867},[324,111764,1192],{"class":863},[324,111766,6483],{"class":916},[324,111768,102280],{"class":863},[324,111770,4822],{"class":916},[324,111772,4468],{"class":867},[19,111774,111775,111777,111778,111781],{},[269,111776,1192],{}," 是取余数。",[269,111779,111780],{},"step % 100 == 0"," 表示每 100 步打印一次，比如第 0、100、200 步。",[316,111783,111785],{"className":31100,"code":111784,"language":31102,"meta":50,"style":50},"print(\"step:\", step, \"obs:\", np.round(obs, 3), \"action:\", round(float(action), 3))\n",[269,111786,111787],{"__ignoreMap":50},[324,111788,111789,111791,111793,111795,111797,111799,111801,111803,111805,111807,111809,111811,111813,111815,111817,111819],{"class":326,"line":327},[324,111790,31137],{"class":916},[324,111792,868],{"class":867},[324,111794,111052],{"class":738},[324,111796,111055],{"class":867},[324,111798,111058],{"class":738},[324,111800,111061],{"class":867},[324,111802,938],{"class":916},[324,111804,111066],{"class":867},[324,111806,111069],{"class":738},[324,111808,13164],{"class":867},[324,111810,32740],{"class":916},[324,111812,868],{"class":867},[324,111814,907],{"class":916},[324,111816,111080],{"class":867},[324,111818,938],{"class":916},[324,111820,31219],{"class":867},[19,111822,111823,111824,111827,111828,111831],{},"打印当前步数、观测和动作。",[269,111825,111826],{},"np.round(obs, 3)"," 表示 obs 保留 3 位小数。",[269,111829,111830],{},"round(float(action), 3)"," 表示 action 保留 3 位小数。",[14,111833,103037],{"id":103036},[19,111835,111836],{},"观测向量:",[316,111838,111841],{"className":111839,"code":111840,"language":5916,"meta":50},[5914],"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[269,111842,111840],{"__ignoreMap":50},[19,111844,111845],{},"控制器是教学用的简单线性反馈，不保证最优。",[19,111847,111848],{},"每隔 100 步会打印一次：",[316,111850,111853],{"className":111851,"code":111852,"language":5916,"meta":50},[5914],"step: 当前步数\nobs: 当前观测\naction: 当前控制输入\n",[269,111854,111852],{"__ignoreMap":50},[19,111856,111857],{},"重点观察：",[192,111859,111860,111866,111871],{},[195,111861,111862,111865],{},[269,111863,111864],{},"pole_angle"," 是否越来越大。",[195,111867,111868,111870],{},[269,111869,110447],{}," 是否跑得太远。",[195,111872,111873,111874,83261,111876,29107],{},"action 是否经常被 clip 到 ",[269,111875,104636],{},[269,111877,1082],{},[19,111879,111880],{},"如果 action 长期贴着边界，说明控制器可能太激进，或者 actuator 力不够。",[14,111882,103069],{"id":103068},[192,111884,111885,111891,111894,111900,111910,111916,111919],{},[195,111886,111887,111888,29107],{},"把初始角度改为 ",[269,111889,111890],{},"data.qpos[1] = 0.3",[195,111892,111893],{},"重新运行，观察控制是否变差。",[195,111895,111896,111897,111899],{},"把 actuator ",[269,111898,107788],{}," 改小。",[195,111901,111902,111903,111906,111907,29107],{},"打印 ",[269,111904,111905],{},"model.nq, model.nv, model.nu","，应为 ",[269,111908,111909],{},"2 2 1",[195,111911,111912,111913,111915],{},"把 reward 里的 ",[269,111914,111481],{}," 系数改大，观察总奖励变化。",[195,111917,111918],{},"把控制器改成反号，观察杆子是否更容易倒。",[195,111920,111921],{},"用第 5 章 viewer 把这个 XML 放进去，可视化看小车和杆子的运动。",[14,111923,103174],{"id":103173},[35,111925,111926],{"id":111926},"杆子方向和预期不一致",[19,111928,103117,111929,111931,111932,111934],{},[269,111930,106960],{}," 和 capsule 的 ",[269,111933,103897],{},"，必要时用 viewer 可视化确认。",[35,111936,111937],{"id":111937},"控制器越控越倒",[19,111939,111940],{},"说明反馈符号可能反了，尝试:",[316,111942,111944],{"className":31100,"code":111943,"language":31102,"meta":50,"style":50},"action = -2.0 * pole_angle - 0.5 * pole_angular_velocity\n",[269,111945,111946],{"__ignoreMap":50},[324,111947,111948,111950,111952,111954,111956,111958,111960,111962,111964,111966],{"class":326,"line":327},[324,111949,108163],{"class":867},[324,111951,913],{"class":863},[324,111953,52993],{"class":863},[324,111955,105981],{"class":916},[324,111957,7247],{"class":863},[324,111959,110541],{"class":867},[324,111961,1396],{"class":863},[324,111963,62589],{"class":916},[324,111965,7247],{"class":863},[324,111967,110961],{"class":867},[35,111969,111970],{"id":111970},"小车飞走",[19,111972,111973,111974,111976,111977,111980],{},"降低 ",[269,111975,107788],{}," 或缩小 ",[269,111978,111979],{},"action"," 的 clip 范围。",[35,111982,111984,111986],{"id":111983},"obs3-为什么是杆子角速度",[269,111985,111620],{}," 为什么是杆子角速度",[19,111988,111989],{},"因为这个模型里：",[316,111991,111994],{"className":111992,"code":111993,"language":5916,"meta":50},[5914],"qpos = [cart_x, pole_angle]\nqvel = [cart_x_velocity, pole_angular_velocity]\nobs = qpos + qvel\n",[269,111995,111993],{"__ignoreMap":50},[19,111997,110468],{},[316,111999,112002],{"className":112000,"code":112001,"language":5916,"meta":50},[5914],"obs[0] = cart_x\nobs[1] = pole_angle\nobs[2] = cart_x_velocity\nobs[3] = pole_angular_velocity\n",[269,112003,112001],{"__ignoreMap":50},[35,112005,112007],{"id":112006},"reward-变成负数是否错误","reward 变成负数是否错误",[19,112009,112010],{},"不是。reward 可以是负数。它只是一个分数，强化学习算法关心的是“长期总奖励尽量大”。如果杆子角度很大或小车离中心很远，reward 变负是合理的。",[14,112012,103328],{"id":103327},[19,112014,112015],{},"一个控制任务通常包含：",[192,112017,112018,112021,112029,112034,112037],{},[195,112019,112020],{},"模型：Cartpole 的 body、joint、actuator。",[195,112022,112023,112024,1077,112026,112028],{},"观测：从 ",[269,112025,104751],{},[269,112027,105081],{}," 里取状态。",[195,112030,112031,112032,29107],{},"动作：写入 ",[269,112033,101797],{},[195,112035,112036],{},"奖励：根据任务目标打分。",[195,112038,112039],{},"循环：obs -> action -> step -> reward。",[19,112041,112042],{},"这就是后面 Gymnasium 环境的基本骨架。",[775,112044,105007],{},{"title":50,"searchDepth":203,"depth":203,"links":112046},[112047,112048,112049,112054,112058,112059,112060,112068],{"id":101368,"depth":203,"text":101369},{"id":101491,"depth":203,"text":101492},{"id":101765,"depth":203,"text":101766,"children":112050},[112051,112052,112053],{"id":110421,"depth":338,"text":110422},{"id":110486,"depth":338,"text":110487},{"id":110502,"depth":338,"text":110503},{"id":101973,"depth":203,"text":101974,"children":112055},[112056,112057],{"id":102293,"depth":338,"text":102293},{"id":102429,"depth":338,"text":102429},{"id":103036,"depth":203,"text":103037},{"id":103068,"depth":203,"text":103069},{"id":103173,"depth":203,"text":103174,"children":112061},[112062,112063,112064,112065,112067],{"id":111926,"depth":338,"text":111926},{"id":111937,"depth":338,"text":111937},{"id":111970,"depth":338,"text":111970},{"id":111983,"depth":338,"text":112066},"obs[3] 为什么是杆子角速度",{"id":112006,"depth":338,"text":112007},{"id":103327,"depth":203,"text":103328},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch6-cartpole",{"title":110157,"description":50},"wiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务","8dC1kTOiSwNp3zaPqtqpgrKIv_o7u33VnKDYsswth_E",{"id":112075,"title":112076,"body":112077,"description":50,"extension":792,"meta":114091,"navigation":487,"path":114092,"seo":114093,"stem":114094,"__hash__":114095},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务.md","7.控制任务：Reacher 机械臂到达目标",{"type":7,"value":112078,"toc":114067},[112079,112082,112084,112087,112089,112106,112109,112112,112118,112121,112123,112125,112149,112151,112165,112167,112208,112210,112228,112230,112233,112239,112242,112270,112274,112280,112305,112308,112339,112346,112349,112352,112358,112361,112367,112370,112376,112380,112383,112408,112411,112413,113173,113175,113187,113189,113200,113202,113205,113222,113225,113227,113238,113241,113243,113289,113292,113305,113308,113390,113393,113395,113411,113421,113434,113437,113476,113486,113497,113507,113520,113523,113552,113555,113565,113568,113574,113591,113602,113604,113610,113627,113638,113659,113662,113674,113677,113698,113701,113709,113717,113734,113737,113806,113813,113821,113824,113837,113844,113846,113849,113855,113858,113861,113867,113873,113875,113915,113917,113923,113932,113935,113937,113957,113960,113963,113969,113973,113975,114002,114005,114008,114035,114041,114044,114047,114049,114052,114055,114061,114064],[10,112080,112076],{"id":112081},"_7控制任务reacher-机械臂到达目标",[14,112083,101369],{"id":101368},[19,112085,112086],{},"本章搭建一个二维两关节 reacher 任务。",[19,112088,105052],{},[192,112090,112091,112094,112097,112100,112103],{},[195,112092,112093],{},"两个 hinge joint",[195,112095,112096],{},"两个 motor actuator",[195,112098,112099],{},"site 作为末端点和目标点",[195,112101,112102],{},"根据末端和目标距离设计 reward",[195,112104,112105],{},"构造机械臂任务的基本形式",[19,112107,112108],{},"这是后续机械臂模仿学习、VLA 任务的基础。",[19,112110,112111],{},"Reacher 任务可以理解为：",[316,112113,112116],{"className":112114,"code":112115,"language":5916,"meta":50},[5914],"一条两段机械臂\n末端有一个蓝色 tip\n空间里有一个红色 target\n控制两个关节转动\n让 tip 靠近 target\n",[269,112117,112115],{"__ignoreMap":50},[19,112119,112120],{},"相比 Cartpole，Reacher 更接近机械臂任务，因为它开始关注“末端位置”和“目标位置”。",[14,112122,101492],{"id":101491},[19,112124,101495],{},[316,112126,112127],{"className":24549,"code":105109,"language":24551,"meta":50,"style":50},[269,112128,112129],{"__ignoreMap":50},[324,112130,112131,112133,112135,112137,112139,112141,112143,112145,112147],{"class":326,"line":327},[324,112132,735],{"class":734},[324,112134,27038],{"class":738},[324,112136,760],{"class":738},[324,112138,27123],{"class":916},[324,112140,105124],{"class":738},[324,112142,101520],{"class":738},[324,112144,103222],{"class":738},[324,112146,101536],{"class":738},[324,112148,105133],{"class":738},[19,112150,103540],{},[316,112152,112153],{"className":24549,"code":101641,"language":24551,"meta":50,"style":50},[269,112154,112155],{"__ignoreMap":50},[324,112156,112157,112159,112161,112163],{"class":326,"line":327},[324,112158,24558],{"class":734},[324,112160,760],{"class":738},[324,112162,101652],{"class":738},[324,112164,101655],{"class":738},[19,112166,103557],{},[316,112168,112170],{"className":24549,"code":112169,"language":24551,"meta":50,"style":50},"conda create -n mujoco-reacher python=3.10 -y\nconda activate mujoco-reacher\npip install \"mujoco>=2.3\" numpy\n",[269,112171,112172,112189,112198],{"__ignoreMap":50},[324,112173,112174,112176,112178,112180,112183,112185,112187],{"class":326,"line":327},[324,112175,31052],{"class":734},[324,112177,29898],{"class":738},[324,112179,25839],{"class":916},[324,112181,112182],{"class":738}," mujoco-reacher",[324,112184,101697],{"class":738},[324,112186,101700],{"class":916},[324,112188,101703],{"class":916},[324,112190,112191,112193,112195],{"class":326,"line":203},[324,112192,31052],{"class":734},[324,112194,101710],{"class":738},[324,112196,112197],{"class":738}," mujoco-reacher\n",[324,112199,112200,112202,112204,112206],{"class":326,"line":338},[324,112201,24558],{"class":734},[324,112203,760],{"class":738},[324,112205,101652],{"class":738},[324,112207,101655],{"class":738},[19,112209,101726],{},[192,112211,112212,112215,112218],{},[195,112213,112214],{},"本章使用低维状态，不使用图像输入。",[195,112216,112217],{},"机械臂是教学模型，不是 Franka、UR5 等真实机器人模型。",[195,112219,112220,112221,1077,112223,1077,112225,112227],{},"如果后续使用 MuJoCo Menagerie，模型结构会更复杂，但读取 ",[269,112222,104751],{},[269,112224,105081],{},[269,112226,104401],{}," 的方法一致。",[14,112229,101766],{"id":101765},[19,112231,112232],{},"Reacher 任务核心:",[316,112234,112237],{"className":112235,"code":112236,"language":5916,"meta":50},[5914],"观测：关节角、关节速度、末端位置、目标位置\n动作：两个关节的 motor 输入\n奖励：末端到目标距离越小越好\n",[269,112238,112236],{"__ignoreMap":50},[19,112240,112241],{},"读取 site 世界坐标:",[316,112243,112245],{"className":31100,"code":112244,"language":31102,"meta":50,"style":50},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"tip\")\ntip_pos = data.site_xpos[site_id]\n",[269,112246,112247,112260],{"__ignoreMap":50},[324,112248,112249,112251,112253,112255,112258],{"class":326,"line":327},[324,112250,104355],{"class":867},[324,112252,913],{"class":863},[324,112254,104126],{"class":867},[324,112256,112257],{"class":738},"\"tip\"",[324,112259,874],{"class":867},[324,112261,112262,112265,112267],{"class":326,"line":203},[324,112263,112264],{"class":867},"tip_pos ",[324,112266,913],{"class":863},[324,112268,112269],{"class":867}," data.site_xpos[site_id]\n",[35,112271,112273],{"id":112272},"为什么用-site-表示-tip-和-target","为什么用 site 表示 tip 和 target",[19,112275,112276,112277,112279],{},"机械臂控制里经常关心“末端执行器在哪里”。如果只看关节角 ",[269,112278,104751],{},"，你还要自己做正运动学计算。MuJoCo 已经帮你算好了 site 的世界坐标，所以可以直接读：",[316,112281,112283],{"className":31100,"code":112282,"language":31102,"meta":50,"style":50},"tip = data.site_xpos[tip_site_id]\ntarget = data.site_xpos[target_site_id]\n",[269,112284,112285,112295],{"__ignoreMap":50},[324,112286,112287,112290,112292],{"class":326,"line":327},[324,112288,112289],{"class":867},"tip ",[324,112291,913],{"class":863},[324,112293,112294],{"class":867}," data.site_xpos[tip_site_id]\n",[324,112296,112297,112300,112302],{"class":326,"line":203},[324,112298,112299],{"class":867},"target ",[324,112301,913],{"class":863},[324,112303,112304],{"class":867}," data.site_xpos[target_site_id]\n",[19,112306,112307],{},"这样 reward 就很容易写：",[316,112309,112311],{"className":31100,"code":112310,"language":31102,"meta":50,"style":50},"dist = np.linalg.norm(tip - target)\nreward = -dist\n",[269,112312,112313,112328],{"__ignoreMap":50},[324,112314,112315,112318,112320,112323,112325],{"class":326,"line":327},[324,112316,112317],{"class":867},"dist ",[324,112319,913],{"class":863},[324,112321,112322],{"class":867}," np.linalg.norm(tip ",[324,112324,1396],{"class":863},[324,112326,112327],{"class":867}," target)\n",[324,112329,112330,112332,112334,112336],{"class":326,"line":203},[324,112331,111726],{"class":867},[324,112333,913],{"class":863},[324,112335,52993],{"class":863},[324,112337,112338],{"class":867},"dist\n",[19,112340,112341,112342,112345],{},"距离越小，",[269,112343,112344],{},"-dist"," 越接近 0，奖励越高。",[35,112347,112348],{"id":112348},"两关节机械臂的状态",[19,112350,112351],{},"这个模型有两个 hinge joint：",[316,112353,112356],{"className":112354,"code":112355,"language":5916,"meta":50},[5914],"data.qpos = [joint1_angle, joint2_angle]\ndata.qvel = [joint1_velocity, joint2_velocity]\n",[269,112357,112355],{"__ignoreMap":50},[19,112359,112360],{},"再加上末端和目标位置：",[316,112362,112365],{"className":112363,"code":112364,"language":5916,"meta":50},[5914],"obs = [qpos, qvel, tip_xyz, target_xyz]\n",[269,112366,112364],{"__ignoreMap":50},[19,112368,112369],{},"总维度：",[316,112371,112374],{"className":112372,"code":112373,"language":5916,"meta":50},[5914],"2 + 2 + 3 + 3 = 10\n",[269,112375,112373],{"__ignoreMap":50},[35,112377,112379],{"id":112378},"为什么-gravity-是-0","为什么 gravity 是 0",[19,112381,112382],{},"本章把重力设为：",[316,112384,112386],{"className":53789,"code":112385,"language":53791,"meta":50,"style":50},"\u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[269,112387,112388],{"__ignoreMap":50},[324,112389,112390,112392,112394,112396,112398,112400,112402,112404,112406],{"class":326,"line":327},[324,112391,1774],{"class":867},[324,112393,69888],{"class":52022},[324,112395,101915],{"class":734},[324,112397,913],{"class":867},[324,112399,101920],{"class":738},[324,112401,101923],{"class":734},[324,112403,913],{"class":867},[324,112405,104492],{"class":738},[324,112407,101865],{"class":867},[19,112409,112410],{},"这是为了让问题更简单。没有重力时，控制器只需要考虑让末端靠近目标，不需要额外对抗机械臂下垂。真实机器人任务通常会有重力，并需要更好的控制器或重力补偿。",[14,112412,101974],{"id":101973},[316,112414,112416],{"className":31100,"code":112415,"language":31102,"meta":50,"style":50},"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",[269,112417,112418,112424,112434,112438,112442,112450,112455,112460,112464,112468,112473,112478,112482,112487,112492,112497,112501,112506,112511,112516,112521,112525,112529,112533,112537,112541,112546,112551,112555,112559,112563,112567,112571,112586,112595,112607,112630,112637,112641,112645,112655,112669,112683,112690,112694,112698,112712,112724,112736,112749,112764,112781,112785,112789,112801,112813,112821,112829,112833,112849,112854,112867,112880,112895,112899,112934,112966,112970,112974,112983,112987,113003,113013,113024,113040,113056,113072,113088,113092,113110,113130,113149,113153,113157,113169],{"__ignoreMap":50},[324,112419,112420,112422],{"class":326,"line":327},[324,112421,31114],{"class":863},[324,112423,102022],{"class":867},[324,112425,112426,112428,112430,112432],{"class":326,"line":203},[324,112427,31114],{"class":863},[324,112429,32102],{"class":867},[324,112431,32105],{"class":863},[324,112433,32108],{"class":867},[324,112435,112436],{"class":326,"line":338},[324,112437,488],{"emptyLinePlaceholder":487},[324,112439,112440],{"class":326,"line":344},[324,112441,488],{"emptyLinePlaceholder":487},[324,112443,112444,112446,112448],{"class":326,"line":484},[324,112445,102035],{"class":916},[324,112447,14293],{"class":863},[324,112449,102040],{"class":738},[324,112451,112452],{"class":326,"line":491},[324,112453,112454],{"class":738},"\u003Cmujoco model=\"two_link_reacher\">\n",[324,112456,112457],{"class":326,"line":496},[324,112458,112459],{"class":738},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[324,112461,112462],{"class":326,"line":502},[324,112463,488],{"emptyLinePlaceholder":487},[324,112465,112466],{"class":326,"line":508},[324,112467,102059],{"class":738},[324,112469,112470],{"class":326,"line":514},[324,112471,112472],{"class":738},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.9 0.9 0.9 1\"\u002F>\n",[324,112474,112475],{"class":326,"line":2343},[324,112476,112477],{"class":738},"    \u003Csite name=\"target\" pos=\"0.5 0 0.4\" size=\"0.04\" rgba=\"1 0 0 1\"\u002F>\n",[324,112479,112480],{"class":326,"line":2348},[324,112481,488],{"emptyLinePlaceholder":487},[324,112483,112484],{"class":326,"line":2354},[324,112485,112486],{"class":738},"    \u003Cbody name=\"link1\" pos=\"0 0 0.4\">\n",[324,112488,112489],{"class":326,"line":2359},[324,112490,112491],{"class":738},"      \u003Cjoint name=\"joint1\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[324,112493,112494],{"class":326,"line":2373},[324,112495,112496],{"class":738},"      \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",[324,112498,112499],{"class":326,"line":2378},[324,112500,488],{"emptyLinePlaceholder":487},[324,112502,112503],{"class":326,"line":2384},[324,112504,112505],{"class":738},"      \u003Cbody name=\"link2\" pos=\"0.3 0 0\">\n",[324,112507,112508],{"class":326,"line":2405},[324,112509,112510],{"class":738},"        \u003Cjoint name=\"joint2\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[324,112512,112513],{"class":326,"line":2410},[324,112514,112515],{"class":738},"        \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",[324,112517,112518],{"class":326,"line":2424},[324,112519,112520],{"class":738},"        \u003Csite name=\"tip\" pos=\"0.3 0 0\" size=\"0.03\" rgba=\"0 0 1 1\"\u002F>\n",[324,112522,112523],{"class":326,"line":2429},[324,112524,107159],{"class":738},[324,112526,112527],{"class":326,"line":2458},[324,112528,102088],{"class":738},[324,112530,112531],{"class":326,"line":2463},[324,112532,102093],{"class":738},[324,112534,112535],{"class":326,"line":2480},[324,112536,488],{"emptyLinePlaceholder":487},[324,112538,112539],{"class":326,"line":2485},[324,112540,107176],{"class":738},[324,112542,112543],{"class":326,"line":2490},[324,112544,112545],{"class":738},"    \u003Cmotor name=\"motor1\" joint=\"joint1\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[324,112547,112548],{"class":326,"line":2495},[324,112549,112550],{"class":738},"    \u003Cmotor name=\"motor2\" joint=\"joint2\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[324,112552,112553],{"class":326,"line":2509},[324,112554,107186],{"class":738},[324,112556,112557],{"class":326,"line":2514},[324,112558,102098],{"class":738},[324,112560,112561],{"class":326,"line":3306},[324,112562,96420],{"class":738},[324,112564,112565],{"class":326,"line":3320},[324,112566,488],{"emptyLinePlaceholder":487},[324,112568,112569],{"class":326,"line":3328},[324,112570,488],{"emptyLinePlaceholder":487},[324,112572,112573,112575,112578,112581,112583],{"class":326,"line":3333},[324,112574,32669],{"class":863},[324,112576,112577],{"class":734}," site_position",[324,112579,112580],{"class":867},"(model: mujoco.MjModel, data: mujoco.MjData, name: ",[324,112582,2034],{"class":916},[324,112584,112585],{"class":867},") -> np.ndarray:\n",[324,112587,112588,112590,112592],{"class":326,"line":3339},[324,112589,104121],{"class":867},[324,112591,913],{"class":863},[324,112593,112594],{"class":867}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[324,112596,112597,112599,112601,112603,112605],{"class":326,"line":3345},[324,112598,3830],{"class":863},[324,112600,104170],{"class":867},[324,112602,1774],{"class":863},[324,112604,4822],{"class":916},[324,112606,4468],{"class":867},[324,112608,112609,112611,112613,112615,112617,112620,112622,112624,112626,112628],{"class":326,"line":3350},[324,112610,104153],{"class":863},[324,112612,104156],{"class":916},[324,112614,868],{"class":867},[324,112616,920],{"class":863},[324,112618,112619],{"class":738},"\"site not found: ",[324,112621,1760],{"class":916},[324,112623,80532],{"class":867},[324,112625,1810],{"class":916},[324,112627,1115],{"class":738},[324,112629,874],{"class":867},[324,112631,112632,112634],{"class":326,"line":8677},[324,112633,4819],{"class":863},[324,112635,112636],{"class":867}," data.site_xpos[site_id].copy()\n",[324,112638,112639],{"class":326,"line":8701},[324,112640,488],{"emptyLinePlaceholder":487},[324,112642,112643],{"class":326,"line":8706},[324,112644,488],{"emptyLinePlaceholder":487},[324,112646,112647,112649,112652],{"class":326,"line":8712},[324,112648,32669],{"class":863},[324,112650,112651],{"class":734}," get_obs",[324,112653,112654],{"class":867},"(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[324,112656,112657,112660,112662,112665,112667],{"class":326,"line":8739},[324,112658,112659],{"class":867},"    tip ",[324,112661,913],{"class":863},[324,112663,112664],{"class":867}," site_position(model, data, ",[324,112666,112257],{"class":738},[324,112668,874],{"class":867},[324,112670,112671,112674,112676,112678,112681],{"class":326,"line":8744},[324,112672,112673],{"class":867},"    target ",[324,112675,913],{"class":863},[324,112677,112664],{"class":867},[324,112679,112680],{"class":738},"\"target\"",[324,112682,874],{"class":867},[324,112684,112685,112687],{"class":326,"line":8750},[324,112686,4819],{"class":863},[324,112688,112689],{"class":867}," np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[324,112691,112692],{"class":326,"line":8762},[324,112693,488],{"emptyLinePlaceholder":487},[324,112695,112696],{"class":326,"line":8774},[324,112697,488],{"emptyLinePlaceholder":487},[324,112699,112700,112702,112705,112708,112710],{"class":326,"line":8786},[324,112701,32669],{"class":863},[324,112703,112704],{"class":734}," reward",[324,112706,112707],{"class":867},"(model: mujoco.MjModel, data: mujoco.MjData) -> ",[324,112709,907],{"class":916},[324,112711,4468],{"class":867},[324,112713,112714,112716,112718,112720,112722],{"class":326,"line":10445},[324,112715,112659],{"class":867},[324,112717,913],{"class":863},[324,112719,112664],{"class":867},[324,112721,112257],{"class":738},[324,112723,874],{"class":867},[324,112725,112726,112728,112730,112732,112734],{"class":326,"line":10470},[324,112727,112673],{"class":867},[324,112729,913],{"class":863},[324,112731,112664],{"class":867},[324,112733,112680],{"class":738},[324,112735,874],{"class":867},[324,112737,112738,112741,112743,112745,112747],{"class":326,"line":10493},[324,112739,112740],{"class":867},"    dist ",[324,112742,913],{"class":863},[324,112744,112322],{"class":867},[324,112746,1396],{"class":863},[324,112748,112327],{"class":867},[324,112750,112751,112754,112756,112759,112761],{"class":326,"line":10517},[324,112752,112753],{"class":867},"    control_cost ",[324,112755,913],{"class":863},[324,112757,112758],{"class":916}," 0.01",[324,112760,7247],{"class":863},[324,112762,112763],{"class":867}," np.sum(np.square(data.ctrl))\n",[324,112765,112766,112768,112770,112772,112774,112776,112778],{"class":326,"line":10522},[324,112767,4819],{"class":863},[324,112769,110518],{"class":916},[324,112771,868],{"class":867},[324,112773,1396],{"class":863},[324,112775,112317],{"class":867},[324,112777,1396],{"class":863},[324,112779,112780],{"class":867}," control_cost)\n",[324,112782,112783],{"class":326,"line":10527},[324,112784,488],{"emptyLinePlaceholder":487},[324,112786,112787],{"class":326,"line":10532},[324,112788,488],{"emptyLinePlaceholder":487},[324,112790,112791,112793,112795,112797,112799],{"class":326,"line":10541},[324,112792,32669],{"class":863},[324,112794,2703],{"class":734},[324,112796,102119],{"class":867},[324,112798,96408],{"class":916},[324,112800,4468],{"class":867},[324,112802,112803,112805,112807,112809,112811],{"class":326,"line":10546},[324,112804,102128],{"class":867},[324,112806,913],{"class":863},[324,112808,102133],{"class":867},[324,112810,102035],{"class":916},[324,112812,874],{"class":867},[324,112814,112815,112817,112819],{"class":326,"line":10552},[324,112816,102142],{"class":867},[324,112818,913],{"class":863},[324,112820,102147],{"class":867},[324,112822,112823,112825,112827],{"class":326,"line":10573},[324,112824,110874],{"class":867},[324,112826,913],{"class":863},[324,112828,105482],{"class":916},[324,112830,112831],{"class":326,"line":10579},[324,112832,488],{"emptyLinePlaceholder":487},[324,112834,112835,112837,112839,112841,112843,112845,112847],{"class":326,"line":10593},[324,112836,3930],{"class":863},[324,112838,32338],{"class":867},[324,112840,26767],{"class":863},[324,112842,33165],{"class":916},[324,112844,868],{"class":867},[324,112846,65796],{"class":916},[324,112848,31508],{"class":867},[324,112850,112851],{"class":326,"line":10599},[324,112852,112853],{"class":867},"        mujoco.mj_forward(model, data)\n",[324,112855,112856,112859,112861,112863,112865],{"class":326,"line":10626},[324,112857,112858],{"class":867},"        tip ",[324,112860,913],{"class":863},[324,112862,112664],{"class":867},[324,112864,112257],{"class":738},[324,112866,874],{"class":867},[324,112868,112869,112872,112874,112876,112878],{"class":326,"line":10635},[324,112870,112871],{"class":867},"        target ",[324,112873,913],{"class":863},[324,112875,112664],{"class":867},[324,112877,112680],{"class":738},[324,112879,874],{"class":867},[324,112881,112882,112885,112887,112890,112892],{"class":326,"line":10641},[324,112883,112884],{"class":867},"        error ",[324,112886,913],{"class":863},[324,112888,112889],{"class":867}," target ",[324,112891,1396],{"class":863},[324,112893,112894],{"class":867}," tip\n",[324,112896,112897],{"class":326,"line":10649},[324,112898,488],{"emptyLinePlaceholder":487},[324,112900,112901,112903,112905,112907,112909,112912,112914,112916,112919,112921,112924,112926,112928,112930,112932],{"class":326,"line":10654},[324,112902,107338],{"class":867},[324,112904,1056],{"class":916},[324,112906,5172],{"class":867},[324,112908,913],{"class":863},[324,112910,112911],{"class":867}," np.clip(",[324,112913,105981],{"class":916},[324,112915,7247],{"class":863},[324,112917,112918],{"class":867}," error[",[324,112920,944],{"class":916},[324,112922,112923],{"class":867},"], ",[324,112925,1396],{"class":863},[324,112927,103124],{"class":916},[324,112929,13164],{"class":867},[324,112931,103124],{"class":916},[324,112933,874],{"class":867},[324,112935,112936,112938,112940,112942,112944,112946,112948,112950,112952,112954,112956,112958,112960,112962,112964],{"class":326,"line":17333},[324,112937,107338],{"class":867},[324,112939,1082],{"class":916},[324,112941,5172],{"class":867},[324,112943,913],{"class":863},[324,112945,112911],{"class":867},[324,112947,105981],{"class":916},[324,112949,7247],{"class":863},[324,112951,112918],{"class":867},[324,112953,1056],{"class":916},[324,112955,112923],{"class":867},[324,112957,1396],{"class":863},[324,112959,103124],{"class":916},[324,112961,13164],{"class":867},[324,112963,103124],{"class":916},[324,112965,874],{"class":867},[324,112967,112968],{"class":326,"line":17339},[324,112969,488],{"emptyLinePlaceholder":487},[324,112971,112972],{"class":326,"line":17362},[324,112973,102237],{"class":867},[324,112975,112976,112978,112980],{"class":326,"line":17368},[324,112977,111018],{"class":867},[324,112979,10206],{"class":863},[324,112981,112982],{"class":867}," reward(model, data)\n",[324,112984,112985],{"class":326,"line":17391},[324,112986,488],{"emptyLinePlaceholder":487},[324,112988,112989,112991,112993,112995,112997,112999,113001],{"class":326,"line":17405},[324,112990,3226],{"class":863},[324,112992,32338],{"class":867},[324,112994,1192],{"class":863},[324,112996,6483],{"class":916},[324,112998,102280],{"class":863},[324,113000,4822],{"class":916},[324,113002,4468],{"class":867},[324,113004,113005,113008,113010],{"class":326,"line":17425},[324,113006,113007],{"class":867},"            obs ",[324,113009,913],{"class":863},[324,113011,113012],{"class":867}," get_obs(model, data)\n",[324,113014,113015,113017,113019,113021],{"class":326,"line":17431},[324,113016,35372],{"class":916},[324,113018,868],{"class":867},[324,113020,111052],{"class":738},[324,113022,113023],{"class":867},", step)\n",[324,113025,113026,113028,113030,113033,113036,113038],{"class":326,"line":17442},[324,113027,35372],{"class":916},[324,113029,868],{"class":867},[324,113031,113032],{"class":738},"\"  tip:\"",[324,113034,113035],{"class":867},", np.round(tip, ",[324,113037,938],{"class":916},[324,113039,31219],{"class":867},[324,113041,113042,113044,113046,113049,113052,113054],{"class":326,"line":17465},[324,113043,35372],{"class":916},[324,113045,868],{"class":867},[324,113047,113048],{"class":738},"\"  target:\"",[324,113050,113051],{"class":867},", np.round(target, ",[324,113053,938],{"class":916},[324,113055,31219],{"class":867},[324,113057,113058,113060,113062,113065,113068,113070],{"class":326,"line":17487},[324,113059,35372],{"class":916},[324,113061,868],{"class":867},[324,113063,113064],{"class":738},"\"  ctrl:\"",[324,113066,113067],{"class":867},", np.round(data.ctrl.copy(), ",[324,113069,938],{"class":916},[324,113071,31219],{"class":867},[324,113073,113074,113076,113078,113081,113084,113086],{"class":326,"line":17492},[324,113075,35372],{"class":916},[324,113077,868],{"class":867},[324,113079,113080],{"class":738},"\"  obs_dim:\"",[324,113082,113083],{"class":867},", obs.shape[",[324,113085,1056],{"class":916},[324,113087,5386],{"class":867},[324,113089,113090],{"class":326,"line":17498},[324,113091,488],{"emptyLinePlaceholder":487},[324,113093,113094,113096,113098,113100,113102,113104,113106,113108],{"class":326,"line":17512},[324,113095,32021],{"class":916},[324,113097,868],{"class":867},[324,113099,111097],{"class":738},[324,113101,13164],{"class":867},[324,113103,32740],{"class":916},[324,113105,111104],{"class":867},[324,113107,938],{"class":916},[324,113109,31219],{"class":867},[324,113111,113112,113114,113116,113119,113122,113124,113126,113128],{"class":326,"line":17525},[324,113113,32021],{"class":916},[324,113115,868],{"class":867},[324,113117,113118],{"class":738},"\"final tip:\"",[324,113120,113121],{"class":867},", np.round(site_position(model, data, ",[324,113123,112257],{"class":738},[324,113125,111066],{"class":867},[324,113127,938],{"class":916},[324,113129,31219],{"class":867},[324,113131,113132,113134,113136,113139,113141,113143,113145,113147],{"class":326,"line":17530},[324,113133,32021],{"class":916},[324,113135,868],{"class":867},[324,113137,113138],{"class":738},"\"target:\"",[324,113140,113121],{"class":867},[324,113142,112680],{"class":738},[324,113144,111066],{"class":867},[324,113146,938],{"class":916},[324,113148,31219],{"class":867},[324,113150,113151],{"class":326,"line":17544},[324,113152,488],{"emptyLinePlaceholder":487},[324,113154,113155],{"class":326,"line":17549},[324,113156,488],{"emptyLinePlaceholder":487},[324,113158,113159,113161,113163,113165,113167],{"class":326,"line":17555},[324,113160,2262],{"class":863},[324,113162,31942],{"class":916},[324,113164,102280],{"class":863},[324,113166,102283],{"class":738},[324,113168,4468],{"class":867},[324,113170,113171],{"class":326,"line":17560},[324,113172,102290],{"class":867},[19,113174,104291],{},[316,113176,113178],{"className":24549,"code":113177,"language":24551,"meta":50,"style":50},"touch ch7_reacher.py\n",[269,113179,113180],{"__ignoreMap":50},[324,113181,113182,113184],{"class":326,"line":327},[324,113183,102004],{"class":734},[324,113185,113186],{"class":738}," ch7_reacher.py\n",[19,113188,111165],{},[316,113190,113192],{"className":24549,"code":113191,"language":24551,"meta":50,"style":50},"python ch7_reacher.py\n",[269,113193,113194],{"__ignoreMap":50},[324,113195,113196,113198],{"class":326,"line":327},[324,113197,31102],{"class":734},[324,113199,113186],{"class":738},[35,113201,102293],{"id":102293},[19,113203,113204],{},"读取 site 坐标：",[316,113206,113208],{"className":31100,"code":113207,"language":31102,"meta":50,"style":50},"def site_position(model: mujoco.MjModel, data: mujoco.MjData, name: str) -> np.ndarray:\n",[269,113209,113210],{"__ignoreMap":50},[324,113211,113212,113214,113216,113218,113220],{"class":326,"line":327},[324,113213,32669],{"class":863},[324,113215,112577],{"class":734},[324,113217,112580],{"class":867},[324,113219,2034],{"class":916},[324,113221,112585],{"class":867},[19,113223,113224],{},"这个函数把“按名字查找 site ID”和“读取 site 世界坐标”封装到一起，避免重复写。",[19,113226,111181],{},[316,113228,113230],{"className":31100,"code":113229,"language":31102,"meta":50,"style":50},"return np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[269,113231,113232],{"__ignoreMap":50},[324,113233,113234,113236],{"class":326,"line":327},[324,113235,17775],{"class":863},[324,113237,112689],{"class":867},[19,113239,113240],{},"这让策略或控制器能同时看到关节状态、末端位置和目标位置。",[19,113242,110506],{},[316,113244,113246],{"className":31100,"code":113245,"language":31102,"meta":50,"style":50},"dist = np.linalg.norm(tip - target)\ncontrol_cost = 0.01 * np.sum(np.square(data.ctrl))\nreturn float(-dist - control_cost)\n",[269,113247,113248,113260,113273],{"__ignoreMap":50},[324,113249,113250,113252,113254,113256,113258],{"class":326,"line":327},[324,113251,112317],{"class":867},[324,113253,913],{"class":863},[324,113255,112322],{"class":867},[324,113257,1396],{"class":863},[324,113259,112327],{"class":867},[324,113261,113262,113265,113267,113269,113271],{"class":326,"line":203},[324,113263,113264],{"class":867},"control_cost ",[324,113266,913],{"class":863},[324,113268,112758],{"class":916},[324,113270,7247],{"class":863},[324,113272,112763],{"class":867},[324,113274,113275,113277,113279,113281,113283,113285,113287],{"class":326,"line":338},[324,113276,17775],{"class":863},[324,113278,110518],{"class":916},[324,113280,868],{"class":867},[324,113282,1396],{"class":863},[324,113284,112317],{"class":867},[324,113286,1396],{"class":863},[324,113288,112780],{"class":867},[19,113290,113291],{},"奖励由两部分组成：",[192,113293,113294,113299],{},[195,113295,113296,113298],{},[269,113297,112344],{},"：末端离目标越远，奖励越低。",[195,113300,113301,113304],{},[269,113302,113303],{},"control_cost","：动作越大，扣分越多，避免控制输入过于剧烈。",[19,113306,113307],{},"简单控制器：",[316,113309,113311],{"className":31100,"code":113310,"language":31102,"meta":50,"style":50},"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",[269,113312,113313,113326,113358],{"__ignoreMap":50},[324,113314,113315,113318,113320,113322,113324],{"class":326,"line":327},[324,113316,113317],{"class":867},"error ",[324,113319,913],{"class":863},[324,113321,112889],{"class":867},[324,113323,1396],{"class":863},[324,113325,112894],{"class":867},[324,113327,113328,113330,113332,113334,113336,113338,113340,113342,113344,113346,113348,113350,113352,113354,113356],{"class":326,"line":203},[324,113329,106592],{"class":867},[324,113331,1056],{"class":916},[324,113333,5172],{"class":867},[324,113335,913],{"class":863},[324,113337,112911],{"class":867},[324,113339,105981],{"class":916},[324,113341,7247],{"class":863},[324,113343,112918],{"class":867},[324,113345,944],{"class":916},[324,113347,112923],{"class":867},[324,113349,1396],{"class":863},[324,113351,103124],{"class":916},[324,113353,13164],{"class":867},[324,113355,103124],{"class":916},[324,113357,874],{"class":867},[324,113359,113360,113362,113364,113366,113368,113370,113372,113374,113376,113378,113380,113382,113384,113386,113388],{"class":326,"line":338},[324,113361,106592],{"class":867},[324,113363,1082],{"class":916},[324,113365,5172],{"class":867},[324,113367,913],{"class":863},[324,113369,112911],{"class":867},[324,113371,105981],{"class":916},[324,113373,7247],{"class":863},[324,113375,112918],{"class":867},[324,113377,1056],{"class":916},[324,113379,112923],{"class":867},[324,113381,1396],{"class":863},[324,113383,103124],{"class":916},[324,113385,13164],{"class":867},[324,113387,103124],{"class":916},[324,113389,874],{"class":867},[19,113391,113392],{},"这只是为了演示控制闭环，不是严格的逆运动学。真实 reacher 通常需要更系统的方法。",[35,113394,102429],{"id":102429},[316,113396,113397],{"className":31100,"code":113207,"language":31102,"meta":50,"style":50},[269,113398,113399],{"__ignoreMap":50},[324,113400,113401,113403,113405,113407,113409],{"class":326,"line":327},[324,113402,32669],{"class":863},[324,113404,112577],{"class":734},[324,113406,112580],{"class":867},[324,113408,2034],{"class":916},[324,113410,112585],{"class":867},[19,113412,113413,113414,113416,113417,83261,113419,29107],{},"定义一个函数，用名字读取 site 的世界坐标。参数 ",[269,113415,80532],{}," 是 site 的名字，比如 ",[269,113418,112257],{},[269,113420,112680],{},[316,113422,113424],{"className":31100,"code":113423,"language":31102,"meta":50,"style":50},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[269,113425,113426],{"__ignoreMap":50},[324,113427,113428,113430,113432],{"class":326,"line":327},[324,113429,104355],{"class":867},[324,113431,913],{"class":863},[324,113433,112594],{"class":867},[19,113435,113436],{},"根据 site 名字查找数字 ID。MuJoCo 内部数组需要用 ID 访问，不能直接用字符串名字访问。",[316,113438,113440],{"className":31100,"code":113439,"language":31102,"meta":50,"style":50},"if site_id \u003C 0:\n    raise RuntimeError(f\"site not found: {name}\")\n",[269,113441,113442,113454],{"__ignoreMap":50},[324,113443,113444,113446,113448,113450,113452],{"class":326,"line":327},[324,113445,2262],{"class":863},[324,113447,104170],{"class":867},[324,113449,1774],{"class":863},[324,113451,4822],{"class":916},[324,113453,4468],{"class":867},[324,113455,113456,113458,113460,113462,113464,113466,113468,113470,113472,113474],{"class":326,"line":203},[324,113457,104616],{"class":863},[324,113459,104156],{"class":916},[324,113461,868],{"class":867},[324,113463,920],{"class":863},[324,113465,112619],{"class":738},[324,113467,1760],{"class":916},[324,113469,80532],{"class":867},[324,113471,1810],{"class":916},[324,113473,1115],{"class":738},[324,113475,874],{"class":867},[19,113477,113478,113479,113482,113483,113485],{},"如果 site 没找到，就主动报错。",[269,113480,113481],{},"f\"site not found: {name}\""," 是 Python 的 f-string，会把变量 ",[269,113484,80532],{}," 的值放进字符串里。",[316,113487,113489],{"className":31100,"code":113488,"language":31102,"meta":50,"style":50},"return data.site_xpos[site_id].copy()\n",[269,113490,113491],{"__ignoreMap":50},[324,113492,113493,113495],{"class":326,"line":327},[324,113494,17775],{"class":863},[324,113496,112636],{"class":867},[19,113498,113499,113500,113502,113503,113506],{},"返回这个 site 的世界坐标。",[269,113501,104401],{}," 里的每一行都是一个 site 的 ",[269,113504,113505],{},"(x, y, z)"," 坐标。",[316,113508,113510],{"className":31100,"code":113509,"language":31102,"meta":50,"style":50},"def get_obs(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[269,113511,113512],{"__ignoreMap":50},[324,113513,113514,113516,113518],{"class":326,"line":327},[324,113515,32669],{"class":863},[324,113517,112651],{"class":734},[324,113519,112654],{"class":867},[19,113521,113522],{},"定义获取观测的函数。Reacher 的观测不仅包含关节角和速度，还包含末端位置和目标位置。",[316,113524,113526],{"className":31100,"code":113525,"language":31102,"meta":50,"style":50},"tip = site_position(model, data, \"tip\")\ntarget = site_position(model, data, \"target\")\n",[269,113527,113528,113540],{"__ignoreMap":50},[324,113529,113530,113532,113534,113536,113538],{"class":326,"line":327},[324,113531,112289],{"class":867},[324,113533,913],{"class":863},[324,113535,112664],{"class":867},[324,113537,112257],{"class":738},[324,113539,874],{"class":867},[324,113541,113542,113544,113546,113548,113550],{"class":326,"line":203},[324,113543,112299],{"class":867},[324,113545,913],{"class":863},[324,113547,112664],{"class":867},[324,113549,112680],{"class":738},[324,113551,874],{"class":867},[19,113553,113554],{},"分别读取末端点和目标点的世界坐标。",[316,113556,113557],{"className":31100,"code":113229,"language":31102,"meta":50,"style":50},[269,113558,113559],{"__ignoreMap":50},[324,113560,113561,113563],{"class":326,"line":327},[324,113562,17775],{"class":863},[324,113564,112689],{"class":867},[19,113566,113567],{},"把四部分拼成一个观测数组：",[316,113569,113572],{"className":113570,"code":113571,"language":5916,"meta":50},[5914],"关节角 qpos\n关节速度 qvel\n末端坐标 tip\n目标坐标 target\n",[269,113573,113571],{"__ignoreMap":50},[316,113575,113577],{"className":31100,"code":113576,"language":31102,"meta":50,"style":50},"dist = np.linalg.norm(tip - target)\n",[269,113578,113579],{"__ignoreMap":50},[324,113580,113581,113583,113585,113587,113589],{"class":326,"line":327},[324,113582,112317],{"class":867},[324,113584,913],{"class":863},[324,113586,112322],{"class":867},[324,113588,1396],{"class":863},[324,113590,112327],{"class":867},[19,113592,113593,113594,113597,113598,113601],{},"计算 tip 到 target 的距离。",[269,113595,113596],{},"tip - target"," 得到一个三维向量，",[269,113599,113600],{},"np.linalg.norm(...)"," 计算这个向量的长度。",[19,113603,15362],{},[316,113605,113608],{"className":113606,"code":113607,"language":5916,"meta":50},[5914],"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",[269,113609,113607],{"__ignoreMap":50},[316,113611,113613],{"className":31100,"code":113612,"language":31102,"meta":50,"style":50},"control_cost = 0.01 * np.sum(np.square(data.ctrl))\n",[269,113614,113615],{"__ignoreMap":50},[324,113616,113617,113619,113621,113623,113625],{"class":326,"line":327},[324,113618,113264],{"class":867},[324,113620,913],{"class":863},[324,113622,112758],{"class":916},[324,113624,7247],{"class":863},[324,113626,112763],{"class":867},[19,113628,113629,113630,113633,113634,113637],{},"计算动作惩罚。",[269,113631,113632],{},"np.square(data.ctrl)"," 把每个控制输入平方，",[269,113635,113636],{},"np.sum(...)"," 把它们加起来。动作越大，惩罚越大。",[316,113639,113641],{"className":31100,"code":113640,"language":31102,"meta":50,"style":50},"return float(-dist - control_cost)\n",[269,113642,113643],{"__ignoreMap":50},[324,113644,113645,113647,113649,113651,113653,113655,113657],{"class":326,"line":327},[324,113646,17775],{"class":863},[324,113648,110518],{"class":916},[324,113650,868],{"class":867},[324,113652,1396],{"class":863},[324,113654,112317],{"class":867},[324,113656,1396],{"class":863},[324,113658,112780],{"class":867},[19,113660,113661],{},"奖励是负距离再减去动作惩罚。距离越小，奖励越接近 0；动作越大，奖励越低。",[316,113663,113664],{"className":31100,"code":111524,"language":31102,"meta":50,"style":50},[269,113665,113666],{"__ignoreMap":50},[324,113667,113668,113670,113672],{"class":326,"line":327},[324,113669,111531],{"class":867},[324,113671,913],{"class":863},[324,113673,105482],{"class":916},[19,113675,113676],{},"累计奖励变量，记录整个运行过程的总分。",[316,113678,113680],{"className":31100,"code":113679,"language":31102,"meta":50,"style":50},"for step in range(500):\n",[269,113681,113682],{"__ignoreMap":50},[324,113683,113684,113686,113688,113690,113692,113694,113696],{"class":326,"line":327},[324,113685,3754],{"class":863},[324,113687,32338],{"class":867},[324,113689,26767],{"class":863},[324,113691,33165],{"class":916},[324,113693,868],{"class":867},[324,113695,65796],{"class":916},[324,113697,31508],{"class":867},[19,113699,113700],{},"运行 500 个控制步。",[316,113702,113703],{"className":31100,"code":105264,"language":31102,"meta":50,"style":50},[269,113704,113705],{"__ignoreMap":50},[324,113706,113707],{"class":326,"line":327},[324,113708,105264],{"class":867},[19,113710,113711,113712,300,113714,113716],{},"刷新当前状态对应的 site 坐标。这里每步开头调用一次，确保读取到的 ",[269,113713,103952],{},[269,113715,103955],{}," 是当前状态下的坐标。",[316,113718,113720],{"className":31100,"code":113719,"language":31102,"meta":50,"style":50},"error = target - tip\n",[269,113721,113722],{"__ignoreMap":50},[324,113723,113724,113726,113728,113730,113732],{"class":326,"line":327},[324,113725,113317],{"class":867},[324,113727,913],{"class":863},[324,113729,112889],{"class":867},[324,113731,1396],{"class":863},[324,113733,112894],{"class":867},[19,113735,113736],{},"计算目标点相对末端点的误差向量。它表示“从 tip 指向 target 还差多少”。",[316,113738,113740],{"className":31100,"code":113739,"language":31102,"meta":50,"style":50},"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",[269,113741,113742,113774],{"__ignoreMap":50},[324,113743,113744,113746,113748,113750,113752,113754,113756,113758,113760,113762,113764,113766,113768,113770,113772],{"class":326,"line":327},[324,113745,106592],{"class":867},[324,113747,1056],{"class":916},[324,113749,5172],{"class":867},[324,113751,913],{"class":863},[324,113753,112911],{"class":867},[324,113755,105981],{"class":916},[324,113757,7247],{"class":863},[324,113759,112918],{"class":867},[324,113761,944],{"class":916},[324,113763,112923],{"class":867},[324,113765,1396],{"class":863},[324,113767,103124],{"class":916},[324,113769,13164],{"class":867},[324,113771,103124],{"class":916},[324,113773,874],{"class":867},[324,113775,113776,113778,113780,113782,113784,113786,113788,113790,113792,113794,113796,113798,113800,113802,113804],{"class":326,"line":203},[324,113777,106592],{"class":867},[324,113779,1082],{"class":916},[324,113781,5172],{"class":867},[324,113783,913],{"class":863},[324,113785,112911],{"class":867},[324,113787,105981],{"class":916},[324,113789,7247],{"class":863},[324,113791,112918],{"class":867},[324,113793,1056],{"class":916},[324,113795,112923],{"class":867},[324,113797,1396],{"class":863},[324,113799,103124],{"class":916},[324,113801,13164],{"class":867},[324,113803,103124],{"class":916},[324,113805,874],{"class":867},[19,113807,113808,113809,113812],{},"给两个关节写控制输入。这里用 z 方向误差控制第一个关节，用 x 方向误差控制第二个关节。这是非常粗糙的教学控制器，只是为了展示 ",[269,113810,113811],{},"error -> ctrl -> step"," 的流程。",[316,113814,113815],{"className":31100,"code":105226,"language":31102,"meta":50,"style":50},[269,113816,113817],{"__ignoreMap":50},[324,113818,113819],{"class":326,"line":327},[324,113820,105226],{"class":867},[19,113822,113823],{},"推进仿真。机械臂会根据两个 motor 的输入改变姿态。",[316,113825,113827],{"className":31100,"code":113826,"language":31102,"meta":50,"style":50},"obs = get_obs(model, data)\n",[269,113828,113829],{"__ignoreMap":50},[324,113830,113831,113833,113835],{"class":326,"line":327},[324,113832,111575],{"class":867},[324,113834,913],{"class":863},[324,113836,113012],{"class":867},[19,113838,113839,113840,113843],{},"读取最新观测。后面打印 ",[269,113841,113842],{},"obs.shape[0]","，用来确认观测维度是 10。",[14,113845,103037],{"id":103036},[19,113847,113848],{},"观测维度为:",[316,113850,113853],{"className":113851,"code":113852,"language":5916,"meta":50},[5914],"2 个 qpos\n2 个 qvel\n3 个 tip position\n3 个 target position\n= 10\n",[269,113854,113852],{"__ignoreMap":50},[19,113856,113857],{},"控制器只是教学控制器。真实机械臂 reacher 通常会用逆运动学、Operational Space Control、RL policy 或模仿学习 policy。",[19,113859,113860],{},"程序每 100 步打印：",[316,113862,113865],{"className":113863,"code":113864,"language":5916,"meta":50},[5914],"tip: 末端点世界坐标\ntarget: 目标点世界坐标\nctrl: 两个关节的控制输入\nobs_dim: 观测维度\n",[269,113866,113864],{"__ignoreMap":50},[19,113868,113869,113870,113872],{},"如果控制有效，你应该看到最终 ",[269,113871,103952],{}," 的位置相对初始位置发生变化。它不一定能精准到达目标，因为这个控制器很粗糙。",[14,113874,103069],{"id":103068},[192,113876,113877,113880,113883,113889,113895,113902,113912],{},[195,113878,113879],{},"修改目标点位置。",[195,113881,113882],{},"重新运行，观察最终 tip 是否变化。",[195,113884,113885,113886,113888],{},"把 gravity 改成 ",[269,113887,103310],{},"，观察控制是否变差。",[195,113890,111902,113891,111906,113893,29107],{},[269,113892,102879],{},[269,113894,944],{},[195,113896,103132,113897,103135,113899,113901],{},[269,113898,111317],{},[269,113900,108028],{},"，观察机械臂是否更难移动。",[195,113903,103132,113904,83252,113906,103135,113908,113911],{},[269,113905,103955],{},[269,113907,104867],{},[269,113909,113910],{},"0.2 0 0.6","，观察 reward 和 final tip。",[195,113913,113914],{},"用 viewer 可视化，确认 link1、link2 和 target 的位置符合预期。",[14,113916,103174],{"id":103173},[35,113918,113920],{"id":113919},"site-not-found",[269,113921,113922],{},"site not found",[19,113924,113925,113926,300,113929,29107],{},"检查 XML 中是否有 ",[269,113927,113928],{},"site name=\"tip\"",[269,113930,113931],{},"site name=\"target\"",[35,113933,113934],{"id":113934},"机械臂完全不动",[19,113936,103244],{},[192,113938,113939,113944,113947,113952],{},[195,113940,113941,113943],{},[269,113942,102879],{}," 是否为 2",[195,113945,113946],{},"actuator 是否引用正确 joint",[195,113948,113949,113951],{},[269,113950,101797],{}," 是否被赋值",[195,113953,113954,113955],{},"是否执行了 ",[269,113956,101407],{},[35,113958,113959],{"id":113959},"控制效果不好",[19,113961,113962],{},"正常。本章重点不是控制器最优，而是任务结构:",[316,113964,113967],{"className":113965,"code":113966,"language":5916,"meta":50},[5914],"obs → action → mj_step → reward → next_obs\n",[269,113968,113966],{"__ignoreMap":50},[35,113970,113972],{"id":113971},"tip-坐标不变化","tip 坐标不变化",[19,113974,103296],{},[192,113976,113977,113982,113990,113999],{},[195,113978,113979,113980,29107],{},"是否每步调用了 ",[269,113981,101407],{},[195,113983,113984,113985,300,113987,29107],{},"是否写入了 ",[269,113986,106847],{},[269,113988,113989],{},"data.ctrl[1]",[195,113991,113992,113993,1077,113996,29107],{},"actuator 是否正确引用 ",[269,113994,113995],{},"joint1",[269,113997,113998],{},"joint2",[195,114000,114001],{},"控制输入是否太小。",[35,114003,114004],{"id":114004},"目标点不会动",[19,114006,114007],{},"本章的 target 是固定 site：",[316,114009,114011],{"className":53789,"code":114010,"language":53791,"meta":50,"style":50},"\u003Csite name=\"target\" pos=\"0.5 0 0.4\" ...\u002F>\n",[269,114012,114013],{"__ignoreMap":50},[324,114014,114015,114017,114019,114021,114023,114025,114027,114029,114032],{"class":326,"line":327},[324,114016,1774],{"class":867},[324,114018,103931],{"class":52022},[324,114020,15649],{"class":734},[324,114022,913],{"class":867},[324,114024,112680],{"class":738},[324,114026,101827],{"class":734},[324,114028,913],{"class":867},[324,114030,114031],{"class":738},"\"0.5 0 0.4\"",[324,114033,114034],{"class":867}," ...\u002F>\n",[19,114036,114037,114038,114040],{},"它直接挂在 ",[269,114039,102562],{}," 下，所以不会随机械臂运动。如果你想每次 reset 随机目标，后续可以把目标放在 mocap body 或通过修改模型\u002F数据实现，本章先不展开。",[35,114042,114043],{"id":114043},"机械臂不像真实机械臂",[19,114045,114046],{},"正常。本章模型是教学用二维两连杆，没有电机真实参数、关节限位、摩擦、真实机器人 URDF\u002FMJCF 结构。它的价值是帮你理解任务结构，而不是模拟某台真实机器人。",[14,114048,103328],{"id":103327},[19,114050,114051],{},"Reacher 比 Cartpole 多了一个关键概念：任务目标往往不是直接由关节角定义，而是由末端点和目标点的空间关系定义。",[19,114053,114054],{},"核心公式：",[316,114056,114059],{"className":114057,"code":114058,"language":5916,"meta":50},[5914],"distance = ||tip - target||\nreward = -distance - action_cost\n",[269,114060,114058],{"__ignoreMap":50},[19,114062,114063],{},"掌握这个模式后，就能理解很多机械臂 reach、push、pick、place 任务的基本奖励设计。",[775,114065,114066],{},"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":50,"searchDepth":203,"depth":203,"links":114068},[114069,114070,114071,114076,114080,114081,114082,114090],{"id":101368,"depth":203,"text":101369},{"id":101491,"depth":203,"text":101492},{"id":101765,"depth":203,"text":101766,"children":114072},[114073,114074,114075],{"id":112272,"depth":338,"text":112273},{"id":112348,"depth":338,"text":112348},{"id":112378,"depth":338,"text":112379},{"id":101973,"depth":203,"text":101974,"children":114077},[114078,114079],{"id":102293,"depth":338,"text":102293},{"id":102429,"depth":338,"text":102429},{"id":103036,"depth":203,"text":103037},{"id":103068,"depth":203,"text":103069},{"id":103173,"depth":203,"text":103174,"children":114083},[114084,114085,114086,114087,114088,114089],{"id":113919,"depth":338,"text":113922},{"id":113934,"depth":338,"text":113934},{"id":113959,"depth":338,"text":113959},{"id":113971,"depth":338,"text":113972},{"id":114004,"depth":338,"text":114004},{"id":114043,"depth":338,"text":114043},{"id":103327,"depth":203,"text":103328},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch7-reacher",{"title":112076,"description":50},"wiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务","7afYiYudLCszldKNM9vonhx27bDG_0sI4vgwQYeRqd4",{"id":114097,"title":114098,"body":114099,"description":50,"extension":792,"meta":117561,"navigation":487,"path":117562,"seo":117563,"stem":117564,"__hash__":117565},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础.md","8.Gymnasium 风格强化学习接口基础",{"type":7,"value":114100,"toc":117532},[114101,114104,114106,114109,114112,114137,114140,114146,114149,114155,114157,114159,114183,114185,114203,114205,114248,114250,114277,114279,114282,114334,114337,114343,114352,114355,114393,114396,114435,114438,114446,114453,114456,114462,114464,114518,114525,114570,114573,114577,114593,114603,114605,115866,115868,115880,115882,115893,115895,115898,115919,115922,115925,115958,115964,115967,116000,116003,116006,116047,116052,116066,116069,116082,116087,116110,116112,116127,116137,116152,116159,116179,116194,116212,116215,116232,116240,116256,116262,116294,116307,116339,116349,116384,116398,116444,116458,116500,116511,116524,116530,116563,116566,116593,116603,116643,116653,116670,116677,116695,116698,116739,116752,116767,116770,116793,116796,116808,116811,116830,116835,116856,116859,116874,116877,116911,116923,116938,116941,116966,116969,116988,116991,117023,117026,117050,117056,117086,117093,117106,117109,117111,117113,117119,117122,117125,117137,117140,117142,117196,117198,117202,117208,117217,117220,117227,117229,117252,117255,117259,117261,117279,117285,117287,117320,117323,117329,117333,117336,117356,117361,117365,117372,117392,117397,117401,117404,117424,117427,117513,117517,117520,117526,117529],[10,114102,114098],{"id":114103},"_8gymnasium-风格强化学习接口基础",[14,114105,101369],{"id":101368},[19,114107,114108],{},"本章把 MuJoCo 任务封装成类似 Gymnasium 的接口。",[19,114110,114111],{},"你将实现:",[316,114113,114115],{"className":31100,"code":114114,"language":31102,"meta":50,"style":50},"obs, info = env.reset()\nobs, reward, terminated, truncated, info = env.step(action)\n",[269,114116,114117,114127],{"__ignoreMap":50},[324,114118,114119,114122,114124],{"class":326,"line":327},[324,114120,114121],{"class":867},"obs, info ",[324,114123,913],{"class":863},[324,114125,114126],{"class":867}," env.reset()\n",[324,114128,114129,114132,114134],{"class":326,"line":203},[324,114130,114131],{"class":867},"obs, reward, terminated, truncated, info ",[324,114133,913],{"class":863},[324,114135,114136],{"class":867}," env.step(action)\n",[19,114138,114139],{},"这为后续强化学习、模仿学习、VLA 数据采集打基础。",[19,114141,114142,114143,114145],{},"前面章节的代码都是“脚本式”的：在 ",[269,114144,103016],{}," 里写循环。本章要把同样的逻辑封装成环境类。这样强化学习算法就可以用统一方式调用你的 MuJoCo 任务。",[19,114147,114148],{},"可以先记住 Gymnasium 环境的核心交互：",[316,114150,114153],{"className":114151,"code":114152,"language":5916,"meta":50},[5914],"reset 得到初始 obs\n循环：\n  policy 根据 obs 产生 action\n  env.step(action) 返回 next_obs、reward、done 信息\n",[269,114154,114152],{"__ignoreMap":50},[14,114156,101492],{"id":101491},[19,114158,101495],{},[316,114160,114161],{"className":24549,"code":105109,"language":24551,"meta":50,"style":50},[269,114162,114163],{"__ignoreMap":50},[324,114164,114165,114167,114169,114171,114173,114175,114177,114179,114181],{"class":326,"line":327},[324,114166,735],{"class":734},[324,114168,27038],{"class":738},[324,114170,760],{"class":738},[324,114172,27123],{"class":916},[324,114174,105124],{"class":738},[324,114176,101520],{"class":738},[324,114178,103222],{"class":738},[324,114180,101536],{"class":738},[324,114182,105133],{"class":738},[19,114184,103540],{},[316,114186,114188],{"className":24549,"code":114187,"language":24551,"meta":50,"style":50},"pip install \"mujoco>=2.3\" numpy gymnasium\n",[269,114189,114190],{"__ignoreMap":50},[324,114191,114192,114194,114196,114198,114200],{"class":326,"line":327},[324,114193,24558],{"class":734},[324,114195,760],{"class":738},[324,114197,101652],{"class":738},[324,114199,108432],{"class":738},[324,114201,114202],{"class":738}," gymnasium\n",[19,114204,103557],{},[316,114206,114208],{"className":24549,"code":114207,"language":24551,"meta":50,"style":50},"conda create -n mujoco-gym-api python=3.10 -y\nconda activate mujoco-gym-api\npip install \"mujoco>=2.3\" numpy gymnasium\n",[269,114209,114210,114227,114236],{"__ignoreMap":50},[324,114211,114212,114214,114216,114218,114221,114223,114225],{"class":326,"line":327},[324,114213,31052],{"class":734},[324,114215,29898],{"class":738},[324,114217,25839],{"class":916},[324,114219,114220],{"class":738}," mujoco-gym-api",[324,114222,101697],{"class":738},[324,114224,101700],{"class":916},[324,114226,101703],{"class":916},[324,114228,114229,114231,114233],{"class":326,"line":203},[324,114230,31052],{"class":734},[324,114232,101710],{"class":738},[324,114234,114235],{"class":738}," mujoco-gym-api\n",[324,114237,114238,114240,114242,114244,114246],{"class":326,"line":338},[324,114239,24558],{"class":734},[324,114241,760],{"class":738},[324,114243,101652],{"class":738},[324,114245,108432],{"class":738},[324,114247,114202],{"class":738},[19,114249,101726],{},[192,114251,114252,114262,114265,114271],{},[195,114253,114254,114255,114258,114259,29107],{},"本章使用 ",[269,114256,114257],{},"gymnasium","，不是旧版 ",[269,114260,114261],{},"gym",[195,114263,114264],{},"Gymnasium API 与旧 Gym API 有差异。",[195,114266,114267,114268,29107],{},"旧 Gym 常见返回值是 4 个: ",[269,114269,114270],{},"obs, reward, done, info",[195,114272,114273,114274,29107],{},"Gymnasium 返回值是 5 个: ",[269,114275,114276],{},"obs, reward, terminated, truncated, info",[14,114278,101766],{"id":101765},[19,114280,114281],{},"强化学习环境接口包含:",[1003,114283,114284,114293],{},[1006,114285,114286],{},[1009,114287,114288,114291],{},[1012,114289,114290],{"align":24463},"方法",[1012,114292,103417],{"align":24463},[1049,114294,114295,114305,114315,114325],{},[1009,114296,114297,114302],{},[1054,114298,114299],{"align":24463},[269,114300,114301],{},"reset()",[1054,114303,114304],{"align":24463},"重置环境",[1009,114306,114307,114312],{},[1054,114308,114309],{"align":24463},[269,114310,114311],{},"step(action)",[1054,114313,114314],{"align":24463},"执行动作",[1009,114316,114317,114322],{},[1054,114318,114319],{"align":24463},[269,114320,114321],{},"observation_space",[1054,114323,114324],{"align":24463},"观测空间",[1009,114326,114327,114332],{},[1054,114328,114329],{"align":24463},[269,114330,114331],{},"action_space",[1054,114333,24381],{"align":24463},[19,114335,114336],{},"一个最小环境需要完成:",[316,114338,114341],{"className":114339,"code":114340,"language":5916,"meta":50},[5914],"reset 初始化状态\nstep 写入 data.ctrl\nmj_step 推进仿真\n计算 obs\u002Freward\u002Fdone\n返回结果\n",[269,114342,114340],{"__ignoreMap":50},[35,114344,114346,300,114349,105359],{"id":114345},"terminated-和-truncated-的区别",[269,114347,114348],{},"terminated",[269,114350,114351],{},"truncated",[19,114353,114354],{},"Gymnasium 把“结束”拆成两个概念：",[1003,114356,114357,114367],{},[1006,114358,114359],{},[1009,114360,114361,114363,114365],{},[1012,114362,105295],{"align":24463},[1012,114364,101422],{"align":24463},[1012,114366,21916],{"align":24463},[1049,114368,114369,114381],{},[1009,114370,114371,114375,114378],{},[1054,114372,114373],{"align":24463},[269,114374,114348],{},[1054,114376,114377],{"align":24463},"任务自然结束",[1054,114379,114380],{"align":24463},"机械臂到达目标、机器人摔倒",[1009,114382,114383,114387,114390],{},[1054,114384,114385],{"align":24463},[269,114386,114351],{},[1054,114388,114389],{"align":24463},"因外部限制截断",[1054,114391,114392],{"align":24463},"达到最大步数、时间限制",[19,114394,114395],{},"本章中：",[316,114397,114399],{"className":31100,"code":114398,"language":31102,"meta":50,"style":50},"terminated = dist \u003C 0.05\ntruncated = self.steps >= self.max_steps\n",[269,114400,114401,114416],{"__ignoreMap":50},[324,114402,114403,114406,114408,114411,114413],{"class":326,"line":327},[324,114404,114405],{"class":867},"terminated ",[324,114407,913],{"class":863},[324,114409,114410],{"class":867}," dist ",[324,114412,1774],{"class":863},[324,114414,114415],{"class":916}," 0.05\n",[324,114417,114418,114421,114423,114425,114428,114430,114432],{"class":326,"line":203},[324,114419,114420],{"class":867},"truncated ",[324,114422,913],{"class":863},[324,114424,39595],{"class":916},[324,114426,114427],{"class":867},".steps ",[324,114429,2441],{"class":863},[324,114431,39595],{"class":916},[324,114433,114434],{"class":867},".max_steps\n",[19,114436,114437],{},"也就是：",[192,114439,114440,114443],{},[195,114441,114442],{},"末端距离目标小于 0.05，任务成功结束。",[195,114444,114445],{},"步数超过上限，episode 被截断。",[35,114447,114449,300,114451],{"id":114448},"observation_space-和-action_space",[269,114450,114321],{},[269,114452,114331],{},[19,114454,114455],{},"这两个对象告诉算法：",[316,114457,114460],{"className":114458,"code":114459,"language":5916,"meta":50},[5914],"观测长什么样\n动作允许多大\n",[269,114461,114459],{"__ignoreMap":50},[19,114463,15362],{},[316,114465,114467],{"className":31100,"code":114466,"language":31102,"meta":50,"style":50},"self.action_space = spaces.Box(low=-1.0, high=1.0, shape=(2,), dtype=np.float32)\n",[269,114468,114469],{"__ignoreMap":50},[324,114470,114471,114473,114476,114478,114481,114484,114487,114489,114491,114494,114496,114498,114500,114502,114504,114506,114508,114511,114513,114515],{"class":326,"line":327},[324,114472,31545],{"class":916},[324,114474,114475],{"class":867},".action_space ",[324,114477,913],{"class":863},[324,114479,114480],{"class":867}," spaces.Box(",[324,114482,114483],{"class":5945},"low",[324,114485,114486],{"class":863},"=-",[324,114488,103124],{"class":916},[324,114490,13164],{"class":867},[324,114492,114493],{"class":5945},"high",[324,114495,913],{"class":863},[324,114497,103124],{"class":916},[324,114499,13164],{"class":867},[324,114501,96685],{"class":5945},[324,114503,913],{"class":863},[324,114505,868],{"class":867},[324,114507,944],{"class":916},[324,114509,114510],{"class":867},",), ",[324,114512,94222],{"class":5945},[324,114514,913],{"class":863},[324,114516,114517],{"class":867},"np.float32)\n",[19,114519,114520,114521,114524],{},"表示动作是 2 维数组，每个值都在 ",[269,114522,114523],{},"[-1, 1]"," 范围内。",[316,114526,114528],{"className":31100,"code":114527,"language":31102,"meta":50,"style":50},"self.observation_space = spaces.Box(low=-np.inf, high=np.inf, shape=(10,), dtype=np.float32)\n",[269,114529,114530],{"__ignoreMap":50},[324,114531,114532,114534,114537,114539,114541,114543,114545,114548,114550,114552,114554,114556,114558,114560,114562,114564,114566,114568],{"class":326,"line":327},[324,114533,31545],{"class":916},[324,114535,114536],{"class":867},".observation_space ",[324,114538,913],{"class":863},[324,114540,114480],{"class":867},[324,114542,114483],{"class":5945},[324,114544,114486],{"class":863},[324,114546,114547],{"class":867},"np.inf, ",[324,114549,114493],{"class":5945},[324,114551,913],{"class":863},[324,114553,114547],{"class":867},[324,114555,96685],{"class":5945},[324,114557,913],{"class":863},[324,114559,868],{"class":867},[324,114561,1310],{"class":916},[324,114563,114510],{"class":867},[324,114565,94222],{"class":5945},[324,114567,913],{"class":863},[324,114569,114517],{"class":867},[19,114571,114572],{},"表示观测是 10 维浮点数组，数值范围不强行限制。",[35,114574,114576],{"id":114575},"frame_skip-是什么","frame_skip 是什么",[316,114578,114580],{"className":31100,"code":114579,"language":31102,"meta":50,"style":50},"self.frame_skip = 5\n",[269,114581,114582],{"__ignoreMap":50},[324,114583,114584,114586,114589,114591],{"class":326,"line":327},[324,114585,31545],{"class":916},[324,114587,114588],{"class":867},".frame_skip ",[324,114590,913],{"class":863},[324,114592,55149],{"class":916},[19,114594,114595,114596,114599,114600,114602],{},"表示外部调用一次 ",[269,114597,114598],{},"env.step(action)","，内部连续执行 5 次 MuJoCo ",[269,114601,101936],{},"。这样做很常见，因为控制策略不一定需要每个物理时间步都重新给动作。",[14,114604,101974],{"id":101973},[316,114606,114608],{"className":31100,"code":114607,"language":31102,"meta":50,"style":50},"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",[269,114609,114610,114622,114628,114638,114649,114653,114657,114665,114670,114674,114678,114682,114686,114690,114694,114698,114703,114707,114711,114715,114720,114724,114728,114732,114736,114740,114744,114748,114752,114756,114760,114764,114768,114772,114790,114805,114809,114822,114832,114847,114864,114868,114889,114908,114933,114947,114951,114961,114973,114983,114987,115029,115067,115071,115081,115097,115112,115131,115138,115142,115155,115170,115185,115198,115217,115233,115237,115278,115293,115308,115312,115351,115362,115375,115379,115389,115398,115402,115412,115427,115445,115449,115460,115477,115490,115494,115504,115508,115519,115530,115534,115548,115562,115578,115582,115595,115612,115627,115634,115638,115642,115654,115664,115682,115694,115706,115710,115718,115734,115743,115752,115760,115802,115815,115820,115824,115842,115846,115850,115862],{"__ignoreMap":50},[324,114611,114612,114614,114617,114619],{"class":326,"line":327},[324,114613,31114],{"class":863},[324,114615,114616],{"class":867}," gymnasium ",[324,114618,32105],{"class":863},[324,114620,114621],{"class":867}," gym\n",[324,114623,114624,114626],{"class":326,"line":203},[324,114625,31114],{"class":863},[324,114627,102022],{"class":867},[324,114629,114630,114632,114634,114636],{"class":326,"line":338},[324,114631,31114],{"class":863},[324,114633,32102],{"class":867},[324,114635,32105],{"class":863},[324,114637,32108],{"class":867},[324,114639,114640,114642,114644,114646],{"class":326,"line":344},[324,114641,31459],{"class":863},[324,114643,114616],{"class":867},[324,114645,31114],{"class":863},[324,114647,114648],{"class":867}," spaces\n",[324,114650,114651],{"class":326,"line":484},[324,114652,488],{"emptyLinePlaceholder":487},[324,114654,114655],{"class":326,"line":491},[324,114656,488],{"emptyLinePlaceholder":487},[324,114658,114659,114661,114663],{"class":326,"line":496},[324,114660,102035],{"class":916},[324,114662,14293],{"class":863},[324,114664,102040],{"class":738},[324,114666,114667],{"class":326,"line":502},[324,114668,114669],{"class":738},"\u003Cmujoco model=\"gym_reacher\">\n",[324,114671,114672],{"class":326,"line":508},[324,114673,112459],{"class":738},[324,114675,114676],{"class":326,"line":514},[324,114677,488],{"emptyLinePlaceholder":487},[324,114679,114680],{"class":326,"line":2343},[324,114681,102059],{"class":738},[324,114683,114684],{"class":326,"line":2348},[324,114685,112477],{"class":738},[324,114687,114688],{"class":326,"line":2354},[324,114689,488],{"emptyLinePlaceholder":487},[324,114691,114692],{"class":326,"line":2359},[324,114693,112486],{"class":738},[324,114695,114696],{"class":326,"line":2373},[324,114697,112491],{"class":738},[324,114699,114700],{"class":326,"line":2378},[324,114701,114702],{"class":738},"      \u003Cgeom name=\"link1_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[324,114704,114705],{"class":326,"line":2384},[324,114706,488],{"emptyLinePlaceholder":487},[324,114708,114709],{"class":326,"line":2405},[324,114710,112505],{"class":738},[324,114712,114713],{"class":326,"line":2410},[324,114714,112510],{"class":738},[324,114716,114717],{"class":326,"line":2424},[324,114718,114719],{"class":738},"        \u003Cgeom name=\"link2_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[324,114721,114722],{"class":326,"line":2429},[324,114723,112520],{"class":738},[324,114725,114726],{"class":326,"line":2458},[324,114727,107159],{"class":738},[324,114729,114730],{"class":326,"line":2463},[324,114731,102088],{"class":738},[324,114733,114734],{"class":326,"line":2480},[324,114735,102093],{"class":738},[324,114737,114738],{"class":326,"line":2485},[324,114739,488],{"emptyLinePlaceholder":487},[324,114741,114742],{"class":326,"line":2490},[324,114743,107176],{"class":738},[324,114745,114746],{"class":326,"line":2495},[324,114747,112545],{"class":738},[324,114749,114750],{"class":326,"line":2509},[324,114751,112550],{"class":738},[324,114753,114754],{"class":326,"line":2514},[324,114755,107186],{"class":738},[324,114757,114758],{"class":326,"line":3306},[324,114759,102098],{"class":738},[324,114761,114762],{"class":326,"line":3320},[324,114763,96420],{"class":738},[324,114765,114766],{"class":326,"line":3328},[324,114767,488],{"emptyLinePlaceholder":487},[324,114769,114770],{"class":326,"line":3333},[324,114771,488],{"emptyLinePlaceholder":487},[324,114773,114774,114776,114779,114781,114783,114785,114788],{"class":326,"line":3339},[324,114775,15423],{"class":863},[324,114777,114778],{"class":734}," ReacherEnv",[324,114780,868],{"class":867},[324,114782,114261],{"class":734},[324,114784,1422],{"class":867},[324,114786,114787],{"class":734},"Env",[324,114789,31508],{"class":867},[324,114791,114792,114795,114797,114799,114802],{"class":326,"line":3345},[324,114793,114794],{"class":867},"    metadata ",[324,114796,913],{"class":863},[324,114798,5177],{"class":867},[324,114800,114801],{"class":738},"\"render_modes\"",[324,114803,114804],{"class":867},": []}\n",[324,114806,114807],{"class":326,"line":3350},[324,114808,488],{"emptyLinePlaceholder":487},[324,114810,114811,114813,114815,114818,114820],{"class":326,"line":8677},[324,114812,31523],{"class":863},[324,114814,31526],{"class":916},[324,114816,114817],{"class":867},"(self) -> ",[324,114819,96408],{"class":916},[324,114821,4468],{"class":867},[324,114823,114824,114826,114828,114830],{"class":326,"line":8701},[324,114825,31539],{"class":916},[324,114827,17990],{"class":867},[324,114829,31551],{"class":916},[324,114831,2706],{"class":867},[324,114833,114834,114836,114839,114841,114843,114845],{"class":326,"line":8706},[324,114835,31567],{"class":916},[324,114837,114838],{"class":867},".model ",[324,114840,913],{"class":863},[324,114842,102133],{"class":867},[324,114844,102035],{"class":916},[324,114846,874],{"class":867},[324,114848,114849,114851,114854,114856,114859,114861],{"class":326,"line":8712},[324,114850,31567],{"class":916},[324,114852,114853],{"class":867},".data ",[324,114855,913],{"class":863},[324,114857,114858],{"class":867}," mujoco.MjData(",[324,114860,31545],{"class":916},[324,114862,114863],{"class":867},".model)\n",[324,114865,114866],{"class":326,"line":8739},[324,114867,488],{"emptyLinePlaceholder":487},[324,114869,114870,114872,114875,114877,114880,114882,114885,114887],{"class":326,"line":8744},[324,114871,31567],{"class":916},[324,114873,114874],{"class":867},".tip_site_id ",[324,114876,913],{"class":863},[324,114878,114879],{"class":867}," mujoco.mj_name2id(",[324,114881,31545],{"class":916},[324,114883,114884],{"class":867},".model, mujoco.mjtObj.mjOBJ_SITE, ",[324,114886,112257],{"class":738},[324,114888,874],{"class":867},[324,114890,114891,114893,114896,114898,114900,114902,114904,114906],{"class":326,"line":8750},[324,114892,31567],{"class":916},[324,114894,114895],{"class":867},".target_site_id ",[324,114897,913],{"class":863},[324,114899,114879],{"class":867},[324,114901,31545],{"class":916},[324,114903,114884],{"class":867},[324,114905,112680],{"class":738},[324,114907,874],{"class":867},[324,114909,114910,114912,114914,114916,114918,114920,114923,114925,114927,114929,114931],{"class":326,"line":8762},[324,114911,3226],{"class":863},[324,114913,39595],{"class":916},[324,114915,114874],{"class":867},[324,114917,1774],{"class":863},[324,114919,4822],{"class":916},[324,114921,114922],{"class":863}," or",[324,114924,39595],{"class":916},[324,114926,114895],{"class":867},[324,114928,1774],{"class":863},[324,114930,4822],{"class":916},[324,114932,4468],{"class":867},[324,114934,114935,114938,114940,114942,114945],{"class":326,"line":8774},[324,114936,114937],{"class":863},"            raise",[324,114939,104156],{"class":916},[324,114941,868],{"class":867},[324,114943,114944],{"class":738},"\"required sites not found\"",[324,114946,874],{"class":867},[324,114948,114949],{"class":326,"line":8786},[324,114950,488],{"emptyLinePlaceholder":487},[324,114952,114953,114955,114957,114959],{"class":326,"line":10445},[324,114954,31567],{"class":916},[324,114956,114588],{"class":867},[324,114958,913],{"class":863},[324,114960,55149],{"class":916},[324,114962,114963,114965,114968,114970],{"class":326,"line":10470},[324,114964,31567],{"class":916},[324,114966,114967],{"class":867},".max_steps ",[324,114969,913],{"class":863},[324,114971,114972],{"class":916}," 200\n",[324,114974,114975,114977,114979,114981],{"class":326,"line":10493},[324,114976,31567],{"class":916},[324,114978,114427],{"class":867},[324,114980,913],{"class":863},[324,114982,48055],{"class":916},[324,114984,114985],{"class":326,"line":10517},[324,114986,488],{"emptyLinePlaceholder":487},[324,114988,114989,114991,114993,114995,114997,114999,115001,115003,115005,115007,115009,115011,115013,115015,115017,115019,115021,115023,115025,115027],{"class":326,"line":10522},[324,114990,31567],{"class":916},[324,114992,114475],{"class":867},[324,114994,913],{"class":863},[324,114996,114480],{"class":867},[324,114998,114483],{"class":5945},[324,115000,114486],{"class":863},[324,115002,103124],{"class":916},[324,115004,13164],{"class":867},[324,115006,114493],{"class":5945},[324,115008,913],{"class":863},[324,115010,103124],{"class":916},[324,115012,13164],{"class":867},[324,115014,96685],{"class":5945},[324,115016,913],{"class":863},[324,115018,868],{"class":867},[324,115020,944],{"class":916},[324,115022,114510],{"class":867},[324,115024,94222],{"class":5945},[324,115026,913],{"class":863},[324,115028,114517],{"class":867},[324,115030,115031,115033,115035,115037,115039,115041,115043,115045,115047,115049,115051,115053,115055,115057,115059,115061,115063,115065],{"class":326,"line":10527},[324,115032,31567],{"class":916},[324,115034,114536],{"class":867},[324,115036,913],{"class":863},[324,115038,114480],{"class":867},[324,115040,114483],{"class":5945},[324,115042,114486],{"class":863},[324,115044,114547],{"class":867},[324,115046,114493],{"class":5945},[324,115048,913],{"class":863},[324,115050,114547],{"class":867},[324,115052,96685],{"class":5945},[324,115054,913],{"class":863},[324,115056,868],{"class":867},[324,115058,1310],{"class":916},[324,115060,114510],{"class":867},[324,115062,94222],{"class":5945},[324,115064,913],{"class":863},[324,115066,114517],{"class":867},[324,115068,115069],{"class":326,"line":10532},[324,115070,488],{"emptyLinePlaceholder":487},[324,115072,115073,115075,115078],{"class":326,"line":10541},[324,115074,31523],{"class":863},[324,115076,115077],{"class":734}," _get_obs",[324,115079,115080],{"class":867},"(self) -> np.ndarray:\n",[324,115082,115083,115085,115087,115089,115092,115094],{"class":326,"line":10546},[324,115084,112858],{"class":867},[324,115086,913],{"class":863},[324,115088,39595],{"class":916},[324,115090,115091],{"class":867},".data.site_xpos[",[324,115093,31545],{"class":916},[324,115095,115096],{"class":867},".tip_site_id].copy()\n",[324,115098,115099,115101,115103,115105,115107,115109],{"class":326,"line":10552},[324,115100,112871],{"class":867},[324,115102,913],{"class":863},[324,115104,39595],{"class":916},[324,115106,115091],{"class":867},[324,115108,31545],{"class":916},[324,115110,115111],{"class":867},".target_site_id].copy()\n",[324,115113,115114,115116,115118,115121,115123,115126,115128],{"class":326,"line":10573},[324,115115,110903],{"class":867},[324,115117,913],{"class":863},[324,115119,115120],{"class":867}," np.concatenate([",[324,115122,31545],{"class":916},[324,115124,115125],{"class":867},".data.qpos.copy(), ",[324,115127,31545],{"class":916},[324,115129,115130],{"class":867},".data.qvel.copy(), tip, target])\n",[324,115132,115133,115135],{"class":326,"line":10579},[324,115134,15481],{"class":863},[324,115136,115137],{"class":867}," obs.astype(np.float32)\n",[324,115139,115140],{"class":326,"line":10593},[324,115141,488],{"emptyLinePlaceholder":487},[324,115143,115144,115146,115149,115151,115153],{"class":326,"line":10599},[324,115145,31523],{"class":863},[324,115147,115148],{"class":734}," _get_reward",[324,115150,114817],{"class":867},[324,115152,907],{"class":916},[324,115154,4468],{"class":867},[324,115156,115157,115159,115161,115163,115165,115167],{"class":326,"line":10626},[324,115158,112858],{"class":867},[324,115160,913],{"class":863},[324,115162,39595],{"class":916},[324,115164,115091],{"class":867},[324,115166,31545],{"class":916},[324,115168,115169],{"class":867},".tip_site_id]\n",[324,115171,115172,115174,115176,115178,115180,115182],{"class":326,"line":10635},[324,115173,112871],{"class":867},[324,115175,913],{"class":863},[324,115177,39595],{"class":916},[324,115179,115091],{"class":867},[324,115181,31545],{"class":916},[324,115183,115184],{"class":867},".target_site_id]\n",[324,115186,115187,115190,115192,115194,115196],{"class":326,"line":10641},[324,115188,115189],{"class":867},"        dist ",[324,115191,913],{"class":863},[324,115193,112322],{"class":867},[324,115195,1396],{"class":863},[324,115197,112327],{"class":867},[324,115199,115200,115203,115205,115207,115209,115212,115214],{"class":326,"line":10649},[324,115201,115202],{"class":867},"        control_cost ",[324,115204,913],{"class":863},[324,115206,112758],{"class":916},[324,115208,7247],{"class":863},[324,115210,115211],{"class":867}," np.sum(np.square(",[324,115213,31545],{"class":916},[324,115215,115216],{"class":867},".data.ctrl))\n",[324,115218,115219,115221,115223,115225,115227,115229,115231],{"class":326,"line":10654},[324,115220,15481],{"class":863},[324,115222,110518],{"class":916},[324,115224,868],{"class":867},[324,115226,1396],{"class":863},[324,115228,112317],{"class":867},[324,115230,1396],{"class":863},[324,115232,112780],{"class":867},[324,115234,115235],{"class":326,"line":17333},[324,115236,488],{"emptyLinePlaceholder":487},[324,115238,115239,115241,115244,115247,115249,115252,115254,115256,115258,115260,115262,115265,115268,115270,115272,115274,115276],{"class":326,"line":17339},[324,115240,31523],{"class":863},[324,115242,115243],{"class":734}," reset",[324,115245,115246],{"class":867},"(self, ",[324,115248,1319],{"class":863},[324,115250,115251],{"class":867},", seed: ",[324,115253,871],{"class":916},[324,115255,25833],{"class":863},[324,115257,39655],{"class":916},[324,115259,14293],{"class":863},[324,115261,39655],{"class":916},[324,115263,115264],{"class":867},", options: ",[324,115266,115267],{"class":916},"dict",[324,115269,25833],{"class":863},[324,115271,39655],{"class":916},[324,115273,14293],{"class":863},[324,115275,39655],{"class":916},[324,115277,31508],{"class":867},[324,115279,115280,115282,115285,115288,115290],{"class":326,"line":17362},[324,115281,31539],{"class":916},[324,115283,115284],{"class":867},"().reset(",[324,115286,115287],{"class":5945},"seed",[324,115289,913],{"class":863},[324,115291,115292],{"class":867},"seed)\n",[324,115294,115295,115298,115300,115303,115305],{"class":326,"line":17368},[324,115296,115297],{"class":867},"        mujoco.mj_resetData(",[324,115299,31545],{"class":916},[324,115301,115302],{"class":867},".model, ",[324,115304,31545],{"class":916},[324,115306,115307],{"class":867},".data)\n",[324,115309,115310],{"class":326,"line":17391},[324,115311,488],{"emptyLinePlaceholder":487},[324,115313,115314,115316,115319,115321,115323,115326,115328,115330,115332,115334,115336,115338,115340,115342,115344,115346,115348],{"class":326,"line":17405},[324,115315,31567],{"class":916},[324,115317,115318],{"class":867},".data.qpos[:] ",[324,115320,913],{"class":863},[324,115322,39595],{"class":916},[324,115324,115325],{"class":867},".np_random.uniform(",[324,115327,114483],{"class":5945},[324,115329,114486],{"class":863},[324,115331,86932],{"class":916},[324,115333,13164],{"class":867},[324,115335,114493],{"class":5945},[324,115337,913],{"class":863},[324,115339,86932],{"class":916},[324,115341,13164],{"class":867},[324,115343,32218],{"class":5945},[324,115345,913],{"class":863},[324,115347,31545],{"class":916},[324,115349,115350],{"class":867},".model.nq)\n",[324,115352,115353,115355,115358,115360],{"class":326,"line":17425},[324,115354,31567],{"class":916},[324,115356,115357],{"class":867},".data.qvel[:] ",[324,115359,913],{"class":863},[324,115361,105482],{"class":916},[324,115363,115364,115367,115369,115371,115373],{"class":326,"line":17431},[324,115365,115366],{"class":867},"        mujoco.mj_forward(",[324,115368,31545],{"class":916},[324,115370,115302],{"class":867},[324,115372,31545],{"class":916},[324,115374,115307],{"class":867},[324,115376,115377],{"class":326,"line":17442},[324,115378,488],{"emptyLinePlaceholder":487},[324,115380,115381,115383,115385,115387],{"class":326,"line":17465},[324,115382,31567],{"class":916},[324,115384,114427],{"class":867},[324,115386,913],{"class":863},[324,115388,48055],{"class":916},[324,115390,115391,115393,115395],{"class":326,"line":17487},[324,115392,15481],{"class":863},[324,115394,39595],{"class":916},[324,115396,115397],{"class":867},"._get_obs(), {}\n",[324,115399,115400],{"class":326,"line":17492},[324,115401,488],{"emptyLinePlaceholder":487},[324,115403,115404,115406,115409],{"class":326,"line":17498},[324,115405,31523],{"class":863},[324,115407,115408],{"class":734}," step",[324,115410,115411],{"class":867},"(self, action):\n",[324,115413,115414,115416,115418,115421,115423,115425],{"class":326,"line":17512},[324,115415,110943],{"class":867},[324,115417,913],{"class":863},[324,115419,115420],{"class":867}," np.asarray(action, ",[324,115422,94222],{"class":5945},[324,115424,913],{"class":863},[324,115426,114517],{"class":867},[324,115428,115429,115431,115433,115435,115437,115440,115442],{"class":326,"line":17525},[324,115430,110943],{"class":867},[324,115432,913],{"class":863},[324,115434,108168],{"class":867},[324,115436,31545],{"class":916},[324,115438,115439],{"class":867},".action_space.low, ",[324,115441,31545],{"class":916},[324,115443,115444],{"class":867},".action_space.high)\n",[324,115446,115447],{"class":326,"line":17530},[324,115448,488],{"emptyLinePlaceholder":487},[324,115450,115451,115453,115456,115458],{"class":326,"line":17544},[324,115452,31567],{"class":916},[324,115454,115455],{"class":867},".data.ctrl[:] ",[324,115457,913],{"class":863},[324,115459,108191],{"class":867},[324,115461,115462,115464,115466,115468,115470,115472,115474],{"class":326,"line":17549},[324,115463,4132],{"class":863},[324,115465,102222],{"class":867},[324,115467,26767],{"class":863},[324,115469,33165],{"class":916},[324,115471,868],{"class":867},[324,115473,31545],{"class":916},[324,115475,115476],{"class":867},".frame_skip):\n",[324,115478,115479,115482,115484,115486,115488],{"class":326,"line":17555},[324,115480,115481],{"class":867},"            mujoco.mj_step(",[324,115483,31545],{"class":916},[324,115485,115302],{"class":867},[324,115487,31545],{"class":916},[324,115489,115307],{"class":867},[324,115491,115492],{"class":326,"line":17560},[324,115493,488],{"emptyLinePlaceholder":487},[324,115495,115496,115498,115500,115502],{"class":326,"line":17574},[324,115497,31567],{"class":916},[324,115499,114427],{"class":867},[324,115501,10206],{"class":863},[324,115503,56421],{"class":916},[324,115505,115506],{"class":326,"line":17579},[324,115507,488],{"emptyLinePlaceholder":487},[324,115509,115510,115512,115514,115516],{"class":326,"line":17584},[324,115511,110903],{"class":867},[324,115513,913],{"class":863},[324,115515,39595],{"class":916},[324,115517,115518],{"class":867},"._get_obs()\n",[324,115520,115521,115523,115525,115527],{"class":326,"line":17598},[324,115522,111008],{"class":867},[324,115524,913],{"class":863},[324,115526,39595],{"class":916},[324,115528,115529],{"class":867},"._get_reward()\n",[324,115531,115532],{"class":326,"line":17610},[324,115533,488],{"emptyLinePlaceholder":487},[324,115535,115536,115538,115540,115542,115544,115546],{"class":326,"line":17615},[324,115537,112858],{"class":867},[324,115539,913],{"class":863},[324,115541,39595],{"class":916},[324,115543,115091],{"class":867},[324,115545,31545],{"class":916},[324,115547,115169],{"class":867},[324,115549,115550,115552,115554,115556,115558,115560],{"class":326,"line":17628},[324,115551,112871],{"class":867},[324,115553,913],{"class":863},[324,115555,39595],{"class":916},[324,115557,115091],{"class":867},[324,115559,31545],{"class":916},[324,115561,115184],{"class":867},[324,115563,115564,115566,115568,115570,115573,115575],{"class":326,"line":17633},[324,115565,115189],{"class":867},[324,115567,913],{"class":863},[324,115569,110518],{"class":916},[324,115571,115572],{"class":867},"(np.linalg.norm(tip ",[324,115574,1396],{"class":863},[324,115576,115577],{"class":867}," target))\n",[324,115579,115580],{"class":326,"line":17638},[324,115581,488],{"emptyLinePlaceholder":487},[324,115583,115584,115587,115589,115591,115593],{"class":326,"line":17643},[324,115585,115586],{"class":867},"        terminated ",[324,115588,913],{"class":863},[324,115590,114410],{"class":867},[324,115592,1774],{"class":863},[324,115594,114415],{"class":916},[324,115596,115597,115600,115602,115604,115606,115608,115610],{"class":326,"line":17656},[324,115598,115599],{"class":867},"        truncated ",[324,115601,913],{"class":863},[324,115603,39595],{"class":916},[324,115605,114427],{"class":867},[324,115607,2441],{"class":863},[324,115609,39595],{"class":916},[324,115611,114434],{"class":867},[324,115613,115614,115617,115619,115621,115624],{"class":326,"line":17661},[324,115615,115616],{"class":867},"        info ",[324,115618,913],{"class":863},[324,115620,5177],{"class":867},[324,115622,115623],{"class":738},"\"distance\"",[324,115625,115626],{"class":867},": dist}\n",[324,115628,115629,115631],{"class":326,"line":33355},[324,115630,15481],{"class":863},[324,115632,115633],{"class":867}," obs, reward, terminated, truncated, info\n",[324,115635,115636],{"class":326,"line":33361},[324,115637,488],{"emptyLinePlaceholder":487},[324,115639,115640],{"class":326,"line":33367},[324,115641,488],{"emptyLinePlaceholder":487},[324,115643,115644,115646,115648,115650,115652],{"class":326,"line":33373},[324,115645,32669],{"class":863},[324,115647,2703],{"class":734},[324,115649,102119],{"class":867},[324,115651,96408],{"class":916},[324,115653,4468],{"class":867},[324,115655,115656,115659,115661],{"class":326,"line":33379},[324,115657,115658],{"class":867},"    env ",[324,115660,913],{"class":863},[324,115662,115663],{"class":867}," ReacherEnv()\n",[324,115665,115666,115669,115671,115674,115676,115678,115680],{"class":326,"line":33390},[324,115667,115668],{"class":867},"    obs, info ",[324,115670,913],{"class":863},[324,115672,115673],{"class":867}," env.reset(",[324,115675,115287],{"class":5945},[324,115677,913],{"class":863},[324,115679,1056],{"class":916},[324,115681,874],{"class":867},[324,115683,115684,115686,115688,115691],{"class":326,"line":33396},[324,115685,32021],{"class":916},[324,115687,868],{"class":867},[324,115689,115690],{"class":738},"\"initial obs shape:\"",[324,115692,115693],{"class":867},", obs.shape)\n",[324,115695,115696,115698,115700,115703],{"class":326,"line":33416},[324,115697,32021],{"class":916},[324,115699,868],{"class":867},[324,115701,115702],{"class":738},"\"initial info:\"",[324,115704,115705],{"class":867},", info)\n",[324,115707,115708],{"class":326,"line":33422},[324,115709,488],{"emptyLinePlaceholder":487},[324,115711,115712,115714,115716],{"class":326,"line":33433},[324,115713,110874],{"class":867},[324,115715,913],{"class":863},[324,115717,105482],{"class":916},[324,115719,115720,115722,115724,115726,115728,115730,115732],{"class":326,"line":33439},[324,115721,3930],{"class":863},[324,115723,32338],{"class":867},[324,115725,26767],{"class":863},[324,115727,33165],{"class":916},[324,115729,868],{"class":867},[324,115731,1564],{"class":916},[324,115733,31508],{"class":867},[324,115735,115736,115738,115740],{"class":326,"line":33445},[324,115737,110943],{"class":867},[324,115739,913],{"class":863},[324,115741,115742],{"class":867}," env.action_space.sample()\n",[324,115744,115745,115748,115750],{"class":326,"line":33451},[324,115746,115747],{"class":867},"        obs, reward, terminated, truncated, info ",[324,115749,913],{"class":863},[324,115751,114136],{"class":867},[324,115753,115754,115756,115758],{"class":326,"line":33457},[324,115755,111018],{"class":867},[324,115757,10206],{"class":863},[324,115759,111023],{"class":867},[324,115761,115762,115764,115766,115768,115770,115773,115775,115777,115780,115782,115784,115787,115789,115791,115794,115796,115798,115800],{"class":326,"line":33463},[324,115763,33173],{"class":916},[324,115765,868],{"class":867},[324,115767,111052],{"class":738},[324,115769,111055],{"class":867},[324,115771,115772],{"class":738},"\"reward:\"",[324,115774,13164],{"class":867},[324,115776,32740],{"class":916},[324,115778,115779],{"class":867},"(reward, ",[324,115781,938],{"class":916},[324,115783,111066],{"class":867},[324,115785,115786],{"class":738},"\"distance:\"",[324,115788,13164],{"class":867},[324,115790,32740],{"class":916},[324,115792,115793],{"class":867},"(info[",[324,115795,115623],{"class":738},[324,115797,112923],{"class":867},[324,115799,938],{"class":916},[324,115801,31219],{"class":867},[324,115803,115804,115806,115809,115812],{"class":326,"line":33469},[324,115805,3226],{"class":863},[324,115807,115808],{"class":867}," terminated ",[324,115810,115811],{"class":863},"or",[324,115813,115814],{"class":867}," truncated:\n",[324,115816,115817],{"class":326,"line":33475},[324,115818,115819],{"class":863},"            break\n",[324,115821,115822],{"class":326,"line":33495},[324,115823,488],{"emptyLinePlaceholder":487},[324,115825,115826,115828,115830,115832,115834,115836,115838,115840],{"class":326,"line":33501},[324,115827,32021],{"class":916},[324,115829,868],{"class":867},[324,115831,111097],{"class":738},[324,115833,13164],{"class":867},[324,115835,32740],{"class":916},[324,115837,111104],{"class":867},[324,115839,938],{"class":916},[324,115841,31219],{"class":867},[324,115843,115844],{"class":326,"line":33517},[324,115845,488],{"emptyLinePlaceholder":487},[324,115847,115848],{"class":326,"line":33523},[324,115849,488],{"emptyLinePlaceholder":487},[324,115851,115852,115854,115856,115858,115860],{"class":326,"line":33537},[324,115853,2262],{"class":863},[324,115855,31942],{"class":916},[324,115857,102280],{"class":863},[324,115859,102283],{"class":738},[324,115861,4468],{"class":867},[324,115863,115864],{"class":326,"line":33543},[324,115865,102290],{"class":867},[19,115867,104291],{},[316,115869,115871],{"className":24549,"code":115870,"language":24551,"meta":50,"style":50},"touch ch8_gym_env.py\n",[269,115872,115873],{"__ignoreMap":50},[324,115874,115875,115877],{"class":326,"line":327},[324,115876,102004],{"class":734},[324,115878,115879],{"class":738}," ch8_gym_env.py\n",[19,115881,111165],{},[316,115883,115885],{"className":24549,"code":115884,"language":24551,"meta":50,"style":50},"python ch8_gym_env.py\n",[269,115886,115887],{"__ignoreMap":50},[324,115888,115889,115891],{"class":326,"line":327},[324,115890,31102],{"class":734},[324,115892,115879],{"class":738},[35,115894,102293],{"id":102293},[19,115896,115897],{},"继承 Gymnasium 环境：",[316,115899,115901],{"className":31100,"code":115900,"language":31102,"meta":50,"style":50},"class ReacherEnv(gym.Env):\n",[269,115902,115903],{"__ignoreMap":50},[324,115904,115905,115907,115909,115911,115913,115915,115917],{"class":326,"line":327},[324,115906,15423],{"class":863},[324,115908,114778],{"class":734},[324,115910,868],{"class":867},[324,115912,114261],{"class":734},[324,115914,1422],{"class":867},[324,115916,114787],{"class":734},[324,115918,31508],{"class":867},[19,115920,115921],{},"这表示你在定义一个符合 Gymnasium 规范的环境。",[19,115923,115924],{},"初始化模型：",[316,115926,115928],{"className":31100,"code":115927,"language":31102,"meta":50,"style":50},"self.model = mujoco.MjModel.from_xml_string(XML)\nself.data = mujoco.MjData(self.model)\n",[269,115929,115930,115944],{"__ignoreMap":50},[324,115931,115932,115934,115936,115938,115940,115942],{"class":326,"line":327},[324,115933,31545],{"class":916},[324,115935,114838],{"class":867},[324,115937,913],{"class":863},[324,115939,102133],{"class":867},[324,115941,102035],{"class":916},[324,115943,874],{"class":867},[324,115945,115946,115948,115950,115952,115954,115956],{"class":326,"line":203},[324,115947,31545],{"class":916},[324,115949,114853],{"class":867},[324,115951,913],{"class":863},[324,115953,114858],{"class":867},[324,115955,31545],{"class":916},[324,115957,114863],{"class":867},[19,115959,115960,115961,115963],{},"这和前面章节一样，只是现在放到了类的 ",[269,115962,31551],{}," 里。",[19,115965,115966],{},"缓存 site ID：",[316,115968,115970],{"className":31100,"code":115969,"language":31102,"meta":50,"style":50},"self.tip_site_id = mujoco.mj_name2id(...)\nself.target_site_id = mujoco.mj_name2id(...)\n",[269,115971,115972,115986],{"__ignoreMap":50},[324,115973,115974,115976,115978,115980,115982,115984],{"class":326,"line":327},[324,115975,31545],{"class":916},[324,115977,114874],{"class":867},[324,115979,913],{"class":863},[324,115981,114879],{"class":867},[324,115983,90276],{"class":916},[324,115985,874],{"class":867},[324,115987,115988,115990,115992,115994,115996,115998],{"class":326,"line":203},[324,115989,31545],{"class":916},[324,115991,114895],{"class":867},[324,115993,913],{"class":863},[324,115995,114879],{"class":867},[324,115997,90276],{"class":916},[324,115999,874],{"class":867},[19,116001,116002],{},"不要每次 step 都重复查名字。初始化时查一次 ID，后面直接用 ID 读取数组更清晰。",[19,116004,116005],{},"reset：",[316,116007,116009],{"className":31100,"code":116008,"language":31102,"meta":50,"style":50},"def reset(self, *, seed: int | None = None, options: dict | None = None):\n",[269,116010,116011],{"__ignoreMap":50},[324,116012,116013,116015,116017,116019,116021,116023,116025,116027,116029,116031,116033,116035,116037,116039,116041,116043,116045],{"class":326,"line":327},[324,116014,32669],{"class":863},[324,116016,115243],{"class":734},[324,116018,115246],{"class":867},[324,116020,1319],{"class":863},[324,116022,115251],{"class":867},[324,116024,871],{"class":916},[324,116026,25833],{"class":863},[324,116028,39655],{"class":916},[324,116030,14293],{"class":863},[324,116032,39655],{"class":916},[324,116034,115264],{"class":867},[324,116036,115267],{"class":916},[324,116038,25833],{"class":863},[324,116040,39655],{"class":916},[324,116042,14293],{"class":863},[324,116044,39655],{"class":916},[324,116046,31508],{"class":867},[19,116048,116049,116051],{},[269,116050,70778],{}," 做四件事：",[192,116053,116054,116057,116060,116063],{},[195,116055,116056],{},"设置随机种子。",[195,116058,116059],{},"重置 MuJoCo data。",[195,116061,116062],{},"随机初始化关节角。",[195,116064,116065],{},"返回初始观测和 info。",[19,116067,116068],{},"step：",[316,116070,116072],{"className":31100,"code":116071,"language":31102,"meta":50,"style":50},"def step(self, action):\n",[269,116073,116074],{"__ignoreMap":50},[324,116075,116076,116078,116080],{"class":326,"line":327},[324,116077,32669],{"class":863},[324,116079,115408],{"class":734},[324,116081,115411],{"class":867},[19,116083,116084,116086],{},[269,116085,107855],{}," 做六件事：",[192,116088,116089,116092,116098,116101,116104,116107],{},[195,116090,116091],{},"检查并裁剪 action。",[195,116093,116094,116095,29107],{},"写入 ",[269,116096,116097],{},"self.data.ctrl",[195,116099,116100],{},"连续推进若干个 MuJoCo 物理步。",[195,116102,116103],{},"计算新观测。",[195,116105,116106],{},"计算奖励和结束条件。",[195,116108,116109],{},"返回 Gymnasium 标准五元组。",[35,116111,102429],{"id":102429},[316,116113,116115],{"className":31100,"code":116114,"language":31102,"meta":50,"style":50},"import gymnasium as gym\n",[269,116116,116117],{"__ignoreMap":50},[324,116118,116119,116121,116123,116125],{"class":326,"line":327},[324,116120,31114],{"class":863},[324,116122,114616],{"class":867},[324,116124,32105],{"class":863},[324,116126,114621],{"class":867},[19,116128,116129,116130,116132,116133,116136],{},"导入 Gymnasium，并起别名 ",[269,116131,114261],{},"。后面写 ",[269,116134,116135],{},"gym.Env"," 就表示 Gymnasium 的环境基类。",[316,116138,116140],{"className":31100,"code":116139,"language":31102,"meta":50,"style":50},"from gymnasium import spaces\n",[269,116141,116142],{"__ignoreMap":50},[324,116143,116144,116146,116148,116150],{"class":326,"line":327},[324,116145,31459],{"class":863},[324,116147,114616],{"class":867},[324,116149,31114],{"class":863},[324,116151,114648],{"class":867},[19,116153,116154,116155,116158],{},"导入空间定义工具。",[269,116156,116157],{},"spaces.Box"," 用来描述连续动作空间和连续观测空间。",[316,116160,116161],{"className":31100,"code":115900,"language":31102,"meta":50,"style":50},[269,116162,116163],{"__ignoreMap":50},[324,116164,116165,116167,116169,116171,116173,116175,116177],{"class":326,"line":327},[324,116166,15423],{"class":863},[324,116168,114778],{"class":734},[324,116170,868],{"class":867},[324,116172,114261],{"class":734},[324,116174,1422],{"class":867},[324,116176,114787],{"class":734},[324,116178,31508],{"class":867},[19,116180,116181,116182,116185,116186,116188,116189,300,116191,116193],{},"定义一个类，名字叫 ",[269,116183,116184],{},"ReacherEnv","。括号里的 ",[269,116187,116135],{}," 表示它继承 Gymnasium 环境基类。继承后，你需要实现 ",[269,116190,70778],{},[269,116192,107855],{}," 这两个核心方法。",[316,116195,116197],{"className":31100,"code":116196,"language":31102,"meta":50,"style":50},"metadata = {\"render_modes\": []}\n",[269,116198,116199],{"__ignoreMap":50},[324,116200,116201,116204,116206,116208,116210],{"class":326,"line":327},[324,116202,116203],{"class":867},"metadata ",[324,116205,913],{"class":863},[324,116207,5177],{"class":867},[324,116209,114801],{"class":738},[324,116211,114804],{"class":867},[19,116213,116214],{},"Gymnasium 环境可以声明支持哪些渲染模式。这里暂时不实现 render，所以写空列表。",[316,116216,116218],{"className":31100,"code":116217,"language":31102,"meta":50,"style":50},"def __init__(self) -> None:\n",[269,116219,116220],{"__ignoreMap":50},[324,116221,116222,116224,116226,116228,116230],{"class":326,"line":327},[324,116223,32669],{"class":863},[324,116225,31526],{"class":916},[324,116227,114817],{"class":867},[324,116229,96408],{"class":916},[324,116231,4468],{"class":867},[19,116233,116234,116236,116237,29107],{},[269,116235,31551],{}," 是类的初始化函数。创建环境时会自动调用，比如 ",[269,116238,116239],{},"env = ReacherEnv()",[316,116241,116243],{"className":31100,"code":116242,"language":31102,"meta":50,"style":50},"super().__init__()\n",[269,116244,116245],{"__ignoreMap":50},[324,116246,116247,116250,116252,116254],{"class":326,"line":327},[324,116248,116249],{"class":916},"super",[324,116251,17990],{"class":867},[324,116253,31551],{"class":916},[324,116255,2706],{"class":867},[19,116257,116258,116259,116261],{},"调用父类 ",[269,116260,116135],{}," 的初始化逻辑。写自定义 Gymnasium 环境时通常保留这行。",[316,116263,116264],{"className":31100,"code":115927,"language":31102,"meta":50,"style":50},[269,116265,116266,116280],{"__ignoreMap":50},[324,116267,116268,116270,116272,116274,116276,116278],{"class":326,"line":327},[324,116269,31545],{"class":916},[324,116271,114838],{"class":867},[324,116273,913],{"class":863},[324,116275,102133],{"class":867},[324,116277,102035],{"class":916},[324,116279,874],{"class":867},[324,116281,116282,116284,116286,116288,116290,116292],{"class":326,"line":203},[324,116283,31545],{"class":916},[324,116285,114853],{"class":867},[324,116287,913],{"class":863},[324,116289,114858],{"class":867},[324,116291,31545],{"class":916},[324,116293,114863],{"class":867},[19,116295,116296,116297,116299,116300,300,116303,116306],{},"把 MuJoCo 模型和状态保存到 ",[269,116298,31545],{}," 上。",[269,116301,116302],{},"self.model",[269,116304,116305],{},"self.data"," 表示这个环境对象自己的模型和状态。",[316,116308,116309],{"className":31100,"code":115969,"language":31102,"meta":50,"style":50},[269,116310,116311,116325],{"__ignoreMap":50},[324,116312,116313,116315,116317,116319,116321,116323],{"class":326,"line":327},[324,116314,31545],{"class":916},[324,116316,114874],{"class":867},[324,116318,913],{"class":863},[324,116320,114879],{"class":867},[324,116322,90276],{"class":916},[324,116324,874],{"class":867},[324,116326,116327,116329,116331,116333,116335,116337],{"class":326,"line":203},[324,116328,31545],{"class":916},[324,116330,114895],{"class":867},[324,116332,913],{"class":863},[324,116334,114879],{"class":867},[324,116336,90276],{"class":916},[324,116338,874],{"class":867},[19,116340,116341,116342,300,116345,116348],{},"提前查好 tip 和 target 的 site ID。这样 ",[269,116343,116344],{},"_get_obs",[269,116346,116347],{},"_get_reward"," 里就不用每次按名字查找。",[316,116350,116352],{"className":31100,"code":116351,"language":31102,"meta":50,"style":50},"self.frame_skip = 5\nself.max_steps = 200\nself.steps = 0\n",[269,116353,116354,116364,116374],{"__ignoreMap":50},[324,116355,116356,116358,116360,116362],{"class":326,"line":327},[324,116357,31545],{"class":916},[324,116359,114588],{"class":867},[324,116361,913],{"class":863},[324,116363,55149],{"class":916},[324,116365,116366,116368,116370,116372],{"class":326,"line":203},[324,116367,31545],{"class":916},[324,116369,114967],{"class":867},[324,116371,913],{"class":863},[324,116373,114972],{"class":916},[324,116375,116376,116378,116380,116382],{"class":326,"line":338},[324,116377,31545],{"class":916},[324,116379,114427],{"class":867},[324,116381,913],{"class":863},[324,116383,48055],{"class":916},[19,116385,116386,116389,116390,116393,116394,116397],{},[269,116387,116388],{},"frame_skip"," 表示一次环境 step 内部跑几个 MuJoCo 物理步。",[269,116391,116392],{},"max_steps"," 是一个 episode 最多运行多少步。",[269,116395,116396],{},"steps"," 记录当前 episode 已经走了多少步。",[316,116399,116400],{"className":31100,"code":114466,"language":31102,"meta":50,"style":50},[269,116401,116402],{"__ignoreMap":50},[324,116403,116404,116406,116408,116410,116412,116414,116416,116418,116420,116422,116424,116426,116428,116430,116432,116434,116436,116438,116440,116442],{"class":326,"line":327},[324,116405,31545],{"class":916},[324,116407,114475],{"class":867},[324,116409,913],{"class":863},[324,116411,114480],{"class":867},[324,116413,114483],{"class":5945},[324,116415,114486],{"class":863},[324,116417,103124],{"class":916},[324,116419,13164],{"class":867},[324,116421,114493],{"class":5945},[324,116423,913],{"class":863},[324,116425,103124],{"class":916},[324,116427,13164],{"class":867},[324,116429,96685],{"class":5945},[324,116431,913],{"class":863},[324,116433,868],{"class":867},[324,116435,944],{"class":916},[324,116437,114510],{"class":867},[324,116439,94222],{"class":5945},[324,116441,913],{"class":863},[324,116443,114517],{"class":867},[19,116445,116446,116447,116450,116451,300,116454,116457],{},"定义动作空间。",[269,116448,116449],{},"shape=(2,)"," 表示动作是两个数，因为有两个 motor。",[269,116452,116453],{},"low=-1.0",[269,116455,116456],{},"high=1.0"," 表示每个动作值都限制在 -1 到 1。",[316,116459,116460],{"className":31100,"code":114527,"language":31102,"meta":50,"style":50},[269,116461,116462],{"__ignoreMap":50},[324,116463,116464,116466,116468,116470,116472,116474,116476,116478,116480,116482,116484,116486,116488,116490,116492,116494,116496,116498],{"class":326,"line":327},[324,116465,31545],{"class":916},[324,116467,114536],{"class":867},[324,116469,913],{"class":863},[324,116471,114480],{"class":867},[324,116473,114483],{"class":5945},[324,116475,114486],{"class":863},[324,116477,114547],{"class":867},[324,116479,114493],{"class":5945},[324,116481,913],{"class":863},[324,116483,114547],{"class":867},[324,116485,96685],{"class":5945},[324,116487,913],{"class":863},[324,116489,868],{"class":867},[324,116491,1310],{"class":916},[324,116493,114510],{"class":867},[324,116495,94222],{"class":5945},[324,116497,913],{"class":863},[324,116499,114517],{"class":867},[19,116501,116502,116503,116506,116507,116510],{},"定义观测空间。",[269,116504,116505],{},"shape=(10,)"," 表示观测是 10 个数。",[269,116508,116509],{},"np.inf"," 表示无穷大，这里表示不限制观测数值范围。",[316,116512,116514],{"className":31100,"code":116513,"language":31102,"meta":50,"style":50},"def _get_obs(self) -> np.ndarray:\n",[269,116515,116516],{"__ignoreMap":50},[324,116517,116518,116520,116522],{"class":326,"line":327},[324,116519,32669],{"class":863},[324,116521,115077],{"class":734},[324,116523,115080],{"class":867},[19,116525,116526,116527,116529],{},"定义内部函数，用来生成观测。函数名前面的 ",[269,116528,1856],{}," 是习惯写法，表示这是类内部使用的辅助函数。",[316,116531,116533],{"className":31100,"code":116532,"language":31102,"meta":50,"style":50},"tip = self.data.site_xpos[self.tip_site_id].copy()\ntarget = self.data.site_xpos[self.target_site_id].copy()\n",[269,116534,116535,116549],{"__ignoreMap":50},[324,116536,116537,116539,116541,116543,116545,116547],{"class":326,"line":327},[324,116538,112289],{"class":867},[324,116540,913],{"class":863},[324,116542,39595],{"class":916},[324,116544,115091],{"class":867},[324,116546,31545],{"class":916},[324,116548,115096],{"class":867},[324,116550,116551,116553,116555,116557,116559,116561],{"class":326,"line":203},[324,116552,112299],{"class":867},[324,116554,913],{"class":863},[324,116556,39595],{"class":916},[324,116558,115091],{"class":867},[324,116560,31545],{"class":916},[324,116562,115111],{"class":867},[19,116564,116565],{},"从 MuJoCo data 中读取末端点和目标点坐标。",[316,116567,116569],{"className":31100,"code":116568,"language":31102,"meta":50,"style":50},"obs = np.concatenate([self.data.qpos.copy(), self.data.qvel.copy(), tip, target])\nreturn obs.astype(np.float32)\n",[269,116570,116571,116587],{"__ignoreMap":50},[324,116572,116573,116575,116577,116579,116581,116583,116585],{"class":326,"line":327},[324,116574,111575],{"class":867},[324,116576,913],{"class":863},[324,116578,115120],{"class":867},[324,116580,31545],{"class":916},[324,116582,115125],{"class":867},[324,116584,31545],{"class":916},[324,116586,115130],{"class":867},[324,116588,116589,116591],{"class":326,"line":203},[324,116590,17775],{"class":863},[324,116592,115137],{"class":867},[19,116594,116595,116596,116599,116600,116602],{},"拼接观测，并转换成 ",[269,116597,116598],{},"float32","。很多强化学习库默认使用 ",[269,116601,116598],{},"，所以这里主动转换。",[316,116604,116605],{"className":31100,"code":116008,"language":31102,"meta":50,"style":50},[269,116606,116607],{"__ignoreMap":50},[324,116608,116609,116611,116613,116615,116617,116619,116621,116623,116625,116627,116629,116631,116633,116635,116637,116639,116641],{"class":326,"line":327},[324,116610,32669],{"class":863},[324,116612,115243],{"class":734},[324,116614,115246],{"class":867},[324,116616,1319],{"class":863},[324,116618,115251],{"class":867},[324,116620,871],{"class":916},[324,116622,25833],{"class":863},[324,116624,39655],{"class":916},[324,116626,14293],{"class":863},[324,116628,39655],{"class":916},[324,116630,115264],{"class":867},[324,116632,115267],{"class":916},[324,116634,25833],{"class":863},[324,116636,39655],{"class":916},[324,116638,14293],{"class":863},[324,116640,39655],{"class":916},[324,116642,31508],{"class":867},[19,116644,116645,116646,116648,116649,116652],{},"定义 reset。",[269,116647,115287],{}," 用来控制随机数，保证实验可以复现。",[269,116650,116651],{},"options"," 用来接收额外配置，本章暂时不用。",[316,116654,116656],{"className":31100,"code":116655,"language":31102,"meta":50,"style":50},"super().reset(seed=seed)\n",[269,116657,116658],{"__ignoreMap":50},[324,116659,116660,116662,116664,116666,116668],{"class":326,"line":327},[324,116661,116249],{"class":916},[324,116663,115284],{"class":867},[324,116665,115287],{"class":5945},[324,116667,913],{"class":863},[324,116669,115292],{"class":867},[19,116671,116672,116673,116676],{},"把随机种子交给 Gymnasium 父类处理。之后可以使用 ",[269,116674,116675],{},"self.np_random"," 生成可复现的随机数。",[316,116678,116680],{"className":31100,"code":116679,"language":31102,"meta":50,"style":50},"mujoco.mj_resetData(self.model, self.data)\n",[269,116681,116682],{"__ignoreMap":50},[324,116683,116684,116687,116689,116691,116693],{"class":326,"line":327},[324,116685,116686],{"class":867},"mujoco.mj_resetData(",[324,116688,31545],{"class":916},[324,116690,115302],{"class":867},[324,116692,31545],{"class":916},[324,116694,115307],{"class":867},[19,116696,116697],{},"把 MuJoCo 状态重置到默认状态。",[316,116699,116701],{"className":31100,"code":116700,"language":31102,"meta":50,"style":50},"self.data.qpos[:] = self.np_random.uniform(low=-0.1, high=0.1, size=self.model.nq)\n",[269,116702,116703],{"__ignoreMap":50},[324,116704,116705,116707,116709,116711,116713,116715,116717,116719,116721,116723,116725,116727,116729,116731,116733,116735,116737],{"class":326,"line":327},[324,116706,31545],{"class":916},[324,116708,115318],{"class":867},[324,116710,913],{"class":863},[324,116712,39595],{"class":916},[324,116714,115325],{"class":867},[324,116716,114483],{"class":5945},[324,116718,114486],{"class":863},[324,116720,86932],{"class":916},[324,116722,13164],{"class":867},[324,116724,114493],{"class":5945},[324,116726,913],{"class":863},[324,116728,86932],{"class":916},[324,116730,13164],{"class":867},[324,116732,32218],{"class":5945},[324,116734,913],{"class":863},[324,116736,31545],{"class":916},[324,116738,115350],{"class":867},[19,116740,116062,116741,116744,116745,116748,116749,116751],{},[269,116742,116743],{},"[:]"," 表示修改整个数组。",[269,116746,116747],{},"uniform(low=-0.1, high=0.1, size=self.model.nq)"," 表示生成 ",[269,116750,102871],{}," 个随机数，每个数在 -0.1 到 0.1 之间。",[316,116753,116755],{"className":31100,"code":116754,"language":31102,"meta":50,"style":50},"self.data.qvel[:] = 0.0\n",[269,116756,116757],{"__ignoreMap":50},[324,116758,116759,116761,116763,116765],{"class":326,"line":327},[324,116760,31545],{"class":916},[324,116762,115357],{"class":867},[324,116764,913],{"class":863},[324,116766,105482],{"class":916},[19,116768,116769],{},"把所有速度清零。也就是每次 reset 时，机械臂从静止开始。",[316,116771,116773],{"className":31100,"code":116772,"language":31102,"meta":50,"style":50},"self.steps = 0\nreturn self._get_obs(), {}\n",[269,116774,116775,116785],{"__ignoreMap":50},[324,116776,116777,116779,116781,116783],{"class":326,"line":327},[324,116778,31545],{"class":916},[324,116780,114427],{"class":867},[324,116782,913],{"class":863},[324,116784,48055],{"class":916},[324,116786,116787,116789,116791],{"class":326,"line":203},[324,116788,17775],{"class":863},[324,116790,39595],{"class":916},[324,116792,115397],{"class":867},[19,116794,116795],{},"步数清零，并返回初始观测和空 info。Gymnasium 要求 reset 返回两个值。",[316,116797,116798],{"className":31100,"code":116071,"language":31102,"meta":50,"style":50},[269,116799,116800],{"__ignoreMap":50},[324,116801,116802,116804,116806],{"class":326,"line":327},[324,116803,32669],{"class":863},[324,116805,115408],{"class":734},[324,116807,115411],{"class":867},[19,116809,116810],{},"定义 step。外部算法传入动作，环境返回下一步结果。",[316,116812,116814],{"className":31100,"code":116813,"language":31102,"meta":50,"style":50},"action = np.asarray(action, dtype=np.float32)\n",[269,116815,116816],{"__ignoreMap":50},[324,116817,116818,116820,116822,116824,116826,116828],{"class":326,"line":327},[324,116819,108163],{"class":867},[324,116821,913],{"class":863},[324,116823,115420],{"class":867},[324,116825,94222],{"class":5945},[324,116827,913],{"class":863},[324,116829,114517],{"class":867},[19,116831,116832,116833,29107],{},"把传入的 action 转成 NumPy 数组，并指定类型为 ",[269,116834,116598],{},[316,116836,116838],{"className":31100,"code":116837,"language":31102,"meta":50,"style":50},"action = np.clip(action, self.action_space.low, self.action_space.high)\n",[269,116839,116840],{"__ignoreMap":50},[324,116841,116842,116844,116846,116848,116850,116852,116854],{"class":326,"line":327},[324,116843,108163],{"class":867},[324,116845,913],{"class":863},[324,116847,108168],{"class":867},[324,116849,31545],{"class":916},[324,116851,115439],{"class":867},[324,116853,31545],{"class":916},[324,116855,115444],{"class":867},[19,116857,116858],{},"把动作裁剪到动作空间允许范围内，避免传入过大控制值。",[316,116860,116862],{"className":31100,"code":116861,"language":31102,"meta":50,"style":50},"self.data.ctrl[:] = action\n",[269,116863,116864],{"__ignoreMap":50},[324,116865,116866,116868,116870,116872],{"class":326,"line":327},[324,116867,31545],{"class":916},[324,116869,115455],{"class":867},[324,116871,913],{"class":863},[324,116873,108191],{"class":867},[19,116875,116876],{},"把动作写入 MuJoCo 控制数组。因为这个环境有两个 actuator，所以 action 也必须是两个数。",[316,116878,116880],{"className":31100,"code":116879,"language":31102,"meta":50,"style":50},"for _ in range(self.frame_skip):\n    mujoco.mj_step(self.model, self.data)\n",[269,116881,116882,116898],{"__ignoreMap":50},[324,116883,116884,116886,116888,116890,116892,116894,116896],{"class":326,"line":327},[324,116885,3754],{"class":863},[324,116887,102222],{"class":867},[324,116889,26767],{"class":863},[324,116891,33165],{"class":916},[324,116893,868],{"class":867},[324,116895,31545],{"class":916},[324,116897,115476],{"class":867},[324,116899,116900,116903,116905,116907,116909],{"class":326,"line":203},[324,116901,116902],{"class":867},"    mujoco.mj_step(",[324,116904,31545],{"class":916},[324,116906,115302],{"class":867},[324,116908,31545],{"class":916},[324,116910,115307],{"class":867},[19,116912,116913,116914,116917,116918,116920,116921,29107],{},"一次环境 step 内部推进多个 MuJoCo 物理步。这里 ",[269,116915,116916],{},"frame_skip=5","，所以外部调用一次 ",[269,116919,114598],{},"，内部实际执行 5 次 ",[269,116922,101936],{},[316,116924,116926],{"className":31100,"code":116925,"language":31102,"meta":50,"style":50},"self.steps += 1\n",[269,116927,116928],{"__ignoreMap":50},[324,116929,116930,116932,116934,116936],{"class":326,"line":327},[324,116931,31545],{"class":916},[324,116933,114427],{"class":867},[324,116935,10206],{"class":863},[324,116937,56421],{"class":916},[19,116939,116940],{},"环境步数加 1。注意这里加的是环境 step，不是 MuJoCo 物理步。",[316,116942,116944],{"className":31100,"code":116943,"language":31102,"meta":50,"style":50},"obs = self._get_obs()\nreward = self._get_reward()\n",[269,116945,116946,116956],{"__ignoreMap":50},[324,116947,116948,116950,116952,116954],{"class":326,"line":327},[324,116949,111575],{"class":867},[324,116951,913],{"class":863},[324,116953,39595],{"class":916},[324,116955,115518],{"class":867},[324,116957,116958,116960,116962,116964],{"class":326,"line":203},[324,116959,111726],{"class":867},[324,116961,913],{"class":863},[324,116963,39595],{"class":916},[324,116965,115529],{"class":867},[19,116967,116968],{},"计算新的观测和奖励。",[316,116970,116972],{"className":31100,"code":116971,"language":31102,"meta":50,"style":50},"dist = float(np.linalg.norm(tip - target))\n",[269,116973,116974],{"__ignoreMap":50},[324,116975,116976,116978,116980,116982,116984,116986],{"class":326,"line":327},[324,116977,112317],{"class":867},[324,116979,913],{"class":863},[324,116981,110518],{"class":916},[324,116983,115572],{"class":867},[324,116985,1396],{"class":863},[324,116987,115577],{"class":867},[19,116989,116990],{},"计算末端到目标的距离，并转换成 Python float。",[316,116992,116993],{"className":31100,"code":114398,"language":31102,"meta":50,"style":50},[269,116994,116995,117007],{"__ignoreMap":50},[324,116996,116997,116999,117001,117003,117005],{"class":326,"line":327},[324,116998,114405],{"class":867},[324,117000,913],{"class":863},[324,117002,114410],{"class":867},[324,117004,1774],{"class":863},[324,117006,114415],{"class":916},[324,117008,117009,117011,117013,117015,117017,117019,117021],{"class":326,"line":203},[324,117010,114420],{"class":867},[324,117012,913],{"class":863},[324,117014,39595],{"class":916},[324,117016,114427],{"class":867},[324,117018,2441],{"class":863},[324,117020,39595],{"class":916},[324,117022,114434],{"class":867},[19,117024,117025],{},"如果距离小于 0.05，任务成功结束。若步数达到上限，episode 被截断。",[316,117027,117029],{"className":31100,"code":117028,"language":31102,"meta":50,"style":50},"info = {\"distance\": dist}\nreturn obs, reward, terminated, truncated, info\n",[269,117030,117031,117044],{"__ignoreMap":50},[324,117032,117033,117036,117038,117040,117042],{"class":326,"line":327},[324,117034,117035],{"class":867},"info ",[324,117037,913],{"class":863},[324,117039,5177],{"class":867},[324,117041,115623],{"class":738},[324,117043,115626],{"class":867},[324,117045,117046,117048],{"class":326,"line":203},[324,117047,17775],{"class":863},[324,117049,115633],{"class":867},[19,117051,117052,117055],{},[269,117053,117054],{},"info"," 用来放调试信息。最后返回 Gymnasium 标准五元组。",[316,117057,117059],{"className":31100,"code":117058,"language":31102,"meta":50,"style":50},"env = ReacherEnv()\nobs, info = env.reset(seed=0)\n",[269,117060,117061,117070],{"__ignoreMap":50},[324,117062,117063,117066,117068],{"class":326,"line":327},[324,117064,117065],{"class":867},"env ",[324,117067,913],{"class":863},[324,117069,115663],{"class":867},[324,117071,117072,117074,117076,117078,117080,117082,117084],{"class":326,"line":203},[324,117073,114121],{"class":867},[324,117075,913],{"class":863},[324,117077,115673],{"class":867},[324,117079,115287],{"class":5945},[324,117081,913],{"class":863},[324,117083,1056],{"class":916},[324,117085,874],{"class":867},[19,117087,117088,117089,117092],{},"创建环境并重置。",[269,117090,117091],{},"seed=0"," 表示使用固定随机种子，方便复现实验。",[316,117094,117096],{"className":31100,"code":117095,"language":31102,"meta":50,"style":50},"action = env.action_space.sample()\n",[269,117097,117098],{"__ignoreMap":50},[324,117099,117100,117102,117104],{"class":326,"line":327},[324,117101,108163],{"class":867},[324,117103,913],{"class":863},[324,117105,115742],{"class":867},[19,117107,117108],{},"从动作空间里随机采样一个动作。这里还没有训练策略，所以用随机动作测试环境是否能跑。",[14,117110,103037],{"id":103036},[19,117112,106205],{},[316,117114,117117],{"className":117115,"code":117116,"language":5916,"meta":50},[5914],"initial obs shape: (10,)\ninitial info: {}\nstep: 0 reward: ...\n...\ntotal_reward: ...\n",[269,117118,117116],{"__ignoreMap":50},[19,117120,117121],{},"这个环境已经具备强化学习环境的基本结构。",[19,117123,117124],{},"主函数里使用随机动作：",[316,117126,117127],{"className":31100,"code":117095,"language":31102,"meta":50,"style":50},[269,117128,117129],{"__ignoreMap":50},[324,117130,117131,117133,117135],{"class":326,"line":327},[324,117132,108163],{"class":867},[324,117134,913],{"class":863},[324,117136,115742],{"class":867},[19,117138,117139],{},"所以每次运行的 reward 可能不同。这里的目标不是训练成功，而是验证环境接口能正常工作。",[14,117141,103069],{"id":103068},[192,117143,117144,117147,117153,117162,117171,117180,117186],{},[195,117145,117146],{},"运行程序。",[195,117148,117149,117150,29107],{},"确认 ",[269,117151,117152],{},"obs.shape == (10,)",[195,117154,111902,117155,117158,117159,29107],{},[269,117156,117157],{},"env.action_space","，应类似 ",[269,117160,117161],{},"Box(-1.0, 1.0, (2,), float32)",[195,117163,106306,117164,117167,117168,29107],{},[269,117165,117166],{},"self.max_steps = 10","，确认环境会更快 ",[269,117169,117170],{},"truncated=True",[195,117172,103132,117173,103135,117176,117179],{},[269,117174,117175],{},"terminated = dist \u003C 0.05",[269,117177,117178],{},"dist \u003C 0.2","，观察是否更容易结束。",[195,117181,103132,117182,117185],{},[269,117183,117184],{},"self.frame_skip = 1","，观察每次 step 的物理推进变少。",[195,117187,117188,117189,117191,117192,117195],{},"在 ",[269,117190,117054],{}," 里加入 ",[269,117193,117194],{},"\"is_success\": dist \u003C 0.05","，模拟常见机器人环境输出。",[14,117197,103174],{"id":103173},[35,117199,117201],{"id":117200},"gymnasium-返回值数量不匹配","Gymnasium 返回值数量不匹配",[19,117203,117204,117205,117207],{},"Gymnasium 的 ",[269,117206,107855],{}," 返回 5 个值:",[316,117209,117211],{"className":31100,"code":117210,"language":31102,"meta":50,"style":50},"obs, reward, terminated, truncated, info\n",[269,117212,117213],{"__ignoreMap":50},[324,117214,117215],{"class":326,"line":327},[324,117216,117210],{"class":867},[19,117218,117219],{},"不是旧 Gym 的 4 个值。",[35,117221,117223,117226],{"id":117222},"datactrl-action-维度错误",[269,117224,117225],{},"data.ctrl[:] = action"," 维度错误",[19,117228,103244],{},[316,117230,117232],{"className":31100,"code":117231,"language":31102,"meta":50,"style":50},"print(self.model.nu)\nprint(action.shape)\n",[269,117233,117234,117245],{"__ignoreMap":50},[324,117235,117236,117238,117240,117242],{"class":326,"line":327},[324,117237,31137],{"class":916},[324,117239,868],{"class":867},[324,117241,31545],{"class":916},[324,117243,117244],{"class":867},".model.nu)\n",[324,117246,117247,117249],{"class":326,"line":203},[324,117248,31137],{"class":916},[324,117250,117251],{"class":867},"(action.shape)\n",[19,117253,117254],{},"两者必须匹配。",[35,117256,117258],{"id":117257},"reset-后-site-坐标不更新","reset 后 site 坐标不更新",[19,117260,103183],{},[316,117262,117264],{"className":31100,"code":117263,"language":31102,"meta":50,"style":50},"mujoco.mj_forward(self.model, self.data)\n",[269,117265,117266],{"__ignoreMap":50},[324,117267,117268,117271,117273,117275,117277],{"class":326,"line":327},[324,117269,117270],{"class":867},"mujoco.mj_forward(",[324,117272,31545],{"class":916},[324,117274,115302],{"class":867},[324,117276,31545],{"class":916},[324,117278,115307],{"class":867},[35,117280,117282,117284],{"id":117281},"observation_space-维度和-obs-不一致",[269,117283,114321],{}," 维度和 obs 不一致",[19,117286,103296],{},[316,117288,117290],{"className":31100,"code":117289,"language":31102,"meta":50,"style":50},"obs = self._get_obs()\nprint(obs.shape)\nprint(self.observation_space.shape)\n",[269,117291,117292,117302,117309],{"__ignoreMap":50},[324,117293,117294,117296,117298,117300],{"class":326,"line":327},[324,117295,111575],{"class":867},[324,117297,913],{"class":863},[324,117299,39595],{"class":916},[324,117301,115518],{"class":867},[324,117303,117304,117306],{"class":326,"line":203},[324,117305,31137],{"class":916},[324,117307,117308],{"class":867},"(obs.shape)\n",[324,117310,117311,117313,117315,117317],{"class":326,"line":338},[324,117312,31137],{"class":916},[324,117314,868],{"class":867},[324,117316,31545],{"class":916},[324,117318,117319],{"class":867},".observation_space.shape)\n",[19,117321,117322],{},"两者必须一致。本章观测是：",[316,117324,117327],{"className":117325,"code":117326,"language":5916,"meta":50},[5914],"qpos 2 + qvel 2 + tip 3 + target 3 = 10\n",[269,117328,117326],{"__ignoreMap":50},[35,117330,117332],{"id":117331},"action-超过范围","action 超过范围",[19,117334,117335],{},"外部算法可能传入超过 action space 的值，所以 step 里要写：",[316,117337,117338],{"className":31100,"code":116837,"language":31102,"meta":50,"style":50},[269,117339,117340],{"__ignoreMap":50},[324,117341,117342,117344,117346,117348,117350,117352,117354],{"class":326,"line":327},[324,117343,108163],{"class":867},[324,117345,913],{"class":863},[324,117347,108168],{"class":867},[324,117349,31545],{"class":916},[324,117351,115439],{"class":867},[324,117353,31545],{"class":916},[324,117355,115444],{"class":867},[19,117357,117358,117359,29107],{},"这能避免无效动作直接写入 ",[269,117360,101797],{},[35,117362,117364],{"id":117363},"忘记返回-info","忘记返回 info",[19,117366,117204,117367,300,117369,117371],{},[269,117368,70778],{},[269,117370,107855],{}," 都会返回 info：",[316,117373,117374],{"className":31100,"code":114114,"language":31102,"meta":50,"style":50},[269,117375,117376,117384],{"__ignoreMap":50},[324,117377,117378,117380,117382],{"class":326,"line":327},[324,117379,114121],{"class":867},[324,117381,913],{"class":863},[324,117383,114126],{"class":867},[324,117385,117386,117388,117390],{"class":326,"line":203},[324,117387,114131],{"class":867},[324,117389,913],{"class":863},[324,117391,114136],{"class":867},[19,117393,117394,117395,29107],{},"即使暂时没有额外信息，也返回 ",[269,117396,33181],{},[14,117398,117400],{"id":117399},"_8下一步怎么接强化学习","8.下一步怎么接强化学习",[19,117402,117403],{},"这个环境已经可以被很多强化学习库包装，但正式训练前还应补充：",[192,117405,117406,117409,117412,117415,117418,117421],{},[195,117407,117408],{},"更稳定的 reward。",[195,117410,117411],{},"合理的 episode 长度。",[195,117413,117414],{},"可重复的随机目标采样。",[195,117416,117417],{},"render 接口。",[195,117419,117420],{},"环境注册代码。",[195,117422,117423],{},"单元测试，检查 reset\u002Fstep 返回值维度和 dtype。",[19,117425,117426],{},"如果只是自己写训练循环，最小形式是：",[316,117428,117430],{"className":31100,"code":117429,"language":31102,"meta":50,"style":50},"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",[269,117431,117432,117440,117456,117460,117476,117485,117494,117504],{"__ignoreMap":50},[324,117433,117434,117436,117438],{"class":326,"line":327},[324,117435,117065],{"class":867},[324,117437,913],{"class":863},[324,117439,115663],{"class":867},[324,117441,117442,117444,117446,117448,117450,117452,117454],{"class":326,"line":203},[324,117443,114121],{"class":867},[324,117445,913],{"class":863},[324,117447,115673],{"class":867},[324,117449,115287],{"class":5945},[324,117451,913],{"class":863},[324,117453,1056],{"class":916},[324,117455,874],{"class":867},[324,117457,117458],{"class":326,"line":338},[324,117459,488],{"emptyLinePlaceholder":487},[324,117461,117462,117464,117466,117468,117470,117472,117474],{"class":326,"line":344},[324,117463,3754],{"class":863},[324,117465,102222],{"class":867},[324,117467,26767],{"class":863},[324,117469,33165],{"class":916},[324,117471,868],{"class":867},[324,117473,7139],{"class":916},[324,117475,31508],{"class":867},[324,117477,117478,117481,117483],{"class":326,"line":484},[324,117479,117480],{"class":867},"    action ",[324,117482,913],{"class":863},[324,117484,115742],{"class":867},[324,117486,117487,117490,117492],{"class":326,"line":491},[324,117488,117489],{"class":867},"    obs, reward, terminated, truncated, info ",[324,117491,913],{"class":863},[324,117493,114136],{"class":867},[324,117495,117496,117498,117500,117502],{"class":326,"line":496},[324,117497,3830],{"class":863},[324,117499,115808],{"class":867},[324,117501,115811],{"class":863},[324,117503,115814],{"class":867},[324,117505,117506,117509,117511],{"class":326,"line":502},[324,117507,117508],{"class":867},"        obs, info ",[324,117510,913],{"class":863},[324,117512,114126],{"class":867},[14,117514,117516],{"id":117515},"_9本章小结","9.本章小结",[19,117518,117519],{},"Gymnasium 封装并没有改变 MuJoCo 的本质。它只是把前面章节的流程整理成标准接口：",[316,117521,117524],{"className":117522,"code":117523,"language":5916,"meta":50},[5914],"reset:\n  mj_resetData → 设置初始状态 → mj_forward → obs\n\nstep:\n  action → data.ctrl → mj_step → obs\u002Freward\u002Fterminated\u002Ftruncated\u002Finfo\n",[269,117525,117523],{"__ignoreMap":50},[19,117527,117528],{},"掌握这个接口后，你就可以把 MuJoCo 模型接入强化学习、模仿学习和数据采集流程。",[775,117530,117531],{},"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":50,"searchDepth":203,"depth":203,"links":117533},[117534,117535,117536,117543,117547,117548,117549,117559,117560],{"id":101368,"depth":203,"text":101369},{"id":101491,"depth":203,"text":101492},{"id":101765,"depth":203,"text":101766,"children":117537},[117538,117540,117542],{"id":114345,"depth":338,"text":117539},"terminated 和 truncated 的区别",{"id":114448,"depth":338,"text":117541},"observation_space 和 action_space",{"id":114575,"depth":338,"text":114576},{"id":101973,"depth":203,"text":101974,"children":117544},[117545,117546],{"id":102293,"depth":338,"text":102293},{"id":102429,"depth":338,"text":102429},{"id":103036,"depth":203,"text":103037},{"id":103068,"depth":203,"text":103069},{"id":103173,"depth":203,"text":103174,"children":117550},[117551,117552,117554,117555,117557,117558],{"id":117200,"depth":338,"text":117201},{"id":117222,"depth":338,"text":117553},"data.ctrl[:] = action 维度错误",{"id":117257,"depth":338,"text":117258},{"id":117281,"depth":338,"text":117556},"observation_space 维度和 obs 不一致",{"id":117331,"depth":338,"text":117332},{"id":117363,"depth":338,"text":117364},{"id":117399,"depth":203,"text":117400},{"id":117515,"depth":203,"text":117516},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch8-gymnasium",{"title":114098,"description":50},"wiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础","KSF1Xw_aHmvJI12WCxfcd5RyipozYaMsgXOORoNp9lo",{"id":117567,"title":117568,"body":117569,"description":117992,"extension":792,"meta":117993,"navigation":487,"path":117994,"seo":117995,"stem":117996,"__hash__":117997},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Findex.md","mujoco学习",{"type":7,"value":117570,"toc":117982},[117571,117575,117578,117581,117601,117607,117613,117623,117626,117629,117649,117652,117656,117659,117665,117668,117682,117685,117688,117762,117765,117771,117774,117797,117800,117850,117853,117859,117862,117865,117868,117887,117890,117896,117899,117902,117905,117925,117928,117931,117934,117979],[10,117572,117574],{"id":117573},"mujoco-学习","MuJoCo 学习",[19,117576,117577],{},"初版",[19,117579,117580],{},"这套笔记面向从零开始学习 MuJoCo 的工程复现路线。目标不是只让你复制代码跑通，而是让你看懂：",[192,117582,117583,117586,117589,117598],{},[195,117584,117585],{},"MuJoCo 模型文件在描述什么。",[195,117587,117588],{},"Python 代码怎样读取和推进仿真。",[195,117590,117591,1077,117593,1077,117595,117597],{},[269,117592,104751],{},[269,117594,105081],{},[269,117596,105084],{}," 这些数组为什么重要。",[195,117599,117600],{},"如何从一个会掉落的小方块，逐步搭出 Cartpole、Reacher 和 Gymnasium 风格环境。",[19,117602,117603,117604,117606],{},"默认环境为 Fedora 44、Python >= 3.10、",[269,117605,101748],{}," 官方 Python bindings。",[19,117608,117609,117610,117612],{},"注意：本文禁止使用 ",[269,117611,101734],{},"。所有示例均使用：",[316,117614,117615],{"className":31100,"code":102299,"language":31102,"meta":50,"style":50},[269,117616,117617],{"__ignoreMap":50},[324,117618,117619,117621],{"class":326,"line":327},[324,117620,31114],{"class":863},[324,117622,102022],{"class":867},[14,117624,117625],{"id":117625},"适合谁阅读",[19,117627,117628],{},"如果你符合下面任意一种情况，可以从第 1 章开始按顺序学：",[192,117630,117631,117634,117637,117640],{},[195,117632,117633],{},"没学过 MuJoCo，只会一点 Python。",[195,117635,117636],{},"看过强化学习环境，但不知道 MuJoCo 环境是怎么写出来的。",[195,117638,117639],{},"想复现机器人控制、模仿学习、VLA 数据采集，但对仿真模型没有概念。",[195,117641,117642,117643,117645,117646,117648],{},"以前接触过 ",[269,117644,101734],{},"，现在想迁移到官方 ",[269,117647,101742],{}," Python bindings。",[19,117650,117651],{},"阅读前只需要知道 Python 的变量、函数、列表或数组大概是什么。NumPy 不熟也没关系，教程会尽量解释每个数组的含义。",[14,117653,117655],{"id":117654},"mujoco-到底是什么","MuJoCo 到底是什么",[19,117657,117658],{},"MuJoCo 是一个物理仿真引擎。你可以把它理解成一个“机器人和物体的虚拟实验室”：",[316,117660,117663],{"className":117661,"code":117662,"language":5916,"meta":50},[5914],"你写 XML 描述世界里有什么\n          ↓\nMuJoCo 编译成物理模型\n          ↓\nPython 程序给关节或电机输入控制量\n          ↓\nMuJoCo 按物理规律更新位置、速度、碰撞、力\n          ↓\n你读取状态、计算奖励、保存数据或训练策略\n",[269,117664,117662],{"__ignoreMap":50},[19,117666,117667],{},"在机器人、强化学习和具身智能里，MuJoCo 常用于：",[192,117669,117670,117673,117676,117679],{},[195,117671,117672],{},"搭建机械臂、小车、摆杆、多足机器人等模型。",[195,117674,117675],{},"快速测试控制算法，不必一开始就上真实机器人。",[195,117677,117678],{},"生成强化学习环境。",[195,117680,117681],{},"采集状态、动作、图像、奖励等训练数据。",[14,117683,117684],{"id":117684},"学习前的心智模型",[19,117686,117687],{},"新手最容易卡在“XML 和 Python 代码到底谁负责什么”。可以先记住这个分工：",[1003,117689,117690,117702],{},[1006,117691,117692],{},[1009,117693,117694,117697,117700],{},[1012,117695,117696],{"align":24463},"部分",[1012,117698,117699],{"align":24463},"负责什么",[1012,117701,21916],{"align":24463},[1049,117703,117704,117715,117727,117739,117751],{},[1009,117705,117706,117709,117712],{},[1054,117707,117708],{"align":24463},"MJCF XML",[1054,117710,117711],{"align":24463},"定义世界和机器人结构",[1054,117713,117714],{"align":24463},"地面、盒子、关节、电机、摄像头",[1009,117716,117717,117721,117724],{},[1054,117718,117719],{"align":24463},[269,117720,101431],{},[1054,117722,117723],{"align":24463},"编译后的静态模型",[1054,117725,117726],{"align":24463},"有几个关节、有几个电机、时间步长是多少",[1009,117728,117729,117733,117736],{},[1054,117730,117731],{"align":24463},[269,117732,101441],{},[1054,117734,117735],{"align":24463},"运行中的动态状态",[1054,117737,117738],{"align":24463},"当前时间、位置、速度、电机输入",[1009,117740,117741,117745,117748],{},[1054,117742,117743],{"align":24463},[269,117744,101936],{},[1054,117746,117747],{"align":24463},"推进一步物理仿真",[1054,117749,117750],{"align":24463},"根据重力、力、碰撞更新状态",[1009,117752,117753,117756,117759],{},[1054,117754,117755],{"align":24463},"Viewer \u002F Renderer",[1054,117757,117758],{"align":24463},"把仿真显示出来",[1054,117760,117761],{"align":24463},"打开窗口或保存图片",[19,117763,117764],{},"一句话总结：",[316,117766,117769],{"className":117767,"code":117768,"language":5916,"meta":50},[5914],"XML 决定“有什么”，MjModel 记住“结构”，MjData 记录“现在怎样”，mj_step 让时间往前走。\n",[269,117770,117768],{"__ignoreMap":50},[19,117772,117773],{},"参考来源：",[1871,117775,117776,117783,117790],{},[195,117777,117778,117779],{},"MuJoCo Python 官方文档：",[25,117780,117781],{"href":117781,"rel":117782},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Fpython.html",[29],[195,117784,117785,117786],{},"MuJoCo XML Reference：",[25,117787,117788],{"href":117788,"rel":117789},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002FXMLreference.html",[29],[195,117791,117792,117793],{},"MuJoCo Overview：",[25,117794,117795],{"href":117795,"rel":117796},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Foverview.html",[29],[14,117798,117799],{"id":117799},"章节目录",[192,117801,117802,117808,117814,117820,117826,117832,117838,117844],{},[195,117803,117804],{},[25,117805,117807],{"href":117806},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch1-huan-jing-an-zhuang-yu-di-yi-ge-mujoco-cheng-xu","环境安装与第一个 MuJoCo 程序",[195,117809,117810],{},[25,117811,117813],{"href":117812},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch2-xml-yu-mjcf-wu-li-jian-mo-ji-chu","XML 与 MJCF 物理建模基础",[195,117815,117816],{},[25,117817,117819],{"href":117818},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch3-python-kong-zhi-jie-kou","Python 控制接口：读取状态与推进仿真",[195,117821,117822],{},[25,117823,117825],{"href":117824},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch4-guan-jie-actuator-yu-li-kong-zhi","关节、Actuator 与力控制",[195,117827,117828],{},[25,117829,117831],{"href":117830},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch5-viewer-yu-renderer","Viewer 可视化与 Renderer 离屏渲染",[195,117833,117834],{},[25,117835,117837],{"href":117836},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch6-cartpole-kong-zhi-ren-wu","控制任务：Cartpole",[195,117839,117840],{},[25,117841,117843],{"href":117842},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch7-reacher-kong-zhi-ren-wu","控制任务：Reacher 机械臂到达目标",[195,117845,117846],{},[25,117847,117849],{"href":117848},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch8-gymnasium-jie-kou-ji-chu","Gymnasium 风格强化学习接口基础",[14,117851,117852],{"id":117852},"推荐学习路线",[316,117854,117857],{"className":117855,"code":117856,"language":5916,"meta":50},[5914],"环境安装\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",[269,117858,117856],{"__ignoreMap":50},[19,117860,117861],{},"不要跳过第 1 到第 4 章。后面的 Cartpole、Reacher 和 Gymnasium 环境，本质上都是在反复使用前面这几个核心概念。",[14,117863,117864],{"id":117864},"建议的目录结构",[19,117866,117867],{},"为了避免代码散落，建议你在任意工作目录下新建一个学习文件夹：",[316,117869,117871],{"className":24549,"code":117870,"language":24551,"meta":50,"style":50},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\n",[269,117872,117873,117881],{"__ignoreMap":50},[324,117874,117875,117877,117879],{"class":326,"line":327},[324,117876,101987],{"class":734},[324,117878,29938],{"class":916},[324,117880,101992],{"class":738},[324,117882,117883,117885],{"class":326,"line":203},[324,117884,101997],{"class":916},[324,117886,101992],{"class":738},[19,117888,117889],{},"每一章的代码都单独保存：",[316,117891,117894],{"className":117892,"code":117893,"language":5916,"meta":50},[5914],"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",[269,117895,117893],{"__ignoreMap":50},[19,117897,117898],{},"这样出错时，你可以确认到底是哪一章的代码有问题。",[14,117900,117901],{"id":117901},"学习方法",[19,117903,117904],{},"每章建议按这个顺序操作：",[192,117906,117907,117910,117913,117916,117919,117922],{},[195,117908,117909],{},"先读“核心概念解释”，不用追求一次看懂所有细节。",[195,117911,117912],{},"复制最小可运行代码，保存成指定文件。",[195,117914,117915],{},"运行代码，确认没有报错。",[195,117917,117918],{},"对照“运行结果说明”理解输出。",[195,117920,117921],{},"做“验证步骤”，主动改一两个参数。",[195,117923,117924],{},"遇到报错先看“常见错误与解决方案”。",[19,117926,117927],{},"不要只看不跑。MuJoCo 的学习重点是“改参数以后观察物理结果”，比如把重力变小、把电机力变大、把初始高度变高。只要你能预测并解释这些变化，就说明你真正理解了。",[14,117929,117930],{"id":117930},"全局排错顺序",[19,117932,117933],{},"遇到问题时，按下面顺序查：",[192,117935,117936,117942,117948,117953,117956,117959,117966,117976],{},[195,117937,117938,117939],{},"Python 环境是否激活：",[269,117940,117941],{},"which python",[195,117943,117944,117945],{},"MuJoCo 是否能导入：",[269,117946,117947],{},"python -c \"import mujoco; print(mujoco.__version__)\"",[195,117949,117950,117951],{},"是否误装了 ",[269,117952,101734],{},[195,117954,117955],{},"XML 标签是否闭合、属性是否拼写正确",[195,117957,117958],{},"actuator 引用的 joint 名字是否存在",[195,117960,117961,117963,117964],{},[269,117962,101797],{}," 的长度是否等于 ",[269,117965,102879],{},[195,117967,106306,117968,83261,117970,117972,117973],{},[269,117969,104751],{},[269,117971,105081],{}," 后是否调用了 ",[269,117974,117975],{},"mujoco.mj_forward",[195,117977,117978],{},"图形显示问题是否和 OpenGL、GLFW、远程服务器有关",[775,117980,117981],{},"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":50,"searchDepth":203,"depth":203,"links":117983},[117984,117985,117986,117987,117988,117989,117990,117991],{"id":117625,"depth":203,"text":117625},{"id":117654,"depth":203,"text":117655},{"id":117684,"depth":203,"text":117684},{"id":117799,"depth":203,"text":117799},{"id":117852,"depth":203,"text":117852},{"id":117864,"depth":203,"text":117864},{"id":117901,"depth":203,"text":117901},{"id":117930,"depth":203,"text":117930},"仿真搭建。",{"category":24105},"\u002Fwiki\u002F2025-05-17-mujoco",{"title":117568,"description":117992},"wiki\u002F2025-05-17-mujoco学习\u002Findex","Y9Rv9JgXjVCbeZHS_U4izJnnZcIId184s39EpFx-Co4",{"id":117999,"title":118000,"body":118001,"description":791,"extension":792,"meta":118452,"navigation":487,"path":118453,"seo":118454,"stem":118455,"__hash__":118456},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）.md","1. 最常用的基本操作（更新）",{"type":7,"value":118002,"toc":118450},[118003,118006,118009,118015,118447],[10,118004,118000],{"id":118005},"_1-最常用的基本操作更新",[19,118007,118008],{},"装linux系统教程：",[19,118010,118011],{},[25,118012,118013],{"href":118013,"rel":118014},"https:\u002F\u002Fme.tungchiahui.cn\u002Fblog\u002Flinux-tutorial\u002F",[29],[316,118016,118018],{"className":725,"code":118017,"language":727,"meta":50,"style":50},"#更新相关的知识\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",[269,118019,118020,118025,118030,118038,118043,118051,118056,118076,118081,118092,118097,118106,118111,118139,118144,118163,118168,118187,118191,118196,118212,118216,118221,118251,118255,118260,118276,118280,118285,118300,118304,118309,118325,118329,118334,118346,118358,118362,118367,118384,118388,118393,118411,118415,118420,118429,118433,118438],{"__ignoreMap":50},[324,118021,118022],{"class":326,"line":327},[324,118023,118024],{"class":772},"#更新相关的知识\n",[324,118026,118027],{"class":326,"line":203},[324,118028,118029],{"class":772},"# 更新软件包列表（从服务器获取最新软件信息）\n",[324,118031,118032,118034,118036],{"class":326,"line":338},[324,118033,735],{"class":734},[324,118035,739],{"class":738},[324,118037,742],{"class":738},[324,118039,118040],{"class":326,"line":344},[324,118041,118042],{"class":772},"# 升级所有可更新的软件包（不删除旧包）\n",[324,118044,118045,118047,118049],{"class":326,"line":484},[324,118046,735],{"class":734},[324,118048,739],{"class":738},[324,118050,751],{"class":738},[324,118052,118053],{"class":326,"line":491},[324,118054,118055],{"class":772},"#更新和升级软件包\n",[324,118057,118058,118060,118062,118065,118067,118069,118071,118074],{"class":326,"line":496},[324,118059,735],{"class":734},[324,118061,739],{"class":738},[324,118063,118064],{"class":738}," update",[324,118066,26914],{"class":867},[324,118068,735],{"class":734},[324,118070,739],{"class":738},[324,118072,118073],{"class":738}," upgrade",[324,118075,101703],{"class":916},[324,118077,118078],{"class":326,"line":502},[324,118079,118080],{"class":772},"#列出可更新的软件包及版本信息\n",[324,118082,118083,118086,118089],{"class":326,"line":508},[324,118084,118085],{"class":734},"apt",[324,118087,118088],{"class":738}," list",[324,118090,118091],{"class":916}," --upgradable\n",[324,118093,118094],{"class":326,"line":514},[324,118095,118096],{"class":772},"#彻底升级（处理依赖关系，可能删除旧包）\n",[324,118098,118099,118101,118103],{"class":326,"line":2343},[324,118100,735],{"class":734},[324,118102,739],{"class":738},[324,118104,118105],{"class":738}," full-upgrade\n",[324,118107,118108],{"class":326,"line":2348},[324,118109,118110],{"class":772},"#设置指定版本\n",[324,118112,118113,118115,118117,118119,118121,118124,118126,118128,118130,118132,118135,118137],{"class":326,"line":2354},[324,118114,735],{"class":734},[324,118116,739],{"class":738},[324,118118,760],{"class":738},[324,118120,29624],{"class":863},[324,118122,118123],{"class":738},"package_nam",[324,118125,941],{"class":867},[324,118127,1824],{"class":863},[324,118129,913],{"class":738},[324,118131,1774],{"class":863},[324,118133,118134],{"class":738},"version_numbe",[324,118136,1534],{"class":867},[324,118138,52029],{"class":863},[324,118140,118141],{"class":326,"line":2359},[324,118142,118143],{"class":772},"#只安装软件包不升级\n",[324,118145,118146,118148,118150,118152,118154,118156,118158,118160],{"class":326,"line":2373},[324,118147,735],{"class":734},[324,118149,739],{"class":738},[324,118151,760],{"class":738},[324,118153,29624],{"class":863},[324,118155,118123],{"class":738},[324,118157,941],{"class":867},[324,118159,1824],{"class":863},[324,118161,118162],{"class":916}," --no-upgrade\n",[324,118164,118165],{"class":326,"line":2378},[324,118166,118167],{"class":772},"#只升级，不存在就不安装\n",[324,118169,118170,118172,118174,118176,118178,118180,118182,118184],{"class":326,"line":2384},[324,118171,735],{"class":734},[324,118173,739],{"class":738},[324,118175,760],{"class":738},[324,118177,29624],{"class":863},[324,118179,118123],{"class":738},[324,118181,941],{"class":867},[324,118183,1824],{"class":863},[324,118185,118186],{"class":916}," --only-upgrade\n",[324,118188,118189],{"class":326,"line":2405},[324,118190,488],{"emptyLinePlaceholder":487},[324,118192,118193],{"class":326,"line":2410},[324,118194,118195],{"class":772},"#安装指定的软件命令\n",[324,118197,118198,118200,118202,118204,118206,118208,118210],{"class":326,"line":2424},[324,118199,735],{"class":734},[324,118201,739],{"class":738},[324,118203,760],{"class":738},[324,118205,29624],{"class":863},[324,118207,118123],{"class":738},[324,118209,941],{"class":867},[324,118211,52029],{"class":863},[324,118213,118214],{"class":326,"line":2429},[324,118215,488],{"emptyLinePlaceholder":487},[324,118217,118218],{"class":326,"line":2458},[324,118219,118220],{"class":772},"#安装多个软件包\n",[324,118222,118223,118225,118227,118229,118231,118234,118237,118239,118241,118244,118246,118248],{"class":326,"line":2463},[324,118224,735],{"class":734},[324,118226,739],{"class":738},[324,118228,760],{"class":738},[324,118230,29624],{"class":863},[324,118232,118233],{"class":738},"package_",[324,118235,118236],{"class":863},"1>",[324,118238,29624],{"class":863},[324,118240,118233],{"class":738},[324,118242,118243],{"class":863},"2>",[324,118245,29624],{"class":863},[324,118247,118233],{"class":738},[324,118249,118250],{"class":863},"3>\n",[324,118252,118253],{"class":326,"line":2480},[324,118254,488],{"emptyLinePlaceholder":487},[324,118256,118257],{"class":326,"line":2485},[324,118258,118259],{"class":772},"#更新指定的软件命令\n",[324,118261,118262,118264,118266,118268,118270,118272,118274],{"class":326,"line":2490},[324,118263,735],{"class":734},[324,118265,739],{"class":738},[324,118267,118064],{"class":738},[324,118269,29624],{"class":863},[324,118271,118123],{"class":738},[324,118273,941],{"class":867},[324,118275,52029],{"class":863},[324,118277,118278],{"class":326,"line":2495},[324,118279,488],{"emptyLinePlaceholder":487},[324,118281,118282],{"class":326,"line":2509},[324,118283,118284],{"class":772},"#显示软件包具体信息,例如：版本号，安装大小，依赖关系等等\n",[324,118286,118287,118289,118292,118294,118296,118298],{"class":326,"line":2514},[324,118288,118085],{"class":734},[324,118290,118291],{"class":738}," show",[324,118293,29624],{"class":863},[324,118295,118123],{"class":738},[324,118297,941],{"class":867},[324,118299,52029],{"class":863},[324,118301,118302],{"class":326,"line":3306},[324,118303,488],{"emptyLinePlaceholder":487},[324,118305,118306],{"class":326,"line":3320},[324,118307,118308],{"class":772},"#删除软件包命令\n",[324,118310,118311,118313,118315,118317,118319,118321,118323],{"class":326,"line":3328},[324,118312,735],{"class":734},[324,118314,739],{"class":738},[324,118316,26803],{"class":738},[324,118318,29624],{"class":863},[324,118320,118123],{"class":738},[324,118322,941],{"class":867},[324,118324,52029],{"class":863},[324,118326,118327],{"class":326,"line":3333},[324,118328,488],{"emptyLinePlaceholder":487},[324,118330,118331],{"class":326,"line":3339},[324,118332,118333],{"class":772},"# 清理旧版本和缓存（释放磁盘空间）\n",[324,118335,118336,118338,118340,118343],{"class":326,"line":3345},[324,118337,735],{"class":734},[324,118339,739],{"class":738},[324,118341,118342],{"class":738}," autoremove",[324,118344,118345],{"class":772},"  # 删除不再需要的依赖和库文件\n",[324,118347,118348,118350,118352,118355],{"class":326,"line":3350},[324,118349,735],{"class":734},[324,118351,739],{"class":738},[324,118353,118354],{"class":738}," clean",[324,118356,118357],{"class":772},"       # 清理下载的缓存包\n",[324,118359,118360],{"class":326,"line":8677},[324,118361,488],{"emptyLinePlaceholder":487},[324,118363,118364],{"class":326,"line":8701},[324,118365,118366],{"class":772},"#移除软件包及配置文件\n",[324,118368,118369,118371,118373,118376,118378,118380,118382],{"class":326,"line":8706},[324,118370,735],{"class":734},[324,118372,739],{"class":738},[324,118374,118375],{"class":738}," purge",[324,118377,29624],{"class":863},[324,118379,118123],{"class":738},[324,118381,941],{"class":867},[324,118383,52029],{"class":863},[324,118385,118386],{"class":326,"line":8712},[324,118387,488],{"emptyLinePlaceholder":487},[324,118389,118390],{"class":326,"line":8739},[324,118391,118392],{"class":772},"#查找软件包命令\n",[324,118394,118395,118397,118399,118402,118404,118407,118409],{"class":326,"line":8744},[324,118396,735],{"class":734},[324,118398,739],{"class":738},[324,118400,118401],{"class":738}," search",[324,118403,29624],{"class":863},[324,118405,118406],{"class":738},"keywor",[324,118408,1178],{"class":867},[324,118410,52029],{"class":863},[324,118412,118413],{"class":326,"line":8750},[324,118414,488],{"emptyLinePlaceholder":487},[324,118416,118417],{"class":326,"line":8762},[324,118418,118419],{"class":772},"#列出所有已安装的包\n",[324,118421,118422,118424,118426],{"class":326,"line":8774},[324,118423,118085],{"class":734},[324,118425,118088],{"class":738},[324,118427,118428],{"class":916}," --installed\n",[324,118430,118431],{"class":326,"line":8786},[324,118432,488],{"emptyLinePlaceholder":487},[324,118434,118435],{"class":326,"line":10445},[324,118436,118437],{"class":772},"#列出所有已安装的包的版本信息\n",[324,118439,118440,118442,118444],{"class":326,"line":10470},[324,118441,118085],{"class":734},[324,118443,118088],{"class":738},[324,118445,118446],{"class":916}," --all-versions\n",[775,118448,118449],{},"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":50,"searchDepth":203,"depth":203,"links":118451},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch1",{"title":118000,"description":791},"wiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）","0qHSF2CcfIvVp9KNbVlIRaabWQyFrf-TGaOhET23zi8",{"id":4,"title":5,"body":118458,"description":791,"extension":792,"meta":118999,"navigation":487,"path":794,"seo":119000,"stem":796,"__hash__":797},{"type":7,"value":118459,"toc":118986},[118460,118462,118464,118466,118471,118473,118475,118480,118484,118488,118492,118496,118500,118502,118504,118506,118508,118510,118512,118516,118518,118522,118524,118528,118532,118534,118536,118538,118540,118542,118548,118550,118552,118556,118560,118562,118566,118568,118572,118574,118576,118580,118582,118614,118618,118620,118622,118626,118630,118634,118640,118644,118650,118654,118658,118678,118680,118682,118686,118688,118708,118710,118714,118716,118720,118724,118740,118744,118746,118758,118760,118804,118806,118810,118812,118814,118826,118828,118830,118834,118836,118838,118840,118842,118844,118846,118850,118854,118856,118861,118867,118869,118874,118878,118882,118884,118888,118892,118896,118900,118902,118904,118908,118910,118912,118914,118918,118920,118924,118926,118930,118934,118938,118940,118944,118946,118984],[10,118461,5],{"id":12},[14,118463,17],{"id":16},[19,118465,21],{},[19,118467,118468],{},[25,118469,27],{"href":27,"rel":118470},[29],[14,118472,33],{"id":32},[35,118474,38],{"id":37},[19,118476,118477],{},[25,118478,43],{"href":43,"rel":118479},[29],[19,118481,118482],{},[48,118483],{"alt":50,"src":51},[19,118485,118486],{},[48,118487],{"alt":50,"src":56},[19,118489,118490],{},[48,118491],{"alt":50,"src":61},[19,118493,118494],{},[48,118495],{"alt":50,"src":66},[19,118497,118498],{},[48,118499],{"alt":50,"src":71},[19,118501,74],{},[19,118503,77],{},[19,118505,80],{},[19,118507,83],{},[35,118509,87],{"id":86},[19,118511,90],{},[19,118513,118514],{},[48,118515],{"alt":50,"src":95},[19,118517,98],{},[19,118519,118520],{},[48,118521],{"alt":50,"src":103},[19,118523,106],{},[19,118525,118526],{},[48,118527],{"alt":50,"src":111},[19,118529,114,118530,119],{},[116,118531,118],{},[19,118533,122],{},[19,118535,125],{},[19,118537,128],{},[19,118539,131],{},[19,118541,134],{},[19,118543,137,118544,141,118546,145],{},[116,118545,140],{},[116,118547,144],{},[35,118549,149],{"id":148},[151,118551,154],{"id":153},[19,118553,118554],{},[48,118555],{"alt":50,"src":159},[19,118557,118558],{},[48,118559],{"alt":50,"src":164},[151,118561,168],{"id":167},[19,118563,118564],{},[48,118565],{"alt":50,"src":173},[151,118567,177],{"id":176},[19,118569,118570],{},[48,118571],{"alt":50,"src":182},[14,118573,186],{"id":185},[35,118575,190],{"id":189},[192,118577,118578],{},[195,118579,197],{},[19,118581,200],{},[192,118583,118584],{"start":203},[195,118585,206,118586],{},[192,118587,118588,118608],{},[195,118589,211,118590],{},[192,118591,118592,118594,118598,118600,118602,118604,118606],{},[195,118593,216],{},[195,118595,219,118596,223],{},[116,118597,222],{},[195,118599,226],{},[195,118601,229],{},[195,118603,232],{},[195,118605,235],{},[195,118607,238],{},[195,118609,241,118610],{},[192,118611,118612],{},[195,118613,246],{},[19,118615,118616],{},[48,118617],{"alt":50,"src":251},[35,118619,255],{"id":254},[151,118621,259],{"id":258},[192,118623,118624],{},[195,118625,264],{},[19,118627,267,118628,272],{},[269,118629,271],{},[19,118631,118632],{},[48,118633],{"alt":50,"src":277},[19,118635,280,118636,284,118638,288],{},[116,118637,283],{},[116,118639,287],{},[19,118641,118642],{},[48,118643],{"alt":50,"src":293},[19,118645,296,118646,300,118648,304],{},[116,118647,299],{},[116,118649,303],{},[19,118651,118652],{},[48,118653],{"alt":50,"src":309},[192,118655,118656],{"start":203},[195,118657,314],{},[316,118659,118660],{"className":318,"code":319,"language":320,"meta":50,"style":50},[269,118661,118662,118666,118670,118674],{"__ignoreMap":50},[324,118663,118664],{"class":326,"line":327},[324,118665,330],{},[324,118667,118668],{"class":326,"line":203},[324,118669,335],{},[324,118671,118672],{"class":326,"line":338},[324,118673,341],{},[324,118675,118676],{"class":326,"line":344},[324,118677,347],{},[151,118679,351],{"id":350},[19,118681,354],{},[19,118683,118684],{},[48,118685],{"alt":50,"src":359},[19,118687,362],{},[316,118689,118690],{"className":318,"code":365,"language":320,"meta":50,"style":50},[269,118691,118692,118696,118700,118704],{"__ignoreMap":50},[324,118693,118694],{"class":326,"line":327},[324,118695,372],{},[324,118697,118698],{"class":326,"line":203},[324,118699,377],{},[324,118701,118702],{"class":326,"line":338},[324,118703,382],{},[324,118705,118706],{"class":326,"line":344},[324,118707,387],{},[151,118709,391],{"id":390},[192,118711,118712],{},[195,118713,396],{},[19,118715,399],{},[19,118717,118718],{},[48,118719],{"alt":50,"src":404},[192,118721,118722],{"start":203},[195,118723,409],{},[316,118725,118726],{"className":318,"code":412,"language":320,"meta":50,"style":50},[269,118727,118728,118732,118736],{"__ignoreMap":50},[324,118729,118730],{"class":326,"line":327},[324,118731,419],{},[324,118733,118734],{"class":326,"line":203},[324,118735,424],{},[324,118737,118738],{"class":326,"line":338},[324,118739,429],{},[19,118741,118742],{},[48,118743],{"alt":50,"src":434},[19,118745,437],{},[316,118747,118748],{"className":318,"code":440,"language":320,"meta":50,"style":50},[269,118749,118750,118754],{"__ignoreMap":50},[324,118751,118752],{"class":326,"line":327},[324,118753,447],{},[324,118755,118756],{"class":326,"line":203},[324,118757,452],{},[151,118759,456],{"id":455},[316,118761,118762],{"className":318,"code":459,"language":320,"meta":50,"style":50},[269,118763,118764,118768,118772,118776,118780,118784,118788,118792,118796,118800],{"__ignoreMap":50},[324,118765,118766],{"class":326,"line":327},[324,118767,466],{},[324,118769,118770],{"class":326,"line":203},[324,118771,471],{},[324,118773,118774],{"class":326,"line":338},[324,118775,476],{},[324,118777,118778],{"class":326,"line":344},[324,118779,481],{},[324,118781,118782],{"class":326,"line":484},[324,118783,488],{"emptyLinePlaceholder":487},[324,118785,118786],{"class":326,"line":491},[324,118787,488],{"emptyLinePlaceholder":487},[324,118789,118790],{"class":326,"line":496},[324,118791,499],{},[324,118793,118794],{"class":326,"line":502},[324,118795,505],{},[324,118797,118798],{"class":326,"line":508},[324,118799,511],{},[324,118801,118802],{"class":326,"line":514},[324,118803,517],{},[19,118805,520],{},[19,118807,118808],{},[48,118809],{"alt":50,"src":525},[151,118811,529],{"id":528},[19,118813,532],{},[316,118815,118816],{"className":318,"code":535,"language":320,"meta":50,"style":50},[269,118817,118818,118822],{"__ignoreMap":50},[324,118819,118820],{"class":326,"line":327},[324,118821,542],{},[324,118823,118824],{"class":326,"line":203},[324,118825,547],{},[19,118827,550],{},[19,118829,553],{},[19,118831,118832],{},[48,118833],{"alt":50,"src":558},[35,118835,562],{"id":561},[151,118837,566],{"id":565},[19,118839,569],{},[151,118841,573],{"id":572},[575,118843,578],{"id":577},[19,118845,581],{},[19,118847,118848],{},[48,118849],{"alt":50,"src":586},[19,118851,118852],{},[48,118853],{"alt":50,"src":591},[575,118855,595],{"id":594},[19,118857,598,118858],{},[25,118859,601],{"href":601,"rel":118860},[29],[19,118862,118863,118865],{},[48,118864],{"alt":50,"src":607},[48,118866],{"alt":50,"src":610},[19,118868,613],{},[19,118870,616,118871],{},[25,118872,619],{"href":619,"rel":118873},[29],[19,118875,118876],{},[116,118877,625],{},[19,118879,118880],{},[48,118881],{"alt":50,"src":630},[19,118883,633],{},[19,118885,118886],{},[48,118887],{"alt":50,"src":638},[19,118889,641,118890,645],{},[269,118891,644],{},[19,118893,118894],{},[48,118895],{"alt":50,"src":650},[19,118897,653,118898,657],{},[116,118899,656],{},[575,118901,661],{"id":660},[19,118903,569],{},[19,118905,118906],{},[48,118907],{"alt":50,"src":668},[151,118909,672],{"id":671},[19,118911,675],{},[19,118913,678],{},[19,118915,118916],{},[48,118917],{"alt":50,"src":683},[19,118919,686],{},[19,118921,118922],{},[48,118923],{"alt":50,"src":691},[19,118925,694],{},[19,118927,118928],{},[48,118929],{"alt":50,"src":699},[19,118931,118932],{},[48,118933],{"alt":50,"src":704},[19,118935,118936],{},[48,118937],{"alt":50,"src":709},[151,118939,713],{"id":712},[19,118941,118942],{},[48,118943],{"alt":50,"src":718},[151,118945,722],{"id":721},[316,118947,118948],{"className":725,"code":726,"language":727,"meta":50,"style":50},[269,118949,118950,118958,118966,118976,118980],{"__ignoreMap":50},[324,118951,118952,118954,118956],{"class":326,"line":327},[324,118953,735],{"class":734},[324,118955,739],{"class":738},[324,118957,742],{"class":738},[324,118959,118960,118962,118964],{"class":326,"line":203},[324,118961,735],{"class":734},[324,118963,739],{"class":738},[324,118965,751],{"class":738},[324,118967,118968,118970,118972,118974],{"class":326,"line":338},[324,118969,735],{"class":734},[324,118971,739],{"class":738},[324,118973,760],{"class":738},[324,118975,763],{"class":738},[324,118977,118978],{"class":326,"line":344},[324,118979,488],{"emptyLinePlaceholder":487},[324,118981,118982],{"class":326,"line":484},[324,118983,773],{"class":772},[775,118985,777],{},{"title":50,"searchDepth":203,"depth":203,"links":118987},[118988,118989,118994],{"id":16,"depth":203,"text":17},{"id":32,"depth":203,"text":33,"children":118990},[118991,118992,118993],{"id":37,"depth":338,"text":38},{"id":86,"depth":338,"text":87},{"id":148,"depth":338,"text":149},{"id":185,"depth":203,"text":186,"children":118995},[118996,118997,118998],{"id":189,"depth":338,"text":190},{"id":254,"depth":338,"text":255},{"id":561,"depth":338,"text":562},{},{"title":5,"description":791},{"id":119002,"title":119003,"body":119004,"description":791,"extension":792,"meta":121940,"navigation":487,"path":121941,"seo":121942,"stem":121943,"__hash__":121944},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置.md","3. 安装必备配置",{"type":7,"value":119005,"toc":121912},[119006,119009,119013,119019,119023,119029,119033,119221,119224,119229,119233,119237,119240,119243,119249,119254,119257,119260,119265,119298,119303,119307,119384,119387,119392,119396,119399,119438,119441,119450,119468,119473,119480,119597,119602,119605,119632,119637,119641,119650,119700,119707,119711,119714,119728,119735,119769,119774,119778,119801,119804,119809,119813,119816,119819,119822,119864,119868,119871,119874,119915,119919,119923,119926,119931,119936,119939,119962,119965,119973,119978,119981,119986,119991,119994,119999,120003,120008,120031,120036,120098,120106,120111,120116,120119,120124,120127,120132,120137,120155,120160,120166,120171,120185,120189,120192,120195,120198,120241,120244,120249,120350,120353,120358,120362,120366,120403,120407,120411,120415,120461,120465,120510,120514,120521,120529,120584,120587,120664,120667,120690,120694,120697,120702,120707,120715,120718,120723,120728,120733,120736,120741,120750,120753,120758,120761,120832,120837,120840,120845,120848,120853,120856,120861,120864,120869,120874,120877,120952,120955,120968,120973,120976,120990,120993,121022,121027,121056,121059,121064,121068,121073,121082,121085,121090,121093,121098,121101,121104,121109,121112,121117,121122,121125,121130,121133,121258,121263,121293,121296,121301,121306,121323,121326,121369,121372,121399,121404,121417,121560,121564,121569,121583,121586,121637,121640,121670,121673,121689,121694,121708,121711,121778,121783,121792,121797,121800,121812,121817,121824,121848,121851,121856,121859,121878,121883,121890,121902,121909],[10,119007,119003],{"id":119008},"_3-安装必备配置",[14,119010,119012],{"id":119011},"_31-软件包换源以debian系的发行版为例","3.1 软件包换源（以Debian系的发行版为例）",[316,119014,119017],{"className":119015,"code":119016,"language":5916},[5914],"  打开下方网站（注意，该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",[269,119018,119016],{"__ignoreMap":50},[35,119020,119022],{"id":119021},"_311-ubuntu2204及debian10及以下版本","3.1.1 Ubuntu22.04(及Debian10)及以下版本",[316,119024,119027],{"className":119025,"code":119026,"language":5916},[5914],"  输入以下命令\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",[269,119028,119026],{"__ignoreMap":50},[35,119030,119032],{"id":119031},"_312-ubuntu2404及debian12及以上版本","3.1.2 Ubuntu24.04(及Debian12)及以上版本",[316,119034,119038],{"className":119035,"code":119036,"language":119037,"meta":50,"style":50},"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",[269,119039,119040,119048,119059,119071,119085,119089,119099,119104,119108,119112,119117,119121,119133,119137,119142,119146,119157,119161,119177,119181,119192,119196,119201,119205,119213],{"__ignoreMap":50},[324,119041,119042,119044,119046],{"class":326,"line":327},[324,119043,735],{"class":734},[324,119045,739],{"class":738},[324,119047,742],{"class":738},[324,119049,119050,119052,119054,119056],{"class":326,"line":203},[324,119051,735],{"class":734},[324,119053,739],{"class":738},[324,119055,760],{"class":738},[324,119057,119058],{"class":738}," vim\n",[324,119060,119061,119063,119066,119068],{"class":326,"line":338},[324,119062,735],{"class":734},[324,119064,119065],{"class":738}," rm",[324,119067,26049],{"class":916},[324,119069,119070],{"class":738}," \u002Fetc\u002Fapt\u002Fsources.list\n",[324,119072,119073,119075,119077,119079,119082],{"class":326,"line":344},[324,119074,735],{"class":734},[324,119076,119065],{"class":738},[324,119078,26049],{"class":916},[324,119080,119081],{"class":738}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002F",[324,119083,119084],{"class":916},"**\n",[324,119086,119087],{"class":326,"line":484},[324,119088,488],{"emptyLinePlaceholder":487},[324,119090,119091,119093,119096],{"class":326,"line":491},[324,119092,735],{"class":734},[324,119094,119095],{"class":738}," vim",[324,119097,119098],{"class":738}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fubuntu.sources\n",[324,119100,119101],{"class":326,"line":496},[324,119102,119103],{"class":738},"```\n",[324,119105,119106],{"class":326,"line":502},[324,119107,488],{"emptyLinePlaceholder":487},[324,119109,119110],{"class":326,"line":508},[324,119111,488],{"emptyLinePlaceholder":487},[324,119113,119114],{"class":326,"line":514},[324,119115,119116],{"class":734},"选择好Ubuntu版本后，复制下方的内容。\n",[324,119118,119119],{"class":326,"line":2343},[324,119120,488],{"emptyLinePlaceholder":487},[324,119122,119123,119125,119128,119131],{"class":326,"line":2348},[324,119124,1091],{"class":863},[324,119126,119127],{"class":738},"[](",[324,119129,119130],{"class":734},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-044.png",[324,119132,874],{"class":738},[324,119134,119135],{"class":326,"line":2354},[324,119136,488],{"emptyLinePlaceholder":487},[324,119138,119139],{"class":326,"line":2359},[324,119140,119141],{"class":734},"粘贴进去\n",[324,119143,119144],{"class":326,"line":2373},[324,119145,488],{"emptyLinePlaceholder":487},[324,119147,119148,119150,119152,119155],{"class":326,"line":2378},[324,119149,1091],{"class":863},[324,119151,119127],{"class":738},[324,119153,119154],{"class":734},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-045.png",[324,119156,874],{"class":738},[324,119158,119159],{"class":326,"line":2384},[324,119160,488],{"emptyLinePlaceholder":487},[324,119162,119163,119166,119169,119172,119174],{"class":326,"line":2405},[324,119164,119165],{"class":734},"按一下ESC，然后英文冒号，输入",[324,119167,119168],{"class":738}," `",[324,119170,119171],{"class":734},":wq!",[324,119173,1836],{"class":738},[324,119175,119176],{"class":734},"然后回车\n",[324,119178,119179],{"class":326,"line":2410},[324,119180,488],{"emptyLinePlaceholder":487},[324,119182,119183,119185,119187,119190],{"class":326,"line":2424},[324,119184,1091],{"class":863},[324,119186,119127],{"class":738},[324,119188,119189],{"class":734},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-046.png",[324,119191,874],{"class":738},[324,119193,119194],{"class":326,"line":2429},[324,119195,488],{"emptyLinePlaceholder":487},[324,119197,119198],{"class":326,"line":2458},[324,119199,119200],{"class":734},"输入以下命令\n",[324,119202,119203],{"class":326,"line":2463},[324,119204,488],{"emptyLinePlaceholder":487},[324,119206,119207,119210],{"class":326,"line":2480},[324,119208,119209],{"class":738},"```",[324,119211,119212],{"class":734},"Bash\n",[324,119214,119215,119217,119219],{"class":326,"line":2485},[324,119216,735],{"class":734},[324,119218,739],{"class":738},[324,119220,742],{"class":738},[19,119222,119223],{},"这里被替换成对应学校则成功",[19,119225,119226],{},[48,119227],{"alt":50,"src":119228},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-047.png",[14,119230,119232],{"id":119231},"_32-卸载恶心的snapubuntu及其衍生版","3.2 卸载恶心的snap(Ubuntu及其衍生版)",[35,119234,119236],{"id":119235},"_321-安装非firefox浏览器","3.2.1 安装非firefox浏览器",[19,119238,119239],{},"卸载snap前，请先安装一个浏览器（以Google Chrome为例）(这里是因为Ubuntu默认安装的是snap版本的FireFox)",[19,119241,119242],{},"以下是Google上海服务器的Chrome官网（无需挂梯）",[19,119244,119245],{},[25,119246,119247],{"href":119247,"rel":119248},"https:\u002F\u002Fwww.google.com\u002Fchrome\u002F",[29],[19,119250,119251],{},[48,119252],{"alt":50,"src":119253},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-048.png",[19,119255,119256],{},"咱们这里是Ubuntu所以是Debian系的系统，所以选deb扩展名的程序包。（也就是红色框框）",[19,119258,119259],{},"红帽系则需要安装的是rpm扩展名程序包。（也就是蓝色框框）",[19,119261,119262],{},[48,119263],{"alt":50,"src":119264},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-049.png",[316,119266,119268],{"className":725,"code":119267,"language":727,"meta":50,"style":50},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\ncd ~\u002FDownloads\n#下方chrome安装包名不一定是这个，根据名字来看\nsudo apt install .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[269,119269,119270,119275,119282,119287],{"__ignoreMap":50},[324,119271,119272],{"class":326,"line":327},[324,119273,119274],{"class":772},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\n",[324,119276,119277,119279],{"class":326,"line":203},[324,119278,101997],{"class":916},[324,119280,119281],{"class":738}," ~\u002FDownloads\n",[324,119283,119284],{"class":326,"line":338},[324,119285,119286],{"class":772},"#下方chrome安装包名不一定是这个，根据名字来看\n",[324,119288,119289,119291,119293,119295],{"class":326,"line":344},[324,119290,735],{"class":734},[324,119292,739],{"class":738},[324,119294,760],{"class":738},[324,119296,119297],{"class":738}," .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[19,119299,119300],{},[48,119301],{"alt":50,"src":119302},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-050.png",[35,119304,119306],{"id":119305},"_322-查看snap包应用数量","3.2.2 查看snap包应用数量",[316,119308,119310],{"className":725,"code":119309,"language":727,"meta":50,"style":50},"# 老版\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",[269,119311,119312,119317,119325,119336,119341,119345,119350,119360,119368,119379],{"__ignoreMap":50},[324,119313,119314],{"class":326,"line":327},[324,119315,119316],{"class":772},"# 老版\n",[324,119318,119319,119321,119323],{"class":326,"line":203},[324,119320,735],{"class":734},[324,119322,739],{"class":738},[324,119324,742],{"class":738},[324,119326,119327,119329,119331,119333],{"class":326,"line":338},[324,119328,735],{"class":734},[324,119330,739],{"class":738},[324,119332,760],{"class":738},[324,119334,119335],{"class":738}," neofetch\n",[324,119337,119338],{"class":326,"line":344},[324,119339,119340],{"class":734},"neofetch\n",[324,119342,119343],{"class":326,"line":484},[324,119344,488],{"emptyLinePlaceholder":487},[324,119346,119347],{"class":326,"line":491},[324,119348,119349],{"class":772},"# 新版\n",[324,119351,119352,119354,119357],{"class":326,"line":496},[324,119353,735],{"class":734},[324,119355,119356],{"class":738}," add-apt-repository",[324,119358,119359],{"class":738}," ppa:zhangsongcui3371\u002Ffastfetch\n",[324,119361,119362,119364,119366],{"class":326,"line":502},[324,119363,735],{"class":734},[324,119365,739],{"class":738},[324,119367,742],{"class":738},[324,119369,119370,119372,119374,119376],{"class":326,"line":508},[324,119371,735],{"class":734},[324,119373,739],{"class":738},[324,119375,760],{"class":738},[324,119377,119378],{"class":738}," fastfetch\n",[324,119380,119381],{"class":326,"line":514},[324,119382,119383],{"class":734},"fastfetch\n",[19,119385,119386],{},"这里显示，一共有3162个debian的程序，7个snap程序",[19,119388,119389],{},[48,119390],{"alt":50,"src":119391},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-051.png",[35,119393,119395],{"id":119394},"_323-移除snap应用","3.2.3 移除snap应用",[19,119397,119398],{},"系统在启动时，会自动启动Snap相关服务，我们先禁用掉这些服务",[316,119400,119402],{"className":725,"code":119401,"language":727,"meta":50,"style":50},"sudo systemctl disable snapd.service\nsudo systemctl disable snapd.socket\nsudo systemctl disable snapd.seeded.service\n",[269,119403,119404,119416,119427],{"__ignoreMap":50},[324,119405,119406,119408,119410,119413],{"class":326,"line":327},[324,119407,735],{"class":734},[324,119409,27235],{"class":738},[324,119411,119412],{"class":738}," disable",[324,119414,119415],{"class":738}," snapd.service\n",[324,119417,119418,119420,119422,119424],{"class":326,"line":203},[324,119419,735],{"class":734},[324,119421,27235],{"class":738},[324,119423,119412],{"class":738},[324,119425,119426],{"class":738}," snapd.socket\n",[324,119428,119429,119431,119433,119435],{"class":326,"line":338},[324,119430,735],{"class":734},[324,119432,27235],{"class":738},[324,119434,119412],{"class":738},[324,119436,119437],{"class":738}," snapd.seeded.service\n",[19,119439,119440],{},"然后查看snap应用列表",[19,119442,119443,119444,119449],{},"根据你安装的选择不同（最小安装或普通安装），有",[25,119445,119448],{"href":119446,"rel":119447},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=%E4%B8%8D%E5%90%8C%E7%9A%84&spm=1001.2101.3001.7020",[29],"不同的","Snap软件会被预装到系统，在删除Snap服务之前，我们需要移除Snap安装的这些",[316,119451,119453],{"className":725,"code":119452,"language":727,"meta":50,"style":50},"# 查询当前系统上snap安装了哪些app\nsnap list\n",[269,119454,119455,119460],{"__ignoreMap":50},[324,119456,119457],{"class":326,"line":327},[324,119458,119459],{"class":772},"# 查询当前系统上snap安装了哪些app\n",[324,119461,119462,119465],{"class":326,"line":203},[324,119463,119464],{"class":734},"snap",[324,119466,119467],{"class":738}," list\n",[19,119469,119470],{},[48,119471],{"alt":50,"src":119472},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-052.png",[19,119474,119475,119476,119479],{},"卸载掉图中所有应用，按照 ",[116,119477,119478],{},"先删除应用软件，再删除非应用软件"," 的顺序进行删除",[316,119481,119483],{"className":725,"code":119482,"language":727,"meta":50,"style":50},"#移除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",[269,119484,119485,119490,119502,119507,119518,119523,119534,119539,119550,119555,119559,119564,119575,119586],{"__ignoreMap":50},[324,119486,119487],{"class":326,"line":327},[324,119488,119489],{"class":772},"#移除snap-store，如果是Kubuntu，则没有这个东西，测不需要卸载\n",[324,119491,119492,119494,119497,119499],{"class":326,"line":203},[324,119493,735],{"class":734},[324,119495,119496],{"class":738}," snap",[324,119498,26803],{"class":738},[324,119500,119501],{"class":738}," snap-store\n",[324,119503,119504],{"class":326,"line":338},[324,119505,119506],{"class":772},"#移除firefox浏览器\n",[324,119508,119509,119511,119513,119515],{"class":326,"line":344},[324,119510,735],{"class":734},[324,119512,119496],{"class":738},[324,119514,26803],{"class":738},[324,119516,119517],{"class":738}," firefox\n",[324,119519,119520],{"class":326,"line":484},[324,119521,119522],{"class":772},"#移除gnome-42-2204\n",[324,119524,119525,119527,119529,119531],{"class":326,"line":491},[324,119526,735],{"class":734},[324,119528,119496],{"class":738},[324,119530,26803],{"class":738},[324,119532,119533],{"class":738}," gnome-42-2204\n",[324,119535,119536],{"class":326,"line":496},[324,119537,119538],{"class":772},"#移除gtk-common-themes\n",[324,119540,119541,119543,119545,119547],{"class":326,"line":502},[324,119542,735],{"class":734},[324,119544,119496],{"class":738},[324,119546,26803],{"class":738},[324,119548,119549],{"class":738}," gtk-common-themes\n",[324,119551,119552],{"class":326,"line":508},[324,119553,119554],{"class":772},"#移除其它...\n",[324,119556,119557],{"class":326,"line":514},[324,119558,3403],{"class":867},[324,119560,119561],{"class":326,"line":2343},[324,119562,119563],{"class":772},"#移除core22,bare以及snapd\n",[324,119565,119566,119568,119570,119572],{"class":326,"line":2348},[324,119567,735],{"class":734},[324,119569,119496],{"class":738},[324,119571,26803],{"class":738},[324,119573,119574],{"class":738}," core22\n",[324,119576,119577,119579,119581,119583],{"class":326,"line":2354},[324,119578,735],{"class":734},[324,119580,119496],{"class":738},[324,119582,26803],{"class":738},[324,119584,119585],{"class":738}," bare\n",[324,119587,119588,119590,119592,119594],{"class":326,"line":2359},[324,119589,735],{"class":734},[324,119591,119496],{"class":738},[324,119593,26803],{"class":738},[324,119595,119596],{"class":738}," snapd\n",[19,119598,119599],{},[48,119600],{"alt":50,"src":119601},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-053.png",[19,119603,119604],{},"输入以下命令查看是否还有snap包",[316,119606,119608],{"className":725,"code":119607,"language":727,"meta":50,"style":50},"snap list\n# 老版\nneofetch\n# 新版\nfastfetch\n",[269,119609,119610,119616,119620,119624,119628],{"__ignoreMap":50},[324,119611,119612,119614],{"class":326,"line":327},[324,119613,119464],{"class":734},[324,119615,119467],{"class":738},[324,119617,119618],{"class":326,"line":203},[324,119619,119316],{"class":772},[324,119621,119622],{"class":326,"line":338},[324,119623,119340],{"class":734},[324,119625,119626],{"class":326,"line":344},[324,119627,119349],{"class":772},[324,119629,119630],{"class":326,"line":484},[324,119631,119383],{"class":734},[19,119633,119634],{},[48,119635],{"alt":50,"src":119636},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-054.png",[35,119638,119640],{"id":119639},"_324-移除snap","3.2.4 移除snap",[19,119642,119643,119644,119649],{},"在删除掉",[25,119645,119648],{"href":119646,"rel":119647},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=Snap%E5%AE%89%E8%A3%85&spm=1001.2101.3001.7020",[29],"Snap安装","的软件后，下一步就是把Snap本身也删除掉，这里需要使用Apt来实现",[316,119651,119653],{"className":725,"code":119652,"language":727,"meta":50,"style":50}," #使用apt移除掉snap\nsudo apt autoremove --purge snapd\n#移除snapd的一些目录\nsudo rm -rf \u002Fvar\u002Fcache\u002Fsnapd\nsudo rm -rf ~\u002Fsnap\n",[269,119654,119655,119660,119673,119678,119689],{"__ignoreMap":50},[324,119656,119657],{"class":326,"line":327},[324,119658,119659],{"class":772}," #使用apt移除掉snap\n",[324,119661,119662,119664,119666,119668,119671],{"class":326,"line":203},[324,119663,735],{"class":734},[324,119665,739],{"class":738},[324,119667,118342],{"class":738},[324,119669,119670],{"class":916}," --purge",[324,119672,119596],{"class":738},[324,119674,119675],{"class":326,"line":338},[324,119676,119677],{"class":772},"#移除snapd的一些目录\n",[324,119679,119680,119682,119684,119686],{"class":326,"line":344},[324,119681,735],{"class":734},[324,119683,119065],{"class":738},[324,119685,26049],{"class":916},[324,119687,119688],{"class":738}," \u002Fvar\u002Fcache\u002Fsnapd\n",[324,119690,119691,119693,119695,119697],{"class":326,"line":484},[324,119692,735],{"class":734},[324,119694,119065],{"class":738},[324,119696,26049],{"class":916},[324,119698,119699],{"class":738}," ~\u002Fsnap\n",[19,119701,119702,119703,119706],{},"至此，其实snap已经被删除掉了。但是这个并不足够，如果你使用apt安装一些软件 ",[269,119704,119705],{},"sudo apt install firefox","时，会自动下载并重新安装snap服务。因为Ubuntu源中的一些软件已经是snap版本，而非deb版本，下载snap版本时，会自动检查并在必要时重新安装snap服务。这也是Canonical为了推广自己的Snap Store而做的一些额外的努力吧。(这一点最被很多人不喜欢)",[35,119708,119710],{"id":119709},"_325-禁止系统自动安装snap","3.2.5 禁止系统自动安装snap",[19,119712,119713],{},"我们可以利用APT可配置禁用安装哪些依赖的特性，来实现禁止重新自动安装Snap服务",[316,119715,119717],{"className":725,"code":119716,"language":727,"meta":50,"style":50},"sudo vim \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[269,119718,119719],{"__ignoreMap":50},[324,119720,119721,119723,119725],{"class":326,"line":327},[324,119722,735],{"class":734},[324,119724,119095],{"class":738},[324,119726,119727],{"class":738}," \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[19,119729,119730,119731,119734],{},"按insert进入编辑模式，然后复制以下内容，最后按ESC，切换为英文输入法模式，然后敲 ",[269,119732,119733],{},":wq"," 回车",[316,119736,119738],{"className":725,"code":119737,"language":727,"meta":50,"style":50},"Package: snapd\nPin: release a=*\nPin-Priority: -10\n",[269,119739,119740,119747,119761],{"__ignoreMap":50},[324,119741,119742,119745],{"class":326,"line":327},[324,119743,119744],{"class":734},"Package:",[324,119746,119596],{"class":738},[324,119748,119749,119752,119755,119758],{"class":326,"line":203},[324,119750,119751],{"class":734},"Pin:",[324,119753,119754],{"class":738}," release",[324,119756,119757],{"class":738}," a=",[324,119759,119760],{"class":916},"*\n",[324,119762,119763,119766],{"class":326,"line":338},[324,119764,119765],{"class":734},"Pin-Priority:",[324,119767,119768],{"class":916}," -10\n",[19,119770,119771],{},[48,119772],{"alt":50,"src":119773},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-055.png",[35,119775,119777],{"id":119776},"_326-测试是否成功","3.2.6 测试是否成功",[316,119779,119781],{"className":725,"code":119780,"language":727,"meta":50,"style":50},"sudo apt update\nsudo apt install firefox\n",[269,119782,119783,119791],{"__ignoreMap":50},[324,119784,119785,119787,119789],{"class":326,"line":327},[324,119786,735],{"class":734},[324,119788,739],{"class":738},[324,119790,742],{"class":738},[324,119792,119793,119795,119797,119799],{"class":326,"line":203},[324,119794,735],{"class":734},[324,119796,739],{"class":738},[324,119798,760],{"class":738},[324,119800,119517],{"class":738},[19,119802,119803],{},"这里提示snapd无法被安装，就证明成功了",[19,119805,119806],{},[48,119807],{"alt":50,"src":119808},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-056.png",[35,119810,119812],{"id":119811},"_327-重新安装firefox浏览器没大有必要","3.2.7 重新安装FireFox浏览器（没大有必要）",[19,119814,119815],{},"我个人其实更偏好Google Chrome浏览器，浏览器是从Chrome官网下载deb进行安装的。所以我有浏览器了，就没必要安装火狐浏览器了，",[19,119817,119818],{},"但如果你确实喜欢Firefox，在删除掉Snap后，其实没法再通过Snap或Apt来安装Firefox了，而Firefox官网提供的下载，又没有deb包，没有桌面快捷方式，不是非常方便。",[19,119820,119821],{},"所以，你可以考虑使用Mozilla提供的源来安装debian版本的Firefox",[316,119823,119825],{"className":725,"code":119824,"language":727,"meta":50,"style":50},"# 添加Mozilla提供的源\nsudo add-apt-repository ppa:mozillateam\u002Fppa\n# 安装Firefox\nsudo apt update\nsudo apt install firefox\n",[269,119826,119827,119832,119841,119846,119854],{"__ignoreMap":50},[324,119828,119829],{"class":326,"line":327},[324,119830,119831],{"class":772},"# 添加Mozilla提供的源\n",[324,119833,119834,119836,119838],{"class":326,"line":203},[324,119835,735],{"class":734},[324,119837,119356],{"class":738},[324,119839,119840],{"class":738}," ppa:mozillateam\u002Fppa\n",[324,119842,119843],{"class":326,"line":338},[324,119844,119845],{"class":772},"# 安装Firefox\n",[324,119847,119848,119850,119852],{"class":326,"line":344},[324,119849,735],{"class":734},[324,119851,739],{"class":738},[324,119853,742],{"class":738},[324,119855,119856,119858,119860,119862],{"class":326,"line":484},[324,119857,735],{"class":734},[324,119859,739],{"class":738},[324,119861,760],{"class":738},[324,119863,119517],{"class":738},[35,119865,119867],{"id":119866},"_328-跨ubuntu大版本更新","3.2.8 跨Ubuntu大版本更新",[19,119869,119870],{},"跨Ubuntu大版本更新，是指从Ubuntu22.04LTS更新到Ubuntu24.04LTS这种大版本更新。",[19,119872,119873],{},"跨Ubuntu大版本更新时，建议恢复snap，等更新完毕后再删掉snap，以防止Canonical公司从中作妖。",[316,119875,119877],{"className":725,"code":119876,"language":727,"meta":50,"style":50},"#删掉禁止安装snap的配置文件\nsudo rm -rf \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\nsudo apt update\n\nsudo apt dist-update\n",[269,119878,119879,119884,119894,119902,119906],{"__ignoreMap":50},[324,119880,119881],{"class":326,"line":327},[324,119882,119883],{"class":772},"#删掉禁止安装snap的配置文件\n",[324,119885,119886,119888,119890,119892],{"class":326,"line":203},[324,119887,735],{"class":734},[324,119889,119065],{"class":738},[324,119891,26049],{"class":916},[324,119893,119727],{"class":738},[324,119895,119896,119898,119900],{"class":326,"line":338},[324,119897,735],{"class":734},[324,119899,739],{"class":738},[324,119901,742],{"class":738},[324,119903,119904],{"class":326,"line":344},[324,119905,488],{"emptyLinePlaceholder":487},[324,119907,119908,119910,119912],{"class":326,"line":484},[324,119909,735],{"class":734},[324,119911,739],{"class":738},[324,119913,119914],{"class":738}," dist-update\n",[14,119916,119918],{"id":119917},"_33-中文输入法","3.3 中文输入法",[35,119920,119922],{"id":119921},"_331-搜狗ubuntu2204及以下","3.3.1 搜狗(Ubuntu22.04及以下)",[19,119924,119925],{},"官网下载搜狗输入法",[19,119927,119928],{},[48,119929],{"alt":50,"src":119930},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-057.png",[19,119932,119933],{},[48,119934],{"alt":50,"src":119935},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-058.png",[19,119937,119938],{},"打开终端输入如下",[316,119940,119942],{"className":725,"code":119941,"language":727,"meta":50,"style":50},"cd ~\u002FDownloads\u002F\nsudo apt install .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[269,119943,119944,119951],{"__ignoreMap":50},[324,119945,119946,119948],{"class":326,"line":327},[324,119947,101997],{"class":916},[324,119949,119950],{"class":738}," ~\u002FDownloads\u002F\n",[324,119952,119953,119955,119957,119959],{"class":326,"line":203},[324,119954,735],{"class":734},[324,119956,739],{"class":738},[324,119958,760],{"class":738},[324,119960,119961],{"class":738}," .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[19,119963,119964],{},"打开Fcitx",[19,119966,119967,119970],{},[48,119968],{"alt":50,"src":119969},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-059.png",[48,119971],{"alt":50,"src":119972},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-060.png",[19,119974,119975],{},[48,119976],{"alt":50,"src":119977},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-061.png",[19,119979,119980],{},"添加搜狗输入法",[19,119982,119983],{},[48,119984],{"alt":50,"src":119985},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-062.png",[19,119987,119988],{},[48,119989],{"alt":50,"src":119990},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-063.png",[19,119992,119993],{},"将搜狗输入法设置为唯一输入法",[19,119995,119996],{},[48,119997],{"alt":50,"src":119998},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-064.png",[35,120000,120002],{"id":120001},"_332-fcitx5ubuntu2204及以上debian12及以上","3.3.2 Fcitx5(Ubuntu22.04及以上、Debian12及以上)",[192,120004,120005],{},[195,120006,120007],{},"卸载旧输入法",[316,120009,120011],{"className":119035,"code":120010,"language":119037,"meta":50,"style":50},"sudo apt purge fcitx* ibus*\n",[269,120012,120013],{"__ignoreMap":50},[324,120014,120015,120017,120019,120021,120024,120026,120029],{"class":326,"line":327},[324,120016,735],{"class":734},[324,120018,739],{"class":738},[324,120020,118375],{"class":738},[324,120022,120023],{"class":738}," fcitx",[324,120025,1319],{"class":916},[324,120027,120028],{"class":738}," ibus",[324,120030,119760],{"class":916},[192,120032,120033],{"start":203},[195,120034,120035],{},"安装Fcitx5",[316,120037,120039],{"className":725,"code":120038,"language":727,"meta":50,"style":50},"# 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",[269,120040,120041,120046,120060,120064,120069,120078,120086],{"__ignoreMap":50},[324,120042,120043],{"class":326,"line":327},[324,120044,120045],{"class":772},"# Ubuntu22.04及以上、Debian12及以上\n",[324,120047,120048,120050,120052,120054,120057],{"class":326,"line":203},[324,120049,735],{"class":734},[324,120051,739],{"class":738},[324,120053,760],{"class":738},[324,120055,120056],{"class":738}," fcitx5",[324,120058,120059],{"class":738}," fcitx5-chinese-addons\n",[324,120061,120062],{"class":326,"line":338},[324,120063,488],{"emptyLinePlaceholder":487},[324,120065,120066],{"class":326,"line":344},[324,120067,120068],{"class":772},"# Ubuntu20.04\n",[324,120070,120071,120073,120075],{"class":326,"line":484},[324,120072,735],{"class":734},[324,120074,119356],{"class":738},[324,120076,120077],{"class":738}," ppa:zhsj\u002Ffcitx5\n",[324,120079,120080,120082,120084],{"class":326,"line":491},[324,120081,735],{"class":734},[324,120083,739],{"class":738},[324,120085,742],{"class":738},[324,120087,120088,120090,120092,120094,120096],{"class":326,"line":496},[324,120089,735],{"class":734},[324,120091,739],{"class":738},[324,120093,760],{"class":738},[324,120095,120056],{"class":738},[324,120097,120059],{"class":738},[192,120099,120100,120103],{"start":338},[195,120101,120102],{},"Reboot System",[195,120104,120105],{},"启动Fcitx5",[19,120107,120108],{},[48,120109],{"alt":50,"src":120110},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-065.png",[192,120112,120113],{"start":484},[195,120114,120115],{},"修改一些设置",[19,120117,120118],{},"将Pinyin和Keyboard - English US加入到左边。",[19,120120,120121],{},[48,120122],{"alt":50,"src":120123},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-066.png",[19,120125,120126],{},"添加快捷键以便于更好切换中英文",[19,120128,120129],{},[48,120130],{"alt":50,"src":120131},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-067.png",[192,120133,120134],{"start":491},[195,120135,120136],{},"重启",[316,120138,120140],{"className":119035,"code":120139,"language":119037,"meta":50,"style":50},"sudo shutdown -r now\n",[269,120141,120142],{"__ignoreMap":50},[324,120143,120144,120146,120149,120152],{"class":326,"line":327},[324,120145,735],{"class":734},[324,120147,120148],{"class":738}," shutdown",[324,120150,120151],{"class":916}," -r",[324,120153,120154],{"class":738}," now\n",[192,120156,120157],{"start":496},[195,120158,120159],{},"使用Fcitx5工具箱优化Fcitx5(进入Github自己看说明书安装)",[19,120161,120162],{},[25,120163,120164],{"href":120164,"rel":120165},"https:\u002F\u002Fgithub.com\u002Ffcitx\u002Ffcitx5",[29],[192,120167,120168],{"start":502},[195,120169,120170],{},"再重启",[316,120172,120173],{"className":119035,"code":120139,"language":119037,"meta":50,"style":50},[269,120174,120175],{"__ignoreMap":50},[324,120176,120177,120179,120181,120183],{"class":326,"line":327},[324,120178,735],{"class":734},[324,120180,120148],{"class":738},[324,120182,120151],{"class":916},[324,120184,120154],{"class":738},[14,120186,120188],{"id":120187},"_34-pip3源替换","3.4 pip3源替换",[19,120190,120191],{},"非Debian系发行版需要做。",[19,120193,120194],{},"像Ubuntu、Debian这类使用apt工具的发行版不需要此操作。",[19,120196,120197],{},"使用dnf的系统也可能不用做。",[316,120199,120201],{"className":725,"code":120200,"language":727,"meta":50,"style":50},"# 检查是否已安装 pip\npip3 --version\n# 如果未安装，先安装 pip3（见下方）\n# 配置 pip 使用清华源\npip3 config set global.index-url https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[269,120202,120203,120208,120215,120220,120225],{"__ignoreMap":50},[324,120204,120205],{"class":326,"line":327},[324,120206,120207],{"class":772},"# 检查是否已安装 pip\n",[324,120209,120210,120213],{"class":326,"line":203},[324,120211,120212],{"class":734},"pip3",[324,120214,27016],{"class":916},[324,120216,120217],{"class":326,"line":338},[324,120218,120219],{"class":772},"# 如果未安装，先安装 pip3（见下方）\n",[324,120221,120222],{"class":326,"line":344},[324,120223,120224],{"class":772},"# 配置 pip 使用清华源\n",[324,120226,120227,120229,120232,120235,120238],{"class":326,"line":484},[324,120228,120212],{"class":734},[324,120230,120231],{"class":738}," config",[324,120233,120234],{"class":738}," set",[324,120236,120237],{"class":738}," global.index-url",[324,120239,120240],{"class":738}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[19,120242,120243],{},"按图中顺序敲，但是不出意外的话，会报错，因为大部分发行版不自带pip，所以请接着往下看。",[19,120245,120246],{},[48,120247],{"alt":50,"src":120248},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-068.png",[316,120250,120252],{"className":725,"code":120251,"language":727,"meta":50,"style":50},"#安装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",[269,120253,120254,120259,120267,120278,120282,120287,120306,120310,120315,120327,120331,120336],{"__ignoreMap":50},[324,120255,120256],{"class":326,"line":327},[324,120257,120258],{"class":772},"#安装pip3\n",[324,120260,120261,120263,120265],{"class":326,"line":203},[324,120262,735],{"class":734},[324,120264,739],{"class":738},[324,120266,742],{"class":738},[324,120268,120269,120271,120273,120275],{"class":326,"line":338},[324,120270,735],{"class":734},[324,120272,26800],{"class":738},[324,120274,760],{"class":738},[324,120276,120277],{"class":738}," python3-pip\n",[324,120279,120280],{"class":326,"line":344},[324,120281,488],{"emptyLinePlaceholder":487},[324,120283,120284],{"class":326,"line":484},[324,120285,120286],{"class":772},"#更新pip3\n",[324,120288,120289,120291,120293,120295,120297,120299,120302,120304],{"class":326,"line":491},[324,120290,101601],{"class":734},[324,120292,101604],{"class":916},[324,120294,101627],{"class":738},[324,120296,760],{"class":738},[324,120298,27153],{"class":916},[324,120300,120301],{"class":738}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple",[324,120303,101632],{"class":916},[324,120305,101635],{"class":738},[324,120307,120308],{"class":326,"line":496},[324,120309,488],{"emptyLinePlaceholder":487},[324,120311,120312],{"class":326,"line":502},[324,120313,120314],{"class":772},"#设置pip源为清华源\n",[324,120316,120317,120319,120321,120323,120325],{"class":326,"line":508},[324,120318,120212],{"class":734},[324,120320,120231],{"class":738},[324,120322,120234],{"class":738},[324,120324,120237],{"class":738},[324,120326,120240],{"class":738},[324,120328,120329],{"class":326,"line":514},[324,120330,488],{"emptyLinePlaceholder":487},[324,120332,120333],{"class":326,"line":2343},[324,120334,120335],{"class":772},"#测试\n",[324,120337,120338,120340,120342,120344,120346,120348],{"class":326,"line":2348},[324,120339,101601],{"class":734},[324,120341,101604],{"class":916},[324,120343,101627],{"class":738},[324,120345,760],{"class":738},[324,120347,101632],{"class":916},[324,120349,101635],{"class":738},[19,120351,120352],{},"成功的话，会看到Looking后面是tsinghua字样。",[19,120354,120355],{},[48,120356],{"alt":50,"src":120357},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-069.png",[14,120359,120361],{"id":120360},"_35-显卡驱动安装","3.5 显卡驱动安装",[35,120363,120365],{"id":120364},"_351-卸载显卡驱动卸载干净","3.5.1 卸载显卡驱动(卸载干净)",[316,120367,120369],{"className":119035,"code":120368,"language":119037,"meta":50,"style":50},"# 如果是使用apt安装的驱动\nsudo apt-get remove --purge nvidia*\n# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\nsudo \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[269,120370,120371,120376,120391,120396],{"__ignoreMap":50},[324,120372,120373],{"class":326,"line":327},[324,120374,120375],{"class":772},"# 如果是使用apt安装的驱动\n",[324,120377,120378,120380,120382,120384,120386,120389],{"class":326,"line":203},[324,120379,735],{"class":734},[324,120381,26800],{"class":738},[324,120383,26803],{"class":738},[324,120385,119670],{"class":916},[324,120387,120388],{"class":738}," nvidia",[324,120390,119760],{"class":916},[324,120392,120393],{"class":326,"line":338},[324,120394,120395],{"class":772},"# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\n",[324,120397,120398,120400],{"class":326,"line":344},[324,120399,735],{"class":734},[324,120401,120402],{"class":738}," \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[35,120404,120406],{"id":120405},"_352-安装显卡驱动","3.5.2 安装显卡驱动",[151,120408,120410],{"id":120409},"_3521-apt安装英伟达驱动方式一","3.5.2.1 APT安装英伟达驱动（方式一）",[575,120412,120414],{"id":120413},"_35211-ubuntu","3.5.2.1.1 Ubuntu",[316,120416,120418],{"className":119035,"code":120417,"language":119037,"meta":50,"style":50},"# 安装英伟达驱动\nsudo apt install nvidia-driver-版本号\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[269,120419,120420,120425,120436,120441,120451,120456],{"__ignoreMap":50},[324,120421,120422],{"class":326,"line":327},[324,120423,120424],{"class":772},"# 安装英伟达驱动\n",[324,120426,120427,120429,120431,120433],{"class":326,"line":203},[324,120428,735],{"class":734},[324,120430,739],{"class":738},[324,120432,760],{"class":738},[324,120434,120435],{"class":738}," nvidia-driver-版本号\n",[324,120437,120438],{"class":326,"line":338},[324,120439,120440],{"class":772},"# 重启 \n",[324,120442,120443,120445,120447,120449],{"class":326,"line":344},[324,120444,735],{"class":734},[324,120446,120148],{"class":738},[324,120448,120151],{"class":916},[324,120450,120154],{"class":738},[324,120452,120453],{"class":326,"line":484},[324,120454,120455],{"class":772},"# 检查驱动是否安装成功\n",[324,120457,120458],{"class":326,"line":491},[324,120459,120460],{"class":734},"nvidia-smi\n",[575,120462,120464],{"id":120463},"_35212-debian","3.5.2.1.2 Debian",[316,120466,120468],{"className":119035,"code":120467,"language":119037,"meta":50,"style":50},"# 安装英伟达驱动\nsudo apt install nvidia-driver nvidia-settings\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[269,120469,120470,120474,120488,120492,120502,120506],{"__ignoreMap":50},[324,120471,120472],{"class":326,"line":327},[324,120473,120424],{"class":772},[324,120475,120476,120478,120480,120482,120485],{"class":326,"line":203},[324,120477,735],{"class":734},[324,120479,739],{"class":738},[324,120481,760],{"class":738},[324,120483,120484],{"class":738}," nvidia-driver",[324,120486,120487],{"class":738}," nvidia-settings\n",[324,120489,120490],{"class":326,"line":338},[324,120491,120440],{"class":772},[324,120493,120494,120496,120498,120500],{"class":326,"line":344},[324,120495,735],{"class":734},[324,120497,120148],{"class":738},[324,120499,120151],{"class":916},[324,120501,120154],{"class":738},[324,120503,120504],{"class":326,"line":484},[324,120505,120455],{"class":772},[324,120507,120508],{"class":326,"line":491},[324,120509,120460],{"class":734},[151,120511,120513],{"id":120512},"_3522-官网下载驱动方式二","3.5.2.2 官网下载驱动（方式二）",[19,120515,120516,120517,120520],{},"使用这种方式安装，需要先禁用掉nouveau，请先往下翻，找到",[116,120518,120519],{},"常见问题","那节内容里的禁用nouveau，将nouveau禁用。",[19,120522,120523,120524],{},"用以下命令停止可视化桌面环境（用ctrl alt f*也可以）",[24280,120525,120526],{},[116,120527,120528],{},"（也可以不禁用桌面环境，直接进行下一步。）",[316,120530,120532],{"className":119035,"code":120531,"language":119037,"meta":50,"style":50},"# 通用的命令（sudo telinit 5是打开图形界面）\nsudo telinit 3\n# ubuntu 使用下方命令\nsudo service lightdm stop\n# Fedora 使用下方命令\nsudo systemctl isolate multi-user.target\n",[269,120533,120534,120539,120549,120554,120567,120572],{"__ignoreMap":50},[324,120535,120536],{"class":326,"line":327},[324,120537,120538],{"class":772},"# 通用的命令（sudo telinit 5是打开图形界面）\n",[324,120540,120541,120543,120546],{"class":326,"line":203},[324,120542,735],{"class":734},[324,120544,120545],{"class":738}," telinit",[324,120547,120548],{"class":916}," 3\n",[324,120550,120551],{"class":326,"line":338},[324,120552,120553],{"class":772},"# ubuntu 使用下方命令\n",[324,120555,120556,120558,120561,120564],{"class":326,"line":344},[324,120557,735],{"class":734},[324,120559,120560],{"class":738}," service",[324,120562,120563],{"class":738}," lightdm",[324,120565,120566],{"class":738}," stop\n",[324,120568,120569],{"class":326,"line":484},[324,120570,120571],{"class":772},"# Fedora 使用下方命令\n",[324,120573,120574,120576,120578,120581],{"class":326,"line":491},[324,120575,735],{"class":734},[324,120577,27235],{"class":738},[324,120579,120580],{"class":738}," isolate",[324,120582,120583],{"class":738}," multi-user.target\n",[19,120585,120586],{},"之后会进入一个新的命令行会话，使用当前的用户名密码登录。(不用使用root用户)",[316,120588,120590],{"className":119035,"code":120589,"language":119037,"meta":50,"style":50},"# 编译环境+准备工作\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",[269,120591,120592,120597,120608,120613,120620,120625,120637,120642,120649,120654],{"__ignoreMap":50},[324,120593,120594],{"class":326,"line":327},[324,120595,120596],{"class":772},"# 编译环境+准备工作\n",[324,120598,120599,120601,120603,120605],{"class":326,"line":203},[324,120600,735],{"class":734},[324,120602,739],{"class":738},[324,120604,760],{"class":738},[324,120606,120607],{"class":738}," build-essential\n",[324,120609,120610],{"class":326,"line":338},[324,120611,120612],{"class":772},"# 进入到.run目录中\n",[324,120614,120615,120617],{"class":326,"line":344},[324,120616,101997],{"class":916},[324,120618,120619],{"class":738}," \u002Fhome\u002Ftungchiahui\u002FDownloads\u002F\n",[324,120621,120622],{"class":326,"line":484},[324,120623,120624],{"class":772},"# 给驱动文件增加可执行权限：\n",[324,120626,120627,120629,120631,120634],{"class":326,"line":491},[324,120628,735],{"class":734},[324,120630,25304],{"class":738},[324,120632,120633],{"class":738}," a+x",[324,120635,120636],{"class":738}," NVIDIA-Linux-x86_64-550.107.02.run\n",[324,120638,120639],{"class":326,"line":496},[324,120640,120641],{"class":772},"# 然后执行安装：\n",[324,120643,120644,120646],{"class":326,"line":502},[324,120645,735],{"class":734},[324,120647,120648],{"class":738}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run\n",[324,120650,120651],{"class":326,"line":508},[324,120652,120653],{"class":772},"# 如果有异常则：(一般不用下方这条，会导致OPENGL没法被安装，这样ROS有些功能无法使用)\n",[324,120655,120656,120658,120661],{"class":326,"line":514},[324,120657,735],{"class":734},[324,120659,120660],{"class":738}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run",[324,120662,120663],{"class":916},"  --no-opengl-files\n",[19,120665,120666],{},"安装完毕重启即可",[316,120668,120670],{"className":119035,"code":120669,"language":119037,"meta":50,"style":50},"# 重启 \nsudo reboot\n# 检查驱动是否安装成功\nnvidia-smi\n",[269,120671,120672,120676,120682,120686],{"__ignoreMap":50},[324,120673,120674],{"class":326,"line":327},[324,120675,120440],{"class":772},[324,120677,120678,120680],{"class":326,"line":203},[324,120679,735],{"class":734},[324,120681,27369],{"class":738},[324,120683,120684],{"class":326,"line":338},[324,120685,120455],{"class":772},[324,120687,120688],{"class":326,"line":344},[324,120689,120460],{"class":734},[35,120691,120693],{"id":120692},"_353-安装cuda","3.5.3 安装CUDA",[19,120695,120696],{},"（此教程以Debian 12 Bookworm和RTX3060Laptop为例）(Ubuntu也类似)",[19,120698,120699],{},[48,120700],{"alt":50,"src":120701},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-070.png",[192,120703,120704],{},[195,120705,120706],{},"先查看显卡驱动所支持的最高CUDA版本",[316,120708,120709],{"className":119035,"code":120460,"language":119037,"meta":50,"style":50},[269,120710,120711],{"__ignoreMap":50},[324,120712,120713],{"class":326,"line":327},[324,120714,120460],{"class":734},[19,120716,120717],{},"左边是英伟达驱动版本，右边是所支持CUDA的最高版本，注意是最高版本，比这个版本低的CUDA都是可以安装的。(不用追求最高，稳定即可，虽然都很稳定)",[19,120719,120720],{},[48,120721],{"alt":50,"src":120722},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-071.png",[192,120724,120725],{"start":203},[195,120726,120727],{},"下载CUDA并安装CUDA",[19,120729,598,120730],{},[25,120731,601],{"href":601,"rel":120732},[29],[19,120734,120735],{},"选择一个版本，这里以CUDA12.4为例（绿色框住的都是我这台电脑对应可安装的版本，而红色框则不能）",[19,120737,120738],{},[48,120739],{"alt":50,"src":120740},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-072.png",[19,120742,120743,120744,120749],{},"我这里是Intel CPU(X86_64架构或者叫amd64架构)，所以选择X86_64。（AMD和Intel全是X86的，如果分不清，请看",[25,120745,120748],{"href":120746,"rel":120747},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FPqsGwcPCuidbN6k13jfcGWtWn0b",[29],"Vinci机器人队单片机教程","）",[19,120751,120752],{},"我是Debian12，所以选择了Debian12 ,(你是Ubuntu要选择Ubuntu)如下图所示，建议选择runfile文件进行安装。",[19,120754,120755],{},[48,120756],{"alt":50,"src":120757},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-073.png",[19,120759,120760],{},"将最下方框框里的命令敲入终端",[316,120762,120764],{"className":119035,"code":120763,"language":119037,"meta":50,"style":50},"# 在当前文件夹下创建一个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",[269,120765,120766,120771,120780,120785,120792,120797,120805,120810,120821,120826],{"__ignoreMap":50},[324,120767,120768],{"class":326,"line":327},[324,120769,120770],{"class":772},"# 在当前文件夹下创建一个ttt的子文件夹\n",[324,120772,120773,120775,120777],{"class":326,"line":203},[324,120774,101987],{"class":734},[324,120776,29938],{"class":916},[324,120778,120779],{"class":738}," .\u002Fttt\n",[324,120781,120782],{"class":326,"line":338},[324,120783,120784],{"class":772},"# 进入ttt文件夹\n",[324,120786,120787,120789],{"class":326,"line":344},[324,120788,101997],{"class":916},[324,120790,120791],{"class":738}," ttt\n",[324,120793,120794],{"class":326,"line":484},[324,120795,120796],{"class":772},"# 输入复制的第一条命令（用来下载cuda的runfile文件）\n",[324,120798,120799,120802],{"class":326,"line":491},[324,120800,120801],{"class":734},"wget",[324,120803,120804],{"class":738}," https:\u002F\u002Fdeveloper.download.nvidia.com\u002Fcompute\u002Fcuda\u002F12.4.0\u002Flocal_installers\u002Fcuda_12.4.0_550.54.14_linux.run\n",[324,120806,120807],{"class":326,"line":496},[324,120808,120809],{"class":772},"# 给予权限\n",[324,120811,120812,120814,120816,120818],{"class":326,"line":502},[324,120813,735],{"class":734},[324,120815,25304],{"class":738},[324,120817,120633],{"class":738},[324,120819,120820],{"class":738}," .\u002Fcuda_12.4.0_550.54.14_linux.run\n",[324,120822,120823],{"class":326,"line":508},[324,120824,120825],{"class":772},"# 运行脚本\n",[324,120827,120828,120830],{"class":326,"line":514},[324,120829,735],{"class":734},[324,120831,120820],{"class":738},[19,120833,120834],{},[48,120835],{"alt":50,"src":120836},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-074.png",[19,120838,120839],{},"正在安装中：",[19,120841,120842],{},[48,120843],{"alt":50,"src":120844},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-075.png",[19,120846,120847],{},"输入accept接受即可",[19,120849,120850],{},[48,120851],{"alt":50,"src":120852},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-076.png",[19,120854,120855],{},"因为我们已经安装了驱动，所以删掉该项，Install即可。",[19,120857,120858],{},[48,120859],{"alt":50,"src":120860},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-077.png",[19,120862,120863],{},"等待片刻后，一般不出红色字体就是安装成功了，可以读读英语确认一下。(顺便确定一下位置)",[19,120865,120866],{},[48,120867],{"alt":50,"src":120868},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-078.png",[192,120870,120871],{"start":338},[195,120872,120873],{},"配置环境",[19,120875,120876],{},"根据上方确认一下路径，比如我上面红色框起来的为",[316,120878,120880],{"className":119035,"code":120879,"language":119037,"meta":50,"style":50},"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",[269,120881,120882,120898,120913],{"__ignoreMap":50},[324,120883,120884,120887,120890,120893,120896],{"class":326,"line":327},[324,120885,120886],{"class":734},"Please",[324,120888,120889],{"class":738}," make",[324,120891,120892],{"class":738}," sure",[324,120894,120895],{"class":738}," that",[324,120897,3403],{"class":867},[324,120899,120900,120902,120905,120908,120911],{"class":326,"line":203},[324,120901,52993],{"class":734},[324,120903,120904],{"class":738},"   PATH",[324,120906,120907],{"class":738}," includes",[324,120909,120910],{"class":738}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin",[324,120912,3403],{"class":867},[324,120914,120915,120917,120920,120922,120925,120928,120930,120933,120936,120939,120942,120944,120947,120949],{"class":326,"line":338},[324,120916,52993],{"class":734},[324,120918,120919],{"class":738},"   LD_LIBRARY_PATH",[324,120921,120907],{"class":738},[324,120923,120924],{"class":738}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64,",[324,120926,120927],{"class":738}," or,",[324,120929,5938],{"class":738},[324,120931,120932],{"class":738}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64",[324,120934,120935],{"class":738}," to",[324,120937,120938],{"class":738}," \u002Fetc\u002Fld.so.conf",[324,120940,120941],{"class":738}," and",[324,120943,27952],{"class":738},[324,120945,120946],{"class":738}," ldconfig",[324,120948,65326],{"class":738},[324,120950,120951],{"class":738}," root\n",[19,120953,120954],{},"如果刚才忘记查看了，也可以使用下方命令查看路径：",[316,120956,120958],{"className":119035,"code":120957,"language":119037,"meta":50,"style":50},"which nvcc\n",[269,120959,120960],{"__ignoreMap":50},[324,120961,120962,120965],{"class":326,"line":327},[324,120963,120964],{"class":916},"which",[324,120966,120967],{"class":738}," nvcc\n",[19,120969,120970],{},[48,120971],{"alt":50,"src":120972},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-079.png",[19,120974,120975],{},"所以我进行以下操作：",[316,120977,120979],{"className":119035,"code":120978,"language":119037,"meta":50,"style":50},"sudo vim ~\u002F.bashrc\n",[269,120980,120981],{"__ignoreMap":50},[324,120982,120983,120985,120987],{"class":326,"line":327},[324,120984,735],{"class":734},[324,120986,119095],{"class":738},[324,120988,120989],{"class":738}," ~\u002F.bashrc\n",[19,120991,120992],{},"复制下面这一串到~\u002F.bashrc文件中，并保存，不会用vim编辑器的请自行百度。",[316,120994,120996],{"className":119035,"code":120995,"language":119037,"meta":50,"style":50},"export PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\nexport LD_LIBRARY_PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[269,120997,120998,121010],{"__ignoreMap":50},[324,120999,121000,121002,121005,121007],{"class":326,"line":327},[324,121001,25766],{"class":863},[324,121003,121004],{"class":867}," PATH",[324,121006,913],{"class":863},[324,121008,121009],{"class":867},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\n",[324,121011,121012,121014,121017,121019],{"class":326,"line":203},[324,121013,25766],{"class":863},[324,121015,121016],{"class":867}," LD_LIBRARY_PATH",[324,121018,913],{"class":863},[324,121020,121021],{"class":867},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[19,121023,121024],{},[48,121025],{"alt":50,"src":121026},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-080.png",[316,121028,121030],{"className":119035,"code":121029,"language":119037,"meta":50,"style":50},"# 刷新当前终端的环境变量\nsource ~\u002F.bashrc\n# 验证CUDA是否安装成功\nnvcc -V\n",[269,121031,121032,121037,121043,121048],{"__ignoreMap":50},[324,121033,121034],{"class":326,"line":327},[324,121035,121036],{"class":772},"# 刷新当前终端的环境变量\n",[324,121038,121039,121041],{"class":326,"line":203},[324,121040,101615],{"class":916},[324,121042,120989],{"class":738},[324,121044,121045],{"class":326,"line":338},[324,121046,121047],{"class":772},"# 验证CUDA是否安装成功\n",[324,121049,121050,121053],{"class":326,"line":344},[324,121051,121052],{"class":734},"nvcc",[324,121054,121055],{"class":916}," -V\n",[19,121057,121058],{},"出现下图这种则安装成功。",[19,121060,121061],{},[48,121062],{"alt":50,"src":121063},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-081.png",[35,121065,121067],{"id":121066},"_354-安装cudnn","3.5.4 安装cuDNN",[192,121069,121070],{},[195,121071,121072],{},"据安装好的CUDA版本选择合适的cuDNN版本进行下载，注意这里是需要注册登录的：",[19,121074,121075,121076,121081],{},"前往 NVIDIA cuDNN 下载页面：",[25,121077,121080],{"href":121078,"rel":121079},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn%EF%BC%88%E9%9C%80%E8%A6%81%E6%B3%A8%E5%86%8C",[29],"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn（需要注册"," NVIDIA 开发者账号并登录）",[19,121083,121084],{},"因为我是CUDA12.4，所以下方红圈版本都是可以安装的，越新越好。",[19,121086,121087],{},[48,121088],{"alt":50,"src":121089},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-082.png",[19,121091,121092],{},"红色是X86架构的所有Linux通用的，所以我选择红色的。",[19,121094,121095],{},[48,121096],{"alt":50,"src":121097},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-083.png",[19,121099,121100],{},"绿色的是X86架构的Ubuntu，是Ubuntu且CPU为X86架构的可以选择下载。",[19,121102,121103],{},"蓝色的是arm64(aarch64)架构的Ubuntu，是Ubuntu且CPU为arm64(aarch64)架构的可以选择下载。",[19,121105,121106],{},[116,121107,121108],{},"我这里选择所有Linux X86_64最通用的办法：",[19,121110,121111],{},"下载好的：",[19,121113,121114],{},[48,121115],{"alt":50,"src":121116},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-084.png",[192,121118,121119],{"start":203},[195,121120,121121],{},"安装cuDNN",[19,121123,121124],{},"找到该文件所在目录，并打开终端，cd到该目录。",[19,121126,121127],{},[48,121128],{"alt":50,"src":121129},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-085.png",[19,121131,121132],{},"解压文件，并复制到对应位置完成安装",[316,121134,121136],{"className":119035,"code":121135,"language":119037,"meta":50,"style":50},"# 解压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",[269,121137,121138,121143,121154,121159,121166,121171,121187,121201,121206,121217,121226,121230,121246],{"__ignoreMap":50},[324,121139,121140],{"class":326,"line":327},[324,121141,121142],{"class":772},"# 解压cuDNN文件\n",[324,121144,121145,121148,121151],{"class":326,"line":203},[324,121146,121147],{"class":734},"tar",[324,121149,121150],{"class":916}," -xvf",[324,121152,121153],{"class":738}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive.tar.xz\n",[324,121155,121156],{"class":326,"line":338},[324,121157,121158],{"class":772},"# cd进文件夹\n",[324,121160,121161,121163],{"class":326,"line":344},[324,121162,101997],{"class":916},[324,121164,121165],{"class":738}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive\n",[324,121167,121168],{"class":326,"line":484},[324,121169,121170],{"class":772},"# 复制cuDNN文件到CUDA目录\n",[324,121172,121173,121175,121177,121180,121182,121185],{"class":326,"line":491},[324,121174,735],{"class":734},[324,121176,28583],{"class":738},[324,121178,121179],{"class":738}," include\u002Fcudnn",[324,121181,1319],{"class":916},[324,121183,121184],{"class":738},"    \u002Fusr\u002Flocal\u002Fcuda\u002Finclude",[324,121186,3403],{"class":867},[324,121188,121189,121191,121193,121196,121198],{"class":326,"line":496},[324,121190,735],{"class":734},[324,121192,28583],{"class":738},[324,121194,121195],{"class":738}," lib\u002Flibcudnn",[324,121197,1319],{"class":916},[324,121199,121200],{"class":738},"    \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\n",[324,121202,121203],{"class":326,"line":502},[324,121204,121205],{"class":772},"# 对比一下有没有缺文件\n",[324,121207,121208,121210,121213,121215],{"class":326,"line":508},[324,121209,27483],{"class":734},[324,121211,121212],{"class":738}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn",[324,121214,1319],{"class":916},[324,121216,3403],{"class":867},[324,121218,121219,121221,121224],{"class":326,"line":514},[324,121220,27483],{"class":734},[324,121222,121223],{"class":738}," \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\u002Flibcudnn",[324,121225,119760],{"class":916},[324,121227,121228],{"class":326,"line":2343},[324,121229,120809],{"class":772},[324,121231,121232,121234,121236,121239,121241,121243],{"class":326,"line":2348},[324,121233,735],{"class":734},[324,121235,25304],{"class":738},[324,121237,121238],{"class":738}," a+r",[324,121240,121212],{"class":738},[324,121242,1319],{"class":916},[324,121244,121245],{"class":867},"   \n",[324,121247,121248,121250,121252,121254,121256],{"class":326,"line":2354},[324,121249,735],{"class":734},[324,121251,25304],{"class":738},[324,121253,121238],{"class":738},[324,121255,121223],{"class":738},[324,121257,119760],{"class":916},[192,121259,121260],{"start":338},[195,121261,121262],{},"检查是否安装成功",[316,121264,121266],{"className":119035,"code":121265,"language":119037,"meta":50,"style":50},"# 检查cuDNN版本命令\ncat \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h | grep CUDNN_MAJOR -A 2\n",[269,121267,121268,121273],{"__ignoreMap":50},[324,121269,121270],{"class":326,"line":327},[324,121271,121272],{"class":772},"# 检查cuDNN版本命令\n",[324,121274,121275,121278,121281,121283,121285,121288,121291],{"class":326,"line":203},[324,121276,121277],{"class":734},"cat",[324,121279,121280],{"class":738}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h",[324,121282,25833],{"class":863},[324,121284,30958],{"class":734},[324,121286,121287],{"class":738}," CUDNN_MAJOR",[324,121289,121290],{"class":916}," -A",[324,121292,48445],{"class":916},[19,121294,121295],{},"出现下图这样的就是安装成功了",[19,121297,121298],{},[48,121299],{"alt":50,"src":121300},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-086.png",[192,121302,121303],{"start":344},[195,121304,121305],{},"软链接(一般不需要)",[316,121307,121309],{"className":119035,"code":121308,"language":119037,"meta":50,"style":50},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\nsudo ldconfig\n",[269,121310,121311,121316],{"__ignoreMap":50},[324,121312,121313],{"class":326,"line":327},[324,121314,121315],{"class":772},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\n",[324,121317,121318,121320],{"class":326,"line":203},[324,121319,735],{"class":734},[324,121321,121322],{"class":738}," ldconfig\n",[19,121324,121325],{},"如果出现下列提示，则需要软链接**(如果没有下列提示，则什么都不需要做)**",[316,121327,121332],{"className":121328,"code":121329,"language":121330,"meta":121331,"style":50},"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",[269,121333,121334,121339,121344,121349,121354,121359,121364],{"__ignoreMap":50},[324,121335,121336],{"class":326,"line":327},[324,121337,121338],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_train.so.8 is not a symbolic link  \n",[324,121340,121341],{"class":326,"line":203},[324,121342,121343],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_train.so.8 is not a symbolic link  \n",[324,121345,121346],{"class":326,"line":338},[324,121347,121348],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_infer.so.8 is not a symbolic link  \n",[324,121350,121351],{"class":326,"line":344},[324,121352,121353],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_infer.so.8 is not a symbolic link  \n",[324,121355,121356],{"class":326,"line":484},[324,121357,121358],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_infer.so.8 is not a symbolic link  \n",[324,121360,121361],{"class":326,"line":491},[324,121362,121363],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn.so.8 is not a symbolic link  \n",[324,121365,121366],{"class":326,"line":496},[324,121367,121368],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_train.so.8 is not a symbolic link\n",[19,121370,121371],{},"运行下方的命令",[316,121373,121375],{"className":119035,"code":121374,"language":119037,"meta":50,"style":50},"# cd进入CUDA路径\ncd \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n # 查看本路径下的需要软链接的文件名\n ls\n",[269,121376,121377,121382,121389,121394],{"__ignoreMap":50},[324,121378,121379],{"class":326,"line":327},[324,121380,121381],{"class":772},"# cd进入CUDA路径\n",[324,121383,121384,121386],{"class":326,"line":203},[324,121385,101997],{"class":916},[324,121387,121388],{"class":738}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n",[324,121390,121391],{"class":326,"line":338},[324,121392,121393],{"class":772}," # 查看本路径下的需要软链接的文件名\n",[324,121395,121396],{"class":326,"line":344},[324,121397,121398],{"class":734}," ls\n",[19,121400,121401],{},[48,121402],{"alt":50,"src":121403},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-087.png",[19,121405,121406,121407,19139,121410,19139,121413,121416],{},"如上图，我需要将",[269,121408,121409],{},"libcudnn_xxx_xxxxx.so.8.9.7",[269,121411,121412],{},"libcudnn_xxx_xxxxx.so.8",[269,121414,121415],{},"libcudnn_xxx_xxxxx.so","软链接",[316,121418,121420],{"className":119035,"code":121419,"language":119037,"meta":50,"style":50},"# 创建符号链接。对于每个 .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",[269,121421,121422,121427,121443,121457,121471,121485,121499,121513,121527,121532,121538,121543],{"__ignoreMap":50},[324,121423,121424],{"class":326,"line":327},[324,121425,121426],{"class":772},"# 创建符号链接。对于每个 .so.8 文件，需要创建一个指向该文件的符号链接，通常链接的名称是不包含 .8 的文件名。\n",[324,121428,121429,121431,121434,121437,121440],{"class":326,"line":203},[324,121430,735],{"class":734},[324,121432,121433],{"class":738}," ln",[324,121435,121436],{"class":916}," -sf",[324,121438,121439],{"class":738}," libcudnn_cnn_train.so.8.9.7",[324,121441,121442],{"class":738}," libcudnn_cnn_train.so.8\n",[324,121444,121445,121447,121449,121451,121454],{"class":326,"line":338},[324,121446,735],{"class":734},[324,121448,121433],{"class":738},[324,121450,121436],{"class":916},[324,121452,121453],{"class":738}," libcudnn_adv_infer.so.8.9.7",[324,121455,121456],{"class":738}," libcudnn_adv_infer.so.8\n",[324,121458,121459,121461,121463,121465,121468],{"class":326,"line":344},[324,121460,735],{"class":734},[324,121462,121433],{"class":738},[324,121464,121436],{"class":916},[324,121466,121467],{"class":738}," libcudnn_adv_train.so.8.9.7",[324,121469,121470],{"class":738}," libcudnn_adv_train.so.8\n",[324,121472,121473,121475,121477,121479,121482],{"class":326,"line":484},[324,121474,735],{"class":734},[324,121476,121433],{"class":738},[324,121478,121436],{"class":916},[324,121480,121481],{"class":738}," libcudnn_cnn_infer.so.8.9.7",[324,121483,121484],{"class":738}," libcudnn_cnn_infer.so.8\n",[324,121486,121487,121489,121491,121493,121496],{"class":326,"line":491},[324,121488,735],{"class":734},[324,121490,121433],{"class":738},[324,121492,121436],{"class":916},[324,121494,121495],{"class":738}," libcudnn.so.8.9.7",[324,121497,121498],{"class":738}," libcudnn.so.8\n",[324,121500,121501,121503,121505,121507,121510],{"class":326,"line":496},[324,121502,735],{"class":734},[324,121504,121433],{"class":738},[324,121506,121436],{"class":916},[324,121508,121509],{"class":738}," libcudnn_ops_infer.so.8.9.7",[324,121511,121512],{"class":738}," libcudnn_ops_infer.so.8\n",[324,121514,121515,121517,121519,121521,121524],{"class":326,"line":502},[324,121516,735],{"class":734},[324,121518,121433],{"class":738},[324,121520,121436],{"class":916},[324,121522,121523],{"class":738}," libcudnn_ops_train.so.8.9.7",[324,121525,121526],{"class":738}," libcudnn_ops_train.so.8\n",[324,121528,121529],{"class":326,"line":508},[324,121530,121531],{"class":772},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何提示，说明配置已经完成。）\n",[324,121533,121534,121536],{"class":326,"line":514},[324,121535,735],{"class":734},[324,121537,121322],{"class":738},[324,121539,121540],{"class":326,"line":2343},[324,121541,121542],{"class":772},"# 使用 ls -l 来确认符号链接是否创建成功：(再次确认链接）\n",[324,121544,121545,121547,121550,121553,121555,121558],{"class":326,"line":2348},[324,121546,27483],{"class":734},[324,121548,121549],{"class":916}," -l",[324,121551,121552],{"class":738}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_",[324,121554,1319],{"class":916},[324,121556,121557],{"class":738},".so",[324,121559,119760],{"class":916},[35,121561,121563],{"id":121562},"_355-常见问题","3.5.5 常见问题",[192,121565,121566],{},[195,121567,121568],{},"禁用开源驱动nouveau，nouveau经常会引起卡顿黑屏，所以要禁用",[316,121570,121572],{"className":119035,"code":121571,"language":119037,"meta":50,"style":50},"sudo vim \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[269,121573,121574],{"__ignoreMap":50},[324,121575,121576,121578,121580],{"class":326,"line":327},[324,121577,735],{"class":734},[324,121579,119095],{"class":738},[324,121581,121582],{"class":738}," \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[19,121584,121585],{},"blacklist-nouveau.conf文件内容如下：",[316,121587,121589],{"className":119035,"code":121588,"language":119037,"meta":50,"style":50},"blacklist nouveau\nblacklist lbm-nouveau\noptions nouveau modeset=0\nalias nouveau off\nalias lbm-nouveau off\n",[269,121590,121591,121599,121606,121618,121628],{"__ignoreMap":50},[324,121592,121593,121596],{"class":326,"line":327},[324,121594,121595],{"class":734},"blacklist",[324,121597,121598],{"class":738}," nouveau\n",[324,121600,121601,121603],{"class":326,"line":203},[324,121602,121595],{"class":734},[324,121604,121605],{"class":738}," lbm-nouveau\n",[324,121607,121608,121610,121613,121616],{"class":326,"line":338},[324,121609,116651],{"class":734},[324,121611,121612],{"class":738}," nouveau",[324,121614,121615],{"class":738}," modeset=",[324,121617,3814],{"class":916},[324,121619,121620,121623,121625],{"class":326,"line":344},[324,121621,121622],{"class":916},"alias",[324,121624,121612],{"class":738},[324,121626,121627],{"class":738}," off\n",[324,121629,121630,121632,121635],{"class":326,"line":484},[324,121631,121622],{"class":916},[324,121633,121634],{"class":738}," lbm-nouveau",[324,121636,121627],{"class":738},[19,121638,121639],{},"接着运行下方命令",[316,121641,121643],{"className":119035,"code":121642,"language":119037,"meta":50,"style":50},"sudo update-initramfs -u\n或者\nsudo dracut --force\n",[269,121644,121645,121655,121660],{"__ignoreMap":50},[324,121646,121647,121649,121652],{"class":326,"line":327},[324,121648,735],{"class":734},[324,121650,121651],{"class":738}," update-initramfs",[324,121653,121654],{"class":916}," -u\n",[324,121656,121657],{"class":326,"line":203},[324,121658,121659],{"class":734},"或者\n",[324,121661,121662,121664,121667],{"class":326,"line":338},[324,121663,735],{"class":734},[324,121665,121666],{"class":738}," dracut",[324,121668,121669],{"class":916}," --force\n",[19,121671,121672],{},"重启后，查询nouveau是否还开着，如果什么都不出现，说明禁用成功。",[316,121674,121676],{"className":119035,"code":121675,"language":119037,"meta":50,"style":50},"lsmod | grep nouveau\n",[269,121677,121678],{"__ignoreMap":50},[324,121679,121680,121683,121685,121687],{"class":326,"line":327},[324,121681,121682],{"class":734},"lsmod",[324,121684,25833],{"class":863},[324,121686,30958],{"class":734},[324,121688,121598],{"class":738},[192,121690,121691],{"start":203},[195,121692,121693],{},"无法调节屏幕亮度，无法使用HDMI插口(这是因为xorg文件没配置)",[316,121695,121697],{"className":119035,"code":121696,"language":119037,"meta":50,"style":50},"sudo vim \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[269,121698,121699],{"__ignoreMap":50},[324,121700,121701,121703,121705],{"class":326,"line":327},[324,121702,735],{"class":734},[324,121704,119095],{"class":738},[324,121706,121707],{"class":738}," \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[19,121709,121710],{},"并把10-nvidia.conf里的内容修改为下方内容并保存，然后重启即可。",[316,121712,121714],{"className":119035,"code":121713,"language":119037,"meta":50,"style":50},"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",[269,121715,121716,121724,121732,121740,121747,121755,121765,121773],{"__ignoreMap":50},[324,121717,121718,121721],{"class":326,"line":327},[324,121719,121720],{"class":734},"Section",[324,121722,121723],{"class":738}," \"OutputClass\"\n",[324,121725,121726,121729],{"class":326,"line":203},[324,121727,121728],{"class":734},"   Identifier",[324,121730,121731],{"class":738}," \"nvidia\"\n",[324,121733,121734,121737],{"class":326,"line":338},[324,121735,121736],{"class":734},"   MatchDriver",[324,121738,121739],{"class":738}," \"nvidia-drm\"\n",[324,121741,121742,121745],{"class":326,"line":344},[324,121743,121744],{"class":734},"   Driver",[324,121746,121731],{"class":738},[324,121748,121749,121752],{"class":326,"line":484},[324,121750,121751],{"class":734},"   Option",[324,121753,121754],{"class":738}," \"AllowEmptyInitialConfiguration\"\n",[324,121756,121757,121759,121762],{"class":326,"line":491},[324,121758,121751],{"class":734},[324,121760,121761],{"class":738}," \"PrimaryGPU\"",[324,121763,121764],{"class":738}," \"yes\"\n",[324,121766,121767,121770],{"class":326,"line":496},[324,121768,121769],{"class":734},"   ModulePath",[324,121771,121772],{"class":738}," \"\u002Fusr\u002Flib\u002Fx86_64-linux-gnu\u002Fnvidia\u002Fxorg\"\n",[324,121774,121775],{"class":326,"line":502},[324,121776,121777],{"class":734},"EndSection\n",[192,121779,121780],{"start":338},[195,121781,121782],{},"安装N卡驱动提示错误",[316,121784,121786],{"className":121328,"code":121785,"language":121330,"meta":121331,"style":50},"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",[269,121787,121788],{"__ignoreMap":50},[324,121789,121790],{"class":326,"line":327},[324,121791,121785],{},[192,121793,121794],{},[195,121795,121796],{},"检查当前运行的内核版本：",[19,121798,121799],{},"运行以下命令以查看你当前正在使用的内核版本：",[316,121801,121803],{"className":725,"code":121802,"language":727,"meta":50,"style":50},"uname -r\n",[269,121804,121805],{"__ignoreMap":50},[324,121806,121807,121809],{"class":326,"line":327},[324,121808,70926],{"class":734},[324,121810,121811],{"class":916}," -r\n",[192,121813,121814],{"start":203},[195,121815,121816],{},"安装内核开发文件：",[19,121818,121819,121820,121823],{},"确保你已经安装了与当前内核版本相匹配的 ",[269,121821,121822],{},"kernel-devel"," 包。运行以下命令来安装：",[316,121825,121827],{"className":725,"code":121826,"language":727,"meta":50,"style":50},"sudo dnf install kernel-devel-$(uname -r)\n",[269,121828,121829],{"__ignoreMap":50},[324,121830,121831,121833,121835,121837,121840,121842,121844,121846],{"class":326,"line":327},[324,121832,735],{"class":734},[324,121834,27038],{"class":738},[324,121836,760],{"class":738},[324,121838,121839],{"class":738}," kernel-devel-",[324,121841,25823],{"class":867},[324,121843,70926],{"class":734},[324,121845,120151],{"class":916},[324,121847,874],{"class":867},[19,121849,121850],{},"这将自动安装与你当前内核版本匹配的内核开发包。",[192,121852,121853],{"start":338},[195,121854,121855],{},"安装内核源代码（如果需要）：",[19,121857,121858],{},"如果需要访问完整的内核源代码，你可以运行以下命令来安装它：",[316,121860,121862],{"className":725,"code":121861,"language":727,"meta":50,"style":50},"sudo dnf install kernel-headers kernel-source\n",[269,121863,121864],{"__ignoreMap":50},[324,121865,121866,121868,121870,121872,121875],{"class":326,"line":327},[324,121867,735],{"class":734},[324,121869,27038],{"class":738},[324,121871,760],{"class":738},[324,121873,121874],{"class":738}," kernel-headers",[324,121876,121877],{"class":738}," kernel-source\n",[192,121879,121880],{"start":344},[195,121881,121882],{},"检查安装：",[19,121884,121885,121886,121889],{},"安装完成后，确认路径是否正确。内核源文件通常位于 ",[269,121887,121888],{},"\u002Fusr\u002Fsrc\u002Fkernels\u002F"," 目录下，你可以使用以下命令来检查该目录是否存在：",[316,121891,121893],{"className":725,"code":121892,"language":727,"meta":50,"style":50},"ls \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[269,121894,121895],{"__ignoreMap":50},[324,121896,121897,121899],{"class":326,"line":327},[324,121898,27483],{"class":734},[324,121900,121901],{"class":738}," \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[19,121903,121904,121905,121908],{},"如果仍然遇到问题，可以通过 ",[269,121906,121907],{},"--kernel-source-path"," 选项手动指定内核源文件路径。",[775,121910,121911],{},"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":50,"searchDepth":203,"depth":203,"links":121913},[121914,121918,121928,121932,121933],{"id":119011,"depth":203,"text":119012,"children":121915},[121916,121917],{"id":119021,"depth":338,"text":119022},{"id":119031,"depth":338,"text":119032},{"id":119231,"depth":203,"text":119232,"children":121919},[121920,121921,121922,121923,121924,121925,121926,121927],{"id":119235,"depth":338,"text":119236},{"id":119305,"depth":338,"text":119306},{"id":119394,"depth":338,"text":119395},{"id":119639,"depth":338,"text":119640},{"id":119709,"depth":338,"text":119710},{"id":119776,"depth":338,"text":119777},{"id":119811,"depth":338,"text":119812},{"id":119866,"depth":338,"text":119867},{"id":119917,"depth":203,"text":119918,"children":121929},[121930,121931],{"id":119921,"depth":338,"text":119922},{"id":120001,"depth":338,"text":120002},{"id":120187,"depth":203,"text":120188},{"id":120360,"depth":203,"text":120361,"children":121934},[121935,121936,121937,121938,121939],{"id":120364,"depth":338,"text":120365},{"id":120405,"depth":338,"text":120406},{"id":120692,"depth":338,"text":120693},{"id":121066,"depth":338,"text":121067},{"id":121562,"depth":338,"text":121563},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch3",{"title":119003,"description":791},"wiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置","WWF6akXAqWzKqM4dMry9y9TJVEbZQNwxOIpkPoo5nX0",{"id":121946,"title":121947,"body":121948,"description":791,"extension":792,"meta":122288,"navigation":487,"path":122289,"seo":122290,"stem":122291,"__hash__":122292},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累).md","4. 命令教程(长期积累)",{"type":7,"value":121949,"toc":122286},[121950,121953,121958,121961,122207,122212,122215,122251,122254,122283],[10,121951,121947],{"id":121952},"_4-命令教程长期积累",[192,121954,121955],{},[195,121956,121957],{},"大多数命令",[19,121959,121960],{},"常用 Linux 命令速查：",[316,121962,121964],{"className":725,"code":121963,"language":727,"meta":50,"style":50},"# 文件与目录\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",[269,121965,121966,121971,121978,121985,121993,122000,122007,122015,122023,122030,122037,122045,122049,122054,122061,122069,122076,122080,122085,122092,122100,122108,122116,122124,122128,122133,122141,122148,122155,122163,122171,122175,122180,122189,122198],{"__ignoreMap":50},[324,121967,121968],{"class":326,"line":327},[324,121969,121970],{"class":772},"# 文件与目录\n",[324,121972,121973,121975],{"class":326,"line":203},[324,121974,27483],{"class":734},[324,121976,121977],{"class":772},"        # 列出目录内容\n",[324,121979,121980,121982],{"class":326,"line":338},[324,121981,101997],{"class":916},[324,121983,121984],{"class":772},"        # 切换目录\n",[324,121986,121987,121990],{"class":326,"line":344},[324,121988,121989],{"class":916},"pwd",[324,121991,121992],{"class":772},"       # 显示当前路径\n",[324,121994,121995,121997],{"class":326,"line":484},[324,121996,101987],{"class":734},[324,121998,121999],{"class":772},"     # 创建目录\n",[324,122001,122002,122004],{"class":326,"line":491},[324,122003,26046],{"class":734},[324,122005,122006],{"class":772},"        # 删除文件或目录\n",[324,122008,122009,122012],{"class":326,"line":496},[324,122010,122011],{"class":734},"cp",[324,122013,122014],{"class":772},"        # 复制文件或目录\n",[324,122016,122017,122020],{"class":326,"line":502},[324,122018,122019],{"class":734},"mv",[324,122021,122022],{"class":772},"        # 移动\u002F重命名文件或目录\n",[324,122024,122025,122027],{"class":326,"line":508},[324,122026,102004],{"class":734},[324,122028,122029],{"class":772},"     # 创建空文件\n",[324,122031,122032,122034],{"class":326,"line":514},[324,122033,121277],{"class":734},[324,122035,122036],{"class":772},"       # 查看文件内容\n",[324,122038,122039,122042],{"class":326,"line":2343},[324,122040,122041],{"class":734},"head\u002Ftail",[324,122043,122044],{"class":772}," # 查看文件头部\u002F尾部\n",[324,122046,122047],{"class":326,"line":2348},[324,122048,488],{"emptyLinePlaceholder":487},[324,122050,122051],{"class":326,"line":2354},[324,122052,122053],{"class":772},"# 权限管理\n",[324,122055,122056,122058],{"class":326,"line":2359},[324,122057,25336],{"class":734},[324,122059,122060],{"class":772},"     # 修改文件权限\n",[324,122062,122063,122066],{"class":326,"line":2373},[324,122064,122065],{"class":734},"chown",[324,122067,122068],{"class":772},"     # 修改文件所有者\n",[324,122070,122071,122073],{"class":326,"line":2378},[324,122072,735],{"class":734},[324,122074,122075],{"class":772},"      # 以管理员身份执行\n",[324,122077,122078],{"class":326,"line":2384},[324,122079,488],{"emptyLinePlaceholder":487},[324,122081,122082],{"class":326,"line":2405},[324,122083,122084],{"class":772},"# 系统信息\n",[324,122086,122087,122089],{"class":326,"line":2410},[324,122088,70926],{"class":734},[324,122090,122091],{"class":772},"     # 系统信息\n",[324,122093,122094,122097],{"class":326,"line":2424},[324,122095,122096],{"class":734},"df",[324,122098,122099],{"class":772},"        # 磁盘使用情况\n",[324,122101,122102,122105],{"class":326,"line":2429},[324,122103,122104],{"class":734},"free",[324,122106,122107],{"class":772},"      # 内存使用情况\n",[324,122109,122110,122113],{"class":326,"line":2458},[324,122111,122112],{"class":734},"top\u002Fhtop",[324,122114,122115],{"class":772},"  # 进程监控\n",[324,122117,122118,122121],{"class":326,"line":2463},[324,122119,122120],{"class":734},"ps",[324,122122,122123],{"class":772},"        # 查看进程\n",[324,122125,122126],{"class":326,"line":2480},[324,122127,488],{"emptyLinePlaceholder":487},[324,122129,122130],{"class":326,"line":2485},[324,122131,122132],{"class":772},"# 网络\n",[324,122134,122135,122138],{"class":326,"line":2490},[324,122136,122137],{"class":734},"ping",[324,122139,122140],{"class":772},"      # 测试网络连通性\n",[324,122142,122143,122145],{"class":326,"line":2495},[324,122144,27571],{"class":734},[324,122146,122147],{"class":772},"      # 发送 HTTP 请求\n",[324,122149,122150,122152],{"class":326,"line":2509},[324,122151,120801],{"class":734},[324,122153,122154],{"class":772},"      # 下载文件\n",[324,122156,122157,122160],{"class":326,"line":2514},[324,122158,122159],{"class":734},"ssh",[324,122161,122162],{"class":772},"       # 远程登录\n",[324,122164,122165,122168],{"class":326,"line":3306},[324,122166,122167],{"class":734},"scp",[324,122169,122170],{"class":772},"       # 远程文件传输\n",[324,122172,122173],{"class":326,"line":3320},[324,122174,488],{"emptyLinePlaceholder":487},[324,122176,122177],{"class":326,"line":3328},[324,122178,122179],{"class":772},"# 包管理（Debian\u002FUbuntu）\n",[324,122181,122182,122184,122186],{"class":326,"line":3333},[324,122183,118085],{"class":734},[324,122185,118064],{"class":738},[324,122187,122188],{"class":772},"   # 更新软件源\n",[324,122190,122191,122193,122195],{"class":326,"line":3339},[324,122192,118085],{"class":734},[324,122194,760],{"class":738},[324,122196,122197],{"class":772},"  # 安装软件包\n",[324,122199,122200,122202,122204],{"class":326,"line":3345},[324,122201,118085],{"class":734},[324,122203,26803],{"class":738},[324,122205,122206],{"class":772},"   # 卸载软件包\n",[192,122208,122209],{"start":203},[195,122210,122211],{},"KDE Dolphin 以root打开",[19,122213,122214],{},"kde5",[316,122216,122218],{"className":725,"code":122217,"language":727,"meta":50,"style":50},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=5 KDE_FULL_SESSION=true dolphin\n",[269,122219,122220],{"__ignoreMap":50},[324,122221,122222,122225,122228,122231,122233,122235,122238,122241,122243,122246,122248],{"class":326,"line":327},[324,122223,122224],{"class":734},"pkexec",[324,122226,122227],{"class":738}," env",[324,122229,122230],{"class":738}," DISPLAY=",[324,122232,28865],{"class":867},[324,122234,28923],{"class":738},[324,122236,122237],{"class":867},"$XAUTHORITY ",[324,122239,122240],{"class":738},"KDE_SESSION_VERSION=",[324,122242,1183],{"class":916},[324,122244,122245],{"class":738}," KDE_FULL_SESSION=",[324,122247,2094],{"class":916},[324,122249,122250],{"class":738}," dolphin\n",[19,122252,122253],{},"kde6",[316,122255,122257],{"className":725,"code":122256,"language":727,"meta":50,"style":50},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=6 KDE_FULL_SESSION=true dolphin\n",[269,122258,122259],{"__ignoreMap":50},[324,122260,122261,122263,122265,122267,122269,122271,122273,122275,122277,122279,122281],{"class":326,"line":327},[324,122262,122224],{"class":734},[324,122264,122227],{"class":738},[324,122266,122230],{"class":738},[324,122268,28865],{"class":867},[324,122270,28923],{"class":738},[324,122272,122237],{"class":867},[324,122274,122240],{"class":738},[324,122276,1208],{"class":916},[324,122278,122245],{"class":738},[324,122280,2094],{"class":916},[324,122282,122250],{"class":738},[775,122284,122285],{},"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":50,"searchDepth":203,"depth":203,"links":122287},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch4-()",{"title":121947,"description":791},"wiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累)","-0A6CbI0z8eUQ30QPo9buhLpXQXBgXgQ7JWiF4O_YiE",{"id":122294,"title":122295,"body":122296,"description":791,"extension":792,"meta":122310,"navigation":487,"path":122311,"seo":122312,"stem":122313,"__hash__":122314},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置.md","5. 各种环境配置",{"type":7,"value":122297,"toc":122308},[122298,122301],[10,122299,122295],{"id":122300},"_5-各种环境配置",[19,122302,122303],{},[25,122304,122307],{"href":122305,"rel":122306},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FFQszwXIR5iQgCfk7pRwc9rYpnqg",[29],"电控组环境搭建大全",{"title":50,"searchDepth":203,"depth":203,"links":122309},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch5",{"title":122295,"description":791},"wiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置","yOHCbneTdzOs8sgJI44X3D1tralTicDJM2N-2uZmoZQ",{"id":122316,"title":122317,"body":122318,"description":791,"extension":792,"meta":122666,"navigation":487,"path":122667,"seo":122668,"stem":122669,"__hash__":122670},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能.md","6. 拓展功能",{"type":7,"value":122319,"toc":122658},[122320,122323,122327,122331,122335,122340,122347,122351,122644,122648,122655],[10,122321,122317],{"id":122322},"_6-拓展功能",[14,122324,122326],{"id":122325},"_61-wine","6.1 Wine",[14,122328,122330],{"id":122329},"_62-android","6.2 Android",[35,122332,122334],{"id":122333},"_621-i卡a卡","6.2.1 I卡、A卡",[192,122336,122337],{},[195,122338,122339],{},"Wayland-Waydroid(体验超级好)",[19,122341,122342,122343],{},"Waydroid 官网与安装指南：",[25,122344,122345],{"href":122345,"rel":122346},"https:\u002F\u002Fwaydro.id\u002F",[29],[35,122348,122350],{"id":122349},"_622-n卡so-nvidia-fxxk-u","6.2.2 N卡(So Nvidia Fxxk U!)",[192,122352,122353],{},[195,122354,122355,122356,122358,122359,122363,122365,122368,122373,122570],{},"QEMU-KVM虚拟机 + BlissOS-X86",[54438,122357],{},"BlissOS 官网下载：",[25,122360,122361],{"href":122361,"rel":122362},"https:\u002F\u002Fblissos.org\u002F",[29],[54438,122364],{},[48,122366],{"alt":50,"src":122367},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-088.png",[192,122369,122370],{"start":338},[195,122371,122372],{},"比较推荐的配置",[316,122374,122376],{"className":725,"code":122375,"language":727,"meta":50,"style":50},"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",[269,122377,122378,122385,122395,122405,122415,122427,122437,122444,122454,122463,122472,122482,122492,122501,122511,122521,122533,122543,122552,122562],{"__ignoreMap":50},[324,122379,122380,122383],{"class":326,"line":327},[324,122381,122382],{"class":734},"qemu-system-x86_64",[324,122384,25402],{"class":916},[324,122386,122387,122390,122393],{"class":326,"line":203},[324,122388,122389],{"class":916},"        -M",[324,122391,122392],{"class":738}," q35,vmport=off",[324,122394,25402],{"class":916},[324,122396,122397,122400,122403],{"class":326,"line":338},[324,122398,122399],{"class":916},"        -accel",[324,122401,122402],{"class":738}," kvm",[324,122404,25402],{"class":916},[324,122406,122407,122410,122413],{"class":326,"line":344},[324,122408,122409],{"class":916},"        -cpu",[324,122411,122412],{"class":738}," qemu64,+sse3,+sse4.2",[324,122414,25402],{"class":916},[324,122416,122417,122420,122423,122425],{"class":326,"line":484},[324,122418,122419],{"class":916},"        -smp",[324,122421,122422],{"class":738}," 8,cores=",[324,122424,1157],{"class":916},[324,122426,25402],{"class":916},[324,122428,122429,122432,122435],{"class":326,"line":491},[324,122430,122431],{"class":916},"        -m",[324,122433,122434],{"class":738}," 6G",[324,122436,25402],{"class":916},[324,122438,122439,122442],{"class":326,"line":496},[324,122440,122441],{"class":916},"        -usb",[324,122443,25402],{"class":916},[324,122445,122446,122449,122452],{"class":326,"line":502},[324,122447,122448],{"class":916},"        -device",[324,122450,122451],{"class":738}," virtio-tablet",[324,122453,25402],{"class":916},[324,122455,122456,122458,122461],{"class":326,"line":508},[324,122457,122448],{"class":916},[324,122459,122460],{"class":738}," virtio-keyboard",[324,122462,25402],{"class":916},[324,122464,122465,122467,122470],{"class":326,"line":514},[324,122466,122448],{"class":916},[324,122468,122469],{"class":738}," usb-tablet",[324,122471,25402],{"class":916},[324,122473,122474,122477,122480],{"class":326,"line":2343},[324,122475,122476],{"class":916},"        -bios",[324,122478,122479],{"class":738}," OVMF-pure-efi64.fd",[324,122481,25402],{"class":916},[324,122483,122484,122487,122490],{"class":326,"line":2348},[324,122485,122486],{"class":916},"        -net",[324,122488,122489],{"class":738}," user,hostfwd=tcp::5555-:5555,hostfwd=tcp::8022-:8022",[324,122491,25402],{"class":916},[324,122493,122494,122496,122499],{"class":326,"line":2354},[324,122495,122486],{"class":916},[324,122497,122498],{"class":738}," nic,model=virtio",[324,122500,25402],{"class":916},[324,122502,122503,122506,122509],{"class":326,"line":2359},[324,122504,122505],{"class":916},"        -audio",[324,122507,122508],{"class":738}," sdl,model=hda",[324,122510,25402],{"class":916},[324,122512,122513,122516,122519],{"class":326,"line":2373},[324,122514,122515],{"class":916},"        -display",[324,122517,122518],{"class":738}," sdl,gl=on,show-cursor=on",[324,122520,25402],{"class":916},[324,122522,122523,122525,122528,122531],{"class":326,"line":2378},[324,122524,122448],{"class":916},[324,122526,122527],{"class":738}," virtio-vga-gl,xres=1920,yres=",[324,122529,122530],{"class":916},"1080",[324,122532,25402],{"class":916},[324,122534,122535,122538,122541],{"class":326,"line":2384},[324,122536,122537],{"class":916},"        -drive",[324,122539,122540],{"class":738}," file=disk.qcow2,media=disk,if=virtio,cache=writeback",[324,122542,25402],{"class":916},[324,122544,122545,122547,122550],{"class":326,"line":2405},[324,122546,122537],{"class":916},[324,122548,122549],{"class":738}," file=Bliss-v16.9.7-x86_64-OFFICIAL-gapps-20240911.iso,media=cdrom",[324,122551,25402],{"class":916},[324,122553,122554,122557,122560],{"class":326,"line":2410},[324,122555,122556],{"class":916},"        -monitor",[324,122558,122559],{"class":738}," stdio",[324,122561,25402],{"class":916},[324,122563,122564,122567],{"class":326,"line":2424},[324,122565,122566],{"class":916},"        -serial",[324,122568,122569],{"class":738}," none\n",[192,122571,122572],{"start":484},[195,122573,122574,122575],{},"常用操作：",[192,122576,122577,122580,122636],{},[195,122578,122579],{},"全屏：Ctrl+Alt+F",[195,122581,122582,122583,122588],{},"adb调试",[192,122584,122585],{},[195,122586,122587],{},"使Linux与Android用ADB连接。",[316,122589,122591],{"className":725,"code":122590,"language":727,"meta":50,"style":50},"# 连接安卓\nadb connect 127.0.0.1\n# 打开shell\nadb -s 127.0.0.1:5555 shell\n# 使用root权限\nsu\n",[269,122592,122593,122598,122609,122614,122626,122631],{"__ignoreMap":50},[324,122594,122595],{"class":326,"line":327},[324,122596,122597],{"class":772},"# 连接安卓\n",[324,122599,122600,122603,122606],{"class":326,"line":203},[324,122601,122602],{"class":734},"adb",[324,122604,122605],{"class":738}," connect",[324,122607,122608],{"class":916}," 127.0.0.1\n",[324,122610,122611],{"class":326,"line":338},[324,122612,122613],{"class":772},"# 打开shell\n",[324,122615,122616,122618,122620,122623],{"class":326,"line":344},[324,122617,122602],{"class":734},[324,122619,27605],{"class":916},[324,122621,122622],{"class":738}," 127.0.0.1:5555",[324,122624,122625],{"class":738}," shell\n",[324,122627,122628],{"class":326,"line":484},[324,122629,122630],{"class":772},"# 使用root权限\n",[324,122632,122633],{"class":326,"line":491},[324,122634,122635],{"class":734},"su\n",[195,122637,122638,122639],{},"中文输入法",[192,122640,122641],{},[195,122642,122643],{},"可以下载google输入法：按Shift+space进行中英文切换（这样有效防止与linux本机的中英文切换冲突）",[14,122645,122647],{"id":122646},"_63-好看点的uefi启动界面refind","6.3 好看点的UEFI启动界面rEFInd",[19,122649,122650,122651],{},"rEFInd 官网与文档：",[25,122652,122653],{"href":122653,"rel":122654},"https:\u002F\u002Fwww.rodsbooks.com\u002Frefind\u002F",[29],[775,122656,122657],{},"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":50,"searchDepth":203,"depth":203,"links":122659},[122660,122661,122665],{"id":122325,"depth":203,"text":122326},{"id":122329,"depth":203,"text":122330,"children":122662},[122663,122664],{"id":122333,"depth":338,"text":122334},{"id":122349,"depth":338,"text":122350},{"id":122646,"depth":203,"text":122647},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch6",{"title":122317,"description":791},"wiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能","QYYeVozwQSLjdsxnTnMgRQGi_b8v38BhBh0gp8PtboY",{"id":122672,"title":122673,"body":122674,"description":791,"extension":792,"meta":125973,"navigation":487,"path":125974,"seo":125975,"stem":125976,"__hash__":125977},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作.md","7. 其他操作",{"type":7,"value":122675,"toc":125947},[122676,122679,122683,122686,122693,122943,122946,123018,123021,123025,123029,123034,123037,123040,123043,123048,123051,123054,123057,123062,123065,123070,123073,123076,123081,123084,123089,123092,123096,123100,123103,123108,123111,123125,123128,123131,123140,123143,123152,123155,123158,123167,123170,123179,123182,123185,123194,123197,123200,123215,123218,123221,123230,123235,123238,123241,123250,123253,123262,123265,123274,123277,123286,123291,123294,123302,123307,123310,123319,123322,123330,123335,123338,123347,123350,123353,123357,123360,123365,123368,123373,123387,123392,123397,123408,123413,123419,123424,123439,123444,123447,123452,123457,123462,123470,123475,123482,123487,123498,123503,123506,123510,123513,123516,123521,123524,123543,123548,123551,123560,123565,123568,123590,123593,123623,123626,123631,123634,123648,123653,123672,123675,123678,123683,123695,123700,123705,123708,123713,123716,123731,123734,123739,123744,123748,123753,123793,123796,123800,123806,123812,123817,123820,123827,123832,123839,123842,123845,123852,123866,123869,123929,123932,123946,123958,123961,123964,123967,124031,124034,124037,124040,124060,124063,124068,124075,124079,124082,124086,124091,124096,124100,124103,124106,124148,124153,124156,124178,124193,124195,124200,124212,124272,124274,124276,124330,124332,124334,124340,124345,124348,124353,124357,124360,124422,124427,124430,124432,124436,124448,124530,124532,124534,124588,124594,124596,124600,124605,124607,124612,124616,124636,124671,124675,124678,124681,124684,124691,124694,124706,124709,124724,124727,124746,124794,124797,124814,124817,124831,124836,124839,124848,124863,124875,124913,124918,124927,124932,124937,124963,124972,124976,124980,124985,124988,124992,124996,125001,125004,125009,125012,125017,125020,125025,125028,125032,125037,125040,125045,125048,125052,125057,125060,125065,125068,125073,125076,125080,125085,125088,125093,125096,125101,125104,125108,125113,125116,125121,125124,125129,125132,125137,125140,125145,125148,125153,125156,125160,125165,125168,125173,125180,125184,125189,125192,125197,125200,125204,125209,125212,125215,125218,125221,125224,125228,125231,125241,125246,125251,125273,125278,125283,125290,125294,125299,125302,125305,125310,125313,125316,125319,125322,125325,125328,125331,125334,125337,125340,125343,125346,125351,125356,125361,125366,125371,125376,125381,125384,125388,125391,125395,125400,125405,125410,125415,125419,125425,125433,125438,125441,125446,125461,125464,125469,125503,125518,125521,125576,125602,125614,125617,125626,125629,125644,125649,125652,125658,125663,125666,125671,125674,125679,125684,125691,125694,125709,125712,125747,125752,125760,125798,125801,125804,125809,125812,125817,125828,125862,125867,125870,125879,125884,125890,125893,125898,125907,125912,125915,125918,125923,125931,125934,125939,125944],[10,122677,122673],{"id":122678},"_7-其他操作",[14,122680,122682],{"id":122681},"_71-工控机如何连wifi","7.1 工控机如何连wifi",[19,122684,122685],{},"当我们工控机从一个环境移动到另一个环境，且新的环境的wifi我们没有连接过，我们没有屏幕如何让工控机连上网呢？",[19,122687,122688,122689,122692],{},"进入工控机的硬盘目录，进入",[269,122690,122691],{},"\u002Fetc\u002Fnetplan\u002F","，底下有很多yaml,找到一个最符合下方格式的yaml:",[316,122694,122698],{"className":122695,"code":122696,"language":122697,"meta":50,"style":50},"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",[269,122699,122700,122708,122719,122726,122733,122745,122752,122764,122775,122786,122793,122800,122807,122819,122831,122838,122850,122862,122869,122881,122893,122905,122916,122923,122934],{"__ignoreMap":50},[324,122701,122702,122705],{"class":326,"line":327},[324,122703,122704],{"class":52022},"network",[324,122706,122707],{"class":867},": \n",[324,122709,122710,122713,122715,122717],{"class":326,"line":203},[324,122711,122712],{"class":52022},"  version",[324,122714,52159],{"class":867},[324,122716,944],{"class":916},[324,122718,3403],{"class":867},[324,122720,122721,122724],{"class":326,"line":338},[324,122722,122723],{"class":52022},"  wifis",[324,122725,122707],{"class":867},[324,122727,122728,122731],{"class":326,"line":344},[324,122729,122730],{"class":52022},"    NM-6f414fe0-2658-48ff-89ee-c7981b87bc96",[324,122732,122707],{"class":867},[324,122734,122735,122738,122740,122743],{"class":326,"line":484},[324,122736,122737],{"class":52022},"      renderer",[324,122739,52159],{"class":867},[324,122741,122742],{"class":738},"NetworkManager",[324,122744,3403],{"class":867},[324,122746,122747,122750],{"class":326,"line":491},[324,122748,122749],{"class":52022},"      match",[324,122751,122707],{"class":867},[324,122753,122754,122757,122759,122762],{"class":326,"line":496},[324,122755,122756],{"class":52022},"        name",[324,122758,52159],{"class":867},[324,122760,122761],{"class":738},"\"wlan0\"",[324,122763,3403],{"class":867},[324,122765,122766,122769,122771,122773],{"class":326,"line":502},[324,122767,122768],{"class":52022},"      dhcp4",[324,122770,52159],{"class":867},[324,122772,2094],{"class":916},[324,122774,3403],{"class":867},[324,122776,122777,122780,122782,122784],{"class":326,"line":508},[324,122778,122779],{"class":52022},"      dhcp6",[324,122781,52159],{"class":867},[324,122783,2094],{"class":916},[324,122785,3403],{"class":867},[324,122787,122788,122791],{"class":326,"line":514},[324,122789,122790],{"class":52022},"      access-points",[324,122792,122707],{"class":867},[324,122794,122795,122798],{"class":326,"line":2343},[324,122796,122797],{"class":738},"        \"EMIS_Vinci_Robocon_5G\"",[324,122799,122707],{"class":867},[324,122801,122802,122805],{"class":326,"line":2348},[324,122803,122804],{"class":52022},"          auth",[324,122806,122707],{"class":867},[324,122808,122809,122812,122814,122817],{"class":326,"line":2354},[324,122810,122811],{"class":52022},"            key-management",[324,122813,52159],{"class":867},[324,122815,122816],{"class":738},"\"psk\"",[324,122818,3403],{"class":867},[324,122820,122821,122824,122826,122829],{"class":326,"line":2359},[324,122822,122823],{"class":52022},"            password",[324,122825,52159],{"class":867},[324,122827,122828],{"class":738},"\"vinci666\"",[324,122830,3403],{"class":867},[324,122832,122833,122836],{"class":326,"line":2373},[324,122834,122835],{"class":52022},"          networkmanager",[324,122837,122707],{"class":867},[324,122839,122840,122843,122845,122848],{"class":326,"line":2378},[324,122841,122842],{"class":52022},"            uuid",[324,122844,52159],{"class":867},[324,122846,122847],{"class":738},"\"6f414fe0-2658-48ff-89ee-c7981b87bc96\"",[324,122849,3403],{"class":867},[324,122851,122852,122855,122857,122860],{"class":326,"line":2384},[324,122853,122854],{"class":52022},"            name",[324,122856,52159],{"class":867},[324,122858,122859],{"class":738},"\"EMIS_Vinci_Robocon_5G\"",[324,122861,3403],{"class":867},[324,122863,122864,122867],{"class":326,"line":2405},[324,122865,122866],{"class":52022},"            passthrough",[324,122868,122707],{"class":867},[324,122870,122871,122874,122876,122879],{"class":326,"line":2410},[324,122872,122873],{"class":52022},"              wifi-security.auth-alg",[324,122875,52159],{"class":867},[324,122877,122878],{"class":738},"\"open\"",[324,122880,3403],{"class":867},[324,122882,122883,122886,122888,122891],{"class":326,"line":2424},[324,122884,122885],{"class":52022},"              ipv6.addr-gen-mode",[324,122887,52159],{"class":867},[324,122889,122890],{"class":738},"\"default\"",[324,122892,3403],{"class":867},[324,122894,122895,122898,122900,122903],{"class":326,"line":2429},[324,122896,122897],{"class":52022},"              ipv6.ip6-privacy",[324,122899,52159],{"class":867},[324,122901,122902],{"class":738},"\"-1\"",[324,122904,3403],{"class":867},[324,122906,122907,122910,122912,122914],{"class":326,"line":2458},[324,122908,122909],{"class":52022},"              proxy._",[324,122911,52159],{"class":867},[324,122913,8381],{"class":738},[324,122915,3403],{"class":867},[324,122917,122918,122921],{"class":326,"line":2463},[324,122919,122920],{"class":52022},"      networkmanager",[324,122922,122707],{"class":867},[324,122924,122925,122928,122930,122932],{"class":326,"line":2480},[324,122926,122927],{"class":52022},"        uuid",[324,122929,52159],{"class":867},[324,122931,122847],{"class":738},[324,122933,3403],{"class":867},[324,122935,122936,122938,122940],{"class":326,"line":2485},[324,122937,122756],{"class":52022},[324,122939,52159],{"class":867},[324,122941,122942],{"class":738},"\"EMIS_Vinci_Robocon_5G\"\n",[19,122944,122945],{},"将其改为新wifi的名和密码：",[316,122947,122949],{"className":122695,"code":122948,"language":122697,"meta":50,"style":50},"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",[269,122950,122951,122957,122966,122972,122979,122988,122996,123002,123008],{"__ignoreMap":50},[324,122952,122953,122955],{"class":326,"line":327},[324,122954,122704],{"class":52022},[324,122956,4468],{"class":867},[324,122958,122959,122961,122963],{"class":326,"line":203},[324,122960,122712],{"class":52022},[324,122962,52159],{"class":867},[324,122964,122965],{"class":916},"2\n",[324,122967,122968,122970],{"class":326,"line":338},[324,122969,122723],{"class":52022},[324,122971,4468],{"class":867},[324,122973,122974,122977],{"class":326,"line":344},[324,122975,122976],{"class":52022},"    wlan0",[324,122978,4468],{"class":867},[324,122980,122981,122983,122985],{"class":326,"line":484},[324,122982,122768],{"class":52022},[324,122984,52159],{"class":867},[324,122986,122987],{"class":916},"true\n",[324,122989,122990,122992,122994],{"class":326,"line":491},[324,122991,122779],{"class":52022},[324,122993,52159],{"class":867},[324,122995,122987],{"class":916},[324,122997,122998,123000],{"class":326,"line":496},[324,122999,122790],{"class":52022},[324,123001,4468],{"class":867},[324,123003,123004,123006],{"class":326,"line":502},[324,123005,122797],{"class":738},[324,123007,4468],{"class":867},[324,123009,123010,123013,123015],{"class":326,"line":508},[324,123011,123012],{"class":52022},"          password",[324,123014,52159],{"class":867},[324,123016,123017],{"class":738},"\"vinci666\"\n",[19,123019,123020],{},"工控机开机即可连上网。",[14,123022,123024],{"id":123023},"_72-ssh远程开发","7.2 SSH远程开发",[35,123026,123028],{"id":123027},"_721-环境准备","7.2.1 环境准备",[19,123030,123031],{},[116,123032,123033],{},"1.硬件准备",[19,123035,123036],{},"首先要有一台工控机（X68小型电脑，专业工控机，树莓派等等）。",[19,123038,123039],{},"控制系统的硬件载体是具有多样性的，常用的多是基于ARM、x86等架构的处理器，比如：PC、工控机、树莓派、NVIDIA Jetson...。不同的处理器都存在一定的优缺点，PC和工控机，处理器性能强大，但是功耗高、体积大、灵活性差，嵌入式系统则反之。对于我们而言，可以根据机器人平台的电气、载重、空间以及用途等诸多要素自主选择合适的控制系统。",[19,123041,123042],{},"无论选用何种处理器，只要是要进行机器人的开发，安装了ROS或者ROS2，那么对于开发人员而言，在使用上，没有任何本质的区别，或者换言之，作为软件工程师，部分场景下无需关注于硬件的选型。",[19,123044,123045],{},[116,123046,123047],{},"2.设置固定IP",[19,123049,123050],{},"远程连接时，不管使用何种工具，需要根据IP地址定位到被连接的主机，再通过账号和密码登录该主机，因此，我们需要先获取该IP地址。并且每次连接时，都需要使用到IP，为了保证连接的便利性和稳定性，最好将被连接主机的IP地址设置为固定IP，具体操作如下。",[19,123052,123053],{},"1.进入设置界面",[19,123055,123056],{},"启动被连接的主机（启动时需要连接显示器或使用HDMI采集卡，并且配置完SSH远程访问之后，可以不再使用显示器或HDMI采集卡），并进入设置界面。",[19,123058,123059],{},[48,123060],{"alt":50,"src":123061},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-089.png",[19,123063,123064],{},"2.配置所连接的网络",[19,123066,123067],{},[48,123068],{"alt":50,"src":123069},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-090.png",[19,123071,123072],{},"3.设置固定IP",[19,123074,123075],{},"查看当前IP地址。",[19,123077,123078],{},[48,123079],{"alt":50,"src":123080},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-091.png",[19,123082,123083],{},"设置固定IP。",[19,123085,123086],{},[48,123087],{"alt":50,"src":123088},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-092.png",[19,123090,123091],{},"至此，IP配置完毕。",[35,123093,123095],{"id":123094},"_722-环境搭建","7.2.2 环境搭建",[19,123097,123098],{},[116,123099,26477],{},[19,123101,123102],{},"SSH（Secure Shell）是一种通用的、功能强大的、基于软件的网络安全解决方案。计算机每次向网络发送数据时，SSH都会自动对其进行加密。数据到达目的地时，SSH自动对加密数据进行解密。整个过程都是透明的，使用OpenSSH工具将会增进你的系统安全性。SSH安装容易、使用简单。",[19,123104,123105],{},[116,123106,123107],{},"实现",[19,123109,123110],{},"SSH实现架构上分为客户端和服务器端两大部分，客户端是数据的发送方，服务端是数据的接收方，当前场景下，我们需要从本地主机发送数据到远程主机，那么本地主机需要安装并启动SSH客户端，而远程主机则需要安装并启动SSH服务端，整个实现具体流程如下：",[192,123112,123113,123116,123119,123122],{},[195,123114,123115],{},"本地主机安装SSH客户端，远程主机安装SSH服务端；",[195,123117,123118],{},"远程主机启动SSH服务；",[195,123120,123121],{},"本地主机登陆远程主机；",[195,123123,123124],{},"实现数据传输。",[19,123126,123127],{},"1.安装SSH客户端与服务端",[19,123129,123130],{},"默认情况下，Ubuntu系统已经安装了SSH客户端，因此只需要在远程主机安装SSH服务端即可，安装命令如下：",[316,123132,123134],{"className":121328,"code":123133,"language":121330,"meta":121331,"style":50}," sudo apt install openssh-server\n",[269,123135,123136],{"__ignoreMap":50},[324,123137,123138],{"class":326,"line":327},[324,123139,123133],{},[19,123141,123142],{},"如果SSH客户端需要自行安装，那么调用如下命令:",[316,123144,123146],{"className":121328,"code":123145,"language":121330,"meta":121331,"style":50},"sudo apt install openssh-client\n",[269,123147,123148],{"__ignoreMap":50},[324,123149,123150],{"class":326,"line":327},[324,123151,123145],{},[19,123153,123154],{},"2.远程主机启动SSH服务",[19,123156,123157],{},"远程主机启动 ssh 服务命令如下：",[316,123159,123161],{"className":121328,"code":123160,"language":121330,"meta":121331,"style":50},"sudo \u002Fetc\u002Finit.d\u002Fssh start\n",[269,123162,123163],{"__ignoreMap":50},[324,123164,123165],{"class":326,"line":327},[324,123166,123160],{},[19,123168,123169],{},"启动后可使用如下命令查看服务是否正常运行：",[316,123171,123173],{"className":121328,"code":123172,"language":121330,"meta":121331,"style":50},"ps -e | grep ssh\n",[269,123174,123175],{"__ignoreMap":50},[324,123176,123177],{"class":326,"line":327},[324,123178,123172],{},[19,123180,123181],{},"如果启动成功，会包含 sshd 程序。",[19,123183,123184],{},"以后需要频繁的使用ssh远程登录，为了简化实现，可以将远程主机的ssh服务设置为开机自启动，命令如下：",[316,123186,123188],{"className":121328,"code":123187,"language":121330,"meta":121331,"style":50},"sudo systemctl enable ssh\n",[269,123189,123190],{"__ignoreMap":50},[324,123191,123192],{"class":326,"line":327},[324,123193,123187],{},[19,123195,123196],{},"3.本地远程登录",[19,123198,123199],{},"登录远程主机可以调用如下命令:",[316,123201,123203],{"className":725,"code":123202,"language":727,"meta":50,"style":50},"ssh -X 用户名@ip地址\n",[269,123204,123205],{"__ignoreMap":50},[324,123206,123207,123209,123212],{"class":326,"line":327},[324,123208,122159],{"class":734},[324,123210,123211],{"class":916}," -X",[324,123213,123214],{"class":738}," 用户名@ip地址\n",[19,123216,123217],{},"然后根据提示，录入登陆密码，即可成功登录。",[19,123219,123220],{},"如果退出，可以调用exit命令：",[316,123222,123224],{"className":121328,"code":123223,"language":121330,"meta":121331,"style":50},"exit\n",[269,123225,123226],{"__ignoreMap":50},[324,123227,123228],{"class":326,"line":327},[324,123229,123223],{},[19,123231,123232],{},[116,123233,123234],{},"4.实现数据传输",[19,123236,123237],{},"通过SSH在本地主机只需调用相关指令，便可方便的实现与远程主机的数据上传或下载，指令格式如下所示：",[19,123239,123240],{},"上传文件指令格式如下：",[316,123242,123244],{"className":121328,"code":123243,"language":121330,"meta":121331,"style":50},"scp 本地文件路径 账号@ip:路径\n",[269,123245,123246],{"__ignoreMap":50},[324,123247,123248],{"class":326,"line":327},[324,123249,123243],{},[19,123251,123252],{},"上传文件夹指令格式如下：",[316,123254,123256],{"className":121328,"code":123255,"language":121330,"meta":121331,"style":50},"scp -r 本地文件夹路径 账号@ip:路径\n",[269,123257,123258],{"__ignoreMap":50},[324,123259,123260],{"class":326,"line":327},[324,123261,123255],{},[19,123263,123264],{},"下载文件指令格式如下：",[316,123266,123268],{"className":121328,"code":123267,"language":121330,"meta":121331,"style":50},"scp 账号@ip:路径 本地文件夹路径\n",[269,123269,123270],{"__ignoreMap":50},[324,123271,123272],{"class":326,"line":327},[324,123273,123267],{},[19,123275,123276],{},"下载文件夹指令格式如下：",[316,123278,123280],{"className":121328,"code":123279,"language":121330,"meta":121331,"style":50},"scp -r 账号@ip:路径 本地文件夹路径\n",[269,123281,123282],{"__ignoreMap":50},[324,123283,123284],{"class":326,"line":327},[324,123285,123279],{},[19,123287,123288],{},[116,123289,123290],{},"优化",[19,123292,123293],{},"每次远程登录时，都需要输入密码，使用不方便，可以借助密钥简化登录过程，实现免密登录，提高操作效率。实现思想是：生成一对公钥私钥，私钥存储在本地，公钥上传至服务器，每次登录时，本地直接上传私钥到服务器，服务器有匹配的公钥就认为是合法用户，直接创建SSH连接即可。具体实现步骤只有两步：",[192,123295,123296,123299],{},[195,123297,123298],{},"本地生成密钥对；",[195,123300,123301],{},"将公钥上传至远程主机。",[19,123303,123304],{},[116,123305,123306],{},"1.生成密钥对",[19,123308,123309],{},"本地客户端生成公私钥：（一路回车默认即可）",[316,123311,123313],{"className":121328,"code":123312,"language":121330,"meta":121331,"style":50},"ssh-keygen\n",[269,123314,123315],{"__ignoreMap":50},[324,123316,123317],{"class":326,"line":327},[324,123318,123312],{},[19,123320,123321],{},"上面这个命令会在用户目录.ssh文件夹下创建公私钥：",[192,123323,123324,123327],{},[195,123325,123326],{},"id_rsa （私钥）；",[195,123328,123329],{},"id_rsa.pub (公钥)。",[19,123331,123332],{},[116,123333,123334],{},"2.公钥上传",[19,123336,123337],{},"上传指令如下：",[316,123339,123341],{"className":121328,"code":123340,"language":121330,"meta":121331,"style":50},"ssh-copy-id -i ~\u002F.ssh\u002Fid_rsa.pub 账号@ip\n",[269,123342,123343],{"__ignoreMap":50},[324,123344,123345],{"class":326,"line":327},[324,123346,123340],{},[19,123348,123349],{},"上面这条指令是将本地公钥上传到远程主机的ssh目录下，该目录下有文件authorized_keys保存了公钥内容。",[19,123351,123352],{},"以后再远程登录就无需录入密码了。",[35,123354,123356],{"id":123355},"_723-使用vscode优化","7.2.3 使用VScode优化",[19,123358,123359],{},"上一节，我们介绍了ssh远程连接的使用，但是如果只是纯粹使用ssh也存在一些不足，比如：编辑文件内容时，需要使用vi编辑器，且在一个终端内，无法同时编辑多个文件。本节将介绍一更为实用的功能——VSCode结合插件实现远程开发，这使我们可以以图形化的方式实现远程开发，比ssh的使用更方便快捷，可以大大的提高程序开发效率。",[19,123361,123362],{},[116,123363,123364],{},"1.准备工作",[19,123366,123367],{},"VScode远程开发依赖于ssh，请首先按照上一节内容配置ssh远程连接。",[19,123369,123370],{},[116,123371,123372],{},"2.为VScode安装远程开发插件",[19,123374,123375,123376,123379,123380,123383,123384,29107],{},"启动VScode，首先点击侧边栏的扩展按钮，然后在",[269,123377,123378],{},"扩展：商店","的搜索栏输入",[269,123381,123382],{},"Remote Development","并点击同名插件，最后在右侧显示区中点击",[269,123385,123386],{},"安装",[19,123388,123389],{},[48,123390],{"alt":50,"src":123391},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-093.png",[19,123393,123394],{},[116,123395,123396],{},"3.配置远程连接",[19,123398,123399,123400,123403,123404,123407],{},"步骤1：使用快捷键",[269,123401,123402],{},"ctrl + shift + p","打开命令输入窗口，并输入",[269,123405,123406],{},"Remote-SSH:Connect to Host...","，弹出列表中选择与之同名的选项。",[19,123409,123410],{},[48,123411],{"alt":50,"src":123412},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-094.png",[19,123414,123415,123416,29107],{},"步骤2：步骤1完成将弹出一个新的命令窗口如下，选择下拉列表中的 ",[269,123417,123418],{},"Add New SSH Host",[19,123420,123421],{},[48,123422],{"alt":50,"src":123423},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-095.png",[19,123425,123426,123427,123430,123431,123434,123435,123438],{},"步骤3：步骤2完成又将弹出一个新的命令窗口，在其中输入：",[269,123428,123429],{},"ssh +X ubuntu@192.168.43.164","，其中，",[269,123432,123433],{},"ubuntu","需要替换为你的登录用户名，",[269,123436,123437],{},"192.18.43.164"," 则替换为被远程连接主机的ip地址。",[19,123440,123441],{},[48,123442],{"alt":50,"src":123443},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-096.png",[19,123445,123446],{},"步骤4：选择步骤3完成后的弹窗列表中的第一个选项(或直接回车)，即可完成配置，配置成功后会有提示信息。",[19,123448,123449],{},[48,123450],{"alt":50,"src":123451},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-097.png",[19,123453,123454],{},[48,123455],{"alt":50,"src":123456},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-098.png",[19,123458,123459],{},[116,123460,123461],{},"4.使用",[19,123463,123464,123465,123403,123467,123469],{},"步骤1：继续使用快捷键",[269,123466,123402],{},[269,123468,123406],{},"，此时列表中将显示步骤3中配置的ip地址，直接选择，选择后，VScode将打开一个新的窗口。",[19,123471,123472],{},[48,123473],{"alt":50,"src":123474},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-099.png",[19,123476,123477,123478,123481],{},"或者，也可以点击侧边栏的",[269,123479,123480],{},"远程资源管理器","，在弹出的服务器列表中选择要连接的服务器，并右击，选择在本窗口或新窗口中实现远程连接。",[19,123483,123484],{},[48,123485],{"alt":50,"src":123486},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-100.png",[19,123488,123489,123490,123493,123494,123497],{},"步骤2：选择菜单栏的",[269,123491,123492],{},"文件","下的",[269,123495,123496],{},"打开文件夹","，在弹窗列表中选择需要打开的文件夹并点击确定即可。",[19,123499,123500],{},[48,123501],{"alt":50,"src":123502},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-101.png",[19,123504,123505],{},"最终，我们就可以像操作本地文件一样实现远程开发了。",[14,123507,123509],{"id":123508},"_73-远程桌面","7.3 远程桌面",[19,123511,123512],{},"因为用X11转发效率太低太低，所以还是要选用远程访问桌面的形式来看Rviz2和Gazebo等等（如果有需求的话）",[19,123514,123515],{},"我们选择使用VNC来看。",[192,123517,123518],{},[195,123519,123520],{},"安装VNC服务器：",[19,123522,123523],{},"这里以TigerVNC为例进行安装：",[316,123525,123527],{"className":725,"code":123526,"language":727,"meta":50,"style":50},"sudo apt install tigervnc-standalone-server tigervnc-common\n",[269,123528,123529],{"__ignoreMap":50},[324,123530,123531,123533,123535,123537,123540],{"class":326,"line":327},[324,123532,735],{"class":734},[324,123534,739],{"class":738},[324,123536,760],{"class":738},[324,123538,123539],{"class":738}," tigervnc-standalone-server",[324,123541,123542],{"class":738}," tigervnc-common\n",[192,123544,123545],{"start":203},[195,123546,123547],{},"设置VNC密码：",[19,123549,123550],{},"为VNC用户设置密码，运行以下命令：",[316,123552,123554],{"className":725,"code":123553,"language":727,"meta":50,"style":50},"vncpasswd\n",[269,123555,123556],{"__ignoreMap":50},[324,123557,123558],{"class":326,"line":327},[324,123559,123553],{"class":734},[192,123561,123562],{"start":338},[195,123563,123564],{},"配置VNC启动脚本:",[19,123566,123567],{},"创建VNC配置文件，在用户家目录内的.vnc文件夹中创建启动文件：",[316,123569,123571],{"className":725,"code":123570,"language":727,"meta":50,"style":50},"mkdir -p ~\u002F.vnc\nnano ~\u002F.vnc\u002Fxstartup\n",[269,123572,123573,123582],{"__ignoreMap":50},[324,123574,123575,123577,123579],{"class":326,"line":327},[324,123576,101987],{"class":734},[324,123578,29938],{"class":916},[324,123580,123581],{"class":738}," ~\u002F.vnc\n",[324,123583,123584,123587],{"class":326,"line":203},[324,123585,123586],{"class":734},"nano",[324,123588,123589],{"class":738}," ~\u002F.vnc\u002Fxstartup\n",[19,123591,123592],{},"在打开的编辑器里面输入以下内容（以GNOME为例）：",[316,123594,123596],{"className":725,"code":123595,"language":727,"meta":50,"style":50},"#!\u002Fbin\u002Fsh\nunset SESSION_MANAGER\nunset DBUS_SESSION_BUS_ADDRESS\ngnome-session\n",[269,123597,123598,123603,123611,123618],{"__ignoreMap":50},[324,123599,123600],{"class":326,"line":327},[324,123601,123602],{"class":772},"#!\u002Fbin\u002Fsh\n",[324,123604,123605,123608],{"class":326,"line":203},[324,123606,123607],{"class":916},"unset",[324,123609,123610],{"class":738}," SESSION_MANAGER\n",[324,123612,123613,123615],{"class":326,"line":338},[324,123614,123607],{"class":916},[324,123616,123617],{"class":738}," DBUS_SESSION_BUS_ADDRESS\n",[324,123619,123620],{"class":326,"line":344},[324,123621,123622],{"class":734},"gnome-session\n",[19,123624,123625],{},"保存并退出（在nano中按Ctrl + O保存，然后按Ctrl + X退出）。",[192,123627,123628],{"start":344},[195,123629,123630],{},"给予执行权限：",[19,123632,123633],{},"为xstartup文件设置执行权限：",[316,123635,123637],{"className":725,"code":123636,"language":727,"meta":50,"style":50},"chmod +x ~\u002F.vnc\u002Fxstartup\n",[269,123638,123639],{"__ignoreMap":50},[324,123640,123641,123643,123646],{"class":326,"line":327},[324,123642,25336],{"class":734},[324,123644,123645],{"class":738}," +x",[324,123647,123589],{"class":738},[192,123649,123650],{"start":484},[195,123651,123652],{},"启动VNC服务器：",[316,123654,123656],{"className":725,"code":123655,"language":727,"meta":50,"style":50},"vncserver -geometry 1920x1080 -localhost=0\n",[269,123657,123658],{"__ignoreMap":50},[324,123659,123660,123663,123666,123669],{"class":326,"line":327},[324,123661,123662],{"class":734},"vncserver",[324,123664,123665],{"class":916}," -geometry",[324,123667,123668],{"class":738}," 1920x1080",[324,123670,123671],{"class":916}," -localhost=0\n",[19,123673,123674],{},"geometry 选项指定窗口大小，localhost 选项设为 0 以开放连接。(设为1是只允许本地连接)",[19,123676,123677],{},"你将看到类似于:1的输出，这表示VNC会话的显示编号。例如，如果输出为:1，则VNC监听的端口为5901（5900 + 显示编号）。",[192,123679,123680],{"start":491},[195,123681,123682],{},"查看已开启的VNC服务器：",[316,123684,123686],{"className":725,"code":123685,"language":727,"meta":50,"style":50},"vncserver -list\n",[269,123687,123688],{"__ignoreMap":50},[324,123689,123690,123692],{"class":326,"line":327},[324,123691,123662],{"class":734},[324,123693,123694],{"class":916}," -list\n",[19,123696,123697],{},[48,123698],{"alt":50,"src":123699},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-102.png",[192,123701,123702],{"start":496},[195,123703,123704],{},"连接到VNC服务器：",[19,123706,123707],{},"使用VNC客户端（如vncviewer）连接到VNC服务器，输入你的服务器IP和端口。例如，如果服务器IP为192.168.31.10，且显示编号为1，你应该连接到192.168.31.10:1，或者直接输入192.168.31.10:5901。",[192,123709,123710],{"start":502},[195,123711,123712],{},"停止VNC服务器：",[19,123714,123715],{},"如果需要停止VNC服务器，可以使用以下命令：",[316,123717,123719],{"className":725,"code":123718,"language":727,"meta":50,"style":50},"vncserver -kill :1\n",[269,123720,123721],{"__ignoreMap":50},[324,123722,123723,123725,123728],{"class":326,"line":327},[324,123724,123662],{"class":734},[324,123726,123727],{"class":916}," -kill",[324,123729,123730],{"class":738}," :1\n",[19,123732,123733],{},"将:1替换为你实际使用的显示编号。",[19,123735,123736],{},[48,123737],{"alt":50,"src":123738},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-103.png",[19,123740,123741],{},[48,123742],{"alt":50,"src":123743},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-104.png",[14,123745,123747],{"id":123746},"_74-usb端口设置","7.4 USB端口设置",[19,123749,123750],{},[116,123751,123752],{},"首先先配置好权限",[316,123754,123756],{"className":725,"code":123755,"language":727,"meta":50,"style":50},"# 将用户权限提高\nsudo usermod -aG dialout $USER\nnewgrp dialout\n# 查看下面命令是否输出dialout（若输出才正常）\ngroups\n",[269,123757,123758,123763,123776,123783,123788],{"__ignoreMap":50},[324,123759,123760],{"class":326,"line":327},[324,123761,123762],{"class":772},"# 将用户权限提高\n",[324,123764,123765,123767,123769,123771,123774],{"class":326,"line":203},[324,123766,735],{"class":734},[324,123768,27296],{"class":738},[324,123770,27299],{"class":916},[324,123772,123773],{"class":738}," dialout",[324,123775,27304],{"class":867},[324,123777,123778,123780],{"class":326,"line":338},[324,123779,27323],{"class":734},[324,123781,123782],{"class":738}," dialout\n",[324,123784,123785],{"class":326,"line":344},[324,123786,123787],{"class":772},"# 查看下面命令是否输出dialout（若输出才正常）\n",[324,123789,123790],{"class":326,"line":484},[324,123791,123792],{"class":734},"groups\n",[19,123794,123795],{},"因为我们插拔USB设备，他的端口号可能会一直变，所以我们要给他的tty起一个固定的别名。",[35,123797,123799],{"id":123798},"_741-根据usb设备绑定端口多个不同设备","7.4.1 根据USB设备绑定端口(多个不同设备)",[19,123801,123802,123805],{},[116,123803,123804],{},"需求："," Ubuntu系统中现接入雷达和智能小车，请为二者绑定端口。",[19,123807,123808,123811],{},[116,123809,123810],{},"实现原理："," 可以通过USB设备本身的“标识”实现端口绑定。",[19,123813,123814],{},[116,123815,123816],{},"流程如下：",[19,123818,123819],{},"（1）.查找设备idVendor和idProduct",[19,123821,123822,123823,123826],{},"接入两个USB设备，在终端调用指令",[269,123824,123825],{},"lsusb","查看显示系统中以及连接到系统的USB设备信息。",[19,123828,123829],{},[48,123830],{"alt":50,"src":123831},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-105.png",[19,123833,123834,123835,123838],{},"如上图所示，红色方框内数据为USB设备，ID后面的",[269,123836,123837],{},"1a86:7523","分别为USB的idVendor和idProduct（两个参数之间使用”：“分隔）。",[19,123840,123841],{},"另外：可以通过重新插拔比较的方式确定哪些数据对应接入的USB设备。",[19,123843,123844],{},"（2）.编写映射规则",[19,123846,123847,123848,123851],{},"在",[269,123849,123850],{},"\u002Fetc\u002Fudev\u002Frules.d","目录下新建文件xxx.rules（文件名自定义）",[316,123853,123855],{"className":725,"code":123854,"language":727,"meta":50,"style":50},"sudo vim \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[269,123856,123857],{"__ignoreMap":50},[324,123858,123859,123861,123863],{"class":326,"line":327},[324,123860,735],{"class":734},[324,123862,119095],{"class":738},[324,123864,123865],{"class":738}," \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[19,123867,123868],{},"输入如下内容：",[316,123870,123872],{"className":725,"code":123871,"language":727,"meta":50,"style":50},"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",[269,123873,123874,123904],{"__ignoreMap":50},[324,123875,123876,123879,123881,123884,123887,123890,123893,123895,123898,123901],{"class":326,"line":327},[324,123877,123878],{"class":867},"KERNEL",[324,123880,913],{"class":863},[324,123882,123883],{"class":738},"=\"ttyUSB*\",",[324,123885,123886],{"class":734}," ATTRS",[324,123888,123889],{"class":738},"{idVendor}==",[324,123891,123892],{"class":734},"\"10c4\"",[324,123894,1242],{"class":734},[324,123896,123897],{"class":738}," ATTRS{idProduct}==\"ea60\",",[324,123899,123900],{"class":738}," MODE:=\"0777\",",[324,123902,123903],{"class":738}," SYMLINK+=\"mylidar\"\n",[324,123905,123906,123908,123910,123912,123914,123916,123919,123921,123924,123926],{"class":326,"line":203},[324,123907,123878],{"class":867},[324,123909,913],{"class":863},[324,123911,123883],{"class":738},[324,123913,123886],{"class":734},[324,123915,123889],{"class":738},[324,123917,123918],{"class":734},"\"1a86\"",[324,123920,1242],{"class":734},[324,123922,123923],{"class":738}," ATTRS{idProduct}==\"7523\",",[324,123925,123900],{"class":738},[324,123927,123928],{"class":738}," SYMLINK+=\"mycar\"\n",[19,123930,123931],{},"代码解释：",[1871,123933,123934,123937,123940,123943],{},[195,123935,123936],{},"KERNEL是内核固定名称，这里统一是“ttyUSB*”；",[195,123938,123939],{},"MODE是节点权限，通常改为“0777”，表示可读写可运行；",[195,123941,123942],{},"SYMLINK是符号连接，即绑定的别名；",[195,123944,123945],{},"ATTRS是设备厂商的唯一标识，idVendor和idProduct正好组成上面通过lsusb查找到的设备ID。",[19,123947,123948,123949,123952,123955],{},"***小提示：***",[24280,123950,123951],{},"一般的USB设备供应商都会提供类似的脚本文件，对于调用者而言，直接复制该文件到",[269,123953,123954],{},"\u002Fetc\u002Fudev\u002Frule.d",[24280,123956,123957],{},"目录即可。",[19,123959,123960],{},"表格 还在加载中，请等待加载完成后再尝试复制",[19,123962,123963],{},"（3）.使规则生效",[19,123965,123966],{},"在终端下输入如下指令：",[316,123968,123970],{"className":725,"code":123969,"language":727,"meta":50,"style":50},"# Ubuntu用下方命令\nsudo service udev reload\nsudo service udev restart\n\n#Fedora用下方命令\nsudo udevadm control --reload\nsudo udevadm trigger\n",[269,123971,123972,123977,123989,124000,124004,124009,124022],{"__ignoreMap":50},[324,123973,123974],{"class":326,"line":327},[324,123975,123976],{"class":772},"# Ubuntu用下方命令\n",[324,123978,123979,123981,123983,123986],{"class":326,"line":203},[324,123980,735],{"class":734},[324,123982,120560],{"class":738},[324,123984,123985],{"class":738}," udev",[324,123987,123988],{"class":738}," reload\n",[324,123990,123991,123993,123995,123997],{"class":326,"line":338},[324,123992,735],{"class":734},[324,123994,120560],{"class":738},[324,123996,123985],{"class":738},[324,123998,123999],{"class":738}," restart\n",[324,124001,124002],{"class":326,"line":344},[324,124003,488],{"emptyLinePlaceholder":487},[324,124005,124006],{"class":326,"line":484},[324,124007,124008],{"class":772},"#Fedora用下方命令\n",[324,124010,124011,124013,124016,124019],{"class":326,"line":491},[324,124012,735],{"class":734},[324,124014,124015],{"class":738}," udevadm",[324,124017,124018],{"class":738}," control",[324,124020,124021],{"class":916}," --reload\n",[324,124023,124024,124026,124028],{"class":326,"line":496},[324,124025,735],{"class":734},[324,124027,124015],{"class":738},[324,124029,124030],{"class":738}," trigger\n",[19,124032,124033],{},"再重新插拔设备即可。",[19,124035,124036],{},"（4）.测试",[19,124038,124039],{},"终端下输入如下指令",[316,124041,124043],{"className":725,"code":124042,"language":727,"meta":50,"style":50},"ll \u002Fdev | grep ttyUSB\n",[269,124044,124045],{"__ignoreMap":50},[324,124046,124047,124050,124053,124055,124057],{"class":326,"line":327},[324,124048,124049],{"class":734},"ll",[324,124051,124052],{"class":738}," \u002Fdev",[324,124054,25833],{"class":863},[324,124056,30958],{"class":734},[324,124058,124059],{"class":738}," ttyUSB\n",[19,124061,124062],{},"运行结果如下：",[19,124064,124065],{},[48,124066],{"alt":50,"src":124067},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-106.png",[19,124069,124070,124071,124074],{},"也可以多次插拔USB设备，会发现设备端口",[269,124072,124073],{},"ttyUSBn","中的n编号会变动，但是别名是始终可以指向对应的USB设备的。至此，就可以使用别名来关联所需使用的USB设备了。",[19,124076,124077],{},[116,124078,241],{},[19,124080,124081],{},"上述实现也存在一定的局限性，当Ubuntu接入两台或多台相同型号的USB设备时，由于设备ID是一样的，该种实现方式只会对其中的一台设备生效，这种情况下，就需要通过第二种策略来实现端口的绑定了。",[35,124083,124085],{"id":124084},"_742-根据主机硬件绑定端口多个相同设备","7.4.2 根据主机硬件绑定端口（多个相同设备)",[19,124087,124088,124090],{},[116,124089,123804],{}," 无人车中现接入一前一后两台相同型号的雷达，请为二者绑定端口。",[19,124092,124093,124095],{},[116,124094,123810],{}," USB设备所连接主机的USB接口也是有其“标识”的，可以通过这个标识实现端口绑定。",[19,124097,124098],{},[116,124099,123816],{},[19,124101,124102],{},"（1）.查看所连接的主机USB接口的KERNELS",[19,124104,124105],{},"调用如下指令查看第一台雷达的USB信息：",[316,124107,124109],{"className":725,"code":124108,"language":727,"meta":50,"style":50},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB0 | grep KERNELS\nudevadm info --attribute-walk --name=\u002Fdev\u002FttyACM0 | grep KERNELS\n",[269,124110,124111,124131],{"__ignoreMap":50},[324,124112,124113,124116,124118,124121,124124,124126,124128],{"class":326,"line":327},[324,124114,124115],{"class":734},"udevadm",[324,124117,70543],{"class":738},[324,124119,124120],{"class":916}," --attribute-walk",[324,124122,124123],{"class":916}," --name=\u002Fdev\u002FttyUSB0",[324,124125,25833],{"class":863},[324,124127,30958],{"class":734},[324,124129,124130],{"class":738}," KERNELS\n",[324,124132,124133,124135,124137,124139,124142,124144,124146],{"class":326,"line":203},[324,124134,124115],{"class":734},[324,124136,70543],{"class":738},[324,124138,124120],{"class":916},[324,124140,124141],{"class":916}," --name=\u002Fdev\u002FttyACM0",[324,124143,25833],{"class":863},[324,124145,30958],{"class":734},[324,124147,124130],{"class":738},[19,124149,124150],{},[48,124151],{"alt":50,"src":124152},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-107.png",[19,124154,124155],{},"调用如下指令查看第二台雷达的USB信息：",[316,124157,124159],{"className":725,"code":124158,"language":727,"meta":50,"style":50},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB1 | grep KERNELS\n",[269,124160,124161],{"__ignoreMap":50},[324,124162,124163,124165,124167,124169,124172,124174,124176],{"class":326,"line":327},[324,124164,124115],{"class":734},[324,124166,70543],{"class":738},[324,124168,124120],{"class":916},[324,124170,124171],{"class":916}," --name=\u002Fdev\u002FttyUSB1",[324,124173,25833],{"class":863},[324,124175,30958],{"class":734},[324,124177,124130],{"class":738},[19,124179,124180,124181,124184,124185,124188,124189,124192],{},"运行结果相比较不同的KERNELS，第一台雷达端口地址为",[269,124182,124183],{},"KERNELS==1-1.3:1.0","，第二个雷达端口地址为",[269,124186,124187],{},"KERNELS==1-1.4:1.0","。可以使用此数据作为不同端口的“",[116,124190,124191],{},"唯一性标识","”。",[19,124194,123844],{},[19,124196,123847,124197,124199],{},[269,124198,123850],{},"目录下新建文件xxx.rules（文件名自定义），输入如下内容：",[316,124201,124202],{"className":725,"code":123854,"language":727,"meta":50,"style":50},[269,124203,124204],{"__ignoreMap":50},[324,124205,124206,124208,124210],{"class":326,"line":327},[324,124207,735],{"class":734},[324,124209,119095],{"class":738},[324,124211,123865],{"class":738},[316,124213,124215],{"className":725,"code":124214,"language":727,"meta":50,"style":50},"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",[269,124216,124217,124246],{"__ignoreMap":50},[324,124218,124219,124221,124223,124225,124228,124230,124233,124236,124238,124241,124243],{"class":326,"line":327},[324,124220,123878],{"class":867},[324,124222,913],{"class":863},[324,124224,123883],{"class":738},[324,124226,124227],{"class":867}," KERNELS",[324,124229,913],{"class":863},[324,124231,124232],{"class":738},"=\"1-1.3:1.0\",",[324,124234,124235],{"class":734}," MODE:",[324,124237,913],{"class":738},[324,124239,124240],{"class":734},"\"0777\"",[324,124242,1242],{"class":734},[324,124244,124245],{"class":738}," SYMLINK+=\"rplidar_front\"\n",[324,124247,124248,124250,124252,124254,124256,124258,124261,124263,124265,124267,124269],{"class":326,"line":203},[324,124249,123878],{"class":867},[324,124251,913],{"class":863},[324,124253,123883],{"class":738},[324,124255,124227],{"class":867},[324,124257,913],{"class":863},[324,124259,124260],{"class":738},"=\"1-1.4:1.0\",",[324,124262,124235],{"class":734},[324,124264,913],{"class":738},[324,124266,124240],{"class":734},[324,124268,1242],{"class":734},[324,124270,124271],{"class":738}," SYMLINK+=\"rplidar_back\"\n",[19,124273,123963],{},[19,124275,123966],{},[316,124277,124278],{"className":725,"code":123969,"language":727,"meta":50,"style":50},[269,124279,124280,124284,124294,124304,124308,124312,124322],{"__ignoreMap":50},[324,124281,124282],{"class":326,"line":327},[324,124283,123976],{"class":772},[324,124285,124286,124288,124290,124292],{"class":326,"line":203},[324,124287,735],{"class":734},[324,124289,120560],{"class":738},[324,124291,123985],{"class":738},[324,124293,123988],{"class":738},[324,124295,124296,124298,124300,124302],{"class":326,"line":338},[324,124297,735],{"class":734},[324,124299,120560],{"class":738},[324,124301,123985],{"class":738},[324,124303,123999],{"class":738},[324,124305,124306],{"class":326,"line":344},[324,124307,488],{"emptyLinePlaceholder":487},[324,124309,124310],{"class":326,"line":484},[324,124311,124008],{"class":772},[324,124313,124314,124316,124318,124320],{"class":326,"line":491},[324,124315,735],{"class":734},[324,124317,124015],{"class":738},[324,124319,124018],{"class":738},[324,124321,124021],{"class":916},[324,124323,124324,124326,124328],{"class":326,"line":496},[324,124325,735],{"class":734},[324,124327,124015],{"class":738},[324,124329,124030],{"class":738},[19,124331,124033],{},[19,124333,124036],{},[19,124335,124039,124336,124339],{},[269,124337,124338],{},"ll \u002Fdev | grep ttyUSB","，运行结果如下：",[19,124341,124342],{},[48,124343],{"alt":50,"src":124344},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-108.png",[19,124346,124347],{},"至此，就可以使用别名来关联所需使用的USB设备了。",[19,124349,124350,124352],{},[116,124351,241],{}," USB设备必须连接在主机的指定端口上，否则，会导致端口绑定失败，或产生逻辑错误。(而且增加新设备可能会导致端口改变)",[35,124354,124356],{"id":124355},"_743-根据其他属性绑定端口","7.4.3 根据其他属性绑定端口",[19,124358,124359],{},"（1）.查看所连接的主机USB接口的信息",[316,124361,124363],{"className":725,"code":124362,"language":727,"meta":50,"style":50},"udevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyACM0)\nudevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyUSB0)\n",[269,124364,124365,124395],{"__ignoreMap":50},[324,124366,124367,124369,124371,124374,124376,124378,124380,124382,124385,124388,124390,124393],{"class":326,"line":327},[324,124368,124115],{"class":734},[324,124370,70543],{"class":738},[324,124372,124373],{"class":916}," -a",[324,124375,29938],{"class":916},[324,124377,29144],{"class":867},[324,124379,124115],{"class":734},[324,124381,70543],{"class":738},[324,124383,124384],{"class":916}," -q",[324,124386,124387],{"class":738}," path",[324,124389,25839],{"class":916},[324,124391,124392],{"class":738}," \u002Fdev\u002FttyACM0",[324,124394,874],{"class":867},[324,124396,124397,124399,124401,124403,124405,124407,124409,124411,124413,124415,124417,124420],{"class":326,"line":203},[324,124398,124115],{"class":734},[324,124400,70543],{"class":738},[324,124402,124373],{"class":916},[324,124404,29938],{"class":916},[324,124406,29144],{"class":867},[324,124408,124115],{"class":734},[324,124410,70543],{"class":738},[324,124412,124384],{"class":916},[324,124414,124387],{"class":738},[324,124416,25839],{"class":916},[324,124418,124419],{"class":738}," \u002Fdev\u002FttyUSB0",[324,124421,874],{"class":867},[19,124423,124424],{},[48,124425],{"alt":50,"src":124426},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-109.png",[19,124428,124429],{},"这些数据都是不会变的，所以可以拿这些数据来做标识",[19,124431,123844],{},[19,124433,123847,124434,124199],{},[269,124435,123850],{},[316,124437,124438],{"className":725,"code":123854,"language":727,"meta":50,"style":50},[269,124439,124440],{"__ignoreMap":50},[324,124441,124442,124444,124446],{"class":326,"line":327},[324,124443,735],{"class":734},[324,124445,119095],{"class":738},[324,124447,123865],{"class":738},[316,124449,124451],{"className":725,"code":124450,"language":727,"meta":50,"style":50},"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",[269,124452,124453,124481,124507],{"__ignoreMap":50},[324,124454,124455,124457,124459,124462,124464,124466,124468,124470,124473,124476,124478],{"class":326,"line":327},[324,124456,123878],{"class":867},[324,124458,913],{"class":863},[324,124460,124461],{"class":738},"=\"ttyACM*\",",[324,124463,123886],{"class":734},[324,124465,123889],{"class":738},[324,124467,123918],{"class":734},[324,124469,1242],{"class":734},[324,124471,124472],{"class":738}," ATTRS{idProduct}==\"55d4\",",[324,124474,124475],{"class":738}," ATTRS{serial}==\"0001\",",[324,124477,123900],{"class":738},[324,124479,124480],{"class":738}," SYMLINK+=\"ttyACM_MCU\"\n",[324,124482,124483,124485,124487,124489,124491,124493,124495,124497,124499,124502,124504],{"class":326,"line":203},[324,124484,123878],{"class":867},[324,124486,913],{"class":863},[324,124488,124461],{"class":738},[324,124490,123886],{"class":734},[324,124492,123889],{"class":738},[324,124494,123918],{"class":734},[324,124496,1242],{"class":734},[324,124498,124472],{"class":738},[324,124500,124501],{"class":738}," ATTRS{serial}==\"0002\",",[324,124503,123900],{"class":738},[324,124505,124506],{"class":738}," SYMLINK+=\"ttyACM_Lidar\"\n",[324,124508,124509,124511,124513,124515,124517,124519,124521,124523,124525,124527],{"class":326,"line":338},[324,124510,123878],{"class":867},[324,124512,913],{"class":863},[324,124514,123883],{"class":738},[324,124516,123886],{"class":734},[324,124518,123889],{"class":738},[324,124520,123918],{"class":734},[324,124522,1242],{"class":734},[324,124524,123923],{"class":738},[324,124526,123900],{"class":738},[324,124528,124529],{"class":738}," SYMLINK+=\"ttyUSB_IMU\"\n",[19,124531,123963],{},[19,124533,123966],{},[316,124535,124536],{"className":725,"code":123969,"language":727,"meta":50,"style":50},[269,124537,124538,124542,124552,124562,124566,124570,124580],{"__ignoreMap":50},[324,124539,124540],{"class":326,"line":327},[324,124541,123976],{"class":772},[324,124543,124544,124546,124548,124550],{"class":326,"line":203},[324,124545,735],{"class":734},[324,124547,120560],{"class":738},[324,124549,123985],{"class":738},[324,124551,123988],{"class":738},[324,124553,124554,124556,124558,124560],{"class":326,"line":338},[324,124555,735],{"class":734},[324,124557,120560],{"class":738},[324,124559,123985],{"class":738},[324,124561,123999],{"class":738},[324,124563,124564],{"class":326,"line":344},[324,124565,488],{"emptyLinePlaceholder":487},[324,124567,124568],{"class":326,"line":484},[324,124569,124008],{"class":772},[324,124571,124572,124574,124576,124578],{"class":326,"line":491},[324,124573,735],{"class":734},[324,124575,124015],{"class":738},[324,124577,124018],{"class":738},[324,124579,124021],{"class":916},[324,124581,124582,124584,124586],{"class":326,"line":496},[324,124583,735],{"class":734},[324,124585,124015],{"class":738},[324,124587,124030],{"class":738},[19,124589,124590,124591],{},"再重新插拔设备即可，或者 ",[116,124592,124593],{},"直接重启系统。",[19,124595,124036],{},[19,124597,124039,124598,124339],{},[269,124599,124338],{},[19,124601,124602],{},[48,124603],{"alt":50,"src":124604},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-110.png",[19,124606,124347],{},[19,124608,124609,124611],{},[116,124610,241],{}," 一些设备可能没有串口号等。",[35,124613,124615],{"id":124614},"_744-其他注意事项","7.4.4 其他注意事项",[19,124617,124618,124619,124621,124622,124625,124626,19139,124629,124632,124633,124635],{},"并非所有的USB设备端口号都是",[269,124620,124073],{},"的格式，比如Arduino的端口号可能是",[269,124623,124624],{},"ttyACMn","，而对于USB摄像头而言，一台设备则对应两个端口号，分别是",[269,124627,124628],{},"videon",[269,124630,124631],{},"video(n+1)","，并且启用摄像头设备一般使用的是",[269,124634,124628],{},"端口，绑定时需要关联的也是该接口。",[19,124637,124638,124639,124642,124643,124646,124647,124649,124650,124653,124654,124657,124658,124661,124662,124661,124665,124661,124668,29107],{},"但是无论是外接何种USB设备，也不管采用上述两种方案的哪一种进行端口绑定，其原理都是类似的，只是实现细节不同而已。如果是外接的Arduino设备，那么需要在rules文件中的将",[269,124640,124641],{},"KERNEL==\"ttyUSB*\"","修改为",[269,124644,124645],{},"KERNEL==\"ttyACM*\"","，如果外接的是USB摄像头，那么则需要在rules文件中的将",[269,124648,124641],{},"修改为类似于",[269,124651,124652],{},"KERNEL==\"video[0,2,4,6]\"","的格式，其中",[269,124655,124656],{},"video[0,2,4,6]","表示可以绑定的端口为",[269,124659,124660],{},"video0","或",[269,124663,124664],{},"video2",[269,124666,124667],{},"video4",[269,124669,124670],{},"video6",[14,124672,124674],{"id":124673},"_75-挂载内网网页","7.5 挂载内网网页",[19,124676,124677],{},"可以把本地的网页挂载到路由器端，或者同内网段其他设备上，甚至可以挂载在本地。",[19,124679,124680],{},"下面以安卓设备为例子，由于安卓设备暂时不能直接打开html,所以我们可以把html挂载到本地服务器，再通过浏览器查看。",[19,124682,124683],{},"由于安卓系统基于Linux内核，所以我们可以下载一个叫termux的app来敲一些Linux命令：",[19,124685,124686,124687],{},"Termux 下载地址（F-Droid）：",[25,124688,124689],{"href":124689,"rel":124690},"https:\u002F\u002Ff-droid.org\u002Fpackages\u002Fcom.termux\u002F",[29],[19,124692,124693],{},"首先打开app后，先更新软件缓存：",[316,124695,124697],{"className":725,"code":124696,"language":727,"meta":50,"style":50},"pkg update\n",[269,124698,124699],{"__ignoreMap":50},[324,124700,124701,124704],{"class":326,"line":327},[324,124702,124703],{"class":734},"pkg",[324,124705,742],{"class":738},[19,124707,124708],{},"然后换源",[316,124710,124712],{"className":725,"code":124711,"language":727,"meta":50,"style":50},"nano $PREFIX\u002Fetc\u002Fapt\u002Fsources.list\n",[269,124713,124714],{"__ignoreMap":50},[324,124715,124716,124718,124721],{"class":326,"line":327},[324,124717,123586],{"class":734},[324,124719,124720],{"class":867}," $PREFIX",[324,124722,124723],{"class":738},"\u002Fetc\u002Fapt\u002Fsources.list\n",[19,124725,124726],{},"将该文件内容替换为下面：",[316,124728,124730],{"className":725,"code":124729,"language":727,"meta":50,"style":50},"deb https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24 stable main\n",[269,124731,124732],{"__ignoreMap":50},[324,124733,124734,124737,124740,124743],{"class":326,"line":327},[324,124735,124736],{"class":734},"deb",[324,124738,124739],{"class":738}," https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24",[324,124741,124742],{"class":738}," stable",[324,124744,124745],{"class":738}," main\n",[1871,124747,124748,124775],{},[195,124749,124750,124751,124753,124754],{},"如果你使用的是",[269,124752,123586],{},"编辑器：",[1871,124755,124756,124763,124769],{},[195,124757,124758,124759,124762],{},"按 ",[269,124760,124761],{},"Ctrl+O"," 保存文件。",[195,124764,124758,124765,124768],{},[269,124766,124767],{},"Enter"," 确认文件名。",[195,124770,124758,124771,124774],{},[269,124772,124773],{},"Ctrl+X"," 退出编辑器。",[195,124776,124750,124777,124753,124780],{},[269,124778,124779],{},"vim",[1871,124781,124782,124788],{},[195,124783,124758,124784,124787],{},[269,124785,124786],{},"Esc"," 退出编辑模式。",[195,124789,124790,124791,124793],{},"输入 ",[269,124792,119733],{}," 保存并退出。",[19,124795,124796],{},"接下来重新更新软件源：",[316,124798,124800],{"className":725,"code":124799,"language":727,"meta":50,"style":50},"pkg update && pkg upgrade\n",[269,124801,124802],{"__ignoreMap":50},[324,124803,124804,124806,124808,124810,124812],{"class":326,"line":327},[324,124805,124703],{"class":734},[324,124807,118064],{"class":738},[324,124809,26914],{"class":867},[324,124811,124703],{"class":734},[324,124813,751],{"class":738},[19,124815,124816],{},"安装python：",[316,124818,124820],{"className":725,"code":124819,"language":727,"meta":50,"style":50},"pkg install python\n",[269,124821,124822],{"__ignoreMap":50},[324,124823,124824,124826,124828],{"class":326,"line":327},[324,124825,124703],{"class":734},[324,124827,760],{"class":738},[324,124829,124830],{"class":738}," python\n",[19,124832,124833,288],{},[116,124834,124835],{},"通过Termux访问设备存储",[19,124837,124838],{},"如果文件在安卓设备上，可以使用Termux的文件管理器访问设备的存储：",[316,124840,124842],{"className":725,"code":124841,"language":727,"meta":50,"style":50},"termux-setup-storage\n",[269,124843,124844],{"__ignoreMap":50},[324,124845,124846],{"class":326,"line":327},[324,124847,124841],{"class":734},[192,124849,124850],{},[195,124851,124852,288,124855],{},[116,124853,124854],{},"进入HTML文件所在的目录",[192,124856,124857],{},[195,124858,124859,124860,124862],{},"使用",[269,124861,101997],{},"命令进入HTML文件所在的目录：",[316,124864,124866],{"className":725,"code":124865,"language":727,"meta":50,"style":50},"cd ~\u002Fyour_html_folder\n",[269,124867,124868],{"__ignoreMap":50},[324,124869,124870,124872],{"class":326,"line":327},[324,124871,101997],{"class":916},[324,124873,124874],{"class":738}," ~\u002Fyour_html_folder\n",[192,124876,124877],{"start":203},[195,124878,124879,288,124882,124887,124904],{},[116,124880,124881],{},"启动Python HTTP服务器",[192,124883,124884],{},[195,124885,124886],{},"运行以下命令启动一个简单的HTTP服务器：",[316,124888,124890],{"className":725,"code":124889,"language":727,"meta":50,"style":50},"python -m http.server 8000\n",[269,124891,124892],{"__ignoreMap":50},[324,124893,124894,124896,124898,124901],{"class":326,"line":327},[324,124895,31102],{"class":734},[324,124897,101604],{"class":916},[324,124899,124900],{"class":738}," http.server",[324,124902,124903],{"class":916}," 8000\n",[192,124905,124906],{"start":338},[195,124907,124908,124909,124912],{},"这会在端口",[269,124910,124911],{},"8000","上启动一个Web服务器。",[1871,124914,124915],{},[195,124916,124917],{},"启动服务器后，Termux会显示日志信息，例如：",[316,124919,124921],{"className":121328,"code":124920,"language":121330,"meta":121331,"style":50},"Serving HTTP on 0.0.0.0 port 8000 (http:\u002F\u002F0.0.0.0:8000\u002F) ...\n",[269,124922,124923],{"__ignoreMap":50},[324,124924,124925],{"class":326,"line":327},[324,124926,124920],{},[1871,124928,124929],{},[195,124930,124931],{},"这表示服务器已成功启动。",[19,124933,124934],{},[116,124935,124936],{},"在浏览器中访问HTML文件",[192,124938,124939],{},[195,124940,124941,288,124944,124949],{},[116,124942,124943],{},"在同一设备上访问",[192,124945,124946],{},[195,124947,124948],{},"打开安卓设备上的浏览器（如Chrome），输入以下地址：",[316,124950,124953],{"className":124951,"code":124952,"language":72386,"meta":50,"style":50},"language-JSON shiki shiki-themes github-light github-dark","http:\u002F\u002Flocalhost:8000\n",[269,124954,124955],{"__ignoreMap":50},[324,124956,124957,124960],{"class":326,"line":327},[324,124958,124959],{"class":867},"http:",[324,124961,124962],{"class":772},"\u002F\u002Flocalhost:8000\n",[1871,124964,124965],{},[195,124966,124967,124968,124971],{},"如果HTML文件中有",[269,124969,124970],{},"index.html","，它会自动加载；否则，你需要手动点击文件链接。",[14,124973,124975],{"id":124974},"_76-linux重点知识","7.6 Linux重点知识",[35,124977,124979],{"id":124978},"_761-关于点的说明","7.6.1 关于点的说明",[19,124981,124982],{},[48,124983],{"alt":50,"src":124984},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-111.png",[19,124986,124987],{},"一点本目录，两点上目录",[35,124989,124991],{"id":124990},"_762-目录","7.6.2 目录",[151,124993,124995],{"id":124994},"_7621-系统启动必须","7.6.2.1 系统启动必须",[19,124997,124998],{},[116,124999,125000],{},"\u002Fboot:",[19,125002,125003],{},"存放启动linux时使用的一些核心文件，包括一些连接文件和镜像文件",[19,125005,125006],{},[116,125007,125008],{},"\u002Fetc:",[19,125010,125011],{},"存放所有的系统需要的配置文件和子目录列表，更改目录下的文件可能会导致系统不能启动",[19,125013,125014],{},[116,125015,125016],{},"\u002Flib：",[19,125018,125019],{},"存放基本代码库（比如c++库），其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库",[19,125021,125022],{},[116,125023,125024],{},"\u002Fsys:",[19,125026,125027],{},"这是linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统 sysfs 。sysfs文件系统集成了下面3种文件系统的信息：针对进程信息的proc文件系统、针对设备的devfs文件系统以及针对伪终端的devpts文件系统。该文件系统是内核设备树的一个直观反映。当一个内核对象被创建的时候，对应的文件和目录也在内核对象子系统中",[151,125029,125031],{"id":125030},"_7622-指令集合","7.6.2.2 指令集合",[19,125033,125034],{},[116,125035,125036],{},"\u002Fbin:",[19,125038,125039],{},"为二进制文件的缩写，存放最经常使用的命令",[19,125041,125042],{},[116,125043,125044],{},"\u002Fsbin:",[19,125046,125047],{},"只有系统管理员才能使用的程序和指令",[151,125049,125051],{"id":125050},"_7623-外部文件管理","7.6.2.3 外部文件管理",[19,125053,125054],{},[116,125055,125056],{},"\u002Fdev:",[19,125058,125059],{},"Device（设备）的缩写，存放linux的外部设备，在linux中访问设备和访问文件的方式是相同的",[19,125061,125062],{},[116,125063,125064],{},"\u002Fmedia:",[19,125066,125067],{},"类windows的其他设备，例如U盘、光驱等等，识别后linux会把设备放到这个目录下",[19,125069,125070],{},[116,125071,125072],{},"\u002Fmnt:",[19,125074,125075],{},"临时挂载别的文件系统，我们可以将光驱挂载在\u002Fmnt\u002F上，然后进入该目录就可以查看光驱里的内容",[151,125077,125079],{"id":125078},"_7624-临时文件","7.6.2.4 临时文件",[19,125081,125082],{},[116,125083,125084],{},"\u002Frun:",[19,125086,125087],{},"是一个临时文件系统，存储系统启动以来的信息。当系统重启时，这个目录下的文件应该被删掉或清除。如果你的系统上有 \u002Fvar\u002Frun 目录，应该让它指向 run",[19,125089,125090],{},[116,125091,125092],{},"\u002Flost+found:",[19,125094,125095],{},"一般情况下为空的，系统非法关机后，这里就存放一些文件",[19,125097,125098],{},[116,125099,125100],{},"\u002Ftmp:",[19,125102,125103],{},"这个目录是用来存放一些临时文件的",[151,125105,125107],{"id":125106},"_7625-账户","7.6.2.5 账户",[19,125109,125110],{},[116,125111,125112],{},"\u002Froot：",[19,125114,125115],{},"系统管理员的用户主目录",[19,125117,125118,288],{},[116,125119,125120],{},"\u002Fhome",[19,125122,125123],{},"用户的主目录，以用户的账号命名的",[19,125125,125126,288],{},[116,125127,125128],{},"\u002Fusr",[19,125130,125131],{},"用户的很多应用程序和文件都放在这个目录下，类似于windows下的program files目录",[19,125133,125134],{},[116,125135,125136],{},"\u002Fusr\u002Fbin：",[19,125138,125139],{},"系统用户使用的应用程序与指令",[19,125141,125142],{},[116,125143,125144],{},"\u002Fusr\u002Fsbin：",[19,125146,125147],{},"超级用户使用的比较高级的管理程序和系统守护程序",[19,125149,125150],{},[116,125151,125152],{},"\u002Fusr\u002Fsrc：",[19,125154,125155],{},"内核源代码默认的放置目录",[151,125157,125159],{"id":125158},"_7626-运行过程要用","7.6.2.6 运行过程要用",[19,125161,125162],{},[116,125163,125164],{},"\u002Fvar：",[19,125166,125167],{},"存放经常修改的数据，比如程序运行的日志文件（\u002Fvar\u002Flog 目录下）",[19,125169,125170],{},[116,125171,125172],{},"\u002Fproc:",[19,125174,125175,125176,125179],{},"管理 ",[116,125177,125178],{},"内存空间！"," 虚拟的目录，是系统内存的映射，我们可以直接访问这个目录来，获取系统信息。这个目录的内容不在硬盘上而是在内存里，我们也可以直接修改里面的某些文件来做修改",[151,125181,125183],{"id":125182},"_7627-扩展用的","7.6.2.7 扩展用的",[19,125185,125186],{},[116,125187,125188],{},"\u002Fopt:",[19,125190,125191],{},"默认是空的，我们安装额外软件可以放在这个里面",[19,125193,125194],{},[116,125195,125196],{},"\u002Fsrv:",[19,125198,125199],{},"存放服务启动后需要提取的数据（不用服务器就是空）",[35,125201,125203],{"id":125202},"_763-终端利用ssh登陆远程服务器","7.6.3 终端利用ssh登陆远程服务器",[19,125205,125206],{},[48,125207],{"alt":50,"src":125208},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-112.png",[19,125210,125211],{},"windows-->linux:",[19,125213,125214],{},"远程传输文件:scp- r 本地文件目录 服务器的用户名@服务器IP:\u002Ftmp",[19,125216,125217],{},"必须传入到服务器的\u002Ftmp这个路径下，因为只有这个路径有写入权限，可以上传之后移动到你的文件到你需要的指定目录",[19,125219,125220],{},"linux传输文件到windows",[19,125222,125223],{},"scp- r 服务器的用户名@服务器IP:\u002Ftmp 本地的文件目录",[35,125225,125227],{"id":125226},"_764-易忘知识","7.6.4 易忘知识",[19,125229,125230],{},"操作系统内核查看",[316,125232,125233],{"className":725,"code":121802,"language":727,"meta":50,"style":50},[269,125234,125235],{"__ignoreMap":50},[324,125236,125237,125239],{"class":326,"line":327},[324,125238,70926],{"class":734},[324,125240,121811],{"class":916},[19,125242,125243],{},[48,125244],{"alt":50,"src":125245},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-113.png",[19,125247,125248],{},[48,125249],{"alt":50,"src":125250},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-114.png",[316,125252,125254],{"className":725,"code":125253,"language":727,"meta":50,"style":50},"mv mvtest mvtest2 \nmv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[269,125255,125256,125268],{"__ignoreMap":50},[324,125257,125258,125260,125263,125266],{"class":326,"line":327},[324,125259,122019],{"class":734},[324,125261,125262],{"class":738}," mvtest",[324,125264,125265],{"class":738}," mvtest2",[324,125267,3403],{"class":867},[324,125269,125270],{"class":326,"line":203},[324,125271,125272],{"class":734},"mv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[19,125274,125275],{},[48,125276],{"alt":50,"src":125277},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-115.png",[19,125279,125280],{},[48,125281],{"alt":50,"src":125282},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-116.png",[19,125284,125285,125286,125289],{},"当前目录中共有3个文件，每个占用4KB，目录本身因元数据占用4KB，总计16KB。通过 ",[269,125287,125288],{},"du -a"," 可以快速查看磁盘使用细节。",[35,125291,125293],{"id":125292},"_765-vim","7.6.5 Vim",[19,125295,125296],{},[48,125297],{"alt":50,"src":125298},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-117.png",[19,125300,125301],{},"（vim是一个linux使用非常广泛的编辑器，不是编译器）vscode就是编辑器，vim编辑器几乎支持所有编程语言，所以非常好用！",[19,125303,125304],{},"一开始进去为命令模式，此时点击输入的字母为命令",[19,125306,125307],{},[116,125308,125309],{},"1.命令模式：",[19,125311,125312],{},"i 切换到输入模式，在光标当前位置开始输入文本",[19,125314,125315],{},"x 删除当前光标所在处的字符",[19,125317,125318],{},"：切换到底线命令模式，以在最底一行输入命令",[19,125320,125321],{},"a 进行插入模式，在光标下一个位置输入文本",[19,125323,125324],{},"o 在当前的下方插入一个新行，并进入插入模式",[19,125326,125327],{},"0 在当前行的上方插入一个新行，并进入插入模式",[19,125329,125330],{},"dd 剪切当前行",[19,125332,125333],{},"yy 复制当前行",[19,125335,125336],{},"p 粘贴剪贴板内容到光标下方",[19,125338,125339],{},"P 粘贴剪贴板内容到光标上方",[19,125341,125342],{},"u 撤销上一次操作",[19,125344,125345],{},"ctrl+r 重做上一次操作",[19,125347,125348,125350],{},[1659,125349],{}," 保存文件",[19,125352,125353,125355],{},[1509,125354],{}," 退出Vim编辑器",[19,125357,125358,125360],{},[1509,125359],{},"! 强制退出Vim编辑器，不保存修改",[19,125362,125363],{},[116,125364,125365],{},"2.输入模式：",[19,125367,125368],{},[48,125369],{"alt":50,"src":125370},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-118.png",[19,125372,125373],{},[116,125374,125375],{},"3.底线命令模式：",[19,125377,125378],{},[48,125379],{"alt":50,"src":125380},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-119.png",[19,125382,125383],{},"按下esc可以退出底线命令模式",[35,125385,125387],{"id":125386},"_766-apt","7.6.6 apt",[19,125389,125390],{},"为Linux的Debian和Ubuntu中的shell前端软件包管理器",[35,125392,125394],{"id":125393},"_767-home与root的区别","7.6.7 home与root的区别",[19,125396,125397],{},[48,125398],{"alt":50,"src":125399},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-120.png",[19,125401,125402],{},[48,125403],{"alt":50,"src":125404},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-121.png",[19,125406,125407],{},[48,125408],{"alt":50,"src":125409},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-122.png",[19,125411,125412],{},[48,125413],{"alt":50,"src":125414},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-123.png",[35,125416,125418],{"id":125417},"_768-linux系统如何安装软件5-补充","7.6.8 linux系统如何安装软件：.5 补充",[19,125420,125421],{},[25,125422,125423],{"href":125423,"rel":125424},"https:\u002F\u002Fme.tungchiahui.cn\u002Flinux-tutorial\u002F#%E5%BD%BB%E5%BA%95%E5%88%A0%E9%99%A4linux",[29],[192,125426,125427,125430],{},[195,125428,125429],{},"下载安装包+指令的形式进行安装 以fedora系统为例子： sudo dnf install 安装包",[195,125431,125432],{},"下载程序压缩包并进行解压，配置图标启动文件，以安装pycharm为例进行说明：： 1️⃣解压压缩包：可以手动解压；也可以通过终端进行解压tar (tar -help看有啥选项)",[19,125434,125435],{},[48,125436],{"alt":50,"src":125437},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-124.png",[19,125439,125440],{},"解压后的文件放到自己存放的位置 2️⃣查找启动文件，判断程序压缩包是正常的，在解压文件下的bin目录进行查看，在终端输入pycharm.sh或者pycharm来判断是否启动",[19,125442,125443],{},[48,125444],{"alt":50,"src":125445},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-125.png",[316,125447,125449],{"className":121328,"code":125448,"language":121330,"meta":121331,"style":50},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n.\u002Fpycharm.sh\n",[269,125450,125451,125456],{"__ignoreMap":50},[324,125452,125453],{"class":326,"line":327},[324,125454,125455],{},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n",[324,125457,125458],{"class":326,"line":203},[324,125459,125460],{},".\u002Fpycharm.sh\n",[19,125462,125463],{},"3️⃣创建.desktop文件",[19,125465,125466],{},[116,125467,125468],{},"原理：",[1871,125470,125471,125481],{},[195,125472,125473,125474,125480],{},"Linux 桌面环境（GNOME、KDE、XFCE 等）通过 ",[116,125475,125476,125479],{},[269,125477,125478],{},".desktop"," 文件"," 来识别应用。",[195,125482,125483,125485,125486],{},[269,125484,125478],{}," 文件相当于一个“应用注册表”，告诉系统：",[1871,125487,125488,125491,125494,125497,125500],{},[195,125489,125490],{},"应用名字（Name）",[195,125492,125493],{},"图标（Icon）",[195,125495,125496],{},"执行命令（Exec）",[195,125498,125499],{},"分类（Categories）",[195,125501,125502],{},"是否需要终端（Terminal）",[316,125504,125506],{"className":121328,"code":125505,"language":121330,"meta":121331,"style":50},"cd ~\u002F.local\u002Fshare\u002Fapplications\nnano pycharm.desktop\n",[269,125507,125508,125513],{"__ignoreMap":50},[324,125509,125510],{"class":326,"line":327},[324,125511,125512],{},"cd ~\u002F.local\u002Fshare\u002Fapplications\n",[324,125514,125515],{"class":326,"line":203},[324,125516,125517],{},"nano pycharm.desktop\n",[19,125519,125520],{},"nano是一个命令行下的编辑器，也可以使用vim",[316,125522,125524],{"className":121328,"code":125523,"language":121330,"meta":121331,"style":50},"[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",[269,125525,125526,125531,125536,125541,125546,125551,125556,125561,125566,125571],{"__ignoreMap":50},[324,125527,125528],{"class":326,"line":327},[324,125529,125530],{},"[Desktop Entry]\n",[324,125532,125533],{"class":326,"line":203},[324,125534,125535],{},"Version=1.0\n",[324,125537,125538],{"class":326,"line":338},[324,125539,125540],{},"Type=Application\n",[324,125542,125543],{"class":326,"line":344},[324,125544,125545],{},"Name=PyCharm\n",[324,125547,125548],{"class":326,"line":484},[324,125549,125550],{},"Icon=\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.svg\n",[324,125552,125553],{"class":326,"line":491},[324,125554,125555],{},"Exec=\"\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.sh\" %f\n",[324,125557,125558],{"class":326,"line":496},[324,125559,125560],{},"Comment=JetBrains PyCharm IDE\n",[324,125562,125563],{"class":326,"line":502},[324,125564,125565],{},"Categories=Development;IDE;\n",[324,125567,125568],{"class":326,"line":508},[324,125569,125570],{},"Terminal=false\n",[324,125572,125573],{"class":326,"line":514},[324,125574,125575],{},"StartupWMClass=jetbrains-pycharm\n",[1871,125577,125578,125584,125590,125596],{},[195,125579,125580,125583],{},[269,125581,125582],{},"Exec"," → 点击图标时执行的命令",[195,125585,125586,125589],{},[269,125587,125588],{},"Icon"," → 显示在菜单和桌面上的图标",[195,125591,125592,125595],{},[269,125593,125594],{},"Terminal=false"," → 不打开终端",[195,125597,125598,125601],{},[269,125599,125600],{},"StartupWMClass"," → GNOME 用它区分窗口实例，如果桌面环境是kde的话可以不用设置",[125603,125604,125605],"blockquote",{},[19,125606,125607,125608,125610,125611],{},"可以理解成 ",[269,125609,125478],{}," 文件是 Linux 的 ",[116,125612,125613],{},"快捷方式配置文件",[19,125615,125616],{},"4️⃣设置可执行权限",[316,125618,125620],{"className":121328,"code":125619,"language":121330,"meta":121331,"style":50},"chmod +x ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop\n",[269,125621,125622],{"__ignoreMap":50},[324,125623,125624],{"class":326,"line":327},[324,125625,125619],{},[19,125627,125628],{},"5️⃣桌面图标启动的话如下：",[316,125630,125632],{"className":121328,"code":125631,"language":121330,"meta":121331,"style":50},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\nchmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[269,125633,125634,125639],{"__ignoreMap":50},[324,125635,125636],{"class":326,"line":327},[324,125637,125638],{},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\n",[324,125640,125641],{"class":326,"line":203},[324,125642,125643],{},"chmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[192,125645,125646],{"start":338},[195,125647,125648],{},"下载Appimage文件实现软件的安装",[19,125650,125651],{},"1️⃣先下载appimage",[19,125653,125654],{},[25,125655,125656],{"href":125656,"rel":125657},"https:\u002F\u002Fy.qq.com\u002Fdownload\u002Fdownload.html",[29],[19,125659,125660],{},[48,125661],{"alt":50,"src":125662},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-126.png",[19,125664,125665],{},"2️⃣下载图标，可以去google下载qq音乐图标，.svg透明的图标",[19,125667,125668],{},[48,125669],{"alt":50,"src":125670},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-127.png",[19,125672,125673],{},"当然.png格式的也没问题，或者都可以在linux系统上更换使用图标",[19,125675,125676],{},[48,125677],{"alt":50,"src":125678},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-128.png",[19,125680,125681],{},[48,125682],{"alt":50,"src":125683},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-129.png",[19,125685,125686,125687,125690],{},"3️⃣给他们放在",[269,125688,125689],{},"\u002Fhome\u002F用户名","的某个文件夹中（可以自己定）",[19,125692,125693],{},"4️⃣给软件执行权限",[316,125695,125697],{"className":121328,"code":125696,"language":121330,"meta":121331,"style":50},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\nsudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[269,125698,125699,125704],{"__ignoreMap":50},[324,125700,125701],{"class":326,"line":327},[324,125702,125703],{},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\n",[324,125705,125706],{"class":326,"line":203},[324,125707,125708],{},"sudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[19,125710,125711],{},"5️⃣配置图标启动文件并添加执行权限（也可以继续使用nano）",[316,125713,125715],{"className":725,"code":125714,"language":727,"meta":50,"style":50},"cd ~\u002F.local\u002Fshare\u002Fapplications\u002F\ntouch .\u002Fqqmusic.desktop\nvim .\u002Fqqmusic.desktop\nsudo chmod +x .\u002Fqqmusic.desktop\n",[269,125716,125717,125724,125731,125737],{"__ignoreMap":50},[324,125718,125719,125721],{"class":326,"line":327},[324,125720,101997],{"class":916},[324,125722,125723],{"class":738}," ~\u002F.local\u002Fshare\u002Fapplications\u002F\n",[324,125725,125726,125728],{"class":326,"line":203},[324,125727,102004],{"class":734},[324,125729,125730],{"class":738}," .\u002Fqqmusic.desktop\n",[324,125732,125733,125735],{"class":326,"line":338},[324,125734,124779],{"class":734},[324,125736,125730],{"class":738},[324,125738,125739,125741,125743,125745],{"class":326,"line":344},[324,125740,735],{"class":734},[324,125742,25304],{"class":738},[324,125744,123645],{"class":738},[324,125746,125730],{"class":738},[19,125748,125749,125751],{},[269,125750,102004],{},"：一个 Linux 命令，主要功能是：",[1871,125753,125754,125757],{},[195,125755,125756],{},"如果文件不存在，就创建一个新的空文件",[195,125758,125759],{},"如果文件已存在，就更新该文件的最后修改时间",[316,125761,125763],{"className":121328,"code":125762,"language":121330,"meta":121331,"style":50},"[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",[269,125764,125765,125769,125774,125779,125784,125788,125793],{"__ignoreMap":50},[324,125766,125767],{"class":326,"line":327},[324,125768,125530],{},[324,125770,125771],{"class":326,"line":203},[324,125772,125773],{},"Name=QQ音乐\n",[324,125775,125776],{"class":326,"line":338},[324,125777,125778],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage\n",[324,125780,125781],{"class":326,"line":344},[324,125782,125783],{},"Icon=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002FQQ_Music2023.svg\n",[324,125785,125786],{"class":326,"line":484},[324,125787,125540],{},[324,125789,125790],{"class":326,"line":491},[324,125791,125792],{},"Categories=Audio;Music;Player;\n",[324,125794,125795],{"class":326,"line":496},[324,125796,125797],{},"Comment=QQ Music Client for Linux\n",[19,125799,125800],{},"将文件复制进去",[19,125802,125803],{},"6️⃣此时找到软件就可以打开了，如果找不到，请重启，部分不先进的发行版刷新图标列表不会很快",[19,125805,125806],{},[48,125807],{"alt":50,"src":125808},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-130.png",[19,125810,125811],{},"6️⃣如果点击图标打不开就禁用沙盒-->如果QQ音乐闪退，这个只是QQ音乐自己软件的问题，按下图这样做",[19,125813,125814],{},[48,125815],{"alt":50,"src":125816},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-131.png",[19,125818,125819,125820,125823,125824,125827],{},"如果你用的不是KDE，那么也可以直接修改",[269,125821,125822],{},"qqmuic.desktop","：在exec的末尾加上",[269,125825,125826],{},"--no-sandbox","（通过禁用安全沙盒机制，赋予应用程序更高的系统权限，从而解决因权限限制导致的运行问题）",[316,125829,125831],{"className":121328,"code":125830,"language":121330,"meta":121331,"style":50},"[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",[269,125832,125833,125837,125841,125846,125850,125854,125858],{"__ignoreMap":50},[324,125834,125835],{"class":326,"line":327},[324,125836,125530],{},[324,125838,125839],{"class":326,"line":203},[324,125840,125773],{},[324,125842,125843],{"class":326,"line":338},[324,125844,125845],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage --no-sandbox\n",[324,125847,125848],{"class":326,"line":344},[324,125849,125783],{},[324,125851,125852],{"class":326,"line":484},[324,125853,125540],{},[324,125855,125856],{"class":326,"line":491},[324,125857,125792],{},[324,125859,125860],{"class":326,"line":496},[324,125861,125797],{},[19,125863,125864],{},[48,125865],{"alt":50,"src":125866},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-132.png",[19,125868,125869],{},"在qq音乐中如果缺字体,那么请安装字体(这个字体是多种语言合一的字体)",[316,125871,125873],{"className":121328,"code":125872,"language":121330,"meta":121331,"style":50},"sudo dnf install google-noto-sans-cjk-fonts google-noto-serif-cjk-fonts\n",[269,125874,125875],{"__ignoreMap":50},[324,125876,125877],{"class":326,"line":327},[324,125878,125872],{},[192,125880,125881],{"start":344},[195,125882,125883],{},"去Flathub上安装软件",[19,125885,125886],{},[25,125887,125888],{"href":125888,"rel":125889},"https:\u002F\u002Fflathub.org\u002F",[29],[19,125891,125892],{},"1️⃣去上面的官网搜索软件+下载软件",[19,125894,125895],{},[48,125896],{"alt":50,"src":125897},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-133.png",[316,125899,125901],{"className":121328,"code":125900,"language":121330,"meta":121331,"style":50},"flatpak install flathub com.obsproject.Studio\n",[269,125902,125903],{"__ignoreMap":50},[324,125904,125905],{"class":326,"line":327},[324,125906,125900],{},[19,125908,125909],{},[48,125910],{"alt":50,"src":125911},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-134.png",[19,125913,125914],{},"2️⃣运行软件",[19,125916,125917],{},"a.官方方式：",[19,125919,125920],{},[48,125921],{"alt":50,"src":125922},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-135.png",[316,125924,125925],{"className":121328,"code":125900,"language":121330,"meta":121331,"style":50},[269,125926,125927],{"__ignoreMap":50},[324,125928,125929],{"class":326,"line":327},[324,125930,125900],{},[19,125932,125933],{},"b.当普通软件运行：",[19,125935,125936],{},[48,125937],{"alt":50,"src":125938},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-136.png",[19,125940,125941],{},[48,125942],{"alt":50,"src":125943},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-137.png",[775,125945,125946],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-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":50,"searchDepth":203,"depth":203,"links":125948},[125949,125950,125955,125956,125962,125963],{"id":122681,"depth":203,"text":122682},{"id":123023,"depth":203,"text":123024,"children":125951},[125952,125953,125954],{"id":123027,"depth":338,"text":123028},{"id":123094,"depth":338,"text":123095},{"id":123355,"depth":338,"text":123356},{"id":123508,"depth":203,"text":123509},{"id":123746,"depth":203,"text":123747,"children":125957},[125958,125959,125960,125961],{"id":123798,"depth":338,"text":123799},{"id":124084,"depth":338,"text":124085},{"id":124355,"depth":338,"text":124356},{"id":124614,"depth":338,"text":124615},{"id":124673,"depth":203,"text":124674},{"id":124974,"depth":203,"text":124975,"children":125964},[125965,125966,125967,125968,125969,125970,125971,125972],{"id":124978,"depth":338,"text":124979},{"id":124990,"depth":338,"text":124991},{"id":125202,"depth":338,"text":125203},{"id":125226,"depth":338,"text":125227},{"id":125292,"depth":338,"text":125293},{"id":125386,"depth":338,"text":125387},{"id":125393,"depth":338,"text":125394},{"id":125417,"depth":338,"text":125418},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch7",{"title":122673,"description":791},"wiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作","Tg_tkQ2Az3_kc3_lK0-lGPJwMQaWApXJmN_fHk_Iamg",{"id":125979,"title":125980,"body":125981,"description":791,"extension":792,"meta":125985,"navigation":487,"path":125986,"seo":125987,"stem":125988,"__hash__":125989},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Findex.md","Linux基本操作",{"type":7,"value":125982,"toc":125983},[],{"title":50,"searchDepth":203,"depth":203,"links":125984},[],{"category":30985},"\u002Fwiki\u002F2025-01-27-linux",{"title":125980,"description":791},"wiki\u002F2025-01-27-Linux基本操作\u002Findex","PoJlKpO2vYd20qfiK6eHUbmqhxxbLAcr2GCjNoWrzB0",{"id":125991,"title":125992,"body":125993,"description":125997,"extension":792,"meta":126388,"navigation":487,"path":126389,"seo":126390,"stem":126391,"__hash__":126392},"wiki\u002Fwiki\u002F2025-01-09-Genesis-AI项目.md","Genesis AI项目",{"type":7,"value":125994,"toc":126386},[125995,125998,126002,126019,126022,126075,126079,126081,126121,126130,126134,126137,126378,126383],[19,125996,125997],{},"项目简介：Genesis是一个开源的生成式物理引擎，由卡内基梅隆大学等20多个研究机构经过两年合作开发而成，旨在为通用机器人、具身人工智能和物理人工智能应用提供支持。通过使用genesis对机器人及工程环境仿真实现实验内容。",[10,125999,126001],{"id":126000},"_1ubuntu环境配置","1.Ubuntu环境配置",[192,126003,126004,126007,126010,126013,126016],{},[195,126005,126006],{},"ubuntu环境换源",[195,126008,126009],{},"安装cuda",[195,126011,126012],{},"安装miniconda",[195,126014,126015],{},"安装pytorch",[195,126017,126018],{},"安装genesis",[19,126020,126021],{},"参考链接：",[316,126023,126025],{"className":24549,"code":126024,"language":24551,"meta":50,"style":50},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare=blogdetail&sharetype=blogdetail&sharerId=144728092&sharerefer=PC&sharesource=qq_69379513&sharefrom=from_link\n",[269,126026,126027],{"__ignoreMap":50},[324,126028,126029,126032,126035,126038,126040,126043,126046,126048,126051,126054,126056,126059,126062,126064,126067,126070,126072],{"class":326,"line":327},[324,126030,126031],{"class":734},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare",[324,126033,126034],{"class":738},"=blogdetail",[324,126036,126037],{"class":867},"&sharetype",[324,126039,913],{"class":863},[324,126041,126042],{"class":738},"blogdetail",[324,126044,126045],{"class":867},"&sharerId",[324,126047,913],{"class":863},[324,126049,126050],{"class":738},"144728092",[324,126052,126053],{"class":867},"&sharerefer",[324,126055,913],{"class":863},[324,126057,126058],{"class":738},"PC",[324,126060,126061],{"class":867},"&sharesource",[324,126063,913],{"class":863},[324,126065,126066],{"class":738},"qq_69379513",[324,126068,126069],{"class":867},"&sharefrom",[324,126071,913],{"class":863},[324,126073,126074],{"class":738},"from_link\n",[10,126076,126078],{"id":126077},"_2genesis-报错issue","2.Genesis 报错issue",[19,126080,126021],{},[316,126082,126083],{"className":24549,"code":126024,"language":24551,"meta":50,"style":50},[269,126084,126085],{"__ignoreMap":50},[324,126086,126087,126089,126091,126093,126095,126097,126099,126101,126103,126105,126107,126109,126111,126113,126115,126117,126119],{"class":326,"line":327},[324,126088,126031],{"class":734},[324,126090,126034],{"class":738},[324,126092,126037],{"class":867},[324,126094,913],{"class":863},[324,126096,126042],{"class":738},[324,126098,126045],{"class":867},[324,126100,913],{"class":863},[324,126102,126050],{"class":738},[324,126104,126053],{"class":867},[324,126106,913],{"class":863},[324,126108,126058],{"class":738},[324,126110,126061],{"class":867},[324,126112,913],{"class":863},[324,126114,126066],{"class":738},[324,126116,126069],{"class":867},[324,126118,913],{"class":863},[324,126120,126074],{"class":738},[316,126122,126124],{"className":24549,"code":126123,"language":24551,"meta":50,"style":50},"https:\u002F\u002Fgithub.com\u002FGenesis-Embodied-AI\u002FGenesis\u002Fissues\u002F43\n",[269,126125,126126],{"__ignoreMap":50},[324,126127,126128],{"class":326,"line":327},[324,126129,126123],{"class":734},[10,126131,126133],{"id":126132},"_3genesis-项目运行结果","3.Genesis 项目运行结果",[19,126135,126136],{},"hello_robot.py",[316,126138,126140],{"className":31100,"code":126139,"language":31102,"meta":50,"style":50},"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",[269,126141,126142,126148,126163,126167,126179,126191,126195,126208,126212,126231,126241,126251,126265,126269,126273,126278,126282,126292,126299,126313,126320,126330,126335,126339,126357,126362,126366,126373],{"__ignoreMap":50},[324,126143,126144,126146],{"class":326,"line":327},[324,126145,31114],{"class":863},[324,126147,46027],{"class":867},[324,126149,126150,126153,126156,126158,126160],{"class":326,"line":203},[324,126151,126152],{"class":867},"os.environ[",[324,126154,126155],{"class":738},"'PYOPENGL_PLATFORM'",[324,126157,5172],{"class":867},[324,126159,913],{"class":863},[324,126161,126162],{"class":738}," 'glx'\n",[324,126164,126165],{"class":326,"line":338},[324,126166,488],{"emptyLinePlaceholder":487},[324,126168,126169,126171,126174,126176],{"class":326,"line":344},[324,126170,31114],{"class":863},[324,126172,126173],{"class":867}," genesis ",[324,126175,32105],{"class":863},[324,126177,126178],{"class":867}," gs\n",[324,126180,126181,126183,126186,126188],{"class":326,"line":484},[324,126182,31459],{"class":863},[324,126184,126185],{"class":867}," pynput ",[324,126187,31114],{"class":863},[324,126189,126190],{"class":867}," keyboard\n",[324,126192,126193],{"class":326,"line":491},[324,126194,488],{"emptyLinePlaceholder":487},[324,126196,126197,126200,126203,126205],{"class":326,"line":496},[324,126198,126199],{"class":867},"gs.init(",[324,126201,126202],{"class":5945},"backend",[324,126204,913],{"class":863},[324,126206,126207],{"class":867},"gs.gpu)\n",[324,126209,126210],{"class":326,"line":502},[324,126211,488],{"emptyLinePlaceholder":487},[324,126213,126214,126217,126219,126222,126225,126227,126229],{"class":326,"line":508},[324,126215,126216],{"class":867},"scene ",[324,126218,913],{"class":863},[324,126220,126221],{"class":867}," gs.Scene(",[324,126223,126224],{"class":5945},"show_viewer",[324,126226,913],{"class":863},[324,126228,32198],{"class":916},[324,126230,874],{"class":867},[324,126232,126233,126236,126238],{"class":326,"line":514},[324,126234,126235],{"class":867},"plane ",[324,126237,913],{"class":863},[324,126239,126240],{"class":867}," scene.add_entity(gs.morphs.Plane())\n",[324,126242,126243,126246,126248],{"class":326,"line":2343},[324,126244,126245],{"class":867},"franka ",[324,126247,913],{"class":863},[324,126249,126250],{"class":867}," scene.add_entity(\n",[324,126252,126253,126256,126258,126260,126263],{"class":326,"line":2348},[324,126254,126255],{"class":867},"    gs.morphs.MJCF(",[324,126257,46076],{"class":5945},[324,126259,913],{"class":863},[324,126261,126262],{"class":738},"'xml\u002Ffranka_emika_panda\u002Fpanda.xml'",[324,126264,38769],{"class":867},[324,126266,126267],{"class":326,"line":2354},[324,126268,874],{"class":867},[324,126270,126271],{"class":326,"line":2359},[324,126272,488],{"emptyLinePlaceholder":487},[324,126274,126275],{"class":326,"line":2373},[324,126276,126277],{"class":867},"scene.build()\n",[324,126279,126280],{"class":326,"line":2378},[324,126281,488],{"emptyLinePlaceholder":487},[324,126283,126284,126286,126289],{"class":326,"line":2384},[324,126285,32669],{"class":863},[324,126287,126288],{"class":734}," on_press",[324,126290,126291],{"class":867},"(key):\n",[324,126293,126294,126297],{"class":326,"line":2405},[324,126295,126296],{"class":863},"    try",[324,126298,4468],{"class":867},[324,126300,126301,126303,126306,126308,126311],{"class":326,"line":2410},[324,126302,3226],{"class":863},[324,126304,126305],{"class":867}," key.char ",[324,126307,3678],{"class":863},[324,126309,126310],{"class":738}," 'q'",[324,126312,4468],{"class":867},[324,126314,126315,126317],{"class":326,"line":2424},[324,126316,16461],{"class":863},[324,126318,126319],{"class":916}," False\n",[324,126321,126322,126325,126328],{"class":326,"line":2429},[324,126323,126324],{"class":863},"    except",[324,126326,126327],{"class":916}," AttributeError",[324,126329,4468],{"class":867},[324,126331,126332],{"class":326,"line":2458},[324,126333,126334],{"class":863},"        pass\n",[324,126336,126337],{"class":326,"line":2463},[324,126338,488],{"emptyLinePlaceholder":487},[324,126340,126341,126344,126346,126349,126352,126354],{"class":326,"line":2480},[324,126342,126343],{"class":867},"listener ",[324,126345,913],{"class":863},[324,126347,126348],{"class":867}," keyboard.Listener(",[324,126350,126351],{"class":5945},"on_press",[324,126353,913],{"class":863},[324,126355,126356],{"class":867},"on_press)\n",[324,126358,126359],{"class":326,"line":2485},[324,126360,126361],{"class":867},"listener.start()\n",[324,126363,126364],{"class":326,"line":2490},[324,126365,488],{"emptyLinePlaceholder":487},[324,126367,126368,126370],{"class":326,"line":2495},[324,126369,109384],{"class":863},[324,126371,126372],{"class":867}," listener.running:\n",[324,126374,126375],{"class":326,"line":2509},[324,126376,126377],{"class":867},"    scene.step()\n",[19,126379,126380],{},[48,126381],{"alt":50,"src":126382},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-09-Genesis-AI%E9%A1%B9%E7%9B%AE-001.png",[775,126384,126385],{},"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":50,"searchDepth":203,"depth":203,"links":126387},[],{"category":24105},"\u002Fwiki\u002F2025-01-09-genesis-ai",{"title":125992,"description":125997},"wiki\u002F2025-01-09-Genesis-AI项目","Dtwo2HcGkJ6rJoZHinCc3gXtagXcGTSkaByZcrG9fHc",{"id":126394,"title":126395,"body":126396,"description":791,"extension":792,"meta":126411,"navigation":487,"path":126412,"seo":126413,"stem":126414,"__hash__":126415},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识.md","1. 基础知识",{"type":7,"value":126397,"toc":126408},[126398,126401,126405],[10,126399,126395],{"id":126400},"_1-基础知识",[14,126402,126404],{"id":126403},"_11-js的组成","1.1 js的组成",[19,126406,126407],{},"ECMAScript（JS的基础）与 Web APIs（分为 DOM 页面文档对象模型和 BOM 浏览器对象模型）。",{"title":50,"searchDepth":203,"depth":203,"links":126409},[126410],{"id":126403,"depth":203,"text":126404},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch01",{"title":126395,"description":791},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识","Fx7-0TjX81PM8o5Hlfy2WWNjwvP67bOnqk3Cd2fyvJ8",{"id":126417,"title":126418,"body":126419,"description":791,"extension":792,"meta":126558,"navigation":487,"path":126559,"seo":126560,"stem":126561,"__hash__":126562},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容.md","2. vscode必备内容",{"type":7,"value":126420,"toc":126546},[126421,126424,126428,126431,126435,126445,126449,126452,126455,126458,126462,126469,126475,126479,126485,126496,126500,126503,126507,126510,126514,126517,126521,126524,126528,126531,126534,126537,126540,126543],[10,126422,126418],{"id":126423},"_2-vscode必备内容",[14,126425,126427],{"id":126426},"_21-标签分类","2.1 标签分类",[19,126429,126430],{},"标签有双标签和单标签：双标签＜html＞＜\u002Fhtml＞两者是成对存在的，分为开始标签和结束标签；单标签如：＜br \u002F＞。",[14,126432,126434],{"id":126433},"_22-快速生成html骨架","2.2 快速生成HTML骨架",[19,126436,126437,126438,126440,126441,126444],{},"使用 VSCode 时，基本结构不用一个一个输入，可以输入 ",[269,126439,1091],{}," 然后按 ",[269,126442,126443],{},"Tab","，快速自动生成基本结构。",[14,126446,126448],{"id":126447},"_23-预览插件与实时预览","2.3 预览插件与实时预览",[19,126450,126451],{},"VSCode 预览页面可右键选择 Open In Default Browser，需要安装 open in browser 插件。",[19,126453,126454],{},"Live Server实时预览插件，在修改标签后看网页界面时，不需要手动刷新就可以实现自动刷新",[19,126456,126457],{},"Live Server必须在vscode打开的文件夹中的文件程序中才能使用",[14,126459,126461],{"id":126460},"_24-视图缩放","2.4 视图缩放",[19,126463,126464,126465,126468],{},"缩放视图 ",[269,126466,126467],{},"ctrl+"," 可实现代码增大。",[19,126470,126471,126474],{},[269,126472,126473],{},"ctrl-"," 可实现代码减小。",[14,126476,126478],{"id":126477},"_25-新建与保存快捷键","2.5 新建与保存快捷键",[19,126480,126481,126482,29107],{},"VSCode 新建文件快捷键为 ",[269,126483,126484],{},"ctrl+N",[19,126486,126487,126488,126491,126492,126495],{},"保存快捷键为 ",[269,126489,126490],{},"ctrl+S","，将文本保存为 ",[269,126493,126494],{},".html"," 文件。",[14,126497,126499],{"id":126498},"_26-auto-rename-tag","2.6 Auto Rename Tag",[19,126501,126502],{},"VSCode 中 Auto Rename Tag 双击前标签，改动之后，后标签都会同步修改。",[14,126504,126506],{"id":126505},"_27-vscode-icons","2.7 vscode-icons",[19,126508,126509],{},"vscode-icons 可以实现不同后缀图标显示，便于快速识别文件类型。",[14,126511,126513],{"id":126512},"_28-easy-less","2.8 Easy LESS",[19,126515,126516],{},"Easy LESS 插件可以编译 less 文件。我们写的 less 不能直接引入到 html 文件中，通过这个插件可以自动生成 css 文件。",[14,126518,126520],{"id":126519},"_29-会了吧插件","2.9 会了吧插件",[19,126522,126523],{},"会了吧插件可以展示代码中英语单词的意思。",[14,126525,126527],{"id":126526},"_210-vscode常用快捷键","2.10 vscode常用快捷键",[19,126529,126530],{},"①快速复制:shift+alt+下箭头(上箭头）或者ctrl+C然后ctrl+V",[19,126532,126533],{},"②选定多个相同的单词:ctrl+D",[19,126535,126536],{},"③添加多个光标:ctrl+Alt+上箭头(下箭头）",[19,126538,126539],{},"④全局替换某些单词:ctrl+h",[19,126541,126542],{},"⑤快速定位到某一行:ctrl+g",[19,126544,126545],{},"⑥选择某一区块:按住Shift+alt然后拖动鼠标",{"title":50,"searchDepth":203,"depth":203,"links":126547},[126548,126549,126550,126551,126552,126553,126554,126555,126556,126557],{"id":126426,"depth":203,"text":126427},{"id":126433,"depth":203,"text":126434},{"id":126447,"depth":203,"text":126448},{"id":126460,"depth":203,"text":126461},{"id":126477,"depth":203,"text":126478},{"id":126498,"depth":203,"text":126499},{"id":126505,"depth":203,"text":126506},{"id":126512,"depth":203,"text":126513},{"id":126519,"depth":203,"text":126520},{"id":126526,"depth":203,"text":126527},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch02-vscode",{"title":126418,"description":791},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容","P9smz6dHOMWyfVooCL02EBMbE4RKCFhGZKfr19IQtY4",{"id":126564,"title":126565,"body":126566,"description":791,"extension":792,"meta":126725,"navigation":487,"path":126726,"seo":126727,"stem":126728,"__hash__":126729},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签.md","3. HTML文本与容器标签",{"type":7,"value":126567,"toc":126717},[126568,126571,126575,126585,126591,126597,126601,126610,126614,126619,126622,126625,126629,126632,126642,126651,126660,126669,126679,126686,126691,126696,126709],[10,126569,126565],{"id":126570},"_3-html文本与容器标签",[14,126572,126574],{"id":126573},"_31-标题标签","3.1 标题标签",[19,126576,126577,126580,126581,126584],{},[269,126578,126579],{},"\u003Ch1>","我是一级标签",[269,126582,126583],{},"\u003C\u002Fh1>"," h为head的缩写，是头部、标题，作为标题使用，以此类推",[19,126586,126587,126580,126589],{},[269,126588,126579],{},[269,126590,126583],{},[19,126592,123847,126593,126596],{},[269,126594,126595],{},"\u003C\u002Fh>","后写的内容是不会在这一行就行展现的，他会在下一行来进行展现",[14,126598,126600],{"id":126599},"_32-段落标签","3.2 段落标签",[19,126602,126603,126606,126607],{},[269,126604,126605],{},"\u003Cp>","....",[269,126608,126609],{},"\u003C\u002Fp>",[14,126611,126613],{"id":126612},"_33-换行标签","3.3 换行标签",[19,126615,126616],{},[269,126617,126618],{},"\u003Cbr \u002F>",[19,126620,126621],{},"具有强制换行的作用",[19,126623,126624],{},"单标签",[14,126626,126628],{"id":126627},"_34-文本格式化标签","3.4 文本格式化标签",[19,126630,126631],{},"提供粗体、斜体和下划线等效果",[19,126633,126634,126635,83261,126638,126641],{},"加粗：",[269,126636,126637],{},"\u003Cstrong>...\u003C\u002Fstrong>",[269,126639,126640],{},"\u003Cb>.....\u003C\u002Fb>","，前者相对后者在语义上更强烈。",[19,126643,126644,126645,83261,126648,126641],{},"斜体：",[269,126646,126647],{},"\u003Cem>...\u003C\u002Fem>",[269,126649,126650],{},"\u003Ci>...\u003C\u002Fi>",[19,126652,126653,126654,83261,126657,126641],{},"删除线：",[269,126655,126656],{},"\u003Cdel>...\u003C\u002Fdel>",[269,126658,126659],{},"\u003Cs>...\u003C\u002Fs>",[19,126661,126662,126663,83261,126666,126641],{},"下划线：",[269,126664,126665],{},"\u003Cins>...\u003C\u002Fins>",[269,126667,126668],{},"\u003Cu>...\u003C\u002Fu>",[14,126670,126672,126673,19139,126676,103414],{"id":126671},"_35-div和span标签","3.5 ",[269,126674,126675],{},"\u003Cdiv>",[269,126677,126678],{},"\u003Cspan>",[19,126680,126681,300,126683,126685],{},[269,126682,126675],{},[269,126684,126678],{}," 是没有语义的，它们就是一个盒子，用来装内容，是网页布局的基础。",[19,126687,126688],{},[269,126689,126690],{},"\u003Cdiv>这是头部\u003C\u002Fdiv>",[19,126692,126693],{},[269,126694,126695],{},"\u003Cspan>今日价格\u003C\u002Fspan>",[19,126697,126698,126699,126701,126702,126704,126705,126708],{},"两者特点：①",[269,126700,126675],{}," 标签用来布局，但一行通常只放一个 ",[269,126703,126675],{},"。可以理解为一个大盒子，独占一行，在 ",[269,126706,126707],{},"\u003C\u002Fdiv>"," 后再写内容会换到下一行显示。",[19,126710,77971,126711,126713,126714,126716],{},[269,126712,126678],{}," 标签也可用于布局，一行可以放多个 ",[269,126715,126678],{},"，可理解为小盒子。",{"title":50,"searchDepth":203,"depth":203,"links":126718},[126719,126720,126721,126722,126723],{"id":126573,"depth":203,"text":126574},{"id":126599,"depth":203,"text":126600},{"id":126612,"depth":203,"text":126613},{"id":126627,"depth":203,"text":126628},{"id":126671,"depth":203,"text":126724},"3.5 \u003Cdiv>和\u003Cspan>标签",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch03-html",{"title":126565,"description":791},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签","wtuhs31JaNMAgjeyllTRtJ-HSKIZNuZi1VTfL57zQys",{"id":126731,"title":126732,"body":126733,"description":791,"extension":792,"meta":126930,"navigation":487,"path":126931,"seo":126932,"stem":126933,"__hash__":126934},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接.md","4. HTML图像与链接",{"type":7,"value":126734,"toc":126922},[126735,126738,126742,126745,126751,126758,126764,126770,126773,126776,126779,126782,126785,126788,126791,126795,126798,126801,126804,126810,126816,126822,126829,126833,126839,126845,126848,126851,126857,126863,126869,126872,126875,126879,126882,126892,126898,126902,126911,126915,126918],[10,126736,126732],{"id":126737},"_4-html图像与链接",[14,126739,126741],{"id":126740},"_41-图像标签","4.1 图像标签",[19,126743,126744],{},"（1）标签",[19,126746,126747,126750],{},[269,126748,126749],{},"\u003Cimg src=\"图像URL\"\u002F>"," 单标签",[19,126752,126753,126754,126757],{},"src是",[269,126755,126756],{},"\u003Cimg>","标签的必须属性，他用于指定图像文件的路径和文件名，所属属性：简单理解为就是属于这个图像标签的特性",[19,126759,126760,126761],{},"alt:文本，替换文本。图像不能显示的文字 ",[269,126762,126763],{},"\u003Cimg src=\"11.png\" alt=\"1\" \u002F>",[19,126765,126766,126767],{},"title:文本，提示文本。鼠标放在图像上，显示的文字 ",[269,126768,126769],{},"\u003Cimg src=\"1.png\" alt=\"1\" title=\"预推免信息\" \u002F>",[19,126771,126772],{},"width:像素，设置图像的宽度",[19,126774,126775],{},"height:像素，设置图像的高度",[19,126777,126778],{},"border：像素，设置图像的边框粗细",[19,126780,126781],{},"（2）图像标签属性的注意点：",[19,126783,126784],{},"①图像标签可以拥有多个属性，必须写在标签名的后面",[19,126786,126787],{},"②属性前后不分前后顺序，标签名与属性、属性与属性之间均以空格分开",[19,126789,126790],{},"③属性采取键值对的格式，即key=“value”的格式，属性=“属性值”",[14,126792,126794],{"id":126793},"_42-路径注意要点","4.2 路径注意要点：",[19,126796,126797],{},"（1）目录文件夹：就是普通的文件夹，里边存放着我们做页面所需的相关材料，比如图片、CSS、JS、HTML等",[19,126799,126800],{},"（2）根目录：就是打开文件夹的第一层根目录",[19,126802,126803],{},"（3）相对路径：以引用文件所在位置为参考基础，而建立出的目录路径，简单来说就是图片相对于Html页面的位置",[19,126805,126806,126807],{},"①同一级路径：图像文件位于HTML文件同一级，如",[269,126808,126809],{},"\u003Cimg src=\"baidu.gif\"\u002F>",[19,126811,126812,126813],{},"②下一级路径：\u002F 图像位于HTML文件下一级，如",[269,126814,126815],{},"\u003Cimg src=\"images\u002Fbaidu.gif\"\u002F>",[19,126817,126818,126819],{},"③上一级路径： ..\u002F 图像位于HTML文件上一级，如",[269,126820,126821],{},"\u003Cimg src=\"..\u002F..\u002Fpublic\u002Fimages\u002Fbaidu.gif\"\u002F>",[19,126823,126824,126825,1115],{},"（4）绝对路径：指目录下的绝对地址，直接到达目标位置，通常是从盘符开始的路径。例如：\"D:\\web\\img\\logo.gif\"或者完整的网络地址\"",[25,126826,126827],{"href":126827,"rel":126828},"http:\u002F\u002Fwww.itcast.cn\u002Fimages\u002Flogo.gif",[29],[14,126830,126832],{"id":126831},"_43-超链接标签","4.3 超链接标签",[19,126834,126835,126838],{},[269,126836,126837],{},"\u003Ca>","标签用于定义超链接，作用是从一个页面链接到另一个页面",[19,126840,126841,126842],{},"①语法格式：",[269,126843,126844],{},"\u003Ca herf=\"跳转目标\" target=\"目标窗口的弹出方式\">文本或图像\u003C\u002Fa>",[19,126846,126847],{},"②属性：href：用于指定链接目标的url地址，（必须属性）当标签应用herf属性时，它就具有了超链接的功能",[19,126849,126850],{},"target：用于指定链接页面的打开方式，其中_self为默认值，_blank为在新窗口的打开方式",[19,126852,126853,126854],{},"③链接分类：外部链接：",[269,126855,126856],{},"\u003Ca herf=\"http:\u002F\u002Fwww.baidu.com\">百度\u003C\u002Fa>",[19,126858,126859,126860],{},"内部链接：网站内部页面之间的相互链接，直接链接内部页面名称即可，例如",[269,126861,126862],{},"\u003Ca href=\"index.html\">\u003C\u002Fa>",[19,126864,126865,126866],{},"空链接：如果当时没有确定链接目标时，",[269,126867,126868],{},"\u003Ca href=\"#\">首页\u003C\u002Fa>",[19,126870,126871],{},"下载链接：如果href里面地址是一个文件或者压缩包，会下载这个文件",[19,126873,126874],{},"网页元素链接：在网页中的各种网页元素，如文本、图像、表格、音频、视频等都可添加超链接",[14,126876,126878],{"id":126877},"_44-锚点链接","4.4 锚点链接",[19,126880,126881],{},"点我们点击链接，可以快速定位到页面中的某个位置",[19,126883,126884,126885,126888,126889],{},"①在链接文本的href属性中，设置属性值为#名字的形式，如",[269,126886,126887],{},"\u003Ca href=\"#two\">","第二级",[269,126890,126891],{},"\u003C\u002Fa>",[19,126893,126894,126895],{},"②找到目标位置标签，里边添加一个 id 属性，如 ",[269,126896,126897],{},"\u003Ch3 id=\"two\">第二集\u003C\u002Fh3>",[14,126899,126901],{"id":126900},"_45-注释标签","4.5 注释标签",[19,126903,126904,126907,126908],{},[269,126905,126906],{},"\u003C!-- 注释内容 -->"," 快捷键为 ",[269,126909,126910],{},"ctrl+\u002F",[14,126912,126914],{"id":126913},"_46-特殊字符","4.6 特殊字符",[19,126916,126917],{},"可以实现添加多个空格",[48,126919],{"style":126920,"src":126921},"max-width:100%","\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-001.png",{"title":50,"searchDepth":203,"depth":203,"links":126923},[126924,126925,126926,126927,126928,126929],{"id":126740,"depth":203,"text":126741},{"id":126793,"depth":203,"text":126794},{"id":126831,"depth":203,"text":126832},{"id":126877,"depth":203,"text":126878},{"id":126900,"depth":203,"text":126901},{"id":126913,"depth":203,"text":126914},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch04-html",{"title":126732,"description":791},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接","oVGVb72OKY9l9qkhNnjbDtFdhzjkOyiCgMJ-1MDqiDs",{"id":126936,"title":126937,"body":126938,"description":791,"extension":792,"meta":127231,"navigation":487,"path":127232,"seo":127233,"stem":127234,"__hash__":127235},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单.md","5. HTML表格列表与表单",{"type":7,"value":126939,"toc":127222},[126940,126943,126947,126950,126953,126956,126959,126962,126965,126968,126971,126974,126994,127000,127004,127007,127010,127013,127016,127019,127022,127026,127029,127032,127035,127038,127051,127056,127059,127062,127077,127080,127083,127086,127089,127092,127096,127099,127106,127109,127112,127115,127118,127121,127127,127130,127133,127139,127142,127145,127148,127154,127157,127160,127174,127181,127184,127187,127194,127203,127206,127209,127212,127216,127219],[10,126941,126937],{"id":126942},"_5-html表格列表与表单",[14,126944,126946],{"id":126945},"_51-表格标签","5.1 表格标签",[19,126948,126949],{},"①表格的作用：表格主要是用于显示、展示数据，因为它可以使数据显示的非常的规整，可读性非常好。",[19,126951,126952],{},"特别是后台展示数据的时候，能够熟练运用表格就显得很重要。一个清爽简约的表格能够把繁杂的数据处理的很有条理。",[19,126954,126955],{},"②表格基本语法：",[48,126957],{"style":126920,"src":126958},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-002.png",[19,126960,126961],{},"③表头单元格标签：一般表头单元格位于第一行或者第一列，表头单元格里面的文本内容加粗居中显示",[48,126963],{"style":126920,"src":126964},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-003.png",[19,126966,126967],{},"④表格属性：表格属性实际在开发中不常用，基本都是用css来实现的",[48,126969],{"style":126920,"src":126970},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-004.png",[19,126972,126973],{},"⑤表格结构标签：解决表格过长问题，将表格分割成表格头部和表格主体",[19,126975,126976,126979,126980,126982,126983,126986,126987,126989,126990,126993],{},[269,126977,126978],{},"\u003Cthead>","标签表格的头部区域，用于定义表格的头部，",[269,126981,126978],{},"内部必须拥有",[269,126984,126985],{},"\u003Ctr>","标签，一般位于第一行，",[269,126988,126978],{},"比",[269,126991,126992],{},"\u003Cth>","范围广",[19,126995,126996,126999],{},[269,126997,126998],{},"\u003Ctbody>","标签表格的主体区域，用于定义表格的主体，用于放数据文本",[14,127001,127003],{"id":127002},"_52-合并单元格","5.2 合并单元格",[19,127005,127006],{},"（1）合并单元格方式：",[19,127008,127009],{},"①跨行合并：rowspan=\"合并单元格的个数\"",[19,127011,127012],{},"②跨列合并：colspan=\"合并单元格的个数\"",[19,127014,127015],{},"（2）目标单元格：",[19,127017,127018],{},"①跨行：最上侧单元格为目标单元格，写合并单元格",[19,127020,127021],{},"②跨列：最左侧单元格为目标单元格，写合并单元格",[14,127023,127025],{"id":127024},"_53-列表标签","5.3 列表标签",[19,127027,127028],{},"（1）分类：无序列表、有序列表、自定义列表",[19,127030,127031],{},"①无序列表：",[48,127033],{"style":126920,"src":127034},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-005.png",[19,127036,127037],{},"无序列表的各个列表项之间顺序级别之分，是并列的",[19,127039,127040,127043,127044,127047,127048,127050],{},[269,127041,127042],{},"\u003Cul>``\u003C\u002Ful>","中只能嵌套",[269,127045,127046],{},"\u003Cli>``\u003C\u002Fli>","，直接在",[269,127049,127042],{},"中输入其他标签或文字是不对的",[19,127052,127053,127055],{},[269,127054,127046],{},"之间相当于一个容器，可以容纳所有元素",[19,127057,127058],{},"无序列表会带有自己的样式属性，但实际还是用css来设置",[19,127060,127061],{},"在css中去除前边的小圆点采用如下代码:",[316,127063,127067],{"className":127064,"code":127065,"language":127066,"meta":50,"style":50},"language-Css shiki shiki-themes github-light github-dark","list-style: none;\n","Css",[269,127068,127069],{"__ignoreMap":50},[324,127070,127071,127074],{"class":326,"line":327},[324,127072,127073],{"class":52022},"list-style",[324,127075,127076],{"class":867},": none;\n",[19,127078,127079],{},"②有序列表：",[48,127081],{"style":126920,"src":127082},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-006.png",[19,127084,127085],{},"③自定义列表：",[48,127087],{"style":126920,"src":127088},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-007.png",[48,127090],{"style":126920,"src":127091},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-008.png",[14,127093,127095],{"id":127094},"_54-表单标签","5.4 表单标签",[19,127097,127098],{},"一个完整表单通常由表单域、表单控件（也称表单元素）和提示信息3个部分组成",[19,127100,127101,127102,127105],{},"（1）表单域：包含单元素的区域，",[269,127103,127104],{},"\u003Cform>","标签可以实现信息的收集和传递。",[48,127107],{"style":126920,"src":127108},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-009.png",[19,127110,127111],{},"autocomplete属性是历史记录，记录表单输入信息，有两个值，一个off，一个on，为true时过几天点击表单，获得焦点时会显示前几天输入的信息",[19,127113,127114],{},"表单元素提交必须有name属性",[19,127116,127117],{},"注意点：①写表单元素前，应该有表单域把他们进行包含；②表单域是form标签",[19,127119,127120],{},"(2)表单控件：可以定义各种表单元素，这些表单元素就是允许用户在表单中输入或选择的内容控件",[19,127122,77948,127123,127126],{},[269,127124,127125],{},"\u003Cinput>","输入表单元素",[48,127128],{"style":126920,"src":127129},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-010.png",[48,127131],{"style":126920,"src":127132},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-011.png",[19,127134,127135,127136],{},"单选按钮：",[269,127137,127138],{},"\u003Cinput type=\"radio\" name=\"danxuan\">",[48,127140],{"style":126920,"src":127141},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-012.png",[19,127143,127144],{},"写法差异源于不同版本的 HTML 或 XHTML 规范",[48,127146],{"style":126920,"src":127147},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-013.png",[19,127149,127150,127153],{},[116,127151,127152],{},"注意点"," ：name和value是每个表单元素都有的属性值，主要给后台人员使用；name表单元素的名字，要求单选按钮和复选按钮有相同的name值；checked属性主要针对于单选按钮和复选框，主要作用一打开页面，就要可以默认选中某个表单元素；maxlength是用户可以在表单输入的最大字符数",[19,127155,127156],{},"②select下拉表单元素：可以节约页面控件",[48,127158],{"style":126920,"src":127159},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-014.png",[19,127161,127162,14524,127164,127167,127168,127170,127171,127173],{},[116,127163,897],{},[269,127165,127166],{},"\u003Cselect>","中至少包含一对",[269,127169,103435],{},"；在",[269,127172,103435],{},"中定义selected=\"selected\"时，当前项即为默认中选项",[19,127175,127176,127177,127180],{},"③",[269,127178,127179],{},"\u003Ctextarea>",":适用于输入内容较多的场景",[48,127182],{"style":126920,"src":127183},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-015.png",[19,127185,127186],{},"3行20列",[14,127188,127190,127191,103414],{"id":127189},"_55-lable标签","5.5 ",[269,127192,127193],{},"\u003Clable>",[19,127195,127196,127197,127199,127200,127202],{},"它不是表单标签，但常常与表单标签搭配使用，",[269,127198,127193],{},"标签用于绑定一个表单标签，当点击",[269,127201,127193],{},"标签内的文本",[19,127204,127205],{},"时，浏览器就会自动将焦点（光标）转到或者选择对应的表单元素上，以增加用户体验",[48,127207],{"style":126920,"src":127208},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-016.png",[48,127210],{"style":126920,"src":127211},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-017.png",[14,127213,127215],{"id":127214},"_56-实例","5.6 实例",[48,127217],{"style":126920,"src":127218},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-018.png",[775,127220,127221],{},"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":50,"searchDepth":203,"depth":203,"links":127223},[127224,127225,127226,127227,127228,127230],{"id":126945,"depth":203,"text":126946},{"id":127002,"depth":203,"text":127003},{"id":127024,"depth":203,"text":127025},{"id":127094,"depth":203,"text":127095},{"id":127189,"depth":203,"text":127229},"5.5 \u003Clable>标签",{"id":127214,"depth":203,"text":127215},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch05-html",{"title":126937,"description":791},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单","Px1T0DDoabk2X89anH-m0Cv6Hve9q1VFyw7W5L-GpEw",{"id":127237,"title":127238,"body":127239,"description":791,"extension":792,"meta":127788,"navigation":487,"path":127789,"seo":127790,"stem":127791,"__hash__":127792},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式.md","6. CSS语法与文本样式",{"type":7,"value":127240,"toc":127763},[127241,127244,127248,127251,127254,127258,127261,127264,127267,127270,127273,127276,127279,127283,127286,127290,127293,127296,127299,127303,127306,127309,127312,127318,127321,127324,127327,127330,127333,127336,127339,127372,127376,127379,127382,127385,127389,127392,127395,127398,127401,127404,127408,127411,127414,127417,127421,127424,127428,127431,127435,127438,127443,127447,127450,127454,127457,127460,127463,127466,127493,127496,127500,127503,127506,127511,127514,127517,127521,127524,127529,127532,127535,127538,127542,127545,127548,127551,127555,127558,127561,127564,127568,127572,127575,127615,127618,127622,127629,127632,127636,127639,127685,127689,127692,127695,127698,127726,127730,127733,127760],[10,127242,127238],{"id":127243},"_6-css语法与文本样式",[14,127245,127247],{"id":127246},"_61-css语法规范","6.1 css语法规范",[19,127249,127250],{},"由两部分组成，选择器及一条或多条声明",[48,127252],{"style":126920,"src":127253},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-019.png",[19,127255,127256],{},[116,127257,897],{},[19,127259,127260],{},"①选择器是用于指定css样式的HTML标签，花括号是对该对象设置的具体样式",[19,127262,127263],{},"②属性与属性值以“键值对”的形式出现",[19,127265,127266],{},"③属性是对指定的对象设置的样式属性，例如字体大小、文本颜色等",[19,127268,127269],{},"④属性和属性值之间用英文“;”分开",[48,127271],{"style":126920,"src":127272},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-020.png",[48,127274],{"style":126920,"src":127275},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-021.png",[48,127277],{"style":126920,"src":127278},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-022.png",[14,127280,127282],{"id":127281},"_62-css选择器","6.2 css选择器",[19,127284,127285],{},"可以分为基础选择器和复合选择器：①基础选择器由单个选择器组成；②基础选择器包括：标签选择器、类选择器、id选择器和通配符选择器",[35,127287,127289],{"id":127288},"_621-标签选择器","6.2.1 标签选择器",[19,127291,127292],{},"①优点：能快速为页面中同类型的标签统一设置样式",[19,127294,127295],{},"②缺点：不能设计差异化样式，只能选择全部的当前标签",[48,127297],{"style":126920,"src":127298},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-023.png",[35,127300,127302],{"id":127301},"_622-类选择器","6.2.2 类选择器",[19,127304,127305],{},"①类选择器口诀：样式点定义 结构类（class）调用 一个或多个 开发最常用",[19,127307,127308],{},"②样例",[48,127310],{"style":126920,"src":127311},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-024.png",[19,127313,127314,127315,127317],{},"③ ",[116,127316,127152],{}," ：类选择器用\".\"进行标识，后面紧跟类名（自己命名的）；",[19,127319,127320],{},"可以理解为给这个标签起了个名字，来表示；",[19,127322,127323],{},"长名称或词组可以使用横线来为选择器命名；",[19,127325,127326],{},"不要使用纯数字、中文等命名，尽量使用英文字母来表示；",[19,127328,127329],{},"命名要有意义；",[48,127331],{"style":126920,"src":127332},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-025.png",[19,127334,127335],{},"类选择器也可以指定特殊的元素p.center{}",[19,127337,127338],{},"p.center和.center都对",[316,127340,127342],{"className":127064,"code":127341,"language":127066,"meta":50,"style":50},"\u002F* 类选择器指定特殊元素 *\u002F\np.center {\n  text-align: center;\n}\n",[269,127343,127344,127349,127358,127368],{"__ignoreMap":50},[324,127345,127346],{"class":326,"line":327},[324,127347,127348],{"class":772},"\u002F* 类选择器指定特殊元素 *\u002F\n",[324,127350,127351,127353,127356],{"class":326,"line":203},[324,127352,19],{"class":52022},[324,127354,127355],{"class":734},".center",[324,127357,16301],{"class":867},[324,127359,127360,127362,127364,127366],{"class":326,"line":338},[324,127361,71248],{"class":916},[324,127363,52159],{"class":867},[324,127365,52314],{"class":916},[324,127367,2025],{"class":867},[324,127369,127370],{"class":326,"line":344},[324,127371,2296],{"class":867},[35,127373,127375],{"id":127374},"_623-多类名使用","6.2.3 多类名使用",[19,127377,127378],{},"①使用方式：在标签class属性中写多个类名；多个类名中间必须用空格分开；这个标签就可以分别具有这些类名的样式",[48,127380],{"style":126920,"src":127381},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-026.png",[19,127383,127384],{},"②多类名开发使用场景：可以把一些标签元素相同的样式（共同的部分）放到一个类里面；这些标签都可以调用这个公共的类，然后再调用自己独有的类；可以节省CSS代码，统一修改也非常方便；开发中要多使用",[35,127386,127388],{"id":127387},"_624-id选择器","6.2.4 id选择器",[19,127390,127391],{},"id选择器可以为标有特定id的HTML元素指定特定的样式",[19,127393,127394],{},"HTML元素以id属性来设置id选择器，css中id选择器以\"#\"来定义",[48,127396],{"style":126920,"src":127397},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-027.png",[19,127399,127400],{},"①口诀：样式#定义，结构id调用，只能给一个标签调用，别人切勿使用",[19,127402,127403],{},"②区别：类选择器可以调用多次；id选择器不能重复调用；类选择器在修改样式中用的最多，id选择器一般用于页面唯一性的元素上，经常和js搭配使用",[35,127405,127407],{"id":127406},"_625-通配符选择器","6.2.5 通配符选择器",[19,127409,127410],{},"定义用\"*\"，他表示选取页面中所有元素（标签）",[19,127412,127413],{},"* {",[19,127415,127416],{},"color=\"red\"}",[35,127418,127420],{"id":127419},"_626-总结","6.2.6 总结",[48,127422],{"style":126920,"src":127423},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-028.png",[14,127425,127427],{"id":127426},"_63-css字体属性","6.3 css字体属性",[19,127429,127430],{},"Fonts字体用于定义字体系列、大小、粗细、和文字样式（如斜体）",[35,127432,127434],{"id":127433},"_631-字体系列","6.3.1 字体系列",[19,127436,127437],{},"font-family: '宋体';",[19,127439,127440,127442],{},[116,127441,897],{}," 各种字体之间必须使用英文状态下的逗号隔开；一般情况，如果有空格隔开的多个单词组成的字体，加引号；尽量使用系统默认自带的字体，保证任何用户浏览器中都能正确使用",[35,127444,127446],{"id":127445},"_632-字体大小","6.3.2 字体大小",[19,127448,127449],{},"font-size: 20px",[19,127451,127452,288],{},[116,127453,127152],{},[19,127455,127456],{},"①px（像素）大小是网页的最常用单位",[19,127458,127459],{},"②谷歌浏览器默认为16px",[19,127461,127462],{},"③不同浏览器默认显示的字号大小不一致，尽量给定明确值，不要默认",[19,127464,127465],{},"④可以给body指定整个页面的大小：会自动引用",[316,127467,127469],{"className":127064,"code":127468,"language":127066,"meta":50,"style":50},"body {\n  font-size: 16px;\n}\n",[269,127470,127471,127477,127489],{"__ignoreMap":50},[324,127472,127473,127475],{"class":326,"line":327},[324,127474,52522],{"class":52022},[324,127476,16301],{"class":867},[324,127478,127479,127481,127483,127485,127487],{"class":326,"line":203},[324,127480,71348],{"class":916},[324,127482,52159],{"class":867},[324,127484,1465],{"class":916},[324,127486,52214],{"class":863},[324,127488,2025],{"class":867},[324,127490,127491],{"class":326,"line":338},[324,127492,2296],{"class":867},[19,127494,127495],{},"⑤标题标签比较特殊，需要单独指定大小",[35,127497,127499],{"id":127498},"_633-字体粗细","6.3.3 字体粗细",[19,127501,127502],{},"font-weight: bold;",[19,127504,127505],{},"font-weight: 100；",[19,127507,127508,127510],{},[116,127509,897],{}," ①粗体文字变细：尽量别用normal，多用数字",[19,127512,127513],{},"font-weight= 400;",[19,127515,127516],{},"②属性值100-700，400等同于normal，而700等同于bold，后面不需要跟单位",[35,127518,127520],{"id":127519},"_634-文字样式","6.3.4 文字样式",[19,127522,127523],{},"font-style: normal；",[19,127525,127526,288],{},[116,127527,127528],{},"属性值",[19,127530,127531],{},"①normal：默认值，浏览器会显示标准的字体样式 font-style：normal；",[19,127533,127534],{},"②italic：浏览器会显示斜体的字体样式",[48,127536],{"style":126920,"src":127537},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-029.png",[35,127539,127541],{"id":127540},"_635-字体符合属性","6.3.5 字体符合属性",[48,127543],{"style":126920,"src":127544},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-030.png",[48,127546],{"style":126920,"src":127547},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-031.png",[19,127549,127550],{},"以上都对√，第一个用的是类选择器，第二个用的是标签选择器",[19,127552,127553,288],{},[116,127554,127152],{},[19,127556,127557],{},"①样式font-style 粗细font-weight 大小\u002F行高font-size\u002Fline-height 字体font-family",[19,127559,127560],{},"②使用font属性时，必须按照语法格式书写，不能更换顺序，并且各个属性以空格隔开",[19,127562,127563],{},"③不需要设置大的属性可以省略（取默认值），但必须保留font-size和font-family属性，否则font属性将不起作用",[14,127565,127567],{"id":127566},"_64-css-test文本属性","6.4 css test文本属性",[35,127569,127571],{"id":127570},"_641-文本颜色","6.4.1 文本颜色",[19,127573,127574],{},"定义文本的外观，比如文本的颜色、对齐文本、装饰文本、文本缩进、行间距等",[316,127576,127578],{"className":127064,"code":127577,"language":127066,"meta":50,"style":50},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\np {\n  color: red;\n  \u002F* color: #ff0000; *\u002F\n  \u002F* color: rgb(255, 0, 0); *\u002F\n}\n",[269,127579,127580,127585,127591,127601,127606,127611],{"__ignoreMap":50},[324,127581,127582],{"class":326,"line":327},[324,127583,127584],{"class":772},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\n",[324,127586,127587,127589],{"class":326,"line":203},[324,127588,19],{"class":52022},[324,127590,16301],{"class":867},[324,127592,127593,127595,127597,127599],{"class":326,"line":338},[324,127594,71627],{"class":916},[324,127596,52159],{"class":867},[324,127598,58143],{"class":916},[324,127600,2025],{"class":867},[324,127602,127603],{"class":326,"line":344},[324,127604,127605],{"class":772},"  \u002F* color: #ff0000; *\u002F\n",[324,127607,127608],{"class":326,"line":484},[324,127609,127610],{"class":772},"  \u002F* color: rgb(255, 0, 0); *\u002F\n",[324,127612,127613],{"class":326,"line":491},[324,127614,2296],{"class":867},[48,127616],{"style":126920,"src":127617},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-032.png",[35,127619,127621],{"id":127620},"_642-对齐文本","6.4.2 对齐文本",[19,127623,127624,127625,127628],{},"text-align属于用于设置元素内文本内容的 ",[116,127626,127627],{},"水平对齐"," 方式",[19,127630,127631],{},"属性值：left：左对齐（默认值）；right：右对齐；center：居中对齐",[35,127633,127635],{"id":127634},"_643-装饰文本","6.4.3 装饰文本",[19,127637,127638],{},"text-decoration属性规定添加到文本的修饰，可以给文本添加下划线、删除线、上划线等",[316,127640,127642],{"className":127064,"code":127641,"language":127066,"meta":50,"style":50},"a {\n  text-decoration: none;\n}\np {\n  text-decoration: underline;\n}\n",[269,127643,127644,127650,127660,127664,127670,127681],{"__ignoreMap":50},[324,127645,127646,127648],{"class":326,"line":327},[324,127647,25],{"class":52022},[324,127649,16301],{"class":867},[324,127651,127652,127654,127656,127658],{"class":326,"line":203},[324,127653,71224],{"class":916},[324,127655,52159],{"class":867},[324,127657,55459],{"class":916},[324,127659,2025],{"class":867},[324,127661,127662],{"class":326,"line":338},[324,127663,2296],{"class":867},[324,127665,127666,127668],{"class":326,"line":344},[324,127667,19],{"class":52022},[324,127669,16301],{"class":867},[324,127671,127672,127674,127676,127679],{"class":326,"line":484},[324,127673,71224],{"class":916},[324,127675,52159],{"class":867},[324,127677,127678],{"class":916},"underline",[324,127680,2025],{"class":867},[324,127682,127683],{"class":326,"line":491},[324,127684,2296],{"class":867},[35,127686,127688],{"id":127687},"_644-文本缩进","6.4.4 文本缩进",[19,127690,127691],{},"实现文本的第一行首行缩进自己指定的距离",[19,127693,127694],{},"20px往右边走；-20px往左边走",[19,127696,127697],{},"em是一个相对单位，就是当前元素（font-size）1个文字的大小，如果当前元素没有设置大小，则会按照父元素的1个文字大小，如果此时写了2em则是当前元素2个文字大小的距离",[316,127699,127701],{"className":127064,"code":127700,"language":127066,"meta":50,"style":50},"p {\n  text-indent: 2em;\n}\n",[269,127702,127703,127709,127722],{"__ignoreMap":50},[324,127704,127705,127707],{"class":326,"line":327},[324,127706,19],{"class":52022},[324,127708,16301],{"class":867},[324,127710,127711,127714,127716,127718,127720],{"class":326,"line":203},[324,127712,127713],{"class":916},"  text-indent",[324,127715,52159],{"class":867},[324,127717,944],{"class":916},[324,127719,24280],{"class":863},[324,127721,2025],{"class":867},[324,127723,127724],{"class":326,"line":338},[324,127725,2296],{"class":867},[35,127727,127729],{"id":127728},"_645-行间距","6.4.5 行间距",[19,127731,127732],{},"行间距可以理解为由上间距、下间距和文字高度组成，实际代码改变的是上下间距的大小实现行间距改变的",[316,127734,127736],{"className":127064,"code":127735,"language":127066,"meta":50,"style":50},"p {\n  line-height: 1.6;\n}\n",[269,127737,127738,127744,127756],{"__ignoreMap":50},[324,127739,127740,127742],{"class":326,"line":327},[324,127741,19],{"class":52022},[324,127743,16301],{"class":867},[324,127745,127746,127749,127751,127754],{"class":326,"line":203},[324,127747,127748],{"class":916},"  line-height",[324,127750,52159],{"class":867},[324,127752,127753],{"class":916},"1.6",[324,127755,2025],{"class":867},[324,127757,127758],{"class":326,"line":338},[324,127759,2296],{"class":867},[775,127761,127762],{},"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":50,"searchDepth":203,"depth":203,"links":127764},[127765,127766,127774,127781],{"id":127246,"depth":203,"text":127247},{"id":127281,"depth":203,"text":127282,"children":127767},[127768,127769,127770,127771,127772,127773],{"id":127288,"depth":338,"text":127289},{"id":127301,"depth":338,"text":127302},{"id":127374,"depth":338,"text":127375},{"id":127387,"depth":338,"text":127388},{"id":127406,"depth":338,"text":127407},{"id":127419,"depth":338,"text":127420},{"id":127426,"depth":203,"text":127427,"children":127775},[127776,127777,127778,127779,127780],{"id":127433,"depth":338,"text":127434},{"id":127445,"depth":338,"text":127446},{"id":127498,"depth":338,"text":127499},{"id":127519,"depth":338,"text":127520},{"id":127540,"depth":338,"text":127541},{"id":127566,"depth":203,"text":127567,"children":127782},[127783,127784,127785,127786,127787],{"id":127570,"depth":338,"text":127571},{"id":127620,"depth":338,"text":127621},{"id":127634,"depth":338,"text":127635},{"id":127687,"depth":338,"text":127688},{"id":127728,"depth":338,"text":127729},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch06-css",{"title":127238,"description":791},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式","edNbSUYKLIJ_C-TlXm4kGf1NOqNSGo0jc2I9MN2stKg",{"id":127794,"title":127795,"body":127796,"description":791,"extension":792,"meta":128445,"navigation":487,"path":128446,"seo":128447,"stem":128448,"__hash__":128449},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶.md","7. CSS引入方式与选择器进阶",{"type":7,"value":127797,"toc":128426},[127798,127801,127805,127809,127869,127873,127883,127886,127889,127893,127918,127922,127925,127928,127931,127934,127937,127941,127944,127947,127989,127992,128018,128024,128027,128031,128035,128041,128044,128047,128050,128053,128056,128059,128104,128108,128111,128114,128118,128122,128151,128154,128159,128162,128165,128168,128171,128175,128179,128182,128184,128187,128191,128194,128198,128201,128204,128207,128211,128215,128221,128231,128234,128237,128240,128243,128246,128369,128377,128385,128423],[10,127799,127795],{"id":127800},"_7-css引入方式与选择器进阶",[14,127802,127804],{"id":127803},"_71-css引入方式","7.1 css引入方式",[35,127806,127808],{"id":127807},"_711-内部样式表嵌入式","7.1.1 内部样式表（嵌入式）",[316,127810,127814],{"className":127811,"code":127812,"language":127813,"meta":50,"style":50},"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",[269,127815,127816,127824,127831,127843,127856,127861],{"__ignoreMap":50},[324,127817,127818,127820,127822],{"class":326,"line":327},[324,127819,1774],{"class":867},[324,127821,775],{"class":52022},[324,127823,52029],{"class":867},[324,127825,127826,127829],{"class":326,"line":203},[324,127827,127828],{"class":52022},"  h1",[324,127830,16301],{"class":867},[324,127832,127833,127836,127838,127841],{"class":326,"line":338},[324,127834,127835],{"class":916},"    color",[324,127837,52159],{"class":867},[324,127839,127840],{"class":916},"blue",[324,127842,2025],{"class":867},[324,127844,127845,127848,127850,127852,127854],{"class":326,"line":344},[324,127846,127847],{"class":916},"    font-size",[324,127849,52159],{"class":867},[324,127851,1664],{"class":916},[324,127853,52214],{"class":863},[324,127855,2025],{"class":867},[324,127857,127858],{"class":326,"line":484},[324,127859,127860],{"class":867},"  }\n",[324,127862,127863,127865,127867],{"class":326,"line":491},[324,127864,52507],{"class":867},[324,127866,775],{"class":52022},[324,127868,52029],{"class":867},[19,127870,127871,288],{},[116,127872,127152],{},[19,127874,77948,127875,127878,127879,127882],{},[269,127876,127877],{},"\u003Cstyle>","理论上可以放在HTML文档的任意位置，但一般会放在",[269,127880,127881],{},"\u003Chead>","标签中",[19,127884,127885],{},"②通过这种方式可以方便控制整个页面的元素样式设置",[19,127887,127888],{},"③代码结构清晰，但是并没有实现结构与样式的完全分离",[35,127890,127892],{"id":127891},"_712-行内样式表行内式","7.1.2 行内样式表（行内式）",[316,127894,127896],{"className":127811,"code":127895,"language":127813,"meta":50,"style":50},"\u003Cp style=\"color: red; font-size: 16px;\">这是一个段落\u003C\u002Fp>\n",[269,127897,127898],{"__ignoreMap":50},[324,127899,127900,127902,127904,127906,127908,127911,127914,127916],{"class":326,"line":327},[324,127901,1774],{"class":867},[324,127903,19],{"class":52022},[324,127905,63348],{"class":734},[324,127907,913],{"class":867},[324,127909,127910],{"class":738},"\"color: red; font-size: 16px;\"",[324,127912,127913],{"class":867},">这是一个段落\u003C\u002F",[324,127915,19],{"class":52022},[324,127917,52029],{"class":867},[19,127919,127920,288],{},[116,127921,127152],{},[19,127923,127924],{},"①style其实就是标签的属性",[19,127926,127927],{},"②在双引号中间，写法要符合css规范",[19,127929,127930],{},"③可以控制当前的标签设置样式",[19,127932,127933],{},"④书写繁琐，简单时才用",[19,127935,127936],{},"⑤使用行内样式表设定css，通常也被称为行内式引入",[35,127938,127940],{"id":127939},"_713-外部样式表链接式","7.1.3 外部样式表（链接式）",[19,127942,127943],{},"使用最多，单独建一个css文件，然后html引用",[19,127945,127946],{},"①css文件部分： style.css",[316,127948,127950],{"className":127064,"code":127949,"language":127066,"meta":50,"style":50},"\u002F* style.css *\u002F\nh1 {\n  color: blue;\n  font-size: 24px;\n}\n",[269,127951,127952,127957,127963,127973,127985],{"__ignoreMap":50},[324,127953,127954],{"class":326,"line":327},[324,127955,127956],{"class":772},"\u002F* style.css *\u002F\n",[324,127958,127959,127961],{"class":326,"line":203},[324,127960,10],{"class":52022},[324,127962,16301],{"class":867},[324,127964,127965,127967,127969,127971],{"class":326,"line":338},[324,127966,71627],{"class":916},[324,127968,52159],{"class":867},[324,127970,127840],{"class":916},[324,127972,2025],{"class":867},[324,127974,127975,127977,127979,127981,127983],{"class":326,"line":344},[324,127976,71348],{"class":916},[324,127978,52159],{"class":867},[324,127980,1664],{"class":916},[324,127982,52214],{"class":863},[324,127984,2025],{"class":867},[324,127986,127987],{"class":326,"line":484},[324,127988,2296],{"class":867},[19,127990,127991],{},"②html部分",[316,127993,127995],{"className":127811,"code":127994,"language":127813,"meta":50,"style":50},"\u003Clink rel=\"stylesheet\" href=\"style.css\">\n",[269,127996,127997],{"__ignoreMap":50},[324,127998,127999,128001,128003,128005,128007,128009,128011,128013,128016],{"class":326,"line":327},[324,128000,1774],{"class":867},[324,128002,69727],{"class":52022},[324,128004,69730],{"class":734},[324,128006,913],{"class":867},[324,128008,69735],{"class":738},[324,128010,61779],{"class":734},[324,128012,913],{"class":867},[324,128014,128015],{"class":738},"\"style.css\"",[324,128017,52029],{"class":867},[19,128019,128020,128023],{},[269,128021,128022],{},"\u003Chr>","水平线标签（但是不常用！）",[19,128025,128026],{},"ctrl+0回到页面原来大小",[14,128028,128030],{"id":128029},"_72-emmet语法-可以实现快速生成html结构语法和快速生成css样式语法","7.2 Emmet语法 可以实现快速生成HTML结构语法和快速生成CSS样式语法",[35,128032,128034],{"id":128033},"_721-快速生成html","7.2.1 快速生成html",[19,128036,128037,128038],{},"①生成标签直接输入标签名按tab键即可比如div然后tab键，就可以生成",[269,128039,128040],{},"\u003Cdiv>``\u003C\u002Fdiv>",[19,128042,128043],{},"②如果想要生成多个相同标签加上*就可以了比如div*3就可以快速生成3个div",[19,128045,128046],{},"③如果有父子级关系的标签，可以用>比如ul>li就可以了",[19,128048,128049],{},"④如果有兄弟关系的标签，用+就可以了比如div+p",[19,128051,128052],{},"⑤如果生成带有类名或者id名字的，直接写.demo或者#twotab键就可以了",[19,128054,128055],{},"⑥如果生成的div类名是有顺序的，可以用自增符号$",[19,128057,128058],{},"⑦如果想要在生成的标签内部写内容可以用{}表示",[316,128060,128062],{"className":127811,"code":128061,"language":127813,"meta":50,"style":50},"\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",[269,128063,128064,128069,128074,128079,128084,128089,128094,128099],{"__ignoreMap":50},[324,128065,128066],{"class":326,"line":327},[324,128067,128068],{"class":772},"\u003C!-- Emmet 语法示例 -->\n",[324,128070,128071],{"class":326,"line":203},[324,128072,128073],{"class":772},"\u003C!-- div*3        → 生成3个div -->\n",[324,128075,128076],{"class":326,"line":338},[324,128077,128078],{"class":772},"\u003C!-- ul>li*5      → ul下生成5个li -->\n",[324,128080,128081],{"class":326,"line":344},[324,128082,128083],{"class":772},"\u003C!-- div+p        → 兄弟div和p -->\n",[324,128085,128086],{"class":326,"line":484},[324,128087,128088],{"class":772},"\u003C!-- .demo        → \u003Cdiv class=\"demo\">\u003C\u002Fdiv> -->\n",[324,128090,128091],{"class":326,"line":491},[324,128092,128093],{"class":772},"\u003C!-- #two         → \u003Cdiv id=\"two\">\u003C\u002Fdiv> -->\n",[324,128095,128096],{"class":326,"line":496},[324,128097,128098],{"class":772},"\u003C!-- .demo$*3     → demo1, demo2, demo3 -->\n",[324,128100,128101],{"class":326,"line":502},[324,128102,128103],{"class":772},"\u003C!-- div{内容}     → \u003Cdiv>内容\u003C\u002Fdiv> -->\n",[35,128105,128107],{"id":128106},"_722-快速生成css","7.2.2 快速生成css",[19,128109,128110],{},"简写开头",[19,128112,128113],{},"①比如w200按tab可以生成width:200px; ②比如lh26px按tab可以生成line-height:26px;",[14,128115,128117],{"id":128116},"_73-css复合选择器","7.3 css复合选择器",[35,128119,128121],{"id":128120},"_731-后代选择器","7.3.1 后代选择器",[316,128123,128125],{"className":127064,"code":128124,"language":127066,"meta":50,"style":50},".parent .child {\n  color: blue;\n}\n",[269,128126,128127,128137,128147],{"__ignoreMap":50},[324,128128,128129,128132,128135],{"class":326,"line":327},[324,128130,128131],{"class":734},".parent",[324,128133,128134],{"class":734}," .child",[324,128136,16301],{"class":867},[324,128138,128139,128141,128143,128145],{"class":326,"line":203},[324,128140,71627],{"class":916},[324,128142,52159],{"class":867},[324,128144,127840],{"class":916},[324,128146,2025],{"class":867},[324,128148,128149],{"class":326,"line":338},[324,128150,2296],{"class":867},[19,128152,128153],{},"元素1 元素2 {样式声明}",[19,128155,128156],{},[116,128157,128158],{},"注意点:",[19,128160,128161],{},"①元素1和元素2中间用空格隔开",[19,128163,128164],{},"②元素1是父级，元素2是子级，最终选择的是元素2",[19,128166,128167],{},"③元素2可以是儿子，也可以是孙子等，只要是元素1的后代即可",[19,128169,128170],{},"④元素1和元素2可以是任意基础选择器",[35,128172,128174],{"id":128173},"_732-子选择器-元素1-元素2-样式声明","7.3.2 子选择器 元素1 > 元素2 {样式声明}",[19,128176,128177],{},[116,128178,128158],{},[19,128180,128181],{},"①元素1和元素2中间用大于号隔开",[19,128183,128164],{},[19,128185,128186],{},"③元素2必须是亲儿子，其孙子、重孙之类都不归他管.你也可以叫他亲儿子选择器",[35,128188,128190],{"id":128189},"_733-并集选择器","7.3.3 并集选择器",[19,128192,128193],{},"元素1，元素2 {样式声明}",[19,128195,128196],{},[116,128197,128158],{},[19,128199,128200],{},"①元素1和元素2中间用逗号隔开",[19,128202,128203],{},"②逗号可以理解为和的意思",[19,128205,128206],{},"③并集选择器通常用于集体声明",[35,128208,128210],{"id":128209},"_734-链接伪类选择器","7.3.4 链接伪类选择器",[19,128212,128213],{},[116,128214,128158],{},[19,128216,128217,128218,128220],{},"①为了确保生效，请按照 LVHA 的循顺序声明 ",[69727,128219],{},"－:visited－:hover－:active。",[19,128222,128223,128224,128227,128228,26464],{},"②伪类选择器书写最大的特点是用冒号（:）表示，比如 ",[128225,128226],"hover",{}," 、 ",[128229,128230],"first-child",{},[19,128232,128233],{},"③ 因为 a 链接在浏览器中具有默认样式，所以我们实际工作中都需要给链接单独指定样式",[19,128235,128236],{},"link对没访问的进行设置",[19,128238,128239],{},"vistied对已访问的进行改变",[19,128241,128242],{},"hover鼠标经过就会变",[19,128244,128245],{},"active常按(点)就会变",[316,128247,128249],{"className":127064,"code":128248,"language":127066,"meta":50,"style":50},"\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",[269,128250,128251,128256,128265,128275,128285,128289,128298,128309,128313,128321,128331,128341,128345,128354,128365],{"__ignoreMap":50},[324,128252,128253],{"class":326,"line":327},[324,128254,128255],{"class":772},"\u002F* 链接伪类选择器 —— 按 LVHA 顺序 *\u002F\n",[324,128257,128258,128260,128263],{"class":326,"line":203},[324,128259,25],{"class":52022},[324,128261,128262],{"class":734},":link",[324,128264,16301],{"class":867},[324,128266,128267,128269,128271,128273],{"class":326,"line":338},[324,128268,71627],{"class":916},[324,128270,52159],{"class":867},[324,128272,63091],{"class":916},[324,128274,2025],{"class":867},[324,128276,128277,128279,128281,128283],{"class":326,"line":344},[324,128278,71224],{"class":916},[324,128280,52159],{"class":867},[324,128282,55459],{"class":916},[324,128284,2025],{"class":867},[324,128286,128287],{"class":326,"line":484},[324,128288,2296],{"class":867},[324,128290,128291,128293,128296],{"class":326,"line":491},[324,128292,25],{"class":52022},[324,128294,128295],{"class":734},":visited",[324,128297,16301],{"class":867},[324,128299,128300,128302,128304,128307],{"class":326,"line":496},[324,128301,71627],{"class":916},[324,128303,52159],{"class":867},[324,128305,128306],{"class":916},"purple",[324,128308,2025],{"class":867},[324,128310,128311],{"class":326,"line":502},[324,128312,2296],{"class":867},[324,128314,128315,128317,128319],{"class":326,"line":508},[324,128316,25],{"class":52022},[324,128318,61662],{"class":734},[324,128320,16301],{"class":867},[324,128322,128323,128325,128327,128329],{"class":326,"line":514},[324,128324,71627],{"class":916},[324,128326,52159],{"class":867},[324,128328,55611],{"class":916},[324,128330,2025],{"class":867},[324,128332,128333,128335,128337,128339],{"class":326,"line":2343},[324,128334,71224],{"class":916},[324,128336,52159],{"class":867},[324,128338,127678],{"class":916},[324,128340,2025],{"class":867},[324,128342,128343],{"class":326,"line":2348},[324,128344,2296],{"class":867},[324,128346,128347,128349,128352],{"class":326,"line":2354},[324,128348,25],{"class":52022},[324,128350,128351],{"class":734},":active",[324,128353,16301],{"class":867},[324,128355,128356,128358,128360,128363],{"class":326,"line":2359},[324,128357,71627],{"class":916},[324,128359,52159],{"class":867},[324,128361,128362],{"class":916},"green",[324,128364,2025],{"class":867},[324,128366,128367],{"class":326,"line":2373},[324,128368,2296],{"class":867},[35,128370,128372,128373,128376],{"id":128371},"_735-伪类选择器","7.3.5 ",[128374,128375],"focus",{},"伪类选择器",[19,128378,128379,128381,128382,128384],{},[128374,128380],{}," 伪类选择器用于选取获得焦点的表单元素。 焦点就是光标，一般情况 ",[269,128383,127125],{}," 类表单元素才能获取，因此这个选择器也主要针对于表单元素来说。",[316,128386,128388],{"className":127064,"code":128387,"language":127066,"meta":50,"style":50},"input:focus {\n  border-color: skyblue;\n  outline: none;\n}\n",[269,128389,128390,128398,128409,128419],{"__ignoreMap":50},[324,128391,128392,128394,128396],{"class":326,"line":327},[324,128393,54543],{"class":52022},[324,128395,62622],{"class":734},[324,128397,16301],{"class":867},[324,128399,128400,128403,128405,128407],{"class":326,"line":203},[324,128401,128402],{"class":916},"  border-color",[324,128404,52159],{"class":867},[324,128406,55611],{"class":916},[324,128408,2025],{"class":867},[324,128410,128411,128413,128415,128417],{"class":326,"line":338},[324,128412,71520],{"class":916},[324,128414,52159],{"class":867},[324,128416,55459],{"class":916},[324,128418,2025],{"class":867},[324,128420,128421],{"class":326,"line":344},[324,128422,2296],{"class":867},[775,128424,128425],{},"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":50,"searchDepth":203,"depth":203,"links":128427},[128428,128433,128437],{"id":127803,"depth":203,"text":127804,"children":128429},[128430,128431,128432],{"id":127807,"depth":338,"text":127808},{"id":127891,"depth":338,"text":127892},{"id":127939,"depth":338,"text":127940},{"id":128029,"depth":203,"text":128030,"children":128434},[128435,128436],{"id":128033,"depth":338,"text":128034},{"id":128106,"depth":338,"text":128107},{"id":128116,"depth":203,"text":128117,"children":128438},[128439,128440,128441,128442,128443],{"id":128120,"depth":338,"text":128121},{"id":128173,"depth":338,"text":128174},{"id":128189,"depth":338,"text":128190},{"id":128209,"depth":338,"text":128210},{"id":128371,"depth":338,"text":128444},"7.3.5 伪类选择器",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch07-css",{"title":127795,"description":791},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶","5XV5_YAJT4dZrDp1IubvvQckZ5rLDX2qDFIIitfWb20",{"id":128451,"title":128452,"body":128453,"description":791,"extension":792,"meta":130376,"navigation":487,"path":130377,"seo":130378,"stem":130379,"__hash__":130380},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性.md","8. CSS显示模式与背景特性",{"type":7,"value":128454,"toc":130350},[128455,128458,128462,128471,128475,128501,128506,128509,128512,128515,128518,128522,128525,128535,128543,128547,128582,128587,128590,128593,128596,128599,128603,128606,128615,128619,128632,128637,128640,128643,128646,128650,128653,128657,128660,128715,128718,128749,128752,128806,128810,128813,128979,129102,129105,129108,129111,129114,129118,129121,129125,129128,129131,129135,129138,129169,129196,129224,129227,129231,129257,129300,129304,129398,129401,129428,129431,129434,129437,129440,129443,129446,129449,129452,129455,129459,129516,129543,129547,129595,129599,129640,129642,129645,129648,129651,129654,129658,129750,129753,129756,129759,129763,129886,130087,130091,130095,130098,130101,130104,130108,130111,130114,130139,130142,130145,130148,130151,130154,130158,130166,130228,130231,130289,130292,130295,130298,130301,130304,130307,130310,130347],[10,128456,128452],{"id":128457},"_8-css显示模式与背景特性",[14,128459,128461],{"id":128460},"_81-css元素显示模式","8.1 css元素显示模式",[19,128463,128464,128465,128467,128468,128470],{},"显示模式的作用是更好布局页面，元素显示模式就是元素（标签）以什么方式进行显示，比如",[269,128466,126675],{},"自己占一行，比如一行可以放多个",[269,128469,126678],{},"，HTML 元素一般分为块元素和行内元素两种类型",[35,128472,128474],{"id":128473},"_811-块元素","8.1.1 块元素",[19,128476,128477,128478,128480,128481,1077,128484,1077,128486,1077,128488,1077,128491,1077,128494,128497,128498,128500],{},"常见的块元素有",[269,128479,126579],{},"~",[269,128482,128483],{},"\u003Ch6>",[269,128485,126605],{},[269,128487,126675],{},[269,128489,128490],{},"\u003Cul>",[269,128492,128493],{},"\u003Col>",[269,128495,128496],{},"\u003Cli>","等，其中 ",[269,128499,126675],{}," 标签是最典型的块元素",[19,128502,128503],{},[116,128504,128505],{},"块级元素的特点：",[19,128507,128508],{},"① 比较霸道，自己独占一行。",[19,128510,128511],{},"② 高度，宽度、外边距以及内边距都可以控制。",[19,128513,128514],{},"③ 宽度默认是容器（父级宽度）的100%。",[19,128516,128517],{},"④ 是一个容器及盒子，里面可以放行内或者块级元素。",[19,128519,128520],{},[116,128521,897],{},[19,128523,128524],{},"①文字类的元素内不能使用块级元素",[19,128526,77971,128527,128529,128530,128532,128533],{},[269,128528,126605],{}," 标签主要用于存放文字，因此 ",[269,128531,126605],{}," 里面不能放块级元素，特别是不能放",[269,128534,126675],{},[19,128536,128537,128538,128480,128540,128542],{},"⑥同理， ",[269,128539,126579],{},[269,128541,128483],{},"等都是文字类块级标签，里面也不能放其他块级元素",[35,128544,128546],{"id":128545},"_812-行内元素","8.1.2 行内元素",[19,128548,128549,128550,1077,128552,1077,128555,1077,128558,1077,128561,1077,128564,1077,128567,1077,128570,1077,128573,1077,128576,128578,128579,128581],{},"常见的行内元素有 ",[269,128551,126837],{},[269,128553,128554],{},"\u003Cstrong>",[269,128556,128557],{},"\u003Cb>",[269,128559,128560],{},"\u003Cem>",[269,128562,128563],{},"\u003Ci>",[269,128565,128566],{},"\u003Cdel>",[269,128568,128569],{},"\u003Cs>",[269,128571,128572],{},"\u003Cins>",[269,128574,128575],{},"\u003Cu>",[269,128577,126678],{}," 等，其中 ",[269,128580,126678],{}," 标签是最典型的行内元素。有的地方也将行内元素称为内联元素。",[19,128583,128584],{},[116,128585,128586],{},"特点：",[19,128588,128589],{},"① 相邻行内元素在一行上，一行可以显示多个。",[19,128591,128592],{},"② 高、宽直接设置是无效的。",[19,128594,128595],{},"③ 默认宽度就是它本身内容的宽度。",[19,128597,128598],{},"④ 行内元素只能容纳文本或其他行内元素。",[19,128600,128601],{},[116,128602,897],{},[19,128604,128605],{},"① 链接里面不能再放链接，也就是a里面不能再放a",[19,128607,128608,128609,128611,128612,128614],{},"②特殊情况链接 ",[269,128610,126837],{}," 里面可以放块级元素，但是给 ",[269,128613,126837],{}," 转换一下块级模式最安全",[35,128616,128618],{"id":128617},"_813-行内块元素","8.1.3 行内块元素",[19,128620,128621,128622,1077,128625,1077,128628,128631],{},"在行内元素中有几个特殊的标签 —— ",[269,128623,128624],{},"\u003Cimg \u002F>",[269,128626,128627],{},"\u003Cinput \u002F>",[269,128629,128630],{},"\u003Ctd>","，它们同时具有块元素和行内元素的特点。有些资料称它们为行内块元素",[19,128633,128634],{},[116,128635,128636],{},"行内块元素的特点：",[19,128638,128639],{},"① 和相邻行内元素（行内块）在一行上，但是他们之间会有空白缝隙。一行可以显示多个（行内元素特点）",[19,128641,128642],{},"② 默认宽度就是它本身内容的宽度（行内元素特点）",[19,128644,128645],{},"③ 高度，行高、外边距以及内边距都可以控制（块级元素特点）",[35,128647,128649],{"id":128648},"_814-总结","8.1.4 总结",[48,128651],{"style":126920,"src":128652},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-033.png",[35,128654,128656],{"id":128655},"_815-元素显示模式的转换","8.1.5 元素显示模式的转换",[19,128658,128659],{},"①转换为块元素：display:block;",[316,128661,128663],{"className":127064,"code":128662,"language":127066,"meta":50,"style":50},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\na {\n  display: block;\n  width: 100px;\n  height: 40px;\n}\n",[269,128664,128665,128670,128676,128687,128699,128711],{"__ignoreMap":50},[324,128666,128667],{"class":326,"line":327},[324,128668,128669],{"class":772},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\n",[324,128671,128672,128674],{"class":326,"line":203},[324,128673,25],{"class":52022},[324,128675,16301],{"class":867},[324,128677,128678,128681,128683,128685],{"class":326,"line":338},[324,128679,128680],{"class":916},"  display",[324,128682,52159],{"class":867},[324,128684,61591],{"class":916},[324,128686,2025],{"class":867},[324,128688,128689,128691,128693,128695,128697],{"class":326,"line":344},[324,128690,71290],{"class":916},[324,128692,52159],{"class":867},[324,128694,1175],{"class":916},[324,128696,52214],{"class":863},[324,128698,2025],{"class":867},[324,128700,128701,128703,128705,128707,128709],{"class":326,"line":484},[324,128702,71510],{"class":916},[324,128704,52159],{"class":867},[324,128706,1265],{"class":916},[324,128708,52214],{"class":863},[324,128710,2025],{"class":867},[324,128712,128713],{"class":326,"line":491},[324,128714,2296],{"class":867},[19,128716,128717],{},"②转换为行内元素：display:inline;",[316,128719,128721],{"className":127064,"code":128720,"language":127066,"meta":50,"style":50},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\ndiv {\n  display: inline;\n}\n",[269,128722,128723,128728,128734,128745],{"__ignoreMap":50},[324,128724,128725],{"class":326,"line":327},[324,128726,128727],{"class":772},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\n",[324,128729,128730,128732],{"class":326,"line":203},[324,128731,52333],{"class":52022},[324,128733,16301],{"class":867},[324,128735,128736,128738,128740,128743],{"class":326,"line":338},[324,128737,128680],{"class":916},[324,128739,52159],{"class":867},[324,128741,128742],{"class":916},"inline",[324,128744,2025],{"class":867},[324,128746,128747],{"class":326,"line":344},[324,128748,2296],{"class":867},[19,128750,128751],{},"③转换为行内块：display:inline-block;",[316,128753,128755],{"className":127064,"code":128754,"language":127066,"meta":50,"style":50},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\nspan {\n  display: inline-block;\n  width: 80px;\n  height: 30px;\n}\n",[269,128756,128757,128762,128768,128778,128790,128802],{"__ignoreMap":50},[324,128758,128759],{"class":326,"line":327},[324,128760,128761],{"class":772},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\n",[324,128763,128764,128766],{"class":326,"line":203},[324,128765,324],{"class":52022},[324,128767,16301],{"class":867},[324,128769,128770,128772,128774,128776],{"class":326,"line":338},[324,128771,128680],{"class":916},[324,128773,52159],{"class":867},[324,128775,73105],{"class":916},[324,128777,2025],{"class":867},[324,128779,128780,128782,128784,128786,128788],{"class":326,"line":344},[324,128781,71290],{"class":916},[324,128783,52159],{"class":867},[324,128785,1476],{"class":916},[324,128787,52214],{"class":863},[324,128789,2025],{"class":867},[324,128791,128792,128794,128796,128798,128800],{"class":326,"line":484},[324,128793,71510],{"class":916},[324,128795,52159],{"class":867},[324,128797,1815],{"class":916},[324,128799,52214],{"class":863},[324,128801,2025],{"class":867},[324,128803,128804],{"class":326,"line":491},[324,128805,2296],{"class":867},[35,128807,128809],{"id":128808},"_816-小米侧边栏","8.1.6 小米侧边栏",[48,128811],{"style":126920,"src":128812},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-034.png",[316,128814,128816],{"className":127811,"code":128815,"language":127813,"meta":50,"style":50},"\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",[269,128817,128818,128823,128838,128857,128876,128895,128914,128933,128952,128971],{"__ignoreMap":50},[324,128819,128820],{"class":326,"line":327},[324,128821,128822],{"class":772},"\u003C!-- 小米侧边栏案例 -->\n",[324,128824,128825,128827,128829,128831,128833,128836],{"class":326,"line":203},[324,128826,1774],{"class":867},[324,128828,52333],{"class":52022},[324,128830,54208],{"class":734},[324,128832,913],{"class":867},[324,128834,128835],{"class":738},"\"sidebar\"",[324,128837,52029],{"class":867},[324,128839,128840,128842,128844,128846,128848,128850,128853,128855],{"class":326,"line":338},[324,128841,52866],{"class":867},[324,128843,25],{"class":52022},[324,128845,61779],{"class":734},[324,128847,913],{"class":867},[324,128849,61784],{"class":738},[324,128851,128852],{"class":867},">手机 电话卡\u003C\u002F",[324,128854,25],{"class":52022},[324,128856,52029],{"class":867},[324,128858,128859,128861,128863,128865,128867,128869,128872,128874],{"class":326,"line":344},[324,128860,52866],{"class":867},[324,128862,25],{"class":52022},[324,128864,61779],{"class":734},[324,128866,913],{"class":867},[324,128868,61784],{"class":738},[324,128870,128871],{"class":867},">电视 盒子\u003C\u002F",[324,128873,25],{"class":52022},[324,128875,52029],{"class":867},[324,128877,128878,128880,128882,128884,128886,128888,128891,128893],{"class":326,"line":484},[324,128879,52866],{"class":867},[324,128881,25],{"class":52022},[324,128883,61779],{"class":734},[324,128885,913],{"class":867},[324,128887,61784],{"class":738},[324,128889,128890],{"class":867},">笔记本 平板\u003C\u002F",[324,128892,25],{"class":52022},[324,128894,52029],{"class":867},[324,128896,128897,128899,128901,128903,128905,128907,128910,128912],{"class":326,"line":491},[324,128898,52866],{"class":867},[324,128900,25],{"class":52022},[324,128902,61779],{"class":734},[324,128904,913],{"class":867},[324,128906,61784],{"class":738},[324,128908,128909],{"class":867},">出行 穿戴\u003C\u002F",[324,128911,25],{"class":52022},[324,128913,52029],{"class":867},[324,128915,128916,128918,128920,128922,128924,128926,128929,128931],{"class":326,"line":496},[324,128917,52866],{"class":867},[324,128919,25],{"class":52022},[324,128921,61779],{"class":734},[324,128923,913],{"class":867},[324,128925,61784],{"class":738},[324,128927,128928],{"class":867},">智能 路由器\u003C\u002F",[324,128930,25],{"class":52022},[324,128932,52029],{"class":867},[324,128934,128935,128937,128939,128941,128943,128945,128948,128950],{"class":326,"line":502},[324,128936,52866],{"class":867},[324,128938,25],{"class":52022},[324,128940,61779],{"class":734},[324,128942,913],{"class":867},[324,128944,61784],{"class":738},[324,128946,128947],{"class":867},">健康 儿童\u003C\u002F",[324,128949,25],{"class":52022},[324,128951,52029],{"class":867},[324,128953,128954,128956,128958,128960,128962,128964,128967,128969],{"class":326,"line":508},[324,128955,52866],{"class":867},[324,128957,25],{"class":52022},[324,128959,61779],{"class":734},[324,128961,913],{"class":867},[324,128963,61784],{"class":738},[324,128965,128966],{"class":867},">耳机 音响\u003C\u002F",[324,128968,25],{"class":52022},[324,128970,52029],{"class":867},[324,128972,128973,128975,128977],{"class":326,"line":514},[324,128974,52507],{"class":867},[324,128976,52333],{"class":52022},[324,128978,52029],{"class":867},[316,128980,128982],{"className":127064,"code":128981,"language":127066,"meta":50,"style":50},".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",[269,128983,128984,128993,129003,129016,129028,129040,129052,129062,129073,129077,129087,129098],{"__ignoreMap":50},[324,128985,128986,128989,128991],{"class":326,"line":327},[324,128987,128988],{"class":734},".sidebar",[324,128990,2130],{"class":52022},[324,128992,16301],{"class":867},[324,128994,128995,128997,128999,129001],{"class":326,"line":203},[324,128996,128680],{"class":916},[324,128998,52159],{"class":867},[324,129000,61591],{"class":916},[324,129002,2025],{"class":867},[324,129004,129005,129007,129009,129012,129014],{"class":326,"line":338},[324,129006,71290],{"class":916},[324,129008,52159],{"class":867},[324,129010,129011],{"class":916},"234",[324,129013,52214],{"class":863},[324,129015,2025],{"class":867},[324,129017,129018,129020,129022,129024,129026],{"class":326,"line":344},[324,129019,71510],{"class":916},[324,129021,52159],{"class":867},[324,129023,1316],{"class":916},[324,129025,52214],{"class":863},[324,129027,2025],{"class":867},[324,129029,129030,129032,129034,129036,129038],{"class":326,"line":484},[324,129031,127748],{"class":916},[324,129033,52159],{"class":867},[324,129035,1316],{"class":916},[324,129037,52214],{"class":863},[324,129039,2025],{"class":867},[324,129041,129042,129044,129046,129048,129050],{"class":326,"line":491},[324,129043,71545],{"class":916},[324,129045,52159],{"class":867},[324,129047,1815],{"class":916},[324,129049,52214],{"class":863},[324,129051,2025],{"class":867},[324,129053,129054,129056,129058,129060],{"class":326,"line":496},[324,129055,71627],{"class":916},[324,129057,52159],{"class":867},[324,129059,61564],{"class":916},[324,129061,2025],{"class":867},[324,129063,129064,129066,129068,129071],{"class":326,"line":502},[324,129065,71600],{"class":916},[324,129067,52159],{"class":867},[324,129069,129070],{"class":916},"#55585a",[324,129072,2025],{"class":867},[324,129074,129075],{"class":326,"line":508},[324,129076,2296],{"class":867},[324,129078,129079,129081,129083,129085],{"class":326,"line":514},[324,129080,128988],{"class":734},[324,129082,2130],{"class":52022},[324,129084,61662],{"class":734},[324,129086,16301],{"class":867},[324,129088,129089,129091,129093,129096],{"class":326,"line":2343},[324,129090,71600],{"class":916},[324,129092,52159],{"class":867},[324,129094,129095],{"class":916},"#ff6700",[324,129097,2025],{"class":867},[324,129099,129100],{"class":326,"line":2348},[324,129101,2296],{"class":867},[48,129103],{"style":126920,"src":129104},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-035.png",[19,129106,129107],{},"行高=盒子高度：实现文字的垂直居中",[19,129109,129110],{},"原理讲解：",[48,129112],{"style":126920,"src":129113},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-036.png",[14,129115,129117],{"id":129116},"_82-css背景","8.2 css背景",[19,129119,129120],{},"背景属性可以设置背景颜色、背景图片、背景平铺、背景图片位置、背景图像固定等",[35,129122,129124],{"id":129123},"_821-背景颜色","8.2.1 背景颜色",[19,129126,129127],{},"background-color:颜色值;",[19,129129,129130],{},"一般情况下元素背景颜色默认值是 transparent（透明）",[35,129132,129134],{"id":129133},"_822-背景图片","8.2.2 背景图片",[19,129136,129137],{},"用于logo 或者一些装饰性的小图片或者是超大的背景图片, 优点是非常便于控制位置. (精灵图也是一种运用场景)",[316,129139,129141],{"className":127064,"code":129140,"language":127066,"meta":50,"style":50},"div {\n  background-image: url(images\u002Fbg.png);\n}\n",[269,129142,129143,129149,129165],{"__ignoreMap":50},[324,129144,129145,129147],{"class":326,"line":327},[324,129146,52333],{"class":52022},[324,129148,16301],{"class":867},[324,129150,129151,129154,129156,129158,129160,129163],{"class":326,"line":203},[324,129152,129153],{"class":916},"  background-image",[324,129155,52159],{"class":867},[324,129157,62448],{"class":916},[324,129159,868],{"class":867},[324,129161,129162],{"class":5945},"images\u002Fbg.png",[324,129164,3448],{"class":867},[324,129166,129167],{"class":326,"line":338},[324,129168,2296],{"class":867},[1003,129170,129171,129180],{},[1006,129172,129173],{},[1009,129174,129175,129178],{},[1012,129176,129177],{"align":24463},"参数值",[1012,129179,103417],{"align":24463},[1049,129181,129182,129189],{},[1009,129183,129184,129186],{},[1054,129185,55459],{"align":24463},[1054,129187,129188],{"align":24463},"无背景图（默认的）",[1009,129190,129191,129193],{},[1054,129192,62448],{"align":24463},[1054,129194,129195],{"align":24463},"使用绝对或相对地址指定背景图像",[316,129197,129198],{"className":127064,"code":129140,"language":127066,"meta":50,"style":50},[269,129199,129200,129206,129220],{"__ignoreMap":50},[324,129201,129202,129204],{"class":326,"line":327},[324,129203,52333],{"class":52022},[324,129205,16301],{"class":867},[324,129207,129208,129210,129212,129214,129216,129218],{"class":326,"line":203},[324,129209,129153],{"class":916},[324,129211,52159],{"class":867},[324,129213,62448],{"class":916},[324,129215,868],{"class":867},[324,129217,129162],{"class":5945},[324,129219,3448],{"class":867},[324,129221,129222],{"class":326,"line":338},[324,129223,2296],{"class":867},[19,129225,129226],{},"注意：背景图片后面的地址，不能忘记加url,也不能加引号",[35,129228,129230],{"id":129229},"_823-背景平铺","8.2.3 背景平铺",[316,129232,129234],{"className":127064,"code":129233,"language":127066,"meta":50,"style":50},"div {\n  background-repeat: no-repeat;\n}\n",[269,129235,129236,129242,129253],{"__ignoreMap":50},[324,129237,129238,129240],{"class":326,"line":327},[324,129239,52333],{"class":52022},[324,129241,16301],{"class":867},[324,129243,129244,129247,129249,129251],{"class":326,"line":203},[324,129245,129246],{"class":916},"  background-repeat",[324,129248,52159],{"class":867},[324,129250,62458],{"class":916},[324,129252,2025],{"class":867},[324,129254,129255],{"class":326,"line":338},[324,129256,2296],{"class":867},[1003,129258,129259,129267],{},[1006,129260,129261],{},[1009,129262,129263,129265],{},[1012,129264,129177],{"align":24463},[1012,129266,103417],{"align":24463},[1049,129268,129269,129277,129284,129292],{},[1009,129270,129271,129274],{},[1054,129272,129273],{"align":24463},"repeat",[1054,129275,129276],{"align":24463},"背景图像在纵向和横向上平铺（默认的）",[1009,129278,129279,129281],{},[1054,129280,62458],{"align":24463},[1054,129282,129283],{"align":24463},"背景图像不平铺",[1009,129285,129286,129289],{},[1054,129287,129288],{"align":24463},"repeat-x",[1054,129290,129291],{"align":24463},"背景图像在横向上平铺",[1009,129293,129294,129297],{},[1054,129295,129296],{"align":24463},"repeat-y",[1054,129298,129299],{"align":24463},"背景图像在纵向平铺",[35,129301,129303],{"id":129302},"_824-背景图片位置","8.2.4 背景图片位置",[316,129305,129307],{"className":127064,"code":129306,"language":127066,"meta":50,"style":50},"\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",[269,129308,129309,129314,129320,129334,129338,129343,129349,129365,129369,129374,129380,129394],{"__ignoreMap":50},[324,129310,129311],{"class":326,"line":327},[324,129312,129313],{"class":772},"\u002F* 方位名词 *\u002F\n",[324,129315,129316,129318],{"class":326,"line":203},[324,129317,52333],{"class":52022},[324,129319,16301],{"class":867},[324,129321,129322,129325,129327,129329,129332],{"class":326,"line":338},[324,129323,129324],{"class":916},"  background-position",[324,129326,52159],{"class":867},[324,129328,52314],{"class":916},[324,129330,129331],{"class":916}," top",[324,129333,2025],{"class":867},[324,129335,129336],{"class":326,"line":344},[324,129337,2296],{"class":867},[324,129339,129340],{"class":326,"line":484},[324,129341,129342],{"class":772},"\u002F* 精确单位 *\u002F\n",[324,129344,129345,129347],{"class":326,"line":491},[324,129346,52333],{"class":52022},[324,129348,16301],{"class":867},[324,129350,129351,129353,129355,129357,129359,129361,129363],{"class":326,"line":496},[324,129352,129324],{"class":916},[324,129354,52159],{"class":867},[324,129356,1564],{"class":916},[324,129358,52214],{"class":863},[324,129360,58226],{"class":916},[324,129362,52214],{"class":863},[324,129364,2025],{"class":867},[324,129366,129367],{"class":326,"line":502},[324,129368,2296],{"class":867},[324,129370,129371],{"class":326,"line":508},[324,129372,129373],{"class":772},"\u002F* 混合单位 *\u002F\n",[324,129375,129376,129378],{"class":326,"line":514},[324,129377,52333],{"class":52022},[324,129379,16301],{"class":867},[324,129381,129382,129384,129386,129388,129390,129392],{"class":326,"line":2343},[324,129383,129324],{"class":916},[324,129385,52159],{"class":867},[324,129387,1564],{"class":916},[324,129389,52214],{"class":863},[324,129391,17873],{"class":916},[324,129393,2025],{"class":867},[324,129395,129396],{"class":326,"line":2348},[324,129397,2296],{"class":867},[19,129399,129400],{},"参数代表的意思是：x 坐标和 y 坐标。 可以使用 方位名词 或者 精确单位",[1003,129402,129403,129411],{},[1006,129404,129405],{},[1009,129406,129407,129409],{},[1012,129408,129177],{"align":24463},[1012,129410,26593],{"align":24463},[1049,129412,129413,129420],{},[1009,129414,129415,129417],{},[1054,129416,52690],{"align":24463},[1054,129418,129419],{"align":24463},"百分数|由浮点数和单位标识符组成的长度值",[1009,129421,129422,129425],{},[1054,129423,129424],{"align":24463},"position",[1054,129426,129427],{"align":24463},"top|center|bottom|left|center|right 方位名词",[19,129429,129430],{},"其他说明：",[19,129432,129433],{},"①参数是方位名词",[19,129435,129436],{},"如果指定的两个值都是方位名词，则两个值前后顺序无关，比如 left top 和 top left 效果一致",[19,129438,129439],{},"如果只指定了一个方位名词，另一个值省略，则第二个值默认居中对齐",[19,129441,129442],{},"②参数是精确单位",[19,129444,129445],{},"如果参数值是精确坐标，那么第一个肯定是 x 坐标，第二个一定是 y 坐标",[19,129447,129448],{},"如果只指定一个数值，那该数值一定是 x 坐标，另一个默认垂直居中",[19,129450,129451],{},"③参数是混合单位",[19,129453,129454],{},"如果指定的两个值是精确单位和方位名词混合使用，则第一个值是 x 坐标，第二个值是 y 坐标",[35,129456,129458],{"id":129457},"_825-背景图片固定","8.2.5 背景图片固定",[316,129460,129462],{"className":127064,"code":129461,"language":127066,"meta":50,"style":50},"\u002F* 背景滚动（默认） *\u002F\ndiv {\n  background-attachment: scroll;\n}\n\u002F* 背景固定 *\u002F\ndiv {\n  background-attachment: fixed;\n}\n",[269,129463,129464,129469,129475,129487,129491,129496,129502,129512],{"__ignoreMap":50},[324,129465,129466],{"class":326,"line":327},[324,129467,129468],{"class":772},"\u002F* 背景滚动（默认） *\u002F\n",[324,129470,129471,129473],{"class":326,"line":203},[324,129472,52333],{"class":52022},[324,129474,16301],{"class":867},[324,129476,129477,129480,129482,129485],{"class":326,"line":338},[324,129478,129479],{"class":916},"  background-attachment",[324,129481,52159],{"class":867},[324,129483,129484],{"class":916},"scroll",[324,129486,2025],{"class":867},[324,129488,129489],{"class":326,"line":344},[324,129490,2296],{"class":867},[324,129492,129493],{"class":326,"line":484},[324,129494,129495],{"class":772},"\u002F* 背景固定 *\u002F\n",[324,129497,129498,129500],{"class":326,"line":491},[324,129499,52333],{"class":52022},[324,129501,16301],{"class":867},[324,129503,129504,129506,129508,129510],{"class":326,"line":496},[324,129505,129479],{"class":916},[324,129507,52159],{"class":867},[324,129509,86955],{"class":916},[324,129511,2025],{"class":867},[324,129513,129514],{"class":326,"line":502},[324,129515,2296],{"class":867},[1003,129517,129518,129527],{},[1006,129519,129520],{},[1009,129521,129522,129525],{},[1012,129523,129524],{"align":24463},"参数",[1012,129526,103417],{"align":24463},[1049,129528,129529,129536],{},[1009,129530,129531,129533],{},[1054,129532,129484],{"align":24463},[1054,129534,129535],{"align":24463},"背景图像是随对象内容滚动",[1009,129537,129538,129540],{},[1054,129539,86955],{"align":24463},[1054,129541,129542],{"align":24463},"背景图像固定",[35,129544,129546],{"id":129545},"_826-背景样式合写","8.2.6 背景样式合写",[316,129548,129550],{"className":127064,"code":129549,"language":127066,"meta":50,"style":50},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\ndiv {\n  background: #fff url(images\u002Fbg.png) no-repeat fixed center top;\n}\n",[269,129551,129552,129557,129563,129591],{"__ignoreMap":50},[324,129553,129554],{"class":326,"line":327},[324,129555,129556],{"class":772},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\n",[324,129558,129559,129561],{"class":326,"line":203},[324,129560,52333],{"class":52022},[324,129562,16301],{"class":867},[324,129564,129565,129567,129569,129571,129574,129576,129578,129580,129582,129585,129587,129589],{"class":326,"line":338},[324,129566,71333],{"class":916},[324,129568,52159],{"class":867},[324,129570,61564],{"class":916},[324,129572,129573],{"class":916}," url",[324,129575,868],{"class":867},[324,129577,129162],{"class":5945},[324,129579,14443],{"class":867},[324,129581,62458],{"class":916},[324,129583,129584],{"class":916}," fixed",[324,129586,17873],{"class":916},[324,129588,129331],{"class":916},[324,129590,2025],{"class":867},[324,129592,129593],{"class":326,"line":344},[324,129594,2296],{"class":867},[35,129596,129598],{"id":129597},"_827-背景色半透明","8.2.7 背景色半透明",[316,129600,129602],{"className":127064,"code":129601,"language":127066,"meta":50,"style":50},"div {\n  background: rgba(0, 0, 0, 0.3);\n}\n",[269,129603,129604,129610,129636],{"__ignoreMap":50},[324,129605,129606,129608],{"class":326,"line":327},[324,129607,52333],{"class":52022},[324,129609,16301],{"class":867},[324,129611,129612,129614,129616,129618,129620,129622,129624,129626,129628,129630,129632,129634],{"class":326,"line":203},[324,129613,71333],{"class":916},[324,129615,52159],{"class":867},[324,129617,55832],{"class":916},[324,129619,868],{"class":867},[324,129621,1056],{"class":916},[324,129623,13164],{"class":867},[324,129625,1056],{"class":916},[324,129627,13164],{"class":867},[324,129629,1056],{"class":916},[324,129631,13164],{"class":867},[324,129633,101243],{"class":916},[324,129635,3448],{"class":867},[324,129637,129638],{"class":326,"line":338},[324,129639,2296],{"class":867},[19,129641,100118],{},[19,129643,129644],{},"①最后一个参数是 alpha 透明度，取值范围在 0~1之间",[19,129646,129647],{},"②我们习惯把 0.3 的 0 省略掉，写为 background: rgba(0, 0, 0, .3);",[19,129649,129650],{},"③背景半透明是指盒子背景半透明，盒子里面的内容不受影响",[19,129652,129653],{},"④CSS3 新增属性，是 IE9+ 版本浏览器才支持的，但是现在实际开发,我们不太关注兼容性写法了,可以放心使用",[35,129655,129657],{"id":129656},"_828-总结","8.2.8 总结",[1003,129659,129660,129671],{},[1006,129661,129662],{},[1009,129663,129664,129667,129669],{},[1012,129665,129666],{"align":24463},"属性",[1012,129668,103417],{"align":24463},[1012,129670,1017],{"align":24463},[1049,129672,129673,129684,129695,129706,129717,129728,129739],{},[1009,129674,129675,129678,129681],{},[1054,129676,129677],{"align":24463},"background-color",[1054,129679,129680],{"align":24463},"背景颜色",[1054,129682,129683],{"align":24463},"预定义的颜色值\u002F十六进制\u002FRGB代码",[1009,129685,129686,129689,129692],{},[1054,129687,129688],{"align":24463},"background-image",[1054,129690,129691],{"align":24463},"背景图片",[1054,129693,129694],{"align":24463},"url(图片路径)",[1009,129696,129697,129700,129703],{},[1054,129698,129699],{"align":24463},"background-repeat",[1054,129701,129702],{"align":24463},"是否平铺",[1054,129704,129705],{"align":24463},"repeat\u002Fno-repeat\u002Frepeat-x\u002Frepeat-y",[1009,129707,129708,129711,129714],{},[1054,129709,129710],{"align":24463},"background-position",[1054,129712,129713],{"align":24463},"背景位置",[1054,129715,129716],{"align":24463},"length\u002Fposition 分别是x和y坐标",[1009,129718,129719,129722,129725],{},[1054,129720,129721],{"align":24463},"background-attachment",[1054,129723,129724],{"align":24463},"背景附着",[1054,129726,129727],{"align":24463},"scroll(背景滚动) \u002Ffixed (背景固定)",[1009,129729,129730,129733,129736],{},[1054,129731,129732],{"align":24463},"背景简写",[1054,129734,129735],{"align":24463},"书写更简单",[1054,129737,129738],{"align":24463},"背景颜色 背景图片地址 背景平铺 背景滚动 背景位置；",[1009,129740,129741,129744,129747],{},[1054,129742,129743],{"align":24463},"背景半透明",[1054,129745,129746],{"align":24463},"背景颜色半透明",[1054,129748,129749],{"align":24463},"background: rgba(0,0,0.3); 后面必须是4个值",[19,129751,129752],{},"颜色渐变：",[48,129754],{"style":126920,"src":129755},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-037.png",[48,129757],{"style":126920,"src":129758},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-038.png",[35,129760,129762],{"id":129761},"_829-案例-五彩导航栏","8.2.9 案例-五彩导航栏",[316,129764,129766],{"className":127811,"code":129765,"language":127813,"meta":50,"style":50},"\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",[269,129767,129768,129783,129802,129821,129840,129859,129878],{"__ignoreMap":50},[324,129769,129770,129772,129774,129776,129778,129781],{"class":326,"line":327},[324,129771,1774],{"class":867},[324,129773,52333],{"class":52022},[324,129775,54208],{"class":734},[324,129777,913],{"class":867},[324,129779,129780],{"class":738},"\"nav\"",[324,129782,52029],{"class":867},[324,129784,129785,129787,129789,129791,129793,129795,129798,129800],{"class":326,"line":203},[324,129786,52866],{"class":867},[324,129788,25],{"class":52022},[324,129790,61779],{"class":734},[324,129792,913],{"class":867},[324,129794,61784],{"class":738},[324,129796,129797],{"class":867},">五彩导航1\u003C\u002F",[324,129799,25],{"class":52022},[324,129801,52029],{"class":867},[324,129803,129804,129806,129808,129810,129812,129814,129817,129819],{"class":326,"line":338},[324,129805,52866],{"class":867},[324,129807,25],{"class":52022},[324,129809,61779],{"class":734},[324,129811,913],{"class":867},[324,129813,61784],{"class":738},[324,129815,129816],{"class":867},">五彩导航2\u003C\u002F",[324,129818,25],{"class":52022},[324,129820,52029],{"class":867},[324,129822,129823,129825,129827,129829,129831,129833,129836,129838],{"class":326,"line":344},[324,129824,52866],{"class":867},[324,129826,25],{"class":52022},[324,129828,61779],{"class":734},[324,129830,913],{"class":867},[324,129832,61784],{"class":738},[324,129834,129835],{"class":867},">五彩导航3\u003C\u002F",[324,129837,25],{"class":52022},[324,129839,52029],{"class":867},[324,129841,129842,129844,129846,129848,129850,129852,129855,129857],{"class":326,"line":484},[324,129843,52866],{"class":867},[324,129845,25],{"class":52022},[324,129847,61779],{"class":734},[324,129849,913],{"class":867},[324,129851,61784],{"class":738},[324,129853,129854],{"class":867},">五彩导航4\u003C\u002F",[324,129856,25],{"class":52022},[324,129858,52029],{"class":867},[324,129860,129861,129863,129865,129867,129869,129871,129874,129876],{"class":326,"line":491},[324,129862,52866],{"class":867},[324,129864,25],{"class":52022},[324,129866,61779],{"class":734},[324,129868,913],{"class":867},[324,129870,61784],{"class":738},[324,129872,129873],{"class":867},">五彩导航5\u003C\u002F",[324,129875,25],{"class":52022},[324,129877,52029],{"class":867},[324,129879,129880,129882,129884],{"class":326,"line":496},[324,129881,52507],{"class":867},[324,129883,52333],{"class":52022},[324,129885,52029],{"class":867},[316,129887,129889],{"className":127064,"code":129888,"language":127066,"meta":50,"style":50},".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",[269,129890,129891,129900,129910,129922,129934,129944,129956,129966,129970,129995,130018,130041,130064],{"__ignoreMap":50},[324,129892,129893,129896,129898],{"class":326,"line":327},[324,129894,129895],{"class":734},".nav",[324,129897,2130],{"class":52022},[324,129899,16301],{"class":867},[324,129901,129902,129904,129906,129908],{"class":326,"line":203},[324,129903,128680],{"class":916},[324,129905,52159],{"class":867},[324,129907,73105],{"class":916},[324,129909,2025],{"class":867},[324,129911,129912,129914,129916,129918,129920],{"class":326,"line":338},[324,129913,71290],{"class":916},[324,129915,52159],{"class":867},[324,129917,1681],{"class":916},[324,129919,52214],{"class":863},[324,129921,2025],{"class":867},[324,129923,129924,129926,129928,129930,129932],{"class":326,"line":344},[324,129925,71510],{"class":916},[324,129927,52159],{"class":867},[324,129929,1720],{"class":916},[324,129931,52214],{"class":863},[324,129933,2025],{"class":867},[324,129935,129936,129938,129940,129942],{"class":326,"line":484},[324,129937,71248],{"class":916},[324,129939,52159],{"class":867},[324,129941,52314],{"class":916},[324,129943,2025],{"class":867},[324,129945,129946,129948,129950,129952,129954],{"class":326,"line":491},[324,129947,127748],{"class":916},[324,129949,52159],{"class":867},[324,129951,1720],{"class":916},[324,129953,52214],{"class":863},[324,129955,2025],{"class":867},[324,129957,129958,129960,129962,129964],{"class":326,"line":496},[324,129959,71627],{"class":916},[324,129961,52159],{"class":867},[324,129963,61564],{"class":916},[324,129965,2025],{"class":867},[324,129967,129968],{"class":326,"line":502},[324,129969,2296],{"class":867},[324,129971,129972,129974,129976,129979,129981,129983,129986,129988,129990,129992],{"class":326,"line":508},[324,129973,129895],{"class":734},[324,129975,2130],{"class":52022},[324,129977,129978],{"class":734},":nth-child",[324,129980,868],{"class":867},[324,129982,1082],{"class":916},[324,129984,129985],{"class":867},") { ",[324,129987,129677],{"class":916},[324,129989,52159],{"class":867},[324,129991,129095],{"class":916},[324,129993,129994],{"class":867},"; }\n",[324,129996,129997,129999,130001,130003,130005,130007,130009,130011,130013,130016],{"class":326,"line":514},[324,129998,129895],{"class":734},[324,130000,2130],{"class":52022},[324,130002,129978],{"class":734},[324,130004,868],{"class":867},[324,130006,944],{"class":916},[324,130008,129985],{"class":867},[324,130010,129677],{"class":916},[324,130012,52159],{"class":867},[324,130014,130015],{"class":916},"#ff0000",[324,130017,129994],{"class":867},[324,130019,130020,130022,130024,130026,130028,130030,130032,130034,130036,130039],{"class":326,"line":2343},[324,130021,129895],{"class":734},[324,130023,2130],{"class":52022},[324,130025,129978],{"class":734},[324,130027,868],{"class":867},[324,130029,938],{"class":916},[324,130031,129985],{"class":867},[324,130033,129677],{"class":916},[324,130035,52159],{"class":867},[324,130037,130038],{"class":916},"#00a4ff",[324,130040,129994],{"class":867},[324,130042,130043,130045,130047,130049,130051,130053,130055,130057,130059,130062],{"class":326,"line":2348},[324,130044,129895],{"class":734},[324,130046,2130],{"class":52022},[324,130048,129978],{"class":734},[324,130050,868],{"class":867},[324,130052,1157],{"class":916},[324,130054,129985],{"class":867},[324,130056,129677],{"class":916},[324,130058,52159],{"class":867},[324,130060,130061],{"class":916},"#ff00ff",[324,130063,129994],{"class":867},[324,130065,130066,130068,130070,130072,130074,130076,130078,130080,130082,130085],{"class":326,"line":2354},[324,130067,129895],{"class":734},[324,130069,2130],{"class":52022},[324,130071,129978],{"class":734},[324,130073,868],{"class":867},[324,130075,1183],{"class":916},[324,130077,129985],{"class":867},[324,130079,129677],{"class":916},[324,130081,52159],{"class":867},[324,130083,130084],{"class":916},"#00ff00",[324,130086,129994],{"class":867},[14,130088,130090],{"id":130089},"_83-css三大特性","8.3 css三大特性",[35,130092,130094],{"id":130093},"_831-层叠性","8.3.1 层叠性",[19,130096,130097],{},"为了解决样式冲突问题",[19,130099,130100],{},"原则：①样式冲突，遵循的原则是就近原则，哪个样式离结构近，就执行哪个样式",[19,130102,130103],{},"   ②样式不冲突，不会层叠",[35,130105,130107],{"id":130106},"_832-继承性","8.3.2 继承性",[19,130109,130110],{},"子标签会继承父标签的某些样式，如文本颜色和字号。恰当地使用继承可以简化代码，降低 CSS 样式的复杂性",[19,130112,130113],{},"子元素可以继承父元素的样式：text-, font-, line-和color属性",[316,130115,130117],{"className":127064,"code":130116,"language":127066,"meta":50,"style":50},"p {\n  color: #333;\n}\n",[269,130118,130119,130125,130135],{"__ignoreMap":50},[324,130120,130121,130123],{"class":326,"line":327},[324,130122,19],{"class":52022},[324,130124,16301],{"class":867},[324,130126,130127,130129,130131,130133],{"class":326,"line":203},[324,130128,71627],{"class":916},[324,130130,52159],{"class":867},[324,130132,63091],{"class":916},[324,130134,2025],{"class":867},[324,130136,130137],{"class":326,"line":338},[324,130138,2296],{"class":867},[48,130140],{"style":126920,"src":130141},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-039.png",[19,130143,130144],{},"解释：①行高可以跟单位也可以不跟单位",[19,130146,130147],{},"②如果子元素没有设置行高，则会继承父元素的行高为 1.5",[19,130149,130150],{},"③此时子元素的行高是：当前子元素的文字大小 * 1.5",[19,130152,130153],{},"④body 行高 1.5 这样写法最大的优势就是里面子元素可以根据自己文字大小自动调整行高",[35,130155,130157],{"id":130156},"_833-优先级","8.3.3 优先级",[192,130159,130160,130163],{},[195,130161,130162],{},"选择器相同，则执行层叠性",[195,130164,130165],{},"选择器不同，则根据选择器权重执行",[1003,130167,130168,130178],{},[1006,130169,130170],{},[1009,130171,130172,130175],{},[1012,130173,130174],{"align":24463},"选择器",[1012,130176,130177],{"align":24463},"选择器权重",[1049,130179,130180,130188,130196,130204,130212,130220],{},[1009,130181,130182,130185],{},[1054,130183,130184],{"align":24463},"继承 或者*",[1054,130186,130187],{"align":24463},"0，0，0，0",[1009,130189,130190,130193],{},[1054,130191,130192],{"align":24463},"标签选择器",[1054,130194,130195],{"align":24463},"0，0，0，1",[1009,130197,130198,130201],{},[1054,130199,130200],{"align":24463},"类选择器，伪类选择器",[1054,130202,130203],{"align":24463},"0，0，1，0",[1009,130205,130206,130209],{},[1054,130207,130208],{"align":24463},"ID选择器",[1054,130210,130211],{"align":24463},"0，1，0，0",[1009,130213,130214,130217],{},[1054,130215,130216],{"align":24463},"行内样式",[1054,130218,130219],{"align":24463},"1，0，0，0",[1009,130221,130222,130225],{},[1054,130223,130224],{"align":24463},"！important",[1054,130226,130227],{"align":24463},"无穷大",[19,130229,130230],{},"! important用法：",[316,130232,130234],{"className":127064,"code":130233,"language":127066,"meta":50,"style":50},"\u002F* !important 拥有最高优先级 *\u002F\ndiv {\n  color: pink !important;\n}\n\u002F* 以下规则不会生效，因为上面有 !important *\u002F\ndiv {\n  color: red;\n}\n",[269,130235,130236,130241,130247,130260,130264,130269,130275,130285],{"__ignoreMap":50},[324,130237,130238],{"class":326,"line":327},[324,130239,130240],{"class":772},"\u002F* !important 拥有最高优先级 *\u002F\n",[324,130242,130243,130245],{"class":326,"line":203},[324,130244,52333],{"class":52022},[324,130246,16301],{"class":867},[324,130248,130249,130251,130253,130255,130258],{"class":326,"line":338},[324,130250,71627],{"class":916},[324,130252,52159],{"class":867},[324,130254,52367],{"class":916},[324,130256,130257],{"class":863}," !important",[324,130259,2025],{"class":867},[324,130261,130262],{"class":326,"line":344},[324,130263,2296],{"class":867},[324,130265,130266],{"class":326,"line":484},[324,130267,130268],{"class":772},"\u002F* 以下规则不会生效，因为上面有 !important *\u002F\n",[324,130270,130271,130273],{"class":326,"line":491},[324,130272,52333],{"class":52022},[324,130274,16301],{"class":867},[324,130276,130277,130279,130281,130283],{"class":326,"line":496},[324,130278,71627],{"class":916},[324,130280,52159],{"class":867},[324,130282,58143],{"class":916},[324,130284,2025],{"class":867},[324,130286,130287],{"class":326,"line":502},[324,130288,2296],{"class":867},[19,130290,130291],{},"优先级注意点：",[19,130293,130294],{},"①权重是有4组数字组成,但是不会有进位",[19,130296,130297],{},"②可以理解为类选择器永远大于元素选择器, id选择器永远大于类选择器,以此类推..",[19,130299,130300],{},"③等级判断从左向右，如果某一位数值相同，则判断下一位数值",[19,130302,130303],{},"④可以简单记忆法: 通配符和继承权重为0, 标签选择器为1,类(伪类)选择器为 10, id选择器 100, 行内样式表为 1000, !important 无穷大.",[19,130305,130306],{},"⑤继承的权重是0， 如果该元素没有直接选中，不管父元素权重多高，子元素得到的权重都是 0",[19,130308,130309],{},"⑥复合选择器",[1003,130311,130312,130322],{},[1006,130313,130314],{},[1009,130315,130316,130319],{},[1012,130317,130318],{"align":24463},"div ul li",[1012,130320,130321],{"align":24463},"0,0,0,3",[1049,130323,130324,130332,130340],{},[1009,130325,130326,130329],{},[1054,130327,130328],{"align":24463},".nav ul li",[1054,130330,130331],{"align":24463},"0,0,1,1这是个带有类选择器的后代选择器，有继承关系，实际最后权重就是一个类选择器加上一个标签选择器",[1009,130333,130334,130337],{},[1054,130335,130336],{"align":24463},"a:hover",[1054,130338,130339],{"align":24463},"0,0,1,1",[1009,130341,130342,130345],{},[1054,130343,130344],{"align":24463},".nav a",[1054,130346,130339],{"align":24463},[775,130348,130349],{},"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":50,"searchDepth":203,"depth":203,"links":130351},[130352,130360,130371],{"id":128460,"depth":203,"text":128461,"children":130353},[130354,130355,130356,130357,130358,130359],{"id":128473,"depth":338,"text":128474},{"id":128545,"depth":338,"text":128546},{"id":128617,"depth":338,"text":128618},{"id":128648,"depth":338,"text":128649},{"id":128655,"depth":338,"text":128656},{"id":128808,"depth":338,"text":128809},{"id":129116,"depth":203,"text":129117,"children":130361},[130362,130363,130364,130365,130366,130367,130368,130369,130370],{"id":129123,"depth":338,"text":129124},{"id":129133,"depth":338,"text":129134},{"id":129229,"depth":338,"text":129230},{"id":129302,"depth":338,"text":129303},{"id":129457,"depth":338,"text":129458},{"id":129545,"depth":338,"text":129546},{"id":129597,"depth":338,"text":129598},{"id":129656,"depth":338,"text":129657},{"id":129761,"depth":338,"text":129762},{"id":130089,"depth":203,"text":130090,"children":130372},[130373,130374,130375],{"id":130093,"depth":338,"text":130094},{"id":130106,"depth":338,"text":130107},{"id":130156,"depth":338,"text":130157},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch08-css",{"title":128452,"description":791},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性","WYPqfeTLjHk3Kq5wyAvb9PzM-XrgcbuLbMXucvM7Pf4",{"id":130382,"title":130383,"body":130384,"description":791,"extension":792,"meta":131974,"navigation":487,"path":131975,"seo":131976,"stem":131977,"__hash__":131978},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图.md","9. CSS盒模型浮动与切图",{"type":7,"value":130385,"toc":131953},[130386,130389,130393,130396,130399,130402,130405,130408,130411,130414,130418,130426,130463,130499,130502,130516,130521,130555,130558,130651,130656,130659,130689,130692,130697,130705,130709,130716,130762,130806,130811,130814,130817,130820,130823,130826,130829,130831,130834,130838,130843,130887,130892,130895,130898,130935,130940,130943,130946,130949,130952,130984,130987,130990,130993,131025,131028,131031,131034,131038,131041,131073,131076,131080,131100,131103,131111,131114,131118,131123,131126,131158,131163,131166,131204,131208,131213,131216,131219,131250,131253,131270,131275,131327,131387,131392,131446,131484,131488,131492,131495,131499,131507,131510,131512,131523,131528,131576,131610,131613,131616,131619,131622,131666,131669,131672,131675,131678,131681,131684,131728,131731,131734,131737,131740,131743,131746,131752,131755,131799,131802,131805,131808,131811,131814,131858,131861,131863,131866,131870,131874,131912,131916,131919,131922,131926,131934,131938,131941,131944,131947,131950],[10,130387,130383],{"id":130388},"_9-css盒模型浮动与切图",[14,130390,130392],{"id":130391},"_91-盒子模型","9.1 盒子模型",[19,130394,130395],{},"利用盒子来设计网页",[19,130397,130398],{},"盒子包含：边框、外边距、内边距、实际内容",[19,130400,130401],{},"网页布局设置：",[19,130403,130404],{},"①先准备相关的网页元素，网页元素基本都是盒子box",[19,130406,130407],{},"②利用css设置好盒子样式，然后摆放到相应位置",[19,130409,130410],{},"③往盒子里装内容",[48,130412],{"style":126920,"src":130413},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-040.png",[35,130415,130417],{"id":130416},"_911-边框border","9.1.1 边框（border）",[192,130419,130420,130423],{},[195,130421,130422],{},"border可以设置元素的边框。边框有三部分组成：边框宽度(粗细) 边框样式 边框颜色；",[195,130424,130425],{},"语法",[316,130427,130429],{"className":127064,"code":130428,"language":127066,"meta":50,"style":50},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\ndiv {\n  border: 1px solid #ccc;\n}\n",[269,130430,130431,130436,130442,130459],{"__ignoreMap":50},[324,130432,130433],{"class":326,"line":327},[324,130434,130435],{"class":772},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\n",[324,130437,130438,130440],{"class":326,"line":203},[324,130439,52333],{"class":52022},[324,130441,16301],{"class":867},[324,130443,130444,130446,130448,130450,130452,130454,130457],{"class":326,"line":338},[324,130445,71618],{"class":916},[324,130447,52159],{"class":867},[324,130449,1082],{"class":916},[324,130451,52214],{"class":863},[324,130453,52243],{"class":916},[324,130455,130456],{"class":916}," #ccc",[324,130458,2025],{"class":867},[324,130460,130461],{"class":326,"line":344},[324,130462,2296],{"class":867},[1003,130464,130465,130473],{},[1006,130466,130467],{},[1009,130468,130469,130471],{},[1012,130470,129666],{"align":24463},[1012,130472,103417],{"align":24463},[1049,130474,130475,130483,130491],{},[1009,130476,130477,130480],{},[1054,130478,130479],{"align":24463},"border-width",[1054,130481,130482],{"align":24463},"定义边框粗细，单位是px",[1009,130484,130485,130488],{},[1054,130486,130487],{"align":24463},"border-style",[1054,130489,130490],{"align":24463},"边框的样式",[1009,130492,130493,130496],{},[1054,130494,130495],{"align":24463},"border-color",[1054,130497,130498],{"align":24463},"边框的颜色",[19,130500,130501],{},"边框样式 border-style 可以设置如下值：",[1871,130503,130504,130507,130510,130513],{},[195,130505,130506],{},"none：没有边框即忽略所有边框的宽度（默认值）",[195,130508,130509],{},"solid：边框为单实线(最为常用的)",[195,130511,130512],{},"dashed：边框为虚线",[195,130514,130515],{},"dotted：边框为点线",[192,130517,130518],{"start":338},[195,130519,130520],{},"边框的合写分写",[316,130522,130523],{"className":127064,"code":130428,"language":127066,"meta":50,"style":50},[269,130524,130525,130529,130535,130551],{"__ignoreMap":50},[324,130526,130527],{"class":326,"line":327},[324,130528,130435],{"class":772},[324,130530,130531,130533],{"class":326,"line":203},[324,130532,52333],{"class":52022},[324,130534,16301],{"class":867},[324,130536,130537,130539,130541,130543,130545,130547,130549],{"class":326,"line":338},[324,130538,71618],{"class":916},[324,130540,52159],{"class":867},[324,130542,1082],{"class":916},[324,130544,52214],{"class":863},[324,130546,52243],{"class":916},[324,130548,130456],{"class":916},[324,130550,2025],{"class":867},[324,130552,130553],{"class":326,"line":344},[324,130554,2296],{"class":867},[19,130556,130557],{},"边框分开写法：",[316,130559,130561],{"className":127064,"code":130560,"language":127066,"meta":50,"style":50},"\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",[269,130562,130563,130568,130574,130592,130610,130629,130647],{"__ignoreMap":50},[324,130564,130565],{"class":326,"line":327},[324,130566,130567],{"class":772},"\u002F* 边框分开写法 *\u002F\n",[324,130569,130570,130572],{"class":326,"line":203},[324,130571,52333],{"class":52022},[324,130573,16301],{"class":867},[324,130575,130576,130579,130581,130583,130585,130587,130590],{"class":326,"line":338},[324,130577,130578],{"class":916},"  border-top",[324,130580,52159],{"class":867},[324,130582,1082],{"class":916},[324,130584,52214],{"class":863},[324,130586,52243],{"class":916},[324,130588,130589],{"class":916}," #000",[324,130591,2025],{"class":867},[324,130593,130594,130597,130599,130601,130603,130605,130608],{"class":326,"line":344},[324,130595,130596],{"class":916},"  border-right",[324,130598,52159],{"class":867},[324,130600,944],{"class":916},[324,130602,52214],{"class":863},[324,130604,62963],{"class":916},[324,130606,130607],{"class":916}," #333",[324,130609,2025],{"class":867},[324,130611,130612,130615,130617,130619,130621,130624,130627],{"class":326,"line":484},[324,130613,130614],{"class":916},"  border-bottom",[324,130616,52159],{"class":867},[324,130618,938],{"class":916},[324,130620,52214],{"class":863},[324,130622,130623],{"class":916}," dotted",[324,130625,130626],{"class":916}," #666",[324,130628,2025],{"class":867},[324,130630,130631,130634,130636,130638,130640,130642,130645],{"class":326,"line":491},[324,130632,130633],{"class":916},"  border-left",[324,130635,52159],{"class":867},[324,130637,1082],{"class":916},[324,130639,52214],{"class":863},[324,130641,52243],{"class":916},[324,130643,130644],{"class":916}," #999",[324,130646,2025],{"class":867},[324,130648,130649],{"class":326,"line":496},[324,130650,2296],{"class":867},[192,130652,130653],{"start":344},[195,130654,130655],{},"表格的细线边框",[19,130657,130658],{},"border-collapse 属性控制浏览器绘制表格边框的方式。它控制相邻单元格的边框",[316,130660,130662],{"className":127064,"code":130661,"language":127066,"meta":50,"style":50},"\u002F* 表格细线边框合并 *\u002F\ntable {\n  border-collapse: collapse;\n}\n",[269,130663,130664,130669,130675,130685],{"__ignoreMap":50},[324,130665,130666],{"class":326,"line":327},[324,130667,130668],{"class":772},"\u002F* 表格细线边框合并 *\u002F\n",[324,130670,130671,130673],{"class":326,"line":203},[324,130672,1003],{"class":52022},[324,130674,16301],{"class":867},[324,130676,130677,130679,130681,130683],{"class":326,"line":338},[324,130678,71300],{"class":916},[324,130680,52159],{"class":867},[324,130682,65757],{"class":916},[324,130684,2025],{"class":867},[324,130686,130687],{"class":326,"line":344},[324,130688,2296],{"class":867},[19,130690,130691],{},"要知道如果不进行合并的话，单元格之间边框如果原来每个边框1像素，现在就变成了1+1=2像素，边框就会变宽了，所以此时非常合并单元格，保持1像素 border-collapse:collapse",[192,130693,130694],{"start":484},[195,130695,130696],{},"解决边框额外增加盒子的实际大小的方法：",[1871,130698,130699,130702],{},[195,130700,130701],{},"测量盒子大小的时候,不量边框",[195,130703,130704],{},"如果测量的时候包含了边框,则需要 width\u002Fheight 减去边框宽度",[35,130706,130708],{"id":130707},"_912-内边距","9.1.2 内边距",[192,130710,130711,130714],{},[195,130712,130713],{},"padding 属性用于设置内边距，即边框与内容之间的距离",[195,130715,130425],{},[1003,130717,130718,130728],{},[1006,130719,130720],{},[1009,130721,130722,130725],{},[1012,130723,130724],{"align":24463},"值的个数",[1012,130726,130727],{"align":24463},"表达意思",[1049,130729,130730,130738,130746,130754],{},[1009,130731,130732,130735],{},[1054,130733,130734],{"align":24463},"padding: 5px;",[1054,130736,130737],{"align":24463},"1个值，代表上下左右都有5个元素",[1009,130739,130740,130743],{},[1054,130741,130742],{"align":24463},"padding: 5px 10px;",[1054,130744,130745],{"align":24463},"2个值，代表上下内边距为5像素，左右内边距为10像素",[1009,130747,130748,130751],{},[1054,130749,130750],{"align":24463},"padding: 5px 10px 20px;",[1054,130752,130753],{"align":24463},"3个值，代表上内边距5像素，左右内边距为10像素，下内边距为20像素",[1009,130755,130756,130759],{},[1054,130757,130758],{"align":24463},"padding: 5px 10px 20px 30px;",[1054,130760,130761],{"align":24463},"4个值，上是5像素，右是10像素，下是20像素，左是30像素，顺时针",[1003,130763,130764,130772],{},[1006,130765,130766],{},[1009,130767,130768,130770],{},[1012,130769,129666],{"align":24463},[1012,130771,103417],{"align":24463},[1049,130773,130774,130782,130790,130798],{},[1009,130775,130776,130779],{},[1054,130777,130778],{"align":24463},"padding-left",[1054,130780,130781],{"align":24463},"左内边距",[1009,130783,130784,130787],{},[1054,130785,130786],{"align":24463},"padding-right",[1054,130788,130789],{"align":24463},"右内边距",[1009,130791,130792,130795],{},[1054,130793,130794],{"align":24463},"padding-top",[1054,130796,130797],{"align":24463},"上内边距",[1009,130799,130800,130803],{},[1054,130801,130802],{"align":24463},"padding-bottom",[1054,130804,130805],{"align":24463},"下内边距",[192,130807,130808],{"start":338},[195,130809,130810],{},"内边距会影响盒子的实际大小",[19,130812,130813],{},"当我们给盒子指定 padding 值之后，发生了 2 件事情：",[19,130815,130816],{},"①内容和边框有了距离，添加了内边距",[19,130818,130819],{},"②padding影响了盒子实际大小",[19,130821,130822],{},"内边距对盒子大小的影响：",[19,130824,130825],{},"①如果盒子已经有了宽度和高度，此时再指定内边框，会影响盒子的实际大小，会撑大盒子",[19,130827,130828],{},"②如何盒子本身没有指定width\u002Fheight属性, 则此时padding不会撑开盒子大小",[19,130830,95942],{},[19,130832,130833],{},"如果保证盒子跟效果图大小保持一致，则让 width\u002Fheight 减去多出来的内边距大小即可",[35,130835,130837],{"id":130836},"_913-外边距","9.1.3 外边距",[192,130839,130840],{},[195,130841,130842],{},"控制盒子与盒子之间的距离",[1003,130844,130845,130853],{},[1006,130846,130847],{},[1009,130848,130849,130851],{},[1012,130850,129666],{"align":24463},[1012,130852,103417],{"align":24463},[1049,130854,130855,130863,130871,130879],{},[1009,130856,130857,130860],{},[1054,130858,130859],{"align":24463},"margin-left",[1054,130861,130862],{"align":24463},"左外边距",[1009,130864,130865,130868],{},[1054,130866,130867],{"align":24463},"margin-right",[1054,130869,130870],{"align":24463},"右外边距",[1009,130872,130873,130876],{},[1054,130874,130875],{"align":24463},"margin-top",[1054,130877,130878],{"align":24463},"上外边距",[1009,130880,130881,130884],{},[1054,130882,130883],{"align":24463},"margin-bottom",[1054,130885,130886],{"align":24463},"下外边距",[192,130888,130889],{"start":203},[195,130890,130891],{},"外边距可以让块级盒子水平居中的两个条件：",[19,130893,130894],{},"①盒子必须指定了宽度（width）",[19,130896,130897],{},"②盒子左右的外边距都设置为 auto",[316,130899,130901],{"className":127064,"code":130900,"language":127066,"meta":50,"style":50},"\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[269,130902,130903,130908,130915,130931],{"__ignoreMap":50},[324,130904,130905],{"class":326,"line":327},[324,130906,130907],{"class":772},"\u002F* margin 复合写法（同上） *\u002F\n",[324,130909,130910,130913],{"class":326,"line":203},[324,130911,130912],{"class":734},".box",[324,130914,16301],{"class":867},[324,130916,130917,130919,130921,130923,130925,130928],{"class":326,"line":338},[324,130918,71192],{"class":916},[324,130920,52159],{"class":867},[324,130922,1056],{"class":916},[324,130924,52278],{"class":916},[324,130926,130927],{"class":867},";  ",[324,130929,130930],{"class":772},"\u002F* 块级盒子水平居中 *\u002F\n",[324,130932,130933],{"class":326,"line":344},[324,130934,2296],{"class":867},[192,130936,130937],{"start":338},[195,130938,130939],{},"外边距塌陷问题",[19,130941,130942],{},"当盒子中嵌套盒子时，让子盒子与父盒子进行隔开时，对子盒子使用margin时，子盒子并不产生影响，子盒子与父盒子没有隔开，父盒子产生了影响，发生了类似于塌陷的效果",[48,130944],{"style":126920,"src":130945},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-041.png",[19,130947,130948],{},"解决方案：",[19,130950,130951],{},"①可以为父亲元素定义上边距",[316,130953,130954],{"className":127064,"code":130900,"language":127066,"meta":50,"style":50},[269,130955,130956,130960,130966,130980],{"__ignoreMap":50},[324,130957,130958],{"class":326,"line":327},[324,130959,130907],{"class":772},[324,130961,130962,130964],{"class":326,"line":203},[324,130963,130912],{"class":734},[324,130965,16301],{"class":867},[324,130967,130968,130970,130972,130974,130976,130978],{"class":326,"line":338},[324,130969,71192],{"class":916},[324,130971,52159],{"class":867},[324,130973,1056],{"class":916},[324,130975,52278],{"class":916},[324,130977,130927],{"class":867},[324,130979,130930],{"class":772},[324,130981,130982],{"class":326,"line":344},[324,130983,2296],{"class":867},[19,130985,130986],{},"②可以为父亲元素定义上内边距",[19,130988,130989],{},"③可以为父亲元素添加overflow:hidden",[48,130991],{"style":126920,"src":130992},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-042.png",[316,130994,130995],{"className":127064,"code":130900,"language":127066,"meta":50,"style":50},[269,130996,130997,131001,131007,131021],{"__ignoreMap":50},[324,130998,130999],{"class":326,"line":327},[324,131000,130907],{"class":772},[324,131002,131003,131005],{"class":326,"line":203},[324,131004,130912],{"class":734},[324,131006,16301],{"class":867},[324,131008,131009,131011,131013,131015,131017,131019],{"class":326,"line":338},[324,131010,71192],{"class":916},[324,131012,52159],{"class":867},[324,131014,1056],{"class":916},[324,131016,52278],{"class":916},[324,131018,130927],{"class":867},[324,131020,130930],{"class":772},[324,131022,131023],{"class":326,"line":344},[324,131024,2296],{"class":867},[48,131026],{"style":126920,"src":131027},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-043.png",[19,131029,131030],{},"以后如果父盒子给定了宽高，子盒子要实现在父盒子中的居中效果，如果不给父盒子上边框，子盒子的margin对于竖直方向就会失效，但是水平方向不会失效",[19,131032,131033],{},"解决方式：子盒子使用定位；父盒子加边框；父盒子使用overflow:hidden",[35,131035,131037],{"id":131036},"_914-清除内外边距","9.1.4 清除内外边距",[19,131039,131040],{},"网页元素很多都带有默认的内外边距，而且不同浏览器默认的也不一致。因此我们在布局前，首先要清除下网页元素的内外边距",[316,131042,131043],{"className":127064,"code":130900,"language":127066,"meta":50,"style":50},[269,131044,131045,131049,131055,131069],{"__ignoreMap":50},[324,131046,131047],{"class":326,"line":327},[324,131048,130907],{"class":772},[324,131050,131051,131053],{"class":326,"line":203},[324,131052,130912],{"class":734},[324,131054,16301],{"class":867},[324,131056,131057,131059,131061,131063,131065,131067],{"class":326,"line":338},[324,131058,71192],{"class":916},[324,131060,52159],{"class":867},[324,131062,1056],{"class":916},[324,131064,52278],{"class":916},[324,131066,130927],{"class":867},[324,131068,130930],{"class":772},[324,131070,131071],{"class":326,"line":344},[324,131072,2296],{"class":867},[19,131074,131075],{},"注意：行内元素为了照顾兼容性，尽量只设置左右内外边距，不要设置上下内外边距。但是转换为块级和行内块元素就可以了",[35,131077,131079],{"id":131078},"_915-常用ps的基本操作","9.1.5 常用ps的基本操作",[1871,131081,131082,131085,131088,131091,131094,131097],{},[195,131083,131084],{},"文件→打开 ：可以打开我们要测量的图片",[195,131086,131087],{},"Ctrl+R：可以打开标尺，或者 视图→标尺",[195,131089,131090],{},"右击标尺，把里面的单位改为像素",[195,131092,131093],{},"Ctrl+ 加号(+)可以放大视图， Ctrl+ 减号(-)可以缩小视图",[195,131095,131096],{},"按住空格键，鼠标可以变成小手，拖动 PS 视图",[195,131098,131099],{},"用选区拖动 可以测量大小",[48,131101],{"style":126920,"src":131102},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-044.png",[1871,131104,131105,131108],{},[195,131106,131107],{},"Ctrl+ D 可以取消选区，或者在旁边空白处点击一下也可以取消选区",[195,131109,131110],{},"吸管取色工具",[48,131112],{"style":126920,"src":131113},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-045.png",[35,131115,131117],{"id":131116},"_916-案例","9.1.6 案例",[192,131119,131120],{},[195,131121,131122],{},"小米商品",[48,131124],{"style":126920,"src":131125},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-046.png",[316,131127,131128],{"className":127064,"code":130900,"language":127066,"meta":50,"style":50},[269,131129,131130,131134,131140,131154],{"__ignoreMap":50},[324,131131,131132],{"class":326,"line":327},[324,131133,130907],{"class":772},[324,131135,131136,131138],{"class":326,"line":203},[324,131137,130912],{"class":734},[324,131139,16301],{"class":867},[324,131141,131142,131144,131146,131148,131150,131152],{"class":326,"line":338},[324,131143,71192],{"class":916},[324,131145,52159],{"class":867},[324,131147,1056],{"class":916},[324,131149,52278],{"class":916},[324,131151,130927],{"class":867},[324,131153,130930],{"class":772},[324,131155,131156],{"class":326,"line":344},[324,131157,2296],{"class":867},[192,131159,131160],{"start":203},[195,131161,131162],{},"快报模块",[48,131164],{"style":126920,"src":131165},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-047.png",[316,131167,131169],{"className":127811,"code":131168,"language":127813,"meta":50,"style":50},"\u003C!-- HTML 代码示例 -->\n\u003Cdiv class=\"example\">\n  示例内容\n\u003C\u002Fdiv>\n",[269,131170,131171,131176,131191,131196],{"__ignoreMap":50},[324,131172,131173],{"class":326,"line":327},[324,131174,131175],{"class":772},"\u003C!-- HTML 代码示例 -->\n",[324,131177,131178,131180,131182,131184,131186,131189],{"class":326,"line":203},[324,131179,1774],{"class":867},[324,131181,52333],{"class":52022},[324,131183,54208],{"class":734},[324,131185,913],{"class":867},[324,131187,131188],{"class":738},"\"example\"",[324,131190,52029],{"class":867},[324,131192,131193],{"class":326,"line":338},[324,131194,131195],{"class":867},"  示例内容\n",[324,131197,131198,131200,131202],{"class":326,"line":344},[324,131199,52507],{"class":867},[324,131201,52333],{"class":52022},[324,131203,52029],{"class":867},[35,131205,131207],{"id":131206},"_917-盒子模型css中所用到的其他样式","9.1.7 盒子模型css中所用到的其他样式",[192,131209,131210],{},[195,131211,131212],{},"圆角边框",[19,131214,131215],{},"圆角边框的原理为拿着设定半径的圆去矩形等形状的角位置去截弧",[48,131217],{"style":126920,"src":131218},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-048.png",[316,131220,131222],{"className":127064,"code":131221,"language":127066,"meta":50,"style":50},"div {\n  border: 1px solid #ccc;\n}\n",[269,131223,131224,131230,131246],{"__ignoreMap":50},[324,131225,131226,131228],{"class":326,"line":327},[324,131227,52333],{"class":52022},[324,131229,16301],{"class":867},[324,131231,131232,131234,131236,131238,131240,131242,131244],{"class":326,"line":203},[324,131233,71618],{"class":916},[324,131235,52159],{"class":867},[324,131237,1082],{"class":916},[324,131239,52214],{"class":863},[324,131241,52243],{"class":916},[324,131243,130456],{"class":916},[324,131245,2025],{"class":867},[324,131247,131248],{"class":326,"line":338},[324,131249,2296],{"class":867},[19,131251,131252],{},"解释:",[1871,131254,131255,131258,131261,131264,131267],{},[195,131256,131257],{},"参数值可以为数值或百分比的形式",[195,131259,131260],{},"如果是正方形，想要设置为一个圆，把数值修改为高度或者宽度的一半即可，或者直接写为 50%",[195,131262,131263],{},"该属性是一个简写属性，可以跟四个值，分别代表左上角、右上角、右下角、左下角",[195,131265,131266],{},"分开写：border-top-left-radius、border-top-right-radius、border-bottom-right-radius 和border-bottom-left-radius",[195,131268,131269],{},"兼容性 ie9+ 浏览器支持, 但是不会影响页面布局,可以放心使用",[192,131271,131272],{"start":203},[195,131273,131274],{},"盒子阴影",[316,131276,131278],{"className":127064,"code":131277,"language":127066,"meta":50,"style":50},"div {\n  box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);\n}\n",[269,131279,131280,131286,131323],{"__ignoreMap":50},[324,131281,131282,131284],{"class":326,"line":327},[324,131283,52333],{"class":52022},[324,131285,16301],{"class":867},[324,131287,131288,131291,131293,131295,131297,131299,131301,131303,131305,131307,131309,131311,131313,131315,131317,131319,131321],{"class":326,"line":203},[324,131289,131290],{"class":916},"  box-shadow",[324,131292,52159],{"class":867},[324,131294,1056],{"class":916},[324,131296,15484],{"class":916},[324,131298,52214],{"class":863},[324,131300,2768],{"class":916},[324,131302,52214],{"class":863},[324,131304,79489],{"class":916},[324,131306,868],{"class":867},[324,131308,1056],{"class":916},[324,131310,13164],{"class":867},[324,131312,1056],{"class":916},[324,131314,13164],{"class":867},[324,131316,1056],{"class":916},[324,131318,13164],{"class":867},[324,131320,86932],{"class":916},[324,131322,3448],{"class":867},[324,131324,131325],{"class":326,"line":338},[324,131326,2296],{"class":867},[1003,131328,131329,131337],{},[1006,131330,131331],{},[1009,131332,131333,131335],{},[1012,131334,1017],{"align":24463},[1012,131336,28211],{"align":24463},[1049,131338,131339,131347,131355,131363,131371,131379],{},[1009,131340,131341,131344],{},[1054,131342,131343],{"align":24463},"h-shadow",[1054,131345,131346],{"align":24463},"必需,水平阴影的位置,允许负值",[1009,131348,131349,131352],{},[1054,131350,131351],{"align":24463},"v-shadow",[1054,131353,131354],{"align":24463},"必需,垂直阴影的位置,允许负值",[1009,131356,131357,131360],{},[1054,131358,131359],{"align":24463},"blur",[1054,131361,131362],{"align":24463},"可选,模糊距离,就是影子的虚实",[1009,131364,131365,131368],{},[1054,131366,131367],{"align":24463},"spread",[1054,131369,131370],{"align":24463},"可选,阴影尺寸",[1009,131372,131373,131376],{},[1054,131374,131375],{"align":24463},"color",[1054,131377,131378],{"align":24463},"可选,阴影的颜色",[1009,131380,131381,131384],{},[1054,131382,131383],{"align":24463},"inset",[1054,131385,131386],{"align":24463},"可选,将外部阴影(outset)改为内部阴影",[192,131388,131389],{"start":338},[195,131390,131391],{},"文字阴影",[316,131393,131395],{"className":127064,"code":131394,"language":127066,"meta":50,"style":50},"p {\n  text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.3);\n}\n",[269,131396,131397,131403,131442],{"__ignoreMap":50},[324,131398,131399,131401],{"class":326,"line":327},[324,131400,19],{"class":52022},[324,131402,16301],{"class":867},[324,131404,131405,131408,131410,131412,131414,131416,131418,131420,131422,131424,131426,131428,131430,131432,131434,131436,131438,131440],{"class":326,"line":203},[324,131406,131407],{"class":916},"  text-shadow",[324,131409,52159],{"class":867},[324,131411,1082],{"class":916},[324,131413,52214],{"class":863},[324,131415,25842],{"class":916},[324,131417,52214],{"class":863},[324,131419,15484],{"class":916},[324,131421,52214],{"class":863},[324,131423,79489],{"class":916},[324,131425,868],{"class":867},[324,131427,1056],{"class":916},[324,131429,13164],{"class":867},[324,131431,1056],{"class":916},[324,131433,13164],{"class":867},[324,131435,1056],{"class":916},[324,131437,13164],{"class":867},[324,131439,101243],{"class":916},[324,131441,3448],{"class":867},[324,131443,131444],{"class":326,"line":338},[324,131445,2296],{"class":867},[1003,131447,131448,131456],{},[1006,131449,131450],{},[1009,131451,131452,131454],{},[1012,131453,1017],{"align":24463},[1012,131455,28211],{"align":24463},[1049,131457,131458,131464,131471,131478],{},[1009,131459,131460,131462],{},[1054,131461,131343],{"align":24463},[1054,131463,131346],{"align":24463},[1009,131465,131466,131468],{},[1054,131467,131351],{"align":24463},[1054,131469,131470],{"align":24463},"必需,垂直阴影位置,允许负值",[1009,131472,131473,131475],{},[1054,131474,131359],{"align":24463},[1054,131476,131477],{"align":24463},"可选,模糊的距离",[1009,131479,131480,131482],{},[1054,131481,131375],{"align":24463},[1054,131483,131378],{"align":24463},[14,131485,131487],{"id":131486},"_92-浮动","9.2 浮动",[35,131489,131491],{"id":131490},"_921-浮动介绍","9.2.1 浮动介绍",[19,131493,131494],{},"在16.2中详细介绍",[35,131496,131498],{"id":131497},"_922-清除浮动","9.2.2 清除浮动",[192,131500,131501,131504],{},[195,131502,131503],{},"原因：由于父级盒子很多情况下，不方便给高度，但是子盒子浮动又不占有位置，最后父级盒子高度为 0 时，就会影响下面的标准流盒子",[195,131505,131506],{},"清除浮动的本质",[19,131508,131509],{},"清除浮动的本质是清除浮动元素造成的影响：浮动的子标签无法撑开父盒子的高度",[19,131511,9754],{},[1871,131513,131514,131517,131520],{},[195,131515,131516],{},"如果父盒子本身有高度，则不需要清除浮动",[195,131518,131519],{},"清除浮动之后，父级就会根据浮动的子盒子自动检测高度",[195,131521,131522],{},"父级有了高度，就不会影响下面的标准流了",[192,131524,131525],{"start":338},[195,131526,131527],{},"清除浮动样式",[316,131529,131531],{"className":127064,"code":131530,"language":127066,"meta":50,"style":50},".left {\n  float: left;\n}\n.right {\n  float: right;\n}\n",[269,131532,131533,131540,131551,131555,131562,131572],{"__ignoreMap":50},[324,131534,131535,131538],{"class":326,"line":327},[324,131536,131537],{"class":734},".left",[324,131539,16301],{"class":867},[324,131541,131542,131545,131547,131549],{"class":326,"line":203},[324,131543,131544],{"class":916},"  float",[324,131546,52159],{"class":867},[324,131548,24463],{"class":916},[324,131550,2025],{"class":867},[324,131552,131553],{"class":326,"line":338},[324,131554,2296],{"class":867},[324,131556,131557,131560],{"class":326,"line":344},[324,131558,131559],{"class":734},".right",[324,131561,16301],{"class":867},[324,131563,131564,131566,131568,131570],{"class":326,"line":484},[324,131565,131544],{"class":916},[324,131567,52159],{"class":867},[324,131569,73244],{"class":916},[324,131571,2025],{"class":867},[324,131573,131574],{"class":326,"line":491},[324,131575,2296],{"class":867},[1003,131577,131578,131586],{},[1006,131579,131580],{},[1009,131581,131582,131584],{},[1012,131583,127528],{"align":24463},[1012,131585,28211],{"align":24463},[1049,131587,131588,131595,131602],{},[1009,131589,131590,131592],{},[1054,131591,24463],{"align":24463},[1054,131593,131594],{"align":24463},"不允许左侧有浮动元素（清除左侧浮动的影响）",[1009,131596,131597,131599],{},[1054,131598,73244],{"align":24463},[1054,131600,131601],{"align":24463},"不允许右侧有浮动元素（清除右侧浮动的影响）",[1009,131603,131604,131607],{},[1054,131605,131606],{"align":24463},"both",[1054,131608,131609],{"align":24463},"同时清除左右侧浮动的影响",[19,131611,131612],{},"法一",[19,131614,131615],{},"额外标签法也称为隔墙法",[19,131617,131618],{},"使用方式：",[19,131620,131621],{},"额外标签法会在浮动元素末尾添加一个空的标签。",[316,131623,131624],{"className":127064,"code":131530,"language":127066,"meta":50,"style":50},[269,131625,131626,131632,131642,131646,131652,131662],{"__ignoreMap":50},[324,131627,131628,131630],{"class":326,"line":327},[324,131629,131537],{"class":734},[324,131631,16301],{"class":867},[324,131633,131634,131636,131638,131640],{"class":326,"line":203},[324,131635,131544],{"class":916},[324,131637,52159],{"class":867},[324,131639,24463],{"class":916},[324,131641,2025],{"class":867},[324,131643,131644],{"class":326,"line":338},[324,131645,2296],{"class":867},[324,131647,131648,131650],{"class":326,"line":344},[324,131649,131559],{"class":734},[324,131651,16301],{"class":867},[324,131653,131654,131656,131658,131660],{"class":326,"line":484},[324,131655,131544],{"class":916},[324,131657,52159],{"class":867},[324,131659,73244],{"class":916},[324,131661,2025],{"class":867},[324,131663,131664],{"class":326,"line":491},[324,131665,2296],{"class":867},[19,131667,131668],{},"both这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方",[19,131670,131671],{},"优点： 通俗易懂，书写方便",[19,131673,131674],{},"缺点： 添加许多无意义的标签，结构化较差",[19,131676,131677],{},"注意： 要求这个新的空标签必须是块级元素。",[19,131679,131680],{},"法二",[19,131682,131683],{},"父级添加overflow属性",[316,131685,131686],{"className":127064,"code":131530,"language":127066,"meta":50,"style":50},[269,131687,131688,131694,131704,131708,131714,131724],{"__ignoreMap":50},[324,131689,131690,131692],{"class":326,"line":327},[324,131691,131537],{"class":734},[324,131693,16301],{"class":867},[324,131695,131696,131698,131700,131702],{"class":326,"line":203},[324,131697,131544],{"class":916},[324,131699,52159],{"class":867},[324,131701,24463],{"class":916},[324,131703,2025],{"class":867},[324,131705,131706],{"class":326,"line":338},[324,131707,2296],{"class":867},[324,131709,131710,131712],{"class":326,"line":344},[324,131711,131559],{"class":734},[324,131713,16301],{"class":867},[324,131715,131716,131718,131720,131722],{"class":326,"line":484},[324,131717,131544],{"class":916},[324,131719,52159],{"class":867},[324,131721,73244],{"class":916},[324,131723,2025],{"class":867},[324,131725,131726],{"class":326,"line":491},[324,131727,2296],{"class":867},[19,131729,131730],{},"overflow: hidden;",[19,131732,131733],{},"优点：代码简洁",[19,131735,131736],{},"缺点：无法显示溢出的部分",[19,131738,131739],{},"注意：是给父元素添加代码",[19,131741,131742],{},"法三",[19,131744,131745],{},"父级添加after伪元素",[19,131747,131748,131751],{},[131749,131750],"after",{}," 方式是额外标签法的升级版",[19,131753,131754],{},"使用的时候复制就可以",[316,131756,131757],{"className":127064,"code":131530,"language":127066,"meta":50,"style":50},[269,131758,131759,131765,131775,131779,131785,131795],{"__ignoreMap":50},[324,131760,131761,131763],{"class":326,"line":327},[324,131762,131537],{"class":734},[324,131764,16301],{"class":867},[324,131766,131767,131769,131771,131773],{"class":326,"line":203},[324,131768,131544],{"class":916},[324,131770,52159],{"class":867},[324,131772,24463],{"class":916},[324,131774,2025],{"class":867},[324,131776,131777],{"class":326,"line":338},[324,131778,2296],{"class":867},[324,131780,131781,131783],{"class":326,"line":344},[324,131782,131559],{"class":734},[324,131784,16301],{"class":867},[324,131786,131787,131789,131791,131793],{"class":326,"line":484},[324,131788,131544],{"class":916},[324,131790,52159],{"class":867},[324,131792,73244],{"class":916},[324,131794,2025],{"class":867},[324,131796,131797],{"class":326,"line":491},[324,131798,2296],{"class":867},[19,131800,131801],{},"优点：没有增加标签，结构更简单",[19,131803,131804],{},"缺点：照顾低版本浏览器",[19,131806,131807],{},"代表网站： 百度、淘宝网、网易等",[19,131809,131810],{},"法四",[19,131812,131813],{},"父级添加双伪元素",[316,131815,131816],{"className":127064,"code":131530,"language":127066,"meta":50,"style":50},[269,131817,131818,131824,131834,131838,131844,131854],{"__ignoreMap":50},[324,131819,131820,131822],{"class":326,"line":327},[324,131821,131537],{"class":734},[324,131823,16301],{"class":867},[324,131825,131826,131828,131830,131832],{"class":326,"line":203},[324,131827,131544],{"class":916},[324,131829,52159],{"class":867},[324,131831,24463],{"class":916},[324,131833,2025],{"class":867},[324,131835,131836],{"class":326,"line":338},[324,131837,2296],{"class":867},[324,131839,131840,131842],{"class":326,"line":344},[324,131841,131559],{"class":734},[324,131843,16301],{"class":867},[324,131845,131846,131848,131850,131852],{"class":326,"line":484},[324,131847,131544],{"class":916},[324,131849,52159],{"class":867},[324,131851,73244],{"class":916},[324,131853,2025],{"class":867},[324,131855,131856],{"class":326,"line":491},[324,131857,2296],{"class":867},[19,131859,131860],{},"优点：代码更简洁",[19,131862,131804],{},[19,131864,131865],{},"代表网站：小米、腾讯等",[14,131867,131869],{"id":131868},"_93-ps切图","9.3 PS切图",[35,131871,131873],{"id":131872},"_931-常见图片格式","9.3.1 常见图片格式",[1003,131875,131876,131886],{},[1006,131877,131878],{},[1009,131879,131880,131883],{},[1012,131881,131882],{"align":24463},"jpg图像格式",[1012,131884,131885],{"align":24463},"对色彩的信息保留较好，高清，颜色较多，产品类的图片经常用",[1049,131887,131888,131896,131904],{},[1009,131889,131890,131893],{},[1054,131891,131892],{"align":24463},"gif图像格式",[1054,131894,131895],{"align":24463},"最多只能储存256色，通常用来显示简单图形及字体，但是可以保存透明背景和动画效果，实际经常用于一些图片小动画效果",[1009,131897,131898,131901],{},[1054,131899,131900],{"align":24463},"png图像格式",[1054,131902,131903],{"align":24463},"是一种新型的网络图形格式，结合了GIF和JPEG的优点，具有存储形式丰富的特点，能够保持透明背景。如果想要切成背景透明的图片，选择png格式",[1009,131905,131906,131909],{},[1054,131907,131908],{"align":24463},"PSD图像格式",[1054,131910,131911],{"align":24463},"Photoshop的专用格式，里面可以存放图层、通道、遮罩等多种设计稿，对前端人员来说，最大的优点，可以直接从上面复制文字，获得图片，还可以测量大小和距离，不能直接放到页面",[35,131913,131915],{"id":131914},"_932-图层切图","9.3.2 图层切图",[19,131917,131918],{},"最简单的切图方式：右击图层 → 导出 → 切片",[19,131920,131921],{},"按住shift选中两个图层->图层菜单->合并图层",[35,131923,131925],{"id":131924},"_933-切片切图","9.3.3 切片切图",[1871,131927,131928,131931],{},[195,131929,131930],{},"利用切片工具手动划出",[195,131932,131933],{},"文件菜单 → 存储为 web 设备所用格式 → 选择我们要的图片格式 → 存储",[35,131935,131937],{"id":131936},"_934-切图步骤","9.3.4 切图步骤",[19,131939,131940],{},"用切片工具选中：",[48,131942],{"style":126920,"src":131943},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-049.png",[19,131945,131946],{},"文件 -> 导出",[48,131948],{"style":126920,"src":131949},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-050.png",[775,131951,131952],{},"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":50,"searchDepth":203,"depth":203,"links":131954},[131955,131964,131968],{"id":130391,"depth":203,"text":130392,"children":131956},[131957,131958,131959,131960,131961,131962,131963],{"id":130416,"depth":338,"text":130417},{"id":130707,"depth":338,"text":130708},{"id":130836,"depth":338,"text":130837},{"id":131036,"depth":338,"text":131037},{"id":131078,"depth":338,"text":131079},{"id":131116,"depth":338,"text":131117},{"id":131206,"depth":338,"text":131207},{"id":131486,"depth":203,"text":131487,"children":131965},[131966,131967],{"id":131490,"depth":338,"text":131491},{"id":131497,"depth":338,"text":131498},{"id":131868,"depth":203,"text":131869,"children":131969},[131970,131971,131972,131973],{"id":131872,"depth":338,"text":131873},{"id":131914,"depth":338,"text":131915},{"id":131924,"depth":338,"text":131925},{"id":131936,"depth":338,"text":131937},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch09-css",{"title":130383,"description":791},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图","ylnbHzfjeKRot9DLo6XlwzZ1JmiwKHwMG_dAza53z78",{"id":131980,"title":131981,"body":131982,"description":791,"extension":792,"meta":132623,"navigation":487,"path":132624,"seo":132625,"stem":132626,"__hash__":132627},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例.md","10. CSS规范与学成在线案例",{"type":7,"value":131983,"toc":132611},[131984,131987,131991,132017,132051,132055,132059,132062,132104,132111,132121,132129,132131,132134,132137,132140,132147,132161,132165,132168,132197,132201,132204,132218,132222,132225,132253,132257,132260,132286,132290,132295,132328,132333,132361,132365,132382,132428,132433,132477,132494,132601,132609],[10,131985,131981],{"id":131986},"_10-css规范与学成在线案例",[14,131988,131990],{"id":131989},"_101-css属性书写顺序","10.1 CSS属性书写顺序",[192,131992,131993,131999,132005,132011],{},[195,131994,131995,131998],{},[116,131996,131997],{},"布局定位属性"," ：display \u002F position \u002F float \u002F clear \u002F visibility \u002F overflow（建议 display 第一个写，毕竟关系到模式）",[195,132000,132001,132004],{},[116,132002,132003],{},"自身属性"," ：width \u002F height \u002F margin \u002F padding \u002F border \u002F background",[195,132006,132007,132010],{},[116,132008,132009],{},"文本属性"," ：color \u002F font \u002F text-decoration \u002F text-align \u002F vertical-align \u002F white- space \u002F break-word",[195,132012,132013,132016],{},[116,132014,132015],{},"其他属性（CSS3）"," ：content \u002F cursor \u002F border-radius \u002F box-shadow \u002F text-shadow \u002F background:linear-gradient …",[316,132018,132019],{"className":127064,"code":130428,"language":127066,"meta":50,"style":50},[269,132020,132021,132025,132031,132047],{"__ignoreMap":50},[324,132022,132023],{"class":326,"line":327},[324,132024,130435],{"class":772},[324,132026,132027,132029],{"class":326,"line":203},[324,132028,52333],{"class":52022},[324,132030,16301],{"class":867},[324,132032,132033,132035,132037,132039,132041,132043,132045],{"class":326,"line":338},[324,132034,71618],{"class":916},[324,132036,52159],{"class":867},[324,132038,1082],{"class":916},[324,132040,52214],{"class":863},[324,132042,52243],{"class":916},[324,132044,130456],{"class":916},[324,132046,2025],{"class":867},[324,132048,132049],{"class":326,"line":344},[324,132050,2296],{"class":867},[14,132052,132054],{"id":132053},"_102-学成在线案例反思总结","10.2 学成在线案例反思总结",[35,132056,132058],{"id":132057},"_1021-header头部制作","10.2.1 header头部制作",[48,132060],{"style":126920,"src":132061},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-051.png",[1871,132063,132064,132071,132078,132084,132091,132098],{},[195,132065,132066,132067,132070],{},"1号是版心盒子 ",[116,132068,132069],{},"header"," 1200 * 42 的盒子水平居中对齐, 上下给一个margin值就好了",[195,132072,132073,132074,132077],{},"版心盒子 里面包含 2号盒子 ",[116,132075,132076],{},"logo"," 图标",[195,132079,132080,132081,132083],{},"版心盒子 里面包含 3号盒子 ",[116,132082,54435],{}," 导航栏",[195,132085,132086,132087,132090],{},"版心盒子 里面包含 4号盒子 ",[116,132088,132089],{},"search"," 搜索框",[195,132092,132093,132094,132097],{},"版心盒子 里面包含 5号盒子 ",[116,132095,132096],{},"user"," 个人信息",[195,132099,132100,132101],{},"注意，要求里面的 ",[116,132102,132103],{},"4个子盒子 必须都浮动",[192,132105,132106],{},[195,132107,132108],{},[116,132109,132110],{},"导航栏注意点:",[19,132112,132113,132114,132117,132118],{},"实际开发中， ",[116,132115,132116],{},"重要的****导航栏","，我们不会直接用链接a ，而是 ",[116,132119,132120],{},"用 li 包含链接(li+a)的做法",[1871,132122,132123,132126],{},[195,132124,132125],{},"li+a 语义更清晰，一看这就是有条理的列表型内容",[195,132127,132128],{},"如果直接用a，搜索引擎容易辨别为有堆砌关键字嫌疑（故意堆砌关键字容易被搜索引擎有降权的风险），从而影响网站排名",[19,132130,9754],{},[19,132132,132133],{},"  ①让导航栏一行显示, 给 li 加浮动, 因为 li 是块级元素, 需要一行显示",[19,132135,132136],{},"  ②这个nav导航栏可以不给宽度,将来可以继续添加其余文字",[19,132138,132139],{},"  ③因为导航栏里面文字不一样多,所以最好给链接 a 左右padding 撑开盒子,而不是指定宽度",[192,132141,132142],{"start":203},[195,132143,132144],{},[116,132145,132146],{},"4号盒子search的细节：",[1871,132148,132149,132152,132155],{},[195,132150,132151],{},"search 搜索框的意思: 一个 search 大盒子里面包含 2个 表单",[195,132153,132154],{},"技巧：input和button都，属于行内块元素，会有缝隙，使用浮动，可以去缝隙",[195,132156,132157,132160],{},[269,132158,132159],{},"\u003Cbutton>``\u003C\u002Fbutton>","按钮不能忘，按钮要手动去除边框",[35,132162,132164],{"id":132163},"_1022-banner制作","10.2.2 banner制作",[48,132166],{"style":126920,"src":132167},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-052.png",[1871,132169,132170,132177,132183,132190],{},[195,132171,132172,132173,132176],{},"1号盒子是通栏的大盒子 ",[116,132174,132175],{},"banner"," ， 不给宽度，给高度，给一个蓝色背景",[195,132178,132179,132180,132182],{},"2号盒子是版心 ",[116,132181,1659],{}," ， 要水平居中对齐",[195,132184,132185,132186,132189],{},"3号盒子版心内，左对齐 ",[116,132187,132188],{},"subnav"," 侧导航栏",[195,132191,132192,132193,132196],{},"4号盒子版心内，右对齐 ",[116,132194,132195],{},"course"," 课程",[35,132198,132200],{"id":132199},"_1023-精品推荐小模块","10.2.3 精品推荐小模块",[48,132202],{"style":126920,"src":132203},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-053.png",[1871,132205,132206,132209,132212,132215],{},[195,132207,132208],{},"大盒子水平居中 goods 精品 ，注意此处有个盒子阴影",[195,132210,132211],{},"1号盒子是标题 H3 左侧浮动",[195,132213,132214],{},"2号盒子 里面放链接 左侧浮动goods-item距离可以控制链接的 左右外边距（注意行内元素只给左右内外边距）",[195,132216,132217],{},"3号盒子 右浮动 mod 修改",[35,132219,132221],{"id":132220},"_1024-精品推荐大模块","10.2.4 精品推荐大模块",[48,132223],{"style":126920,"src":132224},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-054.png",[1871,132226,132227,132233,132240,132247,132250],{},[195,132228,132229,132230,132232],{},"1号盒子为最大的盒子 ",[116,132231,54436],{}," 版心水平居中对齐",[195,132234,132235,132236,132239],{},"2号盒子为上面部分 ",[116,132237,132238],{},"box-hd"," -- 里面 左侧标题H3 左浮动 右侧 链接 a 右浮动",[195,132241,132242,132243,132246],{},"3号盒子为底下部分 ",[116,132244,132245],{},"box-bd"," --- 里面是无序列表 有 10个 小li 组成",[195,132248,132249],{},"小li 外边距的问题， 在使用li的时候可能因为外边距的问题导致最后一个li盒子在这一行是放不开的，此时可以对ul进行处理，让ul大一点，大的那一块反正是外边距，所以不会有任何的影响，这样就不需要再单独写类选择器，对放不下的li盒子进行处理",[195,132251,132252],{},"复习点：我们用到清除浮动，因为 box-hd 里面的盒子个数不一定是多少，所以我们就不给高度了，但是里面的盒子浮动会影响下面的布局，因此需要清除浮动。",[35,132254,132256],{"id":132255},"_1025-底部模块制作","10.2.5 底部模块制作",[48,132258],{"style":126920,"src":132259},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-055.png",[1871,132261,132262,132269,132272,132279],{},[195,132263,132264,132265,132268],{},"1号盒子通栏大盒子 底部 ",[116,132266,132267],{},"footer"," 给高度 底色是白色",[195,132270,132271],{},"2号盒子版心水平居中",[195,132273,132274,132275,132278],{},"3号盒子版权 ",[116,132276,132277],{},"copyright"," 左对齐",[195,132280,132281,132282,132285],{},"4号盒子 链接组 ",[116,132283,132284],{},"links"," 右对齐",[35,132287,132289],{"id":132288},"_1026-代码模块","10.2.6 代码模块",[192,132291,132292],{},[195,132293,132294],{},"html部分",[316,132296,132298],{"className":127811,"code":132297,"language":127813,"meta":50,"style":50},"\u003Ca href=\"https:\u002F\u002Fexample.com\" target=\"_blank\">链接文字\u003C\u002Fa>\n",[269,132299,132300],{"__ignoreMap":50},[324,132301,132302,132304,132306,132308,132310,132313,132316,132318,132321,132324,132326],{"class":326,"line":327},[324,132303,1774],{"class":867},[324,132305,25],{"class":52022},[324,132307,61779],{"class":734},[324,132309,913],{"class":867},[324,132311,132312],{"class":738},"\"https:\u002F\u002Fexample.com\"",[324,132314,132315],{"class":734}," target",[324,132317,913],{"class":867},[324,132319,132320],{"class":738},"\"_blank\"",[324,132322,132323],{"class":867},">链接文字\u003C\u002F",[324,132325,25],{"class":52022},[324,132327,52029],{"class":867},[192,132329,132330],{"start":203},[195,132331,132332],{},"css部分",[316,132334,132335],{"className":127811,"code":132297,"language":127813,"meta":50,"style":50},[269,132336,132337],{"__ignoreMap":50},[324,132338,132339,132341,132343,132345,132347,132349,132351,132353,132355,132357,132359],{"class":326,"line":327},[324,132340,1774],{"class":867},[324,132342,25],{"class":52022},[324,132344,61779],{"class":734},[324,132346,913],{"class":867},[324,132348,132312],{"class":738},[324,132350,132315],{"class":734},[324,132352,913],{"class":867},[324,132354,132320],{"class":738},[324,132356,132323],{"class":867},[324,132358,25],{"class":52022},[324,132360,52029],{"class":867},[35,132362,132364],{"id":132363},"_1027-收获","10.2.7 收获",[192,132366,132367,132370,132373,132376,132379],{},[195,132368,132369],{},"先确定版心，然后写一个类选择器，直接后边的就直接调用这个类选择器就可以",[195,132371,132372],{},"在设置导航栏时，对于横的导航栏对li设置浮动，对a设置大小就可以，对于竖的导航栏对li设置宽高，以后这样做，保证书写规范",[195,132374,132375],{},"行内块元素之间有空隙，解决的一个好方法是设置浮动",[195,132377,132378],{},"设置用户的时候要灵活使用img标签，一个盒子放头像和名字",[195,132380,132381],{},"遗忘代码",[316,132383,132385],{"className":127064,"code":132384,"language":127066,"meta":50,"style":50},"div, p, h1, ul, li {\n  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n  display: block;\n}\n",[269,132386,132387,132409,132414,132424],{"__ignoreMap":50},[324,132388,132389,132391,132393,132395,132397,132399,132401,132403,132405,132407],{"class":326,"line":327},[324,132390,52333],{"class":52022},[324,132392,13164],{"class":867},[324,132394,19],{"class":52022},[324,132396,13164],{"class":867},[324,132398,10],{"class":52022},[324,132400,13164],{"class":867},[324,132402,1871],{"class":52022},[324,132404,13164],{"class":867},[324,132406,195],{"class":52022},[324,132408,16301],{"class":867},[324,132410,132411],{"class":326,"line":203},[324,132412,132413],{"class":772},"  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n",[324,132415,132416,132418,132420,132422],{"class":326,"line":338},[324,132417,128680],{"class":916},[324,132419,52159],{"class":867},[324,132421,61591],{"class":916},[324,132423,2025],{"class":867},[324,132425,132426],{"class":326,"line":344},[324,132427,2296],{"class":867},[192,132429,132430],{"start":491},[195,132431,132432],{},"html引css的程序",[316,132434,132435],{"className":127064,"code":132384,"language":127066,"meta":50,"style":50},[269,132436,132437,132459,132463,132473],{"__ignoreMap":50},[324,132438,132439,132441,132443,132445,132447,132449,132451,132453,132455,132457],{"class":326,"line":327},[324,132440,52333],{"class":52022},[324,132442,13164],{"class":867},[324,132444,19],{"class":52022},[324,132446,13164],{"class":867},[324,132448,10],{"class":52022},[324,132450,13164],{"class":867},[324,132452,1871],{"class":52022},[324,132454,13164],{"class":867},[324,132456,195],{"class":52022},[324,132458,16301],{"class":867},[324,132460,132461],{"class":326,"line":203},[324,132462,132413],{"class":772},[324,132464,132465,132467,132469,132471],{"class":326,"line":338},[324,132466,128680],{"class":916},[324,132468,52159],{"class":867},[324,132470,61591],{"class":916},[324,132472,2025],{"class":867},[324,132474,132475],{"class":326,"line":344},[324,132476,2296],{"class":867},[192,132478,132479,132482,132485,132488,132491],{"start":496},[195,132480,132481],{},"浮动的盒子不会有外边距合并问题",[195,132483,132484],{},"子盒子没有设置宽高，是直接继承父盒子的宽高的，此时给子盒子设置padding,是不会撑大父盒子的，可以理解为已经约束了子盒子，子盒子在确定空间中再如何动，也不会打破空间",[195,132486,132487],{},"ctrl+g快速定位行；shift+alt多个光标",[195,132489,132490],{},"学习上方各个模块的选择器起名方法，以后就这样用",[195,132492,132493],{},"在写选择器时尽量写全一些，例如",[316,132495,132497],{"className":127064,"code":132496,"language":127066,"meta":50,"style":50},"\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",[269,132498,132499,132504,132520,132525,132540,132545,132560,132565,132580,132585],{"__ignoreMap":50},[324,132500,132501],{"class":326,"line":327},[324,132502,132503],{"class":772},"\u002F* 静态定位（默认） *\u002F\n",[324,132505,132506,132509,132511,132513,132515,132518],{"class":326,"line":203},[324,132507,132508],{"class":734},".static",[324,132510,80529],{"class":867},[324,132512,129424],{"class":916},[324,132514,52159],{"class":867},[324,132516,132517],{"class":916},"static",[324,132519,129994],{"class":867},[324,132521,132522],{"class":326,"line":338},[324,132523,132524],{"class":772},"\u002F* 相对定位 *\u002F\n",[324,132526,132527,132530,132532,132534,132536,132538],{"class":326,"line":344},[324,132528,132529],{"class":734},".relative",[324,132531,80529],{"class":867},[324,132533,129424],{"class":916},[324,132535,52159],{"class":867},[324,132537,55486],{"class":916},[324,132539,129994],{"class":867},[324,132541,132542],{"class":326,"line":484},[324,132543,132544],{"class":772},"\u002F* 绝对定位 *\u002F\n",[324,132546,132547,132550,132552,132554,132556,132558],{"class":326,"line":491},[324,132548,132549],{"class":734},".absolute",[324,132551,80529],{"class":867},[324,132553,129424],{"class":916},[324,132555,52159],{"class":867},[324,132557,55553],{"class":916},[324,132559,129994],{"class":867},[324,132561,132562],{"class":326,"line":496},[324,132563,132564],{"class":772},"\u002F* 固定定位 *\u002F\n",[324,132566,132567,132570,132572,132574,132576,132578],{"class":326,"line":502},[324,132568,132569],{"class":734},".fixed",[324,132571,80529],{"class":867},[324,132573,129424],{"class":916},[324,132575,52159],{"class":867},[324,132577,86955],{"class":916},[324,132579,129994],{"class":867},[324,132581,132582],{"class":326,"line":508},[324,132583,132584],{"class":772},"\u002F* 粘性定位 *\u002F\n",[324,132586,132587,132590,132592,132594,132596,132599],{"class":326,"line":514},[324,132588,132589],{"class":734},".sticky",[324,132591,80529],{"class":867},[324,132593,129424],{"class":916},[324,132595,52159],{"class":867},[324,132597,132598],{"class":916},"sticky",[324,132600,129994],{"class":867},[192,132602,132603,132606],{"start":2348},[195,132604,132605],{},"一定要用好注释",[195,132607,132608],{},"浮动的盒子不会有外边距合并的问题",[775,132610,131952],{},{"title":50,"searchDepth":203,"depth":203,"links":132612},[132613,132614],{"id":131989,"depth":203,"text":131990},{"id":132053,"depth":203,"text":132054,"children":132615},[132616,132617,132618,132619,132620,132621,132622],{"id":132057,"depth":338,"text":132058},{"id":132163,"depth":338,"text":132164},{"id":132199,"depth":338,"text":132200},{"id":132220,"depth":338,"text":132221},{"id":132255,"depth":338,"text":132256},{"id":132288,"depth":338,"text":132289},{"id":132363,"depth":338,"text":132364},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch10-css",{"title":131981,"description":791},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例","FzyF0-YC56Akf2OLJPi7lkaiI8deiVEFNwhHCIOG39Y",{"id":132629,"title":132630,"body":132631,"description":791,"extension":792,"meta":134117,"navigation":487,"path":134118,"seo":134119,"stem":134120,"__hash__":134121},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系.md","11. 传统布局与定位体系",{"type":7,"value":132632,"toc":134109},[132633,132636,132640,132644,132655,132659,132676,132720,132753,132756,132773,132776,132779,132823,132827,132831,132834,132837,132841,132844,132855,132918,132959,132962,132977,133031,133039,133042,133053,133107,133133,133136,133149,133203,133235,133289,133312,133366,133369,133372,133379,133433,133454,133508,133511,133514,133599,133607,133664,133687,133691,133694,133712,133716,133735,133789,133827,133831,133834,133837,133859,133863,133871,133874,133879,133890,133893,133897,133911,133955,133958,133962,133965,133970,133996,134001,134078,134081,134085,134088,134091,134094,134097,134100,134103,134106],[10,132634,132630],{"id":132635},"_11-传统布局与定位体系",[14,132637,132639],{"id":132638},"_111-传统网页布局的三种方式","11.1 传统网页布局的三种方式",[35,132641,132643],{"id":132642},"_1111-普通流标准流","11.1.1 普通流（标准流）",[1871,132645,132646,132649,132652],{},[195,132647,132648],{},"所谓的标准流: 就是标签按照规定好默认方式排列",[195,132650,132651],{},"块级元素会独占一行，从上向下顺序排列。常用元素：div、hr、p、h1~h6、ul、ol、dl、form、table",[195,132653,132654],{},"行内元素会按照顺序，从左到右顺序排列，碰到父元素边缘则自动换行。常用元素：span、a、i、em 等",[35,132656,132658],{"id":132657},"_1112-浮动","11.1.2 浮动",[1871,132660,132661,132664,132667,132670,132673],{},[195,132662,132663],{},"float 属性用于创建浮动框，将其移动到一边，直到左边缘或右边缘触及包含块或另一个浮动框的边缘",[195,132665,132666],{},"浮动可以改变元素标签默认的排列方式",[195,132668,132669],{},"浮动最典型的应用：可以让多个块级元素一行内排列显示",[195,132671,132672],{},"网页布局第一准则：多个块级元素纵向排列找标准流，多个块级元素横向排列找浮动",[195,132674,132675],{},"在使用行内块转换时盒子之间是有空隙的",[316,132677,132678],{"className":127064,"code":131530,"language":127066,"meta":50,"style":50},[269,132679,132680,132686,132696,132700,132706,132716],{"__ignoreMap":50},[324,132681,132682,132684],{"class":326,"line":327},[324,132683,131537],{"class":734},[324,132685,16301],{"class":867},[324,132687,132688,132690,132692,132694],{"class":326,"line":203},[324,132689,131544],{"class":916},[324,132691,52159],{"class":867},[324,132693,24463],{"class":916},[324,132695,2025],{"class":867},[324,132697,132698],{"class":326,"line":338},[324,132699,2296],{"class":867},[324,132701,132702,132704],{"class":326,"line":344},[324,132703,131559],{"class":734},[324,132705,16301],{"class":867},[324,132707,132708,132710,132712,132714],{"class":326,"line":484},[324,132709,131544],{"class":916},[324,132711,52159],{"class":867},[324,132713,73244],{"class":916},[324,132715,2025],{"class":867},[324,132717,132718],{"class":326,"line":491},[324,132719,2296],{"class":867},[1003,132721,132722,132730],{},[1006,132723,132724],{},[1009,132725,132726,132728],{},[1012,132727,127528],{"align":24463},[1012,132729,28211],{"align":24463},[1049,132731,132732,132739,132746],{},[1009,132733,132734,132736],{},[1054,132735,55459],{"align":24463},[1054,132737,132738],{"align":24463},"元素不浮动（默认值）",[1009,132740,132741,132743],{},[1054,132742,24463],{"align":24463},[1054,132744,132745],{"align":24463},"元素向左浮动",[1009,132747,132748,132750],{},[1054,132749,73244],{"align":24463},[1054,132751,132752],{"align":24463},"元素向右浮动",[19,132754,132755],{},"浮动重点：",[1871,132757,132758,132761,132764,132767,132770],{},[195,132759,132760],{},"浮动元素会脱离标准流(脱标：浮动的盒子不再保留原先的位置)",[195,132762,132763],{},"浮动的元素会一行内显示并且元素顶部对齐",[195,132765,132766],{},"浮动的元素是互相贴靠在一起的（不会有缝隙），如果父级宽度装不下这些浮动的盒子，多出的盒子会另起一行对齐",[195,132768,132769],{},"浮动的元素会具有行内块元素的特性：①浮动元素的大小根据内容来决定；②浮动的盒子之间没有缝隙(行内元素有了浮动，则不需要转换块级\\行内块元素就可以直接给高度和宽度)",[195,132771,132772],{},"行内块元素如果没有设置宽度，则盒子大小受内容影响，内容多则就宽",[19,132774,132775],{},"设计策略：先用标准流父元素排列上下位置, 之后内部子元素采取浮动排列左右位置. 符合网页布局第一准侧",[19,132777,132778],{},"浮动的盒子只会影响浮动盒子后面的标准流,不会影响前面的标准流",[316,132780,132781],{"className":127064,"code":131530,"language":127066,"meta":50,"style":50},[269,132782,132783,132789,132799,132803,132809,132819],{"__ignoreMap":50},[324,132784,132785,132787],{"class":326,"line":327},[324,132786,131537],{"class":734},[324,132788,16301],{"class":867},[324,132790,132791,132793,132795,132797],{"class":326,"line":203},[324,132792,131544],{"class":916},[324,132794,52159],{"class":867},[324,132796,24463],{"class":916},[324,132798,2025],{"class":867},[324,132800,132801],{"class":326,"line":338},[324,132802,2296],{"class":867},[324,132804,132805,132807],{"class":326,"line":344},[324,132806,131559],{"class":734},[324,132808,16301],{"class":867},[324,132810,132811,132813,132815,132817],{"class":326,"line":484},[324,132812,131544],{"class":916},[324,132814,52159],{"class":867},[324,132816,73244],{"class":916},[324,132818,2025],{"class":867},[324,132820,132821],{"class":326,"line":491},[324,132822,2296],{"class":867},[35,132824,132826],{"id":132825},"_1113-定位","11.1.3 定位",[151,132828,132830],{"id":132829},"_11131-使用场景","11.1.3.1 使用场景",[19,132832,132833],{},"①某个元素可以自由的在一个盒子内移动位置，并且压住其他盒子",[19,132835,132836],{},"②当我们滚动窗口的时候，盒子是固定屏幕某个位置的",[151,132838,132840],{"id":132839},"_11132-定位组成","11.1.3.2 定位组成",[19,132842,132843],{},"定位 = 定位模式 + 边偏移",[192,132845,132846],{},[195,132847,132848,132851,132852],{},[116,132849,132850],{},"定位模式："," 用于指定一个元素在文档中的定位方式通过 position属性定义元素的 ",[116,132853,132854],{},"定位模式",[316,132856,132858],{"className":127064,"code":132857,"language":127066,"meta":50,"style":50},".box {\n  position: relative;  \u002F* 定位模式 *\u002F\n  top: 10px;           \u002F* 边偏移：上 *\u002F\n  left: 20px;          \u002F* 边偏移：左 *\u002F\n}\n",[269,132859,132860,132866,132880,132897,132914],{"__ignoreMap":50},[324,132861,132862,132864],{"class":326,"line":327},[324,132863,130912],{"class":734},[324,132865,16301],{"class":867},[324,132867,132868,132871,132873,132875,132877],{"class":326,"line":203},[324,132869,132870],{"class":916},"  position",[324,132872,52159],{"class":867},[324,132874,55486],{"class":916},[324,132876,130927],{"class":867},[324,132878,132879],{"class":772},"\u002F* 定位模式 *\u002F\n",[324,132881,132882,132885,132887,132889,132891,132894],{"class":326,"line":338},[324,132883,132884],{"class":916},"  top",[324,132886,52159],{"class":867},[324,132888,1310],{"class":916},[324,132890,52214],{"class":863},[324,132892,132893],{"class":867},";           ",[324,132895,132896],{"class":772},"\u002F* 边偏移：上 *\u002F\n",[324,132898,132899,132902,132904,132906,132908,132911],{"class":326,"line":344},[324,132900,132901],{"class":916},"  left",[324,132903,52159],{"class":867},[324,132905,1564],{"class":916},[324,132907,52214],{"class":863},[324,132909,132910],{"class":867},";          ",[324,132912,132913],{"class":772},"\u002F* 边偏移：左 *\u002F\n",[324,132915,132916],{"class":326,"line":484},[324,132917,2296],{"class":867},[1003,132919,132920,132929],{},[1006,132921,132922],{},[1009,132923,132924,132926],{},[1012,132925,1017],{"align":24463},[1012,132927,132928],{"align":24463},"语义",[1049,132930,132931,132938,132945,132952],{},[1009,132932,132933,132935],{},[1054,132934,132517],{"align":24463},[1054,132936,132937],{"align":24463},"静态定位",[1009,132939,132940,132942],{},[1054,132941,55486],{"align":24463},[1054,132943,132944],{"align":24463},"相对定位",[1009,132946,132947,132949],{},[1054,132948,55553],{"align":24463},[1054,132950,132951],{"align":24463},"绝对定位",[1009,132953,132954,132956],{},[1054,132955,86955],{"align":24463},[1054,132957,132958],{"align":24463},"固定定位",[19,132960,132961],{},"（1）静态定位：",[1871,132963,132964,132975],{},[195,132965,132966,132967,132970,132971,132974],{},"静态定位是元素的 ",[116,132968,132969],{},"默认定位方式"," ， ",[116,132972,132973],{},"无定位的意思"," 。它相当于 border 里面的none，静态定位static，不要定位的时候用",[195,132976,5910],{},[316,132978,132979],{"className":127064,"code":132857,"language":127066,"meta":50,"style":50},[269,132980,132981,132987,132999,133013,133027],{"__ignoreMap":50},[324,132982,132983,132985],{"class":326,"line":327},[324,132984,130912],{"class":734},[324,132986,16301],{"class":867},[324,132988,132989,132991,132993,132995,132997],{"class":326,"line":203},[324,132990,132870],{"class":916},[324,132992,52159],{"class":867},[324,132994,55486],{"class":916},[324,132996,130927],{"class":867},[324,132998,132879],{"class":772},[324,133000,133001,133003,133005,133007,133009,133011],{"class":326,"line":338},[324,133002,132884],{"class":916},[324,133004,52159],{"class":867},[324,133006,1310],{"class":916},[324,133008,52214],{"class":863},[324,133010,132893],{"class":867},[324,133012,132896],{"class":772},[324,133014,133015,133017,133019,133021,133023,133025],{"class":326,"line":344},[324,133016,132901],{"class":916},[324,133018,52159],{"class":867},[324,133020,1564],{"class":916},[324,133022,52214],{"class":863},[324,133024,132910],{"class":867},[324,133026,132913],{"class":772},[324,133028,133029],{"class":326,"line":484},[324,133030,2296],{"class":867},[1871,133032,133033,133036],{},[195,133034,133035],{},"静态定位 按照标准流特性摆放位置，它没有边偏移,可以理解为静态定位就是标准流",[195,133037,133038],{},"静态定位在布局时我们几乎不用的",[19,133040,133041],{},"（2）相对定位",[1871,133043,133044,133051],{},[195,133045,133046,133047,133050],{},"相对定位是元素在移动位置的时候，是相对于它自己 ",[116,133048,133049],{},"原来的位置"," 来说的（自恋型）",[195,133052,5910],{},[316,133054,133055],{"className":127064,"code":132857,"language":127066,"meta":50,"style":50},[269,133056,133057,133063,133075,133089,133103],{"__ignoreMap":50},[324,133058,133059,133061],{"class":326,"line":327},[324,133060,130912],{"class":734},[324,133062,16301],{"class":867},[324,133064,133065,133067,133069,133071,133073],{"class":326,"line":203},[324,133066,132870],{"class":916},[324,133068,52159],{"class":867},[324,133070,55486],{"class":916},[324,133072,130927],{"class":867},[324,133074,132879],{"class":772},[324,133076,133077,133079,133081,133083,133085,133087],{"class":326,"line":338},[324,133078,132884],{"class":916},[324,133080,52159],{"class":867},[324,133082,1310],{"class":916},[324,133084,52214],{"class":863},[324,133086,132893],{"class":867},[324,133088,132896],{"class":772},[324,133090,133091,133093,133095,133097,133099,133101],{"class":326,"line":344},[324,133092,132901],{"class":916},[324,133094,52159],{"class":867},[324,133096,1564],{"class":916},[324,133098,52214],{"class":863},[324,133100,132910],{"class":867},[324,133102,132913],{"class":772},[324,133104,133105],{"class":326,"line":484},[324,133106,2296],{"class":867},[1871,133108,133109],{},[195,133110,133111,133112,133114,133115,133117,133118,133121,133122,133125,133126,133128,133129,133132],{},"相对定位的特点：",[54438,133113],{},"  ①它是相对于自己原来的位置来移动的（移动位置的时候参照点是自己原来的位置）",[54438,133116],{},"  ② ",[116,133119,133120],{},"原来"," 在标准流的 ",[116,133123,133124],{},"位置"," 继续占有，后面的盒子仍然以标准流的方式对待它，原来的位置和现在的位置都不影响后面盒子的位置",[54438,133127],{},"  ③因此， ",[116,133130,133131],{},"相对定位并没有脱标"," 。它最典型的应用是给绝对定位当爹的,相对定位是用来限制绝对定位的",[19,133134,133135],{},"（3）绝对定位",[1871,133137,133138,133147],{},[195,133139,133140,133142,133143,133146],{},[116,133141,132951],{}," 是元素在移动位置的时候，是相对于它 ",[116,133144,133145],{},"祖先元素"," 来说的（拼爹型）",[195,133148,5910],{},[316,133150,133151],{"className":127064,"code":132857,"language":127066,"meta":50,"style":50},[269,133152,133153,133159,133171,133185,133199],{"__ignoreMap":50},[324,133154,133155,133157],{"class":326,"line":327},[324,133156,130912],{"class":734},[324,133158,16301],{"class":867},[324,133160,133161,133163,133165,133167,133169],{"class":326,"line":203},[324,133162,132870],{"class":916},[324,133164,52159],{"class":867},[324,133166,55486],{"class":916},[324,133168,130927],{"class":867},[324,133170,132879],{"class":772},[324,133172,133173,133175,133177,133179,133181,133183],{"class":326,"line":338},[324,133174,132884],{"class":916},[324,133176,52159],{"class":867},[324,133178,1310],{"class":916},[324,133180,52214],{"class":863},[324,133182,132893],{"class":867},[324,133184,132896],{"class":772},[324,133186,133187,133189,133191,133193,133195,133197],{"class":326,"line":344},[324,133188,132901],{"class":916},[324,133190,52159],{"class":867},[324,133192,1564],{"class":916},[324,133194,52214],{"class":863},[324,133196,132910],{"class":867},[324,133198,132913],{"class":772},[324,133200,133201],{"class":326,"line":484},[324,133202,2296],{"class":867},[1871,133204,133205,133220,133229,133232],{},[195,133206,133207,133208,133210,133211,133213,133214,133216,133217,133219],{},"绝对定位的特点：",[54438,133209],{},"  ①如果没有祖先元素或者祖先元素没有定位，则以浏览器为准定位",[54438,133212],{},"  ②如果祖先元素有定位（相对、绝对、固定定位），则以最近一级的有定位祖先元素为参考点移动位置",[54438,133215],{},"  ③绝对定位不再占有原先的位置。所以绝对定位是脱离标准流的。可以理解为绝对定位比浮动飘的更高（脱标）",[54438,133218],{},"  (4)固定定位",[195,133221,133222,133224,133225,133228],{},[116,133223,132958],{}," 是元素 ",[116,133226,133227],{},"固定于浏览器可视区的位置"," 。（认死理型）",[195,133230,133231],{},"主要使用场景：可以在浏览器页面滚动时元素的位置不会改变",[195,133233,133234],{},"语法:",[316,133236,133237],{"className":127064,"code":132857,"language":127066,"meta":50,"style":50},[269,133238,133239,133245,133257,133271,133285],{"__ignoreMap":50},[324,133240,133241,133243],{"class":326,"line":327},[324,133242,130912],{"class":734},[324,133244,16301],{"class":867},[324,133246,133247,133249,133251,133253,133255],{"class":326,"line":203},[324,133248,132870],{"class":916},[324,133250,52159],{"class":867},[324,133252,55486],{"class":916},[324,133254,130927],{"class":867},[324,133256,132879],{"class":772},[324,133258,133259,133261,133263,133265,133267,133269],{"class":326,"line":338},[324,133260,132884],{"class":916},[324,133262,52159],{"class":867},[324,133264,1310],{"class":916},[324,133266,52214],{"class":863},[324,133268,132893],{"class":867},[324,133270,132896],{"class":772},[324,133272,133273,133275,133277,133279,133281,133283],{"class":326,"line":344},[324,133274,132901],{"class":916},[324,133276,52159],{"class":867},[324,133278,1564],{"class":916},[324,133280,52214],{"class":863},[324,133282,132910],{"class":867},[324,133284,132913],{"class":772},[324,133286,133287],{"class":326,"line":484},[324,133288,2296],{"class":867},[1871,133290,133291,133300],{},[195,133292,133293,133294,133296,133297,133299],{},"特点:",[54438,133295],{},"  ①.以浏览器的可视窗口为参照点移动元素,跟父元素没有任何关系,不随滚动条滚动",[54438,133298],{},"  ②固定定位不再占有原先的位置,完全脱标",[195,133301,133302,133303,133305,133306,133308,133309,133311],{},"固定在版心位置的方法:",[54438,133304],{},"  ①让固定定位的盒子 left: 50%. 走到浏览器可视区（也可以看做版心） 的一半位置",[54438,133307],{},"  ②让固定定位的盒子 margin-left: 版心宽度的一半距离。 多走版心宽度的一半位置",[54438,133310],{},"  实例：",[316,133313,133314],{"className":127064,"code":132857,"language":127066,"meta":50,"style":50},[269,133315,133316,133322,133334,133348,133362],{"__ignoreMap":50},[324,133317,133318,133320],{"class":326,"line":327},[324,133319,130912],{"class":734},[324,133321,16301],{"class":867},[324,133323,133324,133326,133328,133330,133332],{"class":326,"line":203},[324,133325,132870],{"class":916},[324,133327,52159],{"class":867},[324,133329,55486],{"class":916},[324,133331,130927],{"class":867},[324,133333,132879],{"class":772},[324,133335,133336,133338,133340,133342,133344,133346],{"class":326,"line":338},[324,133337,132884],{"class":916},[324,133339,52159],{"class":867},[324,133341,1310],{"class":916},[324,133343,52214],{"class":863},[324,133345,132893],{"class":867},[324,133347,132896],{"class":772},[324,133349,133350,133352,133354,133356,133358,133360],{"class":326,"line":344},[324,133351,132901],{"class":916},[324,133353,52159],{"class":867},[324,133355,1564],{"class":916},[324,133357,52214],{"class":863},[324,133359,132910],{"class":867},[324,133361,132913],{"class":772},[324,133363,133364],{"class":326,"line":484},[324,133365,2296],{"class":867},[48,133367],{"style":126920,"src":133368},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-056.png",[19,133370,133371],{},"(5)粘性定位",[1871,133373,133374,133377],{},[195,133375,133376],{},"粘性定位可以被认为是相对定位和固定定位的混合",[195,133378,5910],{},[316,133380,133381],{"className":127064,"code":132857,"language":127066,"meta":50,"style":50},[269,133382,133383,133389,133401,133415,133429],{"__ignoreMap":50},[324,133384,133385,133387],{"class":326,"line":327},[324,133386,130912],{"class":734},[324,133388,16301],{"class":867},[324,133390,133391,133393,133395,133397,133399],{"class":326,"line":203},[324,133392,132870],{"class":916},[324,133394,52159],{"class":867},[324,133396,55486],{"class":916},[324,133398,130927],{"class":867},[324,133400,132879],{"class":772},[324,133402,133403,133405,133407,133409,133411,133413],{"class":326,"line":338},[324,133404,132884],{"class":916},[324,133406,52159],{"class":867},[324,133408,1310],{"class":916},[324,133410,52214],{"class":863},[324,133412,132893],{"class":867},[324,133414,132896],{"class":772},[324,133416,133417,133419,133421,133423,133425,133427],{"class":326,"line":344},[324,133418,132901],{"class":916},[324,133420,52159],{"class":867},[324,133422,1564],{"class":916},[324,133424,52214],{"class":863},[324,133426,132910],{"class":867},[324,133428,132913],{"class":772},[324,133430,133431],{"class":326,"line":484},[324,133432,2296],{"class":867},[1871,133434,133435],{},[195,133436,133437,133438,133440,133441,133443,133444,133446,133447,133450,133451,133453],{},"粘性定位的特点：",[54438,133439],{},"  ①以浏览器的可视窗口为参照点移动元素（固定定位特点）",[54438,133442],{},"  ②粘性定位占有原先的位置（相对定位特点）",[54438,133445],{},"  ③必须添加 top 、left、right、bottom ",[116,133448,133449],{},"其中一个"," 才有效",[54438,133452],{},"  ④跟页面滚动搭配使用。 兼容性较差，IE 不支持",[316,133455,133456],{"className":127064,"code":132857,"language":127066,"meta":50,"style":50},[269,133457,133458,133464,133476,133490,133504],{"__ignoreMap":50},[324,133459,133460,133462],{"class":326,"line":327},[324,133461,130912],{"class":734},[324,133463,16301],{"class":867},[324,133465,133466,133468,133470,133472,133474],{"class":326,"line":203},[324,133467,132870],{"class":916},[324,133469,52159],{"class":867},[324,133471,55486],{"class":916},[324,133473,130927],{"class":867},[324,133475,132879],{"class":772},[324,133477,133478,133480,133482,133484,133486,133488],{"class":326,"line":338},[324,133479,132884],{"class":916},[324,133481,52159],{"class":867},[324,133483,1310],{"class":916},[324,133485,52214],{"class":863},[324,133487,132893],{"class":867},[324,133489,132896],{"class":772},[324,133491,133492,133494,133496,133498,133500,133502],{"class":326,"line":344},[324,133493,132901],{"class":916},[324,133495,52159],{"class":867},[324,133497,1564],{"class":916},[324,133499,52214],{"class":863},[324,133501,132910],{"class":867},[324,133503,132913],{"class":772},[324,133505,133506],{"class":326,"line":484},[324,133507,2296],{"class":867},[48,133509],{"style":126920,"src":133510},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-057.png",[19,133512,133513],{},"(6)总结",[1003,133515,133516,133531],{},[1006,133517,133518],{},[1009,133519,133520,133522,133525,133528],{},[1012,133521,132854],{"align":24463},[1012,133523,133524],{"align":24463},"是否脱标",[1012,133526,133527],{"align":24463},"移动位置",[1012,133529,133530],{"align":24463},"是否常用",[1049,133532,133533,133546,133560,133574,133587],{},[1009,133534,133535,133538,133540,133543],{},[1054,133536,133537],{"align":24463},"Static 静态定位",[1054,133539,105399],{"align":24463},[1054,133541,133542],{"align":24463},"不能使用边偏移",[1054,133544,133545],{"align":24463},"很少",[1009,133547,133548,133551,133554,133557],{},[1054,133549,133550],{"align":24463},"Relative 相对定位",[1054,133552,133553],{"align":24463},"否(占有位置)",[1054,133555,133556],{"align":24463},"相对于自身位置移动",[1054,133558,133559],{"align":24463},"基本单独使用",[1009,133561,133562,133565,133568,133571],{},[1054,133563,133564],{"align":24463},"Absolute 绝对定位",[1054,133566,133567],{"align":24463},"是(不占有位置)",[1054,133569,133570],{"align":24463},"带有定位的父级",[1054,133572,133573],{"align":24463},"要和定位父级元素搭配使用",[1009,133575,133576,133579,133581,133584],{},[1054,133577,133578],{"align":24463},"Fixed 固定定位",[1054,133580,133567],{"align":24463},[1054,133582,133583],{"align":24463},"浏览器可视区",[1054,133585,133586],{"align":24463},"单独使用,不需要父级",[1009,133588,133589,133592,133594,133596],{},[1054,133590,133591],{"align":24463},"Sticky 粘性定位",[1054,133593,133553],{"align":24463},[1054,133595,133583],{"align":24463},[1054,133597,133598],{"align":24463},"当前阶段少",[192,133600,133601],{"start":203},[195,133602,133603,133606],{},[116,133604,133605],{},"边偏移"," 则决定了该元素的最终位置",[1003,133608,133609,133620],{},[1006,133610,133611],{},[1009,133612,133613,133616,133618],{},[1012,133614,133615],{"align":24463},"边偏移属性",[1012,133617,28214],{"align":24463},[1012,133619,28211],{"align":24463},[1049,133621,133622,133633,133644,133654],{},[1009,133623,133624,133627,133630],{},[1054,133625,133626],{"align":24463},"top",[1054,133628,133629],{"align":24463},"top: 80px;",[1054,133631,133632],{"align":24463},"顶端偏移量，定义元素相对于父元素上边线的距离",[1009,133634,133635,133638,133641],{},[1054,133636,133637],{"align":24463},"bottom",[1054,133639,133640],{"align":24463},"bottom: 80px ;",[1054,133642,133643],{"align":24463},"底部偏移量，定义元素相对于其父元素下边线的距离",[1009,133645,133646,133648,133651],{},[1054,133647,24463],{"align":24463},[1054,133649,133650],{"align":24463},"left: 80px ;",[1054,133652,133653],{"align":24463},"左侧偏移量，定义元素相对于其父元素左边线的距离",[1009,133655,133656,133658,133661],{},[1054,133657,73244],{"align":24463},[1054,133659,133660],{"align":24463},"right: 80px ;",[1054,133662,133663],{"align":24463},"右侧偏移量，定义元素相对于其父元素右边线的距离",[1871,133665,133666],{},[195,133667,9754,133668,133670,133671,133673,133674,133676,133677,133680,133681,133683,133684,133686],{},[54438,133669],{},"  ① ",[116,133672,133605],{}," 需要和 ",[116,133675,132854],{}," 联合使用， ",[116,133678,133679],{},"单独使用无效"," ；",[54438,133682],{},"  ②top和bottom不要同时使用",[54438,133685],{},"  ③left和right不要同时使用",[151,133688,133690],{"id":133689},"_11133-定位口诀-子绝父相","11.1.3.3 定位口诀-子绝父相",[19,133692,133693],{},"子级是绝对定位的话，父级要用相对定位",[1871,133695,133696,133699,133702,133705],{},[195,133697,133698],{},"子级绝对定位，不会占有位置，可以放到父盒子里面的任何一个地方，不会影响其他的兄弟盒子",[195,133700,133701],{},"父盒子需要加定位限制子盒子在父盒子内显示",[195,133703,133704],{},"父盒子布局时，需要占有位置，因此父亲只能是相对定位",[195,133706,133707,133708,133711],{},"子绝父相不是永远不变的，如果父元素不需要占有位置， ",[116,133709,133710],{},"子绝父绝"," 也会遇到",[151,133713,133715],{"id":133714},"_11134-堆叠顺序z-index","11.1.3.4 堆叠顺序(z-index)",[1871,133717,133718,133733],{},[195,133719,133720,133721,133724,133725,133728,133729,133732],{},"在使用 ",[116,133722,133723],{},"定位"," 布局时，可能会 ",[116,133726,133727],{},"出现盒子重叠的情况"," 。此时，可以使用 ",[116,133730,133731],{},"z-index"," 来控制盒子的前后次序 (z轴)",[195,133734,5910],{},[316,133736,133737],{"className":127064,"code":132857,"language":127066,"meta":50,"style":50},[269,133738,133739,133745,133757,133771,133785],{"__ignoreMap":50},[324,133740,133741,133743],{"class":326,"line":327},[324,133742,130912],{"class":734},[324,133744,16301],{"class":867},[324,133746,133747,133749,133751,133753,133755],{"class":326,"line":203},[324,133748,132870],{"class":916},[324,133750,52159],{"class":867},[324,133752,55486],{"class":916},[324,133754,130927],{"class":867},[324,133756,132879],{"class":772},[324,133758,133759,133761,133763,133765,133767,133769],{"class":326,"line":338},[324,133760,132884],{"class":916},[324,133762,52159],{"class":867},[324,133764,1310],{"class":916},[324,133766,52214],{"class":863},[324,133768,132893],{"class":867},[324,133770,132896],{"class":772},[324,133772,133773,133775,133777,133779,133781,133783],{"class":326,"line":344},[324,133774,132901],{"class":916},[324,133776,52159],{"class":867},[324,133778,1564],{"class":916},[324,133780,52214],{"class":863},[324,133782,132910],{"class":867},[324,133784,132913],{"class":772},[324,133786,133787],{"class":326,"line":484},[324,133788,2296],{"class":867},[1871,133790,133791],{},[195,133792,133793,133794,133670,133796,133798,133799,128227,133802,83261,133805,133807,133808,133810,133811,133814,133815,133680,133818,133820,133821,133824,133826],{},"z-index的特性",[54438,133795],{},[116,133797,127528],{}," ： ",[116,133800,133801],{},"正整数",[116,133803,133804],{},"负整数",[116,133806,1056],{}," ，默认值是 0，数值越大，盒子越靠上；",[54438,133809],{},"  ②如果 ",[116,133812,133813],{},"属性值相同"," ，则按照书写顺序， ",[116,133816,133817],{},"后来居上",[54438,133819],{},"  ③数字后面 ",[116,133822,133823],{},"不能加单位",[54438,133825],{},"  ④z-index 只能应用于相对定位,绝对定位和固定定位的元素,其他标准流,浮动和静态定位无效(只有定位的盒子才有z-index属性)",[151,133828,133830],{"id":133829},"_11135-绝对定位盒子居中","11.1.3.5 绝对定位盒子居中",[19,133832,133833],{},"加了绝对定位\u002F固定定位的盒子不能通过设置margin:auto;设置水平居中",[19,133835,133836],{},"方法:",[1871,133838,133839,133849],{},[195,133840,133841,133842,133845,133846],{},"left: 50%; 让 ",[116,133843,133844],{},"盒子的左侧"," 移动到 ",[116,133847,133848],{},"父级元素的水平中心位置",[195,133850,133851,133852,133855,133856],{},"margin-left: -100px; 让盒子 ",[116,133853,133854],{},"向左"," 移动 ",[116,133857,133858],{},"自身宽度的一半",[151,133860,133862],{"id":133861},"_11136-定位特殊特性","11.1.3.6 定位特殊特性",[192,133864,133865,133868],{},[195,133866,133867],{},"行内元素添加绝对或者固定定位，可以直接设置高度和宽度",[195,133869,133870],{},"块级元素添加绝对或者固定定位，如果不给宽度或者高度，默认大小是内容的大小",[19,133872,133873],{},"也就是说绝对定位和固定定位和浮动类似",[192,133875,133876],{"start":338},[195,133877,133878],{},"display 是显示模式， 可以改变显示模式有以下方式:",[1871,133880,133881,133884,133887],{},[195,133882,133883],{},"可以用inline-block 转换为行内块",[195,133885,133886],{},"可以用浮动 float 默认转换为行内块（类似，并不完全一样，因为浮动是脱标的）",[195,133888,133889],{},"绝对定位和固定定位也和浮动类似， 默认转换为行内块",[19,133891,133892],{},"一个行内的盒子,如果加了浮动,固定定位和绝对定位,不用转换,就可以给这个盒子直接设置宽度和高度等",[151,133894,133896],{"id":133895},"_11137-绝对定位固定定位会完全压住盒子","11.1.3.7 绝对定位(固定定位)会完全压住盒子",[192,133898,133899,133902,133905,133908],{},[195,133900,133901],{},"浮动元素不同，只会压住它下面标准流的盒子，但是不会压住下面标准流盒子里面的文字",[195,133903,133904],{},"绝对定位（固定定位）会压住下面标准流所有的内容",[195,133906,133907],{},"浮动之所以不会压住文字，因为浮动产生的目的最初是为了做文字环绕效果的。 文字会围绕浮动元素",[195,133909,133910],{},"以前浮动就是为了文字环绕效果，现在已经经常用于布局了",[316,133912,133913],{"className":127064,"code":131530,"language":127066,"meta":50,"style":50},[269,133914,133915,133921,133931,133935,133941,133951],{"__ignoreMap":50},[324,133916,133917,133919],{"class":326,"line":327},[324,133918,131537],{"class":734},[324,133920,16301],{"class":867},[324,133922,133923,133925,133927,133929],{"class":326,"line":203},[324,133924,131544],{"class":916},[324,133926,52159],{"class":867},[324,133928,24463],{"class":916},[324,133930,2025],{"class":867},[324,133932,133933],{"class":326,"line":338},[324,133934,2296],{"class":867},[324,133936,133937,133939],{"class":326,"line":344},[324,133938,131559],{"class":734},[324,133940,16301],{"class":867},[324,133942,133943,133945,133947,133949],{"class":326,"line":484},[324,133944,131544],{"class":916},[324,133946,52159],{"class":867},[324,133948,73244],{"class":916},[324,133950,2025],{"class":867},[324,133952,133953],{"class":326,"line":491},[324,133954,2296],{"class":867},[48,133956],{"style":126920,"src":133957},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-058.png",[151,133959,133961],{"id":133960},"_11138-轮播图","11.1.3.8 轮播图",[48,133963],{"style":126920,"src":133964},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-059.png",[192,133966,133967],{},[195,133968,133969],{},"制作顺序:",[1871,133971,133972,133975,133978,133987],{},[195,133973,133974],{},"大盒子我们类名为： tb-promo 淘宝广告",[195,133976,133977],{},"里面先放一张图片",[195,133979,133980,133981,133983,133984,133986],{},"左右两个按钮 用链接就好了。 左箭头 prev 右箭头 next",[54438,133982],{},"  ①左按钮样式（border-radius：左上，右上，右下，左下）",[54438,133985],{},"  ②右按钮定位，提取左右按钮共同的样式代码（并集选择器）",[195,133988,133989,133990,133992,133993,133995],{},"底侧小圆点ul 继续做。 类名为 promo-nav",[54438,133991],{},"  ①中间长方形椭圆 ul的定位（水平居中，离底部15px）",[54438,133994],{},"  ②长方形需要五个小圆点，ul无序列表，li浮动，椭圆中小圆点的样式",[192,133997,133998],{"start":203},[195,133999,134000],{},"代码模块",[316,134002,134004],{"className":127064,"code":134003,"language":127066,"meta":50,"style":50},"\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",[269,134005,134006,134011,134018,134028,134038,134048,134052,134057,134064,134074],{"__ignoreMap":50},[324,134007,134008],{"class":326,"line":327},[324,134009,134010],{"class":772},"\u002F* 绝对定位：相对于最近的有定位的祖先元素移动 *\u002F\n",[324,134012,134013,134016],{"class":326,"line":203},[324,134014,134015],{"class":734},".son",[324,134017,16301],{"class":867},[324,134019,134020,134022,134024,134026],{"class":326,"line":338},[324,134021,132870],{"class":916},[324,134023,52159],{"class":867},[324,134025,55553],{"class":916},[324,134027,2025],{"class":867},[324,134029,134030,134032,134034,134036],{"class":326,"line":344},[324,134031,132884],{"class":916},[324,134033,52159],{"class":867},[324,134035,1056],{"class":916},[324,134037,2025],{"class":867},[324,134039,134040,134042,134044,134046],{"class":326,"line":484},[324,134041,132901],{"class":916},[324,134043,52159],{"class":867},[324,134045,1056],{"class":916},[324,134047,2025],{"class":867},[324,134049,134050],{"class":326,"line":491},[324,134051,2296],{"class":867},[324,134053,134054],{"class":326,"line":496},[324,134055,134056],{"class":772},"\u002F* 父元素需要加 relative（子绝父相） *\u002F\n",[324,134058,134059,134062],{"class":326,"line":502},[324,134060,134061],{"class":734},".father",[324,134063,16301],{"class":867},[324,134065,134066,134068,134070,134072],{"class":326,"line":508},[324,134067,132870],{"class":916},[324,134069,52159],{"class":867},[324,134071,55486],{"class":916},[324,134073,2025],{"class":867},[324,134075,134076],{"class":326,"line":514},[324,134077,2296],{"class":867},[19,134079,134080],{},"总结收获:主要学习的地方是相同属性使用并集选择器",[35,134082,134084],{"id":134083},"_1114-定位数值的移动","11.1.4 定位数值的移动",[48,134086],{"style":126920,"src":134087},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-060.png",[19,134089,134090],{},"✨ 黄金口诀：",[19,134092,134093],{},"\"TOP正下负上，LEFT正右负左\"",[19,134095,134096],{},"\"RIGHT正左负右，BOTTOM正上负下",[19,134098,134099],{},"可以理解为正数就是相反方向移动，负值相同方向移动",[19,134101,134102],{},"✨ 简单记：",[19,134104,134105],{},"margin的四个方向，正值都是增加该方向的外边距（即向外推开），负值都是减少外边距（即向内拉近）",[775,134107,134108],{},"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":50,"searchDepth":203,"depth":203,"links":134110},[134111],{"id":132638,"depth":203,"text":132639,"children":134112},[134113,134114,134115,134116],{"id":132642,"depth":338,"text":132643},{"id":132657,"depth":338,"text":132658},{"id":132825,"depth":338,"text":132826},{"id":134083,"depth":338,"text":134084},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch11",{"title":132630,"description":791},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系","SZd3SJiZURVo5OmRpYbIFmG1fddK7JxCa-sd5nbDotk",{"id":134123,"title":134124,"body":134125,"description":791,"extension":792,"meta":135548,"navigation":487,"path":135549,"seo":135550,"stem":135551,"__hash__":135552},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源.md","12. 显示隐藏与图形资源",{"type":7,"value":134126,"toc":135527},[134127,134130,134134,134142,134146,134151,134159,134171,134175,134180,134188,134199,134203,134208,134249,134257,134261,134264,134267,134270,134364,134367,134461,134464,134558,134561,134564,134599,134602,134605,134635,134638,134641,134644,134647,134650,134653,134656,134726,134729,134733,134737,134778,134782,134788,134791,134794,134798,134801,134804,134807,134888,134891,134894,134898,134902,134905,134908,134911,134914,134917,134923,134932,134936,134955,134959,134969,134972,134975,134978,134981,134984,134987,134990,134993,135002,135006,135015,135018,135023,135076,135081,135247,135250,135253,135258,135261,135264,135267,135270,135275,135423,135426,135429,135434,135437,135442,135476,135479,135482,135486,135489,135496,135499,135502,135505,135508,135511,135514,135517,135521,135524],[10,134128,134124],{"id":134129},"_12-显示隐藏与图形资源",[14,134131,134133],{"id":134132},"_121-元素的显示和隐藏","12.1 元素的显示和隐藏",[1871,134135,134136,134139],{},[195,134137,134138],{},"目的:让一个元素在页面中消失或者显示出来",[195,134140,134141],{},"场景:类似网站广告，当我们点击关闭就不见了，但是我们重新刷新页面，会重新出现！",[35,134143,134145],{"id":134144},"_1211-display-显示","12.1.1 display 显示",[192,134147,134148],{},[195,134149,134150],{},"display 设置或检索对象是否及如何显示",[1871,134152,134153,134156],{},[195,134154,134155],{},"display: none;隐藏对象",[195,134157,134158],{},"display: block; 除了转换为块级元素之外，同时还有显示元素的意思",[192,134160,134161,134168],{"start":203},[195,134162,134163,134164,134167],{},"特点： display 隐藏元素后， ",[116,134165,134166],{},"不再占"," 有原来的位置",[195,134169,134170],{},"在js中使用非常的广泛",[35,134172,134174],{"id":134173},"_1212-visibility可见性","12.1.2 visibility可见性",[192,134176,134177],{},[195,134178,134179],{},"visibility 属性用于指定一个元素应可见还是隐藏",[1871,134181,134182,134185],{},[195,134183,134184],{},"visibility： visible；元素可见",[195,134186,134187],{},"visibility：hidden；元素隐藏",[192,134189,134190,134193,134196],{"start":203},[195,134191,134192],{},"如果隐藏元素想要原来位置， 就用 visibility：hidden；",[195,134194,134195],{},"如果隐藏元素不想要原来位置， 就用 display：none； (用处更多）",[195,134197,134198],{},"隐藏后继续占有原有位置",[35,134200,134202],{"id":134201},"_1213-overflow溢出","12.1.3 overflow溢出",[1871,134204,134205],{},[195,134206,134207],{},"overflow 属性指定了如果内容溢出一个元素的框（超过其指定高度及宽度） 时，会发生什么",[1003,134209,134210,134218],{},[1006,134211,134212],{},[1009,134213,134214,134216],{},[1012,134215,127528],{"align":24463},[1012,134217,28211],{"align":24463},[1049,134219,134220,134228,134235,134242],{},[1009,134221,134222,134225],{},[1054,134223,134224],{"align":24463},"visible",[1054,134226,134227],{"align":24463},"不剪切内容也不添加滚动条，默认的，溢出的也显示出来，写不写overflow:hidden；是都显示溢出的文字的",[1009,134229,134230,134232],{},[1054,134231,62436],{"align":24463},[1054,134233,134234],{"align":24463},"不显示超过对象尺寸的内容，超出的部分隐藏掉",[1009,134236,134237,134239],{},[1054,134238,129484],{"align":24463},[1054,134240,134241],{"align":24463},"不管超出内容否，总是显示滚动条",[1009,134243,134244,134246],{},[1054,134245,73385],{"align":24463},[1054,134247,134248],{"align":24463},"超出自动显示滚动条，不超出不显示滚动条",[1871,134250,134251,134254],{},[195,134252,134253],{},"一般情况下，我们都不想让溢出的内容显示出来，因为溢出的部分会影响布局",[195,134255,134256],{},"但是如果有定位的盒子， 请慎用overflow:hidden； 因为它会隐藏多余的部分，如果对父盒子使用overflow:hidden;的话，那子盒子使用绝对定位时如果多出去一块，则会造成子盒子一部分不显示（就是有时候可能小盒子有一部分是在大盒子外边的，使用overflow:hidden后超出大盒子的就不再显示，会导致小盒子显示不全，所以这时候就不能加overflow:hidden）",[35,134258,134260],{"id":134259},"_1214-案例收获","12.1.4 案例收获",[48,134262],{"style":126920,"src":134263},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-061.png",[19,134265,134266],{},"问题：没做出来动态效果，使用hover没实现",[19,134268,134269],{},"收获：在做这类效果的时候，不要再盒子里再放盒子了，可以直接使用背景background来做中间的播放按钮，把它放在阴影盒子中就欧克，其次在使用hover时，做成滚动到大盒子时，阴影盒子显示",[316,134271,134272],{"className":127064,"code":132496,"language":127066,"meta":50,"style":50},[269,134273,134274,134278,134292,134296,134310,134314,134328,134332,134346,134350],{"__ignoreMap":50},[324,134275,134276],{"class":326,"line":327},[324,134277,132503],{"class":772},[324,134279,134280,134282,134284,134286,134288,134290],{"class":326,"line":203},[324,134281,132508],{"class":734},[324,134283,80529],{"class":867},[324,134285,129424],{"class":916},[324,134287,52159],{"class":867},[324,134289,132517],{"class":916},[324,134291,129994],{"class":867},[324,134293,134294],{"class":326,"line":338},[324,134295,132524],{"class":772},[324,134297,134298,134300,134302,134304,134306,134308],{"class":326,"line":344},[324,134299,132529],{"class":734},[324,134301,80529],{"class":867},[324,134303,129424],{"class":916},[324,134305,52159],{"class":867},[324,134307,55486],{"class":916},[324,134309,129994],{"class":867},[324,134311,134312],{"class":326,"line":484},[324,134313,132544],{"class":772},[324,134315,134316,134318,134320,134322,134324,134326],{"class":326,"line":491},[324,134317,132549],{"class":734},[324,134319,80529],{"class":867},[324,134321,129424],{"class":916},[324,134323,52159],{"class":867},[324,134325,55553],{"class":916},[324,134327,129994],{"class":867},[324,134329,134330],{"class":326,"line":496},[324,134331,132564],{"class":772},[324,134333,134334,134336,134338,134340,134342,134344],{"class":326,"line":502},[324,134335,132569],{"class":734},[324,134337,80529],{"class":867},[324,134339,129424],{"class":916},[324,134341,52159],{"class":867},[324,134343,86955],{"class":916},[324,134345,129994],{"class":867},[324,134347,134348],{"class":326,"line":508},[324,134349,132584],{"class":772},[324,134351,134352,134354,134356,134358,134360,134362],{"class":326,"line":514},[324,134353,132589],{"class":734},[324,134355,80529],{"class":867},[324,134357,129424],{"class":916},[324,134359,52159],{"class":867},[324,134361,132598],{"class":916},[324,134363,129994],{"class":867},[19,134365,134366],{},"完整代码：",[316,134368,134369],{"className":127064,"code":132496,"language":127066,"meta":50,"style":50},[269,134370,134371,134375,134389,134393,134407,134411,134425,134429,134443,134447],{"__ignoreMap":50},[324,134372,134373],{"class":326,"line":327},[324,134374,132503],{"class":772},[324,134376,134377,134379,134381,134383,134385,134387],{"class":326,"line":203},[324,134378,132508],{"class":734},[324,134380,80529],{"class":867},[324,134382,129424],{"class":916},[324,134384,52159],{"class":867},[324,134386,132517],{"class":916},[324,134388,129994],{"class":867},[324,134390,134391],{"class":326,"line":338},[324,134392,132524],{"class":772},[324,134394,134395,134397,134399,134401,134403,134405],{"class":326,"line":344},[324,134396,132529],{"class":734},[324,134398,80529],{"class":867},[324,134400,129424],{"class":916},[324,134402,52159],{"class":867},[324,134404,55486],{"class":916},[324,134406,129994],{"class":867},[324,134408,134409],{"class":326,"line":484},[324,134410,132544],{"class":772},[324,134412,134413,134415,134417,134419,134421,134423],{"class":326,"line":491},[324,134414,132549],{"class":734},[324,134416,80529],{"class":867},[324,134418,129424],{"class":916},[324,134420,52159],{"class":867},[324,134422,55553],{"class":916},[324,134424,129994],{"class":867},[324,134426,134427],{"class":326,"line":496},[324,134428,132564],{"class":772},[324,134430,134431,134433,134435,134437,134439,134441],{"class":326,"line":502},[324,134432,132569],{"class":734},[324,134434,80529],{"class":867},[324,134436,129424],{"class":916},[324,134438,52159],{"class":867},[324,134440,86955],{"class":916},[324,134442,129994],{"class":867},[324,134444,134445],{"class":326,"line":508},[324,134446,132584],{"class":772},[324,134448,134449,134451,134453,134455,134457,134459],{"class":326,"line":514},[324,134450,132589],{"class":734},[324,134452,80529],{"class":867},[324,134454,129424],{"class":916},[324,134456,52159],{"class":867},[324,134458,132598],{"class":916},[324,134460,129994],{"class":867},[19,134462,134463],{},"分布思路重点详解：",[316,134465,134466],{"className":127064,"code":132496,"language":127066,"meta":50,"style":50},[269,134467,134468,134472,134486,134490,134504,134508,134522,134526,134540,134544],{"__ignoreMap":50},[324,134469,134470],{"class":326,"line":327},[324,134471,132503],{"class":772},[324,134473,134474,134476,134478,134480,134482,134484],{"class":326,"line":203},[324,134475,132508],{"class":734},[324,134477,80529],{"class":867},[324,134479,129424],{"class":916},[324,134481,52159],{"class":867},[324,134483,132517],{"class":916},[324,134485,129994],{"class":867},[324,134487,134488],{"class":326,"line":338},[324,134489,132524],{"class":772},[324,134491,134492,134494,134496,134498,134500,134502],{"class":326,"line":344},[324,134493,132529],{"class":734},[324,134495,80529],{"class":867},[324,134497,129424],{"class":916},[324,134499,52159],{"class":867},[324,134501,55486],{"class":916},[324,134503,129994],{"class":867},[324,134505,134506],{"class":326,"line":484},[324,134507,132544],{"class":772},[324,134509,134510,134512,134514,134516,134518,134520],{"class":326,"line":491},[324,134511,132549],{"class":734},[324,134513,80529],{"class":867},[324,134515,129424],{"class":916},[324,134517,52159],{"class":867},[324,134519,55553],{"class":916},[324,134521,129994],{"class":867},[324,134523,134524],{"class":326,"line":496},[324,134525,132564],{"class":772},[324,134527,134528,134530,134532,134534,134536,134538],{"class":326,"line":502},[324,134529,132569],{"class":734},[324,134531,80529],{"class":867},[324,134533,129424],{"class":916},[324,134535,52159],{"class":867},[324,134537,86955],{"class":916},[324,134539,129994],{"class":867},[324,134541,134542],{"class":326,"line":508},[324,134543,132584],{"class":772},[324,134545,134546,134548,134550,134552,134554,134556],{"class":326,"line":514},[324,134547,132589],{"class":734},[324,134549,80529],{"class":867},[324,134551,129424],{"class":916},[324,134553,52159],{"class":867},[324,134555,132598],{"class":916},[324,134557,129994],{"class":867},[48,134559],{"style":126920,"src":134560},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-062.png",[19,134562,134563],{},"图片太大，盒子太小，此时需要修改图片的大小",[316,134565,134567],{"className":127811,"code":134566,"language":127813,"meta":50,"style":50},"\u003Cimg src=\"images\u002Fpic.jpg\" alt=\"描述文字\" title=\"悬停提示\">\n",[269,134568,134569],{"__ignoreMap":50},[324,134570,134571,134573,134575,134577,134579,134582,134584,134586,134589,134592,134594,134597],{"class":326,"line":327},[324,134572,1774],{"class":867},[324,134574,48],{"class":52022},[324,134576,55961],{"class":734},[324,134578,913],{"class":867},[324,134580,134581],{"class":738},"\"images\u002Fpic.jpg\"",[324,134583,55969],{"class":734},[324,134585,913],{"class":867},[324,134587,134588],{"class":738},"\"描述文字\"",[324,134590,134591],{"class":734}," title",[324,134593,913],{"class":867},[324,134595,134596],{"class":738},"\"悬停提示\"",[324,134598,52029],{"class":867},[48,134600],{"style":126920,"src":134601},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-063.png",[19,134603,134604],{},"制造遮罩层",[316,134606,134607],{"className":127811,"code":134566,"language":127813,"meta":50,"style":50},[269,134608,134609],{"__ignoreMap":50},[324,134610,134611,134613,134615,134617,134619,134621,134623,134625,134627,134629,134631,134633],{"class":326,"line":327},[324,134612,1774],{"class":867},[324,134614,48],{"class":52022},[324,134616,55961],{"class":734},[324,134618,913],{"class":867},[324,134620,134581],{"class":738},[324,134622,55969],{"class":734},[324,134624,913],{"class":867},[324,134626,134588],{"class":738},[324,134628,134591],{"class":734},[324,134630,913],{"class":867},[324,134632,134596],{"class":738},[324,134634,52029],{"class":867},[19,134636,134637],{},"此时是这样的为标准流",[48,134639],{"style":126920,"src":134640},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-064.png",[19,134642,134643],{},"还要子绝父相，不然子盒子会以浏览器为准，不以盒子为准",[19,134645,134646],{},"中间播放按钮作为背景展示就可以，不用再加盒子了",[19,134648,134649],{},"让他在中间，用center(background-position)",[19,134651,134652],{},"将需要变的尽可能放到一个盒子中",[19,134654,134655],{},"放大盒子上内部盒子发生变化",[316,134657,134659],{"className":127064,"code":134658,"language":127066,"meta":50,"style":50},".parent {\n  position: relative;\n}\n.child {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n}\n",[269,134660,134661,134667,134677,134681,134688,134698,134710,134722],{"__ignoreMap":50},[324,134662,134663,134665],{"class":326,"line":327},[324,134664,128131],{"class":734},[324,134666,16301],{"class":867},[324,134668,134669,134671,134673,134675],{"class":326,"line":203},[324,134670,132870],{"class":916},[324,134672,52159],{"class":867},[324,134674,55486],{"class":916},[324,134676,2025],{"class":867},[324,134678,134679],{"class":326,"line":338},[324,134680,2296],{"class":867},[324,134682,134683,134686],{"class":326,"line":344},[324,134684,134685],{"class":734},".child",[324,134687,16301],{"class":867},[324,134689,134690,134692,134694,134696],{"class":326,"line":484},[324,134691,132870],{"class":916},[324,134693,52159],{"class":867},[324,134695,55553],{"class":916},[324,134697,2025],{"class":867},[324,134699,134700,134702,134704,134706,134708],{"class":326,"line":491},[324,134701,132884],{"class":916},[324,134703,52159],{"class":867},[324,134705,1520],{"class":916},[324,134707,1192],{"class":863},[324,134709,2025],{"class":867},[324,134711,134712,134714,134716,134718,134720],{"class":326,"line":496},[324,134713,132901],{"class":916},[324,134715,52159],{"class":867},[324,134717,1520],{"class":916},[324,134719,1192],{"class":863},[324,134721,2025],{"class":867},[324,134723,134724],{"class":326,"line":502},[324,134725,2296],{"class":867},[19,134727,134728],{},"当鼠标放到使用tudou这个类选择器盒子上时，使用mask类选择器的盒子会显现内容",[14,134730,134732],{"id":134731},"_122-精灵图","12.2 精灵图",[35,134734,134736],{"id":134735},"_1221-理解","12.2.1 理解",[192,134738,134739,134757],{},[195,134740,134741,134742,132970,134745,134748,134749,134752,134753,134756],{},"目的： ",[116,134743,134744],{},"为了有效地减少服务器接收和发送请求的次数",[116,134746,134747],{},"提高"," 页面的 ",[116,134750,134751],{},"加载速度"," ，出现了 ",[116,134754,134755],{},"CSS 精灵技术"," （也称 CSS Sprites、CSS 雪碧），将网页中的一些小背景图像整合到一张大图中 ，这样服务器只需一次请求就可以了",[195,134758,134759,134760,134762,134763,134765,134766,134768,134769,134771,134772,134774,134775,134777],{},"使用精灵图核心：",[54438,134761],{},"  ①精灵技术主要针对于背景图片使用。就是把多个小背景图片整合到一张大图片中",[54438,134764],{},"  ②这个大图片也称为 sprites 精灵图 或者 雪碧图",[54438,134767],{},"  ③移动背景图片位置， 此时可以使用 background-position",[54438,134770],{},"  ④移动的距离就是这个目标图片的 x 和 y 坐标。注意网页中的坐标有所不同",[54438,134773],{},"  ⑤因为一般情况下都是往上往左移动，所以数值是负值",[54438,134776],{},"  ⑥使用精灵图的时候需要精确测量，每个小背景图片的大小和位置",[35,134779,134781],{"id":134780},"_1222-扒图","12.2.2 扒图",[316,134783,134786],{"className":134784,"code":134785,"language":5916},[5914],"\u003Cimg style=\"max-width:100%\" src=\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-065.png\">\n",[269,134787,134785],{"__ignoreMap":50},[48,134789],{"style":126920,"src":134790},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-066.png",[48,134792],{"style":126920,"src":134793},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-067.png",[35,134795,134797],{"id":134796},"_1223-精灵图的实现","12.2.3 精灵图的实现",[48,134799],{"style":126920,"src":134800},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-068.png",[19,134802,134803],{},"打开FW软件，使用切片命令，将想实现精灵图的位置进行切片操作，然后下方会出现坐标",[48,134805],{"style":126920,"src":134806},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-069.png",[316,134808,134810],{"className":127064,"code":134809,"language":127066,"meta":50,"style":50},"\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",[269,134811,134812,134817,134824,134836,134848,134867,134884],{"__ignoreMap":50},[324,134813,134814],{"class":326,"line":327},[324,134815,134816],{"class":772},"\u002F* 精灵图使用：通过 background-position 定位 *\u002F\n",[324,134818,134819,134822],{"class":326,"line":203},[324,134820,134821],{"class":734},".icon",[324,134823,16301],{"class":867},[324,134825,134826,134828,134830,134832,134834],{"class":326,"line":338},[324,134827,71290],{"class":916},[324,134829,52159],{"class":867},[324,134831,1564],{"class":916},[324,134833,52214],{"class":863},[324,134835,2025],{"class":867},[324,134837,134838,134840,134842,134844,134846],{"class":326,"line":344},[324,134839,71510],{"class":916},[324,134841,52159],{"class":867},[324,134843,1564],{"class":916},[324,134845,52214],{"class":863},[324,134847,2025],{"class":867},[324,134849,134850,134852,134854,134856,134858,134861,134863,134865],{"class":326,"line":484},[324,134851,71333],{"class":916},[324,134853,52159],{"class":867},[324,134855,62448],{"class":916},[324,134857,868],{"class":867},[324,134859,134860],{"class":5945},"sprites.png",[324,134862,14443],{"class":867},[324,134864,62458],{"class":916},[324,134866,2025],{"class":867},[324,134868,134869,134871,134873,134875,134877,134880,134882],{"class":326,"line":491},[324,134870,129324],{"class":916},[324,134872,52159],{"class":867},[324,134874,52485],{"class":916},[324,134876,52214],{"class":863},[324,134878,134879],{"class":916}," -20",[324,134881,52214],{"class":863},[324,134883,2025],{"class":867},[324,134885,134886],{"class":326,"line":496},[324,134887,2296],{"class":867},[48,134889],{"style":126920,"src":134890},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-070.png",[19,134892,134893],{},"在前端中坐标轴的正方向是右和下",[14,134895,134897],{"id":134896},"_123-字体图标","12.3 字体图标",[35,134899,134901],{"id":134900},"_1231-字体图标与精灵图的对比","12.3.1 字体图标与精灵图的对比",[19,134903,134904],{},"字体图标使用场景： 主要用于显示网页中通用、常用的一些小图标。",[19,134906,134907],{},"精灵图是有诸多优点的，但是缺点很明显。",[19,134909,134910],{},"1.图片文件还是比较大的。",[19,134912,134913],{},"2.图片本身放大和缩小会失真。",[19,134915,134916],{},"3.一旦图片制作完毕想要更换非常复杂。",[19,134918,134919,134920,26464],{},"此时，有一种技术的出现很好的解决了以上问题，就是 ",[116,134921,134922],{},"字体图标 iconfont",[19,134924,134925,134928,134929,29107],{},[116,134926,134927],{},"字体图标"," 可以为前端工程师提供一种方便高效的图标使用方式，",[116,134930,134931],{},"展示的是图标，本质属于字体",[35,134933,134935],{"id":134934},"_1232-字体图标的优点","12.3.2 字体图标的优点",[1871,134937,134938,134943,134946,134949,134952],{},[195,134939,134940,134942],{},[116,134941,26600],{}," ：一个图标字体要比一系列的图像要小。一旦字体加载了，图标就会马上渲染出来，减少了服务器请求",[195,134944,134945],{},"灵活性：本质其实是文字，可以很随意的改变颜色、产生阴影、透明效果、旋转等",[195,134947,134948],{},"兼容性：几乎支持所有的浏览器，请放心使用",[195,134950,134951],{},"注意： 字体图标不能替代精灵技术，只是对工作中图标部分技术的提升和优化",[195,134953,134954],{},"样式结构比较简单，样式比较复杂的小图片的话还是得用精灵图来进行做",[35,134956,134958],{"id":134957},"_1233-字体库下载网站","12.3.3 字体库下载网站",[1871,134960,134961],{},[195,134962,134963,134964],{},"icomoon字体库：",[25,134965,134968],{"href":134966,"rel":134967},"http:\u002F\u002Ficomoon.io\u002F",[29],"http:\u002F\u002Ficomoon.io",[19,134970,134971],{},"进去之后点icomoon app",[48,134973],{"style":126920,"src":134974},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-071.png",[19,134976,134977],{},"可以对其编辑：",[48,134979],{"style":126920,"src":134980},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-072.png",[19,134982,134983],{},"生成字体：",[48,134985],{"style":126920,"src":134986},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-073.png",[19,134988,134989],{},"下载：",[48,134991],{"style":126920,"src":134992},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-074.png",[1871,134994,134995],{},[195,134996,134997,134998],{},"阿里iconfont字体库： ",[25,134999,135000],{"href":135000,"rel":135001},"http:\u002F\u002Fwww.iconfont.cn\u002F",[29],[35,135003,135005],{"id":135004},"_1234-字体图标的引入","12.3.4 字体图标的引入",[192,135007,135008],{},[195,135009,135010,135011,135014],{},"把下载包里面的 ",[116,135012,135013],{},"fonts"," 文件夹放入页面根目录下",[48,135016],{"style":126920,"src":135017},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-075.png",[192,135019,135020],{"start":203},[195,135021,135022],{},"字体文件格式",[1003,135024,135025,135034],{},[1006,135026,135027],{},[1009,135028,135029,135032],{},[1012,135030,135031],{"align":24463},"格式",[1012,135033,24467],{"align":24463},[1049,135035,135036,135046,135056,135066],{},[1009,135037,135038,135043],{},[1054,135039,135040],{"align":24463},[116,135041,135042],{},".ttf",[1054,135044,135045],{"align":24463},"ttf字体是Windows和Mac的最常见的字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome4+、Safari3+、Opera10+、iOS Mobile、Safari4.2+",[1009,135047,135048,135053],{},[1054,135049,135050],{"align":24463},[116,135051,135052],{},".woff",[1054,135054,135055],{"align":24463},"woff字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome6+、Safari3.6+、Opera11.1+",[1009,135057,135058,135063],{},[1054,135059,135060],{"align":24463},[116,135061,135062],{},".eot",[1054,135064,135065],{"align":24463},"eot字体是IE专用字体，支持这种字体的浏览器有IE4+",[1009,135067,135068,135073],{},[1054,135069,135070],{"align":24463},[116,135071,135072],{},"svg",[1054,135074,135075],{"align":24463},"svg字体是基于SVG字体渲染的一种格式，支持这种字体的浏览器有Chrome4+、Safari3.1+、Opera10.0+、iOS Mobile Safari3.2+",[192,135077,135078],{"start":338},[195,135079,135080],{},"在 CSS 样式中全局声明字体： 简单理解把这些字体文件通过css引入到我们页面中",[316,135082,135084],{"className":127064,"code":135083,"language":127066,"meta":50,"style":50},"\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",[269,135085,135086,135091,135098,135110,135126,135151,135172,135192,135212,135216,135222,135232,135243],{"__ignoreMap":50},[324,135087,135088],{"class":326,"line":327},[324,135089,135090],{"class":772},"\u002F* 引入字体图标 *\u002F\n",[324,135092,135093,135096],{"class":326,"line":203},[324,135094,135095],{"class":863},"@font-face",[324,135097,16301],{"class":867},[324,135099,135100,135103,135105,135108],{"class":326,"line":338},[324,135101,135102],{"class":916},"  font-family",[324,135104,52159],{"class":867},[324,135106,135107],{"class":738},"'icomoon'",[324,135109,2025],{"class":867},[324,135111,135112,135115,135117,135119,135121,135124],{"class":326,"line":344},[324,135113,135114],{"class":916},"  src",[324,135116,52159],{"class":867},[324,135118,62448],{"class":916},[324,135120,868],{"class":867},[324,135122,135123],{"class":738},"'fonts\u002Ficomoon.eot'",[324,135125,3448],{"class":867},[324,135127,135128,135130,135132,135134,135136,135139,135141,135144,135146,135149],{"class":326,"line":484},[324,135129,135114],{"class":916},[324,135131,52159],{"class":867},[324,135133,62448],{"class":916},[324,135135,868],{"class":867},[324,135137,135138],{"class":738},"'fonts\u002Ficomoon.eot?#iefix'",[324,135140,14443],{"class":867},[324,135142,135143],{"class":916},"format",[324,135145,868],{"class":867},[324,135147,135148],{"class":738},"'embedded-opentype'",[324,135150,38769],{"class":867},[324,135152,135153,135156,135158,135161,135163,135165,135167,135170],{"class":326,"line":491},[324,135154,135155],{"class":916},"       url",[324,135157,868],{"class":867},[324,135159,135160],{"class":738},"'fonts\u002Ficomoon.woff'",[324,135162,14443],{"class":867},[324,135164,135143],{"class":916},[324,135166,868],{"class":867},[324,135168,135169],{"class":738},"'woff'",[324,135171,38769],{"class":867},[324,135173,135174,135176,135178,135181,135183,135185,135187,135190],{"class":326,"line":496},[324,135175,135155],{"class":916},[324,135177,868],{"class":867},[324,135179,135180],{"class":738},"'fonts\u002Ficomoon.ttf'",[324,135182,14443],{"class":867},[324,135184,135143],{"class":916},[324,135186,868],{"class":867},[324,135188,135189],{"class":738},"'truetype'",[324,135191,38769],{"class":867},[324,135193,135194,135196,135198,135201,135203,135205,135207,135210],{"class":326,"line":502},[324,135195,135155],{"class":916},[324,135197,868],{"class":867},[324,135199,135200],{"class":738},"'fonts\u002Ficomoon.svg#icomoon'",[324,135202,14443],{"class":867},[324,135204,135143],{"class":916},[324,135206,868],{"class":867},[324,135208,135209],{"class":738},"'svg'",[324,135211,3448],{"class":867},[324,135213,135214],{"class":326,"line":508},[324,135215,2296],{"class":867},[324,135217,135218,135220],{"class":326,"line":514},[324,135219,134821],{"class":734},[324,135221,16301],{"class":867},[324,135223,135224,135226,135228,135230],{"class":326,"line":2343},[324,135225,135102],{"class":916},[324,135227,52159],{"class":867},[324,135229,135107],{"class":738},[324,135231,2025],{"class":867},[324,135233,135234,135237,135239,135241],{"class":326,"line":2348},[324,135235,135236],{"class":916},"  font-style",[324,135238,52159],{"class":867},[324,135240,64563],{"class":916},[324,135242,2025],{"class":867},[324,135244,135245],{"class":326,"line":2354},[324,135246,2296],{"class":867},[19,135248,135249],{},"字体声明也可以在下载的字体文件中找到style.css中复制，也可以复制上边的内容",[48,135251],{"style":126920,"src":135252},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-076.png",[192,135254,135255],{"start":344},[195,135256,135257],{},"添加字体",[48,135259],{"style":126920,"src":135260},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-077.png",[19,135262,135263],{},"复制：",[48,135265],{"style":126920,"src":135266},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-078.png",[19,135268,135269],{},"还有谁需要就把声明加在谁那里一份 font-family:'icomoon'",[192,135271,135272],{"start":484},[195,135273,135274],{},"代码展示：",[316,135276,135277],{"className":127064,"code":135083,"language":127066,"meta":50,"style":50},[269,135278,135279,135283,135289,135299,135313,135335,135353,135371,135389,135393,135399,135409,135419],{"__ignoreMap":50},[324,135280,135281],{"class":326,"line":327},[324,135282,135090],{"class":772},[324,135284,135285,135287],{"class":326,"line":203},[324,135286,135095],{"class":863},[324,135288,16301],{"class":867},[324,135290,135291,135293,135295,135297],{"class":326,"line":338},[324,135292,135102],{"class":916},[324,135294,52159],{"class":867},[324,135296,135107],{"class":738},[324,135298,2025],{"class":867},[324,135300,135301,135303,135305,135307,135309,135311],{"class":326,"line":344},[324,135302,135114],{"class":916},[324,135304,52159],{"class":867},[324,135306,62448],{"class":916},[324,135308,868],{"class":867},[324,135310,135123],{"class":738},[324,135312,3448],{"class":867},[324,135314,135315,135317,135319,135321,135323,135325,135327,135329,135331,135333],{"class":326,"line":484},[324,135316,135114],{"class":916},[324,135318,52159],{"class":867},[324,135320,62448],{"class":916},[324,135322,868],{"class":867},[324,135324,135138],{"class":738},[324,135326,14443],{"class":867},[324,135328,135143],{"class":916},[324,135330,868],{"class":867},[324,135332,135148],{"class":738},[324,135334,38769],{"class":867},[324,135336,135337,135339,135341,135343,135345,135347,135349,135351],{"class":326,"line":491},[324,135338,135155],{"class":916},[324,135340,868],{"class":867},[324,135342,135160],{"class":738},[324,135344,14443],{"class":867},[324,135346,135143],{"class":916},[324,135348,868],{"class":867},[324,135350,135169],{"class":738},[324,135352,38769],{"class":867},[324,135354,135355,135357,135359,135361,135363,135365,135367,135369],{"class":326,"line":496},[324,135356,135155],{"class":916},[324,135358,868],{"class":867},[324,135360,135180],{"class":738},[324,135362,14443],{"class":867},[324,135364,135143],{"class":916},[324,135366,868],{"class":867},[324,135368,135189],{"class":738},[324,135370,38769],{"class":867},[324,135372,135373,135375,135377,135379,135381,135383,135385,135387],{"class":326,"line":502},[324,135374,135155],{"class":916},[324,135376,868],{"class":867},[324,135378,135200],{"class":738},[324,135380,14443],{"class":867},[324,135382,135143],{"class":916},[324,135384,868],{"class":867},[324,135386,135209],{"class":738},[324,135388,3448],{"class":867},[324,135390,135391],{"class":326,"line":508},[324,135392,2296],{"class":867},[324,135394,135395,135397],{"class":326,"line":514},[324,135396,134821],{"class":734},[324,135398,16301],{"class":867},[324,135400,135401,135403,135405,135407],{"class":326,"line":2343},[324,135402,135102],{"class":916},[324,135404,52159],{"class":867},[324,135406,135107],{"class":738},[324,135408,2025],{"class":867},[324,135410,135411,135413,135415,135417],{"class":326,"line":2348},[324,135412,135236],{"class":916},[324,135414,52159],{"class":867},[324,135416,64563],{"class":916},[324,135418,2025],{"class":867},[324,135420,135421],{"class":326,"line":2354},[324,135422,2296],{"class":867},[48,135424],{"style":126920,"src":135425},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-079.png",[19,135427,135428],{},"更加细节展示：",[192,135430,135431],{},[195,135432,135433],{},"html 标签内添加小图标",[48,135435],{"style":126920,"src":135436},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-080.png",[192,135438,135439],{"start":203},[195,135440,135441],{},"给标签定义字体",[316,135443,135444],{"className":127811,"code":131168,"language":127813,"meta":50,"style":50},[269,135445,135446,135450,135464,135468],{"__ignoreMap":50},[324,135447,135448],{"class":326,"line":327},[324,135449,131175],{"class":772},[324,135451,135452,135454,135456,135458,135460,135462],{"class":326,"line":203},[324,135453,1774],{"class":867},[324,135455,52333],{"class":52022},[324,135457,54208],{"class":734},[324,135459,913],{"class":867},[324,135461,131188],{"class":738},[324,135463,52029],{"class":867},[324,135465,135466],{"class":326,"line":338},[324,135467,131195],{"class":867},[324,135469,135470,135472,135474],{"class":326,"line":344},[324,135471,52507],{"class":867},[324,135473,52333],{"class":52022},[324,135475,52029],{"class":867},[19,135477,135478],{},"注意：务必保证 这个字体和上面@font-face里面的字体保持一致",[48,135480],{"style":126920,"src":135481},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-081.png",[35,135483,135485],{"id":135484},"_1235-字体图标的追加","12.3.5 字体图标的追加",[19,135487,135488],{},"如果工作中，原来的字体图标不够用了，我们需要添加新的字体图标到原来的字体文件中",[19,135490,135491,135492,135495],{},"把压缩包里面的 ",[116,135493,135494],{},"selection.json"," 从新上传，然后选中自己想要新的图标，从新下载压缩包，并替换原来的文件即可",[19,135497,135498],{},"打开网站，点下方：",[48,135500],{"style":126920,"src":135501},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-082.png",[48,135503],{"style":126920,"src":135504},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-083.png",[48,135506],{"style":126920,"src":135507},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-084.png",[19,135509,135510],{},"点yes重新加载",[19,135512,135513],{},"然后重复之前的操作就可以实现了",[19,135515,135516],{},"下载最新的文件夹，原来的文件夹可以是删除了！",[35,135518,135520],{"id":135519},"_1236-字体图标的加载原理","12.3.6 字体图标的加载原理",[48,135522],{"style":126920,"src":135523},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-085.png",[775,135525,135526],{},"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":50,"searchDepth":203,"depth":203,"links":135528},[135529,135535,135540],{"id":134132,"depth":203,"text":134133,"children":135530},[135531,135532,135533,135534],{"id":134144,"depth":338,"text":134145},{"id":134173,"depth":338,"text":134174},{"id":134201,"depth":338,"text":134202},{"id":134259,"depth":338,"text":134260},{"id":134731,"depth":203,"text":134732,"children":135536},[135537,135538,135539],{"id":134735,"depth":338,"text":134736},{"id":134780,"depth":338,"text":134781},{"id":134796,"depth":338,"text":134797},{"id":134896,"depth":203,"text":134897,"children":135541},[135542,135543,135544,135545,135546,135547],{"id":134900,"depth":338,"text":134901},{"id":134934,"depth":338,"text":134935},{"id":134957,"depth":338,"text":134958},{"id":135004,"depth":338,"text":135005},{"id":135484,"depth":338,"text":135485},{"id":135519,"depth":338,"text":135520},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch12",{"title":134124,"description":791},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源","K0tmUhpNlTpbP1LvirxUmLGoqR4EIlK4Id82_j0Cg-Q",{"id":135554,"title":135555,"body":135556,"description":791,"extension":792,"meta":136783,"navigation":487,"path":136784,"seo":136785,"stem":136786,"__hash__":136787},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧.md","13. 界面样式与布局技巧",{"type":7,"value":135557,"toc":136764},[135558,135561,135565,135568,135582,135650,135680,135683,135687,135691,135793,135840,135844,135847,135850,135884,135887,135890,135893,135896,135899,135902,135905,135907,135910,135913,135916,135919,135922,135925,135928,135956,135959,135963,135966,135973,135976,135979,136005,136008,136012,136015,136018,136025,136029,136032,136034,136066,136069,136072,136084,136090,136093,136096,136099,136101,136105,136108,136111,136114,136159,136163,136165,136168,136175,136217,136220,136224,136229,136243,136247,136250,136253,136256,136259,136262,136296,136299,136302,136356,136359,136362,136365,136368,136420,136423,136426,136475,136479,136481,136484,136487,136490,136493,136496,136554,136557,136563,136566,136569,136601,136604,136608,136612,136615,136647,136651,136654,136698,136702,136705,136708,136711,136714,136717,136720,136723,136725,136728,136730,136733,136736,136739,136742,136747,136750,136752,136755,136758,136761],[10,135559,135555],{"id":135560},"_13-界面样式与布局技巧",[14,135562,135564],{"id":135563},"_131-css三角","13.1 css三角",[19,135566,135567],{},"原理概括：只设置边框，需要朝向哪边的三角就让其他的边框进行透明",[1871,135569,135570,135573,135576,135579],{},[195,135571,135572],{},"用css 边框可以模拟三角效果",[195,135574,135575],{},"宽度高度为0",[195,135577,135578],{},"4个边框都要写， 只保留需要的边框颜色，其余的不能省略，都改为 transparent 透明就好了",[195,135580,135581],{},"为了照顾兼容性 低版本的浏览器，加上 font-size: 0; line-height: 0;",[316,135583,135585],{"className":127064,"code":135584,"language":127066,"meta":50,"style":50},"\u002F* CSS 实现三角形 *\u002F\n.triangle {\n  width: 0;\n  height: 0;\n  border: 10px solid transparent;\n  border-bottom-color: #333;\n}\n",[269,135586,135587,135592,135599,135609,135619,135635,135646],{"__ignoreMap":50},[324,135588,135589],{"class":326,"line":327},[324,135590,135591],{"class":772},"\u002F* CSS 实现三角形 *\u002F\n",[324,135593,135594,135597],{"class":326,"line":203},[324,135595,135596],{"class":734},".triangle",[324,135598,16301],{"class":867},[324,135600,135601,135603,135605,135607],{"class":326,"line":338},[324,135602,71290],{"class":916},[324,135604,52159],{"class":867},[324,135606,1056],{"class":916},[324,135608,2025],{"class":867},[324,135610,135611,135613,135615,135617],{"class":326,"line":344},[324,135612,71510],{"class":916},[324,135614,52159],{"class":867},[324,135616,1056],{"class":916},[324,135618,2025],{"class":867},[324,135620,135621,135623,135625,135627,135629,135631,135633],{"class":326,"line":484},[324,135622,71618],{"class":916},[324,135624,52159],{"class":867},[324,135626,1310],{"class":916},[324,135628,52214],{"class":863},[324,135630,52243],{"class":916},[324,135632,64713],{"class":916},[324,135634,2025],{"class":867},[324,135636,135637,135640,135642,135644],{"class":326,"line":491},[324,135638,135639],{"class":916},"  border-bottom-color",[324,135641,52159],{"class":867},[324,135643,63091],{"class":916},[324,135645,2025],{"class":867},[324,135647,135648],{"class":326,"line":496},[324,135649,2296],{"class":867},[316,135651,135652],{"className":127064,"code":131221,"language":127066,"meta":50,"style":50},[269,135653,135654,135660,135676],{"__ignoreMap":50},[324,135655,135656,135658],{"class":326,"line":327},[324,135657,52333],{"class":52022},[324,135659,16301],{"class":867},[324,135661,135662,135664,135666,135668,135670,135672,135674],{"class":326,"line":203},[324,135663,71618],{"class":916},[324,135665,52159],{"class":867},[324,135667,1082],{"class":916},[324,135669,52214],{"class":863},[324,135671,52243],{"class":916},[324,135673,130456],{"class":916},[324,135675,2025],{"class":867},[324,135677,135678],{"class":326,"line":338},[324,135679,2296],{"class":867},[48,135681],{"style":126920,"src":135682},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-086.png",[14,135684,135686],{"id":135685},"_132-css用户界面样式","13.2 css用户界面样式",[35,135688,135690],{"id":135689},"_1321-鼠标样式","13.2.1 鼠标样式",[316,135692,135694],{"className":127064,"code":135693,"language":127066,"meta":50,"style":50},"\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",[269,135695,135696,135701,135720,135738,135757,135774],{"__ignoreMap":50},[324,135697,135698],{"class":326,"line":327},[324,135699,135700],{"class":772},"\u002F* 鼠标样式 *\u002F\n",[324,135702,135703,135705,135707,135710,135712,135714,135717],{"class":326,"line":203},[324,135704,52333],{"class":52022},[324,135706,80529],{"class":867},[324,135708,135709],{"class":916},"cursor",[324,135711,52159],{"class":867},[324,135713,62752],{"class":916},[324,135715,135716],{"class":867},"; }   ",[324,135718,135719],{"class":772},"\u002F* 手型 *\u002F\n",[324,135721,135722,135724,135726,135728,135730,135733,135735],{"class":326,"line":338},[324,135723,52333],{"class":52022},[324,135725,80529],{"class":867},[324,135727,135709],{"class":916},[324,135729,52159],{"class":867},[324,135731,135732],{"class":916},"default",[324,135734,135716],{"class":867},[324,135736,135737],{"class":772},"\u002F* 默认 *\u002F\n",[324,135739,135740,135742,135744,135746,135748,135751,135754],{"class":326,"line":344},[324,135741,52333],{"class":52022},[324,135743,80529],{"class":867},[324,135745,135709],{"class":916},[324,135747,52159],{"class":867},[324,135749,135750],{"class":916},"move",[324,135752,135753],{"class":867},"; }      ",[324,135755,135756],{"class":772},"\u002F* 移动 *\u002F\n",[324,135758,135759,135761,135763,135765,135767,135769,135771],{"class":326,"line":484},[324,135760,52333],{"class":52022},[324,135762,80529],{"class":867},[324,135764,135709],{"class":916},[324,135766,52159],{"class":867},[324,135768,5916],{"class":916},[324,135770,135753],{"class":867},[324,135772,135773],{"class":772},"\u002F* 文本 *\u002F\n",[324,135775,135776,135778,135780,135782,135784,135787,135790],{"class":326,"line":491},[324,135777,52333],{"class":52022},[324,135779,80529],{"class":867},[324,135781,135709],{"class":916},[324,135783,52159],{"class":867},[324,135785,135786],{"class":916},"not-allowed",[324,135788,135789],{"class":867},"; } ",[324,135791,135792],{"class":772},"\u002F* 禁止 *\u002F\n",[1003,135794,135795,135803],{},[1006,135796,135797],{},[1009,135798,135799,135801],{},[1012,135800,127528],{"align":24463},[1012,135802,28211],{"align":24463},[1049,135804,135805,135812,135819,135826,135833],{},[1009,135806,135807,135809],{},[1054,135808,135732],{"align":24463},[1054,135810,135811],{"align":24463},"小白 默认",[1009,135813,135814,135816],{},[1054,135815,62752],{"align":24463},[1054,135817,135818],{"align":24463},"小手",[1009,135820,135821,135823],{},[1054,135822,135750],{"align":24463},[1054,135824,135825],{"align":24463},"移动",[1009,135827,135828,135830],{},[1054,135829,5916],{"align":24463},[1054,135831,135832],{"align":24463},"文本",[1009,135834,135835,135837],{},[1054,135836,135786],{"align":24463},[1054,135838,135839],{"align":24463},"禁止",[35,135841,135843],{"id":135842},"_1322-轮廓线-outline","13.2.2 轮廓线 outline",[19,135845,135846],{},"去除表单轮廓线",[19,135848,135849],{},"给表单添加 outline: 0; 或者 outline: none; 样式之后，就可以去掉默认的蓝色边框",[316,135851,135852],{"className":127064,"code":130428,"language":127066,"meta":50,"style":50},[269,135853,135854,135858,135864,135880],{"__ignoreMap":50},[324,135855,135856],{"class":326,"line":327},[324,135857,130435],{"class":772},[324,135859,135860,135862],{"class":326,"line":203},[324,135861,52333],{"class":52022},[324,135863,16301],{"class":867},[324,135865,135866,135868,135870,135872,135874,135876,135878],{"class":326,"line":338},[324,135867,71618],{"class":916},[324,135869,52159],{"class":867},[324,135871,1082],{"class":916},[324,135873,52214],{"class":863},[324,135875,52243],{"class":916},[324,135877,130456],{"class":916},[324,135879,2025],{"class":867},[324,135881,135882],{"class":326,"line":344},[324,135883,2296],{"class":867},[19,135885,135886],{},"文本域：",[48,135888],{"style":126920,"src":135889},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-087.png",[19,135891,135892],{},"此时会有一个空白区域",[48,135894],{"style":126920,"src":135895},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-088.png",[19,135897,135898],{},"写在同一行就不会出现这个问题",[48,135900],{"style":126920,"src":135901},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-089.png",[19,135903,135904],{},"文本域是行内块元素，一定记住！！！",[19,135906,98955],{},[48,135908],{"style":126920,"src":135909},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-090.png",[19,135911,135912],{},"文本域尽量放在一行",[19,135914,135915],{},"知识回顾：cols是列，rols是行",[48,135917],{"style":126920,"src":135918},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-091.png",[19,135920,135921],{},"它可以进行拖动，显然这是我们不愿意看到的",[48,135923],{"style":126920,"src":135924},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-092.png",[19,135926,135927],{},"使用resize进行解决",[316,135929,135931],{"className":127064,"code":135930,"language":127066,"meta":50,"style":50},"input {\n  outline: none;  \u002F* 取消表单轮廓线 *\u002F\n}\n",[269,135932,135933,135939,135952],{"__ignoreMap":50},[324,135934,135935,135937],{"class":326,"line":327},[324,135936,54543],{"class":52022},[324,135938,16301],{"class":867},[324,135940,135941,135943,135945,135947,135949],{"class":326,"line":203},[324,135942,71520],{"class":916},[324,135944,52159],{"class":867},[324,135946,55459],{"class":916},[324,135948,130927],{"class":867},[324,135950,135951],{"class":772},"\u002F* 取消表单轮廓线 *\u002F\n",[324,135953,135954],{"class":326,"line":338},[324,135955,2296],{"class":867},[19,135957,135958],{},"此时就无法通过右下方实现拖动了",[35,135960,135962],{"id":135961},"_1323-vertical-align-属性应用","13.2.3 vertical-align 属性应用",[19,135964,135965],{},"实现一个盒子中的文字和图片对齐",[19,135967,135968,135969,135972],{},"用于设置一个元素的 ",[116,135970,135971],{},"垂直对齐方式"," ，但是它只针对于行内元素或者行内块元素有效",[19,135974,135975],{},"图片和文字默认是基线对齐",[48,135977],{"style":126920,"src":135978},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-093.png",[316,135980,135981],{"className":127064,"code":135930,"language":127066,"meta":50,"style":50},[269,135982,135983,135989,136001],{"__ignoreMap":50},[324,135984,135985,135987],{"class":326,"line":327},[324,135986,54543],{"class":52022},[324,135988,16301],{"class":867},[324,135990,135991,135993,135995,135997,135999],{"class":326,"line":203},[324,135992,71520],{"class":916},[324,135994,52159],{"class":867},[324,135996,55459],{"class":916},[324,135998,130927],{"class":867},[324,136000,135951],{"class":772},[324,136002,136003],{"class":326,"line":338},[324,136004,2296],{"class":867},[48,136006],{"style":126920,"src":136007},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-094.png",[151,136009,136011],{"id":136010},"_13231-图片表单和文字对齐","13.2.3.1 图片、表单和文字对齐",[19,136013,136014],{},"图片、表单都属于行内块元素，默认的 vertical-align 是基线对齐",[48,136016],{"style":126920,"src":136017},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-095.png",[19,136019,136020,136021,136024],{},"此时可以给图片、表单这些行内块元素的 ",[116,136022,136023],{},"vertical-align 属性设置为 middle"," 就可以让文字和图片垂直居中对齐了",[151,136026,136028],{"id":136027},"_13232-解决图片底部默认空白缝隙问题","13.2.3.2 解决图片底部默认空白缝隙问题",[19,136030,136031],{},"bug：图片底侧会有一个空白缝隙，原因是行内块元素会和文字的基线对齐。",[19,136033,15362],{},[316,136035,136037],{"className":127064,"code":136036,"language":127066,"meta":50,"style":50},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\nimg {\n  vertical-align: middle;\n}\n",[269,136038,136039,136044,136050,136062],{"__ignoreMap":50},[324,136040,136041],{"class":326,"line":327},[324,136042,136043],{"class":772},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\n",[324,136045,136046,136048],{"class":326,"line":203},[324,136047,48],{"class":52022},[324,136049,16301],{"class":867},[324,136051,136052,136055,136057,136060],{"class":326,"line":338},[324,136053,136054],{"class":916},"  vertical-align",[324,136056,52159],{"class":867},[324,136058,136059],{"class":916},"middle",[324,136061,2025],{"class":867},[324,136063,136064],{"class":326,"line":344},[324,136065,2296],{"class":867},[48,136067],{"style":126920,"src":136068},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-096.png",[19,136070,136071],{},"主要解决方法有两种：",[192,136073,136074],{},[195,136075,136076,136079,136080,136083],{},[116,136077,136078],{},"给图片"," 添加 ",[116,136081,136082],{},"vertical-align:middle | top| bottom"," 等。 （提倡使用的）",[19,136085,136086,136087],{},"2.把图片转换为块级元素 ",[116,136088,136089],{},"display: block",[19,136091,136092],{},"两个块级盒子里边放了img图片，此时两个图片一个在上一个在下，但是是有间隙的，不像两个块级元素那样之间是没有间隙， 这是因为对齐方式的原因，加一句",[19,136094,136095],{},"img {",[19,136097,136098],{},"vertical-align:middle;",[19,136100,1810],{},[35,136102,136104],{"id":136103},"_1324-溢出文字用省略号显示","13.2.4 溢出文字用省略号显示",[19,136106,136107],{},"效果：",[48,136109],{"style":126920,"src":136110},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-097.png",[19,136112,136113],{},"单行文本溢出显示省略号--必须满足三个条件：",[316,136115,136117],{"className":127064,"code":136116,"language":127066,"meta":50,"style":50},"\u002F* 解决图片底部空白缝隙 *\u002F\nimg {\n  vertical-align: middle;\n  \u002F* 或 *\u002F\n  display: block;\n}\n",[269,136118,136119,136124,136130,136140,136145,136155],{"__ignoreMap":50},[324,136120,136121],{"class":326,"line":327},[324,136122,136123],{"class":772},"\u002F* 解决图片底部空白缝隙 *\u002F\n",[324,136125,136126,136128],{"class":326,"line":203},[324,136127,48],{"class":52022},[324,136129,16301],{"class":867},[324,136131,136132,136134,136136,136138],{"class":326,"line":338},[324,136133,136054],{"class":916},[324,136135,52159],{"class":867},[324,136137,136059],{"class":916},[324,136139,2025],{"class":867},[324,136141,136142],{"class":326,"line":344},[324,136143,136144],{"class":772},"  \u002F* 或 *\u002F\n",[324,136146,136147,136149,136151,136153],{"class":326,"line":484},[324,136148,128680],{"class":916},[324,136150,52159],{"class":867},[324,136152,61591],{"class":916},[324,136154,2025],{"class":867},[324,136156,136157],{"class":326,"line":491},[324,136158,2296],{"class":867},[35,136160,136162],{"id":136161},"_1325-多行文本溢出显示省略号","13.2.5 多行文本溢出显示省略号",[19,136164,136107],{},[48,136166],{"style":126920,"src":136167},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-098.png",[19,136169,136170,136171,136174],{},"多行文本溢出显示省略号， ",[116,136172,136173],{},"有较大兼容性问题"," ，适合于webKit浏览器或移动端（移动端大部分是webkit内核）",[316,136176,136177],{"className":127064,"code":136116,"language":127066,"meta":50,"style":50},[269,136178,136179,136183,136189,136199,136203,136213],{"__ignoreMap":50},[324,136180,136181],{"class":326,"line":327},[324,136182,136123],{"class":772},[324,136184,136185,136187],{"class":326,"line":203},[324,136186,48],{"class":52022},[324,136188,16301],{"class":867},[324,136190,136191,136193,136195,136197],{"class":326,"line":338},[324,136192,136054],{"class":916},[324,136194,52159],{"class":867},[324,136196,136059],{"class":916},[324,136198,2025],{"class":867},[324,136200,136201],{"class":326,"line":344},[324,136202,136144],{"class":772},[324,136204,136205,136207,136209,136211],{"class":326,"line":484},[324,136206,128680],{"class":916},[324,136208,52159],{"class":867},[324,136210,61591],{"class":916},[324,136212,2025],{"class":867},[324,136214,136215],{"class":326,"line":491},[324,136216,2296],{"class":867},[19,136218,136219],{},"由于后台人员可以操作每行多少字，所以最好从后台出发来实现该功能",[14,136221,136223],{"id":136222},"_133-常见布局技巧","13.3 常见布局技巧",[19,136225,136226],{},[116,136227,136228],{},"巧妙利用一个技术更快更好的布局：",[192,136230,136231,136234,136237,136240],{},[195,136232,136233],{},"margin负值的运用",[195,136235,136236],{},"文字围绕浮动元素",[195,136238,136239],{},"行内块的巧妙运用",[195,136241,136242],{},"CSS三角强化",[35,136244,136246],{"id":136245},"_1331-margin负值的运用","13.3.1 margin负值的运用",[19,136248,136249],{},"应用场景：",[48,136251],{"style":126920,"src":136252},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-099.png",[48,136254],{"style":126920,"src":136255},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-100.png",[19,136257,136258],{},"每个盒子都加边框，第一个的最右侧与第二个的最左侧会进行重合，通过margin负值可以解决该问题",[19,136260,136261],{},"1.让每个盒子margin 往左侧移动 -1px 正好压住相邻盒子边框",[316,136263,136264],{"className":127064,"code":130428,"language":127066,"meta":50,"style":50},[269,136265,136266,136270,136276,136292],{"__ignoreMap":50},[324,136267,136268],{"class":326,"line":327},[324,136269,130435],{"class":772},[324,136271,136272,136274],{"class":326,"line":203},[324,136273,52333],{"class":52022},[324,136275,16301],{"class":867},[324,136277,136278,136280,136282,136284,136286,136288,136290],{"class":326,"line":338},[324,136279,71618],{"class":916},[324,136281,52159],{"class":867},[324,136283,1082],{"class":916},[324,136285,52214],{"class":863},[324,136287,52243],{"class":916},[324,136289,130456],{"class":916},[324,136291,2025],{"class":867},[324,136293,136294],{"class":326,"line":344},[324,136295,2296],{"class":867},[48,136297],{"style":126920,"src":136298},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-101.png",[19,136300,136301],{},"2.鼠标经过某个盒子的时候，提高当前盒子的层级即可（如果没有有定位，则加相对定位（保留位置），如果有定位，则加z-index）",[316,136303,136305],{"className":127064,"code":136304,"language":127066,"meta":50,"style":50},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n.box {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[269,136306,136307,136312,136318,136328,136340,136352],{"__ignoreMap":50},[324,136308,136309],{"class":326,"line":327},[324,136310,136311],{"class":772},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n",[324,136313,136314,136316],{"class":326,"line":203},[324,136315,130912],{"class":734},[324,136317,16301],{"class":867},[324,136319,136320,136322,136324,136326],{"class":326,"line":338},[324,136321,132870],{"class":916},[324,136323,52159],{"class":867},[324,136325,55486],{"class":916},[324,136327,2025],{"class":867},[324,136329,136330,136332,136334,136336,136338],{"class":326,"line":344},[324,136331,132884],{"class":916},[324,136333,52159],{"class":867},[324,136335,1310],{"class":916},[324,136337,52214],{"class":863},[324,136339,2025],{"class":867},[324,136341,136342,136344,136346,136348,136350],{"class":326,"line":484},[324,136343,132901],{"class":916},[324,136345,52159],{"class":867},[324,136347,1564],{"class":916},[324,136349,52214],{"class":863},[324,136351,2025],{"class":867},[324,136353,136354],{"class":326,"line":491},[324,136355,2296],{"class":867},[19,136357,136358],{},"加上上述代码会发现：",[48,136360],{"style":126920,"src":136361},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-102.png",[19,136363,136364],{},"只有最后一个盒子边框显示的全，其他盒子右侧边框显示不全",[19,136366,136367],{},"解决方式1： 加相对定位，可以理解为在保留原位置的同时飞的更高一些了",[316,136369,136370],{"className":127064,"code":136304,"language":127066,"meta":50,"style":50},[269,136371,136372,136376,136382,136392,136404,136416],{"__ignoreMap":50},[324,136373,136374],{"class":326,"line":327},[324,136375,136311],{"class":772},[324,136377,136378,136380],{"class":326,"line":203},[324,136379,130912],{"class":734},[324,136381,16301],{"class":867},[324,136383,136384,136386,136388,136390],{"class":326,"line":338},[324,136385,132870],{"class":916},[324,136387,52159],{"class":867},[324,136389,55486],{"class":916},[324,136391,2025],{"class":867},[324,136393,136394,136396,136398,136400,136402],{"class":326,"line":344},[324,136395,132884],{"class":916},[324,136397,52159],{"class":867},[324,136399,1310],{"class":916},[324,136401,52214],{"class":863},[324,136403,2025],{"class":867},[324,136405,136406,136408,136410,136412,136414],{"class":326,"line":484},[324,136407,132901],{"class":916},[324,136409,52159],{"class":867},[324,136411,1564],{"class":916},[324,136413,52214],{"class":863},[324,136415,2025],{"class":867},[324,136417,136418],{"class":326,"line":491},[324,136419,2296],{"class":867},[19,136421,136422],{},"解决方式2：",[19,136424,136425],{},"父盒子每个都是相对定位的话，用z-index提高层级就可以",[316,136427,136429],{"className":127064,"code":136428,"language":127066,"meta":50,"style":50},"div {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[269,136430,136431,136437,136447,136459,136471],{"__ignoreMap":50},[324,136432,136433,136435],{"class":326,"line":327},[324,136434,52333],{"class":52022},[324,136436,16301],{"class":867},[324,136438,136439,136441,136443,136445],{"class":326,"line":203},[324,136440,132870],{"class":916},[324,136442,52159],{"class":867},[324,136444,55486],{"class":916},[324,136446,2025],{"class":867},[324,136448,136449,136451,136453,136455,136457],{"class":326,"line":338},[324,136450,132884],{"class":916},[324,136452,52159],{"class":867},[324,136454,1310],{"class":916},[324,136456,52214],{"class":863},[324,136458,2025],{"class":867},[324,136460,136461,136463,136465,136467,136469],{"class":326,"line":344},[324,136462,132901],{"class":916},[324,136464,52159],{"class":867},[324,136466,1564],{"class":916},[324,136468,52214],{"class":863},[324,136470,2025],{"class":867},[324,136472,136473],{"class":326,"line":484},[324,136474,2296],{"class":867},[35,136476,136478],{"id":136477},"_1332-文字围绕浮动元素","13.3.2 文字围绕浮动元素",[19,136480,136249],{},[48,136482],{"style":126920,"src":136483},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-103.png",[19,136485,136486],{},"实现结构图：",[48,136488],{"style":126920,"src":136489},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-104.png",[19,136491,136492],{},"巧妙运用浮动元素不会压住文字的特性",[19,136494,136495],{},"代码显示：",[316,136497,136499],{"className":127064,"code":136498,"language":127066,"meta":50,"style":50},".box {\n  float: left;\n}\n```Css\n\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[269,136500,136501,136507,136517,136521,136526,136530,136536,136550],{"__ignoreMap":50},[324,136502,136503,136505],{"class":326,"line":327},[324,136504,130912],{"class":734},[324,136506,16301],{"class":867},[324,136508,136509,136511,136513,136515],{"class":326,"line":203},[324,136510,131544],{"class":916},[324,136512,52159],{"class":867},[324,136514,24463],{"class":916},[324,136516,2025],{"class":867},[324,136518,136519],{"class":326,"line":338},[324,136520,2296],{"class":867},[324,136522,136523],{"class":326,"line":344},[324,136524,136525],{"class":867},"```Css\n",[324,136527,136528],{"class":326,"line":484},[324,136529,130907],{"class":772},[324,136531,136532,136534],{"class":326,"line":491},[324,136533,130912],{"class":734},[324,136535,16301],{"class":867},[324,136537,136538,136540,136542,136544,136546,136548],{"class":326,"line":496},[324,136539,71192],{"class":916},[324,136541,52159],{"class":867},[324,136543,1056],{"class":916},[324,136545,52278],{"class":916},[324,136547,130927],{"class":867},[324,136549,130930],{"class":772},[324,136551,136552],{"class":326,"line":502},[324,136553,2296],{"class":867},[19,136555,136556],{},"div, p, h1, ul, li {\n\u002F* 块级元素：独占一行，可设宽高 *\u002F\ndisplay: block;\n}",[316,136558,136561],{"className":136559,"code":136560,"language":5916},[5914],"\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",[269,136562,136560],{"__ignoreMap":50},[48,136564],{"style":126920,"src":136565},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-108.png",[19,136567,136568],{},"最终展示结果：",[316,136570,136571],{"className":127064,"code":130900,"language":127066,"meta":50,"style":50},[269,136572,136573,136577,136583,136597],{"__ignoreMap":50},[324,136574,136575],{"class":326,"line":327},[324,136576,130907],{"class":772},[324,136578,136579,136581],{"class":326,"line":203},[324,136580,130912],{"class":734},[324,136582,16301],{"class":867},[324,136584,136585,136587,136589,136591,136593,136595],{"class":326,"line":338},[324,136586,71192],{"class":916},[324,136588,52159],{"class":867},[324,136590,1056],{"class":916},[324,136592,52278],{"class":916},[324,136594,130927],{"class":867},[324,136596,130930],{"class":772},[324,136598,136599],{"class":326,"line":344},[324,136600,2296],{"class":867},[48,136602],{"style":126920,"src":136603},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-109.png",[14,136605,136607],{"id":136606},"_134-css-三角强化-案例","13.4 CSS 三角强化 案例",[35,136609,136611],{"id":136610},"_1341-原理","13.4.1 原理",[48,136613],{"style":126920,"src":136614},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-110.png",[316,136616,136617],{"className":127064,"code":130900,"language":127066,"meta":50,"style":50},[269,136618,136619,136623,136629,136643],{"__ignoreMap":50},[324,136620,136621],{"class":326,"line":327},[324,136622,130907],{"class":772},[324,136624,136625,136627],{"class":326,"line":203},[324,136626,130912],{"class":734},[324,136628,16301],{"class":867},[324,136630,136631,136633,136635,136637,136639,136641],{"class":326,"line":338},[324,136632,71192],{"class":916},[324,136634,52159],{"class":867},[324,136636,1056],{"class":916},[324,136638,52278],{"class":916},[324,136640,130927],{"class":867},[324,136642,130930],{"class":772},[324,136644,136645],{"class":326,"line":344},[324,136646,2296],{"class":867},[35,136648,136650],{"id":136649},"_1342-实例","13.4.2 实例",[48,136652],{"style":126920,"src":136653},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-111.png",[316,136655,136656],{"className":127064,"code":131530,"language":127066,"meta":50,"style":50},[269,136657,136658,136664,136674,136678,136684,136694],{"__ignoreMap":50},[324,136659,136660,136662],{"class":326,"line":327},[324,136661,131537],{"class":734},[324,136663,16301],{"class":867},[324,136665,136666,136668,136670,136672],{"class":326,"line":203},[324,136667,131544],{"class":916},[324,136669,52159],{"class":867},[324,136671,24463],{"class":916},[324,136673,2025],{"class":867},[324,136675,136676],{"class":326,"line":338},[324,136677,2296],{"class":867},[324,136679,136680,136682],{"class":326,"line":344},[324,136681,131559],{"class":734},[324,136683,16301],{"class":867},[324,136685,136686,136688,136690,136692],{"class":326,"line":484},[324,136687,131544],{"class":916},[324,136689,52159],{"class":867},[324,136691,73244],{"class":916},[324,136693,2025],{"class":867},[324,136695,136696],{"class":326,"line":491},[324,136697,2296],{"class":867},[14,136699,136701],{"id":136700},"_135-css的初始化","13.5 css的初始化",[19,136703,136704],{},"不同浏览器对有些标签的默认值是不同的，为了消除不同浏览器对HTML文本呈现的差异，照顾浏览器的兼容，我们需要对CSS 初始化",[19,136706,136707],{},"简单理解： CSS初始化是指重设浏览器的样式。 (也称为CSS reset）",[19,136709,136710],{},"每个网页都必须首先进行 CSS初始化。",[19,136712,136713],{},"这里我们以 京东CSS初始化代码为例。",[19,136715,136716],{},"在网页右键查看网页源代码",[19,136718,136719],{},"找到css的link引入语句",[19,136721,136722],{},"然后ctrl+f 输入body",[19,136724,77948],{},[48,136726],{"style":126920,"src":136727},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-112.png",[19,136729,77971],{},[48,136731],{"style":126920,"src":136732},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-113.png",[19,136734,136735],{},"③打开了网页上传压缩的代码",[48,136737],{"style":126920,"src":136738},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-114.png",[19,136740,136741],{},"④从body前可以查看这个网页的初始化代码",[19,136743,136744],{},[116,136745,136746],{},"Unicode编码字体：",[19,136748,136749],{},"把中文字体的名称用相应的Unicode编码来代替，这样就可以有效的避免浏览器解释CSS代码时候出现乱码的问题。",[19,136751,83929],{},[19,136753,136754],{},"黑体 \\9ED1\\4F53",[19,136756,136757],{},"宋体 \\5B8B\\4F53",[19,136759,136760],{},"微软雅黑 \\5FAE\\8F6F\\96C5\\9ED1",[775,136762,136763],{},"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":50,"searchDepth":203,"depth":203,"links":136765},[136766,136767,136774,136778,136782],{"id":135563,"depth":203,"text":135564},{"id":135685,"depth":203,"text":135686,"children":136768},[136769,136770,136771,136772,136773],{"id":135689,"depth":338,"text":135690},{"id":135842,"depth":338,"text":135843},{"id":135961,"depth":338,"text":135962},{"id":136103,"depth":338,"text":136104},{"id":136161,"depth":338,"text":136162},{"id":136222,"depth":203,"text":136223,"children":136775},[136776,136777],{"id":136245,"depth":338,"text":136246},{"id":136477,"depth":338,"text":136478},{"id":136606,"depth":203,"text":136607,"children":136779},[136780,136781],{"id":136610,"depth":338,"text":136611},{"id":136649,"depth":338,"text":136650},{"id":136700,"depth":203,"text":136701},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch13",{"title":135555,"description":791},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧","1U_cCgoCgAuImhvNFSJfV4PAZyUz5cp-t86rdHeziCk",{"id":136789,"title":136790,"body":136791,"description":791,"extension":792,"meta":138477,"navigation":487,"path":138478,"seo":138479,"stem":138480,"__hash__":138481},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性.md","14. HTML5与CSS3新特性",{"type":7,"value":136792,"toc":138466},[136793,136796,136800,136804,136807,136814,136817,136820,136858,136861,136863,136877,136881,136890,136894,136899,136902,136905,136908,136943,136948,136951,136981,136984,136989,136992,136995,137025,137028,137082,137085,137089,137094,137106,137109,137113,137143,137146,137151,137154,137184,137187,137191,137208,137212,137216,137219,137252,137255,137259,137262,137265,137268,137271,137274,137385,137388,137391,137394,137496,137499,137503,137507,137511,137514,137554,137557,137559,137575,137579,137582,137587,137668,137671,137674,137800,137805,137808,137816,137819,137824,137909,137912,137916,137919,137922,137926,137946,137951,138035,138038,138043,138046,138049,138127,138130,138133,138136,138139,138142,138147,138150,138153,138225,138228,138233,138236,138333,138336,138342,138345,138348,138351,138354,138357,138360,138363,138366,138370,138375,138378,138411,138416,138419,138460,138463],[10,136794,136790],{"id":136795},"_14-html5与css3新特性",[14,136797,136799],{"id":136798},"_141-html5的新特性","14.1 HTML5的新特性",[35,136801,136803],{"id":136802},"_1411-基本标签","14.1.1 基本标签",[19,136805,136806],{},"HTML5 的新增特性主要是针对于以前的不足，增加了一些新的标签、新的表单和新的表单属性等",[19,136808,136809,136810,136813],{},"这些新特性都有兼容性问题，基本是 ",[116,136811,136812],{},"IE9+ 以上版本的浏览器"," 才支持，如果不考虑兼容性问题，可以大量使用这些新特性",[19,136815,136816],{},"以前布局，我们基本用 div 来做。div 对于搜索引擎来说，是没有语义的",[19,136818,136819],{},"现在使用的是新特性：",[1871,136821,136822,136828,136834,136840,136846,136852],{},[195,136823,136824,136827],{},[269,136825,136826],{},"\u003Cheader>"," 头部标签",[195,136829,136830,136833],{},[269,136831,136832],{},"\u003Cnav>"," 导航标签",[195,136835,136836,136839],{},[269,136837,136838],{},"\u003Carticle>"," 内容标签",[195,136841,136842,136845],{},[269,136843,136844],{},"\u003Csection>"," 定义文档某个区域",[195,136847,136848,136851],{},[269,136849,136850],{},"\u003Caside>"," 侧边栏标签",[195,136853,136854,136857],{},[269,136855,136856],{},"\u003Cfooter>"," 尾部标签",[48,136859],{"style":126920,"src":136860},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-115.png",[19,136862,897],{},[1871,136864,136865,136868,136871,136874],{},[195,136866,136867],{},"这种语义化标准主要是针对搜索引擎的",[195,136869,136870],{},"这些标签页面中可以经常使用",[195,136872,136873],{},"在IE9中，需要把这些元素转换为块级元素",[195,136875,136876],{},"移动端更喜欢使用这些标签",[35,136878,136880],{"id":136879},"_1412-多媒体标签","14.1.2 多媒体标签",[19,136882,136883,136884,136886,136887,136889],{},"音频 ",[116,136885,28896],{}," 和视频 ",[116,136888,28905],{}," 两个标签",[151,136891,136893],{"id":136892},"_14121-视频标签-video","14.1.2.1 视频标签- video",[192,136895,136896],{},[195,136897,136898],{},"支持格式：",[48,136900],{"style":126920,"src":136901},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-116.png",[19,136903,136904],{},"尽量使用MP4，兼容性好",[19,136906,136907],{},"用MP4就可以",[316,136909,136911],{"className":127811,"code":136910,"language":127813,"meta":50,"style":50},"\u003Cvideo src=\"movie.mp4\" controls autoplay muted loop>\u003C\u002Fvideo>\n",[269,136912,136913],{"__ignoreMap":50},[324,136914,136915,136917,136919,136921,136923,136926,136928,136931,136934,136937,136939,136941],{"class":326,"line":327},[324,136916,1774],{"class":867},[324,136918,28905],{"class":52022},[324,136920,55961],{"class":734},[324,136922,913],{"class":867},[324,136924,136925],{"class":738},"\"movie.mp4\"",[324,136927,93145],{"class":734},[324,136929,136930],{"class":734}," autoplay",[324,136932,136933],{"class":734}," muted",[324,136935,136936],{"class":734}," loop",[324,136938,56036],{"class":867},[324,136940,28905],{"class":52022},[324,136942,52029],{"class":867},[192,136944,136945],{"start":203},[195,136946,136947],{},"兼容写法",[19,136949,136950],{},"由于各个浏览器的支持情况不同，所以我们会有一种兼容性的写法，这种写法了解一下即可",[316,136952,136953],{"className":127811,"code":136910,"language":127813,"meta":50,"style":50},[269,136954,136955],{"__ignoreMap":50},[324,136956,136957,136959,136961,136963,136965,136967,136969,136971,136973,136975,136977,136979],{"class":326,"line":327},[324,136958,1774],{"class":867},[324,136960,28905],{"class":52022},[324,136962,55961],{"class":734},[324,136964,913],{"class":867},[324,136966,136925],{"class":738},[324,136968,93145],{"class":734},[324,136970,136930],{"class":734},[324,136972,136933],{"class":734},[324,136974,136936],{"class":734},[324,136976,56036],{"class":867},[324,136978,28905],{"class":52022},[324,136980,52029],{"class":867},[19,136982,136983],{},"面这种写法，浏览器会匹配video标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[192,136985,136986],{"start":338},[195,136987,136988],{},"video常用属性",[48,136990],{"style":126920,"src":136991},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-117.png",[19,136993,136994],{},"poster属性后面是跟的等待加载图片的地址",[316,136996,136997],{"className":127811,"code":134566,"language":127813,"meta":50,"style":50},[269,136998,136999],{"__ignoreMap":50},[324,137000,137001,137003,137005,137007,137009,137011,137013,137015,137017,137019,137021,137023],{"class":326,"line":327},[324,137002,1774],{"class":867},[324,137004,48],{"class":52022},[324,137006,55961],{"class":734},[324,137008,913],{"class":867},[324,137010,134581],{"class":738},[324,137012,55969],{"class":734},[324,137014,913],{"class":867},[324,137016,134588],{"class":738},[324,137018,134591],{"class":734},[324,137020,913],{"class":867},[324,137022,134596],{"class":738},[324,137024,52029],{"class":867},[19,137026,137027],{},"谷歌浏览器为了避免移动端自动播放视频导致消耗较大的流量问题，对自动播放进行了禁用，解决方式：",[316,137029,137031],{"className":127064,"code":137030,"language":127066,"meta":50,"style":50},"\u002F* 2D 位移 *\u002F\ndiv {\n  transform: translate(100px, 50px);\n  \u002F* transform: translateX(100px);  仅水平 *\u002F\n  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n}\n",[269,137032,137033,137038,137044,137068,137073,137078],{"__ignoreMap":50},[324,137034,137035],{"class":326,"line":327},[324,137036,137037],{"class":772},"\u002F* 2D 位移 *\u002F\n",[324,137039,137040,137042],{"class":326,"line":203},[324,137041,52333],{"class":52022},[324,137043,16301],{"class":867},[324,137045,137046,137049,137051,137054,137056,137058,137060,137062,137064,137066],{"class":326,"line":338},[324,137047,137048],{"class":916},"  transform",[324,137050,52159],{"class":867},[324,137052,137053],{"class":916},"translate",[324,137055,868],{"class":867},[324,137057,1175],{"class":916},[324,137059,52214],{"class":863},[324,137061,13164],{"class":867},[324,137063,1520],{"class":916},[324,137065,52214],{"class":863},[324,137067,3448],{"class":867},[324,137069,137070],{"class":326,"line":344},[324,137071,137072],{"class":772},"  \u002F* transform: translateX(100px);  仅水平 *\u002F\n",[324,137074,137075],{"class":326,"line":484},[324,137076,137077],{"class":772},"  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n",[324,137079,137080],{"class":326,"line":491},[324,137081,2296],{"class":867},[19,137083,137084],{},"muted:自动静音属性",[151,137086,137088],{"id":137087},"_14122-音频标签audio","14.1.2.2 音频标签audio",[192,137090,137091],{},[195,137092,137093],{},"基本使用",[19,137095,137096,137097,137102,137103],{},"当前 ",[116,137098,137099],{},[269,137100,137101],{},"\u003Caudio>"," 元素支持三种视频格式： 尽量使用 ",[116,137104,137105],{},"mp3格式",[48,137107],{"style":126920,"src":137108},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-118.png",[192,137110,137111],{"start":203},[195,137112,136947],{},[316,137114,137115],{"className":127811,"code":136910,"language":127813,"meta":50,"style":50},[269,137116,137117],{"__ignoreMap":50},[324,137118,137119,137121,137123,137125,137127,137129,137131,137133,137135,137137,137139,137141],{"class":326,"line":327},[324,137120,1774],{"class":867},[324,137122,28905],{"class":52022},[324,137124,55961],{"class":734},[324,137126,913],{"class":867},[324,137128,136925],{"class":738},[324,137130,93145],{"class":734},[324,137132,136930],{"class":734},[324,137134,136933],{"class":734},[324,137136,136936],{"class":734},[324,137138,56036],{"class":867},[324,137140,28905],{"class":52022},[324,137142,52029],{"class":867},[19,137144,137145],{},"上面这种写法，浏览器会匹配audio标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[192,137147,137148],{"start":338},[195,137149,137150],{},"常用属性",[48,137152],{"style":126920,"src":137153},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-119.png",[316,137155,137156],{"className":127811,"code":136910,"language":127813,"meta":50,"style":50},[269,137157,137158],{"__ignoreMap":50},[324,137159,137160,137162,137164,137166,137168,137170,137172,137174,137176,137178,137180,137182],{"class":326,"line":327},[324,137161,1774],{"class":867},[324,137163,28905],{"class":52022},[324,137165,55961],{"class":734},[324,137167,913],{"class":867},[324,137169,136925],{"class":738},[324,137171,93145],{"class":734},[324,137173,136930],{"class":734},[324,137175,136933],{"class":734},[324,137177,136936],{"class":734},[324,137179,56036],{"class":867},[324,137181,28905],{"class":52022},[324,137183,52029],{"class":867},[19,137185,137186],{},"谷歌也把音频的自动播放功能给禁用了：只能通过js来解决",[151,137188,137190],{"id":137189},"_14123-总结","14.1.2.3 总结",[1871,137192,137193,137196,137199,137202,137205],{},[195,137194,137195],{},"音频标签和视频标签使用方式基本一致",[195,137197,137198],{},"浏览器支持情况不同",[195,137200,137201],{},"谷歌浏览器把音频和视频自动播放禁止了",[195,137203,137204],{},"我们可以给视频标签添加 muted 属性来静音播放视频，音频不可以（可以通过JavaScript解决）",[195,137206,137207],{},"视频标签是重点，我们经常设置自动播放，不使用 controls 控件，循环和设置大小属性",[35,137209,137211],{"id":137210},"_1413-表单元素","14.1.3 表单元素",[151,137213,137215],{"id":137214},"_14131-html5新增input类型","14.1.3.1 HTML5新增input类型",[48,137217],{"style":126920,"src":137218},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-120.png",[316,137220,137222],{"className":127811,"code":137221,"language":127813,"meta":50,"style":50},"\u003Cinput type=\"text\" name=\"username\" placeholder=\"请输入用户名\">\n",[269,137223,137224],{"__ignoreMap":50},[324,137225,137226,137228,137230,137232,137234,137236,137238,137240,137243,137245,137247,137250],{"class":326,"line":327},[324,137227,1774],{"class":867},[324,137229,54543],{"class":52022},[324,137231,54546],{"class":734},[324,137233,913],{"class":867},[324,137235,63421],{"class":738},[324,137237,15649],{"class":734},[324,137239,913],{"class":867},[324,137241,137242],{"class":738},"\"username\"",[324,137244,61742],{"class":734},[324,137246,913],{"class":867},[324,137248,137249],{"class":738},"\"请输入用户名\"",[324,137251,52029],{"class":867},[48,137253],{"style":126920,"src":137254},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-121.png",[151,137256,137258],{"id":137257},"_14132-html5新增表单属性","14.1.3.2 HTML5新增表单属性",[48,137260],{"style":126920,"src":137261},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-122.png",[19,137263,137264],{},"使用autocomplete时需要给name值，可以理解为name就是用于连接服务器的",[19,137266,137267],{},"快捷操作：",[48,137269],{"style":126920,"src":137270},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-123.png",[19,137272,137273],{},"例子1：",[316,137275,137277],{"className":127811,"code":137276,"language":127813,"meta":50,"style":50},"\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",[269,137278,137279,137302,137329,137358,137377],{"__ignoreMap":50},[324,137280,137281,137283,137285,137287,137289,137292,137295,137297,137300],{"class":326,"line":327},[324,137282,1774],{"class":867},[324,137284,67347],{"class":52022},[324,137286,67350],{"class":734},[324,137288,913],{"class":867},[324,137290,137291],{"class":738},"\"\u002Fsubmit\"",[324,137293,137294],{"class":734}," method",[324,137296,913],{"class":867},[324,137298,137299],{"class":738},"\"post\"",[324,137301,52029],{"class":867},[324,137303,137304,137306,137308,137310,137312,137314,137316,137318,137320,137322,137324,137327],{"class":326,"line":203},[324,137305,52866],{"class":867},[324,137307,54543],{"class":52022},[324,137309,54546],{"class":734},[324,137311,913],{"class":867},[324,137313,63421],{"class":738},[324,137315,15649],{"class":734},[324,137317,913],{"class":867},[324,137319,137242],{"class":738},[324,137321,61742],{"class":734},[324,137323,913],{"class":867},[324,137325,137326],{"class":738},"\"用户名\"",[324,137328,52029],{"class":867},[324,137330,137331,137333,137335,137337,137339,137342,137344,137346,137349,137351,137353,137356],{"class":326,"line":338},[324,137332,52866],{"class":867},[324,137334,54543],{"class":52022},[324,137336,54546],{"class":734},[324,137338,913],{"class":867},[324,137340,137341],{"class":738},"\"password\"",[324,137343,15649],{"class":734},[324,137345,913],{"class":867},[324,137347,137348],{"class":738},"\"pwd\"",[324,137350,61742],{"class":734},[324,137352,913],{"class":867},[324,137354,137355],{"class":738},"\"密码\"",[324,137357,52029],{"class":867},[324,137359,137360,137362,137364,137366,137368,137370,137373,137375],{"class":326,"line":344},[324,137361,52866],{"class":867},[324,137363,54609],{"class":52022},[324,137365,54546],{"class":734},[324,137367,913],{"class":867},[324,137369,67370],{"class":738},[324,137371,137372],{"class":867},">提交\u003C\u002F",[324,137374,54609],{"class":52022},[324,137376,52029],{"class":867},[324,137378,137379,137381,137383],{"class":326,"line":484},[324,137380,52507],{"class":867},[324,137382,67347],{"class":52022},[324,137384,52029],{"class":867},[48,137386],{"style":126920,"src":137387},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-124.png",[19,137389,137390],{},"value是表单域的内容",[19,137392,137393],{},"例子2：",[316,137395,137396],{"className":127811,"code":137276,"language":127813,"meta":50,"style":50},[269,137397,137398,137418,137444,137470,137488],{"__ignoreMap":50},[324,137399,137400,137402,137404,137406,137408,137410,137412,137414,137416],{"class":326,"line":327},[324,137401,1774],{"class":867},[324,137403,67347],{"class":52022},[324,137405,67350],{"class":734},[324,137407,913],{"class":867},[324,137409,137291],{"class":738},[324,137411,137294],{"class":734},[324,137413,913],{"class":867},[324,137415,137299],{"class":738},[324,137417,52029],{"class":867},[324,137419,137420,137422,137424,137426,137428,137430,137432,137434,137436,137438,137440,137442],{"class":326,"line":203},[324,137421,52866],{"class":867},[324,137423,54543],{"class":52022},[324,137425,54546],{"class":734},[324,137427,913],{"class":867},[324,137429,63421],{"class":738},[324,137431,15649],{"class":734},[324,137433,913],{"class":867},[324,137435,137242],{"class":738},[324,137437,61742],{"class":734},[324,137439,913],{"class":867},[324,137441,137326],{"class":738},[324,137443,52029],{"class":867},[324,137445,137446,137448,137450,137452,137454,137456,137458,137460,137462,137464,137466,137468],{"class":326,"line":338},[324,137447,52866],{"class":867},[324,137449,54543],{"class":52022},[324,137451,54546],{"class":734},[324,137453,913],{"class":867},[324,137455,137341],{"class":738},[324,137457,15649],{"class":734},[324,137459,913],{"class":867},[324,137461,137348],{"class":738},[324,137463,61742],{"class":734},[324,137465,913],{"class":867},[324,137467,137355],{"class":738},[324,137469,52029],{"class":867},[324,137471,137472,137474,137476,137478,137480,137482,137484,137486],{"class":326,"line":344},[324,137473,52866],{"class":867},[324,137475,54609],{"class":52022},[324,137477,54546],{"class":734},[324,137479,913],{"class":867},[324,137481,67370],{"class":738},[324,137483,137372],{"class":867},[324,137485,54609],{"class":52022},[324,137487,52029],{"class":867},[324,137489,137490,137492,137494],{"class":326,"line":484},[324,137491,52507],{"class":867},[324,137493,67347],{"class":52022},[324,137495,52029],{"class":867},[48,137497],{"style":126920,"src":137498},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-125.png",[14,137500,137502],{"id":137501},"_142-css新特性","14.2 CSS新特性",[35,137504,137506],{"id":137505},"_1421-新增选择器","14.2.1 新增选择器",[151,137508,137510],{"id":137509},"_14211-属性选择器","14.2.1.1 属性选择器",[48,137512],{"style":126920,"src":137513},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-126.png",[316,137515,137517],{"className":127064,"code":137516,"language":127066,"meta":50,"style":50},"input[type=\"text\"] {\n  border: 1px solid #999;\n}\n",[269,137518,137519,137534,137550],{"__ignoreMap":50},[324,137520,137521,137523,137525,137527,137529,137531],{"class":326,"line":327},[324,137522,54543],{"class":52022},[324,137524,1754],{"class":867},[324,137526,103828],{"class":734},[324,137528,913],{"class":863},[324,137530,63421],{"class":738},[324,137532,137533],{"class":867},"] {\n",[324,137535,137536,137538,137540,137542,137544,137546,137548],{"class":326,"line":203},[324,137537,71618],{"class":916},[324,137539,52159],{"class":867},[324,137541,1082],{"class":916},[324,137543,52214],{"class":863},[324,137545,52243],{"class":916},[324,137547,130644],{"class":916},[324,137549,2025],{"class":867},[324,137551,137552],{"class":326,"line":338},[324,137553,2296],{"class":867},[48,137555],{"style":126920,"src":137556},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-127.png",[19,137558,897],{},[1871,137560,137561,137564,137567,137570],{},[195,137562,137563],{},"属性选择器，按照字面意思，都是根据标签中的属性来选择元素",[195,137565,137566],{},"属性选择器可以根据元素特定属性的来选择元素。 这样就可以不用借助于类或者id选择器",[195,137568,137569],{},"属性选择器也可以选择出来自定义的属性",[195,137571,137572,137574],{},[116,137573,9754],{}," 类选择器、属性选择器、伪类选择器，权重为 10",[151,137576,137578],{"id":137577},"_14212-结构伪类选择器","14.2.1.2 结构伪类选择器",[48,137580],{"style":126920,"src":137581},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-128.png",[192,137583,137584],{},[195,137585,137586],{},"fist-child",[316,137588,137590],{"className":127064,"code":137589,"language":127066,"meta":50,"style":50},"\u002F* 属性选择器 *\u002F\ninput[type=\"text\"] { }\ninput[class^=\"icon\"] { }  \u002F* 以 icon 开头 *\u002F\ninput[class$=\"icon\"] { }  \u002F* 以 icon 结尾 *\u002F\ninput[class*=\"icon\"] { }  \u002F* 包含 icon *\u002F\n",[269,137591,137592,137597,137612,137632,137650],{"__ignoreMap":50},[324,137593,137594],{"class":326,"line":327},[324,137595,137596],{"class":772},"\u002F* 属性选择器 *\u002F\n",[324,137598,137599,137601,137603,137605,137607,137609],{"class":326,"line":203},[324,137600,54543],{"class":52022},[324,137602,1754],{"class":867},[324,137604,103828],{"class":734},[324,137606,913],{"class":863},[324,137608,63421],{"class":738},[324,137610,137611],{"class":867},"] { }\n",[324,137613,137614,137616,137618,137620,137623,137626,137629],{"class":326,"line":338},[324,137615,54543],{"class":52022},[324,137617,1754],{"class":867},[324,137619,15423],{"class":734},[324,137621,137622],{"class":863},"^=",[324,137624,137625],{"class":738},"\"icon\"",[324,137627,137628],{"class":867},"] { }  ",[324,137630,137631],{"class":772},"\u002F* 以 icon 开头 *\u002F\n",[324,137633,137634,137636,137638,137640,137643,137645,137647],{"class":326,"line":344},[324,137635,54543],{"class":52022},[324,137637,1754],{"class":867},[324,137639,15423],{"class":734},[324,137641,137642],{"class":863},"$=",[324,137644,137625],{"class":738},[324,137646,137628],{"class":867},[324,137648,137649],{"class":772},"\u002F* 以 icon 结尾 *\u002F\n",[324,137651,137652,137654,137656,137658,137661,137663,137665],{"class":326,"line":484},[324,137653,54543],{"class":52022},[324,137655,1754],{"class":867},[324,137657,15423],{"class":734},[324,137659,137660],{"class":863},"*=",[324,137662,137625],{"class":738},[324,137664,137628],{"class":867},[324,137666,137667],{"class":772},"\u002F* 包含 icon *\u002F\n",[19,137669,137670],{},"ul的第一个儿子文本为红色",[19,137672,137673],{},"一定要在冒号前加空格，不然就是选中所有的了",[316,137675,137677],{"className":127064,"code":137676,"language":127066,"meta":50,"style":50},".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",[269,137678,137679,137685,137695,137699,137703,137708,137721,137734,137750,137767,137784],{"__ignoreMap":50},[324,137680,137681,137683],{"class":326,"line":327},[324,137682,127355],{"class":734},[324,137684,16301],{"class":867},[324,137686,137687,137689,137691,137693],{"class":326,"line":203},[324,137688,71627],{"class":916},[324,137690,52159],{"class":867},[324,137692,58143],{"class":916},[324,137694,2025],{"class":867},[324,137696,137697],{"class":326,"line":338},[324,137698,2296],{"class":867},[324,137700,137701],{"class":326,"line":344},[324,137702,136525],{"class":867},[324,137704,137705],{"class":326,"line":484},[324,137706,137707],{"class":772},"\u002F* 结构伪类选择器 *\u002F\n",[324,137709,137710,137712,137715,137718],{"class":326,"line":491},[324,137711,195],{"class":52022},[324,137713,137714],{"class":734},":first-child",[324,137716,137717],{"class":867}," { }           ",[324,137719,137720],{"class":772},"\u002F* 第一个 *\u002F\n",[324,137722,137723,137725,137728,137731],{"class":326,"line":496},[324,137724,195],{"class":52022},[324,137726,137727],{"class":734},":last-child",[324,137729,137730],{"class":867}," { }            ",[324,137732,137733],{"class":772},"\u002F* 最后一个 *\u002F\n",[324,137735,137736,137738,137740,137742,137744,137747],{"class":326,"line":502},[324,137737,195],{"class":52022},[324,137739,129978],{"class":734},[324,137741,868],{"class":867},[324,137743,944],{"class":916},[324,137745,137746],{"class":867},") { }          ",[324,137748,137749],{"class":772},"\u002F* 第2个 *\u002F\n",[324,137751,137752,137754,137756,137758,137761,137764],{"class":326,"line":508},[324,137753,195],{"class":52022},[324,137755,129978],{"class":734},[324,137757,868],{"class":867},[324,137759,137760],{"class":916},"2n",[324,137762,137763],{"class":867},") { }         ",[324,137765,137766],{"class":772},"\u002F* 偶数 *\u002F\n",[324,137768,137769,137771,137773,137775,137778,137781],{"class":326,"line":514},[324,137770,195],{"class":52022},[324,137772,129978],{"class":734},[324,137774,868],{"class":867},[324,137776,137777],{"class":916},"2n+1",[324,137779,137780],{"class":867},") { }       ",[324,137782,137783],{"class":772},"\u002F* 奇数 *\u002F\n",[324,137785,137786,137788,137790,137792,137795,137797],{"class":326,"line":2343},[324,137787,195],{"class":52022},[324,137789,129978],{"class":734},[324,137791,868],{"class":867},[324,137793,137794],{"class":916},"-n+3",[324,137796,137780],{"class":867},[324,137798,137799],{"class":772},"\u002F* 前3个 *\u002F\n",[52333,137801,137804],{"className":137802},[137803],"example","\n  示例内容\n",[19,137806,137807],{},"此时有1会执行操作，确定为第一个孩子:光头强，但是它是p标签，然后接着与前边进行匹配，前面是div与p是不匹配的，所以此时是不输出任何结果的，不会使第一个孩子的背景变为蓝色",[1871,137809,137810],{},[195,137811,137812,137815],{},[269,137813,137814],{},"E:nth-of-type(n)"," 匹配同类型中的第n个同级兄弟元素E，也就是说，对父元素里面指定子元素进行排序选择。 先去匹配E ，然后再根据E 找第n个孩子",[19,137817,137818],{},"也就是说它选择的是熊大",[192,137820,137821],{"start":491},[195,137822,137823],{},"权重",[316,137825,137827],{"className":127064,"code":137826,"language":127066,"meta":50,"style":50},"\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",[269,137828,137829,137833,137843,137853,137867,137881,137895],{"__ignoreMap":50},[324,137830,137831],{"class":326,"line":327},[324,137832,137707],{"class":772},[324,137834,137835,137837,137839,137841],{"class":326,"line":203},[324,137836,195],{"class":52022},[324,137838,137714],{"class":734},[324,137840,137717],{"class":867},[324,137842,137720],{"class":772},[324,137844,137845,137847,137849,137851],{"class":326,"line":338},[324,137846,195],{"class":52022},[324,137848,137727],{"class":734},[324,137850,137730],{"class":867},[324,137852,137733],{"class":772},[324,137854,137855,137857,137859,137861,137863,137865],{"class":326,"line":344},[324,137856,195],{"class":52022},[324,137858,129978],{"class":734},[324,137860,868],{"class":867},[324,137862,944],{"class":916},[324,137864,137746],{"class":867},[324,137866,137749],{"class":772},[324,137868,137869,137871,137873,137875,137877,137879],{"class":326,"line":484},[324,137870,195],{"class":52022},[324,137872,129978],{"class":734},[324,137874,868],{"class":867},[324,137876,137760],{"class":916},[324,137878,137763],{"class":867},[324,137880,137766],{"class":772},[324,137882,137883,137885,137887,137889,137891,137893],{"class":326,"line":491},[324,137884,195],{"class":52022},[324,137886,129978],{"class":734},[324,137888,868],{"class":867},[324,137890,137777],{"class":916},[324,137892,137780],{"class":867},[324,137894,137783],{"class":772},[324,137896,137897,137899,137901,137903,137905,137907],{"class":326,"line":496},[324,137898,195],{"class":52022},[324,137900,129978],{"class":734},[324,137902,868],{"class":867},[324,137904,137794],{"class":916},[324,137906,137780],{"class":867},[324,137908,137799],{"class":772},[19,137910,137911],{},"这个的权重为12，:nth-of-type(1)为结构伪类选择器，权重为10，div为标签选择器为1，section也为标签选择器权重也为1,也就是上述总权重为12",[151,137913,137915],{"id":137914},"_14213-伪元素选择器","14.2.1.3 伪元素选择器",[19,137917,137918],{},"伪元素选择器可以帮助我们利用CSS创建新标签元素，而不需要HTML标签，从而简化HTML结构",[48,137920],{"style":126920,"src":137921},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-130.png",[192,137923,137924],{},[195,137925,897],{},[1871,137927,137928,137931,137934,137937,137940,137943],{},[195,137929,137930],{},"before 和 after 创建一个元素，但是属于行内元素（也就是宽高不起作用，需要转换模式才会起作用）",[195,137932,137933],{},"新创建的这个元素在文档树中是找不到的（在网页F12中查看文档树），找不到这个盒子，所以我们称为伪元素",[195,137935,137936],{},"语法： element::before {}",[195,137938,137939],{},"before 和 after 必须有 content 属性",[195,137941,137942],{},"before 在父元素内容里面的前面创建元素，after 在父元素内容里面的后面插入元素，内容是放到中间的，不会影响本身的内容",[195,137944,137945],{},"伪元素选择器和标签选择器一样，权重为 1",[192,137947,137948],{"start":203},[195,137949,137950],{},"实例",[316,137952,137953],{"className":127064,"code":137826,"language":127066,"meta":50,"style":50},[269,137954,137955,137959,137969,137979,137993,138007,138021],{"__ignoreMap":50},[324,137956,137957],{"class":326,"line":327},[324,137958,137707],{"class":772},[324,137960,137961,137963,137965,137967],{"class":326,"line":203},[324,137962,195],{"class":52022},[324,137964,137714],{"class":734},[324,137966,137717],{"class":867},[324,137968,137720],{"class":772},[324,137970,137971,137973,137975,137977],{"class":326,"line":338},[324,137972,195],{"class":52022},[324,137974,137727],{"class":734},[324,137976,137730],{"class":867},[324,137978,137733],{"class":772},[324,137980,137981,137983,137985,137987,137989,137991],{"class":326,"line":344},[324,137982,195],{"class":52022},[324,137984,129978],{"class":734},[324,137986,868],{"class":867},[324,137988,944],{"class":916},[324,137990,137746],{"class":867},[324,137992,137749],{"class":772},[324,137994,137995,137997,137999,138001,138003,138005],{"class":326,"line":484},[324,137996,195],{"class":52022},[324,137998,129978],{"class":734},[324,138000,868],{"class":867},[324,138002,137760],{"class":916},[324,138004,137763],{"class":867},[324,138006,137766],{"class":772},[324,138008,138009,138011,138013,138015,138017,138019],{"class":326,"line":491},[324,138010,195],{"class":52022},[324,138012,129978],{"class":734},[324,138014,868],{"class":867},[324,138016,137777],{"class":916},[324,138018,137780],{"class":867},[324,138020,137783],{"class":772},[324,138022,138023,138025,138027,138029,138031,138033],{"class":326,"line":496},[324,138024,195],{"class":52022},[324,138026,129978],{"class":734},[324,138028,868],{"class":867},[324,138030,137794],{"class":916},[324,138032,137780],{"class":867},[324,138034,137799],{"class":772},[48,138036],{"style":126920,"src":138037},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-131.png",[192,138039,138040],{"start":338},[195,138041,138042],{},"使用场景1",[48,138044],{"style":126920,"src":138045},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-132.png",[19,138047,138048],{},"不需要再加盒子来整红色那部分了",[316,138050,138052],{"className":127064,"code":138051,"language":127066,"meta":50,"style":50},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\ndiv::before {\n  content: \"\";\n  display: block;\n}\ndiv::after {\n  content: \"→\";\n  color: #999;\n}\n",[269,138053,138054,138059,138068,138079,138089,138093,138102,138113,138123],{"__ignoreMap":50},[324,138055,138056],{"class":326,"line":327},[324,138057,138058],{"class":772},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\n",[324,138060,138061,138063,138066],{"class":326,"line":203},[324,138062,52333],{"class":52022},[324,138064,138065],{"class":734},"::before",[324,138067,16301],{"class":867},[324,138069,138070,138073,138075,138077],{"class":326,"line":338},[324,138071,138072],{"class":916},"  content",[324,138074,52159],{"class":867},[324,138076,8381],{"class":738},[324,138078,2025],{"class":867},[324,138080,138081,138083,138085,138087],{"class":326,"line":344},[324,138082,128680],{"class":916},[324,138084,52159],{"class":867},[324,138086,61591],{"class":916},[324,138088,2025],{"class":867},[324,138090,138091],{"class":326,"line":484},[324,138092,2296],{"class":867},[324,138094,138095,138097,138100],{"class":326,"line":491},[324,138096,52333],{"class":52022},[324,138098,138099],{"class":734},"::after",[324,138101,16301],{"class":867},[324,138103,138104,138106,138108,138111],{"class":326,"line":496},[324,138105,138072],{"class":916},[324,138107,52159],{"class":867},[324,138109,138110],{"class":738},"\"→\"",[324,138112,2025],{"class":867},[324,138114,138115,138117,138119,138121],{"class":326,"line":502},[324,138116,71627],{"class":916},[324,138118,52159],{"class":867},[324,138120,62792],{"class":916},[324,138122,2025],{"class":867},[324,138124,138125],{"class":326,"line":508},[324,138126,2296],{"class":867},[48,138128],{"style":126920,"src":138129},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-133.png",[19,138131,138132],{},"如果使用字体图标时可以不复制后边的矩形框，复制前边的数字也是可以的",[48,138134],{"style":126920,"src":138135},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-134.png",[19,138137,138138],{},"但是在引用时需要先转义一下",[19,138140,138141],{},"content='\\e930'",[192,138143,138144],{"start":344},[195,138145,138146],{},"使用场景2",[19,138148,138149],{},"仿土豆效果",[19,138151,138152],{},"通过使用伪元素选择器可以减少body中盒子的数量",[316,138154,138155],{"className":127064,"code":138051,"language":127066,"meta":50,"style":50},[269,138156,138157,138161,138169,138179,138189,138193,138201,138211,138221],{"__ignoreMap":50},[324,138158,138159],{"class":326,"line":327},[324,138160,138058],{"class":772},[324,138162,138163,138165,138167],{"class":326,"line":203},[324,138164,52333],{"class":52022},[324,138166,138065],{"class":734},[324,138168,16301],{"class":867},[324,138170,138171,138173,138175,138177],{"class":326,"line":338},[324,138172,138072],{"class":916},[324,138174,52159],{"class":867},[324,138176,8381],{"class":738},[324,138178,2025],{"class":867},[324,138180,138181,138183,138185,138187],{"class":326,"line":344},[324,138182,128680],{"class":916},[324,138184,52159],{"class":867},[324,138186,61591],{"class":916},[324,138188,2025],{"class":867},[324,138190,138191],{"class":326,"line":484},[324,138192,2296],{"class":867},[324,138194,138195,138197,138199],{"class":326,"line":491},[324,138196,52333],{"class":52022},[324,138198,138099],{"class":734},[324,138200,16301],{"class":867},[324,138202,138203,138205,138207,138209],{"class":326,"line":496},[324,138204,138072],{"class":916},[324,138206,52159],{"class":867},[324,138208,138110],{"class":738},[324,138210,2025],{"class":867},[324,138212,138213,138215,138217,138219],{"class":326,"line":502},[324,138214,71627],{"class":916},[324,138216,52159],{"class":867},[324,138218,62792],{"class":916},[324,138220,2025],{"class":867},[324,138222,138223],{"class":326,"line":508},[324,138224,2296],{"class":867},[48,138226],{"style":126920,"src":138227},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-135.png",[192,138229,138230],{"start":484},[195,138231,138232],{},"使用场景3",[19,138234,138235],{},"清除浮动：原因回顾，大盒子没有设置高度，里边的两个盒子都设置浮动之后，大盒子会塌陷",[316,138237,138239],{"className":127064,"code":138238,"language":127066,"meta":50,"style":50},".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",[269,138240,138241,138247,138257,138261,138265,138269,138277,138287,138297,138301,138309,138319,138329],{"__ignoreMap":50},[324,138242,138243,138245],{"class":326,"line":327},[324,138244,130912],{"class":734},[324,138246,16301],{"class":867},[324,138248,138249,138251,138253,138255],{"class":326,"line":203},[324,138250,131544],{"class":916},[324,138252,52159],{"class":867},[324,138254,24463],{"class":916},[324,138256,2025],{"class":867},[324,138258,138259],{"class":326,"line":338},[324,138260,2296],{"class":867},[324,138262,138263],{"class":326,"line":344},[324,138264,136525],{"class":867},[324,138266,138267],{"class":326,"line":484},[324,138268,138058],{"class":772},[324,138270,138271,138273,138275],{"class":326,"line":491},[324,138272,52333],{"class":52022},[324,138274,138065],{"class":734},[324,138276,16301],{"class":867},[324,138278,138279,138281,138283,138285],{"class":326,"line":496},[324,138280,138072],{"class":916},[324,138282,52159],{"class":867},[324,138284,8381],{"class":738},[324,138286,2025],{"class":867},[324,138288,138289,138291,138293,138295],{"class":326,"line":502},[324,138290,128680],{"class":916},[324,138292,52159],{"class":867},[324,138294,61591],{"class":916},[324,138296,2025],{"class":867},[324,138298,138299],{"class":326,"line":508},[324,138300,2296],{"class":867},[324,138302,138303,138305,138307],{"class":326,"line":514},[324,138304,52333],{"class":52022},[324,138306,138099],{"class":734},[324,138308,16301],{"class":867},[324,138310,138311,138313,138315,138317],{"class":326,"line":2343},[324,138312,138072],{"class":916},[324,138314,52159],{"class":867},[324,138316,138110],{"class":738},[324,138318,2025],{"class":867},[324,138320,138321,138323,138325,138327],{"class":326,"line":2348},[324,138322,71627],{"class":916},[324,138324,52159],{"class":867},[324,138326,62792],{"class":916},[324,138328,2025],{"class":867},[324,138330,138331],{"class":326,"line":2354},[324,138332,2296],{"class":867},[19,138334,138335],{},"div {\nmargin: 0 auto;\n}",[316,138337,138340],{"className":138338,"code":138339,"language":5916},[5914],"\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",[269,138341,138339],{"__ignoreMap":50},[19,138343,138344],{},"如果想让多个元素都发生变化",[19,138346,138347],{},"不能如下操作：",[19,138349,138350],{},"transition: width 2s ease 0.5s;",[19,138352,138353],{},"transition: height 2s ease 0.5s;不对！！！",[19,138355,138356],{},"上方会样式冲突，导致不显示任何过渡效果",[19,138358,138359],{},"使用如下：加逗号隔开",[19,138361,138362],{},"transition: width 2s ease 0.5s, height 2s ease 0.5s, background-color 2s ease;",[19,138364,138365],{},"transition all 2s ease;",[35,138367,138369],{"id":138368},"_1426-过渡练习","14.2.6 过渡练习",[192,138371,138372],{},[195,138373,138374],{},"进度条",[48,138376],{"style":126920,"src":138377},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-141.png",[316,138379,138381],{"className":127064,"code":138380,"language":127066,"meta":50,"style":50},"div {\n  transition: all 0.3s ease;\n}\n",[269,138382,138383,138389,138407],{"__ignoreMap":50},[324,138384,138385,138387],{"class":326,"line":327},[324,138386,52333],{"class":52022},[324,138388,16301],{"class":867},[324,138390,138391,138394,138396,138398,138401,138403,138405],{"class":326,"line":203},[324,138392,138393],{"class":916},"  transition",[324,138395,52159],{"class":867},[324,138397,28843],{"class":916},[324,138399,138400],{"class":916}," 0.3",[324,138402,1559],{"class":863},[324,138404,79402],{"class":916},[324,138406,2025],{"class":867},[324,138408,138409],{"class":326,"line":338},[324,138410,2296],{"class":867},[192,138412,138413],{"start":203},[195,138414,138415],{},"小米logo",[19,138417,138418],{},"当将鼠标放到图标时，mi-logo会往右侧过渡；mi-home出现",[316,138420,138422],{"className":127064,"code":138421,"language":127066,"meta":50,"style":50},"\u002F* CSS3 过渡 *\u002F\ndiv {\n  transition: all 0.3s ease;\n  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n}\n",[269,138423,138424,138429,138435,138451,138456],{"__ignoreMap":50},[324,138425,138426],{"class":326,"line":327},[324,138427,138428],{"class":772},"\u002F* CSS3 过渡 *\u002F\n",[324,138430,138431,138433],{"class":326,"line":203},[324,138432,52333],{"class":52022},[324,138434,16301],{"class":867},[324,138436,138437,138439,138441,138443,138445,138447,138449],{"class":326,"line":338},[324,138438,138393],{"class":916},[324,138440,52159],{"class":867},[324,138442,28843],{"class":916},[324,138444,138400],{"class":916},[324,138446,1559],{"class":863},[324,138448,79402],{"class":916},[324,138450,2025],{"class":867},[324,138452,138453],{"class":326,"line":344},[324,138454,138455],{"class":772},"  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n",[324,138457,138458],{"class":326,"line":484},[324,138459,2296],{"class":867},[19,138461,138462],{},"理解：在设计的时候可以多考虑使用伪元素选择器，动画的时候不要想着只通过一个hover就可以实现，可以让before和after都添加hover来进行运动",[775,138464,138465],{},"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":50,"searchDepth":203,"depth":203,"links":138467},[138468,138473],{"id":136798,"depth":203,"text":136799,"children":138469},[138470,138471,138472],{"id":136802,"depth":338,"text":136803},{"id":136879,"depth":338,"text":136880},{"id":137210,"depth":338,"text":137211},{"id":137501,"depth":203,"text":137502,"children":138474},[138475,138476],{"id":137505,"depth":338,"text":137506},{"id":138368,"depth":338,"text":138369},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch14-html5css3",{"title":136790,"description":791},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性","Bc1GNkPQVYZHk_zaMCAK05mQQ3fn_HZ43TEY42Pt3dw",{"id":138483,"title":138484,"body":138485,"description":791,"extension":792,"meta":140229,"navigation":487,"path":140230,"seo":140231,"stem":140232,"__hash__":140233},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块.md","15. 品优购项目上篇-搭建与公共模块",{"type":7,"value":138486,"toc":140210},[138487,138490,138494,138497,138503,138509,138513,138515,138518,138521,138524,138527,138530,138533,138536,138540,138544,138547,138550,138553,138557,138560,138563,138568,138571,138574,138577,138581,138584,138593,138596,138599,138603,138606,138609,138614,138621,138635,138643,138650,138655,138658,138661,138664,138671,138675,138681,138687,138690,138693,138698,138704,138706,138714,138719,138722,138728,138730,138735,138740,138743,138745,138750,138753,138758,138763,138797,138801,138805,138808,138812,138815,138901,138904,138941,138944,138980,138984,138989,139002,139056,139058,139086,139088,139116,139122,139136,139138,139182,139184,139228,139231,139238,139249,139251,139278,139280,139306,139313,139329,139331,139425,139427,139521,139528,139531,139536,139542,139616,139619,139621,139657,139659,139695,139698,139705,139724,139727,139730,139732,139757,139759,139783,139786,139789,139819,139823,139826,139889,139891,139957,139959,140023,140026,140058,140060,140086,140088,140114,140117,140148,140150,140176,140178,140204,140207],[10,138488,138484],{"id":138489},"_15-品优购项目上篇-搭建与公共模块",[14,138491,138493],{"id":138492},"_151-项目规划","15.1 项目规划",[48,138495],{"style":126920,"src":138496},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-142.png",[19,138498,138499,138502],{},[116,138500,138501],{},"原型图："," 页面的布局，告知我们开发人员，整个页面的结构是怎样的，说白了就是什么地方放什么内容",[19,138504,138505,138508],{},[116,138506,138507],{},"效果图："," 告知我们开发人员，最终做出来的成品应该是什么样子，相比原型图，效果图里面包含内容，风格，字体大小等等",[14,138510,138512],{"id":138511},"_152-项目介绍","15.2 项目介绍",[19,138514,138501],{},[48,138516],{"style":126920,"src":138517},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-143.png",[19,138519,138520],{},"主页：",[48,138522],{"style":126920,"src":138523},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-144.png",[19,138525,138526],{},"列表页：",[48,138528],{"style":126920,"src":138529},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-145.png",[19,138531,138532],{},"注册页：",[48,138534],{"style":126920,"src":138535},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-146.png",[14,138537,138539],{"id":138538},"_153-项目搭建工作","15.3 项目搭建工作",[35,138541,138543],{"id":138542},"_1531-创建的文件夹如下称为项目结构","15.3.1 创建的文件夹如下（称为项目结构）",[48,138545],{"style":126920,"src":138546},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-147.png",[19,138548,138549],{},"经常更换的图片要放到upload文件夹中",[19,138551,138552],{},"不经常换的放到images文件夹中",[35,138554,138556],{"id":138555},"_1532-创建文件如下","15.3.2 创建文件如下",[48,138558],{"style":126920,"src":138559},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-148.png",[48,138561],{"style":126920,"src":138562},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-149.png",[19,138564,138565],{},[116,138566,138567],{},"初始化样式：",[19,138569,138570],{},"有些网站初始化的不太提倡 * { margin: 0; padding: 0; }",[19,138572,138573],{},"比如新浪： html,body,ul,li,ol,dl,dd,dt,p,h1,h2,h3,h4,h5,h6,form,fieldset,legend,img{margin:0;padding:0}",[19,138575,138576],{},"通配符选择器写代码的时候简单，但是浏览器渲染的时候没有后边类似于新浪这样的效率高",[35,138578,138580],{"id":138579},"_1533-项目模块化开发","15.3.3 项目模块化开发",[19,138582,138583],{},"所谓的模块化：将一个项目按照功能划分，一个功能一个模块，互不影响，模块化开发具有重复使用、更换方便等优点",[19,138585,138586,138587,138592],{},"这里最典型的应用就是 ",[116,138588,138589],{},[269,138590,138591],{},"common.css"," 公共样式。写好一个样式，其余的页面用到这些相同的样式",[48,138594],{"style":126920,"src":138595},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-150.png",[19,138597,138598],{},"通过link方法来引入",[35,138600,138602],{"id":138601},"_1534-网站-favicon-图标","15.3.4 网站 favicon 图标",[48,138604],{"style":126920,"src":138605},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-151.png",[19,138607,138608],{},"favicon.ico 一般用于作为缩略的网站标志，它显示在浏览器的地址栏或者标签上。目前主要的浏览器都支持 favicon.ico 图标",[192,138610,138611],{},[195,138612,138613],{},"制作favicon图标",[19,138615,138616,138617,138620],{},"①把品优购图标切成 ",[269,138618,138619],{},"png"," 图片",[19,138622,138623,138624,138626,138627,138630,138631],{},"②把 ",[269,138625,138619],{}," 图片转换为 ",[269,138628,138629],{},"ico"," 图标，这需要借助于第三方转换网站，例如比特虫：",[25,138632,138633],{"href":138633,"rel":138634},"http:\u002F\u002Fwww.bitbug.net\u002F",[29],[192,138636,138637,138640],{"start":203},[195,138638,138639],{},"favicon图标放到网站根目录下",[195,138641,138642],{},"HTML页面引入favicon",[19,138644,138645,138646,138649],{},"在html 页面里面的 ",[269,138647,138648],{},"\u003Chead> \u003C\u002Fhead>","元素之间引入代码",[19,138651,138652],{},[269,138653,138654],{},"\u003Clink rel=\"shortcut icon\" href=\"favicon.ico\" type=\"image\u002Fx-icon\"\u002F>",[19,138656,138657],{},"复制这行代码或者在生成这个的网站进行复制",[48,138659],{"style":126920,"src":138660},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-152.png",[19,138662,138663],{},"在网站后边输入\u002Ffavicon.ico就可以得到这个网站的图标",[19,138665,138666,138667],{},"例如:",[25,138668,138669],{"href":138669,"rel":138670},"https:\u002F\u002Fwww.jd.com\u002Ffavicon.ico",[29],[35,138672,138674],{"id":138673},"_1535-tdk三大标签seo优化","15.3.5 TDK三大标签SEO优化",[19,138676,138677,138680],{},[116,138678,138679],{},"SEO（Search Engine Optimization）"," 汉译为搜索引擎优化，是一种利用搜索引擎的规则提高网站在有关搜索引擎内自然排名的方式。",[19,138682,138683,138686],{},[116,138684,138685],{},"SEO"," 的目的是对网站进行深度的优化，从而帮助网站获取免费的流量，进而在搜索引擎上提升网站的排名，提高网站的知名度。",[19,138688,138689],{},"页面必须有三个标签用来符合 SEO 优化",[48,138691],{"style":126920,"src":138692},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-153.png",[192,138694,138695],{},[195,138696,138697],{},"title网站标题",[19,138699,138700,138703],{},[116,138701,138702],{},"建议："," 网站名（产品名）- 网站的介绍 （尽量不要超过30个汉字）",[19,138705,69512],{},[1871,138707,138708,138711],{},[195,138709,138710],{},"京东(JD.COM)-综合网购首选-正品低价、品质保障、配送及时、轻松购物！",[195,138712,138713],{},"小米商城 - 小米5s、红米Note 4、小米MIX、小米笔记本官方网站",[192,138715,138716],{"start":203},[195,138717,138718],{},"description网站描述",[19,138720,138721],{},"简要说明我们网站主要是做什么的",[19,138723,138724,138727],{},[116,138725,138726],{},"我们提倡"," ，description 作为网站的总体业务和主题概括，多采用“我们是…”、“我们提供…”、“×××网作为…”、“电话：010…”之类语句",[19,138729,69512],{},[19,138731,138732],{},[269,138733,138734],{},"\u003Cmeta name=\"description\" content=\"京东JD.COM-专业的综合网上购物商城,销售家电、数码通讯、电脑、家居百货、服装服饰、母婴、图书、食品等数万个品牌优质商品.便捷、诚信的服务，为您提供愉悦的网上购物体验!\" \u002F>",[192,138736,138737],{"start":338},[195,138738,138739],{},"keywords关键词",[19,138741,138742],{},"keywords 最好限制为 6～8 个关键词，关键词之间用英文逗号隔开，采用 关键词1,关键词2 的形式",[19,138744,69512],{},[19,138746,138747],{},[269,138748,138749],{},"\u003Cmeta name= \" keywords\" content=\"网上购物,网上商城,手机,笔记本,电脑,MP3,CD,VCD,DV,相机,数码,配件,手表,存储卡,京东\" \u002F>",[19,138751,138752],{},"这里它是电商所以写的多，把最好产品往前写，越好的产品权重越高",[19,138754,138755],{},[116,138756,138757],{},"对于我们前端人员来说，我们只需要准备好这三个标签，具体里面的内容，有专门的 SEO 人员准备",[192,138759,138760],{"start":344},[195,138761,138762],{},"代码总结",[316,138764,138765],{"className":127811,"code":131168,"language":127813,"meta":50,"style":50},[269,138766,138767,138771,138785,138789],{"__ignoreMap":50},[324,138768,138769],{"class":326,"line":327},[324,138770,131175],{"class":772},[324,138772,138773,138775,138777,138779,138781,138783],{"class":326,"line":203},[324,138774,1774],{"class":867},[324,138776,52333],{"class":52022},[324,138778,54208],{"class":734},[324,138780,913],{"class":867},[324,138782,131188],{"class":738},[324,138784,52029],{"class":867},[324,138786,138787],{"class":326,"line":338},[324,138788,131195],{"class":867},[324,138790,138791,138793,138795],{"class":326,"line":344},[324,138792,52507],{"class":867},[324,138794,52333],{"class":52022},[324,138796,52029],{"class":867},[14,138798,138800],{"id":138799},"_154-项目公共部分制作","15.4 项目公共部分制作",[35,138802,138804],{"id":138803},"_1541-常用模块类命名","15.4.1 常用模块类命名",[48,138806],{"style":126920,"src":138807},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-154.png",[35,138809,138811],{"id":138810},"_1542-快捷导航-shortcut-制作","15.4.2 快捷导航 shortcut 制作",[19,138813,138814],{},"布局思路：",[1871,138816,138817,138820,138823,138845,138878],{},[195,138818,138819],{},"通栏的盒子命名为 shortcut ，是快捷导航的意思。 注意这里的行高，可以继承给里面的子盒子",[195,138821,138822],{},"里面包含版心的盒子",[195,138824,138825,138826],{},"版心盒子里面包含 1 号左侧盒子左浮动",[1871,138827,138828,138836,138842],{},[195,138829,138830,138831,22229,138833,138835],{},"1 号盒子 里面包含一个",[269,138832,1871],{},[269,138834,1871],{},"包裹li，第一个li里面包裹文字就行，因为不能点击，第二个li包含两个a标签",[195,138837,138838,138839,138841],{},"里面的内容是水平排列，所以需要给",[269,138840,195],{},"设置浮动",[195,138843,138844],{},"文字要垂直居中，我们可以给 shortcut设置行高，因为行高可以继承，里面的孩子就不需要设置了",[195,138846,138847,138848],{},"版心盒子里面包含 2 号右侧盒子右浮动",[1871,138849,138850,138864,138869],{},[195,138851,138852,138853,22229,138855,138857,138858,138860,138861,138863],{},"2 号盒子 里面包含一个",[269,138854,1871],{},[269,138856,1871],{},"包裹",[269,138859,195],{},"，中间的",[269,138862,1785],{},"可以用样式去设置，也可以用字符 |",[195,138865,138866,138867,138841],{},"里面内容水平排列，给",[269,138868,195],{},[195,138870,138871,138872,138874,138875,138877],{},"找到里面所有偶数的 ",[269,138873,195],{}," 设置样式（偶数的 ",[269,138876,195],{}," 显示是一个 | 竖线，所以需要单独选择出来设置样式，利用nth-child就可以实现）",[195,138879,138880,138881],{},"需要用到字体图标",[1871,138882,138883,138889,138892,138895,138898],{},[195,138884,138885,138886],{},"利用伪元素的方式来实现字体图标，给需要添加的标签设置类名为 ： ",[269,138887,138888],{},"arrow-icon",[195,138890,138891],{},"先要引入字体图片的资源",[195,138893,138894],{},"在样式里面利用 font-face 来进行声明",[195,138896,138897],{},"在伪元素的 content属性设置 图标的编码",[195,138899,138900],{},"给伪元素设置font-family属性",[19,138902,138903],{},"结构实例代码：",[316,138905,138907],{"className":127064,"code":138906,"language":127066,"meta":50,"style":50},"div::before {\n  content: \"\";\n  display: block;\n}\n",[269,138908,138909,138917,138927,138937],{"__ignoreMap":50},[324,138910,138911,138913,138915],{"class":326,"line":327},[324,138912,52333],{"class":52022},[324,138914,138065],{"class":734},[324,138916,16301],{"class":867},[324,138918,138919,138921,138923,138925],{"class":326,"line":203},[324,138920,138072],{"class":916},[324,138922,52159],{"class":867},[324,138924,8381],{"class":738},[324,138926,2025],{"class":867},[324,138928,138929,138931,138933,138935],{"class":326,"line":338},[324,138930,128680],{"class":916},[324,138932,52159],{"class":867},[324,138934,61591],{"class":916},[324,138936,2025],{"class":867},[324,138938,138939],{"class":326,"line":344},[324,138940,2296],{"class":867},[19,138942,138943],{},"样式实例代码：",[316,138945,138946],{"className":127064,"code":138906,"language":127066,"meta":50,"style":50},[269,138947,138948,138956,138966,138976],{"__ignoreMap":50},[324,138949,138950,138952,138954],{"class":326,"line":327},[324,138951,52333],{"class":52022},[324,138953,138065],{"class":734},[324,138955,16301],{"class":867},[324,138957,138958,138960,138962,138964],{"class":326,"line":203},[324,138959,138072],{"class":916},[324,138961,52159],{"class":867},[324,138963,8381],{"class":738},[324,138965,2025],{"class":867},[324,138967,138968,138970,138972,138974],{"class":326,"line":338},[324,138969,128680],{"class":916},[324,138971,52159],{"class":867},[324,138973,61591],{"class":916},[324,138975,2025],{"class":867},[324,138977,138978],{"class":326,"line":344},[324,138979,2296],{"class":867},[35,138981,138983],{"id":138982},"_1543-header-头部模块搭建","15.4.3 header 头部模块搭建",[1871,138985,138986],{},[195,138987,138988],{},"header 盒子必须要有高度",[19,138990,138991,138992,138994,138995],{},"1 号盒子是 ",[269,138993,132076],{}," 标志定位，在正常开发过程中， ",[116,138996,138997,138998,139001],{},"logo的布局其实是有讲究的，需要进行 ",[269,138999,139000],{},"logoSEO","的优化 （★★★）",[1871,139003,139004,139012,139020,139047],{},[195,139005,139006,139008,139009,139011],{},[269,139007,132076],{}," 里面首先放一个 ",[269,139010,10],{}," 标签，目的是为了提权，告诉搜索引擎，这个地方很重要",[195,139013,139014,139016,139017,139019],{},[269,139015,10],{}," 里面再放一个链接，可以返回首页的，把 ",[269,139018,132076],{}," 的背景图片给链接即可",[195,139021,139022,139023],{},"为了搜索引擎收录我们，我们链接里面要放文字（网站名称），但是文字不要显示出来",[1871,139024,139025,139040],{},[195,139026,139027,139028,139031,139032,139035,139036,139039],{},"方法1：",[269,139029,139030],{},"text-indent"," 移到盒子外面（",[269,139033,139034],{},"text-indent: -9999px",") ，然后 ",[269,139037,139038],{},"overflow:hidden"," ，淘宝的做法",[195,139041,139042,139043,139046],{},"方法2：直接给 ",[269,139044,139045],{},"font-size: 0;"," 就看不到文字了，京东的做法",[195,139048,139049,139050,139052,139053,139055],{},"最后给链接一个 ",[269,139051,52129],{}," 属性，这样鼠标放到 ",[269,139054,132076],{}," 上就可以看到提示文字了",[19,139057,138903],{},[316,139059,139060],{"className":127811,"code":132297,"language":127813,"meta":50,"style":50},[269,139061,139062],{"__ignoreMap":50},[324,139063,139064,139066,139068,139070,139072,139074,139076,139078,139080,139082,139084],{"class":326,"line":327},[324,139065,1774],{"class":867},[324,139067,25],{"class":52022},[324,139069,61779],{"class":734},[324,139071,913],{"class":867},[324,139073,132312],{"class":738},[324,139075,132315],{"class":734},[324,139077,913],{"class":867},[324,139079,132320],{"class":738},[324,139081,132323],{"class":867},[324,139083,25],{"class":52022},[324,139085,52029],{"class":867},[19,139087,138943],{},[316,139089,139090],{"className":127811,"code":132297,"language":127813,"meta":50,"style":50},[269,139091,139092],{"__ignoreMap":50},[324,139093,139094,139096,139098,139100,139102,139104,139106,139108,139110,139112,139114],{"class":326,"line":327},[324,139095,1774],{"class":867},[324,139097,25],{"class":52022},[324,139099,61779],{"class":734},[324,139101,913],{"class":867},[324,139103,132312],{"class":738},[324,139105,132315],{"class":734},[324,139107,913],{"class":867},[324,139109,132320],{"class":738},[324,139111,132323],{"class":867},[324,139113,25],{"class":52022},[324,139115,52029],{"class":867},[19,139117,139118,139119,139121],{},"2 号盒子是 ",[269,139120,132089],{}," 搜索模块定位",[1871,139123,139124,139127,139130,139133],{},[195,139125,139126],{},"search盒子利用定位的方式放在对应的位置",[195,139128,139129],{},"search盒子设置绝对定位，header盒子设置相对定位",[195,139131,139132],{},"search盒子里面包含两个子元素，一个是输入框，一个是按钮，分别跟定固定的宽高（搜索框 宽度：454px；按钮宽度：80px）",[195,139134,139135],{},"输入框和按钮本来就是行内块元素，在一行显示，但是中间会有间隙，所以我们可以让让这两个元素浮动起来",[19,139137,138903],{},[316,139139,139140],{"className":127064,"code":132384,"language":127066,"meta":50,"style":50},[269,139141,139142,139164,139168,139178],{"__ignoreMap":50},[324,139143,139144,139146,139148,139150,139152,139154,139156,139158,139160,139162],{"class":326,"line":327},[324,139145,52333],{"class":52022},[324,139147,13164],{"class":867},[324,139149,19],{"class":52022},[324,139151,13164],{"class":867},[324,139153,10],{"class":52022},[324,139155,13164],{"class":867},[324,139157,1871],{"class":52022},[324,139159,13164],{"class":867},[324,139161,195],{"class":52022},[324,139163,16301],{"class":867},[324,139165,139166],{"class":326,"line":203},[324,139167,132413],{"class":772},[324,139169,139170,139172,139174,139176],{"class":326,"line":338},[324,139171,128680],{"class":916},[324,139173,52159],{"class":867},[324,139175,61591],{"class":916},[324,139177,2025],{"class":867},[324,139179,139180],{"class":326,"line":344},[324,139181,2296],{"class":867},[19,139183,138943],{},[316,139185,139186],{"className":127064,"code":132384,"language":127066,"meta":50,"style":50},[269,139187,139188,139210,139214,139224],{"__ignoreMap":50},[324,139189,139190,139192,139194,139196,139198,139200,139202,139204,139206,139208],{"class":326,"line":327},[324,139191,52333],{"class":52022},[324,139193,13164],{"class":867},[324,139195,19],{"class":52022},[324,139197,13164],{"class":867},[324,139199,10],{"class":52022},[324,139201,13164],{"class":867},[324,139203,1871],{"class":52022},[324,139205,13164],{"class":867},[324,139207,195],{"class":52022},[324,139209,16301],{"class":867},[324,139211,139212],{"class":326,"line":203},[324,139213,132413],{"class":772},[324,139215,139216,139218,139220,139222],{"class":326,"line":338},[324,139217,128680],{"class":916},[324,139219,52159],{"class":867},[324,139221,61591],{"class":916},[324,139223,2025],{"class":867},[324,139225,139226],{"class":326,"line":344},[324,139227,2296],{"class":867},[19,139229,139230],{},"这里为了避免给大盒子加边框子，小盒子不加边框塞进大盒子后，他们之间会有神奇的空隙问题，当浏览器缩放一定程度没有空隙，但是大部分都会有空隙问题，避免该问题，通过不给大盒子边框，给小盒子边框来解决",[19,139232,139233,139234,139237],{},"3 号盒子是 ",[269,139235,139236],{},"hotwords"," 热词模块定位",[1871,139239,139240,139243,139246],{},[195,139241,139242],{},"热词模块怎么简单怎么来，直接在里面放a标签即可",[195,139244,139245],{},"给里面所有的a标签设置 左右10px的外边距",[195,139247,139248],{},"给第一个a标签设置文字变红色（#c81623）",[19,139250,138903],{},[316,139252,139254],{"className":127064,"code":139253,"language":127066,"meta":50,"style":50},"div {\n  margin: 0 auto;\n}\n",[269,139255,139256,139262,139274],{"__ignoreMap":50},[324,139257,139258,139260],{"class":326,"line":327},[324,139259,52333],{"class":52022},[324,139261,16301],{"class":867},[324,139263,139264,139266,139268,139270,139272],{"class":326,"line":203},[324,139265,71192],{"class":916},[324,139267,52159],{"class":867},[324,139269,1056],{"class":916},[324,139271,52278],{"class":916},[324,139273,2025],{"class":867},[324,139275,139276],{"class":326,"line":338},[324,139277,2296],{"class":867},[19,139279,138943],{},[316,139281,139282],{"className":127064,"code":139253,"language":127066,"meta":50,"style":50},[269,139283,139284,139290,139302],{"__ignoreMap":50},[324,139285,139286,139288],{"class":326,"line":327},[324,139287,52333],{"class":52022},[324,139289,16301],{"class":867},[324,139291,139292,139294,139296,139298,139300],{"class":326,"line":203},[324,139293,71192],{"class":916},[324,139295,52159],{"class":867},[324,139297,1056],{"class":916},[324,139299,52278],{"class":916},[324,139301,2025],{"class":867},[324,139303,139304],{"class":326,"line":338},[324,139305,2296],{"class":867},[19,139307,139308,139309,139312],{},"4 号盒子是 ",[269,139310,139311],{},"shopcar"," 购物车模块",[1871,139314,139315,139320,139323,139326],{},[195,139316,123847,139317,139319],{},[269,139318,139311],{},"里面添加一个before伪元素和after伪元素，分别放置 购物车的图标和 右箭头",[195,139321,139322],{},"count 统计部分用绝对定位做",[195,139324,139325],{},"count 统计部分不要给宽度，因为可能买的件数比较多，让件数撑开就好了，给一个高度",[195,139327,139328],{},"一定注意左下角不是圆角，其余三个是圆角 写法： border-radius: 7px 7px 7px 0;",[19,139330,138903],{},[316,139332,139333],{"className":127064,"code":132496,"language":127066,"meta":50,"style":50},[269,139334,139335,139339,139353,139357,139371,139375,139389,139393,139407,139411],{"__ignoreMap":50},[324,139336,139337],{"class":326,"line":327},[324,139338,132503],{"class":772},[324,139340,139341,139343,139345,139347,139349,139351],{"class":326,"line":203},[324,139342,132508],{"class":734},[324,139344,80529],{"class":867},[324,139346,129424],{"class":916},[324,139348,52159],{"class":867},[324,139350,132517],{"class":916},[324,139352,129994],{"class":867},[324,139354,139355],{"class":326,"line":338},[324,139356,132524],{"class":772},[324,139358,139359,139361,139363,139365,139367,139369],{"class":326,"line":344},[324,139360,132529],{"class":734},[324,139362,80529],{"class":867},[324,139364,129424],{"class":916},[324,139366,52159],{"class":867},[324,139368,55486],{"class":916},[324,139370,129994],{"class":867},[324,139372,139373],{"class":326,"line":484},[324,139374,132544],{"class":772},[324,139376,139377,139379,139381,139383,139385,139387],{"class":326,"line":491},[324,139378,132549],{"class":734},[324,139380,80529],{"class":867},[324,139382,129424],{"class":916},[324,139384,52159],{"class":867},[324,139386,55553],{"class":916},[324,139388,129994],{"class":867},[324,139390,139391],{"class":326,"line":496},[324,139392,132564],{"class":772},[324,139394,139395,139397,139399,139401,139403,139405],{"class":326,"line":502},[324,139396,132569],{"class":734},[324,139398,80529],{"class":867},[324,139400,129424],{"class":916},[324,139402,52159],{"class":867},[324,139404,86955],{"class":916},[324,139406,129994],{"class":867},[324,139408,139409],{"class":326,"line":508},[324,139410,132584],{"class":772},[324,139412,139413,139415,139417,139419,139421,139423],{"class":326,"line":514},[324,139414,132589],{"class":734},[324,139416,80529],{"class":867},[324,139418,129424],{"class":916},[324,139420,52159],{"class":867},[324,139422,132598],{"class":916},[324,139424,129994],{"class":867},[19,139426,138943],{},[316,139428,139429],{"className":127064,"code":132496,"language":127066,"meta":50,"style":50},[269,139430,139431,139435,139449,139453,139467,139471,139485,139489,139503,139507],{"__ignoreMap":50},[324,139432,139433],{"class":326,"line":327},[324,139434,132503],{"class":772},[324,139436,139437,139439,139441,139443,139445,139447],{"class":326,"line":203},[324,139438,132508],{"class":734},[324,139440,80529],{"class":867},[324,139442,129424],{"class":916},[324,139444,52159],{"class":867},[324,139446,132517],{"class":916},[324,139448,129994],{"class":867},[324,139450,139451],{"class":326,"line":338},[324,139452,132524],{"class":772},[324,139454,139455,139457,139459,139461,139463,139465],{"class":326,"line":344},[324,139456,132529],{"class":734},[324,139458,80529],{"class":867},[324,139460,129424],{"class":916},[324,139462,52159],{"class":867},[324,139464,55486],{"class":916},[324,139466,129994],{"class":867},[324,139468,139469],{"class":326,"line":484},[324,139470,132544],{"class":772},[324,139472,139473,139475,139477,139479,139481,139483],{"class":326,"line":491},[324,139474,132549],{"class":734},[324,139476,80529],{"class":867},[324,139478,129424],{"class":916},[324,139480,52159],{"class":867},[324,139482,55553],{"class":916},[324,139484,129994],{"class":867},[324,139486,139487],{"class":326,"line":496},[324,139488,132564],{"class":772},[324,139490,139491,139493,139495,139497,139499,139501],{"class":326,"line":502},[324,139492,132569],{"class":734},[324,139494,80529],{"class":867},[324,139496,129424],{"class":916},[324,139498,52159],{"class":867},[324,139500,86955],{"class":916},[324,139502,129994],{"class":867},[324,139504,139505],{"class":326,"line":508},[324,139506,132584],{"class":772},[324,139508,139509,139511,139513,139515,139517,139519],{"class":326,"line":514},[324,139510,132589],{"class":734},[324,139512,80529],{"class":867},[324,139514,129424],{"class":916},[324,139516,52159],{"class":867},[324,139518,132598],{"class":916},[324,139520,129994],{"class":867},[35,139522,139524,139525,139527],{"id":139523},"_1544-nav导航模块制作","15.4.4 ",[269,139526,54435],{},"导航模块制作",[48,139529],{"style":126920,"src":139530},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-155.png",[19,139532,139533,139535],{},[269,139534,54435],{}," 盒子通栏有高度，而且有个下边框，里面包含版心，版心里面包含 1 号盒子 和 2号盒子",[19,139537,139538,139539],{},"1 号盒子左侧浮动，",[269,139540,139541],{},"dropdown",[1871,139543,139544,139554,139562,139568,139576,139586,139594,139605],{},[195,139545,139546,139547,300,139550,139553],{},"1号盒子有讲究，根据相关性 里面包含 ",[269,139548,139549],{},".dt",[269,139551,139552],{},".dd"," 两个盒子",[195,139555,139556,139558,139559,139561],{},[269,139557,139549],{}," 内容是全部商品分类，然后把这个盒子的宽高设置跟父亲一样，这样就把 ",[269,139560,139552],{}," 挤到下面去了",[195,139563,139564,139565,139567],{},"给 ",[269,139566,139552],{}," 盒子设置宽度 和 高度，以及背景颜色",[195,139569,139564,139570,139572,139573,120749],{},[269,139571,139552],{}," 盒子里面定义 无序列表 （",[269,139574,139575],{},"ul > li > a",[195,139577,139578,139579,139581,139582,139585],{},"每个 ",[269,139580,195],{}," 都有一个高度（",[269,139583,139584],{},"31px","），宽度可以不用设置，让文字垂直居中，左边设置2个像素的margin值",[195,139587,139564,139588,139590,139591,120749],{},[269,139589,195],{}," 里面的a设置文字大小（",[269,139592,139593],{},"14px",[195,139595,139564,139596,139598,139599,139601,139602,139604],{},[269,139597,195],{}," 设置 ",[269,139600,128225],{},"，当鼠标移入的时候，让",[269,139603,195],{},"的背景变成白色，让里面的文字变成红色",[195,139606,139607,139609,139610,139612,139613,139615],{},[269,139608,195],{}," 右侧的三角 就可以利用 伪元素来实现，给伪元素设置字体图标，利用定位的方式放在",[269,139611,195],{},"的右侧，那么给",[269,139614,195],{},"设置相对定位",[19,139617,139618],{},"一定要注意相关性",[19,139620,138903],{},[316,139622,139623],{"className":127064,"code":138906,"language":127066,"meta":50,"style":50},[269,139624,139625,139633,139643,139653],{"__ignoreMap":50},[324,139626,139627,139629,139631],{"class":326,"line":327},[324,139628,52333],{"class":52022},[324,139630,138065],{"class":734},[324,139632,16301],{"class":867},[324,139634,139635,139637,139639,139641],{"class":326,"line":203},[324,139636,138072],{"class":916},[324,139638,52159],{"class":867},[324,139640,8381],{"class":738},[324,139642,2025],{"class":867},[324,139644,139645,139647,139649,139651],{"class":326,"line":338},[324,139646,128680],{"class":916},[324,139648,52159],{"class":867},[324,139650,61591],{"class":916},[324,139652,2025],{"class":867},[324,139654,139655],{"class":326,"line":344},[324,139656,2296],{"class":867},[19,139658,138943],{},[316,139660,139661],{"className":127064,"code":138906,"language":127066,"meta":50,"style":50},[269,139662,139663,139671,139681,139691],{"__ignoreMap":50},[324,139664,139665,139667,139669],{"class":326,"line":327},[324,139666,52333],{"class":52022},[324,139668,138065],{"class":734},[324,139670,16301],{"class":867},[324,139672,139673,139675,139677,139679],{"class":326,"line":203},[324,139674,138072],{"class":916},[324,139676,52159],{"class":867},[324,139678,8381],{"class":738},[324,139680,2025],{"class":867},[324,139682,139683,139685,139687,139689],{"class":326,"line":338},[324,139684,128680],{"class":916},[324,139686,52159],{"class":867},[324,139688,61591],{"class":916},[324,139690,2025],{"class":867},[324,139692,139693],{"class":326,"line":344},[324,139694,2296],{"class":867},[19,139696,139697],{},"尽量使用伪元素选择器添加后边的那个符号吧，当时使用的是em盒子加浮动做的",[19,139699,139700,139701,139704],{},"2 号盒子左侧浮动，",[269,139702,139703],{},"navitems"," 导航栏组",[1871,139706,139707,139712,139721],{},[195,139708,139709,139710],{},"里面结构是 ",[269,139711,139575],{},[195,139713,139714,139715,139717,139718,139720],{},"导航栏都是能点击的，所以我们不能给定宽度，给",[269,139716,25],{},"左右的",[269,139719,31605],{},"把两侧撑开",[195,139722,139723],{},"让文字垂直居中（行高等于高度）",[48,139725],{"style":126920,"src":139726},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-156.png",[19,139728,139729],{},"在制作导航栏是将li变为浮动，对a设置高度，这样就可以实现上图中的效果，并不一定非得点击文字才行，点击文字的周围也是可以的",[19,139731,138903],{},[316,139733,139735],{"className":127064,"code":139734,"language":127066,"meta":50,"style":50},".box {\n  float: left;\n}\n",[269,139736,139737,139743,139753],{"__ignoreMap":50},[324,139738,139739,139741],{"class":326,"line":327},[324,139740,130912],{"class":734},[324,139742,16301],{"class":867},[324,139744,139745,139747,139749,139751],{"class":326,"line":203},[324,139746,131544],{"class":916},[324,139748,52159],{"class":867},[324,139750,24463],{"class":916},[324,139752,2025],{"class":867},[324,139754,139755],{"class":326,"line":338},[324,139756,2296],{"class":867},[19,139758,138943],{},[316,139760,139761],{"className":127064,"code":139734,"language":127066,"meta":50,"style":50},[269,139762,139763,139769,139779],{"__ignoreMap":50},[324,139764,139765,139767],{"class":326,"line":327},[324,139766,130912],{"class":734},[324,139768,16301],{"class":867},[324,139770,139771,139773,139775,139777],{"class":326,"line":203},[324,139772,131544],{"class":916},[324,139774,52159],{"class":867},[324,139776,24463],{"class":916},[324,139778,2025],{"class":867},[324,139780,139781],{"class":326,"line":338},[324,139782,2296],{"class":867},[19,139784,139785],{},"补充一下下边这个美观问题，把大盒子的左边边框给挡住了，解决方法是给家用电器这个的大盒子一个magin，让它下去一些，就ok",[48,139787],{"style":126920,"src":139788},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-157.png",[316,139790,139791],{"className":127064,"code":131221,"language":127066,"meta":50,"style":50},[269,139792,139793,139799,139815],{"__ignoreMap":50},[324,139794,139795,139797],{"class":326,"line":327},[324,139796,52333],{"class":52022},[324,139798,16301],{"class":867},[324,139800,139801,139803,139805,139807,139809,139811,139813],{"class":326,"line":203},[324,139802,71618],{"class":916},[324,139804,52159],{"class":867},[324,139806,1082],{"class":916},[324,139808,52214],{"class":863},[324,139810,52243],{"class":916},[324,139812,130456],{"class":916},[324,139814,2025],{"class":867},[324,139816,139817],{"class":326,"line":338},[324,139818,2296],{"class":867},[35,139820,139822],{"id":139821},"_1545-footer底部模块制作","15.4.5 footer底部模块制作",[48,139824],{"style":126920,"src":139825},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-158.png",[1871,139827,139828,139833,139838],{},[195,139829,139830,139832],{},[269,139831,132267],{}," 页面底部盒子通栏给一个高度（415px）和灰色的背景",[195,139834,139835,139837],{},[269,139836,132267],{}," 里面有一个大的版心",[195,139839,139840,139841,139844,139845],{},"版心里面包含 1 号盒子，",[269,139842,139843],{},"mod_service"," 是服务模块，mod 是模块的意思",[1871,139846,139847,139852,139865,139881,139886],{},[195,139848,139564,139849,139851],{},[269,139850,139843],{}," 设置高度（80px）和下边框",[195,139853,139854,139855,139858,139859,139861,139862,139864],{},"在里面定义 ",[269,139856,139857],{},"ul > li"," ,每个",[269,139860,195],{}," 宽度是300px 高度是 50px，给每个",[269,139863,195],{},"设置35px的左内边距",[195,139866,139867,139868,139870,139871,139873,139874,139876,139877,19139,139879,120749],{},"在每个",[269,139869,195],{},"里面，放一个 ",[269,139872,575],{},"（里面放图标），一个",[269,139875,52333],{},"（里面放",[269,139878,52333],{},[269,139880,19],{},[195,139882,139564,139883,139885],{},[269,139884,575],{},"设置浮动，让h5与这个div左右排列",[195,139887,139888],{},"通过精灵图技术（核心思路：利用background-position来实现），把图标设置给h5",[19,139890,138903],{},[316,139892,139894],{"className":127064,"code":139893,"language":127066,"meta":50,"style":50},".icon {\n  width: 20px;\n  height: 20px;\n  background: url(sprites.png) no-repeat -10px -20px;\n}\n",[269,139895,139896,139902,139914,139926,139953],{"__ignoreMap":50},[324,139897,139898,139900],{"class":326,"line":327},[324,139899,134821],{"class":734},[324,139901,16301],{"class":867},[324,139903,139904,139906,139908,139910,139912],{"class":326,"line":203},[324,139905,71290],{"class":916},[324,139907,52159],{"class":867},[324,139909,1564],{"class":916},[324,139911,52214],{"class":863},[324,139913,2025],{"class":867},[324,139915,139916,139918,139920,139922,139924],{"class":326,"line":338},[324,139917,71510],{"class":916},[324,139919,52159],{"class":867},[324,139921,1564],{"class":916},[324,139923,52214],{"class":863},[324,139925,2025],{"class":867},[324,139927,139928,139930,139932,139934,139936,139938,139940,139942,139945,139947,139949,139951],{"class":326,"line":344},[324,139929,71333],{"class":916},[324,139931,52159],{"class":867},[324,139933,62448],{"class":916},[324,139935,868],{"class":867},[324,139937,134860],{"class":5945},[324,139939,14443],{"class":867},[324,139941,62458],{"class":916},[324,139943,139944],{"class":916}," -10",[324,139946,52214],{"class":863},[324,139948,134879],{"class":916},[324,139950,52214],{"class":863},[324,139952,2025],{"class":867},[324,139954,139955],{"class":326,"line":484},[324,139956,2296],{"class":867},[19,139958,138943],{},[316,139960,139961],{"className":127064,"code":139893,"language":127066,"meta":50,"style":50},[269,139962,139963,139969,139981,139993,140019],{"__ignoreMap":50},[324,139964,139965,139967],{"class":326,"line":327},[324,139966,134821],{"class":734},[324,139968,16301],{"class":867},[324,139970,139971,139973,139975,139977,139979],{"class":326,"line":203},[324,139972,71290],{"class":916},[324,139974,52159],{"class":867},[324,139976,1564],{"class":916},[324,139978,52214],{"class":863},[324,139980,2025],{"class":867},[324,139982,139983,139985,139987,139989,139991],{"class":326,"line":338},[324,139984,71510],{"class":916},[324,139986,52159],{"class":867},[324,139988,1564],{"class":916},[324,139990,52214],{"class":863},[324,139992,2025],{"class":867},[324,139994,139995,139997,139999,140001,140003,140005,140007,140009,140011,140013,140015,140017],{"class":326,"line":344},[324,139996,71333],{"class":916},[324,139998,52159],{"class":867},[324,140000,62448],{"class":916},[324,140002,868],{"class":867},[324,140004,134860],{"class":5945},[324,140006,14443],{"class":867},[324,140008,62458],{"class":916},[324,140010,139944],{"class":916},[324,140012,52214],{"class":863},[324,140014,134879],{"class":916},[324,140016,52214],{"class":863},[324,140018,2025],{"class":867},[324,140020,140021],{"class":326,"line":484},[324,140022,2296],{"class":867},[19,140024,140025],{},"版心里面包含 2 号盒子，mod_help 是帮助模块",[1871,140027,140028,140031,140037,140043,140055],{},[195,140029,140030],{},"给 mod_help 设置 50px的左内边距和20px的上内边距，给定高度（185px）",[195,140032,140033,140034,120749],{},"里面的布局利用 自定义列表来实现（",[269,140035,140036],{},"dl > dt + dd",[195,140038,139564,140039,140042],{},[269,140040,140041],{},"dl"," 设置浮动，让其可以水平排列，给每个dl盒子设置宽度",[195,140044,139564,140045,140048,140049,19139,140051,140054],{},[269,140046,140047],{},"dt"," 设置文字大小（16px），设置下外边距（10px），让",[269,140050,140047],{},[269,140052,140053],{},"dd","之间有些距离",[195,140056,140057],{},"最后一个 dl 结构和样式不一样，需要单独设置",[19,140059,138903],{},[316,140061,140062],{"className":127064,"code":139253,"language":127066,"meta":50,"style":50},[269,140063,140064,140070,140082],{"__ignoreMap":50},[324,140065,140066,140068],{"class":326,"line":327},[324,140067,52333],{"class":52022},[324,140069,16301],{"class":867},[324,140071,140072,140074,140076,140078,140080],{"class":326,"line":203},[324,140073,71192],{"class":916},[324,140075,52159],{"class":867},[324,140077,1056],{"class":916},[324,140079,52278],{"class":916},[324,140081,2025],{"class":867},[324,140083,140084],{"class":326,"line":338},[324,140085,2296],{"class":867},[19,140087,138943],{},[316,140089,140090],{"className":127064,"code":139253,"language":127066,"meta":50,"style":50},[269,140091,140092,140098,140110],{"__ignoreMap":50},[324,140093,140094,140096],{"class":326,"line":327},[324,140095,52333],{"class":52022},[324,140097,16301],{"class":867},[324,140099,140100,140102,140104,140106,140108],{"class":326,"line":203},[324,140101,71192],{"class":916},[324,140103,52159],{"class":867},[324,140105,1056],{"class":916},[324,140107,52278],{"class":916},[324,140109,2025],{"class":867},[324,140111,140112],{"class":326,"line":338},[324,140113,2296],{"class":867},[19,140115,140116],{},"版心里面包含 3 号盒子，mod_copyright 是版权模块",[1871,140118,140119,140128,140131,140142],{},[195,140120,140121,140122,140124,140125,140127],{},"分为上下两块，上面是 ",[269,140123,132284],{}," 友情链接，下面是 ",[269,140126,132277],{},"，给mod_copyright 大盒子设置 文字水平居中，20px的上内边距，让上面内容和下面内容之间有些间隙",[195,140129,140130],{},"把内容分别复制到相应模块中",[195,140132,139564,140133,140135,140136,140138,140139,140141],{},[269,140134,132284],{}," 设置 15px 的下外边距，给",[269,140137,132284],{}," 里面 的 ",[269,140140,25],{}," 标签设置 左右 3px 的外边距",[195,140143,140144,140145,140147],{},"给",[269,140146,132277],{}," 设置 20px 的行高",[19,140149,138903],{},[316,140151,140152],{"className":127064,"code":139253,"language":127066,"meta":50,"style":50},[269,140153,140154,140160,140172],{"__ignoreMap":50},[324,140155,140156,140158],{"class":326,"line":327},[324,140157,52333],{"class":52022},[324,140159,16301],{"class":867},[324,140161,140162,140164,140166,140168,140170],{"class":326,"line":203},[324,140163,71192],{"class":916},[324,140165,52159],{"class":867},[324,140167,1056],{"class":916},[324,140169,52278],{"class":916},[324,140171,2025],{"class":867},[324,140173,140174],{"class":326,"line":338},[324,140175,2296],{"class":867},[19,140177,138943],{},[316,140179,140180],{"className":127064,"code":139253,"language":127066,"meta":50,"style":50},[269,140181,140182,140188,140200],{"__ignoreMap":50},[324,140183,140184,140186],{"class":326,"line":327},[324,140185,52333],{"class":52022},[324,140187,16301],{"class":867},[324,140189,140190,140192,140194,140196,140198],{"class":326,"line":203},[324,140191,71192],{"class":916},[324,140193,52159],{"class":867},[324,140195,1056],{"class":916},[324,140197,52278],{"class":916},[324,140199,2025],{"class":867},[324,140201,140202],{"class":326,"line":338},[324,140203,2296],{"class":867},[19,140205,140206],{},"回顾：对于每行文字的间隔采用line-height （行高）来处理",[775,140208,140209],{},"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":50,"searchDepth":203,"depth":203,"links":140211},[140212,140213,140214,140221],{"id":138492,"depth":203,"text":138493},{"id":138511,"depth":203,"text":138512},{"id":138538,"depth":203,"text":138539,"children":140215},[140216,140217,140218,140219,140220],{"id":138542,"depth":338,"text":138543},{"id":138555,"depth":338,"text":138556},{"id":138579,"depth":338,"text":138580},{"id":138601,"depth":338,"text":138602},{"id":138673,"depth":338,"text":138674},{"id":138799,"depth":203,"text":138800,"children":140222},[140223,140224,140225,140226,140228],{"id":138803,"depth":338,"text":138804},{"id":138810,"depth":338,"text":138811},{"id":138982,"depth":338,"text":138983},{"id":139523,"depth":338,"text":140227},"15.4.4 nav导航模块制作",{"id":139821,"depth":338,"text":139822},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch15",{"title":138484,"description":791},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块","dZrS8fvj_jmt1HT4kUOuOHSl-QqUov_mqMeo26p1bR8",{"id":140235,"title":140236,"body":140237,"description":791,"extension":792,"meta":142639,"navigation":487,"path":142640,"seo":142641,"stem":142642,"__hash__":142643},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发.md","16. 品优购项目下篇-主体与页面开发",{"type":7,"value":140238,"toc":142616},[140239,140242,140246,140250,140262,140265,140268,140271,140282,140284,140308,140310,140334,140339,140342,140344,140380,140382,140418,140421,140426,140429,140432,140435,140465,140472,140475,140485,140487,140521,140524,140558,140564,140581,140583,140619,140621,140657,140662,140687,140689,140715,140717,140741,140748,140751,140815,140817,140859,140861,140901,140908,140913,140915,140945,140947,140977,140981,140984,140991,141003,141005,141031,141033,141057,141060,141062,141086,141092,141102,141104,141134,141136,141166,141173,141214,141216,141252,141254,141290,141294,141297,141300,141303,141309,141314,141317,141340,141343,141367,141370,141394,141399,141402,141405,141408,141411,141414,141488,141490,141520,141522,141552,141555,141558,141590,141594,141598,141612,141621,141624,141629,141631,141725,141727,141821,141844,141846,141870,141872,141896,141903,141906,141916,141918,141942,141947,141955,141957,141987,141992,142032,142034,142060,142062,142088,142092,142095,142100,142103,142107,142115,142122,142130,142132,142162,142164,142194,142202,142205,142208,142210,142240,142242,142272,142275,142280,142282,142306,142308,142332,142335,142420,142422,142446,142448,142472,142476,142478,142502,142504,142538,142542,142556,142559,142564,142567,142572,142575,142605,142613],[10,140240,140236],{"id":140241},"_16-品优购项目下篇-主体与页面开发",[14,140243,140245],{"id":140244},"_161-项目主体模块制作","16.1 项目主体模块制作",[35,140247,140249],{"id":140248},"_1611-首页制作","16.1.1 首页制作",[19,140251,140252,140254,140255,140257,140258,140261],{},[116,140253,102779],{}," 主体模块是 ",[116,140256,74780],{}," 里面专有的，注意需要新的样式文件 ",[116,140259,140260],{},"index.css，"," 就不要写在common.css中了",[48,140263],{"style":126920,"src":140264},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-159.png",[48,140266],{"style":126920,"src":140267},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-160.png",[19,140269,140270],{},"画红色线处才是main主体部分，左边那部分是与公共部分带有联系的，所以归于公共部分",[1871,140272,140273,140276,140279],{},[195,140274,140275],{},"main 盒子宽度为 980 像素，高度是455像素，位置距离左边 220px (margin-left ) ，这样就会被公共部分给挡住了，给高度就不用清除浮动",[195,140277,140278],{},"main 里面包含左侧盒子，宽度为 721像素，左浮动，focus 焦点图模块",[195,140280,140281],{},"main 里面包含右侧盒子，宽度为 250像素，右浮动，newsflash 新闻快报模块",[19,140283,138903],{},[316,140285,140286],{"className":127064,"code":139734,"language":127066,"meta":50,"style":50},[269,140287,140288,140294,140304],{"__ignoreMap":50},[324,140289,140290,140292],{"class":326,"line":327},[324,140291,130912],{"class":734},[324,140293,16301],{"class":867},[324,140295,140296,140298,140300,140302],{"class":326,"line":203},[324,140297,131544],{"class":916},[324,140299,52159],{"class":867},[324,140301,24463],{"class":916},[324,140303,2025],{"class":867},[324,140305,140306],{"class":326,"line":338},[324,140307,2296],{"class":867},[19,140309,138943],{},[316,140311,140312],{"className":127064,"code":139734,"language":127066,"meta":50,"style":50},[269,140313,140314,140320,140330],{"__ignoreMap":50},[324,140315,140316,140318],{"class":326,"line":327},[324,140317,130912],{"class":734},[324,140319,16301],{"class":867},[324,140321,140322,140324,140326,140328],{"class":326,"line":203},[324,140323,131544],{"class":916},[324,140325,52159],{"class":867},[324,140327,24463],{"class":916},[324,140329,2025],{"class":867},[324,140331,140332],{"class":326,"line":338},[324,140333,2296],{"class":867},[192,140335,140336],{},[195,140337,140338],{},"左侧focus模块制作",[48,140340],{"style":126920,"src":140341},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-161.png",[19,140343,138903],{},[316,140345,140346],{"className":127064,"code":128387,"language":127066,"meta":50,"style":50},[269,140347,140348,140356,140366,140376],{"__ignoreMap":50},[324,140349,140350,140352,140354],{"class":326,"line":327},[324,140351,54543],{"class":52022},[324,140353,62622],{"class":734},[324,140355,16301],{"class":867},[324,140357,140358,140360,140362,140364],{"class":326,"line":203},[324,140359,128402],{"class":916},[324,140361,52159],{"class":867},[324,140363,55611],{"class":916},[324,140365,2025],{"class":867},[324,140367,140368,140370,140372,140374],{"class":326,"line":338},[324,140369,71520],{"class":916},[324,140371,52159],{"class":867},[324,140373,55459],{"class":916},[324,140375,2025],{"class":867},[324,140377,140378],{"class":326,"line":344},[324,140379,2296],{"class":867},[19,140381,138943],{},[316,140383,140384],{"className":127064,"code":128387,"language":127066,"meta":50,"style":50},[269,140385,140386,140394,140404,140414],{"__ignoreMap":50},[324,140387,140388,140390,140392],{"class":326,"line":327},[324,140389,54543],{"class":52022},[324,140391,62622],{"class":734},[324,140393,16301],{"class":867},[324,140395,140396,140398,140400,140402],{"class":326,"line":203},[324,140397,128402],{"class":916},[324,140399,52159],{"class":867},[324,140401,55611],{"class":916},[324,140403,2025],{"class":867},[324,140405,140406,140408,140410,140412],{"class":326,"line":338},[324,140407,71520],{"class":916},[324,140409,52159],{"class":867},[324,140411,55459],{"class":916},[324,140413,2025],{"class":867},[324,140415,140416],{"class":326,"line":344},[324,140417,2296],{"class":867},[19,140419,140420],{},"对于经常换的图片要放在ul中li内，用img来表示，就不要拿它来当背景整了",[192,140422,140423],{"start":203},[195,140424,140425],{},"右侧newsflash模块制作",[48,140427],{"style":126920,"src":140428},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-162.png",[19,140430,140431],{},"右侧的模块 分为上中下三个盒子",[19,140433,140434],{},"结构代码：",[316,140436,140437],{"className":127811,"code":134566,"language":127813,"meta":50,"style":50},[269,140438,140439],{"__ignoreMap":50},[324,140440,140441,140443,140445,140447,140449,140451,140453,140455,140457,140459,140461,140463],{"class":326,"line":327},[324,140442,1774],{"class":867},[324,140444,48],{"class":52022},[324,140446,55961],{"class":734},[324,140448,913],{"class":867},[324,140450,134581],{"class":738},[324,140452,55969],{"class":734},[324,140454,913],{"class":867},[324,140456,134588],{"class":738},[324,140458,134591],{"class":734},[324,140460,913],{"class":867},[324,140462,134596],{"class":738},[324,140464,52029],{"class":867},[19,140466,140467,140468,140471],{},"1 号盒子为 ",[269,140469,140470],{},"news"," 新闻模块 高度为 165px",[48,140473],{"style":126920,"src":140474},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-163.png",[19,140476,140477,140478,140481,140482],{},"分为上下两个结构，但是两个模块都用 div，上面是 ",[269,140479,140480],{},"news-hd","，下面是 ",[269,140483,140484],{},"news-bd",[19,140486,140434],{},[316,140488,140489],{"className":127811,"code":131168,"language":127813,"meta":50,"style":50},[269,140490,140491,140495,140509,140513],{"__ignoreMap":50},[324,140492,140493],{"class":326,"line":327},[324,140494,131175],{"class":772},[324,140496,140497,140499,140501,140503,140505,140507],{"class":326,"line":203},[324,140498,1774],{"class":867},[324,140500,52333],{"class":52022},[324,140502,54208],{"class":734},[324,140504,913],{"class":867},[324,140506,131188],{"class":738},[324,140508,52029],{"class":867},[324,140510,140511],{"class":326,"line":338},[324,140512,131195],{"class":867},[324,140514,140515,140517,140519],{"class":326,"line":344},[324,140516,52507],{"class":867},[324,140518,52333],{"class":52022},[324,140520,52029],{"class":867},[19,140522,140523],{},"样式代码：",[316,140525,140526],{"className":127811,"code":131168,"language":127813,"meta":50,"style":50},[269,140527,140528,140532,140546,140550],{"__ignoreMap":50},[324,140529,140530],{"class":326,"line":327},[324,140531,131175],{"class":772},[324,140533,140534,140536,140538,140540,140542,140544],{"class":326,"line":203},[324,140535,1774],{"class":867},[324,140537,52333],{"class":52022},[324,140539,54208],{"class":734},[324,140541,913],{"class":867},[324,140543,131188],{"class":738},[324,140545,52029],{"class":867},[324,140547,140548],{"class":326,"line":338},[324,140549,131195],{"class":867},[324,140551,140552,140554,140556],{"class":326,"line":344},[324,140553,52507],{"class":867},[324,140555,52333],{"class":52022},[324,140557,52029],{"class":867},[19,140559,140560,140561,140563],{},"上面是",[269,140562,140480],{},"，设置高度是 33px，设置下边框",[1871,140565,140566,140572],{},[195,140567,140568,140569,140571],{},"里面放一个",[269,140570,575],{}," 标题",[195,140573,140574,140575,140577,140578,140580],{},"放一个a",[269,140576,103414],{},"，内容是 更多，然后让 ",[269,140579,25],{}," 进行右浮动，三角用伪元素设置字体图标就好",[19,140582,140434],{},[316,140584,140585],{"className":127064,"code":138906,"language":127066,"meta":50,"style":50},[269,140586,140587,140595,140605,140615],{"__ignoreMap":50},[324,140588,140589,140591,140593],{"class":326,"line":327},[324,140590,52333],{"class":52022},[324,140592,138065],{"class":734},[324,140594,16301],{"class":867},[324,140596,140597,140599,140601,140603],{"class":326,"line":203},[324,140598,138072],{"class":916},[324,140600,52159],{"class":867},[324,140602,8381],{"class":738},[324,140604,2025],{"class":867},[324,140606,140607,140609,140611,140613],{"class":326,"line":338},[324,140608,128680],{"class":916},[324,140610,52159],{"class":867},[324,140612,61591],{"class":916},[324,140614,2025],{"class":867},[324,140616,140617],{"class":326,"line":344},[324,140618,2296],{"class":867},[19,140620,140523],{},[316,140622,140623],{"className":127064,"code":138906,"language":127066,"meta":50,"style":50},[269,140624,140625,140633,140643,140653],{"__ignoreMap":50},[324,140626,140627,140629,140631],{"class":326,"line":327},[324,140628,52333],{"class":52022},[324,140630,138065],{"class":734},[324,140632,16301],{"class":867},[324,140634,140635,140637,140639,140641],{"class":326,"line":203},[324,140636,138072],{"class":916},[324,140638,52159],{"class":867},[324,140640,8381],{"class":738},[324,140642,2025],{"class":867},[324,140644,140645,140647,140649,140651],{"class":326,"line":338},[324,140646,128680],{"class":916},[324,140648,52159],{"class":867},[324,140650,61591],{"class":916},[324,140652,2025],{"class":867},[324,140654,140655],{"class":326,"line":344},[324,140656,2296],{"class":867},[19,140658,140659,140660],{},"下面是",[269,140661,140484],{},[1871,140663,140664,140672],{},[195,140665,140666,140667,300,140669,140671],{},"里面包含 ",[269,140668,1871],{},[269,140670,195],{}," 还有链接",[195,140673,140144,140674,140676,140677,140679,140680,140683,140684],{},[269,140675,195],{},"设置高度，24px，设置单行文字溢出省略： 1. 设置 ",[269,140678,131730],{}," 2.设置 ",[269,140681,140682],{},"white-space: nowrap;"," 3. 设置 ",[269,140685,140686],{},"text-overflow: ellipsis;",[19,140688,140434],{},[316,140690,140692],{"className":127064,"code":140691,"language":127066,"meta":50,"style":50},"div {\n  overflow: hidden;\n}\n",[269,140693,140694,140700,140711],{"__ignoreMap":50},[324,140695,140696,140698],{"class":326,"line":327},[324,140697,52333],{"class":52022},[324,140699,16301],{"class":867},[324,140701,140702,140705,140707,140709],{"class":326,"line":203},[324,140703,140704],{"class":916},"  overflow",[324,140706,52159],{"class":867},[324,140708,62436],{"class":916},[324,140710,2025],{"class":867},[324,140712,140713],{"class":326,"line":338},[324,140714,2296],{"class":867},[19,140716,140523],{},[316,140718,140719],{"className":127064,"code":140691,"language":127066,"meta":50,"style":50},[269,140720,140721,140727,140737],{"__ignoreMap":50},[324,140722,140723,140725],{"class":326,"line":327},[324,140724,52333],{"class":52022},[324,140726,16301],{"class":867},[324,140728,140729,140731,140733,140735],{"class":326,"line":203},[324,140730,140704],{"class":916},[324,140732,52159],{"class":867},[324,140734,62436],{"class":916},[324,140736,2025],{"class":867},[324,140738,140739],{"class":326,"line":338},[324,140740,2296],{"class":867},[19,140742,140743,140744,140747],{},"2 号盒子为 ",[269,140745,140746],{},"lifeservice"," 生活服务模块 高度为 209px",[48,140749],{"style":126920,"src":140750},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-164.png",[1871,140752,140753,140756,140766,140790,140801],{},[195,140754,140755],{},"设置边框（左右下边框）",[195,140757,140758,140759,140762,140763,140765],{},"里面的内容 是 ",[269,140760,140761],{},"ul > 12*li","，给",[269,140764,195],{},"设置宽 63px，高71px，设置 右边和下边的边框，设置浮动",[195,140767,140768,140769],{},"这样设置后，第四个li会装不开，掉下来，解决办法如下",[1871,140770,140771,140776,140785],{},[195,140772,140773,140775],{},[269,140774,140746],{}," 盒子宽度为 250 ，但是装不开里面的 4 个小 li",[195,140777,140778,140779,140781,140782,140784],{},"可以让 ",[269,140780,140746],{}," 里面的 ",[269,140783,1871],{}," 宽度为 252，就可以装的下 4 个 小 li",[195,140786,140787,140789],{},[269,140788,140746],{}," 盒子 overflow 隐藏多余的部分就可以了",[195,140791,117188,140792,140794,140795,140797,140798,140800],{},[269,140793,195],{}," 里面放一个 ",[269,140796,1305],{},"（里面放图标），下面的文本用 ",[269,140799,19],{}," 标签包裹",[195,140802,139564,140803,140805,140806,140808,140809,139598,140811,140814],{},[269,140804,1305],{}," 设置 24px宽和28px的高（注意 ",[269,140807,1305],{}," 是行内元素， 转成行内块），给 ",[269,140810,195],{},[269,140812,140813],{},"text-align:center"," 让里面内容居中显示",[19,140816,140434],{},[316,140818,140820],{"className":127064,"code":140819,"language":127066,"meta":50,"style":50},"span, a, em, strong {\n  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n  display: inline;\n}\n",[269,140821,140822,140840,140845,140855],{"__ignoreMap":50},[324,140823,140824,140826,140828,140830,140832,140834,140836,140838],{"class":326,"line":327},[324,140825,324],{"class":52022},[324,140827,13164],{"class":867},[324,140829,25],{"class":52022},[324,140831,13164],{"class":867},[324,140833,24280],{"class":52022},[324,140835,13164],{"class":867},[324,140837,116],{"class":52022},[324,140839,16301],{"class":867},[324,140841,140842],{"class":326,"line":203},[324,140843,140844],{"class":772},"  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n",[324,140846,140847,140849,140851,140853],{"class":326,"line":338},[324,140848,128680],{"class":916},[324,140850,52159],{"class":867},[324,140852,128742],{"class":916},[324,140854,2025],{"class":867},[324,140856,140857],{"class":326,"line":344},[324,140858,2296],{"class":867},[19,140860,140523],{},[316,140862,140863],{"className":127064,"code":140819,"language":127066,"meta":50,"style":50},[269,140864,140865,140883,140887,140897],{"__ignoreMap":50},[324,140866,140867,140869,140871,140873,140875,140877,140879,140881],{"class":326,"line":327},[324,140868,324],{"class":52022},[324,140870,13164],{"class":867},[324,140872,25],{"class":52022},[324,140874,13164],{"class":867},[324,140876,24280],{"class":52022},[324,140878,13164],{"class":867},[324,140880,116],{"class":52022},[324,140882,16301],{"class":867},[324,140884,140885],{"class":326,"line":203},[324,140886,140844],{"class":772},[324,140888,140889,140891,140893,140895],{"class":326,"line":338},[324,140890,128680],{"class":916},[324,140892,52159],{"class":867},[324,140894,128742],{"class":916},[324,140896,2025],{"class":867},[324,140898,140899],{"class":326,"line":344},[324,140900,2296],{"class":867},[19,140902,140903,140904,140907],{},"3 号盒子为 ",[269,140905,140906],{},"bargain"," 特价商品",[1871,140909,140910],{},[195,140911,140912],{},"这个比较简单，直接插入一张图片即可",[19,140914,140434],{},[316,140916,140917],{"className":127811,"code":134566,"language":127813,"meta":50,"style":50},[269,140918,140919],{"__ignoreMap":50},[324,140920,140921,140923,140925,140927,140929,140931,140933,140935,140937,140939,140941,140943],{"class":326,"line":327},[324,140922,1774],{"class":867},[324,140924,48],{"class":52022},[324,140926,55961],{"class":734},[324,140928,913],{"class":867},[324,140930,134581],{"class":738},[324,140932,55969],{"class":734},[324,140934,913],{"class":867},[324,140936,134588],{"class":738},[324,140938,134591],{"class":734},[324,140940,913],{"class":867},[324,140942,134596],{"class":738},[324,140944,52029],{"class":867},[19,140946,140523],{},[316,140948,140949],{"className":127811,"code":134566,"language":127813,"meta":50,"style":50},[269,140950,140951],{"__ignoreMap":50},[324,140952,140953,140955,140957,140959,140961,140963,140965,140967,140969,140971,140973,140975],{"class":326,"line":327},[324,140954,1774],{"class":867},[324,140956,48],{"class":52022},[324,140958,55961],{"class":734},[324,140960,913],{"class":867},[324,140962,134581],{"class":738},[324,140964,55969],{"class":734},[324,140966,913],{"class":867},[324,140968,134588],{"class":738},[324,140970,134591],{"class":734},[324,140972,913],{"class":867},[324,140974,134596],{"class":738},[324,140976,52029],{"class":867},[35,140978,140980],{"id":140979},"_1612-推荐模块制作","16.1.2 推荐模块制作",[48,140982],{"style":126920,"src":140983},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-165.png",[19,140985,140986,140987,140990],{},"大盒子 ",[269,140988,140989],{},"recom"," 推荐模块 recommend",[1871,140992,140993],{},[195,140994,140995,140996,140998,140999,141002],{},"给这个 ",[269,140997,140989],{}," 大盒子 设置版心，设置 163px的高，背景颜色（",[269,141000,141001],{},"#ebebeb","），设置距离上边 12px",[19,141004,140434],{},[316,141006,141008],{"className":127064,"code":141007,"language":127066,"meta":50,"style":50},"div {\n  background-color: #f0f0f0;\n}\n",[269,141009,141010,141016,141027],{"__ignoreMap":50},[324,141011,141012,141014],{"class":326,"line":327},[324,141013,52333],{"class":52022},[324,141015,16301],{"class":867},[324,141017,141018,141020,141022,141025],{"class":326,"line":203},[324,141019,71600],{"class":916},[324,141021,52159],{"class":867},[324,141023,141024],{"class":916},"#f0f0f0",[324,141026,2025],{"class":867},[324,141028,141029],{"class":326,"line":338},[324,141030,2296],{"class":867},[19,141032,140523],{},[316,141034,141035],{"className":127064,"code":141007,"language":127066,"meta":50,"style":50},[269,141036,141037,141043,141053],{"__ignoreMap":50},[324,141038,141039,141041],{"class":326,"line":327},[324,141040,52333],{"class":52022},[324,141042,16301],{"class":867},[324,141044,141045,141047,141049,141051],{"class":326,"line":203},[324,141046,71600],{"class":916},[324,141048,52159],{"class":867},[324,141050,141024],{"class":916},[324,141052,2025],{"class":867},[324,141054,141055],{"class":326,"line":338},[324,141056,2296],{"class":867},[19,141058,141059],{},"里面包含 2 个盒子， 浮动即可",[19,141061,140434],{},[316,141063,141064],{"className":127064,"code":139734,"language":127066,"meta":50,"style":50},[269,141065,141066,141072,141082],{"__ignoreMap":50},[324,141067,141068,141070],{"class":326,"line":327},[324,141069,130912],{"class":734},[324,141071,16301],{"class":867},[324,141073,141074,141076,141078,141080],{"class":326,"line":203},[324,141075,131544],{"class":916},[324,141077,52159],{"class":867},[324,141079,24463],{"class":916},[324,141081,2025],{"class":867},[324,141083,141084],{"class":326,"line":338},[324,141085,2296],{"class":867},[19,141087,141088,141089],{},"1 号盒子 ",[269,141090,141091],{},"recom_hd",[1871,141093,141094,141097],{},[195,141095,141096],{},"设置宽度205px，高度163px",[195,141098,140568,141099,141101],{},[269,141100,48],{},"标签，插入图片即可",[19,141103,140434],{},[316,141105,141106],{"className":127811,"code":134566,"language":127813,"meta":50,"style":50},[269,141107,141108],{"__ignoreMap":50},[324,141109,141110,141112,141114,141116,141118,141120,141122,141124,141126,141128,141130,141132],{"class":326,"line":327},[324,141111,1774],{"class":867},[324,141113,48],{"class":52022},[324,141115,55961],{"class":734},[324,141117,913],{"class":867},[324,141119,134581],{"class":738},[324,141121,55969],{"class":734},[324,141123,913],{"class":867},[324,141125,134588],{"class":738},[324,141127,134591],{"class":734},[324,141129,913],{"class":867},[324,141131,134596],{"class":738},[324,141133,52029],{"class":867},[19,141135,140523],{},[316,141137,141138],{"className":127811,"code":134566,"language":127813,"meta":50,"style":50},[269,141139,141140],{"__ignoreMap":50},[324,141141,141142,141144,141146,141148,141150,141152,141154,141156,141158,141160,141162,141164],{"class":326,"line":327},[324,141143,1774],{"class":867},[324,141145,48],{"class":52022},[324,141147,55961],{"class":734},[324,141149,913],{"class":867},[324,141151,134581],{"class":738},[324,141153,55969],{"class":734},[324,141155,913],{"class":867},[324,141157,134588],{"class":738},[324,141159,134591],{"class":734},[324,141161,913],{"class":867},[324,141163,134596],{"class":738},[324,141165,52029],{"class":867},[19,141167,141168,141169,141172],{},"2 号盒子 ",[269,141170,141171],{},"recom_bd"," ，注意里面的小竖线",[1871,141174,141175,141186,141189,141194,141199],{},[195,141176,141177,141178,141180,141181,141183,141184],{},"右侧结构里面放 ",[269,141179,1871],{}," 包含 4个 ",[269,141182,195],{},"，每个li里面包含一个",[269,141185,48],{},[195,141187,141188],{},"直接利用切片工具把里面的内容当成一张图片",[195,141190,139564,141191,141193],{},[269,141192,195],{}," 设置浮动",[195,141195,139564,141196,141198],{},[269,141197,48],{}," 设置宽高，宽度 248px，高度 163px",[195,141200,141201,141202,140762,141205,141207,141208,141210,141211],{},"小竖线利用伪元素来实现，给每一个li设置一个 after 伪元素，然后给这个伪元素设置绝对定位，设置",[269,141203,141204],{},"top 10px",[269,141206,195],{},"设置相对定位（注意，最后一个",[269,141209,195],{},"不用设置伪元素），可以利用 ",[269,141212,141213],{},"nth-child(-n+3){...}",[19,141215,140434],{},[316,141217,141218],{"className":127064,"code":138906,"language":127066,"meta":50,"style":50},[269,141219,141220,141228,141238,141248],{"__ignoreMap":50},[324,141221,141222,141224,141226],{"class":326,"line":327},[324,141223,52333],{"class":52022},[324,141225,138065],{"class":734},[324,141227,16301],{"class":867},[324,141229,141230,141232,141234,141236],{"class":326,"line":203},[324,141231,138072],{"class":916},[324,141233,52159],{"class":867},[324,141235,8381],{"class":738},[324,141237,2025],{"class":867},[324,141239,141240,141242,141244,141246],{"class":326,"line":338},[324,141241,128680],{"class":916},[324,141243,52159],{"class":867},[324,141245,61591],{"class":916},[324,141247,2025],{"class":867},[324,141249,141250],{"class":326,"line":344},[324,141251,2296],{"class":867},[19,141253,140523],{},[316,141255,141256],{"className":127064,"code":138906,"language":127066,"meta":50,"style":50},[269,141257,141258,141266,141276,141286],{"__ignoreMap":50},[324,141259,141260,141262,141264],{"class":326,"line":327},[324,141261,52333],{"class":52022},[324,141263,138065],{"class":734},[324,141265,16301],{"class":867},[324,141267,141268,141270,141272,141274],{"class":326,"line":203},[324,141269,138072],{"class":916},[324,141271,52159],{"class":867},[324,141273,8381],{"class":738},[324,141275,2025],{"class":867},[324,141277,141278,141280,141282,141284],{"class":326,"line":338},[324,141279,128680],{"class":916},[324,141281,52159],{"class":867},[324,141283,61591],{"class":916},[324,141285,2025],{"class":867},[324,141287,141288],{"class":326,"line":344},[324,141289,2296],{"class":867},[35,141291,141293],{"id":141292},"_1613-家用电器模块制作","16.1.3 家用电器模块制作",[48,141295],{"style":126920,"src":141296},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-166.png",[19,141298,141299],{},"注意这个 floor ，不要给高度，内容有多少，算多少",[19,141301,141302],{},"第一楼是家用电器模块： 里面包含两个盒子",[19,141304,141305,141308],{},[269,141306,141307],{},"box_hd"," 制作",[19,141310,141088,141311,141313],{},[269,141312,141307],{},"，给一个高度，有个下边框，里面分为左右 2 个盒子",[48,141315],{"style":126920,"src":141316},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-167.png",[1871,141318,141319,141324,141329,141332],{},[195,141320,141321,141323],{},[269,141322,141307],{}," 给 30px 的高度，2个像素的下边框",[195,141325,141326,141327],{},"里面放一个左侧 h3 的盒子，右侧一个div盒子，div盒子里面放 ",[269,141328,139575],{},[195,141330,141331],{},"左侧盒左浮动，右侧盒子右浮动",[195,141333,141334,141336,141337,141339],{},[269,141335,25],{},"标签之间的距离用左右的",[269,141338,31605],{},"撑开即可",[19,141341,141342],{},"结构代码",[316,141344,141345],{"className":127064,"code":139734,"language":127066,"meta":50,"style":50},[269,141346,141347,141353,141363],{"__ignoreMap":50},[324,141348,141349,141351],{"class":326,"line":327},[324,141350,130912],{"class":734},[324,141352,16301],{"class":867},[324,141354,141355,141357,141359,141361],{"class":326,"line":203},[324,141356,131544],{"class":916},[324,141358,52159],{"class":867},[324,141360,24463],{"class":916},[324,141362,2025],{"class":867},[324,141364,141365],{"class":326,"line":338},[324,141366,2296],{"class":867},[19,141368,141369],{},"样式代码",[316,141371,141372],{"className":127064,"code":139734,"language":127066,"meta":50,"style":50},[269,141373,141374,141380,141390],{"__ignoreMap":50},[324,141375,141376,141378],{"class":326,"line":327},[324,141377,130912],{"class":734},[324,141379,16301],{"class":867},[324,141381,141382,141384,141386,141388],{"class":326,"line":203},[324,141383,131544],{"class":916},[324,141385,52159],{"class":867},[324,141387,24463],{"class":916},[324,141389,2025],{"class":867},[324,141391,141392],{"class":326,"line":338},[324,141393,2296],{"class":867},[19,141395,141396,141308],{},[269,141397,141398],{},"box_bd",[19,141400,141401],{},"2 号盒子 box_bd，不要给高度",[48,141403],{"style":126920,"src":141404},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-168.png",[19,141406,141407],{},"这里边塞的都是现有的图片，给图片加上a超链接就可以实现跳转了，所以这个模块看似复杂，实际一点也不复杂，塞现有图片即可",[19,141409,141410],{},"还有这边为了简化css，对内部的五个盒子使用得1类名不用子代选择器，就仅仅类选择器就可以，这样只需要复制做好的家电模块，改一下名改一下图就又增加了新的模块",[19,141412,141413],{},"比如ul下li中有a，对a使用了类选择器.aa,在css中写的时候就不需要写成ul li .aa，直接写.aa就ok了",[1871,141415,141416,141428,141444],{},[195,141417,141418,141420,141421,141424,141425,141427],{},[269,141419,141398],{}," 属于是tab栏的内容区域，所以在这个里面先嵌套一个盒子 ",[269,141422,141423],{},"tab_content","，在",[269,141426,141423],{}," 里面包裹tab选项卡对应的内容",[195,141429,141430,141431,141434,141435,141437,141438,141440,141441,141443],{},"内容被一个大盒子包裹（",[269,141432,141433],{},"tab_list_item","），里面是 ",[269,141436,1871],{}," 包裹 5个 ",[269,141439,195],{},"，每个",[269,141442,195],{},"设置对应的宽度，然后设置浮动",[195,141445,141446,141447,141449,141450,141452,141453],{},"而这5个",[269,141448,195],{},"的宽度是不一致的，在这里我们的做法是 先把宽度的样式列出来，然后给对应的",[269,141451,195],{},"设置",[1871,141454,141455,141473,141476],{},[195,141456,141457,141458,141460,141461,141463,141464,141466,141467,141469,141470,141472],{},"第一个小 ",[269,141459,195],{}," 分为上下结构，上面是 ",[269,141462,1871],{}," 包裹 ",[269,141465,195],{}," ，",[269,141468,195],{},"里面包裹 ",[269,141471,25],{},"，下面插入一张图片",[195,141474,141475],{},"上面的li设置宽高，设置浮动，这样就排列下来了",[195,141477,141478,141479,141481,141482,141484,141485,141487],{},"后面的小 ",[269,141480,195],{}," 里面先放一个",[269,141483,25],{},"标签，然后在",[269,141486,25],{},"标签里面插入图片即可",[19,141489,141342],{},[316,141491,141492],{"className":127811,"code":134566,"language":127813,"meta":50,"style":50},[269,141493,141494],{"__ignoreMap":50},[324,141495,141496,141498,141500,141502,141504,141506,141508,141510,141512,141514,141516,141518],{"class":326,"line":327},[324,141497,1774],{"class":867},[324,141499,48],{"class":52022},[324,141501,55961],{"class":734},[324,141503,913],{"class":867},[324,141505,134581],{"class":738},[324,141507,55969],{"class":734},[324,141509,913],{"class":867},[324,141511,134588],{"class":738},[324,141513,134591],{"class":734},[324,141515,913],{"class":867},[324,141517,134596],{"class":738},[324,141519,52029],{"class":867},[19,141521,141369],{},[316,141523,141524],{"className":127811,"code":134566,"language":127813,"meta":50,"style":50},[269,141525,141526],{"__ignoreMap":50},[324,141527,141528,141530,141532,141534,141536,141538,141540,141542,141544,141546,141548,141550],{"class":326,"line":327},[324,141529,1774],{"class":867},[324,141531,48],{"class":52022},[324,141533,55961],{"class":734},[324,141535,913],{"class":867},[324,141537,134581],{"class":738},[324,141539,55969],{"class":734},[324,141541,913],{"class":867},[324,141543,134588],{"class":738},[324,141545,134591],{"class":734},[324,141547,913],{"class":867},[324,141549,134596],{"class":738},[324,141551,52029],{"class":867},[19,141553,141554],{},"tab栏切换需求！！！！！！介绍：",[48,141556],{"style":126920,"src":141557},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-169.png",[1871,141559,141560,141568,141574,141577],{},[195,141561,141562,141565,141566],{},[269,141563,141564],{},"tab","栏的布局是 ",[269,141567,139575],{},[195,141569,141570,141571,141573],{},"有多少个",[269,141572,141564],{},"选项卡，那么对应就有多少个内容",[195,141575,141576],{},"但是每一次只会显示一个内容块，其他内容进行的隐藏",[195,141578,141579,141580,141583,141584,141586,141587,141589],{},"等后面我们学习了",[269,141581,141582],{},"js","之后，我们就会配合",[269,141585,141582],{},"来实现，",[269,141588,141564],{},"栏的切换",[14,141591,141593],{"id":141592},"_162-列表制作","16.2 列表制作",[35,141595,141597],{"id":141596},"_1621-准备工作","16.2.1 准备工作",[1871,141599,141600,141603,141606,141609],{},[195,141601,141602],{},"列表页面是新的页面，我们需要新建页面文件 list.html",[195,141604,141605],{},"因为列表页的头部和底部基本一致，所以我们需要把首页中的头部和底部的结构复制过来",[195,141607,141608],{},"头部和底部的样式也需要，因此 list.html 中还需要引入 common.css",[195,141610,141611],{},"需要新的 list.css 样式文件，这是列表页专门的样式文件",[35,141613,141615,141616,300,141618,141620],{"id":141614},"_1622-列表页-header-和-nav-修改","16.2.2 列表页 ",[269,141617,132069],{},[269,141619,54435],{}," 修改",[48,141622],{"style":126920,"src":141623},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-170.png",[1871,141625,141626],{},[195,141627,141628],{},"秒杀盒子 sk（ second kill ） 定位即可",[19,141630,140434],{},[316,141632,141633],{"className":127064,"code":132496,"language":127066,"meta":50,"style":50},[269,141634,141635,141639,141653,141657,141671,141675,141689,141693,141707,141711],{"__ignoreMap":50},[324,141636,141637],{"class":326,"line":327},[324,141638,132503],{"class":772},[324,141640,141641,141643,141645,141647,141649,141651],{"class":326,"line":203},[324,141642,132508],{"class":734},[324,141644,80529],{"class":867},[324,141646,129424],{"class":916},[324,141648,52159],{"class":867},[324,141650,132517],{"class":916},[324,141652,129994],{"class":867},[324,141654,141655],{"class":326,"line":338},[324,141656,132524],{"class":772},[324,141658,141659,141661,141663,141665,141667,141669],{"class":326,"line":344},[324,141660,132529],{"class":734},[324,141662,80529],{"class":867},[324,141664,129424],{"class":916},[324,141666,52159],{"class":867},[324,141668,55486],{"class":916},[324,141670,129994],{"class":867},[324,141672,141673],{"class":326,"line":484},[324,141674,132544],{"class":772},[324,141676,141677,141679,141681,141683,141685,141687],{"class":326,"line":491},[324,141678,132549],{"class":734},[324,141680,80529],{"class":867},[324,141682,129424],{"class":916},[324,141684,52159],{"class":867},[324,141686,55553],{"class":916},[324,141688,129994],{"class":867},[324,141690,141691],{"class":326,"line":496},[324,141692,132564],{"class":772},[324,141694,141695,141697,141699,141701,141703,141705],{"class":326,"line":502},[324,141696,132569],{"class":734},[324,141698,80529],{"class":867},[324,141700,129424],{"class":916},[324,141702,52159],{"class":867},[324,141704,86955],{"class":916},[324,141706,129994],{"class":867},[324,141708,141709],{"class":326,"line":508},[324,141710,132584],{"class":772},[324,141712,141713,141715,141717,141719,141721,141723],{"class":326,"line":514},[324,141714,132589],{"class":734},[324,141716,80529],{"class":867},[324,141718,129424],{"class":916},[324,141720,52159],{"class":867},[324,141722,132598],{"class":916},[324,141724,129994],{"class":867},[19,141726,140523],{},[316,141728,141729],{"className":127064,"code":132496,"language":127066,"meta":50,"style":50},[269,141730,141731,141735,141749,141753,141767,141771,141785,141789,141803,141807],{"__ignoreMap":50},[324,141732,141733],{"class":326,"line":327},[324,141734,132503],{"class":772},[324,141736,141737,141739,141741,141743,141745,141747],{"class":326,"line":203},[324,141738,132508],{"class":734},[324,141740,80529],{"class":867},[324,141742,129424],{"class":916},[324,141744,52159],{"class":867},[324,141746,132517],{"class":916},[324,141748,129994],{"class":867},[324,141750,141751],{"class":326,"line":338},[324,141752,132524],{"class":772},[324,141754,141755,141757,141759,141761,141763,141765],{"class":326,"line":344},[324,141756,132529],{"class":734},[324,141758,80529],{"class":867},[324,141760,129424],{"class":916},[324,141762,52159],{"class":867},[324,141764,55486],{"class":916},[324,141766,129994],{"class":867},[324,141768,141769],{"class":326,"line":484},[324,141770,132544],{"class":772},[324,141772,141773,141775,141777,141779,141781,141783],{"class":326,"line":491},[324,141774,132549],{"class":734},[324,141776,80529],{"class":867},[324,141778,129424],{"class":916},[324,141780,52159],{"class":867},[324,141782,55553],{"class":916},[324,141784,129994],{"class":867},[324,141786,141787],{"class":326,"line":496},[324,141788,132564],{"class":772},[324,141790,141791,141793,141795,141797,141799,141801],{"class":326,"line":502},[324,141792,132569],{"class":734},[324,141794,80529],{"class":867},[324,141796,129424],{"class":916},[324,141798,52159],{"class":867},[324,141800,86955],{"class":916},[324,141802,129994],{"class":867},[324,141804,141805],{"class":326,"line":508},[324,141806,132584],{"class":772},[324,141808,141809,141811,141813,141815,141817,141819],{"class":326,"line":514},[324,141810,132589],{"class":734},[324,141812,80529],{"class":867},[324,141814,129424],{"class":916},[324,141816,52159],{"class":867},[324,141818,132598],{"class":916},[324,141820,129994],{"class":867},[1871,141822,141823,141834],{},[195,141824,141825,141826,141829,141830,300,141832],{},"1 号盒子左侧浮动 ",[269,141827,141828],{},"sk_list"," 里面包含 ",[269,141831,1871],{},[269,141833,195],{},[195,141835,141836,141837,141829,141840,300,141842],{},"2 号盒子左侧浮动 ",[269,141838,141839],{},"sk_con",[269,141841,1871],{},[269,141843,195],{},[19,141845,140434],{},[316,141847,141848],{"className":127064,"code":139734,"language":127066,"meta":50,"style":50},[269,141849,141850,141856,141866],{"__ignoreMap":50},[324,141851,141852,141854],{"class":326,"line":327},[324,141853,130912],{"class":734},[324,141855,16301],{"class":867},[324,141857,141858,141860,141862,141864],{"class":326,"line":203},[324,141859,131544],{"class":916},[324,141861,52159],{"class":867},[324,141863,24463],{"class":916},[324,141865,2025],{"class":867},[324,141867,141868],{"class":326,"line":338},[324,141869,2296],{"class":867},[19,141871,140523],{},[316,141873,141874],{"className":127064,"code":139734,"language":127066,"meta":50,"style":50},[269,141875,141876,141882,141892],{"__ignoreMap":50},[324,141877,141878,141880],{"class":326,"line":327},[324,141879,130912],{"class":734},[324,141881,16301],{"class":867},[324,141883,141884,141886,141888,141890],{"class":326,"line":203},[324,141885,131544],{"class":916},[324,141887,52159],{"class":867},[324,141889,24463],{"class":916},[324,141891,2025],{"class":867},[324,141893,141894],{"class":326,"line":338},[324,141895,2296],{"class":867},[35,141897,141899,141900],{"id":141898},"_1623-列表页主体-sk_container","16.2.3 列表页主体 ",[269,141901,141902],{},"sk_container",[48,141904],{"style":126920,"src":141905},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-171.png",[1871,141907,141908,141913],{},[195,141909,141088,141910,141912],{},[269,141911,141902],{}," 给宽度 1200，不要给高度",[195,141914,141915],{},"一定不要忘记清除浮动",[19,141917,140434],{},[316,141919,141920],{"className":127064,"code":139734,"language":127066,"meta":50,"style":50},[269,141921,141922,141928,141938],{"__ignoreMap":50},[324,141923,141924,141926],{"class":326,"line":327},[324,141925,130912],{"class":734},[324,141927,16301],{"class":867},[324,141929,141930,141932,141934,141936],{"class":326,"line":203},[324,141931,131544],{"class":916},[324,141933,52159],{"class":867},[324,141935,24463],{"class":916},[324,141937,2025],{"class":867},[324,141939,141940],{"class":326,"line":338},[324,141941,2296],{"class":867},[192,141943,141944],{},[195,141945,141946],{},"sk_hd制作",[1871,141948,141949],{},[195,141950,141168,141951,141954],{},[269,141952,141953],{},"sk_hd"," ，插入图片即可",[19,141956,140434],{},[316,141958,141959],{"className":127811,"code":134566,"language":127813,"meta":50,"style":50},[269,141960,141961],{"__ignoreMap":50},[324,141962,141963,141965,141967,141969,141971,141973,141975,141977,141979,141981,141983,141985],{"class":326,"line":327},[324,141964,1774],{"class":867},[324,141966,48],{"class":52022},[324,141968,55961],{"class":734},[324,141970,913],{"class":867},[324,141972,134581],{"class":738},[324,141974,55969],{"class":734},[324,141976,913],{"class":867},[324,141978,134588],{"class":738},[324,141980,134591],{"class":734},[324,141982,913],{"class":867},[324,141984,134596],{"class":738},[324,141986,52029],{"class":867},[192,141988,141989],{"start":203},[195,141990,141991],{},"sk_bd制作",[1871,141993,141994],{},[195,141995,141996,141997,142000,142001,300,142003,142005],{},"3 号盒子 ",[269,141998,141999],{},"sk_bd"," ，里面包含很多的 ",[269,142002,1871],{},[269,142004,195],{},[1871,142006,142007,142016],{},[195,142008,142009,142010,142012,142013,142015],{},"当鼠标移入到 ",[269,142011,195],{}," 上面的时候显示红色的边框，在这里先给 ",[269,142014,195],{}," 设置透明的边框，当鼠标移入的时候 设置为红色即可",[195,142017,142018,142019,142021,142022,142024,142025,142028,142029,142031],{},"由于给每个 ",[269,142020,195],{}," 都设置了外边距，导致一行的最后一个 ",[269,142023,195],{}," 掉了下来，在这里我们利用 ",[269,142026,142027],{},"nth-child(4n)"," 来选择出来每一行最后一个 ",[269,142030,195],{},"，去掉外边距就好了",[19,142033,140434],{},[316,142035,142036],{"className":127064,"code":139253,"language":127066,"meta":50,"style":50},[269,142037,142038,142044,142056],{"__ignoreMap":50},[324,142039,142040,142042],{"class":326,"line":327},[324,142041,52333],{"class":52022},[324,142043,16301],{"class":867},[324,142045,142046,142048,142050,142052,142054],{"class":326,"line":203},[324,142047,71192],{"class":916},[324,142049,52159],{"class":867},[324,142051,1056],{"class":916},[324,142053,52278],{"class":916},[324,142055,2025],{"class":867},[324,142057,142058],{"class":326,"line":338},[324,142059,2296],{"class":867},[19,142061,140523],{},[316,142063,142064],{"className":127064,"code":139253,"language":127066,"meta":50,"style":50},[269,142065,142066,142072,142084],{"__ignoreMap":50},[324,142067,142068,142070],{"class":326,"line":327},[324,142069,52333],{"class":52022},[324,142071,16301],{"class":867},[324,142073,142074,142076,142078,142080,142082],{"class":326,"line":203},[324,142075,71192],{"class":916},[324,142077,52159],{"class":867},[324,142079,1056],{"class":916},[324,142081,52278],{"class":916},[324,142083,2025],{"class":867},[324,142085,142086],{"class":326,"line":338},[324,142087,2296],{"class":867},[14,142089,142091],{"id":142090},"_163-注册页面制作","16.3 注册页面制作",[48,142093],{"style":126920,"src":142094},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-172.png",[19,142096,142097,142099],{},[116,142098,9754],{}," 注册页面比较隐私，为了保护用户信息，我们不需要对当前页面做SEO优化",[48,142101],{"style":126920,"src":142102},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-173.png",[35,142104,142106],{"id":142105},"_1631-准备工作","16.3.1 准备工作",[1871,142108,142109,142112],{},[195,142110,142111],{},"创建register.html，引入 base.css，引入favicon图标",[195,142113,142114],{},"创建register.css ，在html页面进行引入",[35,142116,142118,142119,142121],{"id":142117},"_1632-header-头部实现","16.3.2 ",[269,142120,132069],{}," 头部实现",[1871,142123,142124,142127],{},[195,142125,142126],{},"整个内容用 版心 进行包裹",[195,142128,142129],{},"第一个头部区域怎么简单怎么来，用一个header盒子包裹链接，链接里面放图片即可",[19,142131,140434],{},[316,142133,142134],{"className":127811,"code":134566,"language":127813,"meta":50,"style":50},[269,142135,142136],{"__ignoreMap":50},[324,142137,142138,142140,142142,142144,142146,142148,142150,142152,142154,142156,142158,142160],{"class":326,"line":327},[324,142139,1774],{"class":867},[324,142141,48],{"class":52022},[324,142143,55961],{"class":734},[324,142145,913],{"class":867},[324,142147,134581],{"class":738},[324,142149,55969],{"class":734},[324,142151,913],{"class":867},[324,142153,134588],{"class":738},[324,142155,134591],{"class":734},[324,142157,913],{"class":867},[324,142159,134596],{"class":738},[324,142161,52029],{"class":867},[19,142163,140523],{},[316,142165,142166],{"className":127811,"code":134566,"language":127813,"meta":50,"style":50},[269,142167,142168],{"__ignoreMap":50},[324,142169,142170,142172,142174,142176,142178,142180,142182,142184,142186,142188,142190,142192],{"class":326,"line":327},[324,142171,1774],{"class":867},[324,142173,48],{"class":52022},[324,142175,55961],{"class":734},[324,142177,913],{"class":867},[324,142179,134581],{"class":738},[324,142181,55969],{"class":734},[324,142183,913],{"class":867},[324,142185,134588],{"class":738},[324,142187,134591],{"class":734},[324,142189,913],{"class":867},[324,142191,134596],{"class":738},[324,142193,52029],{"class":867},[35,142195,142197,142198,142201],{"id":142196},"_1633-registerarea-主体模块实现","16.3.3 ",[269,142199,142200],{},"registerarea"," 主体模块实现",[48,142203],{"style":126920,"src":142204},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-174.png",[19,142206,142207],{},"整个大盒子 高度为 522px，设置4个边框",[19,142209,140434],{},[316,142211,142212],{"className":127064,"code":131221,"language":127066,"meta":50,"style":50},[269,142213,142214,142220,142236],{"__ignoreMap":50},[324,142215,142216,142218],{"class":326,"line":327},[324,142217,52333],{"class":52022},[324,142219,16301],{"class":867},[324,142221,142222,142224,142226,142228,142230,142232,142234],{"class":326,"line":203},[324,142223,71618],{"class":916},[324,142225,52159],{"class":867},[324,142227,1082],{"class":916},[324,142229,52214],{"class":863},[324,142231,52243],{"class":916},[324,142233,130456],{"class":916},[324,142235,2025],{"class":867},[324,142237,142238],{"class":326,"line":338},[324,142239,2296],{"class":867},[19,142241,140523],{},[316,142243,142244],{"className":127064,"code":131221,"language":127066,"meta":50,"style":50},[269,142245,142246,142252,142268],{"__ignoreMap":50},[324,142247,142248,142250],{"class":326,"line":327},[324,142249,52333],{"class":52022},[324,142251,16301],{"class":867},[324,142253,142254,142256,142258,142260,142262,142264,142266],{"class":326,"line":203},[324,142255,71618],{"class":916},[324,142257,52159],{"class":867},[324,142259,1082],{"class":916},[324,142261,52214],{"class":863},[324,142263,52243],{"class":916},[324,142265,130456],{"class":916},[324,142267,2025],{"class":867},[324,142269,142270],{"class":326,"line":338},[324,142271,2296],{"class":867},[19,142273,142274],{},"1号盒子 是一个 h3 标签，放标题",[1871,142276,142277],{},[195,142278,142279],{},"里面放 注册新用户 的文字，然后包一个 div的标签，让div标签右浮动",[19,142281,140434],{},[316,142283,142284],{"className":127064,"code":139734,"language":127066,"meta":50,"style":50},[269,142285,142286,142292,142302],{"__ignoreMap":50},[324,142287,142288,142290],{"class":326,"line":327},[324,142289,130912],{"class":734},[324,142291,16301],{"class":867},[324,142293,142294,142296,142298,142300],{"class":326,"line":203},[324,142295,131544],{"class":916},[324,142297,52159],{"class":867},[324,142299,24463],{"class":916},[324,142301,2025],{"class":867},[324,142303,142304],{"class":326,"line":338},[324,142305,2296],{"class":867},[19,142307,140523],{},[316,142309,142310],{"className":127064,"code":139734,"language":127066,"meta":50,"style":50},[269,142311,142312,142318,142328],{"__ignoreMap":50},[324,142313,142314,142316],{"class":326,"line":327},[324,142315,130912],{"class":734},[324,142317,16301],{"class":867},[324,142319,142320,142322,142324,142326],{"class":326,"line":203},[324,142321,131544],{"class":916},[324,142323,52159],{"class":867},[324,142325,24463],{"class":916},[324,142327,2025],{"class":867},[324,142329,142330],{"class":326,"line":338},[324,142331,2296],{"class":867},[19,142333,142334],{},"2号盒子 里面放注册的内容",[1871,142336,142337,142340,142349,142363,142376,142379,142382,142400,142414],{},[195,142338,142339],{},"先用一个盒子，把整个内容包裹起来，设置盒子宽度（600px），让这个盒子距上边50px，水平居中显示",[195,142341,142342,142343,142345,142346,142348],{},"里面的内容利用 ",[269,142344,1871],{}," 包含 ",[269,142347,195],{}," 来实现的（不需要用表格）",[195,142350,139578,142351,142353,142354,142356,142357,142359,142360,142362],{},[269,142352,195],{}," 里面，左侧放 ",[269,142355,34330],{}," 标签， 中间放",[269,142358,54543],{}," 标签， 右侧放 ",[269,142361,324],{}," 提示信息",[195,142364,142365,142366,142368,142369,142371,142372,142375],{},"左侧 ",[269,142367,34330],{},"里面的文字都是右对齐，我们可以给",[269,142370,34330],{},"设置一个宽度（88px），然后利用",[269,142373,142374],{},"text-align"," 来设置右对齐",[195,142377,142378],{},"input 表单设置 宽度 242px，高度 37px，设置边框",[195,142380,142381],{},"右侧 span修饰一下文字颜色",[195,142383,142384,142385],{},"提示信息的样式优化",[1871,142386,142387,142390,142393],{},[195,142388,142389],{},"定义一个 错误的样式，定义一个 正确的样式，然后给对应的盒子设置类名",[195,142391,142392],{},"在span里面放一个小盒子，这个小盒子用来显示 图标的，设置一下宽高 （20x20）",[195,142394,142395,142396,142399],{},"插入图片了之后，默认与文字是基线对齐，通过 ",[269,142397,142398],{},"vertical-algin"," 来设置 图片与文字对齐方式",[195,142401,142402,142403],{},"安装程度的布局，在第4个小 li 里面放 三个盒子，分别放 弱、中、强",[1871,142404,142405,142411],{},[195,142406,142407,142408,142410],{},"设置 ",[269,142409,24280],{}," 的 左右 12px 的内边距，设置一下文字颜色",[195,142412,142413],{},"分别设置 背景颜色",[195,142415,142416,142417,142419],{},"同意协议 和 完成注册 都是用 ",[269,142418,195],{}," 进行包裹",[19,142421,140434],{},[316,142423,142424],{"className":127064,"code":141007,"language":127066,"meta":50,"style":50},[269,142425,142426,142432,142442],{"__ignoreMap":50},[324,142427,142428,142430],{"class":326,"line":327},[324,142429,52333],{"class":52022},[324,142431,16301],{"class":867},[324,142433,142434,142436,142438,142440],{"class":326,"line":203},[324,142435,71600],{"class":916},[324,142437,52159],{"class":867},[324,142439,141024],{"class":916},[324,142441,2025],{"class":867},[324,142443,142444],{"class":326,"line":338},[324,142445,2296],{"class":867},[19,142447,140523],{},[316,142449,142450],{"className":127064,"code":141007,"language":127066,"meta":50,"style":50},[269,142451,142452,142458,142468],{"__ignoreMap":50},[324,142453,142454,142456],{"class":326,"line":327},[324,142455,52333],{"class":52022},[324,142457,16301],{"class":867},[324,142459,142460,142462,142464,142466],{"class":326,"line":203},[324,142461,71600],{"class":916},[324,142463,52159],{"class":867},[324,142465,141024],{"class":916},[324,142467,2025],{"class":867},[324,142469,142470],{"class":326,"line":338},[324,142471,2296],{"class":867},[35,142473,142475],{"id":142474},"_1634-底部实现","16.3.4 底部实现",[19,142477,140434],{},[316,142479,142480],{"className":127064,"code":141007,"language":127066,"meta":50,"style":50},[269,142481,142482,142488,142498],{"__ignoreMap":50},[324,142483,142484,142486],{"class":326,"line":327},[324,142485,52333],{"class":52022},[324,142487,16301],{"class":867},[324,142489,142490,142492,142494,142496],{"class":326,"line":203},[324,142491,71600],{"class":916},[324,142493,52159],{"class":867},[324,142495,141024],{"class":916},[324,142497,2025],{"class":867},[324,142499,142500],{"class":326,"line":338},[324,142501,2296],{"class":867},[19,142503,140523],{},[316,142505,142506],{"className":127811,"code":131168,"language":127813,"meta":50,"style":50},[269,142507,142508,142512,142526,142530],{"__ignoreMap":50},[324,142509,142510],{"class":326,"line":327},[324,142511,131175],{"class":772},[324,142513,142514,142516,142518,142520,142522,142524],{"class":326,"line":203},[324,142515,1774],{"class":867},[324,142517,52333],{"class":52022},[324,142519,54208],{"class":734},[324,142521,913],{"class":867},[324,142523,131188],{"class":738},[324,142525,52029],{"class":867},[324,142527,142528],{"class":326,"line":338},[324,142529,131195],{"class":867},[324,142531,142532,142534,142536],{"class":326,"line":344},[324,142533,52507],{"class":867},[324,142535,52333],{"class":52022},[324,142537,52029],{"class":867},[14,142539,142541],{"id":142540},"_164-项目总结","16.4 项目总结",[192,142543,142544,142547,142550,142553],{},[195,142545,142546],{},"大盒子添加水平居中后，它的子盒子也会水平居中",[195,142548,142549],{},"一般情况下，a包含有宽度的盒子，a需要转换为块级元素",[195,142551,142552],{},"一个盒子里边的子盒子进行浮动的时候，如果在父盒子中放不开，则会导致子盒子放不下的跑到下边去",[195,142554,142555],{},"出现下图注意点，多半是因为文字环绕浮动的盒子了，解决方式就是在这个浮动盒子的父盒子设置为多余父盒子的部分进行隐藏：overflow:hidden;隐藏掉多余的部分，外边的文字就没有浮动盒子了，就可以实现位置的 空置，文字就不在环绕了",[48,142557],{"style":126920,"src":142558},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-175.png",[192,142560,142561],{"start":484},[195,142562,142563],{},"对于行内块元素，如果要类似于下边图片的效果，可以使用padding来撑开盒子，不要用margin，这个是处理盒子之间的问题",[48,142565],{"style":126920,"src":142566},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-176.png",[192,142568,142569],{"start":491},[195,142570,142571],{},"对于提交按钮不要使用button，要使用input，参数选择submit，在里边的value中写的字，在给input设置宽度和高度后，这个文字会居中",[48,142573],{"style":126920,"src":142574},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-177.png",[316,142576,142577],{"className":127811,"code":137221,"language":127813,"meta":50,"style":50},[269,142578,142579],{"__ignoreMap":50},[324,142580,142581,142583,142585,142587,142589,142591,142593,142595,142597,142599,142601,142603],{"class":326,"line":327},[324,142582,1774],{"class":867},[324,142584,54543],{"class":52022},[324,142586,54546],{"class":734},[324,142588,913],{"class":867},[324,142590,63421],{"class":738},[324,142592,15649],{"class":734},[324,142594,913],{"class":867},[324,142596,137242],{"class":738},[324,142598,61742],{"class":734},[324,142600,913],{"class":867},[324,142602,137249],{"class":738},[324,142604,52029],{"class":867},[192,142606,142607,142610],{"start":496},[195,142608,142609],{},"如果图片过大，想要缩放它的话，只需要设置宽度或者高度其中一个就可以，另一个参数就会等比缩放",[195,142611,142612],{},"使用a链接，鼠标放上去提示信息，在a中使用title属性",[775,142614,142615],{},"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":50,"searchDepth":203,"depth":203,"links":142617},[142618,142623,142630,142638],{"id":140244,"depth":203,"text":140245,"children":142619},[142620,142621,142622],{"id":140248,"depth":338,"text":140249},{"id":140979,"depth":338,"text":140980},{"id":141292,"depth":338,"text":141293},{"id":141592,"depth":203,"text":141593,"children":142624},[142625,142626,142628],{"id":141596,"depth":338,"text":141597},{"id":141614,"depth":338,"text":142627},"16.2.2 列表页 header 和 nav 修改",{"id":141898,"depth":338,"text":142629},"16.2.3 列表页主体 sk_container",{"id":142090,"depth":203,"text":142091,"children":142631},[142632,142633,142635,142637],{"id":142105,"depth":338,"text":142106},{"id":142117,"depth":338,"text":142634},"16.3.2 header 头部实现",{"id":142196,"depth":338,"text":142636},"16.3.3 registerarea 主体模块实现",{"id":142474,"depth":338,"text":142475},{"id":142540,"depth":203,"text":142541},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch16",{"title":140236,"description":791},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发","kRJOBRy9l0VcQGyFjUTtaqBcx5fbxBnGM_Nor-phNrY",{"id":142645,"title":142646,"body":142647,"description":791,"extension":792,"meta":142755,"navigation":487,"path":142756,"seo":142757,"stem":142758,"__hash__":142759},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布.md","17. Web服务器与网站发布",{"type":7,"value":142648,"toc":142750},[142649,142652,142656,142659,142662,142671,142680,142684,142689,142696,142714,142717,142720,142723,142726,142729,142732,142735,142738,142741,142744,142747],[10,142650,142646],{"id":142651},"_17-web服务器与网站发布",[14,142653,142655],{"id":142654},"_171-web服务器","17.1 Web服务器",[19,142657,142658],{},"把自己网站上传到服务器上，可以让其他人访问",[48,142660],{"style":126920,"src":142661},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-178.png",[19,142663,142664,142667,142668],{},[116,142665,142666],{},"服务器"," （我们也会称之为主机）是提供计算服务的设备，它也是一台计算机。在网络环境下，根据服务器提供的服务类型不同，服务器又分为文件服务器、数据库服务器、应用程序服务器、 ",[116,142669,142670],{},"Web 服务器等",[19,142672,142673,142674,300,142677,26464],{},"根据服务器在网络中所在的位置不同，又可分为 ",[116,142675,142676],{},"本地服务器（自己电脑设置为服务器，就是本地服务器）",[116,142678,142679],{},"远程服务器",[35,142681,142683],{"id":142682},"_1711-将自己的网站上传到远程服务器","17.1.1 将自己的网站上传到远程服务器（★★★）",[19,142685,142686],{},[116,142687,142688],{},"注意：一般稳定的服务器都是需要收费的。 比如：阿里云",[19,142690,142691,142692],{},"这里给大家推荐一个免费的远程服务器（免费空间） ",[25,142693,142694],{"href":142694,"rel":142695},"http:\u002F\u002Ffree.3v.do\u002F",[29],[1871,142697,142698,142701,142704,142711],{},[195,142699,142700],{},"去免费空间网站注册账号。",[195,142702,142703],{},"记录下主机名、用户名、密码、域名。",[195,142705,142706,142707,142710],{},"利用 ",[269,142708,142709],{},"utftp"," 软件 上传网站到远程服务器",[195,142712,142713],{},"在浏览器中输入域名，即可访问我们的品优购网站了",[19,142715,142716],{},"使用软件上传，对上传软件文件进行解压",[48,142718],{"style":126920,"src":142719},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-179.png",[48,142721],{"style":126920,"src":142722},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-180.png",[19,142724,142725],{},"输入刚刚申请的服务器账号信息：",[48,142727],{"style":126920,"src":142728},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-181.png",[48,142730],{"style":126920,"src":142731},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-182.png",[48,142733],{"style":126920,"src":142734},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-183.png",[48,142736],{"style":126920,"src":142737},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-184.png",[19,142739,142740],{},"将内容拖过去即可，左边是电脑文件，右边是服务器",[48,142742],{"style":126920,"src":142743},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-185.png",[19,142745,142746],{},"浏览器输入域名即可访问",[19,142748,142749],{},"首页一定必须是index",{"title":50,"searchDepth":203,"depth":203,"links":142751},[142752],{"id":142654,"depth":203,"text":142655,"children":142753},[142754],{"id":142682,"depth":338,"text":142683},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch17-web",{"title":142646,"description":791},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布","cCpziV1cqCY-g-yi7uFqH5oT2wBaRMsy1XAXBDnoXXo",{"id":142761,"title":142762,"body":142763,"description":791,"extension":792,"meta":143690,"navigation":487,"path":143691,"seo":143692,"stem":143693,"__hash__":143694},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换.md","18. 2D动画与3D转换",{"type":7,"value":142764,"toc":143673},[142765,142768,142772,142775,142778,142789,142792,142796,142800,142805,142808,142811,142814,142817,142821,142847,142851,142855,142858,142861,142865,142898,142902,142905,142908,142972,142976,142980,142983,142986,142989,142993,143038,143042,143045,143075,143079,143083,143086,143089,143093,143096,143165,143168,143276,143278,143284,143288,143291,143294,143390,143393,143397,143421,143425,143428,143432,143435,143439,143442,143445,143448,143451,143455,143458,143461,143465,143469,143472,143475,143478,143481,143485,143488,143492,143495,143498,143543,143547,143551,143554,143557,143560,143592,143596,143599,143633,143637,143640,143670],[10,142766,142762],{"id":142767},"_18-2d动画与3d转换",[14,142769,142771],{"id":142770},"_181-css3-2d转换","18.1 CSS3 2D转换",[19,142773,142774],{},"**转换（transform）**是CSS3中具有颠覆性的特征之一，可以实现元素的位移、旋转、缩放等效果",[19,142776,142777],{},"转换（transform）你可以简单理解为变形",[1871,142779,142780,142783,142786],{},[195,142781,142782],{},"移动：translate",[195,142784,142785],{},"旋转：rotate",[195,142787,142788],{},"缩放：scale",[48,142790],{"style":126920,"src":142791},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-186.png",[35,142793,142795],{"id":142794},"_1811-2d-转换之移动-translate","18.1.1 2D 转换之移动 translate",[151,142797,142799],{"id":142798},"_18111-translate介绍","18.1.1.1 translate介绍",[19,142801,142802,142803],{},"2D移动是2D转换里面的一种功能，可以改变元素在页面中的位置，类似",[116,142804,133723],{},[48,142806],{"style":126920,"src":142807},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-187.png",[19,142809,142810],{},"translate最大的优点就是不会影响其他元素的位置，可以凭借这一优点去整过渡效果transition",[19,142812,142813],{},"对于行内元素无效",[19,142815,142816],{},"总结：移动盒子的位置三种方法：定位、盒子的外边距、2d转换移动",[151,142818,142820],{"id":142819},"_18112-盒子实现水平居中","18.1.1.2 盒子实现水平居中",[316,142822,142823],{"className":127064,"code":139253,"language":127066,"meta":50,"style":50},[269,142824,142825,142831,142843],{"__ignoreMap":50},[324,142826,142827,142829],{"class":326,"line":327},[324,142828,52333],{"class":52022},[324,142830,16301],{"class":867},[324,142832,142833,142835,142837,142839,142841],{"class":326,"line":203},[324,142834,71192],{"class":916},[324,142836,52159],{"class":867},[324,142838,1056],{"class":916},[324,142840,52278],{"class":916},[324,142842,2025],{"class":867},[324,142844,142845],{"class":326,"line":338},[324,142846,2296],{"class":867},[35,142848,142850],{"id":142849},"_1812-2d-转换之旋转-rotate","18.1.2 2D 转换之旋转 rotate",[151,142852,142854],{"id":142853},"_18121-rotate介绍","18.1.2.1 rotate介绍",[19,142856,142857],{},"2D旋转指的是让元素在2维平面内顺时针旋转或者逆时针旋转",[48,142859],{"style":126920,"src":142860},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-188.png",[151,142862,142864],{"id":142863},"_18122-旋转效果","18.1.2.2 旋转效果",[316,142866,142868],{"className":127064,"code":142867,"language":127066,"meta":50,"style":50},"div {\n  transform: rotate(45deg);\n}\n",[269,142869,142870,142876,142894],{"__ignoreMap":50},[324,142871,142872,142874],{"class":326,"line":327},[324,142873,52333],{"class":52022},[324,142875,16301],{"class":867},[324,142877,142878,142880,142882,142885,142887,142889,142892],{"class":326,"line":203},[324,142879,137048],{"class":916},[324,142881,52159],{"class":867},[324,142883,142884],{"class":916},"rotate",[324,142886,868],{"class":867},[324,142888,1393],{"class":916},[324,142890,142891],{"class":863},"deg",[324,142893,3448],{"class":867},[324,142895,142896],{"class":326,"line":338},[324,142897,2296],{"class":867},[151,142899,142901],{"id":142900},"_18123-三角做法","18.1.2.3 三角做法",[19,142903,142904],{},"该下标当经过最外层大盒子时会实现向上反转",[48,142906],{"style":126920,"src":142907},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-189.png",[316,142909,142910],{"className":127064,"code":135584,"language":127066,"meta":50,"style":50},[269,142911,142912,142916,142922,142932,142942,142958,142968],{"__ignoreMap":50},[324,142913,142914],{"class":326,"line":327},[324,142915,135591],{"class":772},[324,142917,142918,142920],{"class":326,"line":203},[324,142919,135596],{"class":734},[324,142921,16301],{"class":867},[324,142923,142924,142926,142928,142930],{"class":326,"line":338},[324,142925,71290],{"class":916},[324,142927,52159],{"class":867},[324,142929,1056],{"class":916},[324,142931,2025],{"class":867},[324,142933,142934,142936,142938,142940],{"class":326,"line":344},[324,142935,71510],{"class":916},[324,142937,52159],{"class":867},[324,142939,1056],{"class":916},[324,142941,2025],{"class":867},[324,142943,142944,142946,142948,142950,142952,142954,142956],{"class":326,"line":484},[324,142945,71618],{"class":916},[324,142947,52159],{"class":867},[324,142949,1310],{"class":916},[324,142951,52214],{"class":863},[324,142953,52243],{"class":916},[324,142955,64713],{"class":916},[324,142957,2025],{"class":867},[324,142959,142960,142962,142964,142966],{"class":326,"line":491},[324,142961,135639],{"class":916},[324,142963,52159],{"class":867},[324,142965,63091],{"class":916},[324,142967,2025],{"class":867},[324,142969,142970],{"class":326,"line":496},[324,142971,2296],{"class":867},[35,142973,142975],{"id":142974},"_1813-2d-转换中心点-transform-origin","18.1.3 2D 转换中心点 transform-origin",[151,142977,142979],{"id":142978},"_18131-transform-origin介绍","18.1.3.1 transform-origin介绍",[19,142981,142982],{},"设置中心点",[48,142984],{"style":126920,"src":142985},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-190.png",[19,142987,142988],{},"设置像素时这个中心点也是相对于这个大盒子来说的",[151,142990,142992],{"id":142991},"_18132-盒子不同中心旋转","18.1.3.2 盒子不同中心旋转",[316,142994,142996],{"className":127064,"code":142995,"language":127066,"meta":50,"style":50},"\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",[269,142997,142998,143003,143009,143024,143029,143034],{"__ignoreMap":50},[324,142999,143000],{"class":326,"line":327},[324,143001,143002],{"class":772},"\u002F* 转换中心点 *\u002F\n",[324,143004,143005,143007],{"class":326,"line":203},[324,143006,52333],{"class":52022},[324,143008,16301],{"class":867},[324,143010,143011,143014,143016,143018,143020,143022],{"class":326,"line":338},[324,143012,143013],{"class":916},"  transform-origin",[324,143015,52159],{"class":867},[324,143017,52314],{"class":916},[324,143019,17873],{"class":916},[324,143021,130927],{"class":867},[324,143023,135737],{"class":772},[324,143025,143026],{"class":326,"line":344},[324,143027,143028],{"class":772},"  \u002F* transform-origin: 50% 50%; *\u002F\n",[324,143030,143031],{"class":326,"line":484},[324,143032,143033],{"class":772},"  \u002F* transform-origin: left top; *\u002F\n",[324,143035,143036],{"class":326,"line":491},[324,143037,2296],{"class":867},[151,143039,143041],{"id":143040},"_18133-旋转案例","18.1.3.3 旋转案例",[48,143043],{"style":126920,"src":143044},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-191.png",[316,143046,143047],{"className":127064,"code":142867,"language":127066,"meta":50,"style":50},[269,143048,143049,143055,143071],{"__ignoreMap":50},[324,143050,143051,143053],{"class":326,"line":327},[324,143052,52333],{"class":52022},[324,143054,16301],{"class":867},[324,143056,143057,143059,143061,143063,143065,143067,143069],{"class":326,"line":203},[324,143058,137048],{"class":916},[324,143060,52159],{"class":867},[324,143062,142884],{"class":916},[324,143064,868],{"class":867},[324,143066,1393],{"class":916},[324,143068,142891],{"class":863},[324,143070,3448],{"class":867},[324,143072,143073],{"class":326,"line":338},[324,143074,2296],{"class":867},[35,143076,143078],{"id":143077},"_1814-2d-转换之缩放scale","18.1.4 2D 转换之缩放scale",[151,143080,143082],{"id":143081},"_18141-scale介绍","18.1.4.1 scale介绍",[19,143084,143085],{},"缩放，顾名思义，可以放大和缩小。 只要给元素添加上了这个属性就能控制它放大还是缩小",[48,143087],{"style":126920,"src":143088},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-192.png",[151,143090,143092],{"id":143091},"_18142-分页按钮","18.1.4.2 分页按钮",[48,143094],{"style":126920,"src":143095},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-193.png",[316,143097,143099],{"className":127064,"code":143098,"language":127066,"meta":50,"style":50},"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",[269,143100,143101,143107,143123,143127,143131,143136,143142,143156,143161],{"__ignoreMap":50},[324,143102,143103,143105],{"class":326,"line":327},[324,143104,52333],{"class":52022},[324,143106,16301],{"class":867},[324,143108,143109,143111,143113,143116,143118,143121],{"class":326,"line":203},[324,143110,137048],{"class":916},[324,143112,52159],{"class":867},[324,143114,143115],{"class":916},"scale",[324,143117,868],{"class":867},[324,143119,143120],{"class":916},"1.2",[324,143122,3448],{"class":867},[324,143124,143125],{"class":326,"line":338},[324,143126,2296],{"class":867},[324,143128,143129],{"class":326,"line":344},[324,143130,136525],{"class":867},[324,143132,143133],{"class":326,"line":484},[324,143134,143135],{"class":772},"\u002F* 2D 缩放 *\u002F\n",[324,143137,143138,143140],{"class":326,"line":491},[324,143139,52333],{"class":52022},[324,143141,16301],{"class":867},[324,143143,143144,143146,143148,143150,143152,143154],{"class":326,"line":496},[324,143145,137048],{"class":916},[324,143147,52159],{"class":867},[324,143149,143115],{"class":916},[324,143151,868],{"class":867},[324,143153,143120],{"class":916},[324,143155,3448],{"class":867},[324,143157,143158],{"class":326,"line":502},[324,143159,143160],{"class":772},"  \u002F* transform: scale(1.2, 0.8);  宽1.2倍，高0.8倍 *\u002F\n",[324,143162,143163],{"class":326,"line":508},[324,143164,2296],{"class":867},[19,143166,143167],{},"@keyframes slide {\nfrom { transform: translateX(0); }\nto { transform: translateX(100px); }\n}\ndiv {\nanimation: slide 1s ease infinite;\n}",[316,143169,143171],{"className":127064,"code":143170,"language":127066,"meta":50,"style":50},"\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",[269,143172,143173,143178,143188,143209,143230,143234,143239,143245,143272],{"__ignoreMap":50},[324,143174,143175],{"class":326,"line":327},[324,143176,143177],{"class":772},"\u002F* 定义动画 *\u002F\n",[324,143179,143180,143183,143186],{"class":326,"line":203},[324,143181,143182],{"class":863},"@keyframes",[324,143184,143185],{"class":5945}," move",[324,143187,16301],{"class":867},[324,143189,143190,143193,143195,143197,143199,143202,143204,143206],{"class":326,"line":338},[324,143191,143192],{"class":734},"  0%",[324,143194,80529],{"class":867},[324,143196,48856],{"class":916},[324,143198,52159],{"class":867},[324,143200,143201],{"class":916},"translateX",[324,143203,868],{"class":867},[324,143205,1056],{"class":916},[324,143207,143208],{"class":867},"); }\n",[324,143210,143211,143214,143216,143218,143220,143222,143224,143226,143228],{"class":326,"line":344},[324,143212,143213],{"class":734},"  100%",[324,143215,80529],{"class":867},[324,143217,48856],{"class":916},[324,143219,52159],{"class":867},[324,143221,143201],{"class":916},[324,143223,868],{"class":867},[324,143225,1175],{"class":916},[324,143227,52214],{"class":863},[324,143229,143208],{"class":867},[324,143231,143232],{"class":326,"line":484},[324,143233,2296],{"class":867},[324,143235,143236],{"class":326,"line":491},[324,143237,143238],{"class":772},"\u002F* 调用动画 *\u002F\n",[324,143240,143241,143243],{"class":326,"line":496},[324,143242,52333],{"class":52022},[324,143244,16301],{"class":867},[324,143246,143247,143250,143252,143254,143256,143258,143260,143262,143264,143267,143270],{"class":326,"line":502},[324,143248,143249],{"class":916},"  animation",[324,143251,52159],{"class":867},[324,143253,135750],{"class":916},[324,143255,25842],{"class":916},[324,143257,1559],{"class":863},[324,143259,79402],{"class":916},[324,143261,4822],{"class":916},[324,143263,1559],{"class":863},[324,143265,143266],{"class":916}," infinite",[324,143268,143269],{"class":916}," alternate",[324,143271,2025],{"class":867},[324,143273,143274],{"class":326,"line":508},[324,143275,2296],{"class":867},[19,143277,143167],{},[316,143279,143282],{"className":143280,"code":143281,"language":5916},[5914],"\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",[269,143283,143281],{"__ignoreMap":50},[151,143285,143287],{"id":143286},"_18222-奔跑的熊大","18.2.2.2 奔跑的熊大",[19,143289,143290],{},"这个需要用到动画效果，同时要使用steps，一步一步的展示，不可以用ease等值，这个图片一般很大，上边集成了运动的多个状态",[48,143292],{"style":126920,"src":143293},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-203.png",[316,143295,143296],{"className":127064,"code":143170,"language":127066,"meta":50,"style":50},[269,143297,143298,143302,143310,143328,143348,143352,143356,143362,143386],{"__ignoreMap":50},[324,143299,143300],{"class":326,"line":327},[324,143301,143177],{"class":772},[324,143303,143304,143306,143308],{"class":326,"line":203},[324,143305,143182],{"class":863},[324,143307,143185],{"class":5945},[324,143309,16301],{"class":867},[324,143311,143312,143314,143316,143318,143320,143322,143324,143326],{"class":326,"line":338},[324,143313,143192],{"class":734},[324,143315,80529],{"class":867},[324,143317,48856],{"class":916},[324,143319,52159],{"class":867},[324,143321,143201],{"class":916},[324,143323,868],{"class":867},[324,143325,1056],{"class":916},[324,143327,143208],{"class":867},[324,143329,143330,143332,143334,143336,143338,143340,143342,143344,143346],{"class":326,"line":344},[324,143331,143213],{"class":734},[324,143333,80529],{"class":867},[324,143335,48856],{"class":916},[324,143337,52159],{"class":867},[324,143339,143201],{"class":916},[324,143341,868],{"class":867},[324,143343,1175],{"class":916},[324,143345,52214],{"class":863},[324,143347,143208],{"class":867},[324,143349,143350],{"class":326,"line":484},[324,143351,2296],{"class":867},[324,143353,143354],{"class":326,"line":491},[324,143355,143238],{"class":772},[324,143357,143358,143360],{"class":326,"line":496},[324,143359,52333],{"class":52022},[324,143361,16301],{"class":867},[324,143363,143364,143366,143368,143370,143372,143374,143376,143378,143380,143382,143384],{"class":326,"line":502},[324,143365,143249],{"class":916},[324,143367,52159],{"class":867},[324,143369,135750],{"class":916},[324,143371,25842],{"class":916},[324,143373,1559],{"class":863},[324,143375,79402],{"class":916},[324,143377,4822],{"class":916},[324,143379,1559],{"class":863},[324,143381,143266],{"class":916},[324,143383,143269],{"class":916},[324,143385,2025],{"class":867},[324,143387,143388],{"class":326,"line":508},[324,143389,2296],{"class":867},[19,143391,143392],{},"背景如果跟父盒子一样的话，往左走100%会使得背景露出来，此时不要忘记背景平铺：repeat-x,repeat-y",[35,143394,143396],{"id":143395},"_1823-知识点回顾","18.2.3 知识点回顾",[316,143398,143399],{"className":127064,"code":129233,"language":127066,"meta":50,"style":50},[269,143400,143401,143407,143417],{"__ignoreMap":50},[324,143402,143403,143405],{"class":326,"line":327},[324,143404,52333],{"class":52022},[324,143406,16301],{"class":867},[324,143408,143409,143411,143413,143415],{"class":326,"line":203},[324,143410,129246],{"class":916},[324,143412,52159],{"class":867},[324,143414,62458],{"class":916},[324,143416,2025],{"class":867},[324,143418,143419],{"class":326,"line":338},[324,143420,2296],{"class":867},[14,143422,143424],{"id":143423},"_183-3d-转换","18.3 3D 转换",[19,143426,143427],{},"我们生活的环境是3D的，照片就是3D物体在2D平面呈现的例子",[35,143429,143431],{"id":143430},"_1831-坐标轴认识","18.3.1 坐标轴认识",[48,143433],{"style":126920,"src":143434},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-204.png",[35,143436,143438],{"id":143437},"_1832-3d移动-translate3d","18.3.2 3D移动 translate3d",[48,143440],{"style":126920,"src":143441},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-205.png",[19,143443,143444],{},"x,y,z如果没有移动量的话，不要不写，不可省略",[19,143446,143447],{},"translate3d的效果需要搭配透视perspective来使用",[48,143449],{"style":126920,"src":143450},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-206.png",[35,143452,143454],{"id":143453},"_1833-透视-perspective","18.3.3 透视 perspective",[48,143456],{"style":126920,"src":143457},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-207.png",[19,143459,143460],{},"透视写在父盒子上，单位为像素",[35,143462,143464],{"id":143463},"_1834-3d旋转-rotate3d","18.3.4 3D旋转 rotate3d",[151,143466,143468],{"id":143467},"_18341-分开解释","18.3.4.1 分开解释",[48,143470],{"style":126920,"src":143471},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-208.png",[48,143473],{"style":126920,"src":143474},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-209.png",[48,143476],{"style":126920,"src":143477},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-210.png",[19,143479,143480],{},"总结来说就是左手原则",[151,143482,143484],{"id":143483},"_18342-rotate3d介绍","18.3.4.2 rotate3d介绍",[48,143486],{"style":126920,"src":143487},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-211.png",[35,143489,143491],{"id":143490},"_1835-3d呈现-transfrom-style","18.3.5 3D呈现 transfrom-style",[48,143493],{"style":126920,"src":143494},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-212.png",[48,143496],{"style":126920,"src":143497},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-213.png",[316,143499,143501],{"className":127064,"code":143500,"language":127066,"meta":50,"style":50},"div {\n  perspective: 500px;\n  transform: rotateX(45deg);\n}\n",[269,143502,143503,143509,143522,143539],{"__ignoreMap":50},[324,143504,143505,143507],{"class":326,"line":327},[324,143506,52333],{"class":52022},[324,143508,16301],{"class":867},[324,143510,143511,143514,143516,143518,143520],{"class":326,"line":203},[324,143512,143513],{"class":916},"  perspective",[324,143515,52159],{"class":867},[324,143517,65796],{"class":916},[324,143519,52214],{"class":863},[324,143521,2025],{"class":867},[324,143523,143524,143526,143528,143531,143533,143535,143537],{"class":326,"line":338},[324,143525,137048],{"class":916},[324,143527,52159],{"class":867},[324,143529,143530],{"class":916},"rotateX",[324,143532,868],{"class":867},[324,143534,1393],{"class":916},[324,143536,142891],{"class":863},[324,143538,3448],{"class":867},[324,143540,143541],{"class":326,"line":344},[324,143542,2296],{"class":867},[35,143544,143546],{"id":143545},"_1836-案例","18.3.6 案例",[151,143548,143550],{"id":143549},"_18361-两面反转的盒子","18.3.6.1 两面反转的盒子",[48,143552],{"style":126920,"src":143553},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-214.png",[48,143555],{"style":126920,"src":143556},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-215.png",[48,143558],{"style":126920,"src":143559},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-216.png",[316,143561,143563],{"className":127064,"code":143562,"language":127066,"meta":50,"style":50},"\u002F* 3D 透视（加在父元素上） *\u002F\n.father {\n  perspective: 500px;\n}\n",[269,143564,143565,143570,143576,143588],{"__ignoreMap":50},[324,143566,143567],{"class":326,"line":327},[324,143568,143569],{"class":772},"\u002F* 3D 透视（加在父元素上） *\u002F\n",[324,143571,143572,143574],{"class":326,"line":203},[324,143573,134061],{"class":734},[324,143575,16301],{"class":867},[324,143577,143578,143580,143582,143584,143586],{"class":326,"line":338},[324,143579,143513],{"class":916},[324,143581,52159],{"class":867},[324,143583,65796],{"class":916},[324,143585,52214],{"class":863},[324,143587,2025],{"class":867},[324,143589,143590],{"class":326,"line":344},[324,143591,2296],{"class":867},[151,143593,143595],{"id":143594},"_18362-3d导航栏","18.3.6.2 3D导航栏",[48,143597],{"style":126920,"src":143598},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-217.png",[316,143600,143601],{"className":127811,"code":131168,"language":127813,"meta":50,"style":50},[269,143602,143603,143607,143621,143625],{"__ignoreMap":50},[324,143604,143605],{"class":326,"line":327},[324,143606,131175],{"class":772},[324,143608,143609,143611,143613,143615,143617,143619],{"class":326,"line":203},[324,143610,1774],{"class":867},[324,143612,52333],{"class":52022},[324,143614,54208],{"class":734},[324,143616,913],{"class":867},[324,143618,131188],{"class":738},[324,143620,52029],{"class":867},[324,143622,143623],{"class":326,"line":338},[324,143624,131195],{"class":867},[324,143626,143627,143629,143631],{"class":326,"line":344},[324,143628,52507],{"class":867},[324,143630,52333],{"class":52022},[324,143632,52029],{"class":867},[151,143634,143636],{"id":143635},"_18363-旋转木马","18.3.6.3 旋转木马",[48,143638],{"style":126920,"src":143639},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-218.png",[316,143641,143642],{"className":127064,"code":142867,"language":127066,"meta":50,"style":50},[269,143643,143644,143650,143666],{"__ignoreMap":50},[324,143645,143646,143648],{"class":326,"line":327},[324,143647,52333],{"class":52022},[324,143649,16301],{"class":867},[324,143651,143652,143654,143656,143658,143660,143662,143664],{"class":326,"line":203},[324,143653,137048],{"class":916},[324,143655,52159],{"class":867},[324,143657,142884],{"class":916},[324,143659,868],{"class":867},[324,143661,1393],{"class":916},[324,143663,142891],{"class":863},[324,143665,3448],{"class":867},[324,143667,143668],{"class":326,"line":338},[324,143669,2296],{"class":867},[775,143671,143672],{},"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":50,"searchDepth":203,"depth":203,"links":143674},[143675,143682],{"id":142770,"depth":203,"text":142771,"children":143676},[143677,143678,143679,143680,143681],{"id":142794,"depth":338,"text":142795},{"id":142849,"depth":338,"text":142850},{"id":142974,"depth":338,"text":142975},{"id":143077,"depth":338,"text":143078},{"id":143395,"depth":338,"text":143396},{"id":143423,"depth":203,"text":143424,"children":143683},[143684,143685,143686,143687,143688,143689],{"id":143430,"depth":338,"text":143431},{"id":143437,"depth":338,"text":143438},{"id":143453,"depth":338,"text":143454},{"id":143463,"depth":338,"text":143464},{"id":143490,"depth":338,"text":143491},{"id":143545,"depth":338,"text":143546},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch18-2d3d",{"title":142762,"description":791},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换","1_0Tn58EtT3Zxiv54Fdr4nuYTjJFUVecbnj1dyl9_b0",{"id":143696,"title":143697,"body":143698,"description":791,"extension":792,"meta":143901,"navigation":487,"path":143902,"seo":143903,"stem":143904,"__hash__":143905},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口.md","19. 移动端基础-前缀现状与视口",{"type":7,"value":143699,"toc":143890},[143700,143703,143707,143710,143713,143717,143720,143723,143726,143730,143733,143737,143740,143744,143747,143751,143765,143769,143794,143797,143800,143817,143821,143825,143828,143831,143835,143838,143841,143859,143863,143866,143880,143884,143887],[10,143701,143697],{"id":143702},"_19-移动端基础-前缀现状与视口",[14,143704,143706],{"id":143705},"_191-浏览器私有前缀","19.1 浏览器私有前缀",[48,143708],{"style":126920,"src":143709},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-219.png",[19,143711,143712],{},"意思就是加个前缀，增加兼容性",[14,143714,143716],{"id":143715},"_192-移动端现状认识","19.2 移动端现状认识",[48,143718],{"style":126920,"src":143719},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-220.png",[19,143721,143722],{},"调试方法：",[48,143724],{"style":126920,"src":143725},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-221.png",[14,143727,143729],{"id":143728},"_193-视口","19.3 视口",[19,143731,143732],{},"**视口（viewport）**就是浏览器显示页面内容的屏幕区域。 视口可以分为布局视口、视觉视口和理想视口",[35,143734,143736],{"id":143735},"_1931-布局视口-layout-viewport","19.3.1 布局视口 layout viewport",[48,143738],{"style":126920,"src":143739},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-222.png",[35,143741,143743],{"id":143742},"_1932-视觉视口-visual-viewport","19.3.2 视觉视口 visual viewport",[48,143745],{"style":126920,"src":143746},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-223.png",[35,143748,143750],{"id":143749},"_1933-理想视口-ideal-viewport","19.3.3 理想视口 ideal viewport",[1871,143752,143753,143756,143759,143762],{},[195,143754,143755],{},"为了使网站在移动端有最理想的浏览和阅读宽度而设定",[195,143757,143758],{},"理想视口，对设备来讲，是最理想的视口尺寸",[195,143760,143761],{},"需要手动添写meta视口标签通知浏览器操作",[195,143763,143764],{},"meta视口标签的主要目的：布局视口的宽度应该与理想视口的宽度一致，简单理解就是设备有多宽，我们布局的视口就多宽",[35,143766,143768],{"id":143767},"_1934-meta视口标签","19.3.4 meta视口标签",[316,143770,143772],{"className":127811,"code":143771,"language":127813,"meta":50,"style":50},"\u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n",[269,143773,143774],{"__ignoreMap":50},[324,143775,143776,143778,143780,143782,143784,143786,143788,143790,143792],{"class":326,"line":327},[324,143777,1774],{"class":867},[324,143779,52066],{"class":52022},[324,143781,15649],{"class":734},[324,143783,913],{"class":867},[324,143785,52113],{"class":738},[324,143787,52093],{"class":734},[324,143789,913],{"class":867},[324,143791,52120],{"class":738},[324,143793,52029],{"class":867},[48,143795],{"style":126920,"src":143796},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-224.png",[19,143798,143799],{},"标准视口设置：",[192,143801,143802,143805,143808,143811,143814],{},[195,143803,143804],{},"视口宽度和设备保持一致",[195,143806,143807],{},"视口的默认缩放比例1.0",[195,143809,143810],{},"不允许用户自行缩放",[195,143812,143813],{},"最大允许的缩放比例1.0",[195,143815,143816],{},"最小允许的缩放比例1.0",[35,143818,143820],{"id":143819},"_1935-二倍图","19.3.5 二倍图",[151,143822,143824],{"id":143823},"_19351-物理像素物理像素比","19.3.5.1 物理像素&物理像素比",[48,143826],{"style":126920,"src":143827},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-225.png",[48,143829],{"style":126920,"src":143830},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-226.png",[151,143832,143834],{"id":143833},"_19352-多倍图","19.3.5.2 多倍图",[48,143836],{"style":126920,"src":143837},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-227.png",[19,143839,143840],{},"二倍图法，代码如下：",[316,143842,143844],{"className":127064,"code":143843,"language":127066,"meta":50,"style":50},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\nbackground-size: 50% 50%;\n",[269,143845,143846,143851],{"__ignoreMap":50},[324,143847,143848],{"class":326,"line":327},[324,143849,143850],{"class":772},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\n",[324,143852,143853,143856],{"class":326,"line":203},[324,143854,143855],{"class":52022},"background-size",[324,143857,143858],{"class":867},": 50% 50%;\n",[151,143860,143862],{"id":143861},"_19353-背景缩放-background-size","19.3.5.3 背景缩放 background-size",[48,143864],{"style":126920,"src":143865},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-228.png",[192,143867,143868,143871,143874,143877],{},[195,143869,143870],{},"如果只写一个参数，肯定是宽度，高度省略了，会进行等比缩放",[195,143872,143873],{},"里边的单位可以跟百分比% 是相对于父盒子来说的",[195,143875,143876],{},"cover运行的时候就是沿着宽高方向进行放大背景，所以会可能导致部分背景图片显示不全，正方形时就可以显示全",[195,143878,143879],{},"contain它是高度和宽度等比例拉伸，当宽度或高度 铺满div盒子就不再进行拉伸了，div可能有部分空白区域",[151,143881,143883],{"id":143882},"_19354-二倍精灵图做法","19.3.5.4 二倍精灵图做法",[48,143885],{"style":126920,"src":143886},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-229.png",[775,143888,143889],{},"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":50,"searchDepth":203,"depth":203,"links":143891},[143892,143893,143894],{"id":143705,"depth":203,"text":143706},{"id":143715,"depth":203,"text":143716},{"id":143728,"depth":203,"text":143729,"children":143895},[143896,143897,143898,143899,143900],{"id":143735,"depth":338,"text":143736},{"id":143742,"depth":338,"text":143743},{"id":143749,"depth":338,"text":143750},{"id":143767,"depth":338,"text":143768},{"id":143819,"depth":338,"text":143820},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch19",{"title":143697,"description":791},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口","I7YPWmMspOfCCPUuENRXhFE3PC_6s5-J1ZyI4ciWtnM",{"id":143907,"title":143908,"body":143909,"description":791,"extension":792,"meta":144786,"navigation":487,"path":144787,"seo":144788,"stem":144789,"__hash__":144790},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇.md","20. 移动端布局实战上篇",{"type":7,"value":143910,"toc":144770},[143911,143914,143918,143925,143928,143935,143938,143943,143946,143950,143954,143961,143964,143967,143971,143974,143977,143980,143983,143986,143990,143993,143997,143999,144002,144005,144008,144011,144013,144016,144018,144048,144050,144080,144084,144087,144091,144094,144111,144114,144117,144193,144195,144198,144201,144204,144207,144209,144212,144215,144219,144241,144244,144247,144251,144254,144260,144263,144267,144270,144273,144277,144280,144283,144286,144290,144293,144296,144299,144302,144306,144309,144313,144320,144323,144326,144329,144332,144342,144345,144348,144355,144358,144362,144365,144368,144372,144375,144378,144381,144426,144429,144432,144435,144437,144566,144568,144606,144609,144612,144614,144732,144734,144768],[10,143912,143908],{"id":143913},"_20-移动端布局实战上篇",[14,143915,143917],{"id":143916},"_201-移动端主流方案","20.1 移动端主流方案",[192,143919,143920],{},[195,143921,143922],{},[116,143923,143924],{},"单独移动端页面（主流）",[48,143926],{"style":126920,"src":143927},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-230.png",[192,143929,143930],{"start":203},[195,143931,143932],{},[116,143933,143934],{},"响应式兼容PC移动端",[48,143936],{"style":126920,"src":143937},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-231.png",[192,143939,143940],{"start":338},[195,143941,143942],{},"两种页面选型布局方式",[48,143944],{"style":126920,"src":143945},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-232.png",[14,143947,143949],{"id":143948},"_202-移动端技术解决方案","20.2 移动端技术解决方案",[35,143951,143953],{"id":143952},"_2021-css初始化-normalizecss","20.2.1 CSS初始化 normalize.css",[19,143955,143956,143957],{},"官网地址： ",[25,143958,143959],{"href":143959,"rel":143960},"http:\u002F\u002Fnecolas.github.io\u002Fnormalize.css\u002F",[29],[48,143962],{"style":126920,"src":143963},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-233.png",[48,143965],{"style":126920,"src":143966},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-234.png",[35,143968,143970],{"id":143969},"_2022-css3-盒子模型-box-sizing","20.2.2 CSS3 盒子模型 box-sizing",[48,143972],{"style":126920,"src":143973},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-235.png",[48,143975],{"style":126920,"src":143976},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-236.png",[19,143978,143979],{},"去除高亮：",[19,143981,143982],{},"在用a元素的时候在pc端没事，但是在手机端一点会有颜色背景，去除的方式是",[19,143984,143985],{},"-webkit- tap-highlight-color: transparent;",[14,143987,143989],{"id":143988},"_203-流式布局百分比布局","20.3 流式布局（百分比布局）",[48,143991],{"style":126920,"src":143992},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-237.png",[14,143994,143996],{"id":143995},"_204-流式布局案例","20.4 流式布局案例",[19,143998,897],{},[19,144000,144001],{},"移动端在进行大盒子中左右两个盒子大小固定不变，中间盒子随着大盒子的放大而变大，变小而变小，此时可以一定要学会使用定位，定位非常非常重要，如果想让大盒子不动，不随着页面向下的滑动而改变，此时对大盒子使用固定定位，并将宽度设置为100%，高度自己定，左右两个盒子设置为固定定位，并给定其确定的宽和高，让它不会随意浏览器的缩放而改变，对中间盒子采用标准流做法，给它设定一个magin，让它与左右盒子相隔，宽度设为100%，高度设为确定值，设置magin是因为那两个左右盒子是绝对定位，它会盖住中间盒子两边的部分的。",[19,144003,144004],{},"也可以使用flex布局来实现，给左右盒子设置好宽高，对大盒子使用flex布局，然后中间剩余部分全给中间盒子即可实现！",[19,144006,144007],{},"图片格式：",[48,144009],{"style":126920,"src":144010},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-238.png",[19,144012,136107],{},[48,144014],{"style":126920,"src":144015},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-239.png",[19,144017,140434],{},[316,144019,144020],{"className":127811,"code":134566,"language":127813,"meta":50,"style":50},[269,144021,144022],{"__ignoreMap":50},[324,144023,144024,144026,144028,144030,144032,144034,144036,144038,144040,144042,144044,144046],{"class":326,"line":327},[324,144025,1774],{"class":867},[324,144027,48],{"class":52022},[324,144029,55961],{"class":734},[324,144031,913],{"class":867},[324,144033,134581],{"class":738},[324,144035,55969],{"class":734},[324,144037,913],{"class":867},[324,144039,134588],{"class":738},[324,144041,134591],{"class":734},[324,144043,913],{"class":867},[324,144045,134596],{"class":738},[324,144047,52029],{"class":867},[19,144049,140523],{},[316,144051,144052],{"className":127811,"code":134566,"language":127813,"meta":50,"style":50},[269,144053,144054],{"__ignoreMap":50},[324,144055,144056,144058,144060,144062,144064,144066,144068,144070,144072,144074,144076,144078],{"class":326,"line":327},[324,144057,1774],{"class":867},[324,144059,48],{"class":52022},[324,144061,55961],{"class":734},[324,144063,913],{"class":867},[324,144065,134581],{"class":738},[324,144067,55969],{"class":734},[324,144069,913],{"class":867},[324,144071,134588],{"class":738},[324,144073,134591],{"class":734},[324,144075,913],{"class":867},[324,144077,134596],{"class":738},[324,144079,52029],{"class":867},[14,144081,144083],{"id":144082},"_205-flex布局","20.5 flex布局",[48,144085],{"style":126920,"src":144086},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-240.png",[35,144088,144090],{"id":144089},"_2051-布局原理","20.5.1 布局原理",[19,144092,144093],{},"flex 是 flexible Box 的缩写，意为\"弹性布局\"，用来为盒状模型提供最大的灵活性，任何一个容器都可以指定为 flex 布局",[1871,144095,144096,144099,144102,144105,144108],{},[195,144097,144098],{},"当我们为父盒子设为 flex 布局以后，子元素的 float、clear 和 vertical-align 属性将失效",[195,144100,144101],{},"伸缩布局 = 弹性布局 = 伸缩盒布局 = 弹性盒布局 =flex布局",[195,144103,144104],{},"采用 Flex 布局的元素，称为 Flex 容器（flex container），简称\"容器\"。它的所有子元素自动成为容器成员，称为 Flex 项目（flex item），简称\"项目\"",[195,144106,144107],{},"总结来说就是：就是通过给父盒子添加flex属性，来控制子盒子的位置和排列方式",[195,144109,144110],{},"flex可以直接将行内元素变成类似于浮动的效果，就有宽高了",[19,144112,144113],{},"父盒子被设置为弹性布局后，如果不给它设置宽度的话，父盒子的宽度就是子盒子撑开的宽度，如果有两个子盒子，第一个子盒子设置了宽高，第二个盒子宽度设为100%，则第二个盒子的宽度就是第一个盒子的宽度。父盒子由第一个盒子撑开",[19,144115,144116],{},"在弹性布局中如果是个单选标签，可以使用下边的方式进行布局：",[316,144118,144120],{"className":127064,"code":144119,"language":127066,"meta":50,"style":50},"\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",[269,144121,144122,144127,144134,144144,144156,144167,144178,144189],{"__ignoreMap":50},[324,144123,144124],{"class":326,"line":327},[324,144125,144126],{"class":772},"\u002F* Flex 弹性布局 *\u002F\n",[324,144128,144129,144132],{"class":326,"line":203},[324,144130,144131],{"class":734},".container",[324,144133,16301],{"class":867},[324,144135,144136,144138,144140,144142],{"class":326,"line":338},[324,144137,128680],{"class":916},[324,144139,52159],{"class":867},[324,144141,52199],{"class":916},[324,144143,2025],{"class":867},[324,144145,144146,144149,144151,144154],{"class":326,"line":344},[324,144147,144148],{"class":916},"  flex-direction",[324,144150,52159],{"class":867},[324,144152,144153],{"class":916},"row",[324,144155,2025],{"class":867},[324,144157,144158,144161,144163,144165],{"class":326,"line":484},[324,144159,144160],{"class":916},"  justify-content",[324,144162,52159],{"class":867},[324,144164,52390],{"class":916},[324,144166,2025],{"class":867},[324,144168,144169,144172,144174,144176],{"class":326,"line":491},[324,144170,144171],{"class":916},"  align-items",[324,144173,52159],{"class":867},[324,144175,52314],{"class":916},[324,144177,2025],{"class":867},[324,144179,144180,144183,144185,144187],{"class":326,"line":496},[324,144181,144182],{"class":916},"  flex-wrap",[324,144184,52159],{"class":867},[324,144186,79332],{"class":916},[324,144188,2025],{"class":867},[324,144190,144191],{"class":326,"line":502},[324,144192,2296],{"class":867},[19,144194,71175],{},[19,144196,144197],{},".form-item .male-label {",[19,144199,144200],{},"   margin-right: 20px;",[19,144202,144203],{},"   display: inline-flex;",[19,144205,144206],{},"   align-items: center;",[19,144208,1810],{},[48,144210],{"style":126920,"src":144211},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-241.png",[48,144213],{"style":126920,"src":144214},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-242.png",[35,144216,144218],{"id":144217},"_2052-常见父项属性","20.5.2 常见父项属性",[192,144220,144221,144224,144227,144230,144233,144236,144239],{},[195,144222,144223],{},"flex-direction：设置主轴的方向",[195,144225,144226],{},"justify-content：设置主轴上的子元素排列方式",[195,144228,144229],{},"flex-wrap：设置子元素是否换行",[195,144231,144232],{},"align-content：设置侧轴上的子元素的排列方式（多行）",[195,144234,144235],{},"align-items：设置侧轴上的子元素排列方式（单行）",[195,144237,144238],{},"flex-flow：复合属性，相当于同时设置了 flex-direction 和 flex-wrap",[195,144240,144223],{},[48,144242],{"style":126920,"src":144243},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-243.png",[48,144245],{"style":126920,"src":144246},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-244.png",[192,144248,144249],{"start":203},[195,144250,144226],{},[48,144252],{"style":126920,"src":144253},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-245.png",[19,144255,144256,144259],{},[269,144257,144258],{},"space-evenly","：所有间距都完全相等（包括两端和元素之间）",[19,144261,144262],{},"跟着主轴走",[192,144264,144265],{"start":338},[195,144266,144229],{},[48,144268],{"style":126920,"src":144269},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-246.png",[19,144271,144272],{},"flex布局中是默认不换行的，当父亲盒子宽100px，高100px，内部的5个四盒子设置 宽为30px，高30px，如果排列方式按照默认，则按照x轴来进行排，从左到右的方式来进行排列，则子盒子不会换行，子盒子的宽度将会失效，然后会自动调整宽度以适应这个父盒子，会将父盒子沿这个轴塞满",[192,144274,144275],{"start":344},[195,144276,144232],{},[48,144278],{"style":126920,"src":144279},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-247.png",[19,144281,144282],{},"搭配前边的主轴排列方式就可以实现对主轴与侧轴的操作",[19,144284,144285],{},"stretch:沿着侧轴拉伸，但是要首先去掉侧轴方向的宽或高：若侧轴为y轴，则去掉高度大小",[192,144287,144288],{"start":484},[195,144289,144235],{},[48,144291],{"style":126920,"src":144292},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-248.png",[19,144294,144295],{},"align-items与align-content之间的区别：",[19,144297,144298],{},"单找items，多找content",[48,144300],{"style":126920,"src":144301},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-249.png",[192,144303,144304],{"start":491},[195,144305,144238],{},[48,144307],{"style":126920,"src":144308},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-250.png",[35,144310,144312],{"id":144311},"_2053-flex布局子项常见属性","20.5.3 flex布局子项常见属性",[192,144314,144315],{},[195,144316,144317],{},[116,144318,144319],{},"flex 属性",[19,144321,144322],{},"flex 属性定义子项目分配剩余空间，用flex来表示占多少份数",[48,144324],{"style":126920,"src":144325},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-251.png",[19,144327,144328],{},"可以理解为没站位的剩余空间 ，数字表示的含义理解为：数字\u002F总元素",[19,144330,144331],{},"flex后边也可以跟百分比，通常用于父盒子不给高度，宽度为100%，想让子盒子换行和撑开的情况，li没有宽度，此时用flex：1；是不太起作用的，他不会换行，这是因为没有宽度，此时可以通过给子盒子使用flex: 20%;让子盒子平均为大盒子宽度的百分之50,这时候给父盒子加上flex-wrap: wrap;就管用了，就可以实现换行了",[192,144333,144334],{"start":203},[195,144335,144336,14524,144339],{},[116,144337,144338],{},"align-self",[116,144340,144341],{},"控制子项自己在侧轴上的排列方式",[48,144343],{"style":126920,"src":144344},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-252.png",[19,144346,144347],{},"单个子盒子在父盒子侧轴上的排列方式",[192,144349,144350],{"start":338},[195,144351,144352,144354],{},[116,144353,96019],{}," 属性定义项目的排列顺序",[48,144356],{"style":126920,"src":144357},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-253.png",[35,144359,144361],{"id":144360},"_2054-背景线性渐变","20.5.4 背景线性渐变",[48,144363],{"style":126920,"src":144364},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-254.png",[19,144366,144367],{},"必须要添加浏览器的私有前缀",[35,144369,144371],{"id":144370},"_2055-携程网首页案例","20.5.5 携程网首页案例",[19,144373,144374],{},"学到最重要的知识：",[19,144376,144377],{},"flex处理这样的布局思路",[48,144379],{"style":126920,"src":144380},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-255.png",[316,144382,144384],{"className":127064,"code":144383,"language":127066,"meta":50,"style":50},".container {\n  display: flex;\n  justify-content: center;\n  align-items: center;\n}\n",[269,144385,144386,144392,144402,144412,144422],{"__ignoreMap":50},[324,144387,144388,144390],{"class":326,"line":327},[324,144389,144131],{"class":734},[324,144391,16301],{"class":867},[324,144393,144394,144396,144398,144400],{"class":326,"line":203},[324,144395,128680],{"class":916},[324,144397,52159],{"class":867},[324,144399,52199],{"class":916},[324,144401,2025],{"class":867},[324,144403,144404,144406,144408,144410],{"class":326,"line":338},[324,144405,144160],{"class":916},[324,144407,52159],{"class":867},[324,144409,52314],{"class":916},[324,144411,2025],{"class":867},[324,144413,144414,144416,144418,144420],{"class":326,"line":344},[324,144415,144171],{"class":916},[324,144417,52159],{"class":867},[324,144419,52314],{"class":916},[324,144421,2025],{"class":867},[324,144423,144424],{"class":326,"line":484},[324,144425,2296],{"class":867},[19,144427,144428],{},"对上述的布局思路的多个多个背景图片替换的方式如下：一定要学会思路！！！",[19,144430,144431],{},"使用属性选择器",[48,144433],{"style":126920,"src":144434},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-256.png",[19,144436,69611],{},[316,144438,144440],{"className":127811,"code":144439,"language":127813,"meta":50,"style":50},"\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",[269,144441,144442,144447,144461,144466,144486,144491,144510,144515,144534,144539,144558],{"__ignoreMap":50},[324,144443,144444],{"class":326,"line":327},[324,144445,144446],{"class":772},"\u003C!-- 携程网移动端案例结构 -->\n",[324,144448,144449,144451,144453,144455,144457,144459],{"class":326,"line":203},[324,144450,1774],{"class":867},[324,144452,52333],{"class":52022},[324,144454,54208],{"class":734},[324,144456,913],{"class":867},[324,144458,93045],{"class":738},[324,144460,52029],{"class":867},[324,144462,144463],{"class":326,"line":338},[324,144464,144465],{"class":772},"  \u003C!-- 搜索栏 -->\n",[324,144467,144468,144470,144472,144474,144476,144479,144482,144484],{"class":326,"line":344},[324,144469,52866],{"class":867},[324,144471,52333],{"class":52022},[324,144473,54208],{"class":734},[324,144475,913],{"class":867},[324,144477,144478],{"class":738},"\"search-index\"",[324,144480,144481],{"class":867},">...\u003C\u002F",[324,144483,52333],{"class":52022},[324,144485,52029],{"class":867},[324,144487,144488],{"class":326,"line":484},[324,144489,144490],{"class":772},"  \u003C!-- 焦点图 -->\n",[324,144492,144493,144495,144497,144499,144501,144504,144506,144508],{"class":326,"line":491},[324,144494,52866],{"class":867},[324,144496,52333],{"class":52022},[324,144498,54208],{"class":734},[324,144500,913],{"class":867},[324,144502,144503],{"class":738},"\"focus\"",[324,144505,144481],{"class":867},[324,144507,52333],{"class":52022},[324,144509,52029],{"class":867},[324,144511,144512],{"class":326,"line":496},[324,144513,144514],{"class":772},"  \u003C!-- 主导航 -->\n",[324,144516,144517,144519,144521,144523,144525,144528,144530,144532],{"class":326,"line":502},[324,144518,52866],{"class":867},[324,144520,52333],{"class":52022},[324,144522,54208],{"class":734},[324,144524,913],{"class":867},[324,144526,144527],{"class":738},"\"local-nav\"",[324,144529,144481],{"class":867},[324,144531,52333],{"class":52022},[324,144533,52029],{"class":867},[324,144535,144536],{"class":326,"line":508},[324,144537,144538],{"class":772},"  \u003C!-- 子导航 -->\n",[324,144540,144541,144543,144545,144547,144549,144552,144554,144556],{"class":326,"line":514},[324,144542,52866],{"class":867},[324,144544,52333],{"class":52022},[324,144546,54208],{"class":734},[324,144548,913],{"class":867},[324,144550,144551],{"class":738},"\"nav-common\"",[324,144553,144481],{"class":867},[324,144555,52333],{"class":52022},[324,144557,52029],{"class":867},[324,144559,144560,144562,144564],{"class":326,"line":2343},[324,144561,52507],{"class":867},[324,144563,52333],{"class":52022},[324,144565,52029],{"class":867},[19,144567,71175],{},[316,144569,144570],{"className":127064,"code":137516,"language":127066,"meta":50,"style":50},[269,144571,144572,144586,144602],{"__ignoreMap":50},[324,144573,144574,144576,144578,144580,144582,144584],{"class":326,"line":327},[324,144575,54543],{"class":52022},[324,144577,1754],{"class":867},[324,144579,103828],{"class":734},[324,144581,913],{"class":863},[324,144583,63421],{"class":738},[324,144585,137533],{"class":867},[324,144587,144588,144590,144592,144594,144596,144598,144600],{"class":326,"line":203},[324,144589,71618],{"class":916},[324,144591,52159],{"class":867},[324,144593,1082],{"class":916},[324,144595,52214],{"class":863},[324,144597,52243],{"class":916},[324,144599,130644],{"class":916},[324,144601,2025],{"class":867},[324,144603,144604],{"class":326,"line":338},[324,144605,2296],{"class":867},[19,144607,144608],{},"总代码和效果展示：",[48,144610],{"style":126920,"src":144611},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-257.png",[19,144613,69611],{},[316,144615,144616],{"className":127811,"code":144439,"language":127813,"meta":50,"style":50},[269,144617,144618,144622,144636,144640,144658,144662,144680,144684,144702,144706,144724],{"__ignoreMap":50},[324,144619,144620],{"class":326,"line":327},[324,144621,144446],{"class":772},[324,144623,144624,144626,144628,144630,144632,144634],{"class":326,"line":203},[324,144625,1774],{"class":867},[324,144627,52333],{"class":52022},[324,144629,54208],{"class":734},[324,144631,913],{"class":867},[324,144633,93045],{"class":738},[324,144635,52029],{"class":867},[324,144637,144638],{"class":326,"line":338},[324,144639,144465],{"class":772},[324,144641,144642,144644,144646,144648,144650,144652,144654,144656],{"class":326,"line":344},[324,144643,52866],{"class":867},[324,144645,52333],{"class":52022},[324,144647,54208],{"class":734},[324,144649,913],{"class":867},[324,144651,144478],{"class":738},[324,144653,144481],{"class":867},[324,144655,52333],{"class":52022},[324,144657,52029],{"class":867},[324,144659,144660],{"class":326,"line":484},[324,144661,144490],{"class":772},[324,144663,144664,144666,144668,144670,144672,144674,144676,144678],{"class":326,"line":491},[324,144665,52866],{"class":867},[324,144667,52333],{"class":52022},[324,144669,54208],{"class":734},[324,144671,913],{"class":867},[324,144673,144503],{"class":738},[324,144675,144481],{"class":867},[324,144677,52333],{"class":52022},[324,144679,52029],{"class":867},[324,144681,144682],{"class":326,"line":496},[324,144683,144514],{"class":772},[324,144685,144686,144688,144690,144692,144694,144696,144698,144700],{"class":326,"line":502},[324,144687,52866],{"class":867},[324,144689,52333],{"class":52022},[324,144691,54208],{"class":734},[324,144693,913],{"class":867},[324,144695,144527],{"class":738},[324,144697,144481],{"class":867},[324,144699,52333],{"class":52022},[324,144701,52029],{"class":867},[324,144703,144704],{"class":326,"line":508},[324,144705,144538],{"class":772},[324,144707,144708,144710,144712,144714,144716,144718,144720,144722],{"class":326,"line":514},[324,144709,52866],{"class":867},[324,144711,52333],{"class":52022},[324,144713,54208],{"class":734},[324,144715,913],{"class":867},[324,144717,144551],{"class":738},[324,144719,144481],{"class":867},[324,144721,52333],{"class":52022},[324,144723,52029],{"class":867},[324,144725,144726,144728,144730],{"class":326,"line":2343},[324,144727,52507],{"class":867},[324,144729,52333],{"class":52022},[324,144731,52029],{"class":867},[19,144733,71175],{},[316,144735,144736],{"className":127811,"code":131168,"language":127813,"meta":50,"style":50},[269,144737,144738,144742,144756,144760],{"__ignoreMap":50},[324,144739,144740],{"class":326,"line":327},[324,144741,131175],{"class":772},[324,144743,144744,144746,144748,144750,144752,144754],{"class":326,"line":203},[324,144745,1774],{"class":867},[324,144747,52333],{"class":52022},[324,144749,54208],{"class":734},[324,144751,913],{"class":867},[324,144753,131188],{"class":738},[324,144755,52029],{"class":867},[324,144757,144758],{"class":326,"line":338},[324,144759,131195],{"class":867},[324,144761,144762,144764,144766],{"class":326,"line":344},[324,144763,52507],{"class":867},[324,144765,52333],{"class":52022},[324,144767,52029],{"class":867},[775,144769,138465],{},{"title":50,"searchDepth":203,"depth":203,"links":144771},[144772,144773,144777,144778,144779],{"id":143916,"depth":203,"text":143917},{"id":143948,"depth":203,"text":143949,"children":144774},[144775,144776],{"id":143952,"depth":338,"text":143953},{"id":143969,"depth":338,"text":143970},{"id":143988,"depth":203,"text":143989},{"id":143995,"depth":203,"text":143996},{"id":144082,"depth":203,"text":144083,"children":144780},[144781,144782,144783,144784,144785],{"id":144089,"depth":338,"text":144090},{"id":144217,"depth":338,"text":144218},{"id":144311,"depth":338,"text":144312},{"id":144360,"depth":338,"text":144361},{"id":144370,"depth":338,"text":144371},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch20",{"title":143908,"description":791},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇","cQcqj5e9hR6NoF8kN47rpTyWJSyfRUI7ogbrP5czAbc",{"id":144792,"title":144793,"body":144794,"description":791,"extension":792,"meta":146021,"navigation":487,"path":146022,"seo":146023,"stem":146024,"__hash__":146025},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇.md","21. 移动端布局实战下篇",{"type":7,"value":144795,"toc":145999},[144796,144799,144803,144807,144810,144813,144817,144822,144825,144828,144831,144834,144837,144894,144897,144902,144905,144908,144912,144923,144927,144930,144933,144940,144945,144949,144952,144958,144961,144965,144968,144975,144978,144981,144988,144991,144998,145001,145004,145011,145014,145017,145019,145036,145040,145043,145046,145049,145053,145056,145059,145062,145065,145068,145071,145073,145076,145079,145141,145144,145254,145261,145267,145270,145273,145277,145280,145284,145289,145292,145299,145302,145308,145313,145316,145319,145322,145325,145328,145331,145334,145337,145393,145395,145421,145425,145428,145431,145434,145442,145445,145448,145452,145508,145511,145515,145521,145532,145535,145540,145543,145546,145552,145555,145558,145561,145564,145567,145570,145573,145576,145601,145607,145610,145613,145616,145619,145622,145625,145630,145633,145636,145639,145647,145650,145657,145660,145663,145665,145689,145691,145694,145697,145700,145703,145706,145709,145712,145746,145749,145752,145786,145793,145796,145799,145802,145805,145808,145811,145818,145821,145824,145827,145830,145837,145840,145843,145850,145853,145856,145860,145863,145866,145869,145872,145875,145878,145881,145884,145886,145910,145912,145936,145940,145951,145954,145957,145960,145963,145966,145969,145972,145975,145978,145981,145984,145987,145990,145993,145996],[10,144797,144793],{"id":144798},"_21-移动端布局实战下篇",[14,144800,144802],{"id":144801},"_211-rem适配布局","21.1 rem适配布局",[35,144804,144806],{"id":144805},"_2111-rem单位","21.1.1 rem单位",[48,144808],{"style":126920,"src":144809},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-258.png",[19,144811,144812],{},"也就是父盒子font-size设置为12px的话，子盒子的font-size设为10em，则子盒子文字大小为120px",[35,144814,144816],{"id":144815},"_2112-媒体查询","21.1.2 媒体查询",[192,144818,144819],{},[195,144820,144821],{},"参数介绍",[48,144823],{"style":126920,"src":144824},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-259.png",[48,144826],{"style":126920,"src":144827},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-260.png",[48,144829],{"style":126920,"src":144830},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-261.png",[48,144832],{"style":126920,"src":144833},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-262.png",[48,144835],{"style":126920,"src":144836},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-263.png",[316,144838,144840],{"className":127064,"code":144839,"language":127066,"meta":50,"style":50},"\u002F* 媒体查询 *\u002F\n@media (max-width: 768px) {\n  .container {\n    width: 100%;\n  }\n}\n",[269,144841,144842,144847,144866,144873,144886,144890],{"__ignoreMap":50},[324,144843,144844],{"class":326,"line":327},[324,144845,144846],{"class":772},"\u002F* 媒体查询 *\u002F\n",[324,144848,144849,144852,144854,144857,144859,144862,144864],{"class":326,"line":203},[324,144850,144851],{"class":863},"@media",[324,144853,2389],{"class":867},[324,144855,144856],{"class":916},"max-width",[324,144858,52159],{"class":867},[324,144860,144861],{"class":916},"768",[324,144863,52214],{"class":863},[324,144865,13171],{"class":867},[324,144867,144868,144871],{"class":326,"line":338},[324,144869,144870],{"class":734},"  .container",[324,144872,16301],{"class":867},[324,144874,144875,144878,144880,144882,144884],{"class":326,"line":344},[324,144876,144877],{"class":916},"    width",[324,144879,52159],{"class":867},[324,144881,1175],{"class":916},[324,144883,1192],{"class":863},[324,144885,2025],{"class":867},[324,144887,144888],{"class":326,"line":484},[324,144889,127860],{"class":867},[324,144891,144892],{"class":326,"line":491},[324,144893,2296],{"class":867},[19,144895,144896],{},"媒体查询一般按照从大到小或者 从小到大的顺序来",[192,144898,144899],{"start":203},[195,144900,144901],{},"引入资源",[48,144903],{"style":126920,"src":144904},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-264.png",[19,144906,144907],{},"引入资源就是针对不同的屏幕尺寸 调用不同的css文件",[35,144909,144911],{"id":144910},"_2113-媒体查询rem实现元素动态大小变化","21.1.3 媒体查询+rem实现元素动态大小变化",[1871,144913,144914,144917,144920],{},[195,144915,144916],{},"rem单位是跟着html来走的，有了rem页面元素可以设置不同大小尺寸",[195,144918,144919],{},"媒体查询可以根据不同设备宽度来修改样式",[195,144921,144922],{},"媒体查询+rem 就可以实现不同设备宽度，实现页面元素大小的动态变化",[14,144924,144926],{"id":144925},"_212-less基础","21.2 Less基础",[19,144928,144929],{},"css冗余度较高，不利于复用，没有很好的计算能力",[19,144931,144932],{},"Less可以解决该问题，它是css的扩展语言",[19,144934,144935,144936],{},"Less中文网址： ",[25,144937,144938],{"href":144938,"rel":144939},"http:\u002F\u002Flesscss.cn\u002F",[29],[19,144941,144942],{},[116,144943,144944],{},"Less 是一门 CSS 预处理语言，它扩展了CSS的动态特性",[35,144946,144948],{"id":144947},"_2121-less安装","21.2.1 less安装",[19,144950,144951],{},"如果使用vscode，则无需进行下方安装步骤",[19,144953,144954],{},[25,144955,144956],{"href":144956,"rel":144957},"http:\u002F\u002Fnodejs.cn\u002Fdownload\u002F",[29],[48,144959],{"style":126920,"src":144960},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-265.png",[35,144962,144964],{"id":144963},"_2122-less使用","21.2.2 less使用",[19,144966,144967],{},"我们首先新建一个后缀名为less的文件， 在这个less文件里面书写less语句",[192,144969,144970],{},[195,144971,144972],{},[116,144973,144974],{},"Less 变量",[48,144976],{"style":126920,"src":144977},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-266.png",[48,144979],{"style":126920,"src":144980},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-267.png",[192,144982,144983],{"start":203},[195,144984,144985],{},[116,144986,144987],{},"Less 编译",[48,144989],{"style":126920,"src":144990},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-268.png",[192,144992,144993],{"start":338},[195,144994,144995],{},[116,144996,144997],{},"Less 嵌套",[48,144999],{"style":126920,"src":145000},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-269.png",[48,145002],{"style":126920,"src":145003},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-270.png",[192,145005,145006],{"start":344},[195,145007,145008],{},[116,145009,145010],{},"Less 运算",[48,145012],{"style":126920,"src":145013},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-271.png",[19,145015,145016],{},"运算的时候不需要加单位，比如第一个+5之后就是宽度变为15px了",[19,145018,897],{},[1871,145020,145021,145024,145027,145030,145033],{},[195,145022,145023],{},"乘号（*）和除号（\u002F）的写法",[195,145025,145026],{},"运算符中间左右有个空格隔开 1px + 5",[195,145028,145029],{},"对于两个不同的单位的值之间的运算，运算结果的值取第一个值的单位",[195,145031,145032],{},"如果两个值之间只有一个值有单位，则运算结果就取该单位",[195,145034,145035],{},"注意在进行除法运算时一定要加括号，不然无法运算！",[14,145037,145039],{"id":145038},"_213-rem-适配方案","21.3 rem 适配方案",[19,145041,145042],{},"① 按照设计稿与设备宽度的比例，动态计算并设置 html 根标签的 font-size 大小（媒体查询）",[19,145044,145045],{},"② CSS 中，设计稿元素的宽、高、相对位置等取值，按照同等比例换算为 rem 为单位的值；",[48,145047],{"style":126920,"src":145048},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-272.png",[35,145050,145052],{"id":145051},"_2131-rem-实际开发适配方案1","21.3.1 rem 实际开发适配方案1",[19,145054,145055],{},"rem + 媒体查询 + less 技术",[48,145057],{"style":126920,"src":145058},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-273.png",[19,145060,145061],{},"这里可以这样理解，这个屏幕分成15份，也就是说由15份的文字组成，750px页面上文字的大小就是50px，要保持比例相同，那么在320px屏幕上的文字应该也得保证有15个，每个文字的大小就是21.33px，文字的个数由自己来定，那么只需要将页面中的文字大小设置为这15个字大小的倍数就可以了，知道倍数之后就保证了在不同屏幕上的展示比例不变",[19,145063,145064],{},"也可以理解为获得设计网页html尺寸与手机不同类型屏幕尺寸的比例，这个比例就可以保证设计网页在手机屏幕尺寸的正常显示",[48,145066],{"style":126920,"src":145067},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-274.png",[19,145069,145070],{},"写的时候每个元素都需要加（xxxrem \u002F @baseFront）",[19,145072,15362],{},[48,145074],{"style":126920,"src":145075},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-275.png",[19,145077,145078],{},"index.html:",[316,145080,145082],{"className":127064,"code":145081,"language":127066,"meta":50,"style":50},"\u002F* rem 适配方案 *\u002F\nhtml {\n  font-size: 62.5%;  \u002F* 1rem = 10px *\u002F\n}\n.box {\n  width: 10rem;  \u002F* 100px *\u002F\n}\n",[269,145083,145084,145089,145095,145111,145115,145121,145137],{"__ignoreMap":50},[324,145085,145086],{"class":326,"line":327},[324,145087,145088],{"class":772},"\u002F* rem 适配方案 *\u002F\n",[324,145090,145091,145093],{"class":326,"line":203},[324,145092,51357],{"class":52022},[324,145094,16301],{"class":867},[324,145096,145097,145099,145101,145104,145106,145108],{"class":326,"line":338},[324,145098,71348],{"class":916},[324,145100,52159],{"class":867},[324,145102,145103],{"class":916},"62.5",[324,145105,1192],{"class":863},[324,145107,130927],{"class":867},[324,145109,145110],{"class":772},"\u002F* 1rem = 10px *\u002F\n",[324,145112,145113],{"class":326,"line":344},[324,145114,2296],{"class":867},[324,145116,145117,145119],{"class":326,"line":484},[324,145118,130912],{"class":734},[324,145120,16301],{"class":867},[324,145122,145123,145125,145127,145129,145132,145134],{"class":326,"line":491},[324,145124,71290],{"class":916},[324,145126,52159],{"class":867},[324,145128,1310],{"class":916},[324,145130,145131],{"class":863},"rem",[324,145133,130927],{"class":867},[324,145135,145136],{"class":772},"\u002F* 100px *\u002F\n",[324,145138,145139],{"class":326,"line":496},[324,145140,2296],{"class":867},[19,145142,145143],{},"common.less",[316,145145,145147],{"className":127064,"code":145146,"language":127066,"meta":50,"style":50},"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",[269,145148,145149,145155,145170,145174,145180,145194,145198,145202,145206,145212,145226,145230,145236,145250],{"__ignoreMap":50},[324,145150,145151,145153],{"class":326,"line":327},[324,145152,51357],{"class":52022},[324,145154,16301],{"class":867},[324,145156,145157,145159,145161,145163,145165,145167],{"class":326,"line":203},[324,145158,71348],{"class":916},[324,145160,52159],{"class":867},[324,145162,145103],{"class":916},[324,145164,1192],{"class":863},[324,145166,26791],{"class":867},[324,145168,145169],{"class":772},"\u002F* 10px *\u002F\n",[324,145171,145172],{"class":326,"line":338},[324,145173,2296],{"class":867},[324,145175,145176,145178],{"class":326,"line":344},[324,145177,52333],{"class":52022},[324,145179,16301],{"class":867},[324,145181,145182,145184,145186,145188,145190,145192],{"class":326,"line":484},[324,145183,71290],{"class":916},[324,145185,52159],{"class":867},[324,145187,1310],{"class":916},[324,145189,145131],{"class":863},[324,145191,26791],{"class":867},[324,145193,145136],{"class":772},[324,145195,145196],{"class":326,"line":491},[324,145197,2296],{"class":867},[324,145199,145200],{"class":326,"line":496},[324,145201,136525],{"class":867},[324,145203,145204],{"class":326,"line":502},[324,145205,145088],{"class":772},[324,145207,145208,145210],{"class":326,"line":508},[324,145209,51357],{"class":52022},[324,145211,16301],{"class":867},[324,145213,145214,145216,145218,145220,145222,145224],{"class":326,"line":514},[324,145215,71348],{"class":916},[324,145217,52159],{"class":867},[324,145219,145103],{"class":916},[324,145221,1192],{"class":863},[324,145223,130927],{"class":867},[324,145225,145110],{"class":772},[324,145227,145228],{"class":326,"line":2343},[324,145229,2296],{"class":867},[324,145231,145232,145234],{"class":326,"line":2348},[324,145233,130912],{"class":734},[324,145235,16301],{"class":867},[324,145237,145238,145240,145242,145244,145246,145248],{"class":326,"line":2354},[324,145239,71290],{"class":916},[324,145241,52159],{"class":867},[324,145243,1310],{"class":916},[324,145245,145131],{"class":863},[324,145247,130927],{"class":867},[324,145249,145136],{"class":772},[324,145251,145252],{"class":326,"line":2359},[324,145253,2296],{"class":867},[19,145255,145256,145257,145260],{},"html {\nfont-size: 62.5%; \u002F* 10px ",[24280,145258,145259],{},"\u002F\n}\ndiv {\nwidth: 10rem; \u002F"," 100px *\u002F\n}",[316,145262,145265],{"className":145263,"code":145264,"language":5916},[5914],"\n初始化样式：normalize.css(直接复制下载即可)\n\n```Css\n* {\n  margin: 0;\n  padding: 0;\n  box-sizing: border-box;\n}\n",[269,145266,145264],{"__ignoreMap":50},[19,145268,145269],{},"less保存时会自动变成.css文件",[19,145271,145272],{},"好好搞懂上述代码写法",[35,145274,145276],{"id":145275},"_2132-样式导入样式","21.3.2 样式导入样式",[48,145278],{"style":126920,"src":145279},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-276.png",[35,145281,145283],{"id":145282},"_2133-rem-适配方案2","21.3.3 rem 适配方案2",[192,145285,145286],{},[195,145287,145288],{},"准备工作",[48,145290],{"style":126920,"src":145291},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-277.png",[19,145293,145294,145295],{},"github地址：",[25,145296,145297],{"href":145297,"rel":145298},"https:\u002F\u002Fgithub.com\u002Famfe\u002Flib-flexible",[29],[19,145300,145301],{},"下载之后，将index.js文件拖到项目中就可以了",[19,145303,145304,145305],{},"js文件引入到index.html中使用的是",[269,145306,145307],{},"\u003Cscript src=\"js\u002Fflexible.js\">\u003C\u002Fscript>",[192,145309,145310],{"start":203},[195,145311,145312],{},"vscode插件",[48,145314],{"style":126920,"src":145315},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-278.png",[19,145317,145318],{},"js这个flexible是将整个浏览页面设计成了10等分，也就是说按照750px的设计尺寸，body的大小为75px，所以body的宽度应为10rem，由于这里不在使用媒体查询，就没有最大界面限制了，所以给body设置为margin：0 auto;是不显示的，要加一个最大宽度，即max-width",[19,145320,145321],{},"在下面布局时每个盒子的大小都是依据html（手机的尺寸界面）来变的，都要转化成rem单位，每个宽度除75不好算，这个插件可以帮助我们来算，插件就是下面的效果",[48,145323],{"style":126920,"src":145324},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-279.png",[19,145326,145327],{},"使用之前需要先修改一下html字体大小基准值，应该改为75px",[48,145329],{"style":126920,"src":145330},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-280.png",[19,145332,145333],{},"修改成75就可以，alt+z为快捷键",[19,145335,145336],{},"index.css：",[316,145338,145339],{"className":127064,"code":145081,"language":127066,"meta":50,"style":50},[269,145340,145341,145345,145351,145365,145369,145375,145389],{"__ignoreMap":50},[324,145342,145343],{"class":326,"line":327},[324,145344,145088],{"class":772},[324,145346,145347,145349],{"class":326,"line":203},[324,145348,51357],{"class":52022},[324,145350,16301],{"class":867},[324,145352,145353,145355,145357,145359,145361,145363],{"class":326,"line":338},[324,145354,71348],{"class":916},[324,145356,52159],{"class":867},[324,145358,145103],{"class":916},[324,145360,1192],{"class":863},[324,145362,130927],{"class":867},[324,145364,145110],{"class":772},[324,145366,145367],{"class":326,"line":344},[324,145368,2296],{"class":867},[324,145370,145371,145373],{"class":326,"line":484},[324,145372,130912],{"class":734},[324,145374,16301],{"class":867},[324,145376,145377,145379,145381,145383,145385,145387],{"class":326,"line":491},[324,145378,71290],{"class":916},[324,145380,52159],{"class":867},[324,145382,1310],{"class":916},[324,145384,145131],{"class":863},[324,145386,130927],{"class":867},[324,145388,145136],{"class":772},[324,145390,145391],{"class":326,"line":496},[324,145392,2296],{"class":867},[19,145394,145078],{},[316,145396,145397],{"className":127064,"code":127468,"language":127066,"meta":50,"style":50},[269,145398,145399,145405,145417],{"__ignoreMap":50},[324,145400,145401,145403],{"class":326,"line":327},[324,145402,52522],{"class":52022},[324,145404,16301],{"class":867},[324,145406,145407,145409,145411,145413,145415],{"class":326,"line":203},[324,145408,71348],{"class":916},[324,145410,52159],{"class":867},[324,145412,1465],{"class":916},[324,145414,52214],{"class":863},[324,145416,2025],{"class":867},[324,145418,145419],{"class":326,"line":338},[324,145420,2296],{"class":867},[14,145422,145424],{"id":145423},"_214-响应式开发","21.4 响应式开发",[19,145426,145427],{},"他的开发原理就是使用媒体查询针对不同宽度的设备进行布局和样式的设置，从而适配不同设备的目的。",[48,145429],{"style":126920,"src":145430},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-281.png",[19,145432,145433],{},"做法：",[1871,145435,145436,145439],{},[195,145437,145438],{},"响应式需要一个父级做为布局容器，来配合子级元素来实现变化效果",[195,145440,145441],{},"原理就是在不同屏幕下，通过媒体查询来改变这个布局容器的大小，再改变里面子元素的排列方式和大小，从而实现不同屏幕下，看到不同的页面布局和样式变化，通过父亲来改变孩子的大小",[48,145443],{"style":126920,"src":145444},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-282.png",[19,145446,145447],{},"布局容器比页面稍微小一点是为了美观好看，由于小一点点，距离两边会有空隙，美观",[35,145449,145451],{"id":145450},"_2141-简单代码示范","21.4.1 简单代码示范",[316,145453,145454],{"className":127064,"code":145081,"language":127066,"meta":50,"style":50},[269,145455,145456,145460,145466,145480,145484,145490,145504],{"__ignoreMap":50},[324,145457,145458],{"class":326,"line":327},[324,145459,145088],{"class":772},[324,145461,145462,145464],{"class":326,"line":203},[324,145463,51357],{"class":52022},[324,145465,16301],{"class":867},[324,145467,145468,145470,145472,145474,145476,145478],{"class":326,"line":338},[324,145469,71348],{"class":916},[324,145471,52159],{"class":867},[324,145473,145103],{"class":916},[324,145475,1192],{"class":863},[324,145477,130927],{"class":867},[324,145479,145110],{"class":772},[324,145481,145482],{"class":326,"line":344},[324,145483,2296],{"class":867},[324,145485,145486,145488],{"class":326,"line":484},[324,145487,130912],{"class":734},[324,145489,16301],{"class":867},[324,145491,145492,145494,145496,145498,145500,145502],{"class":326,"line":491},[324,145493,71290],{"class":916},[324,145495,52159],{"class":867},[324,145497,1310],{"class":916},[324,145499,145131],{"class":863},[324,145501,130927],{"class":867},[324,145503,145136],{"class":772},[324,145505,145506],{"class":326,"line":496},[324,145507,2296],{"class":867},[19,145509,145510],{},"父盒子一般命名为container",[35,145512,145514],{"id":145513},"_2142-bootstrap前端开发框架","21.4.2 Bootstrap前端开发框架",[19,145516,145517,145518],{},"Bootstrap 来自 Twitter（推特），是目前最受欢迎的前端框架。Bootstrap 是基于 HTML、CSS 和JAVASCRIPT的，它简洁灵活，",[116,145519,145520],{},"使得 Web 开发更加快捷",[1871,145522,145523],{},[195,145524,145525,145526],{},"官网：",[116,145527,145528],{},[25,145529,145530],{"href":145530,"rel":145531},"http:\u002F\u002Fgetbootstrap.com\u002F",[29],[19,145533,145534],{},"可以直接去官网拿现成的东西",[192,145536,145537],{},[195,145538,145539],{},"Bootstrap的使用",[19,145541,145542],{},"控制权在框架本身，使用者要按照框架所规定的某种规范进行开发",[19,145544,145545],{},"Bootstrap 使用四步曲：",[19,145547,145548,145551],{},[116,145549,145550],{},"1. 创建文件夹结构"," 2. 创建 html 骨架结构 3. 引入相关样式文件 4. 书写内容",[48,145553],{"style":126920,"src":145554},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-283.png",[19,145556,145557],{},"打开Bootstrap官网，然后下载",[48,145559],{"style":126920,"src":145560},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-284.png",[48,145562],{"style":126920,"src":145563},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-285.png",[19,145565,145566],{},"这里边的小图标都是用类选择器写的，需要啥就复制这些类名就ok，它的效果就是给我们的标签创立了元素伪类选择器，使用的before,修改位置时，我们要对这个标签的元素伪类选择器来进行修改，只需要改变移动的量就可以，因为这个类的效果就已经进行了元素伪类选择器的设置",[19,145568,145569],{},"下载后会得到一个压缩包，然后解压一下，复制里边的js css fonts文件",[19,145571,145572],{},"在项目文件夹中新建一个bootstrap文件夹，然后将那些文件粘贴进去",[48,145574],{"style":126920,"src":145575},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-286.png",[316,145577,145579],{"className":127064,"code":145578,"language":127066,"meta":50,"style":50},".center {\n  color: red;\n}\n",[269,145580,145581,145587,145597],{"__ignoreMap":50},[324,145582,145583,145585],{"class":326,"line":327},[324,145584,127355],{"class":734},[324,145586,16301],{"class":867},[324,145588,145589,145591,145593,145595],{"class":326,"line":203},[324,145590,71627],{"class":916},[324,145592,52159],{"class":867},[324,145594,58143],{"class":916},[324,145596,2025],{"class":867},[324,145598,145599],{"class":326,"line":338},[324,145600,2296],{"class":867},[19,145602,145603,145606],{},[269,145604,145605],{},"\u003C!--[if lt IE 9]>"," 是条件注释：如果小于 IE9，引入下边两个文件",[48,145608],{"style":126920,"src":145609},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-287.png",[48,145611],{"style":126920,"src":145612},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-288.png",[48,145614],{"style":126920,"src":145615},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-289.png",[19,145617,145618],{},"bootstrap中的代码是通过类实现的，也就是说我们可以自己建立盒子，然后用他的类选择器，在微调，就可以实现自己想要的效果了，如果没效果，往往可能权重不够，加！important增加权重看看能否解决",[48,145620],{"style":126920,"src":145621},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-290.png",[19,145623,145624],{},"bootstrap也是通过normalize.css进行初始化的，这说明在进行项目的时候不用再引入normalize.css这个文件进行了。bootstrap内部带有初始化的引入",[192,145626,145627],{"start":203},[195,145628,145629],{},"布局容器",[48,145631],{"style":126920,"src":145632},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-291.png",[19,145634,145635],{},"这样就可以不用媒体查询了，直接用类就可以实现（这个类选择器包含了不同屏幕尺寸的宽度，可以理解为这个里边对各个尺寸进行了从小到大的媒体查询，使用这个类就完全ok，不需要媒体查询）",[19,145637,145638],{},"container-fluid用于移动式布局比较方便",[192,145640,145641],{"start":338},[195,145642,145643,145644],{},"bootstrap ",[116,145645,145646],{},"栅格系统原理",[48,145648],{"style":126920,"src":145649},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-292.png",[192,145651,145652],{"start":344},[195,145653,145654],{},[116,145655,145656],{},"栅格选项参数",[48,145658],{"style":126920,"src":145659},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-293.png",[19,145661,145662],{},".col-lg-3表示再大桌面显示器上每个盒子占三份，也就是4个小盒子各占四分之一",[19,145664,15362],{},[316,145666,145667],{"className":127064,"code":145578,"language":127066,"meta":50,"style":50},[269,145668,145669,145675,145685],{"__ignoreMap":50},[324,145670,145671,145673],{"class":326,"line":327},[324,145672,127355],{"class":734},[324,145674,16301],{"class":867},[324,145676,145677,145679,145681,145683],{"class":326,"line":203},[324,145678,71627],{"class":916},[324,145680,52159],{"class":867},[324,145682,58143],{"class":916},[324,145684,2025],{"class":867},[324,145686,145687],{"class":326,"line":338},[324,145688,2296],{"class":867},[19,145690,136107],{},[48,145692],{"style":126920,"src":145693},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-294.png",[19,145695,145696],{},"再强调一下：这个响应式布局可以实现一行内容如何分，在这个界面是这样分的，当缩小或放大一定页面就一行内容展示的可能变多，也可能变少，这就是响应式布局",[19,145698,145699],{},"然后总列份为12份，然后后边的数字就表示了占的列份，也就是占的宽度为多少",[19,145701,145702],{},"如果孩子的份数相加等于12， 则孩子能占满整个 container布局容器的宽度",[19,145704,145705],{},"如果孩子的份数相加小于12，则占不满整个container的宽度，会在右侧留有宽度",[19,145707,145708],{},"如果孩子的份数相加大于12，多余的那一列，会另起一行来显示",[19,145710,145711],{},"汇总展示说明：",[316,145713,145714],{"className":127811,"code":131168,"language":127813,"meta":50,"style":50},[269,145715,145716,145720,145734,145738],{"__ignoreMap":50},[324,145717,145718],{"class":326,"line":327},[324,145719,131175],{"class":772},[324,145721,145722,145724,145726,145728,145730,145732],{"class":326,"line":203},[324,145723,1774],{"class":867},[324,145725,52333],{"class":52022},[324,145727,54208],{"class":734},[324,145729,913],{"class":867},[324,145731,131188],{"class":738},[324,145733,52029],{"class":867},[324,145735,145736],{"class":326,"line":338},[324,145737,131195],{"class":867},[324,145739,145740,145742,145744],{"class":326,"line":344},[324,145741,52507],{"class":867},[324,145743,52333],{"class":52022},[324,145745,52029],{"class":867},[48,145747],{"style":126920,"src":145748},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-295.png",[19,145750,145751],{},"一行中的内容在不同页面展示不同个数的效果代码写法如下：",[316,145753,145754],{"className":127811,"code":131168,"language":127813,"meta":50,"style":50},[269,145755,145756,145760,145774,145778],{"__ignoreMap":50},[324,145757,145758],{"class":326,"line":327},[324,145759,131175],{"class":772},[324,145761,145762,145764,145766,145768,145770,145772],{"class":326,"line":203},[324,145763,1774],{"class":867},[324,145765,52333],{"class":52022},[324,145767,54208],{"class":734},[324,145769,913],{"class":867},[324,145771,131188],{"class":738},[324,145773,52029],{"class":867},[324,145775,145776],{"class":326,"line":338},[324,145777,131195],{"class":867},[324,145779,145780,145782,145784],{"class":326,"line":344},[324,145781,52507],{"class":867},[324,145783,52333],{"class":52022},[324,145785,52029],{"class":867},[192,145787,145788],{"start":484},[195,145789,145790],{},[116,145791,145792],{},"列嵌套",[48,145794],{"style":126920,"src":145795},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-296.png",[19,145797,145798],{},"我们列嵌套最好加1个行row，这样可以取消父元素的padding值 而且高度自动和父级一样高，此时就是每个子盒子的padding值了",[19,145800,145801],{},"没加row内部这样：",[48,145803],{"style":126920,"src":145804},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-297.png",[19,145806,145807],{},"加上row之后内部为：",[48,145809],{"style":126920,"src":145810},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-298.png",[192,145812,145813],{"start":491},[195,145814,145815],{},[116,145816,145817],{},"列偏移",[48,145819],{"style":126920,"src":145820},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-299.png",[19,145822,145823],{},"不要用margin，如果用这个的话会导致响应式失效，我们要的就是在不同界面上变化不同，但是比例相同，还有margin的值也不好确定，不能值卡死，所以不要用padding!!!",[19,145825,145826],{},"要加偏移量，即偏移份数",[19,145828,145829],{},"偏移的份数=12-两个盒子的份数",[192,145831,145832],{"start":496},[195,145833,145834],{},[116,145835,145836],{},"列排序",[48,145838],{"style":126920,"src":145839},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-300.png",[19,145841,145842],{},"pull拉左；push推右",[192,145844,145845],{"start":502},[195,145846,145847],{},[116,145848,145849],{},"响应式工具",[48,145851],{"style":126920,"src":145852},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-301.png",[19,145854,145855],{},"与之相反的，是visible-xs visible-sm visible-md visible-lg是显示页面的内容",[35,145857,145859],{"id":145858},"_2143-响应式小项目","21.4.3 响应式小项目",[19,145861,145862],{},"在使用无序列表时可以通过对ul进行，取消li前边的点不用非得在li上进行操作，要知道继承性，反正要对ul进行操作了，所以直接给ul写就行，可以避免代码的冗余",[19,145864,145865],{},"ul {",[19,145867,145868],{},"list-style: none;",[19,145870,145871],{},"margin:0;",[19,145873,145874],{},"padding:0; }",[48,145876],{"style":126920,"src":145877},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-302.png",[48,145879],{"style":126920,"src":145880},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-303.png",[19,145882,145883],{},"要灵活用好浮动！！！，样式优先去网站上找类名，然后直接复制，提高自己开发的效率，当屏幕缩放内容改变的时候不要忘记媒体查询",[19,145885,69611],{},[316,145887,145888],{"className":127064,"code":139734,"language":127066,"meta":50,"style":50},[269,145889,145890,145896,145906],{"__ignoreMap":50},[324,145891,145892,145894],{"class":326,"line":327},[324,145893,130912],{"class":734},[324,145895,16301],{"class":867},[324,145897,145898,145900,145902,145904],{"class":326,"line":203},[324,145899,131544],{"class":916},[324,145901,52159],{"class":867},[324,145903,24463],{"class":916},[324,145905,2025],{"class":867},[324,145907,145908],{"class":326,"line":338},[324,145909,2296],{"class":867},[19,145911,71175],{},[316,145913,145914],{"className":127064,"code":139734,"language":127066,"meta":50,"style":50},[269,145915,145916,145922,145932],{"__ignoreMap":50},[324,145917,145918,145920],{"class":326,"line":327},[324,145919,130912],{"class":734},[324,145921,16301],{"class":867},[324,145923,145924,145926,145928,145930],{"class":326,"line":203},[324,145925,131544],{"class":916},[324,145927,52159],{"class":867},[324,145929,24463],{"class":916},[324,145931,2025],{"class":867},[324,145933,145934],{"class":326,"line":338},[324,145935,2296],{"class":867},[14,145937,145939],{"id":145938},"_215-swiper-插件使用","21.5 swiper 插件使用",[1871,145941,145942,145945,145948],{},[195,145943,145944],{},"下载需要的css和js文件html页面中 引入相关文件",[195,145946,145947],{},"官网找到类似案例，复制html结构，css样式 js 语法",[195,145949,145950],{},"根据需求定制修改模块",[48,145952],{"style":126920,"src":145953},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-304.png",[19,145955,145956],{},"解压后将这两部分放到项目中",[48,145958],{"style":126920,"src":145959},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-305.png",[19,145961,145962],{},"这个插件可以帮助我们实现轮播图效果",[19,145964,145965],{},"用法：",[48,145967],{"style":126920,"src":145968},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-306.png",[19,145970,145971],{},"找到自己喜欢的",[48,145973],{"style":126920,"src":145974},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-307.png",[19,145976,145977],{},"右键，查看网页源代码",[48,145979],{"style":126920,"src":145980},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-308.png",[19,145982,145983],{},"复制人家的结构内容",[19,145985,145986],{},"然后去看API文档：",[48,145988],{"style":126920,"src":145989},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-309.png",[19,145991,145992],{},"可以看看如何修改样式",[19,145994,145995],{},"现成的轮播图效果，直接需要啥取啥就行，然后再稍微进行修改即可",[775,145997,145998],{},"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":50,"searchDepth":203,"depth":203,"links":146000},[146001,146006,146010,146015,146020],{"id":144801,"depth":203,"text":144802,"children":146002},[146003,146004,146005],{"id":144805,"depth":338,"text":144806},{"id":144815,"depth":338,"text":144816},{"id":144910,"depth":338,"text":144911},{"id":144925,"depth":203,"text":144926,"children":146007},[146008,146009],{"id":144947,"depth":338,"text":144948},{"id":144963,"depth":338,"text":144964},{"id":145038,"depth":203,"text":145039,"children":146011},[146012,146013,146014],{"id":145051,"depth":338,"text":145052},{"id":145275,"depth":338,"text":145276},{"id":145282,"depth":338,"text":145283},{"id":145423,"depth":203,"text":145424,"children":146016},[146017,146018,146019],{"id":145450,"depth":338,"text":145451},{"id":145513,"depth":338,"text":145514},{"id":145858,"depth":338,"text":145859},{"id":145938,"depth":203,"text":145939},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch21",{"title":144793,"description":791},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇","dcPQ5dNoub6Mo7yPfx2viTiSO8ON7T0MmDcFGjTm7xo",{"id":146027,"title":146028,"body":146029,"description":791,"extension":792,"meta":146249,"navigation":487,"path":146250,"seo":146251,"stem":146252,"__hash__":146253},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位.md","22. 代码提交与新型相对单位",{"type":7,"value":146030,"toc":146245},[146031,146034,146038,146041,146056,146061,146064,146069,146104,146109,146121,146126,146139,146144,146161,146166,146186,146191,146209,146212,146215,146218,146221,146225,146228,146231,146234,146237,146240,146243],[10,146032,146028],{"id":146033},"_22-代码提交与新型相对单位",[14,146035,146037],{"id":146036},"_221-网页提交码云国内版github可以理解为","22.1 网页提交码云（国内版github可以理解为）",[19,146039,146040],{},"法1：",[192,146042,146043,146050,146053],{},[195,146044,146045,146046],{},"登录网站注册：",[25,146047,146048],{"href":146048,"rel":146049},"https:\u002F\u002Fgitee.com\u002F",[29],[195,146051,146052],{},"码云创建新的仓库",[195,146054,146055],{},"利用git 提交 把本地网站提交到 码云新建的仓库里面",[1871,146057,146058],{},[195,146059,146060],{},"在网站根目录右键-- Git Bash Here",[48,146062],{"style":126920,"src":146063},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-310.png",[1871,146065,146066],{},[195,146067,146068],{},"如果是第一次利用git提交，请配置好全局选项",[316,146070,146072],{"className":725,"code":146071,"language":727,"meta":50,"style":50},"git config --global user.name \"你的名字\"\ngit config --global user.email \"你的邮箱\"\n",[269,146073,146074,146090],{"__ignoreMap":50},[324,146075,146076,146079,146081,146084,146087],{"class":326,"line":327},[324,146077,146078],{"class":734},"git",[324,146080,120231],{"class":738},[324,146082,146083],{"class":916}," --global",[324,146085,146086],{"class":738}," user.name",[324,146088,146089],{"class":738}," \"你的名字\"\n",[324,146091,146092,146094,146096,146098,146101],{"class":326,"line":203},[324,146093,146078],{"class":734},[324,146095,120231],{"class":738},[324,146097,146083],{"class":916},[324,146099,146100],{"class":738}," user.email",[324,146102,146103],{"class":738}," \"你的邮箱\"\n",[1871,146105,146106],{},[195,146107,146108],{},"初始化仓库",[316,146110,146112],{"className":725,"code":146111,"language":727,"meta":50,"style":50},"git init\n",[269,146113,146114],{"__ignoreMap":50},[324,146115,146116,146118],{"class":326,"line":327},[324,146117,146078],{"class":734},[324,146119,146120],{"class":738}," init\n",[1871,146122,146123],{},[195,146124,146125],{},"把本地文件放到暂存区",[316,146127,146129],{"className":725,"code":146128,"language":727,"meta":50,"style":50},"git add .\n",[269,146130,146131],{"__ignoreMap":50},[324,146132,146133,146135,146137],{"class":326,"line":327},[324,146134,146078],{"class":734},[324,146136,5938],{"class":738},[324,146138,29463],{"class":738},[1871,146140,146141],{},[195,146142,146143],{},"把本地文件放到本地仓库里面",[316,146145,146147],{"className":725,"code":146146,"language":727,"meta":50,"style":50},"git commit -m \"first commit\"\n",[269,146148,146149],{"__ignoreMap":50},[324,146150,146151,146153,146156,146158],{"class":326,"line":327},[324,146152,146078],{"class":734},[324,146154,146155],{"class":738}," commit",[324,146157,101604],{"class":916},[324,146159,146160],{"class":738}," \"first commit\"\n",[1871,146162,146163],{},[195,146164,146165],{},"链接远程仓库",[316,146167,146169],{"className":725,"code":146168,"language":727,"meta":50,"style":50},"git remote add origin https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[269,146170,146171],{"__ignoreMap":50},[324,146172,146173,146175,146178,146180,146183],{"class":326,"line":327},[324,146174,146078],{"class":734},[324,146176,146177],{"class":738}," remote",[324,146179,5938],{"class":738},[324,146181,146182],{"class":738}," origin",[324,146184,146185],{"class":738}," https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[1871,146187,146188],{},[195,146189,146190],{},"把本地仓库的文件推送到远程仓库 push",[316,146192,146194],{"className":725,"code":146193,"language":727,"meta":50,"style":50},"git push -u origin master\n",[269,146195,146196],{"__ignoreMap":50},[324,146197,146198,146200,146202,146204,146206],{"class":326,"line":327},[324,146199,146078],{"class":734},[324,146201,29738],{"class":738},[324,146203,29012],{"class":916},[324,146205,146182],{"class":738},[324,146207,146208],{"class":738}," master\n",[48,146210],{"style":126920,"src":146211},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-311.png",[19,146213,146214],{},"上方方法暂未实现，后边学完git后在整",[19,146216,146217],{},"法2：也可以通过下方方式进行上传代码，这个在创建代码库的时候选择readme，然后进去这个页面后选择上传文件就可以了",[48,146219],{"style":126920,"src":146220},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-312.png",[14,146222,146224],{"id":146223},"_222-新型相对单位","22.2 新型相对单位",[48,146226],{"style":126920,"src":146227},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-313.png",[48,146229],{"style":126920,"src":146230},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-314.png",[19,146232,146233],{},"这里与rem的区别是为了方便计算，将窗口设置为100份",[19,146235,146236],{},"基本不用vh,手机的屏幕高度尺寸太大了，混用的话会可能导致撑破盒子，我们更关心的是屏幕宽度的变化，所以基本只用vw",[48,146238],{"style":126920,"src":146239},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-315.png",[19,146241,146242],{},"还有个单位vmin和vmax，是为了实现手机横屏显示的影响。vmin就是取手机视口宽高的最小值来算比例，vmax就是取的是视口宽高的最大值来算比例",[775,146244,24683],{},{"title":50,"searchDepth":203,"depth":203,"links":146246},[146247,146248],{"id":146036,"depth":203,"text":146037},{"id":146223,"depth":203,"text":146224},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch22",{"title":146028,"description":791},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位","BIsIqmwMkxYSF1NrxtVu3evm093xKcUzMC5FtpDkMLY",{"id":146255,"title":146256,"body":146257,"description":146261,"extension":792,"meta":146262,"navigation":487,"path":146263,"seo":146264,"stem":146265,"__hash__":146266},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Findex.md","Html和CSS学习",{"type":7,"value":146258,"toc":146259},[],{"title":50,"searchDepth":203,"depth":203,"links":146260},[],"自己正经开始学编程的第一门语言！",{"category":93561},"\u002Fwiki\u002F2024-10-10-htmlcss",{"title":146256,"description":146261},"wiki\u002F2024-10-10-Html和CSS学习\u002Findex","ViZSWnRAqyl24AANwdRP-nrvSQaYwh0RLeDemyU8XvI",{"id":146268,"title":146269,"body":146270,"description":791,"extension":792,"meta":147417,"navigation":487,"path":147418,"seo":147419,"stem":147420,"__hash__":147421},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序.md","1. Python环境与第一个程序",{"type":7,"value":146271,"toc":147393},[146272,146275,146279,146282,146285,146310,146313,146319,146323,146326,146353,146356,146396,146399,146411,146414,146420,146424,146428,146455,146472,146479,146483,146486,146512,146515,146519,146522,146562,146565,146582,146588,146592,146597,146641,146644,146662,146665,146733,146737,146744,146747,146762,146765,146774,146777,146788,146791,146800,146803,146820,146823,146838,146842,146846,146849,146851,146871,146875,146878,146881,146892,146895,146901,146905,146911,146938,146941,146953,146956,146967,146970,146976,146980,146986,147036,147039,147081,147084,147117,147120,147154,147158,147161,147181,147184,147220,147223,147236,147240,147244,147250,147253,147266,147270,147273,147279,147282,147286,147289,147292,147341,147345,147361,147367,147374,147380,147390],[10,146273,146269],{"id":146274},"_1-python环境与第一个程序",[14,146276,146278],{"id":146277},"_11-什么是python","1.1 什么是Python",[19,146280,146281],{},"Python 是一种解释型、高级、通用编程语言。它的语法接近自然语言，适合做自动化脚本、数据处理、Web 后端、人工智能、爬虫、测试工具、运维工具和教学入门。",[19,146283,146284],{},"理解 Python 时抓住三个关键词：",[192,146286,146287,146290,146293],{},[195,146288,146289],{},"解释型：代码通常由解释器一行行执行，不需要像 C\u002FC++ 那样先手动编译出可执行文件。",[195,146291,146292],{},"动态类型：变量不用提前声明类型，运行时根据赋值对象确定类型。",[195,146294,146295,146296,1077,146299,1077,146302,1077,146305,1077,146307,29107],{},"标准库丰富：安装 Python 后自带很多模块，如 ",[269,146297,146298],{},"os",[269,146300,146301],{},"sys",[269,146303,146304],{},"json",[269,146306,58582],{},[269,146308,146309],{},"datetime",[19,146311,146312],{},"Python 程序的运行链路：",[316,146314,146317],{"className":146315,"code":146316,"language":5916,"meta":50},[5914],"编写 .py 文件 -> Python 解释器读取代码 -> 转换为字节码 -> 虚拟机执行 -> 输出结果\n",[269,146318,146316],{"__ignoreMap":50},[14,146320,146322],{"id":146321},"_12-python解释器","1.2 Python解释器",[19,146324,146325],{},"解释器就是运行 Python 代码的软件。终端中常用命令如下：",[316,146327,146329],{"className":24549,"code":146328,"language":24551,"meta":50,"style":50},"python --version\npython3 --version\npython\npython3\n",[269,146330,146331,146337,146343,146348],{"__ignoreMap":50},[324,146332,146333,146335],{"class":326,"line":327},[324,146334,31102],{"class":734},[324,146336,27016],{"class":916},[324,146338,146339,146341],{"class":326,"line":203},[324,146340,101601],{"class":734},[324,146342,27016],{"class":916},[324,146344,146345],{"class":326,"line":338},[324,146346,146347],{"class":734},"python\n",[324,146349,146350],{"class":326,"line":344},[324,146351,146352],{"class":734},"python3\n",[19,146354,146355],{},"进入交互模式后，可以直接输入表达式：",[316,146357,146359],{"className":31100,"code":146358,"language":31102,"meta":50,"style":50},">>> 1 + 2\n3\n>>> print(\"hello python\")\nhello python\n",[269,146360,146361,146372,146377,146391],{"__ignoreMap":50},[324,146362,146363,146366,146368,146370],{"class":326,"line":327},[324,146364,146365],{"class":863},">>>",[324,146367,25842],{"class":916},[324,146369,46288],{"class":863},[324,146371,48445],{"class":916},[324,146373,146374],{"class":326,"line":203},[324,146375,146376],{"class":916},"3\n",[324,146378,146379,146381,146384,146386,146389],{"class":326,"line":338},[324,146380,146365],{"class":863},[324,146382,146383],{"class":916}," print",[324,146385,868],{"class":867},[324,146387,146388],{"class":738},"\"hello python\"",[324,146390,874],{"class":867},[324,146392,146393],{"class":326,"line":344},[324,146394,146395],{"class":867},"hello python\n",[19,146397,146398],{},"退出交互模式：",[316,146400,146402],{"className":31100,"code":146401,"language":31102,"meta":50,"style":50},"exit()\n",[269,146403,146404],{"__ignoreMap":50},[324,146405,146406,146409],{"class":326,"line":327},[324,146407,146408],{"class":916},"exit",[324,146410,2706],{"class":867},[19,146412,146413],{},"或使用快捷键：",[316,146415,146418],{"className":146416,"code":146417,"language":5916,"meta":50},[5914],"Windows: Ctrl + Z 然后回车\nmacOS\u002FLinux: Ctrl + D\n",[269,146419,146417],{"__ignoreMap":50},[14,146421,146423],{"id":146422},"_13-安装python","1.3 安装Python",[35,146425,146427],{"id":146426},"_131-windows安装","1.3.1 Windows安装",[192,146429,146430,146437,146440,146446,146452],{},[195,146431,146432,146433],{},"打开 Python 官网：",[25,146434,146435],{"href":146435,"rel":146436},"https:\u002F\u002Fwww.python.org\u002Fdownloads\u002F",[29],[195,146438,146439],{},"下载 Windows Installer。",[195,146441,146442,146443,29107],{},"安装时勾选 ",[269,146444,146445],{},"Add Python to PATH",[195,146447,146448,146449,29107],{},"点击 ",[269,146450,146451],{},"Install Now",[195,146453,146454],{},"安装完成后打开命令提示符验证：",[316,146456,146458],{"className":24549,"code":146457,"language":24551,"meta":50,"style":50},"python --version\npip --version\n",[269,146459,146460,146466],{"__ignoreMap":50},[324,146461,146462,146464],{"class":326,"line":327},[324,146463,31102],{"class":734},[324,146465,27016],{"class":916},[324,146467,146468,146470],{"class":326,"line":203},[324,146469,24558],{"class":734},[324,146471,27016],{"class":916},[19,146473,146474,146475,146478],{},"如果提示 ",[269,146476,146477],{},"python 不是内部或外部命令","，通常是 PATH 没配置好。可以重新安装并勾选 PATH，或在系统环境变量中加入 Python 安装目录。",[35,146480,146482],{"id":146481},"_132-macos安装","1.3.2 macOS安装",[19,146484,146485],{},"macOS 自带的 Python 版本可能不适合开发，建议安装新版：",[316,146487,146489],{"className":24549,"code":146488,"language":24551,"meta":50,"style":50},"brew install python\npython3 --version\npip3 --version\n",[269,146490,146491,146500,146506],{"__ignoreMap":50},[324,146492,146493,146496,146498],{"class":326,"line":327},[324,146494,146495],{"class":734},"brew",[324,146497,760],{"class":738},[324,146499,124830],{"class":738},[324,146501,146502,146504],{"class":326,"line":203},[324,146503,101601],{"class":734},[324,146505,27016],{"class":916},[324,146507,146508,146510],{"class":326,"line":338},[324,146509,120212],{"class":734},[324,146511,27016],{"class":916},[19,146513,146514],{},"如果没有 Homebrew，可以直接从 Python 官网下载 macOS 安装包。",[35,146516,146518],{"id":146517},"_133-linux安装","1.3.3 Linux安装",[19,146520,146521],{},"Ubuntu\u002FDebian：",[316,146523,146525],{"className":24549,"code":146524,"language":24551,"meta":50,"style":50},"sudo apt update\nsudo apt install python3 python3-pip python3-venv\npython3 --version\npip3 --version\n",[269,146526,146527,146535,146550,146556],{"__ignoreMap":50},[324,146528,146529,146531,146533],{"class":326,"line":327},[324,146530,735],{"class":734},[324,146532,739],{"class":738},[324,146534,742],{"class":738},[324,146536,146537,146539,146541,146543,146545,146547],{"class":326,"line":203},[324,146538,735],{"class":734},[324,146540,739],{"class":738},[324,146542,760],{"class":738},[324,146544,105124],{"class":738},[324,146546,101520],{"class":738},[324,146548,146549],{"class":738}," python3-venv\n",[324,146551,146552,146554],{"class":326,"line":338},[324,146553,101601],{"class":734},[324,146555,27016],{"class":916},[324,146557,146558,146560],{"class":326,"line":344},[324,146559,120212],{"class":734},[324,146561,27016],{"class":916},[19,146563,146564],{},"Fedora：",[316,146566,146568],{"className":24549,"code":146567,"language":24551,"meta":50,"style":50},"sudo dnf install python3 python3-pip\n",[269,146569,146570],{"__ignoreMap":50},[324,146571,146572,146574,146576,146578,146580],{"class":326,"line":327},[324,146573,735],{"class":734},[324,146575,27038],{"class":738},[324,146577,760],{"class":738},[324,146579,105124],{"class":738},[324,146581,120277],{"class":738},[19,146583,146584,146585,146587],{},"Linux 上通常使用 ",[269,146586,101601],{}," 命令，避免和系统旧版本 Python 冲突。",[14,146589,146591],{"id":146590},"_14-pip包管理器","1.4 pip包管理器",[19,146593,146594,146596],{},[269,146595,24558],{}," 用来安装第三方库。",[316,146598,146600],{"className":24549,"code":146599,"language":24551,"meta":50,"style":50},"pip install requests\npip uninstall requests\npip show requests\npip list\npip freeze\n",[269,146601,146602,146611,146620,146628,146634],{"__ignoreMap":50},[324,146603,146604,146606,146608],{"class":326,"line":327},[324,146605,24558],{"class":734},[324,146607,760],{"class":738},[324,146609,146610],{"class":738}," requests\n",[324,146612,146613,146615,146618],{"class":326,"line":203},[324,146614,24558],{"class":734},[324,146616,146617],{"class":738}," uninstall",[324,146619,146610],{"class":738},[324,146621,146622,146624,146626],{"class":326,"line":338},[324,146623,24558],{"class":734},[324,146625,118291],{"class":738},[324,146627,146610],{"class":738},[324,146629,146630,146632],{"class":326,"line":344},[324,146631,24558],{"class":734},[324,146633,119467],{"class":738},[324,146635,146636,146638],{"class":326,"line":484},[324,146637,24558],{"class":734},[324,146639,146640],{"class":738}," freeze\n",[19,146642,146643],{},"国内网络较慢时可以临时使用镜像：",[316,146645,146647],{"className":24549,"code":146646,"language":24551,"meta":50,"style":50},"pip install requests -i https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[269,146648,146649],{"__ignoreMap":50},[324,146650,146651,146653,146655,146658,146660],{"class":326,"line":327},[324,146652,24558],{"class":734},[324,146654,760],{"class":738},[324,146656,146657],{"class":738}," requests",[324,146659,27153],{"class":916},[324,146661,120240],{"class":738},[19,146663,146664],{},"常见第三方库：",[1003,146666,146667,146676],{},[1006,146668,146669],{},[1009,146670,146671,146674],{},[1012,146672,146673],{},"库",[1012,146675,103417],{},[1049,146677,146678,146686,146693,146701,146709,146717,146725],{},[1009,146679,146680,146683],{},[1054,146681,146682],{},"requests",[1054,146684,146685],{},"网络请求",[1009,146687,146688,146690],{},[1054,146689,101348],{},[1054,146691,146692],{},"数值计算",[1009,146694,146695,146698],{},[1054,146696,146697],{},"pandas",[1054,146699,146700],{},"表格数据处理",[1009,146702,146703,146706],{},[1054,146704,146705],{},"matplotlib",[1054,146707,146708],{},"绘图",[1009,146710,146711,146714],{},[1054,146712,146713],{},"pyecharts",[1054,146715,146716],{},"ECharts 图表",[1009,146718,146719,146722],{},[1054,146720,146721],{},"flask",[1054,146723,146724],{},"Web 后端",[1009,146726,146727,146730],{},[1054,146728,146729],{},"pytest",[1054,146731,146732],{},"自动化测试",[14,146734,146736],{"id":146735},"_15-虚拟环境","1.5 虚拟环境",[19,146738,146739,146740,146743],{},"虚拟环境用于隔离不同项目的依赖。一个项目需要 ",[269,146741,146742],{},"pyecharts==2.x","，另一个项目需要别的版本，直接全局安装容易冲突，所以建议每个项目创建自己的虚拟环境。",[19,146745,146746],{},"创建虚拟环境：",[316,146748,146750],{"className":24549,"code":146749,"language":24551,"meta":50,"style":50},"python -m venv .venv\n",[269,146751,146752],{"__ignoreMap":50},[324,146753,146754,146756,146758,146760],{"class":326,"line":327},[324,146755,31102],{"class":734},[324,146757,101604],{"class":916},[324,146759,101607],{"class":738},[324,146761,101610],{"class":738},[19,146763,146764],{},"Windows 激活：",[316,146766,146768],{"className":24549,"code":146767,"language":24551,"meta":50,"style":50},".venv\\Scripts\\activate\n",[269,146769,146770],{"__ignoreMap":50},[324,146771,146772],{"class":326,"line":327},[324,146773,146767],{"class":734},[19,146775,146776],{},"macOS\u002FLinux 激活：",[316,146778,146780],{"className":24549,"code":146779,"language":24551,"meta":50,"style":50},"source .venv\u002Fbin\u002Factivate\n",[269,146781,146782],{"__ignoreMap":50},[324,146783,146784,146786],{"class":326,"line":327},[324,146785,101615],{"class":916},[324,146787,101618],{"class":738},[19,146789,146790],{},"退出虚拟环境：",[316,146792,146794],{"className":24549,"code":146793,"language":24551,"meta":50,"style":50},"deactivate\n",[269,146795,146796],{"__ignoreMap":50},[324,146797,146798],{"class":326,"line":327},[324,146799,146793],{"class":734},[19,146801,146802],{},"保存依赖：",[316,146804,146806],{"className":24549,"code":146805,"language":24551,"meta":50,"style":50},"pip freeze > requirements.txt\n",[269,146807,146808],{"__ignoreMap":50},[324,146809,146810,146812,146815,146817],{"class":326,"line":327},[324,146811,24558],{"class":734},[324,146813,146814],{"class":738}," freeze",[324,146816,26946],{"class":863},[324,146818,146819],{"class":738}," requirements.txt\n",[19,146821,146822],{},"安装依赖：",[316,146824,146826],{"className":24549,"code":146825,"language":24551,"meta":50,"style":50},"pip install -r requirements.txt\n",[269,146827,146828],{"__ignoreMap":50},[324,146829,146830,146832,146834,146836],{"class":326,"line":327},[324,146831,24558],{"class":734},[324,146833,760],{"class":738},[324,146835,120151],{"class":916},[324,146837,146819],{"class":738},[14,146839,146841],{"id":146840},"_16-开发工具","1.6 开发工具",[35,146843,146845],{"id":146844},"_161-pycharm","1.6.1 PyCharm",[19,146847,146848],{},"PyCharm 适合新手，因为运行按钮、项目解释器、文件结构都比较直观。",[19,146850,122574],{},[192,146852,146853,146856,146859,146865,146868],{},[195,146854,146855],{},"New Project：创建项目。",[195,146857,146858],{},"Add Interpreter：选择 Python 解释器或虚拟环境。",[195,146860,146861,146862,126495],{},"New Python File：创建 ",[269,146863,146864],{},".py",[195,146866,146867],{},"Run：运行当前文件。",[195,146869,146870],{},"Debug：断点调试。",[35,146872,146874],{"id":146873},"_162-vs-code","1.6.2 VS Code",[19,146876,146877],{},"VS Code 轻量，适合后续多语言开发。",[19,146879,146880],{},"建议安装插件：",[192,146882,146883,146886,146889],{},[195,146884,146885],{},"Python。",[195,146887,146888],{},"Pylance。",[195,146890,146891],{},"Jupyter。",[19,146893,146894],{},"选择解释器：",[316,146896,146899],{"className":146897,"code":146898,"language":5916,"meta":50},[5914],"Ctrl + Shift + P -> Python: Select Interpreter\n",[269,146900,146898],{"__ignoreMap":50},[14,146902,146904],{"id":146903},"_17-第一个python程序","1.7 第一个Python程序",[19,146906,146907,146908,272],{},"创建文件 ",[269,146909,146910],{},"hello.py",[316,146912,146914],{"className":31100,"code":146913,"language":31102,"meta":50,"style":50},"print(\"Hello World\")\nprint(\"你好，Python\")\n",[269,146915,146916,146927],{"__ignoreMap":50},[324,146917,146918,146920,146922,146925],{"class":326,"line":327},[324,146919,31137],{"class":916},[324,146921,868],{"class":867},[324,146923,146924],{"class":738},"\"Hello World\"",[324,146926,874],{"class":867},[324,146928,146929,146931,146933,146936],{"class":326,"line":203},[324,146930,31137],{"class":916},[324,146932,868],{"class":867},[324,146934,146935],{"class":738},"\"你好，Python\"",[324,146937,874],{"class":867},[19,146939,146940],{},"在终端运行：",[316,146942,146944],{"className":24549,"code":146943,"language":24551,"meta":50,"style":50},"python hello.py\n",[269,146945,146946],{"__ignoreMap":50},[324,146947,146948,146950],{"class":326,"line":327},[324,146949,31102],{"class":734},[324,146951,146952],{"class":738}," hello.py\n",[19,146954,146955],{},"或：",[316,146957,146959],{"className":24549,"code":146958,"language":24551,"meta":50,"style":50},"python3 hello.py\n",[269,146960,146961],{"__ignoreMap":50},[324,146962,146963,146965],{"class":326,"line":327},[324,146964,101601],{"class":734},[324,146966,146952],{"class":738},[19,146968,146969],{},"输出：",[316,146971,146974],{"className":146972,"code":146973,"language":5916,"meta":50},[5914],"Hello World\n你好，Python\n",[269,146975,146973],{"__ignoreMap":50},[14,146977,146979],{"id":146978},"_18-print函数","1.8 print函数",[19,146981,146982,146985],{},[269,146983,146984],{},"print()"," 用来输出内容。",[316,146987,146989],{"className":31100,"code":146988,"language":31102,"meta":50,"style":50},"print(\"hello\")\nprint(100)\nprint(3.14)\nprint(\"年龄:\", 18)\n",[269,146990,146991,147001,147011,147021],{"__ignoreMap":50},[324,146992,146993,146995,146997,146999],{"class":326,"line":327},[324,146994,31137],{"class":916},[324,146996,868],{"class":867},[324,146998,6573],{"class":738},[324,147000,874],{"class":867},[324,147002,147003,147005,147007,147009],{"class":326,"line":203},[324,147004,31137],{"class":916},[324,147006,868],{"class":867},[324,147008,1175],{"class":916},[324,147010,874],{"class":867},[324,147012,147013,147015,147017,147019],{"class":326,"line":338},[324,147014,31137],{"class":916},[324,147016,868],{"class":867},[324,147018,917],{"class":916},[324,147020,874],{"class":867},[324,147022,147023,147025,147027,147030,147032,147034],{"class":326,"line":344},[324,147024,31137],{"class":916},[324,147026,868],{"class":867},[324,147028,147029],{"class":738},"\"年龄:\"",[324,147031,13164],{"class":867},[324,147033,1514],{"class":916},[324,147035,874],{"class":867},[19,147037,147038],{},"多个内容用逗号隔开，默认中间加空格：",[316,147040,147042],{"className":31100,"code":147041,"language":31102,"meta":50,"style":50},"name = \"张三\"\nage = 18\nprint(\"姓名:\", name, \"年龄:\", age)\n",[269,147043,147044,147054,147064],{"__ignoreMap":50},[324,147045,147046,147049,147051],{"class":326,"line":327},[324,147047,147048],{"class":867},"name ",[324,147050,913],{"class":863},[324,147052,147053],{"class":738}," \"张三\"\n",[324,147055,147056,147059,147061],{"class":326,"line":203},[324,147057,147058],{"class":867},"age ",[324,147060,913],{"class":863},[324,147062,147063],{"class":916}," 18\n",[324,147065,147066,147068,147070,147073,147076,147078],{"class":326,"line":338},[324,147067,31137],{"class":916},[324,147069,868],{"class":867},[324,147071,147072],{"class":738},"\"姓名:\"",[324,147074,147075],{"class":867},", name, ",[324,147077,147029],{"class":738},[324,147079,147080],{"class":867},", age)\n",[19,147082,147083],{},"修改分隔符：",[316,147085,147087],{"className":31100,"code":147086,"language":31102,"meta":50,"style":50},"print(\"2024\", \"10\", \"10\", sep=\"-\")\n",[269,147088,147089],{"__ignoreMap":50},[324,147090,147091,147093,147095,147098,147100,147102,147104,147106,147108,147111,147113,147115],{"class":326,"line":327},[324,147092,31137],{"class":916},[324,147094,868],{"class":867},[324,147096,147097],{"class":738},"\"2024\"",[324,147099,13164],{"class":867},[324,147101,55038],{"class":738},[324,147103,13164],{"class":867},[324,147105,55038],{"class":738},[324,147107,13164],{"class":867},[324,147109,147110],{"class":5945},"sep",[324,147112,913],{"class":863},[324,147114,33205],{"class":738},[324,147116,874],{"class":867},[19,147118,147119],{},"修改结尾符：",[316,147121,147123],{"className":31100,"code":147122,"language":31102,"meta":50,"style":50},"print(\"hello\", end=\" \")\nprint(\"python\")\n",[269,147124,147125,147143],{"__ignoreMap":50},[324,147126,147127,147129,147131,147133,147135,147137,147139,147141],{"class":326,"line":327},[324,147128,31137],{"class":916},[324,147130,868],{"class":867},[324,147132,6573],{"class":738},[324,147134,13164],{"class":867},[324,147136,46523],{"class":5945},[324,147138,913],{"class":863},[324,147140,5088],{"class":738},[324,147142,874],{"class":867},[324,147144,147145,147147,147149,147152],{"class":326,"line":203},[324,147146,31137],{"class":916},[324,147148,868],{"class":867},[324,147150,147151],{"class":738},"\"python\"",[324,147153,874],{"class":867},[14,147155,147157],{"id":147156},"_19-脚本运行和交互运行","1.9 脚本运行和交互运行",[19,147159,147160],{},"交互运行适合临时验证：",[316,147162,147164],{"className":31100,"code":147163,"language":31102,"meta":50,"style":50},">>> 10 * 3\n30\n",[269,147165,147166,147176],{"__ignoreMap":50},[324,147167,147168,147170,147172,147174],{"class":326,"line":327},[324,147169,146365],{"class":863},[324,147171,2768],{"class":916},[324,147173,7247],{"class":863},[324,147175,120548],{"class":916},[324,147177,147178],{"class":326,"line":203},[324,147179,147180],{"class":916},"30\n",[19,147182,147183],{},"脚本运行适合保存程序：",[316,147185,147187],{"className":31100,"code":147186,"language":31102,"meta":50,"style":50},"price = 8\ncount = 5\nprint(price * count)\n",[269,147188,147189,147199,147208],{"__ignoreMap":50},[324,147190,147191,147194,147196],{"class":326,"line":327},[324,147192,147193],{"class":867},"price ",[324,147195,913],{"class":863},[324,147197,147198],{"class":916}," 8\n",[324,147200,147201,147204,147206],{"class":326,"line":203},[324,147202,147203],{"class":867},"count ",[324,147205,913],{"class":863},[324,147207,55149],{"class":916},[324,147209,147210,147212,147215,147217],{"class":326,"line":338},[324,147211,31137],{"class":916},[324,147213,147214],{"class":867},"(price ",[324,147216,1319],{"class":863},[324,147218,147219],{"class":867}," count)\n",[19,147221,147222],{},"实际学习中推荐：",[192,147224,147225,147228,147233],{},[195,147226,147227],{},"临时试一个语法，用交互模式。",[195,147229,147230,147231,126495],{},"写完整练习，用 ",[269,147232,146864],{},[195,147234,147235],{},"写项目，用独立目录和虚拟环境。",[14,147237,147239],{"id":147238},"_110-常见错误","1.10 常见错误",[35,147241,147243],{"id":147242},"_1101-命令找不到","1.10.1 命令找不到",[316,147245,147248],{"className":147246,"code":147247,"language":5916,"meta":50},[5914],"python: command not found\n",[269,147249,147247],{"__ignoreMap":50},[19,147251,147252],{},"原因：",[192,147254,147255,147258,147261],{},[195,147256,147257],{},"没安装 Python。",[195,147259,147260],{},"PATH 没配置。",[195,147262,147263,147264,29107],{},"Linux\u002FmacOS 应该使用 ",[269,147265,101601],{},[35,147267,147269],{"id":147268},"_1102-文件名冲突","1.10.2 文件名冲突",[19,147271,147272],{},"不要把文件命名为：",[316,147274,147277],{"className":147275,"code":147276,"language":5916,"meta":50},[5914],"random.py\njson.py\ntime.py\nrequests.py\n",[269,147278,147276],{"__ignoreMap":50},[19,147280,147281],{},"这些名字可能和标准库或第三方库冲突，导致导入模块异常。",[35,147283,147285],{"id":147284},"_1103-中文乱码","1.10.3 中文乱码",[19,147287,147288],{},"Python 3 默认源文件编码是 UTF-8。仍然建议编辑器保存为 UTF-8。",[19,147290,147291],{},"如果读写文件出现乱码，要明确指定编码：",[316,147293,147295],{"className":31100,"code":147294,"language":31102,"meta":50,"style":50},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as f:\n    content = f.read()\n",[269,147296,147297,147331],{"__ignoreMap":50},[324,147298,147299,147301,147304,147306,147309,147311,147314,147316,147319,147321,147324,147326,147328],{"class":326,"line":327},[324,147300,108554],{"class":863},[324,147302,147303],{"class":916}," open",[324,147305,868],{"class":867},[324,147307,147308],{"class":738},"\"data.txt\"",[324,147310,13164],{"class":867},[324,147312,147313],{"class":738},"\"r\"",[324,147315,13164],{"class":867},[324,147317,147318],{"class":5945},"encoding",[324,147320,913],{"class":863},[324,147322,147323],{"class":738},"\"utf-8\"",[324,147325,14443],{"class":867},[324,147327,32105],{"class":863},[324,147329,147330],{"class":867}," f:\n",[324,147332,147333,147336,147338],{"class":326,"line":203},[324,147334,147335],{"class":867},"    content ",[324,147337,913],{"class":863},[324,147339,147340],{"class":867}," f.read()\n",[14,147342,147344],{"id":147343},"_111-本章练习","1.11 本章练习",[192,147346,147347,147350,147356],{},[195,147348,147349],{},"安装 Python，并在终端输出版本号。",[195,147351,147352,147353,147355],{},"新建 ",[269,147354,146910],{},"，输出自己的姓名、年龄、学习目标。",[195,147357,105087,147358,147360],{},[269,147359,146984],{}," 输出下面格式：",[316,147362,147365],{"className":147363,"code":147364,"language":5916,"meta":50},[5914],"姓名: 小明\n年龄: 18\n目标: 学会Python\n",[269,147366,147364],{"__ignoreMap":50},[192,147368,147369],{"start":344},[195,147370,105087,147371,147373],{},[269,147372,147110],{}," 输出日期：",[316,147375,147378],{"className":147376,"code":147377,"language":5916,"meta":50},[5914],"2024-10-10\n",[269,147379,147377],{"__ignoreMap":50},[192,147381,147382],{"start":484},[195,147383,105087,147384,147386,147387,147389],{},[269,147385,46523],{}," 让两次 ",[269,147388,146984],{}," 输出在同一行。",[775,147391,147392],{},"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":50,"searchDepth":203,"depth":203,"links":147394},[147395,147396,147397,147402,147403,147404,147408,147409,147410,147411,147416],{"id":146277,"depth":203,"text":146278},{"id":146321,"depth":203,"text":146322},{"id":146422,"depth":203,"text":146423,"children":147398},[147399,147400,147401],{"id":146426,"depth":338,"text":146427},{"id":146481,"depth":338,"text":146482},{"id":146517,"depth":338,"text":146518},{"id":146590,"depth":203,"text":146591},{"id":146735,"depth":203,"text":146736},{"id":146840,"depth":203,"text":146841,"children":147405},[147406,147407],{"id":146844,"depth":338,"text":146845},{"id":146873,"depth":338,"text":146874},{"id":146903,"depth":203,"text":146904},{"id":146978,"depth":203,"text":146979},{"id":147156,"depth":203,"text":147157},{"id":147238,"depth":203,"text":147239,"children":147412},[147413,147414,147415],{"id":147242,"depth":338,"text":147243},{"id":147268,"depth":338,"text":147269},{"id":147284,"depth":338,"text":147285},{"id":147343,"depth":203,"text":147344},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch1-python",{"title":146269,"description":791},"wiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序","48XQBvj-lv6PiPUmONIPH9uzA2A9QouK3fZD6RTbf9U",{"id":147423,"title":147424,"body":147425,"description":791,"extension":792,"meta":149829,"navigation":487,"path":149830,"seo":149831,"stem":149832,"__hash__":149833},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图.md","10. JSON与pyecharts折线图",{"type":7,"value":147426,"toc":149814},[147427,147430,147434,147437,147440,147457,147460,147502,147505,147509,147512,147515,147552,147555,147589,147592,147684,147688,147702,147705,147732,147735,147739,147842,147849,147852,147869,147873,147880,148069,148072,148145,148149,148152,148236,148239,148271,148275,148479,148482,148486,148492,148594,148597,148853,148857,148860,148863,148877,148879,149065,149069,149431,149437,149441,149444,149568,149571,149750,149753,149757,149790,149794,149811],[10,147428,147424],{"id":147429},"_10-json与pyecharts折线图",[14,147431,147433],{"id":147432},"_101-数据可视化","10.1 数据可视化",[19,147435,147436],{},"数据可视化就是把数据转换成图表，让趋势、对比和异常更容易观察。",[19,147438,147439],{},"常见图表：",[192,147441,147442,147445,147448,147451,147454],{},[195,147443,147444],{},"折线图：看趋势。",[195,147446,147447],{},"柱状图：看分类对比。",[195,147449,147450],{},"饼图：看占比。",[195,147452,147453],{},"地图：看地域分布。",[195,147455,147456],{},"散点图：看两个变量之间的关系。",[19,147458,147459],{},"Python 可视化常用库：",[1003,147461,147462,147470],{},[1006,147463,147464],{},[1009,147465,147466,147468],{},[1012,147467,146673],{},[1012,147469,24467],{},[1049,147471,147472,147479,147487,147494],{},[1009,147473,147474,147476],{},[1054,147475,146705],{},[1054,147477,147478],{},"基础、经典、可定制",[1009,147480,147481,147484],{},[1054,147482,147483],{},"seaborn",[1054,147485,147486],{},"统计图表更美观",[1009,147488,147489,147491],{},[1054,147490,146713],{},[1054,147492,147493],{},"生成交互式网页图表",[1009,147495,147496,147499],{},[1054,147497,147498],{},"plotly",[1054,147500,147501],{},"交互图表能力强",[19,147503,147504],{},"黑马入门课程常用 pyecharts 做可视化案例，因为它能快速生成漂亮的 HTML 图表。",[14,147506,147508],{"id":147507},"_102-json回顾","10.2 JSON回顾",[19,147510,147511],{},"JSON 是一种文本格式，常用于接口数据、配置文件和可视化数据。",[19,147513,147514],{},"Python 字典：",[316,147516,147518],{"className":31100,"code":147517,"language":31102,"meta":50,"style":50},"data = {\n    \"name\": \"北京\",\n    \"value\": 100\n}\n",[269,147519,147520,147528,147539,147548],{"__ignoreMap":50},[324,147521,147522,147524,147526],{"class":326,"line":327},[324,147523,102379],{"class":867},[324,147525,913],{"class":863},[324,147527,16301],{"class":867},[324,147529,147530,147533,147535,147537],{"class":326,"line":203},[324,147531,147532],{"class":738},"    \"name\"",[324,147534,52159],{"class":867},[324,147536,69991],{"class":738},[324,147538,32188],{"class":867},[324,147540,147541,147544,147546],{"class":326,"line":338},[324,147542,147543],{"class":738},"    \"value\"",[324,147545,52159],{"class":867},[324,147547,98180],{"class":916},[324,147549,147550],{"class":326,"line":344},[324,147551,2296],{"class":867},[19,147553,147554],{},"JSON 字符串：",[316,147556,147559],{"className":147557,"code":147558,"language":146304,"meta":50,"style":50},"language-json shiki shiki-themes github-light github-dark","{\n  \"name\": \"北京\",\n  \"value\": 100\n}\n",[269,147560,147561,147565,147576,147585],{"__ignoreMap":50},[324,147562,147563],{"class":326,"line":327},[324,147564,2277],{"class":867},[324,147566,147567,147570,147572,147574],{"class":326,"line":203},[324,147568,147569],{"class":916},"  \"name\"",[324,147571,52159],{"class":867},[324,147573,69991],{"class":738},[324,147575,32188],{"class":867},[324,147577,147578,147581,147583],{"class":326,"line":338},[324,147579,147580],{"class":916},"  \"value\"",[324,147582,52159],{"class":867},[324,147584,98180],{"class":916},[324,147586,147587],{"class":326,"line":344},[324,147588,2296],{"class":867},[19,147590,147591],{},"Python 与 JSON 的转换：",[316,147593,147595],{"className":31100,"code":147594,"language":31102,"meta":50,"style":50},"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",[269,147596,147597,147604,147608,147633,147637,147656,147663,147667,147677],{"__ignoreMap":50},[324,147598,147599,147601],{"class":326,"line":327},[324,147600,31114],{"class":863},[324,147602,147603],{"class":867}," json\n",[324,147605,147606],{"class":326,"line":203},[324,147607,488],{"emptyLinePlaceholder":487},[324,147609,147610,147612,147614,147616,147618,147620,147622,147624,147627,147629,147631],{"class":326,"line":338},[324,147611,102379],{"class":867},[324,147613,913],{"class":863},[324,147615,5177],{"class":867},[324,147617,63401],{"class":738},[324,147619,52159],{"class":867},[324,147621,69991],{"class":738},[324,147623,13164],{"class":867},[324,147625,147626],{"class":738},"\"value\"",[324,147628,52159],{"class":867},[324,147630,1175],{"class":916},[324,147632,2296],{"class":867},[324,147634,147635],{"class":326,"line":344},[324,147636,488],{"emptyLinePlaceholder":487},[324,147638,147639,147642,147644,147647,147650,147652,147654],{"class":326,"line":484},[324,147640,147641],{"class":867},"json_text ",[324,147643,913],{"class":863},[324,147645,147646],{"class":867}," json.dumps(data, ",[324,147648,147649],{"class":5945},"ensure_ascii",[324,147651,913],{"class":863},[324,147653,34709],{"class":916},[324,147655,874],{"class":867},[324,147657,147658,147660],{"class":326,"line":491},[324,147659,31137],{"class":916},[324,147661,147662],{"class":867},"(json_text)\n",[324,147664,147665],{"class":326,"line":496},[324,147666,488],{"emptyLinePlaceholder":487},[324,147668,147669,147672,147674],{"class":326,"line":502},[324,147670,147671],{"class":867},"new_data ",[324,147673,913],{"class":863},[324,147675,147676],{"class":867}," json.loads(json_text)\n",[324,147678,147679,147681],{"class":326,"line":508},[324,147680,31137],{"class":916},[324,147682,147683],{"class":867},"(new_data)\n",[14,147685,147687],{"id":147686},"_103-安装pyecharts","10.3 安装pyecharts",[316,147689,147691],{"className":24549,"code":147690,"language":24551,"meta":50,"style":50},"pip install pyecharts\n",[269,147692,147693],{"__ignoreMap":50},[324,147694,147695,147697,147699],{"class":326,"line":327},[324,147696,24558],{"class":734},[324,147698,760],{"class":738},[324,147700,147701],{"class":738}," pyecharts\n",[19,147703,147704],{},"验证：",[316,147706,147708],{"className":31100,"code":147707,"language":31102,"meta":50,"style":50},"import pyecharts\n\nprint(pyecharts.__version__)\n",[269,147709,147710,147716,147720],{"__ignoreMap":50},[324,147711,147712,147714],{"class":326,"line":327},[324,147713,31114],{"class":863},[324,147715,147701],{"class":867},[324,147717,147718],{"class":326,"line":203},[324,147719,488],{"emptyLinePlaceholder":487},[324,147721,147722,147724,147727,147730],{"class":326,"line":338},[324,147723,31137],{"class":916},[324,147725,147726],{"class":867},"(pyecharts.",[324,147728,147729],{"class":916},"__version__",[324,147731,874],{"class":867},[19,147733,147734],{},"如果使用虚拟环境，要先激活环境再安装。",[14,147736,147738],{"id":147737},"_104-第一个折线图","10.4 第一个折线图",[316,147740,147742],{"className":31100,"code":147741,"language":31102,"meta":50,"style":50},"from pyecharts.charts import Line\n\nline = Line()\nline.add_xaxis([\"周一\", \"周二\", \"周三\", \"周四\", \"周五\"])\nline.add_yaxis(\"销售额\", [100, 120, 90, 150, 180])\nline.render(\"line.html\")\n",[269,147743,147744,147756,147760,147770,147800,147832],{"__ignoreMap":50},[324,147745,147746,147748,147751,147753],{"class":326,"line":327},[324,147747,31459],{"class":863},[324,147749,147750],{"class":867}," pyecharts.charts ",[324,147752,31114],{"class":863},[324,147754,147755],{"class":867}," Line\n",[324,147757,147758],{"class":326,"line":203},[324,147759,488],{"emptyLinePlaceholder":487},[324,147761,147762,147765,147767],{"class":326,"line":338},[324,147763,147764],{"class":867},"line ",[324,147766,913],{"class":863},[324,147768,147769],{"class":867}," Line()\n",[324,147771,147772,147775,147778,147780,147783,147785,147788,147790,147793,147795,147798],{"class":326,"line":344},[324,147773,147774],{"class":867},"line.add_xaxis([",[324,147776,147777],{"class":738},"\"周一\"",[324,147779,13164],{"class":867},[324,147781,147782],{"class":738},"\"周二\"",[324,147784,13164],{"class":867},[324,147786,147787],{"class":738},"\"周三\"",[324,147789,13164],{"class":867},[324,147791,147792],{"class":738},"\"周四\"",[324,147794,13164],{"class":867},[324,147796,147797],{"class":738},"\"周五\"",[324,147799,5386],{"class":867},[324,147801,147802,147805,147808,147810,147812,147814,147816,147818,147820,147822,147825,147827,147830],{"class":326,"line":484},[324,147803,147804],{"class":867},"line.add_yaxis(",[324,147806,147807],{"class":738},"\"销售额\"",[324,147809,78240],{"class":867},[324,147811,1175],{"class":916},[324,147813,13164],{"class":867},[324,147815,1681],{"class":916},[324,147817,13164],{"class":867},[324,147819,1726],{"class":916},[324,147821,13164],{"class":867},[324,147823,147824],{"class":916},"150",[324,147826,13164],{"class":867},[324,147828,147829],{"class":916},"180",[324,147831,5386],{"class":867},[324,147833,147834,147837,147840],{"class":326,"line":491},[324,147835,147836],{"class":867},"line.render(",[324,147838,147839],{"class":738},"\"line.html\"",[324,147841,874],{"class":867},[19,147843,147844,147845,147848],{},"运行后会生成 ",[269,147846,147847],{},"line.html","，用浏览器打开即可看到图表。",[19,147850,147851],{},"核心步骤：",[192,147853,147854,147857,147860,147863,147866],{},[195,147855,147856],{},"导入图表类。",[195,147858,147859],{},"创建图表对象。",[195,147861,147862],{},"添加 x 轴数据。",[195,147864,147865],{},"添加 y 轴数据。",[195,147867,147868],{},"渲染为 HTML。",[14,147870,147872],{"id":147871},"_105-全局配置","10.5 全局配置",[19,147874,147875,147876,147879],{},"常用配置在 ",[269,147877,147878],{},"pyecharts.options"," 中。",[316,147881,147883],{"className":31100,"code":147882,"language":31102,"meta":50,"style":50},"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",[269,147884,147885,147902,147912,147916,147924,147948,147976,147981,148000,148019,148037,148057,148061],{"__ignoreMap":50},[324,147886,147887,147889,147892,147894,147897,147899],{"class":326,"line":327},[324,147888,31459],{"class":863},[324,147890,147891],{"class":867}," pyecharts ",[324,147893,31114],{"class":863},[324,147895,147896],{"class":867}," options ",[324,147898,32105],{"class":863},[324,147900,147901],{"class":867}," opts\n",[324,147903,147904,147906,147908,147910],{"class":326,"line":203},[324,147905,31459],{"class":863},[324,147907,147750],{"class":867},[324,147909,31114],{"class":863},[324,147911,147755],{"class":867},[324,147913,147914],{"class":326,"line":338},[324,147915,488],{"emptyLinePlaceholder":487},[324,147917,147918,147920,147922],{"class":326,"line":344},[324,147919,147764],{"class":867},[324,147921,913],{"class":863},[324,147923,147769],{"class":867},[324,147925,147926,147928,147930,147932,147934,147936,147938,147940,147942,147944,147946],{"class":326,"line":484},[324,147927,147774],{"class":867},[324,147929,147777],{"class":738},[324,147931,13164],{"class":867},[324,147933,147782],{"class":738},[324,147935,13164],{"class":867},[324,147937,147787],{"class":738},[324,147939,13164],{"class":867},[324,147941,147792],{"class":738},[324,147943,13164],{"class":867},[324,147945,147797],{"class":738},[324,147947,5386],{"class":867},[324,147949,147950,147952,147954,147956,147958,147960,147962,147964,147966,147968,147970,147972,147974],{"class":326,"line":491},[324,147951,147804],{"class":867},[324,147953,147807],{"class":738},[324,147955,78240],{"class":867},[324,147957,1175],{"class":916},[324,147959,13164],{"class":867},[324,147961,1681],{"class":916},[324,147963,13164],{"class":867},[324,147965,1726],{"class":916},[324,147967,13164],{"class":867},[324,147969,147824],{"class":916},[324,147971,13164],{"class":867},[324,147973,147829],{"class":916},[324,147975,5386],{"class":867},[324,147977,147978],{"class":326,"line":496},[324,147979,147980],{"class":867},"line.set_global_opts(\n",[324,147982,147983,147986,147988,147991,147993,147995,147998],{"class":326,"line":502},[324,147984,147985],{"class":5945},"    title_opts",[324,147987,913],{"class":863},[324,147989,147990],{"class":867},"opts.TitleOpts(",[324,147992,52129],{"class":5945},[324,147994,913],{"class":863},[324,147996,147997],{"class":738},"\"一周销售额\"",[324,147999,38769],{"class":867},[324,148001,148002,148005,148007,148010,148012,148014,148017],{"class":326,"line":508},[324,148003,148004],{"class":5945},"    xaxis_opts",[324,148006,913],{"class":863},[324,148008,148009],{"class":867},"opts.AxisOpts(",[324,148011,80532],{"class":5945},[324,148013,913],{"class":863},[324,148015,148016],{"class":738},"\"日期\"",[324,148018,38769],{"class":867},[324,148020,148021,148024,148026,148028,148030,148032,148035],{"class":326,"line":514},[324,148022,148023],{"class":5945},"    yaxis_opts",[324,148025,913],{"class":863},[324,148027,148009],{"class":867},[324,148029,80532],{"class":5945},[324,148031,913],{"class":863},[324,148033,148034],{"class":738},"\"金额\"",[324,148036,38769],{"class":867},[324,148038,148039,148042,148044,148047,148050,148052,148055],{"class":326,"line":2343},[324,148040,148041],{"class":5945},"    tooltip_opts",[324,148043,913],{"class":863},[324,148045,148046],{"class":867},"opts.TooltipOpts(",[324,148048,148049],{"class":5945},"trigger",[324,148051,913],{"class":863},[324,148053,148054],{"class":738},"\"axis\"",[324,148056,38769],{"class":867},[324,148058,148059],{"class":326,"line":2348},[324,148060,874],{"class":867},[324,148062,148063,148065,148067],{"class":326,"line":2354},[324,148064,147836],{"class":867},[324,148066,147839],{"class":738},[324,148068,874],{"class":867},[19,148070,148071],{},"常见全局配置：",[1003,148073,148074,148083],{},[1006,148075,148076],{},[1009,148077,148078,148081],{},[1012,148079,148080],{},"配置",[1012,148082,103417],{},[1049,148084,148085,148095,148105,148115,148125,148135],{},[1009,148086,148087,148092],{},[1054,148088,148089],{},[269,148090,148091],{},"TitleOpts",[1054,148093,148094],{},"标题",[1009,148096,148097,148102],{},[1054,148098,148099],{},[269,148100,148101],{},"LegendOpts",[1054,148103,148104],{},"图例",[1009,148106,148107,148112],{},[1054,148108,148109],{},[269,148110,148111],{},"TooltipOpts",[1054,148113,148114],{},"提示框",[1009,148116,148117,148122],{},[1054,148118,148119],{},[269,148120,148121],{},"AxisOpts",[1054,148123,148124],{},"坐标轴",[1009,148126,148127,148132],{},[1054,148128,148129],{},[269,148130,148131],{},"VisualMapOpts",[1054,148133,148134],{},"视觉映射",[1009,148136,148137,148142],{},[1054,148138,148139],{},[269,148140,148141],{},"DataZoomOpts",[1054,148143,148144],{},"区域缩放",[14,148146,148148],{"id":148147},"_106-系列配置","10.6 系列配置",[19,148150,148151],{},"系列配置作用于某一组数据。",[316,148153,148155],{"className":31100,"code":148154,"language":31102,"meta":50,"style":50},"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",[269,148156,148157,148162,148173,148202,148213,148232],{"__ignoreMap":50},[324,148158,148159],{"class":326,"line":327},[324,148160,148161],{"class":867},"line.add_yaxis(\n",[324,148163,148164,148167,148169,148171],{"class":326,"line":203},[324,148165,148166],{"class":5945},"    series_name",[324,148168,913],{"class":863},[324,148170,147807],{"class":738},[324,148172,32188],{"class":867},[324,148174,148175,148178,148180,148182,148184,148186,148188,148190,148192,148194,148196,148198,148200],{"class":326,"line":338},[324,148176,148177],{"class":5945},"    y_axis",[324,148179,913],{"class":863},[324,148181,1754],{"class":867},[324,148183,1175],{"class":916},[324,148185,13164],{"class":867},[324,148187,1681],{"class":916},[324,148189,13164],{"class":867},[324,148191,1726],{"class":916},[324,148193,13164],{"class":867},[324,148195,147824],{"class":916},[324,148197,13164],{"class":867},[324,148199,147829],{"class":916},[324,148201,88558],{"class":867},[324,148203,148204,148207,148209,148211],{"class":326,"line":344},[324,148205,148206],{"class":5945},"    is_smooth",[324,148208,913],{"class":863},[324,148210,32198],{"class":916},[324,148212,32188],{"class":867},[324,148214,148215,148218,148220,148223,148226,148228,148230],{"class":326,"line":484},[324,148216,148217],{"class":5945},"    label_opts",[324,148219,913],{"class":863},[324,148221,148222],{"class":867},"opts.LabelOpts(",[324,148224,148225],{"class":5945},"is_show",[324,148227,913],{"class":863},[324,148229,32198],{"class":916},[324,148231,38769],{"class":867},[324,148233,148234],{"class":326,"line":491},[324,148235,874],{"class":867},[19,148237,148238],{},"常用参数：",[192,148240,148241,148247,148253,148259,148265],{},[195,148242,148243,148246],{},[269,148244,148245],{},"series_name","：系列名称。",[195,148248,148249,148252],{},[269,148250,148251],{},"y_axis","：y 轴数据。",[195,148254,148255,148258],{},[269,148256,148257],{},"is_smooth","：是否平滑曲线。",[195,148260,148261,148264],{},[269,148262,148263],{},"label_opts","：标签配置。",[195,148266,148267,148270],{},[269,148268,148269],{},"symbol_size","：标记点大小。",[14,148272,148274],{"id":148273},"_107-多条折线","10.7 多条折线",[316,148276,148278],{"className":31100,"code":148277,"language":31102,"meta":50,"style":50},"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",[269,148279,148280,148294,148304,148308,148337,148341,148349,148354,148392,148429,148433,148450,148466,148470],{"__ignoreMap":50},[324,148281,148282,148284,148286,148288,148290,148292],{"class":326,"line":327},[324,148283,31459],{"class":863},[324,148285,147891],{"class":867},[324,148287,31114],{"class":863},[324,148289,147896],{"class":867},[324,148291,32105],{"class":863},[324,148293,147901],{"class":867},[324,148295,148296,148298,148300,148302],{"class":326,"line":203},[324,148297,31459],{"class":863},[324,148299,147750],{"class":867},[324,148301,31114],{"class":863},[324,148303,147755],{"class":867},[324,148305,148306],{"class":326,"line":338},[324,148307,488],{"emptyLinePlaceholder":487},[324,148309,148310,148313,148315,148317,148319,148321,148323,148325,148327,148329,148331,148333,148335],{"class":326,"line":344},[324,148311,148312],{"class":867},"dates ",[324,148314,913],{"class":863},[324,148316,52948],{"class":867},[324,148318,147777],{"class":738},[324,148320,13164],{"class":867},[324,148322,147782],{"class":738},[324,148324,13164],{"class":867},[324,148326,147787],{"class":738},[324,148328,13164],{"class":867},[324,148330,147792],{"class":738},[324,148332,13164],{"class":867},[324,148334,147797],{"class":738},[324,148336,33968],{"class":867},[324,148338,148339],{"class":326,"line":484},[324,148340,488],{"emptyLinePlaceholder":487},[324,148342,148343,148345,148347],{"class":326,"line":491},[324,148344,147764],{"class":867},[324,148346,913],{"class":863},[324,148348,147769],{"class":867},[324,148350,148351],{"class":326,"line":496},[324,148352,148353],{"class":867},"line.add_xaxis(dates)\n",[324,148355,148356,148358,148361,148363,148365,148367,148370,148372,148374,148376,148378,148380,148382,148384,148386,148388,148390],{"class":326,"line":502},[324,148357,147804],{"class":867},[324,148359,148360],{"class":738},"\"线上销售\"",[324,148362,78240],{"class":867},[324,148364,1175],{"class":916},[324,148366,13164],{"class":867},[324,148368,148369],{"class":916},"130",[324,148371,13164],{"class":867},[324,148373,1681],{"class":916},[324,148375,13164],{"class":867},[324,148377,21777],{"class":916},[324,148379,13164],{"class":867},[324,148381,2453],{"class":916},[324,148383,112923],{"class":867},[324,148385,148257],{"class":5945},[324,148387,913],{"class":863},[324,148389,32198],{"class":916},[324,148391,874],{"class":867},[324,148393,148394,148396,148399,148401,148403,148405,148407,148409,148411,148413,148415,148417,148419,148421,148423,148425,148427],{"class":326,"line":508},[324,148395,147804],{"class":867},[324,148397,148398],{"class":738},"\"线下销售\"",[324,148400,78240],{"class":867},[324,148402,1476],{"class":916},[324,148404,13164],{"class":867},[324,148406,1726],{"class":916},[324,148408,13164],{"class":867},[324,148410,1175],{"class":916},[324,148412,13164],{"class":867},[324,148414,1681],{"class":916},[324,148416,13164],{"class":867},[324,148418,147824],{"class":916},[324,148420,112923],{"class":867},[324,148422,148257],{"class":5945},[324,148424,913],{"class":863},[324,148426,32198],{"class":916},[324,148428,874],{"class":867},[324,148430,148431],{"class":326,"line":514},[324,148432,147980],{"class":867},[324,148434,148435,148437,148439,148441,148443,148445,148448],{"class":326,"line":2343},[324,148436,147985],{"class":5945},[324,148438,913],{"class":863},[324,148440,147990],{"class":867},[324,148442,52129],{"class":5945},[324,148444,913],{"class":863},[324,148446,148447],{"class":738},"\"线上线下销售趋势\"",[324,148449,38769],{"class":867},[324,148451,148452,148454,148456,148458,148460,148462,148464],{"class":326,"line":2348},[324,148453,148041],{"class":5945},[324,148455,913],{"class":863},[324,148457,148046],{"class":867},[324,148459,148049],{"class":5945},[324,148461,913],{"class":863},[324,148463,148054],{"class":738},[324,148465,38769],{"class":867},[324,148467,148468],{"class":326,"line":2354},[324,148469,874],{"class":867},[324,148471,148472,148474,148477],{"class":326,"line":2359},[324,148473,147836],{"class":867},[324,148475,148476],{"class":738},"\"sales.html\"",[324,148478,874],{"class":867},[19,148480,148481],{},"多条折线适合比较不同指标或不同地区。",[14,148483,148485],{"id":148484},"_108-从json文件读取数据","10.8 从JSON文件读取数据",[19,148487,148488,148489,272],{},"假设 ",[269,148490,148491],{},"sales.json",[316,148493,148495],{"className":147557,"code":148494,"language":146304,"meta":50,"style":50},"[\n  {\"date\": \"周一\", \"online\": 100, \"offline\": 80},\n  {\"date\": \"周二\", \"online\": 130, \"offline\": 90},\n  {\"date\": \"周三\", \"online\": 120, \"offline\": 100}\n]\n",[269,148496,148497,148502,148534,148562,148590],{"__ignoreMap":50},[324,148498,148499],{"class":326,"line":327},[324,148500,148501],{"class":867},"[\n",[324,148503,148504,148507,148510,148512,148514,148516,148519,148521,148523,148525,148528,148530,148532],{"class":326,"line":203},[324,148505,148506],{"class":867},"  {",[324,148508,148509],{"class":916},"\"date\"",[324,148511,52159],{"class":867},[324,148513,147777],{"class":738},[324,148515,13164],{"class":867},[324,148517,148518],{"class":916},"\"online\"",[324,148520,52159],{"class":867},[324,148522,1175],{"class":916},[324,148524,13164],{"class":867},[324,148526,148527],{"class":916},"\"offline\"",[324,148529,52159],{"class":867},[324,148531,1476],{"class":916},[324,148533,5659],{"class":867},[324,148535,148536,148538,148540,148542,148544,148546,148548,148550,148552,148554,148556,148558,148560],{"class":326,"line":338},[324,148537,148506],{"class":867},[324,148539,148509],{"class":916},[324,148541,52159],{"class":867},[324,148543,147782],{"class":738},[324,148545,13164],{"class":867},[324,148547,148518],{"class":916},[324,148549,52159],{"class":867},[324,148551,148369],{"class":916},[324,148553,13164],{"class":867},[324,148555,148527],{"class":916},[324,148557,52159],{"class":867},[324,148559,1726],{"class":916},[324,148561,5659],{"class":867},[324,148563,148564,148566,148568,148570,148572,148574,148576,148578,148580,148582,148584,148586,148588],{"class":326,"line":344},[324,148565,148506],{"class":867},[324,148567,148509],{"class":916},[324,148569,52159],{"class":867},[324,148571,147787],{"class":738},[324,148573,13164],{"class":867},[324,148575,148518],{"class":916},[324,148577,52159],{"class":867},[324,148579,1681],{"class":916},[324,148581,13164],{"class":867},[324,148583,148527],{"class":916},[324,148585,52159],{"class":867},[324,148587,1175],{"class":916},[324,148589,2296],{"class":867},[324,148591,148592],{"class":326,"line":484},[324,148593,33968],{"class":867},[19,148595,148596],{},"读取并绘图：",[316,148598,148600],{"className":31100,"code":148599,"language":31102,"meta":50,"style":50},"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",[269,148601,148602,148608,148622,148632,148636,148668,148681,148685,148693,148702,148711,148715,148727,148736,148745,148754,148758,148766,148770,148787,148804,148808,148825,148841,148845],{"__ignoreMap":50},[324,148603,148604,148606],{"class":326,"line":327},[324,148605,31114],{"class":863},[324,148607,147603],{"class":867},[324,148609,148610,148612,148614,148616,148618,148620],{"class":326,"line":203},[324,148611,31459],{"class":863},[324,148613,147891],{"class":867},[324,148615,31114],{"class":863},[324,148617,147896],{"class":867},[324,148619,32105],{"class":863},[324,148621,147901],{"class":867},[324,148623,148624,148626,148628,148630],{"class":326,"line":338},[324,148625,31459],{"class":863},[324,148627,147750],{"class":867},[324,148629,31114],{"class":863},[324,148631,147755],{"class":867},[324,148633,148634],{"class":326,"line":344},[324,148635,488],{"emptyLinePlaceholder":487},[324,148637,148638,148640,148642,148644,148647,148649,148651,148653,148655,148657,148659,148661,148663,148666],{"class":326,"line":484},[324,148639,108554],{"class":863},[324,148641,147303],{"class":916},[324,148643,868],{"class":867},[324,148645,148646],{"class":738},"\"sales.json\"",[324,148648,13164],{"class":867},[324,148650,147313],{"class":738},[324,148652,13164],{"class":867},[324,148654,147318],{"class":5945},[324,148656,913],{"class":863},[324,148658,147323],{"class":738},[324,148660,14443],{"class":867},[324,148662,32105],{"class":863},[324,148664,148665],{"class":5945}," file",[324,148667,4468],{"class":867},[324,148669,148670,148672,148674,148677,148679],{"class":326,"line":491},[324,148671,102142],{"class":867},[324,148673,913],{"class":863},[324,148675,148676],{"class":867}," json.load(",[324,148678,46076],{"class":5945},[324,148680,874],{"class":867},[324,148682,148683],{"class":326,"line":496},[324,148684,488],{"emptyLinePlaceholder":487},[324,148686,148687,148689,148691],{"class":326,"line":502},[324,148688,148312],{"class":867},[324,148690,913],{"class":863},[324,148692,52560],{"class":867},[324,148694,148695,148698,148700],{"class":326,"line":508},[324,148696,148697],{"class":867},"online_sales ",[324,148699,913],{"class":863},[324,148701,52560],{"class":867},[324,148703,148704,148707,148709],{"class":326,"line":514},[324,148705,148706],{"class":867},"offline_sales ",[324,148708,913],{"class":863},[324,148710,52560],{"class":867},[324,148712,148713],{"class":326,"line":2343},[324,148714,488],{"emptyLinePlaceholder":487},[324,148716,148717,148719,148722,148724],{"class":326,"line":2348},[324,148718,3754],{"class":863},[324,148720,148721],{"class":867}," item ",[324,148723,26767],{"class":863},[324,148725,148726],{"class":867}," data:\n",[324,148728,148729,148732,148734],{"class":326,"line":2354},[324,148730,148731],{"class":867},"    dates.append(item[",[324,148733,148509],{"class":738},[324,148735,5386],{"class":867},[324,148737,148738,148741,148743],{"class":326,"line":2359},[324,148739,148740],{"class":867},"    online_sales.append(item[",[324,148742,148518],{"class":738},[324,148744,5386],{"class":867},[324,148746,148747,148750,148752],{"class":326,"line":2373},[324,148748,148749],{"class":867},"    offline_sales.append(item[",[324,148751,148527],{"class":738},[324,148753,5386],{"class":867},[324,148755,148756],{"class":326,"line":2378},[324,148757,488],{"emptyLinePlaceholder":487},[324,148759,148760,148762,148764],{"class":326,"line":2384},[324,148761,147764],{"class":867},[324,148763,913],{"class":863},[324,148765,147769],{"class":867},[324,148767,148768],{"class":326,"line":2405},[324,148769,148353],{"class":867},[324,148771,148772,148774,148776,148779,148781,148783,148785],{"class":326,"line":2410},[324,148773,147804],{"class":867},[324,148775,148360],{"class":738},[324,148777,148778],{"class":867},", online_sales, ",[324,148780,148257],{"class":5945},[324,148782,913],{"class":863},[324,148784,32198],{"class":916},[324,148786,874],{"class":867},[324,148788,148789,148791,148793,148796,148798,148800,148802],{"class":326,"line":2424},[324,148790,147804],{"class":867},[324,148792,148398],{"class":738},[324,148794,148795],{"class":867},", offline_sales, ",[324,148797,148257],{"class":5945},[324,148799,913],{"class":863},[324,148801,32198],{"class":916},[324,148803,874],{"class":867},[324,148805,148806],{"class":326,"line":2429},[324,148807,147980],{"class":867},[324,148809,148810,148812,148814,148816,148818,148820,148823],{"class":326,"line":2458},[324,148811,147985],{"class":5945},[324,148813,913],{"class":863},[324,148815,147990],{"class":867},[324,148817,52129],{"class":5945},[324,148819,913],{"class":863},[324,148821,148822],{"class":738},"\"销售趋势\"",[324,148824,38769],{"class":867},[324,148826,148827,148829,148831,148833,148835,148837,148839],{"class":326,"line":2463},[324,148828,148041],{"class":5945},[324,148830,913],{"class":863},[324,148832,148046],{"class":867},[324,148834,148049],{"class":5945},[324,148836,913],{"class":863},[324,148838,148054],{"class":738},[324,148840,38769],{"class":867},[324,148842,148843],{"class":326,"line":2480},[324,148844,874],{"class":867},[324,148846,148847,148849,148851],{"class":326,"line":2485},[324,148848,147836],{"class":867},[324,148850,148476],{"class":738},[324,148852,874],{"class":867},[14,148854,148856],{"id":148855},"_109-数据清洗","10.9 数据清洗",[19,148858,148859],{},"真实数据经常不整齐，需要清洗。",[19,148861,148862],{},"常见问题：",[192,148864,148865,148868,148871,148874],{},[195,148866,148867],{},"数字是字符串。",[195,148869,148870],{},"字段缺失。",[195,148872,148873],{},"空值。",[195,148875,148876],{},"日期格式不统一。",[19,148878,15864],{},[316,148880,148882],{"className":31100,"code":148881,"language":31102,"meta":50,"style":50},"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",[269,148883,148884,148893,148916,148936,148957,148961,148965,148973,148982,148986,148997,149011,149020,149025,149029,149037,149047,149051,149058],{"__ignoreMap":50},[324,148885,148886,148889,148891],{"class":326,"line":327},[324,148887,148888],{"class":867},"raw_data ",[324,148890,913],{"class":863},[324,148892,56169],{"class":867},[324,148894,148895,148898,148900,148902,148904,148906,148909,148911,148914],{"class":326,"line":203},[324,148896,148897],{"class":867},"    {",[324,148899,148509],{"class":738},[324,148901,52159],{"class":867},[324,148903,147777],{"class":738},[324,148905,13164],{"class":867},[324,148907,148908],{"class":738},"\"sales\"",[324,148910,52159],{"class":867},[324,148912,148913],{"class":738},"\"100\"",[324,148915,5659],{"class":867},[324,148917,148918,148920,148922,148924,148926,148928,148930,148932,148934],{"class":326,"line":338},[324,148919,148897],{"class":867},[324,148921,148509],{"class":738},[324,148923,52159],{"class":867},[324,148925,147782],{"class":738},[324,148927,13164],{"class":867},[324,148929,148908],{"class":738},[324,148931,52159],{"class":867},[324,148933,8381],{"class":738},[324,148935,5659],{"class":867},[324,148937,148938,148940,148942,148944,148946,148948,148950,148952,148955],{"class":326,"line":344},[324,148939,148897],{"class":867},[324,148941,148509],{"class":738},[324,148943,52159],{"class":867},[324,148945,147787],{"class":738},[324,148947,13164],{"class":867},[324,148949,148908],{"class":738},[324,148951,52159],{"class":867},[324,148953,148954],{"class":738},"\"120\"",[324,148956,5659],{"class":867},[324,148958,148959],{"class":326,"line":484},[324,148960,33968],{"class":867},[324,148962,148963],{"class":326,"line":491},[324,148964,488],{"emptyLinePlaceholder":487},[324,148966,148967,148969,148971],{"class":326,"line":496},[324,148968,148312],{"class":867},[324,148970,913],{"class":863},[324,148972,52560],{"class":867},[324,148974,148975,148978,148980],{"class":326,"line":502},[324,148976,148977],{"class":867},"sales ",[324,148979,913],{"class":863},[324,148981,52560],{"class":867},[324,148983,148984],{"class":326,"line":508},[324,148985,488],{"emptyLinePlaceholder":487},[324,148987,148988,148990,148992,148994],{"class":326,"line":514},[324,148989,3754],{"class":863},[324,148991,148721],{"class":867},[324,148993,26767],{"class":863},[324,148995,148996],{"class":867}," raw_data:\n",[324,148998,148999,149002,149004,149007,149009],{"class":326,"line":2343},[324,149000,149001],{"class":867},"    value ",[324,149003,913],{"class":863},[324,149005,149006],{"class":867}," item.get(",[324,149008,148908],{"class":738},[324,149010,874],{"class":867},[324,149012,149013,149015,149017],{"class":326,"line":2348},[324,149014,3830],{"class":863},[324,149016,39652],{"class":863},[324,149018,149019],{"class":867}," value:\n",[324,149021,149022],{"class":326,"line":2354},[324,149023,149024],{"class":863},"        continue\n",[324,149026,149027],{"class":326,"line":2359},[324,149028,488],{"emptyLinePlaceholder":487},[324,149030,149031,149033,149035],{"class":326,"line":2373},[324,149032,148731],{"class":867},[324,149034,148509],{"class":738},[324,149036,5386],{"class":867},[324,149038,149039,149042,149044],{"class":326,"line":2378},[324,149040,149041],{"class":867},"    sales.append(",[324,149043,871],{"class":916},[324,149045,149046],{"class":867},"(value))\n",[324,149048,149049],{"class":326,"line":2384},[324,149050,488],{"emptyLinePlaceholder":487},[324,149052,149053,149055],{"class":326,"line":2405},[324,149054,31137],{"class":916},[324,149056,149057],{"class":867},"(dates)\n",[324,149059,149060,149062],{"class":326,"line":2410},[324,149061,31137],{"class":916},[324,149063,149064],{"class":867},"(sales)\n",[14,149066,149068],{"id":149067},"_1010-小案例每日销售额折线图","10.10 小案例：每日销售额折线图",[316,149070,149072],{"className":31100,"code":149071,"language":31102,"meta":50,"style":50},"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",[269,149073,149074,149088,149098,149102,149110,149131,149153,149175,149197,149219,149223,149227,149249,149270,149274,149282,149286,149290,149300,149309,149319,149335,149339,149343,149360,149376,149392,149408,149418,149422],{"__ignoreMap":50},[324,149075,149076,149078,149080,149082,149084,149086],{"class":326,"line":327},[324,149077,31459],{"class":863},[324,149079,147891],{"class":867},[324,149081,31114],{"class":863},[324,149083,147896],{"class":867},[324,149085,32105],{"class":863},[324,149087,147901],{"class":867},[324,149089,149090,149092,149094,149096],{"class":326,"line":203},[324,149091,31459],{"class":863},[324,149093,147750],{"class":867},[324,149095,31114],{"class":863},[324,149097,147755],{"class":867},[324,149099,149100],{"class":326,"line":338},[324,149101,488],{"emptyLinePlaceholder":487},[324,149103,149104,149106,149108],{"class":326,"line":344},[324,149105,148977],{"class":867},[324,149107,913],{"class":863},[324,149109,56169],{"class":867},[324,149111,149112,149114,149116,149118,149121,149123,149125,149127,149129],{"class":326,"line":484},[324,149113,148897],{"class":867},[324,149115,148509],{"class":738},[324,149117,52159],{"class":867},[324,149119,149120],{"class":738},"\"2024-10-01\"",[324,149122,13164],{"class":867},[324,149124,84806],{"class":738},[324,149126,52159],{"class":867},[324,149128,92745],{"class":916},[324,149130,5659],{"class":867},[324,149132,149133,149135,149137,149139,149142,149144,149146,149148,149151],{"class":326,"line":491},[324,149134,148897],{"class":867},[324,149136,148509],{"class":738},[324,149138,52159],{"class":867},[324,149140,149141],{"class":738},"\"2024-10-02\"",[324,149143,13164],{"class":867},[324,149145,84806],{"class":738},[324,149147,52159],{"class":867},[324,149149,149150],{"class":916},"1800",[324,149152,5659],{"class":867},[324,149154,149155,149157,149159,149161,149164,149166,149168,149170,149173],{"class":326,"line":496},[324,149156,148897],{"class":867},[324,149158,148509],{"class":738},[324,149160,52159],{"class":867},[324,149162,149163],{"class":738},"\"2024-10-03\"",[324,149165,13164],{"class":867},[324,149167,84806],{"class":738},[324,149169,52159],{"class":867},[324,149171,149172],{"class":916},"1500",[324,149174,5659],{"class":867},[324,149176,149177,149179,149181,149183,149186,149188,149190,149192,149195],{"class":326,"line":502},[324,149178,148897],{"class":867},[324,149180,148509],{"class":738},[324,149182,52159],{"class":867},[324,149184,149185],{"class":738},"\"2024-10-04\"",[324,149187,13164],{"class":867},[324,149189,84806],{"class":738},[324,149191,52159],{"class":867},[324,149193,149194],{"class":916},"2100",[324,149196,5659],{"class":867},[324,149198,149199,149201,149203,149205,149208,149210,149212,149214,149217],{"class":326,"line":508},[324,149200,148897],{"class":867},[324,149202,148509],{"class":738},[324,149204,52159],{"class":867},[324,149206,149207],{"class":738},"\"2024-10-05\"",[324,149209,13164],{"class":867},[324,149211,84806],{"class":738},[324,149213,52159],{"class":867},[324,149215,149216],{"class":916},"2600",[324,149218,5659],{"class":867},[324,149220,149221],{"class":326,"line":514},[324,149222,33968],{"class":867},[324,149224,149225],{"class":326,"line":2343},[324,149226,488],{"emptyLinePlaceholder":487},[324,149228,149229,149231,149233,149236,149238,149240,149242,149244,149246],{"class":326,"line":2348},[324,149230,148312],{"class":867},[324,149232,913],{"class":863},[324,149234,149235],{"class":867}," [item[",[324,149237,148509],{"class":738},[324,149239,5172],{"class":867},[324,149241,3754],{"class":863},[324,149243,148721],{"class":867},[324,149245,26767],{"class":863},[324,149247,149248],{"class":867}," sales]\n",[324,149250,149251,149254,149256,149258,149260,149262,149264,149266,149268],{"class":326,"line":2354},[324,149252,149253],{"class":867},"amounts ",[324,149255,913],{"class":863},[324,149257,149235],{"class":867},[324,149259,84806],{"class":738},[324,149261,5172],{"class":867},[324,149263,3754],{"class":863},[324,149265,148721],{"class":867},[324,149267,26767],{"class":863},[324,149269,149248],{"class":867},[324,149271,149272],{"class":326,"line":2359},[324,149273,488],{"emptyLinePlaceholder":487},[324,149275,149276,149278,149280],{"class":326,"line":2373},[324,149277,147764],{"class":867},[324,149279,913],{"class":863},[324,149281,147769],{"class":867},[324,149283,149284],{"class":326,"line":2378},[324,149285,148353],{"class":867},[324,149287,149288],{"class":326,"line":2384},[324,149289,148161],{"class":867},[324,149291,149292,149294,149296,149298],{"class":326,"line":2405},[324,149293,148166],{"class":5945},[324,149295,913],{"class":863},[324,149297,147807],{"class":738},[324,149299,32188],{"class":867},[324,149301,149302,149304,149306],{"class":326,"line":2410},[324,149303,148177],{"class":5945},[324,149305,913],{"class":863},[324,149307,149308],{"class":867},"amounts,\n",[324,149310,149311,149313,149315,149317],{"class":326,"line":2424},[324,149312,148206],{"class":5945},[324,149314,913],{"class":863},[324,149316,32198],{"class":916},[324,149318,32188],{"class":867},[324,149320,149321,149323,149325,149327,149329,149331,149333],{"class":326,"line":2429},[324,149322,148217],{"class":5945},[324,149324,913],{"class":863},[324,149326,148222],{"class":867},[324,149328,148225],{"class":5945},[324,149330,913],{"class":863},[324,149332,32198],{"class":916},[324,149334,38769],{"class":867},[324,149336,149337],{"class":326,"line":2458},[324,149338,874],{"class":867},[324,149340,149341],{"class":326,"line":2463},[324,149342,147980],{"class":867},[324,149344,149345,149347,149349,149351,149353,149355,149358],{"class":326,"line":2480},[324,149346,147985],{"class":5945},[324,149348,913],{"class":863},[324,149350,147990],{"class":867},[324,149352,52129],{"class":5945},[324,149354,913],{"class":863},[324,149356,149357],{"class":738},"\"每日销售额\"",[324,149359,38769],{"class":867},[324,149361,149362,149364,149366,149368,149370,149372,149374],{"class":326,"line":2485},[324,149363,148004],{"class":5945},[324,149365,913],{"class":863},[324,149367,148009],{"class":867},[324,149369,80532],{"class":5945},[324,149371,913],{"class":863},[324,149373,148016],{"class":738},[324,149375,38769],{"class":867},[324,149377,149378,149380,149382,149384,149386,149388,149390],{"class":326,"line":2490},[324,149379,148023],{"class":5945},[324,149381,913],{"class":863},[324,149383,148009],{"class":867},[324,149385,80532],{"class":5945},[324,149387,913],{"class":863},[324,149389,148034],{"class":738},[324,149391,38769],{"class":867},[324,149393,149394,149396,149398,149400,149402,149404,149406],{"class":326,"line":2495},[324,149395,148041],{"class":5945},[324,149397,913],{"class":863},[324,149399,148046],{"class":867},[324,149401,148049],{"class":5945},[324,149403,913],{"class":863},[324,149405,148054],{"class":738},[324,149407,38769],{"class":867},[324,149409,149410,149413,149415],{"class":326,"line":2509},[324,149411,149412],{"class":5945},"    datazoom_opts",[324,149414,913],{"class":863},[324,149416,149417],{"class":867},"[opts.DataZoomOpts()],\n",[324,149419,149420],{"class":326,"line":2514},[324,149421,874],{"class":867},[324,149423,149424,149426,149429],{"class":326,"line":3306},[324,149425,147836],{"class":867},[324,149427,149428],{"class":738},"\"daily_sales.html\"",[324,149430,874],{"class":867},[19,149432,149433,149436],{},[269,149434,149435],{},"datazoom_opts"," 可以让图表支持拖拽缩放，数据量大时很有用。",[14,149438,149440],{"id":149439},"_1011-小案例疫情趋势折线图结构","10.11 小案例：疫情趋势折线图结构",[19,149442,149443],{},"如果数据结构如下：",[316,149445,149447],{"className":31100,"code":149446,"language":31102,"meta":50,"style":50},"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",[269,149448,149449,149457,149465,149487,149508,149513,149520,149540,149560,149564],{"__ignoreMap":50},[324,149450,149451,149453,149455],{"class":326,"line":327},[324,149452,102379],{"class":867},[324,149454,913],{"class":863},[324,149456,16301],{"class":867},[324,149458,149459,149462],{"class":326,"line":203},[324,149460,149461],{"class":738},"    \"北京\"",[324,149463,149464],{"class":867},": [\n",[324,149466,149467,149469,149471,149473,149476,149478,149481,149483,149485],{"class":326,"line":338},[324,149468,5646],{"class":867},[324,149470,148509],{"class":738},[324,149472,52159],{"class":867},[324,149474,149475],{"class":738},"\"2024-01-01\"",[324,149477,13164],{"class":867},[324,149479,149480],{"class":738},"\"confirm\"",[324,149482,52159],{"class":867},[324,149484,1310],{"class":916},[324,149486,5659],{"class":867},[324,149488,149489,149491,149493,149495,149498,149500,149502,149504,149506],{"class":326,"line":344},[324,149490,5646],{"class":867},[324,149492,148509],{"class":738},[324,149494,52159],{"class":867},[324,149496,149497],{"class":738},"\"2024-01-02\"",[324,149499,13164],{"class":867},[324,149501,149480],{"class":738},[324,149503,52159],{"class":867},[324,149505,1362],{"class":916},[324,149507,5659],{"class":867},[324,149509,149510],{"class":326,"line":484},[324,149511,149512],{"class":867},"    ],\n",[324,149514,149515,149518],{"class":326,"line":491},[324,149516,149517],{"class":738},"    \"上海\"",[324,149519,149464],{"class":867},[324,149521,149522,149524,149526,149528,149530,149532,149534,149536,149538],{"class":326,"line":496},[324,149523,5646],{"class":867},[324,149525,148509],{"class":738},[324,149527,52159],{"class":867},[324,149529,149475],{"class":738},[324,149531,13164],{"class":867},[324,149533,149480],{"class":738},[324,149535,52159],{"class":867},[324,149537,1259],{"class":916},[324,149539,5659],{"class":867},[324,149541,149542,149544,149546,149548,149550,149552,149554,149556,149558],{"class":326,"line":502},[324,149543,5646],{"class":867},[324,149545,148509],{"class":738},[324,149547,52159],{"class":867},[324,149549,149497],{"class":738},[324,149551,13164],{"class":867},[324,149553,149480],{"class":738},[324,149555,52159],{"class":867},[324,149557,1387],{"class":916},[324,149559,5659],{"class":867},[324,149561,149562],{"class":326,"line":508},[324,149563,149512],{"class":867},[324,149565,149566],{"class":326,"line":514},[324,149567,2296],{"class":867},[19,149569,149570],{},"绘制多地区趋势：",[316,149572,149574],{"className":31100,"code":149573,"language":31102,"meta":50,"style":50},"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",[269,149575,149576,149590,149600,149604,149629,149633,149641,149645,149649,149661,149683,149696,149700,149704,149721,149737,149741],{"__ignoreMap":50},[324,149577,149578,149580,149582,149584,149586,149588],{"class":326,"line":327},[324,149579,31459],{"class":863},[324,149581,147891],{"class":867},[324,149583,31114],{"class":863},[324,149585,147896],{"class":867},[324,149587,32105],{"class":863},[324,149589,147901],{"class":867},[324,149591,149592,149594,149596,149598],{"class":326,"line":203},[324,149593,31459],{"class":863},[324,149595,147750],{"class":867},[324,149597,31114],{"class":863},[324,149599,147755],{"class":867},[324,149601,149602],{"class":326,"line":338},[324,149603,488],{"emptyLinePlaceholder":487},[324,149605,149606,149608,149610,149612,149614,149616,149618,149620,149622,149625,149627],{"class":326,"line":344},[324,149607,148312],{"class":867},[324,149609,913],{"class":863},[324,149611,149235],{"class":867},[324,149613,148509],{"class":738},[324,149615,5172],{"class":867},[324,149617,3754],{"class":863},[324,149619,148721],{"class":867},[324,149621,26767],{"class":863},[324,149623,149624],{"class":867}," data[",[324,149626,69991],{"class":738},[324,149628,78249],{"class":867},[324,149630,149631],{"class":326,"line":484},[324,149632,488],{"emptyLinePlaceholder":487},[324,149634,149635,149637,149639],{"class":326,"line":491},[324,149636,147764],{"class":867},[324,149638,913],{"class":863},[324,149640,147769],{"class":867},[324,149642,149643],{"class":326,"line":496},[324,149644,148353],{"class":867},[324,149646,149647],{"class":326,"line":502},[324,149648,488],{"emptyLinePlaceholder":487},[324,149650,149651,149653,149656,149658],{"class":326,"line":508},[324,149652,3754],{"class":863},[324,149654,149655],{"class":867}," city, records ",[324,149657,26767],{"class":863},[324,149659,149660],{"class":867}," data.items():\n",[324,149662,149663,149666,149668,149670,149672,149674,149676,149678,149680],{"class":326,"line":514},[324,149664,149665],{"class":867},"    values ",[324,149667,913],{"class":863},[324,149669,149235],{"class":867},[324,149671,149480],{"class":738},[324,149673,5172],{"class":867},[324,149675,3754],{"class":863},[324,149677,148721],{"class":867},[324,149679,26767],{"class":863},[324,149681,149682],{"class":867}," records]\n",[324,149684,149685,149688,149690,149692,149694],{"class":326,"line":2343},[324,149686,149687],{"class":867},"    line.add_yaxis(city, values, ",[324,149689,148257],{"class":5945},[324,149691,913],{"class":863},[324,149693,32198],{"class":916},[324,149695,874],{"class":867},[324,149697,149698],{"class":326,"line":2348},[324,149699,488],{"emptyLinePlaceholder":487},[324,149701,149702],{"class":326,"line":2354},[324,149703,147980],{"class":867},[324,149705,149706,149708,149710,149712,149714,149716,149719],{"class":326,"line":2359},[324,149707,147985],{"class":5945},[324,149709,913],{"class":863},[324,149711,147990],{"class":867},[324,149713,52129],{"class":5945},[324,149715,913],{"class":863},[324,149717,149718],{"class":738},"\"多地区趋势图\"",[324,149720,38769],{"class":867},[324,149722,149723,149725,149727,149729,149731,149733,149735],{"class":326,"line":2373},[324,149724,148041],{"class":5945},[324,149726,913],{"class":863},[324,149728,148046],{"class":867},[324,149730,148049],{"class":5945},[324,149732,913],{"class":863},[324,149734,148054],{"class":738},[324,149736,38769],{"class":867},[324,149738,149739],{"class":326,"line":2378},[324,149740,874],{"class":867},[324,149742,149743,149745,149748],{"class":326,"line":2384},[324,149744,147836],{"class":867},[324,149746,149747],{"class":738},"\"trend.html\"",[324,149749,874],{"class":867},[19,149751,149752],{},"这种思路适合一批地区、一批商品或一批指标的趋势对比。",[14,149754,149756],{"id":149755},"_1012-易错点","10.12 易错点",[192,149758,149759,149765,149771,149781,149787],{},[195,149760,149761,149764],{},[269,149762,149763],{},"add_xaxis()"," 的数据数量要和 y 轴数量对应。",[195,149766,149767,149770],{},[269,149768,149769],{},"render()"," 生成的是 HTML，不是图片。",[195,149772,149773,149774,149777,149778,29107],{},"JSON 字符串用 ",[269,149775,149776],{},"json.loads()","，JSON 文件用 ",[269,149779,149780],{},"json.load()",[195,149782,149783,149784,29107],{},"中文 JSON 保存时加 ",[269,149785,149786],{},"ensure_ascii=False",[195,149788,149789],{},"pyecharts 图表不能在纯终端里直接显示，需要浏览器打开 HTML。",[14,149791,149793],{"id":149792},"_1013-本章练习","10.13 本章练习",[192,149795,149796,149799,149802,149805,149808],{},[195,149797,149798],{},"安装 pyecharts 并生成第一个折线图。",[195,149800,149801],{},"用 JSON 文件保存一周销售数据，并读取绘制图表。",[195,149803,149804],{},"绘制两条折线，对比线上和线下销售额。",[195,149806,149807],{},"给折线图添加标题、坐标轴名称、提示框和缩放条。",[195,149809,149810],{},"对含有空值的销售数据进行清洗后再绘图。",[775,149812,149813],{},"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":50,"searchDepth":203,"depth":203,"links":149815},[149816,149817,149818,149819,149820,149821,149822,149823,149824,149825,149826,149827,149828],{"id":147432,"depth":203,"text":147433},{"id":147507,"depth":203,"text":147508},{"id":147686,"depth":203,"text":147687},{"id":147737,"depth":203,"text":147738},{"id":147871,"depth":203,"text":147872},{"id":148147,"depth":203,"text":148148},{"id":148273,"depth":203,"text":148274},{"id":148484,"depth":203,"text":148485},{"id":148855,"depth":203,"text":148856},{"id":149067,"depth":203,"text":149068},{"id":149439,"depth":203,"text":149440},{"id":149755,"depth":203,"text":149756},{"id":149792,"depth":203,"text":149793},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch10-jsonpyecharts",{"title":147424,"description":791},"wiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图","StYaXLIht8VuaOlNFrmS7a-kIxJDRawZKxKfnvgi7JI",{"id":149835,"title":149836,"body":149837,"description":791,"extension":792,"meta":152197,"navigation":487,"path":152198,"seo":152199,"stem":152200,"__hash__":152201},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础.md","11. 面向对象基础",{"type":7,"value":149838,"toc":152174},[149839,149842,149846,149849,149852,149928,149931,150022,150025,150029,150032,150076,150089,150093,150096,150163,150166,150170,150173,150257,150265,150269,150274,150415,150418,150429,150435,150441,150555,150559,150562,150565,150818,150821,150825,150828,150932,150935,150939,151090,151094,151101,151214,151218,151221,151327,151330,151334,151337,151368,151371,151476,151479,151483,151487,151497,151565,151569,151576,151640,151643,151647,151653,151749,151758,151762,152086,152095,152099,152127,152131,152171],[10,149840,149836],{"id":149841},"_11-面向对象基础",[14,149843,149845],{"id":149844},"_111-什么是面向对象","11.1 什么是面向对象",[19,149847,149848],{},"面向对象是一种组织代码的方式。它把数据和操作数据的函数放在一起，形成对象。",[19,149850,149851],{},"面向过程：",[316,149853,149855],{"className":31100,"code":149854,"language":31102,"meta":50,"style":50},"name = \"小明\"\nage = 18\n\ndef introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\nintroduce(name, age)\n",[269,149856,149857,149866,149874,149878,149888,149919,149923],{"__ignoreMap":50},[324,149858,149859,149861,149863],{"class":326,"line":327},[324,149860,147048],{"class":867},[324,149862,913],{"class":863},[324,149864,149865],{"class":738}," \"小明\"\n",[324,149867,149868,149870,149872],{"class":326,"line":203},[324,149869,147058],{"class":867},[324,149871,913],{"class":863},[324,149873,147063],{"class":916},[324,149875,149876],{"class":326,"line":338},[324,149877,488],{"emptyLinePlaceholder":487},[324,149879,149880,149882,149885],{"class":326,"line":344},[324,149881,32669],{"class":863},[324,149883,149884],{"class":734}," introduce",[324,149886,149887],{"class":867},"(name, age):\n",[324,149889,149890,149892,149894,149896,149899,149901,149903,149905,149908,149910,149912,149914,149917],{"class":326,"line":484},[324,149891,32021],{"class":916},[324,149893,868],{"class":867},[324,149895,920],{"class":863},[324,149897,149898],{"class":738},"\"我叫",[324,149900,1760],{"class":916},[324,149902,80532],{"class":867},[324,149904,1810],{"class":916},[324,149906,149907],{"class":738},"，今年",[324,149909,1760],{"class":916},[324,149911,70943],{"class":867},[324,149913,1810],{"class":916},[324,149915,149916],{"class":738},"岁\"",[324,149918,874],{"class":867},[324,149920,149921],{"class":326,"line":491},[324,149922,488],{"emptyLinePlaceholder":487},[324,149924,149925],{"class":326,"line":496},[324,149926,149927],{"class":867},"introduce(name, age)\n",[19,149929,149930],{},"面向对象：",[316,149932,149934],{"className":31100,"code":149933,"language":31102,"meta":50,"style":50},"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",[269,149935,149936,149944,149952,149981,149985,149989,149999,150008,150017],{"__ignoreMap":50},[324,149937,149938,149940,149942],{"class":326,"line":327},[324,149939,15423],{"class":863},[324,149941,8627],{"class":734},[324,149943,4468],{"class":867},[324,149945,149946,149948,149950],{"class":326,"line":203},[324,149947,31523],{"class":863},[324,149949,149884],{"class":734},[324,149951,31529],{"class":867},[324,149953,149954,149956,149958,149960,149962,149965,149967,149969,149971,149973,149975,149977,149979],{"class":326,"line":338},[324,149955,33173],{"class":916},[324,149957,868],{"class":867},[324,149959,920],{"class":863},[324,149961,149898],{"class":738},[324,149963,149964],{"class":916},"{self",[324,149966,81023],{"class":867},[324,149968,1810],{"class":916},[324,149970,149907],{"class":738},[324,149972,149964],{"class":916},[324,149974,81035],{"class":867},[324,149976,1810],{"class":916},[324,149978,149916],{"class":738},[324,149980,874],{"class":867},[324,149982,149983],{"class":326,"line":344},[324,149984,488],{"emptyLinePlaceholder":487},[324,149986,149987],{"class":326,"line":484},[324,149988,488],{"emptyLinePlaceholder":487},[324,149990,149991,149994,149996],{"class":326,"line":491},[324,149992,149993],{"class":867},"student ",[324,149995,913],{"class":863},[324,149997,149998],{"class":867}," Student()\n",[324,150000,150001,150004,150006],{"class":326,"line":496},[324,150002,150003],{"class":867},"student.name ",[324,150005,913],{"class":863},[324,150007,149865],{"class":738},[324,150009,150010,150013,150015],{"class":326,"line":502},[324,150011,150012],{"class":867},"student.age ",[324,150014,913],{"class":863},[324,150016,147063],{"class":916},[324,150018,150019],{"class":326,"line":508},[324,150020,150021],{"class":867},"student.introduce()\n",[19,150023,150024],{},"面向对象更适合数据结构和行为绑定在一起的场景，例如学生、用户、订单、商品、账户。",[14,150026,150028],{"id":150027},"_112-类和对象","11.2 类和对象",[19,150030,150031],{},"类是模板，对象是根据模板创建出来的具体实例。",[316,150033,150035],{"className":31100,"code":150034,"language":31102,"meta":50,"style":50},"class Student:\n    pass\n\n\nstudent1 = Student()\nstudent2 = Student()\n",[269,150036,150037,150045,150050,150054,150058,150067],{"__ignoreMap":50},[324,150038,150039,150041,150043],{"class":326,"line":327},[324,150040,15423],{"class":863},[324,150042,8627],{"class":734},[324,150044,4468],{"class":867},[324,150046,150047],{"class":326,"line":203},[324,150048,150049],{"class":863},"    pass\n",[324,150051,150052],{"class":326,"line":338},[324,150053,488],{"emptyLinePlaceholder":487},[324,150055,150056],{"class":326,"line":344},[324,150057,488],{"emptyLinePlaceholder":487},[324,150059,150060,150063,150065],{"class":326,"line":484},[324,150061,150062],{"class":867},"student1 ",[324,150064,913],{"class":863},[324,150066,149998],{"class":867},[324,150068,150069,150072,150074],{"class":326,"line":491},[324,150070,150071],{"class":867},"student2 ",[324,150073,913],{"class":863},[324,150075,149998],{"class":867},[19,150077,150078,150081,150082,300,150085,150088],{},[269,150079,150080],{},"Student"," 是类，",[269,150083,150084],{},"student1",[269,150086,150087],{},"student2"," 是对象。",[14,150090,150092],{"id":150091},"_113-属性","11.3 属性",[19,150094,150095],{},"属性是对象保存的数据。",[316,150097,150099],{"className":31100,"code":150098,"language":31102,"meta":50,"style":50},"class Student:\n    pass\n\n\nstudent = Student()\nstudent.name = \"小明\"\nstudent.age = 18\n\nprint(student.name)\nprint(student.age)\n",[269,150100,150101,150109,150113,150117,150121,150129,150137,150145,150149,150156],{"__ignoreMap":50},[324,150102,150103,150105,150107],{"class":326,"line":327},[324,150104,15423],{"class":863},[324,150106,8627],{"class":734},[324,150108,4468],{"class":867},[324,150110,150111],{"class":326,"line":203},[324,150112,150049],{"class":863},[324,150114,150115],{"class":326,"line":338},[324,150116,488],{"emptyLinePlaceholder":487},[324,150118,150119],{"class":326,"line":344},[324,150120,488],{"emptyLinePlaceholder":487},[324,150122,150123,150125,150127],{"class":326,"line":484},[324,150124,149993],{"class":867},[324,150126,913],{"class":863},[324,150128,149998],{"class":867},[324,150130,150131,150133,150135],{"class":326,"line":491},[324,150132,150003],{"class":867},[324,150134,913],{"class":863},[324,150136,149865],{"class":738},[324,150138,150139,150141,150143],{"class":326,"line":496},[324,150140,150012],{"class":867},[324,150142,913],{"class":863},[324,150144,147063],{"class":916},[324,150146,150147],{"class":326,"line":502},[324,150148,488],{"emptyLinePlaceholder":487},[324,150150,150151,150153],{"class":326,"line":508},[324,150152,31137],{"class":916},[324,150154,150155],{"class":867},"(student.name)\n",[324,150157,150158,150160],{"class":326,"line":514},[324,150159,31137],{"class":916},[324,150161,150162],{"class":867},"(student.age)\n",[19,150164,150165],{},"这种写法可以用，但实际项目中更推荐使用构造方法初始化属性。",[14,150167,150169],{"id":150168},"_114-方法","11.4 方法",[19,150171,150172],{},"类中的函数叫方法。",[316,150174,150175],{"className":31100,"code":149933,"language":31102,"meta":50,"style":50},[269,150176,150177,150185,150193,150221,150225,150229,150237,150245,150253],{"__ignoreMap":50},[324,150178,150179,150181,150183],{"class":326,"line":327},[324,150180,15423],{"class":863},[324,150182,8627],{"class":734},[324,150184,4468],{"class":867},[324,150186,150187,150189,150191],{"class":326,"line":203},[324,150188,31523],{"class":863},[324,150190,149884],{"class":734},[324,150192,31529],{"class":867},[324,150194,150195,150197,150199,150201,150203,150205,150207,150209,150211,150213,150215,150217,150219],{"class":326,"line":338},[324,150196,33173],{"class":916},[324,150198,868],{"class":867},[324,150200,920],{"class":863},[324,150202,149898],{"class":738},[324,150204,149964],{"class":916},[324,150206,81023],{"class":867},[324,150208,1810],{"class":916},[324,150210,149907],{"class":738},[324,150212,149964],{"class":916},[324,150214,81035],{"class":867},[324,150216,1810],{"class":916},[324,150218,149916],{"class":738},[324,150220,874],{"class":867},[324,150222,150223],{"class":326,"line":344},[324,150224,488],{"emptyLinePlaceholder":487},[324,150226,150227],{"class":326,"line":484},[324,150228,488],{"emptyLinePlaceholder":487},[324,150230,150231,150233,150235],{"class":326,"line":491},[324,150232,149993],{"class":867},[324,150234,913],{"class":863},[324,150236,149998],{"class":867},[324,150238,150239,150241,150243],{"class":326,"line":496},[324,150240,150003],{"class":867},[324,150242,913],{"class":863},[324,150244,149865],{"class":738},[324,150246,150247,150249,150251],{"class":326,"line":502},[324,150248,150012],{"class":867},[324,150250,913],{"class":863},[324,150252,147063],{"class":916},[324,150254,150255],{"class":326,"line":508},[324,150256,150021],{"class":867},[19,150258,150259,150261,150262,150264],{},[269,150260,31545],{}," 表示当前对象。调用方法时不需要手动传入 ",[269,150263,31545],{},"，Python 会自动传。",[14,150266,150268],{"id":150267},"_115-构造方法__init__","11.5 构造方法__init__",[19,150270,150271,150273],{},[269,150272,31551],{}," 在对象创建时自动执行，用于初始化属性。",[316,150275,150277],{"className":31100,"code":150276,"language":31102,"meta":50,"style":50},"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",[269,150278,150279,150287,150296,150308,150320,150331,150335,150343,150381,150385,150389,150411],{"__ignoreMap":50},[324,150280,150281,150283,150285],{"class":326,"line":327},[324,150282,15423],{"class":863},[324,150284,8627],{"class":734},[324,150286,4468],{"class":867},[324,150288,150289,150291,150293],{"class":326,"line":203},[324,150290,31523],{"class":863},[324,150292,31526],{"class":916},[324,150294,150295],{"class":867},"(self, name, age, score):\n",[324,150297,150298,150300,150303,150305],{"class":326,"line":338},[324,150299,31567],{"class":916},[324,150301,150302],{"class":867},".name ",[324,150304,913],{"class":863},[324,150306,150307],{"class":867}," name\n",[324,150309,150310,150312,150315,150317],{"class":326,"line":344},[324,150311,31567],{"class":916},[324,150313,150314],{"class":867},".age ",[324,150316,913],{"class":863},[324,150318,150319],{"class":867}," age\n",[324,150321,150322,150324,150327,150329],{"class":326,"line":484},[324,150323,31567],{"class":916},[324,150325,150326],{"class":867},".score ",[324,150328,913],{"class":863},[324,150330,2310],{"class":867},[324,150332,150333],{"class":326,"line":491},[324,150334,488],{"emptyLinePlaceholder":487},[324,150336,150337,150339,150341],{"class":326,"line":496},[324,150338,31523],{"class":863},[324,150340,149884],{"class":734},[324,150342,31529],{"class":867},[324,150344,150345,150347,150349,150351,150353,150355,150357,150359,150361,150363,150365,150367,150370,150372,150375,150377,150379],{"class":326,"line":502},[324,150346,33173],{"class":916},[324,150348,868],{"class":867},[324,150350,920],{"class":863},[324,150352,149898],{"class":738},[324,150354,149964],{"class":916},[324,150356,81023],{"class":867},[324,150358,1810],{"class":916},[324,150360,149907],{"class":738},[324,150362,149964],{"class":916},[324,150364,81035],{"class":867},[324,150366,1810],{"class":916},[324,150368,150369],{"class":738},"岁，成绩",[324,150371,149964],{"class":916},[324,150373,150374],{"class":867},".score",[324,150376,1810],{"class":916},[324,150378,1115],{"class":738},[324,150380,874],{"class":867},[324,150382,150383],{"class":326,"line":508},[324,150384,488],{"emptyLinePlaceholder":487},[324,150386,150387],{"class":326,"line":514},[324,150388,488],{"emptyLinePlaceholder":487},[324,150390,150391,150393,150395,150398,150401,150403,150405,150407,150409],{"class":326,"line":2343},[324,150392,149993],{"class":867},[324,150394,913],{"class":863},[324,150396,150397],{"class":867}," Student(",[324,150399,150400],{"class":738},"\"小明\"",[324,150402,13164],{"class":867},[324,150404,1514],{"class":916},[324,150406,13164],{"class":867},[324,150408,1853],{"class":916},[324,150410,874],{"class":867},[324,150412,150413],{"class":326,"line":2348},[324,150414,150021],{"class":867},[19,150416,150417],{},"构造方法的好处：",[192,150419,150420,150423,150426],{},[195,150421,150422],{},"创建对象时必须提供必要数据。",[195,150424,150425],{},"属性初始化集中，不容易漏。",[195,150427,150428],{},"对象状态更完整。",[14,150430,150432,150433],{"id":150431},"_116-str","11.6 ",[116,150434,2034],{},[19,150436,150437,150438,29107],{},"直接打印对象时，默认输出不直观。可以定义 ",[269,150439,150440],{},"__str__",[316,150442,150444],{"className":31100,"code":150443,"language":31102,"meta":50,"style":50},"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",[269,150445,150446,150454,150463,150473,150483,150487,150496,150524,150528,150532,150548],{"__ignoreMap":50},[324,150447,150448,150450,150452],{"class":326,"line":327},[324,150449,15423],{"class":863},[324,150451,8627],{"class":734},[324,150453,4468],{"class":867},[324,150455,150456,150458,150460],{"class":326,"line":203},[324,150457,31523],{"class":863},[324,150459,31526],{"class":916},[324,150461,150462],{"class":867},"(self, name, age):\n",[324,150464,150465,150467,150469,150471],{"class":326,"line":338},[324,150466,31567],{"class":916},[324,150468,150302],{"class":867},[324,150470,913],{"class":863},[324,150472,150307],{"class":867},[324,150474,150475,150477,150479,150481],{"class":326,"line":344},[324,150476,31567],{"class":916},[324,150478,150314],{"class":867},[324,150480,913],{"class":863},[324,150482,150319],{"class":867},[324,150484,150485],{"class":326,"line":484},[324,150486,488],{"emptyLinePlaceholder":487},[324,150488,150489,150491,150494],{"class":326,"line":491},[324,150490,31523],{"class":863},[324,150492,150493],{"class":916}," __str__",[324,150495,31529],{"class":867},[324,150497,150498,150500,150503,150506,150508,150510,150512,150515,150517,150519,150521],{"class":326,"line":496},[324,150499,15481],{"class":863},[324,150501,150502],{"class":863}," f",[324,150504,150505],{"class":738},"\"Student(name=",[324,150507,149964],{"class":916},[324,150509,81023],{"class":867},[324,150511,1810],{"class":916},[324,150513,150514],{"class":738},", age=",[324,150516,149964],{"class":916},[324,150518,81035],{"class":867},[324,150520,1810],{"class":916},[324,150522,150523],{"class":738},")\"\n",[324,150525,150526],{"class":326,"line":502},[324,150527,488],{"emptyLinePlaceholder":487},[324,150529,150530],{"class":326,"line":508},[324,150531,488],{"emptyLinePlaceholder":487},[324,150533,150534,150536,150538,150540,150542,150544,150546],{"class":326,"line":514},[324,150535,149993],{"class":867},[324,150537,913],{"class":863},[324,150539,150397],{"class":867},[324,150541,150400],{"class":738},[324,150543,13164],{"class":867},[324,150545,1514],{"class":916},[324,150547,874],{"class":867},[324,150549,150550,150552],{"class":326,"line":2343},[324,150551,31137],{"class":916},[324,150553,150554],{"class":867},"(student)\n",[14,150556,150558],{"id":150557},"_117-封装","11.7 封装",[19,150560,150561],{},"封装就是把数据和方法放到类中，并控制访问方式。",[19,150563,150564],{},"Python 中以双下划线开头的属性通常视为私有属性。",[316,150566,150568],{"className":31100,"code":150567,"language":31102,"meta":50,"style":50},"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",[269,150569,150570,150579,150588,150600,150612,150616,150625,150634,150638,150648,150661,150672,150677,150688,150692,150701,150713,150724,150728,150741,150752,150756,150767,150771,150775,150793,150802,150811],{"__ignoreMap":50},[324,150571,150572,150574,150577],{"class":326,"line":327},[324,150573,15423],{"class":863},[324,150575,150576],{"class":734}," Account",[324,150578,4468],{"class":867},[324,150580,150581,150583,150585],{"class":326,"line":203},[324,150582,31523],{"class":863},[324,150584,31526],{"class":916},[324,150586,150587],{"class":867},"(self, owner, balance):\n",[324,150589,150590,150592,150595,150597],{"class":326,"line":338},[324,150591,31567],{"class":916},[324,150593,150594],{"class":867},".owner ",[324,150596,913],{"class":863},[324,150598,150599],{"class":867}," owner\n",[324,150601,150602,150604,150607,150609],{"class":326,"line":344},[324,150603,31567],{"class":916},[324,150605,150606],{"class":867},".__balance ",[324,150608,913],{"class":863},[324,150610,150611],{"class":867}," balance\n",[324,150613,150614],{"class":326,"line":484},[324,150615,488],{"emptyLinePlaceholder":487},[324,150617,150618,150620,150623],{"class":326,"line":491},[324,150619,31523],{"class":863},[324,150621,150622],{"class":734}," get_balance",[324,150624,31529],{"class":867},[324,150626,150627,150629,150631],{"class":326,"line":496},[324,150628,15481],{"class":863},[324,150630,39595],{"class":916},[324,150632,150633],{"class":867},".__balance\n",[324,150635,150636],{"class":326,"line":502},[324,150637,488],{"emptyLinePlaceholder":487},[324,150639,150640,150642,150645],{"class":326,"line":508},[324,150641,31523],{"class":863},[324,150643,150644],{"class":734}," deposit",[324,150646,150647],{"class":867},"(self, money):\n",[324,150649,150650,150652,150655,150657,150659],{"class":326,"line":514},[324,150651,3226],{"class":863},[324,150653,150654],{"class":867}," money ",[324,150656,2319],{"class":863},[324,150658,4822],{"class":916},[324,150660,4468],{"class":867},[324,150662,150663,150665,150667,150670],{"class":326,"line":2343},[324,150664,35372],{"class":916},[324,150666,868],{"class":867},[324,150668,150669],{"class":738},"\"存款金额必须大于0\"",[324,150671,874],{"class":867},[324,150673,150674],{"class":326,"line":2348},[324,150675,150676],{"class":863},"            return\n",[324,150678,150679,150681,150683,150685],{"class":326,"line":2354},[324,150680,31567],{"class":916},[324,150682,150606],{"class":867},[324,150684,10206],{"class":863},[324,150686,150687],{"class":867}," money\n",[324,150689,150690],{"class":326,"line":2359},[324,150691,488],{"emptyLinePlaceholder":487},[324,150693,150694,150696,150699],{"class":326,"line":2373},[324,150695,31523],{"class":863},[324,150697,150698],{"class":734}," withdraw",[324,150700,150647],{"class":867},[324,150702,150703,150705,150707,150709,150711],{"class":326,"line":2378},[324,150704,3226],{"class":863},[324,150706,150654],{"class":867},[324,150708,2319],{"class":863},[324,150710,4822],{"class":916},[324,150712,4468],{"class":867},[324,150714,150715,150717,150719,150722],{"class":326,"line":2384},[324,150716,35372],{"class":916},[324,150718,868],{"class":867},[324,150720,150721],{"class":738},"\"取款金额必须大于0\"",[324,150723,874],{"class":867},[324,150725,150726],{"class":326,"line":2405},[324,150727,150676],{"class":863},[324,150729,150730,150732,150734,150736,150738],{"class":326,"line":2410},[324,150731,3226],{"class":863},[324,150733,150654],{"class":867},[324,150735,1824],{"class":863},[324,150737,39595],{"class":916},[324,150739,150740],{"class":867},".__balance:\n",[324,150742,150743,150745,150747,150750],{"class":326,"line":2424},[324,150744,35372],{"class":916},[324,150746,868],{"class":867},[324,150748,150749],{"class":738},"\"余额不足\"",[324,150751,874],{"class":867},[324,150753,150754],{"class":326,"line":2429},[324,150755,150676],{"class":863},[324,150757,150758,150760,150762,150765],{"class":326,"line":2458},[324,150759,31567],{"class":916},[324,150761,150606],{"class":867},[324,150763,150764],{"class":863},"-=",[324,150766,150687],{"class":867},[324,150768,150769],{"class":326,"line":2463},[324,150770,488],{"emptyLinePlaceholder":487},[324,150772,150773],{"class":326,"line":2480},[324,150774,488],{"emptyLinePlaceholder":487},[324,150776,150777,150780,150782,150785,150787,150789,150791],{"class":326,"line":2485},[324,150778,150779],{"class":867},"account ",[324,150781,913],{"class":863},[324,150783,150784],{"class":867}," Account(",[324,150786,150400],{"class":738},[324,150788,13164],{"class":867},[324,150790,7139],{"class":916},[324,150792,874],{"class":867},[324,150794,150795,150798,150800],{"class":326,"line":2490},[324,150796,150797],{"class":867},"account.deposit(",[324,150799,2453],{"class":916},[324,150801,874],{"class":867},[324,150803,150804,150807,150809],{"class":326,"line":2495},[324,150805,150806],{"class":867},"account.withdraw(",[324,150808,1175],{"class":916},[324,150810,874],{"class":867},[324,150812,150813,150815],{"class":326,"line":2509},[324,150814,31137],{"class":916},[324,150816,150817],{"class":867},"(account.get_balance())\n",[19,150819,150820],{},"封装的意义是避免外部随意修改内部状态。",[14,150822,150824],{"id":150823},"_118-继承","11.8 继承",[19,150826,150827],{},"继承可以让子类复用父类的属性和方法。",[316,150829,150831],{"className":31100,"code":150830,"language":31102,"meta":50,"style":50},"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",[269,150832,150833,150842,150851,150862,150866,150870,150884,150893,150904,150908,150912,150922,150927],{"__ignoreMap":50},[324,150834,150835,150837,150840],{"class":326,"line":327},[324,150836,15423],{"class":863},[324,150838,150839],{"class":734}," Animal",[324,150841,4468],{"class":867},[324,150843,150844,150846,150849],{"class":326,"line":203},[324,150845,31523],{"class":863},[324,150847,150848],{"class":734}," eat",[324,150850,31529],{"class":867},[324,150852,150853,150855,150857,150860],{"class":326,"line":338},[324,150854,33173],{"class":916},[324,150856,868],{"class":867},[324,150858,150859],{"class":738},"\"吃东西\"",[324,150861,874],{"class":867},[324,150863,150864],{"class":326,"line":344},[324,150865,488],{"emptyLinePlaceholder":487},[324,150867,150868],{"class":326,"line":484},[324,150869,488],{"emptyLinePlaceholder":487},[324,150871,150872,150874,150877,150879,150882],{"class":326,"line":491},[324,150873,15423],{"class":863},[324,150875,150876],{"class":734}," Dog",[324,150878,868],{"class":867},[324,150880,150881],{"class":734},"Animal",[324,150883,31508],{"class":867},[324,150885,150886,150888,150891],{"class":326,"line":496},[324,150887,31523],{"class":863},[324,150889,150890],{"class":734}," bark",[324,150892,31529],{"class":867},[324,150894,150895,150897,150899,150902],{"class":326,"line":502},[324,150896,33173],{"class":916},[324,150898,868],{"class":867},[324,150900,150901],{"class":738},"\"汪汪\"",[324,150903,874],{"class":867},[324,150905,150906],{"class":326,"line":508},[324,150907,488],{"emptyLinePlaceholder":487},[324,150909,150910],{"class":326,"line":514},[324,150911,488],{"emptyLinePlaceholder":487},[324,150913,150914,150917,150919],{"class":326,"line":2343},[324,150915,150916],{"class":867},"dog ",[324,150918,913],{"class":863},[324,150920,150921],{"class":867}," Dog()\n",[324,150923,150924],{"class":326,"line":2348},[324,150925,150926],{"class":867},"dog.eat()\n",[324,150928,150929],{"class":326,"line":2354},[324,150930,150931],{"class":867},"dog.bark()\n",[19,150933,150934],{},"子类可以扩展新方法，也可以重写父类方法。",[14,150936,150938],{"id":150937},"_119-方法重写","11.9 方法重写",[316,150940,150942],{"className":31100,"code":150941,"language":31102,"meta":50,"style":50},"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",[269,150943,150944,150952,150961,150972,150976,150980,150992,151000,151010,151014,151018,151031,151039,151050,151054,151058,151066,151076,151080,151085],{"__ignoreMap":50},[324,150945,150946,150948,150950],{"class":326,"line":327},[324,150947,15423],{"class":863},[324,150949,150839],{"class":734},[324,150951,4468],{"class":867},[324,150953,150954,150956,150959],{"class":326,"line":203},[324,150955,31523],{"class":863},[324,150957,150958],{"class":734}," speak",[324,150960,31529],{"class":867},[324,150962,150963,150965,150967,150970],{"class":326,"line":338},[324,150964,33173],{"class":916},[324,150966,868],{"class":867},[324,150968,150969],{"class":738},"\"动物叫\"",[324,150971,874],{"class":867},[324,150973,150974],{"class":326,"line":344},[324,150975,488],{"emptyLinePlaceholder":487},[324,150977,150978],{"class":326,"line":484},[324,150979,488],{"emptyLinePlaceholder":487},[324,150981,150982,150984,150986,150988,150990],{"class":326,"line":491},[324,150983,15423],{"class":863},[324,150985,150876],{"class":734},[324,150987,868],{"class":867},[324,150989,150881],{"class":734},[324,150991,31508],{"class":867},[324,150993,150994,150996,150998],{"class":326,"line":496},[324,150995,31523],{"class":863},[324,150997,150958],{"class":734},[324,150999,31529],{"class":867},[324,151001,151002,151004,151006,151008],{"class":326,"line":502},[324,151003,33173],{"class":916},[324,151005,868],{"class":867},[324,151007,150901],{"class":738},[324,151009,874],{"class":867},[324,151011,151012],{"class":326,"line":508},[324,151013,488],{"emptyLinePlaceholder":487},[324,151015,151016],{"class":326,"line":514},[324,151017,488],{"emptyLinePlaceholder":487},[324,151019,151020,151022,151025,151027,151029],{"class":326,"line":2343},[324,151021,15423],{"class":863},[324,151023,151024],{"class":734}," Cat",[324,151026,868],{"class":867},[324,151028,150881],{"class":734},[324,151030,31508],{"class":867},[324,151032,151033,151035,151037],{"class":326,"line":2348},[324,151034,31523],{"class":863},[324,151036,150958],{"class":734},[324,151038,31529],{"class":867},[324,151040,151041,151043,151045,151048],{"class":326,"line":2354},[324,151042,33173],{"class":916},[324,151044,868],{"class":867},[324,151046,151047],{"class":738},"\"喵喵\"",[324,151049,874],{"class":867},[324,151051,151052],{"class":326,"line":2359},[324,151053,488],{"emptyLinePlaceholder":487},[324,151055,151056],{"class":326,"line":2373},[324,151057,488],{"emptyLinePlaceholder":487},[324,151059,151060,151062,151064],{"class":326,"line":2378},[324,151061,150916],{"class":867},[324,151063,913],{"class":863},[324,151065,150921],{"class":867},[324,151067,151068,151071,151073],{"class":326,"line":2384},[324,151069,151070],{"class":867},"cat ",[324,151072,913],{"class":863},[324,151074,151075],{"class":867}," Cat()\n",[324,151077,151078],{"class":326,"line":2405},[324,151079,488],{"emptyLinePlaceholder":487},[324,151081,151082],{"class":326,"line":2410},[324,151083,151084],{"class":867},"dog.speak()\n",[324,151086,151087],{"class":326,"line":2424},[324,151088,151089],{"class":867},"cat.speak()\n",[14,151091,151093],{"id":151092},"_1110-super","11.10 super",[19,151095,151096,151097,151100],{},"子类可以通过 ",[269,151098,151099],{},"super()"," 调用父类方法。",[316,151102,151104],{"className":31100,"code":151103,"language":31102,"meta":50,"style":50},"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",[269,151105,151106,151114,151123,151133,151137,151141,151153,151162,151173,151183,151187,151191,151207],{"__ignoreMap":50},[324,151107,151108,151110,151112],{"class":326,"line":327},[324,151109,15423],{"class":863},[324,151111,16298],{"class":734},[324,151113,4468],{"class":867},[324,151115,151116,151118,151120],{"class":326,"line":203},[324,151117,31523],{"class":863},[324,151119,31526],{"class":916},[324,151121,151122],{"class":867},"(self, name):\n",[324,151124,151125,151127,151129,151131],{"class":326,"line":338},[324,151126,31567],{"class":916},[324,151128,150302],{"class":867},[324,151130,913],{"class":863},[324,151132,150307],{"class":867},[324,151134,151135],{"class":326,"line":344},[324,151136,488],{"emptyLinePlaceholder":487},[324,151138,151139],{"class":326,"line":484},[324,151140,488],{"emptyLinePlaceholder":487},[324,151142,151143,151145,151147,151149,151151],{"class":326,"line":491},[324,151144,15423],{"class":863},[324,151146,8627],{"class":734},[324,151148,868],{"class":867},[324,151150,19775],{"class":734},[324,151152,31508],{"class":867},[324,151154,151155,151157,151159],{"class":326,"line":496},[324,151156,31523],{"class":863},[324,151158,31526],{"class":916},[324,151160,151161],{"class":867},"(self, name, score):\n",[324,151163,151164,151166,151168,151170],{"class":326,"line":502},[324,151165,31539],{"class":916},[324,151167,17990],{"class":867},[324,151169,31551],{"class":916},[324,151171,151172],{"class":867},"(name)\n",[324,151174,151175,151177,151179,151181],{"class":326,"line":508},[324,151176,31567],{"class":916},[324,151178,150326],{"class":867},[324,151180,913],{"class":863},[324,151182,2310],{"class":867},[324,151184,151185],{"class":326,"line":514},[324,151186,488],{"emptyLinePlaceholder":487},[324,151188,151189],{"class":326,"line":2343},[324,151190,488],{"emptyLinePlaceholder":487},[324,151192,151193,151195,151197,151199,151201,151203,151205],{"class":326,"line":2348},[324,151194,149993],{"class":867},[324,151196,913],{"class":863},[324,151198,150397],{"class":867},[324,151200,150400],{"class":738},[324,151202,13164],{"class":867},[324,151204,1853],{"class":916},[324,151206,874],{"class":867},[324,151208,151209,151211],{"class":326,"line":2354},[324,151210,31137],{"class":916},[324,151212,151213],{"class":867},"(student.name, student.score)\n",[14,151215,151217],{"id":151216},"_1111-多态","11.11 多态",[19,151219,151220],{},"多态指不同对象响应同一个方法，表现出不同结果。",[316,151222,151224],{"className":31100,"code":151223,"language":31102,"meta":50,"style":50},"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",[269,151225,151226,151234,151242,151252,151256,151260,151268,151276,151286,151290,151294,151304,151309,151313,151317,151322],{"__ignoreMap":50},[324,151227,151228,151230,151232],{"class":326,"line":327},[324,151229,15423],{"class":863},[324,151231,150876],{"class":734},[324,151233,4468],{"class":867},[324,151235,151236,151238,151240],{"class":326,"line":203},[324,151237,31523],{"class":863},[324,151239,150958],{"class":734},[324,151241,31529],{"class":867},[324,151243,151244,151246,151248,151250],{"class":326,"line":338},[324,151245,33173],{"class":916},[324,151247,868],{"class":867},[324,151249,150901],{"class":738},[324,151251,874],{"class":867},[324,151253,151254],{"class":326,"line":344},[324,151255,488],{"emptyLinePlaceholder":487},[324,151257,151258],{"class":326,"line":484},[324,151259,488],{"emptyLinePlaceholder":487},[324,151261,151262,151264,151266],{"class":326,"line":491},[324,151263,15423],{"class":863},[324,151265,151024],{"class":734},[324,151267,4468],{"class":867},[324,151269,151270,151272,151274],{"class":326,"line":496},[324,151271,31523],{"class":863},[324,151273,150958],{"class":734},[324,151275,31529],{"class":867},[324,151277,151278,151280,151282,151284],{"class":326,"line":502},[324,151279,33173],{"class":916},[324,151281,868],{"class":867},[324,151283,151047],{"class":738},[324,151285,874],{"class":867},[324,151287,151288],{"class":326,"line":508},[324,151289,488],{"emptyLinePlaceholder":487},[324,151291,151292],{"class":326,"line":514},[324,151293,488],{"emptyLinePlaceholder":487},[324,151295,151296,151298,151301],{"class":326,"line":2343},[324,151297,32669],{"class":863},[324,151299,151300],{"class":734}," make_sound",[324,151302,151303],{"class":867},"(animal):\n",[324,151305,151306],{"class":326,"line":2348},[324,151307,151308],{"class":867},"    animal.speak()\n",[324,151310,151311],{"class":326,"line":2354},[324,151312,488],{"emptyLinePlaceholder":487},[324,151314,151315],{"class":326,"line":2359},[324,151316,488],{"emptyLinePlaceholder":487},[324,151318,151319],{"class":326,"line":2373},[324,151320,151321],{"class":867},"make_sound(Dog())\n",[324,151323,151324],{"class":326,"line":2378},[324,151325,151326],{"class":867},"make_sound(Cat())\n",[19,151328,151329],{},"Python 更关注对象是否有需要的方法，而不是对象具体是什么类。",[14,151331,151333],{"id":151332},"_1112-类属性和实例属性","11.12 类属性和实例属性",[19,151335,151336],{},"实例属性属于对象：",[316,151338,151340],{"className":31100,"code":151339,"language":31102,"meta":50,"style":50},"class Student:\n    def __init__(self, name):\n        self.name = name\n",[269,151341,151342,151350,151358],{"__ignoreMap":50},[324,151343,151344,151346,151348],{"class":326,"line":327},[324,151345,15423],{"class":863},[324,151347,8627],{"class":734},[324,151349,4468],{"class":867},[324,151351,151352,151354,151356],{"class":326,"line":203},[324,151353,31523],{"class":863},[324,151355,31526],{"class":916},[324,151357,151122],{"class":867},[324,151359,151360,151362,151364,151366],{"class":326,"line":338},[324,151361,31567],{"class":916},[324,151363,150302],{"class":867},[324,151365,913],{"class":863},[324,151367,150307],{"class":867},[19,151369,151370],{},"类属性属于类，所有对象共享：",[316,151372,151374],{"className":31100,"code":151373,"language":31102,"meta":50,"style":50},"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",[269,151375,151376,151384,151394,151398,151406,151416,151420,151424,151437,151451,151455,151462,151469],{"__ignoreMap":50},[324,151377,151378,151380,151382],{"class":326,"line":327},[324,151379,15423],{"class":863},[324,151381,8627],{"class":734},[324,151383,4468],{"class":867},[324,151385,151386,151389,151391],{"class":326,"line":203},[324,151387,151388],{"class":867},"    school ",[324,151390,913],{"class":863},[324,151392,151393],{"class":738}," \"黑马学校\"\n",[324,151395,151396],{"class":326,"line":338},[324,151397,488],{"emptyLinePlaceholder":487},[324,151399,151400,151402,151404],{"class":326,"line":344},[324,151401,31523],{"class":863},[324,151403,31526],{"class":916},[324,151405,151122],{"class":867},[324,151407,151408,151410,151412,151414],{"class":326,"line":484},[324,151409,31567],{"class":916},[324,151411,150302],{"class":867},[324,151413,913],{"class":863},[324,151415,150307],{"class":867},[324,151417,151418],{"class":326,"line":491},[324,151419,488],{"emptyLinePlaceholder":487},[324,151421,151422],{"class":326,"line":496},[324,151423,488],{"emptyLinePlaceholder":487},[324,151425,151426,151429,151431,151433,151435],{"class":326,"line":502},[324,151427,151428],{"class":867},"s1 ",[324,151430,913],{"class":863},[324,151432,150397],{"class":867},[324,151434,150400],{"class":738},[324,151436,874],{"class":867},[324,151438,151439,151442,151444,151446,151449],{"class":326,"line":508},[324,151440,151441],{"class":867},"s2 ",[324,151443,913],{"class":863},[324,151445,150397],{"class":867},[324,151447,151448],{"class":738},"\"小红\"",[324,151450,874],{"class":867},[324,151452,151453],{"class":326,"line":514},[324,151454,488],{"emptyLinePlaceholder":487},[324,151456,151457,151459],{"class":326,"line":2343},[324,151458,31137],{"class":916},[324,151460,151461],{"class":867},"(s1.school)\n",[324,151463,151464,151466],{"class":326,"line":2348},[324,151465,31137],{"class":916},[324,151467,151468],{"class":867},"(s2.school)\n",[324,151470,151471,151473],{"class":326,"line":2354},[324,151472,31137],{"class":916},[324,151474,151475],{"class":867},"(Student.school)\n",[19,151477,151478],{},"如果每个对象都不同，用实例属性。如果所有对象共享，用类属性。",[14,151480,151482],{"id":151481},"_1113-类方法和静态方法","11.13 类方法和静态方法",[35,151484,151486],{"id":151485},"_11131-类方法","11.13.1 类方法",[19,151488,151489,151490,151493,151494,29107],{},"类方法使用 ",[269,151491,151492],{},"@classmethod","，第一个参数通常是 ",[269,151495,151496],{},"cls",[316,151498,151500],{"className":31100,"code":151499,"language":31102,"meta":50,"style":50},"class Student:\n    school = \"黑马学校\"\n\n    @classmethod\n    def get_school(cls):\n        return cls.school\n\n\nprint(Student.get_school())\n",[269,151501,151502,151510,151518,151522,151530,151540,151550,151554,151558],{"__ignoreMap":50},[324,151503,151504,151506,151508],{"class":326,"line":327},[324,151505,15423],{"class":863},[324,151507,8627],{"class":734},[324,151509,4468],{"class":867},[324,151511,151512,151514,151516],{"class":326,"line":203},[324,151513,151388],{"class":867},[324,151515,913],{"class":863},[324,151517,151393],{"class":738},[324,151519,151520],{"class":326,"line":338},[324,151521,488],{"emptyLinePlaceholder":487},[324,151523,151524,151527],{"class":326,"line":344},[324,151525,151526],{"class":734},"    @",[324,151528,151529],{"class":916},"classmethod\n",[324,151531,151532,151534,151537],{"class":326,"line":484},[324,151533,31523],{"class":863},[324,151535,151536],{"class":734}," get_school",[324,151538,151539],{"class":867},"(cls):\n",[324,151541,151542,151544,151547],{"class":326,"line":491},[324,151543,15481],{"class":863},[324,151545,151546],{"class":916}," cls",[324,151548,151549],{"class":867},".school\n",[324,151551,151552],{"class":326,"line":496},[324,151553,488],{"emptyLinePlaceholder":487},[324,151555,151556],{"class":326,"line":502},[324,151557,488],{"emptyLinePlaceholder":487},[324,151559,151560,151562],{"class":326,"line":508},[324,151561,31137],{"class":916},[324,151563,151564],{"class":867},"(Student.get_school())\n",[35,151566,151568],{"id":151567},"_11132-静态方法","11.13.2 静态方法",[19,151570,151571,151572,151575],{},"静态方法使用 ",[269,151573,151574],{},"@staticmethod","，不需要访问实例和类。",[316,151577,151579],{"className":31100,"code":151578,"language":31102,"meta":50,"style":50},"class MathUtils:\n    @staticmethod\n    def add(a, b):\n        return a + b\n\n\nprint(MathUtils.add(1, 2))\n",[269,151580,151581,151590,151597,151606,151617,151621,151625],{"__ignoreMap":50},[324,151582,151583,151585,151588],{"class":326,"line":327},[324,151584,15423],{"class":863},[324,151586,151587],{"class":734}," MathUtils",[324,151589,4468],{"class":867},[324,151591,151592,151594],{"class":326,"line":203},[324,151593,151526],{"class":734},[324,151595,151596],{"class":916},"staticmethod\n",[324,151598,151599,151601,151603],{"class":326,"line":338},[324,151600,31523],{"class":863},[324,151602,5938],{"class":734},[324,151604,151605],{"class":867},"(a, b):\n",[324,151607,151608,151610,151612,151614],{"class":326,"line":344},[324,151609,15481],{"class":863},[324,151611,11598],{"class":867},[324,151613,1345],{"class":863},[324,151615,151616],{"class":867}," b\n",[324,151618,151619],{"class":326,"line":484},[324,151620,488],{"emptyLinePlaceholder":487},[324,151622,151623],{"class":326,"line":491},[324,151624,488],{"emptyLinePlaceholder":487},[324,151626,151627,151629,151632,151634,151636,151638],{"class":326,"line":496},[324,151628,31137],{"class":916},[324,151630,151631],{"class":867},"(MathUtils.add(",[324,151633,1082],{"class":916},[324,151635,13164],{"class":867},[324,151637,944],{"class":916},[324,151639,31219],{"class":867},[19,151641,151642],{},"静态方法本质上是放在类命名空间里的普通函数。",[14,151644,151646],{"id":151645},"_1114-dataclass","11.14 dataclass",[19,151648,151649,151652],{},[269,151650,151651],{},"dataclass"," 可以快速定义主要用于保存数据的类。",[316,151654,151656],{"className":31100,"code":151655,"language":31102,"meta":50,"style":50},"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",[269,151657,151658,151670,151674,151678,151683,151691,151699,151707,151715,151719,151723,151743],{"__ignoreMap":50},[324,151659,151660,151662,151665,151667],{"class":326,"line":327},[324,151661,31459],{"class":863},[324,151663,151664],{"class":867}," dataclasses ",[324,151666,31114],{"class":863},[324,151668,151669],{"class":867}," dataclass\n",[324,151671,151672],{"class":326,"line":203},[324,151673,488],{"emptyLinePlaceholder":487},[324,151675,151676],{"class":326,"line":338},[324,151677,488],{"emptyLinePlaceholder":487},[324,151679,151680],{"class":326,"line":344},[324,151681,151682],{"class":734},"@dataclass\n",[324,151684,151685,151687,151689],{"class":326,"line":484},[324,151686,15423],{"class":863},[324,151688,8627],{"class":734},[324,151690,4468],{"class":867},[324,151692,151693,151696],{"class":326,"line":491},[324,151694,151695],{"class":867},"    name: ",[324,151697,151698],{"class":916},"str\n",[324,151700,151701,151704],{"class":326,"line":496},[324,151702,151703],{"class":867},"    age: ",[324,151705,151706],{"class":916},"int\n",[324,151708,151709,151712],{"class":326,"line":502},[324,151710,151711],{"class":867},"    score: ",[324,151713,151714],{"class":916},"float\n",[324,151716,151717],{"class":326,"line":508},[324,151718,488],{"emptyLinePlaceholder":487},[324,151720,151721],{"class":326,"line":514},[324,151722,488],{"emptyLinePlaceholder":487},[324,151724,151725,151727,151729,151731,151733,151735,151737,151739,151741],{"class":326,"line":2343},[324,151726,149993],{"class":867},[324,151728,913],{"class":863},[324,151730,150397],{"class":867},[324,151732,150400],{"class":738},[324,151734,13164],{"class":867},[324,151736,1514],{"class":916},[324,151738,13164],{"class":867},[324,151740,1853],{"class":916},[324,151742,874],{"class":867},[324,151744,151745,151747],{"class":326,"line":2348},[324,151746,31137],{"class":916},[324,151748,150554],{"class":867},[19,151750,151751,151752,1077,151754,151757],{},"它会自动生成 ",[269,151753,31551],{},[269,151755,151756],{},"__repr__"," 等方法。适合数据模型类。",[14,151759,151761],{"id":151760},"_1115-小案例学生类","11.15 小案例：学生类",[316,151763,151765],{"className":31100,"code":151764,"language":31102,"meta":50,"style":50},"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",[269,151766,151767,151775,151784,151796,151806,151816,151826,151830,151839,151852,151856,151865,151871,151883,151895,151907,151919,151923,151927,151933,151943,151952,151962,151970,151978,151987,151991,151995,152003,152039,152043,152047,152072,152079],{"__ignoreMap":50},[324,151768,151769,151771,151773],{"class":326,"line":327},[324,151770,15423],{"class":863},[324,151772,8627],{"class":734},[324,151774,4468],{"class":867},[324,151776,151777,151779,151781],{"class":326,"line":203},[324,151778,31523],{"class":863},[324,151780,31526],{"class":916},[324,151782,151783],{"class":867},"(self, student_id, name, age, score):\n",[324,151785,151786,151788,151791,151793],{"class":326,"line":338},[324,151787,31567],{"class":916},[324,151789,151790],{"class":867},".student_id ",[324,151792,913],{"class":863},[324,151794,151795],{"class":867}," student_id\n",[324,151797,151798,151800,151802,151804],{"class":326,"line":344},[324,151799,31567],{"class":916},[324,151801,150302],{"class":867},[324,151803,913],{"class":863},[324,151805,150307],{"class":867},[324,151807,151808,151810,151812,151814],{"class":326,"line":484},[324,151809,31567],{"class":916},[324,151811,150314],{"class":867},[324,151813,913],{"class":863},[324,151815,150319],{"class":867},[324,151817,151818,151820,151822,151824],{"class":326,"line":491},[324,151819,31567],{"class":916},[324,151821,150326],{"class":867},[324,151823,913],{"class":863},[324,151825,2310],{"class":867},[324,151827,151828],{"class":326,"line":496},[324,151829,488],{"emptyLinePlaceholder":487},[324,151831,151832,151834,151837],{"class":326,"line":502},[324,151833,31523],{"class":863},[324,151835,151836],{"class":734}," is_passed",[324,151838,31529],{"class":867},[324,151840,151841,151843,151845,151847,151849],{"class":326,"line":508},[324,151842,15481],{"class":863},[324,151844,39595],{"class":916},[324,151846,150326],{"class":867},[324,151848,2441],{"class":863},[324,151850,151851],{"class":916}," 60\n",[324,151853,151854],{"class":326,"line":514},[324,151855,488],{"emptyLinePlaceholder":487},[324,151857,151858,151860,151863],{"class":326,"line":2343},[324,151859,31523],{"class":863},[324,151861,151862],{"class":734}," to_dict",[324,151864,31529],{"class":867},[324,151866,151867,151869],{"class":326,"line":2348},[324,151868,15481],{"class":863},[324,151870,16301],{"class":867},[324,151872,151873,151876,151878,151880],{"class":326,"line":2354},[324,151874,151875],{"class":738},"            \"student_id\"",[324,151877,52159],{"class":867},[324,151879,31545],{"class":916},[324,151881,151882],{"class":867},".student_id,\n",[324,151884,151885,151888,151890,151892],{"class":326,"line":2359},[324,151886,151887],{"class":738},"            \"name\"",[324,151889,52159],{"class":867},[324,151891,31545],{"class":916},[324,151893,151894],{"class":867},".name,\n",[324,151896,151897,151900,151902,151904],{"class":326,"line":2373},[324,151898,151899],{"class":738},"            \"age\"",[324,151901,52159],{"class":867},[324,151903,31545],{"class":916},[324,151905,151906],{"class":867},".age,\n",[324,151908,151909,151912,151914,151916],{"class":326,"line":2378},[324,151910,151911],{"class":738},"            \"score\"",[324,151913,52159],{"class":867},[324,151915,31545],{"class":916},[324,151917,151918],{"class":867},".score,\n",[324,151920,151921],{"class":326,"line":2384},[324,151922,3258],{"class":867},[324,151924,151925],{"class":326,"line":2405},[324,151926,488],{"emptyLinePlaceholder":487},[324,151928,151929,151931],{"class":326,"line":2410},[324,151930,151526],{"class":734},[324,151932,151529],{"class":916},[324,151934,151935,151937,151940],{"class":326,"line":2424},[324,151936,31523],{"class":863},[324,151938,151939],{"class":734}," from_dict",[324,151941,151942],{"class":867},"(cls, data):\n",[324,151944,151945,151947,151949],{"class":326,"line":2429},[324,151946,15481],{"class":863},[324,151948,151546],{"class":916},[324,151950,151951],{"class":867},"(\n",[324,151953,151954,151957,151960],{"class":326,"line":2458},[324,151955,151956],{"class":867},"            data[",[324,151958,151959],{"class":738},"\"student_id\"",[324,151961,88558],{"class":867},[324,151963,151964,151966,151968],{"class":326,"line":2463},[324,151965,151956],{"class":867},[324,151967,63401],{"class":738},[324,151969,88558],{"class":867},[324,151971,151972,151974,151976],{"class":326,"line":2480},[324,151973,151956],{"class":867},[324,151975,69846],{"class":738},[324,151977,88558],{"class":867},[324,151979,151980,151982,151985],{"class":326,"line":2485},[324,151981,151956],{"class":867},[324,151983,151984],{"class":738},"\"score\"",[324,151986,88558],{"class":867},[324,151988,151989],{"class":326,"line":2490},[324,151990,38848],{"class":867},[324,151992,151993],{"class":326,"line":2495},[324,151994,488],{"emptyLinePlaceholder":487},[324,151996,151997,151999,152001],{"class":326,"line":2509},[324,151998,31523],{"class":863},[324,152000,150493],{"class":916},[324,152002,31529],{"class":867},[324,152004,152005,152007,152009,152011,152013,152016,152018,152021,152023,152025,152027,152029,152031,152033,152035,152037],{"class":326,"line":2514},[324,152006,15481],{"class":863},[324,152008,150502],{"class":863},[324,152010,1115],{"class":738},[324,152012,149964],{"class":916},[324,152014,152015],{"class":867},".student_id",[324,152017,1810],{"class":916},[324,152019,152020],{"class":916}," {self",[324,152022,81023],{"class":867},[324,152024,1810],{"class":916},[324,152026,152020],{"class":916},[324,152028,81035],{"class":867},[324,152030,1810],{"class":916},[324,152032,152020],{"class":916},[324,152034,150374],{"class":867},[324,152036,1810],{"class":916},[324,152038,25857],{"class":738},[324,152040,152041],{"class":326,"line":3306},[324,152042,488],{"emptyLinePlaceholder":487},[324,152044,152045],{"class":326,"line":3320},[324,152046,488],{"emptyLinePlaceholder":487},[324,152048,152049,152051,152053,152055,152058,152060,152062,152064,152066,152068,152070],{"class":326,"line":3328},[324,152050,149993],{"class":867},[324,152052,913],{"class":863},[324,152054,150397],{"class":867},[324,152056,152057],{"class":738},"\"001\"",[324,152059,13164],{"class":867},[324,152061,150400],{"class":738},[324,152063,13164],{"class":867},[324,152065,1514],{"class":916},[324,152067,13164],{"class":867},[324,152069,1853],{"class":916},[324,152071,874],{"class":867},[324,152073,152074,152076],{"class":326,"line":3333},[324,152075,31137],{"class":916},[324,152077,152078],{"class":867},"(student.is_passed())\n",[324,152080,152081,152083],{"class":326,"line":3339},[324,152082,31137],{"class":916},[324,152084,152085],{"class":867},"(student.to_dict())\n",[19,152087,152088,300,152091,152094],{},[269,152089,152090],{},"to_dict()",[269,152092,152093],{},"from_dict()"," 适合对象与 JSON 数据之间转换。",[14,152096,152098],{"id":152097},"_1116-易错点","11.16 易错点",[192,152100,152101,152107,152113,152118,152121,152124],{},[195,152102,152103,152104,29107],{},"类名推荐使用大驼峰，如 ",[269,152105,152106],{},"StudentManager",[195,152108,152109,152110,152112],{},"方法第一个参数必须写 ",[269,152111,31545],{},"，调用时不用传。",[195,152114,152115,152117],{},[269,152116,31551],{}," 不是普通方法，它在创建对象时自动执行。",[195,152119,152120],{},"私有属性不是绝对安全，只是约定和名称改写。",[195,152122,152123],{},"不要为了面向对象而面向对象，简单脚本用函数就够。",[195,152125,152126],{},"类中方法太多时，说明职责可能过重。",[14,152128,152130],{"id":152129},"_1117-本章练习","11.17 本章练习",[192,152132,152133,152139,152145,152150,152163],{},[195,152134,152135,152136,152138],{},"定义 ",[269,152137,150080],{}," 类，包含姓名、年龄、成绩和自我介绍方法。",[195,152140,152135,152141,152144],{},[269,152142,152143],{},"Account"," 类，实现存款、取款、查询余额。",[195,152146,152135,152147,152149],{},[269,152148,17955],{}," 类，计算圆的周长和面积。",[195,152151,152135,152152,1077,152155,152158,152159,152162],{},[269,152153,152154],{},"Dog",[269,152156,152157],{},"Cat"," 类，并用同一个函数调用它们的 ",[269,152160,152161],{},"speak()"," 方法。",[195,152164,105087,152165,152167,152168,29107],{},[269,152166,151651],{}," 定义一个商品类 ",[269,152169,152170],{},"Product",[775,152172,152173],{},"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":50,"searchDepth":203,"depth":203,"links":152175},[152176,152177,152178,152179,152180,152181,152183,152184,152185,152186,152187,152188,152189,152193,152194,152195,152196],{"id":149844,"depth":203,"text":149845},{"id":150027,"depth":203,"text":150028},{"id":150091,"depth":203,"text":150092},{"id":150168,"depth":203,"text":150169},{"id":150267,"depth":203,"text":150268},{"id":150431,"depth":203,"text":152182},"11.6 str",{"id":150557,"depth":203,"text":150558},{"id":150823,"depth":203,"text":150824},{"id":150937,"depth":203,"text":150938},{"id":151092,"depth":203,"text":151093},{"id":151216,"depth":203,"text":151217},{"id":151332,"depth":203,"text":151333},{"id":151481,"depth":203,"text":151482,"children":152190},[152191,152192],{"id":151485,"depth":338,"text":151486},{"id":151567,"depth":338,"text":151568},{"id":151645,"depth":203,"text":151646},{"id":151760,"depth":203,"text":151761},{"id":152097,"depth":203,"text":152098},{"id":152129,"depth":203,"text":152130},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch11",{"title":149836,"description":791},"wiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础","jI-8dVPoe9zfDV8hNTDJz4nf951g6PNIKIqDAy4hYic",{"id":152203,"title":152204,"body":152205,"description":791,"extension":792,"meta":155518,"navigation":487,"path":155519,"seo":155520,"stem":155521,"__hash__":155522},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线.md","12. 综合案例与复习路线",{"type":7,"value":152206,"toc":155494},[152207,152210,152214,152217,152220,152249,152252,152260,152264,152268,152271,152294,152297,152303,152307,153753,153756,153777,153781,153784,153796,153799,153983,153986,154112,154115,154119,154123,154259,154263,154349,154353,154435,154439,154476,154480,154669,154673,154676,154906,154910,154913,155094,155097,155101,155104,155110,155113,155139,155143,155146,155160,155163,155188,155191,155205,155208,155225,155228,155245,155248,155265,155269,155295,155299,155322,155326,155329,155331,155337,155339,155360,155363,155369,155375,155379,155382,155458,155461,155465,155491],[10,152208,152204],{"id":152209},"_12-综合案例与复习路线",[14,152211,152213],{"id":152212},"_121-综合项目应该练什么","12.1 综合项目应该练什么",[19,152215,152216],{},"学完基础语法后，不要只刷零散语法题，应该做小项目，把知识串起来。",[19,152218,152219],{},"一个合格的入门综合项目最好覆盖：",[192,152221,152222,152225,152228,152231,152234,152237,152240,152243,152246],{},[195,152223,152224],{},"输入输出。",[195,152226,152227],{},"判断和循环。",[195,152229,152230],{},"函数拆分。",[195,152232,152233],{},"列表、字典等容器。",[195,152235,152236],{},"文件持久化。",[195,152238,152239],{},"异常处理。",[195,152241,152242],{},"模块拆分。",[195,152244,152245],{},"可选：面向对象。",[195,152247,152248],{},"可选：数据可视化。",[19,152250,152251],{},"本章整理两个方向：",[192,152253,152254,152257],{},[195,152255,152256],{},"学生管理系统。",[195,152258,152259],{},"销售数据统计和可视化。",[14,152261,152263],{"id":152262},"_122-项目一学生管理系统","12.2 项目一：学生管理系统",[35,152265,152267],{"id":152266},"_1221-需求","12.2.1 需求",[19,152269,152270],{},"实现一个命令行学生管理系统：",[192,152272,152273,152276,152279,152282,152285,152288,152291],{},[195,152274,152275],{},"添加学生。",[195,152277,152278],{},"删除学生。",[195,152280,152281],{},"修改学生。",[195,152283,152284],{},"查询学生。",[195,152286,152287],{},"显示所有学生。",[195,152289,152290],{},"保存到 JSON 文件。",[195,152292,152293],{},"程序启动时自动读取 JSON 文件。",[19,152295,152296],{},"学生字段：",[316,152298,152301],{"className":152299,"code":152300,"language":5916,"meta":50},[5914],"学号 student_id\n姓名 name\n年龄 age\n成绩 score\n",[269,152302,152300],{"__ignoreMap":50},[14,152304,152306],{"id":152305},"_123-函数版学生管理系统","12.3 函数版学生管理系统",[316,152308,152310],{"className":31100,"code":152309,"language":31102,"meta":50,"style":50},"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",[269,152311,152312,152318,152328,152332,152346,152350,152354,152363,152375,152381,152385,152391,152422,152432,152439,152450,152456,152460,152464,152474,152505,152531,152535,152539,152548,152559,152570,152581,152592,152603,152614,152625,152629,152633,152643,152655,152671,152678,152685,152689,152693,152703,152711,152718,152731,152741,152752,152756,152760,152769,152777,152783,152795,152803,152814,152818,152822,152831,152847,152851,152858,152869,152874,152878,152894,152909,152924,152928,152933,152941,152949,152957,152965,152969,152974,152985,152989,152993,153002,153017,153027,153031,153043,153054,153058,153062,153067,153071,153082,153086,153090,153099,153114,153122,153126,153138,153148,153152,153156,153171,153184,153197,153201,153214,153226,153238,153242,153246,153257,153261,153265,153274,153289,153297,153301,153313,153323,153327,153331,153336,153340,153344,153354,153360,153382,153401,153420,153439,153444,153448,153452,153461,153469,153480,153484,153488,153514,153524,153529,153533,153537,153545,153555,153559,153567,153572,153588,153592,153606,153611,153625,153630,153643,153648,153661,153666,153679,153684,153697,153708,153712,153718,153729,153733,153737,153749],{"__ignoreMap":50},[324,152313,152314,152316],{"class":326,"line":327},[324,152315,31114],{"class":863},[324,152317,147603],{"class":867},[324,152319,152320,152322,152324,152326],{"class":326,"line":203},[324,152321,31459],{"class":863},[324,152323,109032],{"class":867},[324,152325,31114],{"class":863},[324,152327,109037],{"class":867},[324,152329,152330],{"class":326,"line":338},[324,152331,488],{"emptyLinePlaceholder":487},[324,152333,152334,152337,152339,152341,152344],{"class":326,"line":344},[324,152335,152336],{"class":916},"DATA_FILE",[324,152338,14293],{"class":863},[324,152340,109266],{"class":867},[324,152342,152343],{"class":738},"\"students.json\"",[324,152345,874],{"class":867},[324,152347,152348],{"class":326,"line":484},[324,152349,488],{"emptyLinePlaceholder":487},[324,152351,152352],{"class":326,"line":491},[324,152353,488],{"emptyLinePlaceholder":487},[324,152355,152356,152358,152361],{"class":326,"line":496},[324,152357,32669],{"class":863},[324,152359,152360],{"class":734}," load_students",[324,152362,32675],{"class":867},[324,152364,152365,152367,152369,152372],{"class":326,"line":502},[324,152366,3830],{"class":863},[324,152368,39652],{"class":863},[324,152370,152371],{"class":916}," DATA_FILE",[324,152373,152374],{"class":867},".exists():\n",[324,152376,152377,152379],{"class":326,"line":508},[324,152378,15481],{"class":863},[324,152380,52560],{"class":867},[324,152382,152383],{"class":326,"line":514},[324,152384,488],{"emptyLinePlaceholder":487},[324,152386,152387,152389],{"class":326,"line":2343},[324,152388,126296],{"class":863},[324,152390,4468],{"class":867},[324,152392,152393,152396,152398,152400,152402,152404,152406,152408,152410,152412,152414,152416,152418,152420],{"class":326,"line":2348},[324,152394,152395],{"class":863},"        with",[324,152397,147303],{"class":916},[324,152399,868],{"class":867},[324,152401,152336],{"class":916},[324,152403,13164],{"class":867},[324,152405,147313],{"class":738},[324,152407,13164],{"class":867},[324,152409,147318],{"class":5945},[324,152411,913],{"class":863},[324,152413,147323],{"class":738},[324,152415,14443],{"class":867},[324,152417,32105],{"class":863},[324,152419,148665],{"class":5945},[324,152421,4468],{"class":867},[324,152423,152424,152426,152428,152430],{"class":326,"line":2354},[324,152425,16461],{"class":863},[324,152427,148676],{"class":867},[324,152429,46076],{"class":5945},[324,152431,874],{"class":867},[324,152433,152434,152436],{"class":326,"line":2359},[324,152435,126324],{"class":863},[324,152437,152438],{"class":867}," json.JSONDecodeError:\n",[324,152440,152441,152443,152445,152448],{"class":326,"line":2373},[324,152442,33173],{"class":916},[324,152444,868],{"class":867},[324,152446,152447],{"class":738},"\"数据文件格式错误，已使用空数据启动\"",[324,152449,874],{"class":867},[324,152451,152452,152454],{"class":326,"line":2378},[324,152453,15481],{"class":863},[324,152455,52560],{"class":867},[324,152457,152458],{"class":326,"line":2384},[324,152459,488],{"emptyLinePlaceholder":487},[324,152461,152462],{"class":326,"line":2405},[324,152463,488],{"emptyLinePlaceholder":487},[324,152465,152466,152468,152471],{"class":326,"line":2410},[324,152467,32669],{"class":863},[324,152469,152470],{"class":734}," save_students",[324,152472,152473],{"class":867},"(students):\n",[324,152475,152476,152478,152480,152482,152484,152486,152489,152491,152493,152495,152497,152499,152501,152503],{"class":326,"line":2424},[324,152477,34900],{"class":863},[324,152479,147303],{"class":916},[324,152481,868],{"class":867},[324,152483,152336],{"class":916},[324,152485,13164],{"class":867},[324,152487,152488],{"class":738},"\"w\"",[324,152490,13164],{"class":867},[324,152492,147318],{"class":5945},[324,152494,913],{"class":863},[324,152496,147323],{"class":738},[324,152498,14443],{"class":867},[324,152500,32105],{"class":863},[324,152502,148665],{"class":5945},[324,152504,4468],{"class":867},[324,152506,152507,152510,152512,152514,152516,152518,152520,152522,152525,152527,152529],{"class":326,"line":2429},[324,152508,152509],{"class":867},"        json.dump(students, ",[324,152511,46076],{"class":5945},[324,152513,13164],{"class":867},[324,152515,147649],{"class":5945},[324,152517,913],{"class":863},[324,152519,34709],{"class":916},[324,152521,13164],{"class":867},[324,152523,152524],{"class":5945},"indent",[324,152526,913],{"class":863},[324,152528,944],{"class":916},[324,152530,874],{"class":867},[324,152532,152533],{"class":326,"line":2458},[324,152534,488],{"emptyLinePlaceholder":487},[324,152536,152537],{"class":326,"line":2463},[324,152538,488],{"emptyLinePlaceholder":487},[324,152540,152541,152543,152546],{"class":326,"line":2480},[324,152542,32669],{"class":863},[324,152544,152545],{"class":734}," show_menu",[324,152547,32675],{"class":867},[324,152549,152550,152552,152554,152557],{"class":326,"line":2485},[324,152551,32021],{"class":916},[324,152553,868],{"class":867},[324,152555,152556],{"class":738},"\"====== 学生管理系统 ======\"",[324,152558,874],{"class":867},[324,152560,152561,152563,152565,152568],{"class":326,"line":2490},[324,152562,32021],{"class":916},[324,152564,868],{"class":867},[324,152566,152567],{"class":738},"\"1. 添加学生\"",[324,152569,874],{"class":867},[324,152571,152572,152574,152576,152579],{"class":326,"line":2495},[324,152573,32021],{"class":916},[324,152575,868],{"class":867},[324,152577,152578],{"class":738},"\"2. 删除学生\"",[324,152580,874],{"class":867},[324,152582,152583,152585,152587,152590],{"class":326,"line":2509},[324,152584,32021],{"class":916},[324,152586,868],{"class":867},[324,152588,152589],{"class":738},"\"3. 修改学生\"",[324,152591,874],{"class":867},[324,152593,152594,152596,152598,152601],{"class":326,"line":2514},[324,152595,32021],{"class":916},[324,152597,868],{"class":867},[324,152599,152600],{"class":738},"\"4. 查询学生\"",[324,152602,874],{"class":867},[324,152604,152605,152607,152609,152612],{"class":326,"line":3306},[324,152606,32021],{"class":916},[324,152608,868],{"class":867},[324,152610,152611],{"class":738},"\"5. 显示所有学生\"",[324,152613,874],{"class":867},[324,152615,152616,152618,152620,152623],{"class":326,"line":3320},[324,152617,32021],{"class":916},[324,152619,868],{"class":867},[324,152621,152622],{"class":738},"\"0. 退出系统\"",[324,152624,874],{"class":867},[324,152626,152627],{"class":326,"line":3328},[324,152628,488],{"emptyLinePlaceholder":487},[324,152630,152631],{"class":326,"line":3333},[324,152632,488],{"emptyLinePlaceholder":487},[324,152634,152635,152637,152640],{"class":326,"line":3339},[324,152636,32669],{"class":863},[324,152638,152639],{"class":734}," find_student",[324,152641,152642],{"class":867},"(students, student_id):\n",[324,152644,152645,152647,152650,152652],{"class":326,"line":3345},[324,152646,3930],{"class":863},[324,152648,152649],{"class":867}," student ",[324,152651,26767],{"class":863},[324,152653,152654],{"class":867}," students:\n",[324,152656,152657,152659,152662,152664,152666,152668],{"class":326,"line":3350},[324,152658,3226],{"class":863},[324,152660,152661],{"class":867}," student[",[324,152663,151959],{"class":738},[324,152665,5172],{"class":867},[324,152667,3678],{"class":863},[324,152669,152670],{"class":867}," student_id:\n",[324,152672,152673,152675],{"class":326,"line":8677},[324,152674,16461],{"class":863},[324,152676,152677],{"class":867}," student\n",[324,152679,152680,152682],{"class":326,"line":8701},[324,152681,4819],{"class":863},[324,152683,152684],{"class":916}," None\n",[324,152686,152687],{"class":326,"line":8706},[324,152688,488],{"emptyLinePlaceholder":487},[324,152690,152691],{"class":326,"line":8712},[324,152692,488],{"emptyLinePlaceholder":487},[324,152694,152695,152697,152700],{"class":326,"line":8739},[324,152696,32669],{"class":863},[324,152698,152699],{"class":734}," input_int",[324,152701,152702],{"class":867},"(prompt):\n",[324,152704,152705,152707,152709],{"class":326,"line":8744},[324,152706,2981],{"class":863},[324,152708,96014],{"class":916},[324,152710,4468],{"class":867},[324,152712,152713,152716],{"class":326,"line":8750},[324,152714,152715],{"class":863},"        try",[324,152717,4468],{"class":867},[324,152719,152720,152722,152724,152726,152728],{"class":326,"line":8762},[324,152721,16461],{"class":863},[324,152723,3112],{"class":916},[324,152725,868],{"class":867},[324,152727,54543],{"class":916},[324,152729,152730],{"class":867},"(prompt))\n",[324,152732,152733,152736,152739],{"class":326,"line":8774},[324,152734,152735],{"class":863},"        except",[324,152737,152738],{"class":916}," ValueError",[324,152740,4468],{"class":867},[324,152742,152743,152745,152747,152750],{"class":326,"line":8786},[324,152744,35372],{"class":916},[324,152746,868],{"class":867},[324,152748,152749],{"class":738},"\"请输入整数\"",[324,152751,874],{"class":867},[324,152753,152754],{"class":326,"line":10445},[324,152755,488],{"emptyLinePlaceholder":487},[324,152757,152758],{"class":326,"line":10470},[324,152759,488],{"emptyLinePlaceholder":487},[324,152761,152762,152764,152767],{"class":326,"line":10493},[324,152763,32669],{"class":863},[324,152765,152766],{"class":734}," input_float",[324,152768,152702],{"class":867},[324,152770,152771,152773,152775],{"class":326,"line":10517},[324,152772,2981],{"class":863},[324,152774,96014],{"class":916},[324,152776,4468],{"class":867},[324,152778,152779,152781],{"class":326,"line":10522},[324,152780,152715],{"class":863},[324,152782,4468],{"class":867},[324,152784,152785,152787,152789,152791,152793],{"class":326,"line":10527},[324,152786,16461],{"class":863},[324,152788,110518],{"class":916},[324,152790,868],{"class":867},[324,152792,54543],{"class":916},[324,152794,152730],{"class":867},[324,152796,152797,152799,152801],{"class":326,"line":10532},[324,152798,152735],{"class":863},[324,152800,152738],{"class":916},[324,152802,4468],{"class":867},[324,152804,152805,152807,152809,152812],{"class":326,"line":10541},[324,152806,35372],{"class":916},[324,152808,868],{"class":867},[324,152810,152811],{"class":738},"\"请输入数字\"",[324,152813,874],{"class":867},[324,152815,152816],{"class":326,"line":10546},[324,152817,488],{"emptyLinePlaceholder":487},[324,152819,152820],{"class":326,"line":10552},[324,152821,488],{"emptyLinePlaceholder":487},[324,152823,152824,152826,152829],{"class":326,"line":10573},[324,152825,32669],{"class":863},[324,152827,152828],{"class":734}," add_student",[324,152830,152473],{"class":867},[324,152832,152833,152836,152838,152840,152842,152845],{"class":326,"line":10579},[324,152834,152835],{"class":867},"    student_id ",[324,152837,913],{"class":863},[324,152839,61327],{"class":916},[324,152841,868],{"class":867},[324,152843,152844],{"class":738},"\"请输入学号:\"",[324,152846,874],{"class":867},[324,152848,152849],{"class":326,"line":10593},[324,152850,488],{"emptyLinePlaceholder":487},[324,152852,152853,152855],{"class":326,"line":10599},[324,152854,3830],{"class":863},[324,152856,152857],{"class":867}," find_student(students, student_id):\n",[324,152859,152860,152862,152864,152867],{"class":326,"line":10626},[324,152861,33173],{"class":916},[324,152863,868],{"class":867},[324,152865,152866],{"class":738},"\"学号已存在\"",[324,152868,874],{"class":867},[324,152870,152871],{"class":326,"line":10635},[324,152872,152873],{"class":863},"        return\n",[324,152875,152876],{"class":326,"line":10641},[324,152877,488],{"emptyLinePlaceholder":487},[324,152879,152880,152883,152885,152887,152889,152892],{"class":326,"line":10649},[324,152881,152882],{"class":867},"    name ",[324,152884,913],{"class":863},[324,152886,61327],{"class":916},[324,152888,868],{"class":867},[324,152890,152891],{"class":738},"\"请输入姓名:\"",[324,152893,874],{"class":867},[324,152895,152896,152899,152901,152904,152907],{"class":326,"line":10654},[324,152897,152898],{"class":867},"    age ",[324,152900,913],{"class":863},[324,152902,152903],{"class":867}," input_int(",[324,152905,152906],{"class":738},"\"请输入年龄:\"",[324,152908,874],{"class":867},[324,152910,152911,152914,152916,152919,152922],{"class":326,"line":17333},[324,152912,152913],{"class":867},"    score ",[324,152915,913],{"class":863},[324,152917,152918],{"class":867}," input_float(",[324,152920,152921],{"class":738},"\"请输入成绩:\"",[324,152923,874],{"class":867},[324,152925,152926],{"class":326,"line":17339},[324,152927,488],{"emptyLinePlaceholder":487},[324,152929,152930],{"class":326,"line":17362},[324,152931,152932],{"class":867},"    students.append({\n",[324,152934,152935,152938],{"class":326,"line":17368},[324,152936,152937],{"class":738},"        \"student_id\"",[324,152939,152940],{"class":867},": student_id,\n",[324,152942,152943,152946],{"class":326,"line":17391},[324,152944,152945],{"class":738},"        \"name\"",[324,152947,152948],{"class":867},": name,\n",[324,152950,152951,152954],{"class":326,"line":17405},[324,152952,152953],{"class":738},"        \"age\"",[324,152955,152956],{"class":867},": age,\n",[324,152958,152959,152962],{"class":326,"line":17425},[324,152960,152961],{"class":738},"        \"score\"",[324,152963,152964],{"class":867},": score,\n",[324,152966,152967],{"class":326,"line":17431},[324,152968,34183],{"class":867},[324,152970,152971],{"class":326,"line":17442},[324,152972,152973],{"class":867},"    save_students(students)\n",[324,152975,152976,152978,152980,152983],{"class":326,"line":17465},[324,152977,32021],{"class":916},[324,152979,868],{"class":867},[324,152981,152982],{"class":738},"\"添加成功\"",[324,152984,874],{"class":867},[324,152986,152987],{"class":326,"line":17487},[324,152988,488],{"emptyLinePlaceholder":487},[324,152990,152991],{"class":326,"line":17492},[324,152992,488],{"emptyLinePlaceholder":487},[324,152994,152995,152997,153000],{"class":326,"line":17498},[324,152996,32669],{"class":863},[324,152998,152999],{"class":734}," delete_student",[324,153001,152473],{"class":867},[324,153003,153004,153006,153008,153010,153012,153015],{"class":326,"line":17512},[324,153005,152835],{"class":867},[324,153007,913],{"class":863},[324,153009,61327],{"class":916},[324,153011,868],{"class":867},[324,153013,153014],{"class":738},"\"请输入要删除的学号:\"",[324,153016,874],{"class":867},[324,153018,153019,153022,153024],{"class":326,"line":17525},[324,153020,153021],{"class":867},"    student ",[324,153023,913],{"class":863},[324,153025,153026],{"class":867}," find_student(students, student_id)\n",[324,153028,153029],{"class":326,"line":17530},[324,153030,488],{"emptyLinePlaceholder":487},[324,153032,153033,153035,153037,153039,153041],{"class":326,"line":17544},[324,153034,3830],{"class":863},[324,153036,152649],{"class":867},[324,153038,39649],{"class":863},[324,153040,39655],{"class":916},[324,153042,4468],{"class":867},[324,153044,153045,153047,153049,153052],{"class":326,"line":17549},[324,153046,33173],{"class":916},[324,153048,868],{"class":867},[324,153050,153051],{"class":738},"\"学生不存在\"",[324,153053,874],{"class":867},[324,153055,153056],{"class":326,"line":17555},[324,153057,152873],{"class":863},[324,153059,153060],{"class":326,"line":17560},[324,153061,488],{"emptyLinePlaceholder":487},[324,153063,153064],{"class":326,"line":17574},[324,153065,153066],{"class":867},"    students.remove(student)\n",[324,153068,153069],{"class":326,"line":17579},[324,153070,152973],{"class":867},[324,153072,153073,153075,153077,153080],{"class":326,"line":17584},[324,153074,32021],{"class":916},[324,153076,868],{"class":867},[324,153078,153079],{"class":738},"\"删除成功\"",[324,153081,874],{"class":867},[324,153083,153084],{"class":326,"line":17598},[324,153085,488],{"emptyLinePlaceholder":487},[324,153087,153088],{"class":326,"line":17610},[324,153089,488],{"emptyLinePlaceholder":487},[324,153091,153092,153094,153097],{"class":326,"line":17615},[324,153093,32669],{"class":863},[324,153095,153096],{"class":734}," update_student",[324,153098,152473],{"class":867},[324,153100,153101,153103,153105,153107,153109,153112],{"class":326,"line":17628},[324,153102,152835],{"class":867},[324,153104,913],{"class":863},[324,153106,61327],{"class":916},[324,153108,868],{"class":867},[324,153110,153111],{"class":738},"\"请输入要修改的学号:\"",[324,153113,874],{"class":867},[324,153115,153116,153118,153120],{"class":326,"line":17633},[324,153117,153021],{"class":867},[324,153119,913],{"class":863},[324,153121,153026],{"class":867},[324,153123,153124],{"class":326,"line":17638},[324,153125,488],{"emptyLinePlaceholder":487},[324,153127,153128,153130,153132,153134,153136],{"class":326,"line":17643},[324,153129,3830],{"class":863},[324,153131,152649],{"class":867},[324,153133,39649],{"class":863},[324,153135,39655],{"class":916},[324,153137,4468],{"class":867},[324,153139,153140,153142,153144,153146],{"class":326,"line":17656},[324,153141,33173],{"class":916},[324,153143,868],{"class":867},[324,153145,153051],{"class":738},[324,153147,874],{"class":867},[324,153149,153150],{"class":326,"line":17661},[324,153151,152873],{"class":863},[324,153153,153154],{"class":326,"line":33355},[324,153155,488],{"emptyLinePlaceholder":487},[324,153157,153158,153160,153162,153164,153166,153169],{"class":326,"line":33361},[324,153159,152882],{"class":867},[324,153161,913],{"class":863},[324,153163,61327],{"class":916},[324,153165,868],{"class":867},[324,153167,153168],{"class":738},"\"请输入新姓名:\"",[324,153170,874],{"class":867},[324,153172,153173,153175,153177,153179,153182],{"class":326,"line":33367},[324,153174,152898],{"class":867},[324,153176,913],{"class":863},[324,153178,152903],{"class":867},[324,153180,153181],{"class":738},"\"请输入新年龄:\"",[324,153183,874],{"class":867},[324,153185,153186,153188,153190,153192,153195],{"class":326,"line":33373},[324,153187,152913],{"class":867},[324,153189,913],{"class":863},[324,153191,152918],{"class":867},[324,153193,153194],{"class":738},"\"请输入新成绩:\"",[324,153196,874],{"class":867},[324,153198,153199],{"class":326,"line":33379},[324,153200,488],{"emptyLinePlaceholder":487},[324,153202,153203,153206,153208,153210,153212],{"class":326,"line":33390},[324,153204,153205],{"class":867},"    student[",[324,153207,63401],{"class":738},[324,153209,5172],{"class":867},[324,153211,913],{"class":863},[324,153213,150307],{"class":867},[324,153215,153216,153218,153220,153222,153224],{"class":326,"line":33396},[324,153217,153205],{"class":867},[324,153219,69846],{"class":738},[324,153221,5172],{"class":867},[324,153223,913],{"class":863},[324,153225,150319],{"class":867},[324,153227,153228,153230,153232,153234,153236],{"class":326,"line":33416},[324,153229,153205],{"class":867},[324,153231,151984],{"class":738},[324,153233,5172],{"class":867},[324,153235,913],{"class":863},[324,153237,2310],{"class":867},[324,153239,153240],{"class":326,"line":33422},[324,153241,488],{"emptyLinePlaceholder":487},[324,153243,153244],{"class":326,"line":33433},[324,153245,152973],{"class":867},[324,153247,153248,153250,153252,153255],{"class":326,"line":33439},[324,153249,32021],{"class":916},[324,153251,868],{"class":867},[324,153253,153254],{"class":738},"\"修改成功\"",[324,153256,874],{"class":867},[324,153258,153259],{"class":326,"line":33445},[324,153260,488],{"emptyLinePlaceholder":487},[324,153262,153263],{"class":326,"line":33451},[324,153264,488],{"emptyLinePlaceholder":487},[324,153266,153267,153269,153272],{"class":326,"line":33457},[324,153268,32669],{"class":863},[324,153270,153271],{"class":734}," query_student",[324,153273,152473],{"class":867},[324,153275,153276,153278,153280,153282,153284,153287],{"class":326,"line":33463},[324,153277,152835],{"class":867},[324,153279,913],{"class":863},[324,153281,61327],{"class":916},[324,153283,868],{"class":867},[324,153285,153286],{"class":738},"\"请输入要查询的学号:\"",[324,153288,874],{"class":867},[324,153290,153291,153293,153295],{"class":326,"line":33469},[324,153292,153021],{"class":867},[324,153294,913],{"class":863},[324,153296,153026],{"class":867},[324,153298,153299],{"class":326,"line":33475},[324,153300,488],{"emptyLinePlaceholder":487},[324,153302,153303,153305,153307,153309,153311],{"class":326,"line":33495},[324,153304,3830],{"class":863},[324,153306,152649],{"class":867},[324,153308,39649],{"class":863},[324,153310,39655],{"class":916},[324,153312,4468],{"class":867},[324,153314,153315,153317,153319,153321],{"class":326,"line":33501},[324,153316,33173],{"class":916},[324,153318,868],{"class":867},[324,153320,153051],{"class":738},[324,153322,874],{"class":867},[324,153324,153325],{"class":326,"line":33517},[324,153326,152873],{"class":863},[324,153328,153329],{"class":326,"line":33523},[324,153330,488],{"emptyLinePlaceholder":487},[324,153332,153333],{"class":326,"line":33537},[324,153334,153335],{"class":867},"    print_student(student)\n",[324,153337,153338],{"class":326,"line":33543},[324,153339,488],{"emptyLinePlaceholder":487},[324,153341,153342],{"class":326,"line":33558},[324,153343,488],{"emptyLinePlaceholder":487},[324,153345,153346,153348,153351],{"class":326,"line":33564},[324,153347,32669],{"class":863},[324,153349,153350],{"class":734}," print_student",[324,153352,153353],{"class":867},"(student):\n",[324,153355,153356,153358],{"class":326,"line":33573},[324,153357,32021],{"class":916},[324,153359,151951],{"class":867},[324,153361,153362,153365,153367,153369,153372,153375,153377,153380],{"class":326,"line":33579},[324,153363,153364],{"class":863},"        f",[324,153366,1115],{"class":738},[324,153368,1760],{"class":916},[324,153370,153371],{"class":867},"student[",[324,153373,153374],{"class":738},"'student_id'",[324,153376,1804],{"class":867},[324,153378,153379],{"class":916},"}\\t",[324,153381,25857],{"class":738},[324,153383,153384,153386,153388,153390,153392,153395,153397,153399],{"class":326,"line":33588},[324,153385,153364],{"class":863},[324,153387,1115],{"class":738},[324,153389,1760],{"class":916},[324,153391,153371],{"class":867},[324,153393,153394],{"class":738},"'name'",[324,153396,1804],{"class":867},[324,153398,153379],{"class":916},[324,153400,25857],{"class":738},[324,153402,153403,153405,153407,153409,153411,153414,153416,153418],{"class":326,"line":33594},[324,153404,153364],{"class":863},[324,153406,1115],{"class":738},[324,153408,1760],{"class":916},[324,153410,153371],{"class":867},[324,153412,153413],{"class":738},"'age'",[324,153415,1804],{"class":867},[324,153417,153379],{"class":916},[324,153419,25857],{"class":738},[324,153421,153422,153424,153426,153428,153430,153433,153435,153437],{"class":326,"line":33600},[324,153423,153364],{"class":863},[324,153425,1115],{"class":738},[324,153427,1760],{"class":916},[324,153429,153371],{"class":867},[324,153431,153432],{"class":738},"'score'",[324,153434,1804],{"class":867},[324,153436,1810],{"class":916},[324,153438,25857],{"class":738},[324,153440,153441],{"class":326,"line":33609},[324,153442,153443],{"class":867},"    )\n",[324,153445,153446],{"class":326,"line":33615},[324,153447,488],{"emptyLinePlaceholder":487},[324,153449,153450],{"class":326,"line":33626},[324,153451,488],{"emptyLinePlaceholder":487},[324,153453,153454,153456,153459],{"class":326,"line":33632},[324,153455,32669],{"class":863},[324,153457,153458],{"class":734}," show_all_students",[324,153460,152473],{"class":867},[324,153462,153463,153465,153467],{"class":326,"line":33651},[324,153464,3830],{"class":863},[324,153466,39652],{"class":863},[324,153468,152654],{"class":867},[324,153470,153471,153473,153475,153478],{"class":326,"line":33657},[324,153472,33173],{"class":916},[324,153474,868],{"class":867},[324,153476,153477],{"class":738},"\"暂无学生\"",[324,153479,874],{"class":867},[324,153481,153482],{"class":326,"line":33668},[324,153483,152873],{"class":863},[324,153485,153486],{"class":326,"line":33674},[324,153487,488],{"emptyLinePlaceholder":487},[324,153489,153490,153492,153494,153497,153499,153502,153504,153507,153509,153512],{"class":326,"line":33694},[324,153491,32021],{"class":916},[324,153493,868],{"class":867},[324,153495,153496],{"class":738},"\"学号",[324,153498,1965],{"class":916},[324,153500,153501],{"class":738},"姓名",[324,153503,1965],{"class":916},[324,153505,153506],{"class":738},"年龄",[324,153508,1965],{"class":916},[324,153510,153511],{"class":738},"成绩\"",[324,153513,874],{"class":867},[324,153515,153516,153518,153520,153522],{"class":326,"line":33710},[324,153517,3930],{"class":863},[324,153519,152649],{"class":867},[324,153521,26767],{"class":863},[324,153523,152654],{"class":867},[324,153525,153526],{"class":326,"line":33716},[324,153527,153528],{"class":867},"        print_student(student)\n",[324,153530,153531],{"class":326,"line":33730},[324,153532,488],{"emptyLinePlaceholder":487},[324,153534,153535],{"class":326,"line":33736},[324,153536,488],{"emptyLinePlaceholder":487},[324,153538,153539,153541,153543],{"class":326,"line":33742},[324,153540,32669],{"class":863},[324,153542,2703],{"class":734},[324,153544,32675],{"class":867},[324,153546,153547,153550,153552],{"class":326,"line":33753},[324,153548,153549],{"class":867},"    students ",[324,153551,913],{"class":863},[324,153553,153554],{"class":867}," load_students()\n",[324,153556,153557],{"class":326,"line":33759},[324,153558,488],{"emptyLinePlaceholder":487},[324,153560,153561,153563,153565],{"class":326,"line":33765},[324,153562,2981],{"class":863},[324,153564,96014],{"class":916},[324,153566,4468],{"class":867},[324,153568,153569],{"class":326,"line":33775},[324,153570,153571],{"class":867},"        show_menu()\n",[324,153573,153574,153577,153579,153581,153583,153586],{"class":326,"line":33781},[324,153575,153576],{"class":867},"        choice ",[324,153578,913],{"class":863},[324,153580,61327],{"class":916},[324,153582,868],{"class":867},[324,153584,153585],{"class":738},"\"请输入操作:\"",[324,153587,874],{"class":867},[324,153589,153590],{"class":326,"line":33792},[324,153591,488],{"emptyLinePlaceholder":487},[324,153593,153594,153596,153599,153601,153604],{"class":326,"line":33798},[324,153595,3226],{"class":863},[324,153597,153598],{"class":867}," choice ",[324,153600,3678],{"class":863},[324,153602,153603],{"class":738}," \"1\"",[324,153605,4468],{"class":867},[324,153607,153608],{"class":326,"line":33808},[324,153609,153610],{"class":867},"            add_student(students)\n",[324,153612,153613,153616,153618,153620,153623],{"class":326,"line":33813},[324,153614,153615],{"class":863},"        elif",[324,153617,153598],{"class":867},[324,153619,3678],{"class":863},[324,153621,153622],{"class":738}," \"2\"",[324,153624,4468],{"class":867},[324,153626,153627],{"class":326,"line":33819},[324,153628,153629],{"class":867},"            delete_student(students)\n",[324,153631,153632,153634,153636,153638,153641],{"class":326,"line":33868},[324,153633,153615],{"class":863},[324,153635,153598],{"class":867},[324,153637,3678],{"class":863},[324,153639,153640],{"class":738}," \"3\"",[324,153642,4468],{"class":867},[324,153644,153645],{"class":326,"line":33915},[324,153646,153647],{"class":867},"            update_student(students)\n",[324,153649,153650,153652,153654,153656,153659],{"class":326,"line":33920},[324,153651,153615],{"class":863},[324,153653,153598],{"class":867},[324,153655,3678],{"class":863},[324,153657,153658],{"class":738}," \"4\"",[324,153660,4468],{"class":867},[324,153662,153663],{"class":326,"line":33926},[324,153664,153665],{"class":867},"            query_student(students)\n",[324,153667,153668,153670,153672,153674,153677],{"class":326,"line":33945},[324,153669,153615],{"class":863},[324,153671,153598],{"class":867},[324,153673,3678],{"class":863},[324,153675,153676],{"class":738}," \"5\"",[324,153678,4468],{"class":867},[324,153680,153681],{"class":326,"line":33951},[324,153682,153683],{"class":867},"            show_all_students(students)\n",[324,153685,153686,153688,153690,153692,153695],{"class":326,"line":33971},[324,153687,153615],{"class":863},[324,153689,153598],{"class":867},[324,153691,3678],{"class":863},[324,153693,153694],{"class":738}," \"0\"",[324,153696,4468],{"class":867},[324,153698,153699,153701,153703,153706],{"class":326,"line":33977},[324,153700,35372],{"class":916},[324,153702,868],{"class":867},[324,153704,153705],{"class":738},"\"退出系统\"",[324,153707,874],{"class":867},[324,153709,153710],{"class":326,"line":33983},[324,153711,115819],{"class":863},[324,153713,153714,153716],{"class":326,"line":33993},[324,153715,3263],{"class":863},[324,153717,4468],{"class":867},[324,153719,153720,153722,153724,153727],{"class":326,"line":33998},[324,153721,35372],{"class":916},[324,153723,868],{"class":867},[324,153725,153726],{"class":738},"\"输入错误\"",[324,153728,874],{"class":867},[324,153730,153731],{"class":326,"line":34004},[324,153732,488],{"emptyLinePlaceholder":487},[324,153734,153735],{"class":326,"line":34020},[324,153736,488],{"emptyLinePlaceholder":487},[324,153738,153739,153741,153743,153745,153747],{"class":326,"line":34065},[324,153740,2262],{"class":863},[324,153742,31942],{"class":916},[324,153744,102280],{"class":863},[324,153746,102283],{"class":738},[324,153748,4468],{"class":867},[324,153750,153751],{"class":326,"line":34071},[324,153752,102290],{"class":867},[19,153754,153755],{},"这个项目串联了：",[192,153757,153758,153761,153764,153767,153770,153772],{},[195,153759,153760],{},"菜单循环。",[195,153762,153763],{},"函数封装。",[195,153765,153766],{},"列表字典。",[195,153768,153769],{},"JSON 读写。",[195,153771,152239],{},[195,153773,153774,29107],{},[269,153775,153776],{},"if __name__ == \"__main__\"",[14,153778,153780],{"id":153779},"_124-面向对象版设计思路","12.4 面向对象版设计思路",[19,153782,153783],{},"可以进一步拆成两个类：",[192,153785,153786,153791],{},[195,153787,153788,153790],{},[269,153789,150080],{},"：表示单个学生。",[195,153792,153793,153795],{},[269,153794,152106],{},"：负责学生增删改查和文件保存。",[19,153797,153798],{},"示意代码：",[316,153800,153802],{"className":31100,"code":153801,"language":31102,"meta":50,"style":50},"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",[269,153803,153804,153814,153818,153822,153826,153834,153841,153847,153853,153859,153863,153871,153877,153887,153897,153907,153917,153921,153925,153931,153939,153947,153955,153963,153971,153979],{"__ignoreMap":50},[324,153805,153806,153808,153810,153812],{"class":326,"line":327},[324,153807,31459],{"class":863},[324,153809,151664],{"class":867},[324,153811,31114],{"class":863},[324,153813,151669],{"class":867},[324,153815,153816],{"class":326,"line":203},[324,153817,488],{"emptyLinePlaceholder":487},[324,153819,153820],{"class":326,"line":338},[324,153821,488],{"emptyLinePlaceholder":487},[324,153823,153824],{"class":326,"line":344},[324,153825,151682],{"class":734},[324,153827,153828,153830,153832],{"class":326,"line":484},[324,153829,15423],{"class":863},[324,153831,8627],{"class":734},[324,153833,4468],{"class":867},[324,153835,153836,153839],{"class":326,"line":491},[324,153837,153838],{"class":867},"    student_id: ",[324,153840,151698],{"class":916},[324,153842,153843,153845],{"class":326,"line":496},[324,153844,151695],{"class":867},[324,153846,151698],{"class":916},[324,153848,153849,153851],{"class":326,"line":502},[324,153850,151703],{"class":867},[324,153852,151706],{"class":916},[324,153854,153855,153857],{"class":326,"line":508},[324,153856,151711],{"class":867},[324,153858,151714],{"class":916},[324,153860,153861],{"class":326,"line":514},[324,153862,488],{"emptyLinePlaceholder":487},[324,153864,153865,153867,153869],{"class":326,"line":2343},[324,153866,31523],{"class":863},[324,153868,151862],{"class":734},[324,153870,31529],{"class":867},[324,153872,153873,153875],{"class":326,"line":2348},[324,153874,15481],{"class":863},[324,153876,16301],{"class":867},[324,153878,153879,153881,153883,153885],{"class":326,"line":2354},[324,153880,151875],{"class":738},[324,153882,52159],{"class":867},[324,153884,31545],{"class":916},[324,153886,151882],{"class":867},[324,153888,153889,153891,153893,153895],{"class":326,"line":2359},[324,153890,151887],{"class":738},[324,153892,52159],{"class":867},[324,153894,31545],{"class":916},[324,153896,151894],{"class":867},[324,153898,153899,153901,153903,153905],{"class":326,"line":2373},[324,153900,151899],{"class":738},[324,153902,52159],{"class":867},[324,153904,31545],{"class":916},[324,153906,151906],{"class":867},[324,153908,153909,153911,153913,153915],{"class":326,"line":2378},[324,153910,151911],{"class":738},[324,153912,52159],{"class":867},[324,153914,31545],{"class":916},[324,153916,151918],{"class":867},[324,153918,153919],{"class":326,"line":2384},[324,153920,3258],{"class":867},[324,153922,153923],{"class":326,"line":2405},[324,153924,488],{"emptyLinePlaceholder":487},[324,153926,153927,153929],{"class":326,"line":2410},[324,153928,151526],{"class":734},[324,153930,151529],{"class":916},[324,153932,153933,153935,153937],{"class":326,"line":2424},[324,153934,31523],{"class":863},[324,153936,151939],{"class":734},[324,153938,151942],{"class":867},[324,153940,153941,153943,153945],{"class":326,"line":2429},[324,153942,15481],{"class":863},[324,153944,151546],{"class":916},[324,153946,151951],{"class":867},[324,153948,153949,153951,153953],{"class":326,"line":2458},[324,153950,151956],{"class":867},[324,153952,151959],{"class":738},[324,153954,88558],{"class":867},[324,153956,153957,153959,153961],{"class":326,"line":2463},[324,153958,151956],{"class":867},[324,153960,63401],{"class":738},[324,153962,88558],{"class":867},[324,153964,153965,153967,153969],{"class":326,"line":2480},[324,153966,151956],{"class":867},[324,153968,69846],{"class":738},[324,153970,88558],{"class":867},[324,153972,153973,153975,153977],{"class":326,"line":2485},[324,153974,151956],{"class":867},[324,153976,151984],{"class":738},[324,153978,88558],{"class":867},[324,153980,153981],{"class":326,"line":2490},[324,153982,38848],{"class":867},[19,153984,153985],{},"管理器示意：",[316,153987,153989],{"className":31100,"code":153988,"language":31102,"meta":50,"style":50},"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",[269,153990,153991,154000,154008,154019,154023,154033,154046,154057,154064,154070,154074,154083,154092,154098,154105],{"__ignoreMap":50},[324,153992,153993,153995,153998],{"class":326,"line":327},[324,153994,15423],{"class":863},[324,153996,153997],{"class":734}," StudentManager",[324,153999,4468],{"class":867},[324,154001,154002,154004,154006],{"class":326,"line":203},[324,154003,31523],{"class":863},[324,154005,31526],{"class":916},[324,154007,31529],{"class":867},[324,154009,154010,154012,154015,154017],{"class":326,"line":338},[324,154011,31567],{"class":916},[324,154013,154014],{"class":867},".students ",[324,154016,913],{"class":863},[324,154018,52560],{"class":867},[324,154020,154021],{"class":326,"line":344},[324,154022,488],{"emptyLinePlaceholder":487},[324,154024,154025,154027,154030],{"class":326,"line":484},[324,154026,31523],{"class":863},[324,154028,154029],{"class":734}," find_by_id",[324,154031,154032],{"class":867},"(self, student_id):\n",[324,154034,154035,154037,154039,154041,154043],{"class":326,"line":491},[324,154036,4132],{"class":863},[324,154038,152649],{"class":867},[324,154040,26767],{"class":863},[324,154042,39595],{"class":916},[324,154044,154045],{"class":867},".students:\n",[324,154047,154048,154050,154053,154055],{"class":326,"line":496},[324,154049,5371],{"class":863},[324,154051,154052],{"class":867}," student.student_id ",[324,154054,3678],{"class":863},[324,154056,152670],{"class":867},[324,154058,154059,154062],{"class":326,"line":502},[324,154060,154061],{"class":863},"                return",[324,154063,152677],{"class":867},[324,154065,154066,154068],{"class":326,"line":508},[324,154067,15481],{"class":863},[324,154069,152684],{"class":916},[324,154071,154072],{"class":326,"line":514},[324,154073,488],{"emptyLinePlaceholder":487},[324,154075,154076,154078,154080],{"class":326,"line":2343},[324,154077,31523],{"class":863},[324,154079,5938],{"class":734},[324,154081,154082],{"class":867},"(self, student):\n",[324,154084,154085,154087,154089],{"class":326,"line":2348},[324,154086,3226],{"class":863},[324,154088,39595],{"class":916},[324,154090,154091],{"class":867},".find_by_id(student.student_id):\n",[324,154093,154094,154096],{"class":326,"line":2354},[324,154095,16461],{"class":863},[324,154097,126319],{"class":916},[324,154099,154100,154102],{"class":326,"line":2359},[324,154101,31567],{"class":916},[324,154103,154104],{"class":867},".students.append(student)\n",[324,154106,154107,154109],{"class":326,"line":2373},[324,154108,15481],{"class":863},[324,154110,154111],{"class":916}," True\n",[19,154113,154114],{},"如果项目逻辑越来越多，面向对象版会比纯函数版更容易扩展。",[14,154116,154118],{"id":154117},"_125-项目二销售数据统计","12.5 项目二：销售数据统计",[35,154120,154122],{"id":154121},"_1251-数据结构","12.5.1 数据结构",[316,154124,154126],{"className":31100,"code":154125,"language":31102,"meta":50,"style":50},"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",[269,154127,154128,154136,154167,154197,154226,154255],{"__ignoreMap":50},[324,154129,154130,154132,154134],{"class":326,"line":327},[324,154131,148977],{"class":867},[324,154133,913],{"class":863},[324,154135,56169],{"class":867},[324,154137,154138,154140,154142,154144,154146,154148,154151,154153,154156,154158,154160,154162,154165],{"class":326,"line":203},[324,154139,148897],{"class":867},[324,154141,148509],{"class":738},[324,154143,52159],{"class":867},[324,154145,149120],{"class":738},[324,154147,13164],{"class":867},[324,154149,154150],{"class":738},"\"category\"",[324,154152,52159],{"class":867},[324,154154,154155],{"class":738},"\"手机\"",[324,154157,13164],{"class":867},[324,154159,84806],{"class":738},[324,154161,52159],{"class":867},[324,154163,154164],{"class":916},"12000",[324,154166,5659],{"class":867},[324,154168,154169,154171,154173,154175,154177,154179,154181,154183,154186,154188,154190,154192,154195],{"class":326,"line":338},[324,154170,148897],{"class":867},[324,154172,148509],{"class":738},[324,154174,52159],{"class":867},[324,154176,149120],{"class":738},[324,154178,13164],{"class":867},[324,154180,154150],{"class":738},[324,154182,52159],{"class":867},[324,154184,154185],{"class":738},"\"电脑\"",[324,154187,13164],{"class":867},[324,154189,84806],{"class":738},[324,154191,52159],{"class":867},[324,154193,154194],{"class":916},"18000",[324,154196,5659],{"class":867},[324,154198,154199,154201,154203,154205,154207,154209,154211,154213,154215,154217,154219,154221,154224],{"class":326,"line":344},[324,154200,148897],{"class":867},[324,154202,148509],{"class":738},[324,154204,52159],{"class":867},[324,154206,149141],{"class":738},[324,154208,13164],{"class":867},[324,154210,154150],{"class":738},[324,154212,52159],{"class":867},[324,154214,154155],{"class":738},[324,154216,13164],{"class":867},[324,154218,84806],{"class":738},[324,154220,52159],{"class":867},[324,154222,154223],{"class":916},"15000",[324,154225,5659],{"class":867},[324,154227,154228,154230,154232,154234,154236,154238,154240,154242,154244,154246,154248,154250,154253],{"class":326,"line":484},[324,154229,148897],{"class":867},[324,154231,148509],{"class":738},[324,154233,52159],{"class":867},[324,154235,149141],{"class":738},[324,154237,13164],{"class":867},[324,154239,154150],{"class":738},[324,154241,52159],{"class":867},[324,154243,154185],{"class":738},[324,154245,13164],{"class":867},[324,154247,84806],{"class":738},[324,154249,52159],{"class":867},[324,154251,154252],{"class":916},"16000",[324,154254,5659],{"class":867},[324,154256,154257],{"class":326,"line":491},[324,154258,33968],{"class":867},[35,154260,154262],{"id":154261},"_1252-按日期统计","12.5.2 按日期统计",[316,154264,154266],{"className":31100,"code":154265,"language":31102,"meta":50,"style":50},"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",[269,154267,154268,154277,154281,154292,154306,154319,154338,154342],{"__ignoreMap":50},[324,154269,154270,154273,154275],{"class":326,"line":327},[324,154271,154272],{"class":867},"daily_total ",[324,154274,913],{"class":863},[324,154276,88590],{"class":867},[324,154278,154279],{"class":326,"line":203},[324,154280,488],{"emptyLinePlaceholder":487},[324,154282,154283,154285,154287,154289],{"class":326,"line":338},[324,154284,3754],{"class":863},[324,154286,148721],{"class":867},[324,154288,26767],{"class":863},[324,154290,154291],{"class":867}," sales:\n",[324,154293,154294,154297,154299,154302,154304],{"class":326,"line":344},[324,154295,154296],{"class":867},"    date ",[324,154298,913],{"class":863},[324,154300,154301],{"class":867}," item[",[324,154303,148509],{"class":738},[324,154305,33968],{"class":867},[324,154307,154308,154311,154313,154315,154317],{"class":326,"line":484},[324,154309,154310],{"class":867},"    amount ",[324,154312,913],{"class":863},[324,154314,154301],{"class":867},[324,154316,84806],{"class":738},[324,154318,33968],{"class":867},[324,154320,154321,154324,154326,154329,154331,154333,154335],{"class":326,"line":491},[324,154322,154323],{"class":867},"    daily_total[date] ",[324,154325,913],{"class":863},[324,154327,154328],{"class":867}," daily_total.get(date, ",[324,154330,1056],{"class":916},[324,154332,14443],{"class":867},[324,154334,1345],{"class":863},[324,154336,154337],{"class":867}," amount\n",[324,154339,154340],{"class":326,"line":496},[324,154341,488],{"emptyLinePlaceholder":487},[324,154343,154344,154346],{"class":326,"line":502},[324,154345,31137],{"class":916},[324,154347,154348],{"class":867},"(daily_total)\n",[35,154350,154352],{"id":154351},"_1253-按类别统计","12.5.3 按类别统计",[316,154354,154356],{"className":31100,"code":154355,"language":31102,"meta":50,"style":50},"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",[269,154357,154358,154367,154371,154381,154394,154406,154424,154428],{"__ignoreMap":50},[324,154359,154360,154363,154365],{"class":326,"line":327},[324,154361,154362],{"class":867},"category_total ",[324,154364,913],{"class":863},[324,154366,88590],{"class":867},[324,154368,154369],{"class":326,"line":203},[324,154370,488],{"emptyLinePlaceholder":487},[324,154372,154373,154375,154377,154379],{"class":326,"line":338},[324,154374,3754],{"class":863},[324,154376,148721],{"class":867},[324,154378,26767],{"class":863},[324,154380,154291],{"class":867},[324,154382,154383,154386,154388,154390,154392],{"class":326,"line":344},[324,154384,154385],{"class":867},"    category ",[324,154387,913],{"class":863},[324,154389,154301],{"class":867},[324,154391,154150],{"class":738},[324,154393,33968],{"class":867},[324,154395,154396,154398,154400,154402,154404],{"class":326,"line":484},[324,154397,154310],{"class":867},[324,154399,913],{"class":863},[324,154401,154301],{"class":867},[324,154403,84806],{"class":738},[324,154405,33968],{"class":867},[324,154407,154408,154411,154413,154416,154418,154420,154422],{"class":326,"line":491},[324,154409,154410],{"class":867},"    category_total[category] ",[324,154412,913],{"class":863},[324,154414,154415],{"class":867}," category_total.get(category, ",[324,154417,1056],{"class":916},[324,154419,14443],{"class":867},[324,154421,1345],{"class":863},[324,154423,154337],{"class":867},[324,154425,154426],{"class":326,"line":496},[324,154427,488],{"emptyLinePlaceholder":487},[324,154429,154430,154432],{"class":326,"line":502},[324,154431,31137],{"class":916},[324,154433,154434],{"class":867},"(category_total)\n",[35,154436,154438],{"id":154437},"_1254-找销售额最高的一天","12.5.4 找销售额最高的一天",[316,154440,154442],{"className":31100,"code":154441,"language":31102,"meta":50,"style":50},"top_date, top_amount = max(daily_total.items(), key=lambda item: item[1])\nprint(top_date, top_amount)\n",[269,154443,154444,154469],{"__ignoreMap":50},[324,154445,154446,154449,154451,154453,154456,154459,154462,154465,154467],{"class":326,"line":327},[324,154447,154448],{"class":867},"top_date, top_amount ",[324,154450,913],{"class":863},[324,154452,6680],{"class":916},[324,154454,154455],{"class":867},"(daily_total.items(), ",[324,154457,154458],{"class":5945},"key",[324,154460,154461],{"class":863},"=lambda",[324,154463,154464],{"class":867}," item: item[",[324,154466,1082],{"class":916},[324,154468,5386],{"class":867},[324,154470,154471,154473],{"class":326,"line":203},[324,154472,31137],{"class":916},[324,154474,154475],{"class":867},"(top_date, top_amount)\n",[14,154477,154479],{"id":154478},"_126-绘制柱状图","12.6 绘制柱状图",[316,154481,154483],{"className":31100,"code":154482,"language":31102,"meta":50,"style":50},"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",[269,154484,154485,154499,154510,154514,154522,154534,154546,154557,154561,154565,154575,154586,154600,154605,154622,154639,154655,154659],{"__ignoreMap":50},[324,154486,154487,154489,154491,154493,154495,154497],{"class":326,"line":327},[324,154488,31459],{"class":863},[324,154490,147891],{"class":867},[324,154492,31114],{"class":863},[324,154494,147896],{"class":867},[324,154496,32105],{"class":863},[324,154498,147901],{"class":867},[324,154500,154501,154503,154505,154507],{"class":326,"line":203},[324,154502,31459],{"class":863},[324,154504,147750],{"class":867},[324,154506,31114],{"class":863},[324,154508,154509],{"class":867}," Bar\n",[324,154511,154512],{"class":326,"line":338},[324,154513,488],{"emptyLinePlaceholder":487},[324,154515,154516,154518,154520],{"class":326,"line":344},[324,154517,154362],{"class":867},[324,154519,913],{"class":863},[324,154521,16301],{"class":867},[324,154523,154524,154527,154529,154532],{"class":326,"line":484},[324,154525,154526],{"class":738},"    \"手机\"",[324,154528,52159],{"class":867},[324,154530,154531],{"class":916},"27000",[324,154533,32188],{"class":867},[324,154535,154536,154539,154541,154544],{"class":326,"line":491},[324,154537,154538],{"class":738},"    \"电脑\"",[324,154540,52159],{"class":867},[324,154542,154543],{"class":916},"34000",[324,154545,32188],{"class":867},[324,154547,154548,154551,154553,154555],{"class":326,"line":496},[324,154549,154550],{"class":738},"    \"耳机\"",[324,154552,52159],{"class":867},[324,154554,124911],{"class":916},[324,154556,32188],{"class":867},[324,154558,154559],{"class":326,"line":502},[324,154560,2296],{"class":867},[324,154562,154563],{"class":326,"line":508},[324,154564,488],{"emptyLinePlaceholder":487},[324,154566,154567,154570,154572],{"class":326,"line":514},[324,154568,154569],{"class":867},"bar ",[324,154571,913],{"class":863},[324,154573,154574],{"class":867}," Bar()\n",[324,154576,154577,154580,154583],{"class":326,"line":2343},[324,154578,154579],{"class":867},"bar.add_xaxis(",[324,154581,154582],{"class":916},"list",[324,154584,154585],{"class":867},"(category_total.keys()))\n",[324,154587,154588,154591,154593,154595,154597],{"class":326,"line":2348},[324,154589,154590],{"class":867},"bar.add_yaxis(",[324,154592,147807],{"class":738},[324,154594,13164],{"class":867},[324,154596,154582],{"class":916},[324,154598,154599],{"class":867},"(category_total.values()))\n",[324,154601,154602],{"class":326,"line":2354},[324,154603,154604],{"class":867},"bar.set_global_opts(\n",[324,154606,154607,154609,154611,154613,154615,154617,154620],{"class":326,"line":2359},[324,154608,147985],{"class":5945},[324,154610,913],{"class":863},[324,154612,147990],{"class":867},[324,154614,52129],{"class":5945},[324,154616,913],{"class":863},[324,154618,154619],{"class":738},"\"品类销售额\"",[324,154621,38769],{"class":867},[324,154623,154624,154626,154628,154630,154632,154634,154637],{"class":326,"line":2373},[324,154625,148004],{"class":5945},[324,154627,913],{"class":863},[324,154629,148009],{"class":867},[324,154631,80532],{"class":5945},[324,154633,913],{"class":863},[324,154635,154636],{"class":738},"\"品类\"",[324,154638,38769],{"class":867},[324,154640,154641,154643,154645,154647,154649,154651,154653],{"class":326,"line":2378},[324,154642,148023],{"class":5945},[324,154644,913],{"class":863},[324,154646,148009],{"class":867},[324,154648,80532],{"class":5945},[324,154650,913],{"class":863},[324,154652,147807],{"class":738},[324,154654,38769],{"class":867},[324,154656,154657],{"class":326,"line":2384},[324,154658,874],{"class":867},[324,154660,154661,154664,154667],{"class":326,"line":2405},[324,154662,154663],{"class":867},"bar.render(",[324,154665,154666],{"class":738},"\"category_sales.html\"",[324,154668,874],{"class":867},[14,154670,154672],{"id":154671},"_127-绘制时间线柱状图","12.7 绘制时间线柱状图",[19,154674,154675],{},"时间线适合展示不同日期、月份、年份的数据变化。",[316,154677,154679],{"className":31100,"code":154678,"language":31102,"meta":50,"style":50},"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",[269,154680,154681,154695,154706,154710,154718,154742,154765,154790,154794,154798,154808,154812,154823,154832,154842,154856,154887,154892,154896],{"__ignoreMap":50},[324,154682,154683,154685,154687,154689,154691,154693],{"class":326,"line":327},[324,154684,31459],{"class":863},[324,154686,147891],{"class":867},[324,154688,31114],{"class":863},[324,154690,147896],{"class":867},[324,154692,32105],{"class":863},[324,154694,147901],{"class":867},[324,154696,154697,154699,154701,154703],{"class":326,"line":203},[324,154698,31459],{"class":863},[324,154700,147750],{"class":867},[324,154702,31114],{"class":863},[324,154704,154705],{"class":867}," Bar, Timeline\n",[324,154707,154708],{"class":326,"line":338},[324,154709,488],{"emptyLinePlaceholder":487},[324,154711,154712,154714,154716],{"class":326,"line":344},[324,154713,102379],{"class":867},[324,154715,913],{"class":863},[324,154717,16301],{"class":867},[324,154719,154720,154723,154726,154728,154730,154732,154734,154736,154738,154740],{"class":326,"line":484},[324,154721,154722],{"class":738},"    \"2024-10-01\"",[324,154724,154725],{"class":867},": {",[324,154727,154155],{"class":738},[324,154729,52159],{"class":867},[324,154731,154164],{"class":916},[324,154733,13164],{"class":867},[324,154735,154185],{"class":738},[324,154737,52159],{"class":867},[324,154739,154194],{"class":916},[324,154741,5659],{"class":867},[324,154743,154744,154747,154749,154751,154753,154755,154757,154759,154761,154763],{"class":326,"line":491},[324,154745,154746],{"class":738},"    \"2024-10-02\"",[324,154748,154725],{"class":867},[324,154750,154155],{"class":738},[324,154752,52159],{"class":867},[324,154754,154223],{"class":916},[324,154756,13164],{"class":867},[324,154758,154185],{"class":738},[324,154760,52159],{"class":867},[324,154762,154252],{"class":916},[324,154764,5659],{"class":867},[324,154766,154767,154770,154772,154774,154776,154779,154781,154783,154785,154788],{"class":326,"line":496},[324,154768,154769],{"class":738},"    \"2024-10-03\"",[324,154771,154725],{"class":867},[324,154773,154155],{"class":738},[324,154775,52159],{"class":867},[324,154777,154778],{"class":916},"17000",[324,154780,13164],{"class":867},[324,154782,154185],{"class":738},[324,154784,52159],{"class":867},[324,154786,154787],{"class":916},"19000",[324,154789,5659],{"class":867},[324,154791,154792],{"class":326,"line":502},[324,154793,2296],{"class":867},[324,154795,154796],{"class":326,"line":508},[324,154797,488],{"emptyLinePlaceholder":487},[324,154799,154800,154803,154805],{"class":326,"line":514},[324,154801,154802],{"class":867},"timeline ",[324,154804,913],{"class":863},[324,154806,154807],{"class":867}," Timeline()\n",[324,154809,154810],{"class":326,"line":2343},[324,154811,488],{"emptyLinePlaceholder":487},[324,154813,154814,154816,154819,154821],{"class":326,"line":2348},[324,154815,3754],{"class":863},[324,154817,154818],{"class":867}," date, category_data ",[324,154820,26767],{"class":863},[324,154822,149660],{"class":867},[324,154824,154825,154828,154830],{"class":326,"line":2354},[324,154826,154827],{"class":867},"    bar ",[324,154829,913],{"class":863},[324,154831,154574],{"class":867},[324,154833,154834,154837,154839],{"class":326,"line":2359},[324,154835,154836],{"class":867},"    bar.add_xaxis(",[324,154838,154582],{"class":916},[324,154840,154841],{"class":867},"(category_data.keys()))\n",[324,154843,154844,154847,154849,154851,154853],{"class":326,"line":2373},[324,154845,154846],{"class":867},"    bar.add_yaxis(",[324,154848,147807],{"class":738},[324,154850,13164],{"class":867},[324,154852,154582],{"class":916},[324,154854,154855],{"class":867},"(category_data.values()))\n",[324,154857,154858,154861,154864,154866,154868,154870,154872,154874,154876,154878,154880,154882,154885],{"class":326,"line":2378},[324,154859,154860],{"class":867},"    bar.set_global_opts(",[324,154862,154863],{"class":5945},"title_opts",[324,154865,913],{"class":863},[324,154867,147990],{"class":867},[324,154869,52129],{"class":5945},[324,154871,913],{"class":863},[324,154873,920],{"class":863},[324,154875,1115],{"class":738},[324,154877,1760],{"class":916},[324,154879,74648],{"class":867},[324,154881,1810],{"class":916},[324,154883,154884],{"class":738},"销售额\"",[324,154886,31219],{"class":867},[324,154888,154889],{"class":326,"line":2384},[324,154890,154891],{"class":867},"    timeline.add(bar, date)\n",[324,154893,154894],{"class":326,"line":2405},[324,154895,488],{"emptyLinePlaceholder":487},[324,154897,154898,154901,154904],{"class":326,"line":2410},[324,154899,154900],{"class":867},"timeline.render(",[324,154902,154903],{"class":738},"\"timeline_sales.html\"",[324,154905,874],{"class":867},[14,154907,154909],{"id":154908},"_128-绘制地图","12.8 绘制地图",[19,154911,154912],{},"地图适合展示地区数据。",[316,154914,154916],{"className":31100,"code":154915,"language":31102,"meta":50,"style":50},"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",[269,154917,154918,154932,154943,154947,154955,154968,154980,154993,155006,155010,155014,155024,155039,155044,155061,155080,155084],{"__ignoreMap":50},[324,154919,154920,154922,154924,154926,154928,154930],{"class":326,"line":327},[324,154921,31459],{"class":863},[324,154923,147891],{"class":867},[324,154925,31114],{"class":863},[324,154927,147896],{"class":867},[324,154929,32105],{"class":863},[324,154931,147901],{"class":867},[324,154933,154934,154936,154938,154940],{"class":326,"line":203},[324,154935,31459],{"class":863},[324,154937,147750],{"class":867},[324,154939,31114],{"class":863},[324,154941,154942],{"class":867}," Map\n",[324,154944,154945],{"class":326,"line":338},[324,154946,488],{"emptyLinePlaceholder":487},[324,154948,154949,154951,154953],{"class":326,"line":344},[324,154950,102379],{"class":867},[324,154952,913],{"class":863},[324,154954,56169],{"class":867},[324,154956,154957,154960,154962,154964,154966],{"class":326,"line":484},[324,154958,154959],{"class":867},"    (",[324,154961,69991],{"class":738},[324,154963,13164],{"class":867},[324,154965,1681],{"class":916},[324,154967,38769],{"class":867},[324,154969,154970,154972,154974,154976,154978],{"class":326,"line":491},[324,154971,154959],{"class":867},[324,154973,70011],{"class":738},[324,154975,13164],{"class":867},[324,154977,147824],{"class":916},[324,154979,38769],{"class":867},[324,154981,154982,154984,154987,154989,154991],{"class":326,"line":496},[324,154983,154959],{"class":867},[324,154985,154986],{"class":738},"\"广东\"",[324,154988,13164],{"class":867},[324,154990,2453],{"class":916},[324,154992,38769],{"class":867},[324,154994,154995,154997,155000,155002,155004],{"class":326,"line":502},[324,154996,154959],{"class":867},[324,154998,154999],{"class":738},"\"浙江\"",[324,155001,13164],{"class":867},[324,155003,147829],{"class":916},[324,155005,38769],{"class":867},[324,155007,155008],{"class":326,"line":508},[324,155009,33968],{"class":867},[324,155011,155012],{"class":326,"line":514},[324,155013,488],{"emptyLinePlaceholder":487},[324,155015,155016,155019,155021],{"class":326,"line":2343},[324,155017,155018],{"class":867},"map_chart ",[324,155020,913],{"class":863},[324,155022,155023],{"class":867}," Map()\n",[324,155025,155026,155029,155031,155034,155037],{"class":326,"line":2348},[324,155027,155028],{"class":867},"map_chart.add(",[324,155030,147807],{"class":738},[324,155032,155033],{"class":867},", data, ",[324,155035,155036],{"class":738},"\"china\"",[324,155038,874],{"class":867},[324,155040,155041],{"class":326,"line":2354},[324,155042,155043],{"class":867},"map_chart.set_global_opts(\n",[324,155045,155046,155048,155050,155052,155054,155056,155059],{"class":326,"line":2359},[324,155047,147985],{"class":5945},[324,155049,913],{"class":863},[324,155051,147990],{"class":867},[324,155053,52129],{"class":5945},[324,155055,913],{"class":863},[324,155057,155058],{"class":738},"\"地区销售额\"",[324,155060,38769],{"class":867},[324,155062,155063,155066,155068,155071,155074,155076,155078],{"class":326,"line":2373},[324,155064,155065],{"class":5945},"    visualmap_opts",[324,155067,913],{"class":863},[324,155069,155070],{"class":867},"opts.VisualMapOpts(",[324,155072,155073],{"class":5945},"max_",[324,155075,913],{"class":863},[324,155077,2453],{"class":916},[324,155079,38769],{"class":867},[324,155081,155082],{"class":326,"line":2378},[324,155083,874],{"class":867},[324,155085,155086,155089,155092],{"class":326,"line":2384},[324,155087,155088],{"class":867},"map_chart.render(",[324,155090,155091],{"class":738},"\"map_sales.html\"",[324,155093,874],{"class":867},[19,155095,155096],{},"地图数据的地区名称要和 pyecharts 内置地图名称匹配，否则可能显示不出来。",[14,155098,155100],{"id":155099},"_129-项目拆分建议","12.9 项目拆分建议",[19,155102,155103],{},"当代码超过一个文件时，可以这样组织：",[316,155105,155108],{"className":155106,"code":155107,"language":5916,"meta":50},[5914],"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",[269,155109,155107],{"__ignoreMap":50},[19,155111,155112],{},"职责：",[192,155114,155115,155121,155127,155133],{},[195,155116,155117,155120],{},[269,155118,155119],{},"main.py","：程序入口。",[195,155122,155123,155126],{},[269,155124,155125],{},"file_utils.py","：读写 JSON。",[195,155128,155129,155132],{},[269,155130,155131],{},"sales_service.py","：统计销售数据。",[195,155134,155135,155138],{},[269,155136,155137],{},"chart_builder.py","：生成图表。",[14,155140,155142],{"id":155141},"_1210-python基础复习清单","12.10 Python基础复习清单",[19,155144,155145],{},"语法基础：",[192,155147,155148,155151,155154,155157],{},[195,155149,155150],{},"会写变量、注释、输入输出。",[195,155152,155153],{},"会使用 int、float、str、bool。",[195,155155,155156],{},"会做类型转换。",[195,155158,155159],{},"会使用 f-string 格式化输出。",[19,155161,155162],{},"流程控制：",[192,155164,155165,155171,155177,155185],{},[195,155166,155167,155168,29107],{},"会写 ",[269,155169,155170],{},"if elif else",[195,155172,155167,155173,300,155175,29107],{},[269,155174,109384],{},[269,155176,3754],{},[195,155178,155179,155180,300,155182,29107],{},"理解 ",[269,155181,2783],{},[269,155183,155184],{},"continue",[195,155186,155187],{},"能写嵌套循环。",[19,155189,155190],{},"函数：",[192,155192,155193,155196,155199,155202],{},[195,155194,155195],{},"会定义和调用函数。",[195,155197,155198],{},"理解参数和返回值。",[195,155200,155201],{},"知道局部变量和全局变量。",[195,155203,155204],{},"会使用默认参数、关键字参数、不定长参数。",[19,155206,155207],{},"容器：",[192,155209,155210,155213,155216,155219,155222],{},[195,155211,155212],{},"会使用列表增删改查。",[195,155214,155215],{},"会遍历列表、字典。",[195,155217,155218],{},"会使用切片。",[195,155220,155221],{},"会用集合去重。",[195,155223,155224],{},"会处理列表嵌套字典。",[19,155226,155227],{},"文件和模块：",[192,155229,155230,155233,155236,155239,155242],{},[195,155231,155232],{},"会读写文本文件。",[195,155234,155235],{},"会读写 JSON。",[195,155237,155238],{},"会捕获常见异常。",[195,155240,155241],{},"会导入模块和第三方包。",[195,155243,155244],{},"会创建简单包结构。",[19,155246,155247],{},"项目能力：",[192,155249,155250,155253,155256,155259,155262],{},[195,155251,155252],{},"能把代码拆成函数。",[195,155254,155255],{},"能把数据保存到文件。",[195,155257,155258],{},"能处理用户输入错误。",[195,155260,155261],{},"能写一个完整菜单程序。",[195,155263,155264],{},"能用 pyecharts 生成图表。",[14,155266,155268],{"id":155267},"_1211-推荐练习顺序","12.11 推荐练习顺序",[192,155270,155271,155274,155277,155280,155283,155286,155289,155292],{},[195,155272,155273],{},"猜数字游戏。",[195,155275,155276],{},"ATM 菜单程序。",[195,155278,155279],{},"学生成绩统计。",[195,155281,155282],{},"学生管理系统函数版。",[195,155284,155285],{},"学生管理系统文件持久化版。",[195,155287,155288],{},"学生管理系统面向对象版。",[195,155290,155291],{},"销售数据统计。",[195,155293,155294],{},"销售数据可视化。",[14,155296,155298],{"id":155297},"_1212-常见学习误区","12.12 常见学习误区",[192,155300,155301,155304,155307,155310,155313,155316,155319],{},[195,155302,155303],{},"只看视频不敲代码。",[195,155305,155306],{},"一报错就复制错误去搜，不先读报错位置。",[195,155308,155309],{},"变量名随便写，后续自己看不懂。",[195,155311,155312],{},"所有代码都写在一个文件一个函数里。",[195,155314,155315],{},"不保存练习代码，复习时没有材料。",[195,155317,155318],{},"还没掌握列表字典就急着学框架。",[195,155320,155321],{},"不会读官方文档，只依赖教程。",[14,155323,155325],{"id":155324},"_1213-如何读报错","12.13 如何读报错",[19,155327,155328],{},"报错通常从下往上看最后几行。",[19,155330,15864],{},[316,155332,155335],{"className":155333,"code":155334,"language":5916,"meta":50},[5914],"ValueError: invalid literal for int() with base 10: 'abc'\n",[269,155336,155334],{"__ignoreMap":50},[19,155338,25324],{},[192,155340,155341,155347,155357],{},[195,155342,155343,155344,29107],{},"异常类型是 ",[269,155345,155346],{},"ValueError",[195,155348,108066,155349,155352,155353,155356],{},[269,155350,155351],{},"int()"," 无法把 ",[269,155354,155355],{},"'abc'"," 转成整数。",[195,155358,155359],{},"应该检查输入内容或增加异常处理。",[19,155361,155362],{},"再看文件名和行号：",[316,155364,155367],{"className":155365,"code":155366,"language":5916,"meta":50},[5914],"File \"main.py\", line 10, in \u003Cmodule>\n",[269,155368,155366],{"__ignoreMap":50},[19,155370,155371,155372,155374],{},"表示错误发生在 ",[269,155373,155119],{}," 第 10 行。",[14,155376,155378],{"id":155377},"_1214-后续学习方向","12.14 后续学习方向",[19,155380,155381],{},"Python 基础完成后，可以按兴趣选择方向：",[192,155383,155384,155396,155405,155417,155428,155437,155447],{},[195,155385,155386,155387,1077,155390,1077,155393,29107],{},"自动化办公：",[269,155388,155389],{},"openpyxl",[269,155391,155392],{},"python-docx",[269,155394,155395],{},"pdfplumber",[195,155397,155398,155399,1077,155401,1077,155403,29107],{},"数据分析：",[269,155400,101348],{},[269,155402,146697],{},[269,155404,146705],{},[195,155406,155407,155408,1077,155411,1077,155414,29107],{},"Web 后端：",[269,155409,155410],{},"Flask",[269,155412,155413],{},"FastAPI",[269,155415,155416],{},"Django",[195,155418,155419,155420,1077,155422,1077,155425,29107],{},"爬虫：",[269,155421,146682],{},[269,155423,155424],{},"BeautifulSoup",[269,155426,155427],{},"Scrapy",[195,155429,155430,155431,1077,155433,155436],{},"测试开发：",[269,155432,146729],{},[269,155434,155435],{},"selenium","、接口测试。",[195,155438,155439,155440,1077,155442,1077,155444,29107],{},"人工智能：",[269,155441,101348],{},[269,155443,146697],{},[269,155445,155446],{},"pytorch",[195,155448,155449,155450,1077,155452,1077,155455,29107],{},"运维脚本：",[269,155451,146298],{},[269,155453,155454],{},"subprocess",[269,155456,155457],{},"paramiko",[19,155459,155460],{},"不要所有方向同时学。先把 Python 基础和一个小项目做扎实，再选择方向。",[14,155462,155464],{"id":155463},"_1215-结课练习","12.15 结课练习",[192,155466,155467,155470,155473,155476,155479,155482,155485,155488],{},[195,155468,155469],{},"完成函数版学生管理系统。",[195,155471,155472],{},"给学生管理系统增加 JSON 持久化。",[195,155474,155475],{},"给学生管理系统增加异常处理。",[195,155477,155478],{},"把学生管理系统改成面向对象版。",[195,155480,155481],{},"使用 pyecharts 绘制学生成绩柱状图。",[195,155483,155484],{},"读取销售 JSON 数据，统计每日销售额并绘制折线图。",[195,155486,155487],{},"按品类统计销售额并绘制柱状图。",[195,155489,155490],{},"写一份自己的 Python 学习路线图。",[775,155492,155493],{},"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":50,"searchDepth":203,"depth":203,"links":155495},[155496,155497,155500,155501,155502,155508,155509,155510,155511,155512,155513,155514,155515,155516,155517],{"id":152212,"depth":203,"text":152213},{"id":152262,"depth":203,"text":152263,"children":155498},[155499],{"id":152266,"depth":338,"text":152267},{"id":152305,"depth":203,"text":152306},{"id":153779,"depth":203,"text":153780},{"id":154117,"depth":203,"text":154118,"children":155503},[155504,155505,155506,155507],{"id":154121,"depth":338,"text":154122},{"id":154261,"depth":338,"text":154262},{"id":154351,"depth":338,"text":154352},{"id":154437,"depth":338,"text":154438},{"id":154478,"depth":203,"text":154479},{"id":154671,"depth":203,"text":154672},{"id":154908,"depth":203,"text":154909},{"id":155099,"depth":203,"text":155100},{"id":155141,"depth":203,"text":155142},{"id":155267,"depth":203,"text":155268},{"id":155297,"depth":203,"text":155298},{"id":155324,"depth":203,"text":155325},{"id":155377,"depth":203,"text":155378},{"id":155463,"depth":203,"text":155464},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch12",{"title":152204,"description":791},"wiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线","h907wRG7YTTH927q6GLXFHGSldmwlkML7UOavkE6n1E",{"id":155524,"title":155525,"body":155526,"description":791,"extension":792,"meta":157995,"navigation":487,"path":157996,"seo":157997,"stem":157998,"__hash__":157999},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串.md","2. 基础语法、变量与字符串",{"type":7,"value":155527,"toc":157970},[155528,155531,155535,155538,155541,155561,155564,155587,155590,155593,155615,155618,155640,155644,155647,155687,155690,155811,155815,155818,155858,155861,155885,155888,155892,155895,155909,155942,155945,155980,155983,156006,156009,156042,156045,156047,156053,156128,156131,156137,156154,156194,156198,156201,156247,156249,156287,156290,156325,156328,156363,156366,156398,156401,156420,156424,156428,156541,156543,156618,156622,156668,156671,156697,156706,156710,156713,156776,156784,156812,156816,156856,156921,156925,156928,156967,156970,157015,157018,157079,157083,157110,157113,157141,157144,157148,157152,157217,157220,157258,157261,157293,157297,157396,157400,157403,157476,157479,157527,157531,157537,157577,157580,157627,157630,157679,157683,157685,157699,157701,157882,157886,157913,157933,157940,157944,157961,157967],[10,155529,155525],{"id":155530},"_2-基础语法变量与字符串",[14,155532,155534],{"id":155533},"_21-注释","2.1 注释",[19,155536,155537],{},"注释是给人看的说明文字，不会被 Python 执行。",[19,155539,155540],{},"单行注释：",[316,155542,155544],{"className":31100,"code":155543,"language":31102,"meta":50,"style":50},"# 这是单行注释\nprint(\"hello\")\n",[269,155545,155546,155551],{"__ignoreMap":50},[324,155547,155548],{"class":326,"line":327},[324,155549,155550],{"class":772},"# 这是单行注释\n",[324,155552,155553,155555,155557,155559],{"class":326,"line":203},[324,155554,31137],{"class":916},[324,155556,868],{"class":867},[324,155558,6573],{"class":738},[324,155560,874],{"class":867},[19,155562,155563],{},"多行说明常用三引号：",[316,155565,155567],{"className":31100,"code":155566,"language":31102,"meta":50,"style":50},"\"\"\"\n这是多行说明。\n常用于文件顶部说明、函数说明等。\n\"\"\"\n",[269,155568,155569,155573,155578,155583],{"__ignoreMap":50},[324,155570,155571],{"class":326,"line":327},[324,155572,96420],{"class":738},[324,155574,155575],{"class":326,"line":203},[324,155576,155577],{"class":738},"这是多行说明。\n",[324,155579,155580],{"class":326,"line":338},[324,155581,155582],{"class":738},"常用于文件顶部说明、函数说明等。\n",[324,155584,155585],{"class":326,"line":344},[324,155586,96420],{"class":738},[19,155588,155589],{},"实际写代码时，注释不要解释显而易见的内容，而要解释意图。",[19,155591,155592],{},"不好：",[316,155594,155596],{"className":31100,"code":155595,"language":31102,"meta":50,"style":50},"# age 加 1\nage = age + 1\n",[269,155597,155598,155603],{"__ignoreMap":50},[324,155599,155600],{"class":326,"line":327},[324,155601,155602],{"class":772},"# age 加 1\n",[324,155604,155605,155607,155609,155611,155613],{"class":326,"line":203},[324,155606,147058],{"class":867},[324,155608,913],{"class":863},[324,155610,16436],{"class":867},[324,155612,1345],{"class":863},[324,155614,56421],{"class":916},[19,155616,155617],{},"较好：",[316,155619,155621],{"className":31100,"code":155620,"language":31102,"meta":50,"style":50},"# 用户过完生日后，年龄增加一岁\nage = age + 1\n",[269,155622,155623,155628],{"__ignoreMap":50},[324,155624,155625],{"class":326,"line":327},[324,155626,155627],{"class":772},"# 用户过完生日后，年龄增加一岁\n",[324,155629,155630,155632,155634,155636,155638],{"class":326,"line":203},[324,155631,147058],{"class":867},[324,155633,913],{"class":863},[324,155635,16436],{"class":867},[324,155637,1345],{"class":863},[324,155639,56421],{"class":916},[14,155641,155643],{"id":155642},"_22-字面量","2.2 字面量",[19,155645,155646],{},"字面量就是代码中直接写出来的数据。",[316,155648,155650],{"className":31100,"code":155649,"language":31102,"meta":50,"style":50},"100          # 整数\n3.14         # 小数\n\"hello\"      # 字符串\nTrue         # 布尔值\nNone         # 空值\n",[269,155651,155652,155659,155666,155673,155680],{"__ignoreMap":50},[324,155653,155654,155656],{"class":326,"line":327},[324,155655,1175],{"class":916},[324,155657,155658],{"class":772},"          # 整数\n",[324,155660,155661,155663],{"class":326,"line":203},[324,155662,917],{"class":916},[324,155664,155665],{"class":772},"         # 小数\n",[324,155667,155668,155670],{"class":326,"line":338},[324,155669,6573],{"class":738},[324,155671,155672],{"class":772},"      # 字符串\n",[324,155674,155675,155677],{"class":326,"line":344},[324,155676,32198],{"class":916},[324,155678,155679],{"class":772},"         # 布尔值\n",[324,155681,155682,155684],{"class":326,"line":484},[324,155683,96408],{"class":916},[324,155685,155686],{"class":772},"         # 空值\n",[19,155688,155689],{},"常见字面量类型：",[1003,155691,155692,155702],{},[1006,155693,155694],{},[1009,155695,155696,155698,155700],{},[1012,155697,24464],{},[1012,155699,28214],{},[1012,155701,26593],{},[1049,155703,155704,155715,155726,155737,155749,155761,155773,155786,155798],{},[1009,155705,155706,155708,155712],{},[1054,155707,871],{},[1054,155709,155710],{},[269,155711,1175],{},[1054,155713,155714],{},"整数",[1009,155716,155717,155719,155723],{},[1054,155718,907],{},[1054,155720,155721],{},[269,155722,917],{},[1054,155724,155725],{},"浮点数",[1009,155727,155728,155730,155734],{},[1054,155729,2034],{},[1054,155731,155732],{},[269,155733,6573],{},[1054,155735,155736],{},"字符串",[1009,155738,155739,155741,155747],{},[1054,155740,2086],{},[1054,155742,155743,1077,155745],{},[269,155744,32198],{},[269,155746,34709],{},[1054,155748,66737],{},[1009,155750,155751,155754,155758],{},[1054,155752,155753],{},"NoneType",[1054,155755,155756],{},[269,155757,96408],{},[1054,155759,155760],{},"空值",[1009,155762,155763,155765,155770],{},[1054,155764,154582],{},[1054,155766,155767],{},[269,155768,155769],{},"[1, 2, 3]",[1054,155771,155772],{},"列表",[1009,155774,155775,155778,155783],{},[1054,155776,155777],{},"tuple",[1054,155779,155780],{},[269,155781,155782],{},"(1, 2, 3)",[1054,155784,155785],{},"元组",[1009,155787,155788,155790,155795],{},[1054,155789,115267],{},[1054,155791,155792],{},[269,155793,155794],{},"{\"name\": \"张三\"}",[1054,155796,155797],{},"字典",[1009,155799,155800,155803,155808],{},[1054,155801,155802],{},"set",[1054,155804,155805],{},[269,155806,155807],{},"{1, 2, 3}",[1054,155809,155810],{},"集合",[14,155812,155814],{"id":155813},"_23-变量","2.3 变量",[19,155816,155817],{},"变量是保存数据的名字。",[316,155819,155821],{"className":31100,"code":155820,"language":31102,"meta":50,"style":50},"name = \"小明\"\nage = 18\nheight = 1.75\nis_student = True\n",[269,155822,155823,155831,155839,155849],{"__ignoreMap":50},[324,155824,155825,155827,155829],{"class":326,"line":327},[324,155826,147048],{"class":867},[324,155828,913],{"class":863},[324,155830,149865],{"class":738},[324,155832,155833,155835,155837],{"class":326,"line":203},[324,155834,147058],{"class":867},[324,155836,913],{"class":863},[324,155838,147063],{"class":916},[324,155840,155841,155844,155846],{"class":326,"line":338},[324,155842,155843],{"class":867},"height ",[324,155845,913],{"class":863},[324,155847,155848],{"class":916}," 1.75\n",[324,155850,155851,155854,155856],{"class":326,"line":344},[324,155852,155853],{"class":867},"is_student ",[324,155855,913],{"class":863},[324,155857,154111],{"class":916},[19,155859,155860],{},"Python 的变量不需要提前声明类型：",[316,155862,155864],{"className":31100,"code":155863,"language":31102,"meta":50,"style":50},"score = 100\nscore = \"满分\"\n",[269,155865,155866,155876],{"__ignoreMap":50},[324,155867,155868,155871,155873],{"class":326,"line":327},[324,155869,155870],{"class":867},"score ",[324,155872,913],{"class":863},[324,155874,155875],{"class":916}," 100\n",[324,155877,155878,155880,155882],{"class":326,"line":203},[324,155879,155870],{"class":867},[324,155881,913],{"class":863},[324,155883,155884],{"class":738}," \"满分\"\n",[19,155886,155887],{},"这虽然合法，但不建议在同一段逻辑里频繁改变变量含义，否则代码难读。",[14,155889,155891],{"id":155890},"_24-变量命名规则","2.4 变量命名规则",[19,155893,155894],{},"硬性规则：",[192,155896,155897,155900,155903,155906],{},[195,155898,155899],{},"只能由字母、数字、下划线组成。",[195,155901,155902],{},"不能以数字开头。",[195,155904,155905],{},"不能使用 Python 关键字。",[195,155907,155908],{},"区分大小写。",[316,155910,155912],{"className":31100,"code":155911,"language":31102,"meta":50,"style":50},"user_name = \"张三\"\nage2 = 18\n_token = \"abc\"\n",[269,155913,155914,155923,155932],{"__ignoreMap":50},[324,155915,155916,155919,155921],{"class":326,"line":327},[324,155917,155918],{"class":867},"user_name ",[324,155920,913],{"class":863},[324,155922,147053],{"class":738},[324,155924,155925,155928,155930],{"class":326,"line":203},[324,155926,155927],{"class":867},"age2 ",[324,155929,913],{"class":863},[324,155931,147063],{"class":916},[324,155933,155934,155937,155939],{"class":326,"line":338},[324,155935,155936],{"class":867},"_token ",[324,155938,913],{"class":863},[324,155940,155941],{"class":738}," \"abc\"\n",[19,155943,155944],{},"错误写法：",[316,155946,155948],{"className":31100,"code":155947,"language":31102,"meta":50,"style":50},"2age = 18\nuser-name = \"张三\"\nclass = \"一班\"\n",[269,155949,155950,155959,155971],{"__ignoreMap":50},[324,155951,155952,155955,155957],{"class":326,"line":327},[324,155953,155954],{"class":78125},"2age",[324,155956,14293],{"class":863},[324,155958,147063],{"class":916},[324,155960,155961,155963,155965,155967,155969],{"class":326,"line":203},[324,155962,132096],{"class":867},[324,155964,1396],{"class":863},[324,155966,147048],{"class":867},[324,155968,913],{"class":863},[324,155970,147053],{"class":738},[324,155972,155973,155975,155977],{"class":326,"line":338},[324,155974,15423],{"class":863},[324,155976,14293],{"class":863},[324,155978,155979],{"class":738}," \"一班\"\n",[19,155981,155982],{},"查看关键字：",[316,155984,155986],{"className":31100,"code":155985,"language":31102,"meta":50,"style":50},"import keyword\n\nprint(keyword.kwlist)\n",[269,155987,155988,155995,155999],{"__ignoreMap":50},[324,155989,155990,155992],{"class":326,"line":327},[324,155991,31114],{"class":863},[324,155993,155994],{"class":867}," keyword\n",[324,155996,155997],{"class":326,"line":203},[324,155998,488],{"emptyLinePlaceholder":487},[324,156000,156001,156003],{"class":326,"line":338},[324,156002,31137],{"class":916},[324,156004,156005],{"class":867},"(keyword.kwlist)\n",[19,156007,156008],{},"推荐命名风格：",[316,156010,156012],{"className":31100,"code":156011,"language":31102,"meta":50,"style":50},"student_name = \"小明\"\ntotal_price = 99.8\nis_finished = False\n",[269,156013,156014,156023,156033],{"__ignoreMap":50},[324,156015,156016,156019,156021],{"class":326,"line":327},[324,156017,156018],{"class":867},"student_name ",[324,156020,913],{"class":863},[324,156022,149865],{"class":738},[324,156024,156025,156028,156030],{"class":326,"line":203},[324,156026,156027],{"class":867},"total_price ",[324,156029,913],{"class":863},[324,156031,156032],{"class":916}," 99.8\n",[324,156034,156035,156038,156040],{"class":326,"line":338},[324,156036,156037],{"class":867},"is_finished ",[324,156039,913],{"class":863},[324,156041,126319],{"class":916},[19,156043,156044],{},"Python 中变量名通常使用小写字母和下划线，也叫 snake_case。",[14,156046,51454],{"id":51453},[19,156048,105087,156049,156052],{},[269,156050,156051],{},"type()"," 查看数据类型：",[316,156054,156056],{"className":31100,"code":156055,"language":31102,"meta":50,"style":50},"print(type(100))\nprint(type(3.14))\nprint(type(\"hello\"))\nprint(type(True))\nprint(type(None))\n",[269,156057,156058,156072,156086,156100,156114],{"__ignoreMap":50},[324,156059,156060,156062,156064,156066,156068,156070],{"class":326,"line":327},[324,156061,31137],{"class":916},[324,156063,868],{"class":867},[324,156065,103828],{"class":916},[324,156067,868],{"class":867},[324,156069,1175],{"class":916},[324,156071,31219],{"class":867},[324,156073,156074,156076,156078,156080,156082,156084],{"class":326,"line":203},[324,156075,31137],{"class":916},[324,156077,868],{"class":867},[324,156079,103828],{"class":916},[324,156081,868],{"class":867},[324,156083,917],{"class":916},[324,156085,31219],{"class":867},[324,156087,156088,156090,156092,156094,156096,156098],{"class":326,"line":338},[324,156089,31137],{"class":916},[324,156091,868],{"class":867},[324,156093,103828],{"class":916},[324,156095,868],{"class":867},[324,156097,6573],{"class":738},[324,156099,31219],{"class":867},[324,156101,156102,156104,156106,156108,156110,156112],{"class":326,"line":344},[324,156103,31137],{"class":916},[324,156105,868],{"class":867},[324,156107,103828],{"class":916},[324,156109,868],{"class":867},[324,156111,32198],{"class":916},[324,156113,31219],{"class":867},[324,156115,156116,156118,156120,156122,156124,156126],{"class":326,"line":484},[324,156117,31137],{"class":916},[324,156119,868],{"class":867},[324,156121,103828],{"class":916},[324,156123,868],{"class":867},[324,156125,96408],{"class":916},[324,156127,31219],{"class":867},[19,156129,156130],{},"输出类似：",[316,156132,156135],{"className":156133,"code":156134,"language":5916,"meta":50},[5914],"\u003Cclass 'int'>\n\u003Cclass 'float'>\n\u003Cclass 'str'>\n\u003Cclass 'bool'>\n\u003Cclass 'NoneType'>\n",[269,156136,156134],{"__ignoreMap":50},[19,156138,9754,156139,108004,156141,156143,156144,156146,156147,22229,156149,156146,156151,156153],{},[269,156140,2086],{},[269,156142,871],{}," 的子类，",[269,156145,32198],{}," 可以当作 ",[269,156148,1082],{},[269,156150,34709],{},[269,156152,1056],{},"，但业务代码中不要滥用。",[316,156155,156157],{"className":31100,"code":156156,"language":31102,"meta":50,"style":50},"print(True + 1)   # 2\nprint(False + 1)  # 1\n",[269,156158,156159,156177],{"__ignoreMap":50},[324,156160,156161,156163,156165,156167,156169,156171,156174],{"class":326,"line":327},[324,156162,31137],{"class":916},[324,156164,868],{"class":867},[324,156166,32198],{"class":916},[324,156168,46288],{"class":863},[324,156170,25842],{"class":916},[324,156172,156173],{"class":867},")   ",[324,156175,156176],{"class":772},"# 2\n",[324,156178,156179,156181,156183,156185,156187,156189,156191],{"class":326,"line":203},[324,156180,31137],{"class":916},[324,156182,868],{"class":867},[324,156184,34709],{"class":916},[324,156186,46288],{"class":863},[324,156188,25842],{"class":916},[324,156190,46530],{"class":867},[324,156192,156193],{"class":772},"# 1\n",[14,156195,156197],{"id":156196},"_26-类型转换","2.6 类型转换",[19,156199,156200],{},"常用转换函数：",[316,156202,156204],{"className":31100,"code":156203,"language":31102,"meta":50,"style":50},"int(\"10\")\nfloat(\"3.14\")\nstr(100)\nbool(1)\n",[269,156205,156206,156216,156227,156237],{"__ignoreMap":50},[324,156207,156208,156210,156212,156214],{"class":326,"line":327},[324,156209,871],{"class":916},[324,156211,868],{"class":867},[324,156213,55038],{"class":738},[324,156215,874],{"class":867},[324,156217,156218,156220,156222,156225],{"class":326,"line":203},[324,156219,907],{"class":916},[324,156221,868],{"class":867},[324,156223,156224],{"class":738},"\"3.14\"",[324,156226,874],{"class":867},[324,156228,156229,156231,156233,156235],{"class":326,"line":338},[324,156230,2034],{"class":916},[324,156232,868],{"class":867},[324,156234,1175],{"class":916},[324,156236,874],{"class":867},[324,156238,156239,156241,156243,156245],{"class":326,"line":344},[324,156240,2086],{"class":916},[324,156242,868],{"class":867},[324,156244,1082],{"class":916},[324,156246,874],{"class":867},[19,156248,15864],{},[316,156250,156252],{"className":31100,"code":156251,"language":31102,"meta":50,"style":50},"age = \"18\"\nage = int(age)\nprint(age + 1)\n",[269,156253,156254,156263,156274],{"__ignoreMap":50},[324,156255,156256,156258,156260],{"class":326,"line":327},[324,156257,147058],{"class":867},[324,156259,913],{"class":863},[324,156261,156262],{"class":738}," \"18\"\n",[324,156264,156265,156267,156269,156271],{"class":326,"line":203},[324,156266,147058],{"class":867},[324,156268,913],{"class":863},[324,156270,3112],{"class":916},[324,156272,156273],{"class":867},"(age)\n",[324,156275,156276,156278,156281,156283,156285],{"class":326,"line":338},[324,156277,31137],{"class":916},[324,156279,156280],{"class":867},"(age ",[324,156282,1345],{"class":863},[324,156284,25842],{"class":916},[324,156286,874],{"class":867},[19,156288,156289],{},"输入得到的内容永远是字符串：",[316,156291,156293],{"className":31100,"code":156292,"language":31102,"meta":50,"style":50},"num = input(\"请输入数字:\")\nprint(type(num))  # str\n",[269,156294,156295,156311],{"__ignoreMap":50},[324,156296,156297,156300,156302,156304,156306,156309],{"class":326,"line":327},[324,156298,156299],{"class":867},"num ",[324,156301,913],{"class":863},[324,156303,61327],{"class":916},[324,156305,868],{"class":867},[324,156307,156308],{"class":738},"\"请输入数字:\"",[324,156310,874],{"class":867},[324,156312,156313,156315,156317,156319,156322],{"class":326,"line":203},[324,156314,31137],{"class":916},[324,156316,868],{"class":867},[324,156318,103828],{"class":916},[324,156320,156321],{"class":867},"(num))  ",[324,156323,156324],{"class":772},"# str\n",[19,156326,156327],{},"如果要做数学运算，必须转换：",[316,156329,156331],{"className":31100,"code":156330,"language":31102,"meta":50,"style":50},"num = int(input(\"请输入数字:\"))\nprint(num + 10)\n",[269,156332,156333,156351],{"__ignoreMap":50},[324,156334,156335,156337,156339,156341,156343,156345,156347,156349],{"class":326,"line":327},[324,156336,156299],{"class":867},[324,156338,913],{"class":863},[324,156340,3112],{"class":916},[324,156342,868],{"class":867},[324,156344,54543],{"class":916},[324,156346,868],{"class":867},[324,156348,156308],{"class":738},[324,156350,31219],{"class":867},[324,156352,156353,156355,156357,156359,156361],{"class":326,"line":203},[324,156354,31137],{"class":916},[324,156356,46341],{"class":867},[324,156358,1345],{"class":863},[324,156360,2768],{"class":916},[324,156362,874],{"class":867},[19,156364,156365],{},"常见错误：",[316,156367,156369],{"className":31100,"code":156368,"language":31102,"meta":50,"style":50},"int(\"3.14\")   # 错误\nint(\"abc\")    # 错误\n",[269,156370,156371,156384],{"__ignoreMap":50},[324,156372,156373,156375,156377,156379,156381],{"class":326,"line":327},[324,156374,871],{"class":916},[324,156376,868],{"class":867},[324,156378,156224],{"class":738},[324,156380,156173],{"class":867},[324,156382,156383],{"class":772},"# 错误\n",[324,156385,156386,156388,156390,156393,156396],{"class":326,"line":203},[324,156387,871],{"class":916},[324,156389,868],{"class":867},[324,156391,156392],{"class":738},"\"abc\"",[324,156394,156395],{"class":867},")    ",[324,156397,156383],{"class":772},[19,156399,156400],{},"正确写法：",[316,156402,156404],{"className":31100,"code":156403,"language":31102,"meta":50,"style":50},"num = float(\"3.14\")\n",[269,156405,156406],{"__ignoreMap":50},[324,156407,156408,156410,156412,156414,156416,156418],{"class":326,"line":327},[324,156409,156299],{"class":867},[324,156411,913],{"class":863},[324,156413,110518],{"class":916},[324,156415,868],{"class":867},[324,156417,156224],{"class":738},[324,156419,874],{"class":867},[14,156421,156423],{"id":156422},"_27-运算符","2.7 运算符",[35,156425,156427],{"id":156426},"_271-算术运算符","2.7.1 算术运算符",[1003,156429,156430,156441],{},[1006,156431,156432],{},[1009,156433,156434,156437,156439],{},[1012,156435,156436],{},"运算符",[1012,156438,26593],{},[1012,156440,28214],{},[1049,156442,156443,156457,156471,156485,156499,156513,156527],{},[1009,156444,156445,156449,156452],{},[1054,156446,156447],{},[269,156448,1345],{},[1054,156450,156451],{},"加法",[1054,156453,156454],{},[269,156455,156456],{},"1 + 2",[1009,156458,156459,156463,156466],{},[1054,156460,156461],{},[269,156462,1396],{},[1054,156464,156465],{},"减法",[1054,156467,156468],{},[269,156469,156470],{},"5 - 3",[1009,156472,156473,156477,156480],{},[1054,156474,156475],{},[269,156476,1319],{},[1054,156478,156479],{},"乘法",[1054,156481,156482],{},[269,156483,156484],{},"2 * 3",[1009,156486,156487,156491,156494],{},[1054,156488,156489],{},[269,156490,1448],{},[1054,156492,156493],{},"除法，结果是浮点数",[1054,156495,156496],{},[269,156497,156498],{},"5 \u002F 2",[1009,156500,156501,156505,156508],{},[1054,156502,156503],{},[269,156504,34051],{},[1054,156506,156507],{},"整除",[1054,156509,156510],{},[269,156511,156512],{},"5 \u002F\u002F 2",[1009,156514,156515,156519,156522],{},[1054,156516,156517],{},[269,156518,1192],{},[1054,156520,156521],{},"取余",[1054,156523,156524],{},[269,156525,156526],{},"5 % 2",[1009,156528,156529,156533,156536],{},[1054,156530,156531],{},[269,156532,11390],{},[1054,156534,156535],{},"幂运算",[1054,156537,156538],{},[269,156539,156540],{},"2 ** 3",[19,156542,15864],{},[316,156544,156546],{"className":31100,"code":156545,"language":31102,"meta":50,"style":50},"print(5 \u002F 2)   # 2.5\nprint(5 \u002F\u002F 2)  # 2\nprint(5 % 2)   # 1\nprint(2 ** 3)  # 8\n",[269,156547,156548,156566,156583,156600],{"__ignoreMap":50},[324,156549,156550,156552,156554,156556,156559,156561,156563],{"class":326,"line":327},[324,156551,31137],{"class":916},[324,156553,868],{"class":867},[324,156555,1183],{"class":916},[324,156557,156558],{"class":863}," \u002F",[324,156560,15484],{"class":916},[324,156562,156173],{"class":867},[324,156564,156565],{"class":772},"# 2.5\n",[324,156567,156568,156570,156572,156574,156577,156579,156581],{"class":326,"line":203},[324,156569,31137],{"class":916},[324,156571,868],{"class":867},[324,156573,1183],{"class":916},[324,156575,156576],{"class":863}," \u002F\u002F",[324,156578,15484],{"class":916},[324,156580,46530],{"class":867},[324,156582,156176],{"class":772},[324,156584,156585,156587,156589,156591,156594,156596,156598],{"class":326,"line":338},[324,156586,31137],{"class":916},[324,156588,868],{"class":867},[324,156590,1183],{"class":916},[324,156592,156593],{"class":863}," %",[324,156595,15484],{"class":916},[324,156597,156173],{"class":867},[324,156599,156193],{"class":772},[324,156601,156602,156604,156606,156608,156611,156613,156615],{"class":326,"line":344},[324,156603,31137],{"class":916},[324,156605,868],{"class":867},[324,156607,944],{"class":916},[324,156609,156610],{"class":863}," **",[324,156612,78792],{"class":916},[324,156614,46530],{"class":867},[324,156616,156617],{"class":772},"# 8\n",[35,156619,156621],{"id":156620},"_272-赋值运算符","2.7.2 赋值运算符",[316,156623,156625],{"className":31100,"code":156624,"language":31102,"meta":50,"style":50},"num = 10\nnum += 5\nnum -= 2\nnum *= 3\nnum \u002F= 2\n",[269,156626,156627,156635,156643,156651,156659],{"__ignoreMap":50},[324,156628,156629,156631,156633],{"class":326,"line":327},[324,156630,156299],{"class":867},[324,156632,913],{"class":863},[324,156634,59150],{"class":916},[324,156636,156637,156639,156641],{"class":326,"line":203},[324,156638,156299],{"class":867},[324,156640,10206],{"class":863},[324,156642,55149],{"class":916},[324,156644,156645,156647,156649],{"class":326,"line":338},[324,156646,156299],{"class":867},[324,156648,150764],{"class":863},[324,156650,48445],{"class":916},[324,156652,156653,156655,156657],{"class":326,"line":344},[324,156654,156299],{"class":867},[324,156656,137660],{"class":863},[324,156658,120548],{"class":916},[324,156660,156661,156663,156666],{"class":326,"line":484},[324,156662,156299],{"class":867},[324,156664,156665],{"class":863},"\u002F=",[324,156667,48445],{"class":916},[19,156669,156670],{},"等价关系：",[316,156672,156674],{"className":31100,"code":156673,"language":31102,"meta":50,"style":50},"num += 1\nnum = num + 1\n",[269,156675,156676,156684],{"__ignoreMap":50},[324,156677,156678,156680,156682],{"class":326,"line":327},[324,156679,156299],{"class":867},[324,156681,10206],{"class":863},[324,156683,56421],{"class":916},[324,156685,156686,156688,156690,156693,156695],{"class":326,"line":203},[324,156687,156299],{"class":867},[324,156689,913],{"class":863},[324,156691,156692],{"class":867}," num ",[324,156694,1345],{"class":863},[324,156696,56421],{"class":916},[19,156698,156699,156700,300,156703,29107],{},"Python 没有 ",[269,156701,156702],{},"num++",[269,156704,156705],{},"num--",[35,156707,156709],{"id":156708},"_273-比较运算符","2.7.3 比较运算符",[19,156711,156712],{},"比较运算结果是布尔值。",[316,156714,156716],{"className":31100,"code":156715,"language":31102,"meta":50,"style":50},"print(10 > 5)\nprint(10 >= 10)\nprint(10 == 8)\nprint(10 != 8)\n",[269,156717,156718,156732,156747,156761],{"__ignoreMap":50},[324,156719,156720,156722,156724,156726,156728,156730],{"class":326,"line":327},[324,156721,31137],{"class":916},[324,156723,868],{"class":867},[324,156725,1310],{"class":916},[324,156727,26946],{"class":863},[324,156729,2878],{"class":916},[324,156731,874],{"class":867},[324,156733,156734,156736,156738,156740,156743,156745],{"class":326,"line":203},[324,156735,31137],{"class":916},[324,156737,868],{"class":867},[324,156739,1310],{"class":916},[324,156741,156742],{"class":863}," >=",[324,156744,2768],{"class":916},[324,156746,874],{"class":867},[324,156748,156749,156751,156753,156755,156757,156759],{"class":326,"line":338},[324,156750,31137],{"class":916},[324,156752,868],{"class":867},[324,156754,1310],{"class":916},[324,156756,102280],{"class":863},[324,156758,2813],{"class":916},[324,156760,874],{"class":867},[324,156762,156763,156765,156767,156769,156772,156774],{"class":326,"line":344},[324,156764,31137],{"class":916},[324,156766,868],{"class":867},[324,156768,1310],{"class":916},[324,156770,156771],{"class":863}," !=",[324,156773,2813],{"class":916},[324,156775,874],{"class":867},[19,156777,156778,156779,156781,156782,29107],{},"注意：判断相等用 ",[269,156780,3678],{},"，赋值用 ",[269,156783,913],{},[316,156785,156787],{"className":31100,"code":156786,"language":31102,"meta":50,"style":50},"age = 18       # 赋值\nage == 18      # 判断是否相等\n",[269,156788,156789,156801],{"__ignoreMap":50},[324,156790,156791,156793,156795,156798],{"class":326,"line":327},[324,156792,147058],{"class":867},[324,156794,913],{"class":863},[324,156796,156797],{"class":916}," 18",[324,156799,156800],{"class":772},"       # 赋值\n",[324,156802,156803,156805,156807,156809],{"class":326,"line":203},[324,156804,147058],{"class":867},[324,156806,3678],{"class":863},[324,156808,156797],{"class":916},[324,156810,156811],{"class":772},"      # 判断是否相等\n",[35,156813,156815],{"id":156814},"_274-逻辑运算符","2.7.4 逻辑运算符",[1003,156817,156818,156826],{},[1006,156819,156820],{},[1009,156821,156822,156824],{},[1012,156823,156436],{},[1012,156825,26593],{},[1049,156827,156828,156837,156846],{},[1009,156829,156830,156834],{},[1054,156831,156832],{},[269,156833,31184],{},[1054,156835,156836],{},"并且",[1009,156838,156839,156843],{},[1054,156840,156841],{},[269,156842,115811],{},[1054,156844,156845],{},"或者",[1009,156847,156848,156853],{},[1054,156849,156850],{},[269,156851,156852],{},"not",[1054,156854,156855],{},"取反",[316,156857,156859],{"className":31100,"code":156858,"language":31102,"meta":50,"style":50},"age = 20\nhas_ticket = True\n\nprint(age >= 18 and has_ticket)\nprint(age \u003C 18 or has_ticket)\nprint(not has_ticket)\n",[269,156860,156861,156869,156878,156882,156897,156911],{"__ignoreMap":50},[324,156862,156863,156865,156867],{"class":326,"line":327},[324,156864,147058],{"class":867},[324,156866,913],{"class":863},[324,156868,88787],{"class":916},[324,156870,156871,156874,156876],{"class":326,"line":203},[324,156872,156873],{"class":867},"has_ticket ",[324,156875,913],{"class":863},[324,156877,154111],{"class":916},[324,156879,156880],{"class":326,"line":338},[324,156881,488],{"emptyLinePlaceholder":487},[324,156883,156884,156886,156888,156890,156892,156894],{"class":326,"line":344},[324,156885,31137],{"class":916},[324,156887,156280],{"class":867},[324,156889,2441],{"class":863},[324,156891,156797],{"class":916},[324,156893,120941],{"class":863},[324,156895,156896],{"class":867}," has_ticket)\n",[324,156898,156899,156901,156903,156905,156907,156909],{"class":326,"line":484},[324,156900,31137],{"class":916},[324,156902,156280],{"class":867},[324,156904,1774],{"class":863},[324,156906,156797],{"class":916},[324,156908,114922],{"class":863},[324,156910,156896],{"class":867},[324,156912,156913,156915,156917,156919],{"class":326,"line":491},[324,156914,31137],{"class":916},[324,156916,868],{"class":867},[324,156918,156852],{"class":863},[324,156920,156896],{"class":867},[14,156922,156924],{"id":156923},"_28-字符串定义","2.8 字符串定义",[19,156926,156927],{},"三种常见写法：",[316,156929,156931],{"className":31100,"code":156930,"language":31102,"meta":50,"style":50},"name1 = '小明'\nname2 = \"小明\"\ntext = \"\"\"这是多行字符串\n可以换行\"\"\"\n",[269,156932,156933,156943,156952,156962],{"__ignoreMap":50},[324,156934,156935,156938,156940],{"class":326,"line":327},[324,156936,156937],{"class":867},"name1 ",[324,156939,913],{"class":863},[324,156941,156942],{"class":738}," '小明'\n",[324,156944,156945,156948,156950],{"class":326,"line":203},[324,156946,156947],{"class":867},"name2 ",[324,156949,913],{"class":863},[324,156951,149865],{"class":738},[324,156953,156954,156957,156959],{"class":326,"line":338},[324,156955,156956],{"class":867},"text ",[324,156958,913],{"class":863},[324,156960,156961],{"class":738}," \"\"\"这是多行字符串\n",[324,156963,156964],{"class":326,"line":344},[324,156965,156966],{"class":738},"可以换行\"\"\"\n",[19,156968,156969],{},"字符串中包含引号：",[316,156971,156973],{"className":31100,"code":156972,"language":31102,"meta":50,"style":50},"msg = \"他说:'你好'\"\nmsg2 = '他说:\"你好\"'\nmsg3 = \"他说:\\\"你好\\\"\"\n",[269,156974,156975,156985,156995],{"__ignoreMap":50},[324,156976,156977,156980,156982],{"class":326,"line":327},[324,156978,156979],{"class":867},"msg ",[324,156981,913],{"class":863},[324,156983,156984],{"class":738}," \"他说:'你好'\"\n",[324,156986,156987,156990,156992],{"class":326,"line":203},[324,156988,156989],{"class":867},"msg2 ",[324,156991,913],{"class":863},[324,156993,156994],{"class":738}," '他说:\"你好\"'\n",[324,156996,156997,157000,157002,157005,157008,157011,157013],{"class":326,"line":338},[324,156998,156999],{"class":867},"msg3 ",[324,157001,913],{"class":863},[324,157003,157004],{"class":738}," \"他说:",[324,157006,157007],{"class":916},"\\\"",[324,157009,157010],{"class":738},"你好",[324,157012,157007],{"class":916},[324,157014,25857],{"class":738},[19,157016,157017],{},"常见转义字符：",[1003,157019,157020,157029],{},[1006,157021,157022],{},[1009,157023,157024,157027],{},[1012,157025,157026],{},"写法",[1012,157028,101422],{},[1049,157030,157031,157041,157050,157060,157069],{},[1009,157032,157033,157038],{},[1054,157034,157035],{},[269,157036,157037],{},"\\n",[1054,157039,157040],{},"换行",[1009,157042,157043,157047],{},[1054,157044,157045],{},[269,157046,1965],{},[1054,157048,157049],{},"制表符",[1009,157051,157052,157057],{},[1054,157053,157054],{},[269,157055,157056],{},"\\\\",[1054,157058,157059],{},"反斜杠",[1009,157061,157062,157066],{},[1054,157063,157064],{},[269,157065,157007],{},[1054,157067,157068],{},"双引号",[1009,157070,157071,157076],{},[1054,157072,157073],{},[269,157074,157075],{},"\\'",[1054,157077,157078],{},"单引号",[14,157080,157082],{"id":157081},"_29-字符串拼接","2.9 字符串拼接",[316,157084,157086],{"className":31100,"code":157085,"language":31102,"meta":50,"style":50},"name = \"小明\"\nprint(\"你好，\" + name)\n",[269,157087,157088,157096],{"__ignoreMap":50},[324,157089,157090,157092,157094],{"class":326,"line":327},[324,157091,147048],{"class":867},[324,157093,913],{"class":863},[324,157095,149865],{"class":738},[324,157097,157098,157100,157102,157105,157107],{"class":326,"line":203},[324,157099,31137],{"class":916},[324,157101,868],{"class":867},[324,157103,157104],{"class":738},"\"你好，\"",[324,157106,46288],{"class":863},[324,157108,157109],{"class":867}," name)\n",[19,157111,157112],{},"字符串只能和字符串拼接：",[316,157114,157116],{"className":31100,"code":157115,"language":31102,"meta":50,"style":50},"age = 18\nprint(\"年龄:\" + str(age))\n",[269,157117,157118,157126],{"__ignoreMap":50},[324,157119,157120,157122,157124],{"class":326,"line":327},[324,157121,147058],{"class":867},[324,157123,913],{"class":863},[324,157125,147063],{"class":916},[324,157127,157128,157130,157132,157134,157136,157138],{"class":326,"line":203},[324,157129,31137],{"class":916},[324,157131,868],{"class":867},[324,157133,147029],{"class":738},[324,157135,46288],{"class":863},[324,157137,74641],{"class":916},[324,157139,157140],{"class":867},"(age))\n",[19,157142,157143],{},"更推荐使用格式化字符串。",[14,157145,157147],{"id":157146},"_210-字符串格式化","2.10 字符串格式化",[35,157149,157151],{"id":157150},"_2101-百分号格式化","2.10.1 百分号格式化",[316,157153,157155],{"className":31100,"code":157154,"language":31102,"meta":50,"style":50},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(\"姓名:%s 年龄:%d 分数:%.1f\" % (name, age, score))\n",[269,157156,157157,157165,157173,157182,157186],{"__ignoreMap":50},[324,157158,157159,157161,157163],{"class":326,"line":327},[324,157160,147048],{"class":867},[324,157162,913],{"class":863},[324,157164,149865],{"class":738},[324,157166,157167,157169,157171],{"class":326,"line":203},[324,157168,147058],{"class":867},[324,157170,913],{"class":863},[324,157172,147063],{"class":916},[324,157174,157175,157177,157179],{"class":326,"line":338},[324,157176,155870],{"class":867},[324,157178,913],{"class":863},[324,157180,157181],{"class":916}," 95.5\n",[324,157183,157184],{"class":326,"line":344},[324,157185,488],{"emptyLinePlaceholder":487},[324,157187,157188,157190,157192,157195,157198,157201,157204,157207,157210,157212,157214],{"class":326,"line":484},[324,157189,31137],{"class":916},[324,157191,868],{"class":867},[324,157193,157194],{"class":738},"\"姓名:",[324,157196,157197],{"class":916},"%s",[324,157199,157200],{"class":738}," 年龄:",[324,157202,157203],{"class":916},"%d",[324,157205,157206],{"class":738}," 分数:",[324,157208,157209],{"class":916},"%.1f",[324,157211,1115],{"class":738},[324,157213,156593],{"class":863},[324,157215,157216],{"class":867}," (name, age, score))\n",[19,157218,157219],{},"常用占位符：",[1003,157221,157222,157231],{},[1006,157223,157224],{},[1009,157225,157226,157229],{},[1012,157227,157228],{},"占位符",[1012,157230,26593],{},[1049,157232,157233,157241,157249],{},[1009,157234,157235,157239],{},[1054,157236,157237],{},[269,157238,157197],{},[1054,157240,155736],{},[1009,157242,157243,157247],{},[1054,157244,157245],{},[269,157246,157203],{},[1054,157248,155714],{},[1009,157250,157251,157256],{},[1054,157252,157253],{},[269,157254,157255],{},"%f",[1054,157257,155725],{},[19,157259,157260],{},"精度控制：",[316,157262,157264],{"className":31100,"code":157263,"language":31102,"meta":50,"style":50},"price = 12.3456\nprint(\"%.2f\" % price)\n",[269,157265,157266,157275],{"__ignoreMap":50},[324,157267,157268,157270,157272],{"class":326,"line":327},[324,157269,147193],{"class":867},[324,157271,913],{"class":863},[324,157273,157274],{"class":916}," 12.3456\n",[324,157276,157277,157279,157281,157283,157286,157288,157290],{"class":326,"line":203},[324,157278,31137],{"class":916},[324,157280,868],{"class":867},[324,157282,1115],{"class":738},[324,157284,157285],{"class":916},"%.2f",[324,157287,1115],{"class":738},[324,157289,156593],{"class":863},[324,157291,157292],{"class":867}," price)\n",[35,157294,157296],{"id":157295},"_2102-format方法","2.10.2 format方法",[316,157298,157300],{"className":31100,"code":157299,"language":31102,"meta":50,"style":50},"name = \"小明\"\nage = 18\n\nprint(\"姓名:{} 年龄:{}\".format(name, age))\nprint(\"姓名:{0} 年龄:{1}\".format(name, age))\nprint(\"姓名:{name} 年龄:{age}\".format(name=name, age=age))\n",[269,157301,157302,157310,157318,157322,157341,157361],{"__ignoreMap":50},[324,157303,157304,157306,157308],{"class":326,"line":327},[324,157305,147048],{"class":867},[324,157307,913],{"class":863},[324,157309,149865],{"class":738},[324,157311,157312,157314,157316],{"class":326,"line":203},[324,157313,147058],{"class":867},[324,157315,913],{"class":863},[324,157317,147063],{"class":916},[324,157319,157320],{"class":326,"line":338},[324,157321,488],{"emptyLinePlaceholder":487},[324,157323,157324,157326,157328,157330,157332,157334,157336,157338],{"class":326,"line":344},[324,157325,31137],{"class":916},[324,157327,868],{"class":867},[324,157329,157194],{"class":738},[324,157331,33181],{"class":916},[324,157333,157200],{"class":738},[324,157335,33181],{"class":916},[324,157337,1115],{"class":738},[324,157339,157340],{"class":867},".format(name, age))\n",[324,157342,157343,157345,157347,157349,157352,157354,157357,157359],{"class":326,"line":484},[324,157344,31137],{"class":916},[324,157346,868],{"class":867},[324,157348,157194],{"class":738},[324,157350,157351],{"class":916},"{0}",[324,157353,157200],{"class":738},[324,157355,157356],{"class":916},"{1}",[324,157358,1115],{"class":738},[324,157360,157340],{"class":867},[324,157362,157363,157365,157367,157369,157372,157374,157377,157379,157382,157384,157386,157389,157391,157393],{"class":326,"line":491},[324,157364,31137],{"class":916},[324,157366,868],{"class":867},[324,157368,157194],{"class":738},[324,157370,157371],{"class":916},"{name}",[324,157373,157200],{"class":738},[324,157375,157376],{"class":916},"{age}",[324,157378,1115],{"class":738},[324,157380,157381],{"class":867},".format(",[324,157383,80532],{"class":5945},[324,157385,913],{"class":863},[324,157387,157388],{"class":867},"name, ",[324,157390,70943],{"class":5945},[324,157392,913],{"class":863},[324,157394,157395],{"class":867},"age))\n",[35,157397,157399],{"id":157398},"_2103-f-string","2.10.3 f-string",[19,157401,157402],{},"推荐写法：",[316,157404,157406],{"className":31100,"code":157405,"language":31102,"meta":50,"style":50},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(f\"姓名:{name} 年龄:{age} 分数:{score:.1f}\")\n",[269,157407,157408,157416,157424,157432,157436],{"__ignoreMap":50},[324,157409,157410,157412,157414],{"class":326,"line":327},[324,157411,147048],{"class":867},[324,157413,913],{"class":863},[324,157415,149865],{"class":738},[324,157417,157418,157420,157422],{"class":326,"line":203},[324,157419,147058],{"class":867},[324,157421,913],{"class":863},[324,157423,147063],{"class":916},[324,157425,157426,157428,157430],{"class":326,"line":338},[324,157427,155870],{"class":867},[324,157429,913],{"class":863},[324,157431,157181],{"class":916},[324,157433,157434],{"class":326,"line":344},[324,157435,488],{"emptyLinePlaceholder":487},[324,157437,157438,157440,157442,157444,157446,157448,157450,157452,157454,157456,157458,157460,157462,157464,157467,157470,157472,157474],{"class":326,"line":484},[324,157439,31137],{"class":916},[324,157441,868],{"class":867},[324,157443,920],{"class":863},[324,157445,157194],{"class":738},[324,157447,1760],{"class":916},[324,157449,80532],{"class":867},[324,157451,1810],{"class":916},[324,157453,157200],{"class":738},[324,157455,1760],{"class":916},[324,157457,70943],{"class":867},[324,157459,1810],{"class":916},[324,157461,157206],{"class":738},[324,157463,1760],{"class":916},[324,157465,157466],{"class":867},"score",[324,157468,157469],{"class":863},":.1f",[324,157471,1810],{"class":916},[324,157473,1115],{"class":738},[324,157475,874],{"class":867},[19,157477,157478],{},"表达式也可以放进去：",[316,157480,157482],{"className":31100,"code":157481,"language":31102,"meta":50,"style":50},"price = 8\ncount = 5\nprint(f\"总价:{price * count}元\")\n",[269,157483,157484,157492,157500],{"__ignoreMap":50},[324,157485,157486,157488,157490],{"class":326,"line":327},[324,157487,147193],{"class":867},[324,157489,913],{"class":863},[324,157491,147198],{"class":916},[324,157493,157494,157496,157498],{"class":326,"line":203},[324,157495,147203],{"class":867},[324,157497,913],{"class":863},[324,157499,55149],{"class":916},[324,157501,157502,157504,157506,157508,157511,157513,157515,157517,157520,157522,157525],{"class":326,"line":338},[324,157503,31137],{"class":916},[324,157505,868],{"class":867},[324,157507,920],{"class":863},[324,157509,157510],{"class":738},"\"总价:",[324,157512,1760],{"class":916},[324,157514,147193],{"class":867},[324,157516,1319],{"class":863},[324,157518,157519],{"class":867}," count",[324,157521,1810],{"class":916},[324,157523,157524],{"class":738},"元\"",[324,157526,874],{"class":867},[14,157528,157530],{"id":157529},"_211-input输入","2.11 input输入",[19,157532,157533,157536],{},[269,157534,157535],{},"input()"," 会暂停程序，等待用户输入。",[316,157538,157540],{"className":31100,"code":157539,"language":31102,"meta":50,"style":50},"name = input(\"请输入姓名:\")\nprint(f\"你好，{name}\")\n",[269,157541,157542,157556],{"__ignoreMap":50},[324,157543,157544,157546,157548,157550,157552,157554],{"class":326,"line":327},[324,157545,147048],{"class":867},[324,157547,913],{"class":863},[324,157549,61327],{"class":916},[324,157551,868],{"class":867},[324,157553,152891],{"class":738},[324,157555,874],{"class":867},[324,157557,157558,157560,157562,157564,157567,157569,157571,157573,157575],{"class":326,"line":203},[324,157559,31137],{"class":916},[324,157561,868],{"class":867},[324,157563,920],{"class":863},[324,157565,157566],{"class":738},"\"你好，",[324,157568,1760],{"class":916},[324,157570,80532],{"class":867},[324,157572,1810],{"class":916},[324,157574,1115],{"class":738},[324,157576,874],{"class":867},[19,157578,157579],{},"输入整数：",[316,157581,157583],{"className":31100,"code":157582,"language":31102,"meta":50,"style":50},"age = int(input(\"请输入年龄:\"))\nprint(f\"明年你{age + 1}岁\")\n",[269,157584,157585,157603],{"__ignoreMap":50},[324,157586,157587,157589,157591,157593,157595,157597,157599,157601],{"class":326,"line":327},[324,157588,147058],{"class":867},[324,157590,913],{"class":863},[324,157592,3112],{"class":916},[324,157594,868],{"class":867},[324,157596,54543],{"class":916},[324,157598,868],{"class":867},[324,157600,152906],{"class":738},[324,157602,31219],{"class":867},[324,157604,157605,157607,157609,157611,157614,157616,157618,157620,157623,157625],{"class":326,"line":203},[324,157606,31137],{"class":916},[324,157608,868],{"class":867},[324,157610,920],{"class":863},[324,157612,157613],{"class":738},"\"明年你",[324,157615,1760],{"class":916},[324,157617,147058],{"class":867},[324,157619,1345],{"class":863},[324,157621,157622],{"class":916}," 1}",[324,157624,149916],{"class":738},[324,157626,874],{"class":867},[19,157628,157629],{},"输入小数：",[316,157631,157633],{"className":31100,"code":157632,"language":31102,"meta":50,"style":50},"height = float(input(\"请输入身高:\"))\nprint(f\"身高:{height:.2f}米\")\n",[269,157634,157635,157654],{"__ignoreMap":50},[324,157636,157637,157639,157641,157643,157645,157647,157649,157652],{"class":326,"line":327},[324,157638,155843],{"class":867},[324,157640,913],{"class":863},[324,157642,110518],{"class":916},[324,157644,868],{"class":867},[324,157646,54543],{"class":916},[324,157648,868],{"class":867},[324,157650,157651],{"class":738},"\"请输入身高:\"",[324,157653,31219],{"class":867},[324,157655,157656,157658,157660,157662,157665,157667,157669,157672,157674,157677],{"class":326,"line":203},[324,157657,31137],{"class":916},[324,157659,868],{"class":867},[324,157661,920],{"class":863},[324,157663,157664],{"class":738},"\"身高:",[324,157666,1760],{"class":916},[324,157668,25705],{"class":867},[324,157670,157671],{"class":863},":.2f",[324,157673,1810],{"class":916},[324,157675,157676],{"class":738},"米\"",[324,157678,874],{"class":867},[14,157680,157682],{"id":157681},"_212-小案例购物金额计算","2.12 小案例：购物金额计算",[19,157684,123804],{},[192,157686,157687,157690,157693,157696],{},[195,157688,157689],{},"输入商品单价。",[195,157691,157692],{},"输入购买数量。",[195,157694,157695],{},"输入折扣，例如 0.8 表示八折。",[195,157697,157698],{},"输出最终金额，保留两位小数。",[19,157700,10764],{},[316,157702,157704],{"className":31100,"code":157703,"language":31102,"meta":50,"style":50},"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",[269,157705,157706,157725,157744,157764,157768,157788,157792,157815,157836,157858],{"__ignoreMap":50},[324,157707,157708,157710,157712,157714,157716,157718,157720,157723],{"class":326,"line":327},[324,157709,147193],{"class":867},[324,157711,913],{"class":863},[324,157713,110518],{"class":916},[324,157715,868],{"class":867},[324,157717,54543],{"class":916},[324,157719,868],{"class":867},[324,157721,157722],{"class":738},"\"请输入商品单价:\"",[324,157724,31219],{"class":867},[324,157726,157727,157729,157731,157733,157735,157737,157739,157742],{"class":326,"line":203},[324,157728,147203],{"class":867},[324,157730,913],{"class":863},[324,157732,3112],{"class":916},[324,157734,868],{"class":867},[324,157736,54543],{"class":916},[324,157738,868],{"class":867},[324,157740,157741],{"class":738},"\"请输入购买数量:\"",[324,157743,31219],{"class":867},[324,157745,157746,157749,157751,157753,157755,157757,157759,157762],{"class":326,"line":338},[324,157747,157748],{"class":867},"discount ",[324,157750,913],{"class":863},[324,157752,110518],{"class":916},[324,157754,868],{"class":867},[324,157756,54543],{"class":916},[324,157758,868],{"class":867},[324,157760,157761],{"class":738},"\"请输入折扣:\"",[324,157763,31219],{"class":867},[324,157765,157766],{"class":326,"line":344},[324,157767,488],{"emptyLinePlaceholder":487},[324,157769,157770,157773,157775,157778,157780,157783,157785],{"class":326,"line":484},[324,157771,157772],{"class":867},"total ",[324,157774,913],{"class":863},[324,157776,157777],{"class":867}," price ",[324,157779,1319],{"class":863},[324,157781,157782],{"class":867}," count ",[324,157784,1319],{"class":863},[324,157786,157787],{"class":867}," discount\n",[324,157789,157790],{"class":326,"line":491},[324,157791,488],{"emptyLinePlaceholder":487},[324,157793,157794,157796,157798,157800,157803,157805,157807,157809,157811,157813],{"class":326,"line":496},[324,157795,31137],{"class":916},[324,157797,868],{"class":867},[324,157799,920],{"class":863},[324,157801,157802],{"class":738},"\"商品单价:",[324,157804,1760],{"class":916},[324,157806,80537],{"class":867},[324,157808,157671],{"class":863},[324,157810,1810],{"class":916},[324,157812,1115],{"class":738},[324,157814,874],{"class":867},[324,157816,157817,157819,157821,157823,157826,157828,157830,157832,157834],{"class":326,"line":502},[324,157818,31137],{"class":916},[324,157820,868],{"class":867},[324,157822,920],{"class":863},[324,157824,157825],{"class":738},"\"购买数量:",[324,157827,1760],{"class":916},[324,157829,85156],{"class":867},[324,157831,1810],{"class":916},[324,157833,1115],{"class":738},[324,157835,874],{"class":867},[324,157837,157838,157840,157842,157844,157847,157849,157852,157854,157856],{"class":326,"line":508},[324,157839,31137],{"class":916},[324,157841,868],{"class":867},[324,157843,920],{"class":863},[324,157845,157846],{"class":738},"\"折扣:",[324,157848,1760],{"class":916},[324,157850,157851],{"class":867},"discount",[324,157853,1810],{"class":916},[324,157855,1115],{"class":738},[324,157857,874],{"class":867},[324,157859,157860,157862,157864,157866,157869,157871,157874,157876,157878,157880],{"class":326,"line":514},[324,157861,31137],{"class":916},[324,157863,868],{"class":867},[324,157865,920],{"class":863},[324,157867,157868],{"class":738},"\"应付金额:",[324,157870,1760],{"class":916},[324,157872,157873],{"class":867},"total",[324,157875,157671],{"class":863},[324,157877,1810],{"class":916},[324,157879,157524],{"class":738},[324,157881,874],{"class":867},[14,157883,157885],{"id":157884},"_213-易错点","2.13 易错点",[192,157887,157888,157893,157899,157907,157910],{},[195,157889,157890,157892],{},[269,157891,157535],{}," 的结果是字符串，做运算前要转换。",[195,157894,157895,157896,29107],{},"字符串拼接时，数字要先 ",[269,157897,157898],{},"str()",[195,157900,157901,157903,157904,157906],{},[269,157902,913],{}," 是赋值，",[269,157905,3678],{}," 是比较。",[195,157908,157909],{},"Python 没有自增自减运算符。",[195,157911,157912],{},"浮点数计算可能有精度误差：",[316,157914,157916],{"className":31100,"code":157915,"language":31102,"meta":50,"style":50},"print(0.1 + 0.2)\n",[269,157917,157918],{"__ignoreMap":50},[324,157919,157920,157922,157924,157926,157928,157931],{"class":326,"line":327},[324,157921,31137],{"class":916},[324,157923,868],{"class":867},[324,157925,86932],{"class":916},[324,157927,46288],{"class":863},[324,157929,157930],{"class":916}," 0.2",[324,157932,874],{"class":867},[19,157934,157935,157936,157939],{},"金额计算如果要求严格，可以后续学习 ",[269,157937,157938],{},"decimal"," 模块。",[14,157941,157943],{"id":157942},"_214-本章练习","2.14 本章练习",[192,157945,157946,157949,157952,157955,157958],{},[195,157947,157948],{},"输入姓名、年龄、身高，使用 f-string 输出个人信息。",[195,157950,157951],{},"输入圆的半径，计算面积，保留两位小数。",[195,157953,157954],{},"输入工资和奖金，计算总收入。",[195,157956,157957],{},"输入摄氏温度，转换为华氏温度。",[195,157959,157960],{},"写一个 BMI 计算程序：",[316,157962,157965],{"className":157963,"code":157964,"language":5916,"meta":50},[5914],"BMI = 体重kg \u002F 身高m ** 2\n",[269,157966,157964],{"__ignoreMap":50},[775,157968,157969],{},"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":50,"searchDepth":203,"depth":203,"links":157971},[157972,157973,157974,157975,157976,157977,157978,157984,157985,157986,157991,157992,157993,157994],{"id":155533,"depth":203,"text":155534},{"id":155642,"depth":203,"text":155643},{"id":155813,"depth":203,"text":155814},{"id":155890,"depth":203,"text":155891},{"id":51453,"depth":203,"text":51454},{"id":156196,"depth":203,"text":156197},{"id":156422,"depth":203,"text":156423,"children":157979},[157980,157981,157982,157983],{"id":156426,"depth":338,"text":156427},{"id":156620,"depth":338,"text":156621},{"id":156708,"depth":338,"text":156709},{"id":156814,"depth":338,"text":156815},{"id":156923,"depth":203,"text":156924},{"id":157081,"depth":203,"text":157082},{"id":157146,"depth":203,"text":157147,"children":157987},[157988,157989,157990],{"id":157150,"depth":338,"text":157151},{"id":157295,"depth":338,"text":157296},{"id":157398,"depth":338,"text":157399},{"id":157529,"depth":203,"text":157530},{"id":157681,"depth":203,"text":157682},{"id":157884,"depth":203,"text":157885},{"id":157942,"depth":203,"text":157943},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch2",{"title":155525,"description":791},"wiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串","I4Lu1y1Wu68M1sbt4yv1esO-sQz1pWvuN3Svu2Ad3mo",{"id":158001,"title":158002,"body":158003,"description":791,"extension":792,"meta":159639,"navigation":487,"path":159640,"seo":159641,"stem":159642,"__hash__":159643},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch3-判断语句.md","3. 判断语句",{"type":7,"value":158004,"toc":159620},[158005,158008,158012,158015,158030,158033,158061,158065,158115,158117,158133,158136,158162,158165,158169,158236,158239,158255,158259,158262,158380,158383,158390,158439,158445,158449,158452,158565,158568,158572,158576,158579,158629,158633,158636,158686,158690,158693,158731,158735,158738,158784,158787,158822,158826,158831,158834,158880,158882,158949,158953,158959,159070,159079,159083,159085,159096,159098,159264,159268,159270,159284,159286,159500,159504,159523,159540,159543,159589,159593,159617],[10,158006,158002],{"id":158007},"_3-判断语句",[14,158009,158011],{"id":158010},"_31-布尔值","3.1 布尔值",[19,158013,158014],{},"判断语句依赖布尔值：",[316,158016,158018],{"className":31100,"code":158017,"language":31102,"meta":50,"style":50},"True\nFalse\n",[269,158019,158020,158025],{"__ignoreMap":50},[324,158021,158022],{"class":326,"line":327},[324,158023,158024],{"class":916},"True\n",[324,158026,158027],{"class":326,"line":203},[324,158028,158029],{"class":916},"False\n",[19,158031,158032],{},"比较表达式会产生布尔值：",[316,158034,158036],{"className":31100,"code":158035,"language":31102,"meta":50,"style":50},"age = 18\nprint(age >= 18)  # True\n",[269,158037,158038,158046],{"__ignoreMap":50},[324,158039,158040,158042,158044],{"class":326,"line":327},[324,158041,147058],{"class":867},[324,158043,913],{"class":863},[324,158045,147063],{"class":916},[324,158047,158048,158050,158052,158054,158056,158058],{"class":326,"line":203},[324,158049,31137],{"class":916},[324,158051,156280],{"class":867},[324,158053,2441],{"class":863},[324,158055,156797],{"class":916},[324,158057,46530],{"class":867},[324,158059,158060],{"class":772},"# True\n",[14,158062,158064],{"id":158063},"_32-if基础语法","3.2 if基础语法",[316,158066,158068],{"className":31100,"code":158067,"language":31102,"meta":50,"style":50},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"可以进入网吧\")\n",[269,158069,158070,158088,158092,158104],{"__ignoreMap":50},[324,158071,158072,158074,158076,158078,158080,158082,158084,158086],{"class":326,"line":327},[324,158073,147058],{"class":867},[324,158075,913],{"class":863},[324,158077,3112],{"class":916},[324,158079,868],{"class":867},[324,158081,54543],{"class":916},[324,158083,868],{"class":867},[324,158085,152906],{"class":738},[324,158087,31219],{"class":867},[324,158089,158090],{"class":326,"line":203},[324,158091,488],{"emptyLinePlaceholder":487},[324,158093,158094,158096,158098,158100,158102],{"class":326,"line":338},[324,158095,2262],{"class":863},[324,158097,16436],{"class":867},[324,158099,2441],{"class":863},[324,158101,156797],{"class":916},[324,158103,4468],{"class":867},[324,158105,158106,158108,158110,158113],{"class":326,"line":344},[324,158107,32021],{"class":916},[324,158109,868],{"class":867},[324,158111,158112],{"class":738},"\"可以进入网吧\"",[324,158114,874],{"class":867},[19,158116,9754],{},[192,158118,158119,158124,158127,158130],{},[195,158120,158121,158123],{},[269,158122,2262],{}," 后面是条件表达式。",[195,158125,158126],{},"条件后面必须写冒号。",[195,158128,158129],{},"条件成立时执行缩进代码块。",[195,158131,158132],{},"Python 用缩进表示代码层级，一般使用 4 个空格。",[19,158134,158135],{},"错误示例：",[316,158137,158139],{"className":31100,"code":158138,"language":31102,"meta":50,"style":50},"if age >= 18\n    print(\"可以进入\")\n",[269,158140,158141,158151],{"__ignoreMap":50},[324,158142,158143,158145,158147,158149],{"class":326,"line":327},[324,158144,2262],{"class":863},[324,158146,16436],{"class":867},[324,158148,2441],{"class":863},[324,158150,147063],{"class":916},[324,158152,158153,158155,158157,158160],{"class":326,"line":203},[324,158154,32021],{"class":916},[324,158156,868],{"class":867},[324,158158,158159],{"class":738},"\"可以进入\"",[324,158161,874],{"class":867},[19,158163,158164],{},"缺少冒号。",[14,158166,158168],{"id":158167},"_33-if-else","3.3 if else",[316,158170,158172],{"className":31100,"code":158171,"language":31102,"meta":50,"style":50},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"成年人\")\nelse:\n    print(\"未成年人\")\n",[269,158173,158174,158192,158196,158208,158219,158225],{"__ignoreMap":50},[324,158175,158176,158178,158180,158182,158184,158186,158188,158190],{"class":326,"line":327},[324,158177,147058],{"class":867},[324,158179,913],{"class":863},[324,158181,3112],{"class":916},[324,158183,868],{"class":867},[324,158185,54543],{"class":916},[324,158187,868],{"class":867},[324,158189,152906],{"class":738},[324,158191,31219],{"class":867},[324,158193,158194],{"class":326,"line":203},[324,158195,488],{"emptyLinePlaceholder":487},[324,158197,158198,158200,158202,158204,158206],{"class":326,"line":338},[324,158199,2262],{"class":863},[324,158201,16436],{"class":867},[324,158203,2441],{"class":863},[324,158205,156797],{"class":916},[324,158207,4468],{"class":867},[324,158209,158210,158212,158214,158217],{"class":326,"line":344},[324,158211,32021],{"class":916},[324,158213,868],{"class":867},[324,158215,158216],{"class":738},"\"成年人\"",[324,158218,874],{"class":867},[324,158220,158221,158223],{"class":326,"line":484},[324,158222,2432],{"class":863},[324,158224,4468],{"class":867},[324,158226,158227,158229,158231,158234],{"class":326,"line":491},[324,158228,32021],{"class":916},[324,158230,868],{"class":867},[324,158232,158233],{"class":738},"\"未成年人\"",[324,158235,874],{"class":867},[19,158237,158238],{},"执行逻辑：",[192,158240,158241,158247,158252],{},[195,158242,158243,158244,158246],{},"条件成立，执行 ",[269,158245,2262],{}," 代码块。",[195,158248,158249,158250,158246],{},"条件不成立，执行 ",[269,158251,2432],{},[195,158253,158254],{},"两个代码块只会执行其中一个。",[14,158256,158258],{"id":158257},"_34-if-elif-else","3.4 if elif else",[19,158260,158261],{},"多条件判断：",[316,158263,158265],{"className":31100,"code":158264,"language":31102,"meta":50,"style":50},"score = int(input(\"请输入成绩:\"))\n\nif score >= 90:\n    print(\"优秀\")\nelif score >= 80:\n    print(\"良好\")\nelif score >= 60:\n    print(\"及格\")\nelse:\n    print(\"不及格\")\n",[269,158266,158267,158285,158289,158303,158314,158328,158339,158352,158363,158369],{"__ignoreMap":50},[324,158268,158269,158271,158273,158275,158277,158279,158281,158283],{"class":326,"line":327},[324,158270,155870],{"class":867},[324,158272,913],{"class":863},[324,158274,3112],{"class":916},[324,158276,868],{"class":867},[324,158278,54543],{"class":916},[324,158280,868],{"class":867},[324,158282,152921],{"class":738},[324,158284,31219],{"class":867},[324,158286,158287],{"class":326,"line":203},[324,158288,488],{"emptyLinePlaceholder":487},[324,158290,158291,158293,158296,158298,158301],{"class":326,"line":338},[324,158292,2262],{"class":863},[324,158294,158295],{"class":867}," score ",[324,158297,2441],{"class":863},[324,158299,158300],{"class":916}," 90",[324,158302,4468],{"class":867},[324,158304,158305,158307,158309,158312],{"class":326,"line":344},[324,158306,32021],{"class":916},[324,158308,868],{"class":867},[324,158310,158311],{"class":738},"\"优秀\"",[324,158313,874],{"class":867},[324,158315,158316,158319,158321,158323,158326],{"class":326,"line":484},[324,158317,158318],{"class":863},"elif",[324,158320,158295],{"class":867},[324,158322,2441],{"class":863},[324,158324,158325],{"class":916}," 80",[324,158327,4468],{"class":867},[324,158329,158330,158332,158334,158337],{"class":326,"line":491},[324,158331,32021],{"class":916},[324,158333,868],{"class":867},[324,158335,158336],{"class":738},"\"良好\"",[324,158338,874],{"class":867},[324,158340,158341,158343,158345,158347,158350],{"class":326,"line":496},[324,158342,158318],{"class":863},[324,158344,158295],{"class":867},[324,158346,2441],{"class":863},[324,158348,158349],{"class":916}," 60",[324,158351,4468],{"class":867},[324,158353,158354,158356,158358,158361],{"class":326,"line":502},[324,158355,32021],{"class":916},[324,158357,868],{"class":867},[324,158359,158360],{"class":738},"\"及格\"",[324,158362,874],{"class":867},[324,158364,158365,158367],{"class":326,"line":508},[324,158366,2432],{"class":863},[324,158368,4468],{"class":867},[324,158370,158371,158373,158375,158378],{"class":326,"line":514},[324,158372,32021],{"class":916},[324,158374,868],{"class":867},[324,158376,158377],{"class":738},"\"不及格\"",[324,158379,874],{"class":867},[19,158381,158382],{},"注意判断顺序很重要。",[19,158384,158385,158386,158389],{},"如果把 ",[269,158387,158388],{},"score >= 60"," 放在最前面：",[316,158391,158393],{"className":31100,"code":158392,"language":31102,"meta":50,"style":50},"if score >= 60:\n    print(\"及格\")\nelif score >= 90:\n    print(\"优秀\")\n",[269,158394,158395,158407,158417,158429],{"__ignoreMap":50},[324,158396,158397,158399,158401,158403,158405],{"class":326,"line":327},[324,158398,2262],{"class":863},[324,158400,158295],{"class":867},[324,158402,2441],{"class":863},[324,158404,158349],{"class":916},[324,158406,4468],{"class":867},[324,158408,158409,158411,158413,158415],{"class":326,"line":203},[324,158410,32021],{"class":916},[324,158412,868],{"class":867},[324,158414,158360],{"class":738},[324,158416,874],{"class":867},[324,158418,158419,158421,158423,158425,158427],{"class":326,"line":338},[324,158420,158318],{"class":863},[324,158422,158295],{"class":867},[324,158424,2441],{"class":863},[324,158426,158300],{"class":916},[324,158428,4468],{"class":867},[324,158430,158431,158433,158435,158437],{"class":326,"line":344},[324,158432,32021],{"class":916},[324,158434,868],{"class":867},[324,158436,158311],{"class":738},[324,158438,874],{"class":867},[19,158440,158441,158442,158444],{},"成绩 95 会先满足 ",[269,158443,158388],{},"，后面的优秀分支就不会执行。",[14,158446,158448],{"id":158447},"_35-判断语句嵌套","3.5 判断语句嵌套",[19,158450,158451],{},"嵌套判断就是在一个判断内部再写判断。",[316,158453,158455],{"className":31100,"code":158454,"language":31102,"meta":50,"style":50},"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",[269,158456,158457,158475,158490,158494,158506,158520,158530,158537,158548,158554],{"__ignoreMap":50},[324,158458,158459,158461,158463,158465,158467,158469,158471,158473],{"class":326,"line":327},[324,158460,147058],{"class":867},[324,158462,913],{"class":863},[324,158464,3112],{"class":916},[324,158466,868],{"class":867},[324,158468,54543],{"class":916},[324,158470,868],{"class":867},[324,158472,152906],{"class":738},[324,158474,31219],{"class":867},[324,158476,158477,158479,158481,158483,158485,158488],{"class":326,"line":203},[324,158478,156873],{"class":867},[324,158480,913],{"class":863},[324,158482,61327],{"class":916},[324,158484,868],{"class":867},[324,158486,158487],{"class":738},"\"是否有票(y\u002Fn):\"",[324,158489,874],{"class":867},[324,158491,158492],{"class":326,"line":338},[324,158493,488],{"emptyLinePlaceholder":487},[324,158495,158496,158498,158500,158502,158504],{"class":326,"line":344},[324,158497,2262],{"class":863},[324,158499,16436],{"class":867},[324,158501,2441],{"class":863},[324,158503,156797],{"class":916},[324,158505,4468],{"class":867},[324,158507,158508,158510,158513,158515,158518],{"class":326,"line":484},[324,158509,3830],{"class":863},[324,158511,158512],{"class":867}," has_ticket ",[324,158514,3678],{"class":863},[324,158516,158517],{"class":738}," \"y\"",[324,158519,4468],{"class":867},[324,158521,158522,158524,158526,158528],{"class":326,"line":491},[324,158523,33173],{"class":916},[324,158525,868],{"class":867},[324,158527,158159],{"class":738},[324,158529,874],{"class":867},[324,158531,158532,158535],{"class":326,"line":496},[324,158533,158534],{"class":863},"    else",[324,158536,4468],{"class":867},[324,158538,158539,158541,158543,158546],{"class":326,"line":502},[324,158540,33173],{"class":916},[324,158542,868],{"class":867},[324,158544,158545],{"class":738},"\"请先买票\"",[324,158547,874],{"class":867},[324,158549,158550,158552],{"class":326,"line":508},[324,158551,2432],{"class":863},[324,158553,4468],{"class":867},[324,158555,158556,158558,158560,158563],{"class":326,"line":514},[324,158557,32021],{"class":916},[324,158559,868],{"class":867},[324,158561,158562],{"class":738},"\"未成年人禁止进入\"",[324,158564,874],{"class":867},[19,158566,158567],{},"嵌套层级不要太深，超过 3 层就应该考虑拆成函数或调整条件。",[14,158569,158571],{"id":158570},"_36-逻辑运算组合条件","3.6 逻辑运算组合条件",[35,158573,158575],{"id":158574},"_361-and","3.6.1 and",[19,158577,158578],{},"两个条件都成立才成立。",[316,158580,158582],{"className":31100,"code":158581,"language":31102,"meta":50,"style":50},"age = 20\nhas_ticket = True\n\nif age >= 18 and has_ticket:\n    print(\"可以进入\")\n",[269,158583,158584,158592,158600,158604,158619],{"__ignoreMap":50},[324,158585,158586,158588,158590],{"class":326,"line":327},[324,158587,147058],{"class":867},[324,158589,913],{"class":863},[324,158591,88787],{"class":916},[324,158593,158594,158596,158598],{"class":326,"line":203},[324,158595,156873],{"class":867},[324,158597,913],{"class":863},[324,158599,154111],{"class":916},[324,158601,158602],{"class":326,"line":338},[324,158603,488],{"emptyLinePlaceholder":487},[324,158605,158606,158608,158610,158612,158614,158616],{"class":326,"line":344},[324,158607,2262],{"class":863},[324,158609,16436],{"class":867},[324,158611,2441],{"class":863},[324,158613,156797],{"class":916},[324,158615,120941],{"class":863},[324,158617,158618],{"class":867}," has_ticket:\n",[324,158620,158621,158623,158625,158627],{"class":326,"line":484},[324,158622,32021],{"class":916},[324,158624,868],{"class":867},[324,158626,158159],{"class":738},[324,158628,874],{"class":867},[35,158630,158632],{"id":158631},"_362-or","3.6.2 or",[19,158634,158635],{},"只要一个条件成立就成立。",[316,158637,158639],{"className":31100,"code":158638,"language":31102,"meta":50,"style":50},"is_vip = False\ncoupon = True\n\nif is_vip or coupon:\n    print(\"可以享受优惠\")\n",[269,158640,158641,158650,158659,158663,158675],{"__ignoreMap":50},[324,158642,158643,158646,158648],{"class":326,"line":327},[324,158644,158645],{"class":867},"is_vip ",[324,158647,913],{"class":863},[324,158649,126319],{"class":916},[324,158651,158652,158655,158657],{"class":326,"line":203},[324,158653,158654],{"class":867},"coupon ",[324,158656,913],{"class":863},[324,158658,154111],{"class":916},[324,158660,158661],{"class":326,"line":338},[324,158662,488],{"emptyLinePlaceholder":487},[324,158664,158665,158667,158670,158672],{"class":326,"line":344},[324,158666,2262],{"class":863},[324,158668,158669],{"class":867}," is_vip ",[324,158671,115811],{"class":863},[324,158673,158674],{"class":867}," coupon:\n",[324,158676,158677,158679,158681,158684],{"class":326,"line":484},[324,158678,32021],{"class":916},[324,158680,868],{"class":867},[324,158682,158683],{"class":738},"\"可以享受优惠\"",[324,158685,874],{"class":867},[35,158687,158689],{"id":158688},"_363-not","3.6.3 not",[19,158691,158692],{},"取反。",[316,158694,158696],{"className":31100,"code":158695,"language":31102,"meta":50,"style":50},"is_closed = False\n\nif not is_closed:\n    print(\"店铺营业中\")\n",[269,158697,158698,158707,158711,158720],{"__ignoreMap":50},[324,158699,158700,158703,158705],{"class":326,"line":327},[324,158701,158702],{"class":867},"is_closed ",[324,158704,913],{"class":863},[324,158706,126319],{"class":916},[324,158708,158709],{"class":326,"line":203},[324,158710,488],{"emptyLinePlaceholder":487},[324,158712,158713,158715,158717],{"class":326,"line":338},[324,158714,2262],{"class":863},[324,158716,39652],{"class":863},[324,158718,158719],{"class":867}," is_closed:\n",[324,158721,158722,158724,158726,158729],{"class":326,"line":344},[324,158723,32021],{"class":916},[324,158725,868],{"class":867},[324,158727,158728],{"class":738},"\"店铺营业中\"",[324,158730,874],{"class":867},[14,158732,158734],{"id":158733},"_37-链式比较","3.7 链式比较",[19,158736,158737],{},"Python 支持链式比较：",[316,158739,158741],{"className":31100,"code":158740,"language":31102,"meta":50,"style":50},"score = 85\n\nif 0 \u003C= score \u003C= 100:\n    print(\"成绩合法\")\n",[269,158742,158743,158752,158756,158773],{"__ignoreMap":50},[324,158744,158745,158747,158749],{"class":326,"line":327},[324,158746,155870],{"class":867},[324,158748,913],{"class":863},[324,158750,158751],{"class":916}," 85\n",[324,158753,158754],{"class":326,"line":203},[324,158755,488],{"emptyLinePlaceholder":487},[324,158757,158758,158760,158762,158765,158767,158769,158771],{"class":326,"line":338},[324,158759,2262],{"class":863},[324,158761,4822],{"class":916},[324,158763,158764],{"class":863}," \u003C=",[324,158766,158295],{"class":867},[324,158768,2319],{"class":863},[324,158770,6483],{"class":916},[324,158772,4468],{"class":867},[324,158774,158775,158777,158779,158782],{"class":326,"line":344},[324,158776,32021],{"class":916},[324,158778,868],{"class":867},[324,158780,158781],{"class":738},"\"成绩合法\"",[324,158783,874],{"class":867},[19,158785,158786],{},"等价于：",[316,158788,158790],{"className":31100,"code":158789,"language":31102,"meta":50,"style":50},"if score >= 0 and score \u003C= 100:\n    print(\"成绩合法\")\n",[269,158791,158792,158812],{"__ignoreMap":50},[324,158793,158794,158796,158798,158800,158802,158804,158806,158808,158810],{"class":326,"line":327},[324,158795,2262],{"class":863},[324,158797,158295],{"class":867},[324,158799,2441],{"class":863},[324,158801,4822],{"class":916},[324,158803,120941],{"class":863},[324,158805,158295],{"class":867},[324,158807,2319],{"class":863},[324,158809,6483],{"class":916},[324,158811,4468],{"class":867},[324,158813,158814,158816,158818,158820],{"class":326,"line":203},[324,158815,32021],{"class":916},[324,158817,868],{"class":867},[324,158819,158781],{"class":738},[324,158821,874],{"class":867},[14,158823,158825],{"id":158824},"_38-真值和假值","3.8 真值和假值",[19,158827,117188,158828,158830],{},[269,158829,2262],{}," 中，不只有布尔值能做条件。很多对象也能被判断为真或假。",[19,158832,158833],{},"假值：",[316,158835,158837],{"className":31100,"code":158836,"language":31102,"meta":50,"style":50},"False\nNone\n0\n0.0\n\"\"\n[]\n()\n{}\nset()\n",[269,158838,158839,158843,158848,158852,158856,158861,158865,158869,158874],{"__ignoreMap":50},[324,158840,158841],{"class":326,"line":327},[324,158842,158029],{"class":916},[324,158844,158845],{"class":326,"line":203},[324,158846,158847],{"class":916},"None\n",[324,158849,158850],{"class":326,"line":338},[324,158851,3814],{"class":916},[324,158853,158854],{"class":326,"line":344},[324,158855,33064],{"class":916},[324,158857,158858],{"class":326,"line":484},[324,158859,158860],{"class":738},"\"\"\n",[324,158862,158863],{"class":326,"line":491},[324,158864,33079],{"class":867},[324,158866,158867],{"class":326,"line":496},[324,158868,2706],{"class":867},[324,158870,158871],{"class":326,"line":502},[324,158872,158873],{"class":867},"{}\n",[324,158875,158876,158878],{"class":326,"line":508},[324,158877,155802],{"class":916},[324,158879,2706],{"class":867},[19,158881,15864],{},[316,158883,158885],{"className":31100,"code":158884,"language":31102,"meta":50,"style":50},"name = input(\"请输入姓名:\")\n\nif name:\n    print(f\"你好，{name}\")\nelse:\n    print(\"姓名不能为空\")\n",[269,158886,158887,158901,158905,158912,158932,158938],{"__ignoreMap":50},[324,158888,158889,158891,158893,158895,158897,158899],{"class":326,"line":327},[324,158890,147048],{"class":867},[324,158892,913],{"class":863},[324,158894,61327],{"class":916},[324,158896,868],{"class":867},[324,158898,152891],{"class":738},[324,158900,874],{"class":867},[324,158902,158903],{"class":326,"line":203},[324,158904,488],{"emptyLinePlaceholder":487},[324,158906,158907,158909],{"class":326,"line":338},[324,158908,2262],{"class":863},[324,158910,158911],{"class":867}," name:\n",[324,158913,158914,158916,158918,158920,158922,158924,158926,158928,158930],{"class":326,"line":344},[324,158915,32021],{"class":916},[324,158917,868],{"class":867},[324,158919,920],{"class":863},[324,158921,157566],{"class":738},[324,158923,1760],{"class":916},[324,158925,80532],{"class":867},[324,158927,1810],{"class":916},[324,158929,1115],{"class":738},[324,158931,874],{"class":867},[324,158933,158934,158936],{"class":326,"line":484},[324,158935,2432],{"class":863},[324,158937,4468],{"class":867},[324,158939,158940,158942,158944,158947],{"class":326,"line":491},[324,158941,32021],{"class":916},[324,158943,868],{"class":867},[324,158945,158946],{"class":738},"\"姓名不能为空\"",[324,158948,874],{"class":867},[14,158950,158952],{"id":158951},"_39-match语句","3.9 match语句",[19,158954,158955,158956,158958],{},"Python 3.10 开始支持 ",[269,158957,71987],{},"。它适合处理固定选项。",[316,158960,158962],{"className":31100,"code":158961,"language":31102,"meta":50,"style":50},"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",[269,158963,158964,158980,158984,158991,159001,159012,159021,159032,159041,159052,159059],{"__ignoreMap":50},[324,158965,158966,158969,158971,158973,158975,158978],{"class":326,"line":327},[324,158967,158968],{"class":867},"command ",[324,158970,913],{"class":863},[324,158972,61327],{"class":916},[324,158974,868],{"class":867},[324,158976,158977],{"class":738},"\"请输入命令:\"",[324,158979,874],{"class":867},[324,158981,158982],{"class":326,"line":203},[324,158983,488],{"emptyLinePlaceholder":487},[324,158985,158986,158988],{"class":326,"line":338},[324,158987,71987],{"class":863},[324,158989,158990],{"class":867}," command:\n",[324,158992,158993,158996,158999],{"class":326,"line":344},[324,158994,158995],{"class":863},"    case",[324,158997,158998],{"class":738}," \"start\"",[324,159000,4468],{"class":867},[324,159002,159003,159005,159007,159010],{"class":326,"line":484},[324,159004,33173],{"class":916},[324,159006,868],{"class":867},[324,159008,159009],{"class":738},"\"启动\"",[324,159011,874],{"class":867},[324,159013,159014,159016,159019],{"class":326,"line":491},[324,159015,158995],{"class":863},[324,159017,159018],{"class":738}," \"stop\"",[324,159020,4468],{"class":867},[324,159022,159023,159025,159027,159030],{"class":326,"line":496},[324,159024,33173],{"class":916},[324,159026,868],{"class":867},[324,159028,159029],{"class":738},"\"停止\"",[324,159031,874],{"class":867},[324,159033,159034,159036,159039],{"class":326,"line":502},[324,159035,158995],{"class":863},[324,159037,159038],{"class":738}," \"restart\"",[324,159040,4468],{"class":867},[324,159042,159043,159045,159047,159050],{"class":326,"line":508},[324,159044,33173],{"class":916},[324,159046,868],{"class":867},[324,159048,159049],{"class":738},"\"重启\"",[324,159051,874],{"class":867},[324,159053,159054,159056],{"class":326,"line":514},[324,159055,158995],{"class":863},[324,159057,159058],{"class":867}," _:\n",[324,159060,159061,159063,159065,159068],{"class":326,"line":2343},[324,159062,33173],{"class":916},[324,159064,868],{"class":867},[324,159066,159067],{"class":738},"\"未知命令\"",[324,159069,874],{"class":867},[19,159071,159072,159073,159075,159076,159078],{},"入门阶段掌握 ",[269,159074,155170],{}," 更重要，",[269,159077,71987],{}," 可以作为补充。",[14,159080,159082],{"id":159081},"_310-小案例成绩等级","3.10 小案例：成绩等级",[19,159084,123804],{},[192,159086,159087,159090,159093],{},[195,159088,159089],{},"输入成绩。",[195,159091,159092],{},"判断成绩是否合法。",[195,159094,159095],{},"输出等级。",[19,159097,10764],{},[316,159099,159101],{"className":31100,"code":159100,"language":31102,"meta":50,"style":50},"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",[269,159102,159103,159121,159125,159143,159154,159166,159177,159189,159200,159213,159224,159236,159247,159253],{"__ignoreMap":50},[324,159104,159105,159107,159109,159111,159113,159115,159117,159119],{"class":326,"line":327},[324,159106,155870],{"class":867},[324,159108,913],{"class":863},[324,159110,110518],{"class":916},[324,159112,868],{"class":867},[324,159114,54543],{"class":916},[324,159116,868],{"class":867},[324,159118,152921],{"class":738},[324,159120,31219],{"class":867},[324,159122,159123],{"class":326,"line":203},[324,159124,488],{"emptyLinePlaceholder":487},[324,159126,159127,159129,159131,159133,159135,159137,159139,159141],{"class":326,"line":338},[324,159128,2262],{"class":863},[324,159130,39652],{"class":863},[324,159132,4822],{"class":916},[324,159134,158764],{"class":863},[324,159136,158295],{"class":867},[324,159138,2319],{"class":863},[324,159140,6483],{"class":916},[324,159142,4468],{"class":867},[324,159144,159145,159147,159149,159152],{"class":326,"line":344},[324,159146,32021],{"class":916},[324,159148,868],{"class":867},[324,159150,159151],{"class":738},"\"成绩不合法\"",[324,159153,874],{"class":867},[324,159155,159156,159158,159160,159162,159164],{"class":326,"line":484},[324,159157,158318],{"class":863},[324,159159,158295],{"class":867},[324,159161,2441],{"class":863},[324,159163,158300],{"class":916},[324,159165,4468],{"class":867},[324,159167,159168,159170,159172,159175],{"class":326,"line":491},[324,159169,32021],{"class":916},[324,159171,868],{"class":867},[324,159173,159174],{"class":738},"\"等级:A\"",[324,159176,874],{"class":867},[324,159178,159179,159181,159183,159185,159187],{"class":326,"line":496},[324,159180,158318],{"class":863},[324,159182,158295],{"class":867},[324,159184,2441],{"class":863},[324,159186,158325],{"class":916},[324,159188,4468],{"class":867},[324,159190,159191,159193,159195,159198],{"class":326,"line":502},[324,159192,32021],{"class":916},[324,159194,868],{"class":867},[324,159196,159197],{"class":738},"\"等级:B\"",[324,159199,874],{"class":867},[324,159201,159202,159204,159206,159208,159211],{"class":326,"line":508},[324,159203,158318],{"class":863},[324,159205,158295],{"class":867},[324,159207,2441],{"class":863},[324,159209,159210],{"class":916}," 70",[324,159212,4468],{"class":867},[324,159214,159215,159217,159219,159222],{"class":326,"line":514},[324,159216,32021],{"class":916},[324,159218,868],{"class":867},[324,159220,159221],{"class":738},"\"等级:C\"",[324,159223,874],{"class":867},[324,159225,159226,159228,159230,159232,159234],{"class":326,"line":2343},[324,159227,158318],{"class":863},[324,159229,158295],{"class":867},[324,159231,2441],{"class":863},[324,159233,158349],{"class":916},[324,159235,4468],{"class":867},[324,159237,159238,159240,159242,159245],{"class":326,"line":2348},[324,159239,32021],{"class":916},[324,159241,868],{"class":867},[324,159243,159244],{"class":738},"\"等级:D\"",[324,159246,874],{"class":867},[324,159248,159249,159251],{"class":326,"line":2354},[324,159250,2432],{"class":863},[324,159252,4468],{"class":867},[324,159254,159255,159257,159259,159262],{"class":326,"line":2359},[324,159256,32021],{"class":916},[324,159258,868],{"class":867},[324,159260,159261],{"class":738},"\"等级:E\"",[324,159263,874],{"class":867},[14,159265,159267],{"id":159266},"_311-小案例会员折扣","3.11 小案例：会员折扣",[19,159269,123804],{},[192,159271,159272,159275,159278,159281],{},[195,159273,159274],{},"输入消费金额。",[195,159276,159277],{},"输入会员等级，普通、银卡、金卡。",[195,159279,159280],{},"普通不打折，银卡 9 折，金卡 8 折。",[195,159282,159283],{},"满 500 再减 50。",[19,159285,10764],{},[316,159287,159289],{"className":31100,"code":159288,"language":31102,"meta":50,"style":50},"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",[269,159290,159291,159311,159327,159331,159339,159343,159357,159367,159380,159389,159402,159410,159416,159427,159431,159445,159449,159463,159473,159477],{"__ignoreMap":50},[324,159292,159293,159296,159298,159300,159302,159304,159306,159309],{"class":326,"line":327},[324,159294,159295],{"class":867},"amount ",[324,159297,913],{"class":863},[324,159299,110518],{"class":916},[324,159301,868],{"class":867},[324,159303,54543],{"class":916},[324,159305,868],{"class":867},[324,159307,159308],{"class":738},"\"请输入消费金额:\"",[324,159310,31219],{"class":867},[324,159312,159313,159316,159318,159320,159322,159325],{"class":326,"line":203},[324,159314,159315],{"class":867},"level ",[324,159317,913],{"class":863},[324,159319,61327],{"class":916},[324,159321,868],{"class":867},[324,159323,159324],{"class":738},"\"请输入会员等级(普通\u002F银卡\u002F金卡):\"",[324,159326,874],{"class":867},[324,159328,159329],{"class":326,"line":338},[324,159330,488],{"emptyLinePlaceholder":487},[324,159332,159333,159335,159337],{"class":326,"line":344},[324,159334,157748],{"class":867},[324,159336,913],{"class":863},[324,159338,56421],{"class":916},[324,159340,159341],{"class":326,"line":484},[324,159342,488],{"emptyLinePlaceholder":487},[324,159344,159345,159347,159350,159352,159355],{"class":326,"line":491},[324,159346,2262],{"class":863},[324,159348,159349],{"class":867}," level ",[324,159351,3678],{"class":863},[324,159353,159354],{"class":738}," \"银卡\"",[324,159356,4468],{"class":867},[324,159358,159359,159362,159364],{"class":326,"line":496},[324,159360,159361],{"class":867},"    discount ",[324,159363,913],{"class":863},[324,159365,159366],{"class":916}," 0.9\n",[324,159368,159369,159371,159373,159375,159378],{"class":326,"line":502},[324,159370,158318],{"class":863},[324,159372,159349],{"class":867},[324,159374,3678],{"class":863},[324,159376,159377],{"class":738}," \"金卡\"",[324,159379,4468],{"class":867},[324,159381,159382,159384,159386],{"class":326,"line":508},[324,159383,159361],{"class":867},[324,159385,913],{"class":863},[324,159387,159388],{"class":916}," 0.8\n",[324,159390,159391,159393,159395,159397,159400],{"class":326,"line":514},[324,159392,158318],{"class":863},[324,159394,159349],{"class":867},[324,159396,3678],{"class":863},[324,159398,159399],{"class":738}," \"普通\"",[324,159401,4468],{"class":867},[324,159403,159404,159406,159408],{"class":326,"line":2343},[324,159405,159361],{"class":867},[324,159407,913],{"class":863},[324,159409,56421],{"class":916},[324,159411,159412,159414],{"class":326,"line":2348},[324,159413,2432],{"class":863},[324,159415,4468],{"class":867},[324,159417,159418,159420,159422,159425],{"class":326,"line":2354},[324,159419,32021],{"class":916},[324,159421,868],{"class":867},[324,159423,159424],{"class":738},"\"会员等级输入错误，按普通会员计算\"",[324,159426,874],{"class":867},[324,159428,159429],{"class":326,"line":2359},[324,159430,488],{"emptyLinePlaceholder":487},[324,159432,159433,159436,159438,159441,159443],{"class":326,"line":2373},[324,159434,159435],{"class":867},"pay ",[324,159437,913],{"class":863},[324,159439,159440],{"class":867}," amount ",[324,159442,1319],{"class":863},[324,159444,157787],{"class":867},[324,159446,159447],{"class":326,"line":2378},[324,159448,488],{"emptyLinePlaceholder":487},[324,159450,159451,159453,159456,159458,159461],{"class":326,"line":2384},[324,159452,2262],{"class":863},[324,159454,159455],{"class":867}," pay ",[324,159457,2441],{"class":863},[324,159459,159460],{"class":916}," 500",[324,159462,4468],{"class":867},[324,159464,159465,159468,159470],{"class":326,"line":2405},[324,159466,159467],{"class":867},"    pay ",[324,159469,150764],{"class":863},[324,159471,159472],{"class":916}," 50\n",[324,159474,159475],{"class":326,"line":2410},[324,159476,488],{"emptyLinePlaceholder":487},[324,159478,159479,159481,159483,159485,159487,159489,159492,159494,159496,159498],{"class":326,"line":2424},[324,159480,31137],{"class":916},[324,159482,868],{"class":867},[324,159484,920],{"class":863},[324,159486,157868],{"class":738},[324,159488,1760],{"class":916},[324,159490,159491],{"class":867},"pay",[324,159493,157671],{"class":863},[324,159495,1810],{"class":916},[324,159497,157524],{"class":738},[324,159499,874],{"class":867},[14,159501,159503],{"id":159502},"_312-易错点","3.12 易错点",[192,159505,159506,159509,159512,159515,159520],{},[195,159507,159508],{},"冒号不能漏。",[195,159510,159511],{},"缩进必须统一，不能一会儿 Tab 一会儿空格。",[195,159513,159514],{},"多分支判断要注意顺序。",[195,159516,159517,159518,29107],{},"判断相等用 ",[269,159519,3678],{},[195,159521,159522],{},"字符串比较区分大小写：",[316,159524,159526],{"className":31100,"code":159525,"language":31102,"meta":50,"style":50},"\"Y\" == \"y\"  # False\n",[269,159527,159528],{"__ignoreMap":50},[324,159529,159530,159533,159535,159537],{"class":326,"line":327},[324,159531,159532],{"class":738},"\"Y\"",[324,159534,102280],{"class":863},[324,159536,158517],{"class":738},[324,159538,159539],{"class":772},"  # False\n",[19,159541,159542],{},"可转换后再判断：",[316,159544,159546],{"className":31100,"code":159545,"language":31102,"meta":50,"style":50},"answer = input(\"是否继续(y\u002Fn):\").lower()\nif answer == \"y\":\n    print(\"继续\")\n",[269,159547,159548,159565,159578],{"__ignoreMap":50},[324,159549,159550,159553,159555,159557,159559,159562],{"class":326,"line":327},[324,159551,159552],{"class":867},"answer ",[324,159554,913],{"class":863},[324,159556,61327],{"class":916},[324,159558,868],{"class":867},[324,159560,159561],{"class":738},"\"是否继续(y\u002Fn):\"",[324,159563,159564],{"class":867},").lower()\n",[324,159566,159567,159569,159572,159574,159576],{"class":326,"line":203},[324,159568,2262],{"class":863},[324,159570,159571],{"class":867}," answer ",[324,159573,3678],{"class":863},[324,159575,158517],{"class":738},[324,159577,4468],{"class":867},[324,159579,159580,159582,159584,159587],{"class":326,"line":338},[324,159581,32021],{"class":916},[324,159583,868],{"class":867},[324,159585,159586],{"class":738},"\"继续\"",[324,159588,874],{"class":867},[14,159590,159592],{"id":159591},"_313-本章练习","3.13 本章练习",[192,159594,159595,159598,159601,159604,159614],{},[195,159596,159597],{},"输入年龄，判断是否成年。",[195,159599,159600],{},"输入年份，判断是否为闰年。",[195,159602,159603],{},"输入三个数字，输出最大值。",[195,159605,159606,159607,159610,159611,159613],{},"写登录判断：用户名是 ",[269,159608,159609],{},"admin"," 且密码是 ",[269,159612,15813],{}," 才登录成功。",[195,159615,159616],{},"写 BMI 判断程序，根据 BMI 输出偏瘦、正常、偏胖、肥胖。",[775,159618,159619],{},"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":50,"searchDepth":203,"depth":203,"links":159621},[159622,159623,159624,159625,159626,159627,159632,159633,159634,159635,159636,159637,159638],{"id":158010,"depth":203,"text":158011},{"id":158063,"depth":203,"text":158064},{"id":158167,"depth":203,"text":158168},{"id":158257,"depth":203,"text":158258},{"id":158447,"depth":203,"text":158448},{"id":158570,"depth":203,"text":158571,"children":159628},[159629,159630,159631],{"id":158574,"depth":338,"text":158575},{"id":158631,"depth":338,"text":158632},{"id":158688,"depth":338,"text":158689},{"id":158733,"depth":203,"text":158734},{"id":158824,"depth":203,"text":158825},{"id":158951,"depth":203,"text":158952},{"id":159081,"depth":203,"text":159082},{"id":159266,"depth":203,"text":159267},{"id":159502,"depth":203,"text":159503},{"id":159591,"depth":203,"text":159592},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch3",{"title":158002,"description":791},"wiki\u002F2024-10-10-python教程\u002Fch3-判断语句","oDk8-y3MbhdWOUdgOWXuIP5YOyzaLgeTq9n7H6mCe_M",{"id":159645,"title":159646,"body":159647,"description":791,"extension":792,"meta":161416,"navigation":487,"path":161417,"seo":161418,"stem":161419,"__hash__":161420},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch4-循环语句.md","4. 循环语句",{"type":7,"value":159648,"toc":161396},[159649,159652,159656,159662,159665,159682,159686,159688,159705,159707,159752,159754,159771,159775,159778,159844,159847,159865,159869,160030,160039,160043,160047,160052,160099,160101,160107,160111,160116,160163,160165,160171,160175,160180,160216,160219,160266,160270,160276,160334,160339,160370,160375,160379,160434,160437,160509,160512,160571,160575,160578,160653,160656,160660,160766,160769,160795,160799,160811,160880,160883,160975,160979,160981,160992,160994,161124,161128,161330,161338,161342,161372,161376,161393],[10,159650,159646],{"id":159651},"_4-循环语句",[14,159653,159655],{"id":159654},"_41-为什么需要循环","4.1 为什么需要循环",[19,159657,159658,159659,159661],{},"如果要输出 1 到 100，不应该写 100 行 ",[269,159660,146984],{},"，而应该用循环。",[19,159663,159664],{},"循环适合处理重复任务：",[192,159666,159667,159670,159673,159676,159679],{},[195,159668,159669],{},"重复输出。",[195,159671,159672],{},"重复输入。",[195,159674,159675],{},"遍历数据。",[195,159677,159678],{},"持续执行菜单。",[195,159680,159681],{},"批量处理文件或数据。",[14,159683,159685],{"id":159684},"_42-while循环","4.2 while循环",[19,159687,5910],{},[316,159689,159691],{"className":31100,"code":159690,"language":31102,"meta":50,"style":50},"while 条件:\n    循环体\n",[269,159692,159693,159700],{"__ignoreMap":50},[324,159694,159695,159697],{"class":326,"line":327},[324,159696,109384],{"class":863},[324,159698,159699],{"class":867}," 条件:\n",[324,159701,159702],{"class":326,"line":203},[324,159703,159704],{"class":867},"    循环体\n",[19,159706,15864],{},[316,159708,159710],{"className":31100,"code":159709,"language":31102,"meta":50,"style":50},"i = 1\n\nwhile i \u003C= 5:\n    print(i)\n    i += 1\n",[269,159711,159712,159720,159724,159736,159743],{"__ignoreMap":50},[324,159713,159714,159716,159718],{"class":326,"line":327},[324,159715,100870],{"class":867},[324,159717,913],{"class":863},[324,159719,56421],{"class":916},[324,159721,159722],{"class":326,"line":203},[324,159723,488],{"emptyLinePlaceholder":487},[324,159725,159726,159728,159730,159732,159734],{"class":326,"line":338},[324,159727,109384],{"class":863},[324,159729,10167],{"class":867},[324,159731,2319],{"class":863},[324,159733,2878],{"class":916},[324,159735,4468],{"class":867},[324,159737,159738,159740],{"class":326,"line":344},[324,159739,32021],{"class":916},[324,159741,159742],{"class":867},"(i)\n",[324,159744,159745,159748,159750],{"class":326,"line":484},[324,159746,159747],{"class":867},"    i ",[324,159749,10206],{"class":863},[324,159751,56421],{"class":916},[19,159753,81651],{},[192,159755,159756,159762,159765,159768],{},[195,159757,159758,159759,29107],{},"判断条件 ",[269,159760,159761],{},"i \u003C= 5",[195,159763,159764],{},"条件成立，执行循环体。",[195,159766,159767],{},"执行完后回到条件判断。",[195,159769,159770],{},"条件不成立，退出循环。",[14,159772,159774],{"id":159773},"_43-while累加","4.3 while累加",[19,159776,159777],{},"计算 1 到 100 的和：",[316,159779,159781],{"className":31100,"code":159780,"language":31102,"meta":50,"style":50},"i = 1\ntotal = 0\n\nwhile i \u003C= 100:\n    total += i\n    i += 1\n\nprint(total)\n",[269,159782,159783,159791,159799,159803,159815,159825,159833,159837],{"__ignoreMap":50},[324,159784,159785,159787,159789],{"class":326,"line":327},[324,159786,100870],{"class":867},[324,159788,913],{"class":863},[324,159790,56421],{"class":916},[324,159792,159793,159795,159797],{"class":326,"line":203},[324,159794,157772],{"class":867},[324,159796,913],{"class":863},[324,159798,48055],{"class":916},[324,159800,159801],{"class":326,"line":338},[324,159802,488],{"emptyLinePlaceholder":487},[324,159804,159805,159807,159809,159811,159813],{"class":326,"line":344},[324,159806,109384],{"class":863},[324,159808,10167],{"class":867},[324,159810,2319],{"class":863},[324,159812,6483],{"class":916},[324,159814,4468],{"class":867},[324,159816,159817,159820,159822],{"class":326,"line":484},[324,159818,159819],{"class":867},"    total ",[324,159821,10206],{"class":863},[324,159823,159824],{"class":867}," i\n",[324,159826,159827,159829,159831],{"class":326,"line":491},[324,159828,159747],{"class":867},[324,159830,10206],{"class":863},[324,159832,56421],{"class":916},[324,159834,159835],{"class":326,"line":496},[324,159836,488],{"emptyLinePlaceholder":487},[324,159838,159839,159841],{"class":326,"line":502},[324,159840,31137],{"class":916},[324,159842,159843],{"class":867},"(total)\n",[19,159845,159846],{},"核心思想：",[192,159848,159849,159854,159859],{},[195,159850,159851,159853],{},[269,159852,1305],{}," 控制循环次数。",[195,159855,159856,159858],{},[269,159857,157873],{}," 保存累加结果。",[195,159860,159861,159862,159864],{},"每轮循环都要更新 ",[269,159863,1305],{},"，否则可能死循环。",[14,159866,159868],{"id":159867},"_44-while猜数字","4.4 while猜数字",[316,159870,159872],{"className":31100,"code":159871,"language":31102,"meta":50,"style":50},"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",[269,159873,159874,159880,159884,159901,159909,159913,159921,159941,159950,159954,159966,159977,159987,159998,160004,160026],{"__ignoreMap":50},[324,159875,159876,159878],{"class":326,"line":327},[324,159877,31114],{"class":863},[324,159879,46050],{"class":867},[324,159881,159882],{"class":326,"line":203},[324,159883,488],{"emptyLinePlaceholder":487},[324,159885,159886,159888,159890,159893,159895,159897,159899],{"class":326,"line":338},[324,159887,159552],{"class":867},[324,159889,913],{"class":863},[324,159891,159892],{"class":867}," random.randint(",[324,159894,1082],{"class":916},[324,159896,13164],{"class":867},[324,159898,1175],{"class":916},[324,159900,874],{"class":867},[324,159902,159903,159905,159907],{"class":326,"line":344},[324,159904,147203],{"class":867},[324,159906,913],{"class":863},[324,159908,48055],{"class":916},[324,159910,159911],{"class":326,"line":484},[324,159912,488],{"emptyLinePlaceholder":487},[324,159914,159915,159917,159919],{"class":326,"line":491},[324,159916,109384],{"class":863},[324,159918,96014],{"class":916},[324,159920,4468],{"class":867},[324,159922,159923,159926,159928,159930,159932,159934,159936,159939],{"class":326,"line":496},[324,159924,159925],{"class":867},"    guess ",[324,159927,913],{"class":863},[324,159929,3112],{"class":916},[324,159931,868],{"class":867},[324,159933,54543],{"class":916},[324,159935,868],{"class":867},[324,159937,159938],{"class":738},"\"请输入1到100之间的数字:\"",[324,159940,31219],{"class":867},[324,159942,159943,159946,159948],{"class":326,"line":502},[324,159944,159945],{"class":867},"    count ",[324,159947,10206],{"class":863},[324,159949,56421],{"class":916},[324,159951,159952],{"class":326,"line":508},[324,159953,488],{"emptyLinePlaceholder":487},[324,159955,159956,159958,159961,159963],{"class":326,"line":514},[324,159957,3830],{"class":863},[324,159959,159960],{"class":867}," guess ",[324,159962,1824],{"class":863},[324,159964,159965],{"class":867}," answer:\n",[324,159967,159968,159970,159972,159975],{"class":326,"line":2343},[324,159969,33173],{"class":916},[324,159971,868],{"class":867},[324,159973,159974],{"class":738},"\"猜大了\"",[324,159976,874],{"class":867},[324,159978,159979,159981,159983,159985],{"class":326,"line":2348},[324,159980,40015],{"class":863},[324,159982,159960],{"class":867},[324,159984,1774],{"class":863},[324,159986,159965],{"class":867},[324,159988,159989,159991,159993,159996],{"class":326,"line":2354},[324,159990,33173],{"class":916},[324,159992,868],{"class":867},[324,159994,159995],{"class":738},"\"猜小了\"",[324,159997,874],{"class":867},[324,159999,160000,160002],{"class":326,"line":2359},[324,160001,158534],{"class":863},[324,160003,4468],{"class":867},[324,160005,160006,160008,160010,160012,160015,160017,160019,160021,160024],{"class":326,"line":2373},[324,160007,33173],{"class":916},[324,160009,868],{"class":867},[324,160011,920],{"class":863},[324,160013,160014],{"class":738},"\"猜对了，一共猜了",[324,160016,1760],{"class":916},[324,160018,85156],{"class":867},[324,160020,1810],{"class":916},[324,160022,160023],{"class":738},"次\"",[324,160025,874],{"class":867},[324,160027,160028],{"class":326,"line":2378},[324,160029,32349],{"class":863},[19,160031,160032,160035,160036,160038],{},[269,160033,160034],{},"while True"," 表示无限循环，通常配合 ",[269,160037,2783],{}," 使用。",[14,160040,160042],{"id":160041},"_45-break和continue","4.5 break和continue",[35,160044,160046],{"id":160045},"_451-break","4.5.1 break",[19,160048,160049,160051],{},[269,160050,2783],{}," 直接结束整个循环。",[316,160053,160055],{"className":31100,"code":160054,"language":31102,"meta":50,"style":50},"for i in range(1, 6):\n    if i == 3:\n        break\n    print(i)\n",[269,160056,160057,160077,160089,160093],{"__ignoreMap":50},[324,160058,160059,160061,160063,160065,160067,160069,160071,160073,160075],{"class":326,"line":327},[324,160060,3754],{"class":863},[324,160062,10167],{"class":867},[324,160064,26767],{"class":863},[324,160066,33165],{"class":916},[324,160068,868],{"class":867},[324,160070,1082],{"class":916},[324,160072,13164],{"class":867},[324,160074,1208],{"class":916},[324,160076,31508],{"class":867},[324,160078,160079,160081,160083,160085,160087],{"class":326,"line":203},[324,160080,3830],{"class":863},[324,160082,10167],{"class":867},[324,160084,3678],{"class":863},[324,160086,78792],{"class":916},[324,160088,4468],{"class":867},[324,160090,160091],{"class":326,"line":338},[324,160092,32349],{"class":863},[324,160094,160095,160097],{"class":326,"line":344},[324,160096,32021],{"class":916},[324,160098,159742],{"class":867},[19,160100,146969],{},[316,160102,160105],{"className":160103,"code":160104,"language":5916,"meta":50},[5914],"1\n2\n",[269,160106,160104],{"__ignoreMap":50},[35,160108,160110],{"id":160109},"_452-continue","4.5.2 continue",[19,160112,160113,160115],{},[269,160114,155184],{}," 跳过本轮剩余代码，进入下一轮循环。",[316,160117,160119],{"className":31100,"code":160118,"language":31102,"meta":50,"style":50},"for i in range(1, 6):\n    if i == 3:\n        continue\n    print(i)\n",[269,160120,160121,160141,160153,160157],{"__ignoreMap":50},[324,160122,160123,160125,160127,160129,160131,160133,160135,160137,160139],{"class":326,"line":327},[324,160124,3754],{"class":863},[324,160126,10167],{"class":867},[324,160128,26767],{"class":863},[324,160130,33165],{"class":916},[324,160132,868],{"class":867},[324,160134,1082],{"class":916},[324,160136,13164],{"class":867},[324,160138,1208],{"class":916},[324,160140,31508],{"class":867},[324,160142,160143,160145,160147,160149,160151],{"class":326,"line":203},[324,160144,3830],{"class":863},[324,160146,10167],{"class":867},[324,160148,3678],{"class":863},[324,160150,78792],{"class":916},[324,160152,4468],{"class":867},[324,160154,160155],{"class":326,"line":338},[324,160156,149024],{"class":863},[324,160158,160159,160161],{"class":326,"line":344},[324,160160,32021],{"class":916},[324,160162,159742],{"class":867},[19,160164,146969],{},[316,160166,160169],{"className":160167,"code":160168,"language":5916,"meta":50},[5914],"1\n2\n4\n5\n",[269,160170,160168],{"__ignoreMap":50},[14,160172,160174],{"id":160173},"_46-for循环","4.6 for循环",[19,160176,160177,160179],{},[269,160178,3754],{}," 常用于遍历序列。",[316,160181,160183],{"className":31100,"code":160182,"language":31102,"meta":50,"style":50},"name = \"python\"\n\nfor ch in name:\n    print(ch)\n",[269,160184,160185,160194,160198,160209],{"__ignoreMap":50},[324,160186,160187,160189,160191],{"class":326,"line":327},[324,160188,147048],{"class":867},[324,160190,913],{"class":863},[324,160192,160193],{"class":738}," \"python\"\n",[324,160195,160196],{"class":326,"line":203},[324,160197,488],{"emptyLinePlaceholder":487},[324,160199,160200,160202,160205,160207],{"class":326,"line":338},[324,160201,3754],{"class":863},[324,160203,160204],{"class":867}," ch ",[324,160206,26767],{"class":863},[324,160208,158911],{"class":867},[324,160210,160211,160213],{"class":326,"line":344},[324,160212,32021],{"class":916},[324,160214,160215],{"class":867},"(ch)\n",[19,160217,160218],{},"遍历列表：",[316,160220,160222],{"className":31100,"code":160221,"language":31102,"meta":50,"style":50},"students = [\"小明\", \"小红\", \"小刚\"]\n\nfor student in students:\n    print(student)\n",[269,160223,160224,160246,160250,160260],{"__ignoreMap":50},[324,160225,160226,160229,160231,160233,160235,160237,160239,160241,160244],{"class":326,"line":327},[324,160227,160228],{"class":867},"students ",[324,160230,913],{"class":863},[324,160232,52948],{"class":867},[324,160234,150400],{"class":738},[324,160236,13164],{"class":867},[324,160238,151448],{"class":738},[324,160240,13164],{"class":867},[324,160242,160243],{"class":738},"\"小刚\"",[324,160245,33968],{"class":867},[324,160247,160248],{"class":326,"line":203},[324,160249,488],{"emptyLinePlaceholder":487},[324,160251,160252,160254,160256,160258],{"class":326,"line":338},[324,160253,3754],{"class":863},[324,160255,152649],{"class":867},[324,160257,26767],{"class":863},[324,160259,152654],{"class":867},[324,160261,160262,160264],{"class":326,"line":344},[324,160263,32021],{"class":916},[324,160265,150554],{"class":867},[14,160267,160269],{"id":160268},"_47-range函数","4.7 range函数",[19,160271,160272,160275],{},[269,160273,160274],{},"range()"," 用于生成整数序列。",[316,160277,160279],{"className":31100,"code":160278,"language":31102,"meta":50,"style":50},"range(5)          # 0,1,2,3,4\nrange(1, 5)       # 1,2,3,4\nrange(1, 10, 2)   # 1,3,5,7,9\n",[269,160280,160281,160295,160313],{"__ignoreMap":50},[324,160282,160283,160285,160287,160289,160292],{"class":326,"line":327},[324,160284,34138],{"class":916},[324,160286,868],{"class":867},[324,160288,1183],{"class":916},[324,160290,160291],{"class":867},")          ",[324,160293,160294],{"class":772},"# 0,1,2,3,4\n",[324,160296,160297,160299,160301,160303,160305,160307,160310],{"class":326,"line":203},[324,160298,34138],{"class":916},[324,160300,868],{"class":867},[324,160302,1082],{"class":916},[324,160304,13164],{"class":867},[324,160306,1183],{"class":916},[324,160308,160309],{"class":867},")       ",[324,160311,160312],{"class":772},"# 1,2,3,4\n",[324,160314,160315,160317,160319,160321,160323,160325,160327,160329,160331],{"class":326,"line":338},[324,160316,34138],{"class":916},[324,160318,868],{"class":867},[324,160320,1082],{"class":916},[324,160322,13164],{"class":867},[324,160324,1310],{"class":916},[324,160326,13164],{"class":867},[324,160328,944],{"class":916},[324,160330,156173],{"class":867},[324,160332,160333],{"class":772},"# 1,3,5,7,9\n",[19,160335,160336,160337,272],{},"配合 ",[269,160338,3754],{},[316,160340,160342],{"className":31100,"code":160341,"language":31102,"meta":50,"style":50},"for i in range(1, 6):\n    print(i)\n",[269,160343,160344,160364],{"__ignoreMap":50},[324,160345,160346,160348,160350,160352,160354,160356,160358,160360,160362],{"class":326,"line":327},[324,160347,3754],{"class":863},[324,160349,10167],{"class":867},[324,160351,26767],{"class":863},[324,160353,33165],{"class":916},[324,160355,868],{"class":867},[324,160357,1082],{"class":916},[324,160359,13164],{"class":867},[324,160361,1208],{"class":916},[324,160363,31508],{"class":867},[324,160365,160366,160368],{"class":326,"line":203},[324,160367,32021],{"class":916},[324,160369,159742],{"class":867},[19,160371,9754,160372,160374],{},[269,160373,34138],{}," 的结束值不包含在内。",[14,160376,160378],{"id":160377},"_48-for循环求和","4.8 for循环求和",[316,160380,160382],{"className":31100,"code":160381,"language":31102,"meta":50,"style":50},"total = 0\n\nfor i in range(1, 101):\n    total += i\n\nprint(total)\n",[269,160383,160384,160392,160396,160416,160424,160428],{"__ignoreMap":50},[324,160385,160386,160388,160390],{"class":326,"line":327},[324,160387,157772],{"class":867},[324,160389,913],{"class":863},[324,160391,48055],{"class":916},[324,160393,160394],{"class":326,"line":203},[324,160395,488],{"emptyLinePlaceholder":487},[324,160397,160398,160400,160402,160404,160406,160408,160410,160412,160414],{"class":326,"line":338},[324,160399,3754],{"class":863},[324,160401,10167],{"class":867},[324,160403,26767],{"class":863},[324,160405,33165],{"class":916},[324,160407,868],{"class":867},[324,160409,1082],{"class":916},[324,160411,13164],{"class":867},[324,160413,1201],{"class":916},[324,160415,31508],{"class":867},[324,160417,160418,160420,160422],{"class":326,"line":344},[324,160419,159819],{"class":867},[324,160421,10206],{"class":863},[324,160423,159824],{"class":867},[324,160425,160426],{"class":326,"line":484},[324,160427,488],{"emptyLinePlaceholder":487},[324,160429,160430,160432],{"class":326,"line":491},[324,160431,31137],{"class":916},[324,160433,159843],{"class":867},[19,160435,160436],{},"求偶数和：",[316,160438,160440],{"className":31100,"code":160439,"language":31102,"meta":50,"style":50},"total = 0\n\nfor i in range(1, 101):\n    if i % 2 == 0:\n        total += i\n\nprint(total)\n",[269,160441,160442,160450,160454,160474,160490,160499,160503],{"__ignoreMap":50},[324,160443,160444,160446,160448],{"class":326,"line":327},[324,160445,157772],{"class":867},[324,160447,913],{"class":863},[324,160449,48055],{"class":916},[324,160451,160452],{"class":326,"line":203},[324,160453,488],{"emptyLinePlaceholder":487},[324,160455,160456,160458,160460,160462,160464,160466,160468,160470,160472],{"class":326,"line":338},[324,160457,3754],{"class":863},[324,160459,10167],{"class":867},[324,160461,26767],{"class":863},[324,160463,33165],{"class":916},[324,160465,868],{"class":867},[324,160467,1082],{"class":916},[324,160469,13164],{"class":867},[324,160471,1201],{"class":916},[324,160473,31508],{"class":867},[324,160475,160476,160478,160480,160482,160484,160486,160488],{"class":326,"line":344},[324,160477,3830],{"class":863},[324,160479,10167],{"class":867},[324,160481,1192],{"class":863},[324,160483,15484],{"class":916},[324,160485,102280],{"class":863},[324,160487,4822],{"class":916},[324,160489,4468],{"class":867},[324,160491,160492,160495,160497],{"class":326,"line":484},[324,160493,160494],{"class":867},"        total ",[324,160496,10206],{"class":863},[324,160498,159824],{"class":867},[324,160500,160501],{"class":326,"line":491},[324,160502,488],{"emptyLinePlaceholder":487},[324,160504,160505,160507],{"class":326,"line":496},[324,160506,31137],{"class":916},[324,160508,159843],{"class":867},[19,160510,160511],{},"也可以：",[316,160513,160515],{"className":31100,"code":160514,"language":31102,"meta":50,"style":50},"total = 0\n\nfor i in range(2, 101, 2):\n    total += i\n\nprint(total)\n",[269,160516,160517,160525,160529,160553,160561,160565],{"__ignoreMap":50},[324,160518,160519,160521,160523],{"class":326,"line":327},[324,160520,157772],{"class":867},[324,160522,913],{"class":863},[324,160524,48055],{"class":916},[324,160526,160527],{"class":326,"line":203},[324,160528,488],{"emptyLinePlaceholder":487},[324,160530,160531,160533,160535,160537,160539,160541,160543,160545,160547,160549,160551],{"class":326,"line":338},[324,160532,3754],{"class":863},[324,160534,10167],{"class":867},[324,160536,26767],{"class":863},[324,160538,33165],{"class":916},[324,160540,868],{"class":867},[324,160542,944],{"class":916},[324,160544,13164],{"class":867},[324,160546,1201],{"class":916},[324,160548,13164],{"class":867},[324,160550,944],{"class":916},[324,160552,31508],{"class":867},[324,160554,160555,160557,160559],{"class":326,"line":344},[324,160556,159819],{"class":867},[324,160558,10206],{"class":863},[324,160560,159824],{"class":867},[324,160562,160563],{"class":326,"line":484},[324,160564,488],{"emptyLinePlaceholder":487},[324,160566,160567,160569],{"class":326,"line":491},[324,160568,31137],{"class":916},[324,160570,159843],{"class":867},[14,160572,160574],{"id":160573},"_49-循环嵌套","4.9 循环嵌套",[19,160576,160577],{},"嵌套循环就是循环里面再写循环。",[316,160579,160581],{"className":31100,"code":160580,"language":31102,"meta":50,"style":50},"for i in range(1, 4):\n    for j in range(1, 4):\n        print(f\"i={i}, j={j}\")\n",[269,160582,160583,160603,160623],{"__ignoreMap":50},[324,160584,160585,160587,160589,160591,160593,160595,160597,160599,160601],{"class":326,"line":327},[324,160586,3754],{"class":863},[324,160588,10167],{"class":867},[324,160590,26767],{"class":863},[324,160592,33165],{"class":916},[324,160594,868],{"class":867},[324,160596,1082],{"class":916},[324,160598,13164],{"class":867},[324,160600,1157],{"class":916},[324,160602,31508],{"class":867},[324,160604,160605,160607,160609,160611,160613,160615,160617,160619,160621],{"class":326,"line":203},[324,160606,3930],{"class":863},[324,160608,10229],{"class":867},[324,160610,26767],{"class":863},[324,160612,33165],{"class":916},[324,160614,868],{"class":867},[324,160616,1082],{"class":916},[324,160618,13164],{"class":867},[324,160620,1157],{"class":916},[324,160622,31508],{"class":867},[324,160624,160625,160627,160629,160631,160634,160636,160638,160640,160643,160645,160647,160649,160651],{"class":326,"line":338},[324,160626,33173],{"class":916},[324,160628,868],{"class":867},[324,160630,920],{"class":863},[324,160632,160633],{"class":738},"\"i=",[324,160635,1760],{"class":916},[324,160637,1305],{"class":867},[324,160639,1810],{"class":916},[324,160641,160642],{"class":738},", j=",[324,160644,1760],{"class":916},[324,160646,1331],{"class":867},[324,160648,1810],{"class":916},[324,160650,1115],{"class":738},[324,160652,874],{"class":867},[19,160654,160655],{},"外层循环执行一次，内层循环执行完整一轮。",[14,160657,160659],{"id":160658},"_410-九九乘法表","4.10 九九乘法表",[316,160661,160663],{"className":31100,"code":160662,"language":31102,"meta":50,"style":50},"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",[269,160664,160665,160685,160708,160760],{"__ignoreMap":50},[324,160666,160667,160669,160671,160673,160675,160677,160679,160681,160683],{"class":326,"line":327},[324,160668,3754],{"class":863},[324,160670,10167],{"class":867},[324,160672,26767],{"class":863},[324,160674,33165],{"class":916},[324,160676,868],{"class":867},[324,160678,1082],{"class":916},[324,160680,13164],{"class":867},[324,160682,1310],{"class":916},[324,160684,31508],{"class":867},[324,160686,160687,160689,160691,160693,160695,160697,160699,160702,160704,160706],{"class":326,"line":203},[324,160688,3930],{"class":863},[324,160690,10229],{"class":867},[324,160692,26767],{"class":863},[324,160694,33165],{"class":916},[324,160696,868],{"class":867},[324,160698,1082],{"class":916},[324,160700,160701],{"class":867},", i ",[324,160703,1345],{"class":863},[324,160705,25842],{"class":916},[324,160707,31508],{"class":867},[324,160709,160710,160712,160714,160716,160718,160720,160722,160724,160726,160728,160730,160732,160734,160736,160738,160740,160742,160744,160746,160748,160750,160752,160754,160756,160758],{"class":326,"line":338},[324,160711,33173],{"class":916},[324,160713,868],{"class":867},[324,160715,920],{"class":863},[324,160717,1115],{"class":738},[324,160719,1760],{"class":916},[324,160721,1331],{"class":867},[324,160723,1810],{"class":916},[324,160725,1319],{"class":738},[324,160727,1760],{"class":916},[324,160729,1305],{"class":867},[324,160731,1810],{"class":916},[324,160733,913],{"class":738},[324,160735,1760],{"class":916},[324,160737,100870],{"class":867},[324,160739,1319],{"class":863},[324,160741,4139],{"class":867},[324,160743,1810],{"class":916},[324,160745,1115],{"class":738},[324,160747,13164],{"class":867},[324,160749,46523],{"class":5945},[324,160751,913],{"class":863},[324,160753,1115],{"class":738},[324,160755,1965],{"class":916},[324,160757,1115],{"class":738},[324,160759,874],{"class":867},[324,160761,160762,160764],{"class":326,"line":344},[324,160763,32021],{"class":916},[324,160765,2706],{"class":867},[19,160767,160768],{},"关键点：",[192,160770,160771,160777,160783,160789],{},[195,160772,160773,160774,160776],{},"外层 ",[269,160775,1305],{}," 控制行。",[195,160778,160779,160780,160782],{},"内层 ",[269,160781,1331],{}," 控制列。",[195,160784,160785,160786,160788],{},"每行结束后用 ",[269,160787,146984],{}," 换行。",[195,160790,160791,160794],{},[269,160792,160793],{},"end=\"\\t\""," 让同一行的内容横向排列。",[14,160796,160798],{"id":160797},"_411-循环else","4.11 循环else",[19,160800,160801,160802,160804,160805,160807,160808,160810],{},"Python 的循环可以带 ",[269,160803,2432],{},"。当循环正常结束时执行 ",[269,160806,2432],{},"，如果被 ",[269,160809,2783],{}," 打断，则不执行。",[316,160812,160814],{"className":31100,"code":160813,"language":31102,"meta":50,"style":50},"for i in range(1, 6):\n    if i == 10:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[269,160815,160816,160836,160848,160859,160863,160869],{"__ignoreMap":50},[324,160817,160818,160820,160822,160824,160826,160828,160830,160832,160834],{"class":326,"line":327},[324,160819,3754],{"class":863},[324,160821,10167],{"class":867},[324,160823,26767],{"class":863},[324,160825,33165],{"class":916},[324,160827,868],{"class":867},[324,160829,1082],{"class":916},[324,160831,13164],{"class":867},[324,160833,1208],{"class":916},[324,160835,31508],{"class":867},[324,160837,160838,160840,160842,160844,160846],{"class":326,"line":203},[324,160839,3830],{"class":863},[324,160841,10167],{"class":867},[324,160843,3678],{"class":863},[324,160845,2768],{"class":916},[324,160847,4468],{"class":867},[324,160849,160850,160852,160854,160857],{"class":326,"line":338},[324,160851,33173],{"class":916},[324,160853,868],{"class":867},[324,160855,160856],{"class":738},"\"找到了\"",[324,160858,874],{"class":867},[324,160860,160861],{"class":326,"line":344},[324,160862,32349],{"class":863},[324,160864,160865,160867],{"class":326,"line":484},[324,160866,2432],{"class":863},[324,160868,4468],{"class":867},[324,160870,160871,160873,160875,160878],{"class":326,"line":491},[324,160872,32021],{"class":916},[324,160874,868],{"class":867},[324,160876,160877],{"class":738},"\"没找到\"",[324,160879,874],{"class":867},[19,160881,160882],{},"常用于搜索。",[316,160884,160886],{"className":31100,"code":160885,"language":31102,"meta":50,"style":50},"names = [\"小明\", \"小红\", \"小刚\"]\ntarget = \"小李\"\n\nfor name in names:\n    if name == target:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[269,160887,160888,160909,160918,160922,160934,160945,160955,160959,160965],{"__ignoreMap":50},[324,160889,160890,160893,160895,160897,160899,160901,160903,160905,160907],{"class":326,"line":327},[324,160891,160892],{"class":867},"names ",[324,160894,913],{"class":863},[324,160896,52948],{"class":867},[324,160898,150400],{"class":738},[324,160900,13164],{"class":867},[324,160902,151448],{"class":738},[324,160904,13164],{"class":867},[324,160906,160243],{"class":738},[324,160908,33968],{"class":867},[324,160910,160911,160913,160915],{"class":326,"line":203},[324,160912,112299],{"class":867},[324,160914,913],{"class":863},[324,160916,160917],{"class":738}," \"小李\"\n",[324,160919,160920],{"class":326,"line":338},[324,160921,488],{"emptyLinePlaceholder":487},[324,160923,160924,160926,160929,160931],{"class":326,"line":344},[324,160925,3754],{"class":863},[324,160927,160928],{"class":867}," name ",[324,160930,26767],{"class":863},[324,160932,160933],{"class":867}," names:\n",[324,160935,160936,160938,160940,160942],{"class":326,"line":484},[324,160937,3830],{"class":863},[324,160939,160928],{"class":867},[324,160941,3678],{"class":863},[324,160943,160944],{"class":867}," target:\n",[324,160946,160947,160949,160951,160953],{"class":326,"line":491},[324,160948,33173],{"class":916},[324,160950,868],{"class":867},[324,160952,160856],{"class":738},[324,160954,874],{"class":867},[324,160956,160957],{"class":326,"line":496},[324,160958,32349],{"class":863},[324,160960,160961,160963],{"class":326,"line":502},[324,160962,2432],{"class":863},[324,160964,4468],{"class":867},[324,160966,160967,160969,160971,160973],{"class":326,"line":508},[324,160968,32021],{"class":916},[324,160970,868],{"class":867},[324,160972,160877],{"class":738},[324,160974,874],{"class":867},[14,160976,160978],{"id":160977},"_412-小案例登录重试","4.12 小案例：登录重试",[19,160980,123804],{},[192,160982,160983,160986,160989],{},[195,160984,160985],{},"用户最多输入 3 次密码。",[195,160987,160988],{},"密码正确则登录成功。",[195,160990,160991],{},"3 次都错误则锁定账号。",[19,160993,10764],{},[316,160995,160997],{"className":31100,"code":160996,"language":31102,"meta":50,"style":50},"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",[269,160998,160999,161009,161013,161029,161045,161049,161061,161072,161076,161082,161107,161113],{"__ignoreMap":50},[324,161000,161001,161004,161006],{"class":326,"line":327},[324,161002,161003],{"class":867},"password ",[324,161005,913],{"class":863},[324,161007,161008],{"class":738}," \"123456\"\n",[324,161010,161011],{"class":326,"line":203},[324,161012,488],{"emptyLinePlaceholder":487},[324,161014,161015,161017,161019,161021,161023,161025,161027],{"class":326,"line":338},[324,161016,3754],{"class":863},[324,161018,10167],{"class":867},[324,161020,26767],{"class":863},[324,161022,33165],{"class":916},[324,161024,868],{"class":867},[324,161026,938],{"class":916},[324,161028,31508],{"class":867},[324,161030,161031,161034,161036,161038,161040,161043],{"class":326,"line":344},[324,161032,161033],{"class":867},"    user_password ",[324,161035,913],{"class":863},[324,161037,61327],{"class":916},[324,161039,868],{"class":867},[324,161041,161042],{"class":738},"\"请输入密码:\"",[324,161044,874],{"class":867},[324,161046,161047],{"class":326,"line":484},[324,161048,488],{"emptyLinePlaceholder":487},[324,161050,161051,161053,161056,161058],{"class":326,"line":491},[324,161052,3830],{"class":863},[324,161054,161055],{"class":867}," user_password ",[324,161057,3678],{"class":863},[324,161059,161060],{"class":867}," password:\n",[324,161062,161063,161065,161067,161070],{"class":326,"line":496},[324,161064,33173],{"class":916},[324,161066,868],{"class":867},[324,161068,161069],{"class":738},"\"登录成功\"",[324,161071,874],{"class":867},[324,161073,161074],{"class":326,"line":502},[324,161075,32349],{"class":863},[324,161077,161078,161080],{"class":326,"line":508},[324,161079,158534],{"class":863},[324,161081,4468],{"class":867},[324,161083,161084,161086,161088,161090,161093,161096,161098,161100,161102,161105],{"class":326,"line":514},[324,161085,33173],{"class":916},[324,161087,868],{"class":867},[324,161089,920],{"class":863},[324,161091,161092],{"class":738},"\"密码错误，还剩",[324,161094,161095],{"class":916},"{2",[324,161097,52993],{"class":863},[324,161099,3761],{"class":867},[324,161101,1810],{"class":916},[324,161103,161104],{"class":738},"次机会\"",[324,161106,874],{"class":867},[324,161108,161109,161111],{"class":326,"line":2343},[324,161110,2432],{"class":863},[324,161112,4468],{"class":867},[324,161114,161115,161117,161119,161122],{"class":326,"line":2348},[324,161116,32021],{"class":916},[324,161118,868],{"class":867},[324,161120,161121],{"class":738},"\"账号已锁定\"",[324,161123,874],{"class":867},[14,161125,161127],{"id":161126},"_413-小案例菜单程序","4.13 小案例：菜单程序",[316,161129,161131],{"className":31100,"code":161130,"language":31102,"meta":50,"style":50},"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",[269,161132,161133,161141,161152,161163,161174,161185,161196,161200,161215,161219,161231,161242,161254,161265,161277,161288,161300,161310,161314,161320],{"__ignoreMap":50},[324,161134,161135,161137,161139],{"class":326,"line":327},[324,161136,109384],{"class":863},[324,161138,96014],{"class":916},[324,161140,4468],{"class":867},[324,161142,161143,161145,161147,161150],{"class":326,"line":203},[324,161144,32021],{"class":916},[324,161146,868],{"class":867},[324,161148,161149],{"class":738},"\"====== 菜单 ======\"",[324,161151,874],{"class":867},[324,161153,161154,161156,161158,161161],{"class":326,"line":338},[324,161155,32021],{"class":916},[324,161157,868],{"class":867},[324,161159,161160],{"class":738},"\"1. 查询余额\"",[324,161162,874],{"class":867},[324,161164,161165,161167,161169,161172],{"class":326,"line":344},[324,161166,32021],{"class":916},[324,161168,868],{"class":867},[324,161170,161171],{"class":738},"\"2. 存款\"",[324,161173,874],{"class":867},[324,161175,161176,161178,161180,161183],{"class":326,"line":484},[324,161177,32021],{"class":916},[324,161179,868],{"class":867},[324,161181,161182],{"class":738},"\"3. 取款\"",[324,161184,874],{"class":867},[324,161186,161187,161189,161191,161194],{"class":326,"line":491},[324,161188,32021],{"class":916},[324,161190,868],{"class":867},[324,161192,161193],{"class":738},"\"0. 退出\"",[324,161195,874],{"class":867},[324,161197,161198],{"class":326,"line":496},[324,161199,488],{"emptyLinePlaceholder":487},[324,161201,161202,161205,161207,161209,161211,161213],{"class":326,"line":502},[324,161203,161204],{"class":867},"    choice ",[324,161206,913],{"class":863},[324,161208,61327],{"class":916},[324,161210,868],{"class":867},[324,161212,153585],{"class":738},[324,161214,874],{"class":867},[324,161216,161217],{"class":326,"line":508},[324,161218,488],{"emptyLinePlaceholder":487},[324,161220,161221,161223,161225,161227,161229],{"class":326,"line":514},[324,161222,3830],{"class":863},[324,161224,153598],{"class":867},[324,161226,3678],{"class":863},[324,161228,153603],{"class":738},[324,161230,4468],{"class":867},[324,161232,161233,161235,161237,161240],{"class":326,"line":2343},[324,161234,33173],{"class":916},[324,161236,868],{"class":867},[324,161238,161239],{"class":738},"\"余额为1000元\"",[324,161241,874],{"class":867},[324,161243,161244,161246,161248,161250,161252],{"class":326,"line":2348},[324,161245,40015],{"class":863},[324,161247,153598],{"class":867},[324,161249,3678],{"class":863},[324,161251,153622],{"class":738},[324,161253,4468],{"class":867},[324,161255,161256,161258,161260,161263],{"class":326,"line":2354},[324,161257,33173],{"class":916},[324,161259,868],{"class":867},[324,161261,161262],{"class":738},"\"存款功能\"",[324,161264,874],{"class":867},[324,161266,161267,161269,161271,161273,161275],{"class":326,"line":2359},[324,161268,40015],{"class":863},[324,161270,153598],{"class":867},[324,161272,3678],{"class":863},[324,161274,153640],{"class":738},[324,161276,4468],{"class":867},[324,161278,161279,161281,161283,161286],{"class":326,"line":2373},[324,161280,33173],{"class":916},[324,161282,868],{"class":867},[324,161284,161285],{"class":738},"\"取款功能\"",[324,161287,874],{"class":867},[324,161289,161290,161292,161294,161296,161298],{"class":326,"line":2378},[324,161291,40015],{"class":863},[324,161293,153598],{"class":867},[324,161295,3678],{"class":863},[324,161297,153694],{"class":738},[324,161299,4468],{"class":867},[324,161301,161302,161304,161306,161308],{"class":326,"line":2384},[324,161303,33173],{"class":916},[324,161305,868],{"class":867},[324,161307,153705],{"class":738},[324,161309,874],{"class":867},[324,161311,161312],{"class":326,"line":2405},[324,161313,32349],{"class":863},[324,161315,161316,161318],{"class":326,"line":2410},[324,161317,158534],{"class":863},[324,161319,4468],{"class":867},[324,161321,161322,161324,161326,161328],{"class":326,"line":2424},[324,161323,33173],{"class":916},[324,161325,868],{"class":867},[324,161327,153726],{"class":738},[324,161329,874],{"class":867},[19,161331,161332,161333,161335,161336,29107],{},"菜单类程序通常使用 ",[269,161334,160034],{},"，用户选择退出时 ",[269,161337,2783],{},[14,161339,161341],{"id":161340},"_414-易错点","4.14 易错点",[192,161343,161344,161349,161355,161363,161369],{},[195,161345,161346,161348],{},[269,161347,109384],{}," 循环必须更新控制变量。",[195,161350,161351,161354],{},[269,161352,161353],{},"range(1, 10)"," 不包含 10。",[195,161356,161357,161359,161360,161362],{},[269,161358,2783],{}," 结束整个循环，",[269,161361,155184],{}," 只跳过本轮。",[195,161364,161365,161366,161368],{},"嵌套循环中，",[269,161367,2783],{}," 只跳出当前所在的一层循环。",[195,161370,161371],{},"不要在循环中频繁写重复代码，能封装函数就封装函数。",[14,161373,161375],{"id":161374},"_415-本章练习","4.15 本章练习",[192,161377,161378,161381,161384,161387,161390],{},[195,161379,161380],{},"输出 1 到 100。",[195,161382,161383],{},"计算 1 到 100 的偶数和。",[195,161385,161386],{},"输出 100 以内能被 3 和 5 同时整除的数。",[195,161388,161389],{},"编写猜数字游戏，限制最多猜 7 次。",[195,161391,161392],{},"编写菜单程序，实现查看余额、存款、取款、退出。",[775,161394,161395],{},"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":50,"searchDepth":203,"depth":203,"links":161397},[161398,161399,161400,161401,161402,161406,161407,161408,161409,161410,161411,161412,161413,161414,161415],{"id":159654,"depth":203,"text":159655},{"id":159684,"depth":203,"text":159685},{"id":159773,"depth":203,"text":159774},{"id":159867,"depth":203,"text":159868},{"id":160041,"depth":203,"text":160042,"children":161403},[161404,161405],{"id":160045,"depth":338,"text":160046},{"id":160109,"depth":338,"text":160110},{"id":160173,"depth":203,"text":160174},{"id":160268,"depth":203,"text":160269},{"id":160377,"depth":203,"text":160378},{"id":160573,"depth":203,"text":160574},{"id":160658,"depth":203,"text":160659},{"id":160797,"depth":203,"text":160798},{"id":160977,"depth":203,"text":160978},{"id":161126,"depth":203,"text":161127},{"id":161340,"depth":203,"text":161341},{"id":161374,"depth":203,"text":161375},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch4",{"title":159646,"description":791},"wiki\u002F2024-10-10-python教程\u002Fch4-循环语句","lNHBoZHnAH-b1ogDfanr4dZuyXln9CGVy502nnjUB3Q",{"id":161422,"title":161423,"body":161424,"description":791,"extension":792,"meta":163429,"navigation":487,"path":163430,"seo":163431,"stem":163432,"__hash__":163433},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch5-函数基础.md","5. 函数基础",{"type":7,"value":161425,"toc":163409},[161426,161429,161433,161436,161439,161453,161456,161470,161474,161476,161495,161497,161544,161546,161560,161564,161638,161641,161645,161648,161707,161715,161718,161771,161774,161778,161783,161838,161846,161896,161900,161905,161913,162012,162018,162022,162027,162030,162041,162082,162095,162099,162102,162138,162141,162154,162157,162217,162221,162225,162228,162279,162283,162286,162333,162339,162405,162408,162412,162415,162531,162534,162538,162541,162647,162651,162654,162692,162695,162737,162740,162800,162803,162807,163271,163274,163278,163305,163311,163372,163376,163406],[10,161427,161423],{"id":161428},"_5-函数基础",[14,161430,161432],{"id":161431},"_51-为什么需要函数","5.1 为什么需要函数",[19,161434,161435],{},"函数用于封装一段可以重复使用的代码。",[19,161437,161438],{},"不使用函数的问题：",[192,161440,161441,161444,161447,161450],{},[195,161442,161443],{},"重复代码多。",[195,161445,161446],{},"修改逻辑时容易漏改。",[195,161448,161449],{},"主流程不清晰。",[195,161451,161452],{},"程序越写越长，难以维护。",[19,161454,161455],{},"使用函数后的好处：",[192,161457,161458,161461,161464,161467],{},[195,161459,161460],{},"提高复用性。",[195,161462,161463],{},"提高可读性。",[195,161465,161466],{},"便于调试。",[195,161468,161469],{},"便于分工。",[14,161471,161473],{"id":161472},"_52-函数定义","5.2 函数定义",[19,161475,5910],{},[316,161477,161479],{"className":31100,"code":161478,"language":31102,"meta":50,"style":50},"def 函数名():\n    函数体\n",[269,161480,161481,161490],{"__ignoreMap":50},[324,161482,161483,161485,161488],{"class":326,"line":327},[324,161484,32669],{"class":863},[324,161486,161487],{"class":734}," 函数名",[324,161489,32675],{"class":867},[324,161491,161492],{"class":326,"line":203},[324,161493,161494],{"class":867},"    函数体\n",[19,161496,15864],{},[316,161498,161500],{"className":31100,"code":161499,"language":31102,"meta":50,"style":50},"def say_hello():\n    print(\"hello\")\n    print(\"python\")\n\n\nsay_hello()\n",[269,161501,161502,161511,161521,161531,161535,161539],{"__ignoreMap":50},[324,161503,161504,161506,161509],{"class":326,"line":327},[324,161505,32669],{"class":863},[324,161507,161508],{"class":734}," say_hello",[324,161510,32675],{"class":867},[324,161512,161513,161515,161517,161519],{"class":326,"line":203},[324,161514,32021],{"class":916},[324,161516,868],{"class":867},[324,161518,6573],{"class":738},[324,161520,874],{"class":867},[324,161522,161523,161525,161527,161529],{"class":326,"line":338},[324,161524,32021],{"class":916},[324,161526,868],{"class":867},[324,161528,147151],{"class":738},[324,161530,874],{"class":867},[324,161532,161533],{"class":326,"line":344},[324,161534,488],{"emptyLinePlaceholder":487},[324,161536,161537],{"class":326,"line":484},[324,161538,488],{"emptyLinePlaceholder":487},[324,161540,161541],{"class":326,"line":491},[324,161542,161543],{"class":867},"say_hello()\n",[19,161545,9754],{},[192,161547,161548,161551,161554,161557],{},[195,161549,161550],{},"函数必须先定义，再调用。",[195,161552,161553],{},"函数名遵循变量命名规则。",[195,161555,161556],{},"函数体需要缩进。",[195,161558,161559],{},"函数不调用就不会执行。",[14,161561,161563],{"id":161562},"_53-函数调用","5.3 函数调用",[316,161565,161567],{"className":31100,"code":161566,"language":31102,"meta":50,"style":50},"def print_menu():\n    print(\"1. 查询\")\n    print(\"2. 添加\")\n    print(\"3. 删除\")\n    print(\"0. 退出\")\n\n\nprint_menu()\nprint_menu()\n",[269,161568,161569,161578,161589,161600,161611,161621,161625,161629,161634],{"__ignoreMap":50},[324,161570,161571,161573,161576],{"class":326,"line":327},[324,161572,32669],{"class":863},[324,161574,161575],{"class":734}," print_menu",[324,161577,32675],{"class":867},[324,161579,161580,161582,161584,161587],{"class":326,"line":203},[324,161581,32021],{"class":916},[324,161583,868],{"class":867},[324,161585,161586],{"class":738},"\"1. 查询\"",[324,161588,874],{"class":867},[324,161590,161591,161593,161595,161598],{"class":326,"line":338},[324,161592,32021],{"class":916},[324,161594,868],{"class":867},[324,161596,161597],{"class":738},"\"2. 添加\"",[324,161599,874],{"class":867},[324,161601,161602,161604,161606,161609],{"class":326,"line":344},[324,161603,32021],{"class":916},[324,161605,868],{"class":867},[324,161607,161608],{"class":738},"\"3. 删除\"",[324,161610,874],{"class":867},[324,161612,161613,161615,161617,161619],{"class":326,"line":484},[324,161614,32021],{"class":916},[324,161616,868],{"class":867},[324,161618,161193],{"class":738},[324,161620,874],{"class":867},[324,161622,161623],{"class":326,"line":491},[324,161624,488],{"emptyLinePlaceholder":487},[324,161626,161627],{"class":326,"line":496},[324,161628,488],{"emptyLinePlaceholder":487},[324,161630,161631],{"class":326,"line":502},[324,161632,161633],{"class":867},"print_menu()\n",[324,161635,161636],{"class":326,"line":508},[324,161637,161633],{"class":867},[19,161639,161640],{},"函数可以多次调用，每次调用都会执行函数体。",[14,161642,161644],{"id":161643},"_54-参数","5.4 参数",[19,161646,161647],{},"参数用于向函数传递数据。",[316,161649,161651],{"className":31100,"code":161650,"language":31102,"meta":50,"style":50},"def say_hello(name):\n    print(f\"你好，{name}\")\n\n\nsay_hello(\"小明\")\nsay_hello(\"小红\")\n",[269,161652,161653,161662,161682,161686,161690,161699],{"__ignoreMap":50},[324,161654,161655,161657,161659],{"class":326,"line":327},[324,161656,32669],{"class":863},[324,161658,161508],{"class":734},[324,161660,161661],{"class":867},"(name):\n",[324,161663,161664,161666,161668,161670,161672,161674,161676,161678,161680],{"class":326,"line":203},[324,161665,32021],{"class":916},[324,161667,868],{"class":867},[324,161669,920],{"class":863},[324,161671,157566],{"class":738},[324,161673,1760],{"class":916},[324,161675,80532],{"class":867},[324,161677,1810],{"class":916},[324,161679,1115],{"class":738},[324,161681,874],{"class":867},[324,161683,161684],{"class":326,"line":338},[324,161685,488],{"emptyLinePlaceholder":487},[324,161687,161688],{"class":326,"line":344},[324,161689,488],{"emptyLinePlaceholder":487},[324,161691,161692,161695,161697],{"class":326,"line":484},[324,161693,161694],{"class":867},"say_hello(",[324,161696,150400],{"class":738},[324,161698,874],{"class":867},[324,161700,161701,161703,161705],{"class":326,"line":491},[324,161702,161694],{"class":867},[324,161704,151448],{"class":738},[324,161706,874],{"class":867},[19,161708,161709,161711,161712,161714],{},[269,161710,80532],{}," 是形参，",[269,161713,150400],{}," 是实参。",[19,161716,161717],{},"多个参数：",[316,161719,161721],{"className":31100,"code":161720,"language":31102,"meta":50,"style":50},"def add(a, b):\n    result = a + b\n    print(result)\n\n\nadd(10, 20)\n",[269,161722,161723,161731,161744,161750,161754,161758],{"__ignoreMap":50},[324,161724,161725,161727,161729],{"class":326,"line":327},[324,161726,32669],{"class":863},[324,161728,5938],{"class":734},[324,161730,151605],{"class":867},[324,161732,161733,161736,161738,161740,161742],{"class":326,"line":203},[324,161734,161735],{"class":867},"    result ",[324,161737,913],{"class":863},[324,161739,11598],{"class":867},[324,161741,1345],{"class":863},[324,161743,151616],{"class":867},[324,161745,161746,161748],{"class":326,"line":338},[324,161747,32021],{"class":916},[324,161749,77307],{"class":867},[324,161751,161752],{"class":326,"line":344},[324,161753,488],{"emptyLinePlaceholder":487},[324,161755,161756],{"class":326,"line":484},[324,161757,488],{"emptyLinePlaceholder":487},[324,161759,161760,161763,161765,161767,161769],{"class":326,"line":491},[324,161761,161762],{"class":867},"add(",[324,161764,1310],{"class":916},[324,161766,13164],{"class":867},[324,161768,1564],{"class":916},[324,161770,874],{"class":867},[19,161772,161773],{},"调用时参数数量必须匹配。",[14,161775,161777],{"id":161776},"_55-返回值","5.5 返回值",[19,161779,161780,161782],{},[269,161781,17775],{}," 用于把函数内部的结果返回给调用者。",[316,161784,161786],{"className":31100,"code":161785,"language":31102,"meta":50,"style":50},"def add(a, b):\n    return a + b\n\n\nresult = add(10, 20)\nprint(result)\n",[269,161787,161788,161796,161806,161810,161814,161832],{"__ignoreMap":50},[324,161789,161790,161792,161794],{"class":326,"line":327},[324,161791,32669],{"class":863},[324,161793,5938],{"class":734},[324,161795,151605],{"class":867},[324,161797,161798,161800,161802,161804],{"class":326,"line":203},[324,161799,4819],{"class":863},[324,161801,11598],{"class":867},[324,161803,1345],{"class":863},[324,161805,151616],{"class":867},[324,161807,161808],{"class":326,"line":338},[324,161809,488],{"emptyLinePlaceholder":487},[324,161811,161812],{"class":326,"line":344},[324,161813,488],{"emptyLinePlaceholder":487},[324,161815,161816,161819,161821,161824,161826,161828,161830],{"class":326,"line":484},[324,161817,161818],{"class":867},"result ",[324,161820,913],{"class":863},[324,161822,161823],{"class":867}," add(",[324,161825,1310],{"class":916},[324,161827,13164],{"class":867},[324,161829,1564],{"class":916},[324,161831,874],{"class":867},[324,161833,161834,161836],{"class":326,"line":491},[324,161835,31137],{"class":916},[324,161837,77307],{"class":867},[19,161839,161840,161841,161843,161844,29107],{},"如果函数没有写 ",[269,161842,17775],{},"，默认返回 ",[269,161845,96408],{},[316,161847,161849],{"className":31100,"code":161848,"language":31102,"meta":50,"style":50},"def say_hello():\n    print(\"hello\")\n\n\nresult = say_hello()\nprint(result)  # None\n",[269,161850,161851,161859,161869,161873,161877,161886],{"__ignoreMap":50},[324,161852,161853,161855,161857],{"class":326,"line":327},[324,161854,32669],{"class":863},[324,161856,161508],{"class":734},[324,161858,32675],{"class":867},[324,161860,161861,161863,161865,161867],{"class":326,"line":203},[324,161862,32021],{"class":916},[324,161864,868],{"class":867},[324,161866,6573],{"class":738},[324,161868,874],{"class":867},[324,161870,161871],{"class":326,"line":338},[324,161872,488],{"emptyLinePlaceholder":487},[324,161874,161875],{"class":326,"line":344},[324,161876,488],{"emptyLinePlaceholder":487},[324,161878,161879,161881,161883],{"class":326,"line":484},[324,161880,161818],{"class":867},[324,161882,913],{"class":863},[324,161884,161885],{"class":867}," say_hello()\n",[324,161887,161888,161890,161893],{"class":326,"line":491},[324,161889,31137],{"class":916},[324,161891,161892],{"class":867},"(result)  ",[324,161894,161895],{"class":772},"# None\n",[14,161897,161899],{"id":161898},"_56-return的作用","5.6 return的作用",[19,161901,161902,161904],{},[269,161903,17775],{}," 有两个作用：",[192,161906,161907,161910],{},[195,161908,161909],{},"返回结果。",[195,161911,161912],{},"结束函数。",[316,161914,161916],{"className":31100,"code":161915,"language":31102,"meta":50,"style":50},"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",[269,161917,161918,161928,161940,161947,161951,161963,161970,161974,161981,161985,161989,162000],{"__ignoreMap":50},[324,161919,161920,161922,161925],{"class":326,"line":327},[324,161921,32669],{"class":863},[324,161923,161924],{"class":734}," check_age",[324,161926,161927],{"class":867},"(age):\n",[324,161929,161930,161932,161934,161936,161938],{"class":326,"line":203},[324,161931,3830],{"class":863},[324,161933,16436],{"class":867},[324,161935,1774],{"class":863},[324,161937,4822],{"class":916},[324,161939,4468],{"class":867},[324,161941,161942,161944],{"class":326,"line":338},[324,161943,15481],{"class":863},[324,161945,161946],{"class":738}," \"年龄不合法\"\n",[324,161948,161949],{"class":326,"line":344},[324,161950,488],{"emptyLinePlaceholder":487},[324,161952,161953,161955,161957,161959,161961],{"class":326,"line":484},[324,161954,3830],{"class":863},[324,161956,16436],{"class":867},[324,161958,2441],{"class":863},[324,161960,156797],{"class":916},[324,161962,4468],{"class":867},[324,161964,161965,161967],{"class":326,"line":491},[324,161966,15481],{"class":863},[324,161968,161969],{"class":738}," \"成年人\"\n",[324,161971,161972],{"class":326,"line":496},[324,161973,488],{"emptyLinePlaceholder":487},[324,161975,161976,161978],{"class":326,"line":502},[324,161977,4819],{"class":863},[324,161979,161980],{"class":738}," \"未成年人\"\n",[324,161982,161983],{"class":326,"line":508},[324,161984,488],{"emptyLinePlaceholder":487},[324,161986,161987],{"class":326,"line":514},[324,161988,488],{"emptyLinePlaceholder":487},[324,161990,161991,161993,161996,161998],{"class":326,"line":2343},[324,161992,31137],{"class":916},[324,161994,161995],{"class":867},"(check_age(",[324,161997,1564],{"class":916},[324,161999,31219],{"class":867},[324,162001,162002,162004,162006,162008,162010],{"class":326,"line":2348},[324,162003,31137],{"class":916},[324,162005,161995],{"class":867},[324,162007,1396],{"class":863},[324,162009,1082],{"class":916},[324,162011,31219],{"class":867},[19,162013,162014,162015,162017],{},"函数执行到 ",[269,162016,17775],{}," 后，后面的代码不会继续执行。",[14,162019,162021],{"id":162020},"_57-none","5.7 None",[19,162023,162024,162026],{},[269,162025,96408],{}," 表示空值或没有结果。",[19,162028,162029],{},"常见使用场景：",[192,162031,162032,162035,162038],{},[195,162033,162034],{},"函数没有返回值。",[195,162036,162037],{},"变量暂时没有具体值。",[195,162039,162040],{},"表示查询不到结果。",[316,162042,162044],{"className":31100,"code":162043,"language":31102,"meta":50,"style":50},"result = None\n\nif result is None:\n    print(\"没有数据\")\n",[269,162045,162046,162054,162058,162071],{"__ignoreMap":50},[324,162047,162048,162050,162052],{"class":326,"line":327},[324,162049,161818],{"class":867},[324,162051,913],{"class":863},[324,162053,152684],{"class":916},[324,162055,162056],{"class":326,"line":203},[324,162057,488],{"emptyLinePlaceholder":487},[324,162059,162060,162062,162065,162067,162069],{"class":326,"line":338},[324,162061,2262],{"class":863},[324,162063,162064],{"class":867}," result ",[324,162066,39649],{"class":863},[324,162068,39655],{"class":916},[324,162070,4468],{"class":867},[324,162072,162073,162075,162077,162080],{"class":326,"line":344},[324,162074,32021],{"class":916},[324,162076,868],{"class":867},[324,162078,162079],{"class":738},"\"没有数据\"",[324,162081,874],{"class":867},[19,162083,162084,162085,162087,162088,162091,162092,29107],{},"判断 ",[269,162086,96408],{}," 推荐使用 ",[269,162089,162090],{},"is None","，不要写成 ",[269,162093,162094],{},"== None",[14,162096,162098],{"id":162097},"_58-函数文档字符串","5.8 函数文档字符串",[19,162100,162101],{},"函数内部第一行可以写文档字符串，用来说明函数用途。",[316,162103,162105],{"className":31100,"code":162104,"language":31102,"meta":50,"style":50},"def calculate_bmi(weight, height):\n    \"\"\"根据体重和身高计算BMI。\"\"\"\n    return weight \u002F height ** 2\n",[269,162106,162107,162117,162122],{"__ignoreMap":50},[324,162108,162109,162111,162114],{"class":326,"line":327},[324,162110,32669],{"class":863},[324,162112,162113],{"class":734}," calculate_bmi",[324,162115,162116],{"class":867},"(weight, height):\n",[324,162118,162119],{"class":326,"line":203},[324,162120,162121],{"class":738},"    \"\"\"根据体重和身高计算BMI。\"\"\"\n",[324,162123,162124,162126,162129,162131,162134,162136],{"class":326,"line":338},[324,162125,4819],{"class":863},[324,162127,162128],{"class":867}," weight ",[324,162130,1448],{"class":863},[324,162132,162133],{"class":867}," height ",[324,162135,11390],{"class":863},[324,162137,48445],{"class":916},[19,162139,162140],{},"查看说明：",[316,162142,162144],{"className":31100,"code":162143,"language":31102,"meta":50,"style":50},"help(calculate_bmi)\n",[269,162145,162146],{"__ignoreMap":50},[324,162147,162148,162151],{"class":326,"line":327},[324,162149,162150],{"class":916},"help",[324,162152,162153],{"class":867},"(calculate_bmi)\n",[19,162155,162156],{},"较完整的写法：",[316,162158,162160],{"className":31100,"code":162159,"language":31102,"meta":50,"style":50},"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",[269,162161,162162,162170,162175,162180,162184,162189,162194,162199,162203],{"__ignoreMap":50},[324,162163,162164,162166,162168],{"class":326,"line":327},[324,162165,32669],{"class":863},[324,162167,162113],{"class":734},[324,162169,162116],{"class":867},[324,162171,162172],{"class":326,"line":203},[324,162173,162174],{"class":738},"    \"\"\"\n",[324,162176,162177],{"class":326,"line":338},[324,162178,162179],{"class":738},"    计算BMI。\n",[324,162181,162182],{"class":326,"line":344},[324,162183,488],{"emptyLinePlaceholder":487},[324,162185,162186],{"class":326,"line":484},[324,162187,162188],{"class":738},"    :param weight: 体重，单位kg\n",[324,162190,162191],{"class":326,"line":491},[324,162192,162193],{"class":738},"    :param height: 身高，单位m\n",[324,162195,162196],{"class":326,"line":496},[324,162197,162198],{"class":738},"    :return: BMI数值\n",[324,162200,162201],{"class":326,"line":502},[324,162202,162174],{"class":738},[324,162204,162205,162207,162209,162211,162213,162215],{"class":326,"line":508},[324,162206,4819],{"class":863},[324,162208,162128],{"class":867},[324,162210,1448],{"class":863},[324,162212,162133],{"class":867},[324,162214,11390],{"class":863},[324,162216,48445],{"class":916},[14,162218,162220],{"id":162219},"_59-变量作用域","5.9 变量作用域",[35,162222,162224],{"id":162223},"_591-局部变量","5.9.1 局部变量",[19,162226,162227],{},"在函数内部定义的变量，只能在函数内部使用。",[316,162229,162231],{"className":31100,"code":162230,"language":31102,"meta":50,"style":50},"def test():\n    num = 10\n    print(num)\n\n\ntest()\nprint(num)  # 报错\n",[269,162232,162233,162242,162250,162256,162260,162264,162269],{"__ignoreMap":50},[324,162234,162235,162237,162240],{"class":326,"line":327},[324,162236,32669],{"class":863},[324,162238,162239],{"class":734}," test",[324,162241,32675],{"class":867},[324,162243,162244,162246,162248],{"class":326,"line":203},[324,162245,46315],{"class":867},[324,162247,913],{"class":863},[324,162249,59150],{"class":916},[324,162251,162252,162254],{"class":326,"line":338},[324,162253,32021],{"class":916},[324,162255,881],{"class":867},[324,162257,162258],{"class":326,"line":344},[324,162259,488],{"emptyLinePlaceholder":487},[324,162261,162262],{"class":326,"line":484},[324,162263,488],{"emptyLinePlaceholder":487},[324,162265,162266],{"class":326,"line":491},[324,162267,162268],{"class":867},"test()\n",[324,162270,162271,162273,162276],{"class":326,"line":496},[324,162272,31137],{"class":916},[324,162274,162275],{"class":867},"(num)  ",[324,162277,162278],{"class":772},"# 报错\n",[35,162280,162282],{"id":162281},"_592-全局变量","5.9.2 全局变量",[19,162284,162285],{},"在函数外部定义的变量，可以在函数内部读取。",[316,162287,162289],{"className":31100,"code":162288,"language":31102,"meta":50,"style":50},"name = \"小明\"\n\n\ndef say_hello():\n    print(name)\n\n\nsay_hello()\n",[269,162290,162291,162299,162303,162307,162315,162321,162325,162329],{"__ignoreMap":50},[324,162292,162293,162295,162297],{"class":326,"line":327},[324,162294,147048],{"class":867},[324,162296,913],{"class":863},[324,162298,149865],{"class":738},[324,162300,162301],{"class":326,"line":203},[324,162302,488],{"emptyLinePlaceholder":487},[324,162304,162305],{"class":326,"line":338},[324,162306,488],{"emptyLinePlaceholder":487},[324,162308,162309,162311,162313],{"class":326,"line":344},[324,162310,32669],{"class":863},[324,162312,161508],{"class":734},[324,162314,32675],{"class":867},[324,162316,162317,162319],{"class":326,"line":484},[324,162318,32021],{"class":916},[324,162320,151172],{"class":867},[324,162322,162323],{"class":326,"line":491},[324,162324,488],{"emptyLinePlaceholder":487},[324,162326,162327],{"class":326,"line":496},[324,162328,488],{"emptyLinePlaceholder":487},[324,162330,162331],{"class":326,"line":502},[324,162332,161543],{"class":867},[19,162334,162335,162336,29107],{},"如果要在函数内部修改全局变量，需要 ",[269,162337,162338],{},"global",[316,162340,162342],{"className":31100,"code":162341,"language":31102,"meta":50,"style":50},"count = 0\n\n\ndef add_count():\n    global count\n    count += 1\n\n\nadd_count()\nprint(count)\n",[269,162343,162344,162352,162356,162360,162369,162377,162385,162389,162393,162398],{"__ignoreMap":50},[324,162345,162346,162348,162350],{"class":326,"line":327},[324,162347,147203],{"class":867},[324,162349,913],{"class":863},[324,162351,48055],{"class":916},[324,162353,162354],{"class":326,"line":203},[324,162355,488],{"emptyLinePlaceholder":487},[324,162357,162358],{"class":326,"line":338},[324,162359,488],{"emptyLinePlaceholder":487},[324,162361,162362,162364,162367],{"class":326,"line":344},[324,162363,32669],{"class":863},[324,162365,162366],{"class":734}," add_count",[324,162368,32675],{"class":867},[324,162370,162371,162374],{"class":326,"line":484},[324,162372,162373],{"class":863},"    global",[324,162375,162376],{"class":867}," count\n",[324,162378,162379,162381,162383],{"class":326,"line":491},[324,162380,159945],{"class":867},[324,162382,10206],{"class":863},[324,162384,56421],{"class":916},[324,162386,162387],{"class":326,"line":496},[324,162388,488],{"emptyLinePlaceholder":487},[324,162390,162391],{"class":326,"line":502},[324,162392,488],{"emptyLinePlaceholder":487},[324,162394,162395],{"class":326,"line":508},[324,162396,162397],{"class":867},"add_count()\n",[324,162399,162400,162402],{"class":326,"line":514},[324,162401,31137],{"class":916},[324,162403,162404],{"class":867},"(count)\n",[19,162406,162407],{},"不建议大量使用全局变量，项目变大后很难维护。",[14,162409,162411],{"id":162410},"_510-函数嵌套调用","5.10 函数嵌套调用",[19,162413,162414],{},"一个函数中可以调用另一个函数。",[316,162416,162418],{"className":31100,"code":162417,"language":31102,"meta":50,"style":50},"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",[269,162419,162420,162429,162443,162447,162451,162460,162465,162485,162506,162510,162514,162518],{"__ignoreMap":50},[324,162421,162422,162424,162427],{"class":326,"line":327},[324,162423,32669],{"class":863},[324,162425,162426],{"class":734}," print_line",[324,162428,32675],{"class":867},[324,162430,162431,162433,162435,162437,162439,162441],{"class":326,"line":203},[324,162432,32021],{"class":916},[324,162434,868],{"class":867},[324,162436,33205],{"class":738},[324,162438,7247],{"class":863},[324,162440,79387],{"class":916},[324,162442,874],{"class":867},[324,162444,162445],{"class":326,"line":338},[324,162446,488],{"emptyLinePlaceholder":487},[324,162448,162449],{"class":326,"line":344},[324,162450,488],{"emptyLinePlaceholder":487},[324,162452,162453,162455,162458],{"class":326,"line":484},[324,162454,32669],{"class":863},[324,162456,162457],{"class":734}," print_info",[324,162459,149887],{"class":867},[324,162461,162462],{"class":326,"line":491},[324,162463,162464],{"class":867},"    print_line()\n",[324,162466,162467,162469,162471,162473,162475,162477,162479,162481,162483],{"class":326,"line":496},[324,162468,32021],{"class":916},[324,162470,868],{"class":867},[324,162472,920],{"class":863},[324,162474,157194],{"class":738},[324,162476,1760],{"class":916},[324,162478,80532],{"class":867},[324,162480,1810],{"class":916},[324,162482,1115],{"class":738},[324,162484,874],{"class":867},[324,162486,162487,162489,162491,162493,162496,162498,162500,162502,162504],{"class":326,"line":502},[324,162488,32021],{"class":916},[324,162490,868],{"class":867},[324,162492,920],{"class":863},[324,162494,162495],{"class":738},"\"年龄:",[324,162497,1760],{"class":916},[324,162499,70943],{"class":867},[324,162501,1810],{"class":916},[324,162503,1115],{"class":738},[324,162505,874],{"class":867},[324,162507,162508],{"class":326,"line":508},[324,162509,162464],{"class":867},[324,162511,162512],{"class":326,"line":514},[324,162513,488],{"emptyLinePlaceholder":487},[324,162515,162516],{"class":326,"line":2343},[324,162517,488],{"emptyLinePlaceholder":487},[324,162519,162520,162523,162525,162527,162529],{"class":326,"line":2348},[324,162521,162522],{"class":867},"print_info(",[324,162524,150400],{"class":738},[324,162526,13164],{"class":867},[324,162528,1514],{"class":916},[324,162530,874],{"class":867},[19,162532,162533],{},"这种方式可以把小功能组合成大功能。",[14,162535,162537],{"id":162536},"_511-参数检查","5.11 参数检查",[19,162539,162540],{},"函数内部可以检查参数是否合法。",[316,162542,162544],{"className":31100,"code":162543,"language":31102,"meta":50,"style":50},"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",[269,162545,162546,162555,162567,162573,162583,162587,162591,162608,162612,162624,162635,162641],{"__ignoreMap":50},[324,162547,162548,162550,162553],{"class":326,"line":327},[324,162549,32669],{"class":863},[324,162551,162552],{"class":734}," divide",[324,162554,151605],{"class":867},[324,162556,162557,162559,162561,162563,162565],{"class":326,"line":203},[324,162558,3830],{"class":863},[324,162560,11611],{"class":867},[324,162562,3678],{"class":863},[324,162564,4822],{"class":916},[324,162566,4468],{"class":867},[324,162568,162569,162571],{"class":326,"line":338},[324,162570,15481],{"class":863},[324,162572,152684],{"class":916},[324,162574,162575,162577,162579,162581],{"class":326,"line":344},[324,162576,4819],{"class":863},[324,162578,11598],{"class":867},[324,162580,1448],{"class":863},[324,162582,151616],{"class":867},[324,162584,162585],{"class":326,"line":484},[324,162586,488],{"emptyLinePlaceholder":487},[324,162588,162589],{"class":326,"line":491},[324,162590,488],{"emptyLinePlaceholder":487},[324,162592,162593,162595,162597,162600,162602,162604,162606],{"class":326,"line":496},[324,162594,161818],{"class":867},[324,162596,913],{"class":863},[324,162598,162599],{"class":867}," divide(",[324,162601,1310],{"class":916},[324,162603,13164],{"class":867},[324,162605,1056],{"class":916},[324,162607,874],{"class":867},[324,162609,162610],{"class":326,"line":502},[324,162611,488],{"emptyLinePlaceholder":487},[324,162613,162614,162616,162618,162620,162622],{"class":326,"line":508},[324,162615,2262],{"class":863},[324,162617,162064],{"class":867},[324,162619,39649],{"class":863},[324,162621,39655],{"class":916},[324,162623,4468],{"class":867},[324,162625,162626,162628,162630,162633],{"class":326,"line":514},[324,162627,32021],{"class":916},[324,162629,868],{"class":867},[324,162631,162632],{"class":738},"\"除数不能为0\"",[324,162634,874],{"class":867},[324,162636,162637,162639],{"class":326,"line":2343},[324,162638,2432],{"class":863},[324,162640,4468],{"class":867},[324,162642,162643,162645],{"class":326,"line":2348},[324,162644,32021],{"class":916},[324,162646,77307],{"class":867},[14,162648,162650],{"id":162649},"_512-类型提示","5.12 类型提示",[19,162652,162653],{},"类型提示不会强制限制运行，但能让编辑器提示更准确。",[316,162655,162657],{"className":31100,"code":162656,"language":31102,"meta":50,"style":50},"def add(a: int, b: int) -> int:\n    return a + b\n",[269,162658,162659,162682],{"__ignoreMap":50},[324,162660,162661,162663,162665,162668,162670,162673,162675,162678,162680],{"class":326,"line":327},[324,162662,32669],{"class":863},[324,162664,5938],{"class":734},[324,162666,162667],{"class":867},"(a: ",[324,162669,871],{"class":916},[324,162671,162672],{"class":867},", b: ",[324,162674,871],{"class":916},[324,162676,162677],{"class":867},") -> ",[324,162679,871],{"class":916},[324,162681,4468],{"class":867},[324,162683,162684,162686,162688,162690],{"class":326,"line":203},[324,162685,4819],{"class":863},[324,162687,11598],{"class":867},[324,162689,1345],{"class":863},[324,162691,151616],{"class":867},[19,162693,162694],{},"字符串参数：",[316,162696,162698],{"className":31100,"code":162697,"language":31102,"meta":50,"style":50},"def say_hello(name: str) -> None:\n    print(f\"你好，{name}\")\n",[269,162699,162700,162717],{"__ignoreMap":50},[324,162701,162702,162704,162706,162709,162711,162713,162715],{"class":326,"line":327},[324,162703,32669],{"class":863},[324,162705,161508],{"class":734},[324,162707,162708],{"class":867},"(name: ",[324,162710,2034],{"class":916},[324,162712,162677],{"class":867},[324,162714,96408],{"class":916},[324,162716,4468],{"class":867},[324,162718,162719,162721,162723,162725,162727,162729,162731,162733,162735],{"class":326,"line":203},[324,162720,32021],{"class":916},[324,162722,868],{"class":867},[324,162724,920],{"class":863},[324,162726,157566],{"class":738},[324,162728,1760],{"class":916},[324,162730,80532],{"class":867},[324,162732,1810],{"class":916},[324,162734,1115],{"class":738},[324,162736,874],{"class":867},[19,162738,162739],{},"列表参数：",[316,162741,162743],{"className":31100,"code":162742,"language":31102,"meta":50,"style":50},"def get_total(numbers: list[int]) -> int:\n    total = 0\n    for number in numbers:\n        total += number\n    return total\n",[269,162744,162745,162764,162772,162784,162793],{"__ignoreMap":50},[324,162746,162747,162749,162752,162755,162757,162760,162762],{"class":326,"line":327},[324,162748,32669],{"class":863},[324,162750,162751],{"class":734}," get_total",[324,162753,162754],{"class":867},"(numbers: list[",[324,162756,871],{"class":916},[324,162758,162759],{"class":867},"]) -> ",[324,162761,871],{"class":916},[324,162763,4468],{"class":867},[324,162765,162766,162768,162770],{"class":326,"line":203},[324,162767,159819],{"class":867},[324,162769,913],{"class":863},[324,162771,48055],{"class":916},[324,162773,162774,162776,162779,162781],{"class":326,"line":338},[324,162775,3930],{"class":863},[324,162777,162778],{"class":867}," number ",[324,162780,26767],{"class":863},[324,162782,162783],{"class":867}," numbers:\n",[324,162785,162786,162788,162790],{"class":326,"line":344},[324,162787,160494],{"class":867},[324,162789,10206],{"class":863},[324,162791,162792],{"class":867}," number\n",[324,162794,162795,162797],{"class":326,"line":484},[324,162796,4819],{"class":863},[324,162798,162799],{"class":867}," total\n",[19,162801,162802],{},"学习初期可以先掌握基础语法，后续写项目时逐渐加类型提示。",[14,162804,162806],{"id":162805},"_513-小案例atm函数拆分","5.13 小案例：ATM函数拆分",[316,162808,162810],{"className":31100,"code":162809,"language":31102,"meta":50,"style":50},"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",[269,162811,162812,162822,162826,162830,162838,162849,162859,162869,162879,162889,162893,162897,162906,162928,162932,162936,162945,162951,162971,162983,162994,162998,163007,163018,163023,163027,163031,163040,163046,163065,163077,163087,163091,163102,163112,163116,163124,163135,163139,163143,163147,163155,163160,163174,163178,163190,163195,163207,163212,163224,163229,163241,163251,163255,163261],{"__ignoreMap":50},[324,162813,162814,162817,162819],{"class":326,"line":327},[324,162815,162816],{"class":867},"balance ",[324,162818,913],{"class":863},[324,162820,162821],{"class":916}," 1000\n",[324,162823,162824],{"class":326,"line":203},[324,162825,488],{"emptyLinePlaceholder":487},[324,162827,162828],{"class":326,"line":338},[324,162829,488],{"emptyLinePlaceholder":487},[324,162831,162832,162834,162836],{"class":326,"line":344},[324,162833,32669],{"class":863},[324,162835,152545],{"class":734},[324,162837,32675],{"class":867},[324,162839,162840,162842,162844,162847],{"class":326,"line":484},[324,162841,32021],{"class":916},[324,162843,868],{"class":867},[324,162845,162846],{"class":738},"\"====== ATM ======\"",[324,162848,874],{"class":867},[324,162850,162851,162853,162855,162857],{"class":326,"line":491},[324,162852,32021],{"class":916},[324,162854,868],{"class":867},[324,162856,161160],{"class":738},[324,162858,874],{"class":867},[324,162860,162861,162863,162865,162867],{"class":326,"line":496},[324,162862,32021],{"class":916},[324,162864,868],{"class":867},[324,162866,161171],{"class":738},[324,162868,874],{"class":867},[324,162870,162871,162873,162875,162877],{"class":326,"line":502},[324,162872,32021],{"class":916},[324,162874,868],{"class":867},[324,162876,161182],{"class":738},[324,162878,874],{"class":867},[324,162880,162881,162883,162885,162887],{"class":326,"line":508},[324,162882,32021],{"class":916},[324,162884,868],{"class":867},[324,162886,161193],{"class":738},[324,162888,874],{"class":867},[324,162890,162891],{"class":326,"line":514},[324,162892,488],{"emptyLinePlaceholder":487},[324,162894,162895],{"class":326,"line":2343},[324,162896,488],{"emptyLinePlaceholder":487},[324,162898,162899,162901,162904],{"class":326,"line":2348},[324,162900,32669],{"class":863},[324,162902,162903],{"class":734}," show_balance",[324,162905,32675],{"class":867},[324,162907,162908,162910,162912,162914,162917,162919,162922,162924,162926],{"class":326,"line":2354},[324,162909,32021],{"class":916},[324,162911,868],{"class":867},[324,162913,920],{"class":863},[324,162915,162916],{"class":738},"\"当前余额:",[324,162918,1760],{"class":916},[324,162920,162921],{"class":867},"balance",[324,162923,1810],{"class":916},[324,162925,157524],{"class":738},[324,162927,874],{"class":867},[324,162929,162930],{"class":326,"line":2359},[324,162931,488],{"emptyLinePlaceholder":487},[324,162933,162934],{"class":326,"line":2373},[324,162935,488],{"emptyLinePlaceholder":487},[324,162937,162938,162940,162943],{"class":326,"line":2378},[324,162939,32669],{"class":863},[324,162941,162942],{"class":734}," save_money",[324,162944,32675],{"class":867},[324,162946,162947,162949],{"class":326,"line":2384},[324,162948,162373],{"class":863},[324,162950,150611],{"class":867},[324,162952,162953,162956,162958,162960,162962,162964,162966,162969],{"class":326,"line":2405},[324,162954,162955],{"class":867},"    money ",[324,162957,913],{"class":863},[324,162959,110518],{"class":916},[324,162961,868],{"class":867},[324,162963,54543],{"class":916},[324,162965,868],{"class":867},[324,162967,162968],{"class":738},"\"请输入存款金额:\"",[324,162970,31219],{"class":867},[324,162972,162973,162975,162977,162979,162981],{"class":326,"line":2410},[324,162974,3830],{"class":863},[324,162976,150654],{"class":867},[324,162978,2319],{"class":863},[324,162980,4822],{"class":916},[324,162982,4468],{"class":867},[324,162984,162985,162987,162989,162992],{"class":326,"line":2424},[324,162986,33173],{"class":916},[324,162988,868],{"class":867},[324,162990,162991],{"class":738},"\"金额必须大于0\"",[324,162993,874],{"class":867},[324,162995,162996],{"class":326,"line":2429},[324,162997,152873],{"class":863},[324,162999,163000,163003,163005],{"class":326,"line":2458},[324,163001,163002],{"class":867},"    balance ",[324,163004,10206],{"class":863},[324,163006,150687],{"class":867},[324,163008,163009,163011,163013,163016],{"class":326,"line":2463},[324,163010,32021],{"class":916},[324,163012,868],{"class":867},[324,163014,163015],{"class":738},"\"存款成功\"",[324,163017,874],{"class":867},[324,163019,163020],{"class":326,"line":2480},[324,163021,163022],{"class":867},"    show_balance()\n",[324,163024,163025],{"class":326,"line":2485},[324,163026,488],{"emptyLinePlaceholder":487},[324,163028,163029],{"class":326,"line":2490},[324,163030,488],{"emptyLinePlaceholder":487},[324,163032,163033,163035,163038],{"class":326,"line":2495},[324,163034,32669],{"class":863},[324,163036,163037],{"class":734}," withdraw_money",[324,163039,32675],{"class":867},[324,163041,163042,163044],{"class":326,"line":2509},[324,163043,162373],{"class":863},[324,163045,150611],{"class":867},[324,163047,163048,163050,163052,163054,163056,163058,163060,163063],{"class":326,"line":2514},[324,163049,162955],{"class":867},[324,163051,913],{"class":863},[324,163053,110518],{"class":916},[324,163055,868],{"class":867},[324,163057,54543],{"class":916},[324,163059,868],{"class":867},[324,163061,163062],{"class":738},"\"请输入取款金额:\"",[324,163064,31219],{"class":867},[324,163066,163067,163069,163071,163073,163075],{"class":326,"line":3306},[324,163068,3830],{"class":863},[324,163070,150654],{"class":867},[324,163072,2319],{"class":863},[324,163074,4822],{"class":916},[324,163076,4468],{"class":867},[324,163078,163079,163081,163083,163085],{"class":326,"line":3320},[324,163080,33173],{"class":916},[324,163082,868],{"class":867},[324,163084,162991],{"class":738},[324,163086,874],{"class":867},[324,163088,163089],{"class":326,"line":3328},[324,163090,152873],{"class":863},[324,163092,163093,163095,163097,163099],{"class":326,"line":3333},[324,163094,3830],{"class":863},[324,163096,150654],{"class":867},[324,163098,1824],{"class":863},[324,163100,163101],{"class":867}," balance:\n",[324,163103,163104,163106,163108,163110],{"class":326,"line":3339},[324,163105,33173],{"class":916},[324,163107,868],{"class":867},[324,163109,150749],{"class":738},[324,163111,874],{"class":867},[324,163113,163114],{"class":326,"line":3345},[324,163115,152873],{"class":863},[324,163117,163118,163120,163122],{"class":326,"line":3350},[324,163119,163002],{"class":867},[324,163121,150764],{"class":863},[324,163123,150687],{"class":867},[324,163125,163126,163128,163130,163133],{"class":326,"line":8677},[324,163127,32021],{"class":916},[324,163129,868],{"class":867},[324,163131,163132],{"class":738},"\"取款成功\"",[324,163134,874],{"class":867},[324,163136,163137],{"class":326,"line":8701},[324,163138,163022],{"class":867},[324,163140,163141],{"class":326,"line":8706},[324,163142,488],{"emptyLinePlaceholder":487},[324,163144,163145],{"class":326,"line":8712},[324,163146,488],{"emptyLinePlaceholder":487},[324,163148,163149,163151,163153],{"class":326,"line":8739},[324,163150,109384],{"class":863},[324,163152,96014],{"class":916},[324,163154,4468],{"class":867},[324,163156,163157],{"class":326,"line":8744},[324,163158,163159],{"class":867},"    show_menu()\n",[324,163161,163162,163164,163166,163168,163170,163172],{"class":326,"line":8750},[324,163163,161204],{"class":867},[324,163165,913],{"class":863},[324,163167,61327],{"class":916},[324,163169,868],{"class":867},[324,163171,153585],{"class":738},[324,163173,874],{"class":867},[324,163175,163176],{"class":326,"line":8762},[324,163177,488],{"emptyLinePlaceholder":487},[324,163179,163180,163182,163184,163186,163188],{"class":326,"line":8774},[324,163181,3830],{"class":863},[324,163183,153598],{"class":867},[324,163185,3678],{"class":863},[324,163187,153603],{"class":738},[324,163189,4468],{"class":867},[324,163191,163192],{"class":326,"line":8786},[324,163193,163194],{"class":867},"        show_balance()\n",[324,163196,163197,163199,163201,163203,163205],{"class":326,"line":10445},[324,163198,40015],{"class":863},[324,163200,153598],{"class":867},[324,163202,3678],{"class":863},[324,163204,153622],{"class":738},[324,163206,4468],{"class":867},[324,163208,163209],{"class":326,"line":10470},[324,163210,163211],{"class":867},"        save_money()\n",[324,163213,163214,163216,163218,163220,163222],{"class":326,"line":10493},[324,163215,40015],{"class":863},[324,163217,153598],{"class":867},[324,163219,3678],{"class":863},[324,163221,153640],{"class":738},[324,163223,4468],{"class":867},[324,163225,163226],{"class":326,"line":10517},[324,163227,163228],{"class":867},"        withdraw_money()\n",[324,163230,163231,163233,163235,163237,163239],{"class":326,"line":10522},[324,163232,40015],{"class":863},[324,163234,153598],{"class":867},[324,163236,3678],{"class":863},[324,163238,153694],{"class":738},[324,163240,4468],{"class":867},[324,163242,163243,163245,163247,163249],{"class":326,"line":10527},[324,163244,33173],{"class":916},[324,163246,868],{"class":867},[324,163248,153705],{"class":738},[324,163250,874],{"class":867},[324,163252,163253],{"class":326,"line":10532},[324,163254,32349],{"class":863},[324,163256,163257,163259],{"class":326,"line":10541},[324,163258,158534],{"class":863},[324,163260,4468],{"class":867},[324,163262,163263,163265,163267,163269],{"class":326,"line":10546},[324,163264,33173],{"class":916},[324,163266,868],{"class":867},[324,163268,153726],{"class":738},[324,163270,874],{"class":867},[19,163272,163273],{},"这个案例展示了函数拆分的价值：主流程只负责调度，具体业务交给函数。",[14,163275,163277],{"id":163276},"_514-易错点","5.14 易错点",[192,163279,163280,163283,163286,163291,163296,163299],{},[195,163281,163282],{},"函数定义后必须调用才会执行。",[195,163284,163285],{},"函数名后面有括号才是调用。",[195,163287,163288,163290],{},[269,163289,17775],{}," 后面的代码不会执行。",[195,163292,163293,163294,29107],{},"没有返回值的函数默认返回 ",[269,163295,96408],{},[195,163297,163298],{},"局部变量不能在函数外部访问。",[195,163300,163301,163302,163304],{},"不要滥用 ",[269,163303,162338],{},"，更好的方式是让函数返回新值。",[19,163306,163307,163308,163310],{},"例如不用 ",[269,163309,162338],{}," 改写存款：",[316,163312,163314],{"className":31100,"code":163313,"language":31102,"meta":50,"style":50},"def save_money(balance, money):\n    return balance + money\n\n\nbalance = 1000\nbalance = save_money(balance, 200)\nprint(balance)\n",[269,163315,163316,163325,163336,163340,163344,163352,163365],{"__ignoreMap":50},[324,163317,163318,163320,163322],{"class":326,"line":327},[324,163319,32669],{"class":863},[324,163321,162942],{"class":734},[324,163323,163324],{"class":867},"(balance, money):\n",[324,163326,163327,163329,163332,163334],{"class":326,"line":203},[324,163328,4819],{"class":863},[324,163330,163331],{"class":867}," balance ",[324,163333,1345],{"class":863},[324,163335,150687],{"class":867},[324,163337,163338],{"class":326,"line":338},[324,163339,488],{"emptyLinePlaceholder":487},[324,163341,163342],{"class":326,"line":344},[324,163343,488],{"emptyLinePlaceholder":487},[324,163345,163346,163348,163350],{"class":326,"line":484},[324,163347,162816],{"class":867},[324,163349,913],{"class":863},[324,163351,162821],{"class":916},[324,163353,163354,163356,163358,163361,163363],{"class":326,"line":491},[324,163355,162816],{"class":867},[324,163357,913],{"class":863},[324,163359,163360],{"class":867}," save_money(balance, ",[324,163362,2453],{"class":916},[324,163364,874],{"class":867},[324,163366,163367,163369],{"class":326,"line":496},[324,163368,31137],{"class":916},[324,163370,163371],{"class":867},"(balance)\n",[14,163373,163375],{"id":163374},"_515-本章练习","5.15 本章练习",[192,163377,163378,163385,163391,163397,163403],{},[195,163379,163380,163381,163384],{},"定义函数 ",[269,163382,163383],{},"print_student(name, age)","，输出学生信息。",[195,163386,163380,163387,163390],{},[269,163388,163389],{},"get_max(a, b, c)","，返回三个数中的最大值。",[195,163392,163380,163393,163396],{},[269,163394,163395],{},"is_even(num)","，判断一个数是否为偶数。",[195,163398,163380,163399,163402],{},[269,163400,163401],{},"calculate_bmi(weight, height)","，返回 BMI。",[195,163404,163405],{},"把第 4 章的菜单程序拆分成多个函数。",[775,163407,163408],{},"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":50,"searchDepth":203,"depth":203,"links":163410},[163411,163412,163413,163414,163415,163416,163417,163418,163419,163423,163424,163425,163426,163427,163428],{"id":161431,"depth":203,"text":161432},{"id":161472,"depth":203,"text":161473},{"id":161562,"depth":203,"text":161563},{"id":161643,"depth":203,"text":161644},{"id":161776,"depth":203,"text":161777},{"id":161898,"depth":203,"text":161899},{"id":162020,"depth":203,"text":162021},{"id":162097,"depth":203,"text":162098},{"id":162219,"depth":203,"text":162220,"children":163420},[163421,163422],{"id":162223,"depth":338,"text":162224},{"id":162281,"depth":338,"text":162282},{"id":162410,"depth":203,"text":162411},{"id":162536,"depth":203,"text":162537},{"id":162649,"depth":203,"text":162650},{"id":162805,"depth":203,"text":162806},{"id":163276,"depth":203,"text":163277},{"id":163374,"depth":203,"text":163375},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch5",{"title":161423,"description":791},"wiki\u002F2024-10-10-python教程\u002Fch5-函数基础","Eht1XzIe9875ocKpFbsjhzVr6wLsbs8TqR7KqoAw9_M",{"id":163435,"title":163436,"body":163437,"description":791,"extension":792,"meta":166481,"navigation":487,"path":166482,"seo":166483,"stem":166484,"__hash__":166485},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch6-数据容器.md","6. 数据容器",{"type":7,"value":163438,"toc":166462},[163439,163442,163446,163449,163452,163556,163559,163563,163566,163646,163649,163653,163656,163716,163719,163755,163758,163773,163777,163850,163853,163908,163911,163981,163984,164068,164078,164136,164140,164185,164188,164214,164217,164323,164327,164330,164372,164375,164439,164442,164446,164449,164510,164513,164543,164546,164584,164588,164591,164600,164603,164727,164730,164771,164775,164778,164789,164829,164832,164847,164852,164855,164922,164925,165015,165019,165022,165070,165073,165100,165102,165132,165135,165155,165158,165189,165192,165225,165229,165232,165256,165259,165283,165286,165310,165314,165317,165447,165450,165530,165533,165608,165612,165615,165665,165668,165710,165713,165737,165739,165763,165766,165821,165824,165890,165894,165897,165900,165938,165941,165994,165997,166043,166046,166079,166082,166086,166405,166409,166438,166442,166459],[10,163440,163436],{"id":163441},"_6-数据容器",[14,163443,163445],{"id":163444},"_61-什么是数据容器","6.1 什么是数据容器",[19,163447,163448],{},"数据容器用于一次保存多个数据。",[19,163450,163451],{},"常见容器：",[1003,163453,163454,163471],{},[1006,163455,163456],{},[1009,163457,163458,163460,163463,163466,163469],{},[1012,163459,26495],{},[1012,163461,163462],{},"是否有序",[1012,163464,163465],{},"是否可变",[1012,163467,163468],{},"是否允许重复",[1012,163470,28214],{},[1049,163472,163473,163491,163507,163522,163539],{},[1009,163474,163475,163478,163481,163484,163487],{},[1054,163476,163477],{},"list列表",[1054,163479,163480],{},"有序",[1054,163482,163483],{},"可变",[1054,163485,163486],{},"允许",[1054,163488,163489],{},[269,163490,155769],{},[1009,163492,163493,163496,163498,163501,163503],{},[1054,163494,163495],{},"tuple元组",[1054,163497,163480],{},[1054,163499,163500],{},"不可变",[1054,163502,163486],{},[1054,163504,163505],{},[269,163506,155782],{},[1009,163508,163509,163512,163514,163516,163518],{},[1054,163510,163511],{},"str字符串",[1054,163513,163480],{},[1054,163515,163500],{},[1054,163517,163486],{},[1054,163519,163520],{},[269,163521,156392],{},[1009,163523,163524,163527,163530,163532,163535],{},[1054,163525,163526],{},"set集合",[1054,163528,163529],{},"无序",[1054,163531,163483],{},[1054,163533,163534],{},"不允许",[1054,163536,163537],{},[269,163538,155807],{},[1009,163540,163541,163544,163546,163548,163551],{},[1054,163542,163543],{},"dict字典",[1054,163545,163480],{},[1054,163547,163483],{},[1054,163549,163550],{},"key不允许重复",[1054,163552,163553],{},[269,163554,163555],{},"{\"name\": \"小明\"}",[19,163557,163558],{},"Python 3.7 之后，字典保持插入顺序。",[14,163560,163562],{"id":163561},"_62-列表list","6.2 列表list",[19,163564,163565],{},"列表用于保存一组有顺序的数据。",[316,163567,163569],{"className":31100,"code":163568,"language":31102,"meta":50,"style":50},"names = [\"小明\", \"小红\", \"小刚\"]\nnumbers = [1, 2, 3, 4]\nmixed = [\"小明\", 18, True]\nempty = []\n",[269,163570,163571,163591,163616,163637],{"__ignoreMap":50},[324,163572,163573,163575,163577,163579,163581,163583,163585,163587,163589],{"class":326,"line":327},[324,163574,160892],{"class":867},[324,163576,913],{"class":863},[324,163578,52948],{"class":867},[324,163580,150400],{"class":738},[324,163582,13164],{"class":867},[324,163584,151448],{"class":738},[324,163586,13164],{"class":867},[324,163588,160243],{"class":738},[324,163590,33968],{"class":867},[324,163592,163593,163596,163598,163600,163602,163604,163606,163608,163610,163612,163614],{"class":326,"line":203},[324,163594,163595],{"class":867},"numbers ",[324,163597,913],{"class":863},[324,163599,52948],{"class":867},[324,163601,1082],{"class":916},[324,163603,13164],{"class":867},[324,163605,944],{"class":916},[324,163607,13164],{"class":867},[324,163609,938],{"class":916},[324,163611,13164],{"class":867},[324,163613,1157],{"class":916},[324,163615,33968],{"class":867},[324,163617,163618,163621,163623,163625,163627,163629,163631,163633,163635],{"class":326,"line":338},[324,163619,163620],{"class":867},"mixed ",[324,163622,913],{"class":863},[324,163624,52948],{"class":867},[324,163626,150400],{"class":738},[324,163628,13164],{"class":867},[324,163630,1514],{"class":916},[324,163632,13164],{"class":867},[324,163634,32198],{"class":916},[324,163636,33968],{"class":867},[324,163638,163639,163642,163644],{"class":326,"line":344},[324,163640,163641],{"class":867},"empty ",[324,163643,913],{"class":863},[324,163645,52560],{"class":867},[19,163647,163648],{},"推荐一个列表中保存同类数据，代码更清晰。",[14,163650,163652],{"id":163651},"_63-列表索引","6.3 列表索引",[19,163654,163655],{},"正向索引从 0 开始：",[316,163657,163659],{"className":31100,"code":163658,"language":31102,"meta":50,"style":50},"names = [\"小明\", \"小红\", \"小刚\"]\n\nprint(names[0])\nprint(names[1])\nprint(names[2])\n",[269,163660,163661,163681,163685,163696,163706],{"__ignoreMap":50},[324,163662,163663,163665,163667,163669,163671,163673,163675,163677,163679],{"class":326,"line":327},[324,163664,160892],{"class":867},[324,163666,913],{"class":863},[324,163668,52948],{"class":867},[324,163670,150400],{"class":738},[324,163672,13164],{"class":867},[324,163674,151448],{"class":738},[324,163676,13164],{"class":867},[324,163678,160243],{"class":738},[324,163680,33968],{"class":867},[324,163682,163683],{"class":326,"line":203},[324,163684,488],{"emptyLinePlaceholder":487},[324,163686,163687,163689,163692,163694],{"class":326,"line":338},[324,163688,31137],{"class":916},[324,163690,163691],{"class":867},"(names[",[324,163693,1056],{"class":916},[324,163695,5386],{"class":867},[324,163697,163698,163700,163702,163704],{"class":326,"line":344},[324,163699,31137],{"class":916},[324,163701,163691],{"class":867},[324,163703,1082],{"class":916},[324,163705,5386],{"class":867},[324,163707,163708,163710,163712,163714],{"class":326,"line":484},[324,163709,31137],{"class":916},[324,163711,163691],{"class":867},[324,163713,944],{"class":916},[324,163715,5386],{"class":867},[19,163717,163718],{},"反向索引从 -1 开始：",[316,163720,163722],{"className":31100,"code":163721,"language":31102,"meta":50,"style":50},"print(names[-1])  # 小刚\nprint(names[-2])  # 小红\n",[269,163723,163724,163740],{"__ignoreMap":50},[324,163725,163726,163728,163730,163732,163734,163737],{"class":326,"line":327},[324,163727,31137],{"class":916},[324,163729,163691],{"class":867},[324,163731,1396],{"class":863},[324,163733,1082],{"class":916},[324,163735,163736],{"class":867},"])  ",[324,163738,163739],{"class":772},"# 小刚\n",[324,163741,163742,163744,163746,163748,163750,163752],{"class":326,"line":203},[324,163743,31137],{"class":916},[324,163745,163691],{"class":867},[324,163747,1396],{"class":863},[324,163749,944],{"class":916},[324,163751,163736],{"class":867},[324,163753,163754],{"class":772},"# 小红\n",[19,163756,163757],{},"索引越界会报错：",[316,163759,163761],{"className":31100,"code":163760,"language":31102,"meta":50,"style":50},"print(names[3])\n",[269,163762,163763],{"__ignoreMap":50},[324,163764,163765,163767,163769,163771],{"class":326,"line":327},[324,163766,31137],{"class":916},[324,163768,163691],{"class":867},[324,163770,938],{"class":916},[324,163772,5386],{"class":867},[14,163774,163776],{"id":163775},"_64-列表常用方法","6.4 列表常用方法",[316,163778,163780],{"className":31100,"code":163779,"language":31102,"meta":50,"style":50},"names = [\"小明\", \"小红\"]\n\nnames.append(\"小刚\")\nnames.insert(1, \"小李\")\nnames.extend([\"小王\", \"小赵\"])\n\nprint(names)\n",[269,163781,163782,163798,163802,163811,163825,163839,163843],{"__ignoreMap":50},[324,163783,163784,163786,163788,163790,163792,163794,163796],{"class":326,"line":327},[324,163785,160892],{"class":867},[324,163787,913],{"class":863},[324,163789,52948],{"class":867},[324,163791,150400],{"class":738},[324,163793,13164],{"class":867},[324,163795,151448],{"class":738},[324,163797,33968],{"class":867},[324,163799,163800],{"class":326,"line":203},[324,163801,488],{"emptyLinePlaceholder":487},[324,163803,163804,163807,163809],{"class":326,"line":338},[324,163805,163806],{"class":867},"names.append(",[324,163808,160243],{"class":738},[324,163810,874],{"class":867},[324,163812,163813,163816,163818,163820,163823],{"class":326,"line":344},[324,163814,163815],{"class":867},"names.insert(",[324,163817,1082],{"class":916},[324,163819,13164],{"class":867},[324,163821,163822],{"class":738},"\"小李\"",[324,163824,874],{"class":867},[324,163826,163827,163830,163832,163834,163837],{"class":326,"line":484},[324,163828,163829],{"class":867},"names.extend([",[324,163831,9412],{"class":738},[324,163833,13164],{"class":867},[324,163835,163836],{"class":738},"\"小赵\"",[324,163838,5386],{"class":867},[324,163840,163841],{"class":326,"line":491},[324,163842,488],{"emptyLinePlaceholder":487},[324,163844,163845,163847],{"class":326,"line":496},[324,163846,31137],{"class":916},[324,163848,163849],{"class":867},"(names)\n",[19,163851,163852],{},"删除元素：",[316,163854,163856],{"className":31100,"code":163855,"language":31102,"meta":50,"style":50},"names.remove(\"小红\")\nlast = names.pop()\nfirst = names.pop(0)\ndel names[0]\nnames.clear()\n",[269,163857,163858,163867,163877,163891,163903],{"__ignoreMap":50},[324,163859,163860,163863,163865],{"class":326,"line":327},[324,163861,163862],{"class":867},"names.remove(",[324,163864,151448],{"class":738},[324,163866,874],{"class":867},[324,163868,163869,163872,163874],{"class":326,"line":203},[324,163870,163871],{"class":867},"last ",[324,163873,913],{"class":863},[324,163875,163876],{"class":867}," names.pop()\n",[324,163878,163879,163882,163884,163887,163889],{"class":326,"line":338},[324,163880,163881],{"class":867},"first ",[324,163883,913],{"class":863},[324,163885,163886],{"class":867}," names.pop(",[324,163888,1056],{"class":916},[324,163890,874],{"class":867},[324,163892,163893,163896,163899,163901],{"class":326,"line":344},[324,163894,163895],{"class":863},"del",[324,163897,163898],{"class":867}," names[",[324,163900,1056],{"class":916},[324,163902,33968],{"class":867},[324,163904,163905],{"class":326,"line":484},[324,163906,163907],{"class":867},"names.clear()\n",[19,163909,163910],{},"查询和统计：",[316,163912,163914],{"className":31100,"code":163913,"language":31102,"meta":50,"style":50},"numbers = [1, 2, 3, 2, 4]\n\nprint(numbers.index(3))\nprint(numbers.count(2))\nprint(len(numbers))\n",[269,163915,163916,163944,163948,163959,163970],{"__ignoreMap":50},[324,163917,163918,163920,163922,163924,163926,163928,163930,163932,163934,163936,163938,163940,163942],{"class":326,"line":327},[324,163919,163595],{"class":867},[324,163921,913],{"class":863},[324,163923,52948],{"class":867},[324,163925,1082],{"class":916},[324,163927,13164],{"class":867},[324,163929,944],{"class":916},[324,163931,13164],{"class":867},[324,163933,938],{"class":916},[324,163935,13164],{"class":867},[324,163937,944],{"class":916},[324,163939,13164],{"class":867},[324,163941,1157],{"class":916},[324,163943,33968],{"class":867},[324,163945,163946],{"class":326,"line":203},[324,163947,488],{"emptyLinePlaceholder":487},[324,163949,163950,163952,163955,163957],{"class":326,"line":338},[324,163951,31137],{"class":916},[324,163953,163954],{"class":867},"(numbers.index(",[324,163956,938],{"class":916},[324,163958,31219],{"class":867},[324,163960,163961,163963,163966,163968],{"class":326,"line":344},[324,163962,31137],{"class":916},[324,163964,163965],{"class":867},"(numbers.count(",[324,163967,944],{"class":916},[324,163969,31219],{"class":867},[324,163971,163972,163974,163976,163978],{"class":326,"line":484},[324,163973,31137],{"class":916},[324,163975,868],{"class":867},[324,163977,8087],{"class":916},[324,163979,163980],{"class":867},"(numbers))\n",[19,163982,163983],{},"排序：",[316,163985,163987],{"className":31100,"code":163986,"language":31102,"meta":50,"style":50},"numbers = [3, 1, 5, 2]\n\nnumbers.sort()\nprint(numbers)\n\nnumbers.sort(reverse=True)\nprint(numbers)\n\nnumbers.reverse()\nprint(numbers)\n",[269,163988,163989,164013,164017,164022,164029,164033,164047,164053,164057,164062],{"__ignoreMap":50},[324,163990,163991,163993,163995,163997,163999,164001,164003,164005,164007,164009,164011],{"class":326,"line":327},[324,163992,163595],{"class":867},[324,163994,913],{"class":863},[324,163996,52948],{"class":867},[324,163998,938],{"class":916},[324,164000,13164],{"class":867},[324,164002,1082],{"class":916},[324,164004,13164],{"class":867},[324,164006,1183],{"class":916},[324,164008,13164],{"class":867},[324,164010,944],{"class":916},[324,164012,33968],{"class":867},[324,164014,164015],{"class":326,"line":203},[324,164016,488],{"emptyLinePlaceholder":487},[324,164018,164019],{"class":326,"line":338},[324,164020,164021],{"class":867},"numbers.sort()\n",[324,164023,164024,164026],{"class":326,"line":344},[324,164025,31137],{"class":916},[324,164027,164028],{"class":867},"(numbers)\n",[324,164030,164031],{"class":326,"line":484},[324,164032,488],{"emptyLinePlaceholder":487},[324,164034,164035,164038,164041,164043,164045],{"class":326,"line":491},[324,164036,164037],{"class":867},"numbers.sort(",[324,164039,164040],{"class":5945},"reverse",[324,164042,913],{"class":863},[324,164044,32198],{"class":916},[324,164046,874],{"class":867},[324,164048,164049,164051],{"class":326,"line":496},[324,164050,31137],{"class":916},[324,164052,164028],{"class":867},[324,164054,164055],{"class":326,"line":502},[324,164056,488],{"emptyLinePlaceholder":487},[324,164058,164059],{"class":326,"line":508},[324,164060,164061],{"class":867},"numbers.reverse()\n",[324,164063,164064,164066],{"class":326,"line":514},[324,164065,31137],{"class":916},[324,164067,164028],{"class":867},[19,164069,164070,164073,164074,164077],{},[269,164071,164072],{},"sort()"," 会修改原列表，",[269,164075,164076],{},"sorted()"," 返回新列表。",[316,164079,164081],{"className":31100,"code":164080,"language":31102,"meta":50,"style":50},"numbers = [3, 1, 5, 2]\nnew_numbers = sorted(numbers)\n\nprint(numbers)\nprint(new_numbers)\n",[269,164082,164083,164107,164119,164123,164129],{"__ignoreMap":50},[324,164084,164085,164087,164089,164091,164093,164095,164097,164099,164101,164103,164105],{"class":326,"line":327},[324,164086,163595],{"class":867},[324,164088,913],{"class":863},[324,164090,52948],{"class":867},[324,164092,938],{"class":916},[324,164094,13164],{"class":867},[324,164096,1082],{"class":916},[324,164098,13164],{"class":867},[324,164100,1183],{"class":916},[324,164102,13164],{"class":867},[324,164104,944],{"class":916},[324,164106,33968],{"class":867},[324,164108,164109,164112,164114,164117],{"class":326,"line":203},[324,164110,164111],{"class":867},"new_numbers ",[324,164113,913],{"class":863},[324,164115,164116],{"class":916}," sorted",[324,164118,164028],{"class":867},[324,164120,164121],{"class":326,"line":338},[324,164122,488],{"emptyLinePlaceholder":487},[324,164124,164125,164127],{"class":326,"line":344},[324,164126,31137],{"class":916},[324,164128,164028],{"class":867},[324,164130,164131,164133],{"class":326,"line":484},[324,164132,31137],{"class":916},[324,164134,164135],{"class":867},"(new_numbers)\n",[14,164137,164139],{"id":164138},"_65-列表遍历","6.5 列表遍历",[316,164141,164143],{"className":31100,"code":164142,"language":31102,"meta":50,"style":50},"names = [\"小明\", \"小红\", \"小刚\"]\n\nfor name in names:\n    print(name)\n",[269,164144,164145,164165,164169,164179],{"__ignoreMap":50},[324,164146,164147,164149,164151,164153,164155,164157,164159,164161,164163],{"class":326,"line":327},[324,164148,160892],{"class":867},[324,164150,913],{"class":863},[324,164152,52948],{"class":867},[324,164154,150400],{"class":738},[324,164156,13164],{"class":867},[324,164158,151448],{"class":738},[324,164160,13164],{"class":867},[324,164162,160243],{"class":738},[324,164164,33968],{"class":867},[324,164166,164167],{"class":326,"line":203},[324,164168,488],{"emptyLinePlaceholder":487},[324,164170,164171,164173,164175,164177],{"class":326,"line":338},[324,164172,3754],{"class":863},[324,164174,160928],{"class":867},[324,164176,26767],{"class":863},[324,164178,160933],{"class":867},[324,164180,164181,164183],{"class":326,"line":344},[324,164182,32021],{"class":916},[324,164184,151172],{"class":867},[19,164186,164187],{},"需要索引时：",[316,164189,164191],{"className":31100,"code":164190,"language":31102,"meta":50,"style":50},"for index, name in enumerate(names):\n    print(index, name)\n",[269,164192,164193,164207],{"__ignoreMap":50},[324,164194,164195,164197,164200,164202,164204],{"class":326,"line":327},[324,164196,3754],{"class":863},[324,164198,164199],{"class":867}," index, name ",[324,164201,26767],{"class":863},[324,164203,32328],{"class":916},[324,164205,164206],{"class":867},"(names):\n",[324,164208,164209,164211],{"class":326,"line":203},[324,164210,32021],{"class":916},[324,164212,164213],{"class":867},"(index, name)\n",[19,164215,164216],{},"统计总分：",[316,164218,164220],{"className":31100,"code":164219,"language":31102,"meta":50,"style":50},"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",[269,164221,164222,164247,164255,164259,164270,164278,164282,164299],{"__ignoreMap":50},[324,164223,164224,164227,164229,164231,164233,164235,164237,164239,164241,164243,164245],{"class":326,"line":327},[324,164225,164226],{"class":867},"scores ",[324,164228,913],{"class":863},[324,164230,52948],{"class":867},[324,164232,1726],{"class":916},[324,164234,13164],{"class":867},[324,164236,1600],{"class":916},[324,164238,13164],{"class":867},[324,164240,1118],{"class":916},[324,164242,13164],{"class":867},[324,164244,1425],{"class":916},[324,164246,33968],{"class":867},[324,164248,164249,164251,164253],{"class":326,"line":203},[324,164250,157772],{"class":867},[324,164252,913],{"class":863},[324,164254,48055],{"class":916},[324,164256,164257],{"class":326,"line":338},[324,164258,488],{"emptyLinePlaceholder":487},[324,164260,164261,164263,164265,164267],{"class":326,"line":344},[324,164262,3754],{"class":863},[324,164264,158295],{"class":867},[324,164266,26767],{"class":863},[324,164268,164269],{"class":867}," scores:\n",[324,164271,164272,164274,164276],{"class":326,"line":484},[324,164273,159819],{"class":867},[324,164275,10206],{"class":863},[324,164277,2310],{"class":867},[324,164279,164280],{"class":326,"line":491},[324,164281,488],{"emptyLinePlaceholder":487},[324,164283,164284,164287,164289,164292,164294,164296],{"class":326,"line":496},[324,164285,164286],{"class":867},"avg ",[324,164288,913],{"class":863},[324,164290,164291],{"class":867}," total ",[324,164293,1448],{"class":863},[324,164295,8060],{"class":916},[324,164297,164298],{"class":867},"(scores)\n",[324,164300,164301,164303,164305,164307,164310,164312,164315,164317,164319,164321],{"class":326,"line":502},[324,164302,31137],{"class":916},[324,164304,868],{"class":867},[324,164306,920],{"class":863},[324,164308,164309],{"class":738},"\"平均分:",[324,164311,1760],{"class":916},[324,164313,164314],{"class":867},"avg",[324,164316,157671],{"class":863},[324,164318,1810],{"class":916},[324,164320,1115],{"class":738},[324,164322,874],{"class":867},[14,164324,164326],{"id":164325},"_66-元组tuple","6.6 元组tuple",[19,164328,164329],{},"元组和列表类似，但不可修改。",[316,164331,164333],{"className":31100,"code":164332,"language":31102,"meta":50,"style":50},"point = (10, 20)\ninfo = (\"小明\", 18, \"北京\")\n",[269,164334,164335,164352],{"__ignoreMap":50},[324,164336,164337,164340,164342,164344,164346,164348,164350],{"class":326,"line":327},[324,164338,164339],{"class":867},"point ",[324,164341,913],{"class":863},[324,164343,2389],{"class":867},[324,164345,1310],{"class":916},[324,164347,13164],{"class":867},[324,164349,1564],{"class":916},[324,164351,874],{"class":867},[324,164353,164354,164356,164358,164360,164362,164364,164366,164368,164370],{"class":326,"line":203},[324,164355,117035],{"class":867},[324,164357,913],{"class":863},[324,164359,2389],{"class":867},[324,164361,150400],{"class":738},[324,164363,13164],{"class":867},[324,164365,1514],{"class":916},[324,164367,13164],{"class":867},[324,164369,69991],{"class":738},[324,164371,874],{"class":867},[19,164373,164374],{},"单元素元组必须加逗号：",[316,164376,164378],{"className":31100,"code":164377,"language":31102,"meta":50,"style":50},"t1 = (10,)\nt2 = (10)\n\nprint(type(t1))  # tuple\nprint(type(t2))  # int\n",[269,164379,164380,164394,164407,164411,164425],{"__ignoreMap":50},[324,164381,164382,164385,164387,164389,164391],{"class":326,"line":327},[324,164383,164384],{"class":867},"t1 ",[324,164386,913],{"class":863},[324,164388,2389],{"class":867},[324,164390,1310],{"class":916},[324,164392,164393],{"class":867},",)\n",[324,164395,164396,164399,164401,164403,164405],{"class":326,"line":203},[324,164397,164398],{"class":867},"t2 ",[324,164400,913],{"class":863},[324,164402,2389],{"class":867},[324,164404,1310],{"class":916},[324,164406,874],{"class":867},[324,164408,164409],{"class":326,"line":338},[324,164410,488],{"emptyLinePlaceholder":487},[324,164412,164413,164415,164417,164419,164422],{"class":326,"line":344},[324,164414,31137],{"class":916},[324,164416,868],{"class":867},[324,164418,103828],{"class":916},[324,164420,164421],{"class":867},"(t1))  ",[324,164423,164424],{"class":772},"# tuple\n",[324,164426,164427,164429,164431,164433,164436],{"class":326,"line":484},[324,164428,31137],{"class":916},[324,164430,868],{"class":867},[324,164432,103828],{"class":916},[324,164434,164435],{"class":867},"(t2))  ",[324,164437,164438],{"class":772},"# int\n",[19,164440,164441],{},"元组适合保存不希望被修改的数据，如坐标、配置项。",[14,164443,164445],{"id":164444},"_67-字符串str","6.7 字符串str",[19,164447,164448],{},"字符串也是序列，可以索引、切片和遍历。",[316,164450,164452],{"className":31100,"code":164451,"language":31102,"meta":50,"style":50},"text = \"python\"\n\nprint(text[0])\nprint(text[-1])\n\nfor ch in text:\n    print(ch)\n",[269,164453,164454,164462,164466,164477,164489,164493,164504],{"__ignoreMap":50},[324,164455,164456,164458,164460],{"class":326,"line":327},[324,164457,156956],{"class":867},[324,164459,913],{"class":863},[324,164461,160193],{"class":738},[324,164463,164464],{"class":326,"line":203},[324,164465,488],{"emptyLinePlaceholder":487},[324,164467,164468,164470,164473,164475],{"class":326,"line":338},[324,164469,31137],{"class":916},[324,164471,164472],{"class":867},"(text[",[324,164474,1056],{"class":916},[324,164476,5386],{"class":867},[324,164478,164479,164481,164483,164485,164487],{"class":326,"line":344},[324,164480,31137],{"class":916},[324,164482,164472],{"class":867},[324,164484,1396],{"class":863},[324,164486,1082],{"class":916},[324,164488,5386],{"class":867},[324,164490,164491],{"class":326,"line":484},[324,164492,488],{"emptyLinePlaceholder":487},[324,164494,164495,164497,164499,164501],{"class":326,"line":491},[324,164496,3754],{"class":863},[324,164498,160204],{"class":867},[324,164500,26767],{"class":863},[324,164502,164503],{"class":867}," text:\n",[324,164505,164506,164508],{"class":326,"line":496},[324,164507,32021],{"class":916},[324,164509,160215],{"class":867},[19,164511,164512],{},"字符串不可变：",[316,164514,164516],{"className":31100,"code":164515,"language":31102,"meta":50,"style":50},"text = \"python\"\ntext[0] = \"P\"  # 报错\n",[269,164517,164518,164526],{"__ignoreMap":50},[324,164519,164520,164522,164524],{"class":326,"line":327},[324,164521,156956],{"class":867},[324,164523,913],{"class":863},[324,164525,160193],{"class":738},[324,164527,164528,164531,164533,164535,164537,164540],{"class":326,"line":203},[324,164529,164530],{"class":867},"text[",[324,164532,1056],{"class":916},[324,164534,5172],{"class":867},[324,164536,913],{"class":863},[324,164538,164539],{"class":738}," \"P\"",[324,164541,164542],{"class":772},"  # 报错\n",[19,164544,164545],{},"如果要得到新字符串：",[316,164547,164549],{"className":31100,"code":164548,"language":31102,"meta":50,"style":50},"text = \"python\"\ntext = \"P\" + text[1:]\nprint(text)\n",[269,164550,164551,164559,164577],{"__ignoreMap":50},[324,164552,164553,164555,164557],{"class":326,"line":327},[324,164554,156956],{"class":867},[324,164556,913],{"class":863},[324,164558,160193],{"class":738},[324,164560,164561,164563,164565,164567,164569,164572,164574],{"class":326,"line":203},[324,164562,156956],{"class":867},[324,164564,913],{"class":863},[324,164566,164539],{"class":738},[324,164568,46288],{"class":863},[324,164570,164571],{"class":867}," text[",[324,164573,1082],{"class":916},[324,164575,164576],{"class":867},":]\n",[324,164578,164579,164581],{"class":326,"line":338},[324,164580,31137],{"class":916},[324,164582,164583],{"class":867},"(text)\n",[14,164585,164587],{"id":164586},"_68-切片","6.8 切片",[19,164589,164590],{},"切片用于从序列中取一部分。",[316,164592,164594],{"className":31100,"code":164593,"language":31102,"meta":50,"style":50},"序列[开始:结束:步长]\n",[269,164595,164596],{"__ignoreMap":50},[324,164597,164598],{"class":326,"line":327},[324,164599,164593],{"class":867},[19,164601,164602],{},"结束位置不包含。",[316,164604,164606],{"className":31100,"code":164605,"language":31102,"meta":50,"style":50},"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",[269,164607,164608,164645,164649,164668,164683,164697,164711],{"__ignoreMap":50},[324,164609,164610,164613,164615,164617,164619,164621,164623,164625,164627,164629,164631,164633,164635,164637,164639,164641,164643],{"class":326,"line":327},[324,164611,164612],{"class":867},"nums ",[324,164614,913],{"class":863},[324,164616,52948],{"class":867},[324,164618,1056],{"class":916},[324,164620,13164],{"class":867},[324,164622,1082],{"class":916},[324,164624,13164],{"class":867},[324,164626,944],{"class":916},[324,164628,13164],{"class":867},[324,164630,938],{"class":916},[324,164632,13164],{"class":867},[324,164634,1157],{"class":916},[324,164636,13164],{"class":867},[324,164638,1183],{"class":916},[324,164640,13164],{"class":867},[324,164642,1208],{"class":916},[324,164644,33968],{"class":867},[324,164646,164647],{"class":326,"line":203},[324,164648,488],{"emptyLinePlaceholder":487},[324,164650,164651,164653,164656,164658,164660,164662,164665],{"class":326,"line":338},[324,164652,31137],{"class":916},[324,164654,164655],{"class":867},"(nums[",[324,164657,1082],{"class":916},[324,164659,1723],{"class":867},[324,164661,1157],{"class":916},[324,164663,164664],{"class":867},"])    ",[324,164666,164667],{"class":772},"# [1, 2, 3]\n",[324,164669,164670,164672,164675,164677,164680],{"class":326,"line":344},[324,164671,31137],{"class":916},[324,164673,164674],{"class":867},"(nums[:",[324,164676,938],{"class":916},[324,164678,164679],{"class":867},"])     ",[324,164681,164682],{"class":772},"# [0, 1, 2]\n",[324,164684,164685,164687,164689,164691,164694],{"class":326,"line":484},[324,164686,31137],{"class":916},[324,164688,164655],{"class":867},[324,164690,938],{"class":916},[324,164692,164693],{"class":867},":])     ",[324,164695,164696],{"class":772},"# [3, 4, 5, 6]\n",[324,164698,164699,164701,164704,164706,164708],{"class":326,"line":491},[324,164700,31137],{"class":916},[324,164702,164703],{"class":867},"(nums[::",[324,164705,944],{"class":916},[324,164707,164664],{"class":867},[324,164709,164710],{"class":772},"# [0, 2, 4, 6]\n",[324,164712,164713,164715,164717,164719,164721,164724],{"class":326,"line":496},[324,164714,31137],{"class":916},[324,164716,164703],{"class":867},[324,164718,1396],{"class":863},[324,164720,1082],{"class":916},[324,164722,164723],{"class":867},"])   ",[324,164725,164726],{"class":772},"# 反转\n",[19,164728,164729],{},"字符串切片：",[316,164731,164733],{"className":31100,"code":164732,"language":31102,"meta":50,"style":50},"text = \"abcdef\"\nprint(text[1:4])\nprint(text[::-1])\n",[269,164734,164735,164744,164758],{"__ignoreMap":50},[324,164736,164737,164739,164741],{"class":326,"line":327},[324,164738,156956],{"class":867},[324,164740,913],{"class":863},[324,164742,164743],{"class":738}," \"abcdef\"\n",[324,164745,164746,164748,164750,164752,164754,164756],{"class":326,"line":203},[324,164747,31137],{"class":916},[324,164749,164472],{"class":867},[324,164751,1082],{"class":916},[324,164753,1723],{"class":867},[324,164755,1157],{"class":916},[324,164757,5386],{"class":867},[324,164759,164760,164762,164765,164767,164769],{"class":326,"line":338},[324,164761,31137],{"class":916},[324,164763,164764],{"class":867},"(text[::",[324,164766,1396],{"class":863},[324,164768,1082],{"class":916},[324,164770,5386],{"class":867},[14,164772,164774],{"id":164773},"_69-集合set","6.9 集合set",[19,164776,164777],{},"集合特点：",[192,164779,164780,164783,164786],{},[195,164781,164782],{},"无序。",[195,164784,164785],{},"元素不重复。",[195,164787,164788],{},"可以做交集、并集、差集。",[316,164790,164792],{"className":31100,"code":164791,"language":31102,"meta":50,"style":50},"nums = {1, 2, 3, 3, 4}\nprint(nums)\n",[269,164793,164794,164822],{"__ignoreMap":50},[324,164795,164796,164798,164800,164802,164804,164806,164808,164810,164812,164814,164816,164818,164820],{"class":326,"line":327},[324,164797,164612],{"class":867},[324,164799,913],{"class":863},[324,164801,5177],{"class":867},[324,164803,1082],{"class":916},[324,164805,13164],{"class":867},[324,164807,944],{"class":916},[324,164809,13164],{"class":867},[324,164811,938],{"class":916},[324,164813,13164],{"class":867},[324,164815,938],{"class":916},[324,164817,13164],{"class":867},[324,164819,1157],{"class":916},[324,164821,2296],{"class":867},[324,164823,164824,164826],{"class":326,"line":203},[324,164825,31137],{"class":916},[324,164827,164828],{"class":867},"(nums)\n",[19,164830,164831],{},"创建空集合：",[316,164833,164835],{"className":31100,"code":164834,"language":31102,"meta":50,"style":50},"s = set()\n",[269,164836,164837],{"__ignoreMap":50},[324,164838,164839,164841,164843,164845],{"class":326,"line":327},[324,164840,11308],{"class":867},[324,164842,913],{"class":863},[324,164844,120234],{"class":916},[324,164846,2706],{"class":867},[19,164848,9754,164849,164851],{},[269,164850,33181],{}," 是空字典，不是空集合。",[19,164853,164854],{},"集合常用操作：",[316,164856,164858],{"className":31100,"code":164857,"language":31102,"meta":50,"style":50},"s = {1, 2, 3}\n\ns.add(4)\ns.remove(2)\ns.discard(10)\nprint(len(s))\n",[269,164859,164860,164880,164884,164893,164902,164911],{"__ignoreMap":50},[324,164861,164862,164864,164866,164868,164870,164872,164874,164876,164878],{"class":326,"line":327},[324,164863,11308],{"class":867},[324,164865,913],{"class":863},[324,164867,5177],{"class":867},[324,164869,1082],{"class":916},[324,164871,13164],{"class":867},[324,164873,944],{"class":916},[324,164875,13164],{"class":867},[324,164877,938],{"class":916},[324,164879,2296],{"class":867},[324,164881,164882],{"class":326,"line":203},[324,164883,488],{"emptyLinePlaceholder":487},[324,164885,164886,164889,164891],{"class":326,"line":338},[324,164887,164888],{"class":867},"s.add(",[324,164890,1157],{"class":916},[324,164892,874],{"class":867},[324,164894,164895,164898,164900],{"class":326,"line":344},[324,164896,164897],{"class":867},"s.remove(",[324,164899,944],{"class":916},[324,164901,874],{"class":867},[324,164903,164904,164907,164909],{"class":326,"line":484},[324,164905,164906],{"class":867},"s.discard(",[324,164908,1310],{"class":916},[324,164910,874],{"class":867},[324,164912,164913,164915,164917,164919],{"class":326,"line":491},[324,164914,31137],{"class":916},[324,164916,868],{"class":867},[324,164918,8087],{"class":916},[324,164920,164921],{"class":867},"(s))\n",[19,164923,164924],{},"交并差：",[316,164926,164928],{"className":31100,"code":164927,"language":31102,"meta":50,"style":50},"a = {1, 2, 3}\nb = {3, 4, 5}\n\nprint(a & b)  # 交集\nprint(a | b)  # 并集\nprint(a - b)  # 差集\n",[269,164929,164930,164950,164970,164974,164989,165002],{"__ignoreMap":50},[324,164931,164932,164934,164936,164938,164940,164942,164944,164946,164948],{"class":326,"line":327},[324,164933,11648],{"class":867},[324,164935,913],{"class":863},[324,164937,5177],{"class":867},[324,164939,1082],{"class":916},[324,164941,13164],{"class":867},[324,164943,944],{"class":916},[324,164945,13164],{"class":867},[324,164947,938],{"class":916},[324,164949,2296],{"class":867},[324,164951,164952,164954,164956,164958,164960,164962,164964,164966,164968],{"class":326,"line":203},[324,164953,11674],{"class":867},[324,164955,913],{"class":863},[324,164957,5177],{"class":867},[324,164959,938],{"class":916},[324,164961,13164],{"class":867},[324,164963,1157],{"class":916},[324,164965,13164],{"class":867},[324,164967,1183],{"class":916},[324,164969,2296],{"class":867},[324,164971,164972],{"class":326,"line":338},[324,164973,488],{"emptyLinePlaceholder":487},[324,164975,164976,164978,164981,164983,164986],{"class":326,"line":344},[324,164977,31137],{"class":916},[324,164979,164980],{"class":867},"(a ",[324,164982,1217],{"class":863},[324,164984,164985],{"class":867}," b)  ",[324,164987,164988],{"class":772},"# 交集\n",[324,164990,164991,164993,164995,164997,164999],{"class":326,"line":484},[324,164992,31137],{"class":916},[324,164994,164980],{"class":867},[324,164996,1785],{"class":863},[324,164998,164985],{"class":867},[324,165000,165001],{"class":772},"# 并集\n",[324,165003,165004,165006,165008,165010,165012],{"class":326,"line":491},[324,165005,31137],{"class":916},[324,165007,164980],{"class":867},[324,165009,1396],{"class":863},[324,165011,164985],{"class":867},[324,165013,165014],{"class":772},"# 差集\n",[14,165016,165018],{"id":165017},"_610-字典dict","6.10 字典dict",[19,165020,165021],{},"字典通过 key-value 保存数据。",[316,165023,165025],{"className":31100,"code":165024,"language":31102,"meta":50,"style":50},"student = {\n    \"name\": \"小明\",\n    \"age\": 18,\n    \"score\": 95\n}\n",[269,165026,165027,165035,165045,165056,165066],{"__ignoreMap":50},[324,165028,165029,165031,165033],{"class":326,"line":327},[324,165030,149993],{"class":867},[324,165032,913],{"class":863},[324,165034,16301],{"class":867},[324,165036,165037,165039,165041,165043],{"class":326,"line":203},[324,165038,147532],{"class":738},[324,165040,52159],{"class":867},[324,165042,150400],{"class":738},[324,165044,32188],{"class":867},[324,165046,165047,165050,165052,165054],{"class":326,"line":338},[324,165048,165049],{"class":738},"    \"age\"",[324,165051,52159],{"class":867},[324,165053,1514],{"class":916},[324,165055,32188],{"class":867},[324,165057,165058,165061,165063],{"class":326,"line":344},[324,165059,165060],{"class":738},"    \"score\"",[324,165062,52159],{"class":867},[324,165064,165065],{"class":916},"95\n",[324,165067,165068],{"class":326,"line":484},[324,165069,2296],{"class":867},[19,165071,165072],{},"获取值：",[316,165074,165076],{"className":31100,"code":165075,"language":31102,"meta":50,"style":50},"print(student[\"name\"])\nprint(student.get(\"name\"))\n",[269,165077,165078,165089],{"__ignoreMap":50},[324,165079,165080,165082,165085,165087],{"class":326,"line":327},[324,165081,31137],{"class":916},[324,165083,165084],{"class":867},"(student[",[324,165086,63401],{"class":738},[324,165088,5386],{"class":867},[324,165090,165091,165093,165096,165098],{"class":326,"line":203},[324,165092,31137],{"class":916},[324,165094,165095],{"class":867},"(student.get(",[324,165097,63401],{"class":738},[324,165099,31219],{"class":867},[19,165101,16117],{},[316,165103,165105],{"className":31100,"code":165104,"language":31102,"meta":50,"style":50},"student[\"address\"]     # key不存在会报错\nstudent.get(\"address\") # key不存在返回None\n",[269,165106,165107,165120],{"__ignoreMap":50},[324,165108,165109,165111,165114,165117],{"class":326,"line":327},[324,165110,153371],{"class":867},[324,165112,165113],{"class":738},"\"address\"",[324,165115,165116],{"class":867},"]     ",[324,165118,165119],{"class":772},"# key不存在会报错\n",[324,165121,165122,165125,165127,165129],{"class":326,"line":203},[324,165123,165124],{"class":867},"student.get(",[324,165126,165113],{"class":738},[324,165128,14443],{"class":867},[324,165130,165131],{"class":772},"# key不存在返回None\n",[19,165133,165134],{},"设置默认值：",[316,165136,165138],{"className":31100,"code":165137,"language":31102,"meta":50,"style":50},"print(student.get(\"address\", \"未知\"))\n",[269,165139,165140],{"__ignoreMap":50},[324,165141,165142,165144,165146,165148,165150,165153],{"class":326,"line":327},[324,165143,31137],{"class":916},[324,165145,165095],{"class":867},[324,165147,165113],{"class":738},[324,165149,13164],{"class":867},[324,165151,165152],{"class":738},"\"未知\"",[324,165154,31219],{"class":867},[19,165156,165157],{},"新增和修改：",[316,165159,165161],{"className":31100,"code":165160,"language":31102,"meta":50,"style":50},"student[\"age\"] = 19\nstudent[\"address\"] = \"北京\"\n",[269,165162,165163,165176],{"__ignoreMap":50},[324,165164,165165,165167,165169,165171,165173],{"class":326,"line":327},[324,165166,153371],{"class":867},[324,165168,69846],{"class":738},[324,165170,5172],{"class":867},[324,165172,913],{"class":863},[324,165174,165175],{"class":916}," 19\n",[324,165177,165178,165180,165182,165184,165186],{"class":326,"line":203},[324,165179,153371],{"class":867},[324,165181,165113],{"class":738},[324,165183,5172],{"class":867},[324,165185,913],{"class":863},[324,165187,165188],{"class":738}," \"北京\"\n",[19,165190,165191],{},"删除：",[316,165193,165195],{"className":31100,"code":165194,"language":31102,"meta":50,"style":50},"score = student.pop(\"score\")\ndel student[\"age\"]\nstudent.clear()\n",[269,165196,165197,165210,165220],{"__ignoreMap":50},[324,165198,165199,165201,165203,165206,165208],{"class":326,"line":327},[324,165200,155870],{"class":867},[324,165202,913],{"class":863},[324,165204,165205],{"class":867}," student.pop(",[324,165207,151984],{"class":738},[324,165209,874],{"class":867},[324,165211,165212,165214,165216,165218],{"class":326,"line":203},[324,165213,163895],{"class":863},[324,165215,152661],{"class":867},[324,165217,69846],{"class":738},[324,165219,33968],{"class":867},[324,165221,165222],{"class":326,"line":338},[324,165223,165224],{"class":867},"student.clear()\n",[14,165226,165228],{"id":165227},"_611-字典遍历","6.11 字典遍历",[19,165230,165231],{},"遍历 key：",[316,165233,165235],{"className":31100,"code":165234,"language":31102,"meta":50,"style":50},"for key in student:\n    print(key, student[key])\n",[269,165236,165237,165249],{"__ignoreMap":50},[324,165238,165239,165241,165244,165246],{"class":326,"line":327},[324,165240,3754],{"class":863},[324,165242,165243],{"class":867}," key ",[324,165245,26767],{"class":863},[324,165247,165248],{"class":867}," student:\n",[324,165250,165251,165253],{"class":326,"line":203},[324,165252,32021],{"class":916},[324,165254,165255],{"class":867},"(key, student[key])\n",[19,165257,165258],{},"遍历 value：",[316,165260,165262],{"className":31100,"code":165261,"language":31102,"meta":50,"style":50},"for value in student.values():\n    print(value)\n",[269,165263,165264,165276],{"__ignoreMap":50},[324,165265,165266,165268,165271,165273],{"class":326,"line":327},[324,165267,3754],{"class":863},[324,165269,165270],{"class":867}," value ",[324,165272,26767],{"class":863},[324,165274,165275],{"class":867}," student.values():\n",[324,165277,165278,165280],{"class":326,"line":203},[324,165279,32021],{"class":916},[324,165281,165282],{"class":867},"(value)\n",[19,165284,165285],{},"遍历 key 和 value：",[316,165287,165289],{"className":31100,"code":165288,"language":31102,"meta":50,"style":50},"for key, value in student.items():\n    print(key, value)\n",[269,165290,165291,165303],{"__ignoreMap":50},[324,165292,165293,165295,165298,165300],{"class":326,"line":327},[324,165294,3754],{"class":863},[324,165296,165297],{"class":867}," key, value ",[324,165299,26767],{"class":863},[324,165301,165302],{"class":867}," student.items():\n",[324,165304,165305,165307],{"class":326,"line":203},[324,165306,32021],{"class":916},[324,165308,165309],{"class":867},"(key, value)\n",[14,165311,165313],{"id":165312},"_612-嵌套容器","6.12 嵌套容器",[19,165315,165316],{},"列表中保存字典，是项目中最常见的结构之一。",[316,165318,165320],{"className":31100,"code":165319,"language":31102,"meta":50,"style":50},"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",[269,165321,165322,165330,165358,165386,165414,165418,165422,165432],{"__ignoreMap":50},[324,165323,165324,165326,165328],{"class":326,"line":327},[324,165325,160228],{"class":867},[324,165327,913],{"class":863},[324,165329,56169],{"class":867},[324,165331,165332,165334,165336,165338,165340,165342,165344,165346,165348,165350,165352,165354,165356],{"class":326,"line":203},[324,165333,148897],{"class":867},[324,165335,63401],{"class":738},[324,165337,52159],{"class":867},[324,165339,150400],{"class":738},[324,165341,13164],{"class":867},[324,165343,69846],{"class":738},[324,165345,52159],{"class":867},[324,165347,1514],{"class":916},[324,165349,13164],{"class":867},[324,165351,151984],{"class":738},[324,165353,52159],{"class":867},[324,165355,1853],{"class":916},[324,165357,5659],{"class":867},[324,165359,165360,165362,165364,165366,165368,165370,165372,165374,165376,165378,165380,165382,165384],{"class":326,"line":338},[324,165361,148897],{"class":867},[324,165363,63401],{"class":738},[324,165365,52159],{"class":867},[324,165367,151448],{"class":738},[324,165369,13164],{"class":867},[324,165371,69846],{"class":738},[324,165373,52159],{"class":867},[324,165375,1489],{"class":916},[324,165377,13164],{"class":867},[324,165379,151984],{"class":738},[324,165381,52159],{"class":867},[324,165383,1675],{"class":916},[324,165385,5659],{"class":867},[324,165387,165388,165390,165392,165394,165396,165398,165400,165402,165404,165406,165408,165410,165412],{"class":326,"line":344},[324,165389,148897],{"class":867},[324,165391,63401],{"class":738},[324,165393,52159],{"class":867},[324,165395,160243],{"class":738},[324,165397,13164],{"class":867},[324,165399,69846],{"class":738},[324,165401,52159],{"class":867},[324,165403,1539],{"class":916},[324,165405,13164],{"class":867},[324,165407,151984],{"class":738},[324,165409,52159],{"class":867},[324,165411,1270],{"class":916},[324,165413,5659],{"class":867},[324,165415,165416],{"class":326,"line":484},[324,165417,33968],{"class":867},[324,165419,165420],{"class":326,"line":491},[324,165421,488],{"emptyLinePlaceholder":487},[324,165423,165424,165426,165428,165430],{"class":326,"line":496},[324,165425,3754],{"class":863},[324,165427,152649],{"class":867},[324,165429,26767],{"class":863},[324,165431,152654],{"class":867},[324,165433,165434,165436,165438,165440,165443,165445],{"class":326,"line":502},[324,165435,32021],{"class":916},[324,165437,165084],{"class":867},[324,165439,63401],{"class":738},[324,165441,165442],{"class":867},"], student[",[324,165444,151984],{"class":738},[324,165446,5386],{"class":867},[19,165448,165449],{},"统计平均分：",[316,165451,165453],{"className":31100,"code":165452,"language":31102,"meta":50,"style":50},"total = 0\n\nfor student in students:\n    total += student[\"score\"]\n\navg = total \u002F len(students)\nprint(f\"平均分:{avg:.2f}\")\n",[269,165454,165455,165463,165467,165477,165489,165493,165508],{"__ignoreMap":50},[324,165456,165457,165459,165461],{"class":326,"line":327},[324,165458,157772],{"class":867},[324,165460,913],{"class":863},[324,165462,48055],{"class":916},[324,165464,165465],{"class":326,"line":203},[324,165466,488],{"emptyLinePlaceholder":487},[324,165468,165469,165471,165473,165475],{"class":326,"line":338},[324,165470,3754],{"class":863},[324,165472,152649],{"class":867},[324,165474,26767],{"class":863},[324,165476,152654],{"class":867},[324,165478,165479,165481,165483,165485,165487],{"class":326,"line":344},[324,165480,159819],{"class":867},[324,165482,10206],{"class":863},[324,165484,152661],{"class":867},[324,165486,151984],{"class":738},[324,165488,33968],{"class":867},[324,165490,165491],{"class":326,"line":484},[324,165492,488],{"emptyLinePlaceholder":487},[324,165494,165495,165497,165499,165501,165503,165505],{"class":326,"line":491},[324,165496,164286],{"class":867},[324,165498,913],{"class":863},[324,165500,164291],{"class":867},[324,165502,1448],{"class":863},[324,165504,8060],{"class":916},[324,165506,165507],{"class":867},"(students)\n",[324,165509,165510,165512,165514,165516,165518,165520,165522,165524,165526,165528],{"class":326,"line":496},[324,165511,31137],{"class":916},[324,165513,868],{"class":867},[324,165515,920],{"class":863},[324,165517,164309],{"class":738},[324,165519,1760],{"class":916},[324,165521,164314],{"class":867},[324,165523,157671],{"class":863},[324,165525,1810],{"class":916},[324,165527,1115],{"class":738},[324,165529,874],{"class":867},[19,165531,165532],{},"查找学生：",[316,165534,165536],{"className":31100,"code":165535,"language":31102,"meta":50,"style":50},"target = input(\"请输入学生姓名:\")\n\nfor student in students:\n    if student[\"name\"] == target:\n        print(student)\n        break\nelse:\n    print(\"没有找到\")\n",[269,165537,165538,165553,165557,165567,165581,165587,165591,165597],{"__ignoreMap":50},[324,165539,165540,165542,165544,165546,165548,165551],{"class":326,"line":327},[324,165541,112299],{"class":867},[324,165543,913],{"class":863},[324,165545,61327],{"class":916},[324,165547,868],{"class":867},[324,165549,165550],{"class":738},"\"请输入学生姓名:\"",[324,165552,874],{"class":867},[324,165554,165555],{"class":326,"line":203},[324,165556,488],{"emptyLinePlaceholder":487},[324,165558,165559,165561,165563,165565],{"class":326,"line":338},[324,165560,3754],{"class":863},[324,165562,152649],{"class":867},[324,165564,26767],{"class":863},[324,165566,152654],{"class":867},[324,165568,165569,165571,165573,165575,165577,165579],{"class":326,"line":344},[324,165570,3830],{"class":863},[324,165572,152661],{"class":867},[324,165574,63401],{"class":738},[324,165576,5172],{"class":867},[324,165578,3678],{"class":863},[324,165580,160944],{"class":867},[324,165582,165583,165585],{"class":326,"line":484},[324,165584,33173],{"class":916},[324,165586,150554],{"class":867},[324,165588,165589],{"class":326,"line":491},[324,165590,32349],{"class":863},[324,165592,165593,165595],{"class":326,"line":496},[324,165594,2432],{"class":863},[324,165596,4468],{"class":867},[324,165598,165599,165601,165603,165606],{"class":326,"line":502},[324,165600,32021],{"class":916},[324,165602,868],{"class":867},[324,165604,165605],{"class":738},"\"没有找到\"",[324,165607,874],{"class":867},[14,165609,165611],{"id":165610},"_613-容器通用操作","6.13 容器通用操作",[19,165613,165614],{},"长度：",[316,165616,165618],{"className":31100,"code":165617,"language":31102,"meta":50,"style":50},"len([1, 2, 3])\nlen(\"abc\")\nlen({\"name\": \"小明\"})\n",[269,165619,165620,165639,165649],{"__ignoreMap":50},[324,165621,165622,165624,165627,165629,165631,165633,165635,165637],{"class":326,"line":327},[324,165623,8087],{"class":916},[324,165625,165626],{"class":867},"([",[324,165628,1082],{"class":916},[324,165630,13164],{"class":867},[324,165632,944],{"class":916},[324,165634,13164],{"class":867},[324,165636,938],{"class":916},[324,165638,5386],{"class":867},[324,165640,165641,165643,165645,165647],{"class":326,"line":203},[324,165642,8087],{"class":916},[324,165644,868],{"class":867},[324,165646,156392],{"class":738},[324,165648,874],{"class":867},[324,165650,165651,165653,165656,165658,165660,165662],{"class":326,"line":338},[324,165652,8087],{"class":916},[324,165654,165655],{"class":867},"({",[324,165657,63401],{"class":738},[324,165659,52159],{"class":867},[324,165661,150400],{"class":738},[324,165663,165664],{"class":867},"})\n",[19,165666,165667],{},"最大最小：",[316,165669,165671],{"className":31100,"code":165670,"language":31102,"meta":50,"style":50},"max([1, 2, 3])\nmin([1, 2, 3])\n",[269,165672,165673,165691],{"__ignoreMap":50},[324,165674,165675,165677,165679,165681,165683,165685,165687,165689],{"class":326,"line":327},[324,165676,6744],{"class":916},[324,165678,165626],{"class":867},[324,165680,1082],{"class":916},[324,165682,13164],{"class":867},[324,165684,944],{"class":916},[324,165686,13164],{"class":867},[324,165688,938],{"class":916},[324,165690,5386],{"class":867},[324,165692,165693,165696,165698,165700,165702,165704,165706,165708],{"class":326,"line":203},[324,165694,165695],{"class":916},"min",[324,165697,165626],{"class":867},[324,165699,1082],{"class":916},[324,165701,13164],{"class":867},[324,165703,944],{"class":916},[324,165705,13164],{"class":867},[324,165707,938],{"class":916},[324,165709,5386],{"class":867},[19,165711,165712],{},"求和：",[316,165714,165716],{"className":31100,"code":165715,"language":31102,"meta":50,"style":50},"sum([1, 2, 3])\n",[269,165717,165718],{"__ignoreMap":50},[324,165719,165720,165723,165725,165727,165729,165731,165733,165735],{"class":326,"line":327},[324,165721,165722],{"class":916},"sum",[324,165724,165626],{"class":867},[324,165726,1082],{"class":916},[324,165728,13164],{"class":867},[324,165730,944],{"class":916},[324,165732,13164],{"class":867},[324,165734,938],{"class":916},[324,165736,5386],{"class":867},[19,165738,163983],{},[316,165740,165742],{"className":31100,"code":165741,"language":31102,"meta":50,"style":50},"sorted([3, 1, 2])\n",[269,165743,165744],{"__ignoreMap":50},[324,165745,165746,165749,165751,165753,165755,165757,165759,165761],{"class":326,"line":327},[324,165747,165748],{"class":916},"sorted",[324,165750,165626],{"class":867},[324,165752,938],{"class":916},[324,165754,13164],{"class":867},[324,165756,1082],{"class":916},[324,165758,13164],{"class":867},[324,165760,944],{"class":916},[324,165762,5386],{"class":867},[19,165764,165765],{},"类型转换：",[316,165767,165769],{"className":31100,"code":165768,"language":31102,"meta":50,"style":50},"list(\"abc\")\ntuple([1, 2, 3])\nset([1, 1, 2, 3])\n",[269,165770,165771,165781,165799],{"__ignoreMap":50},[324,165772,165773,165775,165777,165779],{"class":326,"line":327},[324,165774,154582],{"class":916},[324,165776,868],{"class":867},[324,165778,156392],{"class":738},[324,165780,874],{"class":867},[324,165782,165783,165785,165787,165789,165791,165793,165795,165797],{"class":326,"line":203},[324,165784,155777],{"class":916},[324,165786,165626],{"class":867},[324,165788,1082],{"class":916},[324,165790,13164],{"class":867},[324,165792,944],{"class":916},[324,165794,13164],{"class":867},[324,165796,938],{"class":916},[324,165798,5386],{"class":867},[324,165800,165801,165803,165805,165807,165809,165811,165813,165815,165817,165819],{"class":326,"line":338},[324,165802,155802],{"class":916},[324,165804,165626],{"class":867},[324,165806,1082],{"class":916},[324,165808,13164],{"class":867},[324,165810,1082],{"class":916},[324,165812,13164],{"class":867},[324,165814,944],{"class":916},[324,165816,13164],{"class":867},[324,165818,938],{"class":916},[324,165820,5386],{"class":867},[19,165822,165823],{},"成员判断：",[316,165825,165827],{"className":31100,"code":165826,"language":31102,"meta":50,"style":50},"print(\"a\" in \"abc\")\nprint(1 in [1, 2, 3])\nprint(\"name\" in {\"name\": \"小明\"})\n",[269,165828,165829,165846,165870],{"__ignoreMap":50},[324,165830,165831,165833,165835,165838,165841,165844],{"class":326,"line":327},[324,165832,31137],{"class":916},[324,165834,868],{"class":867},[324,165836,165837],{"class":738},"\"a\"",[324,165839,165840],{"class":863}," in",[324,165842,165843],{"class":738}," \"abc\"",[324,165845,874],{"class":867},[324,165847,165848,165850,165852,165854,165856,165858,165860,165862,165864,165866,165868],{"class":326,"line":203},[324,165849,31137],{"class":916},[324,165851,868],{"class":867},[324,165853,1082],{"class":916},[324,165855,165840],{"class":863},[324,165857,52948],{"class":867},[324,165859,1082],{"class":916},[324,165861,13164],{"class":867},[324,165863,944],{"class":916},[324,165865,13164],{"class":867},[324,165867,938],{"class":916},[324,165869,5386],{"class":867},[324,165871,165872,165874,165876,165878,165880,165882,165884,165886,165888],{"class":326,"line":338},[324,165873,31137],{"class":916},[324,165875,868],{"class":867},[324,165877,63401],{"class":738},[324,165879,165840],{"class":863},[324,165881,5177],{"class":867},[324,165883,63401],{"class":738},[324,165885,52159],{"class":867},[324,165887,150400],{"class":738},[324,165889,165664],{"class":867},[14,165891,165893],{"id":165892},"_614-推导式","6.14 推导式",[19,165895,165896],{},"推导式用于快速生成容器。",[19,165898,165899],{},"列表推导式：",[316,165901,165903],{"className":31100,"code":165902,"language":31102,"meta":50,"style":50},"nums = [i for i in range(1, 6)]\nprint(nums)\n",[269,165904,165905,165932],{"__ignoreMap":50},[324,165906,165907,165909,165911,165914,165916,165918,165920,165922,165924,165926,165928,165930],{"class":326,"line":327},[324,165908,164612],{"class":867},[324,165910,913],{"class":863},[324,165912,165913],{"class":867}," [i ",[324,165915,3754],{"class":863},[324,165917,10167],{"class":867},[324,165919,26767],{"class":863},[324,165921,33165],{"class":916},[324,165923,868],{"class":867},[324,165925,1082],{"class":916},[324,165927,13164],{"class":867},[324,165929,1208],{"class":916},[324,165931,98022],{"class":867},[324,165933,165934,165936],{"class":326,"line":203},[324,165935,31137],{"class":916},[324,165937,164828],{"class":867},[19,165939,165940],{},"带条件：",[316,165942,165944],{"className":31100,"code":165943,"language":31102,"meta":50,"style":50},"even_nums = [i for i in range(1, 101) if i % 2 == 0]\nprint(even_nums)\n",[269,165945,165946,165987],{"__ignoreMap":50},[324,165947,165948,165951,165953,165955,165957,165959,165961,165963,165965,165967,165969,165971,165973,165975,165977,165979,165981,165983,165985],{"class":326,"line":327},[324,165949,165950],{"class":867},"even_nums ",[324,165952,913],{"class":863},[324,165954,165913],{"class":867},[324,165956,3754],{"class":863},[324,165958,10167],{"class":867},[324,165960,26767],{"class":863},[324,165962,33165],{"class":916},[324,165964,868],{"class":867},[324,165966,1082],{"class":916},[324,165968,13164],{"class":867},[324,165970,1201],{"class":916},[324,165972,14443],{"class":867},[324,165974,2262],{"class":863},[324,165976,10167],{"class":867},[324,165978,1192],{"class":863},[324,165980,15484],{"class":916},[324,165982,102280],{"class":863},[324,165984,4822],{"class":916},[324,165986,33968],{"class":867},[324,165988,165989,165991],{"class":326,"line":203},[324,165990,31137],{"class":916},[324,165992,165993],{"class":867},"(even_nums)\n",[19,165995,165996],{},"字典推导式：",[316,165998,166000],{"className":31100,"code":165999,"language":31102,"meta":50,"style":50},"squares = {i: i ** 2 for i in range(1, 6)}\nprint(squares)\n",[269,166001,166002,166036],{"__ignoreMap":50},[324,166003,166004,166007,166009,166012,166014,166016,166019,166021,166023,166025,166027,166029,166031,166033],{"class":326,"line":327},[324,166005,166006],{"class":867},"squares ",[324,166008,913],{"class":863},[324,166010,166011],{"class":867}," {i: i ",[324,166013,11390],{"class":863},[324,166015,15484],{"class":916},[324,166017,166018],{"class":863}," for",[324,166020,10167],{"class":867},[324,166022,26767],{"class":863},[324,166024,33165],{"class":916},[324,166026,868],{"class":867},[324,166028,1082],{"class":916},[324,166030,13164],{"class":867},[324,166032,1208],{"class":916},[324,166034,166035],{"class":867},")}\n",[324,166037,166038,166040],{"class":326,"line":203},[324,166039,31137],{"class":916},[324,166041,166042],{"class":867},"(squares)\n",[19,166044,166045],{},"集合推导式：",[316,166047,166049],{"className":31100,"code":166048,"language":31102,"meta":50,"style":50},"chars = {ch for ch in \"hello\"}\nprint(chars)\n",[269,166050,166051,166072],{"__ignoreMap":50},[324,166052,166053,166056,166058,166061,166063,166065,166067,166070],{"class":326,"line":327},[324,166054,166055],{"class":867},"chars ",[324,166057,913],{"class":863},[324,166059,166060],{"class":867}," {ch ",[324,166062,3754],{"class":863},[324,166064,160204],{"class":867},[324,166066,26767],{"class":863},[324,166068,166069],{"class":738}," \"hello\"",[324,166071,2296],{"class":867},[324,166073,166074,166076],{"class":326,"line":203},[324,166075,31137],{"class":916},[324,166077,166078],{"class":867},"(chars)\n",[19,166080,166081],{},"推导式适合简单逻辑，复杂逻辑还是写普通循环。",[14,166083,166085],{"id":166084},"_615-小案例学生成绩统计","6.15 小案例：学生成绩统计",[316,166087,166089],{"className":31100,"code":166088,"language":31102,"meta":50,"style":50},"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",[269,166090,166091,166099,166119,166139,166159,166179,166183,166187,166195,166209,166218,166222,166232,166244,166248,166268,166277,166281,166297,166302,166306,166320,166324,166346,166382],{"__ignoreMap":50},[324,166092,166093,166095,166097],{"class":326,"line":327},[324,166094,160228],{"class":867},[324,166096,913],{"class":863},[324,166098,56169],{"class":867},[324,166100,166101,166103,166105,166107,166109,166111,166113,166115,166117],{"class":326,"line":203},[324,166102,148897],{"class":867},[324,166104,63401],{"class":738},[324,166106,52159],{"class":867},[324,166108,150400],{"class":738},[324,166110,13164],{"class":867},[324,166112,151984],{"class":738},[324,166114,52159],{"class":867},[324,166116,1853],{"class":916},[324,166118,5659],{"class":867},[324,166120,166121,166123,166125,166127,166129,166131,166133,166135,166137],{"class":326,"line":338},[324,166122,148897],{"class":867},[324,166124,63401],{"class":738},[324,166126,52159],{"class":867},[324,166128,151448],{"class":738},[324,166130,13164],{"class":867},[324,166132,151984],{"class":738},[324,166134,52159],{"class":867},[324,166136,1675],{"class":916},[324,166138,5659],{"class":867},[324,166140,166141,166143,166145,166147,166149,166151,166153,166155,166157],{"class":326,"line":344},[324,166142,148897],{"class":867},[324,166144,63401],{"class":738},[324,166146,52159],{"class":867},[324,166148,160243],{"class":738},[324,166150,13164],{"class":867},[324,166152,151984],{"class":738},[324,166154,52159],{"class":867},[324,166156,1270],{"class":916},[324,166158,5659],{"class":867},[324,166160,166161,166163,166165,166167,166169,166171,166173,166175,166177],{"class":326,"line":484},[324,166162,148897],{"class":867},[324,166164,63401],{"class":738},[324,166166,52159],{"class":867},[324,166168,163822],{"class":738},[324,166170,13164],{"class":867},[324,166172,151984],{"class":738},[324,166174,52159],{"class":867},[324,166176,1746],{"class":916},[324,166178,5659],{"class":867},[324,166180,166181],{"class":326,"line":491},[324,166182,33968],{"class":867},[324,166184,166185],{"class":326,"line":496},[324,166186,488],{"emptyLinePlaceholder":487},[324,166188,166189,166191,166193],{"class":326,"line":502},[324,166190,157772],{"class":867},[324,166192,913],{"class":863},[324,166194,48055],{"class":916},[324,166196,166197,166200,166202,166205,166207],{"class":326,"line":508},[324,166198,166199],{"class":867},"max_student ",[324,166201,913],{"class":863},[324,166203,166204],{"class":867}," students[",[324,166206,1056],{"class":916},[324,166208,33968],{"class":867},[324,166210,166211,166214,166216],{"class":326,"line":514},[324,166212,166213],{"class":867},"passed ",[324,166215,913],{"class":863},[324,166217,52560],{"class":867},[324,166219,166220],{"class":326,"line":2343},[324,166221,488],{"emptyLinePlaceholder":487},[324,166223,166224,166226,166228,166230],{"class":326,"line":2348},[324,166225,3754],{"class":863},[324,166227,152649],{"class":867},[324,166229,26767],{"class":863},[324,166231,152654],{"class":867},[324,166233,166234,166236,166238,166240,166242],{"class":326,"line":2354},[324,166235,159819],{"class":867},[324,166237,10206],{"class":863},[324,166239,152661],{"class":867},[324,166241,151984],{"class":738},[324,166243,33968],{"class":867},[324,166245,166246],{"class":326,"line":2359},[324,166247,488],{"emptyLinePlaceholder":487},[324,166249,166250,166252,166254,166256,166258,166260,166263,166265],{"class":326,"line":2373},[324,166251,3830],{"class":863},[324,166253,152661],{"class":867},[324,166255,151984],{"class":738},[324,166257,5172],{"class":867},[324,166259,1824],{"class":863},[324,166261,166262],{"class":867}," max_student[",[324,166264,151984],{"class":738},[324,166266,166267],{"class":867},"]:\n",[324,166269,166270,166273,166275],{"class":326,"line":2378},[324,166271,166272],{"class":867},"        max_student ",[324,166274,913],{"class":863},[324,166276,152677],{"class":867},[324,166278,166279],{"class":326,"line":2384},[324,166280,488],{"emptyLinePlaceholder":487},[324,166282,166283,166285,166287,166289,166291,166293,166295],{"class":326,"line":2405},[324,166284,3830],{"class":863},[324,166286,152661],{"class":867},[324,166288,151984],{"class":738},[324,166290,5172],{"class":867},[324,166292,2441],{"class":863},[324,166294,158349],{"class":916},[324,166296,4468],{"class":867},[324,166298,166299],{"class":326,"line":2410},[324,166300,166301],{"class":867},"        passed.append(student)\n",[324,166303,166304],{"class":326,"line":2424},[324,166305,488],{"emptyLinePlaceholder":487},[324,166307,166308,166310,166312,166314,166316,166318],{"class":326,"line":2429},[324,166309,164286],{"class":867},[324,166311,913],{"class":863},[324,166313,164291],{"class":867},[324,166315,1448],{"class":863},[324,166317,8060],{"class":916},[324,166319,165507],{"class":867},[324,166321,166322],{"class":326,"line":2458},[324,166323,488],{"emptyLinePlaceholder":487},[324,166325,166326,166328,166330,166332,166334,166336,166338,166340,166342,166344],{"class":326,"line":2463},[324,166327,31137],{"class":916},[324,166329,868],{"class":867},[324,166331,920],{"class":863},[324,166333,164309],{"class":738},[324,166335,1760],{"class":916},[324,166337,164314],{"class":867},[324,166339,157671],{"class":863},[324,166341,1810],{"class":916},[324,166343,1115],{"class":738},[324,166345,874],{"class":867},[324,166347,166348,166350,166352,166354,166357,166359,166362,166364,166366,166368,166370,166372,166374,166376,166378,166380],{"class":326,"line":2480},[324,166349,31137],{"class":916},[324,166351,868],{"class":867},[324,166353,920],{"class":863},[324,166355,166356],{"class":738},"\"最高分学生:",[324,166358,1760],{"class":916},[324,166360,166361],{"class":867},"max_student[",[324,166363,153394],{"class":738},[324,166365,1804],{"class":867},[324,166367,1810],{"class":916},[324,166369,5177],{"class":916},[324,166371,166361],{"class":867},[324,166373,153432],{"class":738},[324,166375,1804],{"class":867},[324,166377,1810],{"class":916},[324,166379,1115],{"class":738},[324,166381,874],{"class":867},[324,166383,166384,166386,166388,166390,166393,166396,166399,166401,166403],{"class":326,"line":2485},[324,166385,31137],{"class":916},[324,166387,868],{"class":867},[324,166389,920],{"class":863},[324,166391,166392],{"class":738},"\"及格人数:",[324,166394,166395],{"class":916},"{len",[324,166397,166398],{"class":867},"(passed)",[324,166400,1810],{"class":916},[324,166402,1115],{"class":738},[324,166404,874],{"class":867},[14,166406,166408],{"id":166407},"_616-易错点","6.16 易错点",[192,166410,166411,166414,166417,166420,166426,166435],{},[195,166412,166413],{},"列表可变，元组和字符串不可变。",[195,166415,166416],{},"切片结束位置不包含。",[195,166418,166419],{},"字典通过 key 取值，不是通过索引。",[195,166421,166422,166423,29107],{},"空集合要用 ",[269,166424,166425],{},"set()",[195,166427,105087,166428,166431,166432,29107],{},[269,166429,166430],{},"student[\"key\"]"," 前要确认 key 存在，或用 ",[269,166433,166434],{},"get()",[195,166436,166437],{},"嵌套容器要先看清楚每一层是什么类型。",[14,166439,166441],{"id":166440},"_617-本章练习","6.17 本章练习",[192,166443,166444,166447,166450,166453,166456],{},[195,166445,166446],{},"定义列表保存 5 个成绩，计算最高分、最低分、平均分。",[195,166448,166449],{},"输入一句话，统计每个字符出现次数。",[195,166451,166452],{},"使用集合去除列表中的重复元素。",[195,166454,166455],{},"使用字典保存一个学生的信息，并实现修改成绩。",[195,166457,166458],{},"使用列表字典结构保存多个学生，实现按姓名查询。",[775,166460,166461],{},"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":50,"searchDepth":203,"depth":203,"links":166463},[166464,166465,166466,166467,166468,166469,166470,166471,166472,166473,166474,166475,166476,166477,166478,166479,166480],{"id":163444,"depth":203,"text":163445},{"id":163561,"depth":203,"text":163562},{"id":163651,"depth":203,"text":163652},{"id":163775,"depth":203,"text":163776},{"id":164138,"depth":203,"text":164139},{"id":164325,"depth":203,"text":164326},{"id":164444,"depth":203,"text":164445},{"id":164586,"depth":203,"text":164587},{"id":164773,"depth":203,"text":164774},{"id":165017,"depth":203,"text":165018},{"id":165227,"depth":203,"text":165228},{"id":165312,"depth":203,"text":165313},{"id":165610,"depth":203,"text":165611},{"id":165892,"depth":203,"text":165893},{"id":166084,"depth":203,"text":166085},{"id":166407,"depth":203,"text":166408},{"id":166440,"depth":203,"text":166441},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch6",{"title":163436,"description":791},"wiki\u002F2024-10-10-python教程\u002Fch6-数据容器","T8eCc8Q5mua2_dsYsMoauSCMOs5j-QG3lppjk0eGwro",{"id":166487,"title":166488,"body":166489,"description":791,"extension":792,"meta":168661,"navigation":487,"path":168662,"seo":168663,"stem":168664,"__hash__":168665},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch7-函数进阶.md","7. 函数进阶",{"type":7,"value":166490,"toc":168636},[166491,166494,166498,166501,166581,166584,166605,166608,166612,166615,166677,166680,166697,166701,166704,166749,166751,166759,166763,166766,166848,166851,166854,166879,166882,166905,166909,166912,166914,166976,166979,166981,167032,167036,167040,167046,167151,167155,167161,167232,167236,167239,167307,167310,167390,167394,167400,167436,167439,167442,167552,167558,167562,167565,167637,167640,167644,167648,167653,167715,167719,167724,167792,167796,167801,167917,167921,167924,168004,168007,168011,168014,168118,168120,168135,168138,168142,168280,168288,168292,168294,168305,168307,168565,168569,168601,168605,168633],[10,166492,166488],{"id":166493},"_7-函数进阶",[14,166495,166497],{"id":166496},"_71-多返回值","7.1 多返回值",[19,166499,166500],{},"Python 函数可以返回多个值，本质上返回的是元组。",[316,166502,166504],{"className":31100,"code":166503,"language":31102,"meta":50,"style":50},"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",[269,166505,166506,166515,166523,166531,166540,166547,166551,166555,166564,166570],{"__ignoreMap":50},[324,166507,166508,166510,166513],{"class":326,"line":327},[324,166509,32669],{"class":863},[324,166511,166512],{"class":734}," get_info",[324,166514,32675],{"class":867},[324,166516,166517,166519,166521],{"class":326,"line":203},[324,166518,152882],{"class":867},[324,166520,913],{"class":863},[324,166522,149865],{"class":738},[324,166524,166525,166527,166529],{"class":326,"line":338},[324,166526,152898],{"class":867},[324,166528,913],{"class":863},[324,166530,147063],{"class":916},[324,166532,166533,166535,166537],{"class":326,"line":344},[324,166534,152913],{"class":867},[324,166536,913],{"class":863},[324,166538,166539],{"class":916}," 95\n",[324,166541,166542,166544],{"class":326,"line":484},[324,166543,4819],{"class":863},[324,166545,166546],{"class":867}," name, age, score\n",[324,166548,166549],{"class":326,"line":491},[324,166550,488],{"emptyLinePlaceholder":487},[324,166552,166553],{"class":326,"line":496},[324,166554,488],{"emptyLinePlaceholder":487},[324,166556,166557,166559,166561],{"class":326,"line":502},[324,166558,161818],{"class":867},[324,166560,913],{"class":863},[324,166562,166563],{"class":867}," get_info()\n",[324,166565,166566,166568],{"class":326,"line":508},[324,166567,31137],{"class":916},[324,166569,77307],{"class":867},[324,166571,166572,166574,166576,166578],{"class":326,"line":514},[324,166573,31137],{"class":916},[324,166575,868],{"class":867},[324,166577,103828],{"class":916},[324,166579,166580],{"class":867},"(result))\n",[19,166582,166583],{},"可以直接解包：",[316,166585,166587],{"className":31100,"code":166586,"language":31102,"meta":50,"style":50},"name, age, score = get_info()\nprint(name, age, score)\n",[269,166588,166589,166598],{"__ignoreMap":50},[324,166590,166591,166594,166596],{"class":326,"line":327},[324,166592,166593],{"class":867},"name, age, score ",[324,166595,913],{"class":863},[324,166597,166563],{"class":867},[324,166599,166600,166602],{"class":326,"line":203},[324,166601,31137],{"class":916},[324,166603,166604],{"class":867},"(name, age, score)\n",[19,166606,166607],{},"返回多个值适合函数需要同时给出多个结果时使用。",[14,166609,166611],{"id":166610},"_72-位置参数","7.2 位置参数",[19,166613,166614],{},"位置参数按顺序传递。",[316,166616,166618],{"className":31100,"code":166617,"language":31102,"meta":50,"style":50},"def introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\n\nintroduce(\"小明\", 18)\n",[269,166619,166620,166628,166656,166660,166664],{"__ignoreMap":50},[324,166621,166622,166624,166626],{"class":326,"line":327},[324,166623,32669],{"class":863},[324,166625,149884],{"class":734},[324,166627,149887],{"class":867},[324,166629,166630,166632,166634,166636,166638,166640,166642,166644,166646,166648,166650,166652,166654],{"class":326,"line":203},[324,166631,32021],{"class":916},[324,166633,868],{"class":867},[324,166635,920],{"class":863},[324,166637,149898],{"class":738},[324,166639,1760],{"class":916},[324,166641,80532],{"class":867},[324,166643,1810],{"class":916},[324,166645,149907],{"class":738},[324,166647,1760],{"class":916},[324,166649,70943],{"class":867},[324,166651,1810],{"class":916},[324,166653,149916],{"class":738},[324,166655,874],{"class":867},[324,166657,166658],{"class":326,"line":338},[324,166659,488],{"emptyLinePlaceholder":487},[324,166661,166662],{"class":326,"line":344},[324,166663,488],{"emptyLinePlaceholder":487},[324,166665,166666,166669,166671,166673,166675],{"class":326,"line":484},[324,166667,166668],{"class":867},"introduce(",[324,166670,150400],{"class":738},[324,166672,13164],{"class":867},[324,166674,1514],{"class":916},[324,166676,874],{"class":867},[19,166678,166679],{},"顺序错了就会得到错误含义：",[316,166681,166683],{"className":31100,"code":166682,"language":31102,"meta":50,"style":50},"introduce(18, \"小明\")\n",[269,166684,166685],{"__ignoreMap":50},[324,166686,166687,166689,166691,166693,166695],{"class":326,"line":327},[324,166688,166668],{"class":867},[324,166690,1514],{"class":916},[324,166692,13164],{"class":867},[324,166694,150400],{"class":738},[324,166696,874],{"class":867},[14,166698,166700],{"id":166699},"_73-关键字参数","7.3 关键字参数",[19,166702,166703],{},"关键字参数按参数名传递。",[316,166705,166707],{"className":31100,"code":166706,"language":31102,"meta":50,"style":50},"introduce(name=\"小明\", age=18)\nintroduce(age=18, name=\"小明\")\n",[269,166708,166709,166729],{"__ignoreMap":50},[324,166710,166711,166713,166715,166717,166719,166721,166723,166725,166727],{"class":326,"line":327},[324,166712,166668],{"class":867},[324,166714,80532],{"class":5945},[324,166716,913],{"class":863},[324,166718,150400],{"class":738},[324,166720,13164],{"class":867},[324,166722,70943],{"class":5945},[324,166724,913],{"class":863},[324,166726,1514],{"class":916},[324,166728,874],{"class":867},[324,166730,166731,166733,166735,166737,166739,166741,166743,166745,166747],{"class":326,"line":203},[324,166732,166668],{"class":867},[324,166734,70943],{"class":5945},[324,166736,913],{"class":863},[324,166738,1514],{"class":916},[324,166740,13164],{"class":867},[324,166742,80532],{"class":5945},[324,166744,913],{"class":863},[324,166746,150400],{"class":738},[324,166748,874],{"class":867},[19,166750,211],{},[192,166752,166753,166756],{},[195,166754,166755],{},"顺序不容易错。",[195,166757,166758],{},"调用时可读性更强。",[14,166760,166762],{"id":166761},"_74-默认参数","7.4 默认参数",[19,166764,166765],{},"默认参数给参数设置默认值。",[316,166767,166769],{"className":31100,"code":166768,"language":31102,"meta":50,"style":50},"def connect(host, port=3306):\n    print(f\"连接{host}:{port}\")\n\n\nconnect(\"localhost\")\nconnect(\"localhost\", 6379)\n",[269,166770,166771,166787,166817,166821,166825,166835],{"__ignoreMap":50},[324,166772,166773,166775,166777,166780,166782,166785],{"class":326,"line":327},[324,166774,32669],{"class":863},[324,166776,122605],{"class":734},[324,166778,166779],{"class":867},"(host, port",[324,166781,913],{"class":863},[324,166783,166784],{"class":916},"3306",[324,166786,31508],{"class":867},[324,166788,166789,166791,166793,166795,166798,166800,166802,166804,166806,166808,166811,166813,166815],{"class":326,"line":203},[324,166790,32021],{"class":916},[324,166792,868],{"class":867},[324,166794,920],{"class":863},[324,166796,166797],{"class":738},"\"连接",[324,166799,1760],{"class":916},[324,166801,28117],{"class":867},[324,166803,1810],{"class":916},[324,166805,1723],{"class":738},[324,166807,1760],{"class":916},[324,166809,166810],{"class":867},"port",[324,166812,1810],{"class":916},[324,166814,1115],{"class":738},[324,166816,874],{"class":867},[324,166818,166819],{"class":326,"line":338},[324,166820,488],{"emptyLinePlaceholder":487},[324,166822,166823],{"class":326,"line":344},[324,166824,488],{"emptyLinePlaceholder":487},[324,166826,166827,166830,166833],{"class":326,"line":484},[324,166828,166829],{"class":867},"connect(",[324,166831,166832],{"class":738},"\"localhost\"",[324,166834,874],{"class":867},[324,166836,166837,166839,166841,166843,166846],{"class":326,"line":491},[324,166838,166829],{"class":867},[324,166840,166832],{"class":738},[324,166842,13164],{"class":867},[324,166844,166845],{"class":916},"6379",[324,166847,874],{"class":867},[19,166849,166850],{},"注意：默认参数必须放在非默认参数后面。",[19,166852,166853],{},"错误：",[316,166855,166857],{"className":31100,"code":166856,"language":31102,"meta":50,"style":50},"def connect(port=3306, host):\n    pass\n",[269,166858,166859,166875],{"__ignoreMap":50},[324,166860,166861,166863,166865,166868,166870,166872],{"class":326,"line":327},[324,166862,32669],{"class":863},[324,166864,122605],{"class":734},[324,166866,166867],{"class":867},"(port",[324,166869,913],{"class":863},[324,166871,166784],{"class":916},[324,166873,166874],{"class":867},", host):\n",[324,166876,166877],{"class":326,"line":203},[324,166878,150049],{"class":863},[19,166880,166881],{},"正确：",[316,166883,166885],{"className":31100,"code":166884,"language":31102,"meta":50,"style":50},"def connect(host, port=3306):\n    pass\n",[269,166886,166887,166901],{"__ignoreMap":50},[324,166888,166889,166891,166893,166895,166897,166899],{"class":326,"line":327},[324,166890,32669],{"class":863},[324,166892,122605],{"class":734},[324,166894,166779],{"class":867},[324,166896,913],{"class":863},[324,166898,166784],{"class":916},[324,166900,31508],{"class":867},[324,166902,166903],{"class":326,"line":203},[324,166904,150049],{"class":863},[14,166906,166908],{"id":166907},"_75-默认参数的坑","7.5 默认参数的坑",[19,166910,166911],{},"不要使用可变对象作为默认参数。",[19,166913,158135],{},[316,166915,166917],{"className":31100,"code":166916,"language":31102,"meta":50,"style":50},"def add_item(item, items=[]):\n    items.append(item)\n    return items\n\n\nprint(add_item(\"a\"))\nprint(add_item(\"b\"))\n",[269,166918,166919,166934,166939,166946,166950,166954,166965],{"__ignoreMap":50},[324,166920,166921,166923,166926,166929,166931],{"class":326,"line":327},[324,166922,32669],{"class":863},[324,166924,166925],{"class":734}," add_item",[324,166927,166928],{"class":867},"(item, items",[324,166930,913],{"class":863},[324,166932,166933],{"class":867},"[]):\n",[324,166935,166936],{"class":326,"line":203},[324,166937,166938],{"class":867},"    items.append(item)\n",[324,166940,166941,166943],{"class":326,"line":338},[324,166942,4819],{"class":863},[324,166944,166945],{"class":867}," items\n",[324,166947,166948],{"class":326,"line":344},[324,166949,488],{"emptyLinePlaceholder":487},[324,166951,166952],{"class":326,"line":484},[324,166953,488],{"emptyLinePlaceholder":487},[324,166955,166956,166958,166961,166963],{"class":326,"line":491},[324,166957,31137],{"class":916},[324,166959,166960],{"class":867},"(add_item(",[324,166962,165837],{"class":738},[324,166964,31219],{"class":867},[324,166966,166967,166969,166971,166974],{"class":326,"line":496},[324,166968,31137],{"class":916},[324,166970,166960],{"class":867},[324,166972,166973],{"class":738},"\"b\"",[324,166975,31219],{"class":867},[19,166977,166978],{},"第二次调用会复用第一次的列表。",[19,166980,156400],{},[316,166982,166984],{"className":31100,"code":166983,"language":31102,"meta":50,"style":50},"def add_item(item, items=None):\n    if items is None:\n        items = []\n    items.append(item)\n    return items\n",[269,166985,166986,167000,167013,167022,167026],{"__ignoreMap":50},[324,166987,166988,166990,166992,166994,166996,166998],{"class":326,"line":327},[324,166989,32669],{"class":863},[324,166991,166925],{"class":734},[324,166993,166928],{"class":867},[324,166995,913],{"class":863},[324,166997,96408],{"class":916},[324,166999,31508],{"class":867},[324,167001,167002,167004,167007,167009,167011],{"class":326,"line":203},[324,167003,3830],{"class":863},[324,167005,167006],{"class":867}," items ",[324,167008,39649],{"class":863},[324,167010,39655],{"class":916},[324,167012,4468],{"class":867},[324,167014,167015,167018,167020],{"class":326,"line":338},[324,167016,167017],{"class":867},"        items ",[324,167019,913],{"class":863},[324,167021,52560],{"class":867},[324,167023,167024],{"class":326,"line":344},[324,167025,166938],{"class":867},[324,167027,167028,167030],{"class":326,"line":484},[324,167029,4819],{"class":863},[324,167031,166945],{"class":867},[14,167033,167035],{"id":167034},"_76-不定长参数","7.6 不定长参数",[35,167037,167039],{"id":167038},"_761-args","7.6.1 *args",[19,167041,167042,167045],{},[269,167043,167044],{},"*args"," 接收任意数量的位置参数，得到元组。",[316,167047,167049],{"className":31100,"code":167048,"language":31102,"meta":50,"style":50},"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",[269,167050,167051,167064,167072,167083,167092,167098,167102,167106,167125],{"__ignoreMap":50},[324,167052,167053,167055,167057,167059,167061],{"class":326,"line":327},[324,167054,32669],{"class":863},[324,167056,5938],{"class":734},[324,167058,868],{"class":867},[324,167060,1319],{"class":863},[324,167062,167063],{"class":867},"args):\n",[324,167065,167066,167068,167070],{"class":326,"line":203},[324,167067,159819],{"class":867},[324,167069,913],{"class":863},[324,167071,48055],{"class":916},[324,167073,167074,167076,167078,167080],{"class":326,"line":338},[324,167075,3930],{"class":863},[324,167077,156692],{"class":867},[324,167079,26767],{"class":863},[324,167081,167082],{"class":867}," args:\n",[324,167084,167085,167087,167089],{"class":326,"line":344},[324,167086,160494],{"class":867},[324,167088,10206],{"class":863},[324,167090,167091],{"class":867}," num\n",[324,167093,167094,167096],{"class":326,"line":484},[324,167095,4819],{"class":863},[324,167097,162799],{"class":867},[324,167099,167100],{"class":326,"line":491},[324,167101,488],{"emptyLinePlaceholder":487},[324,167103,167104],{"class":326,"line":496},[324,167105,488],{"emptyLinePlaceholder":487},[324,167107,167108,167110,167113,167115,167117,167119,167121,167123],{"class":326,"line":502},[324,167109,31137],{"class":916},[324,167111,167112],{"class":867},"(add(",[324,167114,1082],{"class":916},[324,167116,13164],{"class":867},[324,167118,944],{"class":916},[324,167120,13164],{"class":867},[324,167122,938],{"class":916},[324,167124,31219],{"class":867},[324,167126,167127,167129,167131,167133,167135,167137,167139,167141,167143,167145,167147,167149],{"class":326,"line":508},[324,167128,31137],{"class":916},[324,167130,167112],{"class":867},[324,167132,1082],{"class":916},[324,167134,13164],{"class":867},[324,167136,944],{"class":916},[324,167138,13164],{"class":867},[324,167140,938],{"class":916},[324,167142,13164],{"class":867},[324,167144,1157],{"class":916},[324,167146,13164],{"class":867},[324,167148,1183],{"class":916},[324,167150,31219],{"class":867},[35,167152,167154],{"id":167153},"_762-kwargs","7.6.2 **kwargs",[19,167156,167157,167160],{},[269,167158,167159],{},"**kwargs"," 接收任意数量的关键字参数，得到字典。",[316,167162,167164],{"className":31100,"code":167163,"language":31102,"meta":50,"style":50},"def print_info(**kwargs):\n    for key, value in kwargs.items():\n        print(key, value)\n\n\nprint_info(name=\"小明\", age=18, city=\"北京\")\n",[269,167165,167166,167179,167190,167196,167200,167204],{"__ignoreMap":50},[324,167167,167168,167170,167172,167174,167176],{"class":326,"line":327},[324,167169,32669],{"class":863},[324,167171,162457],{"class":734},[324,167173,868],{"class":867},[324,167175,11390],{"class":863},[324,167177,167178],{"class":867},"kwargs):\n",[324,167180,167181,167183,167185,167187],{"class":326,"line":203},[324,167182,3930],{"class":863},[324,167184,165297],{"class":867},[324,167186,26767],{"class":863},[324,167188,167189],{"class":867}," kwargs.items():\n",[324,167191,167192,167194],{"class":326,"line":338},[324,167193,33173],{"class":916},[324,167195,165309],{"class":867},[324,167197,167198],{"class":326,"line":344},[324,167199,488],{"emptyLinePlaceholder":487},[324,167201,167202],{"class":326,"line":484},[324,167203,488],{"emptyLinePlaceholder":487},[324,167205,167206,167208,167210,167212,167214,167216,167218,167220,167222,167224,167226,167228,167230],{"class":326,"line":491},[324,167207,162522],{"class":867},[324,167209,80532],{"class":5945},[324,167211,913],{"class":863},[324,167213,150400],{"class":738},[324,167215,13164],{"class":867},[324,167217,70943],{"class":5945},[324,167219,913],{"class":863},[324,167221,1514],{"class":916},[324,167223,13164],{"class":867},[324,167225,70994],{"class":5945},[324,167227,913],{"class":863},[324,167229,69991],{"class":738},[324,167231,874],{"class":867},[14,167233,167235],{"id":167234},"_77-参数解包","7.7 参数解包",[19,167237,167238],{},"列表或元组解包为位置参数：",[316,167240,167242],{"className":31100,"code":167241,"language":31102,"meta":50,"style":50},"def add(a, b, c):\n    return a + b + c\n\n\nnums = [1, 2, 3]\nprint(add(*nums))\n",[269,167243,167244,167253,167268,167272,167276,167296],{"__ignoreMap":50},[324,167245,167246,167248,167250],{"class":326,"line":327},[324,167247,32669],{"class":863},[324,167249,5938],{"class":734},[324,167251,167252],{"class":867},"(a, b, c):\n",[324,167254,167255,167257,167259,167261,167263,167265],{"class":326,"line":203},[324,167256,4819],{"class":863},[324,167258,11598],{"class":867},[324,167260,1345],{"class":863},[324,167262,11611],{"class":867},[324,167264,1345],{"class":863},[324,167266,167267],{"class":867}," c\n",[324,167269,167270],{"class":326,"line":338},[324,167271,488],{"emptyLinePlaceholder":487},[324,167273,167274],{"class":326,"line":344},[324,167275,488],{"emptyLinePlaceholder":487},[324,167277,167278,167280,167282,167284,167286,167288,167290,167292,167294],{"class":326,"line":484},[324,167279,164612],{"class":867},[324,167281,913],{"class":863},[324,167283,52948],{"class":867},[324,167285,1082],{"class":916},[324,167287,13164],{"class":867},[324,167289,944],{"class":916},[324,167291,13164],{"class":867},[324,167293,938],{"class":916},[324,167295,33968],{"class":867},[324,167297,167298,167300,167302,167304],{"class":326,"line":491},[324,167299,31137],{"class":916},[324,167301,167112],{"class":867},[324,167303,1319],{"class":863},[324,167305,167306],{"class":867},"nums))\n",[19,167308,167309],{},"字典解包为关键字参数：",[316,167311,167313],{"className":31100,"code":167312,"language":31102,"meta":50,"style":50},"def introduce(name, age):\n    print(f\"{name} {age}\")\n\n\ninfo = {\"name\": \"小明\", \"age\": 18}\nintroduce(**info)\n",[269,167314,167315,167323,167349,167353,167357,167381],{"__ignoreMap":50},[324,167316,167317,167319,167321],{"class":326,"line":327},[324,167318,32669],{"class":863},[324,167320,149884],{"class":734},[324,167322,149887],{"class":867},[324,167324,167325,167327,167329,167331,167333,167335,167337,167339,167341,167343,167345,167347],{"class":326,"line":203},[324,167326,32021],{"class":916},[324,167328,868],{"class":867},[324,167330,920],{"class":863},[324,167332,1115],{"class":738},[324,167334,1760],{"class":916},[324,167336,80532],{"class":867},[324,167338,1810],{"class":916},[324,167340,5177],{"class":916},[324,167342,70943],{"class":867},[324,167344,1810],{"class":916},[324,167346,1115],{"class":738},[324,167348,874],{"class":867},[324,167350,167351],{"class":326,"line":338},[324,167352,488],{"emptyLinePlaceholder":487},[324,167354,167355],{"class":326,"line":344},[324,167356,488],{"emptyLinePlaceholder":487},[324,167358,167359,167361,167363,167365,167367,167369,167371,167373,167375,167377,167379],{"class":326,"line":484},[324,167360,117035],{"class":867},[324,167362,913],{"class":863},[324,167364,5177],{"class":867},[324,167366,63401],{"class":738},[324,167368,52159],{"class":867},[324,167370,150400],{"class":738},[324,167372,13164],{"class":867},[324,167374,69846],{"class":738},[324,167376,52159],{"class":867},[324,167378,1514],{"class":916},[324,167380,2296],{"class":867},[324,167382,167383,167385,167387],{"class":326,"line":491},[324,167384,166668],{"class":867},[324,167386,11390],{"class":863},[324,167388,167389],{"class":867},"info)\n",[14,167391,167393],{"id":167392},"_78-匿名函数lambda","7.8 匿名函数lambda",[19,167395,167396,167399],{},[269,167397,167398],{},"lambda"," 用于定义简单匿名函数。",[316,167401,167403],{"className":31100,"code":167402,"language":31102,"meta":50,"style":50},"add = lambda a, b: a + b\nprint(add(1, 2))\n",[269,167404,167405,167422],{"__ignoreMap":50},[324,167406,167407,167410,167412,167415,167418,167420],{"class":326,"line":327},[324,167408,167409],{"class":867},"add ",[324,167411,913],{"class":863},[324,167413,167414],{"class":863}," lambda",[324,167416,167417],{"class":867}," a, b: a ",[324,167419,1345],{"class":863},[324,167421,151616],{"class":867},[324,167423,167424,167426,167428,167430,167432,167434],{"class":326,"line":203},[324,167425,31137],{"class":916},[324,167427,167112],{"class":867},[324,167429,1082],{"class":916},[324,167431,13164],{"class":867},[324,167433,944],{"class":916},[324,167435,31219],{"class":867},[19,167437,167438],{},"常和排序、过滤等函数一起使用。",[19,167440,167441],{},"按分数排序：",[316,167443,167445],{"className":31100,"code":167444,"language":31102,"meta":50,"style":50},"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",[269,167446,167447,167455,167475,167495,167515,167519,167523,167546],{"__ignoreMap":50},[324,167448,167449,167451,167453],{"class":326,"line":327},[324,167450,160228],{"class":867},[324,167452,913],{"class":863},[324,167454,56169],{"class":867},[324,167456,167457,167459,167461,167463,167465,167467,167469,167471,167473],{"class":326,"line":203},[324,167458,148897],{"class":867},[324,167460,63401],{"class":738},[324,167462,52159],{"class":867},[324,167464,150400],{"class":738},[324,167466,13164],{"class":867},[324,167468,151984],{"class":738},[324,167470,52159],{"class":867},[324,167472,1853],{"class":916},[324,167474,5659],{"class":867},[324,167476,167477,167479,167481,167483,167485,167487,167489,167491,167493],{"class":326,"line":338},[324,167478,148897],{"class":867},[324,167480,63401],{"class":738},[324,167482,52159],{"class":867},[324,167484,151448],{"class":738},[324,167486,13164],{"class":867},[324,167488,151984],{"class":738},[324,167490,52159],{"class":867},[324,167492,1675],{"class":916},[324,167494,5659],{"class":867},[324,167496,167497,167499,167501,167503,167505,167507,167509,167511,167513],{"class":326,"line":344},[324,167498,148897],{"class":867},[324,167500,63401],{"class":738},[324,167502,52159],{"class":867},[324,167504,160243],{"class":738},[324,167506,13164],{"class":867},[324,167508,151984],{"class":738},[324,167510,52159],{"class":867},[324,167512,1270],{"class":916},[324,167514,5659],{"class":867},[324,167516,167517],{"class":326,"line":484},[324,167518,33968],{"class":867},[324,167520,167521],{"class":326,"line":491},[324,167522,488],{"emptyLinePlaceholder":487},[324,167524,167525,167528,167530,167532,167534,167536,167538,167540,167542,167544],{"class":326,"line":496},[324,167526,167527],{"class":867},"students.sort(",[324,167529,154458],{"class":5945},[324,167531,154461],{"class":863},[324,167533,154464],{"class":867},[324,167535,151984],{"class":738},[324,167537,112923],{"class":867},[324,167539,164040],{"class":5945},[324,167541,913],{"class":863},[324,167543,32198],{"class":916},[324,167545,874],{"class":867},[324,167547,167548,167550],{"class":326,"line":502},[324,167549,31137],{"class":916},[324,167551,165507],{"class":867},[19,167553,167554,167555,167557],{},"如果逻辑复杂，不要硬写 ",[269,167556,167398],{},"，定义普通函数更清晰。",[14,167559,167561],{"id":167560},"_79-函数作为参数","7.9 函数作为参数",[19,167563,167564],{},"函数可以作为参数传给另一个函数。",[316,167566,167568],{"className":31100,"code":167567,"language":31102,"meta":50,"style":50},"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",[269,167569,167570,167578,167588,167592,167596,167606,167613,167617,167621],{"__ignoreMap":50},[324,167571,167572,167574,167576],{"class":326,"line":327},[324,167573,32669],{"class":863},[324,167575,5938],{"class":734},[324,167577,151605],{"class":867},[324,167579,167580,167582,167584,167586],{"class":326,"line":203},[324,167581,4819],{"class":863},[324,167583,11598],{"class":867},[324,167585,1345],{"class":863},[324,167587,151616],{"class":867},[324,167589,167590],{"class":326,"line":338},[324,167591,488],{"emptyLinePlaceholder":487},[324,167593,167594],{"class":326,"line":344},[324,167595,488],{"emptyLinePlaceholder":487},[324,167597,167598,167600,167603],{"class":326,"line":484},[324,167599,32669],{"class":863},[324,167601,167602],{"class":734}," calculate",[324,167604,167605],{"class":867},"(a, b, func):\n",[324,167607,167608,167610],{"class":326,"line":491},[324,167609,4819],{"class":863},[324,167611,167612],{"class":867}," func(a, b)\n",[324,167614,167615],{"class":326,"line":496},[324,167616,488],{"emptyLinePlaceholder":487},[324,167618,167619],{"class":326,"line":502},[324,167620,488],{"emptyLinePlaceholder":487},[324,167622,167623,167625,167628,167630,167632,167634],{"class":326,"line":508},[324,167624,31137],{"class":916},[324,167626,167627],{"class":867},"(calculate(",[324,167629,1310],{"class":916},[324,167631,13164],{"class":867},[324,167633,1564],{"class":916},[324,167635,167636],{"class":867},", add))\n",[19,167638,167639],{},"这种思想在排序、回调、框架中经常出现。",[14,167641,167643],{"id":167642},"_710-mapfiltersorted","7.10 map、filter、sorted",[35,167645,167647],{"id":167646},"_7101-map","7.10.1 map",[19,167649,167650,167652],{},[269,167651,74766],{}," 对每个元素执行函数。",[316,167654,167656],{"className":31100,"code":167655,"language":31102,"meta":50,"style":50},"nums = [1, 2, 3, 4]\nresult = map(lambda x: x * 2, nums)\nprint(list(result))\n",[269,167657,167658,167682,167705],{"__ignoreMap":50},[324,167659,167660,167662,167664,167666,167668,167670,167672,167674,167676,167678,167680],{"class":326,"line":327},[324,167661,164612],{"class":867},[324,167663,913],{"class":863},[324,167665,52948],{"class":867},[324,167667,1082],{"class":916},[324,167669,13164],{"class":867},[324,167671,944],{"class":916},[324,167673,13164],{"class":867},[324,167675,938],{"class":916},[324,167677,13164],{"class":867},[324,167679,1157],{"class":916},[324,167681,33968],{"class":867},[324,167683,167684,167686,167688,167691,167693,167695,167698,167700,167702],{"class":326,"line":203},[324,167685,161818],{"class":867},[324,167687,913],{"class":863},[324,167689,167690],{"class":916}," map",[324,167692,868],{"class":867},[324,167694,167398],{"class":863},[324,167696,167697],{"class":867}," x: x ",[324,167699,1319],{"class":863},[324,167701,15484],{"class":916},[324,167703,167704],{"class":867},", nums)\n",[324,167706,167707,167709,167711,167713],{"class":326,"line":338},[324,167708,31137],{"class":916},[324,167710,868],{"class":867},[324,167712,154582],{"class":916},[324,167714,166580],{"class":867},[35,167716,167718],{"id":167717},"_7102-filter","7.10.2 filter",[19,167720,167721,167723],{},[269,167722,80773],{}," 保留满足条件的元素。",[316,167725,167727],{"className":31100,"code":167726,"language":31102,"meta":50,"style":50},"nums = [1, 2, 3, 4, 5]\nresult = filter(lambda x: x % 2 == 0, nums)\nprint(list(result))\n",[269,167728,167729,167757,167782],{"__ignoreMap":50},[324,167730,167731,167733,167735,167737,167739,167741,167743,167745,167747,167749,167751,167753,167755],{"class":326,"line":327},[324,167732,164612],{"class":867},[324,167734,913],{"class":863},[324,167736,52948],{"class":867},[324,167738,1082],{"class":916},[324,167740,13164],{"class":867},[324,167742,944],{"class":916},[324,167744,13164],{"class":867},[324,167746,938],{"class":916},[324,167748,13164],{"class":867},[324,167750,1157],{"class":916},[324,167752,13164],{"class":867},[324,167754,1183],{"class":916},[324,167756,33968],{"class":867},[324,167758,167759,167761,167763,167766,167768,167770,167772,167774,167776,167778,167780],{"class":326,"line":203},[324,167760,161818],{"class":867},[324,167762,913],{"class":863},[324,167764,167765],{"class":916}," filter",[324,167767,868],{"class":867},[324,167769,167398],{"class":863},[324,167771,167697],{"class":867},[324,167773,1192],{"class":863},[324,167775,15484],{"class":916},[324,167777,102280],{"class":863},[324,167779,4822],{"class":916},[324,167781,167704],{"class":867},[324,167783,167784,167786,167788,167790],{"class":326,"line":338},[324,167785,31137],{"class":916},[324,167787,868],{"class":867},[324,167789,154582],{"class":916},[324,167791,166580],{"class":867},[35,167793,167795],{"id":167794},"_7103-sorted","7.10.3 sorted",[19,167797,167798,167800],{},[269,167799,165748],{}," 返回排序后的新列表。",[316,167802,167804],{"className":31100,"code":167803,"language":31102,"meta":50,"style":50},"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",[269,167805,167806,167814,167834,167854,167874,167878,167882,167911],{"__ignoreMap":50},[324,167807,167808,167810,167812],{"class":326,"line":327},[324,167809,160228],{"class":867},[324,167811,913],{"class":863},[324,167813,56169],{"class":867},[324,167815,167816,167818,167820,167822,167824,167826,167828,167830,167832],{"class":326,"line":203},[324,167817,148897],{"class":867},[324,167819,63401],{"class":738},[324,167821,52159],{"class":867},[324,167823,150400],{"class":738},[324,167825,13164],{"class":867},[324,167827,151984],{"class":738},[324,167829,52159],{"class":867},[324,167831,1853],{"class":916},[324,167833,5659],{"class":867},[324,167835,167836,167838,167840,167842,167844,167846,167848,167850,167852],{"class":326,"line":338},[324,167837,148897],{"class":867},[324,167839,63401],{"class":738},[324,167841,52159],{"class":867},[324,167843,151448],{"class":738},[324,167845,13164],{"class":867},[324,167847,151984],{"class":738},[324,167849,52159],{"class":867},[324,167851,1675],{"class":916},[324,167853,5659],{"class":867},[324,167855,167856,167858,167860,167862,167864,167866,167868,167870,167872],{"class":326,"line":344},[324,167857,148897],{"class":867},[324,167859,63401],{"class":738},[324,167861,52159],{"class":867},[324,167863,160243],{"class":738},[324,167865,13164],{"class":867},[324,167867,151984],{"class":738},[324,167869,52159],{"class":867},[324,167871,1270],{"class":916},[324,167873,5659],{"class":867},[324,167875,167876],{"class":326,"line":484},[324,167877,33968],{"class":867},[324,167879,167880],{"class":326,"line":491},[324,167881,488],{"emptyLinePlaceholder":487},[324,167883,167884,167886,167888,167890,167893,167895,167897,167899,167901,167903,167905,167907,167909],{"class":326,"line":496},[324,167885,161818],{"class":867},[324,167887,913],{"class":863},[324,167889,164116],{"class":916},[324,167891,167892],{"class":867},"(students, ",[324,167894,154458],{"class":5945},[324,167896,154461],{"class":863},[324,167898,154464],{"class":867},[324,167900,151984],{"class":738},[324,167902,112923],{"class":867},[324,167904,164040],{"class":5945},[324,167906,913],{"class":863},[324,167908,32198],{"class":916},[324,167910,874],{"class":867},[324,167912,167913,167915],{"class":326,"line":502},[324,167914,31137],{"class":916},[324,167916,77307],{"class":867},[14,167918,167920],{"id":167919},"_711-闭包入门","7.11 闭包入门",[19,167922,167923],{},"闭包指内部函数使用了外部函数的变量，并且外部函数返回内部函数。",[316,167925,167927],{"className":31100,"code":167926,"language":31102,"meta":50,"style":50},"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",[269,167928,167929,167939,167949,167960,167964,167971,167975,167979,167993],{"__ignoreMap":50},[324,167930,167931,167933,167936],{"class":326,"line":327},[324,167932,32669],{"class":863},[324,167934,167935],{"class":734}," outer",[324,167937,167938],{"class":867},"(base):\n",[324,167940,167941,167943,167946],{"class":326,"line":203},[324,167942,31523],{"class":863},[324,167944,167945],{"class":734}," inner",[324,167947,167948],{"class":867},"(num):\n",[324,167950,167951,167953,167956,167958],{"class":326,"line":338},[324,167952,15481],{"class":863},[324,167954,167955],{"class":867}," base ",[324,167957,1345],{"class":863},[324,167959,167091],{"class":867},[324,167961,167962],{"class":326,"line":344},[324,167963,488],{"emptyLinePlaceholder":487},[324,167965,167966,167968],{"class":326,"line":484},[324,167967,4819],{"class":863},[324,167969,167970],{"class":867}," inner\n",[324,167972,167973],{"class":326,"line":491},[324,167974,488],{"emptyLinePlaceholder":487},[324,167976,167977],{"class":326,"line":496},[324,167978,488],{"emptyLinePlaceholder":487},[324,167980,167981,167984,167986,167989,167991],{"class":326,"line":502},[324,167982,167983],{"class":867},"add_10 ",[324,167985,913],{"class":863},[324,167987,167988],{"class":867}," outer(",[324,167990,1310],{"class":916},[324,167992,874],{"class":867},[324,167994,167995,167997,168000,168002],{"class":326,"line":508},[324,167996,31137],{"class":916},[324,167998,167999],{"class":867},"(add_10(",[324,168001,1183],{"class":916},[324,168003,31219],{"class":867},[19,168005,168006],{},"闭包常用于保存状态、构造函数工厂。入门阶段了解即可。",[14,168008,168010],{"id":168009},"_712-装饰器入门","7.12 装饰器入门",[19,168012,168013],{},"装饰器用于在不修改原函数代码的情况下，给函数增加功能。",[316,168015,168017],{"className":31100,"code":168016,"language":31102,"meta":50,"style":50},"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",[269,168018,168019,168028,168037,168048,168053,168064,168068,168075,168079,168083,168088,168096,168106,168110,168114],{"__ignoreMap":50},[324,168020,168021,168023,168025],{"class":326,"line":327},[324,168022,32669],{"class":863},[324,168024,87913],{"class":734},[324,168026,168027],{"class":867},"(func):\n",[324,168029,168030,168032,168035],{"class":326,"line":203},[324,168031,31523],{"class":863},[324,168033,168034],{"class":734}," wrapper",[324,168036,32675],{"class":867},[324,168038,168039,168041,168043,168046],{"class":326,"line":338},[324,168040,33173],{"class":916},[324,168042,868],{"class":867},[324,168044,168045],{"class":738},"\"函数开始执行\"",[324,168047,874],{"class":867},[324,168049,168050],{"class":326,"line":344},[324,168051,168052],{"class":867},"        func()\n",[324,168054,168055,168057,168059,168062],{"class":326,"line":484},[324,168056,33173],{"class":916},[324,168058,868],{"class":867},[324,168060,168061],{"class":738},"\"函数执行结束\"",[324,168063,874],{"class":867},[324,168065,168066],{"class":326,"line":491},[324,168067,488],{"emptyLinePlaceholder":487},[324,168069,168070,168072],{"class":326,"line":496},[324,168071,4819],{"class":863},[324,168073,168074],{"class":867}," wrapper\n",[324,168076,168077],{"class":326,"line":502},[324,168078,488],{"emptyLinePlaceholder":487},[324,168080,168081],{"class":326,"line":508},[324,168082,488],{"emptyLinePlaceholder":487},[324,168084,168085],{"class":326,"line":514},[324,168086,168087],{"class":734},"@log\n",[324,168089,168090,168092,168094],{"class":326,"line":2343},[324,168091,32669],{"class":863},[324,168093,161508],{"class":734},[324,168095,32675],{"class":867},[324,168097,168098,168100,168102,168104],{"class":326,"line":2348},[324,168099,32021],{"class":916},[324,168101,868],{"class":867},[324,168103,6573],{"class":738},[324,168105,874],{"class":867},[324,168107,168108],{"class":326,"line":2354},[324,168109,488],{"emptyLinePlaceholder":487},[324,168111,168112],{"class":326,"line":2359},[324,168113,488],{"emptyLinePlaceholder":487},[324,168115,168116],{"class":326,"line":2373},[324,168117,161543],{"class":867},[19,168119,158786],{},[316,168121,168123],{"className":31100,"code":168122,"language":31102,"meta":50,"style":50},"say_hello = log(say_hello)\n",[269,168124,168125],{"__ignoreMap":50},[324,168126,168127,168130,168132],{"class":326,"line":327},[324,168128,168129],{"class":867},"say_hello ",[324,168131,913],{"class":863},[324,168133,168134],{"class":867}," log(say_hello)\n",[19,168136,168137],{},"装饰器在 Web 框架、权限校验、日志统计中很常见。",[14,168139,168141],{"id":168140},"_713-带参数函数的装饰器","7.13 带参数函数的装饰器",[316,168143,168145],{"className":31100,"code":168144,"language":31102,"meta":50,"style":50},"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",[269,168146,168147,168155,168172,168182,168201,168211,168218,168222,168228,168232,168236,168240,168248,168258,168262,168266],{"__ignoreMap":50},[324,168148,168149,168151,168153],{"class":326,"line":327},[324,168150,32669],{"class":863},[324,168152,87913],{"class":734},[324,168154,168027],{"class":867},[324,168156,168157,168159,168161,168163,168165,168168,168170],{"class":326,"line":203},[324,168158,31523],{"class":863},[324,168160,168034],{"class":734},[324,168162,868],{"class":867},[324,168164,1319],{"class":863},[324,168166,168167],{"class":867},"args, ",[324,168169,11390],{"class":863},[324,168171,167178],{"class":867},[324,168173,168174,168176,168178,168180],{"class":326,"line":338},[324,168175,33173],{"class":916},[324,168177,868],{"class":867},[324,168179,168045],{"class":738},[324,168181,874],{"class":867},[324,168183,168184,168187,168189,168192,168194,168196,168198],{"class":326,"line":344},[324,168185,168186],{"class":867},"        result ",[324,168188,913],{"class":863},[324,168190,168191],{"class":867}," func(",[324,168193,1319],{"class":863},[324,168195,168167],{"class":867},[324,168197,11390],{"class":863},[324,168199,168200],{"class":867},"kwargs)\n",[324,168202,168203,168205,168207,168209],{"class":326,"line":484},[324,168204,33173],{"class":916},[324,168206,868],{"class":867},[324,168208,168061],{"class":738},[324,168210,874],{"class":867},[324,168212,168213,168215],{"class":326,"line":491},[324,168214,15481],{"class":863},[324,168216,168217],{"class":867}," result\n",[324,168219,168220],{"class":326,"line":496},[324,168221,488],{"emptyLinePlaceholder":487},[324,168223,168224,168226],{"class":326,"line":502},[324,168225,4819],{"class":863},[324,168227,168074],{"class":867},[324,168229,168230],{"class":326,"line":508},[324,168231,488],{"emptyLinePlaceholder":487},[324,168233,168234],{"class":326,"line":514},[324,168235,488],{"emptyLinePlaceholder":487},[324,168237,168238],{"class":326,"line":2343},[324,168239,168087],{"class":734},[324,168241,168242,168244,168246],{"class":326,"line":2348},[324,168243,32669],{"class":863},[324,168245,5938],{"class":734},[324,168247,151605],{"class":867},[324,168249,168250,168252,168254,168256],{"class":326,"line":2354},[324,168251,4819],{"class":863},[324,168253,11598],{"class":867},[324,168255,1345],{"class":863},[324,168257,151616],{"class":867},[324,168259,168260],{"class":326,"line":2359},[324,168261,488],{"emptyLinePlaceholder":487},[324,168263,168264],{"class":326,"line":2373},[324,168265,488],{"emptyLinePlaceholder":487},[324,168267,168268,168270,168272,168274,168276,168278],{"class":326,"line":2378},[324,168269,31137],{"class":916},[324,168271,167112],{"class":867},[324,168273,1310],{"class":916},[324,168275,13164],{"class":867},[324,168277,1564],{"class":916},[324,168279,31219],{"class":867},[19,168281,168282,168283,300,168285,168287],{},"这个写法使用 ",[269,168284,167044],{},[269,168286,167159],{}," 接收原函数的所有参数。",[14,168289,168291],{"id":168290},"_714-小案例通用统计函数","7.14 小案例：通用统计函数",[19,168293,123804],{},[192,168295,168296,168299,168302],{},[195,168297,168298],{},"给定一组学生数据。",[195,168300,168301],{},"封装函数，根据传入规则筛选学生。",[195,168303,168304],{},"筛选及格、优秀、未成年学生。",[19,168306,10764],{},[316,168308,168310],{"className":31100,"code":168309,"language":31102,"meta":50,"style":50},"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",[269,168311,168312,168320,168348,168376,168404,168408,168412,168416,168426,168434,168444,168451,168456,168462,168466,168470,168494,168517,168540,168544,168551,168558],{"__ignoreMap":50},[324,168313,168314,168316,168318],{"class":326,"line":327},[324,168315,160228],{"class":867},[324,168317,913],{"class":863},[324,168319,56169],{"class":867},[324,168321,168322,168324,168326,168328,168330,168332,168334,168336,168338,168340,168342,168344,168346],{"class":326,"line":203},[324,168323,148897],{"class":867},[324,168325,63401],{"class":738},[324,168327,52159],{"class":867},[324,168329,150400],{"class":738},[324,168331,13164],{"class":867},[324,168333,69846],{"class":738},[324,168335,52159],{"class":867},[324,168337,1514],{"class":916},[324,168339,13164],{"class":867},[324,168341,151984],{"class":738},[324,168343,52159],{"class":867},[324,168345,1853],{"class":916},[324,168347,5659],{"class":867},[324,168349,168350,168352,168354,168356,168358,168360,168362,168364,168366,168368,168370,168372,168374],{"class":326,"line":338},[324,168351,148897],{"class":867},[324,168353,63401],{"class":738},[324,168355,52159],{"class":867},[324,168357,151448],{"class":738},[324,168359,13164],{"class":867},[324,168361,69846],{"class":738},[324,168363,52159],{"class":867},[324,168365,1489],{"class":916},[324,168367,13164],{"class":867},[324,168369,151984],{"class":738},[324,168371,52159],{"class":867},[324,168373,1675],{"class":916},[324,168375,5659],{"class":867},[324,168377,168378,168380,168382,168384,168386,168388,168390,168392,168394,168396,168398,168400,168402],{"class":326,"line":344},[324,168379,148897],{"class":867},[324,168381,63401],{"class":738},[324,168383,52159],{"class":867},[324,168385,160243],{"class":738},[324,168387,13164],{"class":867},[324,168389,69846],{"class":738},[324,168391,52159],{"class":867},[324,168393,1539],{"class":916},[324,168395,13164],{"class":867},[324,168397,151984],{"class":738},[324,168399,52159],{"class":867},[324,168401,1746],{"class":916},[324,168403,5659],{"class":867},[324,168405,168406],{"class":326,"line":484},[324,168407,33968],{"class":867},[324,168409,168410],{"class":326,"line":491},[324,168411,488],{"emptyLinePlaceholder":487},[324,168413,168414],{"class":326,"line":496},[324,168415,488],{"emptyLinePlaceholder":487},[324,168417,168418,168420,168423],{"class":326,"line":502},[324,168419,32669],{"class":863},[324,168421,168422],{"class":734}," filter_students",[324,168424,168425],{"class":867},"(students, condition):\n",[324,168427,168428,168430,168432],{"class":326,"line":508},[324,168429,161735],{"class":867},[324,168431,913],{"class":863},[324,168433,52560],{"class":867},[324,168435,168436,168438,168440,168442],{"class":326,"line":514},[324,168437,3930],{"class":863},[324,168439,152649],{"class":867},[324,168441,26767],{"class":863},[324,168443,152654],{"class":867},[324,168445,168446,168448],{"class":326,"line":2343},[324,168447,3226],{"class":863},[324,168449,168450],{"class":867}," condition(student):\n",[324,168452,168453],{"class":326,"line":2348},[324,168454,168455],{"class":867},"            result.append(student)\n",[324,168457,168458,168460],{"class":326,"line":2354},[324,168459,4819],{"class":863},[324,168461,168217],{"class":867},[324,168463,168464],{"class":326,"line":2359},[324,168465,488],{"emptyLinePlaceholder":487},[324,168467,168468],{"class":326,"line":2373},[324,168469,488],{"emptyLinePlaceholder":487},[324,168471,168472,168474,168476,168479,168481,168484,168486,168488,168490,168492],{"class":326,"line":2378},[324,168473,166213],{"class":867},[324,168475,913],{"class":863},[324,168477,168478],{"class":867}," filter_students(students, ",[324,168480,167398],{"class":863},[324,168482,168483],{"class":867}," s: s[",[324,168485,151984],{"class":738},[324,168487,5172],{"class":867},[324,168489,2441],{"class":863},[324,168491,158349],{"class":916},[324,168493,874],{"class":867},[324,168495,168496,168499,168501,168503,168505,168507,168509,168511,168513,168515],{"class":326,"line":2384},[324,168497,168498],{"class":867},"excellent ",[324,168500,913],{"class":863},[324,168502,168478],{"class":867},[324,168504,167398],{"class":863},[324,168506,168483],{"class":867},[324,168508,151984],{"class":738},[324,168510,5172],{"class":867},[324,168512,2441],{"class":863},[324,168514,158300],{"class":916},[324,168516,874],{"class":867},[324,168518,168519,168522,168524,168526,168528,168530,168532,168534,168536,168538],{"class":326,"line":2405},[324,168520,168521],{"class":867},"under_age ",[324,168523,913],{"class":863},[324,168525,168478],{"class":867},[324,168527,167398],{"class":863},[324,168529,168483],{"class":867},[324,168531,69846],{"class":738},[324,168533,5172],{"class":867},[324,168535,1774],{"class":863},[324,168537,156797],{"class":916},[324,168539,874],{"class":867},[324,168541,168542],{"class":326,"line":2410},[324,168543,488],{"emptyLinePlaceholder":487},[324,168545,168546,168548],{"class":326,"line":2424},[324,168547,31137],{"class":916},[324,168549,168550],{"class":867},"(passed)\n",[324,168552,168553,168555],{"class":326,"line":2429},[324,168554,31137],{"class":916},[324,168556,168557],{"class":867},"(excellent)\n",[324,168559,168560,168562],{"class":326,"line":2458},[324,168561,31137],{"class":916},[324,168563,168564],{"class":867},"(under_age)\n",[14,168566,168568],{"id":168567},"_715-易错点","7.15 易错点",[192,168570,168571,168574,168582,168587,168598],{},[195,168572,168573],{},"默认参数不要写可变对象。",[195,168575,168576,168578,168579,168581],{},[269,168577,167044],{}," 是元组，",[269,168580,167159],{}," 是字典。",[195,168583,168584,168586],{},[269,168585,167398],{}," 只适合简单表达式。",[195,168588,168589,300,168591,168593,168594,168597],{},[269,168590,74766],{},[269,168592,80773],{}," 的结果是迭代器，常用 ",[269,168595,168596],{},"list()"," 转换查看。",[195,168599,168600],{},"装饰器会改变函数调用链，初学时先理解执行顺序。",[14,168602,168604],{"id":168603},"_716-本章练习","7.16 本章练习",[192,168606,168607,168614,168620,168625,168630],{},[195,168608,168609,168610,168613],{},"写函数 ",[269,168611,168612],{},"calc(*args)","，返回所有数字的和、最大值、最小值。",[195,168615,168609,168616,168619],{},[269,168617,168618],{},"print_user(**kwargs)","，输出用户所有字段。",[195,168621,105087,168622,168624],{},[269,168623,167398],{}," 对学生列表按年龄排序。",[195,168626,105087,168627,168629],{},[269,168628,80773],{}," 找出成绩不及格的学生。",[195,168631,168632],{},"写一个装饰器，统计函数执行前后的提示信息。",[775,168634,168635],{},"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":50,"searchDepth":203,"depth":203,"links":168637},[168638,168639,168640,168641,168642,168643,168647,168648,168649,168650,168655,168656,168657,168658,168659,168660],{"id":166496,"depth":203,"text":166497},{"id":166610,"depth":203,"text":166611},{"id":166699,"depth":203,"text":166700},{"id":166761,"depth":203,"text":166762},{"id":166907,"depth":203,"text":166908},{"id":167034,"depth":203,"text":167035,"children":168644},[168645,168646],{"id":167038,"depth":338,"text":167039},{"id":167153,"depth":338,"text":167154},{"id":167234,"depth":203,"text":167235},{"id":167392,"depth":203,"text":167393},{"id":167560,"depth":203,"text":167561},{"id":167642,"depth":203,"text":167643,"children":168651},[168652,168653,168654],{"id":167646,"depth":338,"text":167647},{"id":167717,"depth":338,"text":167718},{"id":167794,"depth":338,"text":167795},{"id":167919,"depth":203,"text":167920},{"id":168009,"depth":203,"text":168010},{"id":168140,"depth":203,"text":168141},{"id":168290,"depth":203,"text":168291},{"id":168567,"depth":203,"text":168568},{"id":168603,"depth":203,"text":168604},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch7",{"title":166488,"description":791},"wiki\u002F2024-10-10-python教程\u002Fch7-函数进阶","vkwD4uN4GcTXYEVJo4HqYbW1G2UwuNGXsRcL7zWXd5Q",{"id":168667,"title":168668,"body":168669,"description":791,"extension":792,"meta":171188,"navigation":487,"path":171189,"seo":171190,"stem":171191,"__hash__":171192},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch8-文件操作.md","8. 文件操作",{"type":7,"value":168670,"toc":171163},[168671,168674,168678,168681,168684,168715,168719,168723,168726,168753,168757,168760,168811,168814,168829,168832,168867,168871,168873,168897,168900,168960,168964,168968,168971,169028,169031,169051,169055,169058,169121,169125,169128,169184,169191,169215,169219,169222,169285,169289,169294,169345,169348,169352,169357,169424,169427,169509,169513,169518,169569,169572,169576,169579,169582,169590,169593,169639,169642,169688,169692,169698,169742,169745,169791,169794,169834,169837,169898,169902,169905,169995,169998,170140,170143,170210,170214,170217,170220,170361,170364,170442,170445,170621,170625,170627,170638,170640,170839,170843,171087,171091,171125,171129,171160],[10,168672,168668],{"id":168673},"_8-文件操作",[14,168675,168677],{"id":168676},"_81-文件操作的意义","8.1 文件操作的意义",[19,168679,168680],{},"程序运行时，变量保存在内存中。程序结束后，内存数据通常会消失。文件可以把数据保存到磁盘，实现持久化。",[19,168682,168683],{},"常见文件类型：",[192,168685,168686,168692,168698,168704,168710],{},[195,168687,168688,168691],{},[269,168689,168690],{},".txt","：普通文本。",[195,168693,168694,168697],{},[269,168695,168696],{},".csv","：表格文本。",[195,168699,168700,168703],{},[269,168701,168702],{},".json","：结构化数据。",[195,168705,168706,168709],{},[269,168707,168708],{},".log","：日志文件。",[195,168711,168712,168714],{},[269,168713,146864],{},"：Python 源代码。",[14,168716,168718],{"id":168717},"_82-路径","8.2 路径",[35,168720,168722],{"id":168721},"_821-相对路径","8.2.1 相对路径",[19,168724,168725],{},"相对当前运行目录：",[316,168727,168729],{"className":31100,"code":168728,"language":31102,"meta":50,"style":50},"open(\"data.txt\", \"r\", encoding=\"utf-8\")\n",[269,168730,168731],{"__ignoreMap":50},[324,168732,168733,168735,168737,168739,168741,168743,168745,168747,168749,168751],{"class":326,"line":327},[324,168734,87637],{"class":916},[324,168736,868],{"class":867},[324,168738,147308],{"class":738},[324,168740,13164],{"class":867},[324,168742,147313],{"class":738},[324,168744,13164],{"class":867},[324,168746,147318],{"class":5945},[324,168748,913],{"class":863},[324,168750,147323],{"class":738},[324,168752,874],{"class":867},[35,168754,168756],{"id":168755},"_822-绝对路径","8.2.2 绝对路径",[19,168758,168759],{},"从根目录或盘符开始：",[316,168761,168763],{"className":31100,"code":168762,"language":31102,"meta":50,"style":50},"open(\"\u002Fhome\u002Fuser\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\nopen(\"D:\u002Fdata\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\n",[269,168764,168765,168788],{"__ignoreMap":50},[324,168766,168767,168769,168771,168774,168776,168778,168780,168782,168784,168786],{"class":326,"line":327},[324,168768,87637],{"class":916},[324,168770,868],{"class":867},[324,168772,168773],{"class":738},"\"\u002Fhome\u002Fuser\u002Fdata.txt\"",[324,168775,13164],{"class":867},[324,168777,147313],{"class":738},[324,168779,13164],{"class":867},[324,168781,147318],{"class":5945},[324,168783,913],{"class":863},[324,168785,147323],{"class":738},[324,168787,874],{"class":867},[324,168789,168790,168792,168794,168797,168799,168801,168803,168805,168807,168809],{"class":326,"line":203},[324,168791,87637],{"class":916},[324,168793,868],{"class":867},[324,168795,168796],{"class":738},"\"D:\u002Fdata\u002Fdata.txt\"",[324,168798,13164],{"class":867},[324,168800,147313],{"class":738},[324,168802,13164],{"class":867},[324,168804,147318],{"class":5945},[324,168806,913],{"class":863},[324,168808,147323],{"class":738},[324,168810,874],{"class":867},[19,168812,168813],{},"Windows 路径建议写成：",[316,168815,168817],{"className":31100,"code":168816,"language":31102,"meta":50,"style":50},"path = \"D:\u002Fdata\u002Fdata.txt\"\n",[269,168818,168819],{"__ignoreMap":50},[324,168820,168821,168824,168826],{"class":326,"line":327},[324,168822,168823],{"class":867},"path ",[324,168825,913],{"class":863},[324,168827,168828],{"class":738}," \"D:\u002Fdata\u002Fdata.txt\"\n",[19,168830,168831],{},"或原始字符串：",[316,168833,168835],{"className":31100,"code":168834,"language":31102,"meta":50,"style":50},"path = r\"D:\\data\\data.txt\"\n",[269,168836,168837],{"__ignoreMap":50},[324,168838,168839,168841,168843,168845,168847,168850,168853,168856,168858,168860,168862,168865],{"class":326,"line":327},[324,168840,168823],{"class":867},[324,168842,913],{"class":863},[324,168844,17850],{"class":863},[324,168846,1115],{"class":738},[324,168848,168849],{"class":48699},"D:",[324,168851,168852],{"class":916},"\\d",[324,168854,168855],{"class":48699},"ata",[324,168857,168852],{"class":916},[324,168859,168855],{"class":48699},[324,168861,1422],{"class":916},[324,168863,168864],{"class":48699},"txt",[324,168866,25857],{"class":738},[14,168868,168870],{"id":168869},"_83-open函数","8.3 open函数",[19,168872,5910],{},[316,168874,168876],{"className":31100,"code":168875,"language":31102,"meta":50,"style":50},"file = open(文件路径, 打开模式, encoding=\"utf-8\")\n",[269,168877,168878],{"__ignoreMap":50},[324,168879,168880,168882,168884,168886,168889,168891,168893,168895],{"class":326,"line":327},[324,168881,46076],{"class":5945},[324,168883,14293],{"class":863},[324,168885,147303],{"class":916},[324,168887,168888],{"class":867},"(文件路径, 打开模式, ",[324,168890,147318],{"class":5945},[324,168892,913],{"class":863},[324,168894,147323],{"class":738},[324,168896,874],{"class":867},[19,168898,168899],{},"常见模式：",[1003,168901,168902,168911],{},[1006,168903,168904],{},[1009,168905,168906,168909],{},[1012,168907,168908],{},"模式",[1012,168910,26593],{},[1049,168912,168913,168922,168931,168940,168950],{},[1009,168914,168915,168919],{},[1054,168916,168917],{},[269,168918,1534],{},[1054,168920,168921],{},"只读，文件不存在会报错",[1009,168923,168924,168928],{},[1054,168925,168926],{},[269,168927,1659],{},[1054,168929,168930],{},"只写，文件不存在会创建，存在会清空",[1009,168932,168933,168937],{},[1054,168934,168935],{},[269,168936,25],{},[1054,168938,168939],{},"追加，文件不存在会创建",[1009,168941,168942,168947],{},[1054,168943,168944],{},[269,168945,168946],{},"rb",[1054,168948,168949],{},"二进制只读",[1009,168951,168952,168957],{},[1054,168953,168954],{},[269,168955,168956],{},"wb",[1054,168958,168959],{},"二进制只写",[14,168961,168963],{"id":168962},"_84-读取文件","8.4 读取文件",[35,168965,168967],{"id":168966},"_841-read","8.4.1 read",[19,168969,168970],{},"一次读取全部内容：",[316,168972,168974],{"className":31100,"code":168973,"language":31102,"meta":50,"style":50},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\ncontent = file.read()\nprint(content)\nfile.close()\n",[269,168975,168976,169002,169014,169021],{"__ignoreMap":50},[324,168977,168978,168980,168982,168984,168986,168988,168990,168992,168994,168996,168998,169000],{"class":326,"line":327},[324,168979,46076],{"class":5945},[324,168981,14293],{"class":863},[324,168983,147303],{"class":916},[324,168985,868],{"class":867},[324,168987,147308],{"class":738},[324,168989,13164],{"class":867},[324,168991,147313],{"class":738},[324,168993,13164],{"class":867},[324,168995,147318],{"class":5945},[324,168997,913],{"class":863},[324,168999,147323],{"class":738},[324,169001,874],{"class":867},[324,169003,169004,169007,169009,169011],{"class":326,"line":203},[324,169005,169006],{"class":867},"content ",[324,169008,913],{"class":863},[324,169010,148665],{"class":5945},[324,169012,169013],{"class":867},".read()\n",[324,169015,169016,169018],{"class":326,"line":338},[324,169017,31137],{"class":916},[324,169019,169020],{"class":867},"(content)\n",[324,169022,169023,169025],{"class":326,"line":344},[324,169024,46076],{"class":5945},[324,169026,169027],{"class":867},".close()\n",[19,169029,169030],{},"可以指定读取字符数：",[316,169032,169034],{"className":31100,"code":169033,"language":31102,"meta":50,"style":50},"content = file.read(10)\n",[269,169035,169036],{"__ignoreMap":50},[324,169037,169038,169040,169042,169044,169047,169049],{"class":326,"line":327},[324,169039,169006],{"class":867},[324,169041,913],{"class":863},[324,169043,148665],{"class":5945},[324,169045,169046],{"class":867},".read(",[324,169048,1310],{"class":916},[324,169050,874],{"class":867},[35,169052,169054],{"id":169053},"_842-readline","8.4.2 readline",[19,169056,169057],{},"一次读取一行：",[316,169059,169061],{"className":31100,"code":169060,"language":31102,"meta":50,"style":50},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nline = file.readline()\nprint(line)\n\nfile.close()\n",[269,169062,169063,169089,169093,169104,169111,169115],{"__ignoreMap":50},[324,169064,169065,169067,169069,169071,169073,169075,169077,169079,169081,169083,169085,169087],{"class":326,"line":327},[324,169066,46076],{"class":5945},[324,169068,14293],{"class":863},[324,169070,147303],{"class":916},[324,169072,868],{"class":867},[324,169074,147308],{"class":738},[324,169076,13164],{"class":867},[324,169078,147313],{"class":738},[324,169080,13164],{"class":867},[324,169082,147318],{"class":5945},[324,169084,913],{"class":863},[324,169086,147323],{"class":738},[324,169088,874],{"class":867},[324,169090,169091],{"class":326,"line":203},[324,169092,488],{"emptyLinePlaceholder":487},[324,169094,169095,169097,169099,169101],{"class":326,"line":338},[324,169096,147764],{"class":867},[324,169098,913],{"class":863},[324,169100,148665],{"class":5945},[324,169102,169103],{"class":867},".readline()\n",[324,169105,169106,169108],{"class":326,"line":344},[324,169107,31137],{"class":916},[324,169109,169110],{"class":867},"(line)\n",[324,169112,169113],{"class":326,"line":484},[324,169114,488],{"emptyLinePlaceholder":487},[324,169116,169117,169119],{"class":326,"line":491},[324,169118,46076],{"class":5945},[324,169120,169027],{"class":867},[35,169122,169124],{"id":169123},"_843-readlines","8.4.3 readlines",[19,169126,169127],{},"读取所有行，返回列表：",[316,169129,169131],{"className":31100,"code":169130,"language":31102,"meta":50,"style":50},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\nlines = file.readlines()\nprint(lines)\nfile.close()\n",[269,169132,169133,169159,169171,169178],{"__ignoreMap":50},[324,169134,169135,169137,169139,169141,169143,169145,169147,169149,169151,169153,169155,169157],{"class":326,"line":327},[324,169136,46076],{"class":5945},[324,169138,14293],{"class":863},[324,169140,147303],{"class":916},[324,169142,868],{"class":867},[324,169144,147308],{"class":738},[324,169146,13164],{"class":867},[324,169148,147313],{"class":738},[324,169150,13164],{"class":867},[324,169152,147318],{"class":5945},[324,169154,913],{"class":863},[324,169156,147323],{"class":738},[324,169158,874],{"class":867},[324,169160,169161,169164,169166,169168],{"class":326,"line":203},[324,169162,169163],{"class":867},"lines ",[324,169165,913],{"class":863},[324,169167,148665],{"class":5945},[324,169169,169170],{"class":867},".readlines()\n",[324,169172,169173,169175],{"class":326,"line":338},[324,169174,31137],{"class":916},[324,169176,169177],{"class":867},"(lines)\n",[324,169179,169180,169182],{"class":326,"line":344},[324,169181,46076],{"class":5945},[324,169183,169027],{"class":867},[19,169185,169186,169187,169190],{},"每一行通常带有换行符，可以用 ",[269,169188,169189],{},"strip()"," 去掉：",[316,169192,169194],{"className":31100,"code":169193,"language":31102,"meta":50,"style":50},"for line in lines:\n    print(line.strip())\n",[269,169195,169196,169208],{"__ignoreMap":50},[324,169197,169198,169200,169203,169205],{"class":326,"line":327},[324,169199,3754],{"class":863},[324,169201,169202],{"class":867}," line ",[324,169204,26767],{"class":863},[324,169206,169207],{"class":867}," lines:\n",[324,169209,169210,169212],{"class":326,"line":203},[324,169211,32021],{"class":916},[324,169213,169214],{"class":867},"(line.strip())\n",[35,169216,169218],{"id":169217},"_844-直接遍历文件对象","8.4.4 直接遍历文件对象",[19,169220,169221],{},"推荐读取大文件时使用：",[316,169223,169225],{"className":31100,"code":169224,"language":31102,"meta":50,"style":50},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nfor line in file:\n    print(line.strip())\n\nfile.close()\n",[269,169226,169227,169253,169257,169269,169275,169279],{"__ignoreMap":50},[324,169228,169229,169231,169233,169235,169237,169239,169241,169243,169245,169247,169249,169251],{"class":326,"line":327},[324,169230,46076],{"class":5945},[324,169232,14293],{"class":863},[324,169234,147303],{"class":916},[324,169236,868],{"class":867},[324,169238,147308],{"class":738},[324,169240,13164],{"class":867},[324,169242,147313],{"class":738},[324,169244,13164],{"class":867},[324,169246,147318],{"class":5945},[324,169248,913],{"class":863},[324,169250,147323],{"class":738},[324,169252,874],{"class":867},[324,169254,169255],{"class":326,"line":203},[324,169256,488],{"emptyLinePlaceholder":487},[324,169258,169259,169261,169263,169265,169267],{"class":326,"line":338},[324,169260,3754],{"class":863},[324,169262,169202],{"class":867},[324,169264,26767],{"class":863},[324,169266,148665],{"class":5945},[324,169268,4468],{"class":867},[324,169270,169271,169273],{"class":326,"line":344},[324,169272,32021],{"class":916},[324,169274,169214],{"class":867},[324,169276,169277],{"class":326,"line":484},[324,169278,488],{"emptyLinePlaceholder":487},[324,169280,169281,169283],{"class":326,"line":491},[324,169282,46076],{"class":5945},[324,169284,169027],{"class":867},[14,169286,169288],{"id":169287},"_85-with语句","8.5 with语句",[19,169290,169291,169293],{},[269,169292,108554],{}," 会自动关闭文件，推荐使用。",[316,169295,169297],{"className":31100,"code":169296,"language":31102,"meta":50,"style":50},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as file:\n    content = file.read()\n    print(content)\n",[269,169298,169299,169329,169339],{"__ignoreMap":50},[324,169300,169301,169303,169305,169307,169309,169311,169313,169315,169317,169319,169321,169323,169325,169327],{"class":326,"line":327},[324,169302,108554],{"class":863},[324,169304,147303],{"class":916},[324,169306,868],{"class":867},[324,169308,147308],{"class":738},[324,169310,13164],{"class":867},[324,169312,147313],{"class":738},[324,169314,13164],{"class":867},[324,169316,147318],{"class":5945},[324,169318,913],{"class":863},[324,169320,147323],{"class":738},[324,169322,14443],{"class":867},[324,169324,32105],{"class":863},[324,169326,148665],{"class":5945},[324,169328,4468],{"class":867},[324,169330,169331,169333,169335,169337],{"class":326,"line":203},[324,169332,147335],{"class":867},[324,169334,913],{"class":863},[324,169336,148665],{"class":5945},[324,169338,169013],{"class":867},[324,169340,169341,169343],{"class":326,"line":338},[324,169342,32021],{"class":916},[324,169344,169020],{"class":867},[19,169346,169347],{},"等价于打开文件、读取、最后关闭，但更安全。",[14,169349,169351],{"id":169350},"_86-写入文件","8.6 写入文件",[19,169353,169354,169356],{},[269,169355,1659],{}," 模式会清空原文件。",[316,169358,169360],{"className":31100,"code":169359,"language":31102,"meta":50,"style":50},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"hello\\n\")\n    file.write(\"python\\n\")\n",[269,169361,169362,169392,169409],{"__ignoreMap":50},[324,169363,169364,169366,169368,169370,169372,169374,169376,169378,169380,169382,169384,169386,169388,169390],{"class":326,"line":327},[324,169365,108554],{"class":863},[324,169367,147303],{"class":916},[324,169369,868],{"class":867},[324,169371,147308],{"class":738},[324,169373,13164],{"class":867},[324,169375,152488],{"class":738},[324,169377,13164],{"class":867},[324,169379,147318],{"class":5945},[324,169381,913],{"class":863},[324,169383,147323],{"class":738},[324,169385,14443],{"class":867},[324,169387,32105],{"class":863},[324,169389,148665],{"class":5945},[324,169391,4468],{"class":867},[324,169393,169394,169397,169400,169403,169405,169407],{"class":326,"line":203},[324,169395,169396],{"class":5945},"    file",[324,169398,169399],{"class":867},".write(",[324,169401,169402],{"class":738},"\"hello",[324,169404,157037],{"class":916},[324,169406,1115],{"class":738},[324,169408,874],{"class":867},[324,169410,169411,169413,169415,169418,169420,169422],{"class":326,"line":338},[324,169412,169396],{"class":5945},[324,169414,169399],{"class":867},[324,169416,169417],{"class":738},"\"python",[324,169419,157037],{"class":916},[324,169421,1115],{"class":738},[324,169423,874],{"class":867},[19,169425,169426],{},"写入多行：",[316,169428,169430],{"className":31100,"code":169429,"language":31102,"meta":50,"style":50},"lines = [\"小明,18\\n\", \"小红,17\\n\", \"小刚,19\\n\"]\n\nwith open(\"students.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.writelines(lines)\n",[269,169431,169432,169467,169471,169502],{"__ignoreMap":50},[324,169433,169434,169436,169438,169440,169443,169445,169447,169449,169452,169454,169456,169458,169461,169463,169465],{"class":326,"line":327},[324,169435,169163],{"class":867},[324,169437,913],{"class":863},[324,169439,52948],{"class":867},[324,169441,169442],{"class":738},"\"小明,18",[324,169444,157037],{"class":916},[324,169446,1115],{"class":738},[324,169448,13164],{"class":867},[324,169450,169451],{"class":738},"\"小红,17",[324,169453,157037],{"class":916},[324,169455,1115],{"class":738},[324,169457,13164],{"class":867},[324,169459,169460],{"class":738},"\"小刚,19",[324,169462,157037],{"class":916},[324,169464,1115],{"class":738},[324,169466,33968],{"class":867},[324,169468,169469],{"class":326,"line":203},[324,169470,488],{"emptyLinePlaceholder":487},[324,169472,169473,169475,169477,169479,169482,169484,169486,169488,169490,169492,169494,169496,169498,169500],{"class":326,"line":338},[324,169474,108554],{"class":863},[324,169476,147303],{"class":916},[324,169478,868],{"class":867},[324,169480,169481],{"class":738},"\"students.txt\"",[324,169483,13164],{"class":867},[324,169485,152488],{"class":738},[324,169487,13164],{"class":867},[324,169489,147318],{"class":5945},[324,169491,913],{"class":863},[324,169493,147323],{"class":738},[324,169495,14443],{"class":867},[324,169497,32105],{"class":863},[324,169499,148665],{"class":5945},[324,169501,4468],{"class":867},[324,169503,169504,169506],{"class":326,"line":344},[324,169505,169396],{"class":5945},[324,169507,169508],{"class":867},".writelines(lines)\n",[14,169510,169512],{"id":169511},"_87-追加文件","8.7 追加文件",[19,169514,169515,169517],{},[269,169516,25],{}," 模式不会清空原内容，而是在末尾追加。",[316,169519,169521],{"className":31100,"code":169520,"language":31102,"meta":50,"style":50},"with open(\"log.txt\", \"a\", encoding=\"utf-8\") as file:\n    file.write(\"程序启动\\n\")\n",[269,169522,169523,169554],{"__ignoreMap":50},[324,169524,169525,169527,169529,169531,169534,169536,169538,169540,169542,169544,169546,169548,169550,169552],{"class":326,"line":327},[324,169526,108554],{"class":863},[324,169528,147303],{"class":916},[324,169530,868],{"class":867},[324,169532,169533],{"class":738},"\"log.txt\"",[324,169535,13164],{"class":867},[324,169537,165837],{"class":738},[324,169539,13164],{"class":867},[324,169541,147318],{"class":5945},[324,169543,913],{"class":863},[324,169545,147323],{"class":738},[324,169547,14443],{"class":867},[324,169549,32105],{"class":863},[324,169551,148665],{"class":5945},[324,169553,4468],{"class":867},[324,169555,169556,169558,169560,169563,169565,169567],{"class":326,"line":203},[324,169557,169396],{"class":5945},[324,169559,169399],{"class":867},[324,169561,169562],{"class":738},"\"程序启动",[324,169564,157037],{"class":916},[324,169566,1115],{"class":738},[324,169568,874],{"class":867},[19,169570,169571],{},"日志类文件常用追加模式。",[14,169573,169575],{"id":169574},"_88-文件编码","8.8 文件编码",[19,169577,169578],{},"编码决定文字如何保存为字节。",[19,169580,169581],{},"常见编码：",[192,169583,169584,169587],{},[195,169585,169586],{},"UTF-8：推荐。",[195,169588,169589],{},"GBK：部分 Windows 中文文件常见。",[19,169591,169592],{},"读取文件乱码时，可以尝试：",[316,169594,169596],{"className":31100,"code":169595,"language":31102,"meta":50,"style":50},"with open(\"data.txt\", \"r\", encoding=\"gbk\") as file:\n    content = file.read()\n",[269,169597,169598,169629],{"__ignoreMap":50},[324,169599,169600,169602,169604,169606,169608,169610,169612,169614,169616,169618,169621,169623,169625,169627],{"class":326,"line":327},[324,169601,108554],{"class":863},[324,169603,147303],{"class":916},[324,169605,868],{"class":867},[324,169607,147308],{"class":738},[324,169609,13164],{"class":867},[324,169611,147313],{"class":738},[324,169613,13164],{"class":867},[324,169615,147318],{"class":5945},[324,169617,913],{"class":863},[324,169619,169620],{"class":738},"\"gbk\"",[324,169622,14443],{"class":867},[324,169624,32105],{"class":863},[324,169626,148665],{"class":5945},[324,169628,4468],{"class":867},[324,169630,169631,169633,169635,169637],{"class":326,"line":203},[324,169632,147335],{"class":867},[324,169634,913],{"class":863},[324,169636,148665],{"class":5945},[324,169638,169013],{"class":867},[19,169640,169641],{},"写文件时建议统一 UTF-8：",[316,169643,169645],{"className":31100,"code":169644,"language":31102,"meta":50,"style":50},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"中文内容\")\n",[269,169646,169647,169677],{"__ignoreMap":50},[324,169648,169649,169651,169653,169655,169657,169659,169661,169663,169665,169667,169669,169671,169673,169675],{"class":326,"line":327},[324,169650,108554],{"class":863},[324,169652,147303],{"class":916},[324,169654,868],{"class":867},[324,169656,147308],{"class":738},[324,169658,13164],{"class":867},[324,169660,152488],{"class":738},[324,169662,13164],{"class":867},[324,169664,147318],{"class":5945},[324,169666,913],{"class":863},[324,169668,147323],{"class":738},[324,169670,14443],{"class":867},[324,169672,32105],{"class":863},[324,169674,148665],{"class":5945},[324,169676,4468],{"class":867},[324,169678,169679,169681,169683,169686],{"class":326,"line":203},[324,169680,169396],{"class":5945},[324,169682,169399],{"class":867},[324,169684,169685],{"class":738},"\"中文内容\"",[324,169687,874],{"class":867},[14,169689,169691],{"id":169690},"_89-pathlib","8.9 pathlib",[19,169693,169694,169697],{},[269,169695,169696],{},"pathlib"," 是现代 Python 推荐的路径处理方式。",[316,169699,169701],{"className":31100,"code":169700,"language":31102,"meta":50,"style":50},"from pathlib import Path\n\npath = Path(\"data\") \u002F \"students.txt\"\nprint(path)\n",[269,169702,169703,169713,169717,169735],{"__ignoreMap":50},[324,169704,169705,169707,169709,169711],{"class":326,"line":327},[324,169706,31459],{"class":863},[324,169708,109032],{"class":867},[324,169710,31114],{"class":863},[324,169712,109037],{"class":867},[324,169714,169715],{"class":326,"line":203},[324,169716,488],{"emptyLinePlaceholder":487},[324,169718,169719,169721,169723,169725,169728,169730,169732],{"class":326,"line":338},[324,169720,168823],{"class":867},[324,169722,913],{"class":863},[324,169724,109266],{"class":867},[324,169726,169727],{"class":738},"\"data\"",[324,169729,14443],{"class":867},[324,169731,1448],{"class":863},[324,169733,169734],{"class":738}," \"students.txt\"\n",[324,169736,169737,169739],{"class":326,"line":344},[324,169738,31137],{"class":916},[324,169740,169741],{"class":867},"(path)\n",[19,169743,169744],{},"创建目录：",[316,169746,169748],{"className":31100,"code":169747,"language":31102,"meta":50,"style":50},"from pathlib import Path\n\ndata_dir = Path(\"data\")\ndata_dir.mkdir(exist_ok=True)\n",[269,169749,169750,169760,169764,169777],{"__ignoreMap":50},[324,169751,169752,169754,169756,169758],{"class":326,"line":327},[324,169753,31459],{"class":863},[324,169755,109032],{"class":867},[324,169757,31114],{"class":863},[324,169759,109037],{"class":867},[324,169761,169762],{"class":326,"line":203},[324,169763,488],{"emptyLinePlaceholder":487},[324,169765,169766,169769,169771,169773,169775],{"class":326,"line":338},[324,169767,169768],{"class":867},"data_dir ",[324,169770,913],{"class":863},[324,169772,109266],{"class":867},[324,169774,169727],{"class":738},[324,169776,874],{"class":867},[324,169778,169779,169782,169785,169787,169789],{"class":326,"line":344},[324,169780,169781],{"class":867},"data_dir.mkdir(",[324,169783,169784],{"class":5945},"exist_ok",[324,169786,913],{"class":863},[324,169788,32198],{"class":916},[324,169790,874],{"class":867},[19,169792,169793],{},"判断文件是否存在：",[316,169795,169797],{"className":31100,"code":169796,"language":31102,"meta":50,"style":50},"path = Path(\"data\u002Fstudents.txt\")\n\nif path.exists():\n    print(\"文件存在\")\n",[269,169798,169799,169812,169816,169823],{"__ignoreMap":50},[324,169800,169801,169803,169805,169807,169810],{"class":326,"line":327},[324,169802,168823],{"class":867},[324,169804,913],{"class":863},[324,169806,109266],{"class":867},[324,169808,169809],{"class":738},"\"data\u002Fstudents.txt\"",[324,169811,874],{"class":867},[324,169813,169814],{"class":326,"line":203},[324,169815,488],{"emptyLinePlaceholder":487},[324,169817,169818,169820],{"class":326,"line":338},[324,169819,2262],{"class":863},[324,169821,169822],{"class":867}," path.exists():\n",[324,169824,169825,169827,169829,169832],{"class":326,"line":344},[324,169826,32021],{"class":916},[324,169828,868],{"class":867},[324,169830,169831],{"class":738},"\"文件存在\"",[324,169833,874],{"class":867},[19,169835,169836],{},"读写文本：",[316,169838,169840],{"className":31100,"code":169839,"language":31102,"meta":50,"style":50},"path = Path(\"data.txt\")\n\npath.write_text(\"hello python\", encoding=\"utf-8\")\ncontent = path.read_text(encoding=\"utf-8\")\nprint(content)\n",[269,169841,169842,169854,169858,169875,169892],{"__ignoreMap":50},[324,169843,169844,169846,169848,169850,169852],{"class":326,"line":327},[324,169845,168823],{"class":867},[324,169847,913],{"class":863},[324,169849,109266],{"class":867},[324,169851,147308],{"class":738},[324,169853,874],{"class":867},[324,169855,169856],{"class":326,"line":203},[324,169857,488],{"emptyLinePlaceholder":487},[324,169859,169860,169863,169865,169867,169869,169871,169873],{"class":326,"line":338},[324,169861,169862],{"class":867},"path.write_text(",[324,169864,146388],{"class":738},[324,169866,13164],{"class":867},[324,169868,147318],{"class":5945},[324,169870,913],{"class":863},[324,169872,147323],{"class":738},[324,169874,874],{"class":867},[324,169876,169877,169879,169881,169884,169886,169888,169890],{"class":326,"line":344},[324,169878,169006],{"class":867},[324,169880,913],{"class":863},[324,169882,169883],{"class":867}," path.read_text(",[324,169885,147318],{"class":5945},[324,169887,913],{"class":863},[324,169889,147323],{"class":738},[324,169891,874],{"class":867},[324,169893,169894,169896],{"class":326,"line":484},[324,169895,31137],{"class":916},[324,169897,169020],{"class":867},[14,169899,169901],{"id":169900},"_810-json文件","8.10 JSON文件",[19,169903,169904],{},"JSON 是常见的数据交换格式，适合保存列表、字典这类结构化数据。",[316,169906,169908],{"className":31100,"code":169907,"language":31102,"meta":50,"style":50},"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",[269,169909,169910,169916,169920,169928,169938,169948,169956,169960,169964,169989],{"__ignoreMap":50},[324,169911,169912,169914],{"class":326,"line":327},[324,169913,31114],{"class":863},[324,169915,147603],{"class":867},[324,169917,169918],{"class":326,"line":203},[324,169919,488],{"emptyLinePlaceholder":487},[324,169921,169922,169924,169926],{"class":326,"line":338},[324,169923,149993],{"class":867},[324,169925,913],{"class":863},[324,169927,16301],{"class":867},[324,169929,169930,169932,169934,169936],{"class":326,"line":344},[324,169931,147532],{"class":738},[324,169933,52159],{"class":867},[324,169935,150400],{"class":738},[324,169937,32188],{"class":867},[324,169939,169940,169942,169944,169946],{"class":326,"line":484},[324,169941,165049],{"class":738},[324,169943,52159],{"class":867},[324,169945,1514],{"class":916},[324,169947,32188],{"class":867},[324,169949,169950,169952,169954],{"class":326,"line":491},[324,169951,165060],{"class":738},[324,169953,52159],{"class":867},[324,169955,165065],{"class":916},[324,169957,169958],{"class":326,"line":496},[324,169959,2296],{"class":867},[324,169961,169962],{"class":326,"line":502},[324,169963,488],{"emptyLinePlaceholder":487},[324,169965,169966,169968,169970,169973,169975,169977,169979,169981,169983,169985,169987],{"class":326,"line":508},[324,169967,156956],{"class":867},[324,169969,913],{"class":863},[324,169971,169972],{"class":867}," json.dumps(student, ",[324,169974,147649],{"class":5945},[324,169976,913],{"class":863},[324,169978,34709],{"class":916},[324,169980,13164],{"class":867},[324,169982,152524],{"class":5945},[324,169984,913],{"class":863},[324,169986,944],{"class":916},[324,169988,874],{"class":867},[324,169990,169991,169993],{"class":326,"line":514},[324,169992,31137],{"class":916},[324,169994,164583],{"class":867},[19,169996,169997],{},"写入 JSON 文件：",[316,169999,170001],{"className":31100,"code":170000,"language":31102,"meta":50,"style":50},"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",[269,170002,170003,170009,170013,170021,170049,170077,170081,170085,170115],{"__ignoreMap":50},[324,170004,170005,170007],{"class":326,"line":327},[324,170006,31114],{"class":863},[324,170008,147603],{"class":867},[324,170010,170011],{"class":326,"line":203},[324,170012,488],{"emptyLinePlaceholder":487},[324,170014,170015,170017,170019],{"class":326,"line":338},[324,170016,160228],{"class":867},[324,170018,913],{"class":863},[324,170020,56169],{"class":867},[324,170022,170023,170025,170027,170029,170031,170033,170035,170037,170039,170041,170043,170045,170047],{"class":326,"line":344},[324,170024,148897],{"class":867},[324,170026,63401],{"class":738},[324,170028,52159],{"class":867},[324,170030,150400],{"class":738},[324,170032,13164],{"class":867},[324,170034,69846],{"class":738},[324,170036,52159],{"class":867},[324,170038,1514],{"class":916},[324,170040,13164],{"class":867},[324,170042,151984],{"class":738},[324,170044,52159],{"class":867},[324,170046,1853],{"class":916},[324,170048,5659],{"class":867},[324,170050,170051,170053,170055,170057,170059,170061,170063,170065,170067,170069,170071,170073,170075],{"class":326,"line":484},[324,170052,148897],{"class":867},[324,170054,63401],{"class":738},[324,170056,52159],{"class":867},[324,170058,151448],{"class":738},[324,170060,13164],{"class":867},[324,170062,69846],{"class":738},[324,170064,52159],{"class":867},[324,170066,1489],{"class":916},[324,170068,13164],{"class":867},[324,170070,151984],{"class":738},[324,170072,52159],{"class":867},[324,170074,1675],{"class":916},[324,170076,5659],{"class":867},[324,170078,170079],{"class":326,"line":491},[324,170080,33968],{"class":867},[324,170082,170083],{"class":326,"line":496},[324,170084,488],{"emptyLinePlaceholder":487},[324,170086,170087,170089,170091,170093,170095,170097,170099,170101,170103,170105,170107,170109,170111,170113],{"class":326,"line":502},[324,170088,108554],{"class":863},[324,170090,147303],{"class":916},[324,170092,868],{"class":867},[324,170094,152343],{"class":738},[324,170096,13164],{"class":867},[324,170098,152488],{"class":738},[324,170100,13164],{"class":867},[324,170102,147318],{"class":5945},[324,170104,913],{"class":863},[324,170106,147323],{"class":738},[324,170108,14443],{"class":867},[324,170110,32105],{"class":863},[324,170112,148665],{"class":5945},[324,170114,4468],{"class":867},[324,170116,170117,170120,170122,170124,170126,170128,170130,170132,170134,170136,170138],{"class":326,"line":508},[324,170118,170119],{"class":867},"    json.dump(students, ",[324,170121,46076],{"class":5945},[324,170123,13164],{"class":867},[324,170125,147649],{"class":5945},[324,170127,913],{"class":863},[324,170129,34709],{"class":916},[324,170131,13164],{"class":867},[324,170133,152524],{"class":5945},[324,170135,913],{"class":863},[324,170137,944],{"class":916},[324,170139,874],{"class":867},[19,170141,170142],{},"读取 JSON 文件：",[316,170144,170146],{"className":31100,"code":170145,"language":31102,"meta":50,"style":50},"import json\n\nwith open(\"students.json\", \"r\", encoding=\"utf-8\") as file:\n    students = json.load(file)\n\nprint(students)\n",[269,170147,170148,170154,170158,170188,170200,170204],{"__ignoreMap":50},[324,170149,170150,170152],{"class":326,"line":327},[324,170151,31114],{"class":863},[324,170153,147603],{"class":867},[324,170155,170156],{"class":326,"line":203},[324,170157,488],{"emptyLinePlaceholder":487},[324,170159,170160,170162,170164,170166,170168,170170,170172,170174,170176,170178,170180,170182,170184,170186],{"class":326,"line":338},[324,170161,108554],{"class":863},[324,170163,147303],{"class":916},[324,170165,868],{"class":867},[324,170167,152343],{"class":738},[324,170169,13164],{"class":867},[324,170171,147313],{"class":738},[324,170173,13164],{"class":867},[324,170175,147318],{"class":5945},[324,170177,913],{"class":863},[324,170179,147323],{"class":738},[324,170181,14443],{"class":867},[324,170183,32105],{"class":863},[324,170185,148665],{"class":5945},[324,170187,4468],{"class":867},[324,170189,170190,170192,170194,170196,170198],{"class":326,"line":344},[324,170191,153549],{"class":867},[324,170193,913],{"class":863},[324,170195,148676],{"class":867},[324,170197,46076],{"class":5945},[324,170199,874],{"class":867},[324,170201,170202],{"class":326,"line":484},[324,170203,488],{"emptyLinePlaceholder":487},[324,170205,170206,170208],{"class":326,"line":491},[324,170207,31137],{"class":916},[324,170209,165507],{"class":867},[14,170211,170213],{"id":170212},"_811-csv文件","8.11 CSV文件",[19,170215,170216],{},"CSV 是逗号分隔值，常用于表格数据。",[19,170218,170219],{},"写入 CSV：",[316,170221,170223],{"className":31100,"code":170222,"language":31102,"meta":50,"style":50},"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",[269,170224,170225,170232,170236,170244,170262,170278,170294,170298,170302,170342,170356],{"__ignoreMap":50},[324,170226,170227,170229],{"class":326,"line":327},[324,170228,31114],{"class":863},[324,170230,170231],{"class":867}," csv\n",[324,170233,170234],{"class":326,"line":203},[324,170235,488],{"emptyLinePlaceholder":487},[324,170237,170238,170240,170242],{"class":326,"line":338},[324,170239,160228],{"class":867},[324,170241,913],{"class":863},[324,170243,56169],{"class":867},[324,170245,170246,170249,170251,170253,170255,170257,170260],{"class":326,"line":344},[324,170247,170248],{"class":867},"    [",[324,170250,73821],{"class":738},[324,170252,13164],{"class":867},[324,170254,73854],{"class":738},[324,170256,13164],{"class":867},[324,170258,170259],{"class":738},"\"成绩\"",[324,170261,88558],{"class":867},[324,170263,170264,170266,170268,170270,170272,170274,170276],{"class":326,"line":484},[324,170265,170248],{"class":867},[324,170267,150400],{"class":738},[324,170269,13164],{"class":867},[324,170271,1514],{"class":916},[324,170273,13164],{"class":867},[324,170275,1853],{"class":916},[324,170277,88558],{"class":867},[324,170279,170280,170282,170284,170286,170288,170290,170292],{"class":326,"line":491},[324,170281,170248],{"class":867},[324,170283,151448],{"class":738},[324,170285,13164],{"class":867},[324,170287,1489],{"class":916},[324,170289,13164],{"class":867},[324,170291,1675],{"class":916},[324,170293,88558],{"class":867},[324,170295,170296],{"class":326,"line":496},[324,170297,33968],{"class":867},[324,170299,170300],{"class":326,"line":502},[324,170301,488],{"emptyLinePlaceholder":487},[324,170303,170304,170306,170308,170310,170313,170315,170317,170319,170321,170323,170325,170327,170330,170332,170334,170336,170338,170340],{"class":326,"line":508},[324,170305,108554],{"class":863},[324,170307,147303],{"class":916},[324,170309,868],{"class":867},[324,170311,170312],{"class":738},"\"students.csv\"",[324,170314,13164],{"class":867},[324,170316,152488],{"class":738},[324,170318,13164],{"class":867},[324,170320,147318],{"class":5945},[324,170322,913],{"class":863},[324,170324,147323],{"class":738},[324,170326,13164],{"class":867},[324,170328,170329],{"class":5945},"newline",[324,170331,913],{"class":863},[324,170333,8381],{"class":738},[324,170335,14443],{"class":867},[324,170337,32105],{"class":863},[324,170339,148665],{"class":5945},[324,170341,4468],{"class":867},[324,170343,170344,170347,170349,170352,170354],{"class":326,"line":514},[324,170345,170346],{"class":867},"    writer ",[324,170348,913],{"class":863},[324,170350,170351],{"class":867}," csv.writer(",[324,170353,46076],{"class":5945},[324,170355,874],{"class":867},[324,170357,170358],{"class":326,"line":2343},[324,170359,170360],{"class":867},"    writer.writerows(students)\n",[19,170362,170363],{},"读取 CSV：",[316,170365,170367],{"className":31100,"code":170366,"language":31102,"meta":50,"style":50},"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",[269,170368,170369,170375,170379,170409,170423,170435],{"__ignoreMap":50},[324,170370,170371,170373],{"class":326,"line":327},[324,170372,31114],{"class":863},[324,170374,170231],{"class":867},[324,170376,170377],{"class":326,"line":203},[324,170378,488],{"emptyLinePlaceholder":487},[324,170380,170381,170383,170385,170387,170389,170391,170393,170395,170397,170399,170401,170403,170405,170407],{"class":326,"line":338},[324,170382,108554],{"class":863},[324,170384,147303],{"class":916},[324,170386,868],{"class":867},[324,170388,170312],{"class":738},[324,170390,13164],{"class":867},[324,170392,147313],{"class":738},[324,170394,13164],{"class":867},[324,170396,147318],{"class":5945},[324,170398,913],{"class":863},[324,170400,147323],{"class":738},[324,170402,14443],{"class":867},[324,170404,32105],{"class":863},[324,170406,148665],{"class":5945},[324,170408,4468],{"class":867},[324,170410,170411,170414,170416,170419,170421],{"class":326,"line":344},[324,170412,170413],{"class":867},"    reader ",[324,170415,913],{"class":863},[324,170417,170418],{"class":867}," csv.reader(",[324,170420,46076],{"class":5945},[324,170422,874],{"class":867},[324,170424,170425,170427,170430,170432],{"class":326,"line":484},[324,170426,3930],{"class":863},[324,170428,170429],{"class":867}," row ",[324,170431,26767],{"class":863},[324,170433,170434],{"class":867}," reader:\n",[324,170436,170437,170439],{"class":326,"line":491},[324,170438,33173],{"class":916},[324,170440,170441],{"class":867},"(row)\n",[19,170443,170444],{},"使用字典写入：",[316,170446,170448],{"className":31100,"code":170447,"language":31102,"meta":50,"style":50},"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",[269,170449,170450,170456,170460,170468,170496,170524,170528,170532,170570,170591,170612,170617],{"__ignoreMap":50},[324,170451,170452,170454],{"class":326,"line":327},[324,170453,31114],{"class":863},[324,170455,170231],{"class":867},[324,170457,170458],{"class":326,"line":203},[324,170459,488],{"emptyLinePlaceholder":487},[324,170461,170462,170464,170466],{"class":326,"line":338},[324,170463,160228],{"class":867},[324,170465,913],{"class":863},[324,170467,56169],{"class":867},[324,170469,170470,170472,170474,170476,170478,170480,170482,170484,170486,170488,170490,170492,170494],{"class":326,"line":344},[324,170471,148897],{"class":867},[324,170473,63401],{"class":738},[324,170475,52159],{"class":867},[324,170477,150400],{"class":738},[324,170479,13164],{"class":867},[324,170481,69846],{"class":738},[324,170483,52159],{"class":867},[324,170485,1514],{"class":916},[324,170487,13164],{"class":867},[324,170489,151984],{"class":738},[324,170491,52159],{"class":867},[324,170493,1853],{"class":916},[324,170495,5659],{"class":867},[324,170497,170498,170500,170502,170504,170506,170508,170510,170512,170514,170516,170518,170520,170522],{"class":326,"line":484},[324,170499,148897],{"class":867},[324,170501,63401],{"class":738},[324,170503,52159],{"class":867},[324,170505,151448],{"class":738},[324,170507,13164],{"class":867},[324,170509,69846],{"class":738},[324,170511,52159],{"class":867},[324,170513,1489],{"class":916},[324,170515,13164],{"class":867},[324,170517,151984],{"class":738},[324,170519,52159],{"class":867},[324,170521,1675],{"class":916},[324,170523,5659],{"class":867},[324,170525,170526],{"class":326,"line":491},[324,170527,33968],{"class":867},[324,170529,170530],{"class":326,"line":496},[324,170531,488],{"emptyLinePlaceholder":487},[324,170533,170534,170536,170538,170540,170542,170544,170546,170548,170550,170552,170554,170556,170558,170560,170562,170564,170566,170568],{"class":326,"line":502},[324,170535,108554],{"class":863},[324,170537,147303],{"class":916},[324,170539,868],{"class":867},[324,170541,170312],{"class":738},[324,170543,13164],{"class":867},[324,170545,152488],{"class":738},[324,170547,13164],{"class":867},[324,170549,147318],{"class":5945},[324,170551,913],{"class":863},[324,170553,147323],{"class":738},[324,170555,13164],{"class":867},[324,170557,170329],{"class":5945},[324,170559,913],{"class":863},[324,170561,8381],{"class":738},[324,170563,14443],{"class":867},[324,170565,32105],{"class":863},[324,170567,148665],{"class":5945},[324,170569,4468],{"class":867},[324,170571,170572,170575,170577,170579,170581,170583,170585,170587,170589],{"class":326,"line":508},[324,170573,170574],{"class":867},"    fieldnames ",[324,170576,913],{"class":863},[324,170578,52948],{"class":867},[324,170580,63401],{"class":738},[324,170582,13164],{"class":867},[324,170584,69846],{"class":738},[324,170586,13164],{"class":867},[324,170588,151984],{"class":738},[324,170590,33968],{"class":867},[324,170592,170593,170595,170597,170600,170602,170604,170607,170609],{"class":326,"line":514},[324,170594,170346],{"class":867},[324,170596,913],{"class":863},[324,170598,170599],{"class":867}," csv.DictWriter(",[324,170601,46076],{"class":5945},[324,170603,13164],{"class":867},[324,170605,170606],{"class":5945},"fieldnames",[324,170608,913],{"class":863},[324,170610,170611],{"class":867},"fieldnames)\n",[324,170613,170614],{"class":326,"line":2343},[324,170615,170616],{"class":867},"    writer.writeheader()\n",[324,170618,170619],{"class":326,"line":2348},[324,170620,170360],{"class":867},[14,170622,170624],{"id":170623},"_812-小案例文本词频统计","8.12 小案例：文本词频统计",[19,170626,123804],{},[192,170628,170629,170632,170635],{},[195,170630,170631],{},"读取文本文件。",[195,170633,170634],{},"统计每个单词出现次数。",[195,170636,170637],{},"输出出现次数最多的前 10 个单词。",[19,170639,10764],{},[316,170641,170643],{"className":31100,"code":170642,"language":31102,"meta":50,"style":50},"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",[269,170644,170645,170655,170659,170672,170688,170692,170702,170711,170715,170727,170747,170756,170760,170778,170782,170812,170816,170832],{"__ignoreMap":50},[324,170646,170647,170649,170651,170653],{"class":326,"line":327},[324,170648,31459],{"class":863},[324,170650,109032],{"class":867},[324,170652,31114],{"class":863},[324,170654,109037],{"class":867},[324,170656,170657],{"class":326,"line":203},[324,170658,488],{"emptyLinePlaceholder":487},[324,170660,170661,170663,170665,170667,170670],{"class":326,"line":338},[324,170662,168823],{"class":867},[324,170664,913],{"class":863},[324,170666,109266],{"class":867},[324,170668,170669],{"class":738},"\"article.txt\"",[324,170671,874],{"class":867},[324,170673,170674,170676,170678,170680,170682,170684,170686],{"class":326,"line":344},[324,170675,169006],{"class":867},[324,170677,913],{"class":863},[324,170679,169883],{"class":867},[324,170681,147318],{"class":5945},[324,170683,913],{"class":863},[324,170685,147323],{"class":738},[324,170687,874],{"class":867},[324,170689,170690],{"class":326,"line":484},[324,170691,488],{"emptyLinePlaceholder":487},[324,170693,170694,170697,170699],{"class":326,"line":491},[324,170695,170696],{"class":867},"words ",[324,170698,913],{"class":863},[324,170700,170701],{"class":867}," content.lower().split()\n",[324,170703,170704,170707,170709],{"class":326,"line":496},[324,170705,170706],{"class":867},"counter ",[324,170708,913],{"class":863},[324,170710,88590],{"class":867},[324,170712,170713],{"class":326,"line":502},[324,170714,488],{"emptyLinePlaceholder":487},[324,170716,170717,170719,170722,170724],{"class":326,"line":508},[324,170718,3754],{"class":863},[324,170720,170721],{"class":867}," word ",[324,170723,26767],{"class":863},[324,170725,170726],{"class":867}," words:\n",[324,170728,170729,170732,170734,170737,170740,170742,170745],{"class":326,"line":514},[324,170730,170731],{"class":867},"    word ",[324,170733,913],{"class":863},[324,170735,170736],{"class":867}," word.strip(",[324,170738,170739],{"class":738},"\".,!?;:",[324,170741,157007],{"class":916},[324,170743,170744],{"class":738},"'()[]\"",[324,170746,874],{"class":867},[324,170748,170749,170751,170753],{"class":326,"line":2343},[324,170750,3830],{"class":863},[324,170752,39652],{"class":863},[324,170754,170755],{"class":867}," word:\n",[324,170757,170758],{"class":326,"line":2348},[324,170759,149024],{"class":863},[324,170761,170762,170765,170767,170770,170772,170774,170776],{"class":326,"line":2354},[324,170763,170764],{"class":867},"    counter[word] ",[324,170766,913],{"class":863},[324,170768,170769],{"class":867}," counter.get(word, ",[324,170771,1056],{"class":916},[324,170773,14443],{"class":867},[324,170775,1345],{"class":863},[324,170777,56421],{"class":916},[324,170779,170780],{"class":326,"line":2359},[324,170781,488],{"emptyLinePlaceholder":487},[324,170783,170784,170787,170789,170791,170794,170796,170798,170800,170802,170804,170806,170808,170810],{"class":326,"line":2373},[324,170785,170786],{"class":867},"items ",[324,170788,913],{"class":863},[324,170790,164116],{"class":916},[324,170792,170793],{"class":867},"(counter.items(), ",[324,170795,154458],{"class":5945},[324,170797,154461],{"class":863},[324,170799,154464],{"class":867},[324,170801,1082],{"class":916},[324,170803,112923],{"class":867},[324,170805,164040],{"class":5945},[324,170807,913],{"class":863},[324,170809,32198],{"class":916},[324,170811,874],{"class":867},[324,170813,170814],{"class":326,"line":2378},[324,170815,488],{"emptyLinePlaceholder":487},[324,170817,170818,170820,170823,170825,170828,170830],{"class":326,"line":2384},[324,170819,3754],{"class":863},[324,170821,170822],{"class":867}," word, count ",[324,170824,26767],{"class":863},[324,170826,170827],{"class":867}," items[:",[324,170829,1310],{"class":916},[324,170831,166267],{"class":867},[324,170833,170834,170836],{"class":326,"line":2405},[324,170835,32021],{"class":916},[324,170837,170838],{"class":867},"(word, count)\n",[14,170840,170842],{"id":170841},"_813-小案例学生信息持久化","8.13 小案例：学生信息持久化",[316,170844,170846],{"className":31100,"code":170845,"language":31102,"meta":50,"style":50},"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",[269,170847,170848,170854,170864,170868,170880,170884,170888,170896,170906,170912,170916,170946,170956,170960,170964,170972,171002,171026,171030,171034,171042,171071,171076],{"__ignoreMap":50},[324,170849,170850,170852],{"class":326,"line":327},[324,170851,31114],{"class":863},[324,170853,147603],{"class":867},[324,170855,170856,170858,170860,170862],{"class":326,"line":203},[324,170857,31459],{"class":863},[324,170859,109032],{"class":867},[324,170861,31114],{"class":863},[324,170863,109037],{"class":867},[324,170865,170866],{"class":326,"line":338},[324,170867,488],{"emptyLinePlaceholder":487},[324,170869,170870,170872,170874,170876,170878],{"class":326,"line":344},[324,170871,152336],{"class":916},[324,170873,14293],{"class":863},[324,170875,109266],{"class":867},[324,170877,152343],{"class":738},[324,170879,874],{"class":867},[324,170881,170882],{"class":326,"line":484},[324,170883,488],{"emptyLinePlaceholder":487},[324,170885,170886],{"class":326,"line":491},[324,170887,488],{"emptyLinePlaceholder":487},[324,170889,170890,170892,170894],{"class":326,"line":496},[324,170891,32669],{"class":863},[324,170893,152360],{"class":734},[324,170895,32675],{"class":867},[324,170897,170898,170900,170902,170904],{"class":326,"line":502},[324,170899,3830],{"class":863},[324,170901,39652],{"class":863},[324,170903,152371],{"class":916},[324,170905,152374],{"class":867},[324,170907,170908,170910],{"class":326,"line":508},[324,170909,15481],{"class":863},[324,170911,52560],{"class":867},[324,170913,170914],{"class":326,"line":514},[324,170915,488],{"emptyLinePlaceholder":487},[324,170917,170918,170920,170922,170924,170926,170928,170930,170932,170934,170936,170938,170940,170942,170944],{"class":326,"line":2343},[324,170919,34900],{"class":863},[324,170921,147303],{"class":916},[324,170923,868],{"class":867},[324,170925,152336],{"class":916},[324,170927,13164],{"class":867},[324,170929,147313],{"class":738},[324,170931,13164],{"class":867},[324,170933,147318],{"class":5945},[324,170935,913],{"class":863},[324,170937,147323],{"class":738},[324,170939,14443],{"class":867},[324,170941,32105],{"class":863},[324,170943,148665],{"class":5945},[324,170945,4468],{"class":867},[324,170947,170948,170950,170952,170954],{"class":326,"line":2348},[324,170949,15481],{"class":863},[324,170951,148676],{"class":867},[324,170953,46076],{"class":5945},[324,170955,874],{"class":867},[324,170957,170958],{"class":326,"line":2354},[324,170959,488],{"emptyLinePlaceholder":487},[324,170961,170962],{"class":326,"line":2359},[324,170963,488],{"emptyLinePlaceholder":487},[324,170965,170966,170968,170970],{"class":326,"line":2373},[324,170967,32669],{"class":863},[324,170969,152470],{"class":734},[324,170971,152473],{"class":867},[324,170973,170974,170976,170978,170980,170982,170984,170986,170988,170990,170992,170994,170996,170998,171000],{"class":326,"line":2378},[324,170975,34900],{"class":863},[324,170977,147303],{"class":916},[324,170979,868],{"class":867},[324,170981,152336],{"class":916},[324,170983,13164],{"class":867},[324,170985,152488],{"class":738},[324,170987,13164],{"class":867},[324,170989,147318],{"class":5945},[324,170991,913],{"class":863},[324,170993,147323],{"class":738},[324,170995,14443],{"class":867},[324,170997,32105],{"class":863},[324,170999,148665],{"class":5945},[324,171001,4468],{"class":867},[324,171003,171004,171006,171008,171010,171012,171014,171016,171018,171020,171022,171024],{"class":326,"line":2384},[324,171005,152509],{"class":867},[324,171007,46076],{"class":5945},[324,171009,13164],{"class":867},[324,171011,147649],{"class":5945},[324,171013,913],{"class":863},[324,171015,34709],{"class":916},[324,171017,13164],{"class":867},[324,171019,152524],{"class":5945},[324,171021,913],{"class":863},[324,171023,944],{"class":916},[324,171025,874],{"class":867},[324,171027,171028],{"class":326,"line":2405},[324,171029,488],{"emptyLinePlaceholder":487},[324,171031,171032],{"class":326,"line":2410},[324,171033,488],{"emptyLinePlaceholder":487},[324,171035,171036,171038,171040],{"class":326,"line":2424},[324,171037,160228],{"class":867},[324,171039,913],{"class":863},[324,171041,153554],{"class":867},[324,171043,171044,171047,171049,171051,171053,171055,171057,171059,171061,171063,171065,171067,171069],{"class":326,"line":2429},[324,171045,171046],{"class":867},"students.append({",[324,171048,63401],{"class":738},[324,171050,52159],{"class":867},[324,171052,150400],{"class":738},[324,171054,13164],{"class":867},[324,171056,69846],{"class":738},[324,171058,52159],{"class":867},[324,171060,1514],{"class":916},[324,171062,13164],{"class":867},[324,171064,151984],{"class":738},[324,171066,52159],{"class":867},[324,171068,1853],{"class":916},[324,171070,165664],{"class":867},[324,171072,171073],{"class":326,"line":2458},[324,171074,171075],{"class":867},"save_students(students)\n",[324,171077,171078,171080,171082,171085],{"class":326,"line":2463},[324,171079,31137],{"class":916},[324,171081,868],{"class":867},[324,171083,171084],{"class":738},"\"保存成功\"",[324,171086,874],{"class":867},[14,171088,171090],{"id":171089},"_814-易错点","8.14 易错点",[192,171092,171093,171097,171103,171108,171115,171122],{},[195,171094,171095,169356],{},[269,171096,1659],{},[195,171098,171099,171100,29107],{},"读写中文要指定 ",[269,171101,171102],{},"encoding=\"utf-8\"",[195,171104,171105,171106,29107],{},"打开文件后要关闭，推荐使用 ",[269,171107,108554],{},[195,171109,171110,171111,171114],{},"读取大文件不要直接 ",[269,171112,171113],{},"read()"," 全部内容。",[195,171116,171117,171118,171121],{},"Windows 写 CSV 时建议加 ",[269,171119,171120],{},"newline=\"\"","，避免空行。",[195,171123,171124],{},"JSON 只能保存基础数据类型，不能直接保存函数、文件对象等。",[14,171126,171128],{"id":171127},"_815-本章练习","8.15 本章练习",[192,171130,171131,171138,171143,171146,171149],{},[195,171132,171133,171134,171137],{},"写入一个 ",[269,171135,171136],{},"students.txt","，每行保存一个学生姓名。",[195,171139,105076,171140,171142],{},[269,171141,171136],{}," 并输出所有学生。",[195,171144,171145],{},"把学生列表保存为 JSON 文件。",[195,171147,171148],{},"从 JSON 文件读取学生数据，计算平均分。",[195,171150,171151,171152,171155,171156,171159],{},"写一个日志函数 ",[269,171153,171154],{},"write_log(message)","，每次调用向 ",[269,171157,171158],{},"app.log"," 追加一行。",[775,171161,171162],{},"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":50,"searchDepth":203,"depth":203,"links":171164},[171165,171166,171170,171171,171177,171178,171179,171180,171181,171182,171183,171184,171185,171186,171187],{"id":168676,"depth":203,"text":168677},{"id":168717,"depth":203,"text":168718,"children":171167},[171168,171169],{"id":168721,"depth":338,"text":168722},{"id":168755,"depth":338,"text":168756},{"id":168869,"depth":203,"text":168870},{"id":168962,"depth":203,"text":168963,"children":171172},[171173,171174,171175,171176],{"id":168966,"depth":338,"text":168967},{"id":169053,"depth":338,"text":169054},{"id":169123,"depth":338,"text":169124},{"id":169217,"depth":338,"text":169218},{"id":169287,"depth":203,"text":169288},{"id":169350,"depth":203,"text":169351},{"id":169511,"depth":203,"text":169512},{"id":169574,"depth":203,"text":169575},{"id":169690,"depth":203,"text":169691},{"id":169900,"depth":203,"text":169901},{"id":170212,"depth":203,"text":170213},{"id":170623,"depth":203,"text":170624},{"id":170841,"depth":203,"text":170842},{"id":171089,"depth":203,"text":171090},{"id":171127,"depth":203,"text":171128},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch8",{"title":168668,"description":791},"wiki\u002F2024-10-10-python教程\u002Fch8-文件操作","TCxYv9FRIlOsuS2LeUSgcbxHSxHOruKUW4ZecWBr6Yo",{"id":171194,"title":171195,"body":171196,"description":791,"extension":792,"meta":173382,"navigation":487,"path":173383,"seo":173384,"stem":173385,"__hash__":173386},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包.md","9. 异常、模块与包",{"type":7,"value":171197,"toc":173349},[171198,171201,171205,171208,171211,171303,171305,171324,171329,171333,171336,171339,171368,171375,171378,171382,171385,171414,171416,171468,171474,171527,171531,171629,171632,171699,171703,171760,171762,171768,171772,171777,171783,171874,171879,171883,171886,171964,171967,172005,172009,172127,172130,172134,172137,172182,172185,172189,172194,172200,172250,172253,172284,172288,172292,172322,172326,172361,172365,172400,172440,172444,172460,172463,172467,172471,172550,172554,172595,172599,172654,172658,172692,172696,172726,172735,172742,172748,172805,172808,172816,172819,172823,172830,172833,172839,172842,172859,172864,172868,172874,172887,172890,172927,172930,172941,172944,172958,172961,172975,172979,172986,173019,173022,173024,173030,173033,173037,173039,173045,173050,173223,173227,173290,173294,173318,173322,173346],[10,171199,171195],{"id":171200},"_9-异常模块与包",[14,171202,171204],{"id":171203},"_91-什么是异常","9.1 什么是异常",[19,171206,171207],{},"异常是程序运行过程中出现的错误。",[19,171209,171210],{},"常见异常：",[1003,171212,171213,171222],{},[1006,171214,171215],{},[1009,171216,171217,171220],{},[1012,171218,171219],{},"异常",[1012,171221,26593],{},[1049,171223,171224,171234,171244,171253,171263,171273,171283,171293],{},[1009,171225,171226,171231],{},[1054,171227,171228],{},[269,171229,171230],{},"NameError",[1054,171232,171233],{},"使用了未定义变量",[1009,171235,171236,171241],{},[1054,171237,171238],{},[269,171239,171240],{},"TypeError",[1054,171242,171243],{},"类型不匹配",[1009,171245,171246,171250],{},[1054,171247,171248],{},[269,171249,155346],{},[1054,171251,171252],{},"值不合法",[1009,171254,171255,171260],{},[1054,171256,171257],{},[269,171258,171259],{},"IndexError",[1054,171261,171262],{},"列表索引越界",[1009,171264,171265,171270],{},[1054,171266,171267],{},[269,171268,171269],{},"KeyError",[1054,171271,171272],{},"字典 key 不存在",[1009,171274,171275,171280],{},[1054,171276,171277],{},[269,171278,171279],{},"FileNotFoundError",[1054,171281,171282],{},"文件不存在",[1009,171284,171285,171290],{},[1054,171286,171287],{},[269,171288,171289],{},"ZeroDivisionError",[1054,171291,171292],{},"除数为 0",[1009,171294,171295,171300],{},[1054,171296,171297],{},[269,171298,171299],{},"ImportError",[1054,171301,171302],{},"导入失败",[19,171304,15864],{},[316,171306,171308],{"className":31100,"code":171307,"language":31102,"meta":50,"style":50},"num = int(\"abc\")\n",[269,171309,171310],{"__ignoreMap":50},[324,171311,171312,171314,171316,171318,171320,171322],{"class":326,"line":327},[324,171313,156299],{"class":867},[324,171315,913],{"class":863},[324,171317,3112],{"class":916},[324,171319,868],{"class":867},[324,171321,156392],{"class":738},[324,171323,874],{"class":867},[19,171325,171326,171327,29107],{},"会触发 ",[269,171328,155346],{},[14,171330,171332],{"id":171331},"_92-为什么要处理异常","9.2 为什么要处理异常",[19,171334,171335],{},"如果不处理异常，程序会直接终止。",[19,171337,171338],{},"例如用户输入年龄：",[316,171340,171342],{"className":31100,"code":171341,"language":31102,"meta":50,"style":50},"age = int(input(\"请输入年龄:\"))\nprint(age)\n",[269,171343,171344,171362],{"__ignoreMap":50},[324,171345,171346,171348,171350,171352,171354,171356,171358,171360],{"class":326,"line":327},[324,171347,147058],{"class":867},[324,171349,913],{"class":863},[324,171351,3112],{"class":916},[324,171353,868],{"class":867},[324,171355,54543],{"class":916},[324,171357,868],{"class":867},[324,171359,152906],{"class":738},[324,171361,31219],{"class":867},[324,171363,171364,171366],{"class":326,"line":203},[324,171365,31137],{"class":916},[324,171367,156273],{"class":867},[19,171369,171370,171371,171374],{},"用户输入 ",[269,171372,171373],{},"abc","，程序就会报错退出。",[19,171376,171377],{},"异常处理可以让程序在出错时给出友好提示，并继续运行。",[14,171379,171381],{"id":171380},"_93-try-except","9.3 try except",[19,171383,171384],{},"基础语法：",[316,171386,171388],{"className":31100,"code":171387,"language":31102,"meta":50,"style":50},"try:\n    可能出错的代码\nexcept:\n    出错后的处理代码\n",[269,171389,171390,171397,171402,171409],{"__ignoreMap":50},[324,171391,171392,171395],{"class":326,"line":327},[324,171393,171394],{"class":863},"try",[324,171396,4468],{"class":867},[324,171398,171399],{"class":326,"line":203},[324,171400,171401],{"class":867},"    可能出错的代码\n",[324,171403,171404,171407],{"class":326,"line":338},[324,171405,171406],{"class":863},"except",[324,171408,4468],{"class":867},[324,171410,171411],{"class":326,"line":344},[324,171412,171413],{"class":867},"    出错后的处理代码\n",[19,171415,15864],{},[316,171417,171419],{"className":31100,"code":171418,"language":31102,"meta":50,"style":50},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept:\n    print(\"年龄必须是数字\")\n",[269,171420,171421,171427,171445,171451,171457],{"__ignoreMap":50},[324,171422,171423,171425],{"class":326,"line":327},[324,171424,171394],{"class":863},[324,171426,4468],{"class":867},[324,171428,171429,171431,171433,171435,171437,171439,171441,171443],{"class":326,"line":203},[324,171430,152898],{"class":867},[324,171432,913],{"class":863},[324,171434,3112],{"class":916},[324,171436,868],{"class":867},[324,171438,54543],{"class":916},[324,171440,868],{"class":867},[324,171442,152906],{"class":738},[324,171444,31219],{"class":867},[324,171446,171447,171449],{"class":326,"line":338},[324,171448,32021],{"class":916},[324,171450,156273],{"class":867},[324,171452,171453,171455],{"class":326,"line":344},[324,171454,171406],{"class":863},[324,171456,4468],{"class":867},[324,171458,171459,171461,171463,171466],{"class":326,"line":484},[324,171460,32021],{"class":916},[324,171462,868],{"class":867},[324,171464,171465],{"class":738},"\"年龄必须是数字\"",[324,171467,874],{"class":867},[19,171469,171470,171471,171473],{},"不建议裸写 ",[269,171472,171406],{},"，最好指定异常类型。",[316,171475,171477],{"className":31100,"code":171476,"language":31102,"meta":50,"style":50},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept ValueError:\n    print(\"年龄必须是数字\")\n",[269,171478,171479,171485,171503,171509,171517],{"__ignoreMap":50},[324,171480,171481,171483],{"class":326,"line":327},[324,171482,171394],{"class":863},[324,171484,4468],{"class":867},[324,171486,171487,171489,171491,171493,171495,171497,171499,171501],{"class":326,"line":203},[324,171488,152898],{"class":867},[324,171490,913],{"class":863},[324,171492,3112],{"class":916},[324,171494,868],{"class":867},[324,171496,54543],{"class":916},[324,171498,868],{"class":867},[324,171500,152906],{"class":738},[324,171502,31219],{"class":867},[324,171504,171505,171507],{"class":326,"line":338},[324,171506,32021],{"class":916},[324,171508,156273],{"class":867},[324,171510,171511,171513,171515],{"class":326,"line":344},[324,171512,171406],{"class":863},[324,171514,152738],{"class":916},[324,171516,4468],{"class":867},[324,171518,171519,171521,171523,171525],{"class":326,"line":484},[324,171520,32021],{"class":916},[324,171522,868],{"class":867},[324,171524,171465],{"class":738},[324,171526,874],{"class":867},[14,171528,171530],{"id":171529},"_94-捕获多个异常","9.4 捕获多个异常",[316,171532,171534],{"className":31100,"code":171533,"language":31102,"meta":50,"style":50},"try:\n    nums = [1, 2, 3]\n    index = int(input(\"请输入索引:\"))\n    print(nums[index])\nexcept ValueError:\n    print(\"索引必须是整数\")\nexcept IndexError:\n    print(\"索引越界\")\n",[269,171535,171536,171542,171563,171583,171590,171598,171609,171618],{"__ignoreMap":50},[324,171537,171538,171540],{"class":326,"line":327},[324,171539,171394],{"class":863},[324,171541,4468],{"class":867},[324,171543,171544,171547,171549,171551,171553,171555,171557,171559,171561],{"class":326,"line":203},[324,171545,171546],{"class":867},"    nums ",[324,171548,913],{"class":863},[324,171550,52948],{"class":867},[324,171552,1082],{"class":916},[324,171554,13164],{"class":867},[324,171556,944],{"class":916},[324,171558,13164],{"class":867},[324,171560,938],{"class":916},[324,171562,33968],{"class":867},[324,171564,171565,171568,171570,171572,171574,171576,171578,171581],{"class":326,"line":338},[324,171566,171567],{"class":867},"    index ",[324,171569,913],{"class":863},[324,171571,3112],{"class":916},[324,171573,868],{"class":867},[324,171575,54543],{"class":916},[324,171577,868],{"class":867},[324,171579,171580],{"class":738},"\"请输入索引:\"",[324,171582,31219],{"class":867},[324,171584,171585,171587],{"class":326,"line":344},[324,171586,32021],{"class":916},[324,171588,171589],{"class":867},"(nums[index])\n",[324,171591,171592,171594,171596],{"class":326,"line":484},[324,171593,171406],{"class":863},[324,171595,152738],{"class":916},[324,171597,4468],{"class":867},[324,171599,171600,171602,171604,171607],{"class":326,"line":491},[324,171601,32021],{"class":916},[324,171603,868],{"class":867},[324,171605,171606],{"class":738},"\"索引必须是整数\"",[324,171608,874],{"class":867},[324,171610,171611,171613,171616],{"class":326,"line":496},[324,171612,171406],{"class":863},[324,171614,171615],{"class":916}," IndexError",[324,171617,4468],{"class":867},[324,171619,171620,171622,171624,171627],{"class":326,"line":502},[324,171621,32021],{"class":916},[324,171623,868],{"class":867},[324,171625,171626],{"class":738},"\"索引越界\"",[324,171628,874],{"class":867},[19,171630,171631],{},"多个异常使用相同处理逻辑：",[316,171633,171635],{"className":31100,"code":171634,"language":31102,"meta":50,"style":50},"try:\n    num = int(input(\"请输入数字:\"))\n    print(10 \u002F num)\nexcept (ValueError, ZeroDivisionError):\n    print(\"输入不合法\")\n",[269,171636,171637,171643,171661,171674,171688],{"__ignoreMap":50},[324,171638,171639,171641],{"class":326,"line":327},[324,171640,171394],{"class":863},[324,171642,4468],{"class":867},[324,171644,171645,171647,171649,171651,171653,171655,171657,171659],{"class":326,"line":203},[324,171646,46315],{"class":867},[324,171648,913],{"class":863},[324,171650,3112],{"class":916},[324,171652,868],{"class":867},[324,171654,54543],{"class":916},[324,171656,868],{"class":867},[324,171658,156308],{"class":738},[324,171660,31219],{"class":867},[324,171662,171663,171665,171667,171669,171671],{"class":326,"line":338},[324,171664,32021],{"class":916},[324,171666,868],{"class":867},[324,171668,1310],{"class":916},[324,171670,156558],{"class":863},[324,171672,171673],{"class":867}," num)\n",[324,171675,171676,171678,171680,171682,171684,171686],{"class":326,"line":344},[324,171677,171406],{"class":863},[324,171679,2389],{"class":867},[324,171681,155346],{"class":916},[324,171683,13164],{"class":867},[324,171685,171289],{"class":916},[324,171687,31508],{"class":867},[324,171689,171690,171692,171694,171697],{"class":326,"line":484},[324,171691,32021],{"class":916},[324,171693,868],{"class":867},[324,171695,171696],{"class":738},"\"输入不合法\"",[324,171698,874],{"class":867},[14,171700,171702],{"id":171701},"_95-获取异常信息","9.5 获取异常信息",[316,171704,171706],{"className":31100,"code":171705,"language":31102,"meta":50,"style":50},"try:\n    num = int(\"abc\")\nexcept ValueError as e:\n    print(f\"出错了:{e}\")\n",[269,171707,171708,171714,171728,171739],{"__ignoreMap":50},[324,171709,171710,171712],{"class":326,"line":327},[324,171711,171394],{"class":863},[324,171713,4468],{"class":867},[324,171715,171716,171718,171720,171722,171724,171726],{"class":326,"line":203},[324,171717,46315],{"class":867},[324,171719,913],{"class":863},[324,171721,3112],{"class":916},[324,171723,868],{"class":867},[324,171725,156392],{"class":738},[324,171727,874],{"class":867},[324,171729,171730,171732,171734,171736],{"class":326,"line":338},[324,171731,171406],{"class":863},[324,171733,152738],{"class":916},[324,171735,65326],{"class":863},[324,171737,171738],{"class":867}," e:\n",[324,171740,171741,171743,171745,171747,171750,171752,171754,171756,171758],{"class":326,"line":344},[324,171742,32021],{"class":916},[324,171744,868],{"class":867},[324,171746,920],{"class":863},[324,171748,171749],{"class":738},"\"出错了:",[324,171751,1760],{"class":916},[324,171753,941],{"class":867},[324,171755,1810],{"class":916},[324,171757,1115],{"class":738},[324,171759,874],{"class":867},[19,171761,146969],{},[316,171763,171766],{"className":171764,"code":171765,"language":5916,"meta":50},[5914],"出错了:invalid literal for int() with base 10: 'abc'\n",[269,171767,171765],{"__ignoreMap":50},[14,171769,171771],{"id":171770},"_96-else和finally","9.6 else和finally",[19,171773,171774,171776],{},[269,171775,2432],{},"：没有异常时执行。",[19,171778,171779,171782],{},[269,171780,171781],{},"finally","：无论是否异常都会执行。",[316,171784,171786],{"className":31100,"code":171785,"language":31102,"meta":50,"style":50},"try:\n    num = int(input(\"请输入数字:\"))\nexcept ValueError:\n    print(\"输入错误\")\nelse:\n    print(f\"输入正确:{num}\")\nfinally:\n    print(\"程序结束\")\n",[269,171787,171788,171794,171812,171820,171830,171836,171857,171863],{"__ignoreMap":50},[324,171789,171790,171792],{"class":326,"line":327},[324,171791,171394],{"class":863},[324,171793,4468],{"class":867},[324,171795,171796,171798,171800,171802,171804,171806,171808,171810],{"class":326,"line":203},[324,171797,46315],{"class":867},[324,171799,913],{"class":863},[324,171801,3112],{"class":916},[324,171803,868],{"class":867},[324,171805,54543],{"class":916},[324,171807,868],{"class":867},[324,171809,156308],{"class":738},[324,171811,31219],{"class":867},[324,171813,171814,171816,171818],{"class":326,"line":338},[324,171815,171406],{"class":863},[324,171817,152738],{"class":916},[324,171819,4468],{"class":867},[324,171821,171822,171824,171826,171828],{"class":326,"line":344},[324,171823,32021],{"class":916},[324,171825,868],{"class":867},[324,171827,153726],{"class":738},[324,171829,874],{"class":867},[324,171831,171832,171834],{"class":326,"line":484},[324,171833,2432],{"class":863},[324,171835,4468],{"class":867},[324,171837,171838,171840,171842,171844,171847,171849,171851,171853,171855],{"class":326,"line":491},[324,171839,32021],{"class":916},[324,171841,868],{"class":867},[324,171843,920],{"class":863},[324,171845,171846],{"class":738},"\"输入正确:",[324,171848,1760],{"class":916},[324,171850,2396],{"class":867},[324,171852,1810],{"class":916},[324,171854,1115],{"class":738},[324,171856,874],{"class":867},[324,171858,171859,171861],{"class":326,"line":496},[324,171860,171781],{"class":863},[324,171862,4468],{"class":867},[324,171864,171865,171867,171869,171872],{"class":326,"line":502},[324,171866,32021],{"class":916},[324,171868,868],{"class":867},[324,171870,171871],{"class":738},"\"程序结束\"",[324,171873,874],{"class":867},[19,171875,171876,171878],{},[269,171877,171781],{}," 常用于释放资源，如关闭文件、关闭网络连接。",[14,171880,171882],{"id":171881},"_97-抛出异常","9.7 抛出异常",[19,171884,171885],{},"程序可以主动抛出异常。",[316,171887,171889],{"className":31100,"code":171888,"language":31102,"meta":50,"style":50},"def set_age(age):\n    if age \u003C 0:\n        raise ValueError(\"年龄不能为负数\")\n    print(f\"年龄:{age}\")\n\n\nset_age(-1)\n",[269,171890,171891,171900,171912,171925,171945,171949,171953],{"__ignoreMap":50},[324,171892,171893,171895,171898],{"class":326,"line":327},[324,171894,32669],{"class":863},[324,171896,171897],{"class":734}," set_age",[324,171899,161927],{"class":867},[324,171901,171902,171904,171906,171908,171910],{"class":326,"line":203},[324,171903,3830],{"class":863},[324,171905,16436],{"class":867},[324,171907,1774],{"class":863},[324,171909,4822],{"class":916},[324,171911,4468],{"class":867},[324,171913,171914,171916,171918,171920,171923],{"class":326,"line":338},[324,171915,104153],{"class":863},[324,171917,152738],{"class":916},[324,171919,868],{"class":867},[324,171921,171922],{"class":738},"\"年龄不能为负数\"",[324,171924,874],{"class":867},[324,171926,171927,171929,171931,171933,171935,171937,171939,171941,171943],{"class":326,"line":344},[324,171928,32021],{"class":916},[324,171930,868],{"class":867},[324,171932,920],{"class":863},[324,171934,162495],{"class":738},[324,171936,1760],{"class":916},[324,171938,70943],{"class":867},[324,171940,1810],{"class":916},[324,171942,1115],{"class":738},[324,171944,874],{"class":867},[324,171946,171947],{"class":326,"line":484},[324,171948,488],{"emptyLinePlaceholder":487},[324,171950,171951],{"class":326,"line":491},[324,171952,488],{"emptyLinePlaceholder":487},[324,171954,171955,171958,171960,171962],{"class":326,"line":496},[324,171956,171957],{"class":867},"set_age(",[324,171959,1396],{"class":863},[324,171961,1082],{"class":916},[324,171963,874],{"class":867},[19,171965,171966],{},"调用者可以捕获：",[316,171968,171970],{"className":31100,"code":171969,"language":31102,"meta":50,"style":50},"try:\n    set_age(-1)\nexcept ValueError as e:\n    print(e)\n",[269,171971,171972,171978,171989,171999],{"__ignoreMap":50},[324,171973,171974,171976],{"class":326,"line":327},[324,171975,171394],{"class":863},[324,171977,4468],{"class":867},[324,171979,171980,171983,171985,171987],{"class":326,"line":203},[324,171981,171982],{"class":867},"    set_age(",[324,171984,1396],{"class":863},[324,171986,1082],{"class":916},[324,171988,874],{"class":867},[324,171990,171991,171993,171995,171997],{"class":326,"line":338},[324,171992,171406],{"class":863},[324,171994,152738],{"class":916},[324,171996,65326],{"class":863},[324,171998,171738],{"class":867},[324,172000,172001,172003],{"class":326,"line":344},[324,172002,32021],{"class":916},[324,172004,67721],{"class":867},[14,172006,172008],{"id":172007},"_98-自定义异常","9.8 自定义异常",[316,172010,172012],{"className":31100,"code":172011,"language":31102,"meta":50,"style":50},"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",[269,172013,172014,172028,172032,172036,172040,172048,172058,172069,172079,172083,172087,172093,172110,172121],{"__ignoreMap":50},[324,172015,172016,172018,172021,172023,172026],{"class":326,"line":327},[324,172017,15423],{"class":863},[324,172019,172020],{"class":734}," BalanceNotEnoughError",[324,172022,868],{"class":867},[324,172024,172025],{"class":916},"Exception",[324,172027,31508],{"class":867},[324,172029,172030],{"class":326,"line":203},[324,172031,150049],{"class":863},[324,172033,172034],{"class":326,"line":338},[324,172035,488],{"emptyLinePlaceholder":487},[324,172037,172038],{"class":326,"line":344},[324,172039,488],{"emptyLinePlaceholder":487},[324,172041,172042,172044,172046],{"class":326,"line":484},[324,172043,32669],{"class":863},[324,172045,150698],{"class":734},[324,172047,163324],{"class":867},[324,172049,172050,172052,172054,172056],{"class":326,"line":491},[324,172051,3830],{"class":863},[324,172053,150654],{"class":867},[324,172055,1824],{"class":863},[324,172057,163101],{"class":867},[324,172059,172060,172062,172065,172067],{"class":326,"line":496},[324,172061,104153],{"class":863},[324,172063,172064],{"class":867}," BalanceNotEnoughError(",[324,172066,150749],{"class":738},[324,172068,874],{"class":867},[324,172070,172071,172073,172075,172077],{"class":326,"line":502},[324,172072,4819],{"class":863},[324,172074,163331],{"class":867},[324,172076,1396],{"class":863},[324,172078,150687],{"class":867},[324,172080,172081],{"class":326,"line":508},[324,172082,488],{"emptyLinePlaceholder":487},[324,172084,172085],{"class":326,"line":514},[324,172086,488],{"emptyLinePlaceholder":487},[324,172088,172089,172091],{"class":326,"line":2343},[324,172090,171394],{"class":863},[324,172092,4468],{"class":867},[324,172094,172095,172097,172099,172102,172104,172106,172108],{"class":326,"line":2348},[324,172096,163002],{"class":867},[324,172098,913],{"class":863},[324,172100,172101],{"class":867}," withdraw(",[324,172103,1175],{"class":916},[324,172105,13164],{"class":867},[324,172107,2453],{"class":916},[324,172109,874],{"class":867},[324,172111,172112,172114,172117,172119],{"class":326,"line":2354},[324,172113,171406],{"class":863},[324,172115,172116],{"class":867}," BalanceNotEnoughError ",[324,172118,32105],{"class":863},[324,172120,171738],{"class":867},[324,172122,172123,172125],{"class":326,"line":2359},[324,172124,32021],{"class":916},[324,172126,67721],{"class":867},[19,172128,172129],{},"入门阶段大多数情况使用内置异常即可。",[14,172131,172133],{"id":172132},"_99-traceback","9.9 traceback",[19,172135,172136],{},"调试时可以输出完整异常堆栈。",[316,172138,172140],{"className":31100,"code":172139,"language":31102,"meta":50,"style":50},"import traceback\n\ntry:\n    int(\"abc\")\nexcept ValueError:\n    traceback.print_exc()\n",[269,172141,172142,172149,172153,172159,172169,172177],{"__ignoreMap":50},[324,172143,172144,172146],{"class":326,"line":327},[324,172145,31114],{"class":863},[324,172147,172148],{"class":867}," traceback\n",[324,172150,172151],{"class":326,"line":203},[324,172152,488],{"emptyLinePlaceholder":487},[324,172154,172155,172157],{"class":326,"line":338},[324,172156,171394],{"class":863},[324,172158,4468],{"class":867},[324,172160,172161,172163,172165,172167],{"class":326,"line":344},[324,172162,2715],{"class":916},[324,172164,868],{"class":867},[324,172166,156392],{"class":738},[324,172168,874],{"class":867},[324,172170,172171,172173,172175],{"class":326,"line":484},[324,172172,171406],{"class":863},[324,172174,152738],{"class":916},[324,172176,4468],{"class":867},[324,172178,172179],{"class":326,"line":491},[324,172180,172181],{"class":867},"    traceback.print_exc()\n",[19,172183,172184],{},"日志系统中常把异常堆栈记录到文件。",[14,172186,172188],{"id":172187},"_910-什么是模块","9.10 什么是模块",[19,172190,172191,172192,126495],{},"模块就是一个 ",[269,172193,146864],{},[19,172195,172196,172197,272],{},"例如创建 ",[269,172198,172199],{},"my_math.py",[316,172201,172203],{"className":31100,"code":172202,"language":31102,"meta":50,"style":50},"def add(a, b):\n    return a + b\n\n\ndef sub(a, b):\n    return a - b\n",[269,172204,172205,172213,172223,172227,172231,172240],{"__ignoreMap":50},[324,172206,172207,172209,172211],{"class":326,"line":327},[324,172208,32669],{"class":863},[324,172210,5938],{"class":734},[324,172212,151605],{"class":867},[324,172214,172215,172217,172219,172221],{"class":326,"line":203},[324,172216,4819],{"class":863},[324,172218,11598],{"class":867},[324,172220,1345],{"class":863},[324,172222,151616],{"class":867},[324,172224,172225],{"class":326,"line":338},[324,172226,488],{"emptyLinePlaceholder":487},[324,172228,172229],{"class":326,"line":344},[324,172230,488],{"emptyLinePlaceholder":487},[324,172232,172233,172235,172238],{"class":326,"line":484},[324,172234,32669],{"class":863},[324,172236,172237],{"class":734}," sub",[324,172239,151605],{"class":867},[324,172241,172242,172244,172246,172248],{"class":326,"line":491},[324,172243,4819],{"class":863},[324,172245,11598],{"class":867},[324,172247,1396],{"class":863},[324,172249,151616],{"class":867},[19,172251,172252],{},"在另一个文件中导入：",[316,172254,172256],{"className":31100,"code":172255,"language":31102,"meta":50,"style":50},"import my_math\n\nprint(my_math.add(1, 2))\n",[269,172257,172258,172265,172269],{"__ignoreMap":50},[324,172259,172260,172262],{"class":326,"line":327},[324,172261,31114],{"class":863},[324,172263,172264],{"class":867}," my_math\n",[324,172266,172267],{"class":326,"line":203},[324,172268,488],{"emptyLinePlaceholder":487},[324,172270,172271,172273,172276,172278,172280,172282],{"class":326,"line":338},[324,172272,31137],{"class":916},[324,172274,172275],{"class":867},"(my_math.add(",[324,172277,1082],{"class":916},[324,172279,13164],{"class":867},[324,172281,944],{"class":916},[324,172283,31219],{"class":867},[14,172285,172287],{"id":172286},"_911-import导入","9.11 import导入",[35,172289,172291],{"id":172290},"_9111-导入模块","9.11.1 导入模块",[316,172293,172295],{"className":31100,"code":172294,"language":31102,"meta":50,"style":50},"import random\n\nprint(random.randint(1, 10))\n",[269,172296,172297,172303,172307],{"__ignoreMap":50},[324,172298,172299,172301],{"class":326,"line":327},[324,172300,31114],{"class":863},[324,172302,46050],{"class":867},[324,172304,172305],{"class":326,"line":203},[324,172306,488],{"emptyLinePlaceholder":487},[324,172308,172309,172311,172314,172316,172318,172320],{"class":326,"line":338},[324,172310,31137],{"class":916},[324,172312,172313],{"class":867},"(random.randint(",[324,172315,1082],{"class":916},[324,172317,13164],{"class":867},[324,172319,1310],{"class":916},[324,172321,31219],{"class":867},[35,172323,172325],{"id":172324},"_9112-导入指定内容","9.11.2 导入指定内容",[316,172327,172329],{"className":31100,"code":172328,"language":31102,"meta":50,"style":50},"from random import randint\n\nprint(randint(1, 10))\n",[269,172330,172331,172342,172346],{"__ignoreMap":50},[324,172332,172333,172335,172337,172339],{"class":326,"line":327},[324,172334,31459],{"class":863},[324,172336,58518],{"class":867},[324,172338,31114],{"class":863},[324,172340,172341],{"class":867}," randint\n",[324,172343,172344],{"class":326,"line":203},[324,172345,488],{"emptyLinePlaceholder":487},[324,172347,172348,172350,172353,172355,172357,172359],{"class":326,"line":338},[324,172349,31137],{"class":916},[324,172351,172352],{"class":867},"(randint(",[324,172354,1082],{"class":916},[324,172356,13164],{"class":867},[324,172358,1310],{"class":916},[324,172360,31219],{"class":867},[35,172362,172364],{"id":172363},"_9113-起别名","9.11.3 起别名",[316,172366,172368],{"className":31100,"code":172367,"language":31102,"meta":50,"style":50},"import random as rd\n\nprint(rd.randint(1, 10))\n",[269,172369,172370,172381,172385],{"__ignoreMap":50},[324,172371,172372,172374,172376,172378],{"class":326,"line":327},[324,172373,31114],{"class":863},[324,172375,58518],{"class":867},[324,172377,32105],{"class":863},[324,172379,172380],{"class":867}," rd\n",[324,172382,172383],{"class":326,"line":203},[324,172384,488],{"emptyLinePlaceholder":487},[324,172386,172387,172389,172392,172394,172396,172398],{"class":326,"line":338},[324,172388,31137],{"class":916},[324,172390,172391],{"class":867},"(rd.randint(",[324,172393,1082],{"class":916},[324,172395,13164],{"class":867},[324,172397,1310],{"class":916},[324,172399,31219],{"class":867},[316,172401,172403],{"className":31100,"code":172402,"language":31102,"meta":50,"style":50},"from random import randint as rint\n\nprint(rint(1, 10))\n",[269,172404,172405,172421,172425],{"__ignoreMap":50},[324,172406,172407,172409,172411,172413,172416,172418],{"class":326,"line":327},[324,172408,31459],{"class":863},[324,172410,58518],{"class":867},[324,172412,31114],{"class":863},[324,172414,172415],{"class":867}," randint ",[324,172417,32105],{"class":863},[324,172419,172420],{"class":867}," rint\n",[324,172422,172423],{"class":326,"line":203},[324,172424,488],{"emptyLinePlaceholder":487},[324,172426,172427,172429,172432,172434,172436,172438],{"class":326,"line":338},[324,172428,31137],{"class":916},[324,172430,172431],{"class":867},"(rint(",[324,172433,1082],{"class":916},[324,172435,13164],{"class":867},[324,172437,1310],{"class":916},[324,172439,31219],{"class":867},[35,172441,172443],{"id":172442},"_9114-不推荐星号导入","9.11.4 不推荐星号导入",[316,172445,172447],{"className":31100,"code":172446,"language":31102,"meta":50,"style":50},"from random import *\n",[269,172448,172449],{"__ignoreMap":50},[324,172450,172451,172453,172455,172457],{"class":326,"line":327},[324,172452,31459],{"class":863},[324,172454,58518],{"class":867},[324,172456,31114],{"class":863},[324,172458,172459],{"class":863}," *\n",[19,172461,172462],{},"这种写法会让当前文件多出很多名字，容易冲突，不利于阅读。",[14,172464,172466],{"id":172465},"_912-常用内置模块","9.12 常用内置模块",[35,172468,172470],{"id":172469},"_9121-random","9.12.1 random",[316,172472,172474],{"className":31100,"code":172473,"language":31102,"meta":50,"style":50},"import random\n\nprint(random.randint(1, 10))\nprint(random.choice([\"小明\", \"小红\", \"小刚\"]))\nprint(random.sample([1, 2, 3, 4, 5], 2))\n",[269,172475,172476,172482,172486,172500,172519],{"__ignoreMap":50},[324,172477,172478,172480],{"class":326,"line":327},[324,172479,31114],{"class":863},[324,172481,46050],{"class":867},[324,172483,172484],{"class":326,"line":203},[324,172485,488],{"emptyLinePlaceholder":487},[324,172487,172488,172490,172492,172494,172496,172498],{"class":326,"line":338},[324,172489,31137],{"class":916},[324,172491,172313],{"class":867},[324,172493,1082],{"class":916},[324,172495,13164],{"class":867},[324,172497,1310],{"class":916},[324,172499,31219],{"class":867},[324,172501,172502,172504,172507,172509,172511,172513,172515,172517],{"class":326,"line":344},[324,172503,31137],{"class":916},[324,172505,172506],{"class":867},"(random.choice([",[324,172508,150400],{"class":738},[324,172510,13164],{"class":867},[324,172512,151448],{"class":738},[324,172514,13164],{"class":867},[324,172516,160243],{"class":738},[324,172518,33865],{"class":867},[324,172520,172521,172523,172526,172528,172530,172532,172534,172536,172538,172540,172542,172544,172546,172548],{"class":326,"line":484},[324,172522,31137],{"class":916},[324,172524,172525],{"class":867},"(random.sample([",[324,172527,1082],{"class":916},[324,172529,13164],{"class":867},[324,172531,944],{"class":916},[324,172533,13164],{"class":867},[324,172535,938],{"class":916},[324,172537,13164],{"class":867},[324,172539,1157],{"class":916},[324,172541,13164],{"class":867},[324,172543,1183],{"class":916},[324,172545,112923],{"class":867},[324,172547,944],{"class":916},[324,172549,31219],{"class":867},[35,172551,172553],{"id":172552},"_9122-time","9.12.2 time",[316,172555,172557],{"className":31100,"code":172556,"language":31102,"meta":50,"style":50},"import time\n\nprint(time.time())\ntime.sleep(1)\nprint(\"1秒后执行\")\n",[269,172558,172559,172565,172569,172576,172584],{"__ignoreMap":50},[324,172560,172561,172563],{"class":326,"line":327},[324,172562,31114],{"class":863},[324,172564,32551],{"class":867},[324,172566,172567],{"class":326,"line":203},[324,172568,488],{"emptyLinePlaceholder":487},[324,172570,172571,172573],{"class":326,"line":338},[324,172572,31137],{"class":916},[324,172574,172575],{"class":867},"(time.time())\n",[324,172577,172578,172580,172582],{"class":326,"line":344},[324,172579,95793],{"class":867},[324,172581,1082],{"class":916},[324,172583,874],{"class":867},[324,172585,172586,172588,172590,172593],{"class":326,"line":484},[324,172587,31137],{"class":916},[324,172589,868],{"class":867},[324,172591,172592],{"class":738},"\"1秒后执行\"",[324,172594,874],{"class":867},[35,172596,172598],{"id":172597},"_9123-datetime","9.12.3 datetime",[316,172600,172602],{"className":31100,"code":172601,"language":31102,"meta":50,"style":50},"from datetime import datetime\n\nnow = datetime.now()\nprint(now)\nprint(now.strftime(\"%Y-%m-%d %H:%M:%S\"))\n",[269,172603,172604,172616,172620,172630,172637],{"__ignoreMap":50},[324,172605,172606,172608,172611,172613],{"class":326,"line":327},[324,172607,31459],{"class":863},[324,172609,172610],{"class":867}," datetime ",[324,172612,31114],{"class":863},[324,172614,172615],{"class":867}," datetime\n",[324,172617,172618],{"class":326,"line":203},[324,172619,488],{"emptyLinePlaceholder":487},[324,172621,172622,172625,172627],{"class":326,"line":338},[324,172623,172624],{"class":867},"now ",[324,172626,913],{"class":863},[324,172628,172629],{"class":867}," datetime.now()\n",[324,172631,172632,172634],{"class":326,"line":344},[324,172633,31137],{"class":916},[324,172635,172636],{"class":867},"(now)\n",[324,172638,172639,172641,172644,172647,172649,172652],{"class":326,"line":484},[324,172640,31137],{"class":916},[324,172642,172643],{"class":867},"(now.strftime(",[324,172645,172646],{"class":738},"\"%Y-%m-",[324,172648,157203],{"class":916},[324,172650,172651],{"class":738}," %H:%M:%S\"",[324,172653,31219],{"class":867},[35,172655,172657],{"id":172656},"_9124-os","9.12.4 os",[316,172659,172661],{"className":31100,"code":172660,"language":31102,"meta":50,"style":50},"import os\n\nprint(os.getcwd())\nprint(os.listdir(\".\"))\n",[269,172662,172663,172669,172673,172680],{"__ignoreMap":50},[324,172664,172665,172667],{"class":326,"line":327},[324,172666,31114],{"class":863},[324,172668,46027],{"class":867},[324,172670,172671],{"class":326,"line":203},[324,172672,488],{"emptyLinePlaceholder":487},[324,172674,172675,172677],{"class":326,"line":338},[324,172676,31137],{"class":916},[324,172678,172679],{"class":867},"(os.getcwd())\n",[324,172681,172682,172684,172687,172690],{"class":326,"line":344},[324,172683,31137],{"class":916},[324,172685,172686],{"class":867},"(os.listdir(",[324,172688,172689],{"class":738},"\".\"",[324,172691,31219],{"class":867},[35,172693,172695],{"id":172694},"_9125-sys","9.12.5 sys",[316,172697,172699],{"className":31100,"code":172698,"language":31102,"meta":50,"style":50},"import sys\n\nprint(sys.version)\nprint(sys.path)\n",[269,172700,172701,172708,172712,172719],{"__ignoreMap":50},[324,172702,172703,172705],{"class":326,"line":327},[324,172704,31114],{"class":863},[324,172706,172707],{"class":867}," sys\n",[324,172709,172710],{"class":326,"line":203},[324,172711,488],{"emptyLinePlaceholder":487},[324,172713,172714,172716],{"class":326,"line":338},[324,172715,31137],{"class":916},[324,172717,172718],{"class":867},"(sys.version)\n",[324,172720,172721,172723],{"class":326,"line":344},[324,172722,31137],{"class":916},[324,172724,172725],{"class":867},"(sys.path)\n",[14,172727,172729,172730,172732,172733,1115],{"id":172728},"_913-if-name-main","9.13 if ",[116,172731,80532],{}," == \"",[116,172734,102779],{},[19,172736,172737,172738,172741],{},"模块被直接运行和被导入时，",[269,172739,172740],{},"__name__"," 的值不同。",[19,172743,172744,172745,272],{},"创建 ",[269,172746,172747],{},"my_module.py",[316,172749,172751],{"className":31100,"code":172750,"language":31102,"meta":50,"style":50},"def add(a, b):\n    return a + b\n\n\nif __name__ == \"__main__\":\n    print(add(1, 2))\n",[269,172752,172753,172761,172771,172775,172779,172791],{"__ignoreMap":50},[324,172754,172755,172757,172759],{"class":326,"line":327},[324,172756,32669],{"class":863},[324,172758,5938],{"class":734},[324,172760,151605],{"class":867},[324,172762,172763,172765,172767,172769],{"class":326,"line":203},[324,172764,4819],{"class":863},[324,172766,11598],{"class":867},[324,172768,1345],{"class":863},[324,172770,151616],{"class":867},[324,172772,172773],{"class":326,"line":338},[324,172774,488],{"emptyLinePlaceholder":487},[324,172776,172777],{"class":326,"line":344},[324,172778,488],{"emptyLinePlaceholder":487},[324,172780,172781,172783,172785,172787,172789],{"class":326,"line":484},[324,172782,2262],{"class":863},[324,172784,31942],{"class":916},[324,172786,102280],{"class":863},[324,172788,102283],{"class":738},[324,172790,4468],{"class":867},[324,172792,172793,172795,172797,172799,172801,172803],{"class":326,"line":491},[324,172794,32021],{"class":916},[324,172796,167112],{"class":867},[324,172798,1082],{"class":916},[324,172800,13164],{"class":867},[324,172802,944],{"class":916},[324,172804,31219],{"class":867},[19,172806,172807],{},"作用：",[192,172809,172810,172813],{},[195,172811,172812],{},"直接运行该文件时，执行测试代码。",[195,172814,172815],{},"被其他文件导入时，不执行测试代码。",[19,172817,172818],{},"这是写模块时很常用的习惯。",[14,172820,172822],{"id":172821},"_914-包","9.14 包",[19,172824,172825,172826,172829],{},"包是包含 ",[269,172827,172828],{},"__init__.py"," 的目录，用于组织多个模块。",[19,172831,172832],{},"目录结构：",[316,172834,172837],{"className":172835,"code":172836,"language":5916,"meta":50},[5914],"project\u002F\n  main.py\n  utils\u002F\n    __init__.py\n    file_utils.py\n    string_utils.py\n",[269,172838,172836],{"__ignoreMap":50},[19,172840,172841],{},"导入：",[316,172843,172845],{"className":31100,"code":172844,"language":31102,"meta":50,"style":50},"from utils.file_utils import read_file\n",[269,172846,172847],{"__ignoreMap":50},[324,172848,172849,172851,172854,172856],{"class":326,"line":327},[324,172850,31459],{"class":863},[324,172852,172853],{"class":867}," utils.file_utils ",[324,172855,31114],{"class":863},[324,172857,172858],{"class":867}," read_file\n",[19,172860,172861,172863],{},[269,172862,172828],{}," 可以为空，也可以写包初始化逻辑。",[14,172865,172867],{"id":172866},"_915-第三方包","9.15 第三方包",[19,172869,172870,172871,172873],{},"第三方包通过 ",[269,172872,24558],{}," 安装。",[316,172875,172877],{"className":24549,"code":172876,"language":24551,"meta":50,"style":50},"pip install requests\n",[269,172878,172879],{"__ignoreMap":50},[324,172880,172881,172883,172885],{"class":326,"line":327},[324,172882,24558],{"class":734},[324,172884,760],{"class":738},[324,172886,146610],{"class":738},[19,172888,172889],{},"使用：",[316,172891,172893],{"className":31100,"code":172892,"language":31102,"meta":50,"style":50},"import requests\n\nresponse = requests.get(\"https:\u002F\u002Fwww.example.com\")\nprint(response.status_code)\n",[269,172894,172895,172901,172905,172920],{"__ignoreMap":50},[324,172896,172897,172899],{"class":326,"line":327},[324,172898,31114],{"class":863},[324,172900,146610],{"class":867},[324,172902,172903],{"class":326,"line":203},[324,172904,488],{"emptyLinePlaceholder":487},[324,172906,172907,172910,172912,172915,172918],{"class":326,"line":338},[324,172908,172909],{"class":867},"response ",[324,172911,913],{"class":863},[324,172913,172914],{"class":867}," requests.get(",[324,172916,172917],{"class":738},"\"https:\u002F\u002Fwww.example.com\"",[324,172919,874],{"class":867},[324,172921,172922,172924],{"class":326,"line":344},[324,172923,31137],{"class":916},[324,172925,172926],{"class":867},"(response.status_code)\n",[19,172928,172929],{},"查看已安装包：",[316,172931,172933],{"className":24549,"code":172932,"language":24551,"meta":50,"style":50},"pip list\n",[269,172934,172935],{"__ignoreMap":50},[324,172936,172937,172939],{"class":326,"line":327},[324,172938,24558],{"class":734},[324,172940,119467],{"class":738},[19,172942,172943],{},"导出项目依赖：",[316,172945,172946],{"className":24549,"code":146805,"language":24551,"meta":50,"style":50},[269,172947,172948],{"__ignoreMap":50},[324,172949,172950,172952,172954,172956],{"class":326,"line":327},[324,172951,24558],{"class":734},[324,172953,146814],{"class":738},[324,172955,26946],{"class":863},[324,172957,146819],{"class":738},[19,172959,172960],{},"安装项目依赖：",[316,172962,172963],{"className":24549,"code":146825,"language":24551,"meta":50,"style":50},[269,172964,172965],{"__ignoreMap":50},[324,172966,172967,172969,172971,172973],{"class":326,"line":327},[324,172968,24558],{"class":734},[324,172970,760],{"class":738},[324,172972,120151],{"class":916},[324,172974,146819],{"class":738},[14,172976,172978],{"id":172977},"_916-模块搜索路径","9.16 模块搜索路径",[19,172980,172981,172982,172985],{},"Python 导入模块时会在 ",[269,172983,172984],{},"sys.path"," 中查找。",[316,172987,172989],{"className":31100,"code":172988,"language":31102,"meta":50,"style":50},"import sys\n\nfor path in sys.path:\n    print(path)\n",[269,172990,172991,172997,173001,173013],{"__ignoreMap":50},[324,172992,172993,172995],{"class":326,"line":327},[324,172994,31114],{"class":863},[324,172996,172707],{"class":867},[324,172998,172999],{"class":326,"line":203},[324,173000,488],{"emptyLinePlaceholder":487},[324,173002,173003,173005,173008,173010],{"class":326,"line":338},[324,173004,3754],{"class":863},[324,173006,173007],{"class":867}," path ",[324,173009,26767],{"class":863},[324,173011,173012],{"class":867}," sys.path:\n",[324,173014,173015,173017],{"class":326,"line":344},[324,173016,32021],{"class":916},[324,173018,169741],{"class":867},[19,173020,173021],{},"优先查找当前运行目录，所以文件名不要和标准库同名。",[19,173023,158135],{},[316,173025,173028],{"className":173026,"code":173027,"language":5916,"meta":50},[5914],"random.py\njson.py\ntime.py\n",[269,173029,173027],{"__ignoreMap":50},[19,173031,173032],{},"这些文件名可能导致导入异常。",[14,173034,173036],{"id":173035},"_917-小案例工具包拆分","9.17 小案例：工具包拆分",[19,173038,172832],{},[316,173040,173043],{"className":173041,"code":173042,"language":5916,"meta":50},[5914],"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",[269,173044,173042],{"__ignoreMap":50},[19,173046,173047,272],{},[269,173048,173049],{},"utils\u002Ffile_utils.py",[316,173051,173053],{"className":31100,"code":173052,"language":31102,"meta":50,"style":50},"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",[269,173054,173055,173061,173071,173075,173079,173089,173099,173107,173113,173117,173144,173154,173158,173162,173172,173198],{"__ignoreMap":50},[324,173056,173057,173059],{"class":326,"line":327},[324,173058,31114],{"class":863},[324,173060,147603],{"class":867},[324,173062,173063,173065,173067,173069],{"class":326,"line":203},[324,173064,31459],{"class":863},[324,173066,109032],{"class":867},[324,173068,31114],{"class":863},[324,173070,109037],{"class":867},[324,173072,173073],{"class":326,"line":338},[324,173074,488],{"emptyLinePlaceholder":487},[324,173076,173077],{"class":326,"line":344},[324,173078,488],{"emptyLinePlaceholder":487},[324,173080,173081,173083,173086],{"class":326,"line":484},[324,173082,32669],{"class":863},[324,173084,173085],{"class":734}," read_json",[324,173087,173088],{"class":867},"(path):\n",[324,173090,173091,173094,173096],{"class":326,"line":491},[324,173092,173093],{"class":867},"    path ",[324,173095,913],{"class":863},[324,173097,173098],{"class":867}," Path(path)\n",[324,173100,173101,173103,173105],{"class":326,"line":496},[324,173102,3830],{"class":863},[324,173104,39652],{"class":863},[324,173106,169822],{"class":867},[324,173108,173109,173111],{"class":326,"line":502},[324,173110,15481],{"class":863},[324,173112,52560],{"class":867},[324,173114,173115],{"class":326,"line":508},[324,173116,488],{"emptyLinePlaceholder":487},[324,173118,173119,173121,173123,173126,173128,173130,173132,173134,173136,173138,173140,173142],{"class":326,"line":514},[324,173120,34900],{"class":863},[324,173122,147303],{"class":916},[324,173124,173125],{"class":867},"(path, ",[324,173127,147313],{"class":738},[324,173129,13164],{"class":867},[324,173131,147318],{"class":5945},[324,173133,913],{"class":863},[324,173135,147323],{"class":738},[324,173137,14443],{"class":867},[324,173139,32105],{"class":863},[324,173141,148665],{"class":5945},[324,173143,4468],{"class":867},[324,173145,173146,173148,173150,173152],{"class":326,"line":2343},[324,173147,15481],{"class":863},[324,173149,148676],{"class":867},[324,173151,46076],{"class":5945},[324,173153,874],{"class":867},[324,173155,173156],{"class":326,"line":2348},[324,173157,488],{"emptyLinePlaceholder":487},[324,173159,173160],{"class":326,"line":2354},[324,173161,488],{"emptyLinePlaceholder":487},[324,173163,173164,173166,173169],{"class":326,"line":2359},[324,173165,32669],{"class":863},[324,173167,173168],{"class":734}," write_json",[324,173170,173171],{"class":867},"(path, data):\n",[324,173173,173174,173176,173178,173180,173182,173184,173186,173188,173190,173192,173194,173196],{"class":326,"line":2373},[324,173175,34900],{"class":863},[324,173177,147303],{"class":916},[324,173179,173125],{"class":867},[324,173181,152488],{"class":738},[324,173183,13164],{"class":867},[324,173185,147318],{"class":5945},[324,173187,913],{"class":863},[324,173189,147323],{"class":738},[324,173191,14443],{"class":867},[324,173193,32105],{"class":863},[324,173195,148665],{"class":5945},[324,173197,4468],{"class":867},[324,173199,173200,173203,173205,173207,173209,173211,173213,173215,173217,173219,173221],{"class":326,"line":2378},[324,173201,173202],{"class":867},"        json.dump(data, ",[324,173204,46076],{"class":5945},[324,173206,13164],{"class":867},[324,173208,147649],{"class":5945},[324,173210,913],{"class":863},[324,173212,34709],{"class":916},[324,173214,13164],{"class":867},[324,173216,152524],{"class":5945},[324,173218,913],{"class":863},[324,173220,944],{"class":916},[324,173222,874],{"class":867},[19,173224,173225,272],{},[269,173226,155119],{},[316,173228,173230],{"className":31100,"code":173229,"language":31102,"meta":50,"style":50},"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",[269,173231,173232,173243,173247,173260,173280],{"__ignoreMap":50},[324,173233,173234,173236,173238,173240],{"class":326,"line":327},[324,173235,31459],{"class":863},[324,173237,172853],{"class":867},[324,173239,31114],{"class":863},[324,173241,173242],{"class":867}," read_json, write_json\n",[324,173244,173245],{"class":326,"line":203},[324,173246,488],{"emptyLinePlaceholder":487},[324,173248,173249,173251,173253,173256,173258],{"class":326,"line":338},[324,173250,160228],{"class":867},[324,173252,913],{"class":863},[324,173254,173255],{"class":867}," read_json(",[324,173257,152343],{"class":738},[324,173259,874],{"class":867},[324,173261,173262,173264,173266,173268,173270,173272,173274,173276,173278],{"class":326,"line":344},[324,173263,171046],{"class":867},[324,173265,63401],{"class":738},[324,173267,52159],{"class":867},[324,173269,150400],{"class":738},[324,173271,13164],{"class":867},[324,173273,151984],{"class":738},[324,173275,52159],{"class":867},[324,173277,1853],{"class":916},[324,173279,165664],{"class":867},[324,173281,173282,173285,173287],{"class":326,"line":484},[324,173283,173284],{"class":867},"write_json(",[324,173286,152343],{"class":738},[324,173288,173289],{"class":867},", students)\n",[14,173291,173293],{"id":173292},"_918-易错点","9.18 易错点",[192,173295,173296,173299,173304,173309,173312,173315],{},[195,173297,173298],{},"异常处理不要把所有错误都吞掉，至少要输出提示。",[195,173300,173301,173302,29107],{},"能指定异常类型就不要裸写 ",[269,173303,171406],{},[195,173305,173306,173308],{},[269,173307,171781],{}," 无论是否出错都会执行。",[195,173310,173311],{},"模块文件名不要和标准库重名。",[195,173313,173314],{},"导入自己写的模块时，要注意运行目录。",[195,173316,173317],{},"第三方包要安装到当前解释器或虚拟环境中。",[14,173319,173321],{"id":173320},"_919-本章练习","9.19 本章练习",[192,173323,173324,173327,173330,173336,173343],{},[195,173325,173326],{},"写一个安全输入整数函数，输入错误时提示并重新输入。",[195,173328,173329],{},"写函数读取文件，如果文件不存在则返回空字符串。",[195,173331,172744,173332,173335],{},[269,173333,173334],{},"math_utils.py","，实现加减乘除函数并导入使用。",[195,173337,173338,173339,173342],{},"创建一个 ",[269,173340,173341],{},"utils"," 包，把 JSON 读写函数放进去。",[195,173344,173345],{},"写一个程序，捕获除零异常和输入格式异常。",[775,173347,173348],{},"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":50,"searchDepth":203,"depth":203,"links":173350},[173351,173352,173353,173354,173355,173356,173357,173358,173359,173360,173361,173367,173374,173376,173377,173378,173379,173380,173381],{"id":171203,"depth":203,"text":171204},{"id":171331,"depth":203,"text":171332},{"id":171380,"depth":203,"text":171381},{"id":171529,"depth":203,"text":171530},{"id":171701,"depth":203,"text":171702},{"id":171770,"depth":203,"text":171771},{"id":171881,"depth":203,"text":171882},{"id":172007,"depth":203,"text":172008},{"id":172132,"depth":203,"text":172133},{"id":172187,"depth":203,"text":172188},{"id":172286,"depth":203,"text":172287,"children":173362},[173363,173364,173365,173366],{"id":172290,"depth":338,"text":172291},{"id":172324,"depth":338,"text":172325},{"id":172363,"depth":338,"text":172364},{"id":172442,"depth":338,"text":172443},{"id":172465,"depth":203,"text":172466,"children":173368},[173369,173370,173371,173372,173373],{"id":172469,"depth":338,"text":172470},{"id":172552,"depth":338,"text":172553},{"id":172597,"depth":338,"text":172598},{"id":172656,"depth":338,"text":172657},{"id":172694,"depth":338,"text":172695},{"id":172728,"depth":203,"text":173375},"9.13 if name == \"main\"",{"id":172821,"depth":203,"text":172822},{"id":172866,"depth":203,"text":172867},{"id":172977,"depth":203,"text":172978},{"id":173035,"depth":203,"text":173036},{"id":173292,"depth":203,"text":173293},{"id":173320,"depth":203,"text":173321},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch9",{"title":171195,"description":791},"wiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包","8DoHUbhjhl_mmNCItpRjdgW7aUS0tCEWZltQGpr-eIk",{"id":173388,"title":173389,"body":173390,"description":173553,"extension":792,"meta":173554,"navigation":487,"path":173555,"seo":173556,"stem":173557,"__hash__":173558},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Findex.md","Python教程",{"type":7,"value":173391,"toc":173548},[173392,173395,173398,173401,173412,173414,173488,173491,173494,173497,173500,173503,173506,173509,173512,173515,173518],[10,173393,173389],{"id":173394},"python教程",[19,173396,173397],{},"这份笔记参考黑马程序员 Python 快速入门课程的学习路线整理，内容按“先能写、再写对、最后能做小项目”的顺序展开。笔记不是课程逐字稿，而是把知识点、代码模板、易错点和练习整理成适合复习的版本。(用于回顾复习，初版)",[19,173399,173400],{},"建议学习环境：",[192,173402,173403,173406,173409],{},[195,173404,173405],{},"Python 版本：Python 3.10 及以上。",[195,173407,173408],{},"编辑器：PyCharm、VS Code 或系统终端均可。",[195,173410,173411],{},"学习方式：每章先看概念，再手敲代码，最后完成练习。",[14,173413,117799],{"id":117799},[192,173415,173416,173422,173428,173434,173440,173446,173452,173458,173464,173470,173476,173482],{},[195,173417,173418],{},[25,173419,173421],{"href":173420},".\u002Fch1-Python","Python环境与第一个程序",[195,173423,173424],{},[25,173425,173427],{"href":173426},".\u002Fch2","基础语法、变量与字符串",[195,173429,173430],{},[25,173431,173433],{"href":173432},".\u002Fch3","判断语句",[195,173435,173436],{},[25,173437,173439],{"href":173438},".\u002Fch4","循环语句",[195,173441,173442],{},[25,173443,173445],{"href":173444},".\u002Fch5","函数基础",[195,173447,173448],{},[25,173449,173451],{"href":173450},".\u002Fch6","数据容器",[195,173453,173454],{},[25,173455,173457],{"href":173456},".\u002Fch7","函数进阶",[195,173459,173460],{},[25,173461,173463],{"href":173462},".\u002Fch8","文件操作",[195,173465,173466],{},[25,173467,173469],{"href":173468},".\u002Fch9","异常、模块与包",[195,173471,173472],{},[25,173473,173475],{"href":173474},".\u002Fch10-JSONpyecharts","JSON与pyecharts折线图",[195,173477,173478],{},[25,173479,173481],{"href":173480},".\u002Fch11","面向对象基础",[195,173483,173484],{},[25,173485,173487],{"href":173486},".\u002Fch12","综合案例与复习路线",[14,173489,173490],{"id":173490},"学习路线",[19,173492,173493],{},"第一阶段：能运行程序。",[19,173495,173496],{},"重点是安装 Python、理解解释器、掌握变量、输入输出、字符串格式化、判断和循环。完成这一阶段后，应该能写出猜数字、成绩等级、九九乘法表、简单菜单程序。",[19,173498,173499],{},"第二阶段：能组织数据。",[19,173501,173502],{},"重点是列表、元组、字符串、集合、字典、切片、遍历、通用函数和推导式。完成这一阶段后，应该能处理一批学生信息、订单数据、文本统计数据。",[19,173504,173505],{},"第三阶段：能封装逻辑。",[19,173507,173508],{},"重点是函数定义、参数、返回值、作用域、lambda、函数作为参数传递。完成这一阶段后，应该开始把重复代码拆成函数，而不是把所有逻辑写在一个文件里。",[19,173510,173511],{},"第四阶段：能做小项目。",[19,173513,173514],{},"重点是文件读写、JSON、异常处理、模块包、第三方库、面向对象和可视化。完成这一阶段后，应该能写学生管理系统、账单统计、疫情或销售数据可视化这类入门项目。",[14,173516,173517],{"id":173517},"参考资料",[192,173519,173520,173527,173534,173541],{},[195,173521,173522,173523],{},"黑马程序员 Python 入门教程推荐：",[25,173524,173525],{"href":173525,"rel":173526},"https:\u002F\u002Fwww.itheima.com\u002Fnews\u002F20230425\u002F174034.html",[29],[195,173528,173529,173530],{},"Python 官方中文教程：",[25,173531,173532],{"href":173532,"rel":173533},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Ftutorial\u002Findex.html",[29],[195,173535,173536,173537],{},"Python 标准库文档：",[25,173538,173539],{"href":173539,"rel":173540},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Flibrary\u002Findex.html",[29],[195,173542,173543,173544],{},"pyecharts 文档：",[25,173545,173546],{"href":173546,"rel":173547},"https:\u002F\u002Fpyecharts.org\u002F",[29],{"title":50,"searchDepth":203,"depth":203,"links":173549},[173550,173551,173552],{"id":117799,"depth":203,"text":117799},{"id":173490,"depth":203,"text":173490},{"id":173517,"depth":203,"text":173517},"参考黑马程序员 Python 快速入门路线整理的零基础到综合案例笔记",{"category":24105},"\u002Fwiki\u002F2024-10-10-python",{"title":173389,"description":173553},"wiki\u002F2024-10-10-python教程\u002Findex","yzEa8npVBj3xNU8x-4oSrDG7SfzITAVZlXDa1SwCYiA",1781331462170]