[{"data":1,"prerenderedAt":173584},["ShallowReactive",2],{"wiki-\u002Fwiki\u002F2025-11-10-docker\u002Fch2-an-zhuang-docker":3,"wiki-doc-nav":793},{"id":4,"title":5,"body":6,"description":62,"extension":787,"meta":788,"navigation":176,"path":789,"seo":790,"stem":791,"__hash__":792},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch2-安装Docker.md","2.安装Docker",{"type":7,"value":8,"toc":782},"minimark",[9,13,18,22,25,33,39,44,53,56,126,129,190,193,286,289,328,332,344,357,364,367,448,451,501,504,527,531,538,541,557,563,566,583,589,592,608,623,629,649,655,658,670,676,679,693,699,702,722,728,731,734,738,741,744,747,754,757,760,763,768,773,778],[10,11,5],"h1",{"id":12},"_2安装docker",[14,15,17],"h3",{"id":16},"_21linux安装docker-engine推荐","2.1.Linux安装Docker Engine(推荐)",[19,20,21],"p",{},"Linux只需要安装Docker Engine就可以，不要安装docker desktop，那玩意是专门给Mac和Windows用的。",[19,23,24],{},"Linux跑docker性能损失很低，而Windows和MacOS跑docker损失相对于大一些。",[19,26,27],{},[28,29,30],"a",{"href":30,"rel":31},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002F",[32],"nofollow",[19,34,35],{},[28,36,37],{"href":37,"rel":38},"https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fhelp\u002Fdocker-ce\u002F",[32],[40,41,43],"h4",{"id":42},"_211ubuntuapt","2.1.1.Ubuntu（APT）",[19,45,46,47,52],{},"以下内容根据 ",[28,48,51],{"href":49,"rel":50},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Fubuntu\u002F",[32],"官方文档"," 修改而来。",[19,54,55],{},"如果你过去安装过 docker，先删掉：",[57,58,63],"pre",{"className":59,"code":60,"language":61,"meta":62,"style":62},"language-bash shiki shiki-themes github-light github-dark","for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done\n","bash","",[64,65,66],"code",{"__ignoreMap":62},[67,68,71,75,79,82,86,89,92,95,98,101,104,107,110,114,117,120,123],"span",{"class":69,"line":70},"line",1,[67,72,74],{"class":73},"szBVR","for",[67,76,78],{"class":77},"sVt8B"," pkg ",[67,80,81],{"class":73},"in",[67,83,85],{"class":84},"sZZnC"," docker.io",[67,87,88],{"class":84}," docker-doc",[67,90,91],{"class":84}," docker-compose",[67,93,94],{"class":84}," docker-compose-v2",[67,96,97],{"class":84}," podman-docker",[67,99,100],{"class":84}," containerd",[67,102,103],{"class":84}," runc",[67,105,106],{"class":77},"; ",[67,108,109],{"class":73},"do",[67,111,113],{"class":112},"sScJk"," sudo",[67,115,116],{"class":84}," apt-get",[67,118,119],{"class":84}," remove",[67,121,122],{"class":77}," $pkg; ",[67,124,125],{"class":73},"done\n",[19,127,128],{},"首先安装依赖和GPG：",[57,130,134],{"className":131,"code":132,"language":133,"meta":62,"style":62},"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",[64,135,136,141,147,153,159,165,171,178,184],{"__ignoreMap":62},[67,137,138],{"class":69,"line":70},[67,139,140],{},"# Add Docker's official GPG key:\n",[67,142,144],{"class":69,"line":143},2,[67,145,146],{},"sudo apt-get update\n",[67,148,150],{"class":69,"line":149},3,[67,151,152],{},"sudo apt-get install ca-certificates curl\n",[67,154,156],{"class":69,"line":155},4,[67,157,158],{},"sudo install -m 0755 -d \u002Fetc\u002Fapt\u002Fkeyrings\n",[67,160,162],{"class":69,"line":161},5,[67,163,164],{},"sudo curl -fsSL https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Fubuntu\u002Fgpg | sudo gpg --dearmor -o \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[67,166,168],{"class":69,"line":167},6,[67,169,170],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.asc\n",[67,172,174],{"class":69,"line":173},7,[67,175,177],{"emptyLinePlaceholder":176},true,"\n",[67,179,181],{"class":69,"line":180},8,[67,182,183],{},"# 如果上面这行报错就弄下面这行\n",[67,185,187],{"class":69,"line":186},9,[67,188,189],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[19,191,192],{},"信任 Docker 的 GPG 公钥并添加仓库：",[57,194,196],{"className":59,"code":195,"language":61,"meta":62,"style":62},"# 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",[64,197,198,204,213,230,269],{"__ignoreMap":62},[67,199,200],{"class":69,"line":70},[67,201,203],{"class":202},"sJ8bj","# Add the repository to Apt sources:\n",[67,205,206,210],{"class":69,"line":143},[67,207,209],{"class":208},"sj4cs","echo",[67,211,212],{"class":208}," \\\n",[67,214,215,218,221,224,227],{"class":69,"line":149},[67,216,217],{"class":84},"  \"deb [arch=$(",[67,219,220],{"class":112},"dpkg",[67,222,223],{"class":208}," --print-architecture",[67,225,226],{"class":84},") signed-by=\u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg] https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce\u002Flinux\u002Fubuntu ",[67,228,229],{"class":208},"\\\n",[67,231,232,235,238,241,244,247,249,252,255,258,261,264,267],{"class":69,"line":155},[67,233,234],{"class":84},"  \"",[67,236,237],{"class":77},"$(",[67,239,240],{"class":208},".",[67,242,243],{"class":84}," \u002Fetc\u002Fos-release",[67,245,246],{"class":77}," && ",[67,248,209],{"class":208},[67,250,251],{"class":84}," \"",[67,253,254],{"class":77},"$VERSION_CODENAME",[67,256,257],{"class":84},"\"",[67,259,260],{"class":77},")",[67,262,263],{"class":84},"\" stable\"",[67,265,266],{"class":73}," |",[67,268,212],{"class":208},[67,270,271,274,277,280,283],{"class":69,"line":161},[67,272,273],{"class":112},"  sudo",[67,275,276],{"class":84}," tee",[67,278,279],{"class":84}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fdocker.list",[67,281,282],{"class":73}," >",[67,284,285],{"class":84}," \u002Fdev\u002Fnull\n",[19,287,288],{},"最后安装",[57,290,292],{"className":59,"code":291,"language":61,"meta":62,"style":62},"sudo apt-get update\nsudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[64,293,294,304],{"__ignoreMap":62},[67,295,296,299,301],{"class":69,"line":70},[67,297,298],{"class":112},"sudo",[67,300,116],{"class":84},[67,302,303],{"class":84}," update\n",[67,305,306,308,310,313,316,319,322,325],{"class":69,"line":143},[67,307,298],{"class":112},[67,309,116],{"class":84},[67,311,312],{"class":84}," install",[67,314,315],{"class":84}," docker-ce",[67,317,318],{"class":84}," docker-ce-cli",[67,320,321],{"class":84}," containerd.io",[67,323,324],{"class":84}," docker-buildx-plugin",[67,326,327],{"class":84}," docker-compose-plugin\n",[40,329,331],{"id":330},"_212fedoradnf5","2.1.2.Fedora（DNF5）",[19,333,334,335,339,340,343],{},"查看自己自己包管理工具版本（dnf是 ",[336,337,338],"strong",{},"Fedora \u002F RHEL \u002F CentOS"," 系列 Linux 系统中的 ",[336,341,342],{},"包管理器（包管理工具）"," ，用来安装、卸载、更新和管理软件包）",[57,345,347],{"className":59,"code":346,"language":61,"meta":62,"style":62},"dnf --version\n",[64,348,349],{"__ignoreMap":62},[67,350,351,354],{"class":69,"line":70},[67,352,353],{"class":112},"dnf",[67,355,356],{"class":208}," --version\n",[19,358,46,359,363],{},[28,360,51],{"href":361,"rel":362},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Ffedora\u002F",[32]," 修改而来。(官方教程还是DNF4,太老了，请看下方的教程)",[19,365,366],{},"如果你之前安装过 docker，请先删掉",[57,368,370],{"className":59,"code":369,"language":61,"meta":62,"style":62},"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",[64,371,372,386,393,400,407,414,421,428,435,442],{"__ignoreMap":62},[67,373,374,376,379,381,384],{"class":69,"line":70},[67,375,298],{"class":112},[67,377,378],{"class":84}," dnf",[67,380,119],{"class":84},[67,382,383],{"class":84}," docker",[67,385,212],{"class":208},[67,387,388,391],{"class":69,"line":143},[67,389,390],{"class":84},"                  docker-client",[67,392,212],{"class":208},[67,394,395,398],{"class":69,"line":149},[67,396,397],{"class":84},"                  docker-client-latest",[67,399,212],{"class":208},[67,401,402,405],{"class":69,"line":155},[67,403,404],{"class":84},"                  docker-common",[67,406,212],{"class":208},[67,408,409,412],{"class":69,"line":161},[67,410,411],{"class":84},"                  docker-latest",[67,413,212],{"class":208},[67,415,416,419],{"class":69,"line":167},[67,417,418],{"class":84},"                  docker-latest-logrotate",[67,420,212],{"class":208},[67,422,423,426],{"class":69,"line":173},[67,424,425],{"class":84},"                  docker-logrotate",[67,427,212],{"class":208},[67,429,430,433],{"class":69,"line":180},[67,431,432],{"class":84},"                  docker-selinux",[67,434,212],{"class":208},[67,436,437,440],{"class":69,"line":186},[67,438,439],{"class":84},"                  docker-engine-selinux",[67,441,212],{"class":208},[67,443,445],{"class":69,"line":444},10,[67,446,447],{"class":84},"                  docker-engine\n",[19,449,450],{},"安装依赖，下载 repo 文件，并把软件仓库地址替换为镜像站：",[57,452,454],{"className":59,"code":453,"language":61,"meta":62,"style":62},"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",[64,455,456,470,485],{"__ignoreMap":62},[67,457,458,460,462,465,467],{"class":69,"line":70},[67,459,298],{"class":112},[67,461,378],{"class":84},[67,463,464],{"class":208}," -y",[67,466,312],{"class":84},[67,468,469],{"class":84}," dnf-plugins-core\n",[67,471,472,474,476,479,482],{"class":69,"line":143},[67,473,298],{"class":112},[67,475,378],{"class":84},[67,477,478],{"class":84}," config-manager",[67,480,481],{"class":84}," addrepo",[67,483,484],{"class":208}," --from-repofile=https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Ffedora\u002Fdocker-ce.repo\n",[67,486,487,489,492,495,498],{"class":69,"line":149},[67,488,298],{"class":112},[67,490,491],{"class":84}," sed",[67,493,494],{"class":208}," -i",[67,496,497],{"class":84}," 's+https:\u002F\u002Fdownload.docker.com+https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce+'",[67,499,500],{"class":84}," \u002Fetc\u002Fyum.repos.d\u002Fdocker-ce.repo\n",[19,502,503],{},"最后安装：",[57,505,507],{"className":59,"code":506,"language":61,"meta":62,"style":62},"sudo dnf install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[64,508,509],{"__ignoreMap":62},[67,510,511,513,515,517,519,521,523,525],{"class":69,"line":70},[67,512,298],{"class":112},[67,514,378],{"class":84},[67,516,312],{"class":84},[67,518,315],{"class":84},[67,520,318],{"class":84},[67,522,321],{"class":84},[67,524,324],{"class":84},[67,526,327],{"class":84},[14,528,530],{"id":529},"_22配置环境","2.2.配置环境",[40,532,534,537],{"id":533},"_221检查-docker-服务状态",[336,535,536],{},"2.2.1.检查 Docker 服务状态"," ：",[19,539,540],{},"在 Linux 上，你可以通过以下命令检查 Docker 服务的状态：",[57,542,544],{"className":59,"code":543,"language":61,"meta":62,"style":62},"systemctl status docker\n",[64,545,546],{"__ignoreMap":62},[67,547,548,551,554],{"class":69,"line":70},[67,549,550],{"class":112},"systemctl",[67,552,553],{"class":84}," status",[67,555,556],{"class":84}," docker\n",[40,558,560,537],{"id":559},"_222启动-docker-服务",[336,561,562],{},"2.2.2.启动 Docker 服务",[19,564,565],{},"如果服务没有运行，可以使用以下命令启动 Docker 服务：",[57,567,569],{"className":59,"code":568,"language":61,"meta":62,"style":62},"sudo systemctl start docker\n",[64,570,571],{"__ignoreMap":62},[67,572,573,575,578,581],{"class":69,"line":70},[67,574,298],{"class":112},[67,576,577],{"class":84}," systemctl",[67,579,580],{"class":84}," start",[67,582,556],{"class":84},[40,584,586,537],{"id":585},"_223设置-docker-开机自启",[336,587,588],{},"2.2.3.设置 Docker 开机自启",[19,590,591],{},"如果你希望 Docker 在每次启动时自动运行，可以启用开机自启：",[57,593,595],{"className":59,"code":594,"language":61,"meta":62,"style":62},"sudo systemctl enable docker\n",[64,596,597],{"__ignoreMap":62},[67,598,599,601,603,606],{"class":69,"line":70},[67,600,298],{"class":112},[67,602,577],{"class":84},[67,604,605],{"class":84}," enable",[67,607,556],{"class":84},[40,609,611,614,615,614,620,537],{"id":610},"_224将用户添加到-docker-组",[336,612,613],{},"2.2.4.将用户添加到"," ",[336,616,617],{},[64,618,619],{},"docker",[336,621,622],{},"组",[19,624,625,626,628],{},"使用以下命令将当前用户添加到 ",[64,627,619],{}," 组：",[57,630,632],{"className":59,"code":631,"language":61,"meta":62,"style":62},"sudo usermod -aG docker $USER\n",[64,633,634],{"__ignoreMap":62},[67,635,636,638,641,644,646],{"class":69,"line":70},[67,637,298],{"class":112},[67,639,640],{"class":84}," usermod",[67,642,643],{"class":208}," -aG",[67,645,383],{"class":84},[67,647,648],{"class":77}," $USER\n",[40,650,652,537],{"id":651},"_225退出并重新登录",[336,653,654],{},"2.2.5.退出并重新登录",[19,656,657],{},"执行完上述命令后，你需要退出当前会话并重新登录，或者运行以下命令使更改生效：",[57,659,661],{"className":59,"code":660,"language":61,"meta":62,"style":62},"newgrp docker\n",[64,662,663],{"__ignoreMap":62},[67,664,665,668],{"class":69,"line":70},[67,666,667],{"class":112},"newgrp",[67,669,556],{"class":84},[40,671,673,537],{"id":672},"_226重新启动-docker-服务如果需要",[336,674,675],{},"2.2.6.重新启动 Docker 服务（如果需要）",[19,677,678],{},"确保 Docker 服务正在运行，可以使用以下命令：",[57,680,681],{"className":59,"code":568,"language":61,"meta":62,"style":62},[64,682,683],{"__ignoreMap":62},[67,684,685,687,689,691],{"class":69,"line":70},[67,686,298],{"class":112},[67,688,577],{"class":84},[67,690,580],{"class":84},[67,692,556],{"class":84},[40,694,696,537],{"id":695},"_227重启电脑后检查-docker-服务状态",[336,697,698],{},"2.2.7.重启电脑后检查 Docker 服务状态",[19,700,701],{},"先重启电脑，接着你可以通过以下命令检查 Docker 服务的状态，看看是否正常：",[57,703,705],{"className":59,"code":704,"language":61,"meta":62,"style":62},"sudo reboot\nsystemctl status docker\n",[64,706,707,714],{"__ignoreMap":62},[67,708,709,711],{"class":69,"line":70},[67,710,298],{"class":112},[67,712,713],{"class":84}," reboot\n",[67,715,716,718,720],{"class":69,"line":143},[67,717,550],{"class":112},[67,719,553],{"class":84},[67,721,556],{"class":84},[19,723,724],{},[725,726],"img",{"alt":62,"src":727},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-001.png",[19,729,730],{},"第三行显示enabled说明开机自启动成功",[19,732,733],{},"按q退出",[14,735,737],{"id":736},"_23安装docker-desktopwinmac","2.3.安装Docker Desktop（Win，Mac）",[19,739,740],{},"优先使用linux来使用docker是比较好的",[19,742,743],{},"(Docker Desktop在Windows和MacOS使用的是虚拟机，性能有损失，在这俩系统上可以用，但是你需要接受这些性能损失。在Windows上性能损失和WSL2的损失几乎一样，因为Windows的docker desktop基于wsl2)",[19,745,746],{},"(Docker Desktop在Linux上只是Docker Engine的一个GUI管理工具，依然默认使用Docker Engine开启容器，所以依然几乎没有损耗，讨厌用命令行的可以考虑使用)",[19,748,749,750],{},"官方下载安装:",[28,751,752],{"href":752,"rel":753},"https:\u002F\u002Fwww.docker.com\u002F",[32],[19,755,756],{},"Windows的Docker显卡直通与USB直通:",[19,758,759],{},"在Windows上想Nvidia显卡直通的话，需要先去DockerDesktop设置里开启WSL2支持并勾选一个wsl2的发行版，比如Ubuntu22.04，紧接着，需要进入wsl2的Ubuntu22.04中安装NVIDIA Container Toolkit，教程在下方。",[19,761,762],{},"在Windows的Docker上想要USB直通需要先让wsl2直通该usb，再在docker run命令将该设备添加到docker。(如果把wsl2所有设备全挂载到docker了，那么只需要让usb直通wsl2)",[19,764,765],{},[725,766],{"alt":62,"src":767},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-002.png",[19,769,770],{},[725,771],{"alt":62,"src":772},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-003.png",[19,774,775],{},[725,776],{"alt":62,"src":777},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-004.png",[779,780,781],"style",{},"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":62,"searchDepth":143,"depth":143,"links":783},[784,785,786],{"id":16,"depth":149,"text":17},{"id":529,"depth":149,"text":530},{"id":736,"depth":149,"text":737},"md",{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch2-docker",{"title":5,"description":62},"wiki\u002F2025-11-10-Docker\u002Fch2-安装Docker","CcH--l5LuaypKBoO7AJJUKqaK8NHmo0d-iudiZdasMo",[794,5881,6989,8409,11397,12748,14237,15325,24087,24100,24695,24721,24845,25086,25151,25169,25182,25229,25352,25520,25719,25896,26101,26237,26332,26369,26382,26692,27261,27969,27990,29010,30641,30792,30805,30817,31118,50930,50945,50962,50995,53867,77215,93360,93381,93494,93615,94385,95048,95409,95447,95553,95653,95696,95722,95783,97437,97538,97563,98054,98554,99634,99917,100659,101161,101173,103189,104853,106356,108054,109971,111890,113912,117382,117814,118277,119026,121970,122318,122340,122696,126003,126015,126418,126441,126588,126755,126960,127261,127818,128475,130406,132004,132653,134147,135578,136813,138507,140259,142669,142785,143720,143931,144816,146051,146279,146292,147447,149859,152227,155548,158025,159669,161446,163459,166511,168691,171218,173412],{"id":795,"title":796,"body":797,"description":62,"extension":787,"meta":5876,"navigation":176,"path":5877,"seo":5878,"stem":5879,"__hash__":5880},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch1-基本认识.md","1.基础入门",{"type":7,"value":798,"toc":5848},[799,802,807,810,814,827,831,835,838,841,844,847,850,878,882,885,888,891,894,945,949,967,969,983,986,994,997,1855,1862,1879,1883,1969,1973,1979,2065,2069,2107,2111,2175,2179,2183,2189,2200,2204,2209,2213,2218,2222,2227,2231,2235,2240,2510,2515,2653,2658,2914,2917,2925,2929,2934,3037,3040,3345,3354,3455,3458,3461,3464,3467,3727,3732,3871,3874,4053,4056,4184,4187,4339,4343,4348,4351,4362,4370,4373,4480,4484,4488,4493,4543,4548,4553,4577,4582,4635,4638,4643,4820,4825,5109,5114,5511,5515,5520,5577,5582,5590,5593,5733,5736,5845],[10,800,796],{"id":801},"_1基础入门",[803,804,806],"h2",{"id":805},"_11注释","1.1注释",[19,808,809],{},"\u002F\u002F或者\u002F* *\u002F",[803,811,813],{"id":812},"_12命名","1.2命名",[815,816,817,821,824],"ol",{},[818,819,820],"li",{},"字母数字下划线",[818,822,823],{},"开头必须是字母或_",[818,825,826],{},"不能使用关键词",[803,828,830],{"id":829},"_13数据类型","1.3数据类型",[14,832,834],{"id":833},"_131整形","1.3.1整形",[19,836,837],{},"short 短整形 2",[19,839,840],{},"int 整形 4",[19,842,843],{},"long 长整形 win4 linux32位4 linux64位8",[19,845,846],{},"long long 长长整形 8",[19,848,849],{},"利用sizeof可以求数据类型占用的内存空间大小",[57,851,855],{"className":852,"code":853,"language":854,"meta":62,"style":62},"language-c++ shiki shiki-themes github-light github-dark","sizeof(int)\nsizeof(num)\n","c++",[64,856,857,871],{"__ignoreMap":62},[67,858,859,862,865,868],{"class":69,"line":70},[67,860,861],{"class":73},"sizeof",[67,863,864],{"class":77},"(",[67,866,867],{"class":73},"int",[67,869,870],{"class":77},")\n",[67,872,873,875],{"class":69,"line":143},[67,874,861],{"class":73},[67,876,877],{"class":77},"(num)\n",[14,879,881],{"id":880},"_132浮点型","1.3.2浮点型",[19,883,884],{},"float 单精度 4节 7位有效数字",[19,886,887],{},"double 双精度 8节 15-16有效数字",[19,889,890],{},"默认情况下，输出一个小数，会显示6位有效数字",[19,892,893],{},"注意点：",[57,895,897],{"className":852,"code":896,"language":854,"meta":62,"style":62},"float f1=3.14f; \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\nfloat f2=3e2; \u002F\u002F科学记数法\n",[64,898,899,922],{"__ignoreMap":62},[67,900,901,904,907,910,913,916,919],{"class":69,"line":70},[67,902,903],{"class":73},"float",[67,905,906],{"class":77}," f1",[67,908,909],{"class":73},"=",[67,911,912],{"class":208},"3.14",[67,914,915],{"class":73},"f",[67,917,918],{"class":77},";",[67,920,921],{"class":202}," \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\n",[67,923,924,926,929,931,934,937,940,942],{"class":69,"line":143},[67,925,903],{"class":73},[67,927,928],{"class":77}," f2",[67,930,909],{"class":73},[67,932,933],{"class":208},"3",[67,935,936],{"class":73},"e",[67,938,939],{"class":208},"2",[67,941,918],{"class":77},[67,943,944],{"class":202}," \u002F\u002F科学记数法\n",[14,946,948],{"id":947},"_133字符型","1.3.3字符型",[57,950,952],{"className":852,"code":951,"language":854,"meta":62,"style":62},"char ch='a'\n",[64,953,954],{"__ignoreMap":62},[67,955,956,959,962,964],{"class":69,"line":70},[67,957,958],{"class":73},"char",[67,960,961],{"class":77}," ch",[67,963,909],{"class":73},[67,965,966],{"class":84},"'a'\n",[19,968,893],{},[815,970,971,974,977,980],{},[818,972,973],{},"在显示字符型变量时，只能单引号，双引号x",[818,975,976],{},"单引号内只能一个字符，不能字符串",[818,978,979],{},"c和c++字符型变量只占用一个字符",[818,981,982],{},"字符型变量并不是把字符本身放到内存中存储，而是将对应的ASCII编码放入到存储单元",[19,984,985],{},"ASCII码大致由以下两部分组成：",[815,987,988,991],{},[818,989,990],{},"ASCII非打印控制字符：ASCII表上的数字0-31分配给了控制字符，用于控制像打印机等一些外围设备",[818,992,993],{},"ASCII打印字符：数字32-126分配给了能在键盘上找到的字符，当查看或打印文档时就会出现（65A；97a）",[19,995,996],{},"ASCII码表格：",[998,999,1000,1043],"table",{},[1001,1002,1003],"thead",{},[1004,1005,1006,1013,1018,1022,1027,1031,1035,1039],"tr",{},[1007,1008,1009,1012],"th",{},[336,1010,1011],{},"ASCII","值",[1007,1014,1015],{},[336,1016,1017],{},"控制字符",[1007,1019,1020,1012],{},[336,1021,1011],{},[1007,1023,1024],{},[336,1025,1026],{},"字符",[1007,1028,1029,1012],{},[336,1030,1011],{},[1007,1032,1033],{},[336,1034,1026],{},[1007,1036,1037,1012],{},[336,1038,1011],{},[1007,1040,1041],{},[336,1042,1026],{},[1044,1045,1046,1073,1098,1122,1147,1173,1198,1223,1249,1274,1299,1325,1351,1376,1402,1427,1453,1477,1502,1527,1552,1577,1602,1627,1652,1677,1702,1728,1753,1778,1803,1829],"tbody",{},[1004,1047,1048,1052,1055,1058,1061,1064,1067,1070],{},[1049,1050,1051],"td",{},"0",[1049,1053,1054],{},"NUT",[1049,1056,1057],{},"32",[1049,1059,1060],{},"(space)",[1049,1062,1063],{},"64",[1049,1065,1066],{},"@",[1049,1068,1069],{},"96",[1049,1071,1072],{},"、",[1004,1074,1075,1078,1081,1084,1087,1090,1093,1096],{},[1049,1076,1077],{},"1",[1049,1079,1080],{},"SOH",[1049,1082,1083],{},"33",[1049,1085,1086],{},"!",[1049,1088,1089],{},"65",[1049,1091,1092],{},"A",[1049,1094,1095],{},"97",[1049,1097,28],{},[1004,1099,1100,1102,1105,1108,1110,1113,1116,1119],{},[1049,1101,939],{},[1049,1103,1104],{},"STX",[1049,1106,1107],{},"34",[1049,1109,257],{},[1049,1111,1112],{},"66",[1049,1114,1115],{},"B",[1049,1117,1118],{},"98",[1049,1120,1121],{},"b",[1004,1123,1124,1126,1129,1132,1135,1138,1141,1144],{},[1049,1125,933],{},[1049,1127,1128],{},"ETX",[1049,1130,1131],{},"35",[1049,1133,1134],{},"#",[1049,1136,1137],{},"67",[1049,1139,1140],{},"C",[1049,1142,1143],{},"99",[1049,1145,1146],{},"c",[1004,1148,1149,1152,1155,1158,1161,1164,1167,1170],{},[1049,1150,1151],{},"4",[1049,1153,1154],{},"EOT",[1049,1156,1157],{},"36",[1049,1159,1160],{},"$",[1049,1162,1163],{},"68",[1049,1165,1166],{},"D",[1049,1168,1169],{},"100",[1049,1171,1172],{},"d",[1004,1174,1175,1178,1181,1184,1187,1190,1193,1196],{},[1049,1176,1177],{},"5",[1049,1179,1180],{},"ENQ",[1049,1182,1183],{},"37",[1049,1185,1186],{},"%",[1049,1188,1189],{},"69",[1049,1191,1192],{},"E",[1049,1194,1195],{},"101",[1049,1197,936],{},[1004,1199,1200,1203,1206,1209,1212,1215,1218,1221],{},[1049,1201,1202],{},"6",[1049,1204,1205],{},"ACK",[1049,1207,1208],{},"38",[1049,1210,1211],{},"&",[1049,1213,1214],{},"70",[1049,1216,1217],{},"F",[1049,1219,1220],{},"102",[1049,1222,915],{},[1004,1224,1225,1228,1231,1234,1237,1240,1243,1246],{},[1049,1226,1227],{},"7",[1049,1229,1230],{},"BEL",[1049,1232,1233],{},"39",[1049,1235,1236],{},",",[1049,1238,1239],{},"71",[1049,1241,1242],{},"G",[1049,1244,1245],{},"103",[1049,1247,1248],{},"g",[1004,1250,1251,1254,1257,1260,1262,1265,1268,1271],{},[1049,1252,1253],{},"8",[1049,1255,1256],{},"BS",[1049,1258,1259],{},"40",[1049,1261,864],{},[1049,1263,1264],{},"72",[1049,1266,1267],{},"H",[1049,1269,1270],{},"104",[1049,1272,1273],{},"h",[1004,1275,1276,1279,1282,1285,1287,1290,1293,1296],{},[1049,1277,1278],{},"9",[1049,1280,1281],{},"HT",[1049,1283,1284],{},"41",[1049,1286,260],{},[1049,1288,1289],{},"73",[1049,1291,1292],{},"I",[1049,1294,1295],{},"105",[1049,1297,1298],{},"i",[1004,1300,1301,1304,1307,1310,1313,1316,1319,1322],{},[1049,1302,1303],{},"10",[1049,1305,1306],{},"LF",[1049,1308,1309],{},"42",[1049,1311,1312],{},"*",[1049,1314,1315],{},"74",[1049,1317,1318],{},"J",[1049,1320,1321],{},"106",[1049,1323,1324],{},"j",[1004,1326,1327,1330,1333,1336,1339,1342,1345,1348],{},[1049,1328,1329],{},"11",[1049,1331,1332],{},"VT",[1049,1334,1335],{},"43",[1049,1337,1338],{},"+",[1049,1340,1341],{},"75",[1049,1343,1344],{},"K",[1049,1346,1347],{},"107",[1049,1349,1350],{},"k",[1004,1352,1353,1356,1359,1362,1364,1367,1370,1373],{},[1049,1354,1355],{},"12",[1049,1357,1358],{},"FF",[1049,1360,1361],{},"44",[1049,1363,1236],{},[1049,1365,1366],{},"76",[1049,1368,1369],{},"L",[1049,1371,1372],{},"108",[1049,1374,1375],{},"l",[1004,1377,1378,1381,1384,1387,1390,1393,1396,1399],{},[1049,1379,1380],{},"13",[1049,1382,1383],{},"CR",[1049,1385,1386],{},"45",[1049,1388,1389],{},"-",[1049,1391,1392],{},"77",[1049,1394,1395],{},"M",[1049,1397,1398],{},"109",[1049,1400,1401],{},"m",[1004,1403,1404,1407,1410,1413,1415,1418,1421,1424],{},[1049,1405,1406],{},"14",[1049,1408,1409],{},"SO",[1049,1411,1412],{},"46",[1049,1414,240],{},[1049,1416,1417],{},"78",[1049,1419,1420],{},"N",[1049,1422,1423],{},"110",[1049,1425,1426],{},"n",[1004,1428,1429,1432,1435,1438,1441,1444,1447,1450],{},[1049,1430,1431],{},"15",[1049,1433,1434],{},"SI",[1049,1436,1437],{},"47",[1049,1439,1440],{},"\u002F",[1049,1442,1443],{},"79",[1049,1445,1446],{},"O",[1049,1448,1449],{},"111",[1049,1451,1452],{},"o",[1004,1454,1455,1458,1461,1464,1466,1469,1472,1475],{},[1049,1456,1457],{},"16",[1049,1459,1460],{},"DLE",[1049,1462,1463],{},"48",[1049,1465,1051],{},[1049,1467,1468],{},"80",[1049,1470,1471],{},"P",[1049,1473,1474],{},"112",[1049,1476,19],{},[1004,1478,1479,1482,1485,1488,1490,1493,1496,1499],{},[1049,1480,1481],{},"17",[1049,1483,1484],{},"DCI",[1049,1486,1487],{},"49",[1049,1489,1077],{},[1049,1491,1492],{},"81",[1049,1494,1495],{},"Q",[1049,1497,1498],{},"113",[1049,1500,1501],{},"q",[1004,1503,1504,1507,1510,1513,1515,1518,1521,1524],{},[1049,1505,1506],{},"18",[1049,1508,1509],{},"DC2",[1049,1511,1512],{},"50",[1049,1514,939],{},[1049,1516,1517],{},"82",[1049,1519,1520],{},"R",[1049,1522,1523],{},"114",[1049,1525,1526],{},"r",[1004,1528,1529,1532,1535,1538,1540,1543,1546,1549],{},[1049,1530,1531],{},"19",[1049,1533,1534],{},"DC3",[1049,1536,1537],{},"51",[1049,1539,933],{},[1049,1541,1542],{},"83",[1049,1544,1545],{},"S",[1049,1547,1548],{},"115",[1049,1550,1551],{},"s",[1004,1553,1554,1557,1560,1563,1565,1568,1571,1574],{},[1049,1555,1556],{},"20",[1049,1558,1559],{},"DC4",[1049,1561,1562],{},"52",[1049,1564,1151],{},[1049,1566,1567],{},"84",[1049,1569,1570],{},"T",[1049,1572,1573],{},"116",[1049,1575,1576],{},"t",[1004,1578,1579,1582,1585,1588,1590,1593,1596,1599],{},[1049,1580,1581],{},"21",[1049,1583,1584],{},"NAK",[1049,1586,1587],{},"53",[1049,1589,1177],{},[1049,1591,1592],{},"85",[1049,1594,1595],{},"U",[1049,1597,1598],{},"117",[1049,1600,1601],{},"u",[1004,1603,1604,1607,1610,1613,1615,1618,1621,1624],{},[1049,1605,1606],{},"22",[1049,1608,1609],{},"SYN",[1049,1611,1612],{},"54",[1049,1614,1202],{},[1049,1616,1617],{},"86",[1049,1619,1620],{},"V",[1049,1622,1623],{},"118",[1049,1625,1626],{},"v",[1004,1628,1629,1632,1635,1638,1640,1643,1646,1649],{},[1049,1630,1631],{},"23",[1049,1633,1634],{},"TB",[1049,1636,1637],{},"55",[1049,1639,1227],{},[1049,1641,1642],{},"87",[1049,1644,1645],{},"W",[1049,1647,1648],{},"119",[1049,1650,1651],{},"w",[1004,1653,1654,1657,1660,1663,1665,1668,1671,1674],{},[1049,1655,1656],{},"24",[1049,1658,1659],{},"CAN",[1049,1661,1662],{},"56",[1049,1664,1253],{},[1049,1666,1667],{},"88",[1049,1669,1670],{},"X",[1049,1672,1673],{},"120",[1049,1675,1676],{},"x",[1004,1678,1679,1682,1685,1688,1690,1693,1696,1699],{},[1049,1680,1681],{},"25",[1049,1683,1684],{},"EM",[1049,1686,1687],{},"57",[1049,1689,1278],{},[1049,1691,1692],{},"89",[1049,1694,1695],{},"Y",[1049,1697,1698],{},"121",[1049,1700,1701],{},"y",[1004,1703,1704,1707,1710,1713,1716,1719,1722,1725],{},[1049,1705,1706],{},"26",[1049,1708,1709],{},"SUB",[1049,1711,1712],{},"58",[1049,1714,1715],{},":",[1049,1717,1718],{},"90",[1049,1720,1721],{},"Z",[1049,1723,1724],{},"122",[1049,1726,1727],{},"z",[1004,1729,1730,1733,1736,1739,1741,1744,1747,1750],{},[1049,1731,1732],{},"27",[1049,1734,1735],{},"ESC",[1049,1737,1738],{},"59",[1049,1740,918],{},[1049,1742,1743],{},"91",[1049,1745,1746],{},"[",[1049,1748,1749],{},"123",[1049,1751,1752],{},"{",[1004,1754,1755,1758,1761,1764,1767,1770,1772,1775],{},[1049,1756,1757],{},"28",[1049,1759,1760],{},"FS",[1049,1762,1763],{},"60",[1049,1765,1766],{},"\u003C",[1049,1768,1769],{},"92",[1049,1771,1440],{},[1049,1773,1774],{},"124",[1049,1776,1777],{},"|",[1004,1779,1780,1783,1786,1789,1791,1794,1797,1800],{},[1049,1781,1782],{},"29",[1049,1784,1785],{},"GS",[1049,1787,1788],{},"61",[1049,1790,909],{},[1049,1792,1793],{},"93",[1049,1795,1796],{},"]",[1049,1798,1799],{},"125",[1049,1801,1802],{},"}",[1004,1804,1805,1808,1811,1814,1817,1820,1823,1826],{},[1049,1806,1807],{},"30",[1049,1809,1810],{},"RS",[1049,1812,1813],{},"62",[1049,1815,1816],{},">",[1049,1818,1819],{},"94",[1049,1821,1822],{},"^",[1049,1824,1825],{},"126",[1049,1827,1828],{},"`",[1004,1830,1831,1834,1837,1840,1843,1846,1849,1852],{},[1049,1832,1833],{},"31",[1049,1835,1836],{},"US",[1049,1838,1839],{},"63",[1049,1841,1842],{},"?",[1049,1844,1845],{},"95",[1049,1847,1848],{},"_",[1049,1850,1851],{},"127",[1049,1853,1854],{},"DEL",[19,1856,1857,1858,1861],{},"ASCII 码大致由以下",[336,1859,1860],{},"两部分组","成：",[1863,1864,1865,1872],"ul",{},[818,1866,1867,1868,1871],{},"ASCII 非打印控制字符： ASCII 表上的数字 ",[336,1869,1870],{},"0-31"," 分配给了控制字符，用于控制像打印机等一些外围设备。",[818,1873,1874,1875,1878],{},"ASCII 打印字符：数字 ",[336,1876,1877],{},"32-126"," 分配给了能在键盘上找到的字符，当查看或打印文档时就会出现。",[14,1880,1882],{"id":1881},"_134转义字符","1.3.4转义字符",[57,1884,1886],{"className":852,"code":1885,"language":854,"meta":62,"style":62},"\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",[64,1887,1888,1893,1909,1923,1928,1941,1946],{"__ignoreMap":62},[67,1889,1890],{"class":69,"line":70},[67,1891,1892],{"class":202},"\u002F\u002F换行符\n",[67,1894,1895,1898,1901,1904,1906],{"class":69,"line":143},[67,1896,1897],{"class":77},"cout ",[67,1899,1900],{"class":73},"\u003C\u003C",[67,1902,1903],{"class":84},"\"hello world\u002Fn\"",[67,1905,918],{"class":77},[67,1907,1908],{"class":202}," \u002F\u002F就等同于如下：\n",[67,1910,1911,1913,1915,1918,1920],{"class":69,"line":149},[67,1912,1897],{"class":77},[67,1914,1900],{"class":73},[67,1916,1917],{"class":84},"\"hello world\"",[67,1919,1900],{"class":73},[67,1921,1922],{"class":77},"endl;\n",[67,1924,1925],{"class":69,"line":155},[67,1926,1927],{"class":202},"\u002F\u002F反斜杠\n",[67,1929,1930,1932,1934,1937,1939],{"class":69,"line":161},[67,1931,1897],{"class":77},[67,1933,1900],{"class":73},[67,1935,1936],{"class":84},"\"\u002F\u002F\"",[67,1938,1900],{"class":73},[67,1940,1922],{"class":77},[67,1942,1943],{"class":69,"line":167},[67,1944,1945],{"class":202},"\u002F\u002F水平制表符\n",[67,1947,1948,1950,1952,1955,1958,1961,1963,1966],{"class":69,"line":173},[67,1949,1897],{"class":77},[67,1951,1900],{"class":73},[67,1953,1954],{"class":84},"\"aaaa",[67,1956,1957],{"class":208},"\\t",[67,1959,1960],{"class":84},"helloworld\"",[67,1962,1900],{"class":73},[67,1964,1965],{"class":77},"endl;",[67,1967,1968],{"class":202}," \u002F\u002F输出窗口时有对齐效果\n",[14,1970,1972],{"id":1971},"_135字符串型","1.3.5字符串型",[19,1974,1975,1976,1978],{},"char 变量名",[67,1977],{},"=\"字符串值\"",[57,1980,1982],{"className":852,"code":1981,"language":854,"meta":62,"style":62},"\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",[64,1983,1984,1989,1994,1999,2004,2018,2031,2036,2041,2052],{"__ignoreMap":62},[67,1985,1986],{"class":69,"line":70},[67,1987,1988],{"class":202},"\u002F\u002Fc风格字符串\n",[67,1990,1991],{"class":69,"line":143},[67,1992,1993],{"class":202},"\u002F\u002F注意事项：\n",[67,1995,1996],{"class":69,"line":149},[67,1997,1998],{"class":202},"\u002F\u002F1.char字符串名[]\n",[67,2000,2001],{"class":69,"line":155},[67,2002,2003],{"class":202},"\u002F\u002F2.等号后面要用双引号，包含起来字符串\n",[67,2005,2006,2008,2011,2013,2015],{"class":69,"line":161},[67,2007,958],{"class":73},[67,2009,2010],{"class":77}," str[]",[67,2012,909],{"class":73},[67,2014,1917],{"class":84},[67,2016,2017],{"class":77},";\n",[67,2019,2020,2022,2024,2027,2029],{"class":69,"line":167},[67,2021,1897],{"class":77},[67,2023,1900],{"class":73},[67,2025,2026],{"class":77},"str",[67,2028,1900],{"class":73},[67,2030,1922],{"class":77},[67,2032,2033],{"class":69,"line":173},[67,2034,2035],{"class":202},"\u002F\u002Fc++风格字符串\n",[67,2037,2038],{"class":69,"line":180},[67,2039,2040],{"class":202},"\u002F\u002F需要先引用一个头文件 #include\u003Cstring>\n",[67,2042,2043,2046,2048,2050],{"class":69,"line":186},[67,2044,2045],{"class":77},"string str2",[67,2047,909],{"class":73},[67,2049,1917],{"class":84},[67,2051,2017],{"class":77},[67,2053,2054,2056,2058,2061,2063],{"class":69,"line":444},[67,2055,1897],{"class":77},[67,2057,1900],{"class":73},[67,2059,2060],{"class":77},"str2",[67,2062,1900],{"class":73},[67,2064,1922],{"class":77},[14,2066,2068],{"id":2067},"_136布尔类型bool","1.3.6布尔类型bool",[57,2070,2072],{"className":852,"code":2071,"language":854,"meta":62,"style":62},"bool flag=true;\ncout\u003C\u003Csizeof(flag)\u003C\u003Cendl; \u002F\u002F查看布尔占内存空间\n",[64,2073,2074,2089],{"__ignoreMap":62},[67,2075,2076,2079,2082,2084,2087],{"class":69,"line":70},[67,2077,2078],{"class":73},"bool",[67,2080,2081],{"class":77}," flag",[67,2083,909],{"class":73},[67,2085,2086],{"class":208},"true",[67,2088,2017],{"class":77},[67,2090,2091,2094,2097,2100,2102,2104],{"class":69,"line":143},[67,2092,2093],{"class":77},"cout",[67,2095,2096],{"class":73},"\u003C\u003Csizeof",[67,2098,2099],{"class":77},"(flag)",[67,2101,1900],{"class":73},[67,2103,1965],{"class":77},[67,2105,2106],{"class":202}," \u002F\u002F查看布尔占内存空间\n",[803,2108,2110],{"id":2109},"_14键盘输入cin","1.4键盘输入cin",[57,2112,2114],{"className":852,"code":2113,"language":854,"meta":62,"style":62},"int a=0;\ncout\u003C\u003C\"请给整型变量a赋值\"\u003C\u003Ca\u003C\u003Cendl;\ncin >> a;\ncout \u003C\u003C \"整型变量a=\" \u003C\u003Ca\u003C\u003Cendl; \n",[64,2115,2116,2129,2146,2157],{"__ignoreMap":62},[67,2117,2118,2120,2123,2125,2127],{"class":69,"line":70},[67,2119,867],{"class":73},[67,2121,2122],{"class":77}," a",[67,2124,909],{"class":73},[67,2126,1051],{"class":208},[67,2128,2017],{"class":77},[67,2130,2131,2133,2135,2138,2140,2142,2144],{"class":69,"line":143},[67,2132,2093],{"class":77},[67,2134,1900],{"class":73},[67,2136,2137],{"class":84},"\"请给整型变量a赋值\"",[67,2139,1900],{"class":73},[67,2141,28],{"class":77},[67,2143,1900],{"class":73},[67,2145,1922],{"class":77},[67,2147,2148,2151,2154],{"class":69,"line":149},[67,2149,2150],{"class":77},"cin ",[67,2152,2153],{"class":73},">>",[67,2155,2156],{"class":77}," a;\n",[67,2158,2159,2161,2163,2166,2169,2171,2173],{"class":69,"line":155},[67,2160,1897],{"class":77},[67,2162,1900],{"class":73},[67,2164,2165],{"class":84}," \"整型变量a=\"",[67,2167,2168],{"class":73}," \u003C\u003C",[67,2170,28],{"class":77},[67,2172,1900],{"class":73},[67,2174,1922],{"class":77},[803,2176,2178],{"id":2177},"_15运算符","1.5运算符",[14,2180,2182],{"id":2181},"_151算术运算符","1.5.1算术运算符",[19,2184,2185,2188],{},[725,2186],{"alt":62,"src":2187},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-001.png","\n注意：",[815,2190,2191,2194,2197],{},[818,2192,2193],{},"两个整数相除，结果依然是整数，小数部分被去除掉了",[818,2195,2196],{},"两个小数不可以做取模运算",[818,2198,2199],{},"前置递增++a;后置递增a++，两者区别：前置递增先让变量+1,再进行表达式计算；后置递增是先让表达式运算，再让变量+1",[14,2201,2203],{"id":2202},"_152赋值运算符","1.5.2赋值运算符",[19,2205,2206],{},[725,2207],{"alt":62,"src":2208},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-002.png",[14,2210,2212],{"id":2211},"_153比较运算符","1.5.3比较运算符",[19,2214,2215],{},[725,2216],{"alt":62,"src":2217},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-003.png",[14,2219,2221],{"id":2220},"_154逻辑运算符","1.5.4逻辑运算符",[19,2223,2224],{},[725,2225],{"alt":62,"src":2226},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-004.png",[803,2228,2230],{"id":2229},"_16程序流程结构","1.6程序流程结构",[14,2232,2234],{"id":2233},"_161选择结构","1.6.1选择结构",[815,2236,2237],{},[818,2238,2239],{},"if语句\n单行、多行、多条件if语句",[57,2241,2243],{"className":852,"code":2242,"language":854,"meta":62,"style":62},"\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",[64,2244,2245,2250,2265,2270,2284,2289,2294,2303,2316,2320,2333,2338,2344,2349,2363,2368,2374,2395,2400,2414,2419,2448,2453,2470,2475,2480,2485,2499,2504],{"__ignoreMap":62},[67,2246,2247],{"class":69,"line":70},[67,2248,2249],{"class":202},"\u002F\u002F单行格式if语句：if (条件){条件满足执行的语句}\n",[67,2251,2252,2255,2258,2260,2263],{"class":69,"line":143},[67,2253,2254],{"class":73},"if",[67,2256,2257],{"class":77},"(score",[67,2259,1816],{"class":73},[67,2261,2262],{"class":208},"600",[67,2264,870],{"class":77},[67,2266,2267],{"class":69,"line":149},[67,2268,2269],{"class":77},"{\n",[67,2271,2272,2275,2277,2280,2282],{"class":69,"line":155},[67,2273,2274],{"class":77},"    cout",[67,2276,1900],{"class":73},[67,2278,2279],{"class":84},"'这是单行if语句'",[67,2281,1900],{"class":73},[67,2283,1922],{"class":77},[67,2285,2286],{"class":69,"line":161},[67,2287,2288],{"class":77},"}\n",[67,2290,2291],{"class":69,"line":167},[67,2292,2293],{"class":202},"\u002F\u002F多行格式if语句：if (条件){条件满足执行的语句}else{条件不满足执行的语句}\n",[67,2295,2296,2298,2300],{"class":69,"line":173},[67,2297,2150],{"class":77},[67,2299,2153],{"class":73},[67,2301,2302],{"class":77}," score\n",[67,2304,2305,2307,2309,2312,2314],{"class":69,"line":180},[67,2306,2254],{"class":73},[67,2308,2257],{"class":77},[67,2310,2311],{"class":73},"\u003C=",[67,2313,2262],{"class":208},[67,2315,870],{"class":77},[67,2317,2318],{"class":69,"line":186},[67,2319,2269],{"class":77},[67,2321,2322,2324,2326,2329,2331],{"class":69,"line":444},[67,2323,2274],{"class":77},[67,2325,2153],{"class":73},[67,2327,2328],{"class":84},"\"小于等于600\"",[67,2330,1900],{"class":73},[67,2332,1922],{"class":77},[67,2334,2336],{"class":69,"line":2335},11,[67,2337,2288],{"class":77},[67,2339,2341],{"class":69,"line":2340},12,[67,2342,2343],{"class":73},"else\n",[67,2345,2347],{"class":69,"line":2346},13,[67,2348,2269],{"class":77},[67,2350,2352,2354,2356,2359,2361],{"class":69,"line":2351},14,[67,2353,2274],{"class":77},[67,2355,2153],{"class":73},[67,2357,2358],{"class":84},"\"大于600\"",[67,2360,2153],{"class":73},[67,2362,1922],{"class":77},[67,2364,2366],{"class":69,"line":2365},15,[67,2367,2288],{"class":77},[67,2369,2371],{"class":69,"line":2370},16,[67,2372,2373],{"class":202},"\u002F\u002F多条件格式if语句：if (条件){条件1满足执行的语句}else if{条件2满足执行的语句}····else{条件不满足执行的语句}\n",[67,2375,2377,2379,2382,2384,2386,2389,2391,2393],{"class":69,"line":2376},17,[67,2378,2254],{"class":73},[67,2380,2381],{"class":77}," (",[67,2383,1051],{"class":208},[67,2385,1766],{"class":73},[67,2387,2388],{"class":77},"num",[67,2390,1766],{"class":73},[67,2392,1169],{"class":208},[67,2394,870],{"class":77},[67,2396,2398],{"class":69,"line":2397},18,[67,2399,2269],{"class":77},[67,2401,2403,2405,2407,2410,2412],{"class":69,"line":2402},19,[67,2404,2274],{"class":77},[67,2406,1900],{"class":73},[67,2408,2409],{"class":84},"\"小于100\"",[67,2411,1900],{"class":73},[67,2413,1922],{"class":77},[67,2415,2417],{"class":69,"line":2416},20,[67,2418,2288],{"class":77},[67,2420,2422,2425,2428,2431,2434,2436,2439,2441,2443,2446],{"class":69,"line":2421},21,[67,2423,2424],{"class":73},"else",[67,2426,2427],{"class":73}," if",[67,2429,2430],{"class":77}," (nmu",[67,2432,2433],{"class":73},">=",[67,2435,1169],{"class":208},[67,2437,2438],{"class":73},"&&",[67,2440,2388],{"class":77},[67,2442,1766],{"class":73},[67,2444,2445],{"class":208},"200",[67,2447,870],{"class":77},[67,2449,2451],{"class":69,"line":2450},22,[67,2452,2269],{"class":77},[67,2454,2456,2458,2460,2463,2465,2467],{"class":69,"line":2455},23,[67,2457,2274],{"class":77},[67,2459,1900],{"class":73},[67,2461,2462],{"class":84},"\"不小于100且小于200\"",[67,2464,1900],{"class":73},[67,2466,1965],{"class":77},[67,2468,2469],{"class":202}," \u002F\u002F可以无限else if,python中是elif：\n",[67,2471,2473],{"class":69,"line":2472},24,[67,2474,2288],{"class":77},[67,2476,2478],{"class":69,"line":2477},25,[67,2479,2343],{"class":73},[67,2481,2483],{"class":69,"line":2482},26,[67,2484,2269],{"class":77},[67,2486,2488,2490,2492,2495,2497],{"class":69,"line":2487},27,[67,2489,2274],{"class":77},[67,2491,1900],{"class":73},[67,2493,2494],{"class":84},"\"不小于200\"",[67,2496,1900],{"class":73},[67,2498,1922],{"class":77},[67,2500,2502],{"class":69,"line":2501},28,[67,2503,2288],{"class":77},[67,2505,2507],{"class":69,"line":2506},29,[67,2508,2509],{"class":202},"\u002F\u002F 嵌套if语句(if套if,注意条件即可)\n",[815,2511,2512],{"start":143},[818,2513,2514],{},"三目运算符",[57,2516,2518],{"className":852,"code":2517,"language":854,"meta":62,"style":62},"\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",[64,2519,2520,2525,2530,2556,2578,2595,2600,2623,2638],{"__ignoreMap":62},[67,2521,2522],{"class":69,"line":70},[67,2523,2524],{"class":202},"\u002F\u002F创建三个变量a,b,c\n",[67,2526,2527],{"class":69,"line":143},[67,2528,2529],{"class":202},"\u002F\u002F将a和b做比较，将变量大的值赋值给变量c\n",[67,2531,2532,2534,2536,2538,2540,2543,2545,2547,2550,2552,2554],{"class":69,"line":149},[67,2533,867],{"class":73},[67,2535,2122],{"class":77},[67,2537,909],{"class":73},[67,2539,1556],{"class":208},[67,2541,2542],{"class":77},",b",[67,2544,909],{"class":73},[67,2546,1303],{"class":208},[67,2548,2549],{"class":77},",c",[67,2551,909],{"class":73},[67,2553,1051],{"class":208},[67,2555,2017],{"class":77},[67,2557,2558,2560,2562,2565,2567,2569,2571,2573,2575],{"class":69,"line":155},[67,2559,1146],{"class":77},[67,2561,909],{"class":73},[67,2563,2564],{"class":77},"(a",[67,2566,1816],{"class":73},[67,2568,1121],{"class":77},[67,2570,1842],{"class":73},[67,2572,28],{"class":77},[67,2574,1715],{"class":73},[67,2576,2577],{"class":77},"b)\n",[67,2579,2580,2582,2584,2587,2589,2591,2593],{"class":69,"line":161},[67,2581,2093],{"class":77},[67,2583,1900],{"class":73},[67,2585,2586],{"class":84},"\"c=\"",[67,2588,1900],{"class":73},[67,2590,1146],{"class":77},[67,2592,1900],{"class":73},[67,2594,1922],{"class":77},[67,2596,2597],{"class":69,"line":167},[67,2598,2599],{"class":202},"\u002F\u002F在c++中三目运算符返回的是变量，可以继续赋值\n",[67,2601,2602,2604,2606,2608,2610,2612,2614,2617,2619,2621],{"class":69,"line":173},[67,2603,2564],{"class":77},[67,2605,1816],{"class":73},[67,2607,1121],{"class":77},[67,2609,1842],{"class":73},[67,2611,28],{"class":77},[67,2613,1715],{"class":73},[67,2615,2616],{"class":77},"b)",[67,2618,909],{"class":73},[67,2620,1169],{"class":208},[67,2622,2017],{"class":77},[67,2624,2625,2627,2629,2631,2633,2635],{"class":69,"line":180},[67,2626,2093],{"class":77},[67,2628,1900],{"class":73},[67,2630,28],{"class":77},[67,2632,1900],{"class":73},[67,2634,1965],{"class":77},[67,2636,2637],{"class":202}," \u002F\u002F100  a是大于b的，将100赋值给了a\n",[67,2639,2640,2642,2644,2646,2648,2650],{"class":69,"line":186},[67,2641,2093],{"class":77},[67,2643,1900],{"class":73},[67,2645,1121],{"class":77},[67,2647,1900],{"class":73},[67,2649,1965],{"class":77},[67,2651,2652],{"class":202}," \u002F\u002F10   a>b,b还是原值\n",[815,2654,2655],{"start":149},[818,2656,2657],{},"switch语句\n执行多条件分支语句\n注意：python没有switch语句\nswitch(表达式)\n{\ncase 结果1:执行语句;break;\ncase 结果2:执行语句;break;\ncase 结果3:执行语句;break;\n···\ndefault:执行语句;break;\n}\n不写break就会一直往下执行",[57,2659,2661],{"className":852,"code":2660,"language":854,"meta":62,"style":62},"\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",[64,2662,2663,2668,2676,2689,2699,2703,2717,2730,2740,2748,2753,2778,2799,2821,2842,2864,2885,2905,2910],{"__ignoreMap":62},[67,2664,2665],{"class":69,"line":70},[67,2666,2667],{"class":202},"\u002F\u002F案例-电影打分\n",[67,2669,2670,2673],{"class":69,"line":143},[67,2671,2672],{"class":73},"#include",[67,2674,2675],{"class":84},"\u003Ciostream>\n",[67,2677,2678,2681,2684,2687],{"class":69,"line":149},[67,2679,2680],{"class":73},"using",[67,2682,2683],{"class":73}," namespace",[67,2685,2686],{"class":112}," std",[67,2688,2017],{"class":77},[67,2690,2691,2693,2696],{"class":69,"line":155},[67,2692,867],{"class":73},[67,2694,2695],{"class":112}," main",[67,2697,2698],{"class":77},"()\n",[67,2700,2701],{"class":69,"line":161},[67,2702,2269],{"class":77},[67,2704,2705,2708,2711,2713,2715],{"class":69,"line":167},[67,2706,2707],{"class":73},"    int",[67,2709,2710],{"class":77}," score",[67,2712,909],{"class":73},[67,2714,1051],{"class":208},[67,2716,2017],{"class":77},[67,2718,2719,2721,2723,2726,2728],{"class":69,"line":173},[67,2720,2274],{"class":77},[67,2722,1900],{"class":73},[67,2724,2725],{"class":84},"\"电影打分：\"",[67,2727,1900],{"class":73},[67,2729,1922],{"class":77},[67,2731,2732,2735,2737],{"class":69,"line":180},[67,2733,2734],{"class":77},"    cin",[67,2736,2153],{"class":73},[67,2738,2739],{"class":77},"score;\n",[67,2741,2742,2745],{"class":69,"line":186},[67,2743,2744],{"class":73},"    switch",[67,2746,2747],{"class":77},"(score)\n",[67,2749,2750],{"class":69,"line":444},[67,2751,2752],{"class":77},"    {\n",[67,2754,2755,2758,2761,2764,2766,2769,2771,2773,2776],{"class":69,"line":2335},[67,2756,2757],{"class":73},"        case",[67,2759,2760],{"class":208}," 10",[67,2762,2763],{"class":77},":cout",[67,2765,1900],{"class":73},[67,2767,2768],{"class":84},"\"经典\"",[67,2770,1900],{"class":73},[67,2772,1965],{"class":77},[67,2774,2775],{"class":73},"break",[67,2777,2017],{"class":77},[67,2779,2780,2782,2785,2787,2789,2791,2793,2795,2797],{"class":69,"line":2340},[67,2781,2757],{"class":73},[67,2783,2784],{"class":208}," 9",[67,2786,2763],{"class":77},[67,2788,1900],{"class":73},[67,2790,2768],{"class":84},[67,2792,1900],{"class":73},[67,2794,1965],{"class":77},[67,2796,2775],{"class":73},[67,2798,2017],{"class":77},[67,2800,2801,2803,2806,2808,2810,2813,2815,2817,2819],{"class":69,"line":2346},[67,2802,2757],{"class":73},[67,2804,2805],{"class":208}," 8",[67,2807,2763],{"class":77},[67,2809,1900],{"class":73},[67,2811,2812],{"class":84},"\"非常好\"",[67,2814,1900],{"class":73},[67,2816,1965],{"class":77},[67,2818,2775],{"class":73},[67,2820,2017],{"class":77},[67,2822,2823,2825,2828,2830,2832,2834,2836,2838,2840],{"class":69,"line":2351},[67,2824,2757],{"class":73},[67,2826,2827],{"class":208}," 7",[67,2829,2763],{"class":77},[67,2831,1900],{"class":73},[67,2833,2812],{"class":84},[67,2835,1900],{"class":73},[67,2837,1965],{"class":77},[67,2839,2775],{"class":73},[67,2841,2017],{"class":77},[67,2843,2844,2846,2849,2851,2853,2856,2858,2860,2862],{"class":69,"line":2365},[67,2845,2757],{"class":73},[67,2847,2848],{"class":208}," 6",[67,2850,2763],{"class":77},[67,2852,1900],{"class":73},[67,2854,2855],{"class":84},"\"一般\"",[67,2857,1900],{"class":73},[67,2859,1965],{"class":77},[67,2861,2775],{"class":73},[67,2863,2017],{"class":77},[67,2865,2866,2868,2871,2873,2875,2877,2879,2881,2883],{"class":69,"line":2370},[67,2867,2757],{"class":73},[67,2869,2870],{"class":208}," 5",[67,2872,2763],{"class":77},[67,2874,1900],{"class":73},[67,2876,2855],{"class":84},[67,2878,1900],{"class":73},[67,2880,1965],{"class":77},[67,2882,2775],{"class":73},[67,2884,2017],{"class":77},[67,2886,2887,2890,2892,2894,2897,2899,2901,2903],{"class":69,"line":2376},[67,2888,2889],{"class":73},"        default",[67,2891,2763],{"class":77},[67,2893,1900],{"class":73},[67,2895,2896],{"class":84},"\"烂片\"",[67,2898,1900],{"class":73},[67,2900,1965],{"class":77},[67,2902,2775],{"class":73},[67,2904,2017],{"class":77},[67,2906,2907],{"class":69,"line":2397},[67,2908,2909],{"class":77},"    }\n",[67,2911,2912],{"class":69,"line":2402},[67,2913,2288],{"class":77},[19,2915,2916],{},"if和switch区别：",[1863,2918,2919,2922],{},[818,2920,2921],{},"switch缺点：判断时候只能是整行或者字符型，不可以是一个区间",[818,2923,2924],{},"switch优点：结构清晰，执行效率高",[14,2926,2928],{"id":2927},"_162循环结构","1.6.2循环结构",[815,2930,2931],{},[818,2932,2933],{},"while循环结构\n满足循环条件，执行循环语句\n语法：while(循环条件){循环语句}",[57,2935,2937],{"className":852,"code":2936,"language":854,"meta":62,"style":62},"\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",[64,2938,2939,2944,2952,2956,2969,2983,2987,3007,3017,3021,3033],{"__ignoreMap":62},[67,2940,2941],{"class":69,"line":70},[67,2942,2943],{"class":202},"\u002F\u002F打印0-9数字\n",[67,2945,2946,2948,2950],{"class":69,"line":143},[67,2947,867],{"class":73},[67,2949,2695],{"class":112},[67,2951,2698],{"class":77},[67,2953,2954],{"class":69,"line":149},[67,2955,2269],{"class":77},[67,2957,2958,2960,2963,2965,2967],{"class":69,"line":155},[67,2959,2707],{"class":73},[67,2961,2962],{"class":77}," num",[67,2964,909],{"class":73},[67,2966,1051],{"class":208},[67,2968,2017],{"class":77},[67,2970,2971,2974,2977,2979,2981],{"class":69,"line":161},[67,2972,2973],{"class":73},"    while",[67,2975,2976],{"class":77},"(num",[67,2978,1766],{"class":73},[67,2980,1303],{"class":208},[67,2982,870],{"class":77},[67,2984,2985],{"class":69,"line":167},[67,2986,2752],{"class":77},[67,2988,2989,2992,2995,2997,2999,3001,3004],{"class":69,"line":173},[67,2990,2991],{"class":112},"       std",[67,2993,2994],{"class":77},"::cout",[67,2996,1900],{"class":73},[67,2998,2388],{"class":77},[67,3000,1900],{"class":73},[67,3002,3003],{"class":112},"std",[67,3005,3006],{"class":77},"::endl;\n",[67,3008,3009,3012,3015],{"class":69,"line":180},[67,3010,3011],{"class":77},"        num",[67,3013,3014],{"class":73},"++",[67,3016,2017],{"class":77},[67,3018,3019],{"class":69,"line":186},[67,3020,2909],{"class":77},[67,3022,3023,3026,3028,3031],{"class":69,"line":444},[67,3024,3025],{"class":112},"    system",[67,3027,864],{"class":77},[67,3029,3030],{"class":84},"\"pause\"",[67,3032,870],{"class":77},[67,3034,3035],{"class":69,"line":2335},[67,3036,2288],{"class":77},[19,3038,3039],{},"注意：写好循环条件，避免死循环情况",[57,3041,3043],{"className":852,"code":3042,"language":854,"meta":62,"style":62},"\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",[64,3044,3045,3050,3057,3064,3074,3082,3086,3091,3118,3122,3127,3135,3162,3167,3172,3185,3195,3199,3209,3214,3227,3232,3246,3251,3266,3270,3283,3287,3292,3296,3310,3318,3323,3329,3335,3340],{"__ignoreMap":62},[67,3046,3047],{"class":69,"line":70},[67,3048,3049],{"class":202},"\u002F\u002F循环结构-猜数字\n",[67,3051,3052,3054],{"class":69,"line":143},[67,3053,2672],{"class":73},[67,3055,3056],{"class":84}," \u003Ciostream>\n",[67,3058,3059,3061],{"class":69,"line":149},[67,3060,2672],{"class":73},[67,3062,3063],{"class":84}," \u003Cctime>\n",[67,3065,3066,3068,3070,3072],{"class":69,"line":155},[67,3067,2680],{"class":73},[67,3069,2683],{"class":73},[67,3071,2686],{"class":112},[67,3073,2017],{"class":77},[67,3075,3076,3078,3080],{"class":69,"line":161},[67,3077,867],{"class":73},[67,3079,2695],{"class":112},[67,3081,2698],{"class":77},[67,3083,3084],{"class":69,"line":167},[67,3085,2269],{"class":77},[67,3087,3088],{"class":69,"line":173},[67,3089,3090],{"class":202},"    \u002F\u002F添加随机数种子，利用当前系统时间生成随机数，防止每次随机数相同\n",[67,3092,3093,3096,3099,3102,3105,3107,3110,3112,3115],{"class":69,"line":180},[67,3094,3095],{"class":112},"    srand",[67,3097,3098],{"class":77},"((",[67,3100,3101],{"class":73},"unsigned",[67,3103,3104],{"class":73}," int",[67,3106,260],{"class":77},[67,3108,3109],{"class":112},"time",[67,3111,864],{"class":77},[67,3113,3114],{"class":208},"NULL",[67,3116,3117],{"class":77},"));\n",[67,3119,3120],{"class":69,"line":186},[67,3121,177],{"emptyLinePlaceholder":176},[67,3123,3124],{"class":69,"line":444},[67,3125,3126],{"class":202},"    \u002F\u002F1.系统生成随机数\n",[67,3128,3129,3132],{"class":69,"line":2335},[67,3130,3131],{"class":202},"    \u002F\u002Frand()%100",[67,3133,3134],{"class":202}," \u002F\u002F生成0-99的随机数\n",[67,3136,3137,3139,3141,3143,3146,3149,3151,3153,3155,3157,3159],{"class":69,"line":2340},[67,3138,2707],{"class":73},[67,3140,2962],{"class":77},[67,3142,909],{"class":73},[67,3144,3145],{"class":112},"rand",[67,3147,3148],{"class":77},"()",[67,3150,1186],{"class":73},[67,3152,1169],{"class":208},[67,3154,1338],{"class":73},[67,3156,1077],{"class":208},[67,3158,918],{"class":77},[67,3160,3161],{"class":202}," \u002F\u002F这是个伪随机数，每次都不同，要想每次不同就添加随机数种子\n",[67,3163,3164],{"class":69,"line":2346},[67,3165,3166],{"class":202},"    \u002F\u002Fcout\u003C\u003C\"系统生成了一个1-100之间的随机数，请你来猜：\"\u003C\u003Cendl;\n",[67,3168,3169],{"class":69,"line":2351},[67,3170,3171],{"class":202},"    \u002F\u002F2.玩家猜测\n",[67,3173,3174,3176,3179,3181,3183],{"class":69,"line":2365},[67,3175,2707],{"class":73},[67,3177,3178],{"class":77}," val",[67,3180,909],{"class":73},[67,3182,1051],{"class":208},[67,3184,2017],{"class":77},[67,3186,3187,3189,3191,3193],{"class":69,"line":2370},[67,3188,2973],{"class":73},[67,3190,2381],{"class":77},[67,3192,1077],{"class":208},[67,3194,870],{"class":77},[67,3196,3197],{"class":69,"line":2376},[67,3198,2752],{"class":77},[67,3200,3201,3204,3206],{"class":69,"line":2397},[67,3202,3203],{"class":77},"        cin",[67,3205,2153],{"class":73},[67,3207,3208],{"class":77},"val;\n",[67,3210,3211],{"class":69,"line":2402},[67,3212,3213],{"class":202},"        \u002F\u002F3.判断玩家猜测\n",[67,3215,3216,3219,3222,3224],{"class":69,"line":2416},[67,3217,3218],{"class":73},"        if",[67,3220,3221],{"class":77},"(val",[67,3223,1766],{"class":73},[67,3225,3226],{"class":77},"num) \n",[67,3228,3229],{"class":69,"line":2421},[67,3230,3231],{"class":77},"        {\n",[67,3233,3234,3237,3239,3242,3244],{"class":69,"line":2450},[67,3235,3236],{"class":77},"            cout",[67,3238,1900],{"class":73},[67,3240,3241],{"class":84},"\"猜小了！\"",[67,3243,1900],{"class":73},[67,3245,1922],{"class":77},[67,3247,3248],{"class":69,"line":2455},[67,3249,3250],{"class":77},"        }\n",[67,3252,3253,3256,3258,3261,3263],{"class":69,"line":2472},[67,3254,3255],{"class":73},"        else",[67,3257,2427],{"class":73},[67,3259,3260],{"class":77}," (val",[67,3262,1816],{"class":73},[67,3264,3265],{"class":77},"num)\n",[67,3267,3268],{"class":69,"line":2477},[67,3269,3231],{"class":77},[67,3271,3272,3274,3276,3279,3281],{"class":69,"line":2482},[67,3273,3236],{"class":77},[67,3275,1900],{"class":73},[67,3277,3278],{"class":84},"\"猜大了！\"",[67,3280,1900],{"class":73},[67,3282,1922],{"class":77},[67,3284,3285],{"class":69,"line":2487},[67,3286,3250],{"class":77},[67,3288,3289],{"class":69,"line":2501},[67,3290,3291],{"class":73},"        else\n",[67,3293,3294],{"class":69,"line":2506},[67,3295,3231],{"class":77},[67,3297,3299,3301,3303,3306,3308],{"class":69,"line":3298},30,[67,3300,3236],{"class":77},[67,3302,1900],{"class":73},[67,3304,3305],{"class":84},"\"猜对了！\"",[67,3307,1900],{"class":73},[67,3309,1922],{"class":77},[67,3311,3313,3316],{"class":69,"line":3312},31,[67,3314,3315],{"class":73},"            break",[67,3317,2017],{"class":77},[67,3319,3321],{"class":69,"line":3320},32,[67,3322,3250],{"class":77},[67,3324,3326],{"class":69,"line":3325},33,[67,3327,3328],{"class":202},"        \u002F\u002F猜对 退出游戏\n",[67,3330,3332],{"class":69,"line":3331},34,[67,3333,3334],{"class":202},"        \u002F\u002F猜错 提示猜的结果 过大或者过小 重新返回第二步\n",[67,3336,3338],{"class":69,"line":3337},35,[67,3339,2909],{"class":77},[67,3341,3343],{"class":69,"line":3342},36,[67,3344,2288],{"class":77},[815,3346,3347],{"start":143},[818,3348,3349,3350,3353],{},"do...while循环结构\n语法： do{循环语句}while(循环条件)；\n与while的区别在于",[336,3351,3352],{},"do...while会先执行一次循环语句","，在判断循环语句",[57,3355,3357],{"className":852,"code":3356,"language":854,"meta":62,"style":62},"\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",[64,3358,3359,3364,3372,3376,3388,3396,3400,3417,3424,3428,3441,3451],{"__ignoreMap":62},[67,3360,3361],{"class":69,"line":70},[67,3362,3363],{"class":202},"\u002F\u002F在屏幕中输出0-9这10个数字\n",[67,3365,3366,3368,3370],{"class":69,"line":143},[67,3367,867],{"class":73},[67,3369,2695],{"class":112},[67,3371,2698],{"class":77},[67,3373,3374],{"class":69,"line":149},[67,3375,2269],{"class":77},[67,3377,3378,3380,3382,3384,3386],{"class":69,"line":155},[67,3379,2707],{"class":73},[67,3381,2962],{"class":77},[67,3383,909],{"class":73},[67,3385,1051],{"class":208},[67,3387,2017],{"class":77},[67,3389,3390,3393],{"class":69,"line":161},[67,3391,3392],{"class":73},"    do",[67,3394,3395],{"class":77}," \n",[67,3397,3398],{"class":69,"line":167},[67,3399,2752],{"class":77},[67,3401,3402,3405,3407,3409,3411,3413,3415],{"class":69,"line":173},[67,3403,3404],{"class":112},"        std",[67,3406,2994],{"class":77},[67,3408,1900],{"class":73},[67,3410,2388],{"class":77},[67,3412,1900],{"class":73},[67,3414,3003],{"class":112},[67,3416,3006],{"class":77},[67,3418,3419,3421],{"class":69,"line":180},[67,3420,3011],{"class":77},[67,3422,3423],{"class":73},"++\n",[67,3425,3426],{"class":69,"line":186},[67,3427,2909],{"class":77},[67,3429,3430,3432,3434,3436,3438],{"class":69,"line":444},[67,3431,2973],{"class":73},[67,3433,2976],{"class":77},[67,3435,1766],{"class":73},[67,3437,1303],{"class":208},[67,3439,3440],{"class":77},");\n",[67,3442,3443,3445,3447,3449],{"class":69,"line":2335},[67,3444,3025],{"class":112},[67,3446,864],{"class":77},[67,3448,3030],{"class":84},[67,3450,3440],{"class":77},[67,3452,3453],{"class":69,"line":2340},[67,3454,2288],{"class":77},[19,3456,3457],{},"案例-水仙花数",[19,3459,3460],{},"描述：水仙花数是指一个3位数，它的每个位上的数字的3次幂之和等于它本身",[19,3462,3463],{},"例如：1^3+5^3+3^3=153",[19,3465,3466],{},"请用do...while语句，求出所有3位数的水仙花数",[57,3468,3470],{"className":852,"code":3469,"language":854,"meta":62,"style":62},"#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",[64,3471,3472,3478,3488,3496,3500,3505,3517,3523,3527,3532,3548,3564,3580,3595,3614,3629,3677,3681,3693,3697,3705,3709,3723],{"__ignoreMap":62},[67,3473,3474,3476],{"class":69,"line":70},[67,3475,2672],{"class":73},[67,3477,3056],{"class":84},[67,3479,3480,3482,3484,3486],{"class":69,"line":143},[67,3481,2680],{"class":73},[67,3483,2683],{"class":73},[67,3485,2686],{"class":112},[67,3487,2017],{"class":77},[67,3489,3490,3492,3494],{"class":69,"line":149},[67,3491,867],{"class":73},[67,3493,2695],{"class":112},[67,3495,2698],{"class":77},[67,3497,3498],{"class":69,"line":155},[67,3499,2269],{"class":77},[67,3501,3502],{"class":69,"line":161},[67,3503,3504],{"class":202},"    \u002F\u002F1.先打印所有三位数字\n",[67,3506,3507,3509,3511,3513,3515],{"class":69,"line":167},[67,3508,2707],{"class":73},[67,3510,2962],{"class":77},[67,3512,909],{"class":73},[67,3514,1169],{"class":208},[67,3516,2017],{"class":77},[67,3518,3519,3521],{"class":69,"line":173},[67,3520,3392],{"class":73},[67,3522,3395],{"class":77},[67,3524,3525],{"class":69,"line":180},[67,3526,2752],{"class":77},[67,3528,3529],{"class":69,"line":186},[67,3530,3531],{"class":202},"        \u002F\u002F2.从所有三位数字中找到水仙花数\n",[67,3533,3534,3537,3539,3541,3543,3545],{"class":69,"line":444},[67,3535,3536],{"class":73},"        int",[67,3538,2122],{"class":77},[67,3540,909],{"class":73},[67,3542,1051],{"class":208},[67,3544,918],{"class":77},[67,3546,3547],{"class":202}," \u002F\u002F个位\n",[67,3549,3550,3552,3555,3557,3559,3561],{"class":69,"line":2335},[67,3551,3536],{"class":73},[67,3553,3554],{"class":77}," b",[67,3556,909],{"class":73},[67,3558,1051],{"class":208},[67,3560,918],{"class":77},[67,3562,3563],{"class":202}," \u002F\u002F十位\n",[67,3565,3566,3568,3571,3573,3575,3577],{"class":69,"line":2340},[67,3567,3536],{"class":73},[67,3569,3570],{"class":77}," c",[67,3572,909],{"class":73},[67,3574,1051],{"class":208},[67,3576,918],{"class":77},[67,3578,3579],{"class":202}," \u002F\u002F百位\n",[67,3581,3582,3585,3587,3589,3591,3593],{"class":69,"line":2346},[67,3583,3584],{"class":77},"        a",[67,3586,909],{"class":73},[67,3588,2388],{"class":77},[67,3590,1186],{"class":73},[67,3592,1303],{"class":208},[67,3594,2017],{"class":77},[67,3596,3597,3600,3602,3604,3606,3608,3610,3612],{"class":69,"line":2351},[67,3598,3599],{"class":77},"        b",[67,3601,909],{"class":73},[67,3603,2388],{"class":77},[67,3605,1440],{"class":73},[67,3607,1303],{"class":208},[67,3609,1186],{"class":73},[67,3611,1303],{"class":208},[67,3613,2017],{"class":77},[67,3615,3616,3619,3621,3623,3625,3627],{"class":69,"line":2365},[67,3617,3618],{"class":77},"        c",[67,3620,909],{"class":73},[67,3622,2388],{"class":77},[67,3624,1440],{"class":73},[67,3626,1169],{"class":208},[67,3628,2017],{"class":77},[67,3630,3631,3633,3635,3637,3639,3641,3643,3645,3647,3649,3651,3653,3655,3657,3659,3661,3663,3665,3668,3671,3674],{"class":69,"line":2370},[67,3632,3218],{"class":73},[67,3634,2564],{"class":77},[67,3636,1312],{"class":73},[67,3638,28],{"class":77},[67,3640,1312],{"class":73},[67,3642,28],{"class":77},[67,3644,1338],{"class":73},[67,3646,1121],{"class":77},[67,3648,1312],{"class":73},[67,3650,1121],{"class":77},[67,3652,1312],{"class":73},[67,3654,1121],{"class":77},[67,3656,1338],{"class":73},[67,3658,1146],{"class":77},[67,3660,1312],{"class":73},[67,3662,1146],{"class":77},[67,3664,1312],{"class":73},[67,3666,3667],{"class":77},"c ",[67,3669,3670],{"class":73},"==",[67,3672,3673],{"class":77}," num)",[67,3675,3676],{"class":202}," \u002F\u002F如果是水仙花数，才打印\n",[67,3678,3679],{"class":69,"line":2376},[67,3680,3231],{"class":77},[67,3682,3683,3685,3687,3689,3691],{"class":69,"line":2397},[67,3684,3236],{"class":77},[67,3686,1900],{"class":73},[67,3688,2388],{"class":77},[67,3690,1900],{"class":73},[67,3692,1922],{"class":77},[67,3694,3695],{"class":69,"line":2402},[67,3696,3250],{"class":77},[67,3698,3699,3701,3703],{"class":69,"line":2416},[67,3700,3011],{"class":77},[67,3702,3014],{"class":73},[67,3704,2017],{"class":77},[67,3706,3707],{"class":69,"line":2421},[67,3708,2909],{"class":77},[67,3710,3711,3713,3716,3718,3721],{"class":69,"line":2450},[67,3712,2973],{"class":73},[67,3714,3715],{"class":77}," (num ",[67,3717,1766],{"class":73},[67,3719,3720],{"class":208}," 1000",[67,3722,3440],{"class":77},[67,3724,3725],{"class":69,"line":2455},[67,3726,2288],{"class":77},[815,3728,3729],{"start":149},[818,3730,3731],{},"for循环语句\n语法：for(起始表达式；条件表达式；末尾循环体){循环语句;}",[57,3733,3735],{"className":852,"code":3734,"language":854,"meta":62,"style":62},"\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",[64,3736,3737,3742,3770,3774,3786,3790,3795,3806,3813,3817,3831,3835,3842,3846,3858,3867],{"__ignoreMap":62},[67,3738,3739],{"class":69,"line":70},[67,3740,3741],{"class":202},"\u002F\u002F从数字0-9打印\n",[67,3743,3744,3746,3748,3750,3753,3755,3757,3760,3762,3764,3766,3768],{"class":69,"line":143},[67,3745,74],{"class":73},[67,3747,864],{"class":77},[67,3749,867],{"class":73},[67,3751,3752],{"class":77}," i",[67,3754,909],{"class":73},[67,3756,1051],{"class":208},[67,3758,3759],{"class":77},";i",[67,3761,1766],{"class":73},[67,3763,1303],{"class":208},[67,3765,3759],{"class":77},[67,3767,3014],{"class":73},[67,3769,870],{"class":77},[67,3771,3772],{"class":69,"line":149},[67,3773,2269],{"class":77},[67,3775,3776,3778,3780,3782,3784],{"class":69,"line":155},[67,3777,2274],{"class":77},[67,3779,1900],{"class":73},[67,3781,1298],{"class":77},[67,3783,1900],{"class":73},[67,3785,1922],{"class":77},[67,3787,3788],{"class":69,"line":161},[67,3789,2288],{"class":77},[67,3791,3792],{"class":69,"line":167},[67,3793,3794],{"class":202},"\u002F\u002F上式可以进行拆分\n",[67,3796,3797,3799,3801,3803],{"class":69,"line":173},[67,3798,867],{"class":73},[67,3800,3752],{"class":77},[67,3802,909],{"class":73},[67,3804,3805],{"class":208},"0\n",[67,3807,3808,3810],{"class":69,"line":180},[67,3809,74],{"class":73},[67,3811,3812],{"class":77},"(;;;)\n",[67,3814,3815],{"class":69,"line":186},[67,3816,2269],{"class":77},[67,3818,3819,3822,3825,3827,3829],{"class":69,"line":444},[67,3820,3821],{"class":73},"    if",[67,3823,3824],{"class":77},"(i",[67,3826,2433],{"class":73},[67,3828,1303],{"class":208},[67,3830,870],{"class":77},[67,3832,3833],{"class":69,"line":2335},[67,3834,2752],{"class":77},[67,3836,3837,3840],{"class":69,"line":2340},[67,3838,3839],{"class":73},"        break",[67,3841,2017],{"class":77},[67,3843,3844],{"class":69,"line":2346},[67,3845,2909],{"class":77},[67,3847,3848,3850,3852,3854,3856],{"class":69,"line":2351},[67,3849,2274],{"class":77},[67,3851,1900],{"class":73},[67,3853,1298],{"class":77},[67,3855,1900],{"class":73},[67,3857,1922],{"class":77},[67,3859,3860,3863,3865],{"class":69,"line":2365},[67,3861,3862],{"class":77},"    i",[67,3864,3014],{"class":73},[67,3866,2017],{"class":77},[67,3868,3869],{"class":69,"line":2370},[67,3870,2288],{"class":77},[19,3872,3873],{},"小练习",[57,3875,3877],{"className":852,"code":3876,"language":854,"meta":62,"style":62},"#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",[64,3878,3879,3885,3895,3903,3907,3912,3917,3945,3949,3954,3959,4000,4004,4017,4021,4025,4029,4041,4045,4049],{"__ignoreMap":62},[67,3880,3881,3883],{"class":69,"line":70},[67,3882,2672],{"class":73},[67,3884,2675],{"class":84},[67,3886,3887,3889,3891,3893],{"class":69,"line":143},[67,3888,2680],{"class":73},[67,3890,2683],{"class":73},[67,3892,2686],{"class":112},[67,3894,2017],{"class":77},[67,3896,3897,3899,3901],{"class":69,"line":149},[67,3898,867],{"class":73},[67,3900,2695],{"class":112},[67,3902,2698],{"class":77},[67,3904,3905],{"class":69,"line":155},[67,3906,2269],{"class":77},[67,3908,3909],{"class":69,"line":161},[67,3910,3911],{"class":202},"    \u002F\u002F敲桌子案例\n",[67,3913,3914],{"class":69,"line":167},[67,3915,3916],{"class":202},"    \u002F\u002F1.先输出1-100的数字\n",[67,3918,3919,3922,3924,3926,3928,3930,3932,3935,3937,3939,3941,3943],{"class":69,"line":173},[67,3920,3921],{"class":73},"    for",[67,3923,864],{"class":77},[67,3925,867],{"class":73},[67,3927,3752],{"class":77},[67,3929,909],{"class":73},[67,3931,1077],{"class":208},[67,3933,3934],{"class":77},"; i",[67,3936,2311],{"class":73},[67,3938,1169],{"class":208},[67,3940,3934],{"class":77},[67,3942,3014],{"class":73},[67,3944,870],{"class":77},[67,3946,3947],{"class":69,"line":180},[67,3948,2752],{"class":77},[67,3950,3951],{"class":69,"line":186},[67,3952,3953],{"class":202},"        \u002F\u002F2.从100个数字中找到特殊数字，打印敲桌子\n",[67,3955,3956],{"class":69,"line":444},[67,3957,3958],{"class":202},"        \u002F\u002F如果是7的倍数、个为有7、或者十位有7,打印敲桌子\n",[67,3960,3961,3963,3965,3967,3969,3971,3973,3976,3978,3980,3982,3984,3986,3988,3990,3992,3994,3996,3998],{"class":69,"line":2335},[67,3962,3218],{"class":73},[67,3964,3824],{"class":77},[67,3966,1186],{"class":73},[67,3968,1227],{"class":208},[67,3970,3670],{"class":73},[67,3972,1051],{"class":208},[67,3974,3975],{"class":73}," ||",[67,3977,3752],{"class":77},[67,3979,1186],{"class":73},[67,3981,1303],{"class":208},[67,3983,3670],{"class":73},[67,3985,1227],{"class":208},[67,3987,3975],{"class":73},[67,3989,3752],{"class":77},[67,3991,1440],{"class":73},[67,3993,1303],{"class":208},[67,3995,3670],{"class":73},[67,3997,1227],{"class":208},[67,3999,870],{"class":77},[67,4001,4002],{"class":69,"line":2340},[67,4003,3231],{"class":77},[67,4005,4006,4008,4010,4013,4015],{"class":69,"line":2346},[67,4007,3236],{"class":77},[67,4009,1900],{"class":73},[67,4011,4012],{"class":84},"\"敲桌子\"",[67,4014,1900],{"class":73},[67,4016,1922],{"class":77},[67,4018,4019],{"class":69,"line":2351},[67,4020,3250],{"class":77},[67,4022,4023],{"class":69,"line":2365},[67,4024,3291],{"class":73},[67,4026,4027],{"class":69,"line":2370},[67,4028,3231],{"class":77},[67,4030,4031,4033,4035,4037,4039],{"class":69,"line":2376},[67,4032,3236],{"class":77},[67,4034,1900],{"class":73},[67,4036,1298],{"class":77},[67,4038,1900],{"class":73},[67,4040,1922],{"class":77},[67,4042,4043],{"class":69,"line":2397},[67,4044,3250],{"class":77},[67,4046,4047],{"class":69,"line":2402},[67,4048,2909],{"class":77},[67,4050,4051],{"class":69,"line":2416},[67,4052,2288],{"class":77},[19,4054,4055],{},"嵌套实现星图",[57,4057,4059],{"className":852,"code":4058,"language":854,"meta":62,"style":62},"#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",[64,4060,4061,4067,4077,4085,4089,4115,4119,4148,4152,4163,4167,4176,4180],{"__ignoreMap":62},[67,4062,4063,4065],{"class":69,"line":70},[67,4064,2672],{"class":73},[67,4066,2675],{"class":84},[67,4068,4069,4071,4073,4075],{"class":69,"line":143},[67,4070,2680],{"class":73},[67,4072,2683],{"class":73},[67,4074,2686],{"class":112},[67,4076,2017],{"class":77},[67,4078,4079,4081,4083],{"class":69,"line":149},[67,4080,867],{"class":73},[67,4082,2695],{"class":112},[67,4084,2698],{"class":77},[67,4086,4087],{"class":69,"line":155},[67,4088,2269],{"class":77},[67,4090,4091,4093,4095,4097,4099,4101,4103,4105,4107,4109,4111,4113],{"class":69,"line":161},[67,4092,3921],{"class":73},[67,4094,2381],{"class":77},[67,4096,867],{"class":73},[67,4098,3752],{"class":77},[67,4100,909],{"class":73},[67,4102,1051],{"class":208},[67,4104,3759],{"class":77},[67,4106,1766],{"class":73},[67,4108,1303],{"class":208},[67,4110,3759],{"class":77},[67,4112,3014],{"class":73},[67,4114,870],{"class":77},[67,4116,4117],{"class":69,"line":167},[67,4118,2752],{"class":77},[67,4120,4121,4124,4126,4128,4131,4133,4135,4138,4140,4142,4144,4146],{"class":69,"line":173},[67,4122,4123],{"class":73},"        for",[67,4125,2381],{"class":77},[67,4127,867],{"class":73},[67,4129,4130],{"class":77}," j",[67,4132,909],{"class":73},[67,4134,1051],{"class":208},[67,4136,4137],{"class":77},";j",[67,4139,1766],{"class":73},[67,4141,1303],{"class":208},[67,4143,4137],{"class":77},[67,4145,3014],{"class":73},[67,4147,870],{"class":77},[67,4149,4150],{"class":69,"line":180},[67,4151,3231],{"class":77},[67,4153,4154,4156,4158,4161],{"class":69,"line":186},[67,4155,3236],{"class":77},[67,4157,1900],{"class":73},[67,4159,4160],{"class":84},"\"*\"",[67,4162,2017],{"class":77},[67,4164,4165],{"class":69,"line":444},[67,4166,3250],{"class":77},[67,4168,4169,4172,4174],{"class":69,"line":2335},[67,4170,4171],{"class":77},"        cout",[67,4173,1900],{"class":73},[67,4175,1922],{"class":77},[67,4177,4178],{"class":69,"line":2340},[67,4179,2909],{"class":77},[67,4181,4182],{"class":69,"line":2346},[67,4183,2288],{"class":77},[19,4185,4186],{},"乘法口诀表",[57,4188,4190],{"className":852,"code":4189,"language":854,"meta":62,"style":62},"#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",[64,4191,4192,4198,4208,4216,4220,4246,4250,4275,4279,4319,4323,4331,4335],{"__ignoreMap":62},[67,4193,4194,4196],{"class":69,"line":70},[67,4195,2672],{"class":73},[67,4197,3056],{"class":84},[67,4199,4200,4202,4204,4206],{"class":69,"line":143},[67,4201,2680],{"class":73},[67,4203,2683],{"class":73},[67,4205,2686],{"class":112},[67,4207,2017],{"class":77},[67,4209,4210,4212,4214],{"class":69,"line":149},[67,4211,867],{"class":73},[67,4213,2695],{"class":112},[67,4215,2698],{"class":77},[67,4217,4218],{"class":69,"line":155},[67,4219,2269],{"class":77},[67,4221,4222,4224,4226,4228,4230,4232,4234,4236,4238,4240,4242,4244],{"class":69,"line":161},[67,4223,3921],{"class":73},[67,4225,864],{"class":77},[67,4227,867],{"class":73},[67,4229,3752],{"class":77},[67,4231,909],{"class":73},[67,4233,1077],{"class":208},[67,4235,3759],{"class":77},[67,4237,1766],{"class":73},[67,4239,1303],{"class":208},[67,4241,3759],{"class":77},[67,4243,3014],{"class":73},[67,4245,870],{"class":77},[67,4247,4248],{"class":69,"line":167},[67,4249,2752],{"class":77},[67,4251,4252,4254,4256,4258,4260,4262,4264,4266,4268,4271,4273],{"class":69,"line":173},[67,4253,4123],{"class":73},[67,4255,864],{"class":77},[67,4257,867],{"class":73},[67,4259,4130],{"class":77},[67,4261,909],{"class":73},[67,4263,1077],{"class":208},[67,4265,4137],{"class":77},[67,4267,2311],{"class":73},[67,4269,4270],{"class":77},"i;j",[67,4272,3014],{"class":73},[67,4274,870],{"class":77},[67,4276,4277],{"class":69,"line":180},[67,4278,3231],{"class":77},[67,4280,4281,4283,4285,4287,4289,4291,4293,4295,4297,4300,4302,4304,4306,4308,4310,4313,4315,4317],{"class":69,"line":186},[67,4282,3236],{"class":77},[67,4284,1900],{"class":73},[67,4286,1324],{"class":77},[67,4288,1900],{"class":73},[67,4290,4160],{"class":84},[67,4292,1900],{"class":73},[67,4294,1298],{"class":77},[67,4296,1900],{"class":73},[67,4298,4299],{"class":84},"\"=\"",[67,4301,1900],{"class":73},[67,4303,1298],{"class":77},[67,4305,1312],{"class":73},[67,4307,1324],{"class":77},[67,4309,1900],{"class":73},[67,4311,4312],{"class":84},"'",[67,4314,1957],{"class":208},[67,4316,4312],{"class":84},[67,4318,2017],{"class":77},[67,4320,4321],{"class":69,"line":444},[67,4322,3250],{"class":77},[67,4324,4325,4327,4329],{"class":69,"line":2335},[67,4326,4171],{"class":77},[67,4328,1900],{"class":73},[67,4330,1922],{"class":77},[67,4332,4333],{"class":69,"line":2340},[67,4334,2909],{"class":77},[67,4336,4337],{"class":69,"line":2346},[67,4338,2288],{"class":77},[14,4340,4342],{"id":4341},"_163跳出语句","1.6.3跳出语句",[815,4344,4345],{},[818,4346,4347],{},"break语句\n作用：用于跳出选择结构或者循环结构",[19,4349,4350],{},"break使用时机：",[1863,4352,4353,4356,4359],{},[818,4354,4355],{},"出现在switch条件语句中，作用是终止case并跳出switch",[818,4357,4358],{},"出现在循环结构中，作用是跳出当前的循环结构",[818,4360,4361],{},"出现在嵌套循环中，跳出最近的内层循环语句",[815,4363,4364,4367],{"start":143},[818,4365,4366],{},"continue语句\n作用：在循环语句中，跳过本次循环中余下尚未执行的语句，继续执行下一次循环",[818,4368,4369],{},"goto语句\n语法：goto 标记;",[19,4371,4372],{},"解释：如果标记的名称存在，执行到goto语句时，会跳转到标记的位置（类似于html中的a标签）",[57,4374,4376],{"className":852,"code":4375,"language":854,"meta":62,"style":62},"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",[64,4377,4378,4386,4390,4403,4413,4426,4439,4452,4460,4476],{"__ignoreMap":62},[67,4379,4380,4382,4384],{"class":69,"line":70},[67,4381,867],{"class":73},[67,4383,2695],{"class":112},[67,4385,2698],{"class":77},[67,4387,4388],{"class":69,"line":143},[67,4389,2269],{"class":77},[67,4391,4392,4394,4396,4399,4401],{"class":69,"line":149},[67,4393,2274],{"class":77},[67,4395,1900],{"class":73},[67,4397,4398],{"class":84},"\"1\"",[67,4400,1900],{"class":73},[67,4402,1922],{"class":77},[67,4404,4405,4408,4411],{"class":69,"line":155},[67,4406,4407],{"class":73},"    goto",[67,4409,4410],{"class":112}," FLAG",[67,4412,2017],{"class":77},[67,4414,4415,4417,4419,4422,4424],{"class":69,"line":161},[67,4416,2274],{"class":77},[67,4418,1900],{"class":73},[67,4420,4421],{"class":84},"\"2\"",[67,4423,1900],{"class":73},[67,4425,1922],{"class":77},[67,4427,4428,4430,4432,4435,4437],{"class":69,"line":167},[67,4429,2274],{"class":77},[67,4431,1900],{"class":73},[67,4433,4434],{"class":84},"\"3\"",[67,4436,1900],{"class":73},[67,4438,1922],{"class":77},[67,4440,4441,4443,4445,4448,4450],{"class":69,"line":173},[67,4442,2274],{"class":77},[67,4444,1900],{"class":73},[67,4446,4447],{"class":84},"\"4\"",[67,4449,1900],{"class":73},[67,4451,1922],{"class":77},[67,4453,4454,4457],{"class":69,"line":180},[67,4455,4456],{"class":112},"    FLAG",[67,4458,4459],{"class":77},":\n",[67,4461,4462,4464,4466,4469,4471,4473],{"class":69,"line":186},[67,4463,2274],{"class":77},[67,4465,1900],{"class":73},[67,4467,4468],{"class":84},"\"5\"",[67,4470,1900],{"class":73},[67,4472,1965],{"class":77},[67,4474,4475],{"class":202},"\u002F\u002F跳过了2,3,4,直接到5\n",[67,4477,4478],{"class":69,"line":444},[67,4479,2288],{"class":77},[803,4481,4483],{"id":4482},"_17数组","1.7数组",[14,4485,4487],{"id":4486},"_171一维数组","1.7.1一维数组",[815,4489,4490],{},[818,4491,4492],{},"一维数组定义方式",[998,4494,4495,4505],{},[1001,4496,4497],{},[1004,4498,4499,4502],{},[1007,4500,4501],{},"方式",[1007,4503,4504],{},"注意事项",[1044,4506,4507,4521,4531],{},[1004,4508,4509,4515],{},[1049,4510,4511,4512,918],{},"数据类型 数组名",[67,4513,4514],{},"数组长度",[1049,4516,4517,4518,4520],{},"这种方式是先定义再arr",[67,4519,1298],{},"赋值",[1004,4522,4523,4528],{},[1049,4524,4511,4525,4527],{},[67,4526,4514],{},"={值1,值2....};",[1049,4529,4530],{},"如果在初始化数据时，没有全部填写完，会用0来填补剩余数据",[1004,4532,4533,4537],{},[1049,4534,4511,4535,4527],{},[67,4536],{},[1049,4538,4539,4540,4542],{},"int arr",[67,4541],{},";这是不正确的，按照这样的方式定义必须有初始长度",[815,4544,4545],{"start":143},[818,4546,4547],{},"一维数组数组名\n用途：",[1863,4549,4550],{},[818,4551,4552],{},"1.可以统计整个数组在内存中的长度：",[57,4554,4556],{"className":852,"code":4555,"language":854,"meta":62,"style":62},"sizeof(arr);\nsizeof(arr[0]);\n",[64,4557,4558,4565],{"__ignoreMap":62},[67,4559,4560,4562],{"class":69,"line":70},[67,4561,861],{"class":73},[67,4563,4564],{"class":77},"(arr);\n",[67,4566,4567,4569,4572,4574],{"class":69,"line":143},[67,4568,861],{"class":73},[67,4570,4571],{"class":77},"(arr[",[67,4573,1051],{"class":208},[67,4575,4576],{"class":77},"]);\n",[1863,4578,4579],{},[818,4580,4581],{},"2.可以获取数组在内存中的首地址:",[57,4583,4585],{"className":852,"code":4584,"language":854,"meta":62,"style":62},"\u002F\u002F查看16进制的首地址\ncout\u003C\u003Carr\u003C\u003Cendl;\n\u002F\u002F看10进制数\ncout\u003C\u003C(int)&arr[0]\u003C\u003Cendl;\n",[64,4586,4587,4592,4605,4610],{"__ignoreMap":62},[67,4588,4589],{"class":69,"line":70},[67,4590,4591],{"class":202},"\u002F\u002F查看16进制的首地址\n",[67,4593,4594,4596,4598,4601,4603],{"class":69,"line":143},[67,4595,2093],{"class":77},[67,4597,1900],{"class":73},[67,4599,4600],{"class":77},"arr",[67,4602,1900],{"class":73},[67,4604,1922],{"class":77},[67,4606,4607],{"class":69,"line":149},[67,4608,4609],{"class":202},"\u002F\u002F看10进制数\n",[67,4611,4612,4614,4616,4618,4620,4622,4624,4627,4629,4631,4633],{"class":69,"line":155},[67,4613,2093],{"class":77},[67,4615,1900],{"class":73},[67,4617,864],{"class":77},[67,4619,867],{"class":73},[67,4621,260],{"class":77},[67,4623,1211],{"class":73},[67,4625,4626],{"class":77},"arr[",[67,4628,1051],{"class":208},[67,4630,1796],{"class":77},[67,4632,1900],{"class":73},[67,4634,1922],{"class":77},[19,4636,4637],{},"数组名是常量，不可以进行赋值操作\n3. 小案例",[1863,4639,4640],{},[818,4641,4642],{},"1️⃣五只小猪称体重",[57,4644,4646],{"className":852,"code":4645,"language":854,"meta":62,"style":62},"#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",[64,4647,4648,4654,4664,4672,4676,4716,4729,4755,4759,4771,4775,4785,4789,4793,4806,4816],{"__ignoreMap":62},[67,4649,4650,4652],{"class":69,"line":70},[67,4651,2672],{"class":73},[67,4653,2675],{"class":84},[67,4655,4656,4658,4660,4662],{"class":69,"line":143},[67,4657,2680],{"class":73},[67,4659,2683],{"class":73},[67,4661,2686],{"class":112},[67,4663,2017],{"class":77},[67,4665,4666,4668,4670],{"class":69,"line":149},[67,4667,867],{"class":73},[67,4669,2695],{"class":112},[67,4671,2698],{"class":77},[67,4673,4674],{"class":69,"line":155},[67,4675,2269],{"class":77},[67,4677,4678,4680,4683,4685,4687,4689,4691,4694,4696,4699,4701,4703,4705,4708,4710,4713],{"class":69,"line":161},[67,4679,2707],{"class":73},[67,4681,4682],{"class":77}," arr[",[67,4684,1177],{"class":208},[67,4686,1796],{"class":77},[67,4688,909],{"class":73},[67,4690,1752],{"class":77},[67,4692,4693],{"class":208},"300",[67,4695,1236],{"class":77},[67,4697,4698],{"class":208},"350",[67,4700,1236],{"class":77},[67,4702,2445],{"class":208},[67,4704,1236],{"class":77},[67,4706,4707],{"class":208},"400",[67,4709,1236],{"class":77},[67,4711,4712],{"class":208},"250",[67,4714,4715],{"class":77},"};\n",[67,4717,4718,4720,4723,4725,4727],{"class":69,"line":167},[67,4719,2707],{"class":73},[67,4721,4722],{"class":77}," tmp",[67,4724,909],{"class":73},[67,4726,1051],{"class":208},[67,4728,2017],{"class":77},[67,4730,4731,4733,4735,4737,4739,4741,4743,4745,4747,4749,4751,4753],{"class":69,"line":173},[67,4732,3921],{"class":73},[67,4734,2381],{"class":77},[67,4736,867],{"class":73},[67,4738,3752],{"class":77},[67,4740,909],{"class":73},[67,4742,1051],{"class":208},[67,4744,3759],{"class":77},[67,4746,1766],{"class":73},[67,4748,1177],{"class":208},[67,4750,3759],{"class":77},[67,4752,3014],{"class":73},[67,4754,870],{"class":77},[67,4756,4757],{"class":69,"line":180},[67,4758,2752],{"class":77},[67,4760,4761,4763,4766,4768],{"class":69,"line":186},[67,4762,3218],{"class":73},[67,4764,4765],{"class":77},"(tmp",[67,4767,1766],{"class":73},[67,4769,4770],{"class":77},"arr[i])\n",[67,4772,4773],{"class":69,"line":444},[67,4774,3231],{"class":77},[67,4776,4777,4780,4782],{"class":69,"line":2335},[67,4778,4779],{"class":77},"            tmp",[67,4781,909],{"class":73},[67,4783,4784],{"class":77},"arr[i];\n",[67,4786,4787],{"class":69,"line":2340},[67,4788,3250],{"class":77},[67,4790,4791],{"class":69,"line":2346},[67,4792,2909],{"class":77},[67,4794,4795,4797,4799,4802,4804],{"class":69,"line":2351},[67,4796,2274],{"class":77},[67,4798,1900],{"class":73},[67,4800,4801],{"class":77},"tmp",[67,4803,1900],{"class":73},[67,4805,1922],{"class":77},[67,4807,4808,4811,4814],{"class":69,"line":2365},[67,4809,4810],{"class":73},"    return",[67,4812,4813],{"class":208}," 0",[67,4815,2017],{"class":77},[67,4817,4818],{"class":69,"line":2370},[67,4819,2288],{"class":77},[1863,4821,4822],{},[818,4823,4824],{},"2️⃣数组元素逆置",[57,4826,4828],{"className":852,"code":4827,"language":854,"meta":62,"style":62},"\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",[64,4829,4830,4835,4841,4851,4859,4863,4898,4913,4945,4958,4963,4968,4980,4990,5000,5005,5014,5024,5029,5034,5061,5065,5081,5085,5096,5105],{"__ignoreMap":62},[67,4831,4832],{"class":69,"line":70},[67,4833,4834],{"class":202},"\u002F\u002F元素逆置\n",[67,4836,4837,4839],{"class":69,"line":143},[67,4838,2672],{"class":73},[67,4840,2675],{"class":84},[67,4842,4843,4845,4847,4849],{"class":69,"line":149},[67,4844,2680],{"class":73},[67,4846,2683],{"class":73},[67,4848,2686],{"class":112},[67,4850,2017],{"class":77},[67,4852,4853,4855,4857],{"class":69,"line":155},[67,4854,867],{"class":73},[67,4856,2695],{"class":112},[67,4858,2698],{"class":77},[67,4860,4861],{"class":69,"line":161},[67,4862,2269],{"class":77},[67,4864,4865,4868,4870,4872,4874,4876,4878,4880,4882,4884,4886,4888,4890,4892,4894,4896],{"class":69,"line":167},[67,4866,4867],{"class":73},"   int",[67,4869,4682],{"class":77},[67,4871,1177],{"class":208},[67,4873,1796],{"class":77},[67,4875,909],{"class":73},[67,4877,1752],{"class":77},[67,4879,1077],{"class":208},[67,4881,1236],{"class":77},[67,4883,939],{"class":208},[67,4885,1236],{"class":77},[67,4887,933],{"class":208},[67,4889,1236],{"class":77},[67,4891,1151],{"class":208},[67,4893,1236],{"class":77},[67,4895,1177],{"class":208},[67,4897,4715],{"class":77},[67,4899,4900,4902,4904,4906,4908,4910],{"class":69,"line":173},[67,4901,4867],{"class":73},[67,4903,580],{"class":77},[67,4905,909],{"class":73},[67,4907,1051],{"class":208},[67,4909,918],{"class":77},[67,4911,4912],{"class":202},"\u002F\u002F起始下标\n",[67,4914,4915,4917,4920,4923,4926,4929,4931,4933,4936,4938,4940,4942],{"class":69,"line":180},[67,4916,4867],{"class":73},[67,4918,4919],{"class":77}," end",[67,4921,4922],{"class":73},"=sizeof",[67,4924,4925],{"class":77},"(arr)",[67,4927,4928],{"class":73},"\u002Fsizeof",[67,4930,4571],{"class":77},[67,4932,1051],{"class":208},[67,4934,4935],{"class":77},"])",[67,4937,1389],{"class":73},[67,4939,1077],{"class":208},[67,4941,918],{"class":77},[67,4943,4944],{"class":202},"\u002F\u002F结束下标\n",[67,4946,4947,4950,4953,4955],{"class":69,"line":186},[67,4948,4949],{"class":73},"   while",[67,4951,4952],{"class":77}," (start",[67,4954,1766],{"class":73},[67,4956,4957],{"class":77},"end)\n",[67,4959,4960],{"class":69,"line":444},[67,4961,4962],{"class":77},"   {\n",[67,4964,4965],{"class":69,"line":2335},[67,4966,4967],{"class":202},"    \u002F\u002F实现元素互换代码\n",[67,4969,4970,4972,4975,4977],{"class":69,"line":2340},[67,4971,2707],{"class":73},[67,4973,4974],{"class":77}," temp",[67,4976,909],{"class":73},[67,4978,4979],{"class":77},"arr[start];\n",[67,4981,4982,4985,4987],{"class":69,"line":2346},[67,4983,4984],{"class":77},"    arr[start]",[67,4986,909],{"class":73},[67,4988,4989],{"class":77},"arr[end];\n",[67,4991,4992,4995,4997],{"class":69,"line":2351},[67,4993,4994],{"class":77},"    arr[end]",[67,4996,909],{"class":73},[67,4998,4999],{"class":77},"temp;\n",[67,5001,5002],{"class":69,"line":2365},[67,5003,5004],{"class":202},"    \u002F\u002F下标更新\n",[67,5006,5007,5010,5012],{"class":69,"line":2370},[67,5008,5009],{"class":77},"    start",[67,5011,3014],{"class":73},[67,5013,2017],{"class":77},[67,5015,5016,5019,5022],{"class":69,"line":2376},[67,5017,5018],{"class":77},"    end",[67,5020,5021],{"class":73},"--",[67,5023,2017],{"class":77},[67,5025,5026],{"class":69,"line":2397},[67,5027,5028],{"class":77},"   }\n",[67,5030,5031],{"class":69,"line":2402},[67,5032,5033],{"class":202},"   \u002F\u002F输出逆置后的数组\n",[67,5035,5036,5039,5041,5043,5045,5047,5049,5051,5053,5055,5057,5059],{"class":69,"line":2416},[67,5037,5038],{"class":73},"   for",[67,5040,2381],{"class":77},[67,5042,867],{"class":73},[67,5044,3752],{"class":77},[67,5046,909],{"class":73},[67,5048,1051],{"class":208},[67,5050,3759],{"class":77},[67,5052,1766],{"class":73},[67,5054,1177],{"class":208},[67,5056,3759],{"class":77},[67,5058,3014],{"class":73},[67,5060,870],{"class":77},[67,5062,5063],{"class":69,"line":2421},[67,5064,4962],{"class":77},[67,5066,5067,5069,5071,5074,5076,5079],{"class":69,"line":2450},[67,5068,2274],{"class":77},[67,5070,1900],{"class":73},[67,5072,5073],{"class":77},"arr[i]",[67,5075,1900],{"class":73},[67,5077,5078],{"class":84},"\" \"",[67,5080,2017],{"class":77},[67,5082,5083],{"class":69,"line":2455},[67,5084,5028],{"class":77},[67,5086,5087,5090,5092,5094],{"class":69,"line":2472},[67,5088,5089],{"class":112},"   system",[67,5091,864],{"class":77},[67,5093,3030],{"class":84},[67,5095,3440],{"class":77},[67,5097,5098,5101,5103],{"class":69,"line":2477},[67,5099,5100],{"class":73},"   return",[67,5102,4813],{"class":208},[67,5104,2017],{"class":77},[67,5106,5107],{"class":69,"line":2482},[67,5108,2288],{"class":77},[1863,5110,5111],{},[818,5112,5113],{},"3️⃣冒泡排序\n对数组元素进行排序，做法：\n比较相邻的元素，如果第一个比第二个大，就交换他们；对每一对相邻元素做同样的工作，执行完毕后，找到第一个最大值；重复以上的步骤，每次比较次数-1,直到不需要比较",[57,5115,5117],{"className":852,"code":5116,"language":854,"meta":62,"style":62},"\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",[64,5118,5119,5124,5130,5140,5148,5152,5204,5217,5243,5247,5261,5265,5270,5275,5305,5309,5314,5348,5352,5357,5377,5382,5394,5410,5425,5430,5434,5438,5451,5477,5481,5495,5499,5507],{"__ignoreMap":62},[67,5120,5121],{"class":69,"line":70},[67,5122,5123],{"class":202},"\u002F\u002F冒泡排序,升序\n",[67,5125,5126,5128],{"class":69,"line":143},[67,5127,2672],{"class":73},[67,5129,2675],{"class":84},[67,5131,5132,5134,5136,5138],{"class":69,"line":149},[67,5133,2680],{"class":73},[67,5135,2683],{"class":73},[67,5137,2686],{"class":112},[67,5139,2017],{"class":77},[67,5141,5142,5144,5146],{"class":69,"line":155},[67,5143,867],{"class":73},[67,5145,2695],{"class":112},[67,5147,2698],{"class":77},[67,5149,5150],{"class":69,"line":161},[67,5151,2269],{"class":77},[67,5153,5154,5156,5158,5160,5163,5165,5168,5170,5172,5174,5176,5178,5180,5182,5184,5186,5188,5190,5192,5194,5196,5198,5200,5202],{"class":69,"line":167},[67,5155,2707],{"class":73},[67,5157,4682],{"class":77},[67,5159,1278],{"class":208},[67,5161,5162],{"class":77},"] ",[67,5164,909],{"class":73},[67,5166,5167],{"class":77}," {",[67,5169,1151],{"class":208},[67,5171,1236],{"class":77},[67,5173,939],{"class":208},[67,5175,1236],{"class":77},[67,5177,1253],{"class":208},[67,5179,1236],{"class":77},[67,5181,1051],{"class":208},[67,5183,1236],{"class":77},[67,5185,1177],{"class":208},[67,5187,1236],{"class":77},[67,5189,1227],{"class":208},[67,5191,1236],{"class":77},[67,5193,1077],{"class":208},[67,5195,1236],{"class":77},[67,5197,933],{"class":208},[67,5199,1236],{"class":77},[67,5201,1278],{"class":208},[67,5203,4715],{"class":77},[67,5205,5206,5208,5210,5213,5215],{"class":69,"line":173},[67,5207,2274],{"class":77},[67,5209,1900],{"class":73},[67,5211,5212],{"class":84},"\"排序前：\"",[67,5214,1900],{"class":73},[67,5216,1922],{"class":77},[67,5218,5219,5221,5223,5225,5227,5229,5231,5233,5235,5237,5239,5241],{"class":69,"line":180},[67,5220,3921],{"class":73},[67,5222,2381],{"class":77},[67,5224,867],{"class":73},[67,5226,3752],{"class":77},[67,5228,909],{"class":73},[67,5230,1051],{"class":208},[67,5232,3759],{"class":77},[67,5234,1766],{"class":73},[67,5236,1278],{"class":208},[67,5238,3759],{"class":77},[67,5240,3014],{"class":73},[67,5242,870],{"class":77},[67,5244,5245],{"class":69,"line":186},[67,5246,2752],{"class":77},[67,5248,5249,5251,5253,5255,5257,5259],{"class":69,"line":444},[67,5250,4171],{"class":77},[67,5252,1900],{"class":73},[67,5254,5073],{"class":77},[67,5256,1900],{"class":73},[67,5258,5078],{"class":84},[67,5260,2017],{"class":77},[67,5262,5263],{"class":69,"line":2335},[67,5264,2909],{"class":77},[67,5266,5267],{"class":69,"line":2340},[67,5268,5269],{"class":202},"    \u002F\u002F开始冒泡排序\n",[67,5271,5272],{"class":69,"line":2346},[67,5273,5274],{"class":202},"    \u002F\u002F总共排序轮数为 元素个数-1\n",[67,5276,5277,5279,5281,5283,5285,5287,5289,5291,5293,5295,5297,5299,5301,5303],{"class":69,"line":2351},[67,5278,3921],{"class":73},[67,5280,2381],{"class":77},[67,5282,867],{"class":73},[67,5284,3752],{"class":77},[67,5286,909],{"class":73},[67,5288,1051],{"class":208},[67,5290,3759],{"class":77},[67,5292,1766],{"class":73},[67,5294,1278],{"class":208},[67,5296,1389],{"class":73},[67,5298,1077],{"class":208},[67,5300,3759],{"class":77},[67,5302,3014],{"class":73},[67,5304,870],{"class":77},[67,5306,5307],{"class":69,"line":2365},[67,5308,2752],{"class":77},[67,5310,5311],{"class":69,"line":2370},[67,5312,5313],{"class":202},"        \u002F\u002F内层循环对比 次数=元素个数-1-当前轮数\n",[67,5315,5316,5318,5320,5322,5324,5326,5328,5330,5332,5334,5336,5338,5340,5342,5344,5346],{"class":69,"line":2376},[67,5317,4123],{"class":73},[67,5319,2381],{"class":77},[67,5321,867],{"class":73},[67,5323,4130],{"class":77},[67,5325,909],{"class":73},[67,5327,1051],{"class":208},[67,5329,4137],{"class":77},[67,5331,1766],{"class":73},[67,5333,1278],{"class":208},[67,5335,1389],{"class":73},[67,5337,1298],{"class":77},[67,5339,1389],{"class":73},[67,5341,1077],{"class":208},[67,5343,4137],{"class":77},[67,5345,3014],{"class":73},[67,5347,870],{"class":77},[67,5349,5350],{"class":69,"line":2397},[67,5351,3231],{"class":77},[67,5353,5354],{"class":69,"line":2402},[67,5355,5356],{"class":202},"            \u002F\u002F如果前一个元素大于后一个元素，则交换它们\n",[67,5358,5359,5362,5365,5367,5370,5372,5374],{"class":69,"line":2416},[67,5360,5361],{"class":73},"            if",[67,5363,5364],{"class":77},"(arr[j]",[67,5366,1816],{"class":73},[67,5368,5369],{"class":77},"arr[j",[67,5371,1338],{"class":73},[67,5373,1077],{"class":208},[67,5375,5376],{"class":77},"])\n",[67,5378,5379],{"class":69,"line":2421},[67,5380,5381],{"class":77},"            {\n",[67,5383,5384,5387,5389,5391],{"class":69,"line":2450},[67,5385,5386],{"class":73},"                int",[67,5388,4974],{"class":77},[67,5390,909],{"class":73},[67,5392,5393],{"class":77},"arr[j];\n",[67,5395,5396,5399,5401,5403,5405,5407],{"class":69,"line":2455},[67,5397,5398],{"class":77},"                arr[j]",[67,5400,909],{"class":73},[67,5402,5369],{"class":77},[67,5404,1338],{"class":73},[67,5406,1077],{"class":208},[67,5408,5409],{"class":77},"];\n",[67,5411,5412,5415,5417,5419,5421,5423],{"class":69,"line":2472},[67,5413,5414],{"class":77},"                arr[j",[67,5416,1338],{"class":73},[67,5418,1077],{"class":208},[67,5420,1796],{"class":77},[67,5422,909],{"class":73},[67,5424,4999],{"class":77},[67,5426,5427],{"class":69,"line":2477},[67,5428,5429],{"class":77},"            }\n",[67,5431,5432],{"class":69,"line":2482},[67,5433,3250],{"class":77},[67,5435,5436],{"class":69,"line":2487},[67,5437,2909],{"class":77},[67,5439,5440,5442,5444,5447,5449],{"class":69,"line":2501},[67,5441,2274],{"class":77},[67,5443,1900],{"class":73},[67,5445,5446],{"class":84},"\"排序后：\"",[67,5448,1900],{"class":73},[67,5450,1922],{"class":77},[67,5452,5453,5455,5457,5459,5461,5463,5465,5467,5469,5471,5473,5475],{"class":69,"line":2506},[67,5454,3921],{"class":73},[67,5456,2381],{"class":77},[67,5458,867],{"class":73},[67,5460,3752],{"class":77},[67,5462,909],{"class":73},[67,5464,1051],{"class":208},[67,5466,3759],{"class":77},[67,5468,1766],{"class":73},[67,5470,1278],{"class":208},[67,5472,3759],{"class":77},[67,5474,3014],{"class":73},[67,5476,870],{"class":77},[67,5478,5479],{"class":69,"line":3298},[67,5480,2752],{"class":77},[67,5482,5483,5485,5487,5489,5491,5493],{"class":69,"line":3312},[67,5484,4171],{"class":77},[67,5486,1900],{"class":73},[67,5488,5073],{"class":77},[67,5490,1900],{"class":73},[67,5492,5078],{"class":84},[67,5494,2017],{"class":77},[67,5496,5497],{"class":69,"line":3320},[67,5498,2909],{"class":77},[67,5500,5501,5503,5505],{"class":69,"line":3325},[67,5502,4810],{"class":73},[67,5504,4813],{"class":208},[67,5506,2017],{"class":77},[67,5508,5509],{"class":69,"line":3331},[67,5510,2288],{"class":77},[14,5512,5514],{"id":5513},"_172二维数组","1.7.2二维数组",[815,5516,5517],{},[818,5518,5519],{},"二维数组的四种定义方式",[998,5521,5522,5531],{},[1001,5523,5524],{},[1004,5525,5526,5529],{},[1007,5527,5528],{},"序号",[1007,5530,4501],{},[1044,5532,5533,5543,5552,5561,5570],{},[1004,5534,5535,5537],{},[1049,5536,1077],{},[1049,5538,5539,5540,918],{},"数据类型 数组名[行数]",[67,5541,5542],{},"列数",[1004,5544,5545,5547],{},[1049,5546,939],{},[1049,5548,5539,5549,5551],{},[67,5550,5542],{},"={ {数据1,数据2}，{数据3，数据4}... }",[1004,5553,5554,5556],{},[1049,5555,933],{},[1049,5557,5539,5558,5560],{},[67,5559,5542],{},"={数据1,数据2,数据3...}",[1004,5562,5563,5565],{},[1049,5564,1151],{},[1049,5566,5567,5568,5560],{},"数据类型 数组名[]",[67,5569,5542],{},[1004,5571,5572,5575],{},[1049,5573,5574],{},"注意：不能只省略列数",[1049,5576],{},[815,5578,5579],{"start":143},[818,5580,5581],{},"二维数组数组名",[1863,5583,5584,5587],{},[818,5585,5586],{},"1.查看二维数组所占内存空间",[818,5588,5589],{},"2.获取二维数组首地址",[19,5591,5592],{},"已知二维数组，求二维数组的行数与列数",[57,5594,5596],{"className":852,"code":5595,"language":854,"meta":62,"style":62},"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",[64,5597,5598,5606,5610,5628,5632,5650,5666,5671,5696,5729],{"__ignoreMap":62},[67,5599,5600,5602,5604],{"class":69,"line":70},[67,5601,867],{"class":73},[67,5603,2695],{"class":112},[67,5605,2698],{"class":77},[67,5607,5608],{"class":69,"line":143},[67,5609,2269],{"class":77},[67,5611,5612,5614,5616,5618,5621,5623,5625],{"class":69,"line":149},[67,5613,2707],{"class":73},[67,5615,4682],{"class":77},[67,5617,939],{"class":208},[67,5619,5620],{"class":77},"][",[67,5622,933],{"class":208},[67,5624,1796],{"class":77},[67,5626,5627],{"class":73},"=\n",[67,5629,5630],{"class":69,"line":155},[67,5631,2752],{"class":77},[67,5633,5634,5637,5639,5641,5643,5645,5647],{"class":69,"line":161},[67,5635,5636],{"class":77},"        {",[67,5638,1077],{"class":208},[67,5640,1236],{"class":77},[67,5642,939],{"class":208},[67,5644,1236],{"class":77},[67,5646,933],{"class":208},[67,5648,5649],{"class":77},"},\n",[67,5651,5652,5654,5656,5658,5660,5662,5664],{"class":69,"line":167},[67,5653,5636],{"class":77},[67,5655,1151],{"class":208},[67,5657,1236],{"class":77},[67,5659,1177],{"class":208},[67,5661,1236],{"class":77},[67,5663,1202],{"class":208},[67,5665,2288],{"class":77},[67,5667,5668],{"class":69,"line":173},[67,5669,5670],{"class":77},"    };\n",[67,5672,5673,5675,5677,5680,5682,5684,5686,5688,5690,5692,5694],{"class":69,"line":180},[67,5674,2274],{"class":77},[67,5676,1900],{"class":73},[67,5678,5679],{"class":84},"\"二维数组的行数\"",[67,5681,2096],{"class":73},[67,5683,4925],{"class":77},[67,5685,4928],{"class":73},[67,5687,4571],{"class":77},[67,5689,1051],{"class":208},[67,5691,4935],{"class":77},[67,5693,1900],{"class":73},[67,5695,1922],{"class":77},[67,5697,5698,5700,5702,5705,5707,5709,5711,5713,5715,5717,5719,5721,5723,5725,5727],{"class":69,"line":186},[67,5699,2274],{"class":77},[67,5701,1900],{"class":73},[67,5703,5704],{"class":84},"\"二维数组的列数\"",[67,5706,2096],{"class":73},[67,5708,4571],{"class":77},[67,5710,1051],{"class":208},[67,5712,4935],{"class":77},[67,5714,4928],{"class":73},[67,5716,4571],{"class":77},[67,5718,1051],{"class":208},[67,5720,5620],{"class":77},[67,5722,1051],{"class":208},[67,5724,4935],{"class":77},[67,5726,1900],{"class":73},[67,5728,1922],{"class":77},[67,5730,5731],{"class":69,"line":444},[67,5732,2288],{"class":77},[19,5734,5735],{},"查看二维数组首地址",[57,5737,5739],{"className":852,"code":5738,"language":854,"meta":62,"style":62},"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",[64,5740,5741,5758,5784,5809],{"__ignoreMap":62},[67,5742,5743,5745,5747,5750,5752,5754,5756],{"class":69,"line":70},[67,5744,2093],{"class":77},[67,5746,1900],{"class":73},[67,5748,5749],{"class":84},"\"二维数组首地址：\"",[67,5751,1900],{"class":73},[67,5753,4600],{"class":77},[67,5755,1900],{"class":73},[67,5757,1922],{"class":77},[67,5759,5760,5762,5764,5767,5769,5771,5773,5776,5778,5780,5782],{"class":69,"line":143},[67,5761,2093],{"class":77},[67,5763,1900],{"class":73},[67,5765,5766],{"class":84},"\"二维数组第一行的首地址：\"",[67,5768,1900],{"class":73},[67,5770,864],{"class":77},[67,5772,867],{"class":73},[67,5774,5775],{"class":77},")arr[",[67,5777,1051],{"class":208},[67,5779,1796],{"class":77},[67,5781,1900],{"class":73},[67,5783,1922],{"class":77},[67,5785,5786,5788,5790,5793,5795,5797,5799,5801,5803,5805,5807],{"class":69,"line":149},[67,5787,2093],{"class":77},[67,5789,1900],{"class":73},[67,5791,5792],{"class":84},"\"二维数组第二行的首地址：\"",[67,5794,1900],{"class":73},[67,5796,864],{"class":77},[67,5798,867],{"class":73},[67,5800,5775],{"class":77},[67,5802,1077],{"class":208},[67,5804,1796],{"class":77},[67,5806,1900],{"class":73},[67,5808,1922],{"class":77},[67,5810,5811,5813,5815,5818,5820,5822,5824,5826,5828,5830,5832,5834,5836,5838,5840,5842],{"class":69,"line":155},[67,5812,2093],{"class":77},[67,5814,1900],{"class":73},[67,5816,5817],{"class":84},"\"二维数组第一个元素的首地址:\"",[67,5819,1900],{"class":73},[67,5821,864],{"class":77},[67,5823,867],{"class":73},[67,5825,260],{"class":77},[67,5827,1211],{"class":73},[67,5829,4626],{"class":77},[67,5831,1051],{"class":208},[67,5833,5620],{"class":77},[67,5835,1051],{"class":208},[67,5837,1796],{"class":77},[67,5839,1900],{"class":73},[67,5841,1965],{"class":77},[67,5843,5844],{"class":202},"\u002F\u002F对于数，要加取址符\n",[779,5846,5847],{},"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":62,"searchDepth":143,"depth":143,"links":5849},[5850,5851,5852,5860,5861,5867,5872],{"id":805,"depth":143,"text":806},{"id":812,"depth":143,"text":813},{"id":829,"depth":143,"text":830,"children":5853},[5854,5855,5856,5857,5858,5859],{"id":833,"depth":149,"text":834},{"id":880,"depth":149,"text":881},{"id":947,"depth":149,"text":948},{"id":1881,"depth":149,"text":1882},{"id":1971,"depth":149,"text":1972},{"id":2067,"depth":149,"text":2068},{"id":2109,"depth":143,"text":2110},{"id":2177,"depth":143,"text":2178,"children":5862},[5863,5864,5865,5866],{"id":2181,"depth":149,"text":2182},{"id":2202,"depth":149,"text":2203},{"id":2211,"depth":149,"text":2212},{"id":2220,"depth":149,"text":2221},{"id":2229,"depth":143,"text":2230,"children":5868},[5869,5870,5871],{"id":2233,"depth":149,"text":2234},{"id":2927,"depth":149,"text":2928},{"id":4341,"depth":149,"text":4342},{"id":4482,"depth":143,"text":4483,"children":5873},[5874,5875],{"id":4486,"depth":149,"text":4487},{"id":5513,"depth":149,"text":5514},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch1",{"title":796,"description":62},"wiki\u002F2026-05-24-c++学习\u002Fch1-基本认识","1r5xXbZS-drkqvsSKedLALMb9rI8Aqwv0jRzCBXrWss",{"id":5882,"title":5883,"body":5884,"description":62,"extension":787,"meta":6984,"navigation":176,"path":6985,"seo":6986,"stem":6987,"__hash__":6988},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch2-函数.md","2.函数",{"type":7,"value":5885,"toc":6976},[5886,5889,5893,5901,5909,5912,5978,5982,5985,6061,6065,6068,6071,6074,6287,6291,6296,6360,6365,6432,6437,6528,6531,6636,6640,6643,6649,6793,6797,6800,6814,6817,6862,6865,6973],[10,5887,5883],{"id":5888},"_2函数",[803,5890,5892],{"id":5891},"_21函数概述","2.1函数概述",[815,5894,5895,5898],{},[818,5896,5897],{},"函数的定义一般主要有5个步骤：返回值类型、函数名、参数表列、函数体语句、return表达式",[818,5899,5900],{},"语法：",[57,5902,5907],{"className":5903,"code":5905,"language":5906,"meta":62},[5904],"language-text","返回值类型 函数名 （参数列表）\n{\n    函数体语句\n    return 表达式\n}\n","text",[64,5908,5905],{"__ignoreMap":62},[19,5910,5911],{},"小案例",[57,5913,5915],{"className":852,"code":5914,"language":854,"meta":62,"style":62},"\u002F\u002Fnum1,num2形参\nint add(int num1,int num2)\n{\n    int sum=num1+num2;\n    return sum;\n}\n",[64,5916,5917,5922,5946,5950,5967,5974],{"__ignoreMap":62},[67,5918,5919],{"class":69,"line":70},[67,5920,5921],{"class":202},"\u002F\u002Fnum1,num2形参\n",[67,5923,5924,5926,5929,5931,5933,5937,5939,5941,5944],{"class":69,"line":143},[67,5925,867],{"class":73},[67,5927,5928],{"class":112}," add",[67,5930,864],{"class":77},[67,5932,867],{"class":73},[67,5934,5936],{"class":5935},"s4XuR"," num1",[67,5938,1236],{"class":77},[67,5940,867],{"class":73},[67,5942,5943],{"class":5935}," num2",[67,5945,870],{"class":77},[67,5947,5948],{"class":69,"line":149},[67,5949,2269],{"class":77},[67,5951,5952,5954,5957,5959,5962,5964],{"class":69,"line":155},[67,5953,2707],{"class":73},[67,5955,5956],{"class":77}," sum",[67,5958,909],{"class":73},[67,5960,5961],{"class":77},"num1",[67,5963,1338],{"class":73},[67,5965,5966],{"class":77},"num2;\n",[67,5968,5969,5971],{"class":69,"line":161},[67,5970,4810],{"class":73},[67,5972,5973],{"class":77}," sum;\n",[67,5975,5976],{"class":69,"line":167},[67,5977,2288],{"class":77},[803,5979,5981],{"id":5980},"_22函数调用","2.2函数调用",[19,5983,5984],{},"调用刚刚写的求和函数",[57,5986,5988],{"className":852,"code":5987,"language":854,"meta":62,"style":62},"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",[64,5989,5990,5998,6002,6007,6019,6031,6040,6045,6057],{"__ignoreMap":62},[67,5991,5992,5994,5996],{"class":69,"line":70},[67,5993,867],{"class":73},[67,5995,2695],{"class":112},[67,5997,2698],{"class":77},[67,5999,6000],{"class":69,"line":143},[67,6001,2269],{"class":77},[67,6003,6004],{"class":69,"line":149},[67,6005,6006],{"class":202},"    \u002F\u002Fa,b实参\n",[67,6008,6009,6011,6013,6015,6017],{"class":69,"line":155},[67,6010,2707],{"class":73},[67,6012,2122],{"class":77},[67,6014,909],{"class":73},[67,6016,1051],{"class":208},[67,6018,2017],{"class":77},[67,6020,6021,6023,6025,6027,6029],{"class":69,"line":161},[67,6022,2707],{"class":73},[67,6024,3554],{"class":77},[67,6026,909],{"class":73},[67,6028,1051],{"class":208},[67,6030,2017],{"class":77},[67,6032,6033,6035,6037],{"class":69,"line":167},[67,6034,2734],{"class":77},[67,6036,2153],{"class":73},[67,6038,6039],{"class":77},"a,b;\n",[67,6041,6042],{"class":69,"line":173},[67,6043,6044],{"class":202},"    \u002F\u002F调用函数时，实参值传给了形参\n",[67,6046,6047,6049,6051,6054],{"class":69,"line":180},[67,6048,2274],{"class":77},[67,6050,1900],{"class":73},[67,6052,6053],{"class":112},"add",[67,6055,6056],{"class":77},"(a,b);\n",[67,6058,6059],{"class":69,"line":186},[67,6060,2288],{"class":77},[803,6062,6064],{"id":6063},"_23值传递","2.3值传递",[19,6066,6067],{},"值传递就是函数调用时实参将数值传给形参",[19,6069,6070],{},"值传递时，如果形参发生任何改变，不会影响实参",[19,6072,6073],{},"如果函数不需要返回值，声明的时候可以写void,此时函数返回值可以写return；或者直接不写",[57,6075,6077],{"className":852,"code":6076,"language":854,"meta":62,"style":62},"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",[64,6078,6079,6101,6105,6118,6135,6153,6164,6173,6182,6195,6211,6227,6236,6240,6248,6252,6264,6276,6283],{"__ignoreMap":62},[67,6080,6081,6084,6087,6089,6091,6093,6095,6097,6099],{"class":69,"line":70},[67,6082,6083],{"class":73},"void",[67,6085,6086],{"class":112}," swap",[67,6088,864],{"class":77},[67,6090,867],{"class":73},[67,6092,5936],{"class":5935},[67,6094,1236],{"class":77},[67,6096,867],{"class":73},[67,6098,5943],{"class":5935},[67,6100,870],{"class":77},[67,6102,6103],{"class":69,"line":143},[67,6104,2269],{"class":77},[67,6106,6107,6109,6111,6114,6116],{"class":69,"line":149},[67,6108,2274],{"class":77},[67,6110,1900],{"class":73},[67,6112,6113],{"class":84},"\"交换前：\"",[67,6115,1900],{"class":73},[67,6117,1922],{"class":77},[67,6119,6120,6122,6124,6127,6129,6131,6133],{"class":69,"line":155},[67,6121,2274],{"class":77},[67,6123,1900],{"class":73},[67,6125,6126],{"class":84},"\"num1=\"",[67,6128,1900],{"class":73},[67,6130,5961],{"class":77},[67,6132,1900],{"class":73},[67,6134,1922],{"class":77},[67,6136,6137,6139,6141,6144,6146,6149,6151],{"class":69,"line":161},[67,6138,2274],{"class":77},[67,6140,1900],{"class":73},[67,6142,6143],{"class":84},"\"num2=\"",[67,6145,1900],{"class":73},[67,6147,6148],{"class":77},"num2",[67,6150,1900],{"class":73},[67,6152,1922],{"class":77},[67,6154,6155,6157,6159,6161],{"class":69,"line":167},[67,6156,2707],{"class":73},[67,6158,4974],{"class":77},[67,6160,909],{"class":73},[67,6162,6163],{"class":77},"num1;\n",[67,6165,6166,6169,6171],{"class":69,"line":173},[67,6167,6168],{"class":77},"    num1",[67,6170,909],{"class":73},[67,6172,5966],{"class":77},[67,6174,6175,6178,6180],{"class":69,"line":180},[67,6176,6177],{"class":77},"    num2",[67,6179,909],{"class":73},[67,6181,4999],{"class":77},[67,6183,6184,6186,6188,6191,6193],{"class":69,"line":186},[67,6185,2274],{"class":77},[67,6187,1900],{"class":73},[67,6189,6190],{"class":84},"\"交换后：\"",[67,6192,1900],{"class":73},[67,6194,1922],{"class":77},[67,6196,6197,6199,6201,6203,6205,6207,6209],{"class":69,"line":444},[67,6198,2274],{"class":77},[67,6200,1900],{"class":73},[67,6202,6126],{"class":84},[67,6204,1900],{"class":73},[67,6206,5961],{"class":77},[67,6208,1900],{"class":73},[67,6210,1922],{"class":77},[67,6212,6213,6215,6217,6219,6221,6223,6225],{"class":69,"line":2335},[67,6214,2274],{"class":77},[67,6216,1900],{"class":73},[67,6218,6143],{"class":84},[67,6220,1900],{"class":73},[67,6222,6148],{"class":77},[67,6224,1900],{"class":73},[67,6226,1922],{"class":77},[67,6228,6229,6231,6233],{"class":69,"line":2340},[67,6230,4810],{"class":73},[67,6232,918],{"class":77},[67,6234,6235],{"class":202},"\u002F\u002F或者不写\n",[67,6237,6238],{"class":69,"line":2346},[67,6239,2288],{"class":77},[67,6241,6242,6244,6246],{"class":69,"line":2351},[67,6243,867],{"class":73},[67,6245,2695],{"class":112},[67,6247,2698],{"class":77},[67,6249,6250],{"class":69,"line":2365},[67,6251,2269],{"class":77},[67,6253,6254,6256,6258,6260,6262],{"class":69,"line":2370},[67,6255,2707],{"class":73},[67,6257,2122],{"class":77},[67,6259,909],{"class":73},[67,6261,1303],{"class":208},[67,6263,2017],{"class":77},[67,6265,6266,6268,6270,6272,6274],{"class":69,"line":2376},[67,6267,2707],{"class":73},[67,6269,3554],{"class":77},[67,6271,909],{"class":73},[67,6273,1556],{"class":208},[67,6275,2017],{"class":77},[67,6277,6278,6281],{"class":69,"line":2397},[67,6279,6280],{"class":112},"    swap",[67,6282,6056],{"class":77},[67,6284,6285],{"class":69,"line":2402},[67,6286,2288],{"class":77},[803,6288,6290],{"id":6289},"_24函数的常见形式","2.4函数的常见形式",[815,6292,6293],{},[818,6294,6295],{},"无参无返",[57,6297,6299],{"className":852,"code":6298,"language":854,"meta":62,"style":62},"void test01()\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    \u002F\u002F函数调用\n    test01();\n}\n",[64,6300,6301,6310,6314,6327,6331,6339,6343,6348,6356],{"__ignoreMap":62},[67,6302,6303,6305,6308],{"class":69,"line":70},[67,6304,6083],{"class":73},[67,6306,6307],{"class":112}," test01",[67,6309,2698],{"class":77},[67,6311,6312],{"class":69,"line":143},[67,6313,2269],{"class":77},[67,6315,6316,6318,6320,6323,6325],{"class":69,"line":149},[67,6317,2274],{"class":77},[67,6319,1900],{"class":73},[67,6321,6322],{"class":84},"\"你好\"",[67,6324,1900],{"class":73},[67,6326,1922],{"class":77},[67,6328,6329],{"class":69,"line":155},[67,6330,2288],{"class":77},[67,6332,6333,6335,6337],{"class":69,"line":161},[67,6334,867],{"class":73},[67,6336,2695],{"class":112},[67,6338,2698],{"class":77},[67,6340,6341],{"class":69,"line":167},[67,6342,2269],{"class":77},[67,6344,6345],{"class":69,"line":173},[67,6346,6347],{"class":202},"    \u002F\u002F函数调用\n",[67,6349,6350,6353],{"class":69,"line":180},[67,6351,6352],{"class":112},"    test01",[67,6354,6355],{"class":77},"();\n",[67,6357,6358],{"class":69,"line":186},[67,6359,2288],{"class":77},[815,6361,6362],{"start":143},[818,6363,6364],{},"有参无返",[57,6366,6368],{"className":852,"code":6367,"language":854,"meta":62,"style":62},"void test02(int a)\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    test02(100);\n}\n",[64,6369,6370,6385,6389,6401,6405,6413,6417,6428],{"__ignoreMap":62},[67,6371,6372,6374,6377,6379,6381,6383],{"class":69,"line":70},[67,6373,6083],{"class":73},[67,6375,6376],{"class":112}," test02",[67,6378,864],{"class":77},[67,6380,867],{"class":73},[67,6382,2122],{"class":5935},[67,6384,870],{"class":77},[67,6386,6387],{"class":69,"line":143},[67,6388,2269],{"class":77},[67,6390,6391,6393,6395,6397,6399],{"class":69,"line":149},[67,6392,2274],{"class":77},[67,6394,1900],{"class":73},[67,6396,6322],{"class":84},[67,6398,1900],{"class":73},[67,6400,1922],{"class":77},[67,6402,6403],{"class":69,"line":155},[67,6404,2288],{"class":77},[67,6406,6407,6409,6411],{"class":69,"line":161},[67,6408,867],{"class":73},[67,6410,2695],{"class":112},[67,6412,2698],{"class":77},[67,6414,6415],{"class":69,"line":167},[67,6416,2269],{"class":77},[67,6418,6419,6422,6424,6426],{"class":69,"line":173},[67,6420,6421],{"class":112},"    test02",[67,6423,864],{"class":77},[67,6425,1169],{"class":208},[67,6427,3440],{"class":77},[67,6429,6430],{"class":69,"line":180},[67,6431,2288],{"class":77},[815,6433,6434],{"start":149},[818,6435,6436],{},"无参有返",[57,6438,6440],{"className":852,"code":6439,"language":854,"meta":62,"style":62},"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",[64,6441,6442,6451,6455,6467,6476,6480,6488,6492,6505,6524],{"__ignoreMap":62},[67,6443,6444,6446,6449],{"class":69,"line":70},[67,6445,867],{"class":73},[67,6447,6448],{"class":112}," test03",[67,6450,2698],{"class":77},[67,6452,6453],{"class":69,"line":143},[67,6454,2269],{"class":77},[67,6456,6457,6459,6461,6463,6465],{"class":69,"line":149},[67,6458,2274],{"class":77},[67,6460,1900],{"class":73},[67,6462,6322],{"class":84},[67,6464,1900],{"class":73},[67,6466,1922],{"class":77},[67,6468,6469,6471,6474],{"class":69,"line":155},[67,6470,4810],{"class":73},[67,6472,6473],{"class":208}," 100",[67,6475,2017],{"class":77},[67,6477,6478],{"class":69,"line":161},[67,6479,2288],{"class":77},[67,6481,6482,6484,6486],{"class":69,"line":167},[67,6483,867],{"class":73},[67,6485,2695],{"class":112},[67,6487,2698],{"class":77},[67,6489,6490],{"class":69,"line":173},[67,6491,2269],{"class":77},[67,6493,6494,6496,6498,6500,6503],{"class":69,"line":180},[67,6495,2707],{"class":73},[67,6497,5936],{"class":77},[67,6499,909],{"class":73},[67,6501,6502],{"class":112},"test03",[67,6504,6355],{"class":77},[67,6506,6507,6509,6511,6513,6515,6517,6519,6521],{"class":69,"line":186},[67,6508,2274],{"class":77},[67,6510,1900],{"class":73},[67,6512,6126],{"class":84},[67,6514,1900],{"class":73},[67,6516,5961],{"class":77},[67,6518,1900],{"class":73},[67,6520,1965],{"class":77},[67,6522,6523],{"class":202}," \u002F\u002F100\n",[67,6525,6526],{"class":69,"line":444},[67,6527,2288],{"class":77},[19,6529,6530],{},"4.有参有返",[57,6532,6534],{"className":852,"code":6533,"language":854,"meta":62,"style":62},"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",[64,6535,6536,6551,6555,6568,6574,6578,6587,6591,6603,6617,6632],{"__ignoreMap":62},[67,6537,6538,6540,6543,6545,6547,6549],{"class":69,"line":70},[67,6539,867],{"class":73},[67,6541,6542],{"class":112}," test04",[67,6544,864],{"class":77},[67,6546,867],{"class":73},[67,6548,2122],{"class":5935},[67,6550,870],{"class":77},[67,6552,6553],{"class":69,"line":143},[67,6554,2269],{"class":77},[67,6556,6557,6559,6561,6564,6566],{"class":69,"line":149},[67,6558,2274],{"class":77},[67,6560,1900],{"class":73},[67,6562,6563],{"class":84},"\"hello\"",[67,6565,1900],{"class":73},[67,6567,1922],{"class":77},[67,6569,6570,6572],{"class":69,"line":155},[67,6571,4810],{"class":73},[67,6573,2156],{"class":77},[67,6575,6576],{"class":69,"line":161},[67,6577,2288],{"class":77},[67,6579,6580,6582,6585],{"class":69,"line":167},[67,6581,867],{"class":73},[67,6583,6584],{"class":112}," mian",[67,6586,2698],{"class":77},[67,6588,6589],{"class":69,"line":173},[67,6590,2269],{"class":77},[67,6592,6593,6595,6597,6599,6601],{"class":69,"line":180},[67,6594,2707],{"class":73},[67,6596,3554],{"class":77},[67,6598,909],{"class":73},[67,6600,1077],{"class":208},[67,6602,2017],{"class":77},[67,6604,6605,6607,6609,6611,6614],{"class":69,"line":186},[67,6606,2707],{"class":73},[67,6608,3570],{"class":77},[67,6610,909],{"class":73},[67,6612,6613],{"class":112},"test04",[67,6615,6616],{"class":77},"(b);\n",[67,6618,6619,6621,6623,6625,6627,6629],{"class":69,"line":444},[67,6620,2274],{"class":77},[67,6622,1900],{"class":73},[67,6624,1146],{"class":77},[67,6626,1900],{"class":73},[67,6628,1965],{"class":77},[67,6630,6631],{"class":202}," \u002F\u002F1\n",[67,6633,6634],{"class":69,"line":2335},[67,6635,2288],{"class":77},[803,6637,6639],{"id":6638},"_25函数的声明","2.5函数的声明",[19,6641,6642],{},"作用：告诉编译器函数名称以及如何调用函数，函数的实际主体可以单独定义",[19,6644,6645,6646],{},"函数的",[336,6647,6648],{},"声明可以多次，但是函数的定义只能有一次",[57,6650,6652],{"className":852,"code":6651,"language":854,"meta":62,"style":62},"\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",[64,6653,6654,6659,6664,6689,6698,6702,6714,6726,6742,6746,6766,6770,6789],{"__ignoreMap":62},[67,6655,6656],{"class":69,"line":70},[67,6657,6658],{"class":202},"\u002F\u002F函数声明\n",[67,6660,6661],{"class":69,"line":143},[67,6662,6663],{"class":202},"\u002F\u002F比较函数，实现两个整型数字进行比较，返回较大的值\n",[67,6665,6666,6668,6671,6673,6675,6677,6679,6681,6683,6686],{"class":69,"line":149},[67,6667,867],{"class":73},[67,6669,6670],{"class":112}," max",[67,6672,864],{"class":77},[67,6674,867],{"class":73},[67,6676,2122],{"class":5935},[67,6678,1236],{"class":77},[67,6680,867],{"class":73},[67,6682,3554],{"class":5935},[67,6684,6685],{"class":77},");",[67,6687,6688],{"class":202},"\u002F\u002F这样函数就可以写在后面，不报错了\n",[67,6690,6691,6693,6695],{"class":69,"line":155},[67,6692,867],{"class":73},[67,6694,2695],{"class":112},[67,6696,6697],{"class":77},"() \n",[67,6699,6700],{"class":69,"line":161},[67,6701,2269],{"class":77},[67,6703,6704,6706,6708,6710,6712],{"class":69,"line":167},[67,6705,2707],{"class":73},[67,6707,2122],{"class":77},[67,6709,909],{"class":73},[67,6711,1303],{"class":208},[67,6713,2017],{"class":77},[67,6715,6716,6718,6720,6722,6724],{"class":69,"line":173},[67,6717,2707],{"class":73},[67,6719,3554],{"class":77},[67,6721,909],{"class":73},[67,6723,1556],{"class":208},[67,6725,2017],{"class":77},[67,6727,6728,6730,6732,6735,6738,6740],{"class":69,"line":180},[67,6729,2274],{"class":77},[67,6731,1900],{"class":73},[67,6733,6734],{"class":112},"max",[67,6736,6737],{"class":77},"(a,b)",[67,6739,1900],{"class":73},[67,6741,1922],{"class":77},[67,6743,6744],{"class":69,"line":186},[67,6745,2288],{"class":77},[67,6747,6748,6750,6752,6754,6756,6758,6760,6762,6764],{"class":69,"line":444},[67,6749,867],{"class":73},[67,6751,6670],{"class":112},[67,6753,864],{"class":77},[67,6755,867],{"class":73},[67,6757,2122],{"class":5935},[67,6759,1236],{"class":77},[67,6761,867],{"class":73},[67,6763,3554],{"class":5935},[67,6765,870],{"class":77},[67,6767,6768],{"class":69,"line":2335},[67,6769,2269],{"class":77},[67,6771,6772,6774,6776,6778,6780,6782,6784,6786],{"class":69,"line":2340},[67,6773,4810],{"class":73},[67,6775,2122],{"class":77},[67,6777,1816],{"class":73},[67,6779,1121],{"class":77},[67,6781,1842],{"class":73},[67,6783,28],{"class":77},[67,6785,1715],{"class":73},[67,6787,6788],{"class":77},"b;\n",[67,6790,6791],{"class":69,"line":2346},[67,6792,2288],{"class":77},[803,6794,6796],{"id":6795},"_26函数的分文件编写","2.6函数的分文件编写",[19,6798,6799],{},"4个步骤：",[1863,6801,6802,6805,6808,6811],{},[818,6803,6804],{},"1.创建后缀名为.h的头文件",[818,6806,6807],{},"2.创建后缀名为.cpp的源文件",[818,6809,6810],{},"3.在头文件中写函数的定义",[818,6812,6813],{},"4.在源文件中写函数的定义\n示例：",[19,6815,6816],{},"头文件：swap.h",[57,6818,6820],{"className":852,"code":6819,"language":854,"meta":62,"style":62},"#include\u003Ciostream>\nusing namespace std;\n\u002F\u002F函数声明\nvoid swap(int a,int b);\n",[64,6821,6822,6828,6838,6842],{"__ignoreMap":62},[67,6823,6824,6826],{"class":69,"line":70},[67,6825,2672],{"class":73},[67,6827,2675],{"class":84},[67,6829,6830,6832,6834,6836],{"class":69,"line":143},[67,6831,2680],{"class":73},[67,6833,2683],{"class":73},[67,6835,2686],{"class":112},[67,6837,2017],{"class":77},[67,6839,6840],{"class":69,"line":149},[67,6841,6658],{"class":202},[67,6843,6844,6846,6848,6850,6852,6854,6856,6858,6860],{"class":69,"line":155},[67,6845,6083],{"class":73},[67,6847,6086],{"class":112},[67,6849,864],{"class":77},[67,6851,867],{"class":73},[67,6853,2122],{"class":5935},[67,6855,1236],{"class":77},[67,6857,867],{"class":73},[67,6859,3554],{"class":5935},[67,6861,3440],{"class":77},[19,6863,6864],{},"源文件：swap.cpp",[57,6866,6868],{"className":852,"code":6867,"language":854,"meta":62,"style":62},"#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",[64,6869,6870,6877,6882,6902,6906,6917,6926,6935,6952,6969],{"__ignoreMap":62},[67,6871,6872,6874],{"class":69,"line":70},[67,6873,2672],{"class":73},[67,6875,6876],{"class":84}," \"swap.h\"\n",[67,6878,6879],{"class":69,"line":143},[67,6880,6881],{"class":202},"\u002F\u002F函数的定义\n",[67,6883,6884,6886,6888,6890,6892,6894,6896,6898,6900],{"class":69,"line":149},[67,6885,6083],{"class":73},[67,6887,6086],{"class":112},[67,6889,864],{"class":77},[67,6891,867],{"class":73},[67,6893,2122],{"class":5935},[67,6895,1236],{"class":77},[67,6897,867],{"class":73},[67,6899,3554],{"class":5935},[67,6901,870],{"class":77},[67,6903,6904],{"class":69,"line":155},[67,6905,2269],{"class":77},[67,6907,6908,6910,6912,6914],{"class":69,"line":161},[67,6909,2707],{"class":73},[67,6911,4974],{"class":77},[67,6913,909],{"class":73},[67,6915,6916],{"class":77},"a;\n",[67,6918,6919,6922,6924],{"class":69,"line":167},[67,6920,6921],{"class":77},"    a",[67,6923,909],{"class":73},[67,6925,6788],{"class":77},[67,6927,6928,6931,6933],{"class":69,"line":173},[67,6929,6930],{"class":77},"    b",[67,6932,909],{"class":73},[67,6934,4999],{"class":77},[67,6936,6937,6939,6941,6944,6946,6948,6950],{"class":69,"line":180},[67,6938,2274],{"class":77},[67,6940,1900],{"class":73},[67,6942,6943],{"class":84},"\"a=\"",[67,6945,1900],{"class":73},[67,6947,28],{"class":77},[67,6949,1900],{"class":73},[67,6951,1922],{"class":77},[67,6953,6954,6956,6958,6961,6963,6965,6967],{"class":69,"line":186},[67,6955,2274],{"class":77},[67,6957,1900],{"class":73},[67,6959,6960],{"class":84},"\"b=\"",[67,6962,1900],{"class":73},[67,6964,1121],{"class":77},[67,6966,1900],{"class":73},[67,6968,1922],{"class":77},[67,6970,6971],{"class":69,"line":444},[67,6972,2288],{"class":77},[779,6974,6975],{},"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":62,"searchDepth":143,"depth":143,"links":6977},[6978,6979,6980,6981,6982,6983],{"id":5891,"depth":143,"text":5892},{"id":5980,"depth":143,"text":5981},{"id":6063,"depth":143,"text":6064},{"id":6289,"depth":143,"text":6290},{"id":6638,"depth":143,"text":6639},{"id":6795,"depth":143,"text":6796},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch2",{"title":5883,"description":62},"wiki\u002F2026-05-24-c++学习\u002Fch2-函数","u7fvjnBVwC9MwO8e-TA4xJeO-qzH_msHECf1fhCEVWc",{"id":6990,"title":6991,"body":6992,"description":6999,"extension":787,"meta":8404,"navigation":176,"path":8405,"seo":8406,"stem":8407,"__hash__":8408},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch3-指针.md","3.指针",{"type":7,"value":6993,"toc":8394},[6994,6997,7000,7004,7166,7170,7173,7176,7179,7182,7322,7326,7329,7332,7335,7400,7404,7409,7476,7479,7483,7486,7497,7502,7522,7525,7530,7549,7552,7556,7575,7578,7582,7817,7821,7824,7827,7830,7992,7995,7999,8002,8008,8391],[10,6995,6991],{"id":6996},"_3指针",[19,6998,6999],{},"通过指针保存一个地址，指针就是个地址",[803,7001,7003],{"id":7002},"_31定义指针","3.1定义指针",[57,7005,7007],{"className":852,"code":7006,"language":854,"meta":62,"style":62},"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",[64,7008,7009,7017,7021,7026,7038,7043,7051,7061,7079,7099,7103,7108,7113,7118,7132,7148,7162],{"__ignoreMap":62},[67,7010,7011,7013,7015],{"class":69,"line":70},[67,7012,867],{"class":73},[67,7014,2695],{"class":112},[67,7016,2698],{"class":77},[67,7018,7019],{"class":69,"line":143},[67,7020,2269],{"class":77},[67,7022,7023],{"class":69,"line":149},[67,7024,7025],{"class":202},"    \u002F\u002F1.定义指针\n",[67,7027,7028,7030,7032,7034,7036],{"class":69,"line":155},[67,7029,2707],{"class":73},[67,7031,2122],{"class":77},[67,7033,909],{"class":73},[67,7035,1303],{"class":208},[67,7037,2017],{"class":77},[67,7039,7040],{"class":69,"line":161},[67,7041,7042],{"class":202},"    \u002F\u002F指针定义语法：数据类型*指针变量名;\n",[67,7044,7045,7048],{"class":69,"line":167},[67,7046,7047],{"class":73},"    int*",[67,7049,7050],{"class":77},"p;\n",[67,7052,7053,7056,7059],{"class":69,"line":173},[67,7054,7055],{"class":77},"    p",[67,7057,7058],{"class":73},"=&",[67,7060,6916],{"class":77},[67,7062,7063,7065,7067,7070,7073,7075,7077],{"class":69,"line":180},[67,7064,2274],{"class":77},[67,7066,1900],{"class":73},[67,7068,7069],{"class":84},"\"a的地址为：\"",[67,7071,7072],{"class":73},"\u003C\u003C&",[67,7074,28],{"class":77},[67,7076,1900],{"class":73},[67,7078,1922],{"class":77},[67,7080,7081,7083,7085,7088,7090,7092,7094,7096],{"class":69,"line":186},[67,7082,2274],{"class":77},[67,7084,1900],{"class":73},[67,7086,7087],{"class":84},"\"指针p为：\"",[67,7089,1900],{"class":73},[67,7091,19],{"class":77},[67,7093,1900],{"class":73},[67,7095,1965],{"class":77},[67,7097,7098],{"class":202},"\u002F\u002F指针p表示的就是a的地址\n",[67,7100,7101],{"class":69,"line":444},[67,7102,177],{"emptyLinePlaceholder":176},[67,7104,7105],{"class":69,"line":2335},[67,7106,7107],{"class":202},"    \u002F\u002F2.使用指针\n",[67,7109,7110],{"class":69,"line":2340},[67,7111,7112],{"class":202},"    \u002F\u002F可以通过解引用的方式来找到指针指向的内存\n",[67,7114,7115],{"class":69,"line":2346},[67,7116,7117],{"class":202},"    \u002F\u002F指针前加*代表解引用，找到指针指向的内存中的数据\n",[67,7119,7120,7123,7125,7127,7130],{"class":69,"line":2351},[67,7121,7122],{"class":73},"    *",[67,7124,19],{"class":77},[67,7126,909],{"class":73},[67,7128,7129],{"class":208},"1000",[67,7131,2017],{"class":77},[67,7133,7134,7136,7139,7141,7143,7145],{"class":69,"line":2365},[67,7135,2274],{"class":77},[67,7137,7138],{"class":73},"\u003C\u003C*",[67,7140,19],{"class":77},[67,7142,1900],{"class":73},[67,7144,1965],{"class":77},[67,7146,7147],{"class":202},"\u002F\u002F1000\n",[67,7149,7150,7152,7154,7156,7158,7160],{"class":69,"line":2370},[67,7151,2274],{"class":77},[67,7153,1900],{"class":73},[67,7155,28],{"class":77},[67,7157,1900],{"class":73},[67,7159,1965],{"class":77},[67,7161,7147],{"class":202},[67,7163,7164],{"class":69,"line":2376},[67,7165,2288],{"class":77},[803,7167,7169],{"id":7168},"_32指针所占的内存空间","3.2指针所占的内存空间",[19,7171,7172],{},"要注意：指针也是一种数据类型，也是要占内存空间的",[19,7174,7175],{},"在32位操作系统下：占用4个字节空间",[19,7177,7178],{},"在64位操作系统下：占用8个字节空间",[19,7180,7181],{},"上方是不管啥数据类型的",[57,7183,7185],{"className":852,"code":7184,"language":854,"meta":62,"style":62},"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",[64,7186,7187,7195,7199,7204,7216,7221,7226,7231,7244,7266,7292,7318],{"__ignoreMap":62},[67,7188,7189,7191,7193],{"class":69,"line":70},[67,7190,867],{"class":73},[67,7192,2695],{"class":112},[67,7194,2698],{"class":77},[67,7196,7197],{"class":69,"line":143},[67,7198,2269],{"class":77},[67,7200,7201],{"class":69,"line":149},[67,7202,7203],{"class":202},"    \u002F\u002F指针所占内存空间\n",[67,7205,7206,7208,7210,7212,7214],{"class":69,"line":155},[67,7207,2707],{"class":73},[67,7209,2122],{"class":77},[67,7211,909],{"class":73},[67,7213,1303],{"class":208},[67,7215,2017],{"class":77},[67,7217,7218],{"class":69,"line":161},[67,7219,7220],{"class":202},"    \u002F\u002Fint *p;\n",[67,7222,7223],{"class":69,"line":167},[67,7224,7225],{"class":202},"    \u002F\u002Fp=&a;\n",[67,7227,7228],{"class":69,"line":173},[67,7229,7230],{"class":202},"    \u002F\u002F上述可以写为以下：\n",[67,7232,7233,7235,7238,7240,7242],{"class":69,"line":180},[67,7234,2707],{"class":73},[67,7236,7237],{"class":73}," *",[67,7239,19],{"class":77},[67,7241,7058],{"class":73},[67,7243,6916],{"class":77},[67,7245,7246,7249,7251,7254,7256,7259,7261,7263],{"class":69,"line":186},[67,7247,7248],{"class":77},"    cout ",[67,7250,1900],{"class":73},[67,7252,7253],{"class":84},"\"sizeof(int *)\"",[67,7255,2096],{"class":73},[67,7257,7258],{"class":77},"(p)",[67,7260,1900],{"class":73},[67,7262,1965],{"class":77},[67,7264,7265],{"class":202},"\u002F\u002F因为是看数据类型，写int *也可以，因为是int *类型   4字节(32位的话)\n",[67,7267,7268,7270,7272,7274,7276,7278,7280,7282,7284,7286,7289],{"class":69,"line":444},[67,7269,7248],{"class":77},[67,7271,1900],{"class":73},[67,7273,7253],{"class":84},[67,7275,2096],{"class":73},[67,7277,864],{"class":77},[67,7279,867],{"class":73},[67,7281,7237],{"class":73},[67,7283,260],{"class":77},[67,7285,1900],{"class":73},[67,7287,7288],{"class":77},"endl",[67,7290,7291],{"class":202},"  \u002F\u002F4字节(32位的话)\n",[67,7293,7294,7296,7298,7301,7303,7305,7307,7309,7311,7313,7315],{"class":69,"line":2335},[67,7295,7248],{"class":77},[67,7297,1900],{"class":73},[67,7299,7300],{"class":84},"\"sizeof(char *)\"",[67,7302,2096],{"class":73},[67,7304,864],{"class":77},[67,7306,958],{"class":73},[67,7308,7237],{"class":73},[67,7310,260],{"class":77},[67,7312,1900],{"class":73},[67,7314,1965],{"class":77},[67,7316,7317],{"class":202}," \u002F\u002F4字节(32位的话)\n",[67,7319,7320],{"class":69,"line":2340},[67,7321,2288],{"class":77},[803,7323,7325],{"id":7324},"_33空指针","3.3空指针",[19,7327,7328],{},"空指针：指针变量指向内存中编号为0的空间",[19,7330,7331],{},"用途：初始化指针变量",[19,7333,7334],{},"注意：空指针指向的内存是不可以访问的",[57,7336,7338],{"className":852,"code":7337,"language":854,"meta":62,"style":62},"int main()\n{\n    \u002F\u002F1.空指针用于给指针变量进行初始化\n    int *p=NULL;\n    \u002F\u002F2.空指针不能进行访问\n    *p=100;\u002F\u002F直接报错，压根不能访问\n    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n}\n",[64,7339,7340,7348,7352,7357,7371,7376,7391,7396],{"__ignoreMap":62},[67,7341,7342,7344,7346],{"class":69,"line":70},[67,7343,867],{"class":73},[67,7345,2695],{"class":112},[67,7347,2698],{"class":77},[67,7349,7350],{"class":69,"line":143},[67,7351,2269],{"class":77},[67,7353,7354],{"class":69,"line":149},[67,7355,7356],{"class":202},"    \u002F\u002F1.空指针用于给指针变量进行初始化\n",[67,7358,7359,7361,7363,7365,7367,7369],{"class":69,"line":155},[67,7360,2707],{"class":73},[67,7362,7237],{"class":73},[67,7364,19],{"class":77},[67,7366,909],{"class":73},[67,7368,3114],{"class":208},[67,7370,2017],{"class":77},[67,7372,7373],{"class":69,"line":161},[67,7374,7375],{"class":202},"    \u002F\u002F2.空指针不能进行访问\n",[67,7377,7378,7380,7382,7384,7386,7388],{"class":69,"line":167},[67,7379,7122],{"class":73},[67,7381,19],{"class":77},[67,7383,909],{"class":73},[67,7385,1169],{"class":208},[67,7387,918],{"class":77},[67,7389,7390],{"class":202},"\u002F\u002F直接报错，压根不能访问\n",[67,7392,7393],{"class":69,"line":173},[67,7394,7395],{"class":202},"    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n",[67,7397,7398],{"class":69,"line":180},[67,7399,2288],{"class":77},[803,7401,7403],{"id":7402},"_34野指针","3.4野指针",[19,7405,7406],{},[336,7407,7408],{},"指针变量指向非法的内存空间",[57,7410,7412],{"className":852,"code":7411,"language":854,"meta":62,"style":62},"int main()\n{\n    int *p=(int *)0x1100; \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n    \u002F\u002F访问野指针报错\n    cout\u003C\u003C*p\u003C\u003Cendl;\n}\n",[64,7413,7414,7422,7426,7455,7460,7472],{"__ignoreMap":62},[67,7415,7416,7418,7420],{"class":69,"line":70},[67,7417,867],{"class":73},[67,7419,2695],{"class":112},[67,7421,2698],{"class":77},[67,7423,7424],{"class":69,"line":143},[67,7425,2269],{"class":77},[67,7427,7428,7430,7432,7434,7436,7438,7440,7442,7444,7447,7450,7452],{"class":69,"line":149},[67,7429,2707],{"class":73},[67,7431,7237],{"class":73},[67,7433,19],{"class":77},[67,7435,909],{"class":73},[67,7437,864],{"class":77},[67,7439,867],{"class":73},[67,7441,7237],{"class":73},[67,7443,260],{"class":77},[67,7445,7446],{"class":73},"0x",[67,7448,7449],{"class":208},"1100",[67,7451,918],{"class":77},[67,7453,7454],{"class":202}," \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n",[67,7456,7457],{"class":69,"line":155},[67,7458,7459],{"class":202},"    \u002F\u002F访问野指针报错\n",[67,7461,7462,7464,7466,7468,7470],{"class":69,"line":161},[67,7463,2274],{"class":77},[67,7465,7138],{"class":73},[67,7467,19],{"class":77},[67,7469,1900],{"class":73},[67,7471,1922],{"class":77},[67,7473,7474],{"class":69,"line":167},[67,7475,2288],{"class":77},[19,7477,7478],{},"空指针和野指针都不是我们申请的空间，因此不要访问",[803,7480,7482],{"id":7481},"_35const修饰指针","3.5const修饰指针",[19,7484,7485],{},"三种情况：",[1863,7487,7488,7491,7494],{},[818,7489,7490],{},"const修饰指针 常量指针",[818,7492,7493],{},"const修饰常量 指针常量",[818,7495,7496],{},"const即修饰指针，又修饰常量",[815,7498,7499],{},[818,7500,7501],{},"常量指针",[57,7503,7505],{"className":852,"code":7504,"language":854,"meta":62,"style":62},"const int *p=&a;\n",[64,7506,7507],{"__ignoreMap":62},[67,7508,7509,7512,7514,7516,7518,7520],{"class":69,"line":70},[67,7510,7511],{"class":73},"const",[67,7513,3104],{"class":73},[67,7515,7237],{"class":73},[67,7517,19],{"class":77},[67,7519,7058],{"class":73},[67,7521,6916],{"class":77},[19,7523,7524],{},"指针的指向可以修改，但是指针指向的值不可以修改，改为指向地址后，这个地址存的值还是这个值",[815,7526,7527],{"start":143},[818,7528,7529],{},"指针常量",[57,7531,7533],{"className":852,"code":7532,"language":854,"meta":62,"style":62},"int *const p=&a;\n",[64,7534,7535],{"__ignoreMap":62},[67,7536,7537,7539,7542,7545,7547],{"class":69,"line":70},[67,7538,867],{"class":73},[67,7540,7541],{"class":73}," *const",[67,7543,7544],{"class":77}," p",[67,7546,7058],{"class":73},[67,7548,6916],{"class":77},[19,7550,7551],{},"指针的指向不可以改，指针指向的值可以改",[815,7553,7554],{"start":149},[818,7555,7496],{},[57,7557,7559],{"className":852,"code":7558,"language":854,"meta":62,"style":62},"const int *const p=&a;\n",[64,7560,7561],{"__ignoreMap":62},[67,7562,7563,7565,7567,7569,7571,7573],{"class":69,"line":70},[67,7564,7511],{"class":73},[67,7566,3104],{"class":73},[67,7568,7541],{"class":73},[67,7570,7544],{"class":77},[67,7572,7058],{"class":73},[67,7574,6916],{"class":77},[19,7576,7577],{},"指针的指向和指针指向的值都不可以改变",[803,7579,7581],{"id":7580},"_36指针和数组","3.6指针和数组",[57,7583,7585],{"className":852,"code":7584,"language":854,"meta":62,"style":62},"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",[64,7586,7587,7595,7599,7604,7658,7679,7695,7711,7722,7739,7744,7758,7784,7788,7800,7809,7813],{"__ignoreMap":62},[67,7588,7589,7591,7593],{"class":69,"line":70},[67,7590,867],{"class":73},[67,7592,2695],{"class":112},[67,7594,2698],{"class":77},[67,7596,7597],{"class":69,"line":143},[67,7598,2269],{"class":77},[67,7600,7601],{"class":69,"line":149},[67,7602,7603],{"class":202},"    \u002F\u002F利用指针访问数组中的元素\n",[67,7605,7606,7608,7610,7612,7614,7616,7618,7620,7622,7624,7626,7628,7630,7632,7634,7636,7638,7640,7642,7644,7646,7648,7650,7652,7654,7656],{"class":69,"line":155},[67,7607,2707],{"class":73},[67,7609,4682],{"class":77},[67,7611,1303],{"class":208},[67,7613,1796],{"class":77},[67,7615,909],{"class":73},[67,7617,1752],{"class":77},[67,7619,1077],{"class":208},[67,7621,1236],{"class":77},[67,7623,939],{"class":208},[67,7625,1236],{"class":77},[67,7627,933],{"class":208},[67,7629,1236],{"class":77},[67,7631,1151],{"class":208},[67,7633,1236],{"class":77},[67,7635,1177],{"class":208},[67,7637,1236],{"class":77},[67,7639,1202],{"class":208},[67,7641,1236],{"class":77},[67,7643,1227],{"class":208},[67,7645,1236],{"class":77},[67,7647,1253],{"class":208},[67,7649,1236],{"class":77},[67,7651,1278],{"class":208},[67,7653,1236],{"class":77},[67,7655,1303],{"class":208},[67,7657,4715],{"class":77},[67,7659,7660,7662,7664,7667,7669,7671,7673,7675,7677],{"class":69,"line":161},[67,7661,2274],{"class":77},[67,7663,1900],{"class":73},[67,7665,7666],{"class":84},"\"数组的第一个元素为：\"",[67,7668,1900],{"class":73},[67,7670,4626],{"class":77},[67,7672,1051],{"class":208},[67,7674,1796],{"class":77},[67,7676,1900],{"class":73},[67,7678,1922],{"class":77},[67,7680,7681,7683,7685,7687,7689,7692],{"class":69,"line":167},[67,7682,2707],{"class":73},[67,7684,7237],{"class":73},[67,7686,19],{"class":77},[67,7688,909],{"class":73},[67,7690,7691],{"class":77},"arr;",[67,7693,7694],{"class":202},"\u002F\u002F注意数才要加取地址符号&\n",[67,7696,7697,7699,7701,7703,7705,7707,7709],{"class":69,"line":173},[67,7698,2274],{"class":77},[67,7700,1900],{"class":73},[67,7702,7666],{"class":84},[67,7704,7138],{"class":73},[67,7706,19],{"class":77},[67,7708,1900],{"class":73},[67,7710,1922],{"class":77},[67,7712,7713,7715,7717,7719],{"class":69,"line":180},[67,7714,7055],{"class":77},[67,7716,3014],{"class":73},[67,7718,918],{"class":77},[67,7720,7721],{"class":202}," \u002F\u002F让指针向后偏移4个字节\n",[67,7723,7724,7726,7728,7731,7733,7735,7737],{"class":69,"line":186},[67,7725,2274],{"class":77},[67,7727,1900],{"class":73},[67,7729,7730],{"class":84},"\"数组的第二个元素为：\"",[67,7732,7138],{"class":73},[67,7734,19],{"class":77},[67,7736,1900],{"class":73},[67,7738,1922],{"class":77},[67,7740,7741],{"class":69,"line":444},[67,7742,7743],{"class":202},"    \u002F\u002F利用指针遍历数组\n",[67,7745,7746,7748,7750,7753,7755],{"class":69,"line":2335},[67,7747,2707],{"class":73},[67,7749,7237],{"class":73},[67,7751,7752],{"class":77},"p2",[67,7754,909],{"class":73},[67,7756,7757],{"class":77},"arr;\n",[67,7759,7760,7762,7764,7766,7768,7770,7772,7774,7776,7778,7780,7782],{"class":69,"line":2340},[67,7761,3921],{"class":73},[67,7763,2381],{"class":77},[67,7765,867],{"class":73},[67,7767,3752],{"class":77},[67,7769,909],{"class":73},[67,7771,1051],{"class":208},[67,7773,3759],{"class":77},[67,7775,1766],{"class":73},[67,7777,1303],{"class":208},[67,7779,3759],{"class":77},[67,7781,3014],{"class":73},[67,7783,870],{"class":77},[67,7785,7786],{"class":69,"line":2346},[67,7787,2752],{"class":77},[67,7789,7790,7792,7794,7796,7798],{"class":69,"line":2351},[67,7791,4171],{"class":77},[67,7793,7138],{"class":73},[67,7795,7752],{"class":77},[67,7797,1900],{"class":73},[67,7799,1922],{"class":77},[67,7801,7802,7805,7807],{"class":69,"line":2365},[67,7803,7804],{"class":77},"        p2",[67,7806,3014],{"class":73},[67,7808,2017],{"class":77},[67,7810,7811],{"class":69,"line":2370},[67,7812,2909],{"class":77},[67,7814,7815],{"class":69,"line":2376},[67,7816,2288],{"class":77},[803,7818,7820],{"id":7819},"_37指针和函数","3.7指针和函数",[19,7822,7823],{},"利用指针做函数参数，可以修改实参的值",[19,7825,7826],{},"值传递：只改变形参，不改变实参",[19,7828,7829],{},"地址传递：",[57,7831,7833],{"className":852,"code":7832,"language":854,"meta":62,"style":62},"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",[64,7834,7835,7860,7864,7876,7887,7897,7901,7909,7913,7925,7937,7942,7958,7973,7988],{"__ignoreMap":62},[67,7836,7837,7839,7841,7843,7845,7847,7850,7852,7854,7856,7858],{"class":69,"line":70},[67,7838,6083],{"class":73},[67,7840,6086],{"class":112},[67,7842,864],{"class":77},[67,7844,867],{"class":73},[67,7846,7237],{"class":73},[67,7848,7849],{"class":5935},"p1",[67,7851,1236],{"class":77},[67,7853,867],{"class":73},[67,7855,7237],{"class":73},[67,7857,7752],{"class":5935},[67,7859,870],{"class":77},[67,7861,7862],{"class":69,"line":143},[67,7863,2269],{"class":77},[67,7865,7866,7868,7870,7873],{"class":69,"line":149},[67,7867,2707],{"class":73},[67,7869,4974],{"class":77},[67,7871,7872],{"class":73},"=*",[67,7874,7875],{"class":77},"p1;\n",[67,7877,7878,7880,7882,7884],{"class":69,"line":155},[67,7879,7122],{"class":73},[67,7881,7849],{"class":77},[67,7883,7872],{"class":73},[67,7885,7886],{"class":77},"p2;\n",[67,7888,7889,7891,7893,7895],{"class":69,"line":161},[67,7890,7122],{"class":73},[67,7892,7752],{"class":77},[67,7894,909],{"class":73},[67,7896,4999],{"class":77},[67,7898,7899],{"class":69,"line":167},[67,7900,2288],{"class":77},[67,7902,7903,7905,7907],{"class":69,"line":173},[67,7904,867],{"class":73},[67,7906,2695],{"class":112},[67,7908,2698],{"class":77},[67,7910,7911],{"class":69,"line":180},[67,7912,2269],{"class":77},[67,7914,7915,7917,7919,7921,7923],{"class":69,"line":186},[67,7916,2707],{"class":73},[67,7918,2122],{"class":77},[67,7920,909],{"class":73},[67,7922,1303],{"class":208},[67,7924,2017],{"class":77},[67,7926,7927,7929,7931,7933,7935],{"class":69,"line":444},[67,7928,2707],{"class":73},[67,7930,3554],{"class":77},[67,7932,909],{"class":73},[67,7934,1556],{"class":208},[67,7936,2017],{"class":77},[67,7938,7939],{"class":69,"line":2335},[67,7940,7941],{"class":202},"    \u002F\u002F地址传递\n",[67,7943,7944,7946,7948,7950,7953,7955],{"class":69,"line":2340},[67,7945,6280],{"class":112},[67,7947,864],{"class":77},[67,7949,1211],{"class":73},[67,7951,7952],{"class":77},"a,",[67,7954,1211],{"class":73},[67,7956,7957],{"class":77},"b);\n",[67,7959,7960,7962,7964,7966,7968,7970],{"class":69,"line":2346},[67,7961,2274],{"class":77},[67,7963,1900],{"class":73},[67,7965,28],{"class":77},[67,7967,1900],{"class":73},[67,7969,1965],{"class":77},[67,7971,7972],{"class":202},"\u002F\u002F20\n",[67,7974,7975,7977,7979,7981,7983,7985],{"class":69,"line":2351},[67,7976,2274],{"class":77},[67,7978,1900],{"class":73},[67,7980,1121],{"class":77},[67,7982,1900],{"class":73},[67,7984,1965],{"class":77},[67,7986,7987],{"class":202},"\u002F\u002F10\n",[67,7989,7990],{"class":69,"line":2365},[67,7991,2288],{"class":77},[19,7993,7994],{},"总结：不想修改实参，就用值传递；想修改实参，就用值传递",[803,7996,7998],{"id":7997},"_38指针数组函数组合案例","3.8指针，数组，函数组合案例",[19,8000,8001],{},"案例描述：封装一个函数，利用冒泡排序，实现对整数数组的升序排序",[19,8003,8004,8005,8007],{},"例如数组：int arr",[67,8006,1303],{},"={4,3,6,9,1,2,10,8,7,5}",[57,8009,8011],{"className":852,"code":8010,"language":854,"meta":62,"style":62},"#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",[64,8012,8013,8019,8029,8053,8057,8088,8092,8126,8130,8148,8152,8163,8178,8193,8197,8201,8205,8209,8213,8221,8225,8230,8284,8296,8308,8313,8321,8325,8330,8355,8359,8374,8383,8387],{"__ignoreMap":62},[67,8014,8015,8017],{"class":69,"line":70},[67,8016,2672],{"class":73},[67,8018,2675],{"class":84},[67,8020,8021,8023,8025,8027],{"class":69,"line":143},[67,8022,2680],{"class":73},[67,8024,2683],{"class":73},[67,8026,2686],{"class":112},[67,8028,2017],{"class":77},[67,8030,8031,8033,8036,8038,8040,8042,8044,8046,8048,8051],{"class":69,"line":149},[67,8032,6083],{"class":73},[67,8034,8035],{"class":112}," bubbleSort",[67,8037,864],{"class":77},[67,8039,867],{"class":73},[67,8041,7237],{"class":73},[67,8043,19],{"class":5935},[67,8045,1236],{"class":77},[67,8047,867],{"class":73},[67,8049,8050],{"class":5935}," len",[67,8052,870],{"class":77},[67,8054,8055],{"class":69,"line":155},[67,8056,2269],{"class":77},[67,8058,8059,8061,8063,8065,8067,8069,8071,8073,8075,8078,8080,8082,8084,8086],{"class":69,"line":161},[67,8060,3921],{"class":73},[67,8062,864],{"class":77},[67,8064,867],{"class":73},[67,8066,3752],{"class":77},[67,8068,909],{"class":73},[67,8070,1051],{"class":208},[67,8072,3759],{"class":77},[67,8074,1766],{"class":73},[67,8076,8077],{"class":77},"len",[67,8079,1389],{"class":73},[67,8081,1077],{"class":208},[67,8083,3759],{"class":77},[67,8085,3014],{"class":73},[67,8087,870],{"class":77},[67,8089,8090],{"class":69,"line":167},[67,8091,2752],{"class":77},[67,8093,8094,8096,8098,8100,8102,8104,8106,8108,8110,8112,8114,8116,8118,8120,8122,8124],{"class":69,"line":173},[67,8095,4123],{"class":73},[67,8097,864],{"class":77},[67,8099,867],{"class":73},[67,8101,4130],{"class":77},[67,8103,909],{"class":73},[67,8105,1051],{"class":208},[67,8107,4137],{"class":77},[67,8109,1766],{"class":73},[67,8111,8077],{"class":77},[67,8113,1389],{"class":73},[67,8115,1298],{"class":77},[67,8117,1389],{"class":73},[67,8119,1077],{"class":208},[67,8121,4137],{"class":77},[67,8123,3014],{"class":73},[67,8125,870],{"class":77},[67,8127,8128],{"class":69,"line":180},[67,8129,3231],{"class":77},[67,8131,8132,8134,8137,8139,8142,8144,8146],{"class":69,"line":186},[67,8133,5361],{"class":73},[67,8135,8136],{"class":77},"(p[j]",[67,8138,1816],{"class":73},[67,8140,8141],{"class":77},"p[j",[67,8143,1338],{"class":73},[67,8145,1077],{"class":208},[67,8147,5376],{"class":77},[67,8149,8150],{"class":69,"line":444},[67,8151,5381],{"class":77},[67,8153,8154,8156,8158,8160],{"class":69,"line":2335},[67,8155,5386],{"class":73},[67,8157,4974],{"class":77},[67,8159,909],{"class":73},[67,8161,8162],{"class":77},"p[j];\n",[67,8164,8165,8168,8170,8172,8174,8176],{"class":69,"line":2340},[67,8166,8167],{"class":77},"                p[j]",[67,8169,909],{"class":73},[67,8171,8141],{"class":77},[67,8173,1338],{"class":73},[67,8175,1077],{"class":208},[67,8177,5409],{"class":77},[67,8179,8180,8183,8185,8187,8189,8191],{"class":69,"line":2346},[67,8181,8182],{"class":77},"                p[j",[67,8184,1338],{"class":73},[67,8186,1077],{"class":208},[67,8188,1796],{"class":77},[67,8190,909],{"class":73},[67,8192,4999],{"class":77},[67,8194,8195],{"class":69,"line":2351},[67,8196,5429],{"class":77},[67,8198,8199],{"class":69,"line":2365},[67,8200,3250],{"class":77},[67,8202,8203],{"class":69,"line":2370},[67,8204,2909],{"class":77},[67,8206,8207],{"class":69,"line":2376},[67,8208,2288],{"class":77},[67,8210,8211],{"class":69,"line":2397},[67,8212,177],{"emptyLinePlaceholder":176},[67,8214,8215,8217,8219],{"class":69,"line":2402},[67,8216,867],{"class":73},[67,8218,2695],{"class":112},[67,8220,2698],{"class":77},[67,8222,8223],{"class":69,"line":2416},[67,8224,2269],{"class":77},[67,8226,8227],{"class":69,"line":2421},[67,8228,8229],{"class":202},"    \u002F\u002F 1.创建数组\n",[67,8231,8232,8234,8236,8238,8240,8242,8244,8246,8248,8250,8252,8254,8256,8258,8260,8262,8264,8266,8268,8270,8272,8274,8276,8278,8280,8282],{"class":69,"line":2450},[67,8233,2707],{"class":73},[67,8235,4682],{"class":77},[67,8237,1303],{"class":208},[67,8239,1796],{"class":77},[67,8241,909],{"class":73},[67,8243,1752],{"class":77},[67,8245,1151],{"class":208},[67,8247,1236],{"class":77},[67,8249,933],{"class":208},[67,8251,1236],{"class":77},[67,8253,1202],{"class":208},[67,8255,1236],{"class":77},[67,8257,1278],{"class":208},[67,8259,1236],{"class":77},[67,8261,1077],{"class":208},[67,8263,1236],{"class":77},[67,8265,939],{"class":208},[67,8267,1236],{"class":77},[67,8269,1303],{"class":208},[67,8271,1236],{"class":77},[67,8273,1253],{"class":208},[67,8275,1236],{"class":77},[67,8277,1227],{"class":208},[67,8279,1236],{"class":77},[67,8281,1177],{"class":208},[67,8283,4715],{"class":77},[67,8285,8286,8288,8290,8292,8294],{"class":69,"line":2455},[67,8287,2707],{"class":73},[67,8289,8050],{"class":77},[67,8291,909],{"class":73},[67,8293,1303],{"class":208},[67,8295,2017],{"class":77},[67,8297,8298,8300,8302,8304,8306],{"class":69,"line":2472},[67,8299,2707],{"class":73},[67,8301,7237],{"class":73},[67,8303,19],{"class":77},[67,8305,909],{"class":73},[67,8307,7757],{"class":77},[67,8309,8310],{"class":69,"line":2477},[67,8311,8312],{"class":202},"    \u002F\u002F 2.创建函数，实现冒泡排序\n",[67,8314,8315,8318],{"class":69,"line":2482},[67,8316,8317],{"class":112},"    bubbleSort",[67,8319,8320],{"class":77},"(p,len);\n",[67,8322,8323],{"class":69,"line":2487},[67,8324,177],{"emptyLinePlaceholder":176},[67,8326,8327],{"class":69,"line":2501},[67,8328,8329],{"class":202},"    \u002F\u002F 3.打印排序后的数组\n",[67,8331,8332,8334,8336,8338,8340,8342,8344,8346,8348,8351,8353],{"class":69,"line":2506},[67,8333,3921],{"class":73},[67,8335,2381],{"class":77},[67,8337,867],{"class":73},[67,8339,3752],{"class":77},[67,8341,909],{"class":73},[67,8343,1051],{"class":208},[67,8345,3934],{"class":77},[67,8347,1766],{"class":73},[67,8349,8350],{"class":77},"len; i",[67,8352,3014],{"class":73},[67,8354,870],{"class":77},[67,8356,8357],{"class":69,"line":3298},[67,8358,2752],{"class":77},[67,8360,8361,8363,8365,8367,8369,8372],{"class":69,"line":3312},[67,8362,4171],{"class":77},[67,8364,7138],{"class":73},[67,8366,19],{"class":77},[67,8368,1900],{"class":73},[67,8370,8371],{"class":84},"\"\"",[67,8373,2017],{"class":77},[67,8375,8376,8379,8381],{"class":69,"line":3320},[67,8377,8378],{"class":77},"        p",[67,8380,3014],{"class":73},[67,8382,2017],{"class":77},[67,8384,8385],{"class":69,"line":3325},[67,8386,2909],{"class":77},[67,8388,8389],{"class":69,"line":3331},[67,8390,2288],{"class":77},[779,8392,8393],{},"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":62,"searchDepth":143,"depth":143,"links":8395},[8396,8397,8398,8399,8400,8401,8402,8403],{"id":7002,"depth":143,"text":7003},{"id":7168,"depth":143,"text":7169},{"id":7324,"depth":143,"text":7325},{"id":7402,"depth":143,"text":7403},{"id":7481,"depth":143,"text":7482},{"id":7580,"depth":143,"text":7581},{"id":7819,"depth":143,"text":7820},{"id":7997,"depth":143,"text":7998},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch3",{"title":6991,"description":6999},"wiki\u002F2026-05-24-c++学习\u002Fch3-指针","LotROpzxgkxZVFDdc0uLdT7FhfhATX3FzlZsglMj7hQ",{"id":8410,"title":8411,"body":8412,"description":8419,"extension":787,"meta":11392,"navigation":176,"path":11393,"seo":11394,"stem":11395,"__hash__":11396},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch4-结构体.md","4.结构体",{"type":7,"value":8413,"toc":11383},[8414,8417,8420,8424,8427,8430,8441,8779,8782,8786,8789,8796,9051,9055,9058,9061,9216,9220,9223,9226,9432,9436,9439,9742,9745,9753,9757,9760,9911,9913,9924,9981,9985,9990,10646,10654,10657,10751,10754,11374,11380],[10,8415,8411],{"id":8416},"_4结构体",[19,8418,8419],{},"结构体属于用户自定义的数据类型，允许用户存储不同的数据类型",[803,8421,8423],{"id":8422},"_41结构体定义与使用","4.1结构体定义与使用",[19,8425,8426],{},"语法：struct 结构体名 {结构体成员列表}；",[19,8428,8429],{},"通过结构体创建变量的方式：",[1863,8431,8432,8435,8438],{},[818,8433,8434],{},"struct 结构体名 变量名",[818,8436,8437],{},"struct 结构体名 变量名={成员1值，成员2值...}",[818,8439,8440],{},"定义结构体时顺便创建变量",[57,8442,8444],{"className":852,"code":8443,"language":854,"meta":62,"style":62},"#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",[64,8445,8446,8452,8462,8469,8474,8482,8486,8491,8495,8500,8505,8510,8517,8522,8529,8533,8540,8544,8548,8552,8556,8560,8564,8570,8574,8580,8588,8596,8600,8605,8610,8621,8626,8638,8649,8660,8665,8689,8694,8700,8727,8732,8738,8750,8762,8774],{"__ignoreMap":62},[67,8447,8448,8450],{"class":69,"line":70},[67,8449,2672],{"class":73},[67,8451,2675],{"class":84},[67,8453,8454,8456,8458,8460],{"class":69,"line":143},[67,8455,2680],{"class":73},[67,8457,2683],{"class":73},[67,8459,2686],{"class":112},[67,8461,2017],{"class":77},[67,8463,8464,8466],{"class":69,"line":149},[67,8465,2672],{"class":73},[67,8467,8468],{"class":84},"\u003Cstring>\n",[67,8470,8471],{"class":69,"line":155},[67,8472,8473],{"class":202},"\u002F\u002F1.创建学生数据类型：学生包括：（姓名，年龄，分数）\n",[67,8475,8476,8479],{"class":69,"line":161},[67,8477,8478],{"class":73},"struct",[67,8480,8481],{"class":112}," Student\n",[67,8483,8484],{"class":69,"line":167},[67,8485,2269],{"class":77},[67,8487,8488],{"class":69,"line":173},[67,8489,8490],{"class":202},"    \u002F\u002F成员列表\n",[67,8492,8493],{"class":69,"line":180},[67,8494,177],{"emptyLinePlaceholder":176},[67,8496,8497],{"class":69,"line":186},[67,8498,8499],{"class":202},"    \u002F\u002F姓名\n",[67,8501,8502],{"class":69,"line":444},[67,8503,8504],{"class":77},"    string name;\n",[67,8506,8507],{"class":69,"line":2335},[67,8508,8509],{"class":202},"    \u002F\u002F年龄\n",[67,8511,8512,8514],{"class":69,"line":2340},[67,8513,2707],{"class":73},[67,8515,8516],{"class":77}," age;\n",[67,8518,8519],{"class":69,"line":2346},[67,8520,8521],{"class":202},"    \u002F\u002F分数\n",[67,8523,8524,8526],{"class":69,"line":2351},[67,8525,2707],{"class":73},[67,8527,8528],{"class":77}," score;\n",[67,8530,8531],{"class":69,"line":2365},[67,8532,4715],{"class":77},[67,8534,8535,8537],{"class":69,"line":2370},[67,8536,8478],{"class":73},[67,8538,8539],{"class":112}," School\n",[67,8541,8542],{"class":69,"line":2376},[67,8543,2269],{"class":77},[67,8545,8546],{"class":69,"line":2397},[67,8547,8490],{"class":202},[67,8549,8550],{"class":69,"line":2402},[67,8551,177],{"emptyLinePlaceholder":176},[67,8553,8554],{"class":69,"line":2416},[67,8555,8499],{"class":202},[67,8557,8558],{"class":69,"line":2421},[67,8559,8504],{"class":77},[67,8561,8562],{"class":69,"line":2450},[67,8563,8509],{"class":202},[67,8565,8566,8568],{"class":69,"line":2455},[67,8567,2707],{"class":73},[67,8569,8516],{"class":77},[67,8571,8572],{"class":69,"line":2472},[67,8573,8521],{"class":202},[67,8575,8576,8578],{"class":69,"line":2477},[67,8577,2707],{"class":73},[67,8579,8528],{"class":77},[67,8581,8582,8585],{"class":69,"line":2482},[67,8583,8584],{"class":77},"} s3;",[67,8586,8587],{"class":202}," \u002F\u002F创建结构体时就创建了变量\n",[67,8589,8590,8592,8594],{"class":69,"line":2487},[67,8591,867],{"class":73},[67,8593,2695],{"class":112},[67,8595,2698],{"class":77},[67,8597,8598],{"class":69,"line":2501},[67,8599,2269],{"class":77},[67,8601,8602],{"class":69,"line":2506},[67,8603,8604],{"class":202},"    \u002F\u002F2.通过学生类型创建具体学生\n",[67,8606,8607],{"class":69,"line":3298},[67,8608,8609],{"class":202},"    \u002F\u002F2.1 struct Student s1;\n",[67,8611,8612,8615,8618],{"class":69,"line":3312},[67,8613,8614],{"class":73},"    struct",[67,8616,8617],{"class":112}," Student",[67,8619,8620],{"class":77}," s1;\n",[67,8622,8623],{"class":69,"line":3320},[67,8624,8625],{"class":202},"    \u002F\u002F给s1属性赋值，通过访问结构体变量中的属性\n",[67,8627,8628,8631,8633,8636],{"class":69,"line":3325},[67,8629,8630],{"class":77},"    s1.name",[67,8632,909],{"class":73},[67,8634,8635],{"class":84},"\"张三\"",[67,8637,2017],{"class":77},[67,8639,8640,8643,8645,8647],{"class":69,"line":3331},[67,8641,8642],{"class":77},"    s1.age",[67,8644,909],{"class":73},[67,8646,1506],{"class":208},[67,8648,2017],{"class":77},[67,8650,8651,8654,8656,8658],{"class":69,"line":3337},[67,8652,8653],{"class":77},"    s1.score",[67,8655,909],{"class":73},[67,8657,1112],{"class":208},[67,8659,2017],{"class":77},[67,8661,8662],{"class":69,"line":3342},[67,8663,8664],{"class":202},"    \u002F\u002F输出结果\n",[67,8666,8668,8670,8672,8675,8677,8680,8682,8685,8687],{"class":69,"line":8667},37,[67,8669,2274],{"class":77},[67,8671,1900],{"class":73},[67,8673,8674],{"class":77},"s1.name",[67,8676,1900],{"class":73},[67,8678,8679],{"class":77},"s1.age",[67,8681,1900],{"class":73},[67,8683,8684],{"class":77},"s1.score",[67,8686,1900],{"class":73},[67,8688,1922],{"class":77},[67,8690,8692],{"class":69,"line":8691},38,[67,8693,177],{"emptyLinePlaceholder":176},[67,8695,8697],{"class":69,"line":8696},39,[67,8698,8699],{"class":202},"    \u002F\u002F2.2 struct Student s2={...}\n",[67,8701,8703,8705,8707,8710,8712,8714,8717,8719,8721,8723,8725],{"class":69,"line":8702},40,[67,8704,8614],{"class":73},[67,8706,8617],{"class":112},[67,8708,8709],{"class":77}," s2",[67,8711,909],{"class":73},[67,8713,1752],{"class":77},[67,8715,8716],{"class":84},"\"王五\"",[67,8718,1236],{"class":77},[67,8720,1506],{"class":208},[67,8722,1236],{"class":77},[67,8724,1112],{"class":208},[67,8726,4715],{"class":77},[67,8728,8730],{"class":69,"line":8729},41,[67,8731,177],{"emptyLinePlaceholder":176},[67,8733,8735],{"class":69,"line":8734},42,[67,8736,8737],{"class":202},"    \u002F\u002F2.3在定义结构体时顺便创建结构体变量\n",[67,8739,8741,8744,8746,8748],{"class":69,"line":8740},43,[67,8742,8743],{"class":77},"    s3.name",[67,8745,909],{"class":73},[67,8747,4398],{"class":84},[67,8749,2017],{"class":77},[67,8751,8753,8756,8758,8760],{"class":69,"line":8752},44,[67,8754,8755],{"class":77},"    s3.age",[67,8757,909],{"class":73},[67,8759,1506],{"class":208},[67,8761,2017],{"class":77},[67,8763,8765,8768,8770,8772],{"class":69,"line":8764},45,[67,8766,8767],{"class":77},"    s3.score",[67,8769,909],{"class":73},[67,8771,1556],{"class":208},[67,8773,2017],{"class":77},[67,8775,8777],{"class":69,"line":8776},46,[67,8778,2288],{"class":77},[19,8780,8781],{},"注意：结构体定义时关键词struct不可以省略，但是创建是可以省略",[803,8783,8785],{"id":8784},"_42结构体数组","4.2结构体数组",[19,8787,8788],{},"将自定义的结构体放入到数组中方便维护",[19,8790,8791,8792,8795],{},"语法：struct 结构体名 数组名",[67,8793,8794],{},"元素个数","={ {}，{},...{} };",[57,8797,8799],{"className":852,"code":8798,"language":854,"meta":62,"style":62},"#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",[64,8800,8801,8807,8817,8823,8828,8834,8838,8842,8848,8854,8858,8862,8870,8874,8879,8894,8898,8914,8930,8934,8939,8955,8970,8985,8990,9016,9020,9043,9047],{"__ignoreMap":62},[67,8802,8803,8805],{"class":69,"line":70},[67,8804,2672],{"class":73},[67,8806,2675],{"class":84},[67,8808,8809,8811,8813,8815],{"class":69,"line":143},[67,8810,2680],{"class":73},[67,8812,2683],{"class":73},[67,8814,2686],{"class":112},[67,8816,2017],{"class":77},[67,8818,8819,8821],{"class":69,"line":149},[67,8820,2672],{"class":73},[67,8822,8468],{"class":84},[67,8824,8825],{"class":69,"line":155},[67,8826,8827],{"class":202},"\u002F\u002F1.定义结构体\n",[67,8829,8830,8832],{"class":69,"line":161},[67,8831,8478],{"class":73},[67,8833,8481],{"class":112},[67,8835,8836],{"class":69,"line":167},[67,8837,2269],{"class":77},[67,8839,8840],{"class":69,"line":173},[67,8841,8504],{"class":77},[67,8843,8844,8846],{"class":69,"line":180},[67,8845,2707],{"class":73},[67,8847,8516],{"class":77},[67,8849,8850,8852],{"class":69,"line":186},[67,8851,2707],{"class":73},[67,8853,8528],{"class":77},[67,8855,8856],{"class":69,"line":444},[67,8857,177],{"emptyLinePlaceholder":176},[67,8859,8860],{"class":69,"line":2335},[67,8861,4715],{"class":77},[67,8863,8864,8866,8868],{"class":69,"line":2340},[67,8865,867],{"class":73},[67,8867,2695],{"class":112},[67,8869,2698],{"class":77},[67,8871,8872],{"class":69,"line":2346},[67,8873,2269],{"class":77},[67,8875,8876],{"class":69,"line":2351},[67,8877,8878],{"class":202},"    \u002F\u002F2.创建结构体数组\n",[67,8880,8881,8883,8885,8888,8890,8892],{"class":69,"line":2365},[67,8882,8614],{"class":73},[67,8884,8617],{"class":112},[67,8886,8887],{"class":77}," stuArray[",[67,8889,939],{"class":208},[67,8891,1796],{"class":77},[67,8893,5627],{"class":73},[67,8895,8896],{"class":69,"line":2370},[67,8897,2752],{"class":77},[67,8899,8900,8902,8904,8906,8908,8910,8912],{"class":69,"line":2376},[67,8901,5636],{"class":77},[67,8903,8635],{"class":84},[67,8905,1236],{"class":77},[67,8907,1506],{"class":208},[67,8909,1236],{"class":77},[67,8911,1169],{"class":208},[67,8913,5649],{"class":77},[67,8915,8916,8918,8920,8922,8924,8926,8928],{"class":69,"line":2397},[67,8917,5636],{"class":77},[67,8919,4398],{"class":84},[67,8921,1236],{"class":77},[67,8923,1431],{"class":208},[67,8925,1236],{"class":77},[67,8927,1431],{"class":208},[67,8929,2288],{"class":77},[67,8931,8932],{"class":69,"line":2402},[67,8933,2909],{"class":77},[67,8935,8936],{"class":69,"line":2416},[67,8937,8938],{"class":202},"    \u002F\u002F3.给结构体数组中的元素赋值\n",[67,8940,8941,8944,8946,8949,8951,8953],{"class":69,"line":2421},[67,8942,8943],{"class":77},"    stuArray[",[67,8945,1077],{"class":208},[67,8947,8948],{"class":77},"].name",[67,8950,909],{"class":73},[67,8952,4421],{"class":84},[67,8954,2017],{"class":77},[67,8956,8957,8959,8961,8964,8966,8968],{"class":69,"line":2450},[67,8958,8943],{"class":77},[67,8960,1077],{"class":208},[67,8962,8963],{"class":77},"].age",[67,8965,909],{"class":73},[67,8967,939],{"class":208},[67,8969,2017],{"class":77},[67,8971,8972,8974,8976,8979,8981,8983],{"class":69,"line":2455},[67,8973,8943],{"class":77},[67,8975,1077],{"class":208},[67,8977,8978],{"class":77},"].score",[67,8980,909],{"class":73},[67,8982,939],{"class":208},[67,8984,2017],{"class":77},[67,8986,8987],{"class":69,"line":2472},[67,8988,8989],{"class":202},"    \u002F\u002F4.遍历结构体数组\n",[67,8991,8992,8994,8996,8998,9000,9002,9004,9006,9008,9010,9012,9014],{"class":69,"line":2477},[67,8993,3921],{"class":73},[67,8995,2381],{"class":77},[67,8997,867],{"class":73},[67,8999,3752],{"class":77},[67,9001,909],{"class":73},[67,9003,1051],{"class":208},[67,9005,3759],{"class":77},[67,9007,1766],{"class":73},[67,9009,939],{"class":208},[67,9011,3759],{"class":77},[67,9013,3014],{"class":73},[67,9015,870],{"class":77},[67,9017,9018],{"class":69,"line":2482},[67,9019,2752],{"class":77},[67,9021,9022,9024,9026,9029,9031,9034,9036,9039,9041],{"class":69,"line":2487},[67,9023,4171],{"class":77},[67,9025,1900],{"class":73},[67,9027,9028],{"class":77},"stuArray[i].name",[67,9030,1900],{"class":73},[67,9032,9033],{"class":77},"stuArray[i].age",[67,9035,1900],{"class":73},[67,9037,9038],{"class":77},"stuArray[i].score",[67,9040,1900],{"class":73},[67,9042,1922],{"class":77},[67,9044,9045],{"class":69,"line":2501},[67,9046,2909],{"class":77},[67,9048,9049],{"class":69,"line":2506},[67,9050,2288],{"class":77},[803,9052,9054],{"id":9053},"_43结构体指针","4.3结构体指针",[19,9056,9057],{},"作用：通过指针访问结构体中的成员",[19,9059,9060],{},"利用操作符->可以通过结构体指针访问结构体属性",[57,9062,9064],{"className":852,"code":9063,"language":854,"meta":62,"style":62},"#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",[64,9065,9066,9072,9082,9088,9092,9098,9102,9106,9112,9118,9122,9130,9134,9139,9164,9169,9184,9189,9212],{"__ignoreMap":62},[67,9067,9068,9070],{"class":69,"line":70},[67,9069,2672],{"class":73},[67,9071,2675],{"class":84},[67,9073,9074,9076,9078,9080],{"class":69,"line":143},[67,9075,2680],{"class":73},[67,9077,2683],{"class":73},[67,9079,2686],{"class":112},[67,9081,2017],{"class":77},[67,9083,9084,9086],{"class":69,"line":149},[67,9085,2672],{"class":73},[67,9087,8468],{"class":84},[67,9089,9090],{"class":69,"line":155},[67,9091,8827],{"class":202},[67,9093,9094,9096],{"class":69,"line":161},[67,9095,8478],{"class":73},[67,9097,8481],{"class":112},[67,9099,9100],{"class":69,"line":167},[67,9101,2269],{"class":77},[67,9103,9104],{"class":69,"line":173},[67,9105,8504],{"class":77},[67,9107,9108,9110],{"class":69,"line":180},[67,9109,2707],{"class":73},[67,9111,8516],{"class":77},[67,9113,9114,9116],{"class":69,"line":186},[67,9115,2707],{"class":73},[67,9117,8528],{"class":77},[67,9119,9120],{"class":69,"line":444},[67,9121,4715],{"class":77},[67,9123,9124,9126,9128],{"class":69,"line":2335},[67,9125,867],{"class":73},[67,9127,2695],{"class":112},[67,9129,2698],{"class":77},[67,9131,9132],{"class":69,"line":2340},[67,9133,2269],{"class":77},[67,9135,9136],{"class":69,"line":2346},[67,9137,9138],{"class":202},"    \u002F\u002F创建学生结构体变量\n",[67,9140,9141,9143,9145,9148,9150,9152,9154,9156,9158,9160,9162],{"class":69,"line":2351},[67,9142,8614],{"class":73},[67,9144,8617],{"class":112},[67,9146,9147],{"class":77}," s",[67,9149,909],{"class":73},[67,9151,1752],{"class":77},[67,9153,8635],{"class":84},[67,9155,1236],{"class":77},[67,9157,1506],{"class":208},[67,9159,1236],{"class":77},[67,9161,2445],{"class":208},[67,9163,4715],{"class":77},[67,9165,9166],{"class":69,"line":2365},[67,9167,9168],{"class":202},"    \u002F\u002F通过指针指向结构体变量\n",[67,9170,9171,9173,9175,9177,9179,9181],{"class":69,"line":2370},[67,9172,8614],{"class":73},[67,9174,8617],{"class":112},[67,9176,7237],{"class":73},[67,9178,19],{"class":77},[67,9180,7058],{"class":73},[67,9182,9183],{"class":77},"s\n",[67,9185,9186],{"class":69,"line":2376},[67,9187,9188],{"class":202},"    \u002F\u002F通过指针访问结构体变量中的数据\n",[67,9190,9191,9193,9195,9198,9200,9203,9205,9208,9210],{"class":69,"line":2397},[67,9192,2274],{"class":77},[67,9194,1900],{"class":73},[67,9196,9197],{"class":77},"p->name",[67,9199,1900],{"class":73},[67,9201,9202],{"class":77},"p->age",[67,9204,1900],{"class":73},[67,9206,9207],{"class":77},"p->score",[67,9209,1900],{"class":73},[67,9211,1922],{"class":77},[67,9213,9214],{"class":69,"line":2402},[67,9215,2288],{"class":77},[803,9217,9219],{"id":9218},"_44结构体嵌套结构体","4.4结构体嵌套结构体",[19,9221,9222],{},"作用：结构体中的成员可以是另一个结构体",[19,9224,9225],{},"例如：每个老师辅导一个学员，一个老师的结构体中，记录一个学生的结构体",[57,9227,9229],{"className":852,"code":9228,"language":854,"meta":62,"style":62},"#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",[64,9230,9231,9237,9247,9253,9258,9266,9270,9274,9280,9286,9290,9295,9302,9306,9313,9317,9323,9328,9332,9340,9344,9349,9354,9359,9370,9382,9393,9406,9417,9428],{"__ignoreMap":62},[67,9232,9233,9235],{"class":69,"line":70},[67,9234,2672],{"class":73},[67,9236,2675],{"class":84},[67,9238,9239,9241,9243,9245],{"class":69,"line":143},[67,9240,2680],{"class":73},[67,9242,2683],{"class":73},[67,9244,2686],{"class":112},[67,9246,2017],{"class":77},[67,9248,9249,9251],{"class":69,"line":149},[67,9250,2672],{"class":73},[67,9252,8468],{"class":84},[67,9254,9255],{"class":69,"line":155},[67,9256,9257],{"class":202},"\u002F\u002F定义学生结构体\n",[67,9259,9260,9262,9264],{"class":69,"line":161},[67,9261,8478],{"class":73},[67,9263,8617],{"class":112},[67,9265,3395],{"class":77},[67,9267,9268],{"class":69,"line":167},[67,9269,2269],{"class":77},[67,9271,9272],{"class":69,"line":173},[67,9273,8504],{"class":77},[67,9275,9276,9278],{"class":69,"line":180},[67,9277,2707],{"class":73},[67,9279,8516],{"class":77},[67,9281,9282,9284],{"class":69,"line":186},[67,9283,2707],{"class":73},[67,9285,8528],{"class":77},[67,9287,9288],{"class":69,"line":444},[67,9289,2288],{"class":77},[67,9291,9292],{"class":69,"line":2335},[67,9293,9294],{"class":202},"\u002F\u002F定义老师结构体\n",[67,9296,9297,9299],{"class":69,"line":2340},[67,9298,8478],{"class":73},[67,9300,9301],{"class":112}," Teacher\n",[67,9303,9304],{"class":69,"line":2346},[67,9305,2269],{"class":77},[67,9307,9308,9310],{"class":69,"line":2351},[67,9309,2707],{"class":73},[67,9311,9312],{"class":77}," id;\n",[67,9314,9315],{"class":69,"line":2365},[67,9316,8504],{"class":77},[67,9318,9319,9321],{"class":69,"line":2370},[67,9320,2707],{"class":73},[67,9322,8516],{"class":77},[67,9324,9325],{"class":69,"line":2376},[67,9326,9327],{"class":77},"    Student stu;\n",[67,9329,9330],{"class":69,"line":2397},[67,9331,2288],{"class":77},[67,9333,9334,9336,9338],{"class":69,"line":2402},[67,9335,867],{"class":73},[67,9337,2695],{"class":112},[67,9339,6697],{"class":77},[67,9341,9342],{"class":69,"line":2416},[67,9343,2269],{"class":77},[67,9345,9346],{"class":69,"line":2421},[67,9347,9348],{"class":202},"    \u002F\u002F结构体嵌套结构体\n",[67,9350,9351],{"class":69,"line":2450},[67,9352,9353],{"class":202},"    \u002F\u002F创建老师\n",[67,9355,9356],{"class":69,"line":2455},[67,9357,9358],{"class":77},"    Teacher t;\n",[67,9360,9361,9364,9366,9368],{"class":69,"line":2472},[67,9362,9363],{"class":77},"    t.id",[67,9365,909],{"class":73},[67,9367,1169],{"class":208},[67,9369,2017],{"class":77},[67,9371,9372,9375,9377,9380],{"class":69,"line":2477},[67,9373,9374],{"class":77},"    t.name",[67,9376,909],{"class":73},[67,9378,9379],{"class":84},"\"老王\"",[67,9381,2017],{"class":77},[67,9383,9384,9387,9389,9391],{"class":69,"line":2482},[67,9385,9386],{"class":77},"    t.age",[67,9388,909],{"class":73},[67,9390,1506],{"class":208},[67,9392,2017],{"class":77},[67,9394,9395,9398,9400,9403],{"class":69,"line":2487},[67,9396,9397],{"class":77},"    t.stu.name",[67,9399,909],{"class":73},[67,9401,9402],{"class":84},"\"小王\"",[67,9404,9405],{"class":77},"；\n",[67,9407,9408,9411,9413,9415],{"class":69,"line":2501},[67,9409,9410],{"class":77},"    t.stu.age",[67,9412,909],{"class":73},[67,9414,1556],{"class":208},[67,9416,2017],{"class":77},[67,9418,9419,9422,9424,9426],{"class":69,"line":2506},[67,9420,9421],{"class":77},"    t.stu.score",[67,9423,909],{"class":73},[67,9425,1202],{"class":208},[67,9427,2017],{"class":77},[67,9429,9430],{"class":69,"line":3298},[67,9431,2288],{"class":77},[803,9433,9435],{"id":9434},"_45结构体做函数参数","4.5结构体做函数参数",[19,9437,9438],{},"案例学习:将学生传入到一个参数中，打印学生身上的所有信息",[57,9440,9442],{"className":852,"code":9441,"language":854,"meta":62,"style":62},"#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",[64,9443,9444,9450,9460,9466,9472,9476,9480,9486,9492,9496,9501,9506,9523,9527,9560,9564,9569,9588,9592,9623,9627,9635,9639,9648,9660,9672,9684,9697,9705,9718,9730,9738],{"__ignoreMap":62},[67,9445,9446,9448],{"class":69,"line":70},[67,9447,2672],{"class":73},[67,9449,2675],{"class":84},[67,9451,9452,9454,9456,9458],{"class":69,"line":143},[67,9453,2680],{"class":73},[67,9455,2683],{"class":73},[67,9457,2686],{"class":112},[67,9459,2017],{"class":77},[67,9461,9462,9464],{"class":69,"line":149},[67,9463,2672],{"class":73},[67,9465,8468],{"class":84},[67,9467,9468,9470],{"class":69,"line":155},[67,9469,8478],{"class":73},[67,9471,8481],{"class":112},[67,9473,9474],{"class":69,"line":161},[67,9475,2269],{"class":77},[67,9477,9478],{"class":69,"line":167},[67,9479,8504],{"class":77},[67,9481,9482,9484],{"class":69,"line":173},[67,9483,2707],{"class":73},[67,9485,8516],{"class":77},[67,9487,9488,9490],{"class":69,"line":180},[67,9489,2707],{"class":73},[67,9491,8528],{"class":77},[67,9493,9494],{"class":69,"line":186},[67,9495,4715],{"class":77},[67,9497,9498],{"class":69,"line":444},[67,9499,9500],{"class":202},"\u002F\u002F打印学生信息的函数\n",[67,9502,9503],{"class":69,"line":2335},[67,9504,9505],{"class":202},"\u002F\u002F值传递\n",[67,9507,9508,9510,9513,9515,9517,9519,9521],{"class":69,"line":2340},[67,9509,6083],{"class":73},[67,9511,9512],{"class":112}," printStudent1",[67,9514,864],{"class":77},[67,9516,8478],{"class":73},[67,9518,8617],{"class":112},[67,9520,9147],{"class":5935},[67,9522,870],{"class":77},[67,9524,9525],{"class":69,"line":2346},[67,9526,2269],{"class":77},[67,9528,9529,9531,9533,9536,9538,9541,9543,9546,9548,9550,9552,9555,9557],{"class":69,"line":2351},[67,9530,7248],{"class":77},[67,9532,1900],{"class":73},[67,9534,9535],{"class":77}," s.name ",[67,9537,1900],{"class":73},[67,9539,9540],{"class":84}," \" \"",[67,9542,2168],{"class":73},[67,9544,9545],{"class":77}," s.age ",[67,9547,1900],{"class":73},[67,9549,9540],{"class":84},[67,9551,2168],{"class":73},[67,9553,9554],{"class":77}," s.score ",[67,9556,1900],{"class":73},[67,9558,9559],{"class":77}," endl;\n",[67,9561,9562],{"class":69,"line":2365},[67,9563,2288],{"class":77},[67,9565,9566],{"class":69,"line":2370},[67,9567,9568],{"class":202},"\u002F\u002F地址传递\n",[67,9570,9571,9573,9576,9578,9580,9582,9584,9586],{"class":69,"line":2376},[67,9572,6083],{"class":73},[67,9574,9575],{"class":112}," printStudent2",[67,9577,864],{"class":77},[67,9579,8478],{"class":73},[67,9581,8617],{"class":112},[67,9583,7237],{"class":73},[67,9585,1551],{"class":5935},[67,9587,870],{"class":77},[67,9589,9590],{"class":69,"line":2397},[67,9591,2269],{"class":77},[67,9593,9594,9596,9598,9601,9603,9605,9607,9610,9612,9614,9616,9619,9621],{"class":69,"line":2402},[67,9595,7248],{"class":77},[67,9597,1900],{"class":73},[67,9599,9600],{"class":77}," s->name ",[67,9602,1900],{"class":73},[67,9604,9540],{"class":84},[67,9606,2168],{"class":73},[67,9608,9609],{"class":77}," s->age ",[67,9611,1900],{"class":73},[67,9613,9540],{"class":84},[67,9615,2168],{"class":73},[67,9617,9618],{"class":77}," s->score ",[67,9620,1900],{"class":73},[67,9622,9559],{"class":77},[67,9624,9625],{"class":69,"line":2416},[67,9626,2288],{"class":77},[67,9628,9629,9631,9633],{"class":69,"line":2421},[67,9630,867],{"class":73},[67,9632,2695],{"class":112},[67,9634,2698],{"class":77},[67,9636,9637],{"class":69,"line":2450},[67,9638,2269],{"class":77},[67,9640,9641,9643,9645],{"class":69,"line":2455},[67,9642,8614],{"class":73},[67,9644,8617],{"class":112},[67,9646,9647],{"class":77}," s;\n",[67,9649,9650,9653,9655,9658],{"class":69,"line":2472},[67,9651,9652],{"class":77},"    s.name ",[67,9654,909],{"class":73},[67,9656,9657],{"class":84}," \"张三\"",[67,9659,2017],{"class":77},[67,9661,9662,9665,9667,9670],{"class":69,"line":2477},[67,9663,9664],{"class":77},"    s.age ",[67,9666,909],{"class":73},[67,9668,9669],{"class":208}," 20",[67,9671,2017],{"class":77},[67,9673,9674,9677,9679,9682],{"class":69,"line":2482},[67,9675,9676],{"class":77},"    s.score ",[67,9678,909],{"class":73},[67,9680,9681],{"class":208}," 85",[67,9683,2017],{"class":77},[67,9685,9686,9688,9690,9693,9695],{"class":69,"line":2487},[67,9687,2274],{"class":77},[67,9689,1900],{"class":73},[67,9691,9692],{"class":84},"\"值传递:\"",[67,9694,1900],{"class":73},[67,9696,1922],{"class":77},[67,9698,9699,9702],{"class":69,"line":2501},[67,9700,9701],{"class":112},"    printStudent1",[67,9703,9704],{"class":77},"(s);\n",[67,9706,9707,9709,9711,9714,9716],{"class":69,"line":2506},[67,9708,2274],{"class":77},[67,9710,1900],{"class":73},[67,9712,9713],{"class":84},"\"地址传递:\"",[67,9715,1900],{"class":73},[67,9717,1922],{"class":77},[67,9719,9720,9723,9725,9727],{"class":69,"line":3298},[67,9721,9722],{"class":112},"    printStudent2",[67,9724,864],{"class":77},[67,9726,1211],{"class":73},[67,9728,9729],{"class":77},"s); \n",[67,9731,9732,9734,9736],{"class":69,"line":3312},[67,9733,4810],{"class":73},[67,9735,4813],{"class":208},[67,9737,2017],{"class":77},[67,9739,9740],{"class":69,"line":3320},[67,9741,2288],{"class":77},[19,9743,9744],{},"注意：",[1863,9746,9747,9750],{},[818,9748,9749],{},"1.先定义结构体，不要在函数中写结构体的定义",[818,9751,9752],{},"2.不想修改主函数中的数据，就用值传递；反之用地址传递",[803,9754,9756],{"id":9755},"_46结构体中const使用场景","4.6结构体中const使用场景",[19,9758,9759],{},"用const防止误操作",[57,9761,9763],{"className":852,"code":9762,"language":854,"meta":62,"style":62},"#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",[64,9764,9765,9771,9781,9787,9792,9796,9800,9806,9812,9816,9832,9836,9859,9863,9871,9875,9896,9903,9907],{"__ignoreMap":62},[67,9766,9767,9769],{"class":69,"line":70},[67,9768,2672],{"class":73},[67,9770,2675],{"class":84},[67,9772,9773,9775,9777,9779],{"class":69,"line":143},[67,9774,2680],{"class":73},[67,9776,2683],{"class":73},[67,9778,2686],{"class":112},[67,9780,2017],{"class":77},[67,9782,9783,9785],{"class":69,"line":149},[67,9784,2672],{"class":73},[67,9786,8468],{"class":84},[67,9788,9789],{"class":69,"line":155},[67,9790,9791],{"class":77},"sctuct Student\n",[67,9793,9794],{"class":69,"line":161},[67,9795,2269],{"class":77},[67,9797,9798],{"class":69,"line":167},[67,9799,8504],{"class":77},[67,9801,9802,9804],{"class":69,"line":173},[67,9803,2707],{"class":73},[67,9805,8516],{"class":77},[67,9807,9808,9810],{"class":69,"line":180},[67,9809,2707],{"class":73},[67,9811,8528],{"class":77},[67,9813,9814],{"class":69,"line":186},[67,9815,4715],{"class":77},[67,9817,9818,9820,9823,9825,9828,9830],{"class":69,"line":444},[67,9819,6083],{"class":73},[67,9821,9822],{"class":112}," printStudents",[67,9824,864],{"class":77},[67,9826,9827],{"class":112},"student",[67,9829,9147],{"class":5935},[67,9831,870],{"class":77},[67,9833,9834],{"class":69,"line":2335},[67,9835,2269],{"class":77},[67,9837,9838,9840,9842,9845,9847,9850,9852,9855,9857],{"class":69,"line":2340},[67,9839,2274],{"class":77},[67,9841,1900],{"class":73},[67,9843,9844],{"class":77},"s.name",[67,9846,1900],{"class":73},[67,9848,9849],{"class":77},"s.age",[67,9851,1900],{"class":73},[67,9853,9854],{"class":77},"s.score",[67,9856,1900],{"class":73},[67,9858,1922],{"class":77},[67,9860,9861],{"class":69,"line":2346},[67,9862,2288],{"class":77},[67,9864,9865,9867,9869],{"class":69,"line":2351},[67,9866,867],{"class":73},[67,9868,2695],{"class":112},[67,9870,6697],{"class":77},[67,9872,9873],{"class":69,"line":2365},[67,9874,2269],{"class":77},[67,9876,9877,9880,9882,9884,9886,9888,9890,9892,9894],{"class":69,"line":2370},[67,9878,9879],{"class":77},"    Student s",[67,9881,909],{"class":73},[67,9883,1752],{"class":77},[67,9885,8635],{"class":84},[67,9887,1236],{"class":77},[67,9889,1506],{"class":208},[67,9891,1236],{"class":77},[67,9893,1506],{"class":208},[67,9895,4715],{"class":77},[67,9897,9898,9901],{"class":69,"line":2376},[67,9899,9900],{"class":112},"    printStudent",[67,9902,9704],{"class":77},[67,9904,9905],{"class":69,"line":2397},[67,9906,177],{"emptyLinePlaceholder":176},[67,9908,9909],{"class":69,"line":2402},[67,9910,2288],{"class":77},[19,9912,9744],{},[1863,9914,9915,9918,9921],{},[818,9916,9917],{},"1.值传递时形参会copy一份实参的数值，所以实参数据多时，就会比较浪费内存",[818,9919,9920],{},"2.将函数中的形参改为指针，可以减少内存空间，而且不会复制新的副本出来",[818,9922,9923],{},"3.在结构体形参前边加上const后，函数中就没法改参数信息了（加入const之后，一旦有修改的操作就会报错，可以防止我们的误操作）",[57,9925,9927],{"className":852,"code":9926,"language":854,"meta":62,"style":62},"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",[64,9928,9929,9948,9952,9957,9977],{"__ignoreMap":62},[67,9930,9931,9933,9935,9937,9939,9942,9944,9946],{"class":69,"line":70},[67,9932,6083],{"class":73},[67,9934,9822],{"class":112},[67,9936,864],{"class":77},[67,9938,7511],{"class":73},[67,9940,9941],{"class":112}," student",[67,9943,7237],{"class":73},[67,9945,1551],{"class":5935},[67,9947,870],{"class":77},[67,9949,9950],{"class":69,"line":143},[67,9951,2269],{"class":77},[67,9953,9954],{"class":69,"line":149},[67,9955,9956],{"class":202},"    \u002F\u002F s->age=18;\u002F\u002F提示❎无，不可以这样做\n",[67,9958,9959,9961,9963,9965,9967,9969,9971,9973,9975],{"class":69,"line":155},[67,9960,2274],{"class":77},[67,9962,1900],{"class":73},[67,9964,9844],{"class":77},[67,9966,1900],{"class":73},[67,9968,9849],{"class":77},[67,9970,1900],{"class":73},[67,9972,9854],{"class":77},[67,9974,1900],{"class":73},[67,9976,1922],{"class":77},[67,9978,9979],{"class":69,"line":161},[67,9980,2288],{"class":77},[803,9982,9984],{"id":9983},"_47案例","4.7案例",[815,9986,9987],{},[818,9988,9989],{},"案例说明：学校正在做毕设项目，每名老师带领5个学生，总共有3名老师，需求如下：设计学生和老师的结构体，其中在老师的结构体中，有老师姓名和一个存放5名学生的数组，作为成员学生的成员有姓名、考试分数，创建数组存放3名老师，通过函数给每个老师及所带的学生赋值，最终打印出老师数据以及老师所带的学生数据。",[57,9991,9993],{"className":852,"code":9992,"language":854,"meta":62,"style":62},"#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",[64,9994,9995,10001,10011,10017,10024,10028,10034,10038,10043,10049,10055,10059,10063,10069,10073,10078,10083,10096,10100,10105,10131,10135,10147,10174,10178,10190,10200,10204,10209,10238,10242,10254,10263,10290,10301,10311,10315,10319,10323,10328,10352,10356,10380,10384,10403,10429,10433,10457,10480,10504,10509,10514,10519,10528,10533,10539,10560,10566,10580,10586,10613,10622,10628,10636,10641],{"__ignoreMap":62},[67,9996,9997,9999],{"class":69,"line":70},[67,9998,2672],{"class":73},[67,10000,2675],{"class":84},[67,10002,10003,10005,10007,10009],{"class":69,"line":143},[67,10004,2680],{"class":73},[67,10006,2683],{"class":73},[67,10008,2686],{"class":112},[67,10010,2017],{"class":77},[67,10012,10013,10015],{"class":69,"line":149},[67,10014,2672],{"class":73},[67,10016,8468],{"class":84},[67,10018,10019,10021],{"class":69,"line":155},[67,10020,2672],{"class":73},[67,10022,10023],{"class":84},"\u003Cctime>\n",[67,10025,10026],{"class":69,"line":161},[67,10027,9257],{"class":202},[67,10029,10030,10032],{"class":69,"line":167},[67,10031,8478],{"class":73},[67,10033,8481],{"class":112},[67,10035,10036],{"class":69,"line":173},[67,10037,2269],{"class":77},[67,10039,10040],{"class":69,"line":180},[67,10041,10042],{"class":77},"    string sName;\n",[67,10044,10045,10047],{"class":69,"line":186},[67,10046,2707],{"class":73},[67,10048,8516],{"class":77},[67,10050,10051,10053],{"class":69,"line":444},[67,10052,2707],{"class":73},[67,10054,8528],{"class":77},[67,10056,10057],{"class":69,"line":2335},[67,10058,4715],{"class":77},[67,10060,10061],{"class":69,"line":2340},[67,10062,9294],{"class":202},[67,10064,10065,10067],{"class":69,"line":2346},[67,10066,8478],{"class":73},[67,10068,9301],{"class":112},[67,10070,10071],{"class":69,"line":2351},[67,10072,2269],{"class":77},[67,10074,10075],{"class":69,"line":2365},[67,10076,10077],{"class":77},"    string tName;\n",[67,10079,10080],{"class":69,"line":2370},[67,10081,10082],{"class":202},"    \u002F\u002F学生数组\n",[67,10084,10085,10087,10089,10092,10094],{"class":69,"line":2376},[67,10086,8614],{"class":73},[67,10088,8617],{"class":112},[67,10090,10091],{"class":77}," sArray[",[67,10093,1177],{"class":208},[67,10095,5409],{"class":77},[67,10097,10098],{"class":69,"line":2397},[67,10099,4715],{"class":77},[67,10101,10102],{"class":69,"line":2402},[67,10103,10104],{"class":202},"\u002F\u002F给老师和学生赋值的函数\n",[67,10106,10107,10109,10112,10114,10116,10119,10122,10125,10127,10129],{"class":69,"line":2416},[67,10108,6083],{"class":73},[67,10110,10111],{"class":112}," allocateSpace",[67,10113,864],{"class":77},[67,10115,8478],{"class":73},[67,10117,10118],{"class":112}," Teacher",[67,10120,10121],{"class":5935}," tArray",[67,10123,10124],{"class":77},"[],",[67,10126,867],{"class":73},[67,10128,8050],{"class":5935},[67,10130,870],{"class":77},[67,10132,10133],{"class":69,"line":2421},[67,10134,2269],{"class":77},[67,10136,10137,10140,10142,10145],{"class":69,"line":2450},[67,10138,10139],{"class":77},"    string nameSeed",[67,10141,909],{"class":73},[67,10143,10144],{"class":84},"\"ABCDE\"",[67,10146,2017],{"class":77},[67,10148,10149,10151,10153,10155,10158,10160,10162,10165,10167,10170,10172],{"class":69,"line":2455},[67,10150,3921],{"class":73},[67,10152,2381],{"class":77},[67,10154,867],{"class":73},[67,10156,10157],{"class":77}," i ",[67,10159,909],{"class":73},[67,10161,4813],{"class":208},[67,10163,10164],{"class":77},"; i ",[67,10166,1766],{"class":73},[67,10168,10169],{"class":77}," len; i",[67,10171,3014],{"class":73},[67,10173,870],{"class":77},[67,10175,10176],{"class":69,"line":2472},[67,10177,2752],{"class":77},[67,10179,10180,10183,10185,10188],{"class":69,"line":2477},[67,10181,10182],{"class":77},"        tArray[i].tName ",[67,10184,909],{"class":73},[67,10186,10187],{"class":84}," \"Teacher_\"",[67,10189,2017],{"class":77},[67,10191,10192,10194,10197],{"class":69,"line":2482},[67,10193,10182],{"class":77},[67,10195,10196],{"class":73},"+=",[67,10198,10199],{"class":77},"nameSeed[i];\n",[67,10201,10202],{"class":69,"line":2487},[67,10203,177],{"emptyLinePlaceholder":176},[67,10205,10206],{"class":69,"line":2501},[67,10207,10208],{"class":202},"        \u002F\u002F通过循环给每名老师带的学生赋值\n",[67,10210,10211,10213,10215,10217,10220,10222,10224,10227,10229,10231,10234,10236],{"class":69,"line":2506},[67,10212,4123],{"class":73},[67,10214,2381],{"class":77},[67,10216,867],{"class":73},[67,10218,10219],{"class":77}," j ",[67,10221,909],{"class":73},[67,10223,4813],{"class":208},[67,10225,10226],{"class":77},"; j ",[67,10228,1766],{"class":73},[67,10230,2870],{"class":208},[67,10232,10233],{"class":77},"; j",[67,10235,3014],{"class":73},[67,10237,870],{"class":77},[67,10239,10240],{"class":69,"line":3298},[67,10241,3231],{"class":77},[67,10243,10244,10247,10249,10252],{"class":69,"line":3312},[67,10245,10246],{"class":77},"            tArray[i].sArray[j].sName ",[67,10248,909],{"class":73},[67,10250,10251],{"class":84}," \"Student_\"",[67,10253,2017],{"class":77},[67,10255,10256,10258,10260],{"class":69,"line":3320},[67,10257,10246],{"class":77},[67,10259,10196],{"class":73},[67,10261,10262],{"class":77}," nameSeed[j];\n",[67,10264,10265,10268,10271,10273,10275,10277,10279,10281,10283,10285,10287],{"class":69,"line":3325},[67,10266,10267],{"class":73},"            int",[67,10269,10270],{"class":77}," random",[67,10272,909],{"class":73},[67,10274,3145],{"class":112},[67,10276,3148],{"class":77},[67,10278,1186],{"class":73},[67,10280,1763],{"class":208},[67,10282,1338],{"class":73},[67,10284,1259],{"class":208},[67,10286,918],{"class":77},[67,10288,10289],{"class":202},"\u002F\u002F40~99\n",[67,10291,10292,10295,10297,10299],{"class":69,"line":3331},[67,10293,10294],{"class":77},"            tArray[i].sArray[j].age ",[67,10296,909],{"class":73},[67,10298,9669],{"class":208},[67,10300,2017],{"class":77},[67,10302,10303,10306,10308],{"class":69,"line":3337},[67,10304,10305],{"class":77},"            tArray[i].sArray[j].score ",[67,10307,909],{"class":73},[67,10309,10310],{"class":77}," random;\n",[67,10312,10313],{"class":69,"line":3342},[67,10314,3250],{"class":77},[67,10316,10317],{"class":69,"line":8667},[67,10318,2909],{"class":77},[67,10320,10321],{"class":69,"line":8691},[67,10322,2288],{"class":77},[67,10324,10325],{"class":69,"line":8696},[67,10326,10327],{"class":202},"\u002F\u002F打印所有信息的函数\n",[67,10329,10330,10332,10335,10337,10339,10341,10343,10346,10348,10350],{"class":69,"line":8702},[67,10331,6083],{"class":73},[67,10333,10334],{"class":112}," printInfo",[67,10336,864],{"class":77},[67,10338,8478],{"class":73},[67,10340,10118],{"class":112},[67,10342,10121],{"class":5935},[67,10344,10345],{"class":77},"[], ",[67,10347,867],{"class":73},[67,10349,8050],{"class":5935},[67,10351,870],{"class":77},[67,10353,10354],{"class":69,"line":8729},[67,10355,2269],{"class":77},[67,10357,10358,10360,10362,10364,10366,10368,10370,10372,10374,10376,10378],{"class":69,"line":8734},[67,10359,3921],{"class":73},[67,10361,2381],{"class":77},[67,10363,867],{"class":73},[67,10365,10157],{"class":77},[67,10367,909],{"class":73},[67,10369,4813],{"class":208},[67,10371,10164],{"class":77},[67,10373,1766],{"class":73},[67,10375,10169],{"class":77},[67,10377,3014],{"class":73},[67,10379,870],{"class":77},[67,10381,10382],{"class":69,"line":8740},[67,10383,2752],{"class":77},[67,10385,10386,10389,10391,10394,10396,10399,10401],{"class":69,"line":8752},[67,10387,10388],{"class":77},"        cout ",[67,10390,1900],{"class":73},[67,10392,10393],{"class":84}," \"Teacher: \"",[67,10395,2168],{"class":73},[67,10397,10398],{"class":77}," tArray[i].tName ",[67,10400,1900],{"class":73},[67,10402,9559],{"class":77},[67,10404,10405,10407,10409,10411,10413,10415,10417,10419,10421,10423,10425,10427],{"class":69,"line":8764},[67,10406,4123],{"class":73},[67,10408,2381],{"class":77},[67,10410,867],{"class":73},[67,10412,10219],{"class":77},[67,10414,909],{"class":73},[67,10416,4813],{"class":208},[67,10418,10226],{"class":77},[67,10420,1766],{"class":73},[67,10422,2870],{"class":208},[67,10424,10233],{"class":77},[67,10426,3014],{"class":73},[67,10428,870],{"class":77},[67,10430,10431],{"class":69,"line":8776},[67,10432,3231],{"class":77},[67,10434,10436,10439,10441,10443,10445,10448,10450,10453,10455],{"class":69,"line":10435},47,[67,10437,10438],{"class":77},"            cout ",[67,10440,1900],{"class":73},[67,10442,251],{"class":84},[67,10444,1957],{"class":208},[67,10446,10447],{"class":84},"Student: \"",[67,10449,2168],{"class":73},[67,10451,10452],{"class":77}," tArray[i].sArray[j].sName",[67,10454,1900],{"class":73},[67,10456,1922],{"class":77},[67,10458,10460,10462,10464,10466,10468,10471,10473,10476,10478],{"class":69,"line":10459},48,[67,10461,10438],{"class":77},[67,10463,1900],{"class":73},[67,10465,251],{"class":84},[67,10467,1957],{"class":208},[67,10469,10470],{"class":84},"Age: \"",[67,10472,2168],{"class":73},[67,10474,10475],{"class":77}," tArray[i].sArray[j].age ",[67,10477,1900],{"class":73},[67,10479,9559],{"class":77},[67,10481,10483,10485,10487,10489,10491,10494,10496,10499,10501],{"class":69,"line":10482},49,[67,10484,10438],{"class":77},[67,10486,1900],{"class":73},[67,10488,251],{"class":84},[67,10490,1957],{"class":208},[67,10492,10493],{"class":84},"Score: \"",[67,10495,2168],{"class":73},[67,10497,10498],{"class":77}," tArray[i].sArray[j].score ",[67,10500,1900],{"class":73},[67,10502,10503],{"class":77}," endl;   \n",[67,10505,10507],{"class":69,"line":10506},50,[67,10508,3250],{"class":77},[67,10510,10512],{"class":69,"line":10511},51,[67,10513,2909],{"class":77},[67,10515,10517],{"class":69,"line":10516},52,[67,10518,2288],{"class":77},[67,10520,10522,10524,10526],{"class":69,"line":10521},53,[67,10523,867],{"class":73},[67,10525,2695],{"class":112},[67,10527,2698],{"class":77},[67,10529,10531],{"class":69,"line":10530},54,[67,10532,2269],{"class":77},[67,10534,10536],{"class":69,"line":10535},55,[67,10537,10538],{"class":202},"    \u002F\u002F随机数种子\n",[67,10540,10542,10544,10546,10548,10550,10552,10554,10556,10558],{"class":69,"line":10541},56,[67,10543,3095],{"class":112},[67,10545,3098],{"class":77},[67,10547,3101],{"class":73},[67,10549,3104],{"class":73},[67,10551,260],{"class":77},[67,10553,3109],{"class":112},[67,10555,864],{"class":77},[67,10557,3114],{"class":208},[67,10559,3117],{"class":77},[67,10561,10563],{"class":69,"line":10562},57,[67,10564,10565],{"class":202},"    \u002F\u002F1.创建3名老师的数组\n",[67,10567,10569,10571,10573,10576,10578],{"class":69,"line":10568},58,[67,10570,8614],{"class":73},[67,10572,10118],{"class":112},[67,10574,10575],{"class":77}," tArray[",[67,10577,933],{"class":208},[67,10579,5409],{"class":77},[67,10581,10583],{"class":69,"line":10582},59,[67,10584,10585],{"class":202},"    \u002F\u002F2.通过函数给3名老师的信息赋值，并给老师带的学生信息赋值\n",[67,10587,10589,10591,10594,10596,10599,10602,10604,10606,10609,10611],{"class":69,"line":10588},60,[67,10590,2707],{"class":73},[67,10592,10593],{"class":77}," len ",[67,10595,909],{"class":73},[67,10597,10598],{"class":73}," sizeof",[67,10600,10601],{"class":77},"(tArray) ",[67,10603,1440],{"class":73},[67,10605,10598],{"class":73},[67,10607,10608],{"class":77},"(tArray[",[67,10610,1051],{"class":208},[67,10612,4576],{"class":77},[67,10614,10616,10619],{"class":69,"line":10615},61,[67,10617,10618],{"class":112},"    allocateSpace",[67,10620,10621],{"class":77},"(tArray, len);\n",[67,10623,10625],{"class":69,"line":10624},62,[67,10626,10627],{"class":202},"    \u002F\u002F3.打印所有老师及所带的学生信息\n",[67,10629,10631,10634],{"class":69,"line":10630},63,[67,10632,10633],{"class":112},"    printInfo",[67,10635,10621],{"class":77},[67,10637,10639],{"class":69,"line":10638},64,[67,10640,177],{"emptyLinePlaceholder":176},[67,10642,10644],{"class":69,"line":10643},65,[67,10645,2288],{"class":77},[815,10647,10648],{"start":143},[818,10649,10650,10653],{},[336,10651,10652],{},"案例描述：","：设计一个英雄的结构体，包括成员姓名，年龄，性别;创建结构体数组，数组中存放5名英雄。通过冒泡排序的算法，将数组中的英雄按照年龄进行升序排序，最终打印排序后的结果。",[19,10655,10656],{},"五名英雄信息如下：",[57,10658,10662],{"className":10659,"code":10660,"language":10661,"meta":62,"style":62},"language-C++ shiki shiki-themes github-light github-dark","        {\"刘备\",23,\"男\"},\n        {\"关羽\",22,\"男\"},\n        {\"张飞\",20,\"男\"},\n        {\"赵云\",21,\"男\"},\n        {\"貂蝉\",19,\"女\"},\n","C++",[64,10663,10664,10682,10699,10716,10733],{"__ignoreMap":62},[67,10665,10666,10668,10671,10673,10675,10677,10680],{"class":69,"line":70},[67,10667,5636],{"class":77},[67,10669,10670],{"class":84},"\"刘备\"",[67,10672,1236],{"class":77},[67,10674,1631],{"class":208},[67,10676,1236],{"class":77},[67,10678,10679],{"class":84},"\"男\"",[67,10681,5649],{"class":77},[67,10683,10684,10686,10689,10691,10693,10695,10697],{"class":69,"line":143},[67,10685,5636],{"class":77},[67,10687,10688],{"class":84},"\"关羽\"",[67,10690,1236],{"class":77},[67,10692,1606],{"class":208},[67,10694,1236],{"class":77},[67,10696,10679],{"class":84},[67,10698,5649],{"class":77},[67,10700,10701,10703,10706,10708,10710,10712,10714],{"class":69,"line":149},[67,10702,5636],{"class":77},[67,10704,10705],{"class":84},"\"张飞\"",[67,10707,1236],{"class":77},[67,10709,1556],{"class":208},[67,10711,1236],{"class":77},[67,10713,10679],{"class":84},[67,10715,5649],{"class":77},[67,10717,10718,10720,10723,10725,10727,10729,10731],{"class":69,"line":155},[67,10719,5636],{"class":77},[67,10721,10722],{"class":84},"\"赵云\"",[67,10724,1236],{"class":77},[67,10726,1581],{"class":208},[67,10728,1236],{"class":77},[67,10730,10679],{"class":84},[67,10732,5649],{"class":77},[67,10734,10735,10737,10740,10742,10744,10746,10749],{"class":69,"line":161},[67,10736,5636],{"class":77},[67,10738,10739],{"class":84},"\"貂蝉\"",[67,10741,1236],{"class":77},[67,10743,1531],{"class":208},[67,10745,1236],{"class":77},[67,10747,10748],{"class":84},"\"女\"",[67,10750,5649],{"class":77},[19,10752,10753],{},"代码：",[57,10755,10757],{"className":852,"code":10756,"language":854,"meta":62,"style":62},"#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",[64,10758,10759,10765,10775,10781,10788,10792,10796,10802,10807,10811,10816,10839,10843,10868,10872,10905,10910,10939,10944,10959,10985,11005,11010,11015,11019,11023,11028,11050,11054,11078,11082,11144,11148,11152,11160,11164,11169,11180,11184,11200,11216,11232,11248,11264,11268,11288,11310,11315,11328,11335,11340,11346,11351,11364,11370],{"__ignoreMap":62},[67,10760,10761,10763],{"class":69,"line":70},[67,10762,2672],{"class":73},[67,10764,2675],{"class":84},[67,10766,10767,10769,10771,10773],{"class":69,"line":143},[67,10768,2680],{"class":73},[67,10770,2683],{"class":73},[67,10772,2686],{"class":112},[67,10774,2017],{"class":77},[67,10776,10777,10779],{"class":69,"line":149},[67,10778,2672],{"class":73},[67,10780,8468],{"class":84},[67,10782,10783,10785],{"class":69,"line":155},[67,10784,8478],{"class":73},[67,10786,10787],{"class":112}," Sanguo\n",[67,10789,10790],{"class":69,"line":161},[67,10791,2269],{"class":77},[67,10793,10794],{"class":69,"line":167},[67,10795,8504],{"class":77},[67,10797,10798,10800],{"class":69,"line":173},[67,10799,2707],{"class":73},[67,10801,8516],{"class":77},[67,10803,10804],{"class":69,"line":180},[67,10805,10806],{"class":77},"    string gender;\n",[67,10808,10809],{"class":69,"line":186},[67,10810,4715],{"class":77},[67,10812,10813],{"class":69,"line":444},[67,10814,10815],{"class":202},"\u002F\u002F定义排序函数\n",[67,10817,10818,10820,10822,10824,10827,10829,10831,10833,10835,10837],{"class":69,"line":2335},[67,10819,6083],{"class":73},[67,10821,8035],{"class":112},[67,10823,864],{"class":77},[67,10825,10826],{"class":112},"Sanguo",[67,10828,7237],{"class":73},[67,10830,1551],{"class":5935},[67,10832,1236],{"class":77},[67,10834,867],{"class":73},[67,10836,8050],{"class":5935},[67,10838,870],{"class":77},[67,10840,10841],{"class":69,"line":2340},[67,10842,2269],{"class":77},[67,10844,10845,10847,10849,10851,10853,10855,10857,10859,10861,10864,10866],{"class":69,"line":2346},[67,10846,3921],{"class":73},[67,10848,864],{"class":77},[67,10850,867],{"class":73},[67,10852,3752],{"class":77},[67,10854,909],{"class":73},[67,10856,1051],{"class":208},[67,10858,3759],{"class":77},[67,10860,1766],{"class":73},[67,10862,10863],{"class":77},"len;i",[67,10865,3014],{"class":73},[67,10867,870],{"class":77},[67,10869,10870],{"class":69,"line":2351},[67,10871,2752],{"class":77},[67,10873,10874,10877,10879,10881,10883,10885,10887,10889,10891,10893,10895,10897,10899,10901,10903],{"class":69,"line":2365},[67,10875,10876],{"class":73},"     for",[67,10878,2381],{"class":77},[67,10880,867],{"class":73},[67,10882,4130],{"class":77},[67,10884,909],{"class":73},[67,10886,1051],{"class":208},[67,10888,4137],{"class":77},[67,10890,1766],{"class":73},[67,10892,8077],{"class":77},[67,10894,1389],{"class":73},[67,10896,1077],{"class":208},[67,10898,1389],{"class":73},[67,10900,4270],{"class":77},[67,10902,3014],{"class":73},[67,10904,870],{"class":77},[67,10906,10907],{"class":69,"line":2370},[67,10908,10909],{"class":77},"     {\n",[67,10911,10912,10915,10918,10920,10923,10925,10928,10930,10932,10934,10936],{"class":69,"line":2376},[67,10913,10914],{"class":73},"         if",[67,10916,10917],{"class":77}," ((s",[67,10919,1338],{"class":73},[67,10921,10922],{"class":77},"j)->age ",[67,10924,1816],{"class":73},[67,10926,10927],{"class":77}," (s",[67,10929,1338],{"class":73},[67,10931,1324],{"class":77},[67,10933,1338],{"class":73},[67,10935,1077],{"class":208},[67,10937,10938],{"class":77},")->age)\n",[67,10940,10941],{"class":69,"line":2397},[67,10942,10943],{"class":77},"         {\n",[67,10945,10946,10949,10951,10954,10956],{"class":69,"line":2402},[67,10947,10948],{"class":77},"             Sanguo temp",[67,10950,7872],{"class":73},[67,10952,10953],{"class":77},"(s",[67,10955,1338],{"class":73},[67,10957,10958],{"class":77},"j);\n",[67,10960,10961,10964,10966,10968,10971,10973,10975,10977,10979,10981,10983],{"class":69,"line":2416},[67,10962,10963],{"class":73},"             *",[67,10965,10953],{"class":77},[67,10967,1338],{"class":73},[67,10969,10970],{"class":77},"j)",[67,10972,7872],{"class":73},[67,10974,10953],{"class":77},[67,10976,1338],{"class":73},[67,10978,1324],{"class":77},[67,10980,1338],{"class":73},[67,10982,1077],{"class":208},[67,10984,3440],{"class":77},[67,10986,10987,10989,10991,10993,10995,10997,10999,11001,11003],{"class":69,"line":2421},[67,10988,10963],{"class":73},[67,10990,10953],{"class":77},[67,10992,1338],{"class":73},[67,10994,1324],{"class":77},[67,10996,1338],{"class":73},[67,10998,1077],{"class":208},[67,11000,260],{"class":77},[67,11002,909],{"class":73},[67,11004,4999],{"class":77},[67,11006,11007],{"class":69,"line":2450},[67,11008,11009],{"class":77},"         }\n",[67,11011,11012],{"class":69,"line":2455},[67,11013,11014],{"class":77},"     }\n",[67,11016,11017],{"class":69,"line":2472},[67,11018,2909],{"class":77},[67,11020,11021],{"class":69,"line":2477},[67,11022,2288],{"class":77},[67,11024,11025],{"class":69,"line":2482},[67,11026,11027],{"class":202},"\u002F\u002F定义打印函数\n",[67,11029,11030,11032,11034,11036,11038,11040,11042,11044,11046,11048],{"class":69,"line":2487},[67,11031,6083],{"class":73},[67,11033,10334],{"class":112},[67,11035,864],{"class":77},[67,11037,10826],{"class":112},[67,11039,7237],{"class":73},[67,11041,1551],{"class":5935},[67,11043,1236],{"class":77},[67,11045,867],{"class":73},[67,11047,8050],{"class":5935},[67,11049,870],{"class":77},[67,11051,11052],{"class":69,"line":2501},[67,11053,2269],{"class":77},[67,11055,11056,11058,11060,11062,11064,11066,11068,11070,11072,11074,11076],{"class":69,"line":2506},[67,11057,3921],{"class":73},[67,11059,2381],{"class":77},[67,11061,867],{"class":73},[67,11063,3752],{"class":77},[67,11065,909],{"class":73},[67,11067,1051],{"class":208},[67,11069,3759],{"class":77},[67,11071,1766],{"class":73},[67,11073,10863],{"class":77},[67,11075,3014],{"class":73},[67,11077,870],{"class":77},[67,11079,11080],{"class":69,"line":3298},[67,11081,2752],{"class":77},[67,11083,11084,11086,11088,11090,11092,11095,11097,11099,11101,11104,11106,11108,11110,11113,11115,11117,11119,11122,11124,11126,11128,11131,11133,11135,11137,11140,11142],{"class":69,"line":3312},[67,11085,4171],{"class":77},[67,11087,1900],{"class":73},[67,11089,257],{"class":84},[67,11091,1957],{"class":208},[67,11093,11094],{"class":84},"姓名：\"",[67,11096,1900],{"class":73},[67,11098,10953],{"class":77},[67,11100,1338],{"class":73},[67,11102,11103],{"class":77},"i)->name",[67,11105,1900],{"class":73},[67,11107,257],{"class":84},[67,11109,1957],{"class":208},[67,11111,11112],{"class":84},"年龄：\"",[67,11114,1900],{"class":73},[67,11116,10953],{"class":77},[67,11118,1338],{"class":73},[67,11120,11121],{"class":77},"i)->age",[67,11123,1900],{"class":73},[67,11125,257],{"class":84},[67,11127,1957],{"class":208},[67,11129,11130],{"class":84},"性别：\"",[67,11132,1900],{"class":73},[67,11134,10953],{"class":77},[67,11136,1338],{"class":73},[67,11138,11139],{"class":77},"i)->gender",[67,11141,1900],{"class":73},[67,11143,1922],{"class":77},[67,11145,11146],{"class":69,"line":3320},[67,11147,2909],{"class":77},[67,11149,11150],{"class":69,"line":3325},[67,11151,2288],{"class":77},[67,11153,11154,11156,11158],{"class":69,"line":3331},[67,11155,867],{"class":73},[67,11157,2695],{"class":112},[67,11159,2698],{"class":77},[67,11161,11162],{"class":69,"line":3337},[67,11163,2269],{"class":77},[67,11165,11166],{"class":69,"line":3342},[67,11167,11168],{"class":202},"    \u002F\u002F定义结构体变量\n",[67,11170,11171,11174,11176,11178],{"class":69,"line":8667},[67,11172,11173],{"class":77},"    Sanguo s1[",[67,11175,1177],{"class":208},[67,11177,1796],{"class":77},[67,11179,5627],{"class":73},[67,11181,11182],{"class":69,"line":8691},[67,11183,2752],{"class":77},[67,11185,11186,11188,11190,11192,11194,11196,11198],{"class":69,"line":8696},[67,11187,5636],{"class":77},[67,11189,10670],{"class":84},[67,11191,1236],{"class":77},[67,11193,1631],{"class":208},[67,11195,1236],{"class":77},[67,11197,10679],{"class":84},[67,11199,5649],{"class":77},[67,11201,11202,11204,11206,11208,11210,11212,11214],{"class":69,"line":8702},[67,11203,5636],{"class":77},[67,11205,10688],{"class":84},[67,11207,1236],{"class":77},[67,11209,1606],{"class":208},[67,11211,1236],{"class":77},[67,11213,10679],{"class":84},[67,11215,5649],{"class":77},[67,11217,11218,11220,11222,11224,11226,11228,11230],{"class":69,"line":8729},[67,11219,5636],{"class":77},[67,11221,10705],{"class":84},[67,11223,1236],{"class":77},[67,11225,1556],{"class":208},[67,11227,1236],{"class":77},[67,11229,10679],{"class":84},[67,11231,5649],{"class":77},[67,11233,11234,11236,11238,11240,11242,11244,11246],{"class":69,"line":8734},[67,11235,5636],{"class":77},[67,11237,10722],{"class":84},[67,11239,1236],{"class":77},[67,11241,1581],{"class":208},[67,11243,1236],{"class":77},[67,11245,10679],{"class":84},[67,11247,5649],{"class":77},[67,11249,11250,11252,11254,11256,11258,11260,11262],{"class":69,"line":8740},[67,11251,5636],{"class":77},[67,11253,10739],{"class":84},[67,11255,1236],{"class":77},[67,11257,1531],{"class":208},[67,11259,1236],{"class":77},[67,11261,10748],{"class":84},[67,11263,5649],{"class":77},[67,11265,11266],{"class":69,"line":8752},[67,11267,5670],{"class":77},[67,11269,11270,11272,11274,11276,11279,11281,11284,11286],{"class":69,"line":8764},[67,11271,2707],{"class":73},[67,11273,8050],{"class":77},[67,11275,4922],{"class":73},[67,11277,11278],{"class":77},"(s1)",[67,11280,4928],{"class":73},[67,11282,11283],{"class":77},"(s1[",[67,11285,1051],{"class":208},[67,11287,4576],{"class":77},[67,11289,11290,11293,11295,11298,11300,11303,11306,11308],{"class":69,"line":8776},[67,11291,11292],{"class":77},"    Sanguo ",[67,11294,1312],{"class":73},[67,11296,11297],{"class":77},"s ",[67,11299,909],{"class":73},[67,11301,11302],{"class":73}," &",[67,11304,11305],{"class":77},"s1[",[67,11307,1051],{"class":208},[67,11309,5409],{"class":77},[67,11311,11312],{"class":69,"line":10435},[67,11313,11314],{"class":202},"    \u002F\u002F排序前：\n",[67,11316,11317,11319,11321,11324,11326],{"class":69,"line":10459},[67,11318,7248],{"class":77},[67,11320,1900],{"class":73},[67,11322,11323],{"class":84}," \"排序前：\"",[67,11325,2168],{"class":73},[67,11327,9559],{"class":77},[67,11329,11330,11332],{"class":69,"line":10482},[67,11331,10633],{"class":112},[67,11333,11334],{"class":77},"(s,len);\n",[67,11336,11337],{"class":69,"line":10506},[67,11338,11339],{"class":202},"    \u002F\u002F调用排序函数\n",[67,11341,11342,11344],{"class":69,"line":10511},[67,11343,8317],{"class":112},[67,11345,11334],{"class":77},[67,11347,11348],{"class":69,"line":10516},[67,11349,11350],{"class":202},"    \u002F\u002F排序后\n",[67,11352,11353,11355,11357,11360,11362],{"class":69,"line":10521},[67,11354,7248],{"class":77},[67,11356,1900],{"class":73},[67,11358,11359],{"class":84}," \"排序后：\"",[67,11361,2168],{"class":73},[67,11363,9559],{"class":77},[67,11365,11366,11368],{"class":69,"line":10530},[67,11367,10633],{"class":112},[67,11369,11334],{"class":77},[67,11371,11372],{"class":69,"line":10535},[67,11373,2288],{"class":77},[19,11375,11376,11377,11379],{},"注意：使用指针时直接用传首地址**&s",[67,11378,1051],{},"**",[779,11381,11382],{},"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":62,"searchDepth":143,"depth":143,"links":11384},[11385,11386,11387,11388,11389,11390,11391],{"id":8422,"depth":143,"text":8423},{"id":8784,"depth":143,"text":8785},{"id":9053,"depth":143,"text":9054},{"id":9218,"depth":143,"text":9219},{"id":9434,"depth":143,"text":9435},{"id":9755,"depth":143,"text":9756},{"id":9983,"depth":143,"text":9984},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch4",{"title":8411,"description":8419},"wiki\u002F2026-05-24-c++学习\u002Fch4-结构体","9PmekB_EowSYIB-KISKoLIyOoICqlLJlAWgdT5pQ-Ns",{"id":11398,"title":11399,"body":11400,"description":62,"extension":787,"meta":12743,"navigation":176,"path":12744,"seo":12745,"stem":12746,"__hash__":12747},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型.md","5.程序内存模型",{"type":7,"value":11401,"toc":12737},[11402,11405,11409,11415,11429,11434,11437,11441,11448,11454,11457,11464,11470,11475,11478,11481,11484,12048,12051,12065,12069,12074,12090,12230,12233,12239,12242,12247,12255,12363,12366,12371,12374,12379,12382,12388,12391,12734],[10,11403,11399],{"id":11404},"_5程序内存模型",[803,11406,11408],{"id":11407},"_51内存分区模型","5.1内存分区模型",[19,11410,11411,11412],{},"C++程序在执行时，将内存大方向划分为",[336,11413,11414],{},"4个区域",[1863,11416,11417,11420,11423,11426],{},[818,11418,11419],{},"代码区：存放函数体的二进制代码，由操作系统进行管理的",[818,11421,11422],{},"全局区：存放全局变量和静态变量以及常量",[818,11424,11425],{},"栈区：由编译器自动分配释放, 存放函数的参数值,局部变量等",[818,11427,11428],{},"堆区：由程序员分配和释放,若程序员不释放,程序结束时由操作系统回收",[19,11430,11431],{},[336,11432,11433],{},"内存四区意义：",[19,11435,11436],{},"不同区域存放的数据，赋予不同的生命周期, 给我们更大的灵活编程",[14,11438,11440],{"id":11439},"_511程序运行前","5.1.1程序运行前",[19,11442,11443,11444,11447],{},"​\t在程序编译后，生成了exe可执行程序，",[336,11445,11446],{},"未执行该程序前","分为两个区域",[19,11449,11450,11451],{},"​\t",[336,11452,11453],{},"代码区：",[19,11455,11456],{},"​\t\t存放 CPU 执行的机器指令",[19,11458,11459,11460,11463],{},"​\t\t代码区是",[336,11461,11462],{},"共享","的，共享的目的是对于频繁被执行的程序，只需要在内存中有一份代码即可",[19,11465,11459,11466,11469],{},[336,11467,11468],{},"只读","的，使其只读的原因是防止程序意外地修改了它的指令",[19,11471,11450,11472],{},[336,11473,11474],{},"全局区：",[19,11476,11477],{},"​\t\t全局变量和静态变量存放在此.",[19,11479,11480],{},"​\t\t全局区还包含了常量区, 字符串常量和其他常量也存放在此.",[19,11482,11483],{},"​\t\t该区域的数据在程序结束后由操作系统释放",[57,11485,11487],{"className":852,"code":11486,"language":854,"meta":62,"style":62},"\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",[64,11488,11489,11494,11507,11520,11524,11529,11544,11559,11563,11572,11576,11581,11594,11607,11611,11616,11642,11668,11672,11699,11725,11729,11734,11750,11765,11769,11795,11821,11825,11850,11875,11879,11905,11931,11935,11951,11966,11992,12018,12022,12032,12036,12044],{"__ignoreMap":62},[67,11490,11491],{"class":69,"line":70},[67,11492,11493],{"class":202},"\u002F\u002F全局变量\n",[67,11495,11496,11498,11501,11503,11505],{"class":69,"line":143},[67,11497,867],{"class":73},[67,11499,11500],{"class":77}," g_a ",[67,11502,909],{"class":73},[67,11504,2760],{"class":208},[67,11506,2017],{"class":77},[67,11508,11509,11511,11514,11516,11518],{"class":69,"line":149},[67,11510,867],{"class":73},[67,11512,11513],{"class":77}," g_b ",[67,11515,909],{"class":73},[67,11517,2760],{"class":208},[67,11519,2017],{"class":77},[67,11521,11522],{"class":69,"line":155},[67,11523,177],{"emptyLinePlaceholder":176},[67,11525,11526],{"class":69,"line":161},[67,11527,11528],{"class":202},"\u002F\u002F全局常量\n",[67,11530,11531,11533,11535,11538,11540,11542],{"class":69,"line":167},[67,11532,7511],{"class":73},[67,11534,3104],{"class":73},[67,11536,11537],{"class":77}," c_g_a ",[67,11539,909],{"class":73},[67,11541,2760],{"class":208},[67,11543,2017],{"class":77},[67,11545,11546,11548,11550,11553,11555,11557],{"class":69,"line":173},[67,11547,7511],{"class":73},[67,11549,3104],{"class":73},[67,11551,11552],{"class":77}," c_g_b ",[67,11554,909],{"class":73},[67,11556,2760],{"class":208},[67,11558,2017],{"class":77},[67,11560,11561],{"class":69,"line":180},[67,11562,177],{"emptyLinePlaceholder":176},[67,11564,11565,11567,11569],{"class":69,"line":186},[67,11566,867],{"class":73},[67,11568,2695],{"class":112},[67,11570,11571],{"class":77},"() {\n",[67,11573,11574],{"class":69,"line":444},[67,11575,177],{"emptyLinePlaceholder":176},[67,11577,11578],{"class":69,"line":2335},[67,11579,11580],{"class":202},"    \u002F\u002F局部变量\n",[67,11582,11583,11585,11588,11590,11592],{"class":69,"line":2340},[67,11584,2707],{"class":73},[67,11586,11587],{"class":77}," a ",[67,11589,909],{"class":73},[67,11591,2760],{"class":208},[67,11593,2017],{"class":77},[67,11595,11596,11598,11601,11603,11605],{"class":69,"line":2346},[67,11597,2707],{"class":73},[67,11599,11600],{"class":77}," b ",[67,11602,909],{"class":73},[67,11604,2760],{"class":208},[67,11606,2017],{"class":77},[67,11608,11609],{"class":69,"line":2351},[67,11610,177],{"emptyLinePlaceholder":176},[67,11612,11613],{"class":69,"line":2365},[67,11614,11615],{"class":202},"    \u002F\u002F打印地址\n",[67,11617,11618,11620,11622,11625,11627,11629,11631,11633,11635,11638,11640],{"class":69,"line":2370},[67,11619,7248],{"class":77},[67,11621,1900],{"class":73},[67,11623,11624],{"class":84}," \"局部变量a地址为： \"",[67,11626,2168],{"class":73},[67,11628,2381],{"class":77},[67,11630,867],{"class":73},[67,11632,260],{"class":77},[67,11634,1211],{"class":73},[67,11636,11637],{"class":77},"a ",[67,11639,1900],{"class":73},[67,11641,9559],{"class":77},[67,11643,11644,11646,11648,11651,11653,11655,11657,11659,11661,11664,11666],{"class":69,"line":2376},[67,11645,7248],{"class":77},[67,11647,1900],{"class":73},[67,11649,11650],{"class":84}," \"局部变量b地址为： \"",[67,11652,2168],{"class":73},[67,11654,2381],{"class":77},[67,11656,867],{"class":73},[67,11658,260],{"class":77},[67,11660,1211],{"class":73},[67,11662,11663],{"class":77},"b ",[67,11665,1900],{"class":73},[67,11667,9559],{"class":77},[67,11669,11670],{"class":69,"line":2397},[67,11671,177],{"emptyLinePlaceholder":176},[67,11673,11674,11676,11678,11681,11683,11686,11688,11690,11692,11695,11697],{"class":69,"line":2402},[67,11675,7248],{"class":77},[67,11677,1900],{"class":73},[67,11679,11680],{"class":84}," \"全局变量g_a地址为： \"",[67,11682,2168],{"class":73},[67,11684,11685],{"class":77},"  (",[67,11687,867],{"class":73},[67,11689,260],{"class":77},[67,11691,1211],{"class":73},[67,11693,11694],{"class":77},"g_a ",[67,11696,1900],{"class":73},[67,11698,9559],{"class":77},[67,11700,11701,11703,11705,11708,11710,11712,11714,11716,11718,11721,11723],{"class":69,"line":2416},[67,11702,7248],{"class":77},[67,11704,1900],{"class":73},[67,11706,11707],{"class":84}," \"全局变量g_b地址为： \"",[67,11709,2168],{"class":73},[67,11711,11685],{"class":77},[67,11713,867],{"class":73},[67,11715,260],{"class":77},[67,11717,1211],{"class":73},[67,11719,11720],{"class":77},"g_b ",[67,11722,1900],{"class":73},[67,11724,9559],{"class":77},[67,11726,11727],{"class":69,"line":2421},[67,11728,177],{"emptyLinePlaceholder":176},[67,11730,11731],{"class":69,"line":2450},[67,11732,11733],{"class":202},"    \u002F\u002F静态变量\n",[67,11735,11736,11739,11741,11744,11746,11748],{"class":69,"line":2455},[67,11737,11738],{"class":73},"    static",[67,11740,3104],{"class":73},[67,11742,11743],{"class":77}," s_a ",[67,11745,909],{"class":73},[67,11747,2760],{"class":208},[67,11749,2017],{"class":77},[67,11751,11752,11754,11756,11759,11761,11763],{"class":69,"line":2472},[67,11753,11738],{"class":73},[67,11755,3104],{"class":73},[67,11757,11758],{"class":77}," s_b ",[67,11760,909],{"class":73},[67,11762,2760],{"class":208},[67,11764,2017],{"class":77},[67,11766,11767],{"class":69,"line":2477},[67,11768,177],{"emptyLinePlaceholder":176},[67,11770,11771,11773,11775,11778,11780,11782,11784,11786,11788,11791,11793],{"class":69,"line":2482},[67,11772,7248],{"class":77},[67,11774,1900],{"class":73},[67,11776,11777],{"class":84}," \"静态变量s_a地址为： \"",[67,11779,2168],{"class":73},[67,11781,2381],{"class":77},[67,11783,867],{"class":73},[67,11785,260],{"class":77},[67,11787,1211],{"class":73},[67,11789,11790],{"class":77},"s_a ",[67,11792,1900],{"class":73},[67,11794,9559],{"class":77},[67,11796,11797,11799,11801,11804,11806,11808,11810,11812,11814,11817,11819],{"class":69,"line":2487},[67,11798,7248],{"class":77},[67,11800,1900],{"class":73},[67,11802,11803],{"class":84}," \"静态变量s_b地址为： \"",[67,11805,2168],{"class":73},[67,11807,2381],{"class":77},[67,11809,867],{"class":73},[67,11811,260],{"class":77},[67,11813,1211],{"class":73},[67,11815,11816],{"class":77},"s_b ",[67,11818,1900],{"class":73},[67,11820,9559],{"class":77},[67,11822,11823],{"class":69,"line":2501},[67,11824,177],{"emptyLinePlaceholder":176},[67,11826,11827,11829,11831,11834,11836,11838,11840,11842,11844,11846,11848],{"class":69,"line":2506},[67,11828,7248],{"class":77},[67,11830,1900],{"class":73},[67,11832,11833],{"class":84}," \"字符串常量地址为： \"",[67,11835,2168],{"class":73},[67,11837,2381],{"class":77},[67,11839,867],{"class":73},[67,11841,260],{"class":77},[67,11843,1211],{"class":73},[67,11845,1917],{"class":84},[67,11847,2168],{"class":73},[67,11849,9559],{"class":77},[67,11851,11852,11854,11856,11858,11860,11862,11864,11866,11868,11871,11873],{"class":69,"line":3298},[67,11853,7248],{"class":77},[67,11855,1900],{"class":73},[67,11857,11833],{"class":84},[67,11859,2168],{"class":73},[67,11861,2381],{"class":77},[67,11863,867],{"class":73},[67,11865,260],{"class":77},[67,11867,1211],{"class":73},[67,11869,11870],{"class":84},"\"hello world1\"",[67,11872,2168],{"class":73},[67,11874,9559],{"class":77},[67,11876,11877],{"class":69,"line":3312},[67,11878,177],{"emptyLinePlaceholder":176},[67,11880,11881,11883,11885,11888,11890,11892,11894,11896,11898,11901,11903],{"class":69,"line":3320},[67,11882,7248],{"class":77},[67,11884,1900],{"class":73},[67,11886,11887],{"class":84}," \"全局常量c_g_a地址为： \"",[67,11889,2168],{"class":73},[67,11891,2381],{"class":77},[67,11893,867],{"class":73},[67,11895,260],{"class":77},[67,11897,1211],{"class":73},[67,11899,11900],{"class":77},"c_g_a ",[67,11902,1900],{"class":73},[67,11904,9559],{"class":77},[67,11906,11907,11909,11911,11914,11916,11918,11920,11922,11924,11927,11929],{"class":69,"line":3325},[67,11908,7248],{"class":77},[67,11910,1900],{"class":73},[67,11912,11913],{"class":84}," \"全局常量c_g_b地址为： \"",[67,11915,2168],{"class":73},[67,11917,2381],{"class":77},[67,11919,867],{"class":73},[67,11921,260],{"class":77},[67,11923,1211],{"class":73},[67,11925,11926],{"class":77},"c_g_b ",[67,11928,1900],{"class":73},[67,11930,9559],{"class":77},[67,11932,11933],{"class":69,"line":3331},[67,11934,177],{"emptyLinePlaceholder":176},[67,11936,11937,11940,11942,11945,11947,11949],{"class":69,"line":3337},[67,11938,11939],{"class":73},"    const",[67,11941,3104],{"class":73},[67,11943,11944],{"class":77}," c_l_a ",[67,11946,909],{"class":73},[67,11948,2760],{"class":208},[67,11950,2017],{"class":77},[67,11952,11953,11955,11957,11960,11962,11964],{"class":69,"line":3342},[67,11954,11939],{"class":73},[67,11956,3104],{"class":73},[67,11958,11959],{"class":77}," c_l_b ",[67,11961,909],{"class":73},[67,11963,2760],{"class":208},[67,11965,2017],{"class":77},[67,11967,11968,11970,11972,11975,11977,11979,11981,11983,11985,11988,11990],{"class":69,"line":8667},[67,11969,7248],{"class":77},[67,11971,1900],{"class":73},[67,11973,11974],{"class":84}," \"局部常量c_l_a地址为： \"",[67,11976,2168],{"class":73},[67,11978,2381],{"class":77},[67,11980,867],{"class":73},[67,11982,260],{"class":77},[67,11984,1211],{"class":73},[67,11986,11987],{"class":77},"c_l_a ",[67,11989,1900],{"class":73},[67,11991,9559],{"class":77},[67,11993,11994,11996,11998,12001,12003,12005,12007,12009,12011,12014,12016],{"class":69,"line":8691},[67,11995,7248],{"class":77},[67,11997,1900],{"class":73},[67,11999,12000],{"class":84}," \"局部常量c_l_b地址为： \"",[67,12002,2168],{"class":73},[67,12004,2381],{"class":77},[67,12006,867],{"class":73},[67,12008,260],{"class":77},[67,12010,1211],{"class":73},[67,12012,12013],{"class":77},"c_l_b ",[67,12015,1900],{"class":73},[67,12017,9559],{"class":77},[67,12019,12020],{"class":69,"line":8696},[67,12021,177],{"emptyLinePlaceholder":176},[67,12023,12024,12026,12028,12030],{"class":69,"line":8702},[67,12025,3025],{"class":112},[67,12027,864],{"class":77},[67,12029,3030],{"class":84},[67,12031,3440],{"class":77},[67,12033,12034],{"class":69,"line":8729},[67,12035,177],{"emptyLinePlaceholder":176},[67,12037,12038,12040,12042],{"class":69,"line":8734},[67,12039,4810],{"class":73},[67,12041,4813],{"class":208},[67,12043,2017],{"class":77},[67,12045,12046],{"class":69,"line":8740},[67,12047,2288],{"class":77},[19,12049,12050],{},"总结：",[1863,12052,12053,12056,12059,12062],{},[818,12054,12055],{},"c++中程序运行前分为全局区和代码区",[818,12057,12058],{},"代码区特点是共享和只读",[818,12060,12061],{},"全局区中存放全局变量、静态变量、常量",[818,12063,12064],{},"常量区中存放const修饰的全局常量和字符串常量",[14,12066,12068],{"id":12067},"_512程序运行后","5.1.2程序运行后",[815,12070,12071],{},[818,12072,12073],{},"栈区：",[1863,12075,12076,12083],{},[818,12077,12078,12079,12082],{},"由编译器自动分配释放, 存放",[336,12080,12081],{},"函数的参数值,局部变量","等",[818,12084,12085,12086,12089],{},"注意事项：",[336,12087,12088],{},"不要返回局部变量的地址","，栈区开辟的数据由编译器自动释放，执行完这部分就会释放",[57,12091,12093],{"className":852,"code":12092,"language":854,"meta":62,"style":62},"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",[64,12094,12095,12106,12110,12125,12137,12141,12145,12153,12158,12173,12191,12208,12218,12226],{"__ignoreMap":62},[67,12096,12097,12099,12101,12104],{"class":69,"line":70},[67,12098,867],{"class":73},[67,12100,7237],{"class":73},[67,12102,12103],{"class":112}," func",[67,12105,2698],{"class":77},[67,12107,12108],{"class":69,"line":143},[67,12109,2269],{"class":77},[67,12111,12112,12114,12116,12118,12120,12122],{"class":69,"line":149},[67,12113,2707],{"class":73},[67,12115,11587],{"class":77},[67,12117,909],{"class":73},[67,12119,2760],{"class":208},[67,12121,918],{"class":77},[67,12123,12124],{"class":202}," \u002F\u002F局部变量 存放在栈区，栈区的数据在函数执行完自动释放\n",[67,12126,12127,12129,12131,12134],{"class":69,"line":155},[67,12128,4810],{"class":73},[67,12130,11302],{"class":73},[67,12132,12133],{"class":77},"a;",[67,12135,12136],{"class":202}," \u002F\u002F放回局部变量的地址\n",[67,12138,12139],{"class":69,"line":161},[67,12140,2288],{"class":77},[67,12142,12143],{"class":69,"line":167},[67,12144,177],{"emptyLinePlaceholder":176},[67,12146,12147,12149,12151],{"class":69,"line":173},[67,12148,867],{"class":73},[67,12150,2695],{"class":112},[67,12152,11571],{"class":77},[67,12154,12155],{"class":69,"line":180},[67,12156,12157],{"class":202},"    \u002F\u002F接受func的返回值\n",[67,12159,12160,12162,12164,12167,12169,12171],{"class":69,"line":186},[67,12161,2707],{"class":73},[67,12163,7237],{"class":73},[67,12165,12166],{"class":77},"p ",[67,12168,909],{"class":73},[67,12170,12103],{"class":112},[67,12172,6355],{"class":77},[67,12174,12175,12177,12179,12181,12183,12185,12188],{"class":69,"line":444},[67,12176,7248],{"class":77},[67,12178,1900],{"class":73},[67,12180,7237],{"class":73},[67,12182,12166],{"class":77},[67,12184,1900],{"class":73},[67,12186,12187],{"class":77}," endl;",[67,12189,12190],{"class":202}," \u002F\u002F第一次打印正确的数字，是因为编辑器做了保留\n",[67,12192,12193,12195,12197,12199,12201,12203,12205],{"class":69,"line":2335},[67,12194,7248],{"class":77},[67,12196,1900],{"class":73},[67,12198,7237],{"class":73},[67,12200,12166],{"class":77},[67,12202,1900],{"class":73},[67,12204,12187],{"class":77},[67,12206,12207],{"class":202}," \u002F\u002F第二次这个数据不再保留\n",[67,12209,12210,12212,12214,12216],{"class":69,"line":2340},[67,12211,3025],{"class":112},[67,12213,864],{"class":77},[67,12215,3030],{"class":84},[67,12217,3440],{"class":77},[67,12219,12220,12222,12224],{"class":69,"line":2346},[67,12221,4810],{"class":73},[67,12223,4813],{"class":208},[67,12225,2017],{"class":77},[67,12227,12228],{"class":69,"line":2351},[67,12229,2288],{"class":77},[19,12231,12232],{},"输出结果：",[19,12234,12235],{},[725,12236],{"alt":12237,"src":12238},"alt text","\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-005.png",[19,12240,12241],{},"总结：不要返回局部变量的地址",[815,12243,12244],{"start":143},[818,12245,12246],{},"堆区",[1863,12248,12249,12252],{},[818,12250,12251],{},"有程序员分配释放，若程序员不释放，程序结束时由操作系统回收",[818,12253,12254],{},"在c++中主要利用new在堆区开辟内存",[57,12256,12258],{"className":852,"code":12257,"language":854,"meta":62,"style":62},"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",[64,12259,12260,12275,12279,12284,12305,12312,12316,12324,12328,12333,12347,12359],{"__ignoreMap":62},[67,12261,12262,12264,12267,12270,12272],{"class":69,"line":70},[67,12263,867],{"class":73},[67,12265,12266],{"class":73},"  *",[67,12268,12269],{"class":112},"func",[67,12271,3148],{"class":77},[67,12273,12274],{"class":202},"  \u002F\u002F函数返回指针\n",[67,12276,12277],{"class":69,"line":143},[67,12278,2269],{"class":77},[67,12280,12281],{"class":69,"line":149},[67,12282,12283],{"class":202},"    \u002F\u002F利用new关键词  可以将数据开辟到堆区\n",[67,12285,12286,12288,12290,12292,12294,12297,12299,12301,12303],{"class":69,"line":155},[67,12287,4867],{"class":73},[67,12289,7237],{"class":73},[67,12291,19],{"class":77},[67,12293,909],{"class":73},[67,12295,12296],{"class":73}," new",[67,12298,3104],{"class":73},[67,12300,864],{"class":77},[67,12302,1303],{"class":208},[67,12304,3440],{"class":77},[67,12306,12307,12309],{"class":69,"line":161},[67,12308,5100],{"class":73},[67,12310,12311],{"class":77}," p;\n",[67,12313,12314],{"class":69,"line":167},[67,12315,2288],{"class":77},[67,12317,12318,12320,12322],{"class":69,"line":173},[67,12319,867],{"class":73},[67,12321,2695],{"class":112},[67,12323,2698],{"class":77},[67,12325,12326],{"class":69,"line":180},[67,12327,2269],{"class":77},[67,12329,12330],{"class":69,"line":186},[67,12331,12332],{"class":202},"    \u002F\u002F在堆区开辟数据\n",[67,12334,12335,12337,12339,12341,12343,12345],{"class":69,"line":444},[67,12336,2707],{"class":73},[67,12338,7237],{"class":73},[67,12340,19],{"class":77},[67,12342,909],{"class":73},[67,12344,12269],{"class":112},[67,12346,6355],{"class":77},[67,12348,12349,12351,12353,12355,12357],{"class":69,"line":2335},[67,12350,2274],{"class":77},[67,12352,7138],{"class":73},[67,12354,19],{"class":77},[67,12356,1900],{"class":73},[67,12358,1922],{"class":77},[67,12360,12361],{"class":69,"line":2340},[67,12362,2288],{"class":77},[19,12364,12365],{},"图片展示：",[19,12367,12368],{},[725,12369],{"alt":12237,"src":12370},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-006.png",[19,12372,12373],{},"堆区内存由程序员管生死！！！",[815,12375,12376],{"start":149},[818,12377,12378],{},"new操作符\n​C++中利用==new==操作符在堆区开辟数据",[19,12380,12381],{},"​堆区开辟的数据，由程序员手动开辟，手动释放，释放利用操作符 ==delete==",[19,12383,12384,12385],{},"​语法：",[64,12386,12387],{}," new 数据类型",[19,12389,12390],{},"​利用new创建的数据，会返回该数据对应的类型的指针",[57,12392,12394],{"className":852,"code":12393,"language":854,"meta":62,"style":62},"\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",[64,12395,12396,12401,12411,12415,12420,12425,12447,12451,12459,12463,12477,12489,12501,12513,12518,12523,12534,12538,12543,12551,12555,12560,12582,12608,12612,12630,12634,12660,12664,12676,12680,12685,12690,12698,12702,12706,12714,12718,12724,12730],{"__ignoreMap":62},[67,12397,12398],{"class":69,"line":70},[67,12399,12400],{"class":202},"\u002F\u002F1.new的基本语法\n",[67,12402,12403,12405,12407,12409],{"class":69,"line":143},[67,12404,867],{"class":73},[67,12406,7237],{"class":73},[67,12408,12269],{"class":112},[67,12410,2698],{"class":77},[67,12412,12413],{"class":69,"line":149},[67,12414,2269],{"class":77},[67,12416,12417],{"class":69,"line":155},[67,12418,12419],{"class":202},"    \u002F\u002F在堆区创建整型数据\n",[67,12421,12422],{"class":69,"line":161},[67,12423,12424],{"class":202},"    \u002F\u002Fnew返回的是该数据类型的指针\n",[67,12426,12427,12429,12431,12433,12436,12438,12440,12442,12444],{"class":69,"line":167},[67,12428,2707],{"class":73},[67,12430,7237],{"class":73},[67,12432,19],{"class":77},[67,12434,12435],{"class":73},"=new",[67,12437,3104],{"class":73},[67,12439,864],{"class":77},[67,12441,1303],{"class":208},[67,12443,6685],{"class":77},[67,12445,12446],{"class":202},"\u002F\u002Fnew啥类型就返回啥类型数据的指针\n",[67,12448,12449],{"class":69,"line":173},[67,12450,2288],{"class":77},[67,12452,12453,12455,12457],{"class":69,"line":180},[67,12454,6083],{"class":73},[67,12456,6307],{"class":112},[67,12458,2698],{"class":77},[67,12460,12461],{"class":69,"line":186},[67,12462,2269],{"class":77},[67,12464,12465,12467,12469,12471,12473,12475],{"class":69,"line":444},[67,12466,2707],{"class":73},[67,12468,7237],{"class":73},[67,12470,19],{"class":77},[67,12472,909],{"class":73},[67,12474,12269],{"class":112},[67,12476,6355],{"class":77},[67,12478,12479,12481,12483,12485,12487],{"class":69,"line":2335},[67,12480,2274],{"class":77},[67,12482,7138],{"class":73},[67,12484,19],{"class":77},[67,12486,1900],{"class":73},[67,12488,1922],{"class":77},[67,12490,12491,12493,12495,12497,12499],{"class":69,"line":2340},[67,12492,2274],{"class":77},[67,12494,7138],{"class":73},[67,12496,19],{"class":77},[67,12498,1900],{"class":73},[67,12500,1922],{"class":77},[67,12502,12503,12505,12507,12509,12511],{"class":69,"line":2346},[67,12504,2274],{"class":77},[67,12506,7138],{"class":73},[67,12508,19],{"class":77},[67,12510,1900],{"class":73},[67,12512,1922],{"class":77},[67,12514,12515],{"class":69,"line":2351},[67,12516,12517],{"class":202},"    \u002F\u002F堆区的数据 由程序员管理开辟，程序员管理释放\n",[67,12519,12520],{"class":69,"line":2365},[67,12521,12522],{"class":202},"    \u002F\u002F如果想释放堆区的数据，利用关键词 delete\n",[67,12524,12525,12528,12531],{"class":69,"line":2370},[67,12526,12527],{"class":73},"    delete",[67,12529,12530],{"class":77}," p;",[67,12532,12533],{"class":202},"\u002F\u002F删除这块地址\n",[67,12535,12536],{"class":69,"line":2376},[67,12537,2288],{"class":77},[67,12539,12540],{"class":69,"line":2397},[67,12541,12542],{"class":202},"\u002F\u002F2.在堆区利用new开辟数组\n",[67,12544,12545,12547,12549],{"class":69,"line":2402},[67,12546,6083],{"class":73},[67,12548,6376],{"class":112},[67,12550,2698],{"class":77},[67,12552,12553],{"class":69,"line":2416},[67,12554,2269],{"class":77},[67,12556,12557],{"class":69,"line":2421},[67,12558,12559],{"class":202},"    \u002F\u002F创建10整数数据的数组，在堆区\n",[67,12561,12562,12564,12566,12568,12570,12572,12574,12576,12579],{"class":69,"line":2450},[67,12563,2707],{"class":73},[67,12565,7237],{"class":73},[67,12567,4600],{"class":77},[67,12569,12435],{"class":73},[67,12571,3104],{"class":73},[67,12573,1746],{"class":77},[67,12575,1303],{"class":208},[67,12577,12578],{"class":77},"];",[67,12580,12581],{"class":202},"\u002F\u002F10代表数组有10个元素\n",[67,12583,12584,12586,12588,12590,12592,12594,12596,12598,12600,12602,12604,12606],{"class":69,"line":2455},[67,12585,3921],{"class":73},[67,12587,2381],{"class":77},[67,12589,867],{"class":73},[67,12591,3752],{"class":77},[67,12593,909],{"class":73},[67,12595,1051],{"class":208},[67,12597,3759],{"class":77},[67,12599,1766],{"class":73},[67,12601,1303],{"class":208},[67,12603,3759],{"class":77},[67,12605,3014],{"class":73},[67,12607,870],{"class":77},[67,12609,12610],{"class":69,"line":2472},[67,12611,2752],{"class":77},[67,12613,12614,12617,12619,12621,12623,12625,12627],{"class":69,"line":2477},[67,12615,12616],{"class":77},"        arr[i]",[67,12618,909],{"class":73},[67,12620,1298],{"class":77},[67,12622,1338],{"class":73},[67,12624,1169],{"class":208},[67,12626,918],{"class":77},[67,12628,12629],{"class":202},"\u002F\u002F给10个元素赋值100～109\n",[67,12631,12632],{"class":69,"line":2482},[67,12633,2909],{"class":77},[67,12635,12636,12638,12640,12642,12644,12646,12648,12650,12652,12654,12656,12658],{"class":69,"line":2487},[67,12637,3921],{"class":73},[67,12639,2381],{"class":77},[67,12641,867],{"class":73},[67,12643,3752],{"class":77},[67,12645,909],{"class":73},[67,12647,1051],{"class":208},[67,12649,3759],{"class":77},[67,12651,1766],{"class":73},[67,12653,1303],{"class":208},[67,12655,3759],{"class":77},[67,12657,3014],{"class":73},[67,12659,870],{"class":77},[67,12661,12662],{"class":69,"line":2501},[67,12663,2752],{"class":77},[67,12665,12666,12668,12670,12672,12674],{"class":69,"line":2506},[67,12667,4171],{"class":77},[67,12669,1900],{"class":73},[67,12671,5073],{"class":77},[67,12673,1900],{"class":73},[67,12675,1922],{"class":77},[67,12677,12678],{"class":69,"line":3298},[67,12679,2909],{"class":77},[67,12681,12682],{"class":69,"line":3312},[67,12683,12684],{"class":202},"    \u002F\u002F释放堆区数组\n",[67,12686,12687],{"class":69,"line":3320},[67,12688,12689],{"class":202},"    \u002F\u002F释放数组的时候 要加[]才可以\n",[67,12691,12692,12695],{"class":69,"line":3325},[67,12693,12694],{"class":73},"    delete[]",[67,12696,12697],{"class":77}," arr;\n",[67,12699,12700],{"class":69,"line":3331},[67,12701,2288],{"class":77},[67,12703,12704],{"class":69,"line":3337},[67,12705,177],{"emptyLinePlaceholder":176},[67,12707,12708,12710,12712],{"class":69,"line":3342},[67,12709,867],{"class":73},[67,12711,2695],{"class":112},[67,12713,2698],{"class":77},[67,12715,12716],{"class":69,"line":8667},[67,12717,2269],{"class":77},[67,12719,12720,12722],{"class":69,"line":8691},[67,12721,6352],{"class":112},[67,12723,6355],{"class":77},[67,12725,12726,12728],{"class":69,"line":8696},[67,12727,6421],{"class":112},[67,12729,6355],{"class":77},[67,12731,12732],{"class":69,"line":8702},[67,12733,2288],{"class":77},[779,12735,12736],{},"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":62,"searchDepth":143,"depth":143,"links":12738},[12739],{"id":11407,"depth":143,"text":11408,"children":12740},[12741,12742],{"id":11439,"depth":149,"text":11440},{"id":12067,"depth":149,"text":12068},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch5",{"title":11399,"description":62},"wiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型","0YdYp-3ZJdvtzoCrG1guRSWnTqjqRMbmStt7z9sZDAA",{"id":12749,"title":12750,"body":12751,"description":62,"extension":787,"meta":14232,"navigation":176,"path":14233,"seo":14234,"stem":14235,"__hash__":14236},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch6-引用.md","6.引用",{"type":7,"value":12752,"toc":14224},[12753,12756,12760,12763,12766,12935,12939,12944,12961,12966,13118,13122,13125,13128,13522,13526,13529,13534,13537,13849,13853,13859,14019,14021,14029,14033,14036,14043,14221],[10,12754,12750],{"id":12755},"_6引用",[803,12757,12759],{"id":12758},"_61引用基本用法","6.1引用基本用法",[19,12761,12762],{},"引用的本质：给变量起别名",[19,12764,12765],{},"语法：数据类型 &别名=原名",[57,12767,12769],{"className":852,"code":12768,"language":854,"meta":62,"style":62},"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",[64,12770,12771,12779,12783,12795,12807,12811,12830,12849,12853,12864,12868,12887,12905,12909,12919,12923,12931],{"__ignoreMap":62},[67,12772,12773,12775,12777],{"class":69,"line":70},[67,12774,867],{"class":73},[67,12776,2695],{"class":112},[67,12778,11571],{"class":77},[67,12780,12781],{"class":69,"line":143},[67,12782,177],{"emptyLinePlaceholder":176},[67,12784,12785,12787,12789,12791,12793],{"class":69,"line":149},[67,12786,2707],{"class":73},[67,12788,11587],{"class":77},[67,12790,909],{"class":73},[67,12792,2760],{"class":208},[67,12794,2017],{"class":77},[67,12796,12797,12799,12801,12803,12805],{"class":69,"line":155},[67,12798,2707],{"class":73},[67,12800,11302],{"class":73},[67,12802,11663],{"class":77},[67,12804,909],{"class":73},[67,12806,2156],{"class":77},[67,12808,12809],{"class":69,"line":161},[67,12810,177],{"emptyLinePlaceholder":176},[67,12812,12813,12815,12817,12820,12822,12824,12826,12828],{"class":69,"line":167},[67,12814,7248],{"class":77},[67,12816,1900],{"class":73},[67,12818,12819],{"class":84}," \"a = \"",[67,12821,2168],{"class":73},[67,12823,11587],{"class":77},[67,12825,1900],{"class":73},[67,12827,12187],{"class":77},[67,12829,7987],{"class":202},[67,12831,12832,12834,12836,12839,12841,12843,12845,12847],{"class":69,"line":173},[67,12833,7248],{"class":77},[67,12835,1900],{"class":73},[67,12837,12838],{"class":84}," \"b = \"",[67,12840,2168],{"class":73},[67,12842,11600],{"class":77},[67,12844,1900],{"class":73},[67,12846,12187],{"class":77},[67,12848,7987],{"class":202},[67,12850,12851],{"class":69,"line":180},[67,12852,177],{"emptyLinePlaceholder":176},[67,12854,12855,12858,12860,12862],{"class":69,"line":186},[67,12856,12857],{"class":77},"    b ",[67,12859,909],{"class":73},[67,12861,6473],{"class":208},[67,12863,2017],{"class":77},[67,12865,12866],{"class":69,"line":444},[67,12867,177],{"emptyLinePlaceholder":176},[67,12869,12870,12872,12874,12876,12878,12880,12882,12884],{"class":69,"line":2335},[67,12871,7248],{"class":77},[67,12873,1900],{"class":73},[67,12875,12819],{"class":84},[67,12877,2168],{"class":73},[67,12879,11587],{"class":77},[67,12881,1900],{"class":73},[67,12883,12187],{"class":77},[67,12885,12886],{"class":202},"\u002F\u002F100\n",[67,12888,12889,12891,12893,12895,12897,12899,12901,12903],{"class":69,"line":2340},[67,12890,7248],{"class":77},[67,12892,1900],{"class":73},[67,12894,12838],{"class":84},[67,12896,2168],{"class":73},[67,12898,11600],{"class":77},[67,12900,1900],{"class":73},[67,12902,12187],{"class":77},[67,12904,12886],{"class":202},[67,12906,12907],{"class":69,"line":2346},[67,12908,177],{"emptyLinePlaceholder":176},[67,12910,12911,12913,12915,12917],{"class":69,"line":2351},[67,12912,3025],{"class":112},[67,12914,864],{"class":77},[67,12916,3030],{"class":84},[67,12918,3440],{"class":77},[67,12920,12921],{"class":69,"line":2365},[67,12922,177],{"emptyLinePlaceholder":176},[67,12924,12925,12927,12929],{"class":69,"line":2370},[67,12926,4810],{"class":73},[67,12928,4813],{"class":208},[67,12930,2017],{"class":77},[67,12932,12933],{"class":69,"line":2376},[67,12934,2288],{"class":77},[803,12936,12938],{"id":12937},"_62引用的注意事项","6.2引用的注意事项",[815,12940,12941],{},[818,12942,12943],{},"引用必须要初始化",[57,12945,12947],{"className":852,"code":12946,"language":854,"meta":62,"style":62},"int &b;\u002F\u002F非常错误！\n",[64,12948,12949],{"__ignoreMap":62},[67,12950,12951,12953,12955,12958],{"class":69,"line":70},[67,12952,867],{"class":73},[67,12954,11302],{"class":73},[67,12956,12957],{"class":77},"b;",[67,12959,12960],{"class":202},"\u002F\u002F非常错误！\n",[815,12962,12963],{"start":143},[818,12964,12965],{},"引用一旦初始化后，就不可以更改了，引用a了，就不能引用b了",[57,12967,12969],{"className":852,"code":12968,"language":854,"meta":62,"style":62},"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",[64,12970,12971,12979,12991,13003,13011,13027,13040,13058,13076,13096,13106,13114],{"__ignoreMap":62},[67,12972,12973,12975,12977],{"class":69,"line":70},[67,12974,867],{"class":73},[67,12976,2695],{"class":112},[67,12978,11571],{"class":77},[67,12980,12981,12983,12985,12987,12989],{"class":69,"line":143},[67,12982,2707],{"class":73},[67,12984,11587],{"class":77},[67,12986,909],{"class":73},[67,12988,2760],{"class":208},[67,12990,2017],{"class":77},[67,12992,12993,12995,12997,12999,13001],{"class":69,"line":149},[67,12994,2707],{"class":73},[67,12996,11600],{"class":77},[67,12998,909],{"class":73},[67,13000,9669],{"class":208},[67,13002,2017],{"class":77},[67,13004,13005,13008],{"class":69,"line":155},[67,13006,13007],{"class":202},"    \u002F\u002Fint &c;",[67,13009,13010],{"class":202}," \u002F\u002F错误，引用必须初始化\n",[67,13012,13013,13015,13017,13019,13021,13024],{"class":69,"line":161},[67,13014,2707],{"class":73},[67,13016,11302],{"class":73},[67,13018,3667],{"class":77},[67,13020,909],{"class":73},[67,13022,13023],{"class":77}," a;",[67,13025,13026],{"class":202}," \u002F\u002F一旦初始化后，就不可以更改\n",[67,13028,13029,13032,13034,13037],{"class":69,"line":167},[67,13030,13031],{"class":77},"    c ",[67,13033,909],{"class":73},[67,13035,13036],{"class":77}," b;",[67,13038,13039],{"class":202}," \u002F\u002F这是赋值操作，不是更改引用\n",[67,13041,13042,13044,13046,13048,13050,13052,13054,13056],{"class":69,"line":173},[67,13043,7248],{"class":77},[67,13045,1900],{"class":73},[67,13047,12819],{"class":84},[67,13049,2168],{"class":73},[67,13051,11587],{"class":77},[67,13053,1900],{"class":73},[67,13055,12187],{"class":77},[67,13057,7972],{"class":202},[67,13059,13060,13062,13064,13066,13068,13070,13072,13074],{"class":69,"line":180},[67,13061,7248],{"class":77},[67,13063,1900],{"class":73},[67,13065,12838],{"class":84},[67,13067,2168],{"class":73},[67,13069,11600],{"class":77},[67,13071,1900],{"class":73},[67,13073,12187],{"class":77},[67,13075,7972],{"class":202},[67,13077,13078,13080,13082,13085,13087,13090,13092,13094],{"class":69,"line":186},[67,13079,7248],{"class":77},[67,13081,1900],{"class":73},[67,13083,13084],{"class":84}," \"c = \"",[67,13086,2168],{"class":73},[67,13088,13089],{"class":77}," c ",[67,13091,1900],{"class":73},[67,13093,12187],{"class":77},[67,13095,7972],{"class":202},[67,13097,13098,13100,13102,13104],{"class":69,"line":444},[67,13099,3025],{"class":112},[67,13101,864],{"class":77},[67,13103,3030],{"class":84},[67,13105,3440],{"class":77},[67,13107,13108,13110,13112],{"class":69,"line":2335},[67,13109,4810],{"class":73},[67,13111,4813],{"class":208},[67,13113,2017],{"class":77},[67,13115,13116],{"class":69,"line":2340},[67,13117,2288],{"class":77},[803,13119,13121],{"id":13120},"_63引用做函数参数","6.3引用做函数参数",[19,13123,13124],{},"作用：函数传参时，可以利用引用的技术让形参修饰实参",[19,13126,13127],{},"优点：可以简化指针修改实参",[57,13129,13131],{"className":852,"code":13130,"language":854,"meta":62,"style":62},"\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",[64,13132,13133,13138,13161,13172,13182,13191,13195,13199,13204,13226,13238,13250,13260,13264,13268,13273,13295,13305,13313,13321,13325,13329,13337,13341,13353,13365,13369,13380,13406,13410,13430,13454,13458,13468,13492,13496,13506,13510,13518],{"__ignoreMap":62},[67,13134,13135],{"class":69,"line":70},[67,13136,13137],{"class":202},"\u002F\u002F1. 值传递\n",[67,13139,13140,13142,13145,13147,13149,13151,13154,13156,13158],{"class":69,"line":143},[67,13141,6083],{"class":73},[67,13143,13144],{"class":112}," mySwap01",[67,13146,864],{"class":77},[67,13148,867],{"class":73},[67,13150,2122],{"class":5935},[67,13152,13153],{"class":77},", ",[67,13155,867],{"class":73},[67,13157,3554],{"class":5935},[67,13159,13160],{"class":77},") {\n",[67,13162,13163,13165,13168,13170],{"class":69,"line":149},[67,13164,2707],{"class":73},[67,13166,13167],{"class":77}," temp ",[67,13169,909],{"class":73},[67,13171,2156],{"class":77},[67,13173,13174,13177,13179],{"class":69,"line":155},[67,13175,13176],{"class":77},"    a ",[67,13178,909],{"class":73},[67,13180,13181],{"class":77}," b;\n",[67,13183,13184,13186,13188],{"class":69,"line":161},[67,13185,12857],{"class":77},[67,13187,909],{"class":73},[67,13189,13190],{"class":77}," temp;\n",[67,13192,13193],{"class":69,"line":167},[67,13194,2288],{"class":77},[67,13196,13197],{"class":69,"line":173},[67,13198,177],{"emptyLinePlaceholder":176},[67,13200,13201],{"class":69,"line":180},[67,13202,13203],{"class":202},"\u002F\u002F2. 地址传递\n",[67,13205,13206,13208,13211,13213,13216,13218,13220,13222,13224],{"class":69,"line":186},[67,13207,6083],{"class":73},[67,13209,13210],{"class":112}," mySwap02",[67,13212,864],{"class":77},[67,13214,13215],{"class":73},"int*",[67,13217,2122],{"class":5935},[67,13219,13153],{"class":77},[67,13221,13215],{"class":73},[67,13223,3554],{"class":5935},[67,13225,13160],{"class":77},[67,13227,13228,13230,13232,13234,13236],{"class":69,"line":444},[67,13229,2707],{"class":73},[67,13231,13167],{"class":77},[67,13233,909],{"class":73},[67,13235,7237],{"class":73},[67,13237,6916],{"class":77},[67,13239,13240,13242,13244,13246,13248],{"class":69,"line":2335},[67,13241,7122],{"class":73},[67,13243,11637],{"class":77},[67,13245,909],{"class":73},[67,13247,7237],{"class":73},[67,13249,6788],{"class":77},[67,13251,13252,13254,13256,13258],{"class":69,"line":2340},[67,13253,7122],{"class":73},[67,13255,11663],{"class":77},[67,13257,909],{"class":73},[67,13259,13190],{"class":77},[67,13261,13262],{"class":69,"line":2346},[67,13263,2288],{"class":77},[67,13265,13266],{"class":69,"line":2351},[67,13267,177],{"emptyLinePlaceholder":176},[67,13269,13270],{"class":69,"line":2365},[67,13271,13272],{"class":202},"\u002F\u002F3. 引用传递\n",[67,13274,13275,13277,13280,13282,13285,13287,13289,13291,13293],{"class":69,"line":2370},[67,13276,6083],{"class":73},[67,13278,13279],{"class":112}," mySwap03",[67,13281,864],{"class":77},[67,13283,13284],{"class":73},"int&",[67,13286,2122],{"class":5935},[67,13288,13153],{"class":77},[67,13290,13284],{"class":73},[67,13292,3554],{"class":5935},[67,13294,13160],{"class":77},[67,13296,13297,13299,13301,13303],{"class":69,"line":2376},[67,13298,2707],{"class":73},[67,13300,13167],{"class":77},[67,13302,909],{"class":73},[67,13304,2156],{"class":77},[67,13306,13307,13309,13311],{"class":69,"line":2397},[67,13308,13176],{"class":77},[67,13310,909],{"class":73},[67,13312,13181],{"class":77},[67,13314,13315,13317,13319],{"class":69,"line":2402},[67,13316,12857],{"class":77},[67,13318,909],{"class":73},[67,13320,13190],{"class":77},[67,13322,13323],{"class":69,"line":2416},[67,13324,2288],{"class":77},[67,13326,13327],{"class":69,"line":2421},[67,13328,177],{"emptyLinePlaceholder":176},[67,13330,13331,13333,13335],{"class":69,"line":2450},[67,13332,867],{"class":73},[67,13334,2695],{"class":112},[67,13336,11571],{"class":77},[67,13338,13339],{"class":69,"line":2455},[67,13340,177],{"emptyLinePlaceholder":176},[67,13342,13343,13345,13347,13349,13351],{"class":69,"line":2472},[67,13344,2707],{"class":73},[67,13346,11587],{"class":77},[67,13348,909],{"class":73},[67,13350,2760],{"class":208},[67,13352,2017],{"class":77},[67,13354,13355,13357,13359,13361,13363],{"class":69,"line":2477},[67,13356,2707],{"class":73},[67,13358,11600],{"class":77},[67,13360,909],{"class":73},[67,13362,9669],{"class":208},[67,13364,2017],{"class":77},[67,13366,13367],{"class":69,"line":2482},[67,13368,177],{"emptyLinePlaceholder":176},[67,13370,13371,13374,13377],{"class":69,"line":2487},[67,13372,13373],{"class":112},"    mySwap01",[67,13375,13376],{"class":77},"(a, b);",[67,13378,13379],{"class":202},"\u002F\u002F值传递，形参不会修饰实参\n",[67,13381,13382,13384,13386,13389,13391,13393,13395,13398,13400,13402,13404],{"class":69,"line":2501},[67,13383,7248],{"class":77},[67,13385,1900],{"class":73},[67,13387,13388],{"class":84}," \"a:\"",[67,13390,2168],{"class":73},[67,13392,11587],{"class":77},[67,13394,1900],{"class":73},[67,13396,13397],{"class":84}," \" b:\"",[67,13399,2168],{"class":73},[67,13401,11600],{"class":77},[67,13403,1900],{"class":73},[67,13405,9559],{"class":77},[67,13407,13408],{"class":69,"line":2506},[67,13409,177],{"emptyLinePlaceholder":176},[67,13411,13412,13415,13417,13419,13422,13424,13427],{"class":69,"line":3298},[67,13413,13414],{"class":112},"    mySwap02",[67,13416,864],{"class":77},[67,13418,1211],{"class":73},[67,13420,13421],{"class":77},"a, ",[67,13423,1211],{"class":73},[67,13425,13426],{"class":77},"b);",[67,13428,13429],{"class":202},"\u002F\u002F地址传递，形参会修饰实参\n",[67,13431,13432,13434,13436,13438,13440,13442,13444,13446,13448,13450,13452],{"class":69,"line":3312},[67,13433,7248],{"class":77},[67,13435,1900],{"class":73},[67,13437,13388],{"class":84},[67,13439,2168],{"class":73},[67,13441,11587],{"class":77},[67,13443,1900],{"class":73},[67,13445,13397],{"class":84},[67,13447,2168],{"class":73},[67,13449,11600],{"class":77},[67,13451,1900],{"class":73},[67,13453,9559],{"class":77},[67,13455,13456],{"class":69,"line":3320},[67,13457,177],{"emptyLinePlaceholder":176},[67,13459,13460,13463,13465],{"class":69,"line":3325},[67,13461,13462],{"class":112},"    mySwap03",[67,13464,13376],{"class":77},[67,13466,13467],{"class":202},"\u002F\u002F引用传递，形参会修饰实参\n",[67,13469,13470,13472,13474,13476,13478,13480,13482,13484,13486,13488,13490],{"class":69,"line":3331},[67,13471,7248],{"class":77},[67,13473,1900],{"class":73},[67,13475,13388],{"class":84},[67,13477,2168],{"class":73},[67,13479,11587],{"class":77},[67,13481,1900],{"class":73},[67,13483,13397],{"class":84},[67,13485,2168],{"class":73},[67,13487,11600],{"class":77},[67,13489,1900],{"class":73},[67,13491,9559],{"class":77},[67,13493,13494],{"class":69,"line":3337},[67,13495,177],{"emptyLinePlaceholder":176},[67,13497,13498,13500,13502,13504],{"class":69,"line":3342},[67,13499,3025],{"class":112},[67,13501,864],{"class":77},[67,13503,3030],{"class":84},[67,13505,3440],{"class":77},[67,13507,13508],{"class":69,"line":8667},[67,13509,177],{"emptyLinePlaceholder":176},[67,13511,13512,13514,13516],{"class":69,"line":8691},[67,13513,4810],{"class":73},[67,13515,4813],{"class":208},[67,13517,2017],{"class":77},[67,13519,13520],{"class":69,"line":8696},[67,13521,2288],{"class":77},[803,13523,13525],{"id":13524},"_64引用做函数的返回值","6.4引用做函数的返回值",[19,13527,13528],{},"作用：引用是可以作为函数的返回值存在的",[19,13530,9744,13531],{},[336,13532,13533],{},"不要返回局部变量引用",[19,13535,13536],{},"用法：函数调用作为左值",[57,13538,13540],{"className":10659,"code":13539,"language":10661,"meta":62,"style":62},"\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",[64,13541,13542,13547,13555,13570,13576,13580,13584,13589,13597,13614,13620,13624,13628,13636,13640,13645,13659,13679,13698,13702,13707,13720,13740,13758,13762,13778,13782,13801,13819,13823,13833,13837,13845],{"__ignoreMap":62},[67,13543,13544],{"class":69,"line":70},[67,13545,13546],{"class":202},"\u002F\u002F返回局部变量引用\n",[67,13548,13549,13551,13553],{"class":69,"line":143},[67,13550,13284],{"class":73},[67,13552,6307],{"class":112},[67,13554,11571],{"class":77},[67,13556,13557,13559,13561,13563,13565,13567],{"class":69,"line":149},[67,13558,2707],{"class":73},[67,13560,11587],{"class":77},[67,13562,909],{"class":73},[67,13564,2760],{"class":208},[67,13566,918],{"class":77},[67,13568,13569],{"class":202}," \u002F\u002F局部变量\n",[67,13571,13572,13574],{"class":69,"line":155},[67,13573,4810],{"class":73},[67,13575,2156],{"class":77},[67,13577,13578],{"class":69,"line":161},[67,13579,2288],{"class":77},[67,13581,13582],{"class":69,"line":167},[67,13583,177],{"emptyLinePlaceholder":176},[67,13585,13586],{"class":69,"line":173},[67,13587,13588],{"class":202},"\u002F\u002F返回静态变量引用\n",[67,13590,13591,13593,13595],{"class":69,"line":180},[67,13592,13284],{"class":73},[67,13594,6376],{"class":112},[67,13596,11571],{"class":77},[67,13598,13599,13601,13603,13605,13607,13609,13611],{"class":69,"line":186},[67,13600,11738],{"class":73},[67,13602,3104],{"class":73},[67,13604,11587],{"class":77},[67,13606,909],{"class":73},[67,13608,9669],{"class":208},[67,13610,918],{"class":77},[67,13612,13613],{"class":202},"\u002F\u002F静态变量，存放在全局区，全局区上的数据在程序结束后系统释放\n",[67,13615,13616,13618],{"class":69,"line":444},[67,13617,4810],{"class":73},[67,13619,2156],{"class":77},[67,13621,13622],{"class":69,"line":2335},[67,13623,2288],{"class":77},[67,13625,13626],{"class":69,"line":2340},[67,13627,177],{"emptyLinePlaceholder":176},[67,13629,13630,13632,13634],{"class":69,"line":2346},[67,13631,867],{"class":73},[67,13633,2695],{"class":112},[67,13635,11571],{"class":77},[67,13637,13638],{"class":69,"line":2351},[67,13639,177],{"emptyLinePlaceholder":176},[67,13641,13642],{"class":69,"line":2365},[67,13643,13644],{"class":202},"    \u002F\u002F不能返回局部变量的引用\n",[67,13646,13647,13650,13653,13655,13657],{"class":69,"line":2370},[67,13648,13649],{"class":73},"    int&",[67,13651,13652],{"class":77}," ref ",[67,13654,909],{"class":73},[67,13656,6307],{"class":112},[67,13658,6355],{"class":77},[67,13660,13661,13663,13665,13668,13670,13672,13674,13676],{"class":69,"line":2376},[67,13662,7248],{"class":77},[67,13664,1900],{"class":73},[67,13666,13667],{"class":84}," \"ref = \"",[67,13669,2168],{"class":73},[67,13671,13652],{"class":77},[67,13673,1900],{"class":73},[67,13675,12187],{"class":77},[67,13677,13678],{"class":202},"\u002F\u002F10 第一次正确，是因为编译器做了保留\n",[67,13680,13681,13683,13685,13687,13689,13691,13693,13695],{"class":69,"line":2397},[67,13682,7248],{"class":77},[67,13684,1900],{"class":73},[67,13686,13667],{"class":84},[67,13688,2168],{"class":73},[67,13690,13652],{"class":77},[67,13692,1900],{"class":73},[67,13694,12187],{"class":77},[67,13696,13697],{"class":202},"\u002F\u002F乱码状态 第二次结果错误，因为a的内存已经释放\n",[67,13699,13700],{"class":69,"line":2402},[67,13701,177],{"emptyLinePlaceholder":176},[67,13703,13704],{"class":69,"line":2416},[67,13705,13706],{"class":202},"    \u002F\u002F如果函数做左值，那么必须返回引用\n",[67,13708,13709,13711,13714,13716,13718],{"class":69,"line":2421},[67,13710,13649],{"class":73},[67,13712,13713],{"class":77}," ref2 ",[67,13715,909],{"class":73},[67,13717,6376],{"class":112},[67,13719,6355],{"class":77},[67,13721,13722,13724,13726,13729,13731,13733,13735,13737],{"class":69,"line":2450},[67,13723,7248],{"class":77},[67,13725,1900],{"class":73},[67,13727,13728],{"class":84}," \"ref2 = \"",[67,13730,2168],{"class":73},[67,13732,13713],{"class":77},[67,13734,1900],{"class":73},[67,13736,12187],{"class":77},[67,13738,13739],{"class":202}," \u002F\u002F20\n",[67,13741,13742,13744,13746,13748,13750,13752,13754,13756],{"class":69,"line":2455},[67,13743,7248],{"class":77},[67,13745,1900],{"class":73},[67,13747,13728],{"class":84},[67,13749,2168],{"class":73},[67,13751,13713],{"class":77},[67,13753,1900],{"class":73},[67,13755,12187],{"class":77},[67,13757,13739],{"class":202},[67,13759,13760],{"class":69,"line":2472},[67,13761,177],{"emptyLinePlaceholder":176},[67,13763,13764,13766,13769,13771,13773,13775],{"class":69,"line":2477},[67,13765,6421],{"class":112},[67,13767,13768],{"class":77},"() ",[67,13770,909],{"class":73},[67,13772,3720],{"class":208},[67,13774,918],{"class":77},[67,13776,13777],{"class":202},"\u002F\u002F如果函数的返回值是引用，这个函数调用可以作为左值\n",[67,13779,13780],{"class":69,"line":2482},[67,13781,177],{"emptyLinePlaceholder":176},[67,13783,13784,13786,13788,13790,13792,13794,13796,13798],{"class":69,"line":2487},[67,13785,7248],{"class":77},[67,13787,1900],{"class":73},[67,13789,13728],{"class":84},[67,13791,2168],{"class":73},[67,13793,13713],{"class":77},[67,13795,1900],{"class":73},[67,13797,12187],{"class":77},[67,13799,13800],{"class":202}," \u002F\u002F1000\n",[67,13802,13803,13805,13807,13809,13811,13813,13815,13817],{"class":69,"line":2501},[67,13804,7248],{"class":77},[67,13806,1900],{"class":73},[67,13808,13728],{"class":84},[67,13810,2168],{"class":73},[67,13812,13713],{"class":77},[67,13814,1900],{"class":73},[67,13816,12187],{"class":77},[67,13818,13800],{"class":202},[67,13820,13821],{"class":69,"line":2506},[67,13822,177],{"emptyLinePlaceholder":176},[67,13824,13825,13827,13829,13831],{"class":69,"line":3298},[67,13826,3025],{"class":112},[67,13828,864],{"class":77},[67,13830,3030],{"class":84},[67,13832,3440],{"class":77},[67,13834,13835],{"class":69,"line":3312},[67,13836,177],{"emptyLinePlaceholder":176},[67,13838,13839,13841,13843],{"class":69,"line":3320},[67,13840,4810],{"class":73},[67,13842,4813],{"class":208},[67,13844,2017],{"class":77},[67,13846,13847],{"class":69,"line":3325},[67,13848,2288],{"class":77},[803,13850,13852],{"id":13851},"_65引用的本质","6.5引用的本质",[19,13854,13855,13856],{},"本质：",[336,13857,13858],{},"引用的本质在c++内部实现是一个指针常量.",[57,13860,13862],{"className":852,"code":13861,"language":854,"meta":62,"style":62},"\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",[64,13863,13864,13869,13885,13899,13903,13912,13924,13929,13934,13945,13958,13962,13978,13995,13999,14007,14015],{"__ignoreMap":62},[67,13865,13866],{"class":69,"line":70},[67,13867,13868],{"class":202},"\u002F\u002F发现是引用，转换为 int* const ref = &a;\n",[67,13870,13871,13873,13875,13877,13879,13882],{"class":69,"line":143},[67,13872,6083],{"class":73},[67,13874,12103],{"class":112},[67,13876,864],{"class":77},[67,13878,13284],{"class":73},[67,13880,13881],{"class":5935}," ref",[67,13883,13884],{"class":77},"){\n",[67,13886,13887,13890,13892,13894,13896],{"class":69,"line":149},[67,13888,13889],{"class":77},"    ref ",[67,13891,909],{"class":73},[67,13893,6473],{"class":208},[67,13895,918],{"class":77},[67,13897,13898],{"class":202}," \u002F\u002F ref是引用，转换为*ref = 100\n",[67,13900,13901],{"class":69,"line":155},[67,13902,2288],{"class":77},[67,13904,13905,13907,13909],{"class":69,"line":161},[67,13906,867],{"class":73},[67,13908,2695],{"class":112},[67,13910,13911],{"class":77},"(){\n",[67,13913,13914,13916,13918,13920,13922],{"class":69,"line":167},[67,13915,2707],{"class":73},[67,13917,11587],{"class":77},[67,13919,909],{"class":73},[67,13921,2760],{"class":208},[67,13923,2017],{"class":77},[67,13925,13926],{"class":69,"line":173},[67,13927,13928],{"class":77},"    \n",[67,13930,13931],{"class":69,"line":180},[67,13932,13933],{"class":202},"    \u002F\u002F自动转换为 int* const ref = &a; 指针常量是指针指向不可改，也说明为什么引用不可更改\n",[67,13935,13936,13938,13940,13942],{"class":69,"line":186},[67,13937,13649],{"class":73},[67,13939,13652],{"class":77},[67,13941,909],{"class":73},[67,13943,13944],{"class":77}," a; \n",[67,13946,13947,13949,13951,13953,13955],{"class":69,"line":444},[67,13948,13889],{"class":77},[67,13950,909],{"class":73},[67,13952,9669],{"class":208},[67,13954,918],{"class":77},[67,13956,13957],{"class":202}," \u002F\u002F内部发现ref是引用，自动帮我们转换为: *ref = 20;\n",[67,13959,13960],{"class":69,"line":2335},[67,13961,13928],{"class":77},[67,13963,13964,13966,13968,13970,13972,13974,13976],{"class":69,"line":2340},[67,13965,7248],{"class":77},[67,13967,1900],{"class":73},[67,13969,13388],{"class":84},[67,13971,2168],{"class":73},[67,13973,11587],{"class":77},[67,13975,1900],{"class":73},[67,13977,9559],{"class":77},[67,13979,13980,13982,13984,13987,13989,13991,13993],{"class":69,"line":2346},[67,13981,7248],{"class":77},[67,13983,1900],{"class":73},[67,13985,13986],{"class":84}," \"ref:\"",[67,13988,2168],{"class":73},[67,13990,13652],{"class":77},[67,13992,1900],{"class":73},[67,13994,9559],{"class":77},[67,13996,13997],{"class":69,"line":2351},[67,13998,13928],{"class":77},[67,14000,14001,14004],{"class":69,"line":2365},[67,14002,14003],{"class":112},"    func",[67,14005,14006],{"class":77},"(a);\n",[67,14008,14009,14011,14013],{"class":69,"line":2370},[67,14010,4810],{"class":73},[67,14012,4813],{"class":208},[67,14014,2017],{"class":77},[67,14016,14017],{"class":69,"line":2376},[67,14018,2288],{"class":77},[19,14020,12050],{},[815,14022,14023,14026],{},[818,14024,14025],{},"引用的本质，就是一个指针常量",[818,14027,14028],{},"引用一旦初始化，就不可以发生改变",[803,14030,14032],{"id":14031},"_66常量引用","6.6常量引用",[19,14034,14035],{},"作用：常量引用主要用来修饰形参",[19,14037,14038,14039,14042],{},"在函数形参列表中，可以加",[336,14040,14041],{},"const修饰形参","，防止形参改变实参",[57,14044,14046],{"className":852,"code":14045,"language":854,"meta":62,"style":62},"\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",[64,14047,14048,14053,14058,14077,14082,14095,14099,14103,14111,14115,14120,14125,14139,14143,14151,14163,14167,14172,14184,14191,14195,14205,14209,14217],{"__ignoreMap":62},[67,14049,14050],{"class":69,"line":70},[67,14051,14052],{"class":202},"\u002F\u002F引用使用的场景，通常用来修饰形参\n",[67,14054,14055],{"class":69,"line":143},[67,14056,14057],{"class":202},"\u002F\u002F加上const就不能修改实参的\n",[67,14059,14060,14062,14065,14067,14069,14072,14075],{"class":69,"line":149},[67,14061,6083],{"class":73},[67,14063,14064],{"class":112}," showValue",[67,14066,864],{"class":77},[67,14068,7511],{"class":73},[67,14070,14071],{"class":73}," int&",[67,14073,14074],{"class":5935}," v",[67,14076,13160],{"class":77},[67,14078,14079],{"class":69,"line":155},[67,14080,14081],{"class":202},"    \u002F\u002Fv += 100;\n",[67,14083,14084,14086,14088,14091,14093],{"class":69,"line":161},[67,14085,7248],{"class":77},[67,14087,1900],{"class":73},[67,14089,14090],{"class":77}," v ",[67,14092,1900],{"class":73},[67,14094,9559],{"class":77},[67,14096,14097],{"class":69,"line":167},[67,14098,2288],{"class":77},[67,14100,14101],{"class":69,"line":173},[67,14102,177],{"emptyLinePlaceholder":176},[67,14104,14105,14107,14109],{"class":69,"line":180},[67,14106,867],{"class":73},[67,14108,2695],{"class":112},[67,14110,11571],{"class":77},[67,14112,14113],{"class":69,"line":186},[67,14114,177],{"emptyLinePlaceholder":176},[67,14116,14117],{"class":69,"line":444},[67,14118,14119],{"class":202},"    \u002F\u002Fint& ref = 10;  引用本身需要一个合法的内存空间，因此这行错误\n",[67,14121,14122],{"class":69,"line":2335},[67,14123,14124],{"class":202},"    \u002F\u002F加入const就可以了，编译器优化代码，int temp = 10; const int& ref = temp;\n",[67,14126,14127,14129,14131,14133,14135,14137],{"class":69,"line":2340},[67,14128,11939],{"class":73},[67,14130,14071],{"class":73},[67,14132,13652],{"class":77},[67,14134,909],{"class":73},[67,14136,2760],{"class":208},[67,14138,2017],{"class":77},[67,14140,14141],{"class":69,"line":2346},[67,14142,177],{"emptyLinePlaceholder":176},[67,14144,14145,14148],{"class":69,"line":2351},[67,14146,14147],{"class":202},"    \u002F\u002Fref = 100;",[67,14149,14150],{"class":202},"  \u002F\u002F加入const后不可以修改变量\n",[67,14152,14153,14155,14157,14159,14161],{"class":69,"line":2365},[67,14154,7248],{"class":77},[67,14156,1900],{"class":73},[67,14158,13652],{"class":77},[67,14160,1900],{"class":73},[67,14162,9559],{"class":77},[67,14164,14165],{"class":69,"line":2370},[67,14166,177],{"emptyLinePlaceholder":176},[67,14168,14169],{"class":69,"line":2376},[67,14170,14171],{"class":202},"    \u002F\u002F函数中利用常量引用防止误操作修改实参\n",[67,14173,14174,14176,14178,14180,14182],{"class":69,"line":2397},[67,14175,2707],{"class":73},[67,14177,11587],{"class":77},[67,14179,909],{"class":73},[67,14181,2760],{"class":208},[67,14183,2017],{"class":77},[67,14185,14186,14189],{"class":69,"line":2402},[67,14187,14188],{"class":112},"    showValue",[67,14190,14006],{"class":77},[67,14192,14193],{"class":69,"line":2416},[67,14194,177],{"emptyLinePlaceholder":176},[67,14196,14197,14199,14201,14203],{"class":69,"line":2421},[67,14198,3025],{"class":112},[67,14200,864],{"class":77},[67,14202,3030],{"class":84},[67,14204,3440],{"class":77},[67,14206,14207],{"class":69,"line":2450},[67,14208,177],{"emptyLinePlaceholder":176},[67,14210,14211,14213,14215],{"class":69,"line":2455},[67,14212,4810],{"class":73},[67,14214,4813],{"class":208},[67,14216,2017],{"class":77},[67,14218,14219],{"class":69,"line":2472},[67,14220,2288],{"class":77},[779,14222,14223],{},"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":62,"searchDepth":143,"depth":143,"links":14225},[14226,14227,14228,14229,14230,14231],{"id":12758,"depth":143,"text":12759},{"id":12937,"depth":143,"text":12938},{"id":13120,"depth":143,"text":13121},{"id":13524,"depth":143,"text":13525},{"id":13851,"depth":143,"text":13852},{"id":14031,"depth":143,"text":14032},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch6",{"title":12750,"description":62},"wiki\u002F2026-05-24-c++学习\u002Fch6-引用","3b9GaOu4dJ6AA4pEN3OBkRN5PfpCvI4JUz7VlaaP6b0",{"id":14238,"title":14239,"body":14240,"description":62,"extension":787,"meta":15320,"navigation":176,"path":15321,"seo":15322,"stem":15323,"__hash__":15324},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch7-函数高级.md","7.函数(高级部分)",{"type":7,"value":14241,"toc":15312},[14242,14245,14249,14252,14257,14489,14491,14502,14506,14509,14516,14620,14623,14627,14630,14634,14637,14642,14664,14670,14997,15000,15004,15012,15309],[10,14243,14239],{"id":14244},"_7函数高级部分",[803,14246,14248],{"id":14247},"_71函数默认参数","7.1函数默认参数",[19,14250,14251],{},"在C++中，函数的形参列表中的形参是可以有默认值的。",[19,14253,5900,14254],{},[64,14255,14256],{}," 返回值类型  函数名 （参数= 默认值）{}",[57,14258,14260],{"className":852,"code":14259,"language":854,"meta":62,"style":62},"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",[64,14261,14262,14297,14312,14316,14320,14325,14330,14359,14379,14389,14393,14397,14405,14409,14437,14459,14463,14473,14477,14485],{"__ignoreMap":62},[67,14263,14264,14266,14268,14270,14272,14274,14276,14278,14280,14283,14285,14287,14289,14291,14293,14295],{"class":69,"line":70},[67,14265,867],{"class":73},[67,14267,12103],{"class":112},[67,14269,864],{"class":77},[67,14271,867],{"class":73},[67,14273,2122],{"class":5935},[67,14275,13153],{"class":77},[67,14277,867],{"class":73},[67,14279,3554],{"class":5935},[67,14281,14282],{"class":73}," =",[67,14284,2760],{"class":208},[67,14286,13153],{"class":77},[67,14288,867],{"class":73},[67,14290,3570],{"class":5935},[67,14292,14282],{"class":73},[67,14294,2760],{"class":208},[67,14296,13160],{"class":77},[67,14298,14299,14301,14303,14305,14307,14309],{"class":69,"line":143},[67,14300,4810],{"class":73},[67,14302,11587],{"class":77},[67,14304,1338],{"class":73},[67,14306,11600],{"class":77},[67,14308,1338],{"class":73},[67,14310,14311],{"class":77}," c;\n",[67,14313,14314],{"class":69,"line":149},[67,14315,2288],{"class":77},[67,14317,14318],{"class":69,"line":155},[67,14319,177],{"emptyLinePlaceholder":176},[67,14321,14322],{"class":69,"line":161},[67,14323,14324],{"class":202},"\u002F\u002F1. 如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值\n",[67,14326,14327],{"class":69,"line":167},[67,14328,14329],{"class":202},"\u002F\u002F2. 如果函数声明有默认值，函数实现的时候就不能有默认参数\n",[67,14331,14332,14334,14337,14339,14341,14343,14345,14347,14349,14351,14353,14355,14357],{"class":69,"line":173},[67,14333,867],{"class":73},[67,14335,14336],{"class":112}," func2",[67,14338,864],{"class":77},[67,14340,867],{"class":73},[67,14342,2122],{"class":5935},[67,14344,14282],{"class":73},[67,14346,2760],{"class":208},[67,14348,13153],{"class":77},[67,14350,867],{"class":73},[67,14352,3554],{"class":5935},[67,14354,14282],{"class":73},[67,14356,2760],{"class":208},[67,14358,3440],{"class":77},[67,14360,14361,14363,14365,14367,14369,14371,14373,14375,14377],{"class":69,"line":180},[67,14362,867],{"class":73},[67,14364,14336],{"class":112},[67,14366,864],{"class":77},[67,14368,867],{"class":73},[67,14370,2122],{"class":5935},[67,14372,13153],{"class":77},[67,14374,867],{"class":73},[67,14376,3554],{"class":5935},[67,14378,13160],{"class":77},[67,14380,14381,14383,14385,14387],{"class":69,"line":186},[67,14382,4810],{"class":73},[67,14384,11587],{"class":77},[67,14386,1338],{"class":73},[67,14388,13181],{"class":77},[67,14390,14391],{"class":69,"line":444},[67,14392,2288],{"class":77},[67,14394,14395],{"class":69,"line":2335},[67,14396,177],{"emptyLinePlaceholder":176},[67,14398,14399,14401,14403],{"class":69,"line":2340},[67,14400,867],{"class":73},[67,14402,2695],{"class":112},[67,14404,11571],{"class":77},[67,14406,14407],{"class":69,"line":2346},[67,14408,177],{"emptyLinePlaceholder":176},[67,14410,14411,14413,14415,14418,14420,14422,14424,14426,14428,14430,14433,14435],{"class":69,"line":2351},[67,14412,7248],{"class":77},[67,14414,1900],{"class":73},[67,14416,14417],{"class":84}," \"ret = \"",[67,14419,2168],{"class":73},[67,14421,12103],{"class":112},[67,14423,864],{"class":77},[67,14425,1556],{"class":208},[67,14427,13153],{"class":77},[67,14429,1556],{"class":208},[67,14431,14432],{"class":77},") ",[67,14434,1900],{"class":73},[67,14436,9559],{"class":77},[67,14438,14439,14441,14443,14445,14447,14449,14451,14453,14455,14457],{"class":69,"line":2365},[67,14440,7248],{"class":77},[67,14442,1900],{"class":73},[67,14444,14417],{"class":84},[67,14446,2168],{"class":73},[67,14448,12103],{"class":112},[67,14450,864],{"class":77},[67,14452,1169],{"class":208},[67,14454,14432],{"class":77},[67,14456,1900],{"class":73},[67,14458,9559],{"class":77},[67,14460,14461],{"class":69,"line":2370},[67,14462,177],{"emptyLinePlaceholder":176},[67,14464,14465,14467,14469,14471],{"class":69,"line":2376},[67,14466,3025],{"class":112},[67,14468,864],{"class":77},[67,14470,3030],{"class":84},[67,14472,3440],{"class":77},[67,14474,14475],{"class":69,"line":2397},[67,14476,177],{"emptyLinePlaceholder":176},[67,14478,14479,14481,14483],{"class":69,"line":2402},[67,14480,4810],{"class":73},[67,14482,4813],{"class":208},[67,14484,2017],{"class":77},[67,14486,14487],{"class":69,"line":2416},[67,14488,2288],{"class":77},[19,14490,12050],{},[815,14492,14493,14496,14499],{},[818,14494,14495],{},"我传就用我；没传就用你",[818,14497,14498],{},"如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值；前边有没有无所谓",[818,14500,14501],{},"如果函数声明有默认值，函数实现的时候就不能有默认参数",[803,14503,14505],{"id":14504},"_72函数的占位参数","7.2函数的占位参数",[19,14507,14508],{},"C++中函数的形参列表里可以有占位参数，用来做占位，调用函数时必须填补该位置",[19,14510,14511,614,14513],{},[336,14512,5900],{},[64,14514,14515],{},"返回值类型 函数名 (数据类型){}",[57,14517,14519],{"className":852,"code":14518,"language":854,"meta":62,"style":62},"\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",[64,14520,14521,14526,14544,14557,14561,14569,14573,14590,14594,14604,14608,14616],{"__ignoreMap":62},[67,14522,14523],{"class":69,"line":70},[67,14524,14525],{"class":202},"\u002F\u002F函数占位参数 ，占位参数也可以有默认参数\n",[67,14527,14528,14530,14532,14534,14536,14538,14540,14542],{"class":69,"line":143},[67,14529,6083],{"class":73},[67,14531,12103],{"class":112},[67,14533,864],{"class":77},[67,14535,867],{"class":73},[67,14537,2122],{"class":5935},[67,14539,13153],{"class":77},[67,14541,867],{"class":73},[67,14543,13160],{"class":77},[67,14545,14546,14548,14550,14553,14555],{"class":69,"line":149},[67,14547,7248],{"class":77},[67,14549,1900],{"class":73},[67,14551,14552],{"class":84}," \"this is func\"",[67,14554,2168],{"class":73},[67,14556,9559],{"class":77},[67,14558,14559],{"class":69,"line":155},[67,14560,2288],{"class":77},[67,14562,14563,14565,14567],{"class":69,"line":161},[67,14564,867],{"class":73},[67,14566,2695],{"class":112},[67,14568,11571],{"class":77},[67,14570,14571],{"class":69,"line":167},[67,14572,177],{"emptyLinePlaceholder":176},[67,14574,14575,14577,14579,14581,14583,14585,14587],{"class":69,"line":173},[67,14576,14003],{"class":112},[67,14578,864],{"class":77},[67,14580,1303],{"class":208},[67,14582,1236],{"class":77},[67,14584,1303],{"class":208},[67,14586,6685],{"class":77},[67,14588,14589],{"class":202}," \u002F\u002F占位参数必须填补，现在还没法在函数中使用，后面就会用到！\n",[67,14591,14592],{"class":69,"line":180},[67,14593,177],{"emptyLinePlaceholder":176},[67,14595,14596,14598,14600,14602],{"class":69,"line":186},[67,14597,3025],{"class":112},[67,14599,864],{"class":77},[67,14601,3030],{"class":84},[67,14603,3440],{"class":77},[67,14605,14606],{"class":69,"line":444},[67,14607,177],{"emptyLinePlaceholder":176},[67,14609,14610,14612,14614],{"class":69,"line":2335},[67,14611,4810],{"class":73},[67,14613,4813],{"class":208},[67,14615,2017],{"class":77},[67,14617,14618],{"class":69,"line":2340},[67,14619,2288],{"class":77},[19,14621,14622],{},"注意：就是只填写数据类型作为占位，调用的时候必须传对应数据",[803,14624,14626],{"id":14625},"_73函数重载","7.3函数重载",[19,14628,14629],{},"意思是函数名是可以相同的",[14,14631,14633],{"id":14632},"_731基本语法","7.3.1基本语法",[19,14635,14636],{},"作用：函数名可以相同，提高复用性",[19,14638,14639],{},[336,14640,14641],{},"函数重载满足条件：",[1863,14643,14644,14647,14650],{},[818,14645,14646],{},"同一个作用域下",[818,14648,14649],{},"函数名称相同",[818,14651,14652,14653,14656,14657,14660,14661],{},"函数参数",[336,14654,14655],{},"类型不同","  或者 ",[336,14658,14659],{},"个数不同"," 或者 ",[336,14662,14663],{},"顺序不同",[19,14665,14666,14669],{},[336,14667,14668],{},"注意:","  函数的返回值不可以作为函数重载的条件",[57,14671,14673],{"className":10659,"code":14672,"language":10661,"meta":62,"style":62},"\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",[64,14674,14675,14680,14688,14692,14705,14709,14723,14727,14740,14744,14759,14763,14776,14780,14801,14805,14818,14822,14842,14846,14859,14863,14867,14872,14877,14882,14887,14892,14896,14900,14908,14912,14918,14928,14938,14952,14967,14971,14981,14985,14993],{"__ignoreMap":62},[67,14676,14677],{"class":69,"line":70},[67,14678,14679],{"class":202},"\u002F\u002F函数重载需要函数都在同一个作用域下\n",[67,14681,14682,14684,14686],{"class":69,"line":143},[67,14683,6083],{"class":73},[67,14685,12103],{"class":112},[67,14687,2698],{"class":77},[67,14689,14690],{"class":69,"line":149},[67,14691,2269],{"class":77},[67,14693,14694,14696,14698,14701,14703],{"class":69,"line":155},[67,14695,7248],{"class":77},[67,14697,1900],{"class":73},[67,14699,14700],{"class":84}," \"func 的调用！\"",[67,14702,2168],{"class":73},[67,14704,9559],{"class":77},[67,14706,14707],{"class":69,"line":161},[67,14708,2288],{"class":77},[67,14710,14711,14713,14715,14717,14719,14721],{"class":69,"line":167},[67,14712,6083],{"class":73},[67,14714,12103],{"class":112},[67,14716,864],{"class":77},[67,14718,867],{"class":73},[67,14720,2122],{"class":5935},[67,14722,870],{"class":77},[67,14724,14725],{"class":69,"line":173},[67,14726,2269],{"class":77},[67,14728,14729,14731,14733,14736,14738],{"class":69,"line":180},[67,14730,7248],{"class":77},[67,14732,1900],{"class":73},[67,14734,14735],{"class":84}," \"func (int a) 的调用！\"",[67,14737,2168],{"class":73},[67,14739,9559],{"class":77},[67,14741,14742],{"class":69,"line":186},[67,14743,2288],{"class":77},[67,14745,14746,14748,14750,14752,14755,14757],{"class":69,"line":444},[67,14747,6083],{"class":73},[67,14749,12103],{"class":112},[67,14751,864],{"class":77},[67,14753,14754],{"class":73},"double",[67,14756,2122],{"class":5935},[67,14758,870],{"class":77},[67,14760,14761],{"class":69,"line":2335},[67,14762,2269],{"class":77},[67,14764,14765,14767,14769,14772,14774],{"class":69,"line":2340},[67,14766,7248],{"class":77},[67,14768,1900],{"class":73},[67,14770,14771],{"class":84}," \"func (double a)的调用！\"",[67,14773,2168],{"class":73},[67,14775,9559],{"class":77},[67,14777,14778],{"class":69,"line":2346},[67,14779,2288],{"class":77},[67,14781,14782,14784,14786,14788,14790,14792,14795,14797,14799],{"class":69,"line":2351},[67,14783,6083],{"class":73},[67,14785,12103],{"class":112},[67,14787,864],{"class":77},[67,14789,867],{"class":73},[67,14791,2122],{"class":5935},[67,14793,14794],{"class":77}," ,",[67,14796,14754],{"class":73},[67,14798,3554],{"class":5935},[67,14800,870],{"class":77},[67,14802,14803],{"class":69,"line":2365},[67,14804,2269],{"class":77},[67,14806,14807,14809,14811,14814,14816],{"class":69,"line":2370},[67,14808,7248],{"class":77},[67,14810,1900],{"class":73},[67,14812,14813],{"class":84}," \"func (int a ,double b) 的调用！\"",[67,14815,2168],{"class":73},[67,14817,9559],{"class":77},[67,14819,14820],{"class":69,"line":2376},[67,14821,2288],{"class":77},[67,14823,14824,14826,14828,14830,14832,14834,14836,14838,14840],{"class":69,"line":2397},[67,14825,6083],{"class":73},[67,14827,12103],{"class":112},[67,14829,864],{"class":77},[67,14831,14754],{"class":73},[67,14833,2122],{"class":5935},[67,14835,14794],{"class":77},[67,14837,867],{"class":73},[67,14839,3554],{"class":5935},[67,14841,870],{"class":77},[67,14843,14844],{"class":69,"line":2402},[67,14845,2269],{"class":77},[67,14847,14848,14850,14852,14855,14857],{"class":69,"line":2416},[67,14849,7248],{"class":77},[67,14851,1900],{"class":73},[67,14853,14854],{"class":84}," \"func (double a ,int b)的调用！\"",[67,14856,2168],{"class":73},[67,14858,9559],{"class":77},[67,14860,14861],{"class":69,"line":2421},[67,14862,2288],{"class":77},[67,14864,14865],{"class":69,"line":2450},[67,14866,177],{"emptyLinePlaceholder":176},[67,14868,14869],{"class":69,"line":2455},[67,14870,14871],{"class":202},"\u002F\u002F函数返回值不可以作为函数重载条件\n",[67,14873,14874],{"class":69,"line":2472},[67,14875,14876],{"class":202},"\u002F\u002Fint func(double a, int b)\n",[67,14878,14879],{"class":69,"line":2477},[67,14880,14881],{"class":202},"\u002F\u002F{\n",[67,14883,14884],{"class":69,"line":2482},[67,14885,14886],{"class":202},"\u002F\u002F  cout \u003C\u003C \"func (double a ,int b)的调用！\" \u003C\u003C endl;\n",[67,14888,14889],{"class":69,"line":2487},[67,14890,14891],{"class":202},"\u002F\u002F}\n",[67,14893,14894],{"class":69,"line":2501},[67,14895,177],{"emptyLinePlaceholder":176},[67,14897,14898],{"class":69,"line":2506},[67,14899,177],{"emptyLinePlaceholder":176},[67,14901,14902,14904,14906],{"class":69,"line":3298},[67,14903,867],{"class":73},[67,14905,2695],{"class":112},[67,14907,11571],{"class":77},[67,14909,14910],{"class":69,"line":3312},[67,14911,177],{"emptyLinePlaceholder":176},[67,14913,14914,14916],{"class":69,"line":3320},[67,14915,14003],{"class":112},[67,14917,6355],{"class":77},[67,14919,14920,14922,14924,14926],{"class":69,"line":3325},[67,14921,14003],{"class":112},[67,14923,864],{"class":77},[67,14925,1303],{"class":208},[67,14927,3440],{"class":77},[67,14929,14930,14932,14934,14936],{"class":69,"line":3331},[67,14931,14003],{"class":112},[67,14933,864],{"class":77},[67,14935,912],{"class":208},[67,14937,3440],{"class":77},[67,14939,14940,14942,14944,14946,14948,14950],{"class":69,"line":3337},[67,14941,14003],{"class":112},[67,14943,864],{"class":77},[67,14945,1303],{"class":208},[67,14947,1236],{"class":77},[67,14949,912],{"class":208},[67,14951,3440],{"class":77},[67,14953,14954,14956,14958,14960,14963,14965],{"class":69,"line":3342},[67,14955,14003],{"class":112},[67,14957,864],{"class":77},[67,14959,912],{"class":208},[67,14961,14962],{"class":77}," , ",[67,14964,1303],{"class":208},[67,14966,3440],{"class":77},[67,14968,14969],{"class":69,"line":8667},[67,14970,13928],{"class":77},[67,14972,14973,14975,14977,14979],{"class":69,"line":8691},[67,14974,3025],{"class":112},[67,14976,864],{"class":77},[67,14978,3030],{"class":84},[67,14980,3440],{"class":77},[67,14982,14983],{"class":69,"line":8696},[67,14984,177],{"emptyLinePlaceholder":176},[67,14986,14987,14989,14991],{"class":69,"line":8702},[67,14988,4810],{"class":73},[67,14990,4813],{"class":208},[67,14992,2017],{"class":77},[67,14994,14995],{"class":69,"line":8729},[67,14996,2288],{"class":77},[19,14998,14999],{},"重点：函数返回值不可以作为函数重载条件！",[14,15001,15003],{"id":15002},"_732注意事项","7.3.2注意事项",[1863,15005,15006,15009],{},[818,15007,15008],{},"引用作为重载条件!!!",[818,15010,15011],{},"函数重载碰到函数默认参数",[57,15013,15015],{"className":852,"code":15014,"language":854,"meta":62,"style":62},"\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",[64,15016,15017,15022,15027,15031,15047,15051,15064,15068,15072,15090,15094,15107,15111,15115,15119,15124,15128,15152,15156,15169,15173,15177,15191,15195,15208,15212,15216,15224,15228,15240,15250,15263,15267,15271,15279,15283,15293,15297,15305],{"__ignoreMap":62},[67,15018,15019],{"class":69,"line":70},[67,15020,15021],{"class":202},"\u002F\u002F函数重载注意事项\n",[67,15023,15024],{"class":69,"line":143},[67,15025,15026],{"class":202},"\u002F\u002F1、引用作为重载条件\n",[67,15028,15029],{"class":69,"line":149},[67,15030,177],{"emptyLinePlaceholder":176},[67,15032,15033,15035,15037,15039,15041,15043,15045],{"class":69,"line":155},[67,15034,6083],{"class":73},[67,15036,12103],{"class":112},[67,15038,864],{"class":77},[67,15040,867],{"class":73},[67,15042,11302],{"class":73},[67,15044,28],{"class":5935},[67,15046,870],{"class":77},[67,15048,15049],{"class":69,"line":161},[67,15050,2269],{"class":77},[67,15052,15053,15055,15057,15060,15062],{"class":69,"line":167},[67,15054,7248],{"class":77},[67,15056,1900],{"class":73},[67,15058,15059],{"class":84}," \"func (int &a) 调用 \"",[67,15061,2168],{"class":73},[67,15063,9559],{"class":77},[67,15065,15066],{"class":69,"line":173},[67,15067,2288],{"class":77},[67,15069,15070],{"class":69,"line":180},[67,15071,177],{"emptyLinePlaceholder":176},[67,15073,15074,15076,15078,15080,15082,15084,15086,15088],{"class":69,"line":186},[67,15075,6083],{"class":73},[67,15077,12103],{"class":112},[67,15079,864],{"class":77},[67,15081,7511],{"class":73},[67,15083,3104],{"class":73},[67,15085,11302],{"class":73},[67,15087,28],{"class":5935},[67,15089,870],{"class":77},[67,15091,15092],{"class":69,"line":444},[67,15093,2269],{"class":77},[67,15095,15096,15098,15100,15103,15105],{"class":69,"line":2335},[67,15097,7248],{"class":77},[67,15099,1900],{"class":73},[67,15101,15102],{"class":84}," \"func (const int &a) 调用 \"",[67,15104,2168],{"class":73},[67,15106,9559],{"class":77},[67,15108,15109],{"class":69,"line":2340},[67,15110,2288],{"class":77},[67,15112,15113],{"class":69,"line":2346},[67,15114,177],{"emptyLinePlaceholder":176},[67,15116,15117],{"class":69,"line":2351},[67,15118,177],{"emptyLinePlaceholder":176},[67,15120,15121],{"class":69,"line":2365},[67,15122,15123],{"class":202},"\u002F\u002F2、函数重载碰到函数默认参数\n",[67,15125,15126],{"class":69,"line":2370},[67,15127,177],{"emptyLinePlaceholder":176},[67,15129,15130,15132,15134,15136,15138,15140,15142,15144,15146,15148,15150],{"class":69,"line":2376},[67,15131,6083],{"class":73},[67,15133,14336],{"class":112},[67,15135,864],{"class":77},[67,15137,867],{"class":73},[67,15139,2122],{"class":5935},[67,15141,13153],{"class":77},[67,15143,867],{"class":73},[67,15145,3554],{"class":5935},[67,15147,14282],{"class":73},[67,15149,2760],{"class":208},[67,15151,870],{"class":77},[67,15153,15154],{"class":69,"line":2397},[67,15155,2269],{"class":77},[67,15157,15158,15160,15162,15165,15167],{"class":69,"line":2402},[67,15159,7248],{"class":77},[67,15161,1900],{"class":73},[67,15163,15164],{"class":84}," \"func2(int a, int b = 10) 调用\"",[67,15166,2168],{"class":73},[67,15168,9559],{"class":77},[67,15170,15171],{"class":69,"line":2416},[67,15172,2288],{"class":77},[67,15174,15175],{"class":69,"line":2421},[67,15176,177],{"emptyLinePlaceholder":176},[67,15178,15179,15181,15183,15185,15187,15189],{"class":69,"line":2450},[67,15180,6083],{"class":73},[67,15182,14336],{"class":112},[67,15184,864],{"class":77},[67,15186,867],{"class":73},[67,15188,2122],{"class":5935},[67,15190,870],{"class":77},[67,15192,15193],{"class":69,"line":2455},[67,15194,2269],{"class":77},[67,15196,15197,15199,15201,15204,15206],{"class":69,"line":2472},[67,15198,7248],{"class":77},[67,15200,1900],{"class":73},[67,15202,15203],{"class":84}," \"func2(int a) 调用\"",[67,15205,2168],{"class":73},[67,15207,9559],{"class":77},[67,15209,15210],{"class":69,"line":2477},[67,15211,2288],{"class":77},[67,15213,15214],{"class":69,"line":2482},[67,15215,177],{"emptyLinePlaceholder":176},[67,15217,15218,15220,15222],{"class":69,"line":2487},[67,15219,867],{"class":73},[67,15221,2695],{"class":112},[67,15223,11571],{"class":77},[67,15225,15226],{"class":69,"line":2501},[67,15227,13928],{"class":77},[67,15229,15230,15232,15234,15236,15238],{"class":69,"line":2506},[67,15231,2707],{"class":73},[67,15233,11587],{"class":77},[67,15235,909],{"class":73},[67,15237,2760],{"class":208},[67,15239,2017],{"class":77},[67,15241,15242,15244,15247],{"class":69,"line":3298},[67,15243,14003],{"class":112},[67,15245,15246],{"class":77},"(a);",[67,15248,15249],{"class":202}," \u002F\u002F调用无const   因为a本身是个变量，可读可写\n",[67,15251,15252,15254,15256,15258,15260],{"class":69,"line":3312},[67,15253,14003],{"class":112},[67,15255,864],{"class":77},[67,15257,1303],{"class":208},[67,15259,6685],{"class":77},[67,15261,15262],{"class":202},"\u002F\u002F调用有const   10是个常量\n",[67,15264,15265],{"class":69,"line":3320},[67,15266,177],{"emptyLinePlaceholder":176},[67,15268,15269],{"class":69,"line":3325},[67,15270,177],{"emptyLinePlaceholder":176},[67,15272,15273,15276],{"class":69,"line":3331},[67,15274,15275],{"class":202},"    \u002F\u002Ffunc2(10);",[67,15277,15278],{"class":202}," \u002F\u002F碰到默认参数产生歧义，需要避免\n",[67,15280,15281],{"class":69,"line":3337},[67,15282,177],{"emptyLinePlaceholder":176},[67,15284,15285,15287,15289,15291],{"class":69,"line":3342},[67,15286,3025],{"class":112},[67,15288,864],{"class":77},[67,15290,3030],{"class":84},[67,15292,3440],{"class":77},[67,15294,15295],{"class":69,"line":8667},[67,15296,177],{"emptyLinePlaceholder":176},[67,15298,15299,15301,15303],{"class":69,"line":8691},[67,15300,4810],{"class":73},[67,15302,4813],{"class":208},[67,15304,2017],{"class":77},[67,15306,15307],{"class":69,"line":8696},[67,15308,2288],{"class":77},[779,15310,15311],{},"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":62,"searchDepth":143,"depth":143,"links":15313},[15314,15315,15316],{"id":14247,"depth":143,"text":14248},{"id":14504,"depth":143,"text":14505},{"id":14625,"depth":143,"text":14626,"children":15317},[15318,15319],{"id":14632,"depth":149,"text":14633},{"id":15002,"depth":149,"text":15003},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch7",{"title":14239,"description":62},"wiki\u002F2026-05-24-c++学习\u002Fch7-函数高级","JeAg03-_IoVFCkdwiBEVx1i5FNY-l3QWmylt1RpVnus",{"id":15326,"title":15327,"body":15328,"description":24081,"extension":787,"meta":24082,"navigation":176,"path":24083,"seo":24084,"stem":24085,"__hash__":24086},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch8-类和对象.md","8.类和对象",{"type":7,"value":15329,"toc":24062},[15330,15333,15339,15346,15351,15354,15357,15360,15364,15368,15371,15374,15382,15387,15390,15397,15402,15561,15564,15817,15820,15823,15826,15831,15834,15837,15848,15853,16089,16093,16103,16106,16114,16261,16265,16268,16271,16275,16720,16724,16732,16740,17652,17659,17664,18292,18295,18298,18301,18420,18423,18510,18513,18639,18642,18736,18739,19092,19096,19104,19108,19115,19118,19121,19132,19138,19143,19155,19163,19183,19191,19208,19394,19397,19401,19404,19407,19410,19413,19416,19419,19422,19882,19888,19892,19895,19906,20493,20496,20985,20989,20992,20995,20998,21001,21004,21012,21408,21412,21415,21418,21865,21868,21871,21876,21879,21884,21887,21891,21894,21896,21902,21905,22211,22221,22262,22266,22269,22271,22304,22307,22614,22616,22631,22634,22657,22666,22672,22675,22679,22682,22685,22690,22701,22706,22714,22718,22848,22851,22854,23029,23034,23246,23250,23253,23367,23372,23611,23615,23619,23622,23625,23630,23735,23738,23741,23744,23748,23859,23862,23865,23870,23922,23925,23928,23933,23979,23982,23987,24055,24057,24060],[10,15331,15327],{"id":15332},"_8类和对象",[19,15334,15335,15336],{},"C++面向对象的三大特性为",[336,15337,15338],{},"封装、继承、多态",[19,15340,15341,15342,15345],{},"C++认为",[336,15343,15344],{},"万事万物都皆为对象","，对象上有其属性和行为",[19,15347,15348],{},[336,15349,15350],{},"例如：",[19,15352,15353],{},"​\t人可以作为对象，属性有姓名、年龄、身高、体重...，行为有走、跑、跳、吃饭、唱歌...",[19,15355,15356],{},"​\t车也可以作为对象，属性有轮胎、方向盘、车灯...,行为有载人、放音乐、放空调...",[19,15358,15359],{},"​\t具有相同性质的对象，我们可以抽象称为类，人属于人类，车属于车类",[803,15361,15363],{"id":15362},"_81封装","8.1封装",[14,15365,15367],{"id":15366},"_811封装的意义","8.1.1封装的意义",[19,15369,15370],{},"封装是C++面向对象三大特性之一",[19,15372,15373],{},"封装的意义：",[1863,15375,15376,15379],{},[818,15377,15378],{},"将属性和行为作为一个整体，表现生活中的事物",[818,15380,15381],{},"将属性和行为加以权限控制",[19,15383,15384],{},[336,15385,15386],{},"封装意义一：",[19,15388,15389],{},"​\t在设计类的时候，属性和行为写在一起，表现事物",[19,15391,15392,614,15394],{},[336,15393,5900],{},[64,15395,15396],{},"class 类名{   访问权限： 属性  \u002F 行为  };",[815,15398,15399],{},[818,15400,15401],{},"**示例1：**设计一个圆类，求圆的周长",[57,15403,15405],{"className":852,"code":15404,"language":854,"meta":62,"style":62},"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",[64,15406,15407,15415,15419,15424,15429,15434,15439,15446,15451,15461,15465,15483,15487,15491,15499,15503,15508,15513,15518,15523,15534,15557],{"__ignoreMap":62},[67,15408,15409,15412],{"class":69,"line":70},[67,15410,15411],{"class":73},"class",[67,15413,15414],{"class":112}," Circle\n",[67,15416,15417],{"class":69,"line":143},[67,15418,2269],{"class":77},[67,15420,15421],{"class":69,"line":149},[67,15422,15423],{"class":202},"    \u002F\u002F访问权限\n",[67,15425,15426],{"class":69,"line":155},[67,15427,15428],{"class":202},"    \u002F\u002F公共权限\n",[67,15430,15431],{"class":69,"line":161},[67,15432,15433],{"class":73},"public:\n",[67,15435,15436],{"class":69,"line":167},[67,15437,15438],{"class":202},"    \u002F\u002F属性\n",[67,15440,15441,15443],{"class":69,"line":173},[67,15442,2707],{"class":73},[67,15444,15445],{"class":77}," m_r;\n",[67,15447,15448],{"class":69,"line":180},[67,15449,15450],{"class":202},"    \u002F\u002F行为\n",[67,15452,15453,15456,15459],{"class":69,"line":186},[67,15454,15455],{"class":73},"    double",[67,15457,15458],{"class":112}," calculateZC",[67,15460,2698],{"class":77},[67,15462,15463],{"class":69,"line":444},[67,15464,2752],{"class":77},[67,15466,15467,15470,15473,15475,15478,15480],{"class":69,"line":2335},[67,15468,15469],{"class":73},"        return",[67,15471,15472],{"class":208}," 2",[67,15474,1312],{"class":73},[67,15476,15477],{"class":77},"PI",[67,15479,1312],{"class":73},[67,15481,15482],{"class":77},"m_r;\n",[67,15484,15485],{"class":69,"line":2340},[67,15486,2909],{"class":77},[67,15488,15489],{"class":69,"line":2346},[67,15490,4715],{"class":77},[67,15492,15493,15495,15497],{"class":69,"line":2351},[67,15494,867],{"class":73},[67,15496,2695],{"class":112},[67,15498,2698],{"class":77},[67,15500,15501],{"class":69,"line":2365},[67,15502,2269],{"class":77},[67,15504,15505],{"class":69,"line":2370},[67,15506,15507],{"class":202},"    \u002F\u002F通过圆类 创建具体的圆(对象)\n",[67,15509,15510],{"class":69,"line":2376},[67,15511,15512],{"class":202},"    \u002F\u002F实例化（通过一个类 创建一个对象的过程）\n",[67,15514,15515],{"class":69,"line":2397},[67,15516,15517],{"class":77},"    Circle c1;\n",[67,15519,15520],{"class":69,"line":2402},[67,15521,15522],{"class":202},"    \u002F\u002F给圆对象 的属性进行赋值\n",[67,15524,15525,15528,15530,15532],{"class":69,"line":2416},[67,15526,15527],{"class":77},"    c1.m_r",[67,15529,909],{"class":73},[67,15531,1303],{"class":208},[67,15533,2017],{"class":77},[67,15535,15536,15538,15540,15543,15545,15548,15551,15553,15555],{"class":69,"line":2421},[67,15537,2274],{"class":77},[67,15539,1900],{"class":73},[67,15541,15542],{"class":84},"\"圆的周长\"",[67,15544,1900],{"class":73},[67,15546,15547],{"class":77},"c1.",[67,15549,15550],{"class":112},"calculateZC",[67,15552,3148],{"class":77},[67,15554,1900],{"class":73},[67,15556,1922],{"class":77},[67,15558,15559],{"class":69,"line":2450},[67,15560,2288],{"class":77},[19,15562,15563],{},"案例：设计一个学生类，属性有姓名和学号，可以给姓名和学号赋值，可以显示学生的姓名和学号",[57,15565,15567],{"className":852,"code":15566,"language":854,"meta":62,"style":62},"#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",[64,15568,15569,15575,15585,15591,15597,15601,15605,15610,15617,15622,15640,15644,15654,15658,15663,15679,15683,15693,15697,15702,15710,15714,15746,15750,15754,15762,15766,15771,15776,15790,15804,15813],{"__ignoreMap":62},[67,15570,15571,15573],{"class":69,"line":70},[67,15572,2672],{"class":73},[67,15574,2675],{"class":84},[67,15576,15577,15579,15581,15583],{"class":69,"line":143},[67,15578,2680],{"class":73},[67,15580,2683],{"class":73},[67,15582,2686],{"class":112},[67,15584,2017],{"class":77},[67,15586,15587,15589],{"class":69,"line":149},[67,15588,2672],{"class":73},[67,15590,8468],{"class":84},[67,15592,15593,15595],{"class":69,"line":155},[67,15594,15411],{"class":73},[67,15596,8481],{"class":112},[67,15598,15599],{"class":69,"line":161},[67,15600,2269],{"class":77},[67,15602,15603],{"class":69,"line":167},[67,15604,15433],{"class":73},[67,15606,15607],{"class":69,"line":173},[67,15608,15609],{"class":77},"    string m_name;\n",[67,15611,15612,15614],{"class":69,"line":180},[67,15613,2707],{"class":73},[67,15615,15616],{"class":77}," m_id;\n",[67,15618,15619],{"class":69,"line":186},[67,15620,15621],{"class":202},"    \u002F\u002F赋值姓名\n",[67,15623,15624,15627,15630,15632,15635,15638],{"class":69,"line":444},[67,15625,15626],{"class":73},"    void",[67,15628,15629],{"class":112}," setName",[67,15631,864],{"class":77},[67,15633,15634],{"class":112},"string",[67,15636,15637],{"class":5935}," name",[67,15639,870],{"class":77},[67,15641,15642],{"class":69,"line":2335},[67,15643,2752],{"class":77},[67,15645,15646,15649,15651],{"class":69,"line":2340},[67,15647,15648],{"class":77},"        m_name",[67,15650,909],{"class":73},[67,15652,15653],{"class":77},"name;\n",[67,15655,15656],{"class":69,"line":2346},[67,15657,2909],{"class":77},[67,15659,15660],{"class":69,"line":2351},[67,15661,15662],{"class":202},"    \u002F\u002F赋值学号\n",[67,15664,15665,15667,15670,15672,15674,15677],{"class":69,"line":2365},[67,15666,15626],{"class":73},[67,15668,15669],{"class":112}," setId",[67,15671,864],{"class":77},[67,15673,867],{"class":73},[67,15675,15676],{"class":5935}," id",[67,15678,870],{"class":77},[67,15680,15681],{"class":69,"line":2370},[67,15682,2752],{"class":77},[67,15684,15685,15688,15690],{"class":69,"line":2376},[67,15686,15687],{"class":77},"        m_id",[67,15689,909],{"class":73},[67,15691,15692],{"class":77},"id;\n",[67,15694,15695],{"class":69,"line":2397},[67,15696,2909],{"class":77},[67,15698,15699],{"class":69,"line":2402},[67,15700,15701],{"class":202},"    \u002F\u002F打印学生信息\n",[67,15703,15704,15706,15708],{"class":69,"line":2416},[67,15705,15626],{"class":73},[67,15707,10334],{"class":112},[67,15709,2698],{"class":77},[67,15711,15712],{"class":69,"line":2421},[67,15713,2752],{"class":77},[67,15715,15716,15718,15720,15723,15725,15728,15730,15732,15734,15737,15739,15742,15744],{"class":69,"line":2450},[67,15717,4171],{"class":77},[67,15719,1900],{"class":73},[67,15721,15722],{"class":84},"\"姓名：\"",[67,15724,1900],{"class":73},[67,15726,15727],{"class":77},"m_name",[67,15729,1900],{"class":73},[67,15731,5078],{"class":84},[67,15733,1900],{"class":73},[67,15735,15736],{"class":84},"\"学号：\"",[67,15738,1900],{"class":73},[67,15740,15741],{"class":77},"m_id",[67,15743,1900],{"class":73},[67,15745,1922],{"class":77},[67,15747,15748],{"class":69,"line":2455},[67,15749,2909],{"class":77},[67,15751,15752],{"class":69,"line":2472},[67,15753,4715],{"class":77},[67,15755,15756,15758,15760],{"class":69,"line":2477},[67,15757,867],{"class":73},[67,15759,2695],{"class":112},[67,15761,2698],{"class":77},[67,15763,15764],{"class":69,"line":2482},[67,15765,2269],{"class":77},[67,15767,15768],{"class":69,"line":2487},[67,15769,15770],{"class":202},"    \u002F\u002F实例化\n",[67,15772,15773],{"class":69,"line":2501},[67,15774,15775],{"class":77},"    Student s1;\n",[67,15777,15778,15781,15784,15786,15788],{"class":69,"line":2506},[67,15779,15780],{"class":77},"    s1.",[67,15782,15783],{"class":112},"setName",[67,15785,864],{"class":77},[67,15787,8635],{"class":84},[67,15789,3440],{"class":77},[67,15791,15792,15794,15797,15799,15802],{"class":69,"line":3298},[67,15793,15780],{"class":77},[67,15795,15796],{"class":112},"setId",[67,15798,864],{"class":77},[67,15800,15801],{"class":208},"123456",[67,15803,3440],{"class":77},[67,15805,15806,15808,15811],{"class":69,"line":3312},[67,15807,15780],{"class":77},[67,15809,15810],{"class":112},"printInfo",[67,15812,6355],{"class":77},[67,15814,15815],{"class":69,"line":3320},[67,15816,2288],{"class":77},[19,15818,15819],{},"类中的属性和行为统称为成员",[19,15821,15822],{},"属性：成员属性(成员变量)",[19,15824,15825],{},"方法：成员函数(成员方法)",[19,15827,15828],{},[336,15829,15830],{},"封装意义二：",[19,15832,15833],{},"类在设计时，可以把属性和行为放在不同的权限下，加以控制",[19,15835,15836],{},"访问权限有三种：",[815,15838,15839,15842,15845],{},[818,15840,15841],{},"public        公共权限",[818,15843,15844],{},"protected 保护权限",[818,15846,15847],{},"private      私有权限",[19,15849,15850],{},[336,15851,15852],{},"示例：",[57,15854,15856],{"className":10659,"code":15855,"language":10661,"meta":62,"style":62},"\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",[64,15857,15858,15863,15868,15873,15878,15882,15889,15893,15898,15902,15907,15911,15916,15921,15926,15930,15935,15940,15947,15951,15955,15963,15967,15978,15990,16002,16006,16010,16014,16022,16026,16031,16043,16051,16059,16063,16073,16077,16085],{"__ignoreMap":62},[67,15859,15860],{"class":69,"line":70},[67,15861,15862],{"class":202},"\u002F\u002F三种权限\n",[67,15864,15865],{"class":69,"line":143},[67,15866,15867],{"class":202},"\u002F\u002F公共权限  public     类内可以访问  类外可以访问\n",[67,15869,15870],{"class":69,"line":149},[67,15871,15872],{"class":202},"\u002F\u002F保护权限  protected  类内可以访问  类外不可以访问  儿子可以访问父亲中的保护内容\n",[67,15874,15875],{"class":69,"line":155},[67,15876,15877],{"class":202},"\u002F\u002F私有权限  private    类内可以访问  类外不可以访问  儿子不可以访问父亲中的保护内容\n",[67,15879,15880],{"class":69,"line":161},[67,15881,177],{"emptyLinePlaceholder":176},[67,15883,15884,15886],{"class":69,"line":167},[67,15885,15411],{"class":73},[67,15887,15888],{"class":112}," Person\n",[67,15890,15891],{"class":69,"line":173},[67,15892,2269],{"class":77},[67,15894,15895],{"class":69,"line":180},[67,15896,15897],{"class":202},"    \u002F\u002F姓名  公共权限\n",[67,15899,15900],{"class":69,"line":186},[67,15901,15433],{"class":73},[67,15903,15904],{"class":69,"line":444},[67,15905,15906],{"class":77},"    string m_Name;\n",[67,15908,15909],{"class":69,"line":2335},[67,15910,177],{"emptyLinePlaceholder":176},[67,15912,15913],{"class":69,"line":2340},[67,15914,15915],{"class":202},"    \u002F\u002F汽车  保护权限\n",[67,15917,15918],{"class":69,"line":2346},[67,15919,15920],{"class":73},"protected:\n",[67,15922,15923],{"class":69,"line":2351},[67,15924,15925],{"class":77},"    string m_Car;\n",[67,15927,15928],{"class":69,"line":2365},[67,15929,177],{"emptyLinePlaceholder":176},[67,15931,15932],{"class":69,"line":2370},[67,15933,15934],{"class":202},"    \u002F\u002F银行卡密码  私有权限\n",[67,15936,15937],{"class":69,"line":2376},[67,15938,15939],{"class":73},"private:\n",[67,15941,15942,15944],{"class":69,"line":2397},[67,15943,2707],{"class":73},[67,15945,15946],{"class":77}," m_Password;\n",[67,15948,15949],{"class":69,"line":2402},[67,15950,177],{"emptyLinePlaceholder":176},[67,15952,15953],{"class":69,"line":2416},[67,15954,15433],{"class":73},[67,15956,15957,15959,15961],{"class":69,"line":2421},[67,15958,15626],{"class":73},[67,15960,12103],{"class":112},[67,15962,2698],{"class":77},[67,15964,15965],{"class":69,"line":2450},[67,15966,2752],{"class":77},[67,15968,15969,15972,15974,15976],{"class":69,"line":2455},[67,15970,15971],{"class":77},"        m_Name ",[67,15973,909],{"class":73},[67,15975,9657],{"class":84},[67,15977,2017],{"class":77},[67,15979,15980,15983,15985,15988],{"class":69,"line":2472},[67,15981,15982],{"class":77},"        m_Car ",[67,15984,909],{"class":73},[67,15986,15987],{"class":84}," \"拖拉机\"",[67,15989,2017],{"class":77},[67,15991,15992,15995,15997,16000],{"class":69,"line":2477},[67,15993,15994],{"class":77},"        m_Password ",[67,15996,909],{"class":73},[67,15998,15999],{"class":208}," 123456",[67,16001,2017],{"class":77},[67,16003,16004],{"class":69,"line":2482},[67,16005,2909],{"class":77},[67,16007,16008],{"class":69,"line":2487},[67,16009,4715],{"class":77},[67,16011,16012],{"class":69,"line":2501},[67,16013,177],{"emptyLinePlaceholder":176},[67,16015,16016,16018,16020],{"class":69,"line":2506},[67,16017,867],{"class":73},[67,16019,2695],{"class":112},[67,16021,11571],{"class":77},[67,16023,16024],{"class":69,"line":3298},[67,16025,177],{"emptyLinePlaceholder":176},[67,16027,16028],{"class":69,"line":3312},[67,16029,16030],{"class":77},"    Person p;\n",[67,16032,16033,16036,16038,16041],{"class":69,"line":3320},[67,16034,16035],{"class":77},"    p.m_Name ",[67,16037,909],{"class":73},[67,16039,16040],{"class":84}," \"李四\"",[67,16042,2017],{"class":77},[67,16044,16045,16048],{"class":69,"line":3325},[67,16046,16047],{"class":202},"    \u002F\u002Fp.m_Car = \"奔驰\";",[67,16049,16050],{"class":202},"  \u002F\u002F保护权限类外访问不到\n",[67,16052,16053,16056],{"class":69,"line":3331},[67,16054,16055],{"class":202},"    \u002F\u002Fp.m_Password = 123;",[67,16057,16058],{"class":202}," \u002F\u002F私有权限类外访问不到\n",[67,16060,16061],{"class":69,"line":3337},[67,16062,177],{"emptyLinePlaceholder":176},[67,16064,16065,16067,16069,16071],{"class":69,"line":3342},[67,16066,3025],{"class":112},[67,16068,864],{"class":77},[67,16070,3030],{"class":84},[67,16072,3440],{"class":77},[67,16074,16075],{"class":69,"line":8667},[67,16076,177],{"emptyLinePlaceholder":176},[67,16078,16079,16081,16083],{"class":69,"line":8691},[67,16080,4810],{"class":73},[67,16082,4813],{"class":208},[67,16084,2017],{"class":77},[67,16086,16087],{"class":69,"line":8696},[67,16088,2288],{"class":77},[14,16090,16092],{"id":16091},"_812封装c中的class和struct的区别","8.1.2封装c++中的class和struct的区别",[19,16094,16095,16096,16099,16100],{},"在C++中 struct和class唯一的",[336,16097,16098],{},"区别","就在于 ",[336,16101,16102],{},"默认的访问权限不同",[19,16104,16105],{},"区别：",[1863,16107,16108,16111],{},[818,16109,16110],{},"struct 默认权限为公共",[818,16112,16113],{},"class   默认权限为私有",[57,16115,16117],{"className":10659,"code":16116,"language":10661,"meta":62,"style":62},"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",[64,16118,16119,16126,16130,16140,16144,16148,16155,16159,16169,16173,16177,16185,16189,16194,16208,16212,16217,16231,16235,16245,16249,16257],{"__ignoreMap":62},[67,16120,16121,16123],{"class":69,"line":70},[67,16122,15411],{"class":73},[67,16124,16125],{"class":112}," C1\n",[67,16127,16128],{"class":69,"line":143},[67,16129,2269],{"class":77},[67,16131,16132,16134,16137],{"class":69,"line":149},[67,16133,2707],{"class":73},[67,16135,16136],{"class":77},"  m_A;",[67,16138,16139],{"class":202}," \u002F\u002F默认是私有权限\n",[67,16141,16142],{"class":69,"line":155},[67,16143,4715],{"class":77},[67,16145,16146],{"class":69,"line":161},[67,16147,177],{"emptyLinePlaceholder":176},[67,16149,16150,16152],{"class":69,"line":167},[67,16151,8478],{"class":73},[67,16153,16154],{"class":112}," C2\n",[67,16156,16157],{"class":69,"line":173},[67,16158,2269],{"class":77},[67,16160,16161,16163,16166],{"class":69,"line":180},[67,16162,2707],{"class":73},[67,16164,16165],{"class":77}," m_A;",[67,16167,16168],{"class":202},"  \u002F\u002F默认是公共权限\n",[67,16170,16171],{"class":69,"line":186},[67,16172,4715],{"class":77},[67,16174,16175],{"class":69,"line":444},[67,16176,177],{"emptyLinePlaceholder":176},[67,16178,16179,16181,16183],{"class":69,"line":2335},[67,16180,867],{"class":73},[67,16182,2695],{"class":112},[67,16184,11571],{"class":77},[67,16186,16187],{"class":69,"line":2340},[67,16188,177],{"emptyLinePlaceholder":176},[67,16190,16191],{"class":69,"line":2346},[67,16192,16193],{"class":77},"    C1 c1;\n",[67,16195,16196,16199,16201,16203,16205],{"class":69,"line":2351},[67,16197,16198],{"class":77},"    c1.m_A ",[67,16200,909],{"class":73},[67,16202,2760],{"class":208},[67,16204,918],{"class":77},[67,16206,16207],{"class":202}," \u002F\u002F错误，访问权限是私有\n",[67,16209,16210],{"class":69,"line":2365},[67,16211,177],{"emptyLinePlaceholder":176},[67,16213,16214],{"class":69,"line":2370},[67,16215,16216],{"class":77},"    C2 c2;\n",[67,16218,16219,16222,16224,16226,16228],{"class":69,"line":2376},[67,16220,16221],{"class":77},"    c2.m_A ",[67,16223,909],{"class":73},[67,16225,2760],{"class":208},[67,16227,918],{"class":77},[67,16229,16230],{"class":202}," \u002F\u002F正确，访问权限是公共\n",[67,16232,16233],{"class":69,"line":2397},[67,16234,177],{"emptyLinePlaceholder":176},[67,16236,16237,16239,16241,16243],{"class":69,"line":2402},[67,16238,3025],{"class":112},[67,16240,864],{"class":77},[67,16242,3030],{"class":84},[67,16244,3440],{"class":77},[67,16246,16247],{"class":69,"line":2416},[67,16248,177],{"emptyLinePlaceholder":176},[67,16250,16251,16253,16255],{"class":69,"line":2421},[67,16252,4810],{"class":73},[67,16254,4813],{"class":208},[67,16256,2017],{"class":77},[67,16258,16259],{"class":69,"line":2450},[67,16260,2288],{"class":77},[14,16262,16264],{"id":16263},"_813成员属性设置为私有","8.1.3成员属性设置为私有",[19,16266,16267],{},"**优点1：**将所有成员属性设置为私有，可以自己控制读写权限",[19,16269,16270],{},"**优点2：**对于写权限，我们可以检测数据的有效性",[19,16272,16273],{},[336,16274,15852],{},[57,16276,16278],{"className":10659,"code":16277,"language":10661,"meta":62,"style":62},"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",[64,16279,16280,16290,16294,16298,16303,16317,16326,16330,16340,16344,16351,16355,16359,16363,16368,16377,16384,16388,16393,16409,16432,16445,16452,16456,16465,16469,16473,16478,16494,16504,16508,16512,16516,16524,16528,16538,16542,16550,16554,16558,16566,16570,16574,16579,16592,16615,16619,16624,16637,16659,16663,16668,16682,16690,16694,16704,16708,16716],{"__ignoreMap":62},[67,16281,16282,16284,16287],{"class":69,"line":70},[67,16283,15411],{"class":73},[67,16285,16286],{"class":112}," Person",[67,16288,16289],{"class":77}," {\n",[67,16291,16292],{"class":69,"line":143},[67,16293,15433],{"class":73},[67,16295,16296],{"class":69,"line":149},[67,16297,177],{"emptyLinePlaceholder":176},[67,16299,16300],{"class":69,"line":155},[67,16301,16302],{"class":202},"    \u002F\u002F姓名设置可读可写\n",[67,16304,16305,16307,16309,16311,16313,16315],{"class":69,"line":161},[67,16306,15626],{"class":73},[67,16308,15629],{"class":112},[67,16310,864],{"class":77},[67,16312,15634],{"class":112},[67,16314,15637],{"class":5935},[67,16316,13160],{"class":77},[67,16318,16319,16321,16323],{"class":69,"line":167},[67,16320,15971],{"class":77},[67,16322,909],{"class":73},[67,16324,16325],{"class":77}," name;\n",[67,16327,16328],{"class":69,"line":173},[67,16329,2909],{"class":77},[67,16331,16332,16335,16338],{"class":69,"line":180},[67,16333,16334],{"class":112},"    string",[67,16336,16337],{"class":112}," getName",[67,16339,2698],{"class":77},[67,16341,16342],{"class":69,"line":186},[67,16343,2752],{"class":77},[67,16345,16346,16348],{"class":69,"line":444},[67,16347,15469],{"class":73},[67,16349,16350],{"class":77}," m_Name;\n",[67,16352,16353],{"class":69,"line":2335},[67,16354,2909],{"class":77},[67,16356,16357],{"class":69,"line":2340},[67,16358,177],{"emptyLinePlaceholder":176},[67,16360,16361],{"class":69,"line":2346},[67,16362,177],{"emptyLinePlaceholder":176},[67,16364,16365],{"class":69,"line":2351},[67,16366,16367],{"class":202},"    \u002F\u002F获取年龄 \n",[67,16369,16370,16372,16375],{"class":69,"line":2365},[67,16371,2707],{"class":73},[67,16373,16374],{"class":112}," getAge",[67,16376,11571],{"class":77},[67,16378,16379,16381],{"class":69,"line":2370},[67,16380,15469],{"class":73},[67,16382,16383],{"class":77}," m_Age;\n",[67,16385,16386],{"class":69,"line":2376},[67,16387,2909],{"class":77},[67,16389,16390],{"class":69,"line":2397},[67,16391,16392],{"class":202},"    \u002F\u002F设置年龄\n",[67,16394,16395,16397,16400,16402,16404,16407],{"class":69,"line":2402},[67,16396,15626],{"class":73},[67,16398,16399],{"class":112}," setAge",[67,16401,864],{"class":77},[67,16403,867],{"class":73},[67,16405,16406],{"class":5935}," age",[67,16408,13160],{"class":77},[67,16410,16411,16413,16416,16418,16420,16422,16425,16427,16430],{"class":69,"line":2416},[67,16412,3218],{"class":73},[67,16414,16415],{"class":77}," (age ",[67,16417,1766],{"class":73},[67,16419,4813],{"class":208},[67,16421,3975],{"class":73},[67,16423,16424],{"class":77}," age ",[67,16426,1816],{"class":73},[67,16428,16429],{"class":208}," 150",[67,16431,13160],{"class":77},[67,16433,16434,16436,16438,16441,16443],{"class":69,"line":2421},[67,16435,10438],{"class":77},[67,16437,1900],{"class":73},[67,16439,16440],{"class":84}," \"你个老妖精!\"",[67,16442,2168],{"class":73},[67,16444,9559],{"class":77},[67,16446,16447,16450],{"class":69,"line":2450},[67,16448,16449],{"class":73},"            return",[67,16451,2017],{"class":77},[67,16453,16454],{"class":69,"line":2455},[67,16455,3250],{"class":77},[67,16457,16458,16461,16463],{"class":69,"line":2472},[67,16459,16460],{"class":77},"        m_Age ",[67,16462,909],{"class":73},[67,16464,8516],{"class":77},[67,16466,16467],{"class":69,"line":2477},[67,16468,2909],{"class":77},[67,16470,16471],{"class":69,"line":2482},[67,16472,177],{"emptyLinePlaceholder":176},[67,16474,16475],{"class":69,"line":2487},[67,16476,16477],{"class":202},"    \u002F\u002F情人设置为只写\n",[67,16479,16480,16482,16485,16487,16489,16492],{"class":69,"line":2501},[67,16481,15626],{"class":73},[67,16483,16484],{"class":112}," setLover",[67,16486,864],{"class":77},[67,16488,15634],{"class":112},[67,16490,16491],{"class":5935}," lover",[67,16493,13160],{"class":77},[67,16495,16496,16499,16501],{"class":69,"line":2506},[67,16497,16498],{"class":77},"        m_Lover ",[67,16500,909],{"class":73},[67,16502,16503],{"class":77}," lover;\n",[67,16505,16506],{"class":69,"line":3298},[67,16507,2909],{"class":77},[67,16509,16510],{"class":69,"line":3312},[67,16511,177],{"emptyLinePlaceholder":176},[67,16513,16514],{"class":69,"line":3320},[67,16515,15939],{"class":73},[67,16517,16518,16521],{"class":69,"line":3325},[67,16519,16520],{"class":77},"    string m_Name;",[67,16522,16523],{"class":202}," \u002F\u002F可读可写  姓名\n",[67,16525,16526],{"class":69,"line":3331},[67,16527,13928],{"class":77},[67,16529,16530,16532,16535],{"class":69,"line":3337},[67,16531,2707],{"class":73},[67,16533,16534],{"class":77}," m_Age;",[67,16536,16537],{"class":202}," \u002F\u002F只读  年龄\n",[67,16539,16540],{"class":69,"line":3342},[67,16541,177],{"emptyLinePlaceholder":176},[67,16543,16544,16547],{"class":69,"line":8667},[67,16545,16546],{"class":77},"    string m_Lover;",[67,16548,16549],{"class":202}," \u002F\u002F只写  情人\n",[67,16551,16552],{"class":69,"line":8691},[67,16553,4715],{"class":77},[67,16555,16556],{"class":69,"line":8696},[67,16557,177],{"emptyLinePlaceholder":176},[67,16559,16560,16562,16564],{"class":69,"line":8702},[67,16561,867],{"class":73},[67,16563,2695],{"class":112},[67,16565,11571],{"class":77},[67,16567,16568],{"class":69,"line":8729},[67,16569,177],{"emptyLinePlaceholder":176},[67,16571,16572],{"class":69,"line":8734},[67,16573,16030],{"class":77},[67,16575,16576],{"class":69,"line":8740},[67,16577,16578],{"class":202},"    \u002F\u002F姓名设置\n",[67,16580,16581,16584,16586,16588,16590],{"class":69,"line":8752},[67,16582,16583],{"class":77},"    p.",[67,16585,15783],{"class":112},[67,16587,864],{"class":77},[67,16589,8635],{"class":84},[67,16591,3440],{"class":77},[67,16593,16594,16596,16598,16601,16603,16606,16609,16611,16613],{"class":69,"line":8764},[67,16595,7248],{"class":77},[67,16597,1900],{"class":73},[67,16599,16600],{"class":84}," \"姓名： \"",[67,16602,2168],{"class":73},[67,16604,16605],{"class":77}," p.",[67,16607,16608],{"class":112},"getName",[67,16610,13768],{"class":77},[67,16612,1900],{"class":73},[67,16614,9559],{"class":77},[67,16616,16617],{"class":69,"line":8776},[67,16618,177],{"emptyLinePlaceholder":176},[67,16620,16621],{"class":69,"line":10435},[67,16622,16623],{"class":202},"    \u002F\u002F年龄设置\n",[67,16625,16626,16628,16631,16633,16635],{"class":69,"line":10459},[67,16627,16583],{"class":77},[67,16629,16630],{"class":112},"setAge",[67,16632,864],{"class":77},[67,16634,1512],{"class":208},[67,16636,3440],{"class":77},[67,16638,16639,16641,16643,16646,16648,16650,16653,16655,16657],{"class":69,"line":10482},[67,16640,7248],{"class":77},[67,16642,1900],{"class":73},[67,16644,16645],{"class":84}," \"年龄： \"",[67,16647,2168],{"class":73},[67,16649,16605],{"class":77},[67,16651,16652],{"class":112},"getAge",[67,16654,13768],{"class":77},[67,16656,1900],{"class":73},[67,16658,9559],{"class":77},[67,16660,16661],{"class":69,"line":10506},[67,16662,177],{"emptyLinePlaceholder":176},[67,16664,16665],{"class":69,"line":10511},[67,16666,16667],{"class":202},"    \u002F\u002F情人设置\n",[67,16669,16670,16672,16675,16677,16680],{"class":69,"line":10516},[67,16671,16583],{"class":77},[67,16673,16674],{"class":112},"setLover",[67,16676,864],{"class":77},[67,16678,16679],{"class":84},"\"苍井\"",[67,16681,3440],{"class":77},[67,16683,16684,16687],{"class":69,"line":10521},[67,16685,16686],{"class":202},"    \u002F\u002Fcout \u003C\u003C \"情人： \" \u003C\u003C p.m_Lover \u003C\u003C endl;",[67,16688,16689],{"class":202},"  \u002F\u002F只写属性，不可以读取\n",[67,16691,16692],{"class":69,"line":10530},[67,16693,177],{"emptyLinePlaceholder":176},[67,16695,16696,16698,16700,16702],{"class":69,"line":10535},[67,16697,3025],{"class":112},[67,16699,864],{"class":77},[67,16701,3030],{"class":84},[67,16703,3440],{"class":77},[67,16705,16706],{"class":69,"line":10541},[67,16707,177],{"emptyLinePlaceholder":176},[67,16709,16710,16712,16714],{"class":69,"line":10562},[67,16711,4810],{"class":73},[67,16713,4813],{"class":208},[67,16715,2017],{"class":77},[67,16717,16718],{"class":69,"line":10568},[67,16719,2288],{"class":77},[14,16721,16723],{"id":16722},"_814封装案例","8.1.4封装案例",[815,16725,16726],{},[818,16727,16728,16731],{},[336,16729,16730],{},"练习案例1：设计立方体类","\n设计立方体类(Cube)",[1863,16733,16734,16737],{},[818,16735,16736],{},"求出立方体的面积和体积",[818,16738,16739],{},"分别用全局函数和成员函数判断两个立方体是否相等。",[57,16741,16743],{"className":852,"code":16742,"language":854,"meta":62,"style":62},"#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",[64,16744,16745,16751,16761,16768,16772,16776,16781,16811,16815,16825,16835,16845,16849,16858,16862,16898,16902,16911,16915,16931,16935,16940,16949,16953,16960,16964,16973,16977,16984,16988,16997,17001,17008,17012,17017,17034,17038,17084,17088,17097,17101,17105,17109,17118,17122,17126,17131,17135,17141,17147,17153,17157,17161,17166,17188,17192,17246,17250,17258,17262,17267,17272,17285,17292,17308,17319,17325,17348,17354,17377,17391,17411,17417,17428,17451,17473,17478,17484,17498,17511,17516,17530,17535,17541,17546,17560,17565,17570,17584,17596,17601,17614,17619,17624,17629,17642,17647],{"__ignoreMap":62},[67,16746,16747,16749],{"class":69,"line":70},[67,16748,2672],{"class":73},[67,16750,2675],{"class":84},[67,16752,16753,16755,16757,16759],{"class":69,"line":143},[67,16754,2680],{"class":73},[67,16756,2683],{"class":73},[67,16758,2686],{"class":112},[67,16760,2017],{"class":77},[67,16762,16763,16765],{"class":69,"line":149},[67,16764,15411],{"class":73},[67,16766,16767],{"class":112}," Cube\n",[67,16769,16770],{"class":69,"line":155},[67,16771,2269],{"class":77},[67,16773,16774],{"class":69,"line":161},[67,16775,15433],{"class":73},[67,16777,16778],{"class":69,"line":167},[67,16779,16780],{"class":202},"    \u002F\u002F输入长宽高\n",[67,16782,16783,16785,16788,16790,16792,16795,16797,16799,16802,16804,16806,16809],{"class":69,"line":173},[67,16784,15626],{"class":73},[67,16786,16787],{"class":112}," setLwh",[67,16789,864],{"class":77},[67,16791,867],{"class":73},[67,16793,16794],{"class":5935}," l",[67,16796,1236],{"class":77},[67,16798,867],{"class":73},[67,16800,16801],{"class":5935}," w",[67,16803,1236],{"class":77},[67,16805,867],{"class":73},[67,16807,16808],{"class":5935}," h",[67,16810,870],{"class":77},[67,16812,16813],{"class":69,"line":180},[67,16814,2752],{"class":77},[67,16816,16817,16820,16822],{"class":69,"line":186},[67,16818,16819],{"class":77},"        m_L",[67,16821,909],{"class":73},[67,16823,16824],{"class":77},"l;\n",[67,16826,16827,16830,16832],{"class":69,"line":444},[67,16828,16829],{"class":77},"        m_W",[67,16831,909],{"class":73},[67,16833,16834],{"class":77},"w;\n",[67,16836,16837,16840,16842],{"class":69,"line":2335},[67,16838,16839],{"class":77},"        m_H",[67,16841,909],{"class":73},[67,16843,16844],{"class":77},"h;\n",[67,16846,16847],{"class":69,"line":2340},[67,16848,2909],{"class":77},[67,16850,16851,16853,16856],{"class":69,"line":2346},[67,16852,2707],{"class":73},[67,16854,16855],{"class":112}," mianji",[67,16857,2698],{"class":77},[67,16859,16860],{"class":69,"line":2351},[67,16861,2752],{"class":77},[67,16863,16864,16866,16868,16870,16873,16875,16878,16880,16883,16885,16888,16890,16893,16895],{"class":69,"line":2365},[67,16865,15469],{"class":73},[67,16867,15472],{"class":208},[67,16869,1312],{"class":73},[67,16871,16872],{"class":77},"(m_L",[67,16874,1312],{"class":73},[67,16876,16877],{"class":77},"m_W ",[67,16879,1338],{"class":73},[67,16881,16882],{"class":77}," m_L",[67,16884,1312],{"class":73},[67,16886,16887],{"class":77},"m_H ",[67,16889,1338],{"class":73},[67,16891,16892],{"class":77}," m_W",[67,16894,1312],{"class":73},[67,16896,16897],{"class":77},"m_H);\n",[67,16899,16900],{"class":69,"line":2370},[67,16901,2909],{"class":77},[67,16903,16904,16906,16909],{"class":69,"line":2376},[67,16905,2707],{"class":73},[67,16907,16908],{"class":112}," tiji",[67,16910,2698],{"class":77},[67,16912,16913],{"class":69,"line":2397},[67,16914,2752],{"class":77},[67,16916,16917,16919,16921,16923,16926,16928],{"class":69,"line":2402},[67,16918,15469],{"class":73},[67,16920,16882],{"class":77},[67,16922,1312],{"class":73},[67,16924,16925],{"class":77},"m_W",[67,16927,1312],{"class":73},[67,16929,16930],{"class":77},"m_H;\n",[67,16932,16933],{"class":69,"line":2416},[67,16934,2909],{"class":77},[67,16936,16937],{"class":69,"line":2421},[67,16938,16939],{"class":202},"    \u002F\u002F获取长宽高\n",[67,16941,16942,16944,16947],{"class":69,"line":2450},[67,16943,2707],{"class":73},[67,16945,16946],{"class":112}," getLength",[67,16948,2698],{"class":77},[67,16950,16951],{"class":69,"line":2455},[67,16952,2752],{"class":77},[67,16954,16955,16957],{"class":69,"line":2472},[67,16956,15469],{"class":73},[67,16958,16959],{"class":77}," m_L;\n",[67,16961,16962],{"class":69,"line":2477},[67,16963,2909],{"class":77},[67,16965,16966,16968,16971],{"class":69,"line":2482},[67,16967,2707],{"class":73},[67,16969,16970],{"class":112}," getWidth",[67,16972,2698],{"class":77},[67,16974,16975],{"class":69,"line":2487},[67,16976,2752],{"class":77},[67,16978,16979,16981],{"class":69,"line":2501},[67,16980,15469],{"class":73},[67,16982,16983],{"class":77}," m_W;\n",[67,16985,16986],{"class":69,"line":2506},[67,16987,2909],{"class":77},[67,16989,16990,16992,16995],{"class":69,"line":3298},[67,16991,2707],{"class":73},[67,16993,16994],{"class":112}," getHeight",[67,16996,2698],{"class":77},[67,16998,16999],{"class":69,"line":3312},[67,17000,2752],{"class":77},[67,17002,17003,17005],{"class":69,"line":3320},[67,17004,15469],{"class":73},[67,17006,17007],{"class":77}," m_H;\n",[67,17009,17010],{"class":69,"line":3325},[67,17011,2909],{"class":77},[67,17013,17014],{"class":69,"line":3331},[67,17015,17016],{"class":202},"    \u002F\u002F成员函数判断两个立方体是否相等\n",[67,17018,17019,17022,17025,17027,17030,17032],{"class":69,"line":3337},[67,17020,17021],{"class":73},"    bool",[67,17023,17024],{"class":112}," isEqual",[67,17026,864],{"class":77},[67,17028,17029],{"class":112},"Cube",[67,17031,3570],{"class":5935},[67,17033,870],{"class":77},[67,17035,17036],{"class":69,"line":3342},[67,17037,2752],{"class":77},[67,17039,17040,17042,17045,17048,17050,17052,17055,17057,17060,17063,17065,17067,17070,17072,17074,17077,17079,17081],{"class":69,"line":8667},[67,17041,3218],{"class":73},[67,17043,17044],{"class":77}," (c.",[67,17046,17047],{"class":112},"getLength",[67,17049,13768],{"class":77},[67,17051,3670],{"class":73},[67,17053,17054],{"class":77}," m_L ",[67,17056,2438],{"class":73},[67,17058,17059],{"class":77}," c.",[67,17061,17062],{"class":112},"getWidth",[67,17064,13768],{"class":77},[67,17066,3670],{"class":73},[67,17068,17069],{"class":77}," m_W ",[67,17071,2438],{"class":73},[67,17073,17059],{"class":77},[67,17075,17076],{"class":112},"getHeight",[67,17078,13768],{"class":77},[67,17080,3670],{"class":73},[67,17082,17083],{"class":77}," m_H)\n",[67,17085,17086],{"class":69,"line":8691},[67,17087,3231],{"class":77},[67,17089,17090,17092,17095],{"class":69,"line":8696},[67,17091,16449],{"class":73},[67,17093,17094],{"class":208}," true",[67,17096,2017],{"class":77},[67,17098,17099],{"class":69,"line":8702},[67,17100,3250],{"class":77},[67,17102,17103],{"class":69,"line":8729},[67,17104,3291],{"class":73},[67,17106,17107],{"class":69,"line":8734},[67,17108,3231],{"class":77},[67,17110,17111,17113,17116],{"class":69,"line":8740},[67,17112,16449],{"class":73},[67,17114,17115],{"class":208}," false",[67,17117,2017],{"class":77},[67,17119,17120],{"class":69,"line":8752},[67,17121,3250],{"class":77},[67,17123,17124],{"class":69,"line":8764},[67,17125,2909],{"class":77},[67,17127,17128],{"class":69,"line":8776},[67,17129,17130],{"class":202},"    \u002F\u002F私有属性\n",[67,17132,17133],{"class":69,"line":10435},[67,17134,15939],{"class":73},[67,17136,17137,17139],{"class":69,"line":10459},[67,17138,2707],{"class":73},[67,17140,16959],{"class":77},[67,17142,17143,17145],{"class":69,"line":10482},[67,17144,2707],{"class":73},[67,17146,16983],{"class":77},[67,17148,17149,17151],{"class":69,"line":10506},[67,17150,2707],{"class":73},[67,17152,17007],{"class":77},[67,17154,17155],{"class":69,"line":10511},[67,17156,177],{"emptyLinePlaceholder":176},[67,17158,17159],{"class":69,"line":10516},[67,17160,4715],{"class":77},[67,17162,17163],{"class":69,"line":10521},[67,17164,17165],{"class":202},"\u002F\u002F全局函数判断两个立方体是否相等\n",[67,17167,17168,17170,17172,17174,17176,17179,17181,17183,17186],{"class":69,"line":10530},[67,17169,2078],{"class":73},[67,17171,17024],{"class":112},[67,17173,864],{"class":77},[67,17175,17029],{"class":112},[67,17177,17178],{"class":5935}," c1",[67,17180,1236],{"class":77},[67,17182,17029],{"class":112},[67,17184,17185],{"class":5935}," c2",[67,17187,870],{"class":77},[67,17189,17190],{"class":69,"line":10535},[67,17191,2269],{"class":77},[67,17193,17194,17196,17199,17201,17203,17205,17208,17210,17213,17215,17217,17219,17221,17223,17225,17227,17229,17231,17233,17235,17237,17239,17241,17243],{"class":69,"line":10541},[67,17195,4810],{"class":73},[67,17197,17198],{"class":77}," (c1.",[67,17200,17047],{"class":112},[67,17202,13768],{"class":77},[67,17204,3670],{"class":73},[67,17206,17207],{"class":77}," c2.",[67,17209,17047],{"class":112},[67,17211,17212],{"class":77},"()) ",[67,17214,2438],{"class":73},[67,17216,17198],{"class":77},[67,17218,17062],{"class":112},[67,17220,13768],{"class":77},[67,17222,3670],{"class":73},[67,17224,17207],{"class":77},[67,17226,17062],{"class":112},[67,17228,17212],{"class":77},[67,17230,2438],{"class":73},[67,17232,17198],{"class":77},[67,17234,17076],{"class":112},[67,17236,13768],{"class":77},[67,17238,3670],{"class":73},[67,17240,17207],{"class":77},[67,17242,17076],{"class":112},[67,17244,17245],{"class":77},"());\n",[67,17247,17248],{"class":69,"line":10562},[67,17249,2288],{"class":77},[67,17251,17252,17254,17256],{"class":69,"line":10568},[67,17253,867],{"class":73},[67,17255,2695],{"class":112},[67,17257,2698],{"class":77},[67,17259,17260],{"class":69,"line":10582},[67,17261,2269],{"class":77},[67,17263,17264],{"class":69,"line":10588},[67,17265,17266],{"class":77},"    Cube c1;\n",[67,17268,17269],{"class":69,"line":10615},[67,17270,17271],{"class":202},"    \u002F\u002F输入立方体的长宽高\n",[67,17273,17274,17276,17278,17281,17283],{"class":69,"line":10624},[67,17275,2274],{"class":77},[67,17277,1900],{"class":73},[67,17279,17280],{"class":84},"\"请输入第一个立方体的长、宽、高：\"",[67,17282,1900],{"class":73},[67,17284,1922],{"class":77},[67,17286,17287,17289],{"class":69,"line":10630},[67,17288,2707],{"class":73},[67,17290,17291],{"class":77}," l,w,h,l1,w1,h1;\n",[67,17293,17294,17296,17298,17300,17302,17304,17306],{"class":69,"line":10638},[67,17295,2734],{"class":77},[67,17297,2153],{"class":73},[67,17299,1375],{"class":77},[67,17301,2153],{"class":73},[67,17303,1651],{"class":77},[67,17305,2153],{"class":73},[67,17307,16844],{"class":77},[67,17309,17310,17313,17316],{"class":69,"line":10643},[67,17311,17312],{"class":77},"    c1.",[67,17314,17315],{"class":112},"setLwh",[67,17317,17318],{"class":77},"(l,w,h);\n",[67,17320,17322],{"class":69,"line":17321},66,[67,17323,17324],{"class":202},"    \u002F\u002F面积\n",[67,17326,17328,17330,17332,17335,17337,17339,17342,17344,17346],{"class":69,"line":17327},67,[67,17329,2274],{"class":77},[67,17331,1900],{"class":73},[67,17333,17334],{"class":84},"\"立方体的表面积为：\"",[67,17336,1900],{"class":73},[67,17338,15547],{"class":77},[67,17340,17341],{"class":112},"mianji",[67,17343,3148],{"class":77},[67,17345,1900],{"class":73},[67,17347,1922],{"class":77},[67,17349,17351],{"class":69,"line":17350},68,[67,17352,17353],{"class":202},"    \u002F\u002F体积\n",[67,17355,17357,17359,17361,17364,17366,17368,17371,17373,17375],{"class":69,"line":17356},69,[67,17358,2274],{"class":77},[67,17360,1900],{"class":73},[67,17362,17363],{"class":84},"\"立方体的体积为：\"",[67,17365,1900],{"class":73},[67,17367,15547],{"class":77},[67,17369,17370],{"class":112},"tiji",[67,17372,3148],{"class":77},[67,17374,1900],{"class":73},[67,17376,1922],{"class":77},[67,17378,17380,17382,17384,17387,17389],{"class":69,"line":17379},70,[67,17381,2274],{"class":77},[67,17383,1900],{"class":73},[67,17385,17386],{"class":84},"\"请输入第二个立方体的长、宽、高：\"",[67,17388,1900],{"class":73},[67,17390,1922],{"class":77},[67,17392,17394,17396,17398,17401,17403,17406,17408],{"class":69,"line":17393},71,[67,17395,2734],{"class":77},[67,17397,2153],{"class":73},[67,17399,17400],{"class":77},"l1",[67,17402,2153],{"class":73},[67,17404,17405],{"class":77},"w1",[67,17407,2153],{"class":73},[67,17409,17410],{"class":77},"h1;\n",[67,17412,17414],{"class":69,"line":17413},72,[67,17415,17416],{"class":77},"    Cube c2;\n",[67,17418,17420,17423,17425],{"class":69,"line":17419},73,[67,17421,17422],{"class":77},"    c2.",[67,17424,17315],{"class":112},[67,17426,17427],{"class":77},"(l1,w1,h1);\n",[67,17429,17431,17433,17435,17438,17440,17443,17445,17447,17449],{"class":69,"line":17430},74,[67,17432,2274],{"class":77},[67,17434,1900],{"class":73},[67,17436,17437],{"class":84},"\"第二个立方体的表面积为：\"",[67,17439,1900],{"class":73},[67,17441,17442],{"class":77},"c2.",[67,17444,17341],{"class":112},[67,17446,3148],{"class":77},[67,17448,1900],{"class":73},[67,17450,1922],{"class":77},[67,17452,17454,17456,17458,17461,17463,17465,17467,17469,17471],{"class":69,"line":17453},75,[67,17455,2274],{"class":77},[67,17457,1900],{"class":73},[67,17459,17460],{"class":84},"\"第二个立方体的体积为：\"",[67,17462,1900],{"class":73},[67,17464,17442],{"class":77},[67,17466,17370],{"class":112},[67,17468,3148],{"class":77},[67,17470,1900],{"class":73},[67,17472,1922],{"class":77},[67,17474,17476],{"class":69,"line":17475},76,[67,17477,177],{"emptyLinePlaceholder":176},[67,17479,17481],{"class":69,"line":17480},77,[67,17482,17483],{"class":202},"    \u002F\u002F判断两个立方体的表面积和体积是否相等\n",[67,17485,17487,17489,17491,17494,17496],{"class":69,"line":17486},78,[67,17488,2274],{"class":77},[67,17490,1900],{"class":73},[67,17492,17493],{"class":84},"\"内部函数判断结果：\"",[67,17495,1900],{"class":73},[67,17497,1922],{"class":77},[67,17499,17501,17503,17505,17508],{"class":69,"line":17500},79,[67,17502,3821],{"class":73},[67,17504,17198],{"class":77},[67,17506,17507],{"class":112},"isEqual",[67,17509,17510],{"class":77},"(c2))\n",[67,17512,17514],{"class":69,"line":17513},80,[67,17515,2752],{"class":77},[67,17517,17519,17521,17523,17526,17528],{"class":69,"line":17518},81,[67,17520,4171],{"class":77},[67,17522,1900],{"class":73},[67,17524,17525],{"class":84},"\"两个立方体相等\"",[67,17527,1900],{"class":73},[67,17529,1922],{"class":77},[67,17531,17533],{"class":69,"line":17532},82,[67,17534,2909],{"class":77},[67,17536,17538],{"class":69,"line":17537},83,[67,17539,17540],{"class":73},"    else\n",[67,17542,17544],{"class":69,"line":17543},84,[67,17545,2752],{"class":77},[67,17547,17549,17551,17553,17556,17558],{"class":69,"line":17548},85,[67,17550,4171],{"class":77},[67,17552,1900],{"class":73},[67,17554,17555],{"class":84},"\"两个立方体不相等\"",[67,17557,1900],{"class":73},[67,17559,1922],{"class":77},[67,17561,17563],{"class":69,"line":17562},86,[67,17564,2909],{"class":77},[67,17566,17568],{"class":69,"line":17567},87,[67,17569,177],{"emptyLinePlaceholder":176},[67,17571,17573,17575,17577,17580,17582],{"class":69,"line":17572},88,[67,17574,2274],{"class":77},[67,17576,1900],{"class":73},[67,17578,17579],{"class":84},"\"全局函数判断结果：\"",[67,17581,1900],{"class":73},[67,17583,1922],{"class":77},[67,17585,17587,17589,17591,17593],{"class":69,"line":17586},89,[67,17588,3821],{"class":73},[67,17590,2381],{"class":77},[67,17592,17507],{"class":112},[67,17594,17595],{"class":77},"(c1, c2))\n",[67,17597,17599],{"class":69,"line":17598},90,[67,17600,2752],{"class":77},[67,17602,17604,17606,17608,17610,17612],{"class":69,"line":17603},91,[67,17605,4171],{"class":77},[67,17607,1900],{"class":73},[67,17609,17525],{"class":84},[67,17611,1900],{"class":73},[67,17613,1922],{"class":77},[67,17615,17617],{"class":69,"line":17616},92,[67,17618,2909],{"class":77},[67,17620,17622],{"class":69,"line":17621},93,[67,17623,17540],{"class":73},[67,17625,17627],{"class":69,"line":17626},94,[67,17628,2752],{"class":77},[67,17630,17632,17634,17636,17638,17640],{"class":69,"line":17631},95,[67,17633,4171],{"class":77},[67,17635,1900],{"class":73},[67,17637,17555],{"class":84},[67,17639,1900],{"class":73},[67,17641,1922],{"class":77},[67,17643,17645],{"class":69,"line":17644},96,[67,17646,2909],{"class":77},[67,17648,17650],{"class":69,"line":17649},97,[67,17651,2288],{"class":77},[815,17653,17654],{"start":143},[818,17655,17656],{},[336,17657,17658],{},"练习案例2：点和圆的关系",[1863,17660,17661],{},[818,17662,17663],{},"设计一个圆形类（Circle），和一个点类（Point），计算点和圆的关系。",[57,17665,17667],{"className":852,"code":17666,"language":854,"meta":62,"style":62},"#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",[64,17668,17669,17675,17685,17692,17699,17703,17707,17712,17746,17751,17767,17781,17785,17789,17796,17803,17807,17813,17817,17821,17825,17847,17870,17875,17889,17904,17908,17912,17918,17923,17928,17932,17958,17962,17992,18020,18048,18065,18069,18082,18086,18090,18094,18107,18111,18115,18123,18127,18131,18135,18140,18144,18155,18162,18171,18181,18192,18199,18212,18223,18233,18244,18251,18265,18270,18280,18288],{"__ignoreMap":62},[67,17670,17671,17673],{"class":69,"line":70},[67,17672,2672],{"class":73},[67,17674,2675],{"class":84},[67,17676,17677,17679,17681,17683],{"class":69,"line":143},[67,17678,2680],{"class":73},[67,17680,2683],{"class":73},[67,17682,2686],{"class":112},[67,17684,2017],{"class":77},[67,17686,17687,17689],{"class":69,"line":149},[67,17688,2672],{"class":73},[67,17690,17691],{"class":84},"\u003Ccmath>\n",[67,17693,17694,17696],{"class":69,"line":155},[67,17695,15411],{"class":73},[67,17697,17698],{"class":112}," Point\n",[67,17700,17701],{"class":69,"line":161},[67,17702,2269],{"class":77},[67,17704,17705],{"class":69,"line":167},[67,17706,15433],{"class":73},[67,17708,17709],{"class":69,"line":173},[67,17710,17711],{"class":202},"    \u002F\u002F赋值\n",[67,17713,17714,17716,17719,17721,17723,17726,17728,17730,17733,17736,17738,17741,17743],{"class":69,"line":180},[67,17715,15626],{"class":73},[67,17717,17718],{"class":112}," setPoint",[67,17720,864],{"class":77},[67,17722,14754],{"class":73},[67,17724,17725],{"class":5935}," x",[67,17727,13153],{"class":77},[67,17729,14754],{"class":73},[67,17731,17732],{"class":5935}," y",[67,17734,17735],{"class":77},") { m_x ",[67,17737,909],{"class":73},[67,17739,17740],{"class":77}," x; m_y ",[67,17742,909],{"class":73},[67,17744,17745],{"class":77}," y; }\n",[67,17747,17748],{"class":69,"line":186},[67,17749,17750],{"class":202},"    \u002F\u002F获取坐标\n",[67,17752,17753,17755,17758,17761,17764],{"class":69,"line":444},[67,17754,15455],{"class":73},[67,17756,17757],{"class":112}," getX",[67,17759,17760],{"class":77},"() { ",[67,17762,17763],{"class":73},"return",[67,17765,17766],{"class":77}," m_x; }\n",[67,17768,17769,17771,17774,17776,17778],{"class":69,"line":2335},[67,17770,15455],{"class":73},[67,17772,17773],{"class":112}," getY",[67,17775,17760],{"class":77},[67,17777,17763],{"class":73},[67,17779,17780],{"class":77}," m_y; }\n",[67,17782,17783],{"class":69,"line":2340},[67,17784,177],{"emptyLinePlaceholder":176},[67,17786,17787],{"class":69,"line":2346},[67,17788,15939],{"class":73},[67,17790,17791,17793],{"class":69,"line":2351},[67,17792,15455],{"class":73},[67,17794,17795],{"class":77}," m_x;\n",[67,17797,17798,17800],{"class":69,"line":2365},[67,17799,15455],{"class":73},[67,17801,17802],{"class":77}," m_y;\n",[67,17804,17805],{"class":69,"line":2370},[67,17806,4715],{"class":77},[67,17808,17809,17811],{"class":69,"line":2376},[67,17810,15411],{"class":73},[67,17812,15414],{"class":112},[67,17814,17815],{"class":69,"line":2397},[67,17816,2269],{"class":77},[67,17818,17819],{"class":69,"line":2402},[67,17820,15433],{"class":73},[67,17822,17823],{"class":69,"line":2416},[67,17824,17711],{"class":202},[67,17826,17827,17829,17832,17834,17836,17839,17842,17844],{"class":69,"line":2421},[67,17828,15626],{"class":73},[67,17830,17831],{"class":112}," setRadius",[67,17833,864],{"class":77},[67,17835,14754],{"class":73},[67,17837,17838],{"class":5935}," r",[67,17840,17841],{"class":77},") { m_r ",[67,17843,909],{"class":73},[67,17845,17846],{"class":77}," r; }\n",[67,17848,17849,17851,17854,17856,17859,17862,17865,17867],{"class":69,"line":2450},[67,17850,15626],{"class":73},[67,17852,17853],{"class":112}," setCenter",[67,17855,864],{"class":77},[67,17857,17858],{"class":112},"Point",[67,17860,17861],{"class":5935}," center",[67,17863,17864],{"class":77},") { m_center ",[67,17866,909],{"class":73},[67,17868,17869],{"class":77}," center; }\n",[67,17871,17872],{"class":69,"line":2455},[67,17873,17874],{"class":202},"    \u002F\u002F获取属性\n",[67,17876,17877,17879,17882,17884,17886],{"class":69,"line":2472},[67,17878,15455],{"class":73},[67,17880,17881],{"class":112}," getRadius",[67,17883,17760],{"class":77},[67,17885,17763],{"class":73},[67,17887,17888],{"class":77}," m_r; }\n",[67,17890,17891,17894,17897,17899,17901],{"class":69,"line":2477},[67,17892,17893],{"class":112},"    Point",[67,17895,17896],{"class":112}," getCenter",[67,17898,17760],{"class":77},[67,17900,17763],{"class":73},[67,17902,17903],{"class":77}," m_center; }\n",[67,17905,17906],{"class":69,"line":2482},[67,17907,177],{"emptyLinePlaceholder":176},[67,17909,17910],{"class":69,"line":2487},[67,17911,15939],{"class":73},[67,17913,17914,17916],{"class":69,"line":2501},[67,17915,15455],{"class":73},[67,17917,15445],{"class":77},[67,17919,17920],{"class":69,"line":2506},[67,17921,17922],{"class":202},"    \u002F\u002F在类中可以让另一个类作为本来的成员\n",[67,17924,17925],{"class":69,"line":3298},[67,17926,17927],{"class":77},"    Point m_center;\n",[67,17929,17930],{"class":69,"line":3312},[67,17931,4715],{"class":77},[67,17933,17934,17936,17939,17941,17944,17946,17948,17950,17952,17954,17956],{"class":69,"line":3320},[67,17935,6083],{"class":73},[67,17937,17938],{"class":112}," isInCircle",[67,17940,864],{"class":77},[67,17942,17943],{"class":112},"Circle",[67,17945,11302],{"class":73},[67,17947,1146],{"class":5935},[67,17949,1236],{"class":77},[67,17951,17858],{"class":112},[67,17953,11302],{"class":73},[67,17955,19],{"class":5935},[67,17957,870],{"class":77},[67,17959,17960],{"class":69,"line":3325},[67,17961,2269],{"class":77},[67,17963,17964,17966,17969,17971,17973,17976,17979,17982,17984,17986,17988,17990],{"class":69,"line":3331},[67,17965,15455],{"class":73},[67,17967,17968],{"class":77}," dx ",[67,17970,909],{"class":73},[67,17972,17059],{"class":77},[67,17974,17975],{"class":112},"getCenter",[67,17977,17978],{"class":77},"().",[67,17980,17981],{"class":112},"getX",[67,17983,13768],{"class":77},[67,17985,1389],{"class":73},[67,17987,16605],{"class":77},[67,17989,17981],{"class":112},[67,17991,6355],{"class":77},[67,17993,17994,17996,17999,18001,18003,18005,18007,18010,18012,18014,18016,18018],{"class":69,"line":3337},[67,17995,15455],{"class":73},[67,17997,17998],{"class":77}," dy ",[67,18000,909],{"class":73},[67,18002,17059],{"class":77},[67,18004,17975],{"class":112},[67,18006,17978],{"class":77},[67,18008,18009],{"class":112},"getY",[67,18011,13768],{"class":77},[67,18013,1389],{"class":73},[67,18015,16605],{"class":77},[67,18017,18009],{"class":112},[67,18019,6355],{"class":77},[67,18021,18022,18024,18027,18029,18032,18035,18037,18039,18041,18043,18045],{"class":69,"line":3342},[67,18023,15455],{"class":73},[67,18025,18026],{"class":77}," distance ",[67,18028,909],{"class":73},[67,18030,18031],{"class":112}," sqrt",[67,18033,18034],{"class":77},"(dx ",[67,18036,1312],{"class":73},[67,18038,17968],{"class":77},[67,18040,1338],{"class":73},[67,18042,17998],{"class":77},[67,18044,1312],{"class":73},[67,18046,18047],{"class":77}," dy);\n",[67,18049,18050,18052,18055,18057,18059,18062],{"class":69,"line":8667},[67,18051,3821],{"class":73},[67,18053,18054],{"class":77}," (distance ",[67,18056,1766],{"class":73},[67,18058,17059],{"class":77},[67,18060,18061],{"class":112},"getRadius",[67,18063,18064],{"class":77},"())\n",[67,18066,18067],{"class":69,"line":8691},[67,18068,2752],{"class":77},[67,18070,18071,18073,18075,18078,18080],{"class":69,"line":8696},[67,18072,10388],{"class":77},[67,18074,1900],{"class":73},[67,18076,18077],{"class":84}," \"点在圆内\"",[67,18079,2168],{"class":73},[67,18081,9559],{"class":77},[67,18083,18084],{"class":69,"line":8702},[67,18085,2909],{"class":77},[67,18087,18088],{"class":69,"line":8729},[67,18089,17540],{"class":73},[67,18091,18092],{"class":69,"line":8734},[67,18093,2752],{"class":77},[67,18095,18096,18098,18100,18103,18105],{"class":69,"line":8740},[67,18097,10388],{"class":77},[67,18099,1900],{"class":73},[67,18101,18102],{"class":84}," \"点在圆外\"",[67,18104,2168],{"class":73},[67,18106,9559],{"class":77},[67,18108,18109],{"class":69,"line":8752},[67,18110,2909],{"class":77},[67,18112,18113],{"class":69,"line":8764},[67,18114,2288],{"class":77},[67,18116,18117,18119,18121],{"class":69,"line":8776},[67,18118,867],{"class":73},[67,18120,2695],{"class":112},[67,18122,2698],{"class":77},[67,18124,18125],{"class":69,"line":10435},[67,18126,2269],{"class":77},[67,18128,18129],{"class":69,"line":10459},[67,18130,15770],{"class":202},[67,18132,18133],{"class":69,"line":10482},[67,18134,15517],{"class":77},[67,18136,18137],{"class":69,"line":10506},[67,18138,18139],{"class":77},"    Point p1;\n",[67,18141,18142],{"class":69,"line":10511},[67,18143,17711],{"class":202},[67,18145,18146,18148,18150,18153],{"class":69,"line":10516},[67,18147,2274],{"class":77},[67,18149,1900],{"class":73},[67,18151,18152],{"class":84},"\"请输入圆的半径：\"",[67,18154,2017],{"class":77},[67,18156,18157,18159],{"class":69,"line":10521},[67,18158,15455],{"class":73},[67,18160,18161],{"class":77}," r;\n",[67,18163,18164,18166,18168],{"class":69,"line":10530},[67,18165,2734],{"class":77},[67,18167,2153],{"class":73},[67,18169,18170],{"class":77},"r;\n",[67,18172,18173,18175,18178],{"class":69,"line":10535},[67,18174,17312],{"class":77},[67,18176,18177],{"class":112},"setRadius",[67,18179,18180],{"class":77},"(r);\n",[67,18182,18183,18185,18187,18190],{"class":69,"line":10541},[67,18184,2274],{"class":77},[67,18186,1900],{"class":73},[67,18188,18189],{"class":84},"\"请输入圆心坐标：\"",[67,18191,2017],{"class":77},[67,18193,18194,18196],{"class":69,"line":10562},[67,18195,15455],{"class":73},[67,18197,18198],{"class":77}," x, y;\n",[67,18200,18201,18203,18205,18207,18209],{"class":69,"line":10568},[67,18202,2734],{"class":77},[67,18204,2153],{"class":73},[67,18206,1676],{"class":77},[67,18208,2153],{"class":73},[67,18210,18211],{"class":77},"y;\n",[67,18213,18214,18217,18220],{"class":69,"line":10582},[67,18215,18216],{"class":77},"    p1.",[67,18218,18219],{"class":112},"setPoint",[67,18221,18222],{"class":77},"(x, y);\n",[67,18224,18225,18227,18230],{"class":69,"line":10588},[67,18226,17312],{"class":77},[67,18228,18229],{"class":112},"setCenter",[67,18231,18232],{"class":77},"(p1);\n",[67,18234,18235,18237,18239,18242],{"class":69,"line":10615},[67,18236,2274],{"class":77},[67,18238,1900],{"class":73},[67,18240,18241],{"class":84},"\"请输入测试点坐标：\"",[67,18243,2017],{"class":77},[67,18245,18246,18248],{"class":69,"line":10624},[67,18247,15455],{"class":73},[67,18249,18250],{"class":77}," x1, y1;\n",[67,18252,18253,18255,18257,18260,18262],{"class":69,"line":10630},[67,18254,2734],{"class":77},[67,18256,2153],{"class":73},[67,18258,18259],{"class":77},"x1",[67,18261,2153],{"class":73},[67,18263,18264],{"class":77},"y1;\n",[67,18266,18267],{"class":69,"line":10638},[67,18268,18269],{"class":77},"    Point p2;\n",[67,18271,18272,18275,18277],{"class":69,"line":10643},[67,18273,18274],{"class":77},"    p2.",[67,18276,18219],{"class":112},[67,18278,18279],{"class":77},"(x1, y1);\n",[67,18281,18282,18285],{"class":69,"line":17321},[67,18283,18284],{"class":112},"    isInCircle",[67,18286,18287],{"class":77},"(c1, p2);\n",[67,18289,18290],{"class":69,"line":17327},[67,18291,2288],{"class":77},[19,18293,18294],{},"在类中可以让另一个类作为本来的成员",[19,18296,18297],{},"这个案例非常重要的一点在于类和对象封装成一个单独文件",[19,18299,18300],{},"创建point.h",[57,18302,18304],{"className":852,"code":18303,"language":854,"meta":62,"style":62},"#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",[64,18305,18306,18317,18323,18333,18339,18343,18348,18352,18356,18376,18380,18388,18396,18400,18404,18410,18416],{"__ignoreMap":62},[67,18307,18308,18311,18314],{"class":69,"line":70},[67,18309,18310],{"class":73},"#pragma",[67,18312,18313],{"class":112}," once",[67,18315,18316],{"class":202}," \u002F\u002F防止头文件重复包含\n",[67,18318,18319,18321],{"class":69,"line":143},[67,18320,2672],{"class":73},[67,18322,2675],{"class":84},[67,18324,18325,18327,18329,18331],{"class":69,"line":149},[67,18326,2680],{"class":73},[67,18328,2683],{"class":73},[67,18330,2686],{"class":112},[67,18332,2017],{"class":77},[67,18334,18335,18337],{"class":69,"line":155},[67,18336,15411],{"class":73},[67,18338,17698],{"class":112},[67,18340,18341],{"class":69,"line":161},[67,18342,2269],{"class":77},[67,18344,18345],{"class":69,"line":167},[67,18346,18347],{"class":202},"\u002F\u002F做好声明与变量定义就可以\n",[67,18349,18350],{"class":69,"line":173},[67,18351,15433],{"class":73},[67,18353,18354],{"class":69,"line":180},[67,18355,17711],{"class":202},[67,18357,18358,18360,18362,18364,18366,18368,18370,18372,18374],{"class":69,"line":186},[67,18359,15626],{"class":73},[67,18361,17718],{"class":112},[67,18363,864],{"class":77},[67,18365,14754],{"class":73},[67,18367,17725],{"class":5935},[67,18369,13153],{"class":77},[67,18371,14754],{"class":73},[67,18373,17732],{"class":5935},[67,18375,3440],{"class":77},[67,18377,18378],{"class":69,"line":444},[67,18379,17750],{"class":202},[67,18381,18382,18384,18386],{"class":69,"line":2335},[67,18383,15455],{"class":73},[67,18385,17757],{"class":112},[67,18387,6355],{"class":77},[67,18389,18390,18392,18394],{"class":69,"line":2340},[67,18391,15455],{"class":73},[67,18393,17773],{"class":112},[67,18395,6355],{"class":77},[67,18397,18398],{"class":69,"line":2346},[67,18399,177],{"emptyLinePlaceholder":176},[67,18401,18402],{"class":69,"line":2351},[67,18403,15939],{"class":73},[67,18405,18406,18408],{"class":69,"line":2365},[67,18407,15455],{"class":73},[67,18409,17795],{"class":77},[67,18411,18412,18414],{"class":69,"line":2370},[67,18413,15455],{"class":73},[67,18415,17802],{"class":77},[67,18417,18418],{"class":69,"line":2376},[67,18419,4715],{"class":77},[19,18421,18422],{},"创建point.cpp",[57,18424,18426],{"className":852,"code":18425,"language":854,"meta":62,"style":62},"#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",[64,18427,18428,18435,18440,18474,18478,18494],{"__ignoreMap":62},[67,18429,18430,18432],{"class":69,"line":70},[67,18431,2672],{"class":73},[67,18433,18434],{"class":84},"\u003Cpoint.h>\n",[67,18436,18437],{"class":69,"line":143},[67,18438,18439],{"class":202},"\u002F\u002F此时如果不给予他作用域就会报错，所以要加Point::\n",[67,18441,18442,18444,18447,18450,18452,18454,18456,18458,18460,18462,18464,18466,18468,18470,18472],{"class":69,"line":149},[67,18443,15626],{"class":73},[67,18445,18446],{"class":112}," Point",[67,18448,18449],{"class":77},"::",[67,18451,18219],{"class":112},[67,18453,864],{"class":77},[67,18455,14754],{"class":73},[67,18457,17725],{"class":5935},[67,18459,13153],{"class":77},[67,18461,14754],{"class":73},[67,18463,17732],{"class":5935},[67,18465,17735],{"class":77},[67,18467,909],{"class":73},[67,18469,17740],{"class":77},[67,18471,909],{"class":73},[67,18473,17745],{"class":77},[67,18475,18476],{"class":69,"line":155},[67,18477,17750],{"class":202},[67,18479,18480,18482,18484,18486,18488,18490,18492],{"class":69,"line":161},[67,18481,15455],{"class":73},[67,18483,18446],{"class":112},[67,18485,18449],{"class":77},[67,18487,17981],{"class":112},[67,18489,17760],{"class":77},[67,18491,17763],{"class":73},[67,18493,17766],{"class":77},[67,18495,18496,18498,18500,18502,18504,18506,18508],{"class":69,"line":167},[67,18497,15455],{"class":73},[67,18499,18446],{"class":112},[67,18501,18449],{"class":77},[67,18503,18009],{"class":112},[67,18505,17760],{"class":77},[67,18507,17763],{"class":73},[67,18509,17780],{"class":77},[19,18511,18512],{},"创建circle.h",[57,18514,18516],{"className":852,"code":18515,"language":854,"meta":62,"style":62},"#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",[64,18517,18518,18525,18531,18541,18547,18553,18557,18561,18565,18579,18593,18597,18605,18613,18617,18621,18627,18631,18635],{"__ignoreMap":62},[67,18519,18520,18522],{"class":69,"line":70},[67,18521,18310],{"class":73},[67,18523,18524],{"class":112}," once\n",[67,18526,18527,18529],{"class":69,"line":143},[67,18528,2672],{"class":73},[67,18530,2675],{"class":84},[67,18532,18533,18535,18537,18539],{"class":69,"line":149},[67,18534,2680],{"class":73},[67,18536,2683],{"class":73},[67,18538,2686],{"class":112},[67,18540,2017],{"class":77},[67,18542,18543,18545],{"class":69,"line":155},[67,18544,2672],{"class":73},[67,18546,18434],{"class":84},[67,18548,18549,18551],{"class":69,"line":161},[67,18550,15411],{"class":73},[67,18552,15414],{"class":112},[67,18554,18555],{"class":69,"line":167},[67,18556,2269],{"class":77},[67,18558,18559],{"class":69,"line":173},[67,18560,15433],{"class":73},[67,18562,18563],{"class":69,"line":180},[67,18564,17711],{"class":202},[67,18566,18567,18569,18571,18573,18575,18577],{"class":69,"line":186},[67,18568,15626],{"class":73},[67,18570,17831],{"class":112},[67,18572,864],{"class":77},[67,18574,14754],{"class":73},[67,18576,17838],{"class":5935},[67,18578,3440],{"class":77},[67,18580,18581,18583,18585,18587,18589,18591],{"class":69,"line":444},[67,18582,15626],{"class":73},[67,18584,17853],{"class":112},[67,18586,864],{"class":77},[67,18588,17858],{"class":112},[67,18590,17861],{"class":5935},[67,18592,3440],{"class":77},[67,18594,18595],{"class":69,"line":2335},[67,18596,17874],{"class":202},[67,18598,18599,18601,18603],{"class":69,"line":2340},[67,18600,15455],{"class":73},[67,18602,17881],{"class":112},[67,18604,6355],{"class":77},[67,18606,18607,18609,18611],{"class":69,"line":2346},[67,18608,17893],{"class":112},[67,18610,17896],{"class":112},[67,18612,6355],{"class":77},[67,18614,18615],{"class":69,"line":2351},[67,18616,177],{"emptyLinePlaceholder":176},[67,18618,18619],{"class":69,"line":2365},[67,18620,15939],{"class":73},[67,18622,18623,18625],{"class":69,"line":2370},[67,18624,15455],{"class":73},[67,18626,15445],{"class":77},[67,18628,18629],{"class":69,"line":2376},[67,18630,17922],{"class":202},[67,18632,18633],{"class":69,"line":2397},[67,18634,17927],{"class":77},[67,18636,18637],{"class":69,"line":2402},[67,18638,4715],{"class":77},[19,18640,18641],{},"创建circle.cpp",[57,18643,18645],{"className":852,"code":18644,"language":854,"meta":62,"style":62},"#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",[64,18646,18647,18654,18677,18699,18704,18720],{"__ignoreMap":62},[67,18648,18649,18651],{"class":69,"line":70},[67,18650,2672],{"class":73},[67,18652,18653],{"class":84},"\u003Ccircle.h>\n",[67,18655,18656,18658,18661,18663,18665,18667,18669,18671,18673,18675],{"class":69,"line":143},[67,18657,6083],{"class":73},[67,18659,18660],{"class":112}," Circle",[67,18662,18449],{"class":77},[67,18664,18177],{"class":112},[67,18666,864],{"class":77},[67,18668,14754],{"class":73},[67,18670,17838],{"class":5935},[67,18672,17841],{"class":77},[67,18674,909],{"class":73},[67,18676,17846],{"class":77},[67,18678,18679,18681,18683,18685,18687,18689,18691,18693,18695,18697],{"class":69,"line":149},[67,18680,6083],{"class":73},[67,18682,18660],{"class":112},[67,18684,18449],{"class":77},[67,18686,18229],{"class":112},[67,18688,864],{"class":77},[67,18690,17858],{"class":112},[67,18692,17861],{"class":5935},[67,18694,17864],{"class":77},[67,18696,909],{"class":73},[67,18698,17869],{"class":77},[67,18700,18701],{"class":69,"line":155},[67,18702,18703],{"class":202},"\u002F\u002F获取属性\n",[67,18705,18706,18708,18710,18712,18714,18716,18718],{"class":69,"line":161},[67,18707,14754],{"class":73},[67,18709,18660],{"class":112},[67,18711,18449],{"class":77},[67,18713,18061],{"class":112},[67,18715,17760],{"class":77},[67,18717,17763],{"class":73},[67,18719,17888],{"class":77},[67,18721,18722,18724,18726,18728,18730,18732,18734],{"class":69,"line":167},[67,18723,17858],{"class":112},[67,18725,18660],{"class":112},[67,18727,18449],{"class":77},[67,18729,17975],{"class":112},[67,18731,17760],{"class":77},[67,18733,17763],{"class":73},[67,18735,17903],{"class":77},[19,18737,18738],{},"使用封装的类",[57,18740,18742],{"className":852,"code":18741,"language":854,"meta":62,"style":62},"#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",[64,18743,18744,18750,18760,18766,18772,18796,18800,18826,18852,18876,18890,18894,18906,18910,18914,18918,18930,18934,18938,18946,18950,18954,18958,18962,18966,18976,18982,18990,18998,19008,19014,19026,19034,19042,19052,19058,19070,19074,19082,19088],{"__ignoreMap":62},[67,18745,18746,18748],{"class":69,"line":70},[67,18747,2672],{"class":73},[67,18749,2675],{"class":84},[67,18751,18752,18754,18756,18758],{"class":69,"line":143},[67,18753,2680],{"class":73},[67,18755,2683],{"class":73},[67,18757,2686],{"class":112},[67,18759,2017],{"class":77},[67,18761,18762,18764],{"class":69,"line":149},[67,18763,2672],{"class":73},[67,18765,18653],{"class":84},[67,18767,18768,18770],{"class":69,"line":155},[67,18769,2672],{"class":73},[67,18771,18434],{"class":84},[67,18773,18774,18776,18778,18780,18782,18784,18786,18788,18790,18792,18794],{"class":69,"line":161},[67,18775,6083],{"class":73},[67,18777,17938],{"class":112},[67,18779,864],{"class":77},[67,18781,17943],{"class":112},[67,18783,11302],{"class":73},[67,18785,1146],{"class":5935},[67,18787,1236],{"class":77},[67,18789,17858],{"class":112},[67,18791,11302],{"class":73},[67,18793,19],{"class":5935},[67,18795,870],{"class":77},[67,18797,18798],{"class":69,"line":167},[67,18799,2269],{"class":77},[67,18801,18802,18804,18806,18808,18810,18812,18814,18816,18818,18820,18822,18824],{"class":69,"line":173},[67,18803,15455],{"class":73},[67,18805,17968],{"class":77},[67,18807,909],{"class":73},[67,18809,17059],{"class":77},[67,18811,17975],{"class":112},[67,18813,17978],{"class":77},[67,18815,17981],{"class":112},[67,18817,13768],{"class":77},[67,18819,1389],{"class":73},[67,18821,16605],{"class":77},[67,18823,17981],{"class":112},[67,18825,6355],{"class":77},[67,18827,18828,18830,18832,18834,18836,18838,18840,18842,18844,18846,18848,18850],{"class":69,"line":180},[67,18829,15455],{"class":73},[67,18831,17998],{"class":77},[67,18833,909],{"class":73},[67,18835,17059],{"class":77},[67,18837,17975],{"class":112},[67,18839,17978],{"class":77},[67,18841,18009],{"class":112},[67,18843,13768],{"class":77},[67,18845,1389],{"class":73},[67,18847,16605],{"class":77},[67,18849,18009],{"class":112},[67,18851,6355],{"class":77},[67,18853,18854,18856,18858,18860,18862,18864,18866,18868,18870,18872,18874],{"class":69,"line":186},[67,18855,15455],{"class":73},[67,18857,18026],{"class":77},[67,18859,909],{"class":73},[67,18861,18031],{"class":112},[67,18863,18034],{"class":77},[67,18865,1312],{"class":73},[67,18867,17968],{"class":77},[67,18869,1338],{"class":73},[67,18871,17998],{"class":77},[67,18873,1312],{"class":73},[67,18875,18047],{"class":77},[67,18877,18878,18880,18882,18884,18886,18888],{"class":69,"line":444},[67,18879,3821],{"class":73},[67,18881,18054],{"class":77},[67,18883,1766],{"class":73},[67,18885,17059],{"class":77},[67,18887,18061],{"class":112},[67,18889,18064],{"class":77},[67,18891,18892],{"class":69,"line":2335},[67,18893,2752],{"class":77},[67,18895,18896,18898,18900,18902,18904],{"class":69,"line":2340},[67,18897,10388],{"class":77},[67,18899,1900],{"class":73},[67,18901,18077],{"class":84},[67,18903,2168],{"class":73},[67,18905,9559],{"class":77},[67,18907,18908],{"class":69,"line":2346},[67,18909,2909],{"class":77},[67,18911,18912],{"class":69,"line":2351},[67,18913,17540],{"class":73},[67,18915,18916],{"class":69,"line":2365},[67,18917,2752],{"class":77},[67,18919,18920,18922,18924,18926,18928],{"class":69,"line":2370},[67,18921,10388],{"class":77},[67,18923,1900],{"class":73},[67,18925,18102],{"class":84},[67,18927,2168],{"class":73},[67,18929,9559],{"class":77},[67,18931,18932],{"class":69,"line":2376},[67,18933,2909],{"class":77},[67,18935,18936],{"class":69,"line":2397},[67,18937,2288],{"class":77},[67,18939,18940,18942,18944],{"class":69,"line":2402},[67,18941,867],{"class":73},[67,18943,2695],{"class":112},[67,18945,2698],{"class":77},[67,18947,18948],{"class":69,"line":2416},[67,18949,2269],{"class":77},[67,18951,18952],{"class":69,"line":2421},[67,18953,15770],{"class":202},[67,18955,18956],{"class":69,"line":2450},[67,18957,15517],{"class":77},[67,18959,18960],{"class":69,"line":2455},[67,18961,18139],{"class":77},[67,18963,18964],{"class":69,"line":2472},[67,18965,17711],{"class":202},[67,18967,18968,18970,18972,18974],{"class":69,"line":2477},[67,18969,2274],{"class":77},[67,18971,1900],{"class":73},[67,18973,18152],{"class":84},[67,18975,2017],{"class":77},[67,18977,18978,18980],{"class":69,"line":2482},[67,18979,15455],{"class":73},[67,18981,18161],{"class":77},[67,18983,18984,18986,18988],{"class":69,"line":2487},[67,18985,2734],{"class":77},[67,18987,2153],{"class":73},[67,18989,18170],{"class":77},[67,18991,18992,18994,18996],{"class":69,"line":2501},[67,18993,17312],{"class":77},[67,18995,18177],{"class":112},[67,18997,18180],{"class":77},[67,18999,19000,19002,19004,19006],{"class":69,"line":2506},[67,19001,2274],{"class":77},[67,19003,1900],{"class":73},[67,19005,18189],{"class":84},[67,19007,2017],{"class":77},[67,19009,19010,19012],{"class":69,"line":3298},[67,19011,15455],{"class":73},[67,19013,18198],{"class":77},[67,19015,19016,19018,19020,19022,19024],{"class":69,"line":3312},[67,19017,2734],{"class":77},[67,19019,2153],{"class":73},[67,19021,1676],{"class":77},[67,19023,2153],{"class":73},[67,19025,18211],{"class":77},[67,19027,19028,19030,19032],{"class":69,"line":3320},[67,19029,18216],{"class":77},[67,19031,18219],{"class":112},[67,19033,18222],{"class":77},[67,19035,19036,19038,19040],{"class":69,"line":3325},[67,19037,17312],{"class":77},[67,19039,18229],{"class":112},[67,19041,18232],{"class":77},[67,19043,19044,19046,19048,19050],{"class":69,"line":3331},[67,19045,2274],{"class":77},[67,19047,1900],{"class":73},[67,19049,18241],{"class":84},[67,19051,2017],{"class":77},[67,19053,19054,19056],{"class":69,"line":3337},[67,19055,15455],{"class":73},[67,19057,18250],{"class":77},[67,19059,19060,19062,19064,19066,19068],{"class":69,"line":3342},[67,19061,2734],{"class":77},[67,19063,2153],{"class":73},[67,19065,18259],{"class":77},[67,19067,2153],{"class":73},[67,19069,18264],{"class":77},[67,19071,19072],{"class":69,"line":8667},[67,19073,18269],{"class":77},[67,19075,19076,19078,19080],{"class":69,"line":8691},[67,19077,18274],{"class":77},[67,19079,18219],{"class":112},[67,19081,18279],{"class":77},[67,19083,19084,19086],{"class":69,"line":8696},[67,19085,18284],{"class":112},[67,19087,18287],{"class":77},[67,19089,19090],{"class":69,"line":8702},[67,19091,2288],{"class":77},[803,19093,19095],{"id":19094},"_82对象的初始化清理","8.2对象的初始化清理",[1863,19097,19098,19101],{},[818,19099,19100],{},"生活中我们买的电子产品都基本会有出厂设置，在某一天我们不用时候也会删除一些自己信息数据保证安全",[818,19102,19103],{},"C++中的面向对象来源于生活，每个对象也都会有初始设置以及 对象销毁前的清理数据的设置。",[14,19105,19107],{"id":19106},"_821构造函数和析构函数","8.2.1构造函数和析构函数",[19,19109,19110,19111,19114],{},"对象的",[336,19112,19113],{},"初始化和清理","也是两个非常重要的安全问题",[19,19116,19117],{},"​\t一个对象或者变量没有初始状态，对其使用后果是未知",[19,19119,19120],{},"​\t同样的使用完一个对象或变量，没有及时清理，也会造成一定的安全问题",[19,19122,19123,19124,19127,19128,19131],{},"c++利用了",[336,19125,19126],{},"构造函数","和",[336,19129,19130],{},"析构函数","解决上述问题，这两个函数将会被编译器自动调用，完成对象初始化和清理工作。",[19,19133,19134,19135],{},"对象的初始化和清理工作是编译器强制要我们做的事情，因此如果",[336,19136,19137],{},"我们不提供构造和析构，编译器会提供",[19,19139,19140],{},[336,19141,19142],{},"编译器提供的构造函数和析构函数是空实现。",[1863,19144,19145,19148],{},[818,19146,19147],{},"构造函数：主要作用在于创建对象时为对象的成员属性赋值，构造函数由编译器自动调用，无须手动调用。",[818,19149,19150,19151,19154],{},"析构函数：主要作用在于对象",[336,19152,19153],{},"销毁前","系统自动调用，执行一些清理工作。",[19,19156,19157,19160],{},[336,19158,19159],{},"构造函数语法：",[64,19161,19162],{},"类名(){}",[815,19164,19165,19168,19171,19174,19177],{},[818,19166,19167],{},"构造函数，没有返回值也不写void",[818,19169,19170],{},"函数名称与类名相同",[818,19172,19173],{},"构造函数可以有参数，因此可以发生重载",[818,19175,19176],{},"程序在调用对象时候会自动调用构造，无须手动调用,而且只会调用一次",[818,19178,19179,19180,260],{},"构造函数在程序运行时会自动调用，如果自己定义的话就用自己；否则就用编译器给我们生成的(例如",[64,19181,19182],{},"Person(){}",[19,19184,19185,614,19188],{},[336,19186,19187],{},"析构函数语法：",[64,19189,19190],{},"~类名(){}",[815,19192,19193,19196,19199,19205],{},[818,19194,19195],{},"析构函数，没有返回值也不写void",[818,19197,19198],{},"函数名称与类名相同,在名称前加上符号  ~",[818,19200,19201,19202],{},"析构函数不可以有参数，因此",[336,19203,19204],{},"不可以发生重载",[818,19206,19207],{},"程序在对象销毁前会自动调用析构，无须手动调用,而且只会调用一次",[57,19209,19211],{"className":852,"code":19210,"language":854,"meta":62,"style":62},"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",[64,19212,19213,19219,19223,19227,19232,19239,19243,19256,19260,19265,19272,19276,19289,19293,19297,19301,19305,19313,19317,19325,19329,19333,19341,19345,19350,19354,19361,19365,19378,19382,19390],{"__ignoreMap":62},[67,19214,19215,19217],{"class":69,"line":70},[67,19216,15411],{"class":73},[67,19218,15888],{"class":112},[67,19220,19221],{"class":69,"line":143},[67,19222,2269],{"class":77},[67,19224,19225],{"class":69,"line":149},[67,19226,15433],{"class":73},[67,19228,19229],{"class":69,"line":155},[67,19230,19231],{"class":202},"    \u002F\u002F构造函数\n",[67,19233,19234,19237],{"class":69,"line":161},[67,19235,19236],{"class":112},"    Person",[67,19238,2698],{"class":77},[67,19240,19241],{"class":69,"line":167},[67,19242,2752],{"class":77},[67,19244,19245,19247,19249,19252,19254],{"class":69,"line":173},[67,19246,10388],{"class":77},[67,19248,1900],{"class":73},[67,19250,19251],{"class":84}," \"Person的构造函数调用\"",[67,19253,2168],{"class":73},[67,19255,9559],{"class":77},[67,19257,19258],{"class":69,"line":180},[67,19259,2909],{"class":77},[67,19261,19262],{"class":69,"line":186},[67,19263,19264],{"class":202},"    \u002F\u002F析构函数\n",[67,19266,19267,19270],{"class":69,"line":444},[67,19268,19269],{"class":112},"    ~Person",[67,19271,2698],{"class":77},[67,19273,19274],{"class":69,"line":2335},[67,19275,2752],{"class":77},[67,19277,19278,19280,19282,19285,19287],{"class":69,"line":2340},[67,19279,10388],{"class":77},[67,19281,1900],{"class":73},[67,19283,19284],{"class":84}," \"Person的析构函数调用\"",[67,19286,2168],{"class":73},[67,19288,9559],{"class":77},[67,19290,19291],{"class":69,"line":2346},[67,19292,2909],{"class":77},[67,19294,19295],{"class":69,"line":2351},[67,19296,177],{"emptyLinePlaceholder":176},[67,19298,19299],{"class":69,"line":2365},[67,19300,4715],{"class":77},[67,19302,19303],{"class":69,"line":2370},[67,19304,177],{"emptyLinePlaceholder":176},[67,19306,19307,19309,19311],{"class":69,"line":2376},[67,19308,6083],{"class":73},[67,19310,6307],{"class":112},[67,19312,2698],{"class":77},[67,19314,19315],{"class":69,"line":2397},[67,19316,2269],{"class":77},[67,19318,19319,19322],{"class":69,"line":2402},[67,19320,19321],{"class":77},"    Person p;",[67,19323,19324],{"class":202},"\u002F\u002F在栈上的数据，test01执行完毕后，释放这个\n",[67,19326,19327],{"class":69,"line":2416},[67,19328,2288],{"class":77},[67,19330,19331],{"class":69,"line":2421},[67,19332,177],{"emptyLinePlaceholder":176},[67,19334,19335,19337,19339],{"class":69,"line":2450},[67,19336,867],{"class":73},[67,19338,2695],{"class":112},[67,19340,11571],{"class":77},[67,19342,19343],{"class":69,"line":2455},[67,19344,13928],{"class":77},[67,19346,19347],{"class":69,"line":2472},[67,19348,19349],{"class":202},"    \u002F\u002F test01();  调用这个会有构造和析构函数的调用\n",[67,19351,19352],{"class":69,"line":2477},[67,19353,177],{"emptyLinePlaceholder":176},[67,19355,19356,19358],{"class":69,"line":2482},[67,19357,19321],{"class":77},[67,19359,19360],{"class":202},"\u002F\u002F只有构造函数\n",[67,19362,19363],{"class":69,"line":2487},[67,19364,177],{"emptyLinePlaceholder":176},[67,19366,19367,19369,19371,19373,19375],{"class":69,"line":2501},[67,19368,3025],{"class":112},[67,19370,864],{"class":77},[67,19372,3030],{"class":84},[67,19374,6685],{"class":77},[67,19376,19377],{"class":202},"\u002F\u002F按键后程序才会结束，就会出现析构函数的调用，但是窗口很快就关了\n",[67,19379,19380],{"class":69,"line":2506},[67,19381,177],{"emptyLinePlaceholder":176},[67,19383,19384,19386,19388],{"class":69,"line":3298},[67,19385,4810],{"class":73},[67,19387,4813],{"class":208},[67,19389,2017],{"class":77},[67,19391,19392],{"class":69,"line":3312},[67,19393,2288],{"class":77},[19,19395,19396],{},"构造和析构都是必须有的实现，如果我们自己不提供，编译器会提供一个空实现的构造和析构",[14,19398,19400],{"id":19399},"_822构造函数的分类及调用","8.2.2构造函数的分类及调用",[19,19402,19403],{},"两种分类方式：",[19,19405,19406],{},"​\t按参数分为： 有参构造和无参构造",[19,19408,19409],{},"​\t按类型分为： 普通构造和拷贝构造",[19,19411,19412],{},"三种调用方式：",[19,19414,19415],{},"​\t括号法",[19,19417,19418],{},"​\t显示法",[19,19420,19421],{},"​\t隐式转换法",[57,19423,19425],{"className":852,"code":19424,"language":854,"meta":62,"style":62},"#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",[64,19426,19427,19433,19443,19448,19453,19458,19463,19467,19475,19479,19483,19487,19493,19497,19510,19514,19526,19530,19539,19552,19556,19560,19566,19570,19583,19587,19592,19608,19612,19617,19626,19639,19643,19649,19653,19658,19666,19670,19675,19679,19687,19691,19696,19701,19706,19711,19716,19720,19725,19730,19735,19740,19744,19749,19754,19770,19782,19787,19791,19796,19801,19806,19810,19815,19829,19842,19846,19854,19858,19864,19870,19878],{"__ignoreMap":62},[67,19428,19429,19431],{"class":69,"line":70},[67,19430,2672],{"class":73},[67,19432,2675],{"class":84},[67,19434,19435,19437,19439,19441],{"class":69,"line":143},[67,19436,2680],{"class":73},[67,19438,2683],{"class":73},[67,19440,2686],{"class":112},[67,19442,2017],{"class":77},[67,19444,19445],{"class":69,"line":149},[67,19446,19447],{"class":202},"\u002F\u002F1.构造函数的分类及调用\n",[67,19449,19450],{"class":69,"line":155},[67,19451,19452],{"class":202},"\u002F\u002F分类\n",[67,19454,19455],{"class":69,"line":161},[67,19456,19457],{"class":202},"\u002F\u002F  按照参数分类 无参数构造(默认构造)  有参构造\n",[67,19459,19460],{"class":69,"line":167},[67,19461,19462],{"class":202},"\u002F\u002F  按照类型分类 普通构造 拷贝构造\n",[67,19464,19465],{"class":69,"line":173},[67,19466,177],{"emptyLinePlaceholder":176},[67,19468,19469,19471,19473],{"class":69,"line":180},[67,19470,15411],{"class":73},[67,19472,16286],{"class":112},[67,19474,3395],{"class":77},[67,19476,19477],{"class":69,"line":186},[67,19478,2269],{"class":77},[67,19480,19481],{"class":69,"line":444},[67,19482,15433],{"class":73},[67,19484,19485],{"class":69,"line":2335},[67,19486,19231],{"class":202},[67,19488,19489,19491],{"class":69,"line":2340},[67,19490,19236],{"class":112},[67,19492,2698],{"class":77},[67,19494,19495],{"class":69,"line":2346},[67,19496,2752],{"class":77},[67,19498,19499,19501,19503,19506,19508],{"class":69,"line":2351},[67,19500,4171],{"class":77},[67,19502,1900],{"class":73},[67,19504,19505],{"class":84},"\"Person构造函数无参构造\"",[67,19507,1900],{"class":73},[67,19509,1922],{"class":77},[67,19511,19512],{"class":69,"line":2365},[67,19513,2909],{"class":77},[67,19515,19516,19518,19520,19522,19524],{"class":69,"line":2370},[67,19517,19236],{"class":112},[67,19519,864],{"class":77},[67,19521,867],{"class":73},[67,19523,2122],{"class":5935},[67,19525,870],{"class":77},[67,19527,19528],{"class":69,"line":2376},[67,19529,2752],{"class":77},[67,19531,19532,19535,19537],{"class":69,"line":2397},[67,19533,19534],{"class":77},"        age",[67,19536,909],{"class":73},[67,19538,6916],{"class":77},[67,19540,19541,19543,19545,19548,19550],{"class":69,"line":2402},[67,19542,4171],{"class":77},[67,19544,1900],{"class":73},[67,19546,19547],{"class":84},"\"Person构造函数有参构造\"",[67,19549,1900],{"class":73},[67,19551,1922],{"class":77},[67,19553,19554],{"class":69,"line":2416},[67,19555,2909],{"class":77},[67,19557,19558],{"class":69,"line":2421},[67,19559,19264],{"class":202},[67,19561,19562,19564],{"class":69,"line":2450},[67,19563,19269],{"class":112},[67,19565,2698],{"class":77},[67,19567,19568],{"class":69,"line":2455},[67,19569,2752],{"class":77},[67,19571,19572,19574,19576,19579,19581],{"class":69,"line":2472},[67,19573,4171],{"class":77},[67,19575,1900],{"class":73},[67,19577,19578],{"class":84},"\"Person析构函数被调用\"",[67,19580,1900],{"class":73},[67,19582,1922],{"class":77},[67,19584,19585],{"class":69,"line":2477},[67,19586,2909],{"class":77},[67,19588,19589],{"class":69,"line":2482},[67,19590,19591],{"class":202},"    \u002F\u002F拷贝构造函数\n",[67,19593,19594,19596,19598,19600,19602,19604,19606],{"class":69,"line":2487},[67,19595,19236],{"class":112},[67,19597,864],{"class":77},[67,19599,7511],{"class":73},[67,19601,16286],{"class":112},[67,19603,11302],{"class":73},[67,19605,19],{"class":5935},[67,19607,870],{"class":77},[67,19609,19610],{"class":69,"line":2501},[67,19611,2752],{"class":77},[67,19613,19614],{"class":69,"line":2506},[67,19615,19616],{"class":202},"        \u002F\u002F将传入对象的age赋值给当前对象的age\n",[67,19618,19619,19621,19623],{"class":69,"line":3298},[67,19620,19534],{"class":77},[67,19622,909],{"class":73},[67,19624,19625],{"class":77},"p.age;\n",[67,19627,19628,19630,19632,19635,19637],{"class":69,"line":3312},[67,19629,4171],{"class":77},[67,19631,1900],{"class":73},[67,19633,19634],{"class":84},"\"Person拷贝构造函数被调用\"",[67,19636,1900],{"class":73},[67,19638,1922],{"class":77},[67,19640,19641],{"class":69,"line":3320},[67,19642,2909],{"class":77},[67,19644,19645,19647],{"class":69,"line":3325},[67,19646,2707],{"class":73},[67,19648,8516],{"class":77},[67,19650,19651],{"class":69,"line":3331},[67,19652,4715],{"class":77},[67,19654,19655],{"class":69,"line":3337},[67,19656,19657],{"class":202},"\u002F\u002F调用\n",[67,19659,19660,19662,19664],{"class":69,"line":3342},[67,19661,6083],{"class":73},[67,19663,6307],{"class":112},[67,19665,2698],{"class":77},[67,19667,19668],{"class":69,"line":8667},[67,19669,2269],{"class":77},[67,19671,19672],{"class":69,"line":8691},[67,19673,19674],{"class":202},"    \u002F\u002F Person p1;\u002F\u002F默认构造函数调用\n",[67,19676,19677],{"class":69,"line":8696},[67,19678,2288],{"class":77},[67,19680,19681,19683,19685],{"class":69,"line":8702},[67,19682,6083],{"class":73},[67,19684,6376],{"class":112},[67,19686,2698],{"class":77},[67,19688,19689],{"class":69,"line":8729},[67,19690,2269],{"class":77},[67,19692,19693],{"class":69,"line":8734},[67,19694,19695],{"class":202},"    \u002F\u002F1.括号法\n",[67,19697,19698],{"class":69,"line":8740},[67,19699,19700],{"class":202},"    \u002F\u002F Person p2(10);\u002F\u002F有参构造函数调用\n",[67,19702,19703],{"class":69,"line":8752},[67,19704,19705],{"class":202},"    \u002F\u002F Person p3(p2);\u002F\u002F拷贝构造函数调用\n",[67,19707,19708],{"class":69,"line":8764},[67,19709,19710],{"class":202},"    \u002F\u002F cout\u003C\u003C\"p2的age:\"\u003C\u003Cp2.age\u003C\u003Cendl;\n",[67,19712,19713],{"class":69,"line":8776},[67,19714,19715],{"class":202},"    \u002F\u002F cout\u003C\u003C\"p3的age:\"\u003C\u003Cp3.age\u003C\u003Cendl;\n",[67,19717,19718],{"class":69,"line":10435},[67,19719,177],{"emptyLinePlaceholder":176},[67,19721,19722],{"class":69,"line":10459},[67,19723,19724],{"class":202},"    \u002F\u002F注意事项\n",[67,19726,19727],{"class":69,"line":10482},[67,19728,19729],{"class":202},"    \u002F\u002F调用默认构造函数时候，不要加()\n",[67,19731,19732],{"class":69,"line":10506},[67,19733,19734],{"class":202},"    \u002F\u002F因为下面这行代码，编译器会认为是一个函数的声明,不会认为在创建对象\n",[67,19736,19737],{"class":69,"line":10511},[67,19738,19739],{"class":202},"    \u002F\u002F Person p4();\n",[67,19741,19742],{"class":69,"line":10516},[67,19743,177],{"emptyLinePlaceholder":176},[67,19745,19746],{"class":69,"line":10521},[67,19747,19748],{"class":202},"    \u002F\u002F2.显示法\n",[67,19750,19751],{"class":69,"line":10530},[67,19752,19753],{"class":77},"    Person p1;\n",[67,19755,19756,19759,19761,19764,19766,19768],{"class":69,"line":10535},[67,19757,19758],{"class":77},"    Person p2",[67,19760,909],{"class":73},[67,19762,19763],{"class":112},"Person",[67,19765,864],{"class":77},[67,19767,1303],{"class":208},[67,19769,3440],{"class":77},[67,19771,19772,19775,19777,19779],{"class":69,"line":10541},[67,19773,19774],{"class":77},"    Person p3",[67,19776,909],{"class":73},[67,19778,19763],{"class":112},[67,19780,19781],{"class":77},"(p2);\n",[67,19783,19784],{"class":69,"line":10562},[67,19785,19786],{"class":202},"    \u002F\u002F 如果单独拿出右侧Person(10);，这是个匿名对象\n",[67,19788,19789],{"class":69,"line":10568},[67,19790,177],{"emptyLinePlaceholder":176},[67,19792,19793],{"class":69,"line":10582},[67,19794,19795],{"class":202},"    \u002F\u002F 注意事项2\n",[67,19797,19798],{"class":69,"line":10588},[67,19799,19800],{"class":202},"    \u002F\u002F 不要利用拷贝构造函数  初始化匿名对象\n",[67,19802,19803],{"class":69,"line":10615},[67,19804,19805],{"class":202},"    \u002F\u002F Person(p2);  编译器会认为 Person (p2)===Person p2； 错误的 编译器会认为是对象的声明   \n",[67,19807,19808],{"class":69,"line":10624},[67,19809,177],{"emptyLinePlaceholder":176},[67,19811,19812],{"class":69,"line":10630},[67,19813,19814],{"class":202},"    \u002F\u002F3.隐士转换法\n",[67,19816,19817,19820,19822,19824,19826],{"class":69,"line":10638},[67,19818,19819],{"class":77},"    Person p4",[67,19821,909],{"class":73},[67,19823,1303],{"class":208},[67,19825,918],{"class":77},[67,19827,19828],{"class":202},"  \u002F\u002F 这里会调用有参构造函数  相当于Person p4=Person(10);\n",[67,19830,19831,19834,19836,19839],{"class":69,"line":10643},[67,19832,19833],{"class":77},"    Person p5",[67,19835,909],{"class":73},[67,19837,19838],{"class":77},"p4;",[67,19840,19841],{"class":202}," \u002F\u002F 这里会调用拷贝构造函数\n",[67,19843,19844],{"class":69,"line":17321},[67,19845,2288],{"class":77},[67,19847,19848,19850,19852],{"class":69,"line":17327},[67,19849,867],{"class":73},[67,19851,2695],{"class":112},[67,19853,2698],{"class":77},[67,19855,19856],{"class":69,"line":17350},[67,19857,2269],{"class":77},[67,19859,19860,19862],{"class":69,"line":17356},[67,19861,6352],{"class":112},[67,19863,6355],{"class":77},[67,19865,19866,19868],{"class":69,"line":17379},[67,19867,6421],{"class":112},[67,19869,6355],{"class":77},[67,19871,19872,19874,19876],{"class":69,"line":17393},[67,19873,4810],{"class":73},[67,19875,4813],{"class":208},[67,19877,2017],{"class":77},[67,19879,19880],{"class":69,"line":17413},[67,19881,2288],{"class":77},[19,19883,19884,19887],{},[336,19885,19886],{},"匿名对象的特点","：当前行执行结束后，系统会立即回收掉匿名对象",[14,19889,19891],{"id":19890},"_823拷贝构造函数","8.2.3拷贝构造函数",[19,19893,19894],{},"C++中拷贝构造函数调用时机通常有三种情况",[1863,19896,19897,19900,19903],{},[818,19898,19899],{},"使用一个已经创建完毕的对象来初始化一个新对象",[818,19901,19902],{},"值传递的方式给函数参数传值",[818,19904,19905],{},"以值方式返回局部对象",[57,19907,19909],{"className":852,"code":19908,"language":854,"meta":62,"style":62},"#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",[64,19910,19911,19917,19927,19931,19936,19940,19945,19950,19955,19961,19965,19969,19975,19979,19992,19996,20001,20013,20017,20025,20038,20042,20046,20062,20066,20075,20088,20092,20098,20102,20114,20118,20124,20128,20132,20140,20144,20157,20165,20183,20187,20192,20197,20212,20216,20229,20233,20241,20245,20249,20257,20261,20266,20275,20279,20283,20308,20318,20322,20330,20334,20345,20370,20374,20378,20382,20390,20394,20399,20404,20411,20416,20421,20426,20431,20435,20440,20444,20449,20453,20458,20463,20467,20471,20476,20481,20489],{"__ignoreMap":62},[67,19912,19913,19915],{"class":69,"line":70},[67,19914,2672],{"class":73},[67,19916,2675],{"class":84},[67,19918,19919,19921,19923,19925],{"class":69,"line":143},[67,19920,2680],{"class":73},[67,19922,2683],{"class":73},[67,19924,2686],{"class":112},[67,19926,2017],{"class":77},[67,19928,19929],{"class":69,"line":149},[67,19930,177],{"emptyLinePlaceholder":176},[67,19932,19933],{"class":69,"line":155},[67,19934,19935],{"class":202},"\u002F\u002F拷贝构造函数调用时机\n",[67,19937,19938],{"class":69,"line":161},[67,19939,177],{"emptyLinePlaceholder":176},[67,19941,19942],{"class":69,"line":167},[67,19943,19944],{"class":202},"\u002F\u002F1.使用一个已经创建好的对象来初始化一个新对象\n",[67,19946,19947],{"class":69,"line":173},[67,19948,19949],{"class":202},"\u002F\u002F2.值传递的方式给函数参数传值\n",[67,19951,19952],{"class":69,"line":180},[67,19953,19954],{"class":202},"\u002F\u002F3.以值方式返回局部对象\n",[67,19956,19957,19959],{"class":69,"line":186},[67,19958,15411],{"class":73},[67,19960,15888],{"class":112},[67,19962,19963],{"class":69,"line":444},[67,19964,2269],{"class":77},[67,19966,19967],{"class":69,"line":2335},[67,19968,15433],{"class":73},[67,19970,19971,19973],{"class":69,"line":2340},[67,19972,19236],{"class":112},[67,19974,2698],{"class":77},[67,19976,19977],{"class":69,"line":2346},[67,19978,2752],{"class":77},[67,19980,19981,19983,19985,19988,19990],{"class":69,"line":2351},[67,19982,10388],{"class":77},[67,19984,1900],{"class":73},[67,19986,19987],{"class":84}," \"Person的默认构造函数调用\"",[67,19989,2168],{"class":73},[67,19991,9559],{"class":77},[67,19993,19994],{"class":69,"line":2365},[67,19995,2909],{"class":77},[67,19997,19998],{"class":69,"line":2370},[67,19999,20000],{"class":202},"    \u002F\u002F有参构造\n",[67,20002,20003,20005,20007,20009,20011],{"class":69,"line":2376},[67,20004,19236],{"class":112},[67,20006,864],{"class":77},[67,20008,867],{"class":73},[67,20010,16406],{"class":5935},[67,20012,870],{"class":77},[67,20014,20015],{"class":69,"line":2397},[67,20016,2752],{"class":77},[67,20018,20019,20021,20023],{"class":69,"line":2402},[67,20020,16460],{"class":77},[67,20022,909],{"class":73},[67,20024,8516],{"class":77},[67,20026,20027,20029,20031,20034,20036],{"class":69,"line":2416},[67,20028,10388],{"class":77},[67,20030,1900],{"class":73},[67,20032,20033],{"class":84}," \"Person的有参构造函数调用\"",[67,20035,2168],{"class":73},[67,20037,9559],{"class":77},[67,20039,20040],{"class":69,"line":2421},[67,20041,2909],{"class":77},[67,20043,20044],{"class":69,"line":2450},[67,20045,19591],{"class":202},[67,20047,20048,20050,20052,20054,20056,20058,20060],{"class":69,"line":2455},[67,20049,19236],{"class":112},[67,20051,864],{"class":77},[67,20053,7511],{"class":73},[67,20055,16286],{"class":112},[67,20057,11302],{"class":73},[67,20059,19],{"class":5935},[67,20061,870],{"class":77},[67,20063,20064],{"class":69,"line":2472},[67,20065,2752],{"class":77},[67,20067,20068,20070,20072],{"class":69,"line":2477},[67,20069,16460],{"class":77},[67,20071,909],{"class":73},[67,20073,20074],{"class":77}," p.m_Age;\n",[67,20076,20077,20079,20081,20084,20086],{"class":69,"line":2482},[67,20078,10388],{"class":77},[67,20080,1900],{"class":73},[67,20082,20083],{"class":84}," \"Person的拷贝构造函数调用\"",[67,20085,2168],{"class":73},[67,20087,9559],{"class":77},[67,20089,20090],{"class":69,"line":2487},[67,20091,2909],{"class":77},[67,20093,20094,20096],{"class":69,"line":2501},[67,20095,19269],{"class":112},[67,20097,2698],{"class":77},[67,20099,20100],{"class":69,"line":2506},[67,20101,2752],{"class":77},[67,20103,20104,20106,20108,20110,20112],{"class":69,"line":3298},[67,20105,10388],{"class":77},[67,20107,1900],{"class":73},[67,20109,19284],{"class":84},[67,20111,2168],{"class":73},[67,20113,9559],{"class":77},[67,20115,20116],{"class":69,"line":3312},[67,20117,2909],{"class":77},[67,20119,20120,20122],{"class":69,"line":3320},[67,20121,2707],{"class":73},[67,20123,16383],{"class":77},[67,20125,20126],{"class":69,"line":3325},[67,20127,4715],{"class":77},[67,20129,20130],{"class":69,"line":3331},[67,20131,19944],{"class":202},[67,20133,20134,20136,20138],{"class":69,"line":3337},[67,20135,6083],{"class":73},[67,20137,6307],{"class":112},[67,20139,2698],{"class":77},[67,20141,20142],{"class":69,"line":3342},[67,20143,2269],{"class":77},[67,20145,20146,20149,20151,20153,20155],{"class":69,"line":8667},[67,20147,20148],{"class":77},"    Person ",[67,20150,7849],{"class":112},[67,20152,864],{"class":77},[67,20154,1556],{"class":208},[67,20156,3440],{"class":77},[67,20158,20159,20161,20163],{"class":69,"line":8691},[67,20160,20148],{"class":77},[67,20162,7752],{"class":112},[67,20164,18232],{"class":77},[67,20166,20167,20169,20171,20174,20176,20179,20181],{"class":69,"line":8696},[67,20168,2274],{"class":77},[67,20170,1900],{"class":73},[67,20172,20173],{"class":84},"\"P2的年龄为：\"",[67,20175,1900],{"class":73},[67,20177,20178],{"class":77},"p2.m_Age",[67,20180,1900],{"class":73},[67,20182,1922],{"class":77},[67,20184,20185],{"class":69,"line":8702},[67,20186,2288],{"class":77},[67,20188,20189],{"class":69,"line":8729},[67,20190,20191],{"class":202},"\u002F\u002F 2.值传递的方式给函数参数传值\n",[67,20193,20194],{"class":69,"line":8734},[67,20195,20196],{"class":202},"\u002F\u002F值传递会拷贝一个新的对象，调用拷贝构造函数\n",[67,20198,20199,20201,20204,20206,20208,20210],{"class":69,"line":8740},[67,20200,6083],{"class":73},[67,20202,20203],{"class":112}," doWork",[67,20205,864],{"class":77},[67,20207,19763],{"class":112},[67,20209,7544],{"class":5935},[67,20211,870],{"class":77},[67,20213,20214],{"class":69,"line":8752},[67,20215,2269],{"class":77},[67,20217,20218,20220,20222,20225,20227],{"class":69,"line":8764},[67,20219,7248],{"class":77},[67,20221,1900],{"class":73},[67,20223,20224],{"class":84}," \"doWork函数调用\"",[67,20226,2168],{"class":73},[67,20228,9559],{"class":77},[67,20230,20231],{"class":69,"line":8776},[67,20232,2288],{"class":77},[67,20234,20235,20237,20239],{"class":69,"line":10435},[67,20236,6083],{"class":73},[67,20238,6376],{"class":112},[67,20240,2698],{"class":77},[67,20242,20243],{"class":69,"line":10459},[67,20244,2269],{"class":77},[67,20246,20247],{"class":69,"line":10482},[67,20248,16030],{"class":77},[67,20250,20251,20254],{"class":69,"line":10506},[67,20252,20253],{"class":112},"    doWork",[67,20255,20256],{"class":77},"(p);\n",[67,20258,20259],{"class":69,"line":10511},[67,20260,2288],{"class":77},[67,20262,20263],{"class":69,"line":10516},[67,20264,20265],{"class":202},"\u002F\u002F 3.以值方式返回局部对象\n",[67,20267,20268,20270,20273],{"class":69,"line":10521},[67,20269,19763],{"class":112},[67,20271,20272],{"class":112}," doWork2",[67,20274,2698],{"class":77},[67,20276,20277],{"class":69,"line":10530},[67,20278,2269],{"class":77},[67,20280,20281],{"class":69,"line":10535},[67,20282,19753],{"class":77},[67,20284,20285,20287,20289,20291,20293,20295,20297,20299,20301,20303,20305],{"class":69,"line":10541},[67,20286,2274],{"class":77},[67,20288,1900],{"class":73},[67,20290,864],{"class":77},[67,20292,867],{"class":73},[67,20294,7237],{"class":73},[67,20296,260],{"class":77},[67,20298,1211],{"class":73},[67,20300,7849],{"class":77},[67,20302,1900],{"class":73},[67,20304,1965],{"class":77},[67,20306,20307],{"class":202},"\u002F\u002F打印p1的地址\n",[67,20309,20310,20312,20315],{"class":69,"line":10562},[67,20311,4810],{"class":73},[67,20313,20314],{"class":77}," p1;",[67,20316,20317],{"class":202},"\u002F\u002F返回局部对象，调用拷贝构造函数\n",[67,20319,20320],{"class":69,"line":10568},[67,20321,2288],{"class":77},[67,20323,20324,20326,20328],{"class":69,"line":10582},[67,20325,6083],{"class":73},[67,20327,6448],{"class":112},[67,20329,2698],{"class":77},[67,20331,20332],{"class":69,"line":10588},[67,20333,2269],{"class":77},[67,20335,20336,20339,20341,20343],{"class":69,"line":10615},[67,20337,20338],{"class":77},"    Person p ",[67,20340,909],{"class":73},[67,20342,20272],{"class":112},[67,20344,6355],{"class":77},[67,20346,20347,20349,20351,20353,20355,20357,20359,20361,20363,20365,20367],{"class":69,"line":10624},[67,20348,2274],{"class":77},[67,20350,1900],{"class":73},[67,20352,864],{"class":77},[67,20354,867],{"class":73},[67,20356,7237],{"class":73},[67,20358,260],{"class":77},[67,20360,1211],{"class":73},[67,20362,19],{"class":77},[67,20364,1900],{"class":73},[67,20366,1965],{"class":77},[67,20368,20369],{"class":202},"\u002F\u002F打印p的地址\n",[67,20371,20372],{"class":69,"line":10630},[67,20373,2288],{"class":77},[67,20375,20376],{"class":69,"line":10638},[67,20377,177],{"emptyLinePlaceholder":176},[67,20379,20380],{"class":69,"line":10643},[67,20381,177],{"emptyLinePlaceholder":176},[67,20383,20384,20386,20388],{"class":69,"line":17321},[67,20385,867],{"class":73},[67,20387,2695],{"class":112},[67,20389,2698],{"class":77},[67,20391,20392],{"class":69,"line":17327},[67,20393,2269],{"class":77},[67,20395,20396],{"class":69,"line":17350},[67,20397,20398],{"class":202},"    \u002F\u002F test01();\n",[67,20400,20401],{"class":69,"line":17356},[67,20402,20403],{"class":202},"    \u002F\u002F test02();\n",[67,20405,20406,20409],{"class":69,"line":17379},[67,20407,20408],{"class":112},"    test03",[67,20410,6355],{"class":77},[67,20412,20413],{"class":69,"line":17393},[67,20414,20415],{"class":202},"\u002F\u002F此时编译器进行了优化，返回值优化（RVO），没有调用拷贝构造函数，直接在p的地址上创建了p1对象\n",[67,20417,20418],{"class":69,"line":17413},[67,20419,20420],{"class":202},"\u002F\u002F 输出结果如下：\n",[67,20422,20423],{"class":69,"line":17419},[67,20424,20425],{"class":202},"\u002F\u002F Person的默认构造函数调用\n",[67,20427,20428],{"class":69,"line":17430},[67,20429,20430],{"class":202},"\u002F\u002F 0x7fffffffceec\n",[67,20432,20433],{"class":69,"line":17453},[67,20434,20430],{"class":202},[67,20436,20437],{"class":69,"line":17475},[67,20438,20439],{"class":202},"\u002F\u002F Person的析构函数调用\n",[67,20441,20442],{"class":69,"line":17480},[67,20443,177],{"emptyLinePlaceholder":176},[67,20445,20446],{"class":69,"line":17486},[67,20447,20448],{"class":202},"\u002F\u002F 之前的输出结果如下：\n",[67,20450,20451],{"class":69,"line":17500},[67,20452,20425],{"class":202},[67,20454,20455],{"class":69,"line":17513},[67,20456,20457],{"class":202},"\u002F\u002F 地址\n",[67,20459,20460],{"class":69,"line":17518},[67,20461,20462],{"class":202},"\u002F\u002F Person的拷贝构造函数调用\n",[67,20464,20465],{"class":69,"line":17532},[67,20466,20439],{"class":202},[67,20468,20469],{"class":69,"line":17537},[67,20470,20457],{"class":202},[67,20472,20473],{"class":69,"line":17543},[67,20474,20475],{"class":202},"\u002F\u002F (这两次输出的地址也是不同的) \n",[67,20477,20478],{"class":69,"line":17548},[67,20479,20480],{"class":202},"\u002F\u002F Person的析构函数调用     \n",[67,20482,20483,20485,20487],{"class":69,"line":17562},[67,20484,4810],{"class":73},[67,20486,4813],{"class":208},[67,20488,2017],{"class":77},[67,20490,20491],{"class":69,"line":17567},[67,20492,2288],{"class":77},[19,20494,20495],{},"简化版理解",[57,20497,20499],{"className":852,"code":20498,"language":854,"meta":62,"style":62},"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",[64,20500,20501,20509,20513,20519,20532,20543,20547,20559,20572,20580,20584,20600,20613,20622,20626,20631,20637,20650,20654,20658,20665,20669,20673,20678,20686,20690,20706,20719,20732,20736,20741,20749,20753,20757,20762,20767,20783,20791,20798,20804,20808,20812,20817,20825,20829,20833,20856,20863,20867,20871,20879,20883,20893,20915,20919,20923,20927,20935,20939,20944,20949,20955,20959,20969,20973,20981],{"__ignoreMap":62},[67,20502,20503,20505,20507],{"class":69,"line":70},[67,20504,15411],{"class":73},[67,20506,16286],{"class":112},[67,20508,16289],{"class":77},[67,20510,20511],{"class":69,"line":143},[67,20512,15433],{"class":73},[67,20514,20515,20517],{"class":69,"line":149},[67,20516,19236],{"class":112},[67,20518,11571],{"class":77},[67,20520,20521,20523,20525,20528,20530],{"class":69,"line":155},[67,20522,10388],{"class":77},[67,20524,1900],{"class":73},[67,20526,20527],{"class":84}," \"无参构造函数!\"",[67,20529,2168],{"class":73},[67,20531,9559],{"class":77},[67,20533,20534,20537,20539,20541],{"class":69,"line":161},[67,20535,20536],{"class":77},"        mAge ",[67,20538,909],{"class":73},[67,20540,4813],{"class":208},[67,20542,2017],{"class":77},[67,20544,20545],{"class":69,"line":167},[67,20546,2909],{"class":77},[67,20548,20549,20551,20553,20555,20557],{"class":69,"line":173},[67,20550,19236],{"class":112},[67,20552,864],{"class":77},[67,20554,867],{"class":73},[67,20556,16406],{"class":5935},[67,20558,13160],{"class":77},[67,20560,20561,20563,20565,20568,20570],{"class":69,"line":180},[67,20562,10388],{"class":77},[67,20564,1900],{"class":73},[67,20566,20567],{"class":84}," \"有参构造函数!\"",[67,20569,2168],{"class":73},[67,20571,9559],{"class":77},[67,20573,20574,20576,20578],{"class":69,"line":186},[67,20575,20536],{"class":77},[67,20577,909],{"class":73},[67,20579,8516],{"class":77},[67,20581,20582],{"class":69,"line":444},[67,20583,2909],{"class":77},[67,20585,20586,20588,20590,20592,20594,20596,20598],{"class":69,"line":2335},[67,20587,19236],{"class":112},[67,20589,864],{"class":77},[67,20591,7511],{"class":73},[67,20593,16286],{"class":112},[67,20595,1211],{"class":73},[67,20597,7544],{"class":5935},[67,20599,13160],{"class":77},[67,20601,20602,20604,20606,20609,20611],{"class":69,"line":2340},[67,20603,10388],{"class":77},[67,20605,1900],{"class":73},[67,20607,20608],{"class":84}," \"拷贝构造函数!\"",[67,20610,2168],{"class":73},[67,20612,9559],{"class":77},[67,20614,20615,20617,20619],{"class":69,"line":2346},[67,20616,20536],{"class":77},[67,20618,909],{"class":73},[67,20620,20621],{"class":77}," p.mAge;\n",[67,20623,20624],{"class":69,"line":2351},[67,20625,2909],{"class":77},[67,20627,20628],{"class":69,"line":2365},[67,20629,20630],{"class":202},"    \u002F\u002F析构函数在释放内存之前调用\n",[67,20632,20633,20635],{"class":69,"line":2370},[67,20634,19269],{"class":112},[67,20636,11571],{"class":77},[67,20638,20639,20641,20643,20646,20648],{"class":69,"line":2376},[67,20640,10388],{"class":77},[67,20642,1900],{"class":73},[67,20644,20645],{"class":84}," \"析构函数!\"",[67,20647,2168],{"class":73},[67,20649,9559],{"class":77},[67,20651,20652],{"class":69,"line":2397},[67,20653,2909],{"class":77},[67,20655,20656],{"class":69,"line":2402},[67,20657,15433],{"class":73},[67,20659,20660,20662],{"class":69,"line":2416},[67,20661,2707],{"class":73},[67,20663,20664],{"class":77}," mAge;\n",[67,20666,20667],{"class":69,"line":2421},[67,20668,4715],{"class":77},[67,20670,20671],{"class":69,"line":2450},[67,20672,177],{"emptyLinePlaceholder":176},[67,20674,20675],{"class":69,"line":2455},[67,20676,20677],{"class":202},"\u002F\u002F1. 使用一个已经创建完毕的对象来初始化一个新对象\n",[67,20679,20680,20682,20684],{"class":69,"line":2472},[67,20681,6083],{"class":73},[67,20683,6307],{"class":112},[67,20685,11571],{"class":77},[67,20687,20688],{"class":69,"line":2477},[67,20689,177],{"emptyLinePlaceholder":176},[67,20691,20692,20694,20697,20699,20701,20703],{"class":69,"line":2482},[67,20693,20148],{"class":77},[67,20695,20696],{"class":112},"man",[67,20698,864],{"class":77},[67,20700,1169],{"class":208},[67,20702,6685],{"class":77},[67,20704,20705],{"class":202}," \u002F\u002Fp对象已经创建完毕\n",[67,20707,20708,20710,20713,20716],{"class":69,"line":2487},[67,20709,20148],{"class":77},[67,20711,20712],{"class":112},"newman",[67,20714,20715],{"class":77},"(man);",[67,20717,20718],{"class":202}," \u002F\u002F调用拷贝构造函数\n",[67,20720,20721,20724,20726,20729],{"class":69,"line":2501},[67,20722,20723],{"class":77},"    Person newman2 ",[67,20725,909],{"class":73},[67,20727,20728],{"class":77}," man;",[67,20730,20731],{"class":202}," \u002F\u002F拷贝构造\n",[67,20733,20734],{"class":69,"line":2506},[67,20735,177],{"emptyLinePlaceholder":176},[67,20737,20738],{"class":69,"line":3298},[67,20739,20740],{"class":202},"    \u002F\u002FPerson newman3;\n",[67,20742,20743,20746],{"class":69,"line":3312},[67,20744,20745],{"class":202},"    \u002F\u002Fnewman3 = man;",[67,20747,20748],{"class":202}," \u002F\u002F不是调用拷贝构造函数，赋值操作\n",[67,20750,20751],{"class":69,"line":3320},[67,20752,2288],{"class":77},[67,20754,20755],{"class":69,"line":3325},[67,20756,177],{"emptyLinePlaceholder":176},[67,20758,20759],{"class":69,"line":3331},[67,20760,20761],{"class":202},"\u002F\u002F2. 值传递的方式给函数参数传值\n",[67,20763,20764],{"class":69,"line":3337},[67,20765,20766],{"class":202},"\u002F\u002F相当于Person p1 = p;\n",[67,20768,20769,20771,20773,20775,20777,20780],{"class":69,"line":3342},[67,20770,6083],{"class":73},[67,20772,20203],{"class":112},[67,20774,864],{"class":77},[67,20776,19763],{"class":112},[67,20778,20779],{"class":5935}," p1",[67,20781,20782],{"class":77},") {}\n",[67,20784,20785,20787,20789],{"class":69,"line":8667},[67,20786,6083],{"class":73},[67,20788,6376],{"class":112},[67,20790,11571],{"class":77},[67,20792,20793,20795],{"class":69,"line":8691},[67,20794,19321],{"class":77},[67,20796,20797],{"class":202}," \u002F\u002F无参构造函数\n",[67,20799,20800,20802],{"class":69,"line":8696},[67,20801,20253],{"class":112},[67,20803,20256],{"class":77},[67,20805,20806],{"class":69,"line":8702},[67,20807,2288],{"class":77},[67,20809,20810],{"class":69,"line":8729},[67,20811,177],{"emptyLinePlaceholder":176},[67,20813,20814],{"class":69,"line":8734},[67,20815,20816],{"class":202},"\u002F\u002F3. 以值方式返回局部对象\n",[67,20818,20819,20821,20823],{"class":69,"line":8740},[67,20820,19763],{"class":112},[67,20822,20272],{"class":112},[67,20824,2698],{"class":77},[67,20826,20827],{"class":69,"line":8752},[67,20828,2269],{"class":77},[67,20830,20831],{"class":69,"line":8764},[67,20832,19753],{"class":77},[67,20834,20835,20837,20839,20841,20843,20845,20847,20849,20852,20854],{"class":69,"line":8776},[67,20836,7248],{"class":77},[67,20838,1900],{"class":73},[67,20840,2381],{"class":77},[67,20842,867],{"class":73},[67,20844,7237],{"class":73},[67,20846,260],{"class":77},[67,20848,1211],{"class":73},[67,20850,20851],{"class":77},"p1 ",[67,20853,1900],{"class":73},[67,20855,9559],{"class":77},[67,20857,20858,20860],{"class":69,"line":10435},[67,20859,4810],{"class":73},[67,20861,20862],{"class":77}," p1;\n",[67,20864,20865],{"class":69,"line":10459},[67,20866,2288],{"class":77},[67,20868,20869],{"class":69,"line":10482},[67,20870,177],{"emptyLinePlaceholder":176},[67,20872,20873,20875,20877],{"class":69,"line":10506},[67,20874,6083],{"class":73},[67,20876,6448],{"class":112},[67,20878,2698],{"class":77},[67,20880,20881],{"class":69,"line":10511},[67,20882,2269],{"class":77},[67,20884,20885,20887,20889,20891],{"class":69,"line":10516},[67,20886,20338],{"class":77},[67,20888,909],{"class":73},[67,20890,20272],{"class":112},[67,20892,6355],{"class":77},[67,20894,20895,20897,20899,20901,20903,20905,20907,20909,20911,20913],{"class":69,"line":10521},[67,20896,7248],{"class":77},[67,20898,1900],{"class":73},[67,20900,2381],{"class":77},[67,20902,867],{"class":73},[67,20904,7237],{"class":73},[67,20906,260],{"class":77},[67,20908,1211],{"class":73},[67,20910,12166],{"class":77},[67,20912,1900],{"class":73},[67,20914,9559],{"class":77},[67,20916,20917],{"class":69,"line":10530},[67,20918,2288],{"class":77},[67,20920,20921],{"class":69,"line":10535},[67,20922,177],{"emptyLinePlaceholder":176},[67,20924,20925],{"class":69,"line":10541},[67,20926,177],{"emptyLinePlaceholder":176},[67,20928,20929,20931,20933],{"class":69,"line":10562},[67,20930,867],{"class":73},[67,20932,2695],{"class":112},[67,20934,11571],{"class":77},[67,20936,20937],{"class":69,"line":10568},[67,20938,177],{"emptyLinePlaceholder":176},[67,20940,20941],{"class":69,"line":10582},[67,20942,20943],{"class":202},"    \u002F\u002Ftest01();\n",[67,20945,20946],{"class":69,"line":10588},[67,20947,20948],{"class":202},"    \u002F\u002Ftest02();\n",[67,20950,20951,20953],{"class":69,"line":10615},[67,20952,20408],{"class":112},[67,20954,6355],{"class":77},[67,20956,20957],{"class":69,"line":10624},[67,20958,177],{"emptyLinePlaceholder":176},[67,20960,20961,20963,20965,20967],{"class":69,"line":10630},[67,20962,3025],{"class":112},[67,20964,864],{"class":77},[67,20966,3030],{"class":84},[67,20968,3440],{"class":77},[67,20970,20971],{"class":69,"line":10638},[67,20972,177],{"emptyLinePlaceholder":176},[67,20974,20975,20977,20979],{"class":69,"line":10643},[67,20976,4810],{"class":73},[67,20978,4813],{"class":208},[67,20980,2017],{"class":77},[67,20982,20983],{"class":69,"line":17321},[67,20984,2288],{"class":77},[14,20986,20988],{"id":20987},"_824构造函数的调用规则","8.2.4构造函数的调用规则",[19,20990,20991],{},"默认情况下，c++编译器至少给一个类添加3个函数",[19,20993,20994],{},"1．默认构造函数(无参，函数体为空)",[19,20996,20997],{},"2．默认析构函数(无参，函数体为空)",[19,20999,21000],{},"3．默认拷贝构造函数，对属性进行值拷贝  (值拷贝)",[19,21002,21003],{},"构造函数调用规则如下：",[1863,21005,21006,21009],{},[818,21007,21008],{},"如果用户定义有参构造函数，c++不在提供默认无参构造，但是会提供默认拷贝构造",[818,21010,21011],{},"如果用户定义拷贝构造函数，c++不会再提供其他构造函数",[57,21013,21015],{"className":852,"code":21014,"language":854,"meta":62,"style":62},"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",[64,21016,21017,21025,21029,21034,21040,21052,21056,21061,21073,21082,21094,21098,21102,21118,21127,21139,21143,21147,21153,21165,21169,21173,21179,21183,21187,21195,21199,21211,21216,21224,21228,21246,21250,21254,21262,21266,21271,21279,21294,21307,21311,21316,21323,21339,21352,21356,21360,21368,21372,21378,21382,21392,21396,21404],{"__ignoreMap":62},[67,21018,21019,21021,21023],{"class":69,"line":70},[67,21020,15411],{"class":73},[67,21022,16286],{"class":112},[67,21024,16289],{"class":77},[67,21026,21027],{"class":69,"line":143},[67,21028,15433],{"class":73},[67,21030,21031],{"class":69,"line":149},[67,21032,21033],{"class":202},"    \u002F\u002F无参（默认）构造函数\n",[67,21035,21036,21038],{"class":69,"line":155},[67,21037,19236],{"class":112},[67,21039,11571],{"class":77},[67,21041,21042,21044,21046,21048,21050],{"class":69,"line":161},[67,21043,10388],{"class":77},[67,21045,1900],{"class":73},[67,21047,20527],{"class":84},[67,21049,2168],{"class":73},[67,21051,9559],{"class":77},[67,21053,21054],{"class":69,"line":167},[67,21055,2909],{"class":77},[67,21057,21058],{"class":69,"line":173},[67,21059,21060],{"class":202},"    \u002F\u002F有参构造函数\n",[67,21062,21063,21065,21067,21069,21071],{"class":69,"line":180},[67,21064,19236],{"class":112},[67,21066,864],{"class":77},[67,21068,867],{"class":73},[67,21070,2122],{"class":5935},[67,21072,13160],{"class":77},[67,21074,21075,21078,21080],{"class":69,"line":186},[67,21076,21077],{"class":77},"        age ",[67,21079,909],{"class":73},[67,21081,2156],{"class":77},[67,21083,21084,21086,21088,21090,21092],{"class":69,"line":444},[67,21085,10388],{"class":77},[67,21087,1900],{"class":73},[67,21089,20567],{"class":84},[67,21091,2168],{"class":73},[67,21093,9559],{"class":77},[67,21095,21096],{"class":69,"line":2335},[67,21097,2909],{"class":77},[67,21099,21100],{"class":69,"line":2340},[67,21101,19591],{"class":202},[67,21103,21104,21106,21108,21110,21112,21114,21116],{"class":69,"line":2346},[67,21105,19236],{"class":112},[67,21107,864],{"class":77},[67,21109,7511],{"class":73},[67,21111,16286],{"class":112},[67,21113,1211],{"class":73},[67,21115,7544],{"class":5935},[67,21117,13160],{"class":77},[67,21119,21120,21122,21124],{"class":69,"line":2351},[67,21121,21077],{"class":77},[67,21123,909],{"class":73},[67,21125,21126],{"class":77}," p.age;\n",[67,21128,21129,21131,21133,21135,21137],{"class":69,"line":2365},[67,21130,10388],{"class":77},[67,21132,1900],{"class":73},[67,21134,20608],{"class":84},[67,21136,2168],{"class":73},[67,21138,9559],{"class":77},[67,21140,21141],{"class":69,"line":2370},[67,21142,2909],{"class":77},[67,21144,21145],{"class":69,"line":2376},[67,21146,19264],{"class":202},[67,21148,21149,21151],{"class":69,"line":2397},[67,21150,19269],{"class":112},[67,21152,11571],{"class":77},[67,21154,21155,21157,21159,21161,21163],{"class":69,"line":2402},[67,21156,10388],{"class":77},[67,21158,1900],{"class":73},[67,21160,20645],{"class":84},[67,21162,2168],{"class":73},[67,21164,9559],{"class":77},[67,21166,21167],{"class":69,"line":2416},[67,21168,2909],{"class":77},[67,21170,21171],{"class":69,"line":2421},[67,21172,15433],{"class":73},[67,21174,21175,21177],{"class":69,"line":2450},[67,21176,2707],{"class":73},[67,21178,8516],{"class":77},[67,21180,21181],{"class":69,"line":2455},[67,21182,4715],{"class":77},[67,21184,21185],{"class":69,"line":2472},[67,21186,177],{"emptyLinePlaceholder":176},[67,21188,21189,21191,21193],{"class":69,"line":2477},[67,21190,6083],{"class":73},[67,21192,6307],{"class":112},[67,21194,2698],{"class":77},[67,21196,21197],{"class":69,"line":2482},[67,21198,2269],{"class":77},[67,21200,21201,21203,21205,21207,21209],{"class":69,"line":2487},[67,21202,20148],{"class":77},[67,21204,7849],{"class":112},[67,21206,864],{"class":77},[67,21208,1506],{"class":208},[67,21210,3440],{"class":77},[67,21212,21213],{"class":69,"line":2501},[67,21214,21215],{"class":202},"    \u002F\u002F如果不写拷贝构造，编译器会自动添加拷贝构造，并且做浅拷贝操作\n",[67,21217,21218,21220,21222],{"class":69,"line":2506},[67,21219,20148],{"class":77},[67,21221,7752],{"class":112},[67,21223,18232],{"class":77},[67,21225,21226],{"class":69,"line":3298},[67,21227,177],{"emptyLinePlaceholder":176},[67,21229,21230,21232,21234,21237,21239,21242,21244],{"class":69,"line":3312},[67,21231,7248],{"class":77},[67,21233,1900],{"class":73},[67,21235,21236],{"class":84}," \"p2的年龄为： \"",[67,21238,2168],{"class":73},[67,21240,21241],{"class":77}," p2.age ",[67,21243,1900],{"class":73},[67,21245,9559],{"class":77},[67,21247,21248],{"class":69,"line":3320},[67,21249,2288],{"class":77},[67,21251,21252],{"class":69,"line":3325},[67,21253,177],{"emptyLinePlaceholder":176},[67,21255,21256,21258,21260],{"class":69,"line":3331},[67,21257,6083],{"class":73},[67,21259,6376],{"class":112},[67,21261,2698],{"class":77},[67,21263,21264],{"class":69,"line":3337},[67,21265,2269],{"class":77},[67,21267,21268],{"class":69,"line":3342},[67,21269,21270],{"class":202},"    \u002F\u002F如果用户提供有参构造，编译器不会提供默认构造，会提供拷贝构造\n",[67,21272,21273,21276],{"class":69,"line":8667},[67,21274,21275],{"class":77},"    Person p1;",[67,21277,21278],{"class":202}," \u002F\u002F此时如果用户自己没有提供默认构造，会出错\n",[67,21280,21281,21283,21285,21287,21289,21291],{"class":69,"line":8691},[67,21282,20148],{"class":77},[67,21284,7752],{"class":112},[67,21286,864],{"class":77},[67,21288,1303],{"class":208},[67,21290,6685],{"class":77},[67,21292,21293],{"class":202}," \u002F\u002F用户提供的有参\n",[67,21295,21296,21298,21301,21304],{"class":69,"line":8696},[67,21297,20148],{"class":77},[67,21299,21300],{"class":112},"p3",[67,21302,21303],{"class":77},"(p2);",[67,21305,21306],{"class":202}," \u002F\u002F此时如果用户没有提供拷贝构造，编译器会提供\n",[67,21308,21309],{"class":69,"line":8702},[67,21310,177],{"emptyLinePlaceholder":176},[67,21312,21313],{"class":69,"line":8729},[67,21314,21315],{"class":202},"    \u002F\u002F如果用户提供拷贝构造，编译器不会提供其他构造函数\n",[67,21317,21318,21321],{"class":69,"line":8734},[67,21319,21320],{"class":77},"    Person p4;",[67,21322,21278],{"class":202},[67,21324,21325,21327,21330,21332,21334,21336],{"class":69,"line":8740},[67,21326,20148],{"class":77},[67,21328,21329],{"class":112},"p5",[67,21331,864],{"class":77},[67,21333,1303],{"class":208},[67,21335,6685],{"class":77},[67,21337,21338],{"class":202}," \u002F\u002F此时如果用户自己没有提供有参，会出错\n",[67,21340,21341,21343,21346,21349],{"class":69,"line":8752},[67,21342,20148],{"class":77},[67,21344,21345],{"class":112},"p6",[67,21347,21348],{"class":77},"(p5);",[67,21350,21351],{"class":202}," \u002F\u002F用户自己提供拷贝构造\n",[67,21353,21354],{"class":69,"line":8764},[67,21355,2288],{"class":77},[67,21357,21358],{"class":69,"line":8776},[67,21359,177],{"emptyLinePlaceholder":176},[67,21361,21362,21364,21366],{"class":69,"line":10435},[67,21363,867],{"class":73},[67,21365,2695],{"class":112},[67,21367,11571],{"class":77},[67,21369,21370],{"class":69,"line":10459},[67,21371,177],{"emptyLinePlaceholder":176},[67,21373,21374,21376],{"class":69,"line":10482},[67,21375,6352],{"class":112},[67,21377,6355],{"class":77},[67,21379,21380],{"class":69,"line":10506},[67,21381,177],{"emptyLinePlaceholder":176},[67,21383,21384,21386,21388,21390],{"class":69,"line":10511},[67,21385,3025],{"class":112},[67,21387,864],{"class":77},[67,21389,3030],{"class":84},[67,21391,3440],{"class":77},[67,21393,21394],{"class":69,"line":10516},[67,21395,177],{"emptyLinePlaceholder":176},[67,21397,21398,21400,21402],{"class":69,"line":10521},[67,21399,4810],{"class":73},[67,21401,4813],{"class":208},[67,21403,2017],{"class":77},[67,21405,21406],{"class":69,"line":10530},[67,21407,2288],{"class":77},[14,21409,21411],{"id":21410},"_825深拷贝和浅拷贝","8.2.5深拷贝和浅拷贝",[19,21413,21414],{},"浅拷贝：简单的赋值拷贝操作",[19,21416,21417],{},"深拷贝：在堆区重新申请空间，进行拷贝操作",[57,21419,21421],{"className":852,"code":21420,"language":854,"meta":62,"style":62},"#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",[64,21422,21423,21429,21439,21445,21449,21453,21458,21464,21468,21481,21485,21489,21496,21500,21510,21525,21538,21542,21547,21552,21568,21572,21585,21590,21595,21600,21609,21614,21629,21633,21637,21641,21647,21651,21656,21671,21675,21686,21700,21704,21713,21717,21723,21735,21739,21747,21751,21768,21799,21807,21835,21839,21843,21851,21855,21861],{"__ignoreMap":62},[67,21424,21425,21427],{"class":69,"line":70},[67,21426,2672],{"class":73},[67,21428,2675],{"class":84},[67,21430,21431,21433,21435,21437],{"class":69,"line":143},[67,21432,2680],{"class":73},[67,21434,2683],{"class":73},[67,21436,2686],{"class":112},[67,21438,2017],{"class":77},[67,21440,21441,21443],{"class":69,"line":149},[67,21442,15411],{"class":73},[67,21444,15888],{"class":112},[67,21446,21447],{"class":69,"line":155},[67,21448,2269],{"class":77},[67,21450,21451],{"class":69,"line":161},[67,21452,15433],{"class":73},[67,21454,21455],{"class":69,"line":167},[67,21456,21457],{"class":202},"    \u002F\u002F默认构造函数\n",[67,21459,21460,21462],{"class":69,"line":173},[67,21461,19236],{"class":112},[67,21463,2698],{"class":77},[67,21465,21466],{"class":69,"line":180},[67,21467,2752],{"class":77},[67,21469,21470,21472,21474,21477,21479],{"class":69,"line":186},[67,21471,4171],{"class":77},[67,21473,1900],{"class":73},[67,21475,21476],{"class":84},"\"默认构造函数\"",[67,21478,1900],{"class":73},[67,21480,1922],{"class":77},[67,21482,21483],{"class":69,"line":444},[67,21484,2909],{"class":77},[67,21486,21487],{"class":69,"line":2335},[67,21488,21060],{"class":202},[67,21490,21491,21493],{"class":69,"line":2340},[67,21492,19269],{"class":112},[67,21494,21495],{"class":77},"(int age,int height)\n",[67,21497,21498],{"class":69,"line":2346},[67,21499,2752],{"class":77},[67,21501,21502,21505,21507],{"class":69,"line":2351},[67,21503,21504],{"class":77},"        m_Age",[67,21506,909],{"class":73},[67,21508,21509],{"class":77},"age;\n",[67,21511,21512,21515,21517,21519,21522],{"class":69,"line":2365},[67,21513,21514],{"class":77},"        m_Height",[67,21516,12435],{"class":73},[67,21518,3104],{"class":73},[67,21520,21521],{"class":77},"(height);",[67,21523,21524],{"class":202},"\u002F\u002F放到堆区\n",[67,21526,21527,21529,21531,21534,21536],{"class":69,"line":2370},[67,21528,4171],{"class":77},[67,21530,1900],{"class":73},[67,21532,21533],{"class":84},"\"有参构造函数\"",[67,21535,1900],{"class":73},[67,21537,1922],{"class":77},[67,21539,21540],{"class":69,"line":2376},[67,21541,2909],{"class":77},[67,21543,21544],{"class":69,"line":2397},[67,21545,21546],{"class":202},"    \u002F\u002F深拷贝解决上述问题\n",[67,21548,21549],{"class":69,"line":2402},[67,21550,21551],{"class":202},"    \u002F\u002F自己实现拷贝构造函数，解决浅拷贝带来的问题\n",[67,21553,21554,21556,21558,21560,21562,21564,21566],{"class":69,"line":2416},[67,21555,19236],{"class":112},[67,21557,864],{"class":77},[67,21559,7511],{"class":73},[67,21561,16286],{"class":112},[67,21563,11302],{"class":73},[67,21565,19],{"class":5935},[67,21567,870],{"class":77},[67,21569,21570],{"class":69,"line":2421},[67,21571,2752],{"class":77},[67,21573,21574,21576,21578,21581,21583],{"class":69,"line":2450},[67,21575,4171],{"class":77},[67,21577,1900],{"class":73},[67,21579,21580],{"class":84},"\"拷贝构造函数\"",[67,21582,1900],{"class":73},[67,21584,1922],{"class":77},[67,21586,21587],{"class":69,"line":2455},[67,21588,21589],{"class":202},"        \u002F\u002F编译器默认的写如下注释部分\n",[67,21591,21592],{"class":69,"line":2472},[67,21593,21594],{"class":202},"        \u002F\u002Fm_Age=p.m_Age;\n",[67,21596,21597],{"class":69,"line":2477},[67,21598,21599],{"class":202},"        \u002F\u002Fm_Height=p.m_Height;\n",[67,21601,21602,21604,21606],{"class":69,"line":2482},[67,21603,21504],{"class":77},[67,21605,909],{"class":73},[67,21607,21608],{"class":77},"p.m_Age;\n",[67,21610,21611],{"class":69,"line":2487},[67,21612,21613],{"class":202},"        \u002F\u002F深拷贝操作\n",[67,21615,21616,21618,21620,21622,21624,21626],{"class":69,"line":2501},[67,21617,21514],{"class":77},[67,21619,12435],{"class":73},[67,21621,3104],{"class":73},[67,21623,864],{"class":77},[67,21625,1312],{"class":73},[67,21627,21628],{"class":77},"p.m_Height);\n",[67,21630,21631],{"class":69,"line":2506},[67,21632,2909],{"class":77},[67,21634,21635],{"class":69,"line":3298},[67,21636,177],{"emptyLinePlaceholder":176},[67,21638,21639],{"class":69,"line":3312},[67,21640,19264],{"class":202},[67,21642,21643,21645],{"class":69,"line":3320},[67,21644,19269],{"class":112},[67,21646,2698],{"class":77},[67,21648,21649],{"class":69,"line":3325},[67,21650,2752],{"class":77},[67,21652,21653],{"class":69,"line":3331},[67,21654,21655],{"class":202},"        \u002F\u002F析构函数，将堆区开辟数据做释放操作\n",[67,21657,21658,21660,21663,21666,21669],{"class":69,"line":3337},[67,21659,3218],{"class":73},[67,21661,21662],{"class":77},"(m_Height ",[67,21664,21665],{"class":73},"!=",[67,21667,21668],{"class":208}," NULL",[67,21670,870],{"class":77},[67,21672,21673],{"class":69,"line":3342},[67,21674,3231],{"class":77},[67,21676,21677,21680,21683],{"class":69,"line":8667},[67,21678,21679],{"class":73},"            delete",[67,21681,21682],{"class":77}," m_Height;",[67,21684,21685],{"class":202}," \u002F\u002F释放堆区内存\n",[67,21687,21688,21691,21693,21695,21697],{"class":69,"line":8691},[67,21689,21690],{"class":77},"            m_Height",[67,21692,909],{"class":73},[67,21694,3114],{"class":208},[67,21696,918],{"class":77},[67,21698,21699],{"class":202}," \u002F\u002F防止野指针\n",[67,21701,21702],{"class":69,"line":8696},[67,21703,3250],{"class":77},[67,21705,21706,21708,21710],{"class":69,"line":8702},[67,21707,4171],{"class":77},[67,21709,1900],{"class":73},[67,21711,21712],{"class":84},"\"Person的析构函数调用\"\n",[67,21714,21715],{"class":69,"line":8729},[67,21716,2909],{"class":77},[67,21718,21719,21721],{"class":69,"line":8734},[67,21720,2707],{"class":73},[67,21722,16383],{"class":77},[67,21724,21725,21727,21729,21732],{"class":69,"line":8740},[67,21726,2707],{"class":73},[67,21728,7237],{"class":73},[67,21730,21731],{"class":77},"m_Height;",[67,21733,21734],{"class":202}," \u002F\u002F定义一个指针，指向身高\n",[67,21736,21737],{"class":69,"line":8752},[67,21738,4715],{"class":77},[67,21740,21741,21743,21745],{"class":69,"line":8764},[67,21742,6083],{"class":73},[67,21744,6307],{"class":112},[67,21746,2698],{"class":77},[67,21748,21749],{"class":69,"line":8776},[67,21750,2269],{"class":77},[67,21752,21753,21755,21757,21759,21761,21763,21766],{"class":69,"line":10435},[67,21754,20148],{"class":77},[67,21756,7849],{"class":112},[67,21758,864],{"class":77},[67,21760,1506],{"class":208},[67,21762,1236],{"class":77},[67,21764,21765],{"class":208},"160",[67,21767,3440],{"class":77},[67,21769,21770,21772,21774,21777,21779,21782,21784,21787,21789,21792,21794,21796],{"class":69,"line":10459},[67,21771,2274],{"class":77},[67,21773,1900],{"class":73},[67,21775,21776],{"class":84},"\"p1的年龄为:\"",[67,21778,1900],{"class":73},[67,21780,21781],{"class":77},"p1.m_Age",[67,21783,1900],{"class":73},[67,21785,21786],{"class":84},"\"身高为：\"",[67,21788,7138],{"class":73},[67,21790,21791],{"class":77},"p1.m_Height",[67,21793,1900],{"class":73},[67,21795,1965],{"class":77},[67,21797,21798],{"class":202},"  \u002F\u002F18\n",[67,21800,21801,21803,21805],{"class":69,"line":10482},[67,21802,20148],{"class":77},[67,21804,7752],{"class":112},[67,21806,18232],{"class":77},[67,21808,21809,21811,21813,21816,21818,21820,21822,21824,21826,21829,21831,21833],{"class":69,"line":10506},[67,21810,2274],{"class":77},[67,21812,1900],{"class":73},[67,21814,21815],{"class":84},"\"p2的年龄为：\"",[67,21817,1900],{"class":73},[67,21819,20178],{"class":77},[67,21821,1900],{"class":73},[67,21823,21786],{"class":84},[67,21825,7138],{"class":73},[67,21827,21828],{"class":77},"p2.m_Height",[67,21830,1900],{"class":73},[67,21832,1965],{"class":77},[67,21834,21798],{"class":202},[67,21836,21837],{"class":69,"line":10511},[67,21838,13928],{"class":77},[67,21840,21841],{"class":69,"line":10516},[67,21842,2288],{"class":77},[67,21844,21845,21847,21849],{"class":69,"line":10521},[67,21846,867],{"class":73},[67,21848,2695],{"class":112},[67,21850,2698],{"class":77},[67,21852,21853],{"class":69,"line":10530},[67,21854,2269],{"class":77},[67,21856,21857,21859],{"class":69,"line":10535},[67,21858,6352],{"class":112},[67,21860,6355],{"class":77},[67,21862,21863],{"class":69,"line":10541},[67,21864,2288],{"class":77},[19,21866,21867],{},"浅拷贝时，对象释放是先进后放，所以会先释放p2，然后再释放p1；所以就出现了两次释放内存，也就是会出现非法操作",[19,21869,21870],{},"浅拷贝带来的问题是堆区的内存重复释放",[19,21872,21873],{},[725,21874],{"alt":62,"src":21875},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-007.png",[19,21877,21878],{},"浅拷贝问题要使用深拷贝来解决",[19,21880,21881],{},[725,21882],{"alt":62,"src":21883},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-008.png",[19,21885,21886],{},"**总结：**如果属性有在堆区开辟的，一定要自己提供拷贝构造函数，防止浅拷贝带来的问题",[14,21888,21890],{"id":21889},"_826初始化列表","8.2.6初始化列表",[19,21892,21893],{},"作用：初始化属性",[19,21895,5900],{},[57,21897,21900],{"className":21898,"code":21899,"language":5906},[5904],"构造函数():属性1(值1),属性2(值2).....{}\n",[64,21901,21899],{"__ignoreMap":62},[19,21903,21904],{},"例子",[57,21906,21908],{"className":852,"code":21907,"language":854,"meta":62,"style":62},"#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",[64,21909,21910,21916,21926,21932,21936,21941,21945,21950,21955,21960,21965,21970,21975,21979,21984,21989,22032,22041,22059,22077,22095,22099,22103,22110,22117,22124,22128,22132,22140,22144,22148,22168,22177,22181,22185,22195,22199,22207],{"__ignoreMap":62},[67,21911,21912,21914],{"class":69,"line":70},[67,21913,2672],{"class":73},[67,21915,2675],{"class":84},[67,21917,21918,21920,21922,21924],{"class":69,"line":143},[67,21919,2680],{"class":73},[67,21921,2683],{"class":73},[67,21923,2686],{"class":112},[67,21925,2017],{"class":77},[67,21927,21928,21930],{"class":69,"line":149},[67,21929,15411],{"class":73},[67,21931,15888],{"class":112},[67,21933,21934],{"class":69,"line":155},[67,21935,2269],{"class":77},[67,21937,21938],{"class":69,"line":161},[67,21939,21940],{"class":73},"    public:\n",[67,21942,21943],{"class":69,"line":167},[67,21944,177],{"emptyLinePlaceholder":176},[67,21946,21947],{"class":69,"line":173},[67,21948,21949],{"class":202},"    \u002F\u002F\u002F\u002F传统方式初始化\n",[67,21951,21952],{"class":69,"line":180},[67,21953,21954],{"class":202},"    \u002F\u002FPerson(int a, int b, int c) {\n",[67,21956,21957],{"class":69,"line":186},[67,21958,21959],{"class":202},"    \u002F\u002F  m_A = a;\n",[67,21961,21962],{"class":69,"line":444},[67,21963,21964],{"class":202},"    \u002F\u002F  m_B = b;\n",[67,21966,21967],{"class":69,"line":2335},[67,21968,21969],{"class":202},"    \u002F\u002F  m_C = c;\n",[67,21971,21972],{"class":69,"line":2340},[67,21973,21974],{"class":202},"    \u002F\u002F}\n",[67,21976,21977],{"class":69,"line":2346},[67,21978,177],{"emptyLinePlaceholder":176},[67,21980,21981],{"class":69,"line":2351},[67,21982,21983],{"class":202},"    \u002F\u002F初始化列表方式初始化\n",[67,21985,21986],{"class":69,"line":2365},[67,21987,21988],{"class":202},"    \u002F\u002F使用有参构造函数\n",[67,21990,21991,21993,21995,21997,21999,22001,22003,22005,22007,22009,22011,22014,22017,22020,22023,22026,22029],{"class":69,"line":2370},[67,21992,19236],{"class":112},[67,21994,864],{"class":77},[67,21996,867],{"class":73},[67,21998,2122],{"class":5935},[67,22000,13153],{"class":77},[67,22002,867],{"class":73},[67,22004,3554],{"class":5935},[67,22006,13153],{"class":77},[67,22008,867],{"class":73},[67,22010,3570],{"class":5935},[67,22012,22013],{"class":77},") :",[67,22015,22016],{"class":112},"m_A",[67,22018,22019],{"class":77},"(a), ",[67,22021,22022],{"class":112},"m_B",[67,22024,22025],{"class":77},"(b), ",[67,22027,22028],{"class":112},"m_C",[67,22030,22031],{"class":77},"(c) {}\n",[67,22033,22034,22036,22039],{"class":69,"line":2376},[67,22035,15626],{"class":73},[67,22037,22038],{"class":112}," PrintPerson",[67,22040,11571],{"class":77},[67,22042,22043,22045,22047,22050,22052,22055,22057],{"class":69,"line":2397},[67,22044,10388],{"class":77},[67,22046,1900],{"class":73},[67,22048,22049],{"class":84}," \"mA:\"",[67,22051,2168],{"class":73},[67,22053,22054],{"class":77}," m_A ",[67,22056,1900],{"class":73},[67,22058,9559],{"class":77},[67,22060,22061,22063,22065,22068,22070,22073,22075],{"class":69,"line":2402},[67,22062,10388],{"class":77},[67,22064,1900],{"class":73},[67,22066,22067],{"class":84}," \"mB:\"",[67,22069,2168],{"class":73},[67,22071,22072],{"class":77}," m_B ",[67,22074,1900],{"class":73},[67,22076,9559],{"class":77},[67,22078,22079,22081,22083,22086,22088,22091,22093],{"class":69,"line":2416},[67,22080,10388],{"class":77},[67,22082,1900],{"class":73},[67,22084,22085],{"class":84}," \"mC:\"",[67,22087,2168],{"class":73},[67,22089,22090],{"class":77}," m_C ",[67,22092,1900],{"class":73},[67,22094,9559],{"class":77},[67,22096,22097],{"class":69,"line":2421},[67,22098,2909],{"class":77},[67,22100,22101],{"class":69,"line":2450},[67,22102,15939],{"class":73},[67,22104,22105,22107],{"class":69,"line":2455},[67,22106,2707],{"class":73},[67,22108,22109],{"class":77}," m_A;\n",[67,22111,22112,22114],{"class":69,"line":2472},[67,22113,2707],{"class":73},[67,22115,22116],{"class":77}," m_B;\n",[67,22118,22119,22121],{"class":69,"line":2477},[67,22120,2707],{"class":73},[67,22122,22123],{"class":77}," m_C;\n",[67,22125,22126],{"class":69,"line":2482},[67,22127,4715],{"class":77},[67,22129,22130],{"class":69,"line":2487},[67,22131,177],{"emptyLinePlaceholder":176},[67,22133,22134,22136,22138],{"class":69,"line":2501},[67,22135,867],{"class":73},[67,22137,2695],{"class":112},[67,22139,6697],{"class":77},[67,22141,22142],{"class":69,"line":2506},[67,22143,2269],{"class":77},[67,22145,22146],{"class":69,"line":3298},[67,22147,177],{"emptyLinePlaceholder":176},[67,22149,22150,22152,22154,22156,22158,22160,22162,22164,22166],{"class":69,"line":3312},[67,22151,20148],{"class":77},[67,22153,19],{"class":112},[67,22155,864],{"class":77},[67,22157,1077],{"class":208},[67,22159,13153],{"class":77},[67,22161,939],{"class":208},[67,22163,13153],{"class":77},[67,22165,933],{"class":208},[67,22167,3440],{"class":77},[67,22169,22170,22172,22175],{"class":69,"line":3320},[67,22171,16583],{"class":77},[67,22173,22174],{"class":112},"PrintPerson",[67,22176,6355],{"class":77},[67,22178,22179],{"class":69,"line":3325},[67,22180,177],{"emptyLinePlaceholder":176},[67,22182,22183],{"class":69,"line":3331},[67,22184,177],{"emptyLinePlaceholder":176},[67,22186,22187,22189,22191,22193],{"class":69,"line":3337},[67,22188,3025],{"class":112},[67,22190,864],{"class":77},[67,22192,3030],{"class":84},[67,22194,3440],{"class":77},[67,22196,22197],{"class":69,"line":3342},[67,22198,177],{"emptyLinePlaceholder":176},[67,22200,22201,22203,22205],{"class":69,"line":8667},[67,22202,4810],{"class":73},[67,22204,4813],{"class":208},[67,22206,2017],{"class":77},[67,22208,22209],{"class":69,"line":8691},[67,22210,2288],{"class":77},[19,22212,22213,22214,22217,22218],{},"通过有参构造函数的参数赋值给后面的属性的形式实现初始化列表的,",[336,22215,22216],{},"参数名就是定义的对象属性","，",[336,22219,22220],{},"属性后面的值为有参构造函数的形参",[57,22222,22224],{"className":852,"code":22223,"language":854,"meta":62,"style":62},"Person(int a.int b,int b):m_A(a),m_B(c),m_C(b) {}\n",[64,22225,22226],{"__ignoreMap":62},[67,22227,22228,22230,22232,22234,22237,22239,22242,22244,22247,22249,22252,22254,22257,22259],{"class":69,"line":70},[67,22229,19763],{"class":112},[67,22231,864],{"class":77},[67,22233,867],{"class":73},[67,22235,22236],{"class":77}," a.",[67,22238,867],{"class":73},[67,22240,22241],{"class":77}," b,",[67,22243,867],{"class":73},[67,22245,22246],{"class":77}," b):",[67,22248,22016],{"class":112},[67,22250,22251],{"class":77},"(a),",[67,22253,22022],{"class":112},[67,22255,22256],{"class":77},"(c),",[67,22258,22028],{"class":112},[67,22260,22261],{"class":77},"(b) {}\n",[14,22263,22265],{"id":22264},"_827类对象作为类成员","8.2.7类对象作为类成员",[19,22267,22268],{},"c++类中的成员可以是另一个类的对象，该成员被称为类成员",[19,22270,15350],{},[57,22272,22274],{"className":852,"code":22273,"language":854,"meta":62,"style":62},"A{};\nB\n{\n    A a;\n}\n\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[64,22275,22276,22281,22286,22290,22295,22299],{"__ignoreMap":62},[67,22277,22278],{"class":69,"line":70},[67,22279,22280],{"class":77},"A{};\n",[67,22282,22283],{"class":69,"line":143},[67,22284,22285],{"class":77},"B\n",[67,22287,22288],{"class":69,"line":149},[67,22289,2269],{"class":77},[67,22291,22292],{"class":69,"line":155},[67,22293,22294],{"class":77},"    A a;\n",[67,22296,22297],{"class":69,"line":161},[67,22298,2288],{"class":77},[67,22300,22301],{"class":69,"line":167},[67,22302,22303],{"class":202},"\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[19,22305,22306],{},"案例",[57,22308,22310],{"className":852,"code":22309,"language":854,"meta":62,"style":62},"\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",[64,22311,22312,22317,22324,22328,22333,22338,22352,22356,22366,22377,22381,22388,22392,22405,22409,22414,22419,22423,22429,22433,22437,22441,22472,22476,22487,22491,22497,22501,22514,22518,22522,22526,22531,22536,22540,22548,22552,22569,22588,22592,22600,22604,22610],{"__ignoreMap":62},[67,22313,22314],{"class":69,"line":70},[67,22315,22316],{"class":202},"\u002F\u002Fphone这个对象作为Person这个类的类成员\n",[67,22318,22319,22321],{"class":69,"line":143},[67,22320,15411],{"class":73},[67,22322,22323],{"class":112}," Phone\n",[67,22325,22326],{"class":69,"line":149},[67,22327,2269],{"class":77},[67,22329,22330],{"class":69,"line":155},[67,22331,22332],{"class":77},"public：\n",[67,22334,22335],{"class":69,"line":161},[67,22336,22337],{"class":202},"    \u002F\u002F 赋值(构造函数)\n",[67,22339,22340,22343,22345,22347,22350],{"class":69,"line":167},[67,22341,22342],{"class":112},"    Phone",[67,22344,864],{"class":77},[67,22346,15634],{"class":112},[67,22348,22349],{"class":5935}," pName",[67,22351,870],{"class":77},[67,22353,22354],{"class":69,"line":173},[67,22355,2752],{"class":77},[67,22357,22358,22361,22363],{"class":69,"line":180},[67,22359,22360],{"class":77},"        m_pName",[67,22362,909],{"class":73},[67,22364,22365],{"class":77},"pName;\n",[67,22367,22368,22370,22372,22375],{"class":69,"line":186},[67,22369,4171],{"class":77},[67,22371,1900],{"class":73},[67,22373,22374],{"class":84},"\"Phone的构造函数调用\"",[67,22376,2017],{"class":77},[67,22378,22379],{"class":69,"line":444},[67,22380,2909],{"class":77},[67,22382,22383,22386],{"class":69,"line":2335},[67,22384,22385],{"class":112},"    ~Phone",[67,22387,2698],{"class":77},[67,22389,22390],{"class":69,"line":2340},[67,22391,2752],{"class":77},[67,22393,22394,22396,22398,22401,22403],{"class":69,"line":2346},[67,22395,4171],{"class":77},[67,22397,1900],{"class":73},[67,22399,22400],{"class":84},"\"Phone析构函数调用\"",[67,22402,1900],{"class":73},[67,22404,1922],{"class":77},[67,22406,22407],{"class":69,"line":2351},[67,22408,2909],{"class":77},[67,22410,22411],{"class":69,"line":2365},[67,22412,22413],{"class":202},"    \u002F\u002F\n",[67,22415,22416],{"class":69,"line":2370},[67,22417,22418],{"class":77},"    string m_PName;\n",[67,22420,22421],{"class":69,"line":2376},[67,22422,4715],{"class":77},[67,22424,22425,22427],{"class":69,"line":2397},[67,22426,15411],{"class":73},[67,22428,15888],{"class":112},[67,22430,22431],{"class":69,"line":2402},[67,22432,2269],{"class":77},[67,22434,22435],{"class":69,"line":2416},[67,22436,15433],{"class":73},[67,22438,22439],{"class":69,"line":2421},[67,22440,17711],{"class":202},[67,22442,22443,22445,22447,22449,22451,22453,22455,22458,22461,22463,22466,22469],{"class":69,"line":2450},[67,22444,19236],{"class":112},[67,22446,864],{"class":77},[67,22448,15634],{"class":112},[67,22450,15637],{"class":5935},[67,22452,1236],{"class":77},[67,22454,15634],{"class":112},[67,22456,22457],{"class":5935}," pname",[67,22459,22460],{"class":77},"):",[67,22462,15727],{"class":112},[67,22464,22465],{"class":77},"(name),m_phone.",[67,22467,22468],{"class":112},"m_PName",[67,22470,22471],{"class":77},"(pname) \n",[67,22473,22474],{"class":69,"line":2455},[67,22475,2752],{"class":77},[67,22477,22478,22480,22482,22485],{"class":69,"line":2472},[67,22479,4171],{"class":77},[67,22481,1900],{"class":73},[67,22483,22484],{"class":84},"\"Person的构造函数调用\"",[67,22486,2017],{"class":77},[67,22488,22489],{"class":69,"line":2477},[67,22490,2909],{"class":77},[67,22492,22493,22495],{"class":69,"line":2482},[67,22494,19269],{"class":112},[67,22496,2698],{"class":77},[67,22498,22499],{"class":69,"line":2487},[67,22500,2752],{"class":77},[67,22502,22503,22505,22507,22510,22512],{"class":69,"line":2501},[67,22504,4171],{"class":77},[67,22506,1900],{"class":73},[67,22508,22509],{"class":84},"\"Person析构函数调用\"",[67,22511,1900],{"class":73},[67,22513,1922],{"class":77},[67,22515,22516],{"class":69,"line":2506},[67,22517,2909],{"class":77},[67,22519,22520],{"class":69,"line":3298},[67,22521,8499],{"class":202},[67,22523,22524],{"class":69,"line":3312},[67,22525,15609],{"class":77},[67,22527,22528],{"class":69,"line":3320},[67,22529,22530],{"class":202},"    \u002F\u002F手机\n",[67,22532,22533],{"class":69,"line":3325},[67,22534,22535],{"class":77},"    Phone m_Phone;\n",[67,22537,22538],{"class":69,"line":3331},[67,22539,4715],{"class":77},[67,22541,22542,22544,22546],{"class":69,"line":3337},[67,22543,6083],{"class":73},[67,22545,6307],{"class":112},[67,22547,2698],{"class":77},[67,22549,22550],{"class":69,"line":3342},[67,22551,2269],{"class":77},[67,22553,22554,22556,22558,22560,22562,22564,22567],{"class":69,"line":8667},[67,22555,20148],{"class":77},[67,22557,19],{"class":112},[67,22559,864],{"class":77},[67,22561,8635],{"class":84},[67,22563,1236],{"class":77},[67,22565,22566],{"class":84},"\"安卓\"",[67,22568,3440],{"class":77},[67,22570,22571,22573,22575,22578,22580,22583,22585],{"class":69,"line":8691},[67,22572,2274],{"class":77},[67,22574,1900],{"class":73},[67,22576,22577],{"class":77},"p.Name",[67,22579,1900],{"class":73},[67,22581,22582],{"class":84},"\"拿着：\"",[67,22584,1900],{"class":73},[67,22586,22587],{"class":77},"p.m_phone.m_PName;\n",[67,22589,22590],{"class":69,"line":8696},[67,22591,2288],{"class":77},[67,22593,22594,22596,22598],{"class":69,"line":8702},[67,22595,867],{"class":73},[67,22597,2695],{"class":112},[67,22599,2698],{"class":77},[67,22601,22602],{"class":69,"line":8729},[67,22603,2269],{"class":77},[67,22605,22606,22608],{"class":69,"line":8734},[67,22607,6352],{"class":112},[67,22609,6355],{"class":77},[67,22611,22612],{"class":69,"line":8740},[67,22613,2288],{"class":77},[19,22615,9744],{},[57,22617,22619],{"className":852,"code":22618,"language":854,"meta":62,"style":62},"    \u002F\u002F不需要写这个：\n    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[64,22620,22621,22626],{"__ignoreMap":62},[67,22622,22623],{"class":69,"line":70},[67,22624,22625],{"class":202},"    \u002F\u002F不需要写这个：\n",[67,22627,22628],{"class":69,"line":143},[67,22629,22630],{"class":202},"    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[19,22632,22633],{},"因为Phone这个类里面写了有参构造函数，所以不需要调用他的属性直接传值通过有参构造函数就可以实现初始化phone",[57,22635,22637],{"className":852,"code":22636,"language":854,"meta":62,"style":62},"Person(string name.string pname):m_name(name),m_phone(pname) {}\n",[64,22638,22639],{"__ignoreMap":62},[67,22640,22641,22643,22646,22648,22651,22654],{"class":69,"line":70},[67,22642,19763],{"class":112},[67,22644,22645],{"class":77},"(string name.string pname):",[67,22647,15727],{"class":112},[67,22649,22650],{"class":77},"(name),",[67,22652,22653],{"class":112},"m_phone",[67,22655,22656],{"class":77},"(pname) {}\n",[19,22658,22659,22660,909,22663],{},"采用的是隐式转换法，实际为如下：\n",[64,22661,22662],{},"m_phone(pname)",[64,22664,22665],{},"Phone m_phone=pname",[19,22667,22668,22671],{},[336,22669,22670],{},"总结","：这里可以直接类比人的胳膊腿，肯定得全有之后才能构造人！析构函数是遵循先进后出的规律！（析构函数的调用顺序与构造函数的调用顺序是相反的）",[19,22673,22674],{},"因此，这里应当是先Phone构造函数调用，然后再Person构造函数调用；Person的析构函数先调用，Phone的析构函数在调用；",[14,22676,22678],{"id":22677},"_828静态对象","8.2.8静态对象",[19,22680,22681],{},"静态对象在成员对象前static，称为静态对象",[19,22683,22684],{},"静态对象分为两类：",[815,22686,22687],{},[818,22688,22689],{},"静态成员变量",[1863,22691,22692,22695,22698],{},[818,22693,22694],{},"①所有对象共享同一份数据   (理解的话可以当作指针，例如a=10;b=20;此时a=20，这里只例子仅仅为解释共享同一份数据)",[818,22696,22697],{},"②在编译阶段分配内存",[818,22699,22700],{},"③类内声明，类外初始化",[815,22702,22703],{"start":143},[818,22704,22705],{},"静态成员函数",[1863,22707,22708,22711],{},[818,22709,22710],{},"①所有对象共享同一个函数",[818,22712,22713],{},"②静态成员函数只能访问静态成员变量",[40,22715,22717],{"id":22716},"_8281静态成员变量","8.2.8.1静态成员变量",[57,22719,22721],{"className":852,"code":22720,"language":854,"meta":62,"style":62},"#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",[64,22722,22723,22729,22739,22745,22749,22753,22758,22763,22768,22776,22780,22784,22788,22796,22800,22804,22809,22822,22826,22834,22838,22844],{"__ignoreMap":62},[67,22724,22725,22727],{"class":69,"line":70},[67,22726,2672],{"class":73},[67,22728,2675],{"class":84},[67,22730,22731,22733,22735,22737],{"class":69,"line":143},[67,22732,2680],{"class":73},[67,22734,2683],{"class":73},[67,22736,2686],{"class":112},[67,22738,2017],{"class":77},[67,22740,22741,22743],{"class":69,"line":149},[67,22742,15411],{"class":73},[67,22744,15888],{"class":112},[67,22746,22747],{"class":69,"line":155},[67,22748,2269],{"class":77},[67,22750,22751],{"class":69,"line":161},[67,22752,15433],{"class":73},[67,22754,22755],{"class":69,"line":167},[67,22756,22757],{"class":202},"    \u002F\u002F非静态成员变量\n",[67,22759,22760],{"class":69,"line":173},[67,22761,22762],{"class":202},"    \u002F\u002F int m_A;\n",[67,22764,22765],{"class":69,"line":180},[67,22766,22767],{"class":202},"    \u002F\u002F定义静态成员变量\n",[67,22769,22770,22772,22774],{"class":69,"line":186},[67,22771,11738],{"class":73},[67,22773,3104],{"class":73},[67,22775,22109],{"class":77},[67,22777,22778],{"class":69,"line":444},[67,22779,177],{"emptyLinePlaceholder":176},[67,22781,22782],{"class":69,"line":2335},[67,22783,177],{"emptyLinePlaceholder":176},[67,22785,22786],{"class":69,"line":2340},[67,22787,4715],{"class":77},[67,22789,22790,22792,22794],{"class":69,"line":2346},[67,22791,6083],{"class":73},[67,22793,6307],{"class":112},[67,22795,2698],{"class":77},[67,22797,22798],{"class":69,"line":2351},[67,22799,2269],{"class":77},[67,22801,22802],{"class":69,"line":2365},[67,22803,16030],{"class":77},[67,22805,22806],{"class":69,"line":2370},[67,22807,22808],{"class":202},"    \u002F\u002F输出类成员变量这块内存\n",[67,22810,22811,22813,22815,22818,22820],{"class":69,"line":2376},[67,22812,2274],{"class":77},[67,22814,1900],{"class":73},[67,22816,22817],{"class":77},"p.m_A",[67,22819,1900],{"class":73},[67,22821,1922],{"class":77},[67,22823,22824],{"class":69,"line":2397},[67,22825,2288],{"class":77},[67,22827,22828,22830,22832],{"class":69,"line":2402},[67,22829,867],{"class":73},[67,22831,2695],{"class":112},[67,22833,2698],{"class":77},[67,22835,22836],{"class":69,"line":2416},[67,22837,2269],{"class":77},[67,22839,22840,22842],{"class":69,"line":2421},[67,22841,6352],{"class":112},[67,22843,2698],{"class":77},[67,22845,22846],{"class":69,"line":2450},[67,22847,2288],{"class":77},[19,22849,22850],{},"此时输出是报错的：无法解析外部命令",[19,22852,22853],{},"解决这一问题：必须用到类内声明，类外初始化操作",[57,22855,22857],{"className":852,"code":22856,"language":854,"meta":62,"style":62},"#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",[64,22858,22859,22865,22875,22881,22885,22889,22894,22902,22906,22911,22926,22934,22938,22942,22947,22952,22964,22969,22980,22985,22990,23003,23007,23015,23019,23025],{"__ignoreMap":62},[67,22860,22861,22863],{"class":69,"line":70},[67,22862,2672],{"class":73},[67,22864,2675],{"class":84},[67,22866,22867,22869,22871,22873],{"class":69,"line":143},[67,22868,2680],{"class":73},[67,22870,2683],{"class":73},[67,22872,2686],{"class":112},[67,22874,2017],{"class":77},[67,22876,22877,22879],{"class":69,"line":149},[67,22878,15411],{"class":73},[67,22880,15888],{"class":112},[67,22882,22883],{"class":69,"line":155},[67,22884,2269],{"class":77},[67,22886,22887],{"class":69,"line":161},[67,22888,15433],{"class":73},[67,22890,22891],{"class":69,"line":167},[67,22892,22893],{"class":202},"    \u002F\u002F类内声明\n",[67,22895,22896,22898,22900],{"class":69,"line":173},[67,22897,11738],{"class":73},[67,22899,3104],{"class":73},[67,22901,22109],{"class":77},[67,22903,22904],{"class":69,"line":180},[67,22905,4715],{"class":77},[67,22907,22908],{"class":69,"line":186},[67,22909,22910],{"class":202},"\u002F\u002F类外初始化\n",[67,22912,22913,22915,22917,22920,22922,22924],{"class":69,"line":444},[67,22914,867],{"class":73},[67,22916,16286],{"class":112},[67,22918,22919],{"class":77},"::m_A",[67,22921,909],{"class":73},[67,22923,1303],{"class":208},[67,22925,2017],{"class":77},[67,22927,22928,22930,22932],{"class":69,"line":2335},[67,22929,6083],{"class":73},[67,22931,6307],{"class":112},[67,22933,2698],{"class":77},[67,22935,22936],{"class":69,"line":2340},[67,22937,2269],{"class":77},[67,22939,22940],{"class":69,"line":2346},[67,22941,16030],{"class":77},[67,22943,22944],{"class":69,"line":2351},[67,22945,22946],{"class":202},"    \u002F\u002F访问变量的原内存空间\n",[67,22948,22949],{"class":69,"line":2365},[67,22950,22951],{"class":202},"    \u002F\u002F100\n",[67,22953,22954,22956,22958,22960,22962],{"class":69,"line":2370},[67,22955,2274],{"class":77},[67,22957,1900],{"class":73},[67,22959,22817],{"class":77},[67,22961,1900],{"class":73},[67,22963,1922],{"class":77},[67,22965,22966],{"class":69,"line":2376},[67,22967,22968],{"class":77},"    Person p2;\n",[67,22970,22971,22974,22976,22978],{"class":69,"line":2397},[67,22972,22973],{"class":77},"    p2.m_A",[67,22975,909],{"class":73},[67,22977,2445],{"class":208},[67,22979,2017],{"class":77},[67,22981,22982],{"class":69,"line":2402},[67,22983,22984],{"class":202},"    \u002F\u002F继续访问这片空间\n",[67,22986,22987],{"class":69,"line":2416},[67,22988,22989],{"class":202},"    \u002F\u002F200\n",[67,22991,22992,22994,22996,22999,23001],{"class":69,"line":2421},[67,22993,2274],{"class":77},[67,22995,1900],{"class":73},[67,22997,22998],{"class":77},"p2.m_A",[67,23000,1900],{"class":73},[67,23002,1922],{"class":77},[67,23004,23005],{"class":69,"line":2450},[67,23006,2288],{"class":77},[67,23008,23009,23011,23013],{"class":69,"line":2455},[67,23010,867],{"class":73},[67,23012,2695],{"class":112},[67,23014,2698],{"class":77},[67,23016,23017],{"class":69,"line":2472},[67,23018,2269],{"class":77},[67,23020,23021,23023],{"class":69,"line":2477},[67,23022,6352],{"class":112},[67,23024,6355],{"class":77},[67,23026,23027],{"class":69,"line":2482},[67,23028,2288],{"class":77},[19,23030,23031],{},[336,23032,23033],{},"静态变量的访问",[57,23035,23037],{"className":852,"code":23036,"language":854,"meta":62,"style":62},"#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",[64,23038,23039,23045,23055,23061,23065,23069,23073,23081,23085,23090,23098,23102,23106,23120,23135,23143,23147,23152,23157,23162,23167,23179,23184,23189,23203,23220,23224,23232,23236,23242],{"__ignoreMap":62},[67,23040,23041,23043],{"class":69,"line":70},[67,23042,2672],{"class":73},[67,23044,2675],{"class":84},[67,23046,23047,23049,23051,23053],{"class":69,"line":143},[67,23048,2680],{"class":73},[67,23050,2683],{"class":73},[67,23052,2686],{"class":112},[67,23054,2017],{"class":77},[67,23056,23057,23059],{"class":69,"line":149},[67,23058,15411],{"class":73},[67,23060,15888],{"class":112},[67,23062,23063],{"class":69,"line":155},[67,23064,2269],{"class":77},[67,23066,23067],{"class":69,"line":161},[67,23068,15433],{"class":73},[67,23070,23071],{"class":69,"line":167},[67,23072,22893],{"class":202},[67,23074,23075,23077,23079],{"class":69,"line":173},[67,23076,11738],{"class":73},[67,23078,3104],{"class":73},[67,23080,22109],{"class":77},[67,23082,23083],{"class":69,"line":180},[67,23084,15939],{"class":73},[67,23086,23087],{"class":69,"line":186},[67,23088,23089],{"class":202},"    \u002F\u002F静态成员变量也是有访问权限的\n",[67,23091,23092,23094,23096],{"class":69,"line":444},[67,23093,11738],{"class":73},[67,23095,3104],{"class":73},[67,23097,22116],{"class":77},[67,23099,23100],{"class":69,"line":2335},[67,23101,4715],{"class":77},[67,23103,23104],{"class":69,"line":2340},[67,23105,22910],{"class":202},[67,23107,23108,23110,23112,23114,23116,23118],{"class":69,"line":2346},[67,23109,867],{"class":73},[67,23111,16286],{"class":112},[67,23113,22919],{"class":77},[67,23115,909],{"class":73},[67,23117,1303],{"class":208},[67,23119,2017],{"class":77},[67,23121,23122,23124,23126,23129,23131,23133],{"class":69,"line":2351},[67,23123,867],{"class":73},[67,23125,16286],{"class":112},[67,23127,23128],{"class":77},"::m_B",[67,23130,909],{"class":73},[67,23132,1556],{"class":208},[67,23134,2017],{"class":77},[67,23136,23137,23139,23141],{"class":69,"line":2365},[67,23138,6083],{"class":73},[67,23140,6376],{"class":112},[67,23142,2698],{"class":77},[67,23144,23145],{"class":69,"line":2370},[67,23146,2269],{"class":77},[67,23148,23149],{"class":69,"line":2376},[67,23150,23151],{"class":202},"    \u002F\u002F静态成员变量 不属于某个对象上，所有对象都共享同一份数据\n",[67,23153,23154],{"class":69,"line":2397},[67,23155,23156],{"class":202},"    \u002F\u002F静态成员变量有两种访问方式：\n",[67,23158,23159],{"class":69,"line":2402},[67,23160,23161],{"class":202},"    \u002F\u002F1.通过对象进行访问\n",[67,23163,23164],{"class":69,"line":2416},[67,23165,23166],{"class":77},"    Person p;  \n",[67,23168,23169,23171,23173,23175,23177],{"class":69,"line":2421},[67,23170,2274],{"class":77},[67,23172,1900],{"class":73},[67,23174,22817],{"class":77},[67,23176,1900],{"class":73},[67,23178,1922],{"class":77},[67,23180,23181],{"class":69,"line":2450},[67,23182,23183],{"class":202},"    \u002F\u002F这里其实也可以不用创建对象，因为它本身也不属于某个对象，采用下面方法\n",[67,23185,23186],{"class":69,"line":2455},[67,23187,23188],{"class":202},"    \u002F\u002F2.通过类名进行访问\n",[67,23190,23191,23193,23195,23197,23199,23201],{"class":69,"line":2472},[67,23192,2274],{"class":77},[67,23194,1900],{"class":73},[67,23196,19763],{"class":112},[67,23198,22919],{"class":77},[67,23200,1900],{"class":73},[67,23202,1922],{"class":77},[67,23204,23205,23207,23209,23211,23213,23215,23217],{"class":69,"line":2477},[67,23206,2274],{"class":77},[67,23208,1900],{"class":73},[67,23210,19763],{"class":112},[67,23212,23128],{"class":77},[67,23214,1900],{"class":73},[67,23216,1965],{"class":77},[67,23218,23219],{"class":202}," \u002F\u002F没有访问权限，报错\n",[67,23221,23222],{"class":69,"line":2482},[67,23223,2288],{"class":77},[67,23225,23226,23228,23230],{"class":69,"line":2487},[67,23227,867],{"class":73},[67,23229,2695],{"class":112},[67,23231,2698],{"class":77},[67,23233,23234],{"class":69,"line":2501},[67,23235,2269],{"class":77},[67,23237,23238,23240],{"class":69,"line":2506},[67,23239,6421],{"class":112},[67,23241,6355],{"class":77},[67,23243,23244],{"class":69,"line":3298},[67,23245,2288],{"class":77},[40,23247,23249],{"id":23248},"_8282静态成员函数","8.2.8.2静态成员函数",[19,23251,23252],{},"1.静态成员函数定义与访问",[57,23254,23256],{"className":852,"code":23255,"language":854,"meta":62,"style":62},"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",[64,23257,23258,23264,23268,23272,23277,23288,23292,23306,23310,23314,23322,23326,23331,23336,23340,23348,23353,23363],{"__ignoreMap":62},[67,23259,23260,23262],{"class":69,"line":70},[67,23261,15411],{"class":73},[67,23263,15888],{"class":112},[67,23265,23266],{"class":69,"line":143},[67,23267,2269],{"class":77},[67,23269,23270],{"class":69,"line":149},[67,23271,15433],{"class":73},[67,23273,23274],{"class":69,"line":155},[67,23275,23276],{"class":202},"    \u002F\u002F在公共权限下定义静态成员函数\n",[67,23278,23279,23281,23284,23286],{"class":69,"line":161},[67,23280,11738],{"class":73},[67,23282,23283],{"class":73}," void",[67,23285,12103],{"class":112},[67,23287,2698],{"class":77},[67,23289,23290],{"class":69,"line":167},[67,23291,2752],{"class":77},[67,23293,23294,23297,23299,23302,23304],{"class":69,"line":173},[67,23295,23296],{"class":77},"        coout",[67,23298,1900],{"class":73},[67,23300,23301],{"class":84},"\"静态成员函数的调用\"",[67,23303,1900],{"class":73},[67,23305,1922],{"class":77},[67,23307,23308],{"class":69,"line":180},[67,23309,2909],{"class":77},[67,23311,23312],{"class":69,"line":186},[67,23313,4715],{"class":77},[67,23315,23316,23318,23320],{"class":69,"line":444},[67,23317,6083],{"class":73},[67,23319,6307],{"class":112},[67,23321,2698],{"class":77},[67,23323,23324],{"class":69,"line":2335},[67,23325,2269],{"class":77},[67,23327,23328],{"class":69,"line":2340},[67,23329,23330],{"class":202},"    \u002F\u002F静态成员函数的调用方式:\n",[67,23332,23333],{"class":69,"line":2346},[67,23334,23335],{"class":202},"    \u002F\u002F1.通过对象访问\n",[67,23337,23338],{"class":69,"line":2351},[67,23339,16030],{"class":77},[67,23341,23342,23344,23346],{"class":69,"line":2365},[67,23343,16583],{"class":77},[67,23345,12269],{"class":112},[67,23347,6355],{"class":77},[67,23349,23350],{"class":69,"line":2370},[67,23351,23352],{"class":202},"    \u002F\u002F2.通过类名访问\n",[67,23354,23355,23357,23359,23361],{"class":69,"line":2376},[67,23356,19236],{"class":112},[67,23358,18449],{"class":77},[67,23360,12269],{"class":112},[67,23362,6355],{"class":77},[67,23364,23365],{"class":69,"line":2397},[67,23366,2288],{"class":77},[815,23368,23369],{"start":143},[818,23370,23371],{},"静态成员函数只能访问静态成员变量",[57,23373,23375],{"className":852,"code":23374,"language":854,"meta":62,"style":62},"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",[64,23376,23377,23383,23387,23391,23395,23405,23409,23423,23428,23440,23444,23455,23465,23469,23473,23477,23487,23491,23504,23508,23512,23516,23520,23534,23542,23546,23550,23554,23558,23566,23570,23580,23585,23589,23597,23601,23607],{"__ignoreMap":62},[67,23378,23379,23381],{"class":69,"line":70},[67,23380,15411],{"class":73},[67,23382,15888],{"class":112},[67,23384,23385],{"class":69,"line":143},[67,23386,2269],{"class":77},[67,23388,23389],{"class":69,"line":149},[67,23390,15433],{"class":73},[67,23392,23393],{"class":69,"line":155},[67,23394,23276],{"class":202},[67,23396,23397,23399,23401,23403],{"class":69,"line":161},[67,23398,11738],{"class":73},[67,23400,23283],{"class":73},[67,23402,12103],{"class":112},[67,23404,2698],{"class":77},[67,23406,23407],{"class":69,"line":167},[67,23408,2752],{"class":77},[67,23410,23411,23414,23416,23418,23420],{"class":69,"line":173},[67,23412,23413],{"class":77},"        m_A",[67,23415,909],{"class":73},[67,23417,1169],{"class":208},[67,23419,918],{"class":77},[67,23421,23422],{"class":202}," \u002F\u002F静态成员函数可以访问 静态成员变量\n",[67,23424,23425],{"class":69,"line":180},[67,23426,23427],{"class":202},"        \u002F\u002Fm_B=200;\u002F\u002F这行直接报错，因为Person::func();调用函数时，编译器是不知道改p1的m_B还是p2的m_B;m_A是对所有对象公用，但是m_B专属于某个对象\n",[67,23429,23430,23432,23434,23436,23438],{"class":69,"line":186},[67,23431,23296],{"class":77},[67,23433,1900],{"class":73},[67,23435,23301],{"class":84},[67,23437,1900],{"class":73},[67,23439,1922],{"class":77},[67,23441,23442],{"class":69,"line":444},[67,23443,2909],{"class":77},[67,23445,23446,23448,23450,23452],{"class":69,"line":2335},[67,23447,11738],{"class":73},[67,23449,3104],{"class":73},[67,23451,16165],{"class":77},[67,23453,23454],{"class":202}," \u002F\u002F静态成员变量\n",[67,23456,23457,23459,23462],{"class":69,"line":2340},[67,23458,2707],{"class":73},[67,23460,23461],{"class":77}," m_B;",[67,23463,23464],{"class":202}," \u002F\u002F非静态成员变量\n",[67,23466,23467],{"class":69,"line":2346},[67,23468,177],{"emptyLinePlaceholder":176},[67,23470,23471],{"class":69,"line":2351},[67,23472,15939],{"class":73},[67,23474,23475],{"class":69,"line":2365},[67,23476,23089],{"class":202},[67,23478,23479,23481,23483,23485],{"class":69,"line":2370},[67,23480,11738],{"class":73},[67,23482,23283],{"class":73},[67,23484,14336],{"class":112},[67,23486,2698],{"class":77},[67,23488,23489],{"class":69,"line":2376},[67,23490,2752],{"class":77},[67,23492,23493,23495,23497,23500,23502],{"class":69,"line":2397},[67,23494,4171],{"class":77},[67,23496,1900],{"class":73},[67,23498,23499],{"class":84},"\"这是私有权限下的静态函数调用\"",[67,23501,1900],{"class":73},[67,23503,1922],{"class":77},[67,23505,23506],{"class":69,"line":2402},[67,23507,2909],{"class":77},[67,23509,23510],{"class":69,"line":2416},[67,23511,177],{"emptyLinePlaceholder":176},[67,23513,23514],{"class":69,"line":2421},[67,23515,177],{"emptyLinePlaceholder":176},[67,23517,23518],{"class":69,"line":2450},[67,23519,4715],{"class":77},[67,23521,23522,23524,23526,23528,23530,23532],{"class":69,"line":2455},[67,23523,867],{"class":73},[67,23525,16286],{"class":112},[67,23527,22919],{"class":77},[67,23529,909],{"class":73},[67,23531,1051],{"class":208},[67,23533,2017],{"class":77},[67,23535,23536,23538,23540],{"class":69,"line":2472},[67,23537,6083],{"class":73},[67,23539,6307],{"class":112},[67,23541,2698],{"class":77},[67,23543,23544],{"class":69,"line":2477},[67,23545,2269],{"class":77},[67,23547,23548],{"class":69,"line":2482},[67,23549,23330],{"class":202},[67,23551,23552],{"class":69,"line":2487},[67,23553,23335],{"class":202},[67,23555,23556],{"class":69,"line":2501},[67,23557,16030],{"class":77},[67,23559,23560,23562,23564],{"class":69,"line":2506},[67,23561,16583],{"class":77},[67,23563,12269],{"class":112},[67,23565,6355],{"class":77},[67,23567,23568],{"class":69,"line":3298},[67,23569,23352],{"class":202},[67,23571,23572,23574,23576,23578],{"class":69,"line":3312},[67,23573,19236],{"class":112},[67,23575,18449],{"class":77},[67,23577,12269],{"class":112},[67,23579,6355],{"class":77},[67,23581,23582],{"class":69,"line":3320},[67,23583,23584],{"class":202},"    \u002F\u002FPerson::func2();   报错，类外是访问不到私有静态成员函数的\n",[67,23586,23587],{"class":69,"line":3325},[67,23588,2288],{"class":77},[67,23590,23591,23593,23595],{"class":69,"line":3331},[67,23592,867],{"class":73},[67,23594,2695],{"class":112},[67,23596,2698],{"class":77},[67,23598,23599],{"class":69,"line":3337},[67,23600,2269],{"class":77},[67,23602,23603,23605],{"class":69,"line":3342},[67,23604,6352],{"class":112},[67,23606,6355],{"class":77},[67,23608,23609],{"class":69,"line":8667},[67,23610,2288],{"class":77},[14,23612,23614],{"id":23613},"_83c对象模型和this指针","8.3C++对象模型和this指针",[40,23616,23618],{"id":23617},"_831成员变量和成员函数分开存储","8.3.1成员变量和成员函数分开存储",[19,23620,23621],{},"在c++中，类内的成员变量和成员函数分开存储",[19,23623,23624],{},"只有非静态成员变量才属于类的对象上",[23626,23627,23629],"h5",{"id":23628},"_8311空对象占的内存大小","8.3.1.1空对象占的内存大小",[57,23631,23633],{"className":852,"code":23632,"language":854,"meta":62,"style":62},"#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",[64,23634,23635,23642,23652,23658,23662,23666,23670,23678,23682,23686,23709,23713,23721,23725,23731],{"__ignoreMap":62},[67,23636,23637,23639],{"class":69,"line":70},[67,23638,2672],{"class":73},[67,23640,23641],{"class":84},"\u003Ciostraem>\n",[67,23643,23644,23646,23648,23650],{"class":69,"line":143},[67,23645,2680],{"class":73},[67,23647,2683],{"class":73},[67,23649,2686],{"class":112},[67,23651,2017],{"class":77},[67,23653,23654,23656],{"class":69,"line":149},[67,23655,15411],{"class":73},[67,23657,15888],{"class":112},[67,23659,23660],{"class":69,"line":155},[67,23661,2269],{"class":77},[67,23663,23664],{"class":69,"line":161},[67,23665,177],{"emptyLinePlaceholder":176},[67,23667,23668],{"class":69,"line":167},[67,23669,4715],{"class":77},[67,23671,23672,23674,23676],{"class":69,"line":173},[67,23673,6083],{"class":73},[67,23675,6307],{"class":112},[67,23677,2698],{"class":77},[67,23679,23680],{"class":69,"line":180},[67,23681,2269],{"class":77},[67,23683,23684],{"class":69,"line":186},[67,23685,16030],{"class":77},[67,23687,23688,23690,23692,23695,23697,23700,23702,23704,23706],{"class":69,"line":444},[67,23689,2274],{"class":77},[67,23691,1900],{"class":73},[67,23693,23694],{"class":84},"\"size of p=\"",[67,23696,1900],{"class":73},[67,23698,23699],{"class":112},"sizeoif",[67,23701,7258],{"class":77},[67,23703,1900],{"class":73},[67,23705,1965],{"class":77},[67,23707,23708],{"class":202}," \u002F\u002F查看这个空类的占用的内存空间\n",[67,23710,23711],{"class":69,"line":2335},[67,23712,2288],{"class":77},[67,23714,23715,23717,23719],{"class":69,"line":2340},[67,23716,867],{"class":73},[67,23718,2695],{"class":112},[67,23720,2698],{"class":77},[67,23722,23723],{"class":69,"line":2346},[67,23724,2269],{"class":77},[67,23726,23727,23729],{"class":69,"line":2351},[67,23728,6352],{"class":112},[67,23730,6355],{"class":77},[67,23732,23733],{"class":69,"line":2365},[67,23734,2288],{"class":77},[19,23736,23737],{},"输出结果为：size of p=1",[19,23739,23740],{},"原因：C++编译器会给每个空对象也分配一个字节空间，是为了区分空对象占内存的位置",[19,23742,23743],{},"每一个空对象也应该有一个独一无二的内存地址（可以这样理解：一个字节的空间不用来存储数据，而是作为标记去区分不同的对象）",[23626,23745,23747],{"id":23746},"_8312成员变量与成员函数分开存储","8.3.1.2成员变量与成员函数分开存储",[57,23749,23751],{"className":852,"code":23750,"language":854,"meta":62,"style":62},"#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",[64,23752,23753,23759,23769,23777,23781,23790,23794,23802,23806,23810,23829,23833,23837,23845,23849,23855],{"__ignoreMap":62},[67,23754,23755,23757],{"class":69,"line":70},[67,23756,2672],{"class":73},[67,23758,2675],{"class":84},[67,23760,23761,23763,23765,23767],{"class":69,"line":143},[67,23762,2680],{"class":73},[67,23764,2683],{"class":73},[67,23766,2686],{"class":112},[67,23768,2017],{"class":77},[67,23770,23771,23773,23775],{"class":69,"line":149},[67,23772,15411],{"class":73},[67,23774,16286],{"class":112},[67,23776,3395],{"class":77},[67,23778,23779],{"class":69,"line":155},[67,23780,2269],{"class":77},[67,23782,23783,23785,23787],{"class":69,"line":161},[67,23784,2707],{"class":73},[67,23786,16165],{"class":77},[67,23788,23789],{"class":202},"\u002F\u002F非静态成员变量\n",[67,23791,23792],{"class":69,"line":167},[67,23793,4715],{"class":77},[67,23795,23796,23798,23800],{"class":69,"line":173},[67,23797,6083],{"class":73},[67,23799,6307],{"class":112},[67,23801,2698],{"class":77},[67,23803,23804],{"class":69,"line":180},[67,23805,2269],{"class":77},[67,23807,23808],{"class":69,"line":186},[67,23809,16030],{"class":77},[67,23811,23812,23814,23816,23818,23820,23822,23824,23826],{"class":69,"line":444},[67,23813,2274],{"class":77},[67,23815,1900],{"class":73},[67,23817,23694],{"class":84},[67,23819,2096],{"class":73},[67,23821,7258],{"class":77},[67,23823,1900],{"class":73},[67,23825,1965],{"class":77},[67,23827,23828],{"class":202}," \u002F\u002F查看不是空对象时占用多少内存\n",[67,23830,23831],{"class":69,"line":2335},[67,23832,177],{"emptyLinePlaceholder":176},[67,23834,23835],{"class":69,"line":2340},[67,23836,2288],{"class":77},[67,23838,23839,23841,23843],{"class":69,"line":2346},[67,23840,867],{"class":73},[67,23842,2695],{"class":112},[67,23844,2698],{"class":77},[67,23846,23847],{"class":69,"line":2351},[67,23848,2269],{"class":77},[67,23850,23851,23853],{"class":69,"line":2365},[67,23852,6352],{"class":112},[67,23854,6355],{"class":77},[67,23856,23857],{"class":69,"line":2370},[67,23858,2288],{"class":77},[19,23860,23861],{},"输出结果：size of p=4",[19,23863,23864],{},"解释：对象是空的话就占用一字节内存；如果对象不为空，占用的内存空间就是变量占用内存空间的情况",[815,23866,23867],{},[818,23868,23869],{},"如果加上非静态成员变量，Person类修改如下",[57,23871,23873],{"className":852,"code":23872,"language":854,"meta":62,"style":62},"class Person\n{\n    int m_A;\n    static int m_B;\n};\n\u002F\u002F 静态成员变量类内声明，类外初始化\nint Person::m_B=0;\n",[64,23874,23875,23881,23885,23891,23899,23903,23908],{"__ignoreMap":62},[67,23876,23877,23879],{"class":69,"line":70},[67,23878,15411],{"class":73},[67,23880,15888],{"class":112},[67,23882,23883],{"class":69,"line":143},[67,23884,2269],{"class":77},[67,23886,23887,23889],{"class":69,"line":149},[67,23888,2707],{"class":73},[67,23890,22109],{"class":77},[67,23892,23893,23895,23897],{"class":69,"line":155},[67,23894,11738],{"class":73},[67,23896,3104],{"class":73},[67,23898,22116],{"class":77},[67,23900,23901],{"class":69,"line":161},[67,23902,4715],{"class":77},[67,23904,23905],{"class":69,"line":167},[67,23906,23907],{"class":202},"\u002F\u002F 静态成员变量类内声明，类外初始化\n",[67,23909,23910,23912,23914,23916,23918,23920],{"class":69,"line":173},[67,23911,867],{"class":73},[67,23913,16286],{"class":112},[67,23915,23128],{"class":77},[67,23917,909],{"class":73},[67,23919,1051],{"class":208},[67,23921,2017],{"class":77},[19,23923,23924],{},"输出结果：4",[19,23926,23927],{},"解释：静态成员变量不属于某一个对象上，因此还是看int m_A;占用4字节",[815,23929,23930],{"start":143},[818,23931,23932],{},"加上非静态成员函数",[57,23934,23936],{"className":852,"code":23935,"language":854,"meta":62,"style":62},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n};\n\n",[64,23937,23938,23945,23949,23955,23963,23967,23971,23975],{"__ignoreMap":62},[67,23939,23940,23942],{"class":69,"line":70},[67,23941,15411],{"class":73},[67,23943,23944],{"class":112},"  Person\n",[67,23946,23947],{"class":69,"line":143},[67,23948,2269],{"class":77},[67,23950,23951,23953],{"class":69,"line":149},[67,23952,2707],{"class":73},[67,23954,22109],{"class":77},[67,23956,23957,23959,23961],{"class":69,"line":155},[67,23958,15626],{"class":73},[67,23960,12103],{"class":112},[67,23962,2698],{"class":77},[67,23964,23965],{"class":69,"line":161},[67,23966,2752],{"class":77},[67,23968,23969],{"class":69,"line":167},[67,23970,177],{"emptyLinePlaceholder":176},[67,23972,23973],{"class":69,"line":173},[67,23974,2909],{"class":77},[67,23976,23977],{"class":69,"line":180},[67,23978,4715],{"class":77},[19,23980,23981],{},"输出结果：4\n成员函数与成员变量是分开存储的，非静态成员函数不属于类对象上",[815,23983,23984],{"start":149},[818,23985,23986],{},"加上静态成员函数",[57,23988,23990],{"className":852,"code":23989,"language":854,"meta":62,"style":62},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n    static void func1()\n    {\n\n    }\n};\n\n",[64,23991,23992,23998,24002,24008,24016,24020,24024,24028,24039,24043,24047,24051],{"__ignoreMap":62},[67,23993,23994,23996],{"class":69,"line":70},[67,23995,15411],{"class":73},[67,23997,23944],{"class":112},[67,23999,24000],{"class":69,"line":143},[67,24001,2269],{"class":77},[67,24003,24004,24006],{"class":69,"line":149},[67,24005,2707],{"class":73},[67,24007,22109],{"class":77},[67,24009,24010,24012,24014],{"class":69,"line":155},[67,24011,15626],{"class":73},[67,24013,12103],{"class":112},[67,24015,2698],{"class":77},[67,24017,24018],{"class":69,"line":161},[67,24019,2752],{"class":77},[67,24021,24022],{"class":69,"line":167},[67,24023,177],{"emptyLinePlaceholder":176},[67,24025,24026],{"class":69,"line":173},[67,24027,2909],{"class":77},[67,24029,24030,24032,24034,24037],{"class":69,"line":180},[67,24031,11738],{"class":73},[67,24033,23283],{"class":73},[67,24035,24036],{"class":112}," func1",[67,24038,2698],{"class":77},[67,24040,24041],{"class":69,"line":186},[67,24042,2752],{"class":77},[67,24044,24045],{"class":69,"line":444},[67,24046,177],{"emptyLinePlaceholder":176},[67,24048,24049],{"class":69,"line":2335},[67,24050,2909],{"class":77},[67,24052,24053],{"class":69,"line":2340},[67,24054,4715],{"class":77},[19,24056,23924],{},[19,24058,24059],{},"解释：静态成员函数也不属于类上",[779,24061,8393],{},{"title":62,"searchDepth":143,"depth":143,"links":24063},[24064,24070],{"id":15362,"depth":143,"text":15363,"children":24065},[24066,24067,24068,24069],{"id":15366,"depth":149,"text":15367},{"id":16091,"depth":149,"text":16092},{"id":16263,"depth":149,"text":16264},{"id":16722,"depth":149,"text":16723},{"id":19094,"depth":143,"text":19095,"children":24071},[24072,24073,24074,24075,24076,24077,24078,24079,24080],{"id":19106,"depth":149,"text":19107},{"id":19399,"depth":149,"text":19400},{"id":19890,"depth":149,"text":19891},{"id":20987,"depth":149,"text":20988},{"id":21410,"depth":149,"text":21411},{"id":21889,"depth":149,"text":21890},{"id":22264,"depth":149,"text":22265},{"id":22677,"depth":149,"text":22678},{"id":23613,"depth":149,"text":23614},"C++面向对象的三大特性为封装、继承、多态",{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch8",{"title":15327,"description":24081},"wiki\u002F2026-05-24-c++学习\u002Fch8-类和对象","zb3Tc7FBL0NwZ1Abpqpn9O1Rg-UdgPbemeNRscdNci4",{"id":24088,"title":854,"body":24089,"description":24093,"extension":787,"meta":24094,"navigation":176,"path":24096,"seo":24097,"stem":24098,"__hash__":24099},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Findex.md",{"type":7,"value":24090,"toc":24091},[],{"title":62,"searchDepth":143,"depth":143,"links":24092},[],null,{"category":24095},"机器人","\u002Fwiki\u002F2026-05-24-c++",{"title":854,"description":24093},"wiki\u002F2026-05-24-c++学习\u002Findex","C9n-1L0uN4HGOF9HS37y6tUkSfEeWPo7gZVXtwLRezw",{"id":24101,"title":24102,"body":24103,"description":62,"extension":787,"meta":24690,"navigation":176,"path":24691,"seo":24692,"stem":24693,"__hash__":24694},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识.md","1.强化学习基本认识",{"type":7,"value":24104,"toc":24672},[24105,24108,24112,24115,24118,24121,24139,24144,24147,24150,24153,24156,24161,24164,24169,24172,24175,24179,24182,24185,24191,24194,24212,24216,24220,24223,24228,24231,24235,24238,24251,24254,24258,24261,24264,24267,24292,24295,24304,24315,24330,24362,24366,24373,24381,24385,24388,24391,24396,24400,24403,24406,24411,24414,24418,24421,24424,24429,24432,24436,24441,24445,24512,24516,24519,24522,24525,24528,24531,24537,24555,24558,24572,24580,24584,24587,24590,24595,24598,24603,24608,24611,24614,24619,24624,24627,24632,24637,24640,24645,24650,24653,24656,24661,24664,24669],[10,24106,24102],{"id":24107},"_1强化学习基本认识",[803,24109,24111],{"id":24110},"_11什么是强化学习","1.1.什么是强化学习",[19,24113,24114],{},"强化学习有两部分组成：智能体和环境；",[19,24116,24117],{},"监督学习：①输入的数据（标注的数据）都应是没有关联的；②需要我们告诉学习器正确的标签是什么，学习器会根据正确标签来修正自己的预测",[19,24119,24120],{},"强化学习与监督学习的区别:",[815,24122,24123,24126,24129,24132],{},[818,24124,24125],{},"强化学习输入的样本是序列数据(是时间序列数据)，而不像监督学习里面样本都是独立的",[818,24127,24128],{},"学习器并没有告诉我们每一步正确的动作应该是什么，学习器需要自己去发现哪些动作可以带来最多的奖励，只能通过不停地尝试来发现最有利的动作",[818,24130,24131],{},"智能体获得自己能力的过程，其实是不断地试错探索（trial-and-error exploration）的过程。探索（exploration）和利用（exploitation）是强化学习里面非常核心的问题。其中，探索指尝试一些新的动作,这些新的动作有可能会使我们得到更多的奖励，也有可能使我们“一无所有”；利用指采取已知的可以获得最多奖励的动作，重复执行这个动作，因为我们知道这样做可以获得一定的奖励。因此，我们需要在探索和利用之间进行权衡，这也是在监督学习里面没有的情况",[818,24133,24134,24135,24138],{},"在强化学习过程中，没有非常强的监督者（supervisor），只有 ",[336,24136,24137],{},"奖励信号（reward signal）"," ，并且奖励信号是延迟的，即环境会在很久以后告诉我们之前我们采取的动作到底是不是有效的。因为我们没有得到即时反馈，所以智能体使用强化学习来学习就非常困难。当我们采取一个动作后，如果我们使用监督学习，我们就可以立刻获得一个指导，比如，我们现在采取了一个错误的动作，正确的动作应该是什么。而在强化学习里面，环境可能会告诉我们这个动作是错误的，但是它并没有告诉我们正确的动作是什么。而且更困难的是，它可能是在一两分钟过后告诉我们这个动作是错误的。所以这也是强化学习和监督学习不同的地方",[19,24140,24141],{},[725,24142],{"alt":62,"src":24143},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-001.png",[19,24145,24146],{},"在强化学习过程中，智能体与环境一直在交互。智能体在环境里面获取某个状态后，它会利用该状态输出",[19,24148,24149],{},"一个动作（action），这个动作也称为决策（decision）。然后这个动作会在环境之中被执行，环境会根据智",[19,24151,24152],{},"能体采取的动作，输出下一个状态以及当前这个动作带来的奖励。智能体的目的就是尽可能多地从环境中",[19,24154,24155],{},"获取奖励",[19,24157,24158],{},[725,24159],{"alt":62,"src":24160},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-002.png",[19,24162,24163],{},"强化学习可以分成标准强化学习和深度强化学习",[19,24165,24166],{},[725,24167],{"alt":62,"src":24168},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-003.png",[19,24170,24171],{},"标准强化学习需要先设计很多特征，这些特征可以描述现在整个状态。得到这些特征后，我们就可以通过训练一个分类网络或者分别训练一个价值估计函数来采取动作",[19,24173,24174],{},"深度强化学习是一个端到端训练过程，省去了设计特征，直接输入状态就可以输出动作",[803,24176,24178],{"id":24177},"_12强化学习应用场景","1.2.强化学习应用场景",[19,24180,24181],{},"具身智能、isaaclab中机械臂的仿真任务、无人驾驶等",[19,24183,24184],{},"具身智能中的应用",[19,24186,24187,24190],{},[336,24188,24189],{},"Sim2Real（仿真到现实）："," 由于在现实中训练机器人太慢且危险，RL通常在物理仿真环境中让机器人疯狂试错，获得高奖励的策略，然后迁移到现实",[19,24192,24193],{},"RL与VLA结合可以对VLA模型进行微调和自我修正任务",[19,24195,24196,24197,24200,24201,24204,24205,24208,24209],{},"机器人是",[336,24198,24199],{},"躯体","，深度学习是",[336,24202,24203],{},"神经元****网络","，VLA是",[336,24206,24207],{},"通用的行为逻辑","，而强化学习是",[336,24210,24211],{},"教练",[803,24213,24215],{"id":24214},"_13序列决策","1.3.序列决策",[14,24217,24219],{"id":24218},"_131智能体与环境","1.3.1.智能体与环境",[19,24221,24222],{},"强化学习研究的问题是智能体agent与环境交互的问题",[19,24224,24225],{},[725,24226],{"alt":62,"src":24227},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-004.png",[19,24229,24230],{},"agent把动作输出给环境，环境根据agent的动作会把下一步的观测与这个动作带来的奖励还给agent，交互可以产生非常多的观测，agent的目的就是从这些观测中学到最大化奖励的策略",[14,24232,24234],{"id":24233},"_132奖励","1.3.2.奖励",[19,24236,24237],{},"奖励是由环境给的一种标量的反馈信号（scalar feedback signal），这种信号可显示智能体在某一步采",[19,24239,24240,24241,24250],{},"取某个策略的表现如何。强化学习的目的就是",[336,24242,24243,24244,24249],{},"最大化",[336,24245,24246],{},[336,24247,24248],{},"智能体","可以获得的奖励","，智能体在环境里面存在的目",[19,24252,24253],{},"的就是最大化它的期望的累积奖励（expected cumulative reward）。不同的环境中，奖励也是不同的。",[14,24255,24257],{"id":24256},"_133序列决策","1.3.3.序列决策",[19,24259,24260],{},"强化学习里一个重要的课题就是近期奖励和远期奖励的权衡 （trade-off），研究怎么让agent取得更多的远期奖励",[19,24262,24263],{},"在与环境的交互过程中，智能体会获得很多观测。针对每一个观测，智能体会采取一个动作，也会得",[19,24265,24266],{},"到一个奖励。所以历史是观测、动作、奖励的序列：",[19,24268,24269,24273,24274,24276,24277,24279,24280,24282,24283,614,24286,614,24289],{},[24270,24271,24272],"em",{},"Ht"," = ",[24270,24275,1452],{},"1*, a",[24270,24278,1077],{},", r",[24270,24281,1077],{},", . . . ,* ",[24270,24284,24285],{},"ot",[24270,24287,24288],{},", at ,",[24270,24290,24291],{},"rt",[19,24293,24294],{},"智能体在采取当前动作的时候会依赖于它之前得到的历史，所以我们可以把整个游戏的状态看成关于这个历史的函数：",[19,24296,24297,24273,24300,2381,24302,260],{},[24270,24298,24299],{},"st",[24270,24301,915],{},[24270,24303,24272],{},[19,24305,24306,24307,24310,24311,24314],{},"环境有自己的函数来更新状态，在智能体的内部也有一个函数来更新状态。当智能体的状态与环境的状态等价的时候，即当智能体能够观察到环境的所有状态时，我们称这个环境是 ",[336,24308,24309],{},"完全可观测的（fully observed）"," 。在这种情况下面，强化学习通常被建模成一个 ",[336,24312,24313],{},"马尔可夫决策过程（Markov decision process，MDP）"," 的问题。",[19,24316,24317,24318,24321,24322,24325,24326,24329],{},"当智能体只能看到部分的观测，我们就称这个环境是 ",[336,24319,24320],{},"部分可观测的（partially observed）。"," 在这种情况下，强化学习通常被建模成 ",[336,24323,24324],{},"部分可观测马尔可夫决策过程（partially observable Markov decision process, POMDP）"," 的问题。部分可观测马尔可夫决策过程是马尔可夫决策过程的一种泛化。部分可观测马尔可夫决策过程依然具有马尔可夫性质，但是假设智能体无法感知环境的状态，只能知道部分观测值。比如在自动驾驶中，智能体只能感知传感器采集的有限的环境信息。部分可观测马尔可夫决策过程可以用一个七元组描述：(",[24270,24327,24328],{},"S, A, T, R, Ω, O, γ",")。",[19,24331,24332,24333,24335,24336,24338,24339,864,24341,24344,24345,24347,24348,864,24351,24354,24355,24357,24358,24361],{},"其中 ",[24270,24334,1545],{}," 表示状态空间，为隐变量，",[24270,24337,1092],{}," 为动作空间，",[24270,24340,1570],{},[24270,24342,24343],{},"s ′ |s, a",") 为状态转移概率，",[24270,24346,1520],{}," 为奖励函数，",[24270,24349,24350],{},"Ω",[24270,24352,24353],{},"o|s, a",") 为观测概率，",[24270,24356,1446],{}," 为观测空间，",[24270,24359,24360],{},"γ"," 为折扣因子。",[803,24363,24365],{"id":24364},"_14动作空间","1.4.动作空间",[19,24367,24368,24369,24372],{},"不同的环境允许不同种类的动作。在给定的环境中，有效动作的集合经常被称为 ",[336,24370,24371],{},"动作空间"," ，动作空间分为:",[815,24374,24375,24378],{},[818,24376,24377],{},"离散动作空间:在该空间中，智能体的动作数量是有限的",[818,24379,24380],{},"连续动作空间：在其他环境，比如在物理世界中控制一个智能体，在这个环境中就有连续动作空间，在连续动作空间中，动作是实值的向量",[803,24382,24384],{"id":24383},"_15强化学习智能体的组成成分和类型","1.5.强化学习智能体的组成成分和类型",[19,24386,24387],{},"由策略、价值函数、模型三部分组成",[19,24389,24390],{},"这三者组成马尔可夫决策过程",[19,24392,24393],{},[725,24394],{"alt":62,"src":24395},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-005.png",[14,24397,24399],{"id":24398},"_151策略","1.5.1.策略",[19,24401,24402],{},"策略是智能体的动作模型，它决定了智能体的动作。它其实是一个函数，用于把输入的状态变成动作。",[19,24404,24405],{},"策略可分为两种：",[19,24407,24408],{},[725,24409],{"alt":62,"src":24410},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-006.png",[19,24412,24413],{},"强化学习一般使用的是随机性策略，相比于确定性策略使得agent对同样的状态采用相同的动作，随机性策略动作具有多样性，在智能体博弈时非常重要",[14,24415,24417],{"id":24416},"_152价值函数","1.5.2.价值函数",[19,24419,24420],{},"这个函数是对未来奖励的预测-->评估状态的好坏",[19,24422,24423],{},"价值函数中有一个折扣因子，类似于存款利息",[19,24425,24426],{},[725,24427],{"alt":62,"src":24428},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-007.png",[19,24430,24431],{},"进入某个状态采取的最优动作可以通过Q函数得到",[14,24433,24435],{"id":24434},"_153模型","1.5.3.模型",[19,24437,24438],{},[725,24439],{"alt":62,"src":24440},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-008.png",[803,24442,24444],{"id":24443},"_16强化学习智能体的类型","1.6.强化学习智能体的类型",[998,24446,24447,24458],{},[1001,24448,24449],{},[1004,24450,24451,24455],{},[1007,24452,24454],{"align":24453},"left","类型",[1007,24456,24457],{"align":24453},"特点",[1044,24459,24460,24470,24480,24490,24502],{},[1004,24461,24462,24467],{},[1049,24463,24464],{"align":24453},[336,24465,24466],{},"基于价值的智能体",[1049,24468,24469],{"align":24453},"显式地学习价值函数，隐式地学习它的策略。 策略是其从学到的价值函数里面推算出来的。",[1004,24471,24472,24477],{},[1049,24473,24474],{"align":24453},[336,24475,24476],{},"基于策略的智能体",[1049,24478,24479],{"align":24453},"直接学习策略，没有学习价值函数",[1004,24481,24482,24487],{},[1049,24483,24484],{"align":24453},[336,24485,24486],{},"演员-评论员智能体",[1049,24488,24489],{"align":24453},"基于策略的智能体和基于价值智能体的结合版，将策略和价值都学习了，通过两者的交互得到最佳动作",[1004,24491,24492,24497],{},[1049,24493,24494],{"align":24453},[336,24495,24496],{},"有模型强化学习智能体",[1049,24498,24499],{"align":24453},[725,24500],{"alt":62,"src":24501},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-009.png",[1004,24503,24504,24509],{},[1049,24505,24506],{"align":24453},[336,24507,24508],{},"免模型强化学习智能体",[1049,24510,24511],{"align":24453},"没有去直接估计状态的转移，也没有得到环境的具体转移量，它通过学习价值函数和策略函数进行决策，没有环境转移的模型 不对环境建模，直接与真实环境交互学习得到最优策略",[803,24513,24515],{"id":24514},"_17剩余强化学习概念知识","1.7.剩余强化学习概念知识",[19,24517,24518],{},"学习和规划是序列决策的两个基本问题",[19,24520,24521],{},"一个常用的强化学习问题解决思路：先学习环境如何工作，也就是了解环境工作的方式，即学习得到一个模型，然后利用这个模型进行规划",[19,24523,24524],{},"在强化学习里面，探索和利用是两个很核心的问题。探索即我们去探索环境，通过尝试不同的动作来得到最佳的策略（带来最大奖励的策略）。利用即我们不去尝试新的动作，而是采取已知的可以带来很大奖励的动作",[19,24526,24527],{},"强化学习用到的库：Gym",[19,24529,24530],{},"Gym可以检验强化学习算法的优劣",[19,24532,24533,24536],{},[336,24534,24535],{},"Gym 库"," 是一个环境仿真库，里面包含很多现有的环境。针对不同的场景，我们可以选择不同的环境。离散控制场景一般使用雅达利环境评估；连续控制场景一 般使用 MuJoCo 环境评估",[57,24538,24540],{"className":59,"code":24539,"language":61,"meta":62,"style":62},"pip install gym==0.25.2\n",[64,24541,24542],{"__ignoreMap":62},[67,24543,24544,24547,24549,24552],{"class":69,"line":70},[67,24545,24546],{"class":112},"pip",[67,24548,312],{"class":84},[67,24550,24551],{"class":84}," gym==",[67,24553,24554],{"class":208},"0.25.2\n",[19,24556,24557],{},"显示图形界面需要",[57,24559,24561],{"className":59,"code":24560,"language":61,"meta":62,"style":62},"pip install pygame\n",[64,24562,24563],{"__ignoreMap":62},[67,24564,24565,24567,24569],{"class":69,"line":70},[67,24566,24546],{"class":112},[67,24568,312],{"class":84},[67,24570,24571],{"class":84}," pygame\n",[19,24573,24574,24575],{},"有关Gym库的相关文档介绍：",[28,24576,24579],{"href":24577,"rel":24578},"https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic%5C_usage\u002F",[32],"https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic\\_usage\u002F",[803,24581,24583],{"id":24582},"_18一些补充基础概念","1.8.一些补充基础概念",[19,24585,24586],{},"强化学习的过程:强化学习中会使用概率密度函数来表示智能体根据当前的状态所作的动作的概率情况，智能体在执行动作之后，此时会得到一个奖励函数，此时会更新智能体的状态",[19,24588,24589],{},"St时刻的奖励函数肯定要比St+1时刻的奖励函数要值钱一些的，因为St时刻的奖励获得后，St+1时刻的奖励不一定就会获得，所以要给未来的奖励打折扣，所以折扣回报如下:",[19,24591,24592],{},[725,24593],{"alt":62,"src":24594},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-010.png",[19,24596,24597],{},"折扣率需要自己来设定",[19,24599,24600],{},[725,24601],{"alt":62,"src":24602},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-011.png",[815,24604,24605],{},[818,24606,24607],{},"状态转移函数：",[19,24609,24610],{},"指的是在状态 s下执行动作a后，环境有多大可能会进入每一个可能的下一个状态s'",[19,24612,24613],{},"例如角色在坐标中运动，得到的信息会是下方这种情况",[19,24615,24616],{},[725,24617],{"alt":62,"src":24618},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-012.png",[815,24620,24621],{"start":143},[818,24622,24623],{},"动作价值函数：",[19,24625,24626],{},"在t时刻并不知道这个折扣函数Ut是啥，所以可以对Ut求期望，QΠ只依赖于当前的状态St和动作at，动作价值可以反映当前状态St下，智能体做动作at的好坏程度",[19,24628,24629],{},[725,24630],{"alt":62,"src":24631},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-013.png",[815,24633,24634],{"start":149},[818,24635,24636],{},"最优动作价值函数：",[19,24638,24639],{},"这个函数是对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,24641,24642],{},[725,24643],{"alt":62,"src":24644},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-014.png",[815,24646,24647],{"start":155},[818,24648,24649],{},"状态价值函数:",[19,24651,24652],{},"在遵循某个特定策略 π 的情况下，从状态 s 开始，所能获得的期望折扣回报（平均长期总收益）",[19,24654,24655],{},"它衡量的是“一个具体动作”的长期价值",[19,24657,24658],{},[725,24659],{"alt":62,"src":24660},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-015.png",[19,24662,24663],{},"几个价值函数之间的比较：",[19,24665,24666],{},[725,24667],{"alt":62,"src":24668},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-016.png",[779,24670,24671],{},"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":62,"searchDepth":143,"depth":143,"links":24673},[24674,24675,24676,24681,24682,24687,24688,24689],{"id":24110,"depth":143,"text":24111},{"id":24177,"depth":143,"text":24178},{"id":24214,"depth":143,"text":24215,"children":24677},[24678,24679,24680],{"id":24218,"depth":149,"text":24219},{"id":24233,"depth":149,"text":24234},{"id":24256,"depth":149,"text":24257},{"id":24364,"depth":143,"text":24365},{"id":24383,"depth":143,"text":24384,"children":24683},[24684,24685,24686],{"id":24398,"depth":149,"text":24399},{"id":24416,"depth":149,"text":24417},{"id":24434,"depth":149,"text":24435},{"id":24443,"depth":143,"text":24444},{"id":24514,"depth":143,"text":24515},{"id":24582,"depth":143,"text":24583},{},"\u002Fwiki\u002F2025-12-04\u002Fch1",{"title":24102,"description":62},"wiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识","QQJgDM8AHMQ2lFI0H5HtcYYpQ6x5K4ccUrZvuGfUAxM",{"id":24696,"title":24697,"body":24698,"description":24705,"extension":787,"meta":24716,"navigation":176,"path":24717,"seo":24718,"stem":24719,"__hash__":24720},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程.md","2.马尔可夫决策过程",{"type":7,"value":24699,"toc":24714},[24700,24703,24706,24711],[10,24701,24697],{"id":24702},"_2马尔可夫决策过程",[19,24704,24705],{},"这是强化学习的基本框架",[19,24707,24708],{},[725,24709],{"alt":62,"src":24710},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-017.png",[19,24712,24713],{},"马尔可夫过程指的是状态，核心为单步状态依赖",{"title":62,"searchDepth":143,"depth":143,"links":24715},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch2",{"title":24697,"description":24705},"wiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程","V3fB9MQC6Z7cMbsh_eQBMmJ6frTaqyZrzXVsFs9eZSM",{"id":24722,"title":24723,"body":24724,"description":62,"extension":787,"meta":24840,"navigation":176,"path":24841,"seo":24842,"stem":24843,"__hash__":24844},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数.md","3.动作价值函数",{"type":7,"value":24725,"toc":24835},[24726,24729,24733,24736,24741,24746,24749,24754,24757,24762,24765,24769,24774,24777,24782,24787,24792,24795,24799,24804,24807,24812,24817,24822,24827,24830],[10,24727,24723],{"id":24728},"_3动作价值函数",[803,24730,24732],{"id":24731},"_31dqn","3.1.DQN",[19,24734,24735],{},"Deep Q-Network是一种价值学习的方法，用一个神经网络去近似Q*函数，将神经网络近似为Q（s,a;w）",[19,24737,24738],{},[725,24739],{"alt":62,"src":24740},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-018.png",[19,24742,24743],{},[725,24744],{"alt":62,"src":24745},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-019.png",[19,24747,24748],{},"DQN算法的描述：",[19,24750,24751],{},[725,24752],{"alt":62,"src":24753},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-020.png",[19,24755,24756],{},"这里的Dense指的是全连接层",[19,24758,24759],{},[725,24760],{"alt":62,"src":24761},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-021.png",[19,24763,24764],{},"当前观测的状态为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算法",[803,24766,24768],{"id":24767},"_32dqn的举例","3.2.DQN的举例",[19,24770,24771],{},[725,24772],{"alt":62,"src":24773},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-022.png",[19,24775,24776],{},"上方进行模型预测的话需要完成整个过程才可以对模型进行更新，使用TD算法可以改进这一问题，不需要完成整个过程，只需要利用其中的一段过程来更新模型",[19,24778,24779],{},[725,24780],{"alt":62,"src":24781},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-023.png",[19,24783,24784],{},[725,24785],{"alt":62,"src":24786},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-024.png",[19,24788,24789],{},[725,24790],{"alt":62,"src":24791},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-025.png",[19,24793,24794],{},"TD算法的原理是尽可能的让TD error=0(预计时间与实际时间相等)，TD算法要用梯度下降来减少TD error",[803,24796,24798],{"id":24797},"_33td算法","3.3.TD算法",[19,24800,24801],{},[725,24802],{"alt":62,"src":24803},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-026.png",[19,24805,24806],{},"强化学习TD算法公式的粗略解释：",[19,24808,24809],{},[725,24810],{"alt":62,"src":24811},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-027.png",[19,24813,24814],{},[725,24815],{"alt":62,"src":24816},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-028.png",[19,24818,24819],{},[725,24820],{"alt":62,"src":24821},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-029.png",[19,24823,24824],{},[725,24825],{"alt":62,"src":24826},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-030.png",[19,24828,24829],{},"TD算法总结：",[19,24831,24832],{},[725,24833],{"alt":62,"src":24834},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-031.png",{"title":62,"searchDepth":143,"depth":143,"links":24836},[24837,24838,24839],{"id":24731,"depth":143,"text":24732},{"id":24767,"depth":143,"text":24768},{"id":24797,"depth":143,"text":24798},{},"\u002Fwiki\u002F2025-12-04\u002Fch3",{"title":24723,"description":62},"wiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数","hOI8u98eYzg8VeCIrCMpe_y_lDcQnTxfrNA8iN4Vl7g",{"id":24846,"title":24847,"body":24848,"description":62,"extension":787,"meta":25081,"navigation":176,"path":25082,"seo":25083,"stem":25084,"__hash__":25085},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch4-策略函数.md","4.策略学习",{"type":7,"value":24849,"toc":25077},[24850,24853,24857,24860,24863,24868,24873,24876,24881,24886,24889,24894,24897,24902,24905,24910,24913,24918,24921,24926,24931,24934,24939,24942,24945,24950,24953,24958,24963,24967,24970,24973,24978,24983,24986,24991,24996,24999,25004,25007,25010,25015,25018,25023,25026,25031,25036,25039,25044,25049,25052,25057,25060,25065,25068],[10,24851,24847],{"id":24852},"_4策略学习",[803,24854,24856],{"id":24855},"_41概念描述","4.1.概念描述",[19,24858,24859],{},"用神经网络（策略网络）近似策略函数",[19,24861,24862],{},"策略函数是一个概率密度函数，可以用它来自动控制agent运动，输入是状态s，输出是一个概率分布",[19,24864,24865],{},[725,24866],{"alt":62,"src":24867},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-032.png",[19,24869,24870],{},[725,24871],{"alt":62,"src":24872},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-033.png",[19,24874,24875],{},"softmax函数这个激活函数可以让输出都为正数，且加和为1，策略函数必须满足如下性质：对于所有可能的动作A，把Π函数的输出全部加起来必须要等于1",[19,24877,24878],{},[725,24879],{"alt":62,"src":24880},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-034.png",[19,24882,24883],{},[725,24884],{"alt":62,"src":24885},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-035.png",[19,24887,24888],{},"使用神经网络来近似策略函数，这样的话VΠ(St)就变为了VΠ(St,theta)，theta是神经网络中的参数 实现策略网络近似策略函数，V可以评价状态S和策略网络的好坏，给定状态S和策略网络越好，则V值越大",[19,24890,24891],{},[725,24892],{"alt":62,"src":24893},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-036.png",[19,24895,24896],{},"所以关键在于让策略网络变得越来越好：改变模型参数theta，让V(St,theta)变大，基于此我们可以把目标函数定义为V(St,theta)的期望J(theta)，这个期望是关于状态s来求解的，将状态S作为随机变量用期望的形式将其去掉，这样就只剩theta--->J(theta)就是对策略网络的评价（策略网络i越好，J(theta)就越大）",[19,24898,24899],{},[725,24900],{"alt":62,"src":24901},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-037.png",[19,24903,24904],{},"改进theta要用到策略梯度算法",[19,24906,24907],{},[725,24908],{"alt":62,"src":24909},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-038.png",[19,24911,24912],{},"这里采用梯度上升的形式实现theta更新(我们希望theta变大以提高J值)",[19,24914,24915],{},[725,24916],{"alt":62,"src":24917},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-039.png",[19,24919,24920],{},"假设QΠ(s,a)不依赖于theta，不影响最后结果的，即使QΠ是theta的导数最终结果也依然是如下的结果",[19,24922,24923],{},[725,24924],{"alt":62,"src":24925},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-040.png",[19,24927,24928],{},[725,24929],{"alt":62,"src":24930},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-041.png",[19,24932,24933],{},"梯度公式总结：",[19,24935,24936],{},[725,24937],{"alt":62,"src":24938},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-042.png",[19,24940,24941],{},"两个公式的分别应用场景：",[19,24943,24944],{},"对于离散的动作：",[19,24946,24947],{},[725,24948],{"alt":62,"src":24949},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-043.png",[19,24951,24952],{},"对于连续的动作：",[19,24954,24955],{},[725,24956],{"alt":62,"src":24957},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-044.png",[19,24959,24960],{},[725,24961],{"alt":62,"src":24962},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-045.png",[803,24964,24966],{"id":24965},"_42概率梯度算法总结","4.2.概率梯度算法总结",[19,24968,24969],{},"使用蒙特卡洛来近似计算策略梯度",[19,24971,24972],{},"蒙特卡洛法的解释如下：",[19,24974,24975],{},[725,24976],{"alt":62,"src":24977},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-046.png",[19,24979,24980],{},[725,24981],{"alt":62,"src":24982},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-047.png",[19,24984,24985],{},"但是现在存在一个问题，并不知道动作价值函数的值(QΠ(St,at))，可以通过如下两个办法来近似qt",[815,24987,24988],{},[818,24989,24990],{},"方法一：reinforce算法",[19,24992,24993],{},[725,24994],{"alt":62,"src":24995},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-048.png",[19,24997,24998],{},"用策略网络来控制agent的运动，从一开始到玩到游戏结束，把整个游戏的轨迹都记录下来了，观测到所有的奖励R，我们可以算出折扣汇报Ut，由于价值函数QΠ(St,at)是大于Ut的期望，所以可以用Ut的观测值ut来近似QΠ，这个REINFORCE算法就是用观测到的ut来代替QΠ函数，这个算法需要玩完一局游戏，观测到所有的奖励，然后才可以更新策略网络",[815,25000,25001],{"start":143},[818,25002,25003],{},"方法二：actor-critic算法",[19,25005,25006],{},"这一方法是用一个神经网络来做函数近似QΠ，这样加上之前用神经网络近似的策略函数Π，总共有两个神经网络，一个被称为actor，一个被称为critic，这个方法就是actor-critic方法，这个方法将策略学习与价值学习结合起来（策略网络用来控制agent的运动，可以将策略网络理解为体操运动员，要做一连串的动作；价值网络用来评价动作的好坏，可以将价值网络理解为裁判或评委，给运动员动作打分；终极目标是训练这个策略函数Π，也就是这个运动员，价值网络作为裁判起辅助作用，最后训好就不再用了）",[19,25008,25009],{},"两个网络的构建：",[19,25011,25012],{},[725,25013],{"alt":62,"src":25014},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-049.png",[19,25016,25017],{},"actor网路：",[19,25019,25020],{},[725,25021],{"alt":62,"src":25022},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-050.png",[19,25024,25025],{},"critic网络",[19,25027,25028],{},[725,25029],{"alt":62,"src":25030},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-051.png",[815,25032,25033],{"start":149},[818,25034,25035],{},"网络的训练",[19,25037,25038],{},"网络描述",[19,25040,25041],{},[725,25042],{"alt":62,"src":25043},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-052.png",[19,25045,25046],{},[725,25047],{"alt":62,"src":25048},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-053.png",[19,25050,25051],{},"TD算法更新梯度：",[19,25053,25054],{},[725,25055],{"alt":62,"src":25056},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-054.png",[19,25058,25059],{},"策略网络更新梯度：",[19,25061,25062],{},[725,25063],{"alt":62,"src":25064},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-055.png",[19,25066,25067],{},"训练整个流程的具体描述：",[19,25069,25070,25073,25074],{},[725,25071],{"alt":62,"src":25072},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-056.png","\n4.  算法步骤总结：\n",[725,25075],{"alt":62,"src":25076},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-057.png",{"title":62,"searchDepth":143,"depth":143,"links":25078},[25079,25080],{"id":24855,"depth":143,"text":24856},{"id":24965,"depth":143,"text":24966},{},"\u002Fwiki\u002F2025-12-04\u002Fch4",{"title":24847,"description":62},"wiki\u002F2025-12-04-强化学习\u002Fch4-策略函数","iPTq7imHbOiAmdpc63dBoleY9XDApFgwiwvhpbNentI",{"id":25087,"title":25088,"body":25089,"description":25096,"extension":787,"meta":25146,"navigation":176,"path":25147,"seo":25148,"stem":25149,"__hash__":25150},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法.md","5.Alphago算法",{"type":7,"value":25090,"toc":25142},[25091,25094,25097,25101,25104,25109,25113,25116,25121,25124,25129,25134,25137],[10,25092,25088],{"id":25093},"_5alphago算法",[19,25095,25096],{},"这一算法有两种实现形式：通过模仿学习来训练策略网络或通过强化学习来训练策略网络",[803,25098,25100],{"id":25099},"_51behavior-cloning训练策略网络","5.1.Behavior cloning训练策略网络",[19,25102,25103],{},"使用behavior cloning来训练策略网络，模仿人类的动作来实现任务的，不会用到rewards奖励；behavior cloning的缺陷是无法保证状态St一定出现在训练数据中，策略网络没有见过状态St，策略网络的决策at就会比较差，会使得错误累加，导致状态变得越来越奇怪",[19,25105,25106],{},[725,25107],{"alt":62,"src":25108},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-058.png",[803,25110,25112],{"id":25111},"_52上述弊端的解决方式","5.2.上述弊端的解决方式",[19,25114,25115],{},"采用强化学习的方式训练策略网络",[19,25117,25118],{},[725,25119],{"alt":62,"src":25120},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-059.png",[19,25122,25123],{},"Alphago让两个策略网络进行博弈(player和opponent)，Player就是agent，它是由策略网络来控制的，用的是策略网络最新的模型参数，每下完一局围棋，把胜负作为奖励，靠奖励来更新player的参数；opponent相当于环境，它是用来陪agent的，每当player下一个棋子，opponent也要跟着走一步，相当于随机状态转移，opponent也是策略网络来控制的，但是opponent的参数不用学习，随机从旧的参数中选出一个作为opponent的参数即可",[19,25125,25126],{},[725,25127],{"alt":62,"src":25128},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-060.png",[19,25130,25131],{},[725,25132],{"alt":62,"src":25133},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-061.png",[19,25135,25136],{},"强化学习训练策略网络的总结：",[19,25138,25139],{},[725,25140],{"alt":62,"src":25141},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-062.png",{"title":62,"searchDepth":143,"depth":143,"links":25143},[25144,25145],{"id":25099,"depth":143,"text":25100},{"id":25111,"depth":143,"text":25112},{},"\u002Fwiki\u002F2025-12-04\u002Fch5-alphago",{"title":25088,"description":25096},"wiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法","7NankPVCRx1TrpHTCvluPUc71533NNCBPe3Q8v6G_DE",{"id":25152,"title":25153,"body":25154,"description":25161,"extension":787,"meta":25164,"navigation":176,"path":25165,"seo":25166,"stem":25167,"__hash__":25168},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch6-价值网络.md","6.价值网络",{"type":7,"value":25155,"toc":25162},[25156,25159],[10,25157,25153],{"id":25158},"_6价值网络",[19,25160,25161],{},"价值网络是对状态价值函数V的近似，而不是对Q的近似",{"title":62,"searchDepth":143,"depth":143,"links":25163},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch6",{"title":25153,"description":25161},"wiki\u002F2025-12-04-强化学习\u002Fch6-价值网络","3cEHo5nTUYq0vWJWE4vi_wjaXMU6_zNuhEXQKUo0VEw",{"id":25170,"title":25171,"body":25172,"description":25176,"extension":787,"meta":25177,"navigation":176,"path":25178,"seo":25179,"stem":25180,"__hash__":25181},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Findex.md","强化学习",{"type":7,"value":25173,"toc":25174},[],{"title":62,"searchDepth":143,"depth":143,"links":25175},[],"记录自己的强化学习笔记。",{"category":24095},"\u002Fwiki\u002F2025-12-04",{"title":25171,"description":25176},"wiki\u002F2025-12-04-强化学习\u002Findex","mU4IQte9eGoyxGmnQYAjswHUQyt6-Sy7KQ-XeruBDHA",{"id":25183,"title":25184,"body":25185,"description":24093,"extension":787,"meta":25224,"navigation":176,"path":25225,"seo":25226,"stem":25227,"__hash__":25228},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源.md","1. 项目概览与官方资源",{"type":7,"value":25186,"toc":25222},[25187,25190,25193,25199,25202,25208,25211,25216,25219],[10,25188,25184],{"id":25189},"_1-项目概览与官方资源",[19,25191,25192],{},"官方文档：",[19,25194,25195],{},[28,25196,25197],{"href":25197,"rel":25198},"https:\u002F\u002Fhuggingface.co\u002Fdocs\u002Flerobot\u002Fso101",[32],[19,25200,25201],{},"官方代码仓库：",[19,25203,25204],{},[28,25205,25206],{"href":25206,"rel":25207},"https:\u002F\u002Fgithub.com\u002Fhuggingface\u002Flerobot",[32],[19,25209,25210],{},"复现大体流程：",[19,25212,25213],{},[725,25214],{"alt":62,"src":25215},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-001.png",[19,25217,25218],{},"本教程的目标是打通这条链路：",[19,25220,25221],{},"硬件连通 -> 遥操采集 -> 数据集上传 -> ACT 训练 -> 策略回放\u002F部署。",{"title":62,"searchDepth":143,"depth":143,"links":25223},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch1",{"title":25184,"description":24093},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源","aG5q21Mq3Ar_oYCKvVnhRqPnnBwQLIhGvrE7YSibWFk",{"id":25230,"title":25231,"body":25232,"description":24093,"extension":787,"meta":25347,"navigation":176,"path":25348,"seo":25349,"stem":25350,"__hash__":25351},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接.md","2. 环境准备与设备连接",{"type":7,"value":25233,"toc":25342},[25234,25237,25241,25244,25251,25255,25258,25267,25277,25281,25310,25313,25339],[10,25235,25231],{"id":25236},"_2-环境准备与设备连接",[803,25238,25240],{"id":25239},"_21-系统与环境","2.1 系统与环境",[19,25242,25243],{},"可用系统：Linux \u002F Windows(Wsl2) \u002F macOS。",[19,25245,25246,25247,25250],{},"建议使用 conda 创建独立虚拟环境，并按官方文档安装 ",[64,25248,25249],{},"lerobot"," 依赖。",[803,25252,25254],{"id":25253},"_22-机械臂串口识别","2.2 机械臂串口识别",[19,25256,25257],{},"需要用拓展坞把 usb 和电源接到 MotorBus。执行端口探测命令：",[57,25259,25261],{"className":59,"code":25260,"language":61,"meta":62,"style":62},"lerobot-find-out\n",[64,25262,25263],{"__ignoreMap":62},[67,25264,25265],{"class":69,"line":70},[67,25266,25260],{"class":112},[19,25268,25269,25270,1072,25273,25276],{},"按提示断开\u002F接回线缆后，记录识别出的串口（如 ",[64,25271,25272],{},"\u002Fdev\u002FttyACM0",[64,25274,25275],{},"\u002Fdev\u002FttyACM1","）。",[803,25278,25280],{"id":25279},"_23-串口授权","2.3 串口授权",[57,25282,25284],{"className":59,"code":25283,"language":61,"meta":62,"style":62},"sudo chmod 666 \u002Fdev\u002FttyACM0\nsudo chmod 666 \u002Fdev\u002FttyACM1\n",[64,25285,25286,25299],{"__ignoreMap":62},[67,25287,25288,25290,25293,25296],{"class":69,"line":70},[67,25289,298],{"class":112},[67,25291,25292],{"class":84}," chmod",[67,25294,25295],{"class":208}," 666",[67,25297,25298],{"class":84}," \u002Fdev\u002FttyACM0\n",[67,25300,25301,25303,25305,25307],{"class":69,"line":143},[67,25302,298],{"class":112},[67,25304,25292],{"class":84},[67,25306,25295],{"class":208},[67,25308,25309],{"class":84}," \u002Fdev\u002FttyACM1\n",[19,25311,25312],{},"说明：",[1863,25314,25315,25320,25326,25336],{},[818,25316,25317,25319],{},[64,25318,298],{},"：以 root 权限执行命令。",[818,25321,25322,25325],{},[64,25323,25324],{},"chmod","：修改设备节点权限。",[818,25327,25328,25331,25332,25335],{},[64,25329,25330],{},"666","：",[64,25333,25334],{},"rw-rw-rw-","，所有用户可读写。",[818,25337,25338],{},"串口号必须替换为你机器上的真实端口。",[779,25340,25341],{},"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":62,"searchDepth":143,"depth":143,"links":25343},[25344,25345,25346],{"id":25239,"depth":143,"text":25240},{"id":25253,"depth":143,"text":25254},{"id":25279,"depth":143,"text":25280},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch2",{"title":25231,"description":24093},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接","rkCwGsCF9P0Hxf6FNqwOMf_cN32ap76nbDFqDZjilSg",{"id":25353,"title":25354,"body":25355,"description":24093,"extension":787,"meta":25515,"navigation":176,"path":25516,"seo":25517,"stem":25518,"__hash__":25519},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准.md","3. 电机ID配置与机械臂校准",{"type":7,"value":25356,"toc":25511},[25357,25361,25365,25371,25374,25430,25433,25437,25440,25508],[10,25358,25360],{"id":25359},"_3-电机-id-配置与机械臂校准","3. 电机 ID 配置与机械臂校准",[803,25362,25364],{"id":25363},"_31-配置电机-id","3.1 配置电机 ID",[19,25366,25367,25368,25370],{},"每个电机都需要唯一 ID。新电机默认常见为 ",[64,25369,1077],{},"，需要改成机械臂链路里不冲突的编号。",[19,25372,25373],{},"方式一：用 LeRobot 命令逐步写入。",[57,25375,25377],{"className":59,"code":25376,"language":61,"meta":62,"style":62},"# 主臂舵机配置 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",[64,25378,25379,25384,25391,25398,25403,25407,25412,25418,25425],{"__ignoreMap":62},[67,25380,25381],{"class":69,"line":70},[67,25382,25383],{"class":202},"# 主臂舵机配置 ID\n",[67,25385,25386,25389],{"class":69,"line":143},[67,25387,25388],{"class":112},"lerobot-setup-motors",[67,25390,212],{"class":208},[67,25392,25393,25396],{"class":69,"line":149},[67,25394,25395],{"class":208},"  --teleop.type=so101_leader",[67,25397,212],{"class":208},[67,25399,25400],{"class":69,"line":155},[67,25401,25402],{"class":208},"  --teleop.port=\u002Fdev\u002FttyACM0\n",[67,25404,25405],{"class":69,"line":161},[67,25406,177],{"emptyLinePlaceholder":176},[67,25408,25409],{"class":69,"line":167},[67,25410,25411],{"class":202},"# 从臂舵机配置 ID\n",[67,25413,25414,25416],{"class":69,"line":173},[67,25415,25388],{"class":112},[67,25417,212],{"class":208},[67,25419,25420,25423],{"class":69,"line":180},[67,25421,25422],{"class":208},"  --robot.type=so101_follower",[67,25424,212],{"class":208},[67,25426,25427],{"class":69,"line":186},[67,25428,25429],{"class":208},"  --robot.port=\u002Fdev\u002FttyACM1\n",[19,25431,25432],{},"方式二：使用对应舵机厂商调试工具改 ID（排障时也常用）。",[803,25434,25436],{"id":25435},"_32-机械臂校准","3.2 机械臂校准",[19,25438,25439],{},"校准时先把关节放到行程中间位置，按提示在全行程内运动每个关节。",[57,25441,25443],{"className":59,"code":25442,"language":61,"meta":62,"style":62},"# 主臂校准\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",[64,25444,25445,25450,25457,25463,25470,25475,25479,25484,25490,25496,25503],{"__ignoreMap":62},[67,25446,25447],{"class":69,"line":70},[67,25448,25449],{"class":202},"# 主臂校准\n",[67,25451,25452,25455],{"class":69,"line":143},[67,25453,25454],{"class":112},"lerobot-calibrate",[67,25456,212],{"class":208},[67,25458,25459,25461],{"class":69,"line":149},[67,25460,25395],{"class":208},[67,25462,212],{"class":208},[67,25464,25465,25468],{"class":69,"line":155},[67,25466,25467],{"class":208},"  --teleop.port=\u002Fdev\u002FttyACM0",[67,25469,212],{"class":208},[67,25471,25472],{"class":69,"line":161},[67,25473,25474],{"class":208},"  --teleop.id=my_awesome_leader_arm\n",[67,25476,25477],{"class":69,"line":167},[67,25478,177],{"emptyLinePlaceholder":176},[67,25480,25481],{"class":69,"line":173},[67,25482,25483],{"class":202},"# 从臂校准\n",[67,25485,25486,25488],{"class":69,"line":180},[67,25487,25454],{"class":112},[67,25489,212],{"class":208},[67,25491,25492,25494],{"class":69,"line":186},[67,25493,25422],{"class":208},[67,25495,212],{"class":208},[67,25497,25498,25501],{"class":69,"line":444},[67,25499,25500],{"class":208},"  --robot.port=\u002Fdev\u002FttyACM1",[67,25502,212],{"class":208},[67,25504,25505],{"class":69,"line":2335},[67,25506,25507],{"class":208},"  --robot.id=my_awesome_follower_arm\n",[779,25509,25510],{},"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":62,"searchDepth":143,"depth":143,"links":25512},[25513,25514],{"id":25363,"depth":143,"text":25364},{"id":25435,"depth":143,"text":25436},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch3-id",{"title":25354,"description":24093},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准","FWPrvO5PLjTaitrb_QEQTCyLpoBM2eeoOlKlR4HoLMc",{"id":25521,"title":25522,"body":25523,"description":24093,"extension":787,"meta":25714,"navigation":176,"path":25715,"seo":25716,"stem":25717,"__hash__":25718},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入.md","4. 遥操与相机接入",{"type":7,"value":25524,"toc":25710},[25525,25528,25532,25579,25583,25596,25659,25662,25707],[10,25526,25522],{"id":25527},"_4-遥操与相机接入",[803,25529,25531],{"id":25530},"_41-不带相机遥操","4.1 不带相机遥操",[57,25533,25535],{"className":59,"code":25534,"language":61,"meta":62,"style":62},"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",[64,25536,25537,25544,25550,25556,25563,25569,25575],{"__ignoreMap":62},[67,25538,25539,25542],{"class":69,"line":70},[67,25540,25541],{"class":112},"lerobot-teleoperate",[67,25543,212],{"class":208},[67,25545,25546,25548],{"class":69,"line":143},[67,25547,25422],{"class":208},[67,25549,212],{"class":208},[67,25551,25552,25554],{"class":69,"line":149},[67,25553,25500],{"class":208},[67,25555,212],{"class":208},[67,25557,25558,25561],{"class":69,"line":155},[67,25559,25560],{"class":208},"  --robot.id=my_awesome_follower_arm",[67,25562,212],{"class":208},[67,25564,25565,25567],{"class":69,"line":161},[67,25566,25395],{"class":208},[67,25568,212],{"class":208},[67,25570,25571,25573],{"class":69,"line":167},[67,25572,25467],{"class":208},[67,25574,212],{"class":208},[67,25576,25577],{"class":69,"line":173},[67,25578,25474],{"class":208},[803,25580,25582],{"id":25581},"_42-查找相机并启用可视化","4.2 查找相机并启用可视化",[57,25584,25586],{"className":59,"code":25585,"language":61,"meta":62,"style":62},"lerobot-find-cameras opencv\n",[64,25587,25588],{"__ignoreMap":62},[67,25589,25590,25593],{"class":69,"line":70},[67,25591,25592],{"class":112},"lerobot-find-cameras",[67,25594,25595],{"class":84}," opencv\n",[57,25597,25599],{"className":59,"code":25598,"language":61,"meta":62,"style":62},"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",[64,25600,25601,25607,25613,25619,25625,25635,25641,25647,25654],{"__ignoreMap":62},[67,25602,25603,25605],{"class":69,"line":70},[67,25604,25541],{"class":112},[67,25606,212],{"class":208},[67,25608,25609,25611],{"class":69,"line":143},[67,25610,25422],{"class":208},[67,25612,212],{"class":208},[67,25614,25615,25617],{"class":69,"line":149},[67,25616,25500],{"class":208},[67,25618,212],{"class":208},[67,25620,25621,25623],{"class":69,"line":155},[67,25622,25560],{"class":208},[67,25624,212],{"class":208},[67,25626,25627,25630,25633],{"class":69,"line":161},[67,25628,25629],{"class":208},"  --robot.cameras=",[67,25631,25632],{"class":84},"\"{ front: {type: opencv, index_or_path: \u002Fdev\u002Fvideo4, width: 640, height: 480, fps: 30}}\"",[67,25634,212],{"class":208},[67,25636,25637,25639],{"class":69,"line":167},[67,25638,25395],{"class":208},[67,25640,212],{"class":208},[67,25642,25643,25645],{"class":69,"line":173},[67,25644,25467],{"class":208},[67,25646,212],{"class":208},[67,25648,25649,25652],{"class":69,"line":180},[67,25650,25651],{"class":208},"  --teleop.id=my_awesome_leader_arm",[67,25653,212],{"class":208},[67,25655,25656],{"class":69,"line":186},[67,25657,25658],{"class":208},"  --display_data=true\n",[19,25660,25661],{},"相机参数说明：",[1863,25663,25664,25670,25676,25685,25695,25701],{},[818,25665,25666,25669],{},[64,25667,25668],{},"front","：相机名称。",[818,25671,25672,25675],{},[64,25673,25674],{},"type: opencv","：相机驱动类型。",[818,25677,25678,25681,25682,25276],{},[64,25679,25680],{},"index_or_path","：设备编号或设备路径（如 ",[64,25683,25684],{},"\u002Fdev\u002Fvideo4",[818,25686,25687,25690,25691,25694],{},[64,25688,25689],{},"width"," \u002F ",[64,25692,25693],{},"height","：图像分辨率。",[818,25696,25697,25700],{},[64,25698,25699],{},"fps","：采样帧率。",[818,25702,25703,25706],{},[64,25704,25705],{},"--display_data=true","：启用实时可视化。",[779,25708,25709],{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-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":62,"searchDepth":143,"depth":143,"links":25711},[25712,25713],{"id":25530,"depth":143,"text":25531},{"id":25581,"depth":143,"text":25582},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch4",{"title":25522,"description":24093},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入","V7Ps_cVCNPrXljkxAGw33NUyz0IWtr3kXqwGCWdWgQY",{"id":25720,"title":25721,"body":25722,"description":24093,"extension":787,"meta":25891,"navigation":176,"path":25892,"seo":25893,"stem":25894,"__hash__":25895},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备.md","5. HuggingFace认证与仓库准备",{"type":7,"value":25723,"toc":25886},[25724,25728,25732,25737,25742,25745,25787,25793,25797,25843,25848,25852,25855,25863,25868,25873,25878,25883],[10,25725,25727],{"id":25726},"_5-hugging-face-认证与仓库准备","5. Hugging Face 认证与仓库准备",[803,25729,25731],{"id":25730},"_51-生成访问令牌","5.1 生成访问令牌",[19,25733,25734],{},[725,25735],{"alt":62,"src":25736},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-002.png",[19,25738,25739],{},[725,25740],{"alt":62,"src":25741},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-003.png",[19,25743,25744],{},"建议使用环境变量保存 token，不要把真实 token 写进脚本和仓库。",[57,25746,25748],{"className":59,"code":25747,"language":61,"meta":62,"style":62},"export HF_TOKEN=\"your_huggingface_token\"\nhf auth login --token \"$HF_TOKEN\" --add-to-git-credential\n",[64,25749,25750,25763],{"__ignoreMap":62},[67,25751,25752,25755,25758,25760],{"class":69,"line":70},[67,25753,25754],{"class":73},"export",[67,25756,25757],{"class":77}," HF_TOKEN",[67,25759,909],{"class":73},[67,25761,25762],{"class":84},"\"your_huggingface_token\"\n",[67,25764,25765,25768,25771,25774,25777,25779,25782,25784],{"class":69,"line":143},[67,25766,25767],{"class":112},"hf",[67,25769,25770],{"class":84}," auth",[67,25772,25773],{"class":84}," login",[67,25775,25776],{"class":208}," --token",[67,25778,251],{"class":84},[67,25780,25781],{"class":77},"$HF_TOKEN",[67,25783,257],{"class":84},[67,25785,25786],{"class":208}," --add-to-git-credential\n",[19,25788,25789,25792],{},[64,25790,25791],{},"--add-to-git-credential"," 会把 token 写入 git 凭据系统，后续推拉 Hugging Face 仓库可免重复登录。",[803,25794,25796],{"id":25795},"_52-验证登录","5.2 验证登录",[57,25798,25800],{"className":59,"code":25799,"language":61,"meta":62,"style":62},"HF_USER=$(hf auth whoami | head -n 1)\necho \"$HF_USER\"\n",[64,25801,25802,25831],{"__ignoreMap":62},[67,25803,25804,25807,25809,25811,25813,25815,25818,25820,25823,25826,25829],{"class":69,"line":70},[67,25805,25806],{"class":77},"HF_USER",[67,25808,909],{"class":73},[67,25810,237],{"class":77},[67,25812,25767],{"class":112},[67,25814,25770],{"class":84},[67,25816,25817],{"class":84}," whoami",[67,25819,266],{"class":73},[67,25821,25822],{"class":112}," head",[67,25824,25825],{"class":208}," -n",[67,25827,25828],{"class":208}," 1",[67,25830,870],{"class":77},[67,25832,25833,25835,25837,25840],{"class":69,"line":143},[67,25834,209],{"class":208},[67,25836,251],{"class":84},[67,25838,25839],{"class":77},"$HF_USER",[67,25841,25842],{"class":84},"\"\n",[19,25844,25845],{},[725,25846],{"alt":62,"src":25847},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-004.png",[803,25849,25851],{"id":25850},"_53-创建数据集仓库与模型仓库","5.3 创建数据集仓库与模型仓库",[19,25853,25854],{},"训练和回放都依赖远程仓库，需提前在 Hugging Face Hub 创建：",[1863,25856,25857,25860],{},[818,25858,25859],{},"Dataset Repo（用于上传演示数据）",[818,25861,25862],{},"Model Repo（用于上传训练后的 ACT 权重）",[19,25864,25865],{},[725,25866],{"alt":62,"src":25867},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-006.png",[19,25869,25870],{},[725,25871],{"alt":62,"src":25872},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-007.png",[19,25874,25875],{},[725,25876],{"alt":62,"src":25877},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-008.png",[19,25879,25880],{},[725,25881],{"alt":62,"src":25882},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-009.png",[779,25884,25885],{},"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":62,"searchDepth":143,"depth":143,"links":25887},[25888,25889,25890],{"id":25730,"depth":143,"text":25731},{"id":25795,"depth":143,"text":25796},{"id":25850,"depth":143,"text":25851},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch5-huggingface",{"title":25721,"description":24093},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备","WTvwmhXny3fI_3GR6axPCny7WggFD_5lp-pvwwDej6Y",{"id":25897,"title":25898,"body":25899,"description":24093,"extension":787,"meta":26096,"navigation":176,"path":26097,"seo":26098,"stem":26099,"__hash__":26100},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放.md","6. 数据录制重录与回放",{"type":7,"value":25900,"toc":26091},[25901,25905,25909,26005,26013,26018,26022,26038,26041,26045,26088],[10,25902,25904],{"id":25903},"_6-数据录制重录与回放","6. 数据录制、重录与回放",[803,25906,25908],{"id":25907},"_61-录制示教数据","6.1 录制示教数据",[57,25910,25912],{"className":59,"code":25911,"language":61,"meta":62,"style":62},"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",[64,25913,25914,25921,25927,25933,25939,25948,25954,25960,25966,25973,25983,25990,26000],{"__ignoreMap":62},[67,25915,25916,25919],{"class":69,"line":70},[67,25917,25918],{"class":112},"lerobot-record",[67,25920,212],{"class":208},[67,25922,25923,25925],{"class":69,"line":143},[67,25924,25422],{"class":208},[67,25926,212],{"class":208},[67,25928,25929,25931],{"class":69,"line":149},[67,25930,25500],{"class":208},[67,25932,212],{"class":208},[67,25934,25935,25937],{"class":69,"line":155},[67,25936,25560],{"class":208},[67,25938,212],{"class":208},[67,25940,25941,25943,25946],{"class":69,"line":161},[67,25942,25629],{"class":208},[67,25944,25945],{"class":84},"\"{ front: {type: opencv, index_or_path: 4, width: 640, height: 480, fps: 30}}\"",[67,25947,212],{"class":208},[67,25949,25950,25952],{"class":69,"line":167},[67,25951,25395],{"class":208},[67,25953,212],{"class":208},[67,25955,25956,25958],{"class":69,"line":173},[67,25957,25467],{"class":208},[67,25959,212],{"class":208},[67,25961,25962,25964],{"class":69,"line":180},[67,25963,25651],{"class":208},[67,25965,212],{"class":208},[67,25967,25968,25971],{"class":69,"line":186},[67,25969,25970],{"class":208},"  --display_data=true",[67,25972,212],{"class":208},[67,25974,25975,25978,25981],{"class":69,"line":444},[67,25976,25977],{"class":208},"  --dataset.repo_id=",[67,25979,25980],{"class":84},"\"Embodied-AI-6\u002Fso101_test\"",[67,25982,212],{"class":208},[67,25984,25985,25988],{"class":69,"line":2335},[67,25986,25987],{"class":208},"  --dataset.num_episodes=10",[67,25989,212],{"class":208},[67,25991,25992,25995,25998],{"class":69,"line":2340},[67,25993,25994],{"class":208},"  --dataset.single_task=",[67,25996,25997],{"class":84},"\"Grab the green cube\"",[67,25999,212],{"class":208},[67,26001,26002],{"class":69,"line":2346},[67,26003,26004],{"class":208},"  --resume=true\n",[1863,26006,26007],{},[818,26008,26009,26012],{},[64,26010,26011],{},"--resume=true","：已有同一数据集时继续追加 episode。",[19,26014,26015],{},[725,26016],{"alt":62,"src":26017},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-005.png",[803,26019,26021],{"id":26020},"_62-重录前清理本地缓存","6.2 重录前清理本地缓存",[57,26023,26025],{"className":59,"code":26024,"language":61,"meta":62,"style":62},"rm -rf \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[64,26026,26027],{"__ignoreMap":62},[67,26028,26029,26032,26035],{"class":69,"line":70},[67,26030,26031],{"class":112},"rm",[67,26033,26034],{"class":208}," -rf",[67,26036,26037],{"class":84}," \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[19,26039,26040],{},"注意：务必替换为自己的缓存路径，避免误删系统文件。",[803,26042,26044],{"id":26043},"_63-回放指定-episode","6.3 回放指定 episode",[57,26046,26048],{"className":59,"code":26047,"language":61,"meta":62,"style":62},"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",[64,26049,26050,26057,26063,26069,26075,26083],{"__ignoreMap":62},[67,26051,26052,26055],{"class":69,"line":70},[67,26053,26054],{"class":112},"lerobot-replay",[67,26056,212],{"class":208},[67,26058,26059,26061],{"class":69,"line":143},[67,26060,25422],{"class":208},[67,26062,212],{"class":208},[67,26064,26065,26067],{"class":69,"line":149},[67,26066,25500],{"class":208},[67,26068,212],{"class":208},[67,26070,26071,26073],{"class":69,"line":155},[67,26072,25560],{"class":208},[67,26074,212],{"class":208},[67,26076,26077,26079,26081],{"class":69,"line":161},[67,26078,25977],{"class":208},[67,26080,25980],{"class":84},[67,26082,212],{"class":208},[67,26084,26085],{"class":69,"line":167},[67,26086,26087],{"class":208},"  --dataset.episode=0\n",[779,26089,26090],{},"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":62,"searchDepth":143,"depth":143,"links":26092},[26093,26094,26095],{"id":25907,"depth":143,"text":25908},{"id":26020,"depth":143,"text":26021},{"id":26043,"depth":143,"text":26044},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch6",{"title":25898,"description":24093},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放","8nexk4omzICmhfOlIf4GxgMqb-maIwGqHLr4YUnYKQ4",{"id":26102,"title":26103,"body":26104,"description":24093,"extension":787,"meta":26232,"navigation":176,"path":26233,"seo":26234,"stem":26235,"__hash__":26236},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练.md","7. ACT模型训练",{"type":7,"value":26105,"toc":26230},[26106,26110,26173,26176,26223,26228],[10,26107,26109],{"id":26108},"_7-act-模型训练","7. ACT 模型训练",[57,26111,26113],{"className":59,"code":26112,"language":61,"meta":62,"style":62},"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",[64,26114,26115,26122,26130,26137,26144,26151,26158,26165],{"__ignoreMap":62},[67,26116,26117,26120],{"class":69,"line":70},[67,26118,26119],{"class":112},"lerobot-train",[67,26121,212],{"class":208},[67,26123,26124,26126,26128],{"class":69,"line":143},[67,26125,25977],{"class":208},[67,26127,25980],{"class":84},[67,26129,212],{"class":208},[67,26131,26132,26135],{"class":69,"line":149},[67,26133,26134],{"class":208},"  --policy.type=act",[67,26136,212],{"class":208},[67,26138,26139,26142],{"class":69,"line":155},[67,26140,26141],{"class":208},"  --output_dir=outputs\u002Ftrain\u002Fact_so101_test",[67,26143,212],{"class":208},[67,26145,26146,26149],{"class":69,"line":161},[67,26147,26148],{"class":208},"  --job_name=act_so101_test",[67,26150,212],{"class":208},[67,26152,26153,26156],{"class":69,"line":167},[67,26154,26155],{"class":208},"  --policy.device=cuda",[67,26157,212],{"class":208},[67,26159,26160,26163],{"class":69,"line":173},[67,26161,26162],{"class":208},"  --wandb.enable=false",[67,26164,212],{"class":208},[67,26166,26167,26170],{"class":69,"line":180},[67,26168,26169],{"class":208},"  --policy.repo_id=",[67,26171,26172],{"class":84},"\"Embodied-AI-6\u002Flerobot_new\"\n",[19,26174,26175],{},"参数说明：",[1863,26177,26178,26184,26190,26196,26202,26211,26217],{},[818,26179,26180,26183],{},[64,26181,26182],{},"--dataset.repo_id","：训练数据集仓库。",[818,26185,26186,26189],{},[64,26187,26188],{},"--policy.type=act","：策略模型类型为 ACT。",[818,26191,26192,26195],{},[64,26193,26194],{},"--output_dir","：本地训练输出目录。",[818,26197,26198,26201],{},[64,26199,26200],{},"--job_name","：训练任务名称。",[818,26203,26204,26207,26208,25276],{},[64,26205,26206],{},"--policy.device","：训练设备（如 ",[64,26209,26210],{},"cuda",[818,26212,26213,26216],{},[64,26214,26215],{},"--wandb.enable","：是否启用 WandB 可视化。",[818,26218,26219,26222],{},[64,26220,26221],{},"--policy.repo_id","：训练后模型推送目标仓库。",[19,26224,26225],{},[725,26226],{"alt":62,"src":26227},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-010.png",[779,26229,26090],{},{"title":62,"searchDepth":143,"depth":143,"links":26231},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch7-act",{"title":26103,"description":24093},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练","Qt8rQhlcgcPzm395Ved_SsG10oi0KN9HpAkfBVuC-CM",{"id":26238,"title":26239,"body":26240,"description":24093,"extension":787,"meta":26327,"navigation":176,"path":26328,"seo":26329,"stem":26330,"__hash__":26331},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集.md","8. 策略部署与自动采集",{"type":7,"value":26241,"toc":26325},[26242,26245,26248,26315,26323],[10,26243,26239],{"id":26244},"_8-策略部署与自动采集",[19,26246,26247],{},"使用已训练好的 ACT 模型驱动从臂执行，并继续录制新数据：",[57,26249,26251],{"className":59,"code":26250,"language":61,"meta":62,"style":62},"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",[64,26252,26253,26259,26265,26271,26279,26285,26292,26300,26308],{"__ignoreMap":62},[67,26254,26255,26257],{"class":69,"line":70},[67,26256,25918],{"class":112},[67,26258,212],{"class":208},[67,26260,26261,26263],{"class":69,"line":143},[67,26262,25422],{"class":208},[67,26264,212],{"class":208},[67,26266,26267,26269],{"class":69,"line":149},[67,26268,25500],{"class":208},[67,26270,212],{"class":208},[67,26272,26273,26275,26277],{"class":69,"line":155},[67,26274,25629],{"class":208},[67,26276,25945],{"class":84},[67,26278,212],{"class":208},[67,26280,26281,26283],{"class":69,"line":161},[67,26282,25560],{"class":208},[67,26284,212],{"class":208},[67,26286,26287,26290],{"class":69,"line":167},[67,26288,26289],{"class":208},"  --display_data=false",[67,26291,212],{"class":208},[67,26293,26294,26296,26298],{"class":69,"line":173},[67,26295,25977],{"class":208},[67,26297,25980],{"class":84},[67,26299,212],{"class":208},[67,26301,26302,26304,26306],{"class":69,"line":180},[67,26303,25994],{"class":208},[67,26305,25997],{"class":84},[67,26307,212],{"class":208},[67,26309,26310,26313],{"class":69,"line":186},[67,26311,26312],{"class":208},"  --policy.path=",[67,26314,26172],{"class":84},[1863,26316,26317],{},[818,26318,26319,26322],{},[64,26320,26321],{},"--policy.path","：已训练策略的本地路径或远程仓库路径。",[779,26324,26090],{},{"title":62,"searchDepth":143,"depth":143,"links":26326},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch8",{"title":26239,"description":24093},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集","i9uzLIpUhl0JgoMvjV4YJ3r41m04fqol_qiMKUFJZA0",{"id":26333,"title":26334,"body":26335,"description":24093,"extension":787,"meta":26364,"navigation":176,"path":26365,"seo":26366,"stem":26367,"__hash__":26368},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展.md","9. IsaacLab仿真拓展",{"type":7,"value":26336,"toc":26362},[26337,26341,26344,26350,26353,26359],[10,26338,26340],{"id":26339},"_9-isaaclab-仿真拓展","9. IsaacLab 仿真拓展",[19,26342,26343],{},"项目地址：",[19,26345,26346],{},[28,26347,26348],{"href":26348,"rel":26349},"https:\u002F\u002Fgithub.com\u002FLightwheelAI\u002Fleisaac",[32],[19,26351,26352],{},"参考教程：",[19,26354,26355],{},[28,26356,26357],{"href":26357,"rel":26358},"https:\u002F\u002Fcloud.tencent.com\u002Fdeveloper\u002Farticle\u002F2578981",[32],[19,26360,26361],{},"示例任务：仿真机械臂在厨房抓橘子。",{"title":62,"searchDepth":143,"depth":143,"links":26363},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch9-isaaclab",{"title":26334,"description":24093},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展","yFxqMAnCXTDYdIYJyAM2pC4uxbPPomVMI3Y_my_JAQY",{"id":26370,"title":26371,"body":26372,"description":26376,"extension":787,"meta":26377,"navigation":176,"path":26378,"seo":26379,"stem":26380,"__hash__":26381},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex.md","lerobot-act算法复现",{"type":7,"value":26373,"toc":26374},[],{"title":62,"searchDepth":143,"depth":143,"links":26375},[],"act复现",{"category":24095},"\u002Fwiki\u002F2025-12-01-lerobot101-act",{"title":26371,"description":26376},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex","O0oFPbXs3nGtmkVmLGeGnWlJcQIVE-dAD_mqYPwnk3w",{"id":26383,"title":26384,"body":26385,"description":62,"extension":787,"meta":26687,"navigation":176,"path":26688,"seo":26689,"stem":26690,"__hash__":26691},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch1-简介.md","1.简介",{"type":7,"value":26386,"toc":26679},[26387,26390,26394,26404,26411,26418,26421,26428,26431,26434,26438,26450,26454,26500,26503,26506,26509,26512,26515,26519,26557,26563,26567,26621,26626,26629,26632,26637,26640,26645,26648,26651,26655,26658,26661,26665],[10,26388,26384],{"id":26389},"_1简介",[14,26391,26393],{"id":26392},"_11什么是-docker","1.1什么是 Docker？",[19,26395,26396,26397,26400,26401],{},"Docker 是一个开源的 ",[336,26398,26399],{},"应用容器引擎"," ，可以让开发者将应用和其所有依赖打包成一个“容器”， ",[336,26402,26403],{},"一次构建，到处运行。",[19,26405,26406,26407,26410],{},"“ ",[336,26408,26409],{},"一次构建，到处运行"," ”也就是说：",[815,26412,26413],{},[818,26414,26415],{},[336,26416,26417],{},"之前：",[19,26419,26420],{},"之前想跑ROS2+OpenCV+CUDA+CuDNN，我需要在一台电脑上一个一个环境的安装配置，如果我还要在另一台电脑上跑这个，也需要把第二台电脑也这样配置一遍。如果我的系统环境崩了，需要重装系统了，重装完后又双叒叕要再来一遍配置过程，很麻烦。",[815,26422,26423],{},[818,26424,26425],{},[336,26426,26427],{},"使用docker后：",[19,26429,26430],{},"（docker镜像和docker容器的概念在下下下面，下面这段话里看到镜像和容器的概念先接受就行。）",[19,26432,26433],{},"我只需要在电脑上用docker配置一遍这个ROS2+OpenCV+CUDA+CuDNN环境，然后用docker生成一个镜像，把这个镜像打包好。以后在任何一台电脑上，我都可以直接用这个镜像生成一个容器，而这个容器内就包含了我所需要的ROS2+OpenCV+CUDA+CuDNN环境，如果我的容器环境崩了，我只需要把坏掉的容器删掉，重新由镜像再生成一个新的容器即可。只需要配置一次，以后都可以一键安装这个环境。",[14,26435,26437],{"id":26436},"_12它是怎么工作的","1.2.它是怎么工作的？",[1863,26439,26440,26443],{},[818,26441,26442],{},"传统方式：软件运行需要在不同系统上安装各种库、配置环境，很麻烦。",[818,26444,26445,26446,26449],{},"Docker方式：打包成“容器”，环境和应用一起封装， ",[336,26447,26448],{},"无论在哪运行都一样稳定"," 。",[14,26451,26453],{"id":26452},"_13docker-的几个基本概念","1.3.Docker 的几个基本概念",[998,26455,26456,26466],{},[1001,26457,26458],{},[1004,26459,26460,26463],{},[1007,26461,26462],{"align":24453},"概念",[1007,26464,26465],{"align":24453},"解释",[1044,26467,26468,26476,26484,26492],{},[1004,26469,26470,26473],{},[1049,26471,26472],{"align":24453},"镜像",[1049,26474,26475],{"align":24453},"Image，运行容器的模板，像是一个应用快照",[1004,26477,26478,26481],{},[1049,26479,26480],{"align":24453},"容器",[1049,26482,26483],{"align":24453},"Container，运行中的镜像实例，有自己的文件系统、网络等",[1004,26485,26486,26489],{},[1049,26487,26488],{"align":24453},"Dockerfile",[1049,26490,26491],{"align":24453},"构建镜像的脚本，写明安装哪些包、设置哪些环境变量等",[1004,26493,26494,26497],{},[1049,26495,26496],{"align":24453},"仓库",[1049,26498,26499],{"align":24453},"Registry，存放镜像的地方，比如 Docker Hub",[19,26501,26502],{},"抽象化理解:",[19,26504,26505],{},"Docker镜像≈C++类",[19,26507,26508],{},"Docker容器≈C++类实例(即对象)",[19,26510,26511],{},"形象化理解: 镜像可以类似于给电脑装系统的iso镜像文件。 容器可以类似于已经被装到电脑上的可以运行的系统。",[19,26513,26514],{},"把镜像变为容器时，需要用docker run命令添加很多参数，这个可以理解你这个电脑到底有啥硬件配置。",[14,26516,26518],{"id":26517},"_14类比理解","1.4.类比理解",[998,26520,26521,26531],{},[1001,26522,26523],{},[1004,26524,26525,26528],{},[1007,26526,26527],{"align":24453},"传统部署",[1007,26529,26530],{"align":24453},"Docker部署",[1044,26532,26533,26541,26549],{},[1004,26534,26535,26538],{},[1049,26536,26537],{"align":24453},"手动安装依赖、调试版本不一致问题",[1049,26539,26540],{"align":24453},"一次打包环境和代码",[1004,26542,26543,26546],{},[1049,26544,26545],{"align":24453},"程序“裸奔”跑在系统上",[1049,26547,26548],{"align":24453},"程序“穿着容器”隔离运行",[1004,26550,26551,26554],{},[1049,26552,26553],{"align":24453},"容易“在我电脑上能跑”",[1049,26555,26556],{"align":24453},"保证“无论在哪都能跑”",[19,26558,26559,26560],{},"就像快递包裹： ",[336,26561,26562],{},"你不再关心内容怎么运送，因为包装已经帮你做好了一切隔离。",[14,26564,26566],{"id":26565},"_15docker-的核心优势","1.5.Docker 的核心优势",[998,26568,26569,26579],{},[1001,26570,26571],{},[1004,26572,26573,26576],{},[1007,26574,26575],{"align":24453},"优势",[1007,26577,26578],{"align":24453},"说明",[1044,26580,26581,26589,26597,26605,26613],{},[1004,26582,26583,26586],{},[1049,26584,26585],{"align":24453},"轻量级",[1049,26587,26588],{"align":24453},"基于系统内核共享，启动速度快，占资源少",[1004,26590,26591,26594],{},[1049,26592,26593],{"align":24453},"跨平台",[1049,26595,26596],{"align":24453},"一次构建，到处运行（Windows、Linux、macOS 上都一致）",[1004,26598,26599,26602],{},[1049,26600,26601],{"align":24453},"易于迁移部署",[1049,26603,26604],{"align":24453},"应用和环境一起封装，不怕依赖不一致",[1004,26606,26607,26610],{},[1049,26608,26609],{"align":24453},"易于版本控制",[1049,26611,26612],{"align":24453},"镜像版本可控，支持回滚",[1004,26614,26615,26618],{},[1049,26616,26617],{"align":24453},"生态丰富",[1049,26619,26620],{"align":24453},"Docker Hub 上有成千上万的现成镜像可用",[815,26622,26623],{},[818,26624,26625],{},"在Linux上可以几乎实现无性能损失。",[19,26627,26628],{},"docker里的发行版和本机共用Linux内核。",[19,26630,26631],{},"CPU损耗不到1%。 内存接近原生没损耗。 硬盘损耗不到2%。 网络性能接近原生没有损耗。 显卡损耗小于1%。",[815,26633,26634],{},[818,26635,26636],{},"可以快速部署在绝大多数Linux发行版",[19,26638,26639],{},"你想跑ROS2，之前是仅在Ubuntu上是比较好部署的，但是现在你可以使用任意发行版，比如Fedora，ArchLinux等发行版上也能通过docker跑ROS2。",[815,26641,26642],{},[818,26643,26644],{},"配置环境简单",[19,26646,26647],{},"之前你需要在Ubuntu上按照教程安装ROS2，CUDA，CuDNN，OpenCV4等等，但是只要你用了Docker，可以直接用docker pull命令拉取别人配置好的开发环境，只需要一条命令直通罗马。",[19,26649,26650],{},"你仅仅只需要把一个发行版最基础的东西配置好，比如那些仓库换源，输入法，显卡驱动（只用让显卡工作起来，不用在本机配置CUDA和CuDNN）等。",[815,26652,26653],{},[818,26654,26617],{},[19,26656,26657],{},"生态极其丰富，有很多东西即便自己不构建，也能在dockerhub上找到别人构建好的镜像，自己连编译都省去了。",[19,26659,26660],{},"比如之前配置cuda和cudnn的话，需要在本机先安装英伟达驱动，再安装CUDA和CuDNN。而现在，我们只需要本机安装英伟达驱动，英伟达官方在DockerHub上提供了CUDA和CUDNN的镜像，他们已经编译好了，我们可以直接拿来用。",[14,26662,26664],{"id":26663},"_16常见-docker-应用场景","1.6.常见 Docker 应用场景",[1863,26666,26667,26670,26673,26676],{},[818,26668,26669],{},"本地开发：快速搭建各种开发环境（如 Python + Jupyter、ROS + Gazebo）",[818,26671,26672],{},"测试部署：CI\u002FCD 中自动测试、构建、部署",[818,26674,26675],{},"微服务架构：每个服务一个容器，灵活组合",[818,26677,26678],{},"科研工具封装：复现别人论文环境，或封装自己的项目发给他人使用",{"title":62,"searchDepth":143,"depth":143,"links":26680},[26681,26682,26683,26684,26685,26686],{"id":26392,"depth":149,"text":26393},{"id":26436,"depth":149,"text":26437},{"id":26452,"depth":149,"text":26453},{"id":26517,"depth":149,"text":26518},{"id":26565,"depth":149,"text":26566},{"id":26663,"depth":149,"text":26664},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch1",{"title":26384,"description":62},"wiki\u002F2025-11-10-Docker\u002Fch1-简介","RWfN-VzqXrPFzaf024ZOqhkFsjhm2OaDsrg8ij3bqRg",{"id":4,"title":5,"body":26693,"description":62,"extension":787,"meta":27259,"navigation":176,"path":789,"seo":27260,"stem":791,"__hash__":792},{"type":7,"value":26694,"toc":27254},[26695,26697,26699,26701,26703,26708,26713,26715,26720,26722,26762,26764,26804,26806,26872,26874,26904,26906,26912,26922,26927,26929,26997,26999,27039,27041,27063,27065,27069,27071,27083,27087,27089,27103,27107,27109,27123,27133,27137,27153,27157,27159,27169,27173,27175,27189,27193,27195,27213,27217,27219,27221,27223,27225,27227,27229,27234,27236,27238,27240,27244,27248,27252],[10,26696,5],{"id":12},[14,26698,17],{"id":16},[19,26700,21],{},[19,26702,24],{},[19,26704,26705],{},[28,26706,30],{"href":30,"rel":26707},[32],[19,26709,26710],{},[28,26711,37],{"href":37,"rel":26712},[32],[40,26714,43],{"id":42},[19,26716,46,26717,52],{},[28,26718,51],{"href":49,"rel":26719},[32],[19,26721,55],{},[57,26723,26724],{"className":59,"code":60,"language":61,"meta":62,"style":62},[64,26725,26726],{"__ignoreMap":62},[67,26727,26728,26730,26732,26734,26736,26738,26740,26742,26744,26746,26748,26750,26752,26754,26756,26758,26760],{"class":69,"line":70},[67,26729,74],{"class":73},[67,26731,78],{"class":77},[67,26733,81],{"class":73},[67,26735,85],{"class":84},[67,26737,88],{"class":84},[67,26739,91],{"class":84},[67,26741,94],{"class":84},[67,26743,97],{"class":84},[67,26745,100],{"class":84},[67,26747,103],{"class":84},[67,26749,106],{"class":77},[67,26751,109],{"class":73},[67,26753,113],{"class":112},[67,26755,116],{"class":84},[67,26757,119],{"class":84},[67,26759,122],{"class":77},[67,26761,125],{"class":73},[19,26763,128],{},[57,26765,26766],{"className":131,"code":132,"language":133,"meta":62,"style":62},[64,26767,26768,26772,26776,26780,26784,26788,26792,26796,26800],{"__ignoreMap":62},[67,26769,26770],{"class":69,"line":70},[67,26771,140],{},[67,26773,26774],{"class":69,"line":143},[67,26775,146],{},[67,26777,26778],{"class":69,"line":149},[67,26779,152],{},[67,26781,26782],{"class":69,"line":155},[67,26783,158],{},[67,26785,26786],{"class":69,"line":161},[67,26787,164],{},[67,26789,26790],{"class":69,"line":167},[67,26791,170],{},[67,26793,26794],{"class":69,"line":173},[67,26795,177],{"emptyLinePlaceholder":176},[67,26797,26798],{"class":69,"line":180},[67,26799,183],{},[67,26801,26802],{"class":69,"line":186},[67,26803,189],{},[19,26805,192],{},[57,26807,26808],{"className":59,"code":195,"language":61,"meta":62,"style":62},[64,26809,26810,26814,26820,26832,26860],{"__ignoreMap":62},[67,26811,26812],{"class":69,"line":70},[67,26813,203],{"class":202},[67,26815,26816,26818],{"class":69,"line":143},[67,26817,209],{"class":208},[67,26819,212],{"class":208},[67,26821,26822,26824,26826,26828,26830],{"class":69,"line":149},[67,26823,217],{"class":84},[67,26825,220],{"class":112},[67,26827,223],{"class":208},[67,26829,226],{"class":84},[67,26831,229],{"class":208},[67,26833,26834,26836,26838,26840,26842,26844,26846,26848,26850,26852,26854,26856,26858],{"class":69,"line":155},[67,26835,234],{"class":84},[67,26837,237],{"class":77},[67,26839,240],{"class":208},[67,26841,243],{"class":84},[67,26843,246],{"class":77},[67,26845,209],{"class":208},[67,26847,251],{"class":84},[67,26849,254],{"class":77},[67,26851,257],{"class":84},[67,26853,260],{"class":77},[67,26855,263],{"class":84},[67,26857,266],{"class":73},[67,26859,212],{"class":208},[67,26861,26862,26864,26866,26868,26870],{"class":69,"line":161},[67,26863,273],{"class":112},[67,26865,276],{"class":84},[67,26867,279],{"class":84},[67,26869,282],{"class":73},[67,26871,285],{"class":84},[19,26873,288],{},[57,26875,26876],{"className":59,"code":291,"language":61,"meta":62,"style":62},[64,26877,26878,26886],{"__ignoreMap":62},[67,26879,26880,26882,26884],{"class":69,"line":70},[67,26881,298],{"class":112},[67,26883,116],{"class":84},[67,26885,303],{"class":84},[67,26887,26888,26890,26892,26894,26896,26898,26900,26902],{"class":69,"line":143},[67,26889,298],{"class":112},[67,26891,116],{"class":84},[67,26893,312],{"class":84},[67,26895,315],{"class":84},[67,26897,318],{"class":84},[67,26899,321],{"class":84},[67,26901,324],{"class":84},[67,26903,327],{"class":84},[40,26905,331],{"id":330},[19,26907,334,26908,339,26910,343],{},[336,26909,338],{},[336,26911,342],{},[57,26913,26914],{"className":59,"code":346,"language":61,"meta":62,"style":62},[64,26915,26916],{"__ignoreMap":62},[67,26917,26918,26920],{"class":69,"line":70},[67,26919,353],{"class":112},[67,26921,356],{"class":208},[19,26923,46,26924,363],{},[28,26925,51],{"href":361,"rel":26926},[32],[19,26928,366],{},[57,26930,26931],{"className":59,"code":369,"language":61,"meta":62,"style":62},[64,26932,26933,26945,26951,26957,26963,26969,26975,26981,26987,26993],{"__ignoreMap":62},[67,26934,26935,26937,26939,26941,26943],{"class":69,"line":70},[67,26936,298],{"class":112},[67,26938,378],{"class":84},[67,26940,119],{"class":84},[67,26942,383],{"class":84},[67,26944,212],{"class":208},[67,26946,26947,26949],{"class":69,"line":143},[67,26948,390],{"class":84},[67,26950,212],{"class":208},[67,26952,26953,26955],{"class":69,"line":149},[67,26954,397],{"class":84},[67,26956,212],{"class":208},[67,26958,26959,26961],{"class":69,"line":155},[67,26960,404],{"class":84},[67,26962,212],{"class":208},[67,26964,26965,26967],{"class":69,"line":161},[67,26966,411],{"class":84},[67,26968,212],{"class":208},[67,26970,26971,26973],{"class":69,"line":167},[67,26972,418],{"class":84},[67,26974,212],{"class":208},[67,26976,26977,26979],{"class":69,"line":173},[67,26978,425],{"class":84},[67,26980,212],{"class":208},[67,26982,26983,26985],{"class":69,"line":180},[67,26984,432],{"class":84},[67,26986,212],{"class":208},[67,26988,26989,26991],{"class":69,"line":186},[67,26990,439],{"class":84},[67,26992,212],{"class":208},[67,26994,26995],{"class":69,"line":444},[67,26996,447],{"class":84},[19,26998,450],{},[57,27000,27001],{"className":59,"code":453,"language":61,"meta":62,"style":62},[64,27002,27003,27015,27027],{"__ignoreMap":62},[67,27004,27005,27007,27009,27011,27013],{"class":69,"line":70},[67,27006,298],{"class":112},[67,27008,378],{"class":84},[67,27010,464],{"class":208},[67,27012,312],{"class":84},[67,27014,469],{"class":84},[67,27016,27017,27019,27021,27023,27025],{"class":69,"line":143},[67,27018,298],{"class":112},[67,27020,378],{"class":84},[67,27022,478],{"class":84},[67,27024,481],{"class":84},[67,27026,484],{"class":208},[67,27028,27029,27031,27033,27035,27037],{"class":69,"line":149},[67,27030,298],{"class":112},[67,27032,491],{"class":84},[67,27034,494],{"class":208},[67,27036,497],{"class":84},[67,27038,500],{"class":84},[19,27040,503],{},[57,27042,27043],{"className":59,"code":506,"language":61,"meta":62,"style":62},[64,27044,27045],{"__ignoreMap":62},[67,27046,27047,27049,27051,27053,27055,27057,27059,27061],{"class":69,"line":70},[67,27048,298],{"class":112},[67,27050,378],{"class":84},[67,27052,312],{"class":84},[67,27054,315],{"class":84},[67,27056,318],{"class":84},[67,27058,321],{"class":84},[67,27060,324],{"class":84},[67,27062,327],{"class":84},[14,27064,530],{"id":529},[40,27066,27067,537],{"id":533},[336,27068,536],{},[19,27070,540],{},[57,27072,27073],{"className":59,"code":543,"language":61,"meta":62,"style":62},[64,27074,27075],{"__ignoreMap":62},[67,27076,27077,27079,27081],{"class":69,"line":70},[67,27078,550],{"class":112},[67,27080,553],{"class":84},[67,27082,556],{"class":84},[40,27084,27085,537],{"id":559},[336,27086,562],{},[19,27088,565],{},[57,27090,27091],{"className":59,"code":568,"language":61,"meta":62,"style":62},[64,27092,27093],{"__ignoreMap":62},[67,27094,27095,27097,27099,27101],{"class":69,"line":70},[67,27096,298],{"class":112},[67,27098,577],{"class":84},[67,27100,580],{"class":84},[67,27102,556],{"class":84},[40,27104,27105,537],{"id":585},[336,27106,588],{},[19,27108,591],{},[57,27110,27111],{"className":59,"code":594,"language":61,"meta":62,"style":62},[64,27112,27113],{"__ignoreMap":62},[67,27114,27115,27117,27119,27121],{"class":69,"line":70},[67,27116,298],{"class":112},[67,27118,577],{"class":84},[67,27120,605],{"class":84},[67,27122,556],{"class":84},[40,27124,27125,614,27127,614,27131,537],{"id":610},[336,27126,613],{},[336,27128,27129],{},[64,27130,619],{},[336,27132,622],{},[19,27134,625,27135,628],{},[64,27136,619],{},[57,27138,27139],{"className":59,"code":631,"language":61,"meta":62,"style":62},[64,27140,27141],{"__ignoreMap":62},[67,27142,27143,27145,27147,27149,27151],{"class":69,"line":70},[67,27144,298],{"class":112},[67,27146,640],{"class":84},[67,27148,643],{"class":208},[67,27150,383],{"class":84},[67,27152,648],{"class":77},[40,27154,27155,537],{"id":651},[336,27156,654],{},[19,27158,657],{},[57,27160,27161],{"className":59,"code":660,"language":61,"meta":62,"style":62},[64,27162,27163],{"__ignoreMap":62},[67,27164,27165,27167],{"class":69,"line":70},[67,27166,667],{"class":112},[67,27168,556],{"class":84},[40,27170,27171,537],{"id":672},[336,27172,675],{},[19,27174,678],{},[57,27176,27177],{"className":59,"code":568,"language":61,"meta":62,"style":62},[64,27178,27179],{"__ignoreMap":62},[67,27180,27181,27183,27185,27187],{"class":69,"line":70},[67,27182,298],{"class":112},[67,27184,577],{"class":84},[67,27186,580],{"class":84},[67,27188,556],{"class":84},[40,27190,27191,537],{"id":695},[336,27192,698],{},[19,27194,701],{},[57,27196,27197],{"className":59,"code":704,"language":61,"meta":62,"style":62},[64,27198,27199,27205],{"__ignoreMap":62},[67,27200,27201,27203],{"class":69,"line":70},[67,27202,298],{"class":112},[67,27204,713],{"class":84},[67,27206,27207,27209,27211],{"class":69,"line":143},[67,27208,550],{"class":112},[67,27210,553],{"class":84},[67,27212,556],{"class":84},[19,27214,27215],{},[725,27216],{"alt":62,"src":727},[19,27218,730],{},[19,27220,733],{},[14,27222,737],{"id":736},[19,27224,740],{},[19,27226,743],{},[19,27228,746],{},[19,27230,749,27231],{},[28,27232,752],{"href":752,"rel":27233},[32],[19,27235,756],{},[19,27237,759],{},[19,27239,762],{},[19,27241,27242],{},[725,27243],{"alt":62,"src":767},[19,27245,27246],{},[725,27247],{"alt":62,"src":772},[19,27249,27250],{},[725,27251],{"alt":62,"src":777},[779,27253,781],{},{"title":62,"searchDepth":143,"depth":143,"links":27255},[27256,27257,27258],{"id":16,"depth":149,"text":17},{"id":529,"depth":149,"text":530},{"id":736,"depth":149,"text":737},{},{"title":5,"description":62},{"id":27262,"title":27263,"body":27264,"description":27271,"extension":787,"meta":27964,"navigation":176,"path":27965,"seo":27966,"stem":27967,"__hash__":27968},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch3-Docker直通.md","3.Docker直通",{"type":7,"value":27265,"toc":27958},[27266,27269,27272,27276,27281,27286,27289,27317,27322,27331,27334,27339,27343,27350,27355,27361,27365,27368,27372,27377,27469,27474,27492,27497,27518,27523,27539,27543,27548,27577,27582,27628,27633,27677,27685,27702,27707,27723,27728,27742,27745,27748,27751,27754,27783,27786,27791,27795,27798,27801,27807,27810,27813,27816,27878,27885,27890,27893,27911,27915,27918,27935,27938,27941,27955],[10,27267,27263],{"id":27268},"_3docker直通",[19,27270,27271],{},"将宿主机的硬件设备或特定资源直接传递给Docker容器使用的技术",[14,27273,27275],{"id":27274},"_31usb直通","3.1.USB直通",[19,27277,27278],{},[725,27279],{"alt":62,"src":27280},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-005.png",[815,27282,27283],{},[818,27284,27285],{},"方法一(不是很推荐新手)：",[19,27287,27288],{},"创建容器的时候把需要的设备加在红色部分这里即可。可以通过下面的命令查看想要的设备的名字。",[57,27290,27292],{"className":59,"code":27291,"language":61,"meta":62,"style":62},"ls \u002Fdev\n#例如\n--device=\u002Fdev\u002Ftty_USB0\n",[64,27293,27294,27302,27307],{"__ignoreMap":62},[67,27295,27296,27299],{"class":69,"line":70},[67,27297,27298],{"class":112},"ls",[67,27300,27301],{"class":84}," \u002Fdev\n",[67,27303,27304],{"class":69,"line":143},[67,27305,27306],{"class":202},"#例如\n",[67,27308,27309,27312,27314],{"class":69,"line":149},[67,27310,27311],{"class":77},"--device",[67,27313,909],{"class":73},[67,27315,27316],{"class":84},"\u002Fdev\u002Ftty_USB0\n",[815,27318,27319],{"start":143},[818,27320,27321],{},"方法二(个人更加推荐，不用重新再挂载了，虽然安全性会降低，但是别人利用安全权限能够攻击你的概率很低很低，企业服务器才需要提防)：",[57,27323,27325],{"className":59,"code":27324,"language":61,"meta":62,"style":62},"--privileged\n",[64,27326,27327],{"__ignoreMap":62},[67,27328,27329],{"class":69,"line":70},[67,27330,27324],{"class":112},[19,27332,27333],{},"直接添加一行绿色部分，然后所有设备都会被挂载到docker了。(红色部分就不用写了）",[19,27335,27336],{},[725,27337],{"alt":62,"src":27338},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-006.png",[14,27340,27342],{"id":27341},"_32nvidia显卡直通","3.2.NVIDIA显卡直通",[19,27344,27345,27346,27349],{},"NVIDIA Container Toolkit使用户 ",[336,27347,27348],{},"能够构建和运行GPU加速的容器"," 。该工具包包括一个容器运行库和实用程序，用于自动配置容器以利用NVIDIA GPU。",[19,27351,27352],{},[725,27353],{"alt":62,"src":27354},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-007.png",[19,27356,27357],{},[28,27358,27359],{"href":27359,"rel":27360},"https:\u002F\u002Fdocs.nvidia.com\u002Fdatacenter\u002Fcloud-native\u002Fcontainer-toolkit\u002Flatest\u002Finstall-guide.html",[32],[40,27362,27364],{"id":27363},"_321安装","3.2.1.安装",[19,27366,27367],{},"（尽量能看官方就看官方的，安装方式可能会更新）",[23626,27369,27371],{"id":27370},"_3211ubuntu","3.2.1.1.Ubuntu",[815,27373,27374],{},[818,27375,27376],{},"配置存储库 并更新",[57,27378,27380],{"className":59,"code":27379,"language":61,"meta":62,"style":62},"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",[64,27381,27382,27411,27431,27443,27455,27461],{"__ignoreMap":62},[67,27383,27384,27387,27390,27393,27395,27397,27400,27403,27406,27409],{"class":69,"line":70},[67,27385,27386],{"class":112},"curl",[67,27388,27389],{"class":208}," -fsSL",[67,27391,27392],{"class":84}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fgpgkey",[67,27394,266],{"class":73},[67,27396,113],{"class":112},[67,27398,27399],{"class":84}," gpg",[67,27401,27402],{"class":208}," --dearmor",[67,27404,27405],{"class":208}," -o",[67,27407,27408],{"class":84}," \u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg",[67,27410,212],{"class":208},[67,27412,27413,27416,27418,27421,27424,27427,27429],{"class":69,"line":143},[67,27414,27415],{"class":77},"  && ",[67,27417,27386],{"class":112},[67,27419,27420],{"class":208}," -s",[67,27422,27423],{"class":208}," -L",[67,27425,27426],{"class":84}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Fdeb\u002Fnvidia-container-toolkit.list",[67,27428,266],{"class":73},[67,27430,212],{"class":208},[67,27432,27433,27436,27439,27441],{"class":69,"line":149},[67,27434,27435],{"class":112},"    sed",[67,27437,27438],{"class":84}," 's#deb https:\u002F\u002F#deb [signed-by=\u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg] https:\u002F\u002F#g'",[67,27440,266],{"class":73},[67,27442,212],{"class":208},[67,27444,27445,27448,27450,27453],{"class":69,"line":155},[67,27446,27447],{"class":112},"    sudo",[67,27449,276],{"class":84},[67,27451,27452],{"class":84}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fnvidia-container-toolkit.list",[67,27454,212],{"class":208},[67,27456,27457,27459],{"class":69,"line":161},[67,27458,27415],{"class":77},[67,27460,229],{"class":208},[67,27462,27463,27465,27467],{"class":69,"line":167},[67,27464,27447],{"class":112},[67,27466,116],{"class":84},[67,27468,303],{"class":84},[815,27470,27471],{"start":143},[818,27472,27473],{},"安装nvidia-docker2",[57,27475,27477],{"className":59,"code":27476,"language":61,"meta":62,"style":62},"sudo apt-get install -y nvidia-docker2\n",[64,27478,27479],{"__ignoreMap":62},[67,27480,27481,27483,27485,27487,27489],{"class":69,"line":70},[67,27482,298],{"class":112},[67,27484,116],{"class":84},[67,27486,312],{"class":84},[67,27488,464],{"class":208},[67,27490,27491],{"class":84}," nvidia-docker2\n",[815,27493,27494],{"start":149},[818,27495,27496],{},"使用nvidia-ctk命令配置container runtime",[57,27498,27500],{"className":59,"code":27499,"language":61,"meta":62,"style":62},"sudo nvidia-ctk runtime configure --runtime=docker\n",[64,27501,27502],{"__ignoreMap":62},[67,27503,27504,27506,27509,27512,27515],{"class":69,"line":70},[67,27505,298],{"class":112},[67,27507,27508],{"class":84}," nvidia-ctk",[67,27510,27511],{"class":84}," runtime",[67,27513,27514],{"class":84}," configure",[67,27516,27517],{"class":208}," --runtime=docker\n",[815,27519,27520],{"start":155},[818,27521,27522],{},"重启docker服务:",[57,27524,27526],{"className":59,"code":27525,"language":61,"meta":62,"style":62},"sudo systemctl restart docker\n",[64,27527,27528],{"__ignoreMap":62},[67,27529,27530,27532,27534,27537],{"class":69,"line":70},[67,27531,298],{"class":112},[67,27533,577],{"class":84},[67,27535,27536],{"class":84}," restart",[67,27538,556],{"class":84},[23626,27540,27542],{"id":27541},"_3212fedora","3.2.1.2.Fedora",[815,27544,27545],{},[818,27546,27547],{},"配置存储库",[57,27549,27551],{"className":59,"code":27550,"language":61,"meta":62,"style":62},"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",[64,27552,27553,27568],{"__ignoreMap":62},[67,27554,27555,27557,27559,27561,27564,27566],{"class":69,"line":70},[67,27556,27386],{"class":112},[67,27558,27420],{"class":208},[67,27560,27423],{"class":208},[67,27562,27563],{"class":84}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Fnvidia-container-toolkit.repo",[67,27565,266],{"class":73},[67,27567,212],{"class":208},[67,27569,27570,27572,27574],{"class":69,"line":143},[67,27571,298],{"class":112},[67,27573,276],{"class":84},[67,27575,27576],{"class":84}," \u002Fetc\u002Fyum.repos.d\u002Fnvidia-container-toolkit.repo\n",[815,27578,27579],{"start":143},[818,27580,27581],{},"配置NVIDIA容器工具库的官方软件源，使用实验包，可选",[57,27583,27585],{"className":59,"code":27584,"language":61,"meta":62,"style":62},"# 如果是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",[64,27586,27587,27592,27606,27610,27615],{"__ignoreMap":62},[67,27588,27589],{"class":69,"line":70},[67,27590,27591],{"class":202},"# 如果是RHEL或者Rocky（DNF4）\n",[67,27593,27594,27596,27598,27600,27603],{"class":69,"line":143},[67,27595,298],{"class":112},[67,27597,378],{"class":84},[67,27599,478],{"class":84},[67,27601,27602],{"class":208}," --add-repo",[67,27604,27605],{"class":84}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[67,27607,27608],{"class":69,"line":149},[67,27609,177],{"emptyLinePlaceholder":176},[67,27611,27612],{"class":69,"line":155},[67,27613,27614],{"class":202},"# 如果是Feodra41+（DNF5）\n",[67,27616,27617,27619,27621,27623,27625],{"class":69,"line":161},[67,27618,298],{"class":112},[67,27620,378],{"class":84},[67,27622,478],{"class":84},[67,27624,481],{"class":84},[67,27626,27627],{"class":208}," --from-repofile=https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[815,27629,27630],{"start":149},[818,27631,27632],{},"安装NVIDIA Container Toolki包",[57,27634,27636],{"className":59,"code":27635,"language":61,"meta":62,"style":62},"# 如果是RHEL或者Rocky\nsudo dnf install -y nvidia-container-toolkit\n\n# 如果是Fedora\nsudo dnf install -y nvidia-container-toolkit\n",[64,27637,27638,27643,27656,27660,27665],{"__ignoreMap":62},[67,27639,27640],{"class":69,"line":70},[67,27641,27642],{"class":202},"# 如果是RHEL或者Rocky\n",[67,27644,27645,27647,27649,27651,27653],{"class":69,"line":143},[67,27646,298],{"class":112},[67,27648,378],{"class":84},[67,27650,312],{"class":84},[67,27652,464],{"class":208},[67,27654,27655],{"class":84}," nvidia-container-toolkit\n",[67,27657,27658],{"class":69,"line":149},[67,27659,177],{"emptyLinePlaceholder":176},[67,27661,27662],{"class":69,"line":155},[67,27663,27664],{"class":202},"# 如果是Fedora\n",[67,27666,27667,27669,27671,27673,27675],{"class":69,"line":161},[67,27668,298],{"class":112},[67,27670,378],{"class":84},[67,27672,312],{"class":84},[67,27674,464],{"class":208},[67,27676,27655],{"class":84},[815,27678,27679],{"start":155},[818,27680,27681,27682,27684],{},"安装nvidia-docker2 ： 在Fedora上使用",[64,27683,353],{},"进行安装",[57,27686,27688],{"className":59,"code":27687,"language":61,"meta":62,"style":62},"sudo dnf install -y nvidia-docker2\n",[64,27689,27690],{"__ignoreMap":62},[67,27691,27692,27694,27696,27698,27700],{"class":69,"line":70},[67,27693,298],{"class":112},[67,27695,378],{"class":84},[67,27697,312],{"class":84},[67,27699,464],{"class":208},[67,27701,27491],{"class":84},[815,27703,27704],{"start":161},[818,27705,27706],{},"使用nvidia-ctk命令配置容器运行时 ： 这个命令用于配置NVIDIA Container Toolkit与Docker集成。命令如下：",[57,27708,27709],{"className":59,"code":27499,"language":61,"meta":62,"style":62},[64,27710,27711],{"__ignoreMap":62},[67,27712,27713,27715,27717,27719,27721],{"class":69,"line":70},[67,27714,298],{"class":112},[67,27716,27508],{"class":84},[67,27718,27511],{"class":84},[67,27720,27514],{"class":84},[67,27722,27517],{"class":208},[815,27724,27725],{"start":167},[818,27726,27727],{},"重启Docker服务 ： 完成配置后，必须重启Docker服务以使更改生效：",[57,27729,27730],{"className":59,"code":27525,"language":61,"meta":62,"style":62},[64,27731,27732],{"__ignoreMap":62},[67,27733,27734,27736,27738,27740],{"class":69,"line":70},[67,27735,298],{"class":112},[67,27737,577],{"class":84},[67,27739,27536],{"class":84},[67,27741,556],{"class":84},[19,27743,27744],{},"这些步骤执行后，Docker将使用NVIDIA Container Runtime，并支持GPU加速的容器运行。你可以使用nvidia-smi命令来验证容器中的NVIDIA GPU是否可用",[19,27746,27747],{},"方法：",[19,27749,27750],{},"1️⃣nvidia-smi",[19,27752,27753],{},"2️⃣运行nvidia cuda 容器进行测试",[57,27755,27757],{"className":59,"code":27756,"language":61,"meta":62,"style":62},"sudo docker run --rm --gpus all nvidia\u002Fcuda:11.0.3-base-ubuntu20.04 nvidia-smi\n",[64,27758,27759],{"__ignoreMap":62},[67,27760,27761,27763,27765,27768,27771,27774,27777,27780],{"class":69,"line":70},[67,27762,298],{"class":112},[67,27764,383],{"class":84},[67,27766,27767],{"class":84}," run",[67,27769,27770],{"class":208}," --rm",[67,27772,27773],{"class":208}," --gpus",[67,27775,27776],{"class":84}," all",[67,27778,27779],{"class":84}," nvidia\u002Fcuda:11.0.3-base-ubuntu20.04",[67,27781,27782],{"class":84}," nvidia-smi\n",[19,27784,27785],{},"docker会自动从nvidia\u002Fcuda拉取11.0.3-base-ubuntu20.04镜像，并创建一个运行一次即删除的容器",[19,27787,27788],{},[725,27789],{"alt":62,"src":27790},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-008.png",[14,27792,27794],{"id":27793},"_33docker配置cuda和cudnn","3.3.Docker配置CUDA和CuDNN",[19,27796,27797],{},"如果你不需要自己创建Docker镜像，直接使用学长或者其他人创建好的镜像，则不用看该章节，容器的CUDA和CuDNN是和本地完全隔离的环境，你本地有没有CUDA都无所谓，但英伟达驱动版本必须满足CUDA的最低版本要求。",[19,27799,27800],{},"下面是如果你想自己创建镜像，则可以在学会如何创建容器的镜像后再回来看本节：",[19,27802,27803],{},[28,27804,27805],{"href":27805,"rel":27806},"https:\u002F\u002Fhub.docker.com\u002Fr\u002Fnvidia\u002Fcuda",[32],[19,27808,27809],{},"在上方这个网站中，英伟达都帮我们配置好了CUDA和CuDNN了，我们根本不需要自己去配置了，比传统方式要简单太多太多了。",[19,27811,27812],{},"我们只需要找到对应的Docker镜像当底包即可。",[19,27814,27815],{},"CUDA镜像有三个类型，如下，如果我们需要编译OpenCV4,那么需要使用devel版的CUDA。",[998,27817,27818,27834],{},[1001,27819,27820],{},[1004,27821,27822,27825,27828,27831],{},[1007,27823,27824],{"align":24453},"镜像类型",[1007,27826,27827],{"align":24453},"适用场景",[1007,27829,27830],{"align":24453},"示例标签",[1007,27832,27833],{"align":24453},"大小",[1044,27835,27836,27850,27864],{},[1004,27837,27838,27841,27844,27847],{},[1049,27839,27840],{"align":24453},"base",[1049,27842,27843],{"align":24453},"仅需 CUDA 运行时库",[1049,27845,27846],{"align":24453},"12.4.0-base-ubuntu22.04",[1049,27848,27849],{"align":24453},"~240MB",[1004,27851,27852,27855,27858,27861],{},[1049,27853,27854],{"align":24453},"runtime",[1049,27856,27857],{"align":24453},"部署编译后的应用（含数学库）",[1049,27859,27860],{"align":24453},"12.4.0-runtime-ubuntu22.04",[1049,27862,27863],{"align":24453},"~2GB",[1004,27865,27866,27869,27872,27875],{},[1049,27867,27868],{"align":24453},"devel",[1049,27870,27871],{"align":24453},"开发环境（含编译工具）",[1049,27873,27874],{"align":24453},"12.4.0-devel-ubuntu22.04",[1049,27876,27877],{"align":24453},"~3GB",[19,27879,27880,27881,27884],{},"我示例一个，比如我想用在Ubuntu24.04上用CUDA12.6和CuDNN，那么就选择",[64,27882,27883],{},"nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04","。这个镜像既有CUDA-devel也有CuDNN，而且还是基于Ubuntu24.04的。",[19,27886,27887],{},[725,27888],{"alt":62,"src":27889},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-009.png",[19,27891,27892],{},"在dockerfile里就可以开头这么写：",[57,27894,27896],{"className":59,"code":27895,"language":61,"meta":62,"style":62},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\nFROM nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[64,27897,27898,27903],{"__ignoreMap":62},[67,27899,27900],{"class":69,"line":70},[67,27901,27902],{"class":202},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\n",[67,27904,27905,27908],{"class":69,"line":143},[67,27906,27907],{"class":112},"FROM",[67,27909,27910],{"class":84}," nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[14,27912,27914],{"id":27913},"_34配置以太网","3.4.配置以太网",[19,27916,27917],{},"指定网络模式",[57,27919,27921],{"className":59,"code":27920,"language":61,"meta":62,"style":62},"--net=host \\\n",[64,27922,27923],{"__ignoreMap":62},[67,27924,27925,27928,27930,27933],{"class":69,"line":70},[67,27926,27927],{"class":77},"--net",[67,27929,909],{"class":73},[67,27931,27932],{"class":84},"host",[67,27934,212],{"class":112},[19,27936,27937],{},"启动参数里加上这行即可。具体在下方",[19,27939,27940],{},"--net选项：指定网络模式，该选项有以下参数可选：",[1863,27942,27943,27946,27949,27952],{},[818,27944,27945],{},"--net=bridge:默认选项，表示连接到默认的网桥",[818,27947,27948],{},"--net=host:容器使用宿主机的网络",[818,27950,27951],{},"--net=container:Name-or-ID:告诉Docker让新建的容器使用已有容器的网络配置",[818,27953,27954],{},"--net=none：不配置该容器的网络，用户自定义网络配置",[779,27956,27957],{},"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":62,"searchDepth":143,"depth":143,"links":27959},[27960,27961,27962,27963],{"id":27274,"depth":149,"text":27275},{"id":27341,"depth":149,"text":27342},{"id":27793,"depth":149,"text":27794},{"id":27913,"depth":149,"text":27914},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch3-docker",{"title":27263,"description":27271},"wiki\u002F2025-11-10-Docker\u002Fch3-Docker直通","3SumKNcyD4vYz0D1pW1XpeDrzDFvMpi3imN6YMXjcfA",{"id":27970,"title":27971,"body":27972,"description":27979,"extension":787,"meta":27985,"navigation":176,"path":27986,"seo":27987,"stem":27988,"__hash__":27989},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源.md","4.DockerHub换源",{"type":7,"value":27973,"toc":27983},[27974,27977,27980],[10,27975,27971],{"id":27976},"_4dockerhub换源",[19,27978,27979],{},"（DockerHub已于2024年5月被🇨🇳封杀，各大国内镜像源均已下架DockerHub镜像源，直接挂梯用官方源吧）",[19,27981,27982],{},"各大镜像源只有Docker-Ce的镜像库，这个是用来安装docker的，而不是dockerhub的镜像源。",{"title":62,"searchDepth":143,"depth":143,"links":27984},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch4-dockerhub",{"title":27971,"description":27979},"wiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源","3CWIuSicuLr9U-Hfgi3WEZVlW4kQZuOPYkyp9VBbnxY",{"id":27991,"title":27992,"body":27993,"description":62,"extension":787,"meta":29005,"navigation":176,"path":29006,"seo":29007,"stem":29008,"__hash__":29009},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习.md","5.Docker命令学习",{"type":7,"value":27994,"toc":29000},[27995,27998,28002,28008,28012,28015,28355,28358,28361,28364,28369,28374,28377,28380,28383,28386,28405,28408,28419,28425,28607,28617,28633,28896,28898,28923,28938,28947,28997],[10,27996,27992],{"id":27997},"_5docker命令学习",[14,27999,28001],{"id":28000},"_51参考文档","5.1.参考文档",[19,28003,28004],{},[28,28005,28006],{"href":28006,"rel":28007},"https:\u002F\u002Fwww.runoob.com\u002Fdocker\u002Fdocker-tutorial.html",[32],[14,28009,28011],{"id":28010},"_52常用命令","5.2.常用命令",[19,28013,28014],{},"常用的标红了，偶尔用的标绿了，其他了解就行。",[998,28016,28017,28030],{},[1001,28018,28019],{},[1004,28020,28021,28024,28027],{},[1007,28022,28023],{"align":24453},"命令",[1007,28025,28026],{"align":24453},"描述",[1007,28028,28029],{"align":24453},"示例",[1044,28031,28032,28043,28054,28065,28076,28087,28098,28109,28119,28130,28141,28152,28162,28173,28184,28195,28205,28215,28225,28235,28246,28257,28268,28279,28290,28301,28311,28322,28333,28344],{},[1004,28033,28034,28037,28040],{},[1049,28035,28036],{"align":24453},"docker run",[1049,28038,28039],{"align":24453},"创建并启动一个新的容器。",[1049,28041,28042],{"align":24453},"docker run -it ubuntu bash",[1004,28044,28045,28048,28051],{},[1049,28046,28047],{"align":24453},"docker build",[1049,28049,28050],{"align":24453},"通过指定的 Dockerfile 创建一个新的镜像。",[1049,28052,28053],{"align":24453},"docker build -t myimage .",[1004,28055,28056,28059,28062],{},[1049,28057,28058],{"align":24453},"docker pull",[1049,28060,28061],{"align":24453},"从 Docker 仓库拉取镜像。",[1049,28063,28064],{"align":24453},"docker pull ubuntu",[1004,28066,28067,28070,28073],{},[1049,28068,28069],{"align":24453},"docker push",[1049,28071,28072],{"align":24453},"将本地镜像推送到 Docker 仓库。",[1049,28074,28075],{"align":24453},"docker push myimage",[1004,28077,28078,28081,28084],{},[1049,28079,28080],{"align":24453},"docker stop",[1049,28082,28083],{"align":24453},"停止一个正在运行的容器。",[1049,28085,28086],{"align":24453},"docker stop container_id",[1004,28088,28089,28092,28095],{},[1049,28090,28091],{"align":24453},"docker start",[1049,28093,28094],{"align":24453},"启动一个已经存在的容器。",[1049,28096,28097],{"align":24453},"docker start container_id",[1004,28099,28100,28103,28106],{},[1049,28101,28102],{"align":24453},"docker restart",[1049,28104,28105],{"align":24453},"重新启动容器。",[1049,28107,28108],{"align":24453},"docker restart container_id",[1004,28110,28111,28114,28117],{},[1049,28112,28113],{"align":24453},"docker ps",[1049,28115,28116],{"align":24453},"列出当前正在运行的容器。",[1049,28118,28113],{"align":24453},[1004,28120,28121,28124,28127],{},[1049,28122,28123],{"align":24453},"docker rm",[1049,28125,28126],{"align":24453},"删除一个或多个停止的容器。",[1049,28128,28129],{"align":24453},"docker rm container_id",[1004,28131,28132,28135,28138],{},[1049,28133,28134],{"align":24453},"docker exec",[1049,28136,28137],{"align":24453},"在一个正在运行的容器中执行命令。",[1049,28139,28140],{"align":24453},"docker exec -it container_id bash",[1004,28142,28143,28146,28149],{},[1049,28144,28145],{"align":24453},"docker logs",[1049,28147,28148],{"align":24453},"查看容器的日志输出。",[1049,28150,28151],{"align":24453},"docker logs container_id",[1004,28153,28154,28157,28160],{},[1049,28155,28156],{"align":24453},"docker images",[1049,28158,28159],{"align":24453},"列出本地所有镜像。",[1049,28161,28156],{"align":24453},[1004,28163,28164,28167,28170],{},[1049,28165,28166],{"align":24453},"docker rmi",[1049,28168,28169],{"align":24453},"删除一个或多个镜像。",[1049,28171,28172],{"align":24453},"docker rmi myimage",[1004,28174,28175,28178,28181],{},[1049,28176,28177],{"align":24453},"docker network",[1049,28179,28180],{"align":24453},"管理 Docker 网络。",[1049,28182,28183],{"align":24453},"docker network ls",[1004,28185,28186,28189,28192],{},[1049,28187,28188],{"align":24453},"docker volume",[1049,28190,28191],{"align":24453},"管理 Docker 数据卷。",[1049,28193,28194],{"align":24453},"docker volume ls",[1004,28196,28197,28200,28203],{},[1049,28198,28199],{"align":24453},"docker-compose up",[1049,28201,28202],{"align":24453},"启动 docker-compose.yml 中定义的所有服务。",[1049,28204,28199],{"align":24453},[1004,28206,28207,28210,28213],{},[1049,28208,28209],{"align":24453},"docker-compose down",[1049,28211,28212],{"align":24453},"停止并移除 docker-compose.yml 中定义的所有服务及其相关资源。",[1049,28214,28209],{"align":24453},[1004,28216,28217,28220,28223],{},[1049,28218,28219],{"align":24453},"docker info",[1049,28221,28222],{"align":24453},"显示 Docker 系统的详细信息。",[1049,28224,28219],{"align":24453},[1004,28226,28227,28230,28233],{},[1049,28228,28229],{"align":24453},"docker stats",[1049,28231,28232],{"align":24453},"查看正在运行的容器的实时资源使用情况（CPU、内存等）。",[1049,28234,28229],{"align":24453},[1004,28236,28237,28240,28243],{},[1049,28238,28239],{"align":24453},"docker inspect",[1049,28241,28242],{"align":24453},"查看容器或镜像的详细信息（JSON 格式）。",[1049,28244,28245],{"align":24453},"docker inspect container_id",[1004,28247,28248,28251,28254],{},[1049,28249,28250],{"align":24453},"docker save",[1049,28252,28253],{"align":24453},"将一个镜像保存为 tar 文件。",[1049,28255,28256],{"align":24453},"docker save -o myimage.tar myimage",[1004,28258,28259,28262,28265],{},[1049,28260,28261],{"align":24453},"docker load",[1049,28263,28264],{"align":24453},"从 tar 文件中加载镜像。",[1049,28266,28267],{"align":24453},"docker load -i myimage.tar",[1004,28269,28270,28273,28276],{},[1049,28271,28272],{"align":24453},"docker tag",[1049,28274,28275],{"align":24453},"为镜像添加标签（tag）。",[1049,28277,28278],{"align":24453},"docker tag myimage myimage:v1",[1004,28280,28281,28284,28287],{},[1049,28282,28283],{"align":24453},"docker buildx build",[1049,28285,28286],{"align":24453},"使用 Buildx 构建多架构镜像。",[1049,28288,28289],{"align":24453},"docker buildx build -t myimage .",[1004,28291,28292,28295,28298],{},[1049,28293,28294],{"align":24453},"docker buildx create",[1049,28296,28297],{"align":24453},"创建一个新的 Buildx 构建实例。",[1049,28299,28300],{"align":24453},"docker buildx create –use",[1004,28302,28303,28306,28309],{},[1049,28304,28305],{"align":24453},"docker buildx ls",[1049,28307,28308],{"align":24453},"列出所有可用的 Buildx 构建实例。",[1049,28310,28305],{"align":24453},[1004,28312,28313,28316,28319],{},[1049,28314,28315],{"align":24453},"docker buildx use",[1049,28317,28318],{"align":24453},"设置当前的 Buildx 构建实例。",[1049,28320,28321],{"align":24453},"docker buildx use mybuilder",[1004,28323,28324,28327,28330],{},[1049,28325,28326],{"align":24453},"docker buildx bake",[1049,28328,28329],{"align":24453},"使用 Bake 文件批量构建镜像。",[1049,28331,28332],{"align":24453},"docker buildx bake -f bake.hcl",[1004,28334,28335,28338,28341],{},[1049,28336,28337],{"align":24453},"docker buildx build –push",[1049,28339,28340],{"align":24453},"构建镜像并推送到镜像仓库。",[1049,28342,28343],{"align":24453},"docker buildx build –push -t myimage .",[1004,28345,28346,28349,28352],{},[1049,28347,28348],{"align":24453},"docker buildx build –platform",[1049,28350,28351],{"align":24453},"构建镜像并为多个平台生成支持。",[1049,28353,28354],{"align":24453},"docker buildx build –platform linux\u002Famd64,linux\u002Farm64 -t myimage .",[19,28356,28357],{},"docker exec -it 进入容器并给予i输入和t终端 （docker exec -it 4f6c8cd45b58 \u002Fbin\u002Fbash）",[19,28359,28360],{},"docker search 可以查看Docker Hub上关键字的镜像仓库",[19,28362,28363],{},"docker images 可以查看已经下载的镜像",[19,28365,28366],{},[725,28367],{"alt":62,"src":28368},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-010.png",[19,28370,28371],{},[336,28372,28373],{},"Nginx 是一个高性能的 HTTP 和反向代理 Web 服务器",[19,28375,28376],{},"docker rmi $(docker images -q) 删除所有的镜像",[19,28378,28379],{},"docker container logs 查看容器日志",[19,28381,28382],{},"docker top 查看容器里的进程",[19,28384,28385],{},"docker cp 容器id:要拷贝的文件在容器里面的路径 宿主机的相应路径",[57,28387,28389],{"className":59,"code":28388,"language":61,"meta":62,"style":62},"如：docker cp 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf \u002Fmydata\u002Fnginx\n",[64,28390,28391],{"__ignoreMap":62},[67,28392,28393,28396,28399,28402],{"class":69,"line":70},[67,28394,28395],{"class":112},"如：docker",[67,28397,28398],{"class":84}," cp",[67,28400,28401],{"class":84}," 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf",[67,28403,28404],{"class":84}," \u002Fmydata\u002Fnginx\n",[19,28406,28407],{},"docker run时在启动容器的时候会有几个常用的选项：",[1863,28409,28410,28413,28416],{},[818,28411,28412],{},"-d选项：表示后台运行",[818,28414,28415],{},"-P选项：随机端口映射",[818,28417,28418],{},"-p选项：指定端口映射，有以下四种方式： --ip:hostPort:containerPort --ip::containerPort --hostPort::containerPort --containerPort",[14,28420,28422],{"id":28421},"_53run命令的参数非常重要",[336,28423,28424],{},"5.3.run命令的参数（非常重要）",[998,28426,28427,28440],{},[1001,28428,28429],{},[1004,28430,28431,28434,28437],{},[1007,28432,28433],{"align":24453},"参数\u002F配置",[1007,28435,28436],{"align":24453},"功能说明",[1007,28438,28439],{"align":24453},"重要性与参考依据",[1044,28441,28442,28453,28464,28475,28486,28497,28508,28519,28530,28541,28552,28563,28574,28585,28596],{},[1004,28443,28444,28447,28450],{},[1049,28445,28446],{"align":24453},"-name=ros_jazzy_opencv411_cuda128_cudnn971_noble",[1049,28448,28449],{"align":24453},"指定容器名称，便于后续管理",[1049,28451,28452],{"align":24453},"替代随机生成的容器名。",[1004,28454,28455,28458,28461],{},[1049,28456,28457],{"align":24453},"–gpus all",[1049,28459,28460],{"align":24453},"允许容器访问宿主机所有GPU资源，需NVIDIA驱动支持",[1049,28462,28463],{"align":24453},"用于CUDA加速等GPU依赖任务。",[1004,28465,28466,28469,28472],{},[1049,28467,28468],{"align":24453},"-e NVIDIA_DRIVER_CAPABILITIES=all",[1049,28470,28471],{"align":24453},"启用NVIDIA驱动的全部功能（如CUDA、图形渲染）",[1049,28473,28474],{"align":24453},"确保容器内GPU功能完整67。",[1004,28476,28477,28480,28483],{},[1049,28478,28479],{"align":24453},"-dit",[1049,28481,28482],{"align":24453},"组合参数：- -d：后台运行容器（Detached模式）- -i：保持标准输入（STDIN）开放- -t：分配伪终端（TTY）",[1049,28484,28485],{"align":24453},"允许容器在后台运行并支持交互操作。",[1004,28487,28488,28491,28494],{},[1049,28489,28490],{"align":24453},"–privileged",[1049,28492,28493],{"align":24453},"赋予容器完全主机权限（可访问设备、内核模块等）",[1049,28495,28496],{"align":24453},"用于需要直接操作硬件的场景（如访问USB设备），但存在安全风险。",[1004,28498,28499,28502,28505],{},[1049,28500,28501],{"align":24453},"–net=host",[1049,28503,28504],{"align":24453},"共享宿主机网络命名空间（容器使用宿主机IP和端口）",[1049,28506,28507],{"align":24453},"简化网络配置，无NAT，这样的话，网络效率更高，局域网设备更容易发现。",[1004,28509,28510,28513,28516],{},[1049,28511,28512],{"align":24453},"–group-add audio–group-add video–group-add dialout",[1049,28514,28515],{"align":24453},"将容器用户加入宿主机用户组：- audio：音频设备访问- video：视频设备访问- dialout：串口设备访问",[1049,28517,28518],{"align":24453},"避免权限问题（如避免无法调用摄像头、麦克风）。",[1004,28520,28521,28524,28527],{},[1049,28522,28523],{"align":24453},"-e DISPLAY=$DISPLAY-e XAUTHORITY=\u002Fhome\u002Ftungchiahui\u002F.Xauthority-e WAYLAND_DISPLAY-e XDG_RUNTIME_DIR-e QT_QPA_PLATFORM=xcb",[1049,28525,28526],{"align":24453},"配置图形显示环境：- 绑定宿主机显示接口（X11或Wayland）- 设置GUI应用渲染后端",[1049,28528,28529],{"align":24453},"支持容器内运行图形界面应用（如OpenCV可视化）。",[1004,28531,28532,28535,28538],{},[1049,28533,28534],{"align":24453},"-v \u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw-v \u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[1049,28536,28537],{"align":24453},"挂载宿主机图形设备：- X11套接字目录- 直接渲染管理器（DRI）设备",[1049,28539,28540],{"align":24453},"实现容器内图形显示。",[1004,28542,28543,28546,28549],{},[1049,28544,28545],{"align":24453},"-v $HOME\u002F.Xauthority:\u002Fhome\u002Ftungchiahui\u002F.Xauthority:ro",[1049,28547,28548],{"align":24453},"挂载X11认证文件（只读）",[1049,28550,28551],{"align":24453},"确保容器有权连接宿主机显示服务。",[1004,28553,28554,28557,28560],{},[1049,28555,28556],{"align":24453},"-v \u002Frun\u002Fuser\u002F1000\u002Fwayland-0-v \u002Frun\u002Fuser\u002F1000",[1049,28558,28559],{"align":24453},"挂载Wayland显示协议相关目录",[1049,28561,28562],{"align":24453},"支持Wayland协议的图形显示。",[1004,28564,28565,28568,28571],{},[1049,28566,28567],{"align":24453},"–ulimit nofile=1024:524288",[1049,28569,28570],{"align":24453},"设置进程最大可打开文件数（nofile）的方式，用于控制容器或进程运行时的文件句柄数量限制。–ulimit \u003C限制类型>=\u003C软限制>:\u003C硬限制>",[1049,28572,28573],{"align":24453},"如果默认限制太小，可能会出现 “too many open files” 的错误。所以在容器运行或系统服务启动时，需要调大这个值。–ulimit nofile=4096:65536",[1004,28575,28576,28579,28582],{},[1049,28577,28578],{"align":24453},"-v \u002Fhome\u002Ftungchiahui:\u002Fhome\u002Ftungchiahui",[1049,28580,28581],{"align":24453},"挂载宿主机用户目录到容器内同名路径",[1049,28583,28584],{"align":24453},"实现宿主机与容器间文件共享（如代码、数据持久化）。",[1004,28586,28587,28590,28593],{},[1049,28588,28589],{"align":24453},"-w \u002Fhome\u002Ftungchiahui",[1049,28591,28592],{"align":24453},"设置容器启动后的默认工作目录",[1049,28594,28595],{"align":24453},"直接进入项目路径，方便执行命令2324。",[1004,28597,28598,28601,28604],{},[1049,28599,28600],{"align":24453},"tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn971-noble",[1049,28602,28603],{"align":24453},"镜像名称指定镜像及标签，包含：- ROS 2 Jazzy- OpenCV 4.11- CUDA 12.8- cuDNN 9.7.1",[1049,28605,28606],{"align":24453},"提供预配置的深度学习与机器人开发环境。",[19,28608,28609,28610,28612,28613,28616],{},"下方这条命令一定要在普通用户下运行，不要在root用户下运行，其实加不加",[64,28611,298],{},"加不加",[64,28614,28615],{},"sudo -E","都无所谓。",[19,28618,28619,28620,28622,28623,28625,28626,28629,28630,28632],{},"用户已经被加到docker组了，不用",[64,28621,298],{},"也行跑，其次，",[64,28624,298],{},"运行的话，你的",[64,28627,28628],{},"$HOME","变量也不会变，更何况加上-E的话，这样你的",[64,28631,28628],{},"更不可能变了。",[57,28634,28636],{"className":59,"code":28635,"language":61,"meta":62,"style":62},"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",[64,28637,28638,28651,28661,28671,28683,28690,28697,28704,28714,28723,28732,28746,28758,28770,28779,28789,28798,28813,28846,28873,28884,28891],{"__ignoreMap":62},[67,28639,28640,28642,28644,28646,28649],{"class":69,"line":70},[67,28641,298],{"class":112},[67,28643,383],{"class":84},[67,28645,27767],{"class":84},[67,28647,28648],{"class":208}," --name=ros_opencv_cuda",[67,28650,212],{"class":208},[67,28652,28653,28656,28659],{"class":69,"line":143},[67,28654,28655],{"class":77},"--gpus ",[67,28657,28658],{"class":84},"all",[67,28660,212],{"class":208},[67,28662,28663,28666,28669],{"class":69,"line":149},[67,28664,28665],{"class":77},"-e ",[67,28667,28668],{"class":84},"NVIDIA_DRIVER_CAPABILITIES=all",[67,28670,212],{"class":208},[67,28672,28673,28675,28678,28681],{"class":69,"line":155},[67,28674,28665],{"class":77},[67,28676,28677],{"class":84},"DISPLAY=",[67,28679,28680],{"class":77},"$DISPLAY ",[67,28682,229],{"class":208},[67,28684,28685,28688],{"class":69,"line":161},[67,28686,28687],{"class":77},"-dit ",[67,28689,229],{"class":208},[67,28691,28692,28695],{"class":69,"line":167},[67,28693,28694],{"class":77},"--privileged ",[67,28696,229],{"class":208},[67,28698,28699,28702],{"class":69,"line":173},[67,28700,28701],{"class":77},"--net=host ",[67,28703,229],{"class":208},[67,28705,28706,28709,28712],{"class":69,"line":180},[67,28707,28708],{"class":77},"--group-add ",[67,28710,28711],{"class":84},"audio",[67,28713,212],{"class":208},[67,28715,28716,28718,28721],{"class":69,"line":186},[67,28717,28708],{"class":77},[67,28719,28720],{"class":84},"video",[67,28722,212],{"class":208},[67,28724,28725,28727,28730],{"class":69,"line":444},[67,28726,28708],{"class":77},[67,28728,28729],{"class":84},"dialout",[67,28731,212],{"class":208},[67,28733,28734,28736,28739,28741,28744],{"class":69,"line":2335},[67,28735,28665],{"class":77},[67,28737,28738],{"class":84},"XAUTHORITY=",[67,28740,28628],{"class":77},[67,28742,28743],{"class":84},"\u002F.Xauthority",[67,28745,212],{"class":208},[67,28747,28748,28750,28753,28756],{"class":69,"line":2340},[67,28749,28665],{"class":77},[67,28751,28752],{"class":84},"WAYLAND_DISPLAY=",[67,28754,28755],{"class":77},"$WAYLAND_DISPLAY ",[67,28757,229],{"class":208},[67,28759,28760,28762,28765,28768],{"class":69,"line":2346},[67,28761,28665],{"class":77},[67,28763,28764],{"class":84},"XDG_RUNTIME_DIR=",[67,28766,28767],{"class":77},"$XDG_RUNTIME_DIR ",[67,28769,229],{"class":208},[67,28771,28772,28774,28777],{"class":69,"line":2351},[67,28773,28665],{"class":77},[67,28775,28776],{"class":84},"QT_QPA_PLATFORM=xcb",[67,28778,212],{"class":208},[67,28780,28781,28784,28787],{"class":69,"line":2365},[67,28782,28783],{"class":77},"-v ",[67,28785,28786],{"class":84},"\u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw",[67,28788,212],{"class":208},[67,28790,28791,28793,28796],{"class":69,"line":2370},[67,28792,28783],{"class":77},[67,28794,28795],{"class":84},"\u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[67,28797,212],{"class":208},[67,28799,28800,28803,28806,28808,28811],{"class":69,"line":2376},[67,28801,28802],{"class":77},"-v $HOME",[67,28804,28805],{"class":84},"\u002F.Xauthority:",[67,28807,28628],{"class":77},[67,28809,28810],{"class":84},"\u002F.Xauthority:ro",[67,28812,212],{"class":208},[67,28814,28815,28817,28820,28822,28825,28828,28830,28833,28835,28837,28839,28841,28844],{"class":69,"line":2397},[67,28816,28783],{"class":77},[67,28818,28819],{"class":84},"\u002Frun\u002Fuser\u002F",[67,28821,237],{"class":77},[67,28823,28824],{"class":112},"id",[67,28826,28827],{"class":208}," -u",[67,28829,260],{"class":77},[67,28831,28832],{"class":84},"\u002Fwayland-0:\u002Frun\u002Fuser\u002F",[67,28834,237],{"class":77},[67,28836,28824],{"class":112},[67,28838,28827],{"class":208},[67,28840,260],{"class":77},[67,28842,28843],{"class":84},"\u002Fwayland-0",[67,28845,212],{"class":208},[67,28847,28848,28850,28852,28854,28856,28858,28860,28863,28865,28867,28869,28871],{"class":69,"line":2402},[67,28849,28783],{"class":77},[67,28851,28819],{"class":84},[67,28853,237],{"class":77},[67,28855,28824],{"class":112},[67,28857,28827],{"class":208},[67,28859,260],{"class":77},[67,28861,28862],{"class":84},":\u002Frun\u002Fuser\u002F",[67,28864,237],{"class":77},[67,28866,28824],{"class":112},[67,28868,28827],{"class":208},[67,28870,14432],{"class":77},[67,28872,229],{"class":208},[67,28874,28875,28877,28879,28882],{"class":69,"line":2416},[67,28876,28802],{"class":77},[67,28878,1715],{"class":84},[67,28880,28881],{"class":77},"$HOME ",[67,28883,229],{"class":208},[67,28885,28886,28889],{"class":69,"line":2421},[67,28887,28888],{"class":77},"-w $HOME ",[67,28890,229],{"class":208},[67,28892,28893],{"class":69,"line":2450},[67,28894,28895],{"class":77},"tungchiahui\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy\n",[19,28897,9744],{},[815,28899,28900,28908,28911,28914],{},[818,28901,28902,614,28904,28907],{},[64,28903,28668],{},[64,28905,28906],{},"--gpus all","没有英伟达显卡请注释。",[818,28909,28910],{},"--name后面请自己为容器起名。",[818,28912,28913],{},"最后一行仓库名称请你自己找对应的镜像填上。",[818,28915,28916,28917,28922],{},"ROS1在Fedora发行版下会爆内存，需要添加上下面这个参数，如果你不是Fedora和ROS1,",[24270,28918,28919],{},[336,28920,28921],{},"请不要加","。",[57,28924,28926],{"className":59,"code":28925,"language":61,"meta":62,"style":62},"--ulimit nofile=1024:524288 \\\n",[64,28927,28928],{"__ignoreMap":62},[67,28929,28930,28933,28936],{"class":69,"line":70},[67,28931,28932],{"class":112},"--ulimit",[67,28934,28935],{"class":84}," nofile=1024:524288",[67,28937,212],{"class":208},[19,28939,28940,28941,28946],{},"如果想用当前用户登陆容器,可以加上下面这几条,但非常非常",[24270,28942,28943],{},[336,28944,28945],{},"不建议","**.**",[57,28948,28950],{"className":59,"code":28949,"language":61,"meta":62,"style":62},"--user $(id -u):$(id -g) \\\n-v \u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro \\\n-v \u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro \\\n",[64,28951,28952,28979,28988],{"__ignoreMap":62},[67,28953,28954,28957,28960,28962,28964,28966,28968,28970,28972,28975,28977],{"class":69,"line":70},[67,28955,28956],{"class":112},"--user",[67,28958,28959],{"class":77}," $(",[67,28961,28824],{"class":112},[67,28963,28827],{"class":208},[67,28965,260],{"class":77},[67,28967,1715],{"class":84},[67,28969,237],{"class":77},[67,28971,28824],{"class":112},[67,28973,28974],{"class":208}," -g",[67,28976,14432],{"class":77},[67,28978,229],{"class":208},[67,28980,28981,28983,28986],{"class":69,"line":143},[67,28982,28783],{"class":77},[67,28984,28985],{"class":84},"\u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro",[67,28987,212],{"class":208},[67,28989,28990,28992,28995],{"class":69,"line":149},[67,28991,28783],{"class":77},[67,28993,28994],{"class":84},"\u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro",[67,28996,212],{"class":208},[779,28998,28999],{},"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":62,"searchDepth":143,"depth":143,"links":29001},[29002,29003,29004],{"id":28000,"depth":149,"text":28001},{"id":28010,"depth":149,"text":28011},{"id":28421,"depth":149,"text":28424},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch5-docker",{"title":27992,"description":62},"wiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习","G0221wUbE2NPPL3_iqRgrDmGtdCFY_26n0BQpBEY1bQ",{"id":29011,"title":29012,"body":29013,"description":62,"extension":787,"meta":30636,"navigation":176,"path":30637,"seo":30638,"stem":30639,"__hash__":30640},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像.md","6.手动创建Docker镜像",{"type":7,"value":29014,"toc":30631},[29015,29018,29022,29025,29247,29251,29255,29258,29364,29369,29372,29377,29380,29385,29388,29393,29396,29408,29411,29416,29423,29451,29458,29534,29539,29542,29565,29567,29642,29647,29650,29654,29662,29667,29672,29676,29687,29693,29696,29699,29723,29726,29729,29757,29760,29763,30228,30231,30236,30241,30245,30268,30273,30277,30281,30284,30287,30290,30317,30320,30323,30341,30344,30347,30369,30377,30382,30387,30391,30394,30397,30400,30403,30448,30451,30469,30472,30477,30480,30501,30504,30560,30563,30568,30572,30575,30582,30585,30588,30593,30596,30612,30615,30628],[10,29016,29012],{"id":29017},"_6手动创建docker镜像",[14,29019,29021],{"id":29020},"_61dockerfile","6.1.DockerFile",[19,29023,29024],{},"常用命令：",[998,29026,29027,29038],{},[1001,29028,29029],{},[1004,29030,29031,29034,29036],{},[1007,29032,29033],{"align":24453},"指令",[1007,29035,26578],{"align":24453},[1007,29037,28029],{"align":24453},[1044,29039,29040,29050,29066,29077,29088,29099,29110,29121,29132,29146,29160,29171,29185,29196,29207,29221,29236],{},[1004,29041,29042,29044,29047],{},[1049,29043,27907],{"align":24453},[1049,29045,29046],{"align":24453},"指定基础镜像，是 Dockerfile 的起点",[1049,29048,29049],{"align":24453},"FROM ubuntu:22.04",[1004,29051,29052,29055,29058],{},[1049,29053,29054],{"align":24453},"LABEL",[1049,29056,29057],{"align":24453},"添加元数据（如作者、版本等）",[1049,29059,29060,29061,29065],{"align":24453},"LABEL maintainer=”",[28,29062,29064],{"href":29063},"mailto:you@example.com","you@example.com","”",[1004,29067,29068,29071,29074],{},[1049,29069,29070],{"align":24453},"ENV",[1049,29072,29073],{"align":24453},"设置环境变量",[1049,29075,29076],{"align":24453},"ENV PORT=8080",[1004,29078,29079,29082,29085],{},[1049,29080,29081],{"align":24453},"ARG",[1049,29083,29084],{"align":24453},"构建参数，只在构建期间可用",[1049,29086,29087],{"align":24453},"ARG VERSION=1.0",[1004,29089,29090,29093,29096],{},[1049,29091,29092],{"align":24453},"RUN",[1049,29094,29095],{"align":24453},"构建镜像时运行命令",[1049,29097,29098],{"align":24453},"RUN apt-get update && apt-get install -y curl",[1004,29100,29101,29104,29107],{},[1049,29102,29103],{"align":24453},"COPY",[1049,29105,29106],{"align":24453},"复制文件到镜像中",[1049,29108,29109],{"align":24453},"COPY . \u002Fapp",[1004,29111,29112,29115,29118],{},[1049,29113,29114],{"align":24453},"ADD",[1049,29116,29117],{"align":24453},"类似 COPY，额外支持解压 .tar 文件或远程 URL（不推荐用于 URL）",[1049,29119,29120],{"align":24453},"ADD archive.tar.gz \u002Fdata\u002F",[1004,29122,29123,29126,29129],{},[1049,29124,29125],{"align":24453},"WORKDIR",[1049,29127,29128],{"align":24453},"设置工作目录",[1049,29130,29131],{"align":24453},"WORKDIR \u002Fopt",[1004,29133,29134,29137,29140],{},[1049,29135,29136],{"align":24453},"CMD",[1049,29138,29139],{"align":24453},"设置容器启动时默认命令（可被 docker run 覆盖）",[1049,29141,29142,29143],{"align":24453},"CMD ",[67,29144,29145],{},"“node”, “index.js”",[1004,29147,29148,29151,29154],{},[1049,29149,29150],{"align":24453},"ENTRYPOINT",[1049,29152,29153],{"align":24453},"设置容器启动时固定命令（通常用于 CLI 工具等）",[1049,29155,29156,29157],{"align":24453},"ENTRYPOINT ",[67,29158,29159],{},"“python3”",[1004,29161,29162,29165,29168],{},[1049,29163,29164],{"align":24453},"EXPOSE",[1049,29166,29167],{"align":24453},"声明镜像内服务监听的端口（不会自动映射）",[1049,29169,29170],{"align":24453},"EXPOSE 80",[1004,29172,29173,29176,29179],{},[1049,29174,29175],{"align":24453},"VOLUME",[1049,29177,29178],{"align":24453},"声明数据卷挂载点",[1049,29180,29181,29182],{"align":24453},"VOLUME ",[67,29183,29184],{},"“\u002Fdata”",[1004,29186,29187,29190,29193],{},[1049,29188,29189],{"align":24453},"USER",[1049,29191,29192],{"align":24453},"设置后续命令执行的用户",[1049,29194,29195],{"align":24453},"USER appuser",[1004,29197,29198,29201,29204],{},[1049,29199,29200],{"align":24453},"ONBUILD",[1049,29202,29203],{"align":24453},"当镜像作为其他镜像基础镜像时触发的构建指令",[1049,29205,29206],{"align":24453},"ONBUILD COPY . \u002Fsrc",[1004,29208,29209,29212,29215],{},[1049,29210,29211],{"align":24453},"SHELL",[1049,29213,29214],{"align":24453},"更改默认 shell，比如将 sh -c 改为 bash -c",[1049,29216,29217,29218],{"align":24453},"SHELL ",[67,29219,29220],{},"“\u002Fbin\u002Fbash”, “-c”",[1004,29222,29223,29226,29229],{},[1049,29224,29225],{"align":24453},"HEALTHCHECK",[1049,29227,29228],{"align":24453},"定义容器运行时的健康检查命令",[1049,29230,29231,29232],{"align":24453},"`HEALTHCHECK CMD curl –fail ",[28,29233,29234],{"href":29234,"rel":29235},"http:\u002F\u002Flocalhost:8080",[32],[1004,29237,29238,29241,29244],{},[1049,29239,29240],{"align":24453},"STOPSIGNAL",[1049,29242,29243],{"align":24453},"容器停止时发送的信号",[1049,29245,29246],{"align":24453},"STOPSIGNAL SIGKILL",[14,29248,29250],{"id":29249},"_62自己创建容器","6.2.自己创建容器",[40,29252,29254],{"id":29253},"_621手动创建","6.2.1.手动创建",[19,29256,29257],{},"在x86电脑上编译x86的：",[57,29259,29261],{"className":59,"code":29260,"language":61,"meta":62,"style":62},"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",[64,29262,29263,29279,29283,29296,29300,29313,29317,29330,29334,29347,29351],{"__ignoreMap":62},[67,29264,29265,29267,29270,29273,29276],{"class":69,"line":70},[67,29266,619],{"class":112},[67,29268,29269],{"class":84}," build",[67,29271,29272],{"class":208}," -t",[67,29274,29275],{"class":84}," ros-melodic-cuda118-cudnn8-bionic:latest",[67,29277,29278],{"class":84}," .\n",[67,29280,29281],{"class":69,"line":143},[67,29282,177],{"emptyLinePlaceholder":176},[67,29284,29285,29287,29289,29291,29294],{"class":69,"line":149},[67,29286,619],{"class":112},[67,29288,29269],{"class":84},[67,29290,29272],{"class":208},[67,29292,29293],{"class":84}," ros-noetic-focal:latest",[67,29295,29278],{"class":84},[67,29297,29298],{"class":69,"line":155},[67,29299,177],{"emptyLinePlaceholder":176},[67,29301,29302,29304,29306,29308,29311],{"class":69,"line":161},[67,29303,619],{"class":112},[67,29305,29269],{"class":84},[67,29307,29272],{"class":208},[67,29309,29310],{"class":84}," ros-humble-jammy:latest",[67,29312,29278],{"class":84},[67,29314,29315],{"class":69,"line":167},[67,29316,177],{"emptyLinePlaceholder":176},[67,29318,29319,29321,29323,29325,29328],{"class":69,"line":173},[67,29320,619],{"class":112},[67,29322,29269],{"class":84},[67,29324,29272],{"class":208},[67,29326,29327],{"class":84}," ros-jazzy-noble:latest",[67,29329,29278],{"class":84},[67,29331,29332],{"class":69,"line":180},[67,29333,177],{"emptyLinePlaceholder":176},[67,29335,29336,29338,29340,29342,29345],{"class":69,"line":186},[67,29337,619],{"class":112},[67,29339,29269],{"class":84},[67,29341,29272],{"class":208},[67,29343,29344],{"class":84}," ros-humble-opencv411-cuda128-cudnn970-jammy:latest",[67,29346,29278],{"class":84},[67,29348,29349],{"class":69,"line":444},[67,29350,177],{"emptyLinePlaceholder":176},[67,29352,29353,29355,29357,29359,29362],{"class":69,"line":2335},[67,29354,619],{"class":112},[67,29356,29269],{"class":84},[67,29358,29272],{"class":208},[67,29360,29361],{"class":84}," ros-jazzy-opencv411-cuda128-cudnn970-noble:latest",[67,29363,29278],{"class":84},[19,29365,29366],{},[725,29367],{"alt":62,"src":29368},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-011.png",[19,29370,29371],{},"镜像大小5GB(压缩后的大小详见DockerHub)",[19,29373,29374],{},[725,29375],{"alt":62,"src":29376},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-012.png",[19,29378,29379],{},"将 Docker 镜像推送到 Docker Hub 的步骤如下：",[815,29381,29382],{},[818,29383,29384],{},"创建 Docker Hub 账户",[19,29386,29387],{},"如果你还没有 Docker Hub 账户，请前往 Docker Hub 注册一个免费账户。",[815,29389,29390],{"start":143},[818,29391,29392],{},"登录 Docker Hub",[19,29394,29395],{},"在终端中使用以下命令登录到你的 Docker Hub 账户：",[57,29397,29399],{"className":59,"code":29398,"language":61,"meta":62,"style":62},"docker login\n",[64,29400,29401],{"__ignoreMap":62},[67,29402,29403,29405],{"class":69,"line":70},[67,29404,619],{"class":112},[67,29406,29407],{"class":84}," login\n",[19,29409,29410],{},"输入你的 Docker Hub 用户名和密码进行验证。",[815,29412,29413],{},[818,29414,29415],{},"为你的镜像打标签",[19,29417,29418,29419,29422],{},"Docker Hub 使用 ",[64,29420,29421],{},"\u003C用户名>\u002F\u003C镜像名>:\u003C标签>"," 的格式来标识镜像。你需要为你的镜像打上标签，以便能够推送到 Docker Hub。使用以下命令：",[57,29424,29426],{"className":59,"code":29425,"language":61,"meta":62,"style":62},"docker tag ros-jazzy-noble:latest \u003C你的用户名>\u002Fros-jazzy-noble:latest\n",[64,29427,29428],{"__ignoreMap":62},[67,29429,29430,29432,29435,29437,29440,29443,29446,29448],{"class":69,"line":70},[67,29431,619],{"class":112},[67,29433,29434],{"class":84}," tag",[67,29436,29327],{"class":84},[67,29438,29439],{"class":73}," \u003C",[67,29441,29442],{"class":84},"你的用户",[67,29444,29445],{"class":77},"名",[67,29447,1816],{"class":73},[67,29449,29450],{"class":84},"\u002Fros-jazzy-noble:latest\n",[19,29452,29453,29454,29457],{},"例如，如果你的 Docker Hub 用户名是 ",[64,29455,29456],{},"tungchiahui","，你应该执行：",[57,29459,29461],{"className":59,"code":29460,"language":61,"meta":62,"style":62},"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",[64,29462,29463,29474,29478,29489,29493,29504,29508,29519,29523],{"__ignoreMap":62},[67,29464,29465,29467,29469,29471],{"class":69,"line":70},[67,29466,619],{"class":112},[67,29468,29434],{"class":84},[67,29470,29293],{"class":84},[67,29472,29473],{"class":84}," tungchiahui\u002Fros-noetic-focal:latest\n",[67,29475,29476],{"class":69,"line":143},[67,29477,177],{"emptyLinePlaceholder":176},[67,29479,29480,29482,29484,29486],{"class":69,"line":149},[67,29481,619],{"class":112},[67,29483,29434],{"class":84},[67,29485,29310],{"class":84},[67,29487,29488],{"class":84}," tungchiahui\u002Fros-humble-jammy:latest\n",[67,29490,29491],{"class":69,"line":155},[67,29492,177],{"emptyLinePlaceholder":176},[67,29494,29495,29497,29499,29501],{"class":69,"line":161},[67,29496,619],{"class":112},[67,29498,29434],{"class":84},[67,29500,29327],{"class":84},[67,29502,29503],{"class":84}," tungchiahui\u002Fros-jazzy-noble:latest\n",[67,29505,29506],{"class":69,"line":167},[67,29507,177],{"emptyLinePlaceholder":176},[67,29509,29510,29512,29514,29516],{"class":69,"line":173},[67,29511,619],{"class":112},[67,29513,29434],{"class":84},[67,29515,29344],{"class":84},[67,29517,29518],{"class":84}," \u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[67,29520,29521],{"class":69,"line":180},[67,29522,177],{"emptyLinePlaceholder":176},[67,29524,29525,29527,29529,29531],{"class":69,"line":186},[67,29526,619],{"class":112},[67,29528,29434],{"class":84},[67,29530,29361],{"class":84},[67,29532,29533],{"class":84}," tungchiahui\u002Fros-jazzy-opencv411-cuda128-cudnn970-noble:latest\n",[815,29535,29536],{"start":143},[818,29537,29538],{},"推送镜像到 Docker Hub",[19,29540,29541],{},"使用以下命令将镜像推送到 Docker Hub：",[57,29543,29545],{"className":59,"code":29544,"language":61,"meta":62,"style":62},"docker push \u003C你的用户名>\u002Fros-noetic-jazzy-noble:latest\n",[64,29546,29547],{"__ignoreMap":62},[67,29548,29549,29551,29554,29556,29558,29560,29562],{"class":69,"line":70},[67,29550,619],{"class":112},[67,29552,29553],{"class":84}," push",[67,29555,29439],{"class":73},[67,29557,29442],{"class":84},[67,29559,29445],{"class":77},[67,29561,1816],{"class":73},[67,29563,29564],{"class":84},"\u002Fros-noetic-jazzy-noble:latest\n",[19,29566,15350],{},[57,29568,29570],{"className":59,"code":29569,"language":61,"meta":62,"style":62},"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",[64,29571,29572,29580,29584,29592,29596,29604,29608,29617,29621,29629,29633],{"__ignoreMap":62},[67,29573,29574,29576,29578],{"class":69,"line":70},[67,29575,619],{"class":112},[67,29577,29553],{"class":84},[67,29579,29473],{"class":84},[67,29581,29582],{"class":69,"line":143},[67,29583,177],{"emptyLinePlaceholder":176},[67,29585,29586,29588,29590],{"class":69,"line":149},[67,29587,619],{"class":112},[67,29589,29553],{"class":84},[67,29591,29488],{"class":84},[67,29593,29594],{"class":69,"line":155},[67,29595,177],{"emptyLinePlaceholder":176},[67,29597,29598,29600,29602],{"class":69,"line":161},[67,29599,619],{"class":112},[67,29601,29553],{"class":84},[67,29603,29503],{"class":84},[67,29605,29606],{"class":69,"line":167},[67,29607,177],{"emptyLinePlaceholder":176},[67,29609,29610,29612,29614],{"class":69,"line":173},[67,29611,619],{"class":112},[67,29613,29553],{"class":84},[67,29615,29616],{"class":84}," tungchiahui\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[67,29618,29619],{"class":69,"line":180},[67,29620,177],{"emptyLinePlaceholder":176},[67,29622,29623,29625,29627],{"class":69,"line":186},[67,29624,619],{"class":112},[67,29626,29553],{"class":84},[67,29628,29533],{"class":84},[67,29630,29631],{"class":69,"line":444},[67,29632,177],{"emptyLinePlaceholder":176},[67,29634,29635,29637,29639],{"class":69,"line":2335},[67,29636,619],{"class":112},[67,29638,29553],{"class":84},[67,29640,29641],{"class":84}," tungchiahui\u002Fros-noetic-focal-arm64:latest\n",[815,29643,29644],{"start":149},[818,29645,29646],{},"验证推送成功",[19,29648,29649],{},"你可以通过访问 Docker Hub 的个人页面来验证你的镜像是否已成功推送",[19,29651,29652],{},[336,29653,4504],{},[1863,29655,29656,29659],{},[818,29657,29658],{},"确保你的镜像大小在 Docker Hub 的限制范围内（一般为 10GB）",[818,29660,29661],{},"如果你打算将镜像公开，可以设置为公共仓库；如果希望只有你自己可以访问，可以设置为私有仓库",[19,29663,29664],{},[725,29665],{"alt":62,"src":29666},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-013.png",[19,29668,29669],{},[725,29670],{"alt":62,"src":29671},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-014.png",[40,29673,29675],{"id":29674},"_622手动创建跨平台多架构构建","6.2.2.手动创建(跨平台多架构构建)",[19,29677,29678,29679,29682,29683,29686],{},"如果您想在 ",[336,29680,29681],{},"x86\u002Fx64 电脑上即为本机x86设备构建镜像，又想为树莓派、Jetson等ARM64 设备构建 Docker 镜像"," ，需要使用 ",[336,29684,29685],{},"Docker 的跨平台构建功能"," 。以下是完整解决方案：",[19,29688,29689,29690],{},"1. ",[336,29691,29692],{},"启用 Docker 跨平台构建",[19,29694,29695],{},"在 x86 主机上模拟 ARM64 环境需要以下工具：",[19,29697,29698],{},"第一步：启用 buildx（只需执行一次）",[57,29700,29702],{"className":59,"code":29701,"language":61,"meta":62,"style":62},"docker buildx create --name multiarch_builder --use\n",[64,29703,29704],{"__ignoreMap":62},[67,29705,29706,29708,29711,29714,29717,29720],{"class":69,"line":70},[67,29707,619],{"class":112},[67,29709,29710],{"class":84}," buildx",[67,29712,29713],{"class":84}," create",[67,29715,29716],{"class":208}," --name",[67,29718,29719],{"class":84}," multiarch_builder",[67,29721,29722],{"class":208}," --use\n",[19,29724,29725],{},"这会创建并启用一个支持多架构构建的 builder，电脑重启后也依然存在，所以只用运行一次。",[19,29727,29728],{},"第二步：安装 QEMU 支持（一般新版 Docker Desktop 已自带，但是Linux必须要安装） 如果你用的是服务器或Linux发行版，确保有 qemu 模拟器：",[57,29730,29732],{"className":59,"code":29731,"language":61,"meta":62,"style":62},"docker run --rm --privileged multiarch\u002Fqemu-user-static --reset -p yes\n",[64,29733,29734],{"__ignoreMap":62},[67,29735,29736,29738,29740,29742,29745,29748,29751,29754],{"class":69,"line":70},[67,29737,619],{"class":112},[67,29739,27767],{"class":84},[67,29741,27770],{"class":208},[67,29743,29744],{"class":208}," --privileged",[67,29746,29747],{"class":84}," multiarch\u002Fqemu-user-static",[67,29749,29750],{"class":208}," --reset",[67,29752,29753],{"class":208}," -p",[67,29755,29756],{"class":84}," yes\n",[19,29758,29759],{},"电脑重启后，就会消失，所以需要你每次电脑重启后，在buildx命令前，运行一次该命令即可。",[19,29761,29762],{},"第三步：构建多架构镜像 用下面的命令构建 amd64 和 arm64：",[57,29764,29766],{"className":59,"code":29765,"language":61,"meta":62,"style":62},"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",[64,29767,29768,29810,29814,29819,29829,29839,29848,29854,29858,29862,29872,29880,29889,29895,29899,29903,29913,29921,29930,29936,29940,29944,29954,29962,29971,29977,29981,29985,29995,30003,30012,30018,30022,30026,30036,30044,30053,30059,30063,30067,30077,30085,30094,30100,30104,30108,30118,30126,30135,30141,30145,30149,30159,30167,30176,30182,30186,30190,30201,30209,30218,30224],{"__ignoreMap":62},[67,29769,29770,29772,29774,29776,29779,29782,29784,29786,29789,29791,29793,29795,29797,29800,29803,29805,29808],{"class":69,"line":70},[67,29771,619],{"class":112},[67,29773,29710],{"class":84},[67,29775,29269],{"class":84},[67,29777,29778],{"class":208}," --platform",[67,29780,29781],{"class":84}," linux\u002Famd64,linux\u002Farm64",[67,29783,29272],{"class":208},[67,29785,29439],{"class":73},[67,29787,29788],{"class":84},"你的镜像",[67,29790,29445],{"class":77},[67,29792,1816],{"class":73},[67,29794,1715],{"class":84},[67,29796,1766],{"class":73},[67,29798,29799],{"class":84},"标",[67,29801,29802],{"class":77},"签",[67,29804,1816],{"class":73},[67,29806,29807],{"class":208}," --push",[67,29809,29278],{"class":84},[67,29811,29812],{"class":69,"line":143},[67,29813,177],{"emptyLinePlaceholder":176},[67,29815,29816],{"class":69,"line":149},[67,29817,29818],{"class":202},"# 例子：\n",[67,29820,29821,29823,29825,29827],{"class":69,"line":155},[67,29822,619],{"class":112},[67,29824,29710],{"class":84},[67,29826,29269],{"class":84},[67,29828,212],{"class":208},[67,29830,29831,29834,29837],{"class":69,"line":161},[67,29832,29833],{"class":77},"--platform ",[67,29835,29836],{"class":84},"linux\u002Famd64,linux\u002Farm64",[67,29838,212],{"class":208},[67,29840,29841,29843,29846],{"class":69,"line":167},[67,29842,29272],{"class":208},[67,29844,29845],{"class":84}," tungchiahui\u002Fros:noetic-focal",[67,29847,212],{"class":208},[67,29849,29850,29852],{"class":69,"line":173},[67,29851,29807],{"class":208},[67,29853,212],{"class":208},[67,29855,29856],{"class":69,"line":180},[67,29857,29278],{"class":84},[67,29859,29860],{"class":69,"line":186},[67,29861,177],{"emptyLinePlaceholder":176},[67,29863,29864,29866,29868,29870],{"class":69,"line":444},[67,29865,619],{"class":112},[67,29867,29710],{"class":84},[67,29869,29269],{"class":84},[67,29871,212],{"class":208},[67,29873,29874,29876,29878],{"class":69,"line":2335},[67,29875,29833],{"class":77},[67,29877,29836],{"class":84},[67,29879,212],{"class":208},[67,29881,29882,29884,29887],{"class":69,"line":2340},[67,29883,29272],{"class":208},[67,29885,29886],{"class":84}," tungchiahui\u002Fros:humble-jammy",[67,29888,212],{"class":208},[67,29890,29891,29893],{"class":69,"line":2346},[67,29892,29807],{"class":208},[67,29894,212],{"class":208},[67,29896,29897],{"class":69,"line":2351},[67,29898,29278],{"class":84},[67,29900,29901],{"class":69,"line":2365},[67,29902,177],{"emptyLinePlaceholder":176},[67,29904,29905,29907,29909,29911],{"class":69,"line":2370},[67,29906,619],{"class":112},[67,29908,29710],{"class":84},[67,29910,29269],{"class":84},[67,29912,212],{"class":208},[67,29914,29915,29917,29919],{"class":69,"line":2376},[67,29916,29833],{"class":77},[67,29918,29836],{"class":84},[67,29920,212],{"class":208},[67,29922,29923,29925,29928],{"class":69,"line":2397},[67,29924,29272],{"class":208},[67,29926,29927],{"class":84}," tungchiahui\u002Fros:jazzy-noble",[67,29929,212],{"class":208},[67,29931,29932,29934],{"class":69,"line":2402},[67,29933,29807],{"class":208},[67,29935,212],{"class":208},[67,29937,29938],{"class":69,"line":2416},[67,29939,29278],{"class":84},[67,29941,29942],{"class":69,"line":2421},[67,29943,177],{"emptyLinePlaceholder":176},[67,29945,29946,29948,29950,29952],{"class":69,"line":2450},[67,29947,383],{"class":112},[67,29949,29710],{"class":84},[67,29951,29269],{"class":84},[67,29953,212],{"class":208},[67,29955,29956,29958,29960],{"class":69,"line":2455},[67,29957,29833],{"class":77},[67,29959,29836],{"class":84},[67,29961,212],{"class":208},[67,29963,29964,29966,29969],{"class":69,"line":2472},[67,29965,29272],{"class":208},[67,29967,29968],{"class":84}," tungchiahui\u002Fopencv:411-cuda128-cudnn970-focal",[67,29970,212],{"class":208},[67,29972,29973,29975],{"class":69,"line":2477},[67,29974,29807],{"class":208},[67,29976,212],{"class":208},[67,29978,29979],{"class":69,"line":2482},[67,29980,29278],{"class":84},[67,29982,29983],{"class":69,"line":2487},[67,29984,177],{"emptyLinePlaceholder":176},[67,29986,29987,29989,29991,29993],{"class":69,"line":2501},[67,29988,619],{"class":112},[67,29990,29710],{"class":84},[67,29992,29269],{"class":84},[67,29994,212],{"class":208},[67,29996,29997,29999,30001],{"class":69,"line":2506},[67,29998,29833],{"class":77},[67,30000,29836],{"class":84},[67,30002,212],{"class":208},[67,30004,30005,30007,30010],{"class":69,"line":3298},[67,30006,29272],{"class":208},[67,30008,30009],{"class":84}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-jammy",[67,30011,212],{"class":208},[67,30013,30014,30016],{"class":69,"line":3312},[67,30015,29807],{"class":208},[67,30017,212],{"class":208},[67,30019,30020],{"class":69,"line":3320},[67,30021,29278],{"class":84},[67,30023,30024],{"class":69,"line":3325},[67,30025,177],{"emptyLinePlaceholder":176},[67,30027,30028,30030,30032,30034],{"class":69,"line":3331},[67,30029,383],{"class":112},[67,30031,29710],{"class":84},[67,30033,29269],{"class":84},[67,30035,212],{"class":208},[67,30037,30038,30040,30042],{"class":69,"line":3337},[67,30039,29833],{"class":77},[67,30041,29836],{"class":84},[67,30043,212],{"class":208},[67,30045,30046,30048,30051],{"class":69,"line":3342},[67,30047,29272],{"class":208},[67,30049,30050],{"class":84}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-noble",[67,30052,212],{"class":208},[67,30054,30055,30057],{"class":69,"line":8667},[67,30056,29807],{"class":208},[67,30058,212],{"class":208},[67,30060,30061],{"class":69,"line":8691},[67,30062,29278],{"class":84},[67,30064,30065],{"class":69,"line":8696},[67,30066,177],{"emptyLinePlaceholder":176},[67,30068,30069,30071,30073,30075],{"class":69,"line":8702},[67,30070,619],{"class":112},[67,30072,29710],{"class":84},[67,30074,29269],{"class":84},[67,30076,212],{"class":208},[67,30078,30079,30081,30083],{"class":69,"line":8729},[67,30080,29833],{"class":77},[67,30082,29836],{"class":84},[67,30084,212],{"class":208},[67,30086,30087,30089,30092],{"class":69,"line":8734},[67,30088,29272],{"class":208},[67,30090,30091],{"class":84}," tungchiahui\u002Fros-opencv:noetic-411-cuda128-cudnn970-focal",[67,30093,212],{"class":208},[67,30095,30096,30098],{"class":69,"line":8740},[67,30097,29807],{"class":208},[67,30099,212],{"class":208},[67,30101,30102],{"class":69,"line":8752},[67,30103,29278],{"class":84},[67,30105,30106],{"class":69,"line":8764},[67,30107,177],{"emptyLinePlaceholder":176},[67,30109,30110,30112,30114,30116],{"class":69,"line":8776},[67,30111,619],{"class":112},[67,30113,29710],{"class":84},[67,30115,29269],{"class":84},[67,30117,212],{"class":208},[67,30119,30120,30122,30124],{"class":69,"line":10435},[67,30121,29833],{"class":77},[67,30123,29836],{"class":84},[67,30125,212],{"class":208},[67,30127,30128,30130,30133],{"class":69,"line":10459},[67,30129,29272],{"class":208},[67,30131,30132],{"class":84}," cherish\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[67,30134,212],{"class":208},[67,30136,30137,30139],{"class":69,"line":10482},[67,30138,29807],{"class":208},[67,30140,212],{"class":208},[67,30142,30143],{"class":69,"line":10506},[67,30144,29278],{"class":84},[67,30146,30147],{"class":69,"line":10511},[67,30148,177],{"emptyLinePlaceholder":176},[67,30150,30151,30153,30155,30157],{"class":69,"line":10516},[67,30152,383],{"class":112},[67,30154,29710],{"class":84},[67,30156,29269],{"class":84},[67,30158,212],{"class":208},[67,30160,30161,30163,30165],{"class":69,"line":10521},[67,30162,29833],{"class":77},[67,30164,29836],{"class":84},[67,30166,212],{"class":208},[67,30168,30169,30171,30174],{"class":69,"line":10530},[67,30170,29272],{"class":208},[67,30172,30173],{"class":84}," tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn970-noble",[67,30175,212],{"class":208},[67,30177,30178,30180],{"class":69,"line":10535},[67,30179,29807],{"class":208},[67,30181,212],{"class":208},[67,30183,30184],{"class":69,"line":10541},[67,30185,29278],{"class":84},[67,30187,30188],{"class":69,"line":10562},[67,30189,177],{"emptyLinePlaceholder":176},[67,30191,30192,30195,30197,30199],{"class":69,"line":10568},[67,30193,30194],{"class":112},"  docker",[67,30196,29710],{"class":84},[67,30198,29269],{"class":84},[67,30200,212],{"class":208},[67,30202,30203,30205,30207],{"class":69,"line":10582},[67,30204,29833],{"class":77},[67,30206,29836],{"class":84},[67,30208,212],{"class":208},[67,30210,30211,30213,30216],{"class":69,"line":10588},[67,30212,29272],{"class":208},[67,30214,30215],{"class":84}," sdutvincirobot\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[67,30217,212],{"class":208},[67,30219,30220,30222],{"class":69,"line":10615},[67,30221,29807],{"class":208},[67,30223,212],{"class":208},[67,30225,30226],{"class":69,"line":10624},[67,30227,29278],{"class":84},[19,30229,30230],{},"说明： –platform 指定多架构。 –push 是必须的，因为 buildx 的多平台构建默认是不能本地加载的（除非加 –load，但那只能支持单一架构）",[19,30232,30233],{},[725,30234],{"alt":62,"src":30235},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-015.png",[19,30237,30238],{},[725,30239],{"alt":62,"src":30240},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-016.png",[40,30242,30244],{"id":30243},"_623清除构建缓存","6.2.3.清除构建缓存",[57,30246,30248],{"className":59,"code":30247,"language":61,"meta":62,"style":62},"# 清理BuildKit构建缓存\ndocker builder prune -f  \n",[64,30249,30250,30255],{"__ignoreMap":62},[67,30251,30252],{"class":69,"line":70},[67,30253,30254],{"class":202},"# 清理BuildKit构建缓存\n",[67,30256,30257,30259,30262,30265],{"class":69,"line":143},[67,30258,619],{"class":112},[67,30260,30261],{"class":84}," builder",[67,30263,30264],{"class":84}," prune",[67,30266,30267],{"class":208}," -f\n",[19,30269,30270],{},[725,30271],{"alt":62,"src":30272},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-017.png",[14,30274,30276],{"id":30275},"_63补充","6.3.补充",[40,30278,30280],{"id":30279},"_631使用dockfile构建docker镜像","6.3.1.使用Dockfile构建Docker镜像",[19,30282,30283],{},"Dockerfile是一个文本文件，其中包含了若干条指令，指令描述了构建镜像的细节",[19,30285,30286],{},"先来编写一个最简单的Dockerfile，以前文下载的Nginx镜像为例，来编写一个Dockerfile修改该Nginx镜像的首页",[19,30288,30289],{},"1、新建一个空文件夹docker-demo，在里面再新建文件夹app，在app目录下新建一个名为Dockerfile的文件，在里面增加如下内容（vim Dockerfile）：",[57,30291,30293],{"className":59,"code":30292,"language":61,"meta":62,"style":62},"FROM nginx\nRUN echo '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>' > \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[64,30294,30295,30302],{"__ignoreMap":62},[67,30296,30297,30299],{"class":69,"line":70},[67,30298,27907],{"class":112},[67,30300,30301],{"class":84}," nginx\n",[67,30303,30304,30306,30309,30312,30314],{"class":69,"line":143},[67,30305,29092],{"class":112},[67,30307,30308],{"class":84}," echo",[67,30310,30311],{"class":84}," '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>'",[67,30313,282],{"class":73},[67,30315,30316],{"class":84}," \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[19,30318,30319],{},"该Dockerfile非常简单，其中的 FROM、 RUN都是 Dockerfile的指令。 FROM指令用于指定基础镜像， RUN指令用于执行命令",[19,30321,30322],{},"2、在Dockerfile所在路径执行以下命令构建镜像：",[57,30324,30326],{"className":59,"code":30325,"language":61,"meta":62,"style":62},"docker build -t nginx:tuling .\n",[64,30327,30328],{"__ignoreMap":62},[67,30329,30330,30332,30334,30336,30339],{"class":69,"line":70},[67,30331,619],{"class":112},[67,30333,29269],{"class":84},[67,30335,29272],{"class":208},[67,30337,30338],{"class":84}," nginx:tuling",[67,30340,29278],{"class":84},[19,30342,30343],{},"其中，-t指定镜像名字，命令最后的点（.）表示Dockerfile文件所在路径",[19,30345,30346],{},"3、执行以下命令，即可使用该镜像启动一个 Docker容器",[57,30348,30350],{"className":59,"code":30349,"language":61,"meta":62,"style":62},"docker run -d -p 92:80 nginx:tuling\n",[64,30351,30352],{"__ignoreMap":62},[67,30353,30354,30356,30358,30361,30363,30366],{"class":69,"line":70},[67,30355,619],{"class":112},[67,30357,27767],{"class":84},[67,30359,30360],{"class":208}," -d",[67,30362,29753],{"class":208},[67,30364,30365],{"class":84}," 92:80",[67,30367,30368],{"class":84}," nginx:tuling\n",[19,30370,30371,30372],{},"4、访问 ",[28,30373,30376],{"href":30374,"rel":30375},"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",[32],"http:\u002F\u002FDocker宿主机IP:92\u002F，可看到下图所示界面",[19,30378,30379],{},[725,30380],{"alt":62,"src":30381},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-018.png",[19,30383,30384],{},[725,30385],{"alt":62,"src":30386},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-019.png",[40,30388,30390],{"id":30389},"_632使用dockerfile构建微服务镜像","6.3.2.使用Dockerfile构建微服务镜像",[19,30392,30393],{},"只需要知道大体流程即可",[19,30395,30396],{},"以项目tulingmall-member为例，将该微服务的可运行jar包构建成docker镜像",[19,30398,30399],{},"1、将jar包上传linux服务器\u002Froot\u002Ftulingmall\u002Ftulingmall-member目录，在jar包所在目录创建名为Dockerfile的文件",[19,30401,30402],{},"2、在Dockerfile中添加以下内容",[57,30404,30406],{"className":131,"code":30405,"language":133,"meta":62,"style":62},"# 基于哪个镜像\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",[64,30407,30408,30413,30418,30423,30428,30433,30438,30443],{"__ignoreMap":62},[67,30409,30410],{"class":69,"line":70},[67,30411,30412],{},"# 基于哪个镜像\n",[67,30414,30415],{"class":69,"line":143},[67,30416,30417],{},"From java:8\n",[67,30419,30420],{"class":69,"line":149},[67,30421,30422],{},"# 复制文件到容器\n",[67,30424,30425],{"class":69,"line":155},[67,30426,30427],{},"ADD tulingmall-member-0.0.5.jar \u002Ftulingmall-member-0.0.5.jar\n",[67,30429,30430],{"class":69,"line":161},[67,30431,30432],{},"# 声明需要暴露的端口\n",[67,30434,30435],{"class":69,"line":167},[67,30436,30437],{},"EXPOSE 8877\n",[67,30439,30440],{"class":69,"line":173},[67,30441,30442],{},"# 配置容器启动后执行的命令\n",[67,30444,30445],{"class":69,"line":180},[67,30446,30447],{},"ENTRYPOINT java ${JAVA_OPTS} -jar \u002Ftulingmall-member-0.0.5.jar\n",[19,30449,30450],{},"3、使用docker build命令构建镜像",[57,30452,30454],{"className":59,"code":30453,"language":61,"meta":62,"style":62},"docker build -t tulingmall-member:0.0.5 .\n",[64,30455,30456],{"__ignoreMap":62},[67,30457,30458,30460,30462,30464,30467],{"class":69,"line":70},[67,30459,619],{"class":112},[67,30461,29269],{"class":84},[67,30463,29272],{"class":208},[67,30465,30466],{"class":84}," tulingmall-member:0.0.5",[67,30468,29278],{"class":84},[19,30470,30471],{},"格式： docker build -t 镜像名称:标签 Dockerfile的相对位置",[19,30473,30474],{},[725,30475],{"alt":62,"src":30476},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-020.png",[19,30478,30479],{},"4、启动镜像，加-d可在后台启动",[57,30481,30483],{"className":59,"code":30482,"language":61,"meta":62,"style":62},"docker run -d -p 8877:8877 tulingmall-member:0.0.5\n",[64,30484,30485],{"__ignoreMap":62},[67,30486,30487,30489,30491,30493,30495,30498],{"class":69,"line":70},[67,30488,619],{"class":112},[67,30490,27767],{"class":84},[67,30492,30360],{"class":208},[67,30494,29753],{"class":208},[67,30496,30497],{"class":84}," 8877:8877",[67,30499,30500],{"class":84}," tulingmall-member:0.0.5\n",[19,30502,30503],{},"加上JVM参数：",[57,30505,30507],{"className":59,"code":30506,"language":61,"meta":62,"style":62},"# --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",[64,30508,30509,30514,30529,30539,30548,30555],{"__ignoreMap":62},[67,30510,30511],{"class":69,"line":70},[67,30512,30513],{"class":202},"# --cap-add=SYS_PTRACE 这个参数是让docker能支持在容器里能执行jdk自带类似jinfo，jmap这些命令，如果不需要在容器里执行这些命令可以不加\n",[67,30515,30516,30518,30520,30523,30525,30527],{"class":69,"line":143},[67,30517,619],{"class":112},[67,30519,27767],{"class":84},[67,30521,30522],{"class":208},"  -d",[67,30524,29753],{"class":208},[67,30526,30497],{"class":84},[67,30528,212],{"class":208},[67,30530,30531,30533,30536],{"class":69,"line":149},[67,30532,28665],{"class":77},[67,30534,30535],{"class":84},"SPRING_CLOUD_NACOS_CONFIG_SERVER_ADDR=192.168.65.174:8848",[67,30537,30538],{"class":208},"  \\\n",[67,30540,30541,30543,30546],{"class":69,"line":155},[67,30542,28665],{"class":77},[67,30544,30545],{"class":84},"JAVA_OPTS='-Xmx1g -Xms1g -XX:MaxMetaspaceSize=512m'",[67,30547,30538],{"class":208},[67,30549,30550,30553],{"class":69,"line":161},[67,30551,30552],{"class":77},"--cap-add=SYS_PTRACE  ",[67,30554,229],{"class":208},[67,30556,30557],{"class":69,"line":167},[67,30558,30559],{"class":77},"tulingmall-member:0.0.5\n",[19,30561,30562],{},"5、访问会员服务接口",[19,30564,30565],{},[725,30566],{"alt":62,"src":30567},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-021.png",[40,30569,30571],{"id":30570},"_633将微服务镜像发布到阿里云","6.3.3.将微服务镜像发布到阿里云",[19,30573,30574],{},"我们制作好了微服务镜像，一般需要发布到镜像仓库供别人使用，我们可以选择自建镜像仓库，也可以直接使用官方镜像仓库，这里我们选择",[19,30576,30577,30578],{},"阿里云docker镜像仓库：",[28,30579,30580],{"href":30580,"rel":30581},"https:\u002F\u002Fcr.console.aliyun.com\u002Fcn-hangzhou\u002Finstance\u002Frepositories",[32],[19,30583,30584],{},"首先，我们需要注册一个阿里云账号，创建容器镜像服务",[19,30586,30587],{},"然后，在linux服务器上用docker login命令登录镜像仓库",[19,30589,30590],{},[725,30591],{"alt":62,"src":30592},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-022.png",[19,30594,30595],{},"要把镜像推送到镜像仓库",[57,30597,30599],{"className":59,"code":30598,"language":61,"meta":62,"style":62},"docker tag tulingmall-member:0.0.5 registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[64,30600,30601],{"__ignoreMap":62},[67,30602,30603,30605,30607,30609],{"class":69,"line":70},[67,30604,619],{"class":112},[67,30606,29434],{"class":84},[67,30608,30466],{"class":84},[67,30610,30611],{"class":84}," registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[19,30613,30614],{},"最后将镜像推送到远程仓库",[57,30616,30618],{"className":59,"code":30617,"language":61,"meta":62,"style":62},"docker push registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[64,30619,30620],{"__ignoreMap":62},[67,30621,30622,30624,30626],{"class":69,"line":70},[67,30623,619],{"class":112},[67,30625,29553],{"class":84},[67,30627,30611],{"class":84},[779,30629,30630],{},"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":62,"searchDepth":143,"depth":143,"links":30632},[30633,30634,30635],{"id":29020,"depth":149,"text":29021},{"id":29249,"depth":149,"text":29250},{"id":30275,"depth":149,"text":30276},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch6-docker",{"title":29012,"description":62},"wiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像","ViWMXEj6lWx3Vw92hAMOoKTyGbZ4r_bHvPkT-sIqCJk",{"id":30642,"title":30643,"body":30644,"description":62,"extension":787,"meta":30787,"navigation":176,"path":30788,"seo":30789,"stem":30790,"__hash__":30791},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发.md","7.VScode远程开发",{"type":7,"value":30645,"toc":30785},[30646,30649,30654,30659,30662,30667,30672,30675,30680,30685,30688,30693,30696,30699,30702,30705,30708,30711,30731,30753,30756,30759,30779,30782],[10,30647,30643],{"id":30648},"_7vscode远程开发",[815,30650,30651],{},[818,30652,30653],{},"插件1：微软Docker工具",[19,30655,30656],{},[725,30657],{"alt":62,"src":30658},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-023.png",[19,30660,30661],{},"docker扩展插件已经进化为container tools了，请安装container tools",[19,30663,30664],{},[725,30665],{"alt":62,"src":30666},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-024.png",[815,30668,30669],{"start":143},[818,30670,30671],{},"插件2：微软Docker远程开发工具",[19,30673,30674],{},"下面这是远程开发的插件。",[19,30676,30677],{},[725,30678],{"alt":62,"src":30679},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-025.png",[19,30681,30682],{},[725,30683],{"alt":62,"src":30684},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-026.png",[19,30686,30687],{},"上述教程已经挂载了本地磁盘了，所以在Docker容器中可以轻松访问本地的工程",[19,30689,30690],{},[725,30691],{"alt":62,"src":30692},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-027.png",[19,30694,30695],{},"安装完拓展之后，vscode进行链接：",[19,30697,30698],{},"1.按ctrl+shift+p",[19,30700,30701],{},"2.输入 \"Dev Containers: Attach to Running Container\"",[19,30703,30704],{},"3.选择目前运行的容器",[19,30706,30707],{},"4.VS Code 会在新窗口中打开并连接到容器",[19,30709,30710],{},"5.补充一点：在开发时候最好不要将项目所需要的文件夹放到容器中，可以将本地目录挂载到容器内，这样就可以实现项目文件在本地，环境仍然在容器当中 挂载实现方式：",[57,30712,30714],{"className":59,"code":30713,"language":61,"meta":62,"style":62},"docker run -v 主机目录:容器目录 image-name\n",[64,30715,30716],{"__ignoreMap":62},[67,30717,30718,30720,30722,30725,30728],{"class":69,"line":70},[67,30719,619],{"class":112},[67,30721,27767],{"class":84},[67,30723,30724],{"class":208}," -v",[67,30726,30727],{"class":84}," 主机目录:容器目录",[67,30729,30730],{"class":84}," image-name\n",[57,30732,30734],{"className":59,"code":30733,"language":61,"meta":62,"style":62},"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",[64,30735,30736],{"__ignoreMap":62},[67,30737,30738,30740,30742,30745,30747,30750],{"class":69,"line":70},[67,30739,619],{"class":112},[67,30741,27767],{"class":84},[67,30743,30744],{"class":208}," -it",[67,30746,30724],{"class":208},[67,30748,30749],{"class":84}," \u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F:\u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F",[67,30751,30752],{"class":84}," cherish6\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[19,30754,30755],{},"在运行的时候进行挂载，挂载自己的这个项目目录就可以，不会对其他目录产生影响的 需要补充一点非常重要：不要把系统文件给挂载进去，在容器中如果误删除后，本地就崩了！",[19,30757,30758],{},"查看挂载情况：",[57,30760,30762],{"className":59,"code":30761,"language":61,"meta":62,"style":62},"mount | grep -i project\n",[64,30763,30764],{"__ignoreMap":62},[67,30765,30766,30769,30771,30774,30776],{"class":69,"line":70},[67,30767,30768],{"class":112},"mount",[67,30770,266],{"class":73},[67,30772,30773],{"class":112}," grep",[67,30775,494],{"class":208},[67,30777,30778],{"class":84}," project\n",[19,30780,30781],{},"也可以通过ls来进行查看",[779,30783,30784],{},"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":62,"searchDepth":143,"depth":143,"links":30786},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch7-vscode",{"title":30643,"description":62},"wiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发","jXcDt4HYisao6zvVrVK-MtSjb5N3Bk6ZZ0Wv7p7WKKI",{"id":30793,"title":30794,"body":30795,"description":24093,"extension":787,"meta":30799,"navigation":176,"path":30801,"seo":30802,"stem":30803,"__hash__":30804},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Findex.md","Docker",{"type":7,"value":30796,"toc":30797},[],{"title":62,"searchDepth":143,"depth":143,"links":30798},[],{"category":30800},"运维","\u002Fwiki\u002F2025-11-10-docker",{"title":30794,"description":24093},"wiki\u002F2025-11-10-Docker\u002Findex","cPixP1_tGoKPYhmNBJD9RRykSUOIBgXIUZ_wkP0gFbg",{"id":30806,"title":30807,"body":30808,"description":24093,"extension":787,"meta":30812,"navigation":176,"path":30813,"seo":30814,"stem":30815,"__hash__":30816},"wiki\u002Fwiki\u002F2025-11-10-k8s.md","K8S",{"type":7,"value":30809,"toc":30810},[],{"title":62,"searchDepth":143,"depth":143,"links":30811},[],{"category":30800},"\u002Fwiki\u002F2025-11-10-k8s",{"title":30807,"description":24093},"wiki\u002F2025-11-10-k8s","78QQJjmWuXthybVJ5CPmqyTGLhB8l9HoS-XENe0Lur0",{"id":30818,"title":30819,"body":30820,"description":24093,"extension":787,"meta":31113,"navigation":176,"path":31114,"seo":31115,"stem":31116,"__hash__":31117},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境.md","1.验证深度学习环境",{"type":7,"value":30821,"toc":31111},[30822,30825,30833,30848,30853,30904,30907,30913,31100,31105,31108],[10,30823,30819],{"id":30824},"_1验证深度学习环境",[19,30826,30827,30828],{},"关于环境的安装，看",[28,30829,30832],{"href":30830,"rel":30831},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FK4cjdAj26ogJLGxVfWTcrwo6nih",[32],"Pytorch-->深度学习",[19,30834,30835,30836,30839,30840,30843,30844,30847],{},"补充一点安装cuda和cudnn时，使用指令比较好一些，不用单独进行安装，安装pytorch时直接安依赖包就可以（ ",[64,30837,30838],{},"pytorch-cuda=12.4"," 是一个“ ",[336,30841,30842],{},"元包（meta-package）"," ”，它并不包含真正的 CUDA 文件，而是一个 ",[336,30845,30846],{},"依赖集合，"," 里边包含了所需要的一些包，需要注意的是安装前先查看电脑支持的cuda最高版本，要安装的cuda版本小于等于13.0",[19,30849,30850],{},[725,30851],{"alt":62,"src":30852},"\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",[57,30854,30856],{"className":59,"code":30855,"language":61,"meta":62,"style":62},"# 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",[64,30857,30858,30863],{"__ignoreMap":62},[67,30859,30860],{"class":69,"line":70},[67,30861,30862],{"class":202},"# CUDA 12.4\n",[67,30864,30865,30868,30870,30873,30876,30879,30882,30885,30887,30890,30893,30896,30899,30901],{"class":69,"line":143},[67,30866,30867],{"class":112},"conda",[67,30869,312],{"class":84},[67,30871,30872],{"class":84}," pytorch==",[67,30874,30875],{"class":208},"2.5.1",[67,30877,30878],{"class":84}," torchvision==",[67,30880,30881],{"class":208},"0.20.1",[67,30883,30884],{"class":84}," torchaudio==",[67,30886,30875],{"class":208},[67,30888,30889],{"class":84}," pytorch-cuda=",[67,30891,30892],{"class":208},"12.4",[67,30894,30895],{"class":208}," -c",[67,30897,30898],{"class":84}," pytorch",[67,30900,30895],{"class":208},[67,30902,30903],{"class":84}," nvidia\n",[19,30905,30906],{},"）：",[19,30908,30909],{},[28,30910,30911],{"href":30911,"rel":30912},"https:\u002F\u002Fpytorch.org\u002Fget-started\u002Fprevious-versions\u002F",[32],[57,30914,30918],{"className":30915,"code":30916,"language":30917,"meta":62,"style":62},"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",[64,30919,30920,30925,30933,30938,30948,30964,30969,30979,31016,31023,31035,31051,31056,31066,31078,31088],{"__ignoreMap":62},[67,30921,30922],{"class":69,"line":70},[67,30923,30924],{"class":202},"# 对深度学习环境进行测试\n",[67,30926,30927,30930],{"class":69,"line":143},[67,30928,30929],{"class":73},"import",[67,30931,30932],{"class":77}," torch\n",[67,30934,30935],{"class":69,"line":149},[67,30936,30937],{"class":202},"# 查看cuda是否被激活\n",[67,30939,30940,30943,30945],{"class":69,"line":155},[67,30941,30942],{"class":77},"flag",[67,30944,909],{"class":73},[67,30946,30947],{"class":77},"torch.cuda.is_available()\n",[67,30949,30950,30953,30955,30958,30961],{"class":69,"line":161},[67,30951,30952],{"class":208},"print",[67,30954,864],{"class":77},[67,30956,30957],{"class":84},"\"cuda:\"",[67,30959,30960],{"class":77},", flag)   ",[67,30962,30963],{"class":202},"#返回true的话说明被激活\n",[67,30965,30966],{"class":69,"line":167},[67,30967,30968],{"class":202},"# 进行调用查看:有GPU调用GPU，没有GPU调用CPU\n",[67,30970,30971,30974,30976],{"class":69,"line":173},[67,30972,30973],{"class":77},"ngpu",[67,30975,909],{"class":73},[67,30977,30978],{"class":208},"1\n",[67,30980,30981,30984,30986,30989,30992,30994,30997,31000,31003,31005,31007,31009,31011,31014],{"class":69,"line":180},[67,30982,30983],{"class":77},"device",[67,30985,909],{"class":73},[67,30987,30988],{"class":77},"torch.device(",[67,30990,30991],{"class":84},"\"cuda:0\"",[67,30993,2427],{"class":73},[67,30995,30996],{"class":77},"(torch.cuda.is_available() ",[67,30998,30999],{"class":73},"and",[67,31001,31002],{"class":77}," ngpu",[67,31004,1816],{"class":73},[67,31006,1051],{"class":208},[67,31008,14432],{"class":77},[67,31010,2424],{"class":73},[67,31012,31013],{"class":84}," \"cpu\"",[67,31015,870],{"class":77},[67,31017,31018,31020],{"class":69,"line":186},[67,31019,30952],{"class":208},[67,31021,31022],{"class":77},"(device)\n",[67,31024,31025,31027,31030,31032],{"class":69,"line":444},[67,31026,30952],{"class":208},[67,31028,31029],{"class":77},"(torch.cuda.get_device_name(",[67,31031,1051],{"class":208},[67,31033,31034],{"class":77},"))\n",[67,31036,31037,31039,31042,31044,31046,31048],{"class":69,"line":2335},[67,31038,30952],{"class":208},[67,31040,31041],{"class":77},"(torch.rand(",[67,31043,933],{"class":208},[67,31045,1236],{"class":77},[67,31047,933],{"class":208},[67,31049,31050],{"class":77},").cuda())\n",[67,31052,31053],{"class":69,"line":2340},[67,31054,31055],{"class":202},"# 查看cuda和cudnn的版本\n",[67,31057,31058,31061,31063],{"class":69,"line":2346},[67,31059,31060],{"class":77},"cuda_version",[67,31062,909],{"class":73},[67,31064,31065],{"class":77},"torch.version.cuda\n",[67,31067,31068,31070,31072,31075],{"class":69,"line":2351},[67,31069,30952],{"class":208},[67,31071,864],{"class":77},[67,31073,31074],{"class":84},"\"cuda version\"",[67,31076,31077],{"class":77},",cuda_version)\n",[67,31079,31080,31083,31085],{"class":69,"line":2365},[67,31081,31082],{"class":77},"cudnn_version",[67,31084,909],{"class":73},[67,31086,31087],{"class":77},"torch.backends.cudnn.version()\n",[67,31089,31090,31092,31094,31097],{"class":69,"line":2370},[67,31091,30952],{"class":208},[67,31093,864],{"class":77},[67,31095,31096],{"class":84},"\"cudnn version\"",[67,31098,31099],{"class":77},",cudnn_version)\n",[19,31101,31102],{},[725,31103],{"alt":62,"src":31104},"\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,31106,31107],{},"cuda:0 指的是一块显卡",[779,31109,31110],{},"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":62,"searchDepth":143,"depth":143,"links":31112},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch1",{"title":30819,"description":24093},"wiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境","RH7hK3Jf2AfXWipS59cUOBvN5klNTAjs1j6ohh9I9GE",{"id":31119,"title":31120,"body":31121,"description":24093,"extension":787,"meta":50925,"navigation":176,"path":50926,"seo":50927,"stem":50928,"__hash__":50929},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络.md","2.经典神经网络",{"type":7,"value":31122,"toc":50919},[31123,31126,31130,31134,31137,31142,31147,31150,31155,31160,31165,31168,31172,31177,31181,31186,31189,31194,31197,31200,31203,31206,31211,31214,31219,31224,31229,31234,31237,31241,31244,31249,31853,31858,31861,31866,31869,31872,32336,32339,32342,32345,32348,34399,34402,34407,34412,35207,35210,35215,35993,35997,37656,37660,38374,38378,38382,38387,38392,38397,38400,38405,38410,38415,38420,38425,38429,38434,39716,39721,39724,39727,39730,39885,39888,39891,41107,41112,41807,41811,41815,41820,41825,41828,41833,41838,41843,41848,41853,41858,41863,41868,41873,41878,41883,41888,41893,41898,41903,41908,41913,41918,41923,41928,41933,41938,41943,41948,41953,41958,41963,41968,41973,41978,41982,41986,41989,43467,43471,45118,45122,45816,45820,45823,45826,46370,46373,46377,46380,47777,47781,47784,48362,50149,50153,50156,50916],[10,31124,31120],{"id":31125},"_2经典神经网络",[14,31127,31129],{"id":31128},"_21lenet与alexnet","2.1.LeNet与AlexNet",[40,31131,31133],{"id":31132},"_211原理介绍","2.1.1.原理介绍",[19,31135,31136],{},"LeNet-5",[815,31138,31139],{},[818,31140,31141],{},"原理",[19,31143,31144],{},[725,31145],{"alt":62,"src":31146},"\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,31148,31149],{},"B是batch批次；C是channel通道",[815,31151,31152],{"start":143},[818,31153,31154],{},"网络参数详细",[19,31156,31157],{},[725,31158],{"alt":62,"src":31159},"\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,31161,31162],{},[725,31163],{"alt":62,"src":31164},"\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,31166,31167],{},"AlexNet",[815,31169,31170],{},[818,31171,31141],{},[19,31173,31174],{},[725,31175],{"alt":62,"src":31176},"\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",[815,31178,31179],{"start":143},[818,31180,31154],{},[19,31182,31183],{},[725,31184],{"alt":62,"src":31185},"\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,31187,31188],{},"使用dropout使一部分神经元失活，这样可以避免数据量太大导致的过拟合发生，操作如下：",[19,31190,31191],{},[725,31192],{"alt":62,"src":31193},"\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,31195,31196],{},"数据处理中的图像增强操作:",[19,31198,31199],{},"在深度学习中最重要的就是对数据的采集和处理，数据不够的情况下，需要对数据进行扩增，有两个好处：",[19,31201,31202],{},"①增加数据量，保证训练数据充足；②防止过拟合",[19,31204,31205],{},"操作方式：①水平翻转；②随机裁剪；③PCA",[19,31207,31208],{},[725,31209],{"alt":62,"src":31210},"\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,31212,31213],{},"提升网络精确度的方法：LRN正则化",[19,31215,31216],{},[725,31217],{"alt":62,"src":31218},"\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,31220,31221],{},[725,31222],{"alt":62,"src":31223},"\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",[815,31225,31226],{"start":149},[818,31227,31228],{},"AlexNet的总结",[19,31230,31231],{},[725,31232],{"alt":62,"src":31233},"\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,31235,31236],{},"比LeNet模型要深一丢丢",[40,31238,31240],{"id":31239},"_212代码实现","2.1.2.代码实现",[19,31242,31243],{},"（1）LeNet",[815,31245,31246],{},[818,31247,31248],{},"模型搭建",[57,31250,31252],{"className":30915,"code":31251,"language":30917,"meta":62,"style":62},"# 导入库\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",[64,31253,31254,31259,31265,31270,31283,31288,31300,31304,31324,31329,31334,31345,31350,31369,31373,31378,31427,31439,31444,31473,31508,31535,31540,31552,31557,31577,31596,31615,31619,31624,31634,31651,31662,31677,31688,31699,31714,31729,31740,31747,31751,31765,31770,31793,31798,31803,31808,31812,31817,31822,31832],{"__ignoreMap":62},[67,31255,31256],{"class":69,"line":70},[67,31257,31258],{"class":202},"# 导入库\n",[67,31260,31261,31263],{"class":69,"line":143},[67,31262,30929],{"class":73},[67,31264,30932],{"class":77},[67,31266,31267],{"class":69,"line":149},[67,31268,31269],{"class":202},"# 导入神经网络层\n",[67,31271,31272,31275,31278,31280],{"class":69,"line":155},[67,31273,31274],{"class":73},"from",[67,31276,31277],{"class":77}," torch ",[67,31279,30929],{"class":73},[67,31281,31282],{"class":77}," nn\n",[67,31284,31285],{"class":69,"line":161},[67,31286,31287],{"class":202},"# 导入展示神经网络参数的包\n",[67,31289,31290,31292,31295,31297],{"class":69,"line":167},[67,31291,31274],{"class":73},[67,31293,31294],{"class":77}," torchsummary ",[67,31296,30929],{"class":73},[67,31298,31299],{"class":77}," summary\n",[67,31301,31302],{"class":69,"line":173},[67,31303,177],{"emptyLinePlaceholder":176},[67,31305,31306,31308,31311,31313,31316,31318,31321],{"class":69,"line":180},[67,31307,15411],{"class":73},[67,31309,31310],{"class":112}," LeNet",[67,31312,864],{"class":77},[67,31314,31315],{"class":112},"nn",[67,31317,240],{"class":77},[67,31319,31320],{"class":112},"Module",[67,31322,31323],{"class":77},"):\n",[67,31325,31326],{"class":69,"line":186},[67,31327,31328],{"class":202},"    # 模型初始化:\n",[67,31330,31331],{"class":69,"line":444},[67,31332,31333],{"class":202},"    # 定义一些网络层和激活函数\n",[67,31335,31336,31339,31342],{"class":69,"line":2335},[67,31337,31338],{"class":73},"    def",[67,31340,31341],{"class":208}," __init__",[67,31343,31344],{"class":77},"(self):\n",[67,31346,31347],{"class":69,"line":2340},[67,31348,31349],{"class":202},"        # 当时使用继承的时候,如果要进行初始化,必须也要将父类进行初始化一下\n",[67,31351,31352,31355,31358,31361,31364,31367],{"class":69,"line":2346},[67,31353,31354],{"class":208},"        super",[67,31356,31357],{"class":77},"(LeNet,",[67,31359,31360],{"class":208},"self",[67,31362,31363],{"class":77},").",[67,31365,31366],{"class":208},"__init__",[67,31368,2698],{"class":77},[67,31370,31371],{"class":69,"line":2351},[67,31372,177],{"emptyLinePlaceholder":176},[67,31374,31375],{"class":69,"line":2365},[67,31376,31377],{"class":202},"        # 定义网络层\n",[67,31379,31380,31383,31386,31388,31391,31394,31396,31398,31400,31403,31405,31407,31409,31412,31414,31416,31418,31421,31423,31425],{"class":69,"line":2370},[67,31381,31382],{"class":208},"        self",[67,31384,31385],{"class":77},".c1",[67,31387,909],{"class":73},[67,31389,31390],{"class":77},"nn.Conv2d(",[67,31392,31393],{"class":5935},"in_channels",[67,31395,909],{"class":73},[67,31397,1077],{"class":208},[67,31399,1236],{"class":77},[67,31401,31402],{"class":5935},"out_channels",[67,31404,909],{"class":73},[67,31406,1202],{"class":208},[67,31408,1236],{"class":77},[67,31410,31411],{"class":5935},"kernel_size",[67,31413,909],{"class":73},[67,31415,1177],{"class":208},[67,31417,1236],{"class":77},[67,31419,31420],{"class":5935},"padding",[67,31422,909],{"class":73},[67,31424,939],{"class":208},[67,31426,870],{"class":77},[67,31428,31429,31431,31434,31436],{"class":69,"line":2376},[67,31430,31382],{"class":208},[67,31432,31433],{"class":77},".sig",[67,31435,909],{"class":73},[67,31437,31438],{"class":77},"nn.Sigmoid()\n",[67,31440,31441],{"class":69,"line":2397},[67,31442,31443],{"class":202},"        # 定义池化\n",[67,31445,31446,31448,31451,31453,31456,31458,31460,31462,31464,31467,31469,31471],{"class":69,"line":2402},[67,31447,31382],{"class":208},[67,31449,31450],{"class":77},".s2",[67,31452,909],{"class":73},[67,31454,31455],{"class":77},"nn.AvgPool2d(",[67,31457,31411],{"class":5935},[67,31459,909],{"class":73},[67,31461,939],{"class":208},[67,31463,1236],{"class":77},[67,31465,31466],{"class":5935},"stride",[67,31468,909],{"class":73},[67,31470,939],{"class":208},[67,31472,870],{"class":77},[67,31474,31475,31477,31480,31482,31484,31486,31488,31490,31492,31494,31496,31498,31500,31502,31504,31506],{"class":69,"line":2416},[67,31476,31382],{"class":208},[67,31478,31479],{"class":77},".c3",[67,31481,909],{"class":73},[67,31483,31390],{"class":77},[67,31485,31393],{"class":5935},[67,31487,909],{"class":73},[67,31489,1202],{"class":208},[67,31491,1236],{"class":77},[67,31493,31402],{"class":5935},[67,31495,909],{"class":73},[67,31497,1457],{"class":208},[67,31499,1236],{"class":77},[67,31501,31411],{"class":5935},[67,31503,909],{"class":73},[67,31505,1177],{"class":208},[67,31507,870],{"class":77},[67,31509,31510,31512,31515,31517,31519,31521,31523,31525,31527,31529,31531,31533],{"class":69,"line":2421},[67,31511,31382],{"class":208},[67,31513,31514],{"class":77},".s4",[67,31516,909],{"class":73},[67,31518,31455],{"class":77},[67,31520,31411],{"class":5935},[67,31522,909],{"class":73},[67,31524,939],{"class":208},[67,31526,1236],{"class":77},[67,31528,31466],{"class":5935},[67,31530,909],{"class":73},[67,31532,939],{"class":208},[67,31534,870],{"class":77},[67,31536,31537],{"class":69,"line":2450},[67,31538,31539],{"class":202},"        # 定义平展层\n",[67,31541,31542,31544,31547,31549],{"class":69,"line":2455},[67,31543,31382],{"class":208},[67,31545,31546],{"class":77},".flatten",[67,31548,909],{"class":73},[67,31550,31551],{"class":77},"nn.Flatten()\n",[67,31553,31554],{"class":69,"line":2472},[67,31555,31556],{"class":202},"        # 定义全连接层\n",[67,31558,31559,31561,31564,31566,31569,31571,31573,31575],{"class":69,"line":2477},[67,31560,31382],{"class":208},[67,31562,31563],{"class":77},".f5",[67,31565,909],{"class":73},[67,31567,31568],{"class":77},"nn.Linear(",[67,31570,4707],{"class":208},[67,31572,1236],{"class":77},[67,31574,1673],{"class":208},[67,31576,870],{"class":77},[67,31578,31579,31581,31584,31586,31588,31590,31592,31594],{"class":69,"line":2482},[67,31580,31382],{"class":208},[67,31582,31583],{"class":77},".f6",[67,31585,909],{"class":73},[67,31587,31568],{"class":77},[67,31589,1673],{"class":208},[67,31591,1236],{"class":77},[67,31593,1567],{"class":208},[67,31595,870],{"class":77},[67,31597,31598,31600,31603,31605,31607,31609,31611,31613],{"class":69,"line":2487},[67,31599,31382],{"class":208},[67,31601,31602],{"class":77},".f7",[67,31604,909],{"class":73},[67,31606,31568],{"class":77},[67,31608,1567],{"class":208},[67,31610,1236],{"class":77},[67,31612,1303],{"class":208},[67,31614,870],{"class":77},[67,31616,31617],{"class":69,"line":2501},[67,31618,177],{"emptyLinePlaceholder":176},[67,31620,31621],{"class":69,"line":2506},[67,31622,31623],{"class":202},"    # 写工具->写前向传播\n",[67,31625,31626,31628,31631],{"class":69,"line":3298},[67,31627,31338],{"class":73},[67,31629,31630],{"class":112}," forward",[67,31632,31633],{"class":77},"(self,x):\n",[67,31635,31636,31639,31641,31643,31646,31648],{"class":69,"line":3312},[67,31637,31638],{"class":77},"        x",[67,31640,909],{"class":73},[67,31642,31360],{"class":208},[67,31644,31645],{"class":77},".sig(",[67,31647,31360],{"class":208},[67,31649,31650],{"class":77},".c1(x))\n",[67,31652,31653,31655,31657,31659],{"class":69,"line":3320},[67,31654,31638],{"class":77},[67,31656,909],{"class":73},[67,31658,31360],{"class":208},[67,31660,31661],{"class":77},".s2(x)\n",[67,31663,31664,31666,31668,31670,31672,31674],{"class":69,"line":3325},[67,31665,31638],{"class":77},[67,31667,909],{"class":73},[67,31669,31360],{"class":208},[67,31671,31645],{"class":77},[67,31673,31360],{"class":208},[67,31675,31676],{"class":77},".c3(x))\n",[67,31678,31679,31681,31683,31685],{"class":69,"line":3331},[67,31680,31638],{"class":77},[67,31682,909],{"class":73},[67,31684,31360],{"class":208},[67,31686,31687],{"class":77},".s4(x)\n",[67,31689,31690,31692,31694,31696],{"class":69,"line":3337},[67,31691,31638],{"class":77},[67,31693,909],{"class":73},[67,31695,31360],{"class":208},[67,31697,31698],{"class":77},".flatten(x)\n",[67,31700,31701,31703,31705,31707,31709,31711],{"class":69,"line":3342},[67,31702,31638],{"class":77},[67,31704,909],{"class":73},[67,31706,31360],{"class":208},[67,31708,31645],{"class":77},[67,31710,31360],{"class":208},[67,31712,31713],{"class":77},".f5(x))\n",[67,31715,31716,31718,31720,31722,31724,31726],{"class":69,"line":8667},[67,31717,31638],{"class":77},[67,31719,909],{"class":73},[67,31721,31360],{"class":208},[67,31723,31645],{"class":77},[67,31725,31360],{"class":208},[67,31727,31728],{"class":77},".f6(x))\n",[67,31730,31731,31733,31735,31737],{"class":69,"line":8691},[67,31732,31638],{"class":77},[67,31734,909],{"class":73},[67,31736,31360],{"class":208},[67,31738,31739],{"class":77},".f7(x)\n",[67,31741,31742,31744],{"class":69,"line":8696},[67,31743,15469],{"class":73},[67,31745,31746],{"class":77}," x\n",[67,31748,31749],{"class":69,"line":8702},[67,31750,177],{"emptyLinePlaceholder":176},[67,31752,31753,31755,31758,31760,31763],{"class":69,"line":8729},[67,31754,2254],{"class":73},[67,31756,31757],{"class":208}," __name__",[67,31759,3670],{"class":73},[67,31761,31762],{"class":84},"\"__main__\"",[67,31764,4459],{"class":77},[67,31766,31767],{"class":69,"line":8734},[67,31768,31769],{"class":202},"    # 判断是否有cuda是否激活,有GPU会返回cuda\n",[67,31771,31772,31775,31777,31779,31782,31784,31787,31789,31791],{"class":69,"line":8740},[67,31773,31774],{"class":77},"    device",[67,31776,909],{"class":73},[67,31778,30988],{"class":77},[67,31780,31781],{"class":84},"\"cuda\"",[67,31783,2427],{"class":73},[67,31785,31786],{"class":77}," torch.cuda.is_available() ",[67,31788,2424],{"class":73},[67,31790,31013],{"class":84},[67,31792,870],{"class":77},[67,31794,31795],{"class":69,"line":8752},[67,31796,31797],{"class":202},"    # 如果就是想指定用cpu用下方代码:\n",[67,31799,31800],{"class":69,"line":8764},[67,31801,31802],{"class":202},"    # device=\"cpu\"\n",[67,31804,31805],{"class":69,"line":8776},[67,31806,31807],{"class":202},"    # print(device)\n",[67,31809,31810],{"class":69,"line":10435},[67,31811,177],{"emptyLinePlaceholder":176},[67,31813,31814],{"class":69,"line":10459},[67,31815,31816],{"class":202},"    # 实例化模型\n",[67,31818,31819],{"class":69,"line":10482},[67,31820,31821],{"class":202},"    # 将模型放到设备中去运行\n",[67,31823,31824,31827,31829],{"class":69,"line":10506},[67,31825,31826],{"class":77},"    model",[67,31828,909],{"class":73},[67,31830,31831],{"class":77},"LeNet().to(device)\n",[67,31833,31834,31837,31840,31842,31844,31846,31848,31850],{"class":69,"line":10511},[67,31835,31836],{"class":208},"    print",[67,31838,31839],{"class":77},"(summary(model,(",[67,31841,1077],{"class":208},[67,31843,1236],{"class":77},[67,31845,1757],{"class":208},[67,31847,1236],{"class":77},[67,31849,1757],{"class":208},[67,31851,31852],{"class":77},")))\n",[19,31854,31855],{},[725,31856],{"alt":62,"src":31857},"\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,31859,31860],{},"summary这个包就是用来展示神经网络的计算过程，展示参数的变化",[815,31862,31863],{"start":143},[818,31864,31865],{},"训练",[19,31867,31868],{},"训练和测试部分的代码作为模板，可以移植到其他模型使用",[19,31870,31871],{},"在训练之前可以将数据展示看一下",[57,31873,31875],{"className":30915,"code":31874,"language":30917,"meta":62,"style":62},"# 建立画图的函数，用于展示数据\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",[64,31876,31877,31882,31887,31899,31911,31924,31929,31941,31946,31958,31963,31975,31979,31983,32004,32016,32021,32042,32053,32057,32062,32080,32091,32096,32107,32112,32123,32127,32132,32147,32160,32165,32170,32183,32196,32209,32214,32218,32223,32243,32260,32280,32293,32306,32316,32331],{"__ignoreMap":62},[67,31878,31879],{"class":69,"line":70},[67,31880,31881],{"class":202},"# 建立画图的函数，用于展示数据\n",[67,31883,31884],{"class":69,"line":143},[67,31885,31886],{"class":202},"# torchvision中包含很多内置的数据集\n",[67,31888,31889,31891,31894,31896],{"class":69,"line":149},[67,31890,31274],{"class":73},[67,31892,31893],{"class":77}," sklearn.externals.array_api_compat.torch ",[67,31895,30929],{"class":73},[67,31897,31898],{"class":77}," squeeze\n",[67,31900,31901,31903,31906,31908],{"class":69,"line":155},[67,31902,31274],{"class":73},[67,31904,31905],{"class":77}," torchvision.datasets ",[67,31907,30929],{"class":73},[67,31909,31910],{"class":77}," FashionMNIST\n",[67,31912,31913,31915,31918,31921],{"class":69,"line":161},[67,31914,30929],{"class":73},[67,31916,31917],{"class":77}," numpy ",[67,31919,31920],{"class":73},"as",[67,31922,31923],{"class":77}," np\n",[67,31925,31926],{"class":69,"line":167},[67,31927,31928],{"class":202},"# 引入处理数据集的包\n",[67,31930,31931,31933,31936,31938],{"class":69,"line":173},[67,31932,31274],{"class":73},[67,31934,31935],{"class":77}," torchvision ",[67,31937,30929],{"class":73},[67,31939,31940],{"class":77}," transforms\n",[67,31942,31943],{"class":69,"line":180},[67,31944,31945],{"class":202},"# 从torch库中引入数据处理的包\n",[67,31947,31948,31950,31953,31955],{"class":69,"line":186},[67,31949,30929],{"class":73},[67,31951,31952],{"class":77}," torch.utils.data ",[67,31954,31920],{"class":73},[67,31956,31957],{"class":77}," Data\n",[67,31959,31960],{"class":69,"line":444},[67,31961,31962],{"class":202},"# 导入画图的库\n",[67,31964,31965,31967,31970,31972],{"class":69,"line":2335},[67,31966,30929],{"class":73},[67,31968,31969],{"class":77}," matplotlib.pyplot ",[67,31971,31920],{"class":73},[67,31973,31974],{"class":77}," plt\n",[67,31976,31977],{"class":69,"line":2340},[67,31978,177],{"emptyLinePlaceholder":176},[67,31980,31981],{"class":69,"line":2346},[67,31982,177],{"emptyLinePlaceholder":176},[67,31984,31985,31988,31990,31993,31996,31998,32001],{"class":69,"line":2351},[67,31986,31987],{"class":77},"train_data",[67,31989,909],{"class":73},[67,31991,31992],{"class":77},"FashionMNIST(",[67,31994,31995],{"class":5935},"root",[67,31997,909],{"class":73},[67,31999,32000],{"class":84},"'.\u002Fdata'",[67,32002,32003],{"class":77},",\n",[67,32005,32006,32009,32011,32014],{"class":69,"line":2365},[67,32007,32008],{"class":5935},"                        train",[67,32010,909],{"class":73},[67,32012,32013],{"class":208},"True",[67,32015,32003],{"class":77},[67,32017,32018],{"class":69,"line":2370},[67,32019,32020],{"class":202},"                        # 将数据大小变为224大小,并转换为张量的形式,方便模型的应用\n",[67,32022,32023,32026,32028,32031,32034,32036,32039],{"class":69,"line":2376},[67,32024,32025],{"class":5935},"                        transform",[67,32027,909],{"class":73},[67,32029,32030],{"class":77},"transforms.Compose([transforms.Resize(",[67,32032,32033],{"class":5935},"size",[67,32035,909],{"class":73},[67,32037,32038],{"class":208},"224",[67,32040,32041],{"class":77},"),transforms.ToTensor()]),\n",[67,32043,32044,32047,32049,32051],{"class":69,"line":2397},[67,32045,32046],{"class":5935},"                        download",[67,32048,909],{"class":73},[67,32050,32013],{"class":208},[67,32052,870],{"class":77},[67,32054,32055],{"class":69,"line":2402},[67,32056,177],{"emptyLinePlaceholder":176},[67,32058,32059],{"class":69,"line":2416},[67,32060,32061],{"class":202},"# 处理数据--->将数据引入进来,将数据进行打乱,成捆,然后规定进程\n",[67,32063,32064,32067,32069,32072,32075,32077],{"class":69,"line":2421},[67,32065,32066],{"class":77},"train_loader",[67,32068,909],{"class":73},[67,32070,32071],{"class":77},"Data.DataLoader(",[67,32073,32074],{"class":5935},"dataset",[67,32076,909],{"class":73},[67,32078,32079],{"class":77},"train_data,\n",[67,32081,32082,32085,32087,32089],{"class":69,"line":2450},[67,32083,32084],{"class":5935},"                             batch_size",[67,32086,909],{"class":73},[67,32088,1063],{"class":208},[67,32090,32003],{"class":77},[67,32092,32093],{"class":69,"line":2455},[67,32094,32095],{"class":202},"                             # 数据是否打乱\n",[67,32097,32098,32101,32103,32105],{"class":69,"line":2472},[67,32099,32100],{"class":5935},"                             shuffle",[67,32102,909],{"class":73},[67,32104,32013],{"class":208},[67,32106,32003],{"class":77},[67,32108,32109],{"class":69,"line":2477},[67,32110,32111],{"class":202},"                             # 规定加载数据的进程\n",[67,32113,32114,32117,32119,32121],{"class":69,"line":2482},[67,32115,32116],{"class":5935},"                             num_workers",[67,32118,909],{"class":73},[67,32120,1051],{"class":208},[67,32122,870],{"class":77},[67,32124,32125],{"class":69,"line":2487},[67,32126,177],{"emptyLinePlaceholder":176},[67,32128,32129],{"class":69,"line":2501},[67,32130,32131],{"class":202},"# 获得一个batch的数据\n",[67,32133,32134,32136,32139,32141,32144],{"class":69,"line":2506},[67,32135,74],{"class":73},[67,32137,32138],{"class":77}," step,(b_x,b_y) ",[67,32140,81],{"class":73},[67,32142,32143],{"class":208}," enumerate",[67,32145,32146],{"class":77},"(train_loader):\n",[67,32148,32149,32151,32154,32156,32158],{"class":69,"line":3298},[67,32150,3821],{"class":73},[67,32152,32153],{"class":77}," step ",[67,32155,1816],{"class":73},[67,32157,4813],{"class":208},[67,32159,4459],{"class":77},[67,32161,32162],{"class":69,"line":3312},[67,32163,32164],{"class":73},"        break\n",[67,32166,32167],{"class":69,"line":3320},[67,32168,32169],{"class":202},"# squeeze()这个函数是去除张量中所有大小为1的维度\n",[67,32171,32172,32175,32177,32180],{"class":69,"line":3325},[67,32173,32174],{"class":77},"batch_x",[67,32176,909],{"class":73},[67,32178,32179],{"class":77},"b_x.squeeze().numpy()  ",[67,32181,32182],{"class":202},"#将四维张量移除所有维度为1的维度,并转换成numpy数组\n",[67,32184,32185,32188,32190,32193],{"class":69,"line":3331},[67,32186,32187],{"class":77},"batch_y",[67,32189,909],{"class":73},[67,32191,32192],{"class":77},"b_y.numpy()   ",[67,32194,32195],{"class":202},"#将张量转换成功numpy数组\n",[67,32197,32198,32201,32203,32206],{"class":69,"line":3337},[67,32199,32200],{"class":77},"class_label",[67,32202,909],{"class":73},[67,32204,32205],{"class":77},"train_data.classes  ",[67,32207,32208],{"class":202},"#训练集标签\n",[67,32210,32211],{"class":69,"line":3342},[67,32212,32213],{"class":202},"# print(class_label)\n",[67,32215,32216],{"class":69,"line":8667},[67,32217,177],{"emptyLinePlaceholder":176},[67,32219,32220],{"class":69,"line":8691},[67,32221,32222],{"class":202},"# 可视化一个batch的图像\n",[67,32224,32225,32228,32231,32233,32235,32237,32239,32241],{"class":69,"line":8696},[67,32226,32227],{"class":77},"plt.figure(",[67,32229,32230],{"class":5935},"figsize",[67,32232,909],{"class":73},[67,32234,864],{"class":77},[67,32236,1355],{"class":208},[67,32238,1236],{"class":77},[67,32240,1177],{"class":208},[67,32242,31034],{"class":77},[67,32244,32245,32247,32250,32252,32255,32257],{"class":69,"line":8702},[67,32246,74],{"class":73},[67,32248,32249],{"class":77}," ii ",[67,32251,81],{"class":73},[67,32253,32254],{"class":77}," np.arange(",[67,32256,8077],{"class":208},[67,32258,32259],{"class":77},"(batch_y)):\n",[67,32261,32262,32265,32267,32269,32271,32274,32276,32278],{"class":69,"line":8729},[67,32263,32264],{"class":77},"    plt.subplot(",[67,32266,1151],{"class":208},[67,32268,1236],{"class":77},[67,32270,1457],{"class":208},[67,32272,32273],{"class":77},",ii ",[67,32275,1338],{"class":73},[67,32277,25828],{"class":208},[67,32279,870],{"class":77},[67,32281,32282,32285,32288,32290],{"class":69,"line":8734},[67,32283,32284],{"class":77},"    plt.imshow(batch_x[ii,:,:],",[67,32286,32287],{"class":5935},"cmap",[67,32289,909],{"class":73},[67,32291,32292],{"class":77},"plt.cm.gray)\n",[67,32294,32295,32298,32300,32302,32304],{"class":69,"line":8740},[67,32296,32297],{"class":77},"    plt.title(class_label[batch_y[ii]],",[67,32299,32033],{"class":5935},[67,32301,909],{"class":73},[67,32303,1303],{"class":208},[67,32305,870],{"class":77},[67,32307,32308,32311,32314],{"class":69,"line":8752},[67,32309,32310],{"class":77},"    plt.axis(",[67,32312,32313],{"class":84},"\"off\"",[67,32315,870],{"class":77},[67,32317,32318,32321,32324,32326,32329],{"class":69,"line":8764},[67,32319,32320],{"class":77},"    plt.subplots_adjust(",[67,32322,32323],{"class":5935},"wspace",[67,32325,909],{"class":73},[67,32327,32328],{"class":208},"0.05",[67,32330,870],{"class":77},[67,32332,32333],{"class":69,"line":8776},[67,32334,32335],{"class":77},"plt.show()\n",[19,32337,32338],{},"用matplotlib进行展示的过程可以后续再补",[19,32340,32341],{},"关于损失函数的使用：分类用交叉熵损失函数；回归用均方差损失函数",[19,32343,32344],{},"训练次数就是按照批次过整个训练集数据的次数",[19,32346,32347],{},"模型训练：",[57,32349,32351],{"className":30915,"code":32350,"language":30917,"meta":62,"style":62},"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",[64,32352,32353,32360,32367,32371,32383,32389,32400,32410,32420,32430,32440,32445,32457,32467,32471,32475,32480,32491,32504,32515,32532,32543,32582,32598,32610,32621,32626,32637,32653,32664,32675,32686,32693,32697,32702,32707,32711,32716,32726,32747,32751,32755,32760,32765,32770,32790,32794,32799,32809,32813,32818,32827,32832,32837,32842,32852,32856,32860,32865,32870,32880,32885,32895,32900,32909,32914,32923,32928,32937,32941,32946,32956,32960,32964,32969,32984,33012,33027,33031,33036,33041,33050,33055,33064,33069,33078,33083,33092,33097,33106,33111,33120,33125,33138,33143,33153,33158,33168,33174,33180,33186,33192,33203,33209,33229,33235,33246,33252,33258,33264,33270,33276,33282,33288,33308,33314,33330,33336,33350,33356,33371,33377,33386,33392,33401,33407,33413,33422,33428,33439,33445,33464,33470,33481,33487,33507,33523,33529,33543,33549,33555,33566,33572,33578,33588,33594,33605,33611,33621,33626,33632,33681,33728,33733,33739,33758,33764,33784,33790,33796,33806,33811,33817,33833,33878,33884,33890,33896,33907,33913,33919,33925,33943,33957,33966,33975,33984,33993,33999,34005,34013,34018,34024,34035,34041,34061,34067,34073,34079,34096,34102,34108,34114,34120,34126,34153,34177,34183,34189,34195,34206,34217,34223,34240,34263,34286,34292,34297,34306,34316,34322,34327,34333,34346,34352,34363,34374,34393],{"__ignoreMap":62},[67,32354,32355,32357],{"class":69,"line":70},[67,32356,30929],{"class":73},[67,32358,32359],{"class":77}," copy\n",[67,32361,32362,32364],{"class":69,"line":143},[67,32363,30929],{"class":73},[67,32365,32366],{"class":77}," time\n",[67,32368,32369],{"class":69,"line":149},[67,32370,177],{"emptyLinePlaceholder":176},[67,32372,32373,32375,32378,32380],{"class":69,"line":155},[67,32374,30929],{"class":73},[67,32376,32377],{"class":77}," pandas ",[67,32379,31920],{"class":73},[67,32381,32382],{"class":77}," pd\n",[67,32384,32385,32387],{"class":69,"line":161},[67,32386,30929],{"class":73},[67,32388,30932],{"class":77},[67,32390,32391,32393,32395,32397],{"class":69,"line":167},[67,32392,31274],{"class":73},[67,32394,31952],{"class":77},[67,32396,30929],{"class":73},[67,32398,32399],{"class":77}," Dataset\n",[67,32401,32402,32404,32406,32408],{"class":69,"line":173},[67,32403,31274],{"class":73},[67,32405,31905],{"class":77},[67,32407,30929],{"class":73},[67,32409,31910],{"class":77},[67,32411,32412,32414,32416,32418],{"class":69,"line":180},[67,32413,31274],{"class":73},[67,32415,31935],{"class":77},[67,32417,30929],{"class":73},[67,32419,31940],{"class":77},[67,32421,32422,32424,32426,32428],{"class":69,"line":186},[67,32423,30929],{"class":73},[67,32425,31952],{"class":77},[67,32427,31920],{"class":73},[67,32429,31957],{"class":77},[67,32431,32432,32434,32436,32438],{"class":69,"line":444},[67,32433,30929],{"class":73},[67,32435,31969],{"class":77},[67,32437,31920],{"class":73},[67,32439,31974],{"class":77},[67,32441,32442],{"class":69,"line":2335},[67,32443,32444],{"class":202},"# 导入模型\n",[67,32446,32447,32449,32452,32454],{"class":69,"line":2340},[67,32448,31274],{"class":73},[67,32450,32451],{"class":77}," model ",[67,32453,30929],{"class":73},[67,32455,32456],{"class":77}," LeNet\n",[67,32458,32459,32461,32463,32465],{"class":69,"line":2346},[67,32460,31274],{"class":73},[67,32462,31277],{"class":77},[67,32464,30929],{"class":73},[67,32466,31282],{"class":77},[67,32468,32469],{"class":69,"line":2351},[67,32470,177],{"emptyLinePlaceholder":176},[67,32472,32473],{"class":69,"line":2365},[67,32474,177],{"emptyLinePlaceholder":176},[67,32476,32477],{"class":69,"line":2370},[67,32478,32479],{"class":202},"# 处理训练集与验证集函数--->划分数据集\n",[67,32481,32482,32485,32488],{"class":69,"line":2376},[67,32483,32484],{"class":73},"def",[67,32486,32487],{"class":112}," train_val_data_process",[67,32489,32490],{"class":77},"():\n",[67,32492,32493,32496,32498,32500,32502],{"class":69,"line":2397},[67,32494,32495],{"class":77},"    train_data",[67,32497,909],{"class":73},[67,32499,31992],{"class":77},[67,32501,32000],{"class":84},[67,32503,32003],{"class":77},[67,32505,32506,32509,32511,32513],{"class":69,"line":2402},[67,32507,32508],{"class":5935},"                            train",[67,32510,909],{"class":73},[67,32512,32013],{"class":208},[67,32514,32003],{"class":77},[67,32516,32517,32520,32522,32524,32526,32528,32530],{"class":69,"line":2416},[67,32518,32519],{"class":5935},"                            transform",[67,32521,909],{"class":73},[67,32523,32030],{"class":77},[67,32525,32033],{"class":5935},[67,32527,909],{"class":73},[67,32529,1757],{"class":208},[67,32531,32041],{"class":77},[67,32533,32534,32537,32539,32541],{"class":69,"line":2421},[67,32535,32536],{"class":5935},"                            download",[67,32538,909],{"class":73},[67,32540,32013],{"class":208},[67,32542,870],{"class":77},[67,32544,32545,32548,32550,32553,32556,32558,32561,32563,32565,32568,32570,32572,32575,32577,32579],{"class":69,"line":2450},[67,32546,32547],{"class":77},"    train_data,val_data",[67,32549,909],{"class":73},[67,32551,32552],{"class":77},"Data.random_split(train_data,[",[67,32554,32555],{"class":208},"round",[67,32557,864],{"class":77},[67,32559,32560],{"class":208},"0.8",[67,32562,1312],{"class":73},[67,32564,8077],{"class":208},[67,32566,32567],{"class":77},"(train_data)),",[67,32569,32555],{"class":208},[67,32571,864],{"class":77},[67,32573,32574],{"class":208},"0.2",[67,32576,1312],{"class":73},[67,32578,8077],{"class":208},[67,32580,32581],{"class":77},"(train_data))])\n",[67,32583,32584,32587,32589,32592,32594,32596],{"class":69,"line":2455},[67,32585,32586],{"class":77},"    train_dataloader ",[67,32588,909],{"class":73},[67,32590,32591],{"class":77}," Data.DataLoader(",[67,32593,32074],{"class":5935},[67,32595,909],{"class":73},[67,32597,32079],{"class":77},[67,32599,32600,32603,32605,32608],{"class":69,"line":2472},[67,32601,32602],{"class":5935},"                                       batch_size",[67,32604,909],{"class":73},[67,32606,32607],{"class":208},"128",[67,32609,32003],{"class":77},[67,32611,32612,32615,32617,32619],{"class":69,"line":2477},[67,32613,32614],{"class":5935},"                                       shuffle",[67,32616,909],{"class":73},[67,32618,32013],{"class":208},[67,32620,32003],{"class":77},[67,32622,32623],{"class":69,"line":2482},[67,32624,32625],{"class":202},"                                       # 规定8个进程\n",[67,32627,32628,32631,32633,32635],{"class":69,"line":2487},[67,32629,32630],{"class":5935},"                                       num_workers",[67,32632,909],{"class":73},[67,32634,1253],{"class":208},[67,32636,870],{"class":77},[67,32638,32639,32642,32644,32646,32648,32650],{"class":69,"line":2501},[67,32640,32641],{"class":77},"    val_dataloader",[67,32643,909],{"class":73},[67,32645,32071],{"class":77},[67,32647,32074],{"class":5935},[67,32649,909],{"class":73},[67,32651,32652],{"class":77},"val_data,\n",[67,32654,32655,32658,32660,32662],{"class":69,"line":2506},[67,32656,32657],{"class":5935},"                                   batch_size",[67,32659,909],{"class":73},[67,32661,32607],{"class":208},[67,32663,32003],{"class":77},[67,32665,32666,32669,32671,32673],{"class":69,"line":3298},[67,32667,32668],{"class":5935},"                                   shuffle",[67,32670,909],{"class":73},[67,32672,32013],{"class":208},[67,32674,32003],{"class":77},[67,32676,32677,32680,32682,32684],{"class":69,"line":3312},[67,32678,32679],{"class":5935},"                                   num_workers",[67,32681,909],{"class":73},[67,32683,1253],{"class":208},[67,32685,870],{"class":77},[67,32687,32688,32690],{"class":69,"line":3320},[67,32689,4810],{"class":73},[67,32691,32692],{"class":77}," train_dataloader,val_dataloader\n",[67,32694,32695],{"class":69,"line":3325},[67,32696,177],{"emptyLinePlaceholder":176},[67,32698,32699],{"class":69,"line":3331},[67,32700,32701],{"class":202},"# 验证是否出错\n",[67,32703,32704],{"class":69,"line":3337},[67,32705,32706],{"class":202},"# train_val_data_process()\n",[67,32708,32709],{"class":69,"line":3342},[67,32710,177],{"emptyLinePlaceholder":176},[67,32712,32713],{"class":69,"line":8667},[67,32714,32715],{"class":202},"# 定义模型训练函数\n",[67,32717,32718,32720,32723],{"class":69,"line":8691},[67,32719,32484],{"class":73},[67,32721,32722],{"class":112}," train_model_process",[67,32724,32725],{"class":77},"(model,train_dataloader,val_dataloader,num_epochs):\n",[67,32727,32728,32730,32732,32734,32736,32738,32740,32742,32745],{"class":69,"line":8696},[67,32729,31774],{"class":77},[67,32731,909],{"class":73},[67,32733,30988],{"class":77},[67,32735,31781],{"class":84},[67,32737,2427],{"class":73},[67,32739,31786],{"class":77},[67,32741,2424],{"class":73},[67,32743,32744],{"class":84}," 'cpu'",[67,32746,870],{"class":77},[67,32748,32749],{"class":69,"line":8702},[67,32750,177],{"emptyLinePlaceholder":176},[67,32752,32753],{"class":69,"line":8729},[67,32754,177],{"emptyLinePlaceholder":176},[67,32756,32757],{"class":69,"line":8734},[67,32758,32759],{"class":202},"    # 定义优化器\n",[67,32761,32762],{"class":69,"line":8740},[67,32763,32764],{"class":202},"    # model.parameters()表示把模型里所有可训练的参数（权重、偏置）传给优化器\n",[67,32766,32767],{"class":69,"line":8752},[67,32768,32769],{"class":202},"    # lr为学习率\n",[67,32771,32772,32775,32777,32780,32783,32785,32788],{"class":69,"line":8764},[67,32773,32774],{"class":77},"    optimizer",[67,32776,909],{"class":73},[67,32778,32779],{"class":77},"torch.optim.Adam(model.parameters(),",[67,32781,32782],{"class":5935},"lr",[67,32784,909],{"class":73},[67,32786,32787],{"class":208},"0.001",[67,32789,870],{"class":77},[67,32791,32792],{"class":69,"line":8776},[67,32793,177],{"emptyLinePlaceholder":176},[67,32795,32796],{"class":69,"line":10435},[67,32797,32798],{"class":202},"    # 定义损失函数使用交叉熵损失函数\n",[67,32800,32801,32804,32806],{"class":69,"line":10459},[67,32802,32803],{"class":77},"    criterion",[67,32805,909],{"class":73},[67,32807,32808],{"class":77},"nn.CrossEntropyLoss()\n",[67,32810,32811],{"class":69,"line":10482},[67,32812,177],{"emptyLinePlaceholder":176},[67,32814,32815],{"class":69,"line":10506},[67,32816,32817],{"class":202},"    # 将模型放到GPU中进行训练\n",[67,32819,32820,32822,32824],{"class":69,"line":10511},[67,32821,31826],{"class":77},[67,32823,909],{"class":73},[67,32825,32826],{"class":77},"model.to(device)\n",[67,32828,32829],{"class":69,"line":10516},[67,32830,32831],{"class":202},"    # 复制当前模型的参数\n",[67,32833,32834],{"class":69,"line":10521},[67,32835,32836],{"class":202},"    # 把model（PyTorch的神经网络）的当前参数（权重 \u002F 偏置等）完整复制一份，放到best_model_wts变量里\n",[67,32838,32839],{"class":69,"line":10530},[67,32840,32841],{"class":202},"    # ，保证这份拷贝不会随着后续训练改变 —— 常用于保存“到目前为止表现最好的模型参数”\n",[67,32843,32844,32847,32849],{"class":69,"line":10535},[67,32845,32846],{"class":77},"    best_model_wts",[67,32848,909],{"class":73},[67,32850,32851],{"class":77},"copy.deepcopy(model.state_dict())\n",[67,32853,32854],{"class":69,"line":10541},[67,32855,177],{"emptyLinePlaceholder":176},[67,32857,32858],{"class":69,"line":10562},[67,32859,177],{"emptyLinePlaceholder":176},[67,32861,32862],{"class":69,"line":10568},[67,32863,32864],{"class":202},"    # 初始化参数\n",[67,32866,32867],{"class":69,"line":10582},[67,32868,32869],{"class":202},"    # 最高准确度\n",[67,32871,32872,32875,32877],{"class":69,"line":10588},[67,32873,32874],{"class":77},"    best_acc",[67,32876,909],{"class":73},[67,32878,32879],{"class":208},"0.0\n",[67,32881,32882],{"class":69,"line":10615},[67,32883,32884],{"class":202},"    # 训练集损失列表\n",[67,32886,32887,32890,32892],{"class":69,"line":10624},[67,32888,32889],{"class":77},"    train_loss_all",[67,32891,909],{"class":73},[67,32893,32894],{"class":77},"[]\n",[67,32896,32897],{"class":69,"line":10630},[67,32898,32899],{"class":202},"    # 验证集函数列表\n",[67,32901,32902,32905,32907],{"class":69,"line":10638},[67,32903,32904],{"class":77},"    val_loss_all",[67,32906,909],{"class":73},[67,32908,32894],{"class":77},[67,32910,32911],{"class":69,"line":10643},[67,32912,32913],{"class":202},"    # 训练集准确度列表\n",[67,32915,32916,32919,32921],{"class":69,"line":17321},[67,32917,32918],{"class":77},"    train_acc_all",[67,32920,909],{"class":73},[67,32922,32894],{"class":77},[67,32924,32925],{"class":69,"line":17327},[67,32926,32927],{"class":202},"    # 验证集准确度列表\n",[67,32929,32930,32933,32935],{"class":69,"line":17350},[67,32931,32932],{"class":77},"    val_acc_all",[67,32934,909],{"class":73},[67,32936,32894],{"class":77},[67,32938,32939],{"class":69,"line":17356},[67,32940,177],{"emptyLinePlaceholder":176},[67,32942,32943],{"class":69,"line":17379},[67,32944,32945],{"class":202},"    # 保存当前时间--->方便看每轮训练的时间\n",[67,32947,32948,32951,32953],{"class":69,"line":17393},[67,32949,32950],{"class":77},"    since",[67,32952,909],{"class":73},[67,32954,32955],{"class":77},"time.time()\n",[67,32957,32958],{"class":69,"line":17413},[67,32959,177],{"emptyLinePlaceholder":176},[67,32961,32962],{"class":69,"line":17419},[67,32963,177],{"emptyLinePlaceholder":176},[67,32965,32966],{"class":69,"line":17430},[67,32967,32968],{"class":202},"    # 准备工作完成--->开始训练模型\n",[67,32970,32971,32973,32976,32978,32981],{"class":69,"line":17453},[67,32972,3921],{"class":73},[67,32974,32975],{"class":77}," epoch ",[67,32977,81],{"class":73},[67,32979,32980],{"class":208}," range",[67,32982,32983],{"class":77},"(num_epochs):\n",[67,32985,32986,32989,32991,32994,32997,32999,33001,33003,33006,33008,33010],{"class":69,"line":17475},[67,32987,32988],{"class":208},"        print",[67,32990,864],{"class":77},[67,32992,32993],{"class":84},"\"Epoch ",[67,32995,32996],{"class":208},"{}",[67,32998,1440],{"class":84},[67,33000,32996],{"class":208},[67,33002,257],{"class":84},[67,33004,33005],{"class":77},".format(epoch,num_epochs",[67,33007,1389],{"class":73},[67,33009,1077],{"class":208},[67,33011,31034],{"class":77},[67,33013,33014,33016,33018,33021,33023,33025],{"class":69,"line":17480},[67,33015,32988],{"class":208},[67,33017,864],{"class":77},[67,33019,33020],{"class":84},"\"-\"",[67,33022,1312],{"class":73},[67,33024,1303],{"class":208},[67,33026,870],{"class":77},[67,33028,33029],{"class":69,"line":17486},[67,33030,177],{"emptyLinePlaceholder":176},[67,33032,33033],{"class":69,"line":17500},[67,33034,33035],{"class":202},"        # 初始化参数\n",[67,33037,33038],{"class":69,"line":17513},[67,33039,33040],{"class":202},"        # 训练集损失函数\n",[67,33042,33043,33046,33048],{"class":69,"line":17518},[67,33044,33045],{"class":77},"        train_loss",[67,33047,909],{"class":73},[67,33049,32879],{"class":208},[67,33051,33052],{"class":69,"line":17532},[67,33053,33054],{"class":202},"        # 训练集准确度\n",[67,33056,33057,33060,33062],{"class":69,"line":17537},[67,33058,33059],{"class":77},"        train_corrects",[67,33061,909],{"class":73},[67,33063,3805],{"class":208},[67,33065,33066],{"class":69,"line":17543},[67,33067,33068],{"class":202},"        # 验证集损失函数\n",[67,33070,33071,33074,33076],{"class":69,"line":17548},[67,33072,33073],{"class":77},"        val_loss",[67,33075,909],{"class":73},[67,33077,32879],{"class":208},[67,33079,33080],{"class":69,"line":17562},[67,33081,33082],{"class":202},"        # 验证集准确度\n",[67,33084,33085,33088,33090],{"class":69,"line":17567},[67,33086,33087],{"class":77},"        val_corrects",[67,33089,909],{"class":73},[67,33091,3805],{"class":208},[67,33093,33094],{"class":69,"line":17572},[67,33095,33096],{"class":202},"        # 训练集样本数量\n",[67,33098,33099,33102,33104],{"class":69,"line":17586},[67,33100,33101],{"class":77},"        train_num",[67,33103,909],{"class":73},[67,33105,3805],{"class":208},[67,33107,33108],{"class":69,"line":17598},[67,33109,33110],{"class":202},"        # 验证集样本数量\n",[67,33112,33113,33116,33118],{"class":69,"line":17603},[67,33114,33115],{"class":77},"        val_num",[67,33117,909],{"class":73},[67,33119,3805],{"class":208},[67,33121,33122],{"class":69,"line":17616},[67,33123,33124],{"class":202},"        # 将数据放到设备,并开始训练\n",[67,33126,33127,33129,33131,33133,33135],{"class":69,"line":17621},[67,33128,4123],{"class":73},[67,33130,32138],{"class":77},[67,33132,81],{"class":73},[67,33134,32143],{"class":208},[67,33136,33137],{"class":77},"(train_dataloader):\n",[67,33139,33140],{"class":69,"line":17626},[67,33141,33142],{"class":202},"            # 将特征放入到训练设备\n",[67,33144,33145,33148,33150],{"class":69,"line":17631},[67,33146,33147],{"class":77},"            b_x",[67,33149,909],{"class":73},[67,33151,33152],{"class":77},"b_x.to(device)\n",[67,33154,33155],{"class":69,"line":17644},[67,33156,33157],{"class":202},"            # 将标签放入到训练设备当中\n",[67,33159,33160,33163,33165],{"class":69,"line":17649},[67,33161,33162],{"class":77},"            b_y",[67,33164,909],{"class":73},[67,33166,33167],{"class":77},"b_y.to(device)\n",[67,33169,33171],{"class":69,"line":33170},98,[67,33172,33173],{"class":202},"            # 设置模型为训练模式\n",[67,33175,33177],{"class":69,"line":33176},99,[67,33178,33179],{"class":77},"            model.train()\n",[67,33181,33183],{"class":69,"line":33182},100,[67,33184,33185],{"class":202},"            # 将数据放到模型当中,开始前向传播\n",[67,33187,33189],{"class":69,"line":33188},101,[67,33190,33191],{"class":202},"            # 前向传播过程,输入一个batch,输出为一个batch中对应的预测\n",[67,33193,33195,33198,33200],{"class":69,"line":33194},102,[67,33196,33197],{"class":77},"            output",[67,33199,909],{"class":73},[67,33201,33202],{"class":77},"model(b_x)\n",[67,33204,33206],{"class":69,"line":33205},103,[67,33207,33208],{"class":202},"            # 从网络输出 output 的每一行里，找出数值最大的下标（类别），作为模型预测的标签\n",[67,33210,33212,33215,33217,33220,33223,33225,33227],{"class":69,"line":33211},104,[67,33213,33214],{"class":77},"            pre_lab",[67,33216,909],{"class":73},[67,33218,33219],{"class":77},"torch.argmax(output,",[67,33221,33222],{"class":5935},"dim",[67,33224,909],{"class":73},[67,33226,1077],{"class":208},[67,33228,870],{"class":77},[67,33230,33232],{"class":69,"line":33231},105,[67,33233,33234],{"class":202},"            # 计算每一个batch的损失函数\n",[67,33236,33238,33241,33243],{"class":69,"line":33237},106,[67,33239,33240],{"class":77},"            loss",[67,33242,909],{"class":73},[67,33244,33245],{"class":77},"criterion(output,b_y)\n",[67,33247,33249],{"class":69,"line":33248},107,[67,33250,33251],{"class":202},"            # 将梯度初始化为0\n",[67,33253,33255],{"class":69,"line":33254},108,[67,33256,33257],{"class":77},"            optimizer.zero_grad()\n",[67,33259,33261],{"class":69,"line":33260},109,[67,33262,33263],{"class":202},"            # 梯度置为0后再进行反向传播\n",[67,33265,33267],{"class":69,"line":33266},110,[67,33268,33269],{"class":77},"            loss.backward()\n",[67,33271,33273],{"class":69,"line":33272},111,[67,33274,33275],{"class":202},"            # 根据网络反向传播的梯度信息来更新网络的参数，以起到降低loss函数计算的作用\n",[67,33277,33279],{"class":69,"line":33278},112,[67,33280,33281],{"class":77},"            optimizer.step()\n",[67,33283,33285],{"class":69,"line":33284},113,[67,33286,33287],{"class":202},"            # loss.item()指的是batch的平均损失\n",[67,33289,33291,33294,33296,33299,33301,33304,33306],{"class":69,"line":33290},114,[67,33292,33293],{"class":77},"            train_loss",[67,33295,10196],{"class":73},[67,33297,33298],{"class":77},"loss.item()",[67,33300,1312],{"class":73},[67,33302,33303],{"class":77},"b_x.size(",[67,33305,1051],{"class":208},[67,33307,870],{"class":77},[67,33309,33311],{"class":69,"line":33310},115,[67,33312,33313],{"class":202},"            # 计算每个批次中正确预测的数量\n",[67,33315,33317,33320,33322,33325,33327],{"class":69,"line":33316},116,[67,33318,33319],{"class":77},"            train_corrects",[67,33321,10196],{"class":73},[67,33323,33324],{"class":77},"torch.sum(pre_lab",[67,33326,3670],{"class":73},[67,33328,33329],{"class":77},"b_y.data)\n",[67,33331,33333],{"class":69,"line":33332},117,[67,33334,33335],{"class":202},"            # 计算目前为止一共处理了多少样本\n",[67,33337,33339,33342,33344,33346,33348],{"class":69,"line":33338},118,[67,33340,33341],{"class":77},"            train_num",[67,33343,10196],{"class":73},[67,33345,33303],{"class":77},[67,33347,1051],{"class":208},[67,33349,870],{"class":77},[67,33351,33353],{"class":69,"line":33352},119,[67,33354,33355],{"class":202},"        # 验证数据\n",[67,33357,33359,33361,33364,33366,33368],{"class":69,"line":33358},120,[67,33360,4123],{"class":73},[67,33362,33363],{"class":77}," step ,(b_x,b_y) ",[67,33365,81],{"class":73},[67,33367,32143],{"class":208},[67,33369,33370],{"class":77},"(val_dataloader):\n",[67,33372,33374],{"class":69,"line":33373},121,[67,33375,33376],{"class":202},"            # 将特征放到验证设备当中\n",[67,33378,33380,33382,33384],{"class":69,"line":33379},122,[67,33381,33147],{"class":77},[67,33383,909],{"class":73},[67,33385,33152],{"class":77},[67,33387,33389],{"class":69,"line":33388},123,[67,33390,33391],{"class":202},"            # 将标签放到放到训练设备当中\n",[67,33393,33395,33397,33399],{"class":69,"line":33394},124,[67,33396,33162],{"class":77},[67,33398,909],{"class":73},[67,33400,33167],{"class":77},[67,33402,33404],{"class":69,"line":33403},125,[67,33405,33406],{"class":202},"            # 开启验证模式，设置模型为评估模式\n",[67,33408,33410],{"class":69,"line":33409},126,[67,33411,33412],{"class":77},"            model.eval()\n",[67,33414,33416,33419],{"class":69,"line":33415},127,[67,33417,33418],{"class":73},"            with",[67,33420,33421],{"class":77}," torch.no_grad():\n",[67,33423,33425],{"class":69,"line":33424},128,[67,33426,33427],{"class":202},"                # 前向传播过程，输入一个batch,输出为一个batch中对应的预测\n",[67,33429,33431,33434,33436],{"class":69,"line":33430},129,[67,33432,33433],{"class":77},"                output ",[67,33435,909],{"class":73},[67,33437,33438],{"class":77}," model(b_x)\n",[67,33440,33442],{"class":69,"line":33441},130,[67,33443,33444],{"class":202},"                # 查找每一行中最大值对应的下标\n",[67,33446,33448,33451,33453,33456,33458,33460,33462],{"class":69,"line":33447},131,[67,33449,33450],{"class":77},"                pre_lab ",[67,33452,909],{"class":73},[67,33454,33455],{"class":77}," torch.argmax(output, ",[67,33457,33222],{"class":5935},[67,33459,909],{"class":73},[67,33461,1077],{"class":208},[67,33463,870],{"class":77},[67,33465,33467],{"class":69,"line":33466},132,[67,33468,33469],{"class":202},"                # 计算验证集上的当前 batch 损失\n",[67,33471,33473,33476,33478],{"class":69,"line":33472},133,[67,33474,33475],{"class":77},"                val_batch_loss ",[67,33477,909],{"class":73},[67,33479,33480],{"class":77}," criterion(output, b_y)\n",[67,33482,33484],{"class":69,"line":33483},134,[67,33485,33486],{"class":202},"                # 对损失函数进行累加（按样本数加权）\n",[67,33488,33490,33493,33495,33498,33500,33503,33505],{"class":69,"line":33489},135,[67,33491,33492],{"class":77},"                val_loss ",[67,33494,10196],{"class":73},[67,33496,33497],{"class":77}," val_batch_loss.item() ",[67,33499,1312],{"class":73},[67,33501,33502],{"class":77}," b_x.size(",[67,33504,1051],{"class":208},[67,33506,870],{"class":77},[67,33508,33510,33513,33515,33518,33520],{"class":69,"line":33509},136,[67,33511,33512],{"class":77},"                val_corrects ",[67,33514,10196],{"class":73},[67,33516,33517],{"class":77}," torch.sum(pre_lab ",[67,33519,3670],{"class":73},[67,33521,33522],{"class":77}," b_y.data)\n",[67,33524,33526],{"class":69,"line":33525},137,[67,33527,33528],{"class":202},"                # 当前用于验证的样本数量\n",[67,33530,33532,33535,33537,33539,33541],{"class":69,"line":33531},138,[67,33533,33534],{"class":77},"            val_num ",[67,33536,10196],{"class":73},[67,33538,33502],{"class":77},[67,33540,1051],{"class":208},[67,33542,870],{"class":77},[67,33544,33546],{"class":69,"line":33545},139,[67,33547,33548],{"class":202},"        # 计算并保存每一次迭代的loss值和准确率\n",[67,33550,33552],{"class":69,"line":33551},140,[67,33553,33554],{"class":202},"        # 计算并保存训练集的loss值\n",[67,33556,33558,33561,33563],{"class":69,"line":33557},141,[67,33559,33560],{"class":77},"        train_loss_all.append(train_loss",[67,33562,1440],{"class":73},[67,33564,33565],{"class":77},"train_num)\n",[67,33567,33569],{"class":69,"line":33568},142,[67,33570,33571],{"class":202},"        # 取双精度\n",[67,33573,33575],{"class":69,"line":33574},143,[67,33576,33577],{"class":202},"        # 计算并保存训练集的准确率\n",[67,33579,33581,33584,33586],{"class":69,"line":33580},144,[67,33582,33583],{"class":77},"        train_acc_all.append(train_corrects.double().item()",[67,33585,1440],{"class":73},[67,33587,33565],{"class":77},[67,33589,33591],{"class":69,"line":33590},145,[67,33592,33593],{"class":202},"        # 计算并保存验证集的loss值\n",[67,33595,33597,33600,33602],{"class":69,"line":33596},146,[67,33598,33599],{"class":77},"        val_loss_all.append(val_loss",[67,33601,1440],{"class":73},[67,33603,33604],{"class":77},"val_num)\n",[67,33606,33608],{"class":69,"line":33607},147,[67,33609,33610],{"class":202},"        # 计算并保存验证集的准确率\n",[67,33612,33614,33617,33619],{"class":69,"line":33613},148,[67,33615,33616],{"class":77},"        val_acc_all.append(val_corrects.double().item()",[67,33618,1440],{"class":73},[67,33620,33604],{"class":77},[67,33622,33624],{"class":69,"line":33623},149,[67,33625,177],{"emptyLinePlaceholder":176},[67,33627,33629],{"class":69,"line":33628},150,[67,33630,33631],{"class":202},"        # 打印训练一轮的loss值和准确率\n",[67,33633,33635,33637,33639,33641,33643,33646,33648,33651,33653,33656,33658,33660,33662,33664,33667,33669,33671,33674,33676,33678],{"class":69,"line":33634},151,[67,33636,32988],{"class":208},[67,33638,864],{"class":77},[67,33640,4312],{"class":84},[67,33642,32996],{"class":208},[67,33644,33645],{"class":84},"train loss:",[67,33647,1752],{"class":208},[67,33649,33650],{"class":73},":.4f",[67,33652,1802],{"class":208},[67,33654,33655],{"class":84}," train acc:",[67,33657,1752],{"class":208},[67,33659,33650],{"class":73},[67,33661,1802],{"class":208},[67,33663,4312],{"class":84},[67,33665,33666],{"class":77},".format(epoch,train_loss_all[",[67,33668,1389],{"class":73},[67,33670,1077],{"class":208},[67,33672,33673],{"class":77},"],train_acc_all[",[67,33675,1389],{"class":73},[67,33677,1077],{"class":208},[67,33679,33680],{"class":77},"]))\n",[67,33682,33684,33686,33688,33690,33692,33695,33697,33699,33701,33704,33706,33708,33710,33712,33715,33717,33719,33722,33724,33726],{"class":69,"line":33683},152,[67,33685,32988],{"class":208},[67,33687,864],{"class":77},[67,33689,4312],{"class":84},[67,33691,32996],{"class":208},[67,33693,33694],{"class":84},"val loss:",[67,33696,1752],{"class":208},[67,33698,33650],{"class":73},[67,33700,1802],{"class":208},[67,33702,33703],{"class":84}," val acc:",[67,33705,1752],{"class":208},[67,33707,33650],{"class":73},[67,33709,1802],{"class":208},[67,33711,4312],{"class":84},[67,33713,33714],{"class":77},".format(epoch,val_loss_all[",[67,33716,1389],{"class":73},[67,33718,1077],{"class":208},[67,33720,33721],{"class":77},"],val_acc_all[",[67,33723,1389],{"class":73},[67,33725,1077],{"class":208},[67,33727,33680],{"class":77},[67,33729,33731],{"class":69,"line":33730},153,[67,33732,177],{"emptyLinePlaceholder":176},[67,33734,33736],{"class":69,"line":33735},154,[67,33737,33738],{"class":202},"        # 判断准确度--->保存最优模型\n",[67,33740,33742,33744,33747,33749,33751,33753,33755],{"class":69,"line":33741},155,[67,33743,3218],{"class":73},[67,33745,33746],{"class":77}," val_acc_all[",[67,33748,1389],{"class":73},[67,33750,1077],{"class":208},[67,33752,1796],{"class":77},[67,33754,1816],{"class":73},[67,33756,33757],{"class":77},"best_acc:\n",[67,33759,33761],{"class":69,"line":33760},156,[67,33762,33763],{"class":202},"            # 保存当前模型准确度\n",[67,33765,33767,33770,33772,33774,33777,33779,33781],{"class":69,"line":33766},157,[67,33768,33769],{"class":77},"            best_acc:",[67,33771,903],{"class":208},[67,33773,909],{"class":73},[67,33775,33776],{"class":77},"val_acc_all[",[67,33778,1389],{"class":73},[67,33780,1077],{"class":208},[67,33782,33783],{"class":77},"]\n",[67,33785,33787],{"class":69,"line":33786},158,[67,33788,33789],{"class":202},"            # 保存当前的准确度\n",[67,33791,33793],{"class":69,"line":33792},159,[67,33794,33795],{"class":202},"            # model.state_dict()是当前模型的所有参数（权重和偏置）\n",[67,33797,33799,33802,33804],{"class":69,"line":33798},160,[67,33800,33801],{"class":77},"            best_model_wts",[67,33803,909],{"class":73},[67,33805,32851],{"class":77},[67,33807,33809],{"class":69,"line":33808},161,[67,33810,177],{"emptyLinePlaceholder":176},[67,33812,33814],{"class":69,"line":33813},162,[67,33815,33816],{"class":202},"        # 计算耗时\n",[67,33818,33820,33823,33825,33828,33830],{"class":69,"line":33819},163,[67,33821,33822],{"class":77},"        time_use",[67,33824,909],{"class":73},[67,33826,33827],{"class":77},"time.time()",[67,33829,1389],{"class":73},[67,33831,33832],{"class":77},"since\n",[67,33834,33836,33838,33840,33843,33845,33848,33850,33852,33854,33856,33858,33861,33864,33867,33869,33872,33874,33876],{"class":69,"line":33835},164,[67,33837,32988],{"class":208},[67,33839,864],{"class":77},[67,33841,33842],{"class":84},"'训练和验证耗费的时间",[67,33844,1752],{"class":208},[67,33846,33847],{"class":73},":.0f",[67,33849,1802],{"class":208},[67,33851,1401],{"class":84},[67,33853,1752],{"class":208},[67,33855,33847],{"class":73},[67,33857,1802],{"class":208},[67,33859,33860],{"class":84},"s'",[67,33862,33863],{"class":77},".format(time_use",[67,33865,33866],{"class":73},"\u002F\u002F",[67,33868,1763],{"class":208},[67,33870,33871],{"class":77},",time_use",[67,33873,1186],{"class":73},[67,33875,1763],{"class":208},[67,33877,31034],{"class":77},[67,33879,33881],{"class":69,"line":33880},165,[67,33882,33883],{"class":202},"    # 选择最优参数\n",[67,33885,33887],{"class":69,"line":33886},166,[67,33888,33889],{"class":202},"    # 加载最高准确率下的模型参数\n",[67,33891,33893],{"class":69,"line":33892},167,[67,33894,33895],{"class":202},"    # model.load_state_dict(best_model_wts)\n",[67,33897,33899,33902,33905],{"class":69,"line":33898},168,[67,33900,33901],{"class":77},"    torch.save(model.state_dict(best_model_wts), ",[67,33903,33904],{"class":84},"'.\u002Fbest_model.pth'",[67,33906,870],{"class":77},[67,33908,33910],{"class":69,"line":33909},169,[67,33911,33912],{"class":202},"    # 或者写成\n",[67,33914,33916],{"class":69,"line":33915},170,[67,33917,33918],{"class":202},"    # torch.save(best_model_wts,'.\u002Fbest_model.pth')\n",[67,33920,33922],{"class":69,"line":33921},171,[67,33923,33924],{"class":202},"    # 保存训练过程,可以使用pandas来进行保存,里边有个DataFrame()可以像列表一样保存数据\n",[67,33926,33928,33931,33933,33936,33939,33941],{"class":69,"line":33927},172,[67,33929,33930],{"class":77},"    train_process",[67,33932,909],{"class":73},[67,33934,33935],{"class":77},"pd.DataFrame(",[67,33937,33938],{"class":5935},"data",[67,33940,909],{"class":73},[67,33942,2269],{"class":77},[67,33944,33946,33949,33951,33954],{"class":69,"line":33945},173,[67,33947,33948],{"class":84},"        \"epoch\"",[67,33950,1715],{"class":77},[67,33952,33953],{"class":208},"range",[67,33955,33956],{"class":77},"(num_epochs),\n",[67,33958,33960,33963],{"class":69,"line":33959},174,[67,33961,33962],{"class":84},"        \"train_loss_all\"",[67,33964,33965],{"class":77},":train_loss_all,\n",[67,33967,33969,33972],{"class":69,"line":33968},175,[67,33970,33971],{"class":84},"        \"val_loss_all\"",[67,33973,33974],{"class":77},":val_loss_all,\n",[67,33976,33978,33981],{"class":69,"line":33977},176,[67,33979,33980],{"class":84},"        \"train_acc_all\"",[67,33982,33983],{"class":77},":train_acc_all,\n",[67,33985,33987,33990],{"class":69,"line":33986},177,[67,33988,33989],{"class":84},"        \"val_acc_all\"",[67,33991,33992],{"class":77},":val_acc_all\n",[67,33994,33996],{"class":69,"line":33995},178,[67,33997,33998],{"class":77},"    })\n",[67,34000,34002],{"class":69,"line":34001},179,[67,34003,34004],{"class":202},"    # 返回训练保存的过程\n",[67,34006,34008,34010],{"class":69,"line":34007},180,[67,34009,4810],{"class":73},[67,34011,34012],{"class":77}," train_process\n",[67,34014,34016],{"class":69,"line":34015},181,[67,34017,177],{"emptyLinePlaceholder":176},[67,34019,34021],{"class":69,"line":34020},182,[67,34022,34023],{"class":202},"# 将loss值和精度按照图片的形式展示出来\n",[67,34025,34027,34029,34032],{"class":69,"line":34026},183,[67,34028,32484],{"class":73},[67,34030,34031],{"class":112}," matplot_acc_loss",[67,34033,34034],{"class":77},"(train_process):\n",[67,34036,34038],{"class":69,"line":34037},184,[67,34039,34040],{"class":202},"    # 设置图的大小\n",[67,34042,34044,34047,34049,34051,34053,34055,34057,34059],{"class":69,"line":34043},185,[67,34045,34046],{"class":77},"    plt.figure(",[67,34048,32230],{"class":5935},[67,34050,909],{"class":73},[67,34052,864],{"class":77},[67,34054,1355],{"class":208},[67,34056,1236],{"class":77},[67,34058,1151],{"class":208},[67,34060,31034],{"class":77},[67,34062,34064],{"class":69,"line":34063},186,[67,34065,34066],{"class":202},"    # 设置图中有几张图\n",[67,34068,34070],{"class":69,"line":34069},187,[67,34071,34072],{"class":202},"    # 把当前画布分成1行2列的子图,当前位置是 第 1 个子图\n",[67,34074,34076],{"class":69,"line":34075},188,[67,34077,34078],{"class":202},"    # ①loss图\n",[67,34080,34082,34084,34086,34088,34090,34092,34094],{"class":69,"line":34081},189,[67,34083,32264],{"class":77},[67,34085,1077],{"class":208},[67,34087,1236],{"class":77},[67,34089,939],{"class":208},[67,34091,1236],{"class":77},[67,34093,1077],{"class":208},[67,34095,870],{"class":77},[67,34097,34099],{"class":69,"line":34098},190,[67,34100,34101],{"class":202},"    # 补充:\n",[67,34103,34105],{"class":69,"line":34104},191,[67,34106,34107],{"class":202},"    # plt.subplot(nrows, ncols, index)\n",[67,34109,34111],{"class":69,"line":34110},192,[67,34112,34113],{"class":202},"    # nrows：行数\n",[67,34115,34117],{"class":69,"line":34116},193,[67,34118,34119],{"class":202},"    # ncols：列数\n",[67,34121,34123],{"class":69,"line":34122},194,[67,34124,34125],{"class":202},"    # index：目前选中第几个子图（从1开始）\n",[67,34127,34129,34132,34135,34138,34141,34143,34146,34148,34151],{"class":69,"line":34128},195,[67,34130,34131],{"class":77},"    plt.plot(train_process[",[67,34133,34134],{"class":84},"\"epoch\"",[67,34136,34137],{"class":77},"],train_process.train_loss_all,",[67,34139,34140],{"class":84},"'ro-'",[67,34142,1236],{"class":77},[67,34144,34145],{"class":5935},"label",[67,34147,909],{"class":73},[67,34149,34150],{"class":84},"'train loss'",[67,34152,870],{"class":77},[67,34154,34156,34158,34160,34163,34166,34168,34170,34172,34175],{"class":69,"line":34155},196,[67,34157,34131],{"class":77},[67,34159,34134],{"class":84},[67,34161,34162],{"class":77},"],train_process.val_loss_all,",[67,34164,34165],{"class":84},"'bs--'",[67,34167,1236],{"class":77},[67,34169,34145],{"class":5935},[67,34171,909],{"class":73},[67,34173,34174],{"class":84},"'val loss'",[67,34176,870],{"class":77},[67,34178,34180],{"class":69,"line":34179},197,[67,34181,34182],{"class":202},"    # 添加一个图例\n",[67,34184,34186],{"class":69,"line":34185},198,[67,34187,34188],{"class":77},"    plt.legend()\n",[67,34190,34192],{"class":69,"line":34191},199,[67,34193,34194],{"class":202},"    # 给轴添加标签\n",[67,34196,34198,34201,34204],{"class":69,"line":34197},200,[67,34199,34200],{"class":77},"    plt.xlabel(",[67,34202,34203],{"class":84},"'epoch'",[67,34205,870],{"class":77},[67,34207,34209,34212,34215],{"class":69,"line":34208},201,[67,34210,34211],{"class":77},"    plt.ylabel(",[67,34213,34214],{"class":84},"'loss'",[67,34216,870],{"class":77},[67,34218,34220],{"class":69,"line":34219},202,[67,34221,34222],{"class":202},"    # ②准确度图\n",[67,34224,34226,34228,34230,34232,34234,34236,34238],{"class":69,"line":34225},203,[67,34227,32264],{"class":77},[67,34229,1077],{"class":208},[67,34231,1236],{"class":77},[67,34233,939],{"class":208},[67,34235,1236],{"class":77},[67,34237,939],{"class":208},[67,34239,870],{"class":77},[67,34241,34243,34245,34247,34250,34252,34254,34256,34258,34261],{"class":69,"line":34242},204,[67,34244,34131],{"class":77},[67,34246,34134],{"class":84},[67,34248,34249],{"class":77},"],train_process.train_acc_all,",[67,34251,34140],{"class":84},[67,34253,1236],{"class":77},[67,34255,34145],{"class":5935},[67,34257,909],{"class":73},[67,34259,34260],{"class":84},"'train acc'",[67,34262,870],{"class":77},[67,34264,34266,34268,34270,34273,34275,34277,34279,34281,34284],{"class":69,"line":34265},205,[67,34267,34131],{"class":77},[67,34269,34134],{"class":84},[67,34271,34272],{"class":77},"],train_process.val_acc_all,",[67,34274,34165],{"class":84},[67,34276,1236],{"class":77},[67,34278,34145],{"class":5935},[67,34280,909],{"class":73},[67,34282,34283],{"class":84},"'val acc'",[67,34285,870],{"class":77},[67,34287,34289],{"class":69,"line":34288},206,[67,34290,34291],{"class":202},"    # 添加图例\n",[67,34293,34295],{"class":69,"line":34294},207,[67,34296,34188],{"class":77},[67,34298,34300,34302,34304],{"class":69,"line":34299},208,[67,34301,34200],{"class":77},[67,34303,34134],{"class":84},[67,34305,870],{"class":77},[67,34307,34309,34311,34314],{"class":69,"line":34308},209,[67,34310,34211],{"class":77},[67,34312,34313],{"class":84},"\"acc\"",[67,34315,870],{"class":77},[67,34317,34319],{"class":69,"line":34318},210,[67,34320,34321],{"class":77},"    plt.show()\n",[67,34323,34325],{"class":69,"line":34324},211,[67,34326,177],{"emptyLinePlaceholder":176},[67,34328,34330],{"class":69,"line":34329},212,[67,34331,34332],{"class":202},"# 正式开始训练:\n",[67,34334,34336,34338,34340,34342,34344],{"class":69,"line":34335},213,[67,34337,2254],{"class":73},[67,34339,31757],{"class":208},[67,34341,3670],{"class":73},[67,34343,31762],{"class":84},[67,34345,4459],{"class":77},[67,34347,34349],{"class":69,"line":34348},214,[67,34350,34351],{"class":202},"    # 将模型实例化\n",[67,34353,34355,34358,34360],{"class":69,"line":34354},215,[67,34356,34357],{"class":77},"    LeNet",[67,34359,909],{"class":73},[67,34361,34362],{"class":77},"LeNet()\n",[67,34364,34366,34369,34371],{"class":69,"line":34365},216,[67,34367,34368],{"class":77},"    train_dataloader,val_dataloader",[67,34370,909],{"class":73},[67,34372,34373],{"class":77},"train_val_data_process()\n",[67,34375,34377,34379,34381,34384,34387,34389,34391],{"class":69,"line":34376},217,[67,34378,33930],{"class":77},[67,34380,909],{"class":73},[67,34382,34383],{"class":77},"train_model_process(LeNet,train_dataloader,val_dataloader,",[67,34385,34386],{"class":5935},"num_epochs",[67,34388,909],{"class":73},[67,34390,1556],{"class":208},[67,34392,870],{"class":77},[67,34394,34396],{"class":69,"line":34395},218,[67,34397,34398],{"class":77},"    matplot_acc_loss(train_process)\n",[19,34400,34401],{},"画图的补充点学习：",[19,34403,34404],{},[725,34405],{"alt":62,"src":34406},"\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",[815,34408,34409],{"start":149},[818,34410,34411],{},"测试",[57,34413,34415],{"className":30915,"code":34414,"language":30917,"meta":62,"style":62},"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",[64,34416,34417,34423,34433,34445,34455,34460,34470,34480,34484,34489,34498,34515,34527,34544,34555,34571,34576,34587,34598,34609,34616,34620,34625,34635,34640,34657,34665,34669,34674,34683,34692,34696,34701,34706,34711,34718,34723,34735,34745,34755,34760,34764,34769,34778,34783,34799,34804,34809,34814,34828,34833,34847,34851,34856,34871,34876,34888,34892,34897,34909,34914,34922,34927,34932,34942,34947,34956,34961,34966,34970,34975,34980,34996,35004,35009,35014,35073,35079,35084,35095,35103,35111,35115,35120,35124,35129,35137,35142,35158,35163,35173,35183],{"__ignoreMap":62},[67,34418,34419,34421],{"class":69,"line":70},[67,34420,30929],{"class":73},[67,34422,30932],{"class":77},[67,34424,34425,34427,34429,34431],{"class":69,"line":143},[67,34426,30929],{"class":73},[67,34428,31952],{"class":77},[67,34430,31920],{"class":73},[67,34432,31957],{"class":77},[67,34434,34435,34437,34440,34442],{"class":69,"line":149},[67,34436,31274],{"class":73},[67,34438,34439],{"class":77}," jupyter_client.consoleapp ",[67,34441,30929],{"class":73},[67,34443,34444],{"class":77}," classes\n",[67,34446,34447,34449,34451,34453],{"class":69,"line":155},[67,34448,31274],{"class":73},[67,34450,31935],{"class":77},[67,34452,30929],{"class":73},[67,34454,31940],{"class":77},[67,34456,34457],{"class":69,"line":161},[67,34458,34459],{"class":202},"# 导入数据集\n",[67,34461,34462,34464,34466,34468],{"class":69,"line":167},[67,34463,31274],{"class":73},[67,34465,31905],{"class":77},[67,34467,30929],{"class":73},[67,34469,31910],{"class":77},[67,34471,34472,34474,34476,34478],{"class":69,"line":173},[67,34473,31274],{"class":73},[67,34475,32451],{"class":77},[67,34477,30929],{"class":73},[67,34479,32456],{"class":77},[67,34481,34482],{"class":69,"line":180},[67,34483,177],{"emptyLinePlaceholder":176},[67,34485,34486],{"class":69,"line":186},[67,34487,34488],{"class":202},"# 测试数据处理\n",[67,34490,34491,34493,34496],{"class":69,"line":444},[67,34492,32484],{"class":73},[67,34494,34495],{"class":112}," test_data_process",[67,34497,32490],{"class":77},[67,34499,34500,34503,34505,34507,34509,34511,34513],{"class":69,"line":2335},[67,34501,34502],{"class":77},"    test_data",[67,34504,909],{"class":73},[67,34506,31992],{"class":77},[67,34508,31995],{"class":5935},[67,34510,909],{"class":73},[67,34512,32000],{"class":84},[67,34514,32003],{"class":77},[67,34516,34517,34520,34522,34525],{"class":69,"line":2340},[67,34518,34519],{"class":5935},"                           train",[67,34521,909],{"class":73},[67,34523,34524],{"class":208},"False",[67,34526,32003],{"class":77},[67,34528,34529,34532,34534,34536,34538,34540,34542],{"class":69,"line":2346},[67,34530,34531],{"class":5935},"                           transform",[67,34533,909],{"class":73},[67,34535,32030],{"class":77},[67,34537,32033],{"class":5935},[67,34539,909],{"class":73},[67,34541,1757],{"class":208},[67,34543,32041],{"class":77},[67,34545,34546,34549,34551,34553],{"class":69,"line":2351},[67,34547,34548],{"class":5935},"                           download",[67,34550,909],{"class":73},[67,34552,32013],{"class":208},[67,34554,870],{"class":77},[67,34556,34557,34560,34562,34564,34566,34568],{"class":69,"line":2365},[67,34558,34559],{"class":77},"    test_dataloader",[67,34561,909],{"class":73},[67,34563,32071],{"class":77},[67,34565,32074],{"class":5935},[67,34567,909],{"class":73},[67,34569,34570],{"class":77},"test_data,\n",[67,34572,34573],{"class":69,"line":2370},[67,34574,34575],{"class":202},"                                    # 这里是一张一张进行测试\n",[67,34577,34578,34581,34583,34585],{"class":69,"line":2376},[67,34579,34580],{"class":5935},"                                    batch_size",[67,34582,909],{"class":73},[67,34584,1077],{"class":208},[67,34586,32003],{"class":77},[67,34588,34589,34592,34594,34596],{"class":69,"line":2397},[67,34590,34591],{"class":5935},"                                    shuffle",[67,34593,909],{"class":73},[67,34595,32013],{"class":208},[67,34597,32003],{"class":77},[67,34599,34600,34603,34605,34607],{"class":69,"line":2402},[67,34601,34602],{"class":5935},"                                    num_workers",[67,34604,909],{"class":73},[67,34606,1051],{"class":208},[67,34608,870],{"class":77},[67,34610,34611,34613],{"class":69,"line":2416},[67,34612,4810],{"class":73},[67,34614,34615],{"class":77}," test_dataloader\n",[67,34617,34618],{"class":69,"line":2421},[67,34619,177],{"emptyLinePlaceholder":176},[67,34621,34622],{"class":69,"line":2450},[67,34623,34624],{"class":202},"# 定义模型测试函数\n",[67,34626,34627,34629,34632],{"class":69,"line":2455},[67,34628,32484],{"class":73},[67,34630,34631],{"class":112}," test_model_process",[67,34633,34634],{"class":77},"(model,test_dataloader):\n",[67,34636,34637],{"class":69,"line":2472},[67,34638,34639],{"class":202},"    # 将模型放到设备当中，先进行判断\n",[67,34641,34642,34644,34646,34648,34650,34652,34654],{"class":69,"line":2477},[67,34643,31774],{"class":77},[67,34645,909],{"class":73},[67,34647,31781],{"class":84},[67,34649,2427],{"class":73},[67,34651,31786],{"class":77},[67,34653,2424],{"class":73},[67,34655,34656],{"class":84}," \"cpu\"\n",[67,34658,34659,34661,34663],{"class":69,"line":2482},[67,34660,31826],{"class":77},[67,34662,909],{"class":73},[67,34664,32826],{"class":77},[67,34666,34667],{"class":69,"line":2487},[67,34668,177],{"emptyLinePlaceholder":176},[67,34670,34671],{"class":69,"line":2501},[67,34672,34673],{"class":202},"    # 设置初始化参数\n",[67,34675,34676,34679,34681],{"class":69,"line":2506},[67,34677,34678],{"class":77},"    test_corrects",[67,34680,909],{"class":73},[67,34682,32879],{"class":208},[67,34684,34685,34688,34690],{"class":69,"line":3298},[67,34686,34687],{"class":77},"    test_num",[67,34689,909],{"class":73},[67,34691,3805],{"class":208},[67,34693,34694],{"class":69,"line":3312},[67,34695,177],{"emptyLinePlaceholder":176},[67,34697,34698],{"class":69,"line":3320},[67,34699,34700],{"class":202},"    # 进行模型测试\n",[67,34702,34703],{"class":69,"line":3325},[67,34704,34705],{"class":202},"    # 模型在推理的时候只进行前向传播，不再进行反向传播更新梯度了\n",[67,34707,34708],{"class":69,"line":3331},[67,34709,34710],{"class":202},"    # 不进行梯度计算，可以节省内存，加快运行速度\n",[67,34712,34713,34716],{"class":69,"line":3337},[67,34714,34715],{"class":73},"    with",[67,34717,33421],{"class":77},[67,34719,34720],{"class":69,"line":3342},[67,34721,34722],{"class":202},"        # 从数据中进行\n",[67,34724,34725,34727,34730,34732],{"class":69,"line":8667},[67,34726,4123],{"class":73},[67,34728,34729],{"class":77}," test_data_x,test_data_y ",[67,34731,81],{"class":73},[67,34733,34734],{"class":77}," test_dataloader:\n",[67,34736,34737,34740,34742],{"class":69,"line":8691},[67,34738,34739],{"class":77},"            test_data_x",[67,34741,909],{"class":73},[67,34743,34744],{"class":77},"test_data_x.to(device)\n",[67,34746,34747,34750,34752],{"class":69,"line":8696},[67,34748,34749],{"class":77},"            test_data_y",[67,34751,909],{"class":73},[67,34753,34754],{"class":77},"test_data_y.to(device)\n",[67,34756,34757],{"class":69,"line":8702},[67,34758,34759],{"class":202},"            # 设置为验证模式\n",[67,34761,34762],{"class":69,"line":8729},[67,34763,33412],{"class":77},[67,34765,34766],{"class":69,"line":8734},[67,34767,34768],{"class":202},"            # 前向传播过程，输入为测试数据集,输出为对每个样本的预测值\n",[67,34770,34771,34773,34775],{"class":69,"line":8740},[67,34772,33197],{"class":77},[67,34774,909],{"class":73},[67,34776,34777],{"class":77},"model(test_data_x)\n",[67,34779,34780],{"class":69,"line":8752},[67,34781,34782],{"class":202},"            # 查找每一行中最大值对应的下标\n",[67,34784,34785,34787,34789,34791,34793,34795,34797],{"class":69,"line":8764},[67,34786,33214],{"class":77},[67,34788,909],{"class":73},[67,34790,33219],{"class":77},[67,34792,33222],{"class":5935},[67,34794,909],{"class":73},[67,34796,1077],{"class":208},[67,34798,870],{"class":77},[67,34800,34801],{"class":69,"line":8776},[67,34802,34803],{"class":202},"            # 计算正确率\n",[67,34805,34806],{"class":69,"line":10435},[67,34807,34808],{"class":202},"            # .data表示是一个不带梯度信息的tensor\n",[67,34810,34811],{"class":69,"line":10459},[67,34812,34813],{"class":202},"            # 如果预测正确，则准确度test_corrects加1\n",[67,34815,34816,34819,34821,34823,34825],{"class":69,"line":10482},[67,34817,34818],{"class":77},"            test_corrects",[67,34820,10196],{"class":73},[67,34822,33324],{"class":77},[67,34824,3670],{"class":73},[67,34826,34827],{"class":77},"test_data_y.data)\n",[67,34829,34830],{"class":69,"line":10506},[67,34831,34832],{"class":202},"            # 将所有的测试样本进行累计\n",[67,34834,34835,34838,34840,34843,34845],{"class":69,"line":10511},[67,34836,34837],{"class":77},"            test_num",[67,34839,10196],{"class":73},[67,34841,34842],{"class":77},"test_data_x.size(",[67,34844,1051],{"class":208},[67,34846,870],{"class":77},[67,34848,34849],{"class":69,"line":10516},[67,34850,177],{"emptyLinePlaceholder":176},[67,34852,34853],{"class":69,"line":10521},[67,34854,34855],{"class":202},"        # 计算准确度\n",[67,34857,34858,34861,34863,34866,34868],{"class":69,"line":10530},[67,34859,34860],{"class":77},"        test_acc",[67,34862,909],{"class":73},[67,34864,34865],{"class":77},"test_corrects.double().item()",[67,34867,1440],{"class":73},[67,34869,34870],{"class":77},"test_num\n",[67,34872,34873],{"class":69,"line":10535},[67,34874,34875],{"class":202},"        # .item()的作用是：把只含1个数字的 Tensor 转成 Python 的数字\n",[67,34877,34878,34880,34882,34885],{"class":69,"line":10541},[67,34879,32988],{"class":208},[67,34881,864],{"class":77},[67,34883,34884],{"class":84},"\"测试的准确率：\"",[67,34886,34887],{"class":77},",test_acc)\n",[67,34889,34890],{"class":69,"line":10562},[67,34891,177],{"emptyLinePlaceholder":176},[67,34893,34894],{"class":69,"line":10568},[67,34895,34896],{"class":202},"# 实现模型的测试功能\n",[67,34898,34899,34901,34903,34905,34907],{"class":69,"line":10582},[67,34900,2254],{"class":73},[67,34902,31757],{"class":208},[67,34904,3670],{"class":73},[67,34906,31762],{"class":84},[67,34908,4459],{"class":77},[67,34910,34911],{"class":69,"line":10588},[67,34912,34913],{"class":202},"    # 加载模型\n",[67,34915,34916,34918,34920],{"class":69,"line":10615},[67,34917,31826],{"class":77},[67,34919,909],{"class":73},[67,34921,34362],{"class":77},[67,34923,34924],{"class":69,"line":10624},[67,34925,34926],{"class":202},"    # 调用训练好的权重，把之前训练好、保存下来的模型参数重新装回模型里\n",[67,34928,34929],{"class":69,"line":10630},[67,34930,34931],{"class":202},"    # 使用torch中的load函数加载权重，利用model.load_state_dict将参数加回到模型当中\n",[67,34933,34934,34937,34940],{"class":69,"line":10638},[67,34935,34936],{"class":77},"    model.load_state_dict(torch.load(",[67,34938,34939],{"class":84},"'best_model.pth'",[67,34941,31034],{"class":77},[67,34943,34944],{"class":69,"line":10643},[67,34945,34946],{"class":202},"    # 数据加载\n",[67,34948,34949,34951,34953],{"class":69,"line":17321},[67,34950,34559],{"class":77},[67,34952,909],{"class":73},[67,34954,34955],{"class":77},"test_data_process()\n",[67,34957,34958],{"class":69,"line":17327},[67,34959,34960],{"class":202},"    # 加载模型测试的函数\n",[67,34962,34963],{"class":69,"line":17350},[67,34964,34965],{"class":77},"    test_model_process(model,test_dataloader)\n",[67,34967,34968],{"class":69,"line":17356},[67,34969,177],{"emptyLinePlaceholder":176},[67,34971,34972],{"class":69,"line":17379},[67,34973,34974],{"class":202},"    # 验证集推理实现：\n",[67,34976,34977],{"class":69,"line":17393},[67,34978,34979],{"class":202},"    # 加载数据加载的更详细一些\n",[67,34981,34982,34984,34986,34988,34990,34992,34994],{"class":69,"line":17413},[67,34983,31774],{"class":77},[67,34985,909],{"class":73},[67,34987,31781],{"class":84},[67,34989,2427],{"class":73},[67,34991,31786],{"class":77},[67,34993,2424],{"class":73},[67,34995,34656],{"class":84},[67,34997,34998,35000,35002],{"class":69,"line":17419},[67,34999,31826],{"class":77},[67,35001,909],{"class":73},[67,35003,32826],{"class":77},[67,35005,35006],{"class":69,"line":17430},[67,35007,35008],{"class":202},"    # 设置类别，这样预测值就不展示数字，就直接展示这个种类了\n",[67,35010,35011],{"class":69,"line":17453},[67,35012,35013],{"class":202},"    # 顺序不可改变\n",[67,35015,35016,35019,35021,35023,35026,35028,35031,35033,35036,35038,35041,35043,35046,35048,35051,35053,35056,35058,35061,35063,35066,35068,35071],{"class":69,"line":17475},[67,35017,35018],{"class":77},"    classes",[67,35020,909],{"class":73},[67,35022,1746],{"class":77},[67,35024,35025],{"class":84},"'T-shirt\u002Ftop'",[67,35027,1236],{"class":77},[67,35029,35030],{"class":84},"'Trouser'",[67,35032,1236],{"class":77},[67,35034,35035],{"class":84},"'Pullover'",[67,35037,1236],{"class":77},[67,35039,35040],{"class":84},"'Dress'",[67,35042,1236],{"class":77},[67,35044,35045],{"class":84},"'Coat'",[67,35047,1236],{"class":77},[67,35049,35050],{"class":84},"'Sandal'",[67,35052,1236],{"class":77},[67,35054,35055],{"class":84},"'Shirt'",[67,35057,1236],{"class":77},[67,35059,35060],{"class":84},"'Sneaker'",[67,35062,1236],{"class":77},[67,35064,35065],{"class":84},"'Bag'",[67,35067,1236],{"class":77},[67,35069,35070],{"class":84},"'Ankle boot'",[67,35072,33783],{"class":77},[67,35074,35075,35077],{"class":69,"line":17480},[67,35076,34715],{"class":73},[67,35078,33421],{"class":77},[67,35080,35081],{"class":69,"line":17486},[67,35082,35083],{"class":202},"        # 将数据和标签都放到设备当中\n",[67,35085,35086,35088,35091,35093],{"class":69,"line":17500},[67,35087,4123],{"class":73},[67,35089,35090],{"class":77}," b_x,b_y ",[67,35092,81],{"class":73},[67,35094,34734],{"class":77},[67,35096,35097,35099,35101],{"class":69,"line":17513},[67,35098,33147],{"class":77},[67,35100,909],{"class":73},[67,35102,33152],{"class":77},[67,35104,35105,35107,35109],{"class":69,"line":17518},[67,35106,33162],{"class":77},[67,35108,909],{"class":73},[67,35110,33167],{"class":77},[67,35112,35113],{"class":69,"line":17532},[67,35114,177],{"emptyLinePlaceholder":176},[67,35116,35117],{"class":69,"line":17537},[67,35118,35119],{"class":202},"            # 设置模型为验证模式\n",[67,35121,35122],{"class":69,"line":17543},[67,35123,33412],{"class":77},[67,35125,35126],{"class":69,"line":17548},[67,35127,35128],{"class":202},"            # 模型推理结果\n",[67,35130,35131,35133,35135],{"class":69,"line":17562},[67,35132,33197],{"class":77},[67,35134,909],{"class":73},[67,35136,33202],{"class":77},[67,35138,35139],{"class":69,"line":17567},[67,35140,35141],{"class":202},"            # 获取最大下标，最大下标就是类别号\n",[67,35143,35144,35146,35148,35150,35152,35154,35156],{"class":69,"line":17572},[67,35145,33214],{"class":77},[67,35147,909],{"class":73},[67,35149,33219],{"class":77},[67,35151,33222],{"class":5935},[67,35153,909],{"class":73},[67,35155,1077],{"class":208},[67,35157,870],{"class":77},[67,35159,35160],{"class":69,"line":17586},[67,35161,35162],{"class":202},"            # 取出张量中的数值\n",[67,35164,35165,35168,35170],{"class":69,"line":17598},[67,35166,35167],{"class":77},"            result",[67,35169,909],{"class":73},[67,35171,35172],{"class":77},"pre_lab.item()\n",[67,35174,35175,35178,35180],{"class":69,"line":17603},[67,35176,35177],{"class":77},"            label",[67,35179,909],{"class":73},[67,35181,35182],{"class":77},"b_y.item()\n",[67,35184,35185,35188,35190,35193,35196,35199,35201,35204],{"class":69,"line":17616},[67,35186,35187],{"class":208},"            print",[67,35189,864],{"class":77},[67,35191,35192],{"class":84},"\"预测值：\"",[67,35194,35195],{"class":77},",classes[result],",[67,35197,35198],{"class":84},"\"------\"",[67,35200,1236],{"class":77},[67,35202,35203],{"class":84},"\"真实值：\"",[67,35205,35206],{"class":77},",classes[label])\n",[19,35208,35209],{},"（2）AlexNet",[815,35211,35212],{},[818,35213,35214],{},"神经网络构建",[57,35216,35218],{"className":30915,"code":35217,"language":30917,"meta":62,"style":62},"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",[64,35219,35220,35226,35236,35246,35258,35262,35279,35287,35302,35314,35356,35383,35426,35452,35496,35539,35582,35609,35613,35623,35628,35656,35675,35694,35698,35703,35711,35726,35736,35750,35760,35775,35790,35805,35816,35820,35825,35835,35850,35855,35869,35884,35896,35901,35912,35917,35923,35928,35940,35960,35965,35974],{"__ignoreMap":62},[67,35221,35222,35224],{"class":69,"line":70},[67,35223,30929],{"class":73},[67,35225,30932],{"class":77},[67,35227,35228,35230,35232,35234],{"class":69,"line":143},[67,35229,31274],{"class":73},[67,35231,31277],{"class":77},[67,35233,30929],{"class":73},[67,35235,31282],{"class":77},[67,35237,35238,35240,35242,35244],{"class":69,"line":149},[67,35239,31274],{"class":73},[67,35241,31294],{"class":77},[67,35243,30929],{"class":73},[67,35245,31299],{"class":77},[67,35247,35248,35250,35253,35255],{"class":69,"line":155},[67,35249,30929],{"class":73},[67,35251,35252],{"class":77}," torch.nn.functional ",[67,35254,31920],{"class":73},[67,35256,35257],{"class":77}," F\n",[67,35259,35260],{"class":69,"line":161},[67,35261,177],{"emptyLinePlaceholder":176},[67,35263,35264,35266,35269,35271,35273,35275,35277],{"class":69,"line":167},[67,35265,15411],{"class":73},[67,35267,35268],{"class":112}," AlexNet",[67,35270,864],{"class":77},[67,35272,31315],{"class":112},[67,35274,240],{"class":77},[67,35276,31320],{"class":112},[67,35278,31323],{"class":77},[67,35280,35281,35283,35285],{"class":69,"line":173},[67,35282,31338],{"class":73},[67,35284,31341],{"class":208},[67,35286,31344],{"class":77},[67,35288,35289,35291,35294,35296,35298,35300],{"class":69,"line":180},[67,35290,31354],{"class":208},[67,35292,35293],{"class":77},"(AlexNet,",[67,35295,31360],{"class":208},[67,35297,31363],{"class":77},[67,35299,31366],{"class":208},[67,35301,2698],{"class":77},[67,35303,35304,35306,35309,35311],{"class":69,"line":186},[67,35305,31382],{"class":208},[67,35307,35308],{"class":77},".ReLu",[67,35310,909],{"class":73},[67,35312,35313],{"class":77},"nn.ReLU()\n",[67,35315,35316,35318,35320,35322,35324,35326,35328,35330,35332,35334,35336,35338,35340,35342,35344,35346,35348,35350,35352,35354],{"class":69,"line":444},[67,35317,31382],{"class":208},[67,35319,31385],{"class":77},[67,35321,909],{"class":73},[67,35323,31390],{"class":77},[67,35325,31393],{"class":5935},[67,35327,909],{"class":73},[67,35329,1077],{"class":208},[67,35331,1236],{"class":77},[67,35333,31402],{"class":5935},[67,35335,909],{"class":73},[67,35337,1069],{"class":208},[67,35339,1236],{"class":77},[67,35341,31411],{"class":5935},[67,35343,909],{"class":73},[67,35345,1329],{"class":208},[67,35347,1236],{"class":77},[67,35349,31466],{"class":5935},[67,35351,909],{"class":73},[67,35353,1151],{"class":208},[67,35355,870],{"class":77},[67,35357,35358,35360,35362,35364,35367,35369,35371,35373,35375,35377,35379,35381],{"class":69,"line":2335},[67,35359,31382],{"class":208},[67,35361,31450],{"class":77},[67,35363,909],{"class":73},[67,35365,35366],{"class":77},"nn.MaxPool2d(",[67,35368,31411],{"class":5935},[67,35370,909],{"class":73},[67,35372,933],{"class":208},[67,35374,1236],{"class":77},[67,35376,31466],{"class":5935},[67,35378,909],{"class":73},[67,35380,939],{"class":208},[67,35382,870],{"class":77},[67,35384,35385,35387,35389,35391,35393,35395,35397,35399,35401,35403,35405,35408,35410,35412,35414,35416,35418,35420,35422,35424],{"class":69,"line":2340},[67,35386,31382],{"class":208},[67,35388,31479],{"class":77},[67,35390,909],{"class":73},[67,35392,31390],{"class":77},[67,35394,31393],{"class":5935},[67,35396,909],{"class":73},[67,35398,1069],{"class":208},[67,35400,1236],{"class":77},[67,35402,31402],{"class":5935},[67,35404,909],{"class":73},[67,35406,35407],{"class":208},"256",[67,35409,1236],{"class":77},[67,35411,31411],{"class":5935},[67,35413,909],{"class":73},[67,35415,1177],{"class":208},[67,35417,1236],{"class":77},[67,35419,31420],{"class":5935},[67,35421,909],{"class":73},[67,35423,939],{"class":208},[67,35425,870],{"class":77},[67,35427,35428,35430,35432,35434,35436,35438,35440,35442,35444,35446,35448,35450],{"class":69,"line":2346},[67,35429,31382],{"class":208},[67,35431,31514],{"class":77},[67,35433,909],{"class":73},[67,35435,35366],{"class":77},[67,35437,31411],{"class":5935},[67,35439,909],{"class":73},[67,35441,933],{"class":208},[67,35443,1236],{"class":77},[67,35445,31466],{"class":5935},[67,35447,909],{"class":73},[67,35449,939],{"class":208},[67,35451,870],{"class":77},[67,35453,35454,35456,35459,35461,35463,35465,35467,35469,35471,35473,35475,35478,35480,35482,35484,35486,35488,35490,35492,35494],{"class":69,"line":2351},[67,35455,31382],{"class":208},[67,35457,35458],{"class":77},".c5",[67,35460,909],{"class":73},[67,35462,31390],{"class":77},[67,35464,31393],{"class":5935},[67,35466,909],{"class":73},[67,35468,35407],{"class":208},[67,35470,1236],{"class":77},[67,35472,31402],{"class":5935},[67,35474,909],{"class":73},[67,35476,35477],{"class":208},"384",[67,35479,1236],{"class":77},[67,35481,31411],{"class":5935},[67,35483,909],{"class":73},[67,35485,933],{"class":208},[67,35487,1236],{"class":77},[67,35489,31420],{"class":5935},[67,35491,909],{"class":73},[67,35493,1077],{"class":208},[67,35495,870],{"class":77},[67,35497,35498,35500,35503,35505,35507,35509,35511,35513,35515,35517,35519,35521,35523,35525,35527,35529,35531,35533,35535,35537],{"class":69,"line":2365},[67,35499,31382],{"class":208},[67,35501,35502],{"class":77},".c6",[67,35504,909],{"class":73},[67,35506,31390],{"class":77},[67,35508,31393],{"class":5935},[67,35510,909],{"class":73},[67,35512,35477],{"class":208},[67,35514,1236],{"class":77},[67,35516,31402],{"class":5935},[67,35518,909],{"class":73},[67,35520,35477],{"class":208},[67,35522,1236],{"class":77},[67,35524,31411],{"class":5935},[67,35526,909],{"class":73},[67,35528,933],{"class":208},[67,35530,1236],{"class":77},[67,35532,31420],{"class":5935},[67,35534,909],{"class":73},[67,35536,1077],{"class":208},[67,35538,870],{"class":77},[67,35540,35541,35543,35546,35548,35550,35552,35554,35556,35558,35560,35562,35564,35566,35568,35570,35572,35574,35576,35578,35580],{"class":69,"line":2370},[67,35542,31382],{"class":208},[67,35544,35545],{"class":77},".c7",[67,35547,909],{"class":73},[67,35549,31390],{"class":77},[67,35551,31393],{"class":5935},[67,35553,909],{"class":73},[67,35555,35477],{"class":208},[67,35557,1236],{"class":77},[67,35559,31402],{"class":5935},[67,35561,909],{"class":73},[67,35563,35407],{"class":208},[67,35565,1236],{"class":77},[67,35567,31411],{"class":5935},[67,35569,909],{"class":73},[67,35571,933],{"class":208},[67,35573,1236],{"class":77},[67,35575,31420],{"class":5935},[67,35577,909],{"class":73},[67,35579,1077],{"class":208},[67,35581,870],{"class":77},[67,35583,35584,35586,35589,35591,35593,35595,35597,35599,35601,35603,35605,35607],{"class":69,"line":2376},[67,35585,31382],{"class":208},[67,35587,35588],{"class":77},".s8",[67,35590,909],{"class":73},[67,35592,35366],{"class":77},[67,35594,31411],{"class":5935},[67,35596,909],{"class":73},[67,35598,933],{"class":208},[67,35600,1236],{"class":77},[67,35602,31466],{"class":5935},[67,35604,909],{"class":73},[67,35606,939],{"class":208},[67,35608,870],{"class":77},[67,35610,35611],{"class":69,"line":2397},[67,35612,31539],{"class":202},[67,35614,35615,35617,35619,35621],{"class":69,"line":2402},[67,35616,31382],{"class":208},[67,35618,31546],{"class":77},[67,35620,909],{"class":73},[67,35622,31551],{"class":77},[67,35624,35625],{"class":69,"line":2416},[67,35626,35627],{"class":202},"       # 定义全连接层\n",[67,35629,35630,35632,35635,35637,35639,35641,35643,35645,35647,35649,35651,35654],{"class":69,"line":2421},[67,35631,31382],{"class":208},[67,35633,35634],{"class":77},".f1",[67,35636,909],{"class":73},[67,35638,31568],{"class":77},[67,35640,1202],{"class":208},[67,35642,1312],{"class":73},[67,35644,1202],{"class":208},[67,35646,1312],{"class":73},[67,35648,35407],{"class":208},[67,35650,1236],{"class":77},[67,35652,35653],{"class":208},"4096",[67,35655,870],{"class":77},[67,35657,35658,35660,35663,35665,35667,35669,35671,35673],{"class":69,"line":2450},[67,35659,31382],{"class":208},[67,35661,35662],{"class":77},".f2",[67,35664,909],{"class":73},[67,35666,31568],{"class":77},[67,35668,35653],{"class":208},[67,35670,1236],{"class":77},[67,35672,35653],{"class":208},[67,35674,870],{"class":77},[67,35676,35677,35679,35682,35684,35686,35688,35690,35692],{"class":69,"line":2455},[67,35678,31382],{"class":208},[67,35680,35681],{"class":77},".f3",[67,35683,909],{"class":73},[67,35685,31568],{"class":77},[67,35687,35653],{"class":208},[67,35689,1236],{"class":77},[67,35691,1303],{"class":208},[67,35693,870],{"class":77},[67,35695,35696],{"class":69,"line":2472},[67,35697,177],{"emptyLinePlaceholder":176},[67,35699,35700],{"class":69,"line":2477},[67,35701,35702],{"class":202},"    # 定义前向传播\n",[67,35704,35705,35707,35709],{"class":69,"line":2482},[67,35706,31338],{"class":73},[67,35708,31630],{"class":112},[67,35710,31633],{"class":77},[67,35712,35713,35715,35717,35719,35722,35724],{"class":69,"line":2487},[67,35714,31638],{"class":77},[67,35716,909],{"class":73},[67,35718,31360],{"class":208},[67,35720,35721],{"class":77},".ReLu(",[67,35723,31360],{"class":208},[67,35725,31650],{"class":77},[67,35727,35728,35730,35732,35734],{"class":69,"line":2501},[67,35729,31638],{"class":77},[67,35731,909],{"class":73},[67,35733,31360],{"class":208},[67,35735,31661],{"class":77},[67,35737,35738,35740,35742,35744,35746,35748],{"class":69,"line":2506},[67,35739,31638],{"class":77},[67,35741,909],{"class":73},[67,35743,31360],{"class":208},[67,35745,35721],{"class":77},[67,35747,31360],{"class":208},[67,35749,31676],{"class":77},[67,35751,35752,35754,35756,35758],{"class":69,"line":3298},[67,35753,31638],{"class":77},[67,35755,909],{"class":73},[67,35757,31360],{"class":208},[67,35759,31687],{"class":77},[67,35761,35762,35764,35766,35768,35770,35772],{"class":69,"line":3312},[67,35763,31638],{"class":77},[67,35765,909],{"class":73},[67,35767,31360],{"class":208},[67,35769,35721],{"class":77},[67,35771,31360],{"class":208},[67,35773,35774],{"class":77},".c5(x))\n",[67,35776,35777,35779,35781,35783,35785,35787],{"class":69,"line":3320},[67,35778,31638],{"class":77},[67,35780,909],{"class":73},[67,35782,31360],{"class":208},[67,35784,35721],{"class":77},[67,35786,31360],{"class":208},[67,35788,35789],{"class":77},".c6(x))\n",[67,35791,35792,35794,35796,35798,35800,35802],{"class":69,"line":3325},[67,35793,31638],{"class":77},[67,35795,909],{"class":73},[67,35797,31360],{"class":208},[67,35799,35721],{"class":77},[67,35801,31360],{"class":208},[67,35803,35804],{"class":77},".c7(x))\n",[67,35806,35807,35809,35811,35813],{"class":69,"line":3331},[67,35808,31638],{"class":77},[67,35810,909],{"class":73},[67,35812,31360],{"class":208},[67,35814,35815],{"class":77},".s8(x)\n",[67,35817,35818],{"class":69,"line":3337},[67,35819,177],{"emptyLinePlaceholder":176},[67,35821,35822],{"class":69,"line":3342},[67,35823,35824],{"class":202},"        # 展平加线性全连接层\n",[67,35826,35827,35829,35831,35833],{"class":69,"line":8667},[67,35828,31638],{"class":77},[67,35830,909],{"class":73},[67,35832,31360],{"class":208},[67,35834,31698],{"class":77},[67,35836,35837,35839,35841,35843,35845,35847],{"class":69,"line":8691},[67,35838,31638],{"class":77},[67,35840,909],{"class":73},[67,35842,31360],{"class":208},[67,35844,35721],{"class":77},[67,35846,31360],{"class":208},[67,35848,35849],{"class":77},".f1(x))\n",[67,35851,35852],{"class":69,"line":8696},[67,35853,35854],{"class":202},"        # 还需要dropout对神经元随机进行失活\n",[67,35856,35857,35859,35861,35864,35867],{"class":69,"line":8702},[67,35858,31638],{"class":77},[67,35860,909],{"class":73},[67,35862,35863],{"class":77},"F.dropout(x,",[67,35865,35866],{"class":208},"0.5",[67,35868,870],{"class":77},[67,35870,35871,35873,35875,35877,35879,35881],{"class":69,"line":8729},[67,35872,31638],{"class":77},[67,35874,909],{"class":73},[67,35876,31360],{"class":208},[67,35878,35721],{"class":77},[67,35880,31360],{"class":208},[67,35882,35883],{"class":77},".f2(x))\n",[67,35885,35886,35888,35890,35892,35894],{"class":69,"line":8734},[67,35887,31638],{"class":77},[67,35889,909],{"class":73},[67,35891,35863],{"class":77},[67,35893,35866],{"class":208},[67,35895,870],{"class":77},[67,35897,35898],{"class":69,"line":8740},[67,35899,35900],{"class":202},"        # 直接输出\n",[67,35902,35903,35905,35907,35909],{"class":69,"line":8752},[67,35904,31638],{"class":77},[67,35906,909],{"class":73},[67,35908,31360],{"class":208},[67,35910,35911],{"class":77},".f3(x)\n",[67,35913,35914],{"class":69,"line":8764},[67,35915,35916],{"class":202},"        # 前向传播输出\n",[67,35918,35919,35921],{"class":69,"line":8776},[67,35920,15469],{"class":73},[67,35922,31746],{"class":77},[67,35924,35925],{"class":69,"line":10435},[67,35926,35927],{"class":202},"# 定义主函数，用于测试神经网络是否可以正常工作\n",[67,35929,35930,35932,35934,35936,35938],{"class":69,"line":10459},[67,35931,2254],{"class":73},[67,35933,31757],{"class":208},[67,35935,3670],{"class":73},[67,35937,31762],{"class":84},[67,35939,4459],{"class":77},[67,35941,35942,35944,35946,35948,35950,35952,35954,35956,35958],{"class":69,"line":10482},[67,35943,31774],{"class":77},[67,35945,909],{"class":73},[67,35947,30988],{"class":77},[67,35949,31781],{"class":84},[67,35951,2427],{"class":73},[67,35953,31786],{"class":77},[67,35955,2424],{"class":73},[67,35957,31013],{"class":84},[67,35959,870],{"class":77},[67,35961,35962],{"class":69,"line":10506},[67,35963,35964],{"class":202},"    # 模型实例化，然后将实例化的模型放到设备中\n",[67,35966,35967,35969,35971],{"class":69,"line":10511},[67,35968,31826],{"class":77},[67,35970,909],{"class":73},[67,35972,35973],{"class":77},"AlexNet().to(device)\n",[67,35975,35976,35978,35980,35982,35984,35987,35989,35991],{"class":69,"line":10516},[67,35977,31836],{"class":208},[67,35979,31839],{"class":77},[67,35981,1077],{"class":208},[67,35983,1236],{"class":77},[67,35985,35986],{"class":208},"227",[67,35988,1236],{"class":77},[67,35990,35986],{"class":208},[67,35992,31852],{"class":77},[815,35994,35995],{"start":143},[818,35996,31865],{},[57,35998,36000],{"className":30915,"code":35999,"language":30917,"meta":62,"style":62},"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",[64,36001,36002,36008,36014,36024,36030,36040,36050,36060,36070,36080,36084,36095,36105,36109,36113,36117,36125,36137,36147,36163,36173,36205,36219,36229,36239,36243,36253,36267,36277,36287,36297,36303,36307,36311,36315,36319,36323,36331,36351,36355,36359,36363,36367,36371,36387,36391,36395,36403,36407,36411,36419,36423,36427,36431,36439,36443,36447,36451,36455,36463,36467,36475,36479,36487,36491,36499,36503,36511,36515,36519,36527,36531,36535,36539,36551,36575,36589,36593,36597,36601,36609,36613,36621,36625,36633,36637,36645,36649,36657,36661,36669,36673,36685,36689,36697,36701,36709,36713,36717,36721,36725,36733,36737,36753,36757,36765,36769,36773,36777,36781,36785,36789,36793,36809,36813,36825,36829,36841,36845,36857,36861,36869,36873,36881,36885,36889,36894,36900,36904,36913,36917,36934,36938,36947,36951,36969,36982,36987,37000,37004,37008,37016,37020,37024,37032,37036,37044,37048,37056,37060,37064,37106,37148,37152,37156,37172,37176,37192,37196,37200,37208,37212,37216,37228,37266,37271,37276,37285,37289,37303,37313,37319,37325,37331,37337,37341,37345,37351,37355,37359,37367,37371,37389,37393,37397,37401,37417,37421,37425,37429,37433,37437,37457,37477,37481,37485,37489,37497,37505,37509,37525,37545,37565,37569,37573,37581,37589,37593,37597,37601,37613,37617,37627,37635,37652],{"__ignoreMap":62},[67,36003,36004,36006],{"class":69,"line":70},[67,36005,30929],{"class":73},[67,36007,32359],{"class":77},[67,36009,36010,36012],{"class":69,"line":143},[67,36011,30929],{"class":73},[67,36013,32366],{"class":77},[67,36015,36016,36018,36020,36022],{"class":69,"line":149},[67,36017,30929],{"class":73},[67,36019,32377],{"class":77},[67,36021,31920],{"class":73},[67,36023,32382],{"class":77},[67,36025,36026,36028],{"class":69,"line":155},[67,36027,30929],{"class":73},[67,36029,30932],{"class":77},[67,36031,36032,36034,36036,36038],{"class":69,"line":161},[67,36033,31274],{"class":73},[67,36035,31952],{"class":77},[67,36037,30929],{"class":73},[67,36039,32399],{"class":77},[67,36041,36042,36044,36046,36048],{"class":69,"line":167},[67,36043,31274],{"class":73},[67,36045,31905],{"class":77},[67,36047,30929],{"class":73},[67,36049,31910],{"class":77},[67,36051,36052,36054,36056,36058],{"class":69,"line":173},[67,36053,31274],{"class":73},[67,36055,31935],{"class":77},[67,36057,30929],{"class":73},[67,36059,31940],{"class":77},[67,36061,36062,36064,36066,36068],{"class":69,"line":180},[67,36063,30929],{"class":73},[67,36065,31952],{"class":77},[67,36067,31920],{"class":73},[67,36069,31957],{"class":77},[67,36071,36072,36074,36076,36078],{"class":69,"line":186},[67,36073,30929],{"class":73},[67,36075,31969],{"class":77},[67,36077,31920],{"class":73},[67,36079,31974],{"class":77},[67,36081,36082],{"class":69,"line":444},[67,36083,32444],{"class":202},[67,36085,36086,36088,36090,36092],{"class":69,"line":2335},[67,36087,31274],{"class":73},[67,36089,32451],{"class":77},[67,36091,30929],{"class":73},[67,36093,36094],{"class":77}," AlexNet\n",[67,36096,36097,36099,36101,36103],{"class":69,"line":2340},[67,36098,31274],{"class":73},[67,36100,31277],{"class":77},[67,36102,30929],{"class":73},[67,36104,31282],{"class":77},[67,36106,36107],{"class":69,"line":2346},[67,36108,177],{"emptyLinePlaceholder":176},[67,36110,36111],{"class":69,"line":2351},[67,36112,177],{"emptyLinePlaceholder":176},[67,36114,36115],{"class":69,"line":2365},[67,36116,32479],{"class":202},[67,36118,36119,36121,36123],{"class":69,"line":2370},[67,36120,32484],{"class":73},[67,36122,32487],{"class":112},[67,36124,32490],{"class":77},[67,36126,36127,36129,36131,36133,36135],{"class":69,"line":2376},[67,36128,32495],{"class":77},[67,36130,909],{"class":73},[67,36132,31992],{"class":77},[67,36134,32000],{"class":84},[67,36136,32003],{"class":77},[67,36138,36139,36141,36143,36145],{"class":69,"line":2397},[67,36140,32508],{"class":5935},[67,36142,909],{"class":73},[67,36144,32013],{"class":208},[67,36146,32003],{"class":77},[67,36148,36149,36151,36153,36155,36157,36159,36161],{"class":69,"line":2402},[67,36150,32519],{"class":5935},[67,36152,909],{"class":73},[67,36154,32030],{"class":77},[67,36156,32033],{"class":5935},[67,36158,909],{"class":73},[67,36160,35986],{"class":208},[67,36162,32041],{"class":77},[67,36164,36165,36167,36169,36171],{"class":69,"line":2416},[67,36166,32536],{"class":5935},[67,36168,909],{"class":73},[67,36170,32013],{"class":208},[67,36172,870],{"class":77},[67,36174,36175,36177,36179,36181,36183,36185,36187,36189,36191,36193,36195,36197,36199,36201,36203],{"class":69,"line":2421},[67,36176,32547],{"class":77},[67,36178,909],{"class":73},[67,36180,32552],{"class":77},[67,36182,32555],{"class":208},[67,36184,864],{"class":77},[67,36186,32560],{"class":208},[67,36188,1312],{"class":73},[67,36190,8077],{"class":208},[67,36192,32567],{"class":77},[67,36194,32555],{"class":208},[67,36196,864],{"class":77},[67,36198,32574],{"class":208},[67,36200,1312],{"class":73},[67,36202,8077],{"class":208},[67,36204,32581],{"class":77},[67,36206,36207,36209,36211,36213,36215,36217],{"class":69,"line":2450},[67,36208,32586],{"class":77},[67,36210,909],{"class":73},[67,36212,32591],{"class":77},[67,36214,32074],{"class":5935},[67,36216,909],{"class":73},[67,36218,32079],{"class":77},[67,36220,36221,36223,36225,36227],{"class":69,"line":2455},[67,36222,32602],{"class":5935},[67,36224,909],{"class":73},[67,36226,32607],{"class":208},[67,36228,32003],{"class":77},[67,36230,36231,36233,36235,36237],{"class":69,"line":2472},[67,36232,32614],{"class":5935},[67,36234,909],{"class":73},[67,36236,32013],{"class":208},[67,36238,32003],{"class":77},[67,36240,36241],{"class":69,"line":2477},[67,36242,32625],{"class":202},[67,36244,36245,36247,36249,36251],{"class":69,"line":2482},[67,36246,32630],{"class":5935},[67,36248,909],{"class":73},[67,36250,1253],{"class":208},[67,36252,870],{"class":77},[67,36254,36255,36257,36259,36261,36263,36265],{"class":69,"line":2487},[67,36256,32641],{"class":77},[67,36258,909],{"class":73},[67,36260,32071],{"class":77},[67,36262,32074],{"class":5935},[67,36264,909],{"class":73},[67,36266,32652],{"class":77},[67,36268,36269,36271,36273,36275],{"class":69,"line":2501},[67,36270,32657],{"class":5935},[67,36272,909],{"class":73},[67,36274,32607],{"class":208},[67,36276,32003],{"class":77},[67,36278,36279,36281,36283,36285],{"class":69,"line":2506},[67,36280,32668],{"class":5935},[67,36282,909],{"class":73},[67,36284,32013],{"class":208},[67,36286,32003],{"class":77},[67,36288,36289,36291,36293,36295],{"class":69,"line":3298},[67,36290,32679],{"class":5935},[67,36292,909],{"class":73},[67,36294,1253],{"class":208},[67,36296,870],{"class":77},[67,36298,36299,36301],{"class":69,"line":3312},[67,36300,4810],{"class":73},[67,36302,32692],{"class":77},[67,36304,36305],{"class":69,"line":3320},[67,36306,177],{"emptyLinePlaceholder":176},[67,36308,36309],{"class":69,"line":3325},[67,36310,32701],{"class":202},[67,36312,36313],{"class":69,"line":3331},[67,36314,32706],{"class":202},[67,36316,36317],{"class":69,"line":3337},[67,36318,177],{"emptyLinePlaceholder":176},[67,36320,36321],{"class":69,"line":3342},[67,36322,32715],{"class":202},[67,36324,36325,36327,36329],{"class":69,"line":8667},[67,36326,32484],{"class":73},[67,36328,32722],{"class":112},[67,36330,32725],{"class":77},[67,36332,36333,36335,36337,36339,36341,36343,36345,36347,36349],{"class":69,"line":8691},[67,36334,31774],{"class":77},[67,36336,909],{"class":73},[67,36338,30988],{"class":77},[67,36340,31781],{"class":84},[67,36342,2427],{"class":73},[67,36344,31786],{"class":77},[67,36346,2424],{"class":73},[67,36348,32744],{"class":84},[67,36350,870],{"class":77},[67,36352,36353],{"class":69,"line":8696},[67,36354,177],{"emptyLinePlaceholder":176},[67,36356,36357],{"class":69,"line":8702},[67,36358,177],{"emptyLinePlaceholder":176},[67,36360,36361],{"class":69,"line":8729},[67,36362,32759],{"class":202},[67,36364,36365],{"class":69,"line":8734},[67,36366,32764],{"class":202},[67,36368,36369],{"class":69,"line":8740},[67,36370,32769],{"class":202},[67,36372,36373,36375,36377,36379,36381,36383,36385],{"class":69,"line":8752},[67,36374,32774],{"class":77},[67,36376,909],{"class":73},[67,36378,32779],{"class":77},[67,36380,32782],{"class":5935},[67,36382,909],{"class":73},[67,36384,32787],{"class":208},[67,36386,870],{"class":77},[67,36388,36389],{"class":69,"line":8764},[67,36390,177],{"emptyLinePlaceholder":176},[67,36392,36393],{"class":69,"line":8776},[67,36394,32798],{"class":202},[67,36396,36397,36399,36401],{"class":69,"line":10435},[67,36398,32803],{"class":77},[67,36400,909],{"class":73},[67,36402,32808],{"class":77},[67,36404,36405],{"class":69,"line":10459},[67,36406,177],{"emptyLinePlaceholder":176},[67,36408,36409],{"class":69,"line":10482},[67,36410,32817],{"class":202},[67,36412,36413,36415,36417],{"class":69,"line":10506},[67,36414,31826],{"class":77},[67,36416,909],{"class":73},[67,36418,32826],{"class":77},[67,36420,36421],{"class":69,"line":10511},[67,36422,32831],{"class":202},[67,36424,36425],{"class":69,"line":10516},[67,36426,32836],{"class":202},[67,36428,36429],{"class":69,"line":10521},[67,36430,32841],{"class":202},[67,36432,36433,36435,36437],{"class":69,"line":10530},[67,36434,32846],{"class":77},[67,36436,909],{"class":73},[67,36438,32851],{"class":77},[67,36440,36441],{"class":69,"line":10535},[67,36442,177],{"emptyLinePlaceholder":176},[67,36444,36445],{"class":69,"line":10541},[67,36446,177],{"emptyLinePlaceholder":176},[67,36448,36449],{"class":69,"line":10562},[67,36450,32864],{"class":202},[67,36452,36453],{"class":69,"line":10568},[67,36454,32869],{"class":202},[67,36456,36457,36459,36461],{"class":69,"line":10582},[67,36458,32874],{"class":77},[67,36460,909],{"class":73},[67,36462,32879],{"class":208},[67,36464,36465],{"class":69,"line":10588},[67,36466,32884],{"class":202},[67,36468,36469,36471,36473],{"class":69,"line":10615},[67,36470,32889],{"class":77},[67,36472,909],{"class":73},[67,36474,32894],{"class":77},[67,36476,36477],{"class":69,"line":10624},[67,36478,32899],{"class":202},[67,36480,36481,36483,36485],{"class":69,"line":10630},[67,36482,32904],{"class":77},[67,36484,909],{"class":73},[67,36486,32894],{"class":77},[67,36488,36489],{"class":69,"line":10638},[67,36490,32913],{"class":202},[67,36492,36493,36495,36497],{"class":69,"line":10643},[67,36494,32918],{"class":77},[67,36496,909],{"class":73},[67,36498,32894],{"class":77},[67,36500,36501],{"class":69,"line":17321},[67,36502,32927],{"class":202},[67,36504,36505,36507,36509],{"class":69,"line":17327},[67,36506,32932],{"class":77},[67,36508,909],{"class":73},[67,36510,32894],{"class":77},[67,36512,36513],{"class":69,"line":17350},[67,36514,177],{"emptyLinePlaceholder":176},[67,36516,36517],{"class":69,"line":17356},[67,36518,32945],{"class":202},[67,36520,36521,36523,36525],{"class":69,"line":17379},[67,36522,32950],{"class":77},[67,36524,909],{"class":73},[67,36526,32955],{"class":77},[67,36528,36529],{"class":69,"line":17393},[67,36530,177],{"emptyLinePlaceholder":176},[67,36532,36533],{"class":69,"line":17413},[67,36534,177],{"emptyLinePlaceholder":176},[67,36536,36537],{"class":69,"line":17419},[67,36538,32968],{"class":202},[67,36540,36541,36543,36545,36547,36549],{"class":69,"line":17430},[67,36542,3921],{"class":73},[67,36544,32975],{"class":77},[67,36546,81],{"class":73},[67,36548,32980],{"class":208},[67,36550,32983],{"class":77},[67,36552,36553,36555,36557,36559,36561,36563,36565,36567,36569,36571,36573],{"class":69,"line":17453},[67,36554,32988],{"class":208},[67,36556,864],{"class":77},[67,36558,32993],{"class":84},[67,36560,32996],{"class":208},[67,36562,1440],{"class":84},[67,36564,32996],{"class":208},[67,36566,257],{"class":84},[67,36568,33005],{"class":77},[67,36570,1389],{"class":73},[67,36572,1077],{"class":208},[67,36574,31034],{"class":77},[67,36576,36577,36579,36581,36583,36585,36587],{"class":69,"line":17475},[67,36578,32988],{"class":208},[67,36580,864],{"class":77},[67,36582,33020],{"class":84},[67,36584,1312],{"class":73},[67,36586,1303],{"class":208},[67,36588,870],{"class":77},[67,36590,36591],{"class":69,"line":17480},[67,36592,177],{"emptyLinePlaceholder":176},[67,36594,36595],{"class":69,"line":17486},[67,36596,33035],{"class":202},[67,36598,36599],{"class":69,"line":17500},[67,36600,33040],{"class":202},[67,36602,36603,36605,36607],{"class":69,"line":17513},[67,36604,33045],{"class":77},[67,36606,909],{"class":73},[67,36608,32879],{"class":208},[67,36610,36611],{"class":69,"line":17518},[67,36612,33054],{"class":202},[67,36614,36615,36617,36619],{"class":69,"line":17532},[67,36616,33059],{"class":77},[67,36618,909],{"class":73},[67,36620,3805],{"class":208},[67,36622,36623],{"class":69,"line":17537},[67,36624,33068],{"class":202},[67,36626,36627,36629,36631],{"class":69,"line":17543},[67,36628,33073],{"class":77},[67,36630,909],{"class":73},[67,36632,32879],{"class":208},[67,36634,36635],{"class":69,"line":17548},[67,36636,33082],{"class":202},[67,36638,36639,36641,36643],{"class":69,"line":17562},[67,36640,33087],{"class":77},[67,36642,909],{"class":73},[67,36644,3805],{"class":208},[67,36646,36647],{"class":69,"line":17567},[67,36648,33096],{"class":202},[67,36650,36651,36653,36655],{"class":69,"line":17572},[67,36652,33101],{"class":77},[67,36654,909],{"class":73},[67,36656,3805],{"class":208},[67,36658,36659],{"class":69,"line":17586},[67,36660,33110],{"class":202},[67,36662,36663,36665,36667],{"class":69,"line":17598},[67,36664,33115],{"class":77},[67,36666,909],{"class":73},[67,36668,3805],{"class":208},[67,36670,36671],{"class":69,"line":17603},[67,36672,33124],{"class":202},[67,36674,36675,36677,36679,36681,36683],{"class":69,"line":17616},[67,36676,4123],{"class":73},[67,36678,32138],{"class":77},[67,36680,81],{"class":73},[67,36682,32143],{"class":208},[67,36684,33137],{"class":77},[67,36686,36687],{"class":69,"line":17621},[67,36688,33142],{"class":202},[67,36690,36691,36693,36695],{"class":69,"line":17626},[67,36692,33147],{"class":77},[67,36694,909],{"class":73},[67,36696,33152],{"class":77},[67,36698,36699],{"class":69,"line":17631},[67,36700,33157],{"class":202},[67,36702,36703,36705,36707],{"class":69,"line":17644},[67,36704,33162],{"class":77},[67,36706,909],{"class":73},[67,36708,33167],{"class":77},[67,36710,36711],{"class":69,"line":17649},[67,36712,33173],{"class":202},[67,36714,36715],{"class":69,"line":33170},[67,36716,33179],{"class":77},[67,36718,36719],{"class":69,"line":33176},[67,36720,33185],{"class":202},[67,36722,36723],{"class":69,"line":33182},[67,36724,33191],{"class":202},[67,36726,36727,36729,36731],{"class":69,"line":33188},[67,36728,33197],{"class":77},[67,36730,909],{"class":73},[67,36732,33202],{"class":77},[67,36734,36735],{"class":69,"line":33194},[67,36736,33208],{"class":202},[67,36738,36739,36741,36743,36745,36747,36749,36751],{"class":69,"line":33205},[67,36740,33214],{"class":77},[67,36742,909],{"class":73},[67,36744,33219],{"class":77},[67,36746,33222],{"class":5935},[67,36748,909],{"class":73},[67,36750,1077],{"class":208},[67,36752,870],{"class":77},[67,36754,36755],{"class":69,"line":33211},[67,36756,33234],{"class":202},[67,36758,36759,36761,36763],{"class":69,"line":33231},[67,36760,33240],{"class":77},[67,36762,909],{"class":73},[67,36764,33245],{"class":77},[67,36766,36767],{"class":69,"line":33237},[67,36768,33251],{"class":202},[67,36770,36771],{"class":69,"line":33248},[67,36772,33257],{"class":77},[67,36774,36775],{"class":69,"line":33254},[67,36776,33263],{"class":202},[67,36778,36779],{"class":69,"line":33260},[67,36780,33269],{"class":77},[67,36782,36783],{"class":69,"line":33266},[67,36784,33275],{"class":202},[67,36786,36787],{"class":69,"line":33272},[67,36788,33281],{"class":77},[67,36790,36791],{"class":69,"line":33278},[67,36792,33287],{"class":202},[67,36794,36795,36797,36799,36801,36803,36805,36807],{"class":69,"line":33284},[67,36796,33293],{"class":77},[67,36798,10196],{"class":73},[67,36800,33298],{"class":77},[67,36802,1312],{"class":73},[67,36804,33303],{"class":77},[67,36806,1051],{"class":208},[67,36808,870],{"class":77},[67,36810,36811],{"class":69,"line":33290},[67,36812,33313],{"class":202},[67,36814,36815,36817,36819,36821,36823],{"class":69,"line":33310},[67,36816,33319],{"class":77},[67,36818,10196],{"class":73},[67,36820,33324],{"class":77},[67,36822,3670],{"class":73},[67,36824,33329],{"class":77},[67,36826,36827],{"class":69,"line":33316},[67,36828,33335],{"class":202},[67,36830,36831,36833,36835,36837,36839],{"class":69,"line":33332},[67,36832,33341],{"class":77},[67,36834,10196],{"class":73},[67,36836,33303],{"class":77},[67,36838,1051],{"class":208},[67,36840,870],{"class":77},[67,36842,36843],{"class":69,"line":33338},[67,36844,33355],{"class":202},[67,36846,36847,36849,36851,36853,36855],{"class":69,"line":33352},[67,36848,4123],{"class":73},[67,36850,33363],{"class":77},[67,36852,81],{"class":73},[67,36854,32143],{"class":208},[67,36856,33370],{"class":77},[67,36858,36859],{"class":69,"line":33358},[67,36860,33376],{"class":202},[67,36862,36863,36865,36867],{"class":69,"line":33373},[67,36864,33147],{"class":77},[67,36866,909],{"class":73},[67,36868,33152],{"class":77},[67,36870,36871],{"class":69,"line":33379},[67,36872,33391],{"class":202},[67,36874,36875,36877,36879],{"class":69,"line":33388},[67,36876,33162],{"class":77},[67,36878,909],{"class":73},[67,36880,33167],{"class":77},[67,36882,36883],{"class":69,"line":33394},[67,36884,33406],{"class":202},[67,36886,36887],{"class":69,"line":33403},[67,36888,33412],{"class":77},[67,36890,36891],{"class":69,"line":33409},[67,36892,36893],{"class":202},"            # 验证时不计算梯度以节省内存\u002F计算\n",[67,36895,36896,36898],{"class":69,"line":33415},[67,36897,33418],{"class":73},[67,36899,33421],{"class":77},[67,36901,36902],{"class":69,"line":33424},[67,36903,33427],{"class":202},[67,36905,36906,36909,36911],{"class":69,"line":33430},[67,36907,36908],{"class":77},"                output",[67,36910,909],{"class":73},[67,36912,33202],{"class":77},[67,36914,36915],{"class":69,"line":33441},[67,36916,33444],{"class":202},[67,36918,36919,36922,36924,36926,36928,36930,36932],{"class":69,"line":33447},[67,36920,36921],{"class":77},"                pre_lab",[67,36923,909],{"class":73},[67,36925,33219],{"class":77},[67,36927,33222],{"class":5935},[67,36929,909],{"class":73},[67,36931,1077],{"class":208},[67,36933,870],{"class":77},[67,36935,36936],{"class":69,"line":33466},[67,36937,33469],{"class":202},[67,36939,36940,36943,36945],{"class":69,"line":33472},[67,36941,36942],{"class":77},"                val_batch_loss",[67,36944,909],{"class":73},[67,36946,33245],{"class":77},[67,36948,36949],{"class":69,"line":33483},[67,36950,33486],{"class":202},[67,36952,36953,36956,36958,36961,36963,36965,36967],{"class":69,"line":33489},[67,36954,36955],{"class":77},"                val_loss",[67,36957,10196],{"class":73},[67,36959,36960],{"class":77},"val_batch_loss.item()",[67,36962,1312],{"class":73},[67,36964,33303],{"class":77},[67,36966,1051],{"class":208},[67,36968,870],{"class":77},[67,36970,36971,36974,36976,36978,36980],{"class":69,"line":33509},[67,36972,36973],{"class":77},"                val_corrects",[67,36975,10196],{"class":73},[67,36977,33324],{"class":77},[67,36979,3670],{"class":73},[67,36981,33329],{"class":77},[67,36983,36984],{"class":69,"line":33525},[67,36985,36986],{"class":202},"            # 当前用于验证的样本数量\n",[67,36988,36989,36992,36994,36996,36998],{"class":69,"line":33531},[67,36990,36991],{"class":77},"            val_num",[67,36993,10196],{"class":73},[67,36995,33303],{"class":77},[67,36997,1051],{"class":208},[67,36999,870],{"class":77},[67,37001,37002],{"class":69,"line":33545},[67,37003,33548],{"class":202},[67,37005,37006],{"class":69,"line":33551},[67,37007,33554],{"class":202},[67,37009,37010,37012,37014],{"class":69,"line":33557},[67,37011,33560],{"class":77},[67,37013,1440],{"class":73},[67,37015,33565],{"class":77},[67,37017,37018],{"class":69,"line":33568},[67,37019,33571],{"class":202},[67,37021,37022],{"class":69,"line":33574},[67,37023,33577],{"class":202},[67,37025,37026,37028,37030],{"class":69,"line":33580},[67,37027,33583],{"class":77},[67,37029,1440],{"class":73},[67,37031,33565],{"class":77},[67,37033,37034],{"class":69,"line":33590},[67,37035,33593],{"class":202},[67,37037,37038,37040,37042],{"class":69,"line":33596},[67,37039,33599],{"class":77},[67,37041,1440],{"class":73},[67,37043,33604],{"class":77},[67,37045,37046],{"class":69,"line":33607},[67,37047,33610],{"class":202},[67,37049,37050,37052,37054],{"class":69,"line":33613},[67,37051,33616],{"class":77},[67,37053,1440],{"class":73},[67,37055,33604],{"class":77},[67,37057,37058],{"class":69,"line":33623},[67,37059,177],{"emptyLinePlaceholder":176},[67,37061,37062],{"class":69,"line":33628},[67,37063,33631],{"class":202},[67,37065,37066,37068,37070,37072,37074,37076,37078,37080,37082,37084,37086,37088,37090,37092,37094,37096,37098,37100,37102,37104],{"class":69,"line":33634},[67,37067,32988],{"class":208},[67,37069,864],{"class":77},[67,37071,4312],{"class":84},[67,37073,32996],{"class":208},[67,37075,33645],{"class":84},[67,37077,1752],{"class":208},[67,37079,33650],{"class":73},[67,37081,1802],{"class":208},[67,37083,33655],{"class":84},[67,37085,1752],{"class":208},[67,37087,33650],{"class":73},[67,37089,1802],{"class":208},[67,37091,4312],{"class":84},[67,37093,33666],{"class":77},[67,37095,1389],{"class":73},[67,37097,1077],{"class":208},[67,37099,33673],{"class":77},[67,37101,1389],{"class":73},[67,37103,1077],{"class":208},[67,37105,33680],{"class":77},[67,37107,37108,37110,37112,37114,37116,37118,37120,37122,37124,37126,37128,37130,37132,37134,37136,37138,37140,37142,37144,37146],{"class":69,"line":33683},[67,37109,32988],{"class":208},[67,37111,864],{"class":77},[67,37113,4312],{"class":84},[67,37115,32996],{"class":208},[67,37117,33694],{"class":84},[67,37119,1752],{"class":208},[67,37121,33650],{"class":73},[67,37123,1802],{"class":208},[67,37125,33703],{"class":84},[67,37127,1752],{"class":208},[67,37129,33650],{"class":73},[67,37131,1802],{"class":208},[67,37133,4312],{"class":84},[67,37135,33714],{"class":77},[67,37137,1389],{"class":73},[67,37139,1077],{"class":208},[67,37141,33721],{"class":77},[67,37143,1389],{"class":73},[67,37145,1077],{"class":208},[67,37147,33680],{"class":77},[67,37149,37150],{"class":69,"line":33730},[67,37151,177],{"emptyLinePlaceholder":176},[67,37153,37154],{"class":69,"line":33735},[67,37155,33738],{"class":202},[67,37157,37158,37160,37162,37164,37166,37168,37170],{"class":69,"line":33741},[67,37159,3218],{"class":73},[67,37161,33746],{"class":77},[67,37163,1389],{"class":73},[67,37165,1077],{"class":208},[67,37167,1796],{"class":77},[67,37169,1816],{"class":73},[67,37171,33757],{"class":77},[67,37173,37174],{"class":69,"line":33760},[67,37175,33763],{"class":202},[67,37177,37178,37180,37182,37184,37186,37188,37190],{"class":69,"line":33766},[67,37179,33769],{"class":77},[67,37181,903],{"class":208},[67,37183,909],{"class":73},[67,37185,33776],{"class":77},[67,37187,1389],{"class":73},[67,37189,1077],{"class":208},[67,37191,33783],{"class":77},[67,37193,37194],{"class":69,"line":33786},[67,37195,33789],{"class":202},[67,37197,37198],{"class":69,"line":33792},[67,37199,33795],{"class":202},[67,37201,37202,37204,37206],{"class":69,"line":33798},[67,37203,33801],{"class":77},[67,37205,909],{"class":73},[67,37207,32851],{"class":77},[67,37209,37210],{"class":69,"line":33808},[67,37211,177],{"emptyLinePlaceholder":176},[67,37213,37214],{"class":69,"line":33813},[67,37215,33816],{"class":202},[67,37217,37218,37220,37222,37224,37226],{"class":69,"line":33819},[67,37219,33822],{"class":77},[67,37221,909],{"class":73},[67,37223,33827],{"class":77},[67,37225,1389],{"class":73},[67,37227,33832],{"class":77},[67,37229,37230,37232,37234,37236,37238,37240,37242,37244,37246,37248,37250,37252,37254,37256,37258,37260,37262,37264],{"class":69,"line":33835},[67,37231,32988],{"class":208},[67,37233,864],{"class":77},[67,37235,33842],{"class":84},[67,37237,1752],{"class":208},[67,37239,33847],{"class":73},[67,37241,1802],{"class":208},[67,37243,1401],{"class":84},[67,37245,1752],{"class":208},[67,37247,33847],{"class":73},[67,37249,1802],{"class":208},[67,37251,33860],{"class":84},[67,37253,33863],{"class":77},[67,37255,33866],{"class":73},[67,37257,1763],{"class":208},[67,37259,33871],{"class":77},[67,37261,1186],{"class":73},[67,37263,1763],{"class":208},[67,37265,31034],{"class":77},[67,37267,37268],{"class":69,"line":33880},[67,37269,37270],{"class":202},"    # 选择最优参数并保存\n",[67,37272,37273],{"class":69,"line":33886},[67,37274,37275],{"class":202},"    # 保存最佳模型权重字典\n",[67,37277,37278,37281,37283],{"class":69,"line":33892},[67,37279,37280],{"class":77},"    torch.save(best_model_wts,",[67,37282,33904],{"class":84},[67,37284,870],{"class":77},[67,37286,37287],{"class":69,"line":33898},[67,37288,33924],{"class":202},[67,37290,37291,37293,37295,37297,37299,37301],{"class":69,"line":33909},[67,37292,33930],{"class":77},[67,37294,909],{"class":73},[67,37296,33935],{"class":77},[67,37298,33938],{"class":5935},[67,37300,909],{"class":73},[67,37302,2269],{"class":77},[67,37304,37305,37307,37309,37311],{"class":69,"line":33915},[67,37306,33948],{"class":84},[67,37308,1715],{"class":77},[67,37310,33953],{"class":208},[67,37312,33956],{"class":77},[67,37314,37315,37317],{"class":69,"line":33921},[67,37316,33962],{"class":84},[67,37318,33965],{"class":77},[67,37320,37321,37323],{"class":69,"line":33927},[67,37322,33971],{"class":84},[67,37324,33974],{"class":77},[67,37326,37327,37329],{"class":69,"line":33945},[67,37328,33980],{"class":84},[67,37330,33983],{"class":77},[67,37332,37333,37335],{"class":69,"line":33959},[67,37334,33989],{"class":84},[67,37336,33992],{"class":77},[67,37338,37339],{"class":69,"line":33968},[67,37340,33998],{"class":77},[67,37342,37343],{"class":69,"line":33977},[67,37344,34004],{"class":202},[67,37346,37347,37349],{"class":69,"line":33986},[67,37348,4810],{"class":73},[67,37350,34012],{"class":77},[67,37352,37353],{"class":69,"line":33995},[67,37354,177],{"emptyLinePlaceholder":176},[67,37356,37357],{"class":69,"line":34001},[67,37358,34023],{"class":202},[67,37360,37361,37363,37365],{"class":69,"line":34007},[67,37362,32484],{"class":73},[67,37364,34031],{"class":112},[67,37366,34034],{"class":77},[67,37368,37369],{"class":69,"line":34015},[67,37370,34040],{"class":202},[67,37372,37373,37375,37377,37379,37381,37383,37385,37387],{"class":69,"line":34020},[67,37374,34046],{"class":77},[67,37376,32230],{"class":5935},[67,37378,909],{"class":73},[67,37380,864],{"class":77},[67,37382,1355],{"class":208},[67,37384,1236],{"class":77},[67,37386,1151],{"class":208},[67,37388,31034],{"class":77},[67,37390,37391],{"class":69,"line":34026},[67,37392,34066],{"class":202},[67,37394,37395],{"class":69,"line":34037},[67,37396,34072],{"class":202},[67,37398,37399],{"class":69,"line":34043},[67,37400,34078],{"class":202},[67,37402,37403,37405,37407,37409,37411,37413,37415],{"class":69,"line":34063},[67,37404,32264],{"class":77},[67,37406,1077],{"class":208},[67,37408,1236],{"class":77},[67,37410,939],{"class":208},[67,37412,1236],{"class":77},[67,37414,1077],{"class":208},[67,37416,870],{"class":77},[67,37418,37419],{"class":69,"line":34069},[67,37420,34101],{"class":202},[67,37422,37423],{"class":69,"line":34075},[67,37424,34107],{"class":202},[67,37426,37427],{"class":69,"line":34081},[67,37428,34113],{"class":202},[67,37430,37431],{"class":69,"line":34098},[67,37432,34119],{"class":202},[67,37434,37435],{"class":69,"line":34104},[67,37436,34125],{"class":202},[67,37438,37439,37441,37443,37445,37447,37449,37451,37453,37455],{"class":69,"line":34110},[67,37440,34131],{"class":77},[67,37442,34134],{"class":84},[67,37444,34137],{"class":77},[67,37446,34140],{"class":84},[67,37448,1236],{"class":77},[67,37450,34145],{"class":5935},[67,37452,909],{"class":73},[67,37454,34150],{"class":84},[67,37456,870],{"class":77},[67,37458,37459,37461,37463,37465,37467,37469,37471,37473,37475],{"class":69,"line":34116},[67,37460,34131],{"class":77},[67,37462,34134],{"class":84},[67,37464,34162],{"class":77},[67,37466,34165],{"class":84},[67,37468,1236],{"class":77},[67,37470,34145],{"class":5935},[67,37472,909],{"class":73},[67,37474,34174],{"class":84},[67,37476,870],{"class":77},[67,37478,37479],{"class":69,"line":34122},[67,37480,34182],{"class":202},[67,37482,37483],{"class":69,"line":34128},[67,37484,34188],{"class":77},[67,37486,37487],{"class":69,"line":34155},[67,37488,34194],{"class":202},[67,37490,37491,37493,37495],{"class":69,"line":34179},[67,37492,34200],{"class":77},[67,37494,34203],{"class":84},[67,37496,870],{"class":77},[67,37498,37499,37501,37503],{"class":69,"line":34185},[67,37500,34211],{"class":77},[67,37502,34214],{"class":84},[67,37504,870],{"class":77},[67,37506,37507],{"class":69,"line":34191},[67,37508,34222],{"class":202},[67,37510,37511,37513,37515,37517,37519,37521,37523],{"class":69,"line":34197},[67,37512,32264],{"class":77},[67,37514,1077],{"class":208},[67,37516,1236],{"class":77},[67,37518,939],{"class":208},[67,37520,1236],{"class":77},[67,37522,939],{"class":208},[67,37524,870],{"class":77},[67,37526,37527,37529,37531,37533,37535,37537,37539,37541,37543],{"class":69,"line":34208},[67,37528,34131],{"class":77},[67,37530,34134],{"class":84},[67,37532,34249],{"class":77},[67,37534,34140],{"class":84},[67,37536,1236],{"class":77},[67,37538,34145],{"class":5935},[67,37540,909],{"class":73},[67,37542,34260],{"class":84},[67,37544,870],{"class":77},[67,37546,37547,37549,37551,37553,37555,37557,37559,37561,37563],{"class":69,"line":34219},[67,37548,34131],{"class":77},[67,37550,34134],{"class":84},[67,37552,34272],{"class":77},[67,37554,34165],{"class":84},[67,37556,1236],{"class":77},[67,37558,34145],{"class":5935},[67,37560,909],{"class":73},[67,37562,34283],{"class":84},[67,37564,870],{"class":77},[67,37566,37567],{"class":69,"line":34225},[67,37568,34291],{"class":202},[67,37570,37571],{"class":69,"line":34242},[67,37572,34188],{"class":77},[67,37574,37575,37577,37579],{"class":69,"line":34265},[67,37576,34200],{"class":77},[67,37578,34134],{"class":84},[67,37580,870],{"class":77},[67,37582,37583,37585,37587],{"class":69,"line":34288},[67,37584,34211],{"class":77},[67,37586,34313],{"class":84},[67,37588,870],{"class":77},[67,37590,37591],{"class":69,"line":34294},[67,37592,34321],{"class":77},[67,37594,37595],{"class":69,"line":34299},[67,37596,177],{"emptyLinePlaceholder":176},[67,37598,37599],{"class":69,"line":34308},[67,37600,34332],{"class":202},[67,37602,37603,37605,37607,37609,37611],{"class":69,"line":34318},[67,37604,2254],{"class":73},[67,37606,31757],{"class":208},[67,37608,3670],{"class":73},[67,37610,31762],{"class":84},[67,37612,4459],{"class":77},[67,37614,37615],{"class":69,"line":34324},[67,37616,34351],{"class":202},[67,37618,37619,37622,37624],{"class":69,"line":34329},[67,37620,37621],{"class":77},"    AlexNet",[67,37623,909],{"class":73},[67,37625,37626],{"class":77},"AlexNet()\n",[67,37628,37629,37631,37633],{"class":69,"line":34335},[67,37630,34368],{"class":77},[67,37632,909],{"class":73},[67,37634,34373],{"class":77},[67,37636,37637,37639,37641,37644,37646,37648,37650],{"class":69,"line":34348},[67,37638,33930],{"class":77},[67,37640,909],{"class":73},[67,37642,37643],{"class":77},"train_model_process(AlexNet,train_dataloader,val_dataloader,",[67,37645,34386],{"class":5935},[67,37647,909],{"class":73},[67,37649,1556],{"class":208},[67,37651,870],{"class":77},[67,37653,37654],{"class":69,"line":34354},[67,37655,34398],{"class":77},[815,37657,37658],{"start":149},[818,37659,34411],{},[57,37661,37663],{"className":30915,"code":37662,"language":30917,"meta":62,"style":62},"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",[64,37664,37665,37671,37681,37691,37701,37705,37715,37725,37736,37740,37744,37748,37756,37772,37782,37798,37808,37822,37826,37836,37846,37856,37862,37866,37870,37878,37882,37898,37906,37910,37914,37922,37930,37934,37938,37942,37946,37952,37956,37966,37974,37982,37986,37990,37994,38002,38006,38022,38026,38030,38034,38046,38050,38062,38066,38070,38082,38086,38096,38100,38104,38116,38120,38128,38132,38136,38144,38148,38156,38160,38164,38168,38172,38176,38192,38200,38204,38208,38256,38262,38266,38276,38284,38292,38296,38300,38304,38308,38316,38320,38336,38340,38348,38356],{"__ignoreMap":62},[67,37666,37667,37669],{"class":69,"line":70},[67,37668,30929],{"class":73},[67,37670,30932],{"class":77},[67,37672,37673,37675,37677,37679],{"class":69,"line":143},[67,37674,30929],{"class":73},[67,37676,31952],{"class":77},[67,37678,31920],{"class":73},[67,37680,31957],{"class":77},[67,37682,37683,37685,37687,37689],{"class":69,"line":149},[67,37684,31274],{"class":73},[67,37686,34439],{"class":77},[67,37688,30929],{"class":73},[67,37690,34444],{"class":77},[67,37692,37693,37695,37697,37699],{"class":69,"line":155},[67,37694,31274],{"class":73},[67,37696,31935],{"class":77},[67,37698,30929],{"class":73},[67,37700,31940],{"class":77},[67,37702,37703],{"class":69,"line":161},[67,37704,34459],{"class":202},[67,37706,37707,37709,37711,37713],{"class":69,"line":167},[67,37708,31274],{"class":73},[67,37710,31905],{"class":77},[67,37712,30929],{"class":73},[67,37714,31910],{"class":77},[67,37716,37717,37719,37721,37723],{"class":69,"line":173},[67,37718,31274],{"class":73},[67,37720,32451],{"class":77},[67,37722,30929],{"class":73},[67,37724,36094],{"class":77},[67,37726,37727,37729,37732,37734],{"class":69,"line":180},[67,37728,31274],{"class":73},[67,37730,37731],{"class":77}," 练习.AlexNet.model ",[67,37733,30929],{"class":73},[67,37735,36094],{"class":77},[67,37737,37738],{"class":69,"line":186},[67,37739,177],{"emptyLinePlaceholder":176},[67,37741,37742],{"class":69,"line":444},[67,37743,177],{"emptyLinePlaceholder":176},[67,37745,37746],{"class":69,"line":2335},[67,37747,34488],{"class":202},[67,37749,37750,37752,37754],{"class":69,"line":2340},[67,37751,32484],{"class":73},[67,37753,34495],{"class":112},[67,37755,32490],{"class":77},[67,37757,37758,37760,37762,37764,37766,37768,37770],{"class":69,"line":2346},[67,37759,34502],{"class":77},[67,37761,909],{"class":73},[67,37763,31992],{"class":77},[67,37765,31995],{"class":5935},[67,37767,909],{"class":73},[67,37769,32000],{"class":84},[67,37771,32003],{"class":77},[67,37773,37774,37776,37778,37780],{"class":69,"line":2351},[67,37775,34519],{"class":5935},[67,37777,909],{"class":73},[67,37779,34524],{"class":208},[67,37781,32003],{"class":77},[67,37783,37784,37786,37788,37790,37792,37794,37796],{"class":69,"line":2365},[67,37785,34531],{"class":5935},[67,37787,909],{"class":73},[67,37789,32030],{"class":77},[67,37791,32033],{"class":5935},[67,37793,909],{"class":73},[67,37795,35986],{"class":208},[67,37797,32041],{"class":77},[67,37799,37800,37802,37804,37806],{"class":69,"line":2370},[67,37801,34548],{"class":5935},[67,37803,909],{"class":73},[67,37805,32013],{"class":208},[67,37807,870],{"class":77},[67,37809,37810,37812,37814,37816,37818,37820],{"class":69,"line":2376},[67,37811,34559],{"class":77},[67,37813,909],{"class":73},[67,37815,32071],{"class":77},[67,37817,32074],{"class":5935},[67,37819,909],{"class":73},[67,37821,34570],{"class":77},[67,37823,37824],{"class":69,"line":2397},[67,37825,34575],{"class":202},[67,37827,37828,37830,37832,37834],{"class":69,"line":2402},[67,37829,34580],{"class":5935},[67,37831,909],{"class":73},[67,37833,1077],{"class":208},[67,37835,32003],{"class":77},[67,37837,37838,37840,37842,37844],{"class":69,"line":2416},[67,37839,34591],{"class":5935},[67,37841,909],{"class":73},[67,37843,32013],{"class":208},[67,37845,32003],{"class":77},[67,37847,37848,37850,37852,37854],{"class":69,"line":2421},[67,37849,34602],{"class":5935},[67,37851,909],{"class":73},[67,37853,1051],{"class":208},[67,37855,870],{"class":77},[67,37857,37858,37860],{"class":69,"line":2450},[67,37859,4810],{"class":73},[67,37861,34615],{"class":77},[67,37863,37864],{"class":69,"line":2455},[67,37865,177],{"emptyLinePlaceholder":176},[67,37867,37868],{"class":69,"line":2472},[67,37869,34624],{"class":202},[67,37871,37872,37874,37876],{"class":69,"line":2477},[67,37873,32484],{"class":73},[67,37875,34631],{"class":112},[67,37877,34634],{"class":77},[67,37879,37880],{"class":69,"line":2482},[67,37881,34639],{"class":202},[67,37883,37884,37886,37888,37890,37892,37894,37896],{"class":69,"line":2487},[67,37885,31774],{"class":77},[67,37887,909],{"class":73},[67,37889,31781],{"class":84},[67,37891,2427],{"class":73},[67,37893,31786],{"class":77},[67,37895,2424],{"class":73},[67,37897,34656],{"class":84},[67,37899,37900,37902,37904],{"class":69,"line":2501},[67,37901,31826],{"class":77},[67,37903,909],{"class":73},[67,37905,32826],{"class":77},[67,37907,37908],{"class":69,"line":2506},[67,37909,177],{"emptyLinePlaceholder":176},[67,37911,37912],{"class":69,"line":3298},[67,37913,34673],{"class":202},[67,37915,37916,37918,37920],{"class":69,"line":3312},[67,37917,34678],{"class":77},[67,37919,909],{"class":73},[67,37921,32879],{"class":208},[67,37923,37924,37926,37928],{"class":69,"line":3320},[67,37925,34687],{"class":77},[67,37927,909],{"class":73},[67,37929,3805],{"class":208},[67,37931,37932],{"class":69,"line":3325},[67,37933,177],{"emptyLinePlaceholder":176},[67,37935,37936],{"class":69,"line":3331},[67,37937,34700],{"class":202},[67,37939,37940],{"class":69,"line":3337},[67,37941,34705],{"class":202},[67,37943,37944],{"class":69,"line":3342},[67,37945,34710],{"class":202},[67,37947,37948,37950],{"class":69,"line":8667},[67,37949,34715],{"class":73},[67,37951,33421],{"class":77},[67,37953,37954],{"class":69,"line":8691},[67,37955,34722],{"class":202},[67,37957,37958,37960,37962,37964],{"class":69,"line":8696},[67,37959,4123],{"class":73},[67,37961,34729],{"class":77},[67,37963,81],{"class":73},[67,37965,34734],{"class":77},[67,37967,37968,37970,37972],{"class":69,"line":8702},[67,37969,34739],{"class":77},[67,37971,909],{"class":73},[67,37973,34744],{"class":77},[67,37975,37976,37978,37980],{"class":69,"line":8729},[67,37977,34749],{"class":77},[67,37979,909],{"class":73},[67,37981,34754],{"class":77},[67,37983,37984],{"class":69,"line":8734},[67,37985,34759],{"class":202},[67,37987,37988],{"class":69,"line":8740},[67,37989,33412],{"class":77},[67,37991,37992],{"class":69,"line":8752},[67,37993,34768],{"class":202},[67,37995,37996,37998,38000],{"class":69,"line":8764},[67,37997,33197],{"class":77},[67,37999,909],{"class":73},[67,38001,34777],{"class":77},[67,38003,38004],{"class":69,"line":8776},[67,38005,34782],{"class":202},[67,38007,38008,38010,38012,38014,38016,38018,38020],{"class":69,"line":10435},[67,38009,33214],{"class":77},[67,38011,909],{"class":73},[67,38013,33219],{"class":77},[67,38015,33222],{"class":5935},[67,38017,909],{"class":73},[67,38019,1077],{"class":208},[67,38021,870],{"class":77},[67,38023,38024],{"class":69,"line":10459},[67,38025,34803],{"class":202},[67,38027,38028],{"class":69,"line":10482},[67,38029,34808],{"class":202},[67,38031,38032],{"class":69,"line":10506},[67,38033,34813],{"class":202},[67,38035,38036,38038,38040,38042,38044],{"class":69,"line":10511},[67,38037,34818],{"class":77},[67,38039,10196],{"class":73},[67,38041,33324],{"class":77},[67,38043,3670],{"class":73},[67,38045,34827],{"class":77},[67,38047,38048],{"class":69,"line":10516},[67,38049,34832],{"class":202},[67,38051,38052,38054,38056,38058,38060],{"class":69,"line":10521},[67,38053,34837],{"class":77},[67,38055,10196],{"class":73},[67,38057,34842],{"class":77},[67,38059,1051],{"class":208},[67,38061,870],{"class":77},[67,38063,38064],{"class":69,"line":10530},[67,38065,177],{"emptyLinePlaceholder":176},[67,38067,38068],{"class":69,"line":10535},[67,38069,34855],{"class":202},[67,38071,38072,38074,38076,38078,38080],{"class":69,"line":10541},[67,38073,34860],{"class":77},[67,38075,909],{"class":73},[67,38077,34865],{"class":77},[67,38079,1440],{"class":73},[67,38081,34870],{"class":77},[67,38083,38084],{"class":69,"line":10562},[67,38085,34875],{"class":202},[67,38087,38088,38090,38092,38094],{"class":69,"line":10568},[67,38089,32988],{"class":208},[67,38091,864],{"class":77},[67,38093,34884],{"class":84},[67,38095,34887],{"class":77},[67,38097,38098],{"class":69,"line":10582},[67,38099,177],{"emptyLinePlaceholder":176},[67,38101,38102],{"class":69,"line":10588},[67,38103,34896],{"class":202},[67,38105,38106,38108,38110,38112,38114],{"class":69,"line":10615},[67,38107,2254],{"class":73},[67,38109,31757],{"class":208},[67,38111,3670],{"class":73},[67,38113,31762],{"class":84},[67,38115,4459],{"class":77},[67,38117,38118],{"class":69,"line":10624},[67,38119,34913],{"class":202},[67,38121,38122,38124,38126],{"class":69,"line":10630},[67,38123,31826],{"class":77},[67,38125,909],{"class":73},[67,38127,37626],{"class":77},[67,38129,38130],{"class":69,"line":10638},[67,38131,34926],{"class":202},[67,38133,38134],{"class":69,"line":10643},[67,38135,34931],{"class":202},[67,38137,38138,38140,38142],{"class":69,"line":17321},[67,38139,34936],{"class":77},[67,38141,34939],{"class":84},[67,38143,31034],{"class":77},[67,38145,38146],{"class":69,"line":17327},[67,38147,34946],{"class":202},[67,38149,38150,38152,38154],{"class":69,"line":17350},[67,38151,34559],{"class":77},[67,38153,909],{"class":73},[67,38155,34955],{"class":77},[67,38157,38158],{"class":69,"line":17356},[67,38159,34960],{"class":202},[67,38161,38162],{"class":69,"line":17379},[67,38163,34965],{"class":77},[67,38165,38166],{"class":69,"line":17393},[67,38167,177],{"emptyLinePlaceholder":176},[67,38169,38170],{"class":69,"line":17413},[67,38171,34974],{"class":202},[67,38173,38174],{"class":69,"line":17419},[67,38175,34979],{"class":202},[67,38177,38178,38180,38182,38184,38186,38188,38190],{"class":69,"line":17430},[67,38179,31774],{"class":77},[67,38181,909],{"class":73},[67,38183,31781],{"class":84},[67,38185,2427],{"class":73},[67,38187,31786],{"class":77},[67,38189,2424],{"class":73},[67,38191,34656],{"class":84},[67,38193,38194,38196,38198],{"class":69,"line":17453},[67,38195,31826],{"class":77},[67,38197,909],{"class":73},[67,38199,32826],{"class":77},[67,38201,38202],{"class":69,"line":17475},[67,38203,35008],{"class":202},[67,38205,38206],{"class":69,"line":17480},[67,38207,35013],{"class":202},[67,38209,38210,38212,38214,38216,38218,38220,38222,38224,38226,38228,38230,38232,38234,38236,38238,38240,38242,38244,38246,38248,38250,38252,38254],{"class":69,"line":17486},[67,38211,35018],{"class":77},[67,38213,909],{"class":73},[67,38215,1746],{"class":77},[67,38217,35025],{"class":84},[67,38219,1236],{"class":77},[67,38221,35030],{"class":84},[67,38223,1236],{"class":77},[67,38225,35035],{"class":84},[67,38227,1236],{"class":77},[67,38229,35040],{"class":84},[67,38231,1236],{"class":77},[67,38233,35045],{"class":84},[67,38235,1236],{"class":77},[67,38237,35050],{"class":84},[67,38239,1236],{"class":77},[67,38241,35055],{"class":84},[67,38243,1236],{"class":77},[67,38245,35060],{"class":84},[67,38247,1236],{"class":77},[67,38249,35065],{"class":84},[67,38251,1236],{"class":77},[67,38253,35070],{"class":84},[67,38255,33783],{"class":77},[67,38257,38258,38260],{"class":69,"line":17500},[67,38259,34715],{"class":73},[67,38261,33421],{"class":77},[67,38263,38264],{"class":69,"line":17513},[67,38265,35083],{"class":202},[67,38267,38268,38270,38272,38274],{"class":69,"line":17518},[67,38269,4123],{"class":73},[67,38271,35090],{"class":77},[67,38273,81],{"class":73},[67,38275,34734],{"class":77},[67,38277,38278,38280,38282],{"class":69,"line":17532},[67,38279,33147],{"class":77},[67,38281,909],{"class":73},[67,38283,33152],{"class":77},[67,38285,38286,38288,38290],{"class":69,"line":17537},[67,38287,33162],{"class":77},[67,38289,909],{"class":73},[67,38291,33167],{"class":77},[67,38293,38294],{"class":69,"line":17543},[67,38295,177],{"emptyLinePlaceholder":176},[67,38297,38298],{"class":69,"line":17548},[67,38299,35119],{"class":202},[67,38301,38302],{"class":69,"line":17562},[67,38303,33412],{"class":77},[67,38305,38306],{"class":69,"line":17567},[67,38307,35128],{"class":202},[67,38309,38310,38312,38314],{"class":69,"line":17572},[67,38311,33197],{"class":77},[67,38313,909],{"class":73},[67,38315,33202],{"class":77},[67,38317,38318],{"class":69,"line":17586},[67,38319,35141],{"class":202},[67,38321,38322,38324,38326,38328,38330,38332,38334],{"class":69,"line":17598},[67,38323,33214],{"class":77},[67,38325,909],{"class":73},[67,38327,33219],{"class":77},[67,38329,33222],{"class":5935},[67,38331,909],{"class":73},[67,38333,1077],{"class":208},[67,38335,870],{"class":77},[67,38337,38338],{"class":69,"line":17603},[67,38339,35162],{"class":202},[67,38341,38342,38344,38346],{"class":69,"line":17616},[67,38343,35167],{"class":77},[67,38345,909],{"class":73},[67,38347,35172],{"class":77},[67,38349,38350,38352,38354],{"class":69,"line":17621},[67,38351,35177],{"class":77},[67,38353,909],{"class":73},[67,38355,35182],{"class":77},[67,38357,38358,38360,38362,38364,38366,38368,38370,38372],{"class":69,"line":17626},[67,38359,35187],{"class":208},[67,38361,864],{"class":77},[67,38363,35192],{"class":84},[67,38365,35195],{"class":77},[67,38367,35198],{"class":84},[67,38369,1236],{"class":77},[67,38371,35203],{"class":84},[67,38373,35206],{"class":77},[14,38375,38377],{"id":38376},"_22vgg","2.2.VGG",[40,38379,38381],{"id":38380},"_221原理","2.2.1.原理",[19,38383,38384],{},[725,38385],{"alt":62,"src":38386},"\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,38388,38389],{},[725,38390],{"alt":62,"src":38391},"\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,38393,38394],{},[725,38395],{"alt":62,"src":38396},"\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,38398,38399],{},"参数详细描述：",[19,38401,38402],{},[725,38403],{"alt":62,"src":38404},"\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,38406,38407],{},[725,38408],{"alt":62,"src":38409},"\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,38411,38412],{},[725,38413],{"alt":62,"src":38414},"\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,38416,38417],{},[725,38418],{"alt":62,"src":38419},"\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,38421,38422],{},[725,38423],{"alt":62,"src":38424},"\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",[40,38426,38428],{"id":38427},"_222代码实现","2.2.2.代码实现",[815,38430,38431],{},[818,38432,38433],{},"网络搭建",[57,38435,38437],{"className":30915,"code":38436,"language":30917,"meta":62,"style":62},"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",[64,38438,38439,38445,38457,38467,38477,38481,38498,38506,38525,38530,38535,38547,38585,38590,38626,38630,38659,38664,38669,38680,38716,38720,38756,38760,38788,38792,38797,38808,38844,38848,38884,38888,38924,38928,38956,38960,38965,38976,39013,39017,39053,39057,39093,39097,39125,39129,39134,39145,39181,39185,39221,39225,39261,39265,39293,39297,39302,39313,39318,39323,39328,39349,39353,39365,39369,39381,39385,39389,39394,39399,39414,39419,39429,39434,39449,39454,39473,39478,39487,39492,39502,39507,39512,39526,39531,39545,39553,39557,39561,39569,39580,39591,39602,39613,39624,39635,39641,39645,39650,39663,39683,39689,39698],{"__ignoreMap":62},[67,38440,38441,38443],{"class":69,"line":70},[67,38442,30929],{"class":73},[67,38444,30932],{"class":77},[67,38446,38447,38449,38452,38454],{"class":69,"line":143},[67,38448,31274],{"class":73},[67,38450,38451],{"class":77}," sympy.core.sympify ",[67,38453,30929],{"class":73},[67,38455,38456],{"class":77}," kernS\n",[67,38458,38459,38461,38463,38465],{"class":69,"line":149},[67,38460,31274],{"class":73},[67,38462,31277],{"class":77},[67,38464,30929],{"class":73},[67,38466,31282],{"class":77},[67,38468,38469,38471,38473,38475],{"class":69,"line":155},[67,38470,31274],{"class":73},[67,38472,31294],{"class":77},[67,38474,30929],{"class":73},[67,38476,31299],{"class":77},[67,38478,38479],{"class":69,"line":161},[67,38480,177],{"emptyLinePlaceholder":176},[67,38482,38483,38485,38488,38490,38492,38494,38496],{"class":69,"line":167},[67,38484,15411],{"class":73},[67,38486,38487],{"class":112}," VGG16",[67,38489,864],{"class":77},[67,38491,31315],{"class":112},[67,38493,240],{"class":77},[67,38495,31320],{"class":112},[67,38497,31323],{"class":77},[67,38499,38500,38502,38504],{"class":69,"line":173},[67,38501,31338],{"class":73},[67,38503,31341],{"class":208},[67,38505,31344],{"class":77},[67,38507,38508,38510,38512,38515,38517,38519,38521,38523],{"class":69,"line":180},[67,38509,31354],{"class":208},[67,38511,864],{"class":77},[67,38513,38514],{"class":208},"VGG16",[67,38516,13153],{"class":77},[67,38518,31360],{"class":208},[67,38520,31363],{"class":77},[67,38522,31366],{"class":208},[67,38524,2698],{"class":77},[67,38526,38527],{"class":69,"line":186},[67,38528,38529],{"class":202},"        # 按照块来进行搭建神经网络层,按照序列来写\n",[67,38531,38532],{"class":69,"line":444},[67,38533,38534],{"class":202},"        # 这里用的是灰度图\n",[67,38536,38537,38539,38542,38544],{"class":69,"line":2335},[67,38538,31382],{"class":208},[67,38540,38541],{"class":77},".block1",[67,38543,909],{"class":73},[67,38545,38546],{"class":77},"nn.Sequential(\n",[67,38548,38549,38552,38554,38556,38558,38560,38562,38564,38566,38568,38570,38572,38574,38576,38578,38580,38582],{"class":69,"line":2340},[67,38550,38551],{"class":77},"            nn.Conv2d(",[67,38553,31393],{"class":5935},[67,38555,909],{"class":73},[67,38557,1077],{"class":208},[67,38559,1236],{"class":77},[67,38561,31402],{"class":5935},[67,38563,909],{"class":73},[67,38565,1063],{"class":208},[67,38567,1236],{"class":77},[67,38569,31411],{"class":5935},[67,38571,909],{"class":73},[67,38573,933],{"class":208},[67,38575,1236],{"class":77},[67,38577,31420],{"class":5935},[67,38579,909],{"class":73},[67,38581,1077],{"class":208},[67,38583,38584],{"class":77},"),\n",[67,38586,38587],{"class":69,"line":2346},[67,38588,38589],{"class":77},"            nn.ReLU(),\n",[67,38591,38592,38594,38596,38598,38600,38602,38604,38606,38608,38610,38612,38614,38616,38618,38620,38622,38624],{"class":69,"line":2351},[67,38593,38551],{"class":77},[67,38595,31393],{"class":5935},[67,38597,909],{"class":73},[67,38599,1063],{"class":208},[67,38601,1236],{"class":77},[67,38603,31402],{"class":5935},[67,38605,909],{"class":73},[67,38607,1063],{"class":208},[67,38609,1236],{"class":77},[67,38611,31411],{"class":5935},[67,38613,909],{"class":73},[67,38615,933],{"class":208},[67,38617,1236],{"class":77},[67,38619,31420],{"class":5935},[67,38621,909],{"class":73},[67,38623,1077],{"class":208},[67,38625,38584],{"class":77},[67,38627,38628],{"class":69,"line":2365},[67,38629,38589],{"class":77},[67,38631,38632,38635,38637,38639,38641,38643,38645,38647,38649,38651,38653,38655,38657],{"class":69,"line":2370},[67,38633,38634],{"class":77},"            nn.MaxPool2d(",[67,38636,31411],{"class":5935},[67,38638,909],{"class":73},[67,38640,939],{"class":208},[67,38642,1236],{"class":77},[67,38644,31466],{"class":5935},[67,38646,909],{"class":73},[67,38648,939],{"class":208},[67,38650,1236],{"class":77},[67,38652,31420],{"class":5935},[67,38654,909],{"class":73},[67,38656,1051],{"class":208},[67,38658,870],{"class":77},[67,38660,38661],{"class":69,"line":2376},[67,38662,38663],{"class":77},"        )\n",[67,38665,38666],{"class":69,"line":2397},[67,38667,38668],{"class":202},"        # 第二层\n",[67,38670,38671,38673,38676,38678],{"class":69,"line":2402},[67,38672,31382],{"class":208},[67,38674,38675],{"class":77},".block2",[67,38677,909],{"class":73},[67,38679,38546],{"class":77},[67,38681,38682,38684,38686,38688,38690,38692,38694,38696,38698,38700,38702,38704,38706,38708,38710,38712,38714],{"class":69,"line":2416},[67,38683,38551],{"class":77},[67,38685,31393],{"class":5935},[67,38687,909],{"class":73},[67,38689,1063],{"class":208},[67,38691,1236],{"class":77},[67,38693,31402],{"class":5935},[67,38695,909],{"class":73},[67,38697,32607],{"class":208},[67,38699,1236],{"class":77},[67,38701,31411],{"class":5935},[67,38703,909],{"class":73},[67,38705,933],{"class":208},[67,38707,1236],{"class":77},[67,38709,31420],{"class":5935},[67,38711,909],{"class":73},[67,38713,1077],{"class":208},[67,38715,38584],{"class":77},[67,38717,38718],{"class":69,"line":2421},[67,38719,38589],{"class":77},[67,38721,38722,38724,38726,38728,38730,38732,38734,38736,38738,38740,38742,38744,38746,38748,38750,38752,38754],{"class":69,"line":2450},[67,38723,38551],{"class":77},[67,38725,31393],{"class":5935},[67,38727,909],{"class":73},[67,38729,32607],{"class":208},[67,38731,1236],{"class":77},[67,38733,31402],{"class":5935},[67,38735,909],{"class":73},[67,38737,32607],{"class":208},[67,38739,1236],{"class":77},[67,38741,31411],{"class":5935},[67,38743,909],{"class":73},[67,38745,933],{"class":208},[67,38747,1236],{"class":77},[67,38749,31420],{"class":5935},[67,38751,909],{"class":73},[67,38753,1077],{"class":208},[67,38755,38584],{"class":77},[67,38757,38758],{"class":69,"line":2455},[67,38759,38589],{"class":77},[67,38761,38762,38764,38766,38768,38770,38772,38774,38776,38778,38780,38782,38784,38786],{"class":69,"line":2472},[67,38763,38634],{"class":77},[67,38765,31411],{"class":5935},[67,38767,909],{"class":73},[67,38769,939],{"class":208},[67,38771,1236],{"class":77},[67,38773,31466],{"class":5935},[67,38775,909],{"class":73},[67,38777,939],{"class":208},[67,38779,1236],{"class":77},[67,38781,31420],{"class":5935},[67,38783,909],{"class":73},[67,38785,1051],{"class":208},[67,38787,870],{"class":77},[67,38789,38790],{"class":69,"line":2477},[67,38791,38663],{"class":77},[67,38793,38794],{"class":69,"line":2482},[67,38795,38796],{"class":202},"        # 第三层\n",[67,38798,38799,38801,38804,38806],{"class":69,"line":2487},[67,38800,31382],{"class":208},[67,38802,38803],{"class":77},".block3",[67,38805,909],{"class":73},[67,38807,38546],{"class":77},[67,38809,38810,38812,38814,38816,38818,38820,38822,38824,38826,38828,38830,38832,38834,38836,38838,38840,38842],{"class":69,"line":2501},[67,38811,38551],{"class":77},[67,38813,31393],{"class":5935},[67,38815,909],{"class":73},[67,38817,32607],{"class":208},[67,38819,1236],{"class":77},[67,38821,31402],{"class":5935},[67,38823,909],{"class":73},[67,38825,35407],{"class":208},[67,38827,1236],{"class":77},[67,38829,31411],{"class":5935},[67,38831,909],{"class":73},[67,38833,933],{"class":208},[67,38835,1236],{"class":77},[67,38837,31420],{"class":5935},[67,38839,909],{"class":73},[67,38841,1077],{"class":208},[67,38843,38584],{"class":77},[67,38845,38846],{"class":69,"line":2506},[67,38847,38589],{"class":77},[67,38849,38850,38852,38854,38856,38858,38860,38862,38864,38866,38868,38870,38872,38874,38876,38878,38880,38882],{"class":69,"line":3298},[67,38851,38551],{"class":77},[67,38853,31393],{"class":5935},[67,38855,909],{"class":73},[67,38857,35407],{"class":208},[67,38859,1236],{"class":77},[67,38861,31402],{"class":5935},[67,38863,909],{"class":73},[67,38865,35407],{"class":208},[67,38867,1236],{"class":77},[67,38869,31411],{"class":5935},[67,38871,909],{"class":73},[67,38873,933],{"class":208},[67,38875,1236],{"class":77},[67,38877,31420],{"class":5935},[67,38879,909],{"class":73},[67,38881,1077],{"class":208},[67,38883,38584],{"class":77},[67,38885,38886],{"class":69,"line":3312},[67,38887,38589],{"class":77},[67,38889,38890,38892,38894,38896,38898,38900,38902,38904,38906,38908,38910,38912,38914,38916,38918,38920,38922],{"class":69,"line":3320},[67,38891,38551],{"class":77},[67,38893,31393],{"class":5935},[67,38895,909],{"class":73},[67,38897,35407],{"class":208},[67,38899,1236],{"class":77},[67,38901,31402],{"class":5935},[67,38903,909],{"class":73},[67,38905,35407],{"class":208},[67,38907,1236],{"class":77},[67,38909,31411],{"class":5935},[67,38911,909],{"class":73},[67,38913,933],{"class":208},[67,38915,1236],{"class":77},[67,38917,31420],{"class":5935},[67,38919,909],{"class":73},[67,38921,1077],{"class":208},[67,38923,38584],{"class":77},[67,38925,38926],{"class":69,"line":3325},[67,38927,38589],{"class":77},[67,38929,38930,38932,38934,38936,38938,38940,38942,38944,38946,38948,38950,38952,38954],{"class":69,"line":3331},[67,38931,38634],{"class":77},[67,38933,31411],{"class":5935},[67,38935,909],{"class":73},[67,38937,939],{"class":208},[67,38939,1236],{"class":77},[67,38941,31466],{"class":5935},[67,38943,909],{"class":73},[67,38945,939],{"class":208},[67,38947,1236],{"class":77},[67,38949,31420],{"class":5935},[67,38951,909],{"class":73},[67,38953,1051],{"class":208},[67,38955,870],{"class":77},[67,38957,38958],{"class":69,"line":3337},[67,38959,38663],{"class":77},[67,38961,38962],{"class":69,"line":3342},[67,38963,38964],{"class":202},"        # 第四层\n",[67,38966,38967,38969,38972,38974],{"class":69,"line":8667},[67,38968,31382],{"class":208},[67,38970,38971],{"class":77},".block4",[67,38973,909],{"class":73},[67,38975,38546],{"class":77},[67,38977,38978,38980,38982,38984,38986,38988,38990,38992,38995,38997,38999,39001,39003,39005,39007,39009,39011],{"class":69,"line":8691},[67,38979,38551],{"class":77},[67,38981,31393],{"class":5935},[67,38983,909],{"class":73},[67,38985,35407],{"class":208},[67,38987,1236],{"class":77},[67,38989,31402],{"class":5935},[67,38991,909],{"class":73},[67,38993,38994],{"class":208},"512",[67,38996,1236],{"class":77},[67,38998,31411],{"class":5935},[67,39000,909],{"class":73},[67,39002,933],{"class":208},[67,39004,1236],{"class":77},[67,39006,31420],{"class":5935},[67,39008,909],{"class":73},[67,39010,1077],{"class":208},[67,39012,38584],{"class":77},[67,39014,39015],{"class":69,"line":8696},[67,39016,38589],{"class":77},[67,39018,39019,39021,39023,39025,39027,39029,39031,39033,39035,39037,39039,39041,39043,39045,39047,39049,39051],{"class":69,"line":8702},[67,39020,38551],{"class":77},[67,39022,31393],{"class":5935},[67,39024,909],{"class":73},[67,39026,38994],{"class":208},[67,39028,1236],{"class":77},[67,39030,31402],{"class":5935},[67,39032,909],{"class":73},[67,39034,38994],{"class":208},[67,39036,1236],{"class":77},[67,39038,31411],{"class":5935},[67,39040,909],{"class":73},[67,39042,933],{"class":208},[67,39044,1236],{"class":77},[67,39046,31420],{"class":5935},[67,39048,909],{"class":73},[67,39050,1077],{"class":208},[67,39052,38584],{"class":77},[67,39054,39055],{"class":69,"line":8729},[67,39056,38589],{"class":77},[67,39058,39059,39061,39063,39065,39067,39069,39071,39073,39075,39077,39079,39081,39083,39085,39087,39089,39091],{"class":69,"line":8734},[67,39060,38551],{"class":77},[67,39062,31393],{"class":5935},[67,39064,909],{"class":73},[67,39066,38994],{"class":208},[67,39068,1236],{"class":77},[67,39070,31402],{"class":5935},[67,39072,909],{"class":73},[67,39074,38994],{"class":208},[67,39076,1236],{"class":77},[67,39078,31411],{"class":5935},[67,39080,909],{"class":73},[67,39082,933],{"class":208},[67,39084,1236],{"class":77},[67,39086,31420],{"class":5935},[67,39088,909],{"class":73},[67,39090,1077],{"class":208},[67,39092,38584],{"class":77},[67,39094,39095],{"class":69,"line":8740},[67,39096,38589],{"class":77},[67,39098,39099,39101,39103,39105,39107,39109,39111,39113,39115,39117,39119,39121,39123],{"class":69,"line":8752},[67,39100,38634],{"class":77},[67,39102,31411],{"class":5935},[67,39104,909],{"class":73},[67,39106,939],{"class":208},[67,39108,1236],{"class":77},[67,39110,31466],{"class":5935},[67,39112,909],{"class":73},[67,39114,939],{"class":208},[67,39116,1236],{"class":77},[67,39118,31420],{"class":5935},[67,39120,909],{"class":73},[67,39122,1051],{"class":208},[67,39124,870],{"class":77},[67,39126,39127],{"class":69,"line":8764},[67,39128,38663],{"class":77},[67,39130,39131],{"class":69,"line":8776},[67,39132,39133],{"class":202},"        # 第五层\n",[67,39135,39136,39138,39141,39143],{"class":69,"line":10435},[67,39137,31382],{"class":208},[67,39139,39140],{"class":77},".block5",[67,39142,909],{"class":73},[67,39144,38546],{"class":77},[67,39146,39147,39149,39151,39153,39155,39157,39159,39161,39163,39165,39167,39169,39171,39173,39175,39177,39179],{"class":69,"line":10459},[67,39148,38551],{"class":77},[67,39150,31393],{"class":5935},[67,39152,909],{"class":73},[67,39154,38994],{"class":208},[67,39156,1236],{"class":77},[67,39158,31402],{"class":5935},[67,39160,909],{"class":73},[67,39162,38994],{"class":208},[67,39164,1236],{"class":77},[67,39166,31411],{"class":5935},[67,39168,909],{"class":73},[67,39170,933],{"class":208},[67,39172,1236],{"class":77},[67,39174,31420],{"class":5935},[67,39176,909],{"class":73},[67,39178,1077],{"class":208},[67,39180,38584],{"class":77},[67,39182,39183],{"class":69,"line":10482},[67,39184,38589],{"class":77},[67,39186,39187,39189,39191,39193,39195,39197,39199,39201,39203,39205,39207,39209,39211,39213,39215,39217,39219],{"class":69,"line":10506},[67,39188,38551],{"class":77},[67,39190,31393],{"class":5935},[67,39192,909],{"class":73},[67,39194,38994],{"class":208},[67,39196,1236],{"class":77},[67,39198,31402],{"class":5935},[67,39200,909],{"class":73},[67,39202,38994],{"class":208},[67,39204,1236],{"class":77},[67,39206,31411],{"class":5935},[67,39208,909],{"class":73},[67,39210,933],{"class":208},[67,39212,1236],{"class":77},[67,39214,31420],{"class":5935},[67,39216,909],{"class":73},[67,39218,1077],{"class":208},[67,39220,38584],{"class":77},[67,39222,39223],{"class":69,"line":10511},[67,39224,38589],{"class":77},[67,39226,39227,39229,39231,39233,39235,39237,39239,39241,39243,39245,39247,39249,39251,39253,39255,39257,39259],{"class":69,"line":10516},[67,39228,38551],{"class":77},[67,39230,31393],{"class":5935},[67,39232,909],{"class":73},[67,39234,38994],{"class":208},[67,39236,1236],{"class":77},[67,39238,31402],{"class":5935},[67,39240,909],{"class":73},[67,39242,38994],{"class":208},[67,39244,1236],{"class":77},[67,39246,31411],{"class":5935},[67,39248,909],{"class":73},[67,39250,933],{"class":208},[67,39252,1236],{"class":77},[67,39254,31420],{"class":5935},[67,39256,909],{"class":73},[67,39258,1077],{"class":208},[67,39260,38584],{"class":77},[67,39262,39263],{"class":69,"line":10521},[67,39264,38589],{"class":77},[67,39266,39267,39269,39271,39273,39275,39277,39279,39281,39283,39285,39287,39289,39291],{"class":69,"line":10530},[67,39268,38634],{"class":77},[67,39270,31411],{"class":5935},[67,39272,909],{"class":73},[67,39274,939],{"class":208},[67,39276,1236],{"class":77},[67,39278,31466],{"class":5935},[67,39280,909],{"class":73},[67,39282,939],{"class":208},[67,39284,1236],{"class":77},[67,39286,31420],{"class":5935},[67,39288,909],{"class":73},[67,39290,1051],{"class":208},[67,39292,870],{"class":77},[67,39294,39295],{"class":69,"line":10535},[67,39296,38663],{"class":77},[67,39298,39299],{"class":69,"line":10541},[67,39300,39301],{"class":202},"        # 全连接层\n",[67,39303,39304,39306,39309,39311],{"class":69,"line":10562},[67,39305,31382],{"class":208},[67,39307,39308],{"class":77},".block6",[67,39310,909],{"class":73},[67,39312,38546],{"class":77},[67,39314,39315],{"class":69,"line":10568},[67,39316,39317],{"class":202},"            # 平展操作\n",[67,39319,39320],{"class":69,"line":10582},[67,39321,39322],{"class":202},"            # 这里为了适应笔记本显存过低4g，然后不进行1000分类，而是进行10分类，将全连接层进行修改\n",[67,39324,39325],{"class":69,"line":10588},[67,39326,39327],{"class":77},"            nn.Flatten(),\n",[67,39329,39330,39333,39335,39337,39339,39341,39343,39345,39347],{"class":69,"line":10615},[67,39331,39332],{"class":77},"            nn.Linear(",[67,39334,1227],{"class":208},[67,39336,1312],{"class":73},[67,39338,1227],{"class":208},[67,39340,1312],{"class":73},[67,39342,38994],{"class":208},[67,39344,1236],{"class":77},[67,39346,35407],{"class":208},[67,39348,38584],{"class":77},[67,39350,39351],{"class":69,"line":10624},[67,39352,38589],{"class":77},[67,39354,39355,39357,39359,39361,39363],{"class":69,"line":10630},[67,39356,39332],{"class":77},[67,39358,35407],{"class":208},[67,39360,1236],{"class":77},[67,39362,32607],{"class":208},[67,39364,38584],{"class":77},[67,39366,39367],{"class":69,"line":10638},[67,39368,38589],{"class":77},[67,39370,39371,39373,39375,39377,39379],{"class":69,"line":10643},[67,39372,39332],{"class":77},[67,39374,32607],{"class":208},[67,39376,1236],{"class":77},[67,39378,1303],{"class":208},[67,39380,870],{"class":77},[67,39382,39383],{"class":69,"line":17321},[67,39384,38663],{"class":77},[67,39386,39387],{"class":69,"line":17327},[67,39388,177],{"emptyLinePlaceholder":176},[67,39390,39391],{"class":69,"line":17350},[67,39392,39393],{"class":202},"        # 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[67,39395,39396],{"class":69,"line":17356},[67,39397,39398],{"class":202},"        # 循环遍历模型\n",[67,39400,39401,39403,39406,39408,39411],{"class":69,"line":17379},[67,39402,4123],{"class":73},[67,39404,39405],{"class":77}," m ",[67,39407,81],{"class":73},[67,39409,39410],{"class":208}," self",[67,39412,39413],{"class":77},".modules():\n",[67,39415,39416],{"class":69,"line":17393},[67,39417,39418],{"class":202},"            # print(m)\n",[67,39420,39421,39423,39426],{"class":69,"line":17413},[67,39422,5361],{"class":73},[67,39424,39425],{"class":208}," isinstance",[67,39427,39428],{"class":77},"(m,nn.Conv2d):\n",[67,39430,39431],{"class":69,"line":17419},[67,39432,39433],{"class":202},"                # 凯明初始化,初始化w,对应的激活函数是relu\n",[67,39435,39436,39439,39442,39444,39447],{"class":69,"line":17430},[67,39437,39438],{"class":77},"                nn.init.kaiming_normal_(m.weight,",[67,39440,39441],{"class":5935},"nonlinearity",[67,39443,909],{"class":73},[67,39445,39446],{"class":84},"'relu'",[67,39448,870],{"class":77},[67,39450,39451],{"class":69,"line":17453},[67,39452,39453],{"class":202},"                # 判断b参数是否存在\n",[67,39455,39456,39459,39462,39465,39468,39471],{"class":69,"line":17475},[67,39457,39458],{"class":73},"                if",[67,39460,39461],{"class":77}," m.bias ",[67,39463,39464],{"class":73},"is",[67,39466,39467],{"class":73}," not",[67,39469,39470],{"class":208}," None",[67,39472,4459],{"class":77},[67,39474,39475],{"class":69,"line":17480},[67,39476,39477],{"class":202},"                    # 如果参数不存在的化初始化b=0\n",[67,39479,39480,39483,39485],{"class":69,"line":17486},[67,39481,39482],{"class":77},"                    nn.init.constant_(m.bias,",[67,39484,1051],{"class":208},[67,39486,870],{"class":77},[67,39488,39489],{"class":69,"line":17500},[67,39490,39491],{"class":202},"            # 全连接层初始化\n",[67,39493,39494,39497,39499],{"class":69,"line":17513},[67,39495,39496],{"class":73},"            elif",[67,39498,39425],{"class":208},[67,39500,39501],{"class":77},"(m,nn.Linear):\n",[67,39503,39504],{"class":69,"line":17518},[67,39505,39506],{"class":202},"                # 这个初始化方法是利用的是正太分布的方式\n",[67,39508,39509],{"class":69,"line":17532},[67,39510,39511],{"class":202},"                # 均值为0，方差为0.01\n",[67,39513,39514,39517,39519,39521,39524],{"class":69,"line":17537},[67,39515,39516],{"class":77},"                nn.init.normal_(m.weight,",[67,39518,1051],{"class":208},[67,39520,1236],{"class":77},[67,39522,39523],{"class":208},"0.01",[67,39525,870],{"class":77},[67,39527,39528],{"class":69,"line":17543},[67,39529,39530],{"class":202},"                # 初始化b参数\n",[67,39532,39533,39535,39537,39539,39541,39543],{"class":69,"line":17548},[67,39534,39458],{"class":73},[67,39536,39461],{"class":77},[67,39538,39464],{"class":73},[67,39540,39467],{"class":73},[67,39542,39470],{"class":208},[67,39544,4459],{"class":77},[67,39546,39547,39549,39551],{"class":69,"line":17562},[67,39548,39482],{"class":77},[67,39550,1051],{"class":208},[67,39552,870],{"class":77},[67,39554,39555],{"class":69,"line":17567},[67,39556,177],{"emptyLinePlaceholder":176},[67,39558,39559],{"class":69,"line":17572},[67,39560,35702],{"class":202},[67,39562,39563,39565,39567],{"class":69,"line":17586},[67,39564,31338],{"class":73},[67,39566,31630],{"class":112},[67,39568,31633],{"class":77},[67,39570,39571,39573,39575,39577],{"class":69,"line":17598},[67,39572,31638],{"class":77},[67,39574,909],{"class":73},[67,39576,31360],{"class":208},[67,39578,39579],{"class":77},".block1(x)\n",[67,39581,39582,39584,39586,39588],{"class":69,"line":17603},[67,39583,31638],{"class":77},[67,39585,909],{"class":73},[67,39587,31360],{"class":208},[67,39589,39590],{"class":77},".block2(x)\n",[67,39592,39593,39595,39597,39599],{"class":69,"line":17616},[67,39594,31638],{"class":77},[67,39596,909],{"class":73},[67,39598,31360],{"class":208},[67,39600,39601],{"class":77},".block3(x)\n",[67,39603,39604,39606,39608,39610],{"class":69,"line":17621},[67,39605,31638],{"class":77},[67,39607,909],{"class":73},[67,39609,31360],{"class":208},[67,39611,39612],{"class":77},".block4(x)\n",[67,39614,39615,39617,39619,39621],{"class":69,"line":17626},[67,39616,31638],{"class":77},[67,39618,909],{"class":73},[67,39620,31360],{"class":208},[67,39622,39623],{"class":77},".block5(x)\n",[67,39625,39626,39628,39630,39632],{"class":69,"line":17631},[67,39627,31638],{"class":77},[67,39629,909],{"class":73},[67,39631,31360],{"class":208},[67,39633,39634],{"class":77},".block6(x)\n",[67,39636,39637,39639],{"class":69,"line":17644},[67,39638,15469],{"class":73},[67,39640,31746],{"class":77},[67,39642,39643],{"class":69,"line":17649},[67,39644,177],{"emptyLinePlaceholder":176},[67,39646,39647],{"class":69,"line":33170},[67,39648,39649],{"class":202},"# 验证模型\n",[67,39651,39652,39654,39656,39658,39661],{"class":69,"line":33176},[67,39653,2254],{"class":73},[67,39655,31757],{"class":208},[67,39657,3670],{"class":73},[67,39659,39660],{"class":84},"'__main__'",[67,39662,4459],{"class":77},[67,39664,39665,39667,39669,39671,39673,39675,39677,39679,39681],{"class":69,"line":33182},[67,39666,31774],{"class":77},[67,39668,909],{"class":73},[67,39670,30988],{"class":77},[67,39672,31781],{"class":84},[67,39674,2427],{"class":73},[67,39676,31786],{"class":77},[67,39678,2424],{"class":73},[67,39680,31013],{"class":84},[67,39682,870],{"class":77},[67,39684,39685,39687],{"class":69,"line":33188},[67,39686,31836],{"class":208},[67,39688,31022],{"class":77},[67,39690,39691,39693,39695],{"class":69,"line":33194},[67,39692,31826],{"class":77},[67,39694,909],{"class":73},[67,39696,39697],{"class":77},"VGG16().to(device)\n",[67,39699,39700,39702,39704,39706,39708,39710,39712,39714],{"class":69,"line":33205},[67,39701,31836],{"class":208},[67,39703,31839],{"class":77},[67,39705,1077],{"class":208},[67,39707,1236],{"class":77},[67,39709,32038],{"class":208},[67,39711,1236],{"class":77},[67,39713,32038],{"class":208},[67,39715,31852],{"class":77},[815,39717,39718],{"start":143},[818,39719,39720],{},"训练代码",[19,39722,39723],{},"模型不收敛的原因:①批次过低；②w权重的初始值过大或过小",[19,39725,39726],{},"解决方式:",[19,39728,39729],{},"①权重初始化",[57,39731,39733],{"className":30915,"code":39732,"language":30917,"meta":62,"style":62},"# 权重初始化,保证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",[64,39734,39735,39740,39745,39757,39762,39770,39775,39788,39793,39807,39812,39821,39826,39835,39840,39845,39858,39863,39877],{"__ignoreMap":62},[67,39736,39737],{"class":69,"line":70},[67,39738,39739],{"class":202},"# 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[67,39741,39742],{"class":69,"line":143},[67,39743,39744],{"class":202},"# 循环遍历模型\n",[67,39746,39747,39749,39751,39753,39755],{"class":69,"line":149},[67,39748,74],{"class":73},[67,39750,39405],{"class":77},[67,39752,81],{"class":73},[67,39754,39410],{"class":208},[67,39756,39413],{"class":77},[67,39758,39759],{"class":69,"line":155},[67,39760,39761],{"class":202},"    # print(m)\n",[67,39763,39764,39766,39768],{"class":69,"line":161},[67,39765,3821],{"class":73},[67,39767,39425],{"class":208},[67,39769,39428],{"class":77},[67,39771,39772],{"class":69,"line":167},[67,39773,39774],{"class":202},"        # 凯明初始化,初始化w,对应的激活函数是relu\n",[67,39776,39777,39780,39782,39784,39786],{"class":69,"line":173},[67,39778,39779],{"class":77},"        nn.init.kaiming_normal_(m.weight,",[67,39781,39441],{"class":5935},[67,39783,909],{"class":73},[67,39785,39446],{"class":84},[67,39787,870],{"class":77},[67,39789,39790],{"class":69,"line":180},[67,39791,39792],{"class":202},"        # 判断b参数是否存在\n",[67,39794,39795,39797,39799,39801,39803,39805],{"class":69,"line":186},[67,39796,3218],{"class":73},[67,39798,39461],{"class":77},[67,39800,39464],{"class":73},[67,39802,39467],{"class":73},[67,39804,39470],{"class":208},[67,39806,4459],{"class":77},[67,39808,39809],{"class":69,"line":444},[67,39810,39811],{"class":202},"            # 如果参数不存在的化初始化b=0\n",[67,39813,39814,39817,39819],{"class":69,"line":2335},[67,39815,39816],{"class":77},"            nn.init.constant_(m.bias,",[67,39818,1051],{"class":208},[67,39820,870],{"class":77},[67,39822,39823],{"class":69,"line":2340},[67,39824,39825],{"class":202},"    # 全连接层初始化\n",[67,39827,39828,39831,39833],{"class":69,"line":2346},[67,39829,39830],{"class":73},"    elif",[67,39832,39425],{"class":208},[67,39834,39501],{"class":77},[67,39836,39837],{"class":69,"line":2351},[67,39838,39839],{"class":202},"        # 这个初始化方法是利用的是正太分布的方式\n",[67,39841,39842],{"class":69,"line":2365},[67,39843,39844],{"class":202},"        # 均值为0，方差为0.01\n",[67,39846,39847,39850,39852,39854,39856],{"class":69,"line":2370},[67,39848,39849],{"class":77},"        nn.init.normal_(m.weight,",[67,39851,1051],{"class":208},[67,39853,1236],{"class":77},[67,39855,39523],{"class":208},[67,39857,870],{"class":77},[67,39859,39860],{"class":69,"line":2376},[67,39861,39862],{"class":202},"        # 初始化b参数\n",[67,39864,39865,39867,39869,39871,39873,39875],{"class":69,"line":2397},[67,39866,3218],{"class":73},[67,39868,39461],{"class":77},[67,39870,39464],{"class":73},[67,39872,39467],{"class":73},[67,39874,39470],{"class":208},[67,39876,4459],{"class":77},[67,39878,39879,39881,39883],{"class":69,"line":2402},[67,39880,39816],{"class":77},[67,39882,1051],{"class":208},[67,39884,870],{"class":77},[19,39886,39887],{},"②尽可能地增加批次",[19,39889,39890],{},"训练完整代码：",[57,39892,39893],{"className":30915,"code":38436,"language":30917,"meta":62,"style":62},[64,39894,39895,39901,39911,39921,39931,39935,39951,39959,39977,39981,39985,39995,40031,40035,40071,40075,40103,40107,40111,40121,40157,40161,40197,40201,40229,40233,40237,40247,40283,40287,40323,40327,40363,40367,40395,40399,40403,40413,40449,40453,40489,40493,40529,40533,40561,40565,40569,40579,40615,40619,40655,40659,40695,40699,40727,40731,40735,40745,40749,40753,40757,40777,40781,40793,40797,40809,40813,40817,40821,40825,40837,40841,40849,40853,40865,40869,40883,40887,40895,40899,40907,40911,40915,40927,40931,40945,40953,40957,40961,40969,40979,40989,40999,41009,41019,41029,41035,41039,41043,41055,41075,41081,41089],{"__ignoreMap":62},[67,39896,39897,39899],{"class":69,"line":70},[67,39898,30929],{"class":73},[67,39900,30932],{"class":77},[67,39902,39903,39905,39907,39909],{"class":69,"line":143},[67,39904,31274],{"class":73},[67,39906,38451],{"class":77},[67,39908,30929],{"class":73},[67,39910,38456],{"class":77},[67,39912,39913,39915,39917,39919],{"class":69,"line":149},[67,39914,31274],{"class":73},[67,39916,31277],{"class":77},[67,39918,30929],{"class":73},[67,39920,31282],{"class":77},[67,39922,39923,39925,39927,39929],{"class":69,"line":155},[67,39924,31274],{"class":73},[67,39926,31294],{"class":77},[67,39928,30929],{"class":73},[67,39930,31299],{"class":77},[67,39932,39933],{"class":69,"line":161},[67,39934,177],{"emptyLinePlaceholder":176},[67,39936,39937,39939,39941,39943,39945,39947,39949],{"class":69,"line":167},[67,39938,15411],{"class":73},[67,39940,38487],{"class":112},[67,39942,864],{"class":77},[67,39944,31315],{"class":112},[67,39946,240],{"class":77},[67,39948,31320],{"class":112},[67,39950,31323],{"class":77},[67,39952,39953,39955,39957],{"class":69,"line":173},[67,39954,31338],{"class":73},[67,39956,31341],{"class":208},[67,39958,31344],{"class":77},[67,39960,39961,39963,39965,39967,39969,39971,39973,39975],{"class":69,"line":180},[67,39962,31354],{"class":208},[67,39964,864],{"class":77},[67,39966,38514],{"class":208},[67,39968,13153],{"class":77},[67,39970,31360],{"class":208},[67,39972,31363],{"class":77},[67,39974,31366],{"class":208},[67,39976,2698],{"class":77},[67,39978,39979],{"class":69,"line":186},[67,39980,38529],{"class":202},[67,39982,39983],{"class":69,"line":444},[67,39984,38534],{"class":202},[67,39986,39987,39989,39991,39993],{"class":69,"line":2335},[67,39988,31382],{"class":208},[67,39990,38541],{"class":77},[67,39992,909],{"class":73},[67,39994,38546],{"class":77},[67,39996,39997,39999,40001,40003,40005,40007,40009,40011,40013,40015,40017,40019,40021,40023,40025,40027,40029],{"class":69,"line":2340},[67,39998,38551],{"class":77},[67,40000,31393],{"class":5935},[67,40002,909],{"class":73},[67,40004,1077],{"class":208},[67,40006,1236],{"class":77},[67,40008,31402],{"class":5935},[67,40010,909],{"class":73},[67,40012,1063],{"class":208},[67,40014,1236],{"class":77},[67,40016,31411],{"class":5935},[67,40018,909],{"class":73},[67,40020,933],{"class":208},[67,40022,1236],{"class":77},[67,40024,31420],{"class":5935},[67,40026,909],{"class":73},[67,40028,1077],{"class":208},[67,40030,38584],{"class":77},[67,40032,40033],{"class":69,"line":2346},[67,40034,38589],{"class":77},[67,40036,40037,40039,40041,40043,40045,40047,40049,40051,40053,40055,40057,40059,40061,40063,40065,40067,40069],{"class":69,"line":2351},[67,40038,38551],{"class":77},[67,40040,31393],{"class":5935},[67,40042,909],{"class":73},[67,40044,1063],{"class":208},[67,40046,1236],{"class":77},[67,40048,31402],{"class":5935},[67,40050,909],{"class":73},[67,40052,1063],{"class":208},[67,40054,1236],{"class":77},[67,40056,31411],{"class":5935},[67,40058,909],{"class":73},[67,40060,933],{"class":208},[67,40062,1236],{"class":77},[67,40064,31420],{"class":5935},[67,40066,909],{"class":73},[67,40068,1077],{"class":208},[67,40070,38584],{"class":77},[67,40072,40073],{"class":69,"line":2365},[67,40074,38589],{"class":77},[67,40076,40077,40079,40081,40083,40085,40087,40089,40091,40093,40095,40097,40099,40101],{"class":69,"line":2370},[67,40078,38634],{"class":77},[67,40080,31411],{"class":5935},[67,40082,909],{"class":73},[67,40084,939],{"class":208},[67,40086,1236],{"class":77},[67,40088,31466],{"class":5935},[67,40090,909],{"class":73},[67,40092,939],{"class":208},[67,40094,1236],{"class":77},[67,40096,31420],{"class":5935},[67,40098,909],{"class":73},[67,40100,1051],{"class":208},[67,40102,870],{"class":77},[67,40104,40105],{"class":69,"line":2376},[67,40106,38663],{"class":77},[67,40108,40109],{"class":69,"line":2397},[67,40110,38668],{"class":202},[67,40112,40113,40115,40117,40119],{"class":69,"line":2402},[67,40114,31382],{"class":208},[67,40116,38675],{"class":77},[67,40118,909],{"class":73},[67,40120,38546],{"class":77},[67,40122,40123,40125,40127,40129,40131,40133,40135,40137,40139,40141,40143,40145,40147,40149,40151,40153,40155],{"class":69,"line":2416},[67,40124,38551],{"class":77},[67,40126,31393],{"class":5935},[67,40128,909],{"class":73},[67,40130,1063],{"class":208},[67,40132,1236],{"class":77},[67,40134,31402],{"class":5935},[67,40136,909],{"class":73},[67,40138,32607],{"class":208},[67,40140,1236],{"class":77},[67,40142,31411],{"class":5935},[67,40144,909],{"class":73},[67,40146,933],{"class":208},[67,40148,1236],{"class":77},[67,40150,31420],{"class":5935},[67,40152,909],{"class":73},[67,40154,1077],{"class":208},[67,40156,38584],{"class":77},[67,40158,40159],{"class":69,"line":2421},[67,40160,38589],{"class":77},[67,40162,40163,40165,40167,40169,40171,40173,40175,40177,40179,40181,40183,40185,40187,40189,40191,40193,40195],{"class":69,"line":2450},[67,40164,38551],{"class":77},[67,40166,31393],{"class":5935},[67,40168,909],{"class":73},[67,40170,32607],{"class":208},[67,40172,1236],{"class":77},[67,40174,31402],{"class":5935},[67,40176,909],{"class":73},[67,40178,32607],{"class":208},[67,40180,1236],{"class":77},[67,40182,31411],{"class":5935},[67,40184,909],{"class":73},[67,40186,933],{"class":208},[67,40188,1236],{"class":77},[67,40190,31420],{"class":5935},[67,40192,909],{"class":73},[67,40194,1077],{"class":208},[67,40196,38584],{"class":77},[67,40198,40199],{"class":69,"line":2455},[67,40200,38589],{"class":77},[67,40202,40203,40205,40207,40209,40211,40213,40215,40217,40219,40221,40223,40225,40227],{"class":69,"line":2472},[67,40204,38634],{"class":77},[67,40206,31411],{"class":5935},[67,40208,909],{"class":73},[67,40210,939],{"class":208},[67,40212,1236],{"class":77},[67,40214,31466],{"class":5935},[67,40216,909],{"class":73},[67,40218,939],{"class":208},[67,40220,1236],{"class":77},[67,40222,31420],{"class":5935},[67,40224,909],{"class":73},[67,40226,1051],{"class":208},[67,40228,870],{"class":77},[67,40230,40231],{"class":69,"line":2477},[67,40232,38663],{"class":77},[67,40234,40235],{"class":69,"line":2482},[67,40236,38796],{"class":202},[67,40238,40239,40241,40243,40245],{"class":69,"line":2487},[67,40240,31382],{"class":208},[67,40242,38803],{"class":77},[67,40244,909],{"class":73},[67,40246,38546],{"class":77},[67,40248,40249,40251,40253,40255,40257,40259,40261,40263,40265,40267,40269,40271,40273,40275,40277,40279,40281],{"class":69,"line":2501},[67,40250,38551],{"class":77},[67,40252,31393],{"class":5935},[67,40254,909],{"class":73},[67,40256,32607],{"class":208},[67,40258,1236],{"class":77},[67,40260,31402],{"class":5935},[67,40262,909],{"class":73},[67,40264,35407],{"class":208},[67,40266,1236],{"class":77},[67,40268,31411],{"class":5935},[67,40270,909],{"class":73},[67,40272,933],{"class":208},[67,40274,1236],{"class":77},[67,40276,31420],{"class":5935},[67,40278,909],{"class":73},[67,40280,1077],{"class":208},[67,40282,38584],{"class":77},[67,40284,40285],{"class":69,"line":2506},[67,40286,38589],{"class":77},[67,40288,40289,40291,40293,40295,40297,40299,40301,40303,40305,40307,40309,40311,40313,40315,40317,40319,40321],{"class":69,"line":3298},[67,40290,38551],{"class":77},[67,40292,31393],{"class":5935},[67,40294,909],{"class":73},[67,40296,35407],{"class":208},[67,40298,1236],{"class":77},[67,40300,31402],{"class":5935},[67,40302,909],{"class":73},[67,40304,35407],{"class":208},[67,40306,1236],{"class":77},[67,40308,31411],{"class":5935},[67,40310,909],{"class":73},[67,40312,933],{"class":208},[67,40314,1236],{"class":77},[67,40316,31420],{"class":5935},[67,40318,909],{"class":73},[67,40320,1077],{"class":208},[67,40322,38584],{"class":77},[67,40324,40325],{"class":69,"line":3312},[67,40326,38589],{"class":77},[67,40328,40329,40331,40333,40335,40337,40339,40341,40343,40345,40347,40349,40351,40353,40355,40357,40359,40361],{"class":69,"line":3320},[67,40330,38551],{"class":77},[67,40332,31393],{"class":5935},[67,40334,909],{"class":73},[67,40336,35407],{"class":208},[67,40338,1236],{"class":77},[67,40340,31402],{"class":5935},[67,40342,909],{"class":73},[67,40344,35407],{"class":208},[67,40346,1236],{"class":77},[67,40348,31411],{"class":5935},[67,40350,909],{"class":73},[67,40352,933],{"class":208},[67,40354,1236],{"class":77},[67,40356,31420],{"class":5935},[67,40358,909],{"class":73},[67,40360,1077],{"class":208},[67,40362,38584],{"class":77},[67,40364,40365],{"class":69,"line":3325},[67,40366,38589],{"class":77},[67,40368,40369,40371,40373,40375,40377,40379,40381,40383,40385,40387,40389,40391,40393],{"class":69,"line":3331},[67,40370,38634],{"class":77},[67,40372,31411],{"class":5935},[67,40374,909],{"class":73},[67,40376,939],{"class":208},[67,40378,1236],{"class":77},[67,40380,31466],{"class":5935},[67,40382,909],{"class":73},[67,40384,939],{"class":208},[67,40386,1236],{"class":77},[67,40388,31420],{"class":5935},[67,40390,909],{"class":73},[67,40392,1051],{"class":208},[67,40394,870],{"class":77},[67,40396,40397],{"class":69,"line":3337},[67,40398,38663],{"class":77},[67,40400,40401],{"class":69,"line":3342},[67,40402,38964],{"class":202},[67,40404,40405,40407,40409,40411],{"class":69,"line":8667},[67,40406,31382],{"class":208},[67,40408,38971],{"class":77},[67,40410,909],{"class":73},[67,40412,38546],{"class":77},[67,40414,40415,40417,40419,40421,40423,40425,40427,40429,40431,40433,40435,40437,40439,40441,40443,40445,40447],{"class":69,"line":8691},[67,40416,38551],{"class":77},[67,40418,31393],{"class":5935},[67,40420,909],{"class":73},[67,40422,35407],{"class":208},[67,40424,1236],{"class":77},[67,40426,31402],{"class":5935},[67,40428,909],{"class":73},[67,40430,38994],{"class":208},[67,40432,1236],{"class":77},[67,40434,31411],{"class":5935},[67,40436,909],{"class":73},[67,40438,933],{"class":208},[67,40440,1236],{"class":77},[67,40442,31420],{"class":5935},[67,40444,909],{"class":73},[67,40446,1077],{"class":208},[67,40448,38584],{"class":77},[67,40450,40451],{"class":69,"line":8696},[67,40452,38589],{"class":77},[67,40454,40455,40457,40459,40461,40463,40465,40467,40469,40471,40473,40475,40477,40479,40481,40483,40485,40487],{"class":69,"line":8702},[67,40456,38551],{"class":77},[67,40458,31393],{"class":5935},[67,40460,909],{"class":73},[67,40462,38994],{"class":208},[67,40464,1236],{"class":77},[67,40466,31402],{"class":5935},[67,40468,909],{"class":73},[67,40470,38994],{"class":208},[67,40472,1236],{"class":77},[67,40474,31411],{"class":5935},[67,40476,909],{"class":73},[67,40478,933],{"class":208},[67,40480,1236],{"class":77},[67,40482,31420],{"class":5935},[67,40484,909],{"class":73},[67,40486,1077],{"class":208},[67,40488,38584],{"class":77},[67,40490,40491],{"class":69,"line":8729},[67,40492,38589],{"class":77},[67,40494,40495,40497,40499,40501,40503,40505,40507,40509,40511,40513,40515,40517,40519,40521,40523,40525,40527],{"class":69,"line":8734},[67,40496,38551],{"class":77},[67,40498,31393],{"class":5935},[67,40500,909],{"class":73},[67,40502,38994],{"class":208},[67,40504,1236],{"class":77},[67,40506,31402],{"class":5935},[67,40508,909],{"class":73},[67,40510,38994],{"class":208},[67,40512,1236],{"class":77},[67,40514,31411],{"class":5935},[67,40516,909],{"class":73},[67,40518,933],{"class":208},[67,40520,1236],{"class":77},[67,40522,31420],{"class":5935},[67,40524,909],{"class":73},[67,40526,1077],{"class":208},[67,40528,38584],{"class":77},[67,40530,40531],{"class":69,"line":8740},[67,40532,38589],{"class":77},[67,40534,40535,40537,40539,40541,40543,40545,40547,40549,40551,40553,40555,40557,40559],{"class":69,"line":8752},[67,40536,38634],{"class":77},[67,40538,31411],{"class":5935},[67,40540,909],{"class":73},[67,40542,939],{"class":208},[67,40544,1236],{"class":77},[67,40546,31466],{"class":5935},[67,40548,909],{"class":73},[67,40550,939],{"class":208},[67,40552,1236],{"class":77},[67,40554,31420],{"class":5935},[67,40556,909],{"class":73},[67,40558,1051],{"class":208},[67,40560,870],{"class":77},[67,40562,40563],{"class":69,"line":8764},[67,40564,38663],{"class":77},[67,40566,40567],{"class":69,"line":8776},[67,40568,39133],{"class":202},[67,40570,40571,40573,40575,40577],{"class":69,"line":10435},[67,40572,31382],{"class":208},[67,40574,39140],{"class":77},[67,40576,909],{"class":73},[67,40578,38546],{"class":77},[67,40580,40581,40583,40585,40587,40589,40591,40593,40595,40597,40599,40601,40603,40605,40607,40609,40611,40613],{"class":69,"line":10459},[67,40582,38551],{"class":77},[67,40584,31393],{"class":5935},[67,40586,909],{"class":73},[67,40588,38994],{"class":208},[67,40590,1236],{"class":77},[67,40592,31402],{"class":5935},[67,40594,909],{"class":73},[67,40596,38994],{"class":208},[67,40598,1236],{"class":77},[67,40600,31411],{"class":5935},[67,40602,909],{"class":73},[67,40604,933],{"class":208},[67,40606,1236],{"class":77},[67,40608,31420],{"class":5935},[67,40610,909],{"class":73},[67,40612,1077],{"class":208},[67,40614,38584],{"class":77},[67,40616,40617],{"class":69,"line":10482},[67,40618,38589],{"class":77},[67,40620,40621,40623,40625,40627,40629,40631,40633,40635,40637,40639,40641,40643,40645,40647,40649,40651,40653],{"class":69,"line":10506},[67,40622,38551],{"class":77},[67,40624,31393],{"class":5935},[67,40626,909],{"class":73},[67,40628,38994],{"class":208},[67,40630,1236],{"class":77},[67,40632,31402],{"class":5935},[67,40634,909],{"class":73},[67,40636,38994],{"class":208},[67,40638,1236],{"class":77},[67,40640,31411],{"class":5935},[67,40642,909],{"class":73},[67,40644,933],{"class":208},[67,40646,1236],{"class":77},[67,40648,31420],{"class":5935},[67,40650,909],{"class":73},[67,40652,1077],{"class":208},[67,40654,38584],{"class":77},[67,40656,40657],{"class":69,"line":10511},[67,40658,38589],{"class":77},[67,40660,40661,40663,40665,40667,40669,40671,40673,40675,40677,40679,40681,40683,40685,40687,40689,40691,40693],{"class":69,"line":10516},[67,40662,38551],{"class":77},[67,40664,31393],{"class":5935},[67,40666,909],{"class":73},[67,40668,38994],{"class":208},[67,40670,1236],{"class":77},[67,40672,31402],{"class":5935},[67,40674,909],{"class":73},[67,40676,38994],{"class":208},[67,40678,1236],{"class":77},[67,40680,31411],{"class":5935},[67,40682,909],{"class":73},[67,40684,933],{"class":208},[67,40686,1236],{"class":77},[67,40688,31420],{"class":5935},[67,40690,909],{"class":73},[67,40692,1077],{"class":208},[67,40694,38584],{"class":77},[67,40696,40697],{"class":69,"line":10521},[67,40698,38589],{"class":77},[67,40700,40701,40703,40705,40707,40709,40711,40713,40715,40717,40719,40721,40723,40725],{"class":69,"line":10530},[67,40702,38634],{"class":77},[67,40704,31411],{"class":5935},[67,40706,909],{"class":73},[67,40708,939],{"class":208},[67,40710,1236],{"class":77},[67,40712,31466],{"class":5935},[67,40714,909],{"class":73},[67,40716,939],{"class":208},[67,40718,1236],{"class":77},[67,40720,31420],{"class":5935},[67,40722,909],{"class":73},[67,40724,1051],{"class":208},[67,40726,870],{"class":77},[67,40728,40729],{"class":69,"line":10535},[67,40730,38663],{"class":77},[67,40732,40733],{"class":69,"line":10541},[67,40734,39301],{"class":202},[67,40736,40737,40739,40741,40743],{"class":69,"line":10562},[67,40738,31382],{"class":208},[67,40740,39308],{"class":77},[67,40742,909],{"class":73},[67,40744,38546],{"class":77},[67,40746,40747],{"class":69,"line":10568},[67,40748,39317],{"class":202},[67,40750,40751],{"class":69,"line":10582},[67,40752,39322],{"class":202},[67,40754,40755],{"class":69,"line":10588},[67,40756,39327],{"class":77},[67,40758,40759,40761,40763,40765,40767,40769,40771,40773,40775],{"class":69,"line":10615},[67,40760,39332],{"class":77},[67,40762,1227],{"class":208},[67,40764,1312],{"class":73},[67,40766,1227],{"class":208},[67,40768,1312],{"class":73},[67,40770,38994],{"class":208},[67,40772,1236],{"class":77},[67,40774,35407],{"class":208},[67,40776,38584],{"class":77},[67,40778,40779],{"class":69,"line":10624},[67,40780,38589],{"class":77},[67,40782,40783,40785,40787,40789,40791],{"class":69,"line":10630},[67,40784,39332],{"class":77},[67,40786,35407],{"class":208},[67,40788,1236],{"class":77},[67,40790,32607],{"class":208},[67,40792,38584],{"class":77},[67,40794,40795],{"class":69,"line":10638},[67,40796,38589],{"class":77},[67,40798,40799,40801,40803,40805,40807],{"class":69,"line":10643},[67,40800,39332],{"class":77},[67,40802,32607],{"class":208},[67,40804,1236],{"class":77},[67,40806,1303],{"class":208},[67,40808,870],{"class":77},[67,40810,40811],{"class":69,"line":17321},[67,40812,38663],{"class":77},[67,40814,40815],{"class":69,"line":17327},[67,40816,177],{"emptyLinePlaceholder":176},[67,40818,40819],{"class":69,"line":17350},[67,40820,39393],{"class":202},[67,40822,40823],{"class":69,"line":17356},[67,40824,39398],{"class":202},[67,40826,40827,40829,40831,40833,40835],{"class":69,"line":17379},[67,40828,4123],{"class":73},[67,40830,39405],{"class":77},[67,40832,81],{"class":73},[67,40834,39410],{"class":208},[67,40836,39413],{"class":77},[67,40838,40839],{"class":69,"line":17393},[67,40840,39418],{"class":202},[67,40842,40843,40845,40847],{"class":69,"line":17413},[67,40844,5361],{"class":73},[67,40846,39425],{"class":208},[67,40848,39428],{"class":77},[67,40850,40851],{"class":69,"line":17419},[67,40852,39433],{"class":202},[67,40854,40855,40857,40859,40861,40863],{"class":69,"line":17430},[67,40856,39438],{"class":77},[67,40858,39441],{"class":5935},[67,40860,909],{"class":73},[67,40862,39446],{"class":84},[67,40864,870],{"class":77},[67,40866,40867],{"class":69,"line":17453},[67,40868,39453],{"class":202},[67,40870,40871,40873,40875,40877,40879,40881],{"class":69,"line":17475},[67,40872,39458],{"class":73},[67,40874,39461],{"class":77},[67,40876,39464],{"class":73},[67,40878,39467],{"class":73},[67,40880,39470],{"class":208},[67,40882,4459],{"class":77},[67,40884,40885],{"class":69,"line":17480},[67,40886,39477],{"class":202},[67,40888,40889,40891,40893],{"class":69,"line":17486},[67,40890,39482],{"class":77},[67,40892,1051],{"class":208},[67,40894,870],{"class":77},[67,40896,40897],{"class":69,"line":17500},[67,40898,39491],{"class":202},[67,40900,40901,40903,40905],{"class":69,"line":17513},[67,40902,39496],{"class":73},[67,40904,39425],{"class":208},[67,40906,39501],{"class":77},[67,40908,40909],{"class":69,"line":17518},[67,40910,39506],{"class":202},[67,40912,40913],{"class":69,"line":17532},[67,40914,39511],{"class":202},[67,40916,40917,40919,40921,40923,40925],{"class":69,"line":17537},[67,40918,39516],{"class":77},[67,40920,1051],{"class":208},[67,40922,1236],{"class":77},[67,40924,39523],{"class":208},[67,40926,870],{"class":77},[67,40928,40929],{"class":69,"line":17543},[67,40930,39530],{"class":202},[67,40932,40933,40935,40937,40939,40941,40943],{"class":69,"line":17548},[67,40934,39458],{"class":73},[67,40936,39461],{"class":77},[67,40938,39464],{"class":73},[67,40940,39467],{"class":73},[67,40942,39470],{"class":208},[67,40944,4459],{"class":77},[67,40946,40947,40949,40951],{"class":69,"line":17562},[67,40948,39482],{"class":77},[67,40950,1051],{"class":208},[67,40952,870],{"class":77},[67,40954,40955],{"class":69,"line":17567},[67,40956,177],{"emptyLinePlaceholder":176},[67,40958,40959],{"class":69,"line":17572},[67,40960,35702],{"class":202},[67,40962,40963,40965,40967],{"class":69,"line":17586},[67,40964,31338],{"class":73},[67,40966,31630],{"class":112},[67,40968,31633],{"class":77},[67,40970,40971,40973,40975,40977],{"class":69,"line":17598},[67,40972,31638],{"class":77},[67,40974,909],{"class":73},[67,40976,31360],{"class":208},[67,40978,39579],{"class":77},[67,40980,40981,40983,40985,40987],{"class":69,"line":17603},[67,40982,31638],{"class":77},[67,40984,909],{"class":73},[67,40986,31360],{"class":208},[67,40988,39590],{"class":77},[67,40990,40991,40993,40995,40997],{"class":69,"line":17616},[67,40992,31638],{"class":77},[67,40994,909],{"class":73},[67,40996,31360],{"class":208},[67,40998,39601],{"class":77},[67,41000,41001,41003,41005,41007],{"class":69,"line":17621},[67,41002,31638],{"class":77},[67,41004,909],{"class":73},[67,41006,31360],{"class":208},[67,41008,39612],{"class":77},[67,41010,41011,41013,41015,41017],{"class":69,"line":17626},[67,41012,31638],{"class":77},[67,41014,909],{"class":73},[67,41016,31360],{"class":208},[67,41018,39623],{"class":77},[67,41020,41021,41023,41025,41027],{"class":69,"line":17631},[67,41022,31638],{"class":77},[67,41024,909],{"class":73},[67,41026,31360],{"class":208},[67,41028,39634],{"class":77},[67,41030,41031,41033],{"class":69,"line":17644},[67,41032,15469],{"class":73},[67,41034,31746],{"class":77},[67,41036,41037],{"class":69,"line":17649},[67,41038,177],{"emptyLinePlaceholder":176},[67,41040,41041],{"class":69,"line":33170},[67,41042,39649],{"class":202},[67,41044,41045,41047,41049,41051,41053],{"class":69,"line":33176},[67,41046,2254],{"class":73},[67,41048,31757],{"class":208},[67,41050,3670],{"class":73},[67,41052,39660],{"class":84},[67,41054,4459],{"class":77},[67,41056,41057,41059,41061,41063,41065,41067,41069,41071,41073],{"class":69,"line":33182},[67,41058,31774],{"class":77},[67,41060,909],{"class":73},[67,41062,30988],{"class":77},[67,41064,31781],{"class":84},[67,41066,2427],{"class":73},[67,41068,31786],{"class":77},[67,41070,2424],{"class":73},[67,41072,31013],{"class":84},[67,41074,870],{"class":77},[67,41076,41077,41079],{"class":69,"line":33188},[67,41078,31836],{"class":208},[67,41080,31022],{"class":77},[67,41082,41083,41085,41087],{"class":69,"line":33194},[67,41084,31826],{"class":77},[67,41086,909],{"class":73},[67,41088,39697],{"class":77},[67,41090,41091,41093,41095,41097,41099,41101,41103,41105],{"class":69,"line":33205},[67,41092,31836],{"class":208},[67,41094,31839],{"class":77},[67,41096,1077],{"class":208},[67,41098,1236],{"class":77},[67,41100,32038],{"class":208},[67,41102,1236],{"class":77},[67,41104,32038],{"class":208},[67,41106,31852],{"class":77},[815,41108,41109],{"start":149},[818,41110,41111],{},"测试代码",[57,41113,41115],{"className":30915,"code":41114,"language":30917,"meta":62,"style":62},"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",[64,41116,41117,41123,41133,41143,41147,41157,41168,41172,41176,41180,41188,41204,41214,41230,41240,41254,41258,41268,41278,41288,41294,41298,41302,41310,41314,41330,41338,41342,41346,41354,41362,41366,41370,41374,41378,41384,41388,41398,41406,41414,41418,41422,41426,41434,41438,41454,41458,41462,41466,41478,41482,41494,41498,41502,41514,41518,41528,41532,41536,41548,41552,41561,41565,41569,41577,41581,41589,41593,41597,41601,41605,41609,41625,41633,41637,41641,41689,41695,41699,41709,41717,41725,41729,41733,41737,41741,41749,41753,41769,41773,41781,41789],{"__ignoreMap":62},[67,41118,41119,41121],{"class":69,"line":70},[67,41120,30929],{"class":73},[67,41122,30932],{"class":77},[67,41124,41125,41127,41129,41131],{"class":69,"line":143},[67,41126,30929],{"class":73},[67,41128,31952],{"class":77},[67,41130,31920],{"class":73},[67,41132,31957],{"class":77},[67,41134,41135,41137,41139,41141],{"class":69,"line":149},[67,41136,31274],{"class":73},[67,41138,31935],{"class":77},[67,41140,30929],{"class":73},[67,41142,31940],{"class":77},[67,41144,41145],{"class":69,"line":155},[67,41146,34459],{"class":202},[67,41148,41149,41151,41153,41155],{"class":69,"line":161},[67,41150,31274],{"class":73},[67,41152,31905],{"class":77},[67,41154,30929],{"class":73},[67,41156,31910],{"class":77},[67,41158,41159,41161,41163,41165],{"class":69,"line":167},[67,41160,31274],{"class":73},[67,41162,32451],{"class":77},[67,41164,30929],{"class":73},[67,41166,41167],{"class":208}," VGG16\n",[67,41169,41170],{"class":69,"line":173},[67,41171,177],{"emptyLinePlaceholder":176},[67,41173,41174],{"class":69,"line":180},[67,41175,177],{"emptyLinePlaceholder":176},[67,41177,41178],{"class":69,"line":186},[67,41179,34488],{"class":202},[67,41181,41182,41184,41186],{"class":69,"line":444},[67,41183,32484],{"class":73},[67,41185,34495],{"class":112},[67,41187,32490],{"class":77},[67,41189,41190,41192,41194,41196,41198,41200,41202],{"class":69,"line":2335},[67,41191,34502],{"class":77},[67,41193,909],{"class":73},[67,41195,31992],{"class":77},[67,41197,31995],{"class":5935},[67,41199,909],{"class":73},[67,41201,32000],{"class":84},[67,41203,32003],{"class":77},[67,41205,41206,41208,41210,41212],{"class":69,"line":2340},[67,41207,34519],{"class":5935},[67,41209,909],{"class":73},[67,41211,34524],{"class":208},[67,41213,32003],{"class":77},[67,41215,41216,41218,41220,41222,41224,41226,41228],{"class":69,"line":2346},[67,41217,34531],{"class":5935},[67,41219,909],{"class":73},[67,41221,32030],{"class":77},[67,41223,32033],{"class":5935},[67,41225,909],{"class":73},[67,41227,32038],{"class":208},[67,41229,32041],{"class":77},[67,41231,41232,41234,41236,41238],{"class":69,"line":2351},[67,41233,34548],{"class":5935},[67,41235,909],{"class":73},[67,41237,32013],{"class":208},[67,41239,870],{"class":77},[67,41241,41242,41244,41246,41248,41250,41252],{"class":69,"line":2365},[67,41243,34559],{"class":77},[67,41245,909],{"class":73},[67,41247,32071],{"class":77},[67,41249,32074],{"class":5935},[67,41251,909],{"class":73},[67,41253,34570],{"class":77},[67,41255,41256],{"class":69,"line":2370},[67,41257,34575],{"class":202},[67,41259,41260,41262,41264,41266],{"class":69,"line":2376},[67,41261,34580],{"class":5935},[67,41263,909],{"class":73},[67,41265,1077],{"class":208},[67,41267,32003],{"class":77},[67,41269,41270,41272,41274,41276],{"class":69,"line":2397},[67,41271,34591],{"class":5935},[67,41273,909],{"class":73},[67,41275,32013],{"class":208},[67,41277,32003],{"class":77},[67,41279,41280,41282,41284,41286],{"class":69,"line":2402},[67,41281,34602],{"class":5935},[67,41283,909],{"class":73},[67,41285,1051],{"class":208},[67,41287,870],{"class":77},[67,41289,41290,41292],{"class":69,"line":2416},[67,41291,4810],{"class":73},[67,41293,34615],{"class":77},[67,41295,41296],{"class":69,"line":2421},[67,41297,177],{"emptyLinePlaceholder":176},[67,41299,41300],{"class":69,"line":2450},[67,41301,34624],{"class":202},[67,41303,41304,41306,41308],{"class":69,"line":2455},[67,41305,32484],{"class":73},[67,41307,34631],{"class":112},[67,41309,34634],{"class":77},[67,41311,41312],{"class":69,"line":2472},[67,41313,34639],{"class":202},[67,41315,41316,41318,41320,41322,41324,41326,41328],{"class":69,"line":2477},[67,41317,31774],{"class":77},[67,41319,909],{"class":73},[67,41321,31781],{"class":84},[67,41323,2427],{"class":73},[67,41325,31786],{"class":77},[67,41327,2424],{"class":73},[67,41329,34656],{"class":84},[67,41331,41332,41334,41336],{"class":69,"line":2482},[67,41333,31826],{"class":77},[67,41335,909],{"class":73},[67,41337,32826],{"class":77},[67,41339,41340],{"class":69,"line":2487},[67,41341,177],{"emptyLinePlaceholder":176},[67,41343,41344],{"class":69,"line":2501},[67,41345,34673],{"class":202},[67,41347,41348,41350,41352],{"class":69,"line":2506},[67,41349,34678],{"class":77},[67,41351,909],{"class":73},[67,41353,32879],{"class":208},[67,41355,41356,41358,41360],{"class":69,"line":3298},[67,41357,34687],{"class":77},[67,41359,909],{"class":73},[67,41361,3805],{"class":208},[67,41363,41364],{"class":69,"line":3312},[67,41365,177],{"emptyLinePlaceholder":176},[67,41367,41368],{"class":69,"line":3320},[67,41369,34700],{"class":202},[67,41371,41372],{"class":69,"line":3325},[67,41373,34705],{"class":202},[67,41375,41376],{"class":69,"line":3331},[67,41377,34710],{"class":202},[67,41379,41380,41382],{"class":69,"line":3337},[67,41381,34715],{"class":73},[67,41383,33421],{"class":77},[67,41385,41386],{"class":69,"line":3342},[67,41387,34722],{"class":202},[67,41389,41390,41392,41394,41396],{"class":69,"line":8667},[67,41391,4123],{"class":73},[67,41393,34729],{"class":77},[67,41395,81],{"class":73},[67,41397,34734],{"class":77},[67,41399,41400,41402,41404],{"class":69,"line":8691},[67,41401,34739],{"class":77},[67,41403,909],{"class":73},[67,41405,34744],{"class":77},[67,41407,41408,41410,41412],{"class":69,"line":8696},[67,41409,34749],{"class":77},[67,41411,909],{"class":73},[67,41413,34754],{"class":77},[67,41415,41416],{"class":69,"line":8702},[67,41417,34759],{"class":202},[67,41419,41420],{"class":69,"line":8729},[67,41421,33412],{"class":77},[67,41423,41424],{"class":69,"line":8734},[67,41425,34768],{"class":202},[67,41427,41428,41430,41432],{"class":69,"line":8740},[67,41429,33197],{"class":77},[67,41431,909],{"class":73},[67,41433,34777],{"class":77},[67,41435,41436],{"class":69,"line":8752},[67,41437,34782],{"class":202},[67,41439,41440,41442,41444,41446,41448,41450,41452],{"class":69,"line":8764},[67,41441,33214],{"class":77},[67,41443,909],{"class":73},[67,41445,33219],{"class":77},[67,41447,33222],{"class":5935},[67,41449,909],{"class":73},[67,41451,1077],{"class":208},[67,41453,870],{"class":77},[67,41455,41456],{"class":69,"line":8776},[67,41457,34803],{"class":202},[67,41459,41460],{"class":69,"line":10435},[67,41461,34808],{"class":202},[67,41463,41464],{"class":69,"line":10459},[67,41465,34813],{"class":202},[67,41467,41468,41470,41472,41474,41476],{"class":69,"line":10482},[67,41469,34818],{"class":77},[67,41471,10196],{"class":73},[67,41473,33324],{"class":77},[67,41475,3670],{"class":73},[67,41477,34827],{"class":77},[67,41479,41480],{"class":69,"line":10506},[67,41481,34832],{"class":202},[67,41483,41484,41486,41488,41490,41492],{"class":69,"line":10511},[67,41485,34837],{"class":77},[67,41487,10196],{"class":73},[67,41489,34842],{"class":77},[67,41491,1051],{"class":208},[67,41493,870],{"class":77},[67,41495,41496],{"class":69,"line":10516},[67,41497,177],{"emptyLinePlaceholder":176},[67,41499,41500],{"class":69,"line":10521},[67,41501,34855],{"class":202},[67,41503,41504,41506,41508,41510,41512],{"class":69,"line":10530},[67,41505,34860],{"class":77},[67,41507,909],{"class":73},[67,41509,34865],{"class":77},[67,41511,1440],{"class":73},[67,41513,34870],{"class":77},[67,41515,41516],{"class":69,"line":10535},[67,41517,34875],{"class":202},[67,41519,41520,41522,41524,41526],{"class":69,"line":10541},[67,41521,32988],{"class":208},[67,41523,864],{"class":77},[67,41525,34884],{"class":84},[67,41527,34887],{"class":77},[67,41529,41530],{"class":69,"line":10562},[67,41531,177],{"emptyLinePlaceholder":176},[67,41533,41534],{"class":69,"line":10568},[67,41535,34896],{"class":202},[67,41537,41538,41540,41542,41544,41546],{"class":69,"line":10582},[67,41539,2254],{"class":73},[67,41541,31757],{"class":208},[67,41543,3670],{"class":73},[67,41545,31762],{"class":84},[67,41547,4459],{"class":77},[67,41549,41550],{"class":69,"line":10588},[67,41551,34913],{"class":202},[67,41553,41554,41556,41558],{"class":69,"line":10615},[67,41555,31826],{"class":77},[67,41557,909],{"class":73},[67,41559,41560],{"class":77},"VGG16()\n",[67,41562,41563],{"class":69,"line":10624},[67,41564,34926],{"class":202},[67,41566,41567],{"class":69,"line":10630},[67,41568,34931],{"class":202},[67,41570,41571,41573,41575],{"class":69,"line":10638},[67,41572,34936],{"class":77},[67,41574,34939],{"class":84},[67,41576,31034],{"class":77},[67,41578,41579],{"class":69,"line":10643},[67,41580,34946],{"class":202},[67,41582,41583,41585,41587],{"class":69,"line":17321},[67,41584,34559],{"class":77},[67,41586,909],{"class":73},[67,41588,34955],{"class":77},[67,41590,41591],{"class":69,"line":17327},[67,41592,34960],{"class":202},[67,41594,41595],{"class":69,"line":17350},[67,41596,34965],{"class":77},[67,41598,41599],{"class":69,"line":17356},[67,41600,177],{"emptyLinePlaceholder":176},[67,41602,41603],{"class":69,"line":17379},[67,41604,34974],{"class":202},[67,41606,41607],{"class":69,"line":17393},[67,41608,34979],{"class":202},[67,41610,41611,41613,41615,41617,41619,41621,41623],{"class":69,"line":17413},[67,41612,31774],{"class":77},[67,41614,909],{"class":73},[67,41616,31781],{"class":84},[67,41618,2427],{"class":73},[67,41620,31786],{"class":77},[67,41622,2424],{"class":73},[67,41624,34656],{"class":84},[67,41626,41627,41629,41631],{"class":69,"line":17419},[67,41628,31826],{"class":77},[67,41630,909],{"class":73},[67,41632,32826],{"class":77},[67,41634,41635],{"class":69,"line":17430},[67,41636,35008],{"class":202},[67,41638,41639],{"class":69,"line":17453},[67,41640,35013],{"class":202},[67,41642,41643,41645,41647,41649,41651,41653,41655,41657,41659,41661,41663,41665,41667,41669,41671,41673,41675,41677,41679,41681,41683,41685,41687],{"class":69,"line":17475},[67,41644,35018],{"class":77},[67,41646,909],{"class":73},[67,41648,1746],{"class":77},[67,41650,35025],{"class":84},[67,41652,1236],{"class":77},[67,41654,35030],{"class":84},[67,41656,1236],{"class":77},[67,41658,35035],{"class":84},[67,41660,1236],{"class":77},[67,41662,35040],{"class":84},[67,41664,1236],{"class":77},[67,41666,35045],{"class":84},[67,41668,1236],{"class":77},[67,41670,35050],{"class":84},[67,41672,1236],{"class":77},[67,41674,35055],{"class":84},[67,41676,1236],{"class":77},[67,41678,35060],{"class":84},[67,41680,1236],{"class":77},[67,41682,35065],{"class":84},[67,41684,1236],{"class":77},[67,41686,35070],{"class":84},[67,41688,33783],{"class":77},[67,41690,41691,41693],{"class":69,"line":17480},[67,41692,34715],{"class":73},[67,41694,33421],{"class":77},[67,41696,41697],{"class":69,"line":17486},[67,41698,35083],{"class":202},[67,41700,41701,41703,41705,41707],{"class":69,"line":17500},[67,41702,4123],{"class":73},[67,41704,35090],{"class":77},[67,41706,81],{"class":73},[67,41708,34734],{"class":77},[67,41710,41711,41713,41715],{"class":69,"line":17513},[67,41712,33147],{"class":77},[67,41714,909],{"class":73},[67,41716,33152],{"class":77},[67,41718,41719,41721,41723],{"class":69,"line":17518},[67,41720,33162],{"class":77},[67,41722,909],{"class":73},[67,41724,33167],{"class":77},[67,41726,41727],{"class":69,"line":17532},[67,41728,177],{"emptyLinePlaceholder":176},[67,41730,41731],{"class":69,"line":17537},[67,41732,35119],{"class":202},[67,41734,41735],{"class":69,"line":17543},[67,41736,33412],{"class":77},[67,41738,41739],{"class":69,"line":17548},[67,41740,35128],{"class":202},[67,41742,41743,41745,41747],{"class":69,"line":17562},[67,41744,33197],{"class":77},[67,41746,909],{"class":73},[67,41748,33202],{"class":77},[67,41750,41751],{"class":69,"line":17567},[67,41752,35141],{"class":202},[67,41754,41755,41757,41759,41761,41763,41765,41767],{"class":69,"line":17572},[67,41756,33214],{"class":77},[67,41758,909],{"class":73},[67,41760,33219],{"class":77},[67,41762,33222],{"class":5935},[67,41764,909],{"class":73},[67,41766,1077],{"class":208},[67,41768,870],{"class":77},[67,41770,41771],{"class":69,"line":17586},[67,41772,35162],{"class":202},[67,41774,41775,41777,41779],{"class":69,"line":17598},[67,41776,35167],{"class":77},[67,41778,909],{"class":73},[67,41780,35172],{"class":77},[67,41782,41783,41785,41787],{"class":69,"line":17603},[67,41784,35177],{"class":77},[67,41786,909],{"class":73},[67,41788,35182],{"class":77},[67,41790,41791,41793,41795,41797,41799,41801,41803,41805],{"class":69,"line":17616},[67,41792,35187],{"class":208},[67,41794,864],{"class":77},[67,41796,35192],{"class":84},[67,41798,35195],{"class":77},[67,41800,35198],{"class":84},[67,41802,1236],{"class":77},[67,41804,35203],{"class":84},[67,41806,35206],{"class":77},[14,41808,41810],{"id":41809},"_23googlenet","2.3.GoogLeNet",[40,41812,41814],{"id":41813},"_231原理","2.3.1.原理",[815,41816,41817],{},[818,41818,41819],{},"网络结构",[19,41821,41822],{},[725,41823],{"alt":62,"src":41824},"\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,41826,41827],{},"1x1卷积是为了减少通道数（通过填充和步幅来实现的）",[19,41829,41830],{},[725,41831],{"alt":62,"src":41832},"\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,41834,41835],{},[725,41836],{"alt":62,"src":41837},"\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,41839,41840],{},[725,41841],{"alt":62,"src":41842},"\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",[815,41844,41845],{"start":143},[818,41846,41847],{},"1x1卷积的优点",[19,41849,41850],{},[725,41851],{"alt":62,"src":41852},"\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",[815,41854,41855],{"start":149},[818,41856,41857],{},"全局平均池化层优点",[19,41859,41860],{},[725,41861],{"alt":62,"src":41862},"\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,41864,41865],{},[725,41866],{"alt":62,"src":41867},"\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",[815,41869,41870],{"start":155},[818,41871,41872],{},"参数详细描述",[19,41874,41875],{},[725,41876],{"alt":62,"src":41877},"\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,41879,41880],{},[725,41881],{"alt":62,"src":41882},"\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,41884,41885],{},[725,41886],{"alt":62,"src":41887},"\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,41889,41890],{},[725,41891],{"alt":62,"src":41892},"\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,41894,41895],{},[725,41896],{"alt":62,"src":41897},"\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,41899,41900],{},[725,41901],{"alt":62,"src":41902},"\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,41904,41905],{},[725,41906],{"alt":62,"src":41907},"\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,41909,41910],{},[725,41911],{"alt":62,"src":41912},"\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,41914,41915],{},[725,41916],{"alt":62,"src":41917},"\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,41919,41920],{},[725,41921],{"alt":62,"src":41922},"\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,41924,41925],{},[725,41926],{"alt":62,"src":41927},"\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,41929,41930],{},[725,41931],{"alt":62,"src":41932},"\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,41934,41935],{},[725,41936],{"alt":62,"src":41937},"\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,41939,41940],{},[725,41941],{"alt":62,"src":41942},"\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,41944,41945],{},[725,41946],{"alt":62,"src":41947},"\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,41949,41950],{},[725,41951],{"alt":62,"src":41952},"\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,41954,41955],{},[725,41956],{"alt":62,"src":41957},"\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,41959,41960],{},[725,41961],{"alt":62,"src":41962},"\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,41964,41965],{},[725,41966],{"alt":62,"src":41967},"\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,41969,41970],{},[725,41971],{"alt":62,"src":41972},"\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,41974,41975],{},[725,41976],{"alt":62,"src":41977},"\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",[40,41979,41981],{"id":41980},"_232代码实现","2.3.2.代码实现",[815,41983,41984],{},[818,41985,31248],{},[19,41987,41988],{},"根据原理一步一步搭建即可",[57,41990,41992],{"className":30915,"code":41991,"language":30917,"meta":62,"style":62},"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",[64,41993,41994,42000,42010,42020,42024,42041,42050,42065,42075,42080,42113,42118,42155,42202,42207,42243,42290,42295,42300,42335,42367,42371,42379,42395,42419,42444,42465,42470,42485,42489,42493,42498,42515,42520,42529,42544,42555,42599,42603,42631,42635,42646,42674,42678,42715,42719,42747,42751,42762,42798,42830,42858,42862,42873,42907,42939,42971,43004,43038,43066,43070,43081,43114,43146,43160,43164,43177,43181,43186,43198,43206,43228,43233,43238,43243,43248,43253,43258,43272,43280,43289,43302,43317,43326,43330,43338,43349,43360,43371,43382,43393,43399,43403,43408,43420,43440,43449],{"__ignoreMap":62},[67,41995,41996,41998],{"class":69,"line":70},[67,41997,30929],{"class":73},[67,41999,30932],{"class":77},[67,42001,42002,42004,42006,42008],{"class":69,"line":143},[67,42003,31274],{"class":73},[67,42005,31277],{"class":77},[67,42007,30929],{"class":73},[67,42009,31282],{"class":77},[67,42011,42012,42014,42016,42018],{"class":69,"line":149},[67,42013,31274],{"class":73},[67,42015,31294],{"class":77},[67,42017,30929],{"class":73},[67,42019,31299],{"class":77},[67,42021,42022],{"class":69,"line":155},[67,42023,177],{"emptyLinePlaceholder":176},[67,42025,42026,42028,42031,42033,42035,42037,42039],{"class":69,"line":161},[67,42027,15411],{"class":73},[67,42029,42030],{"class":112}," Inception",[67,42032,864],{"class":77},[67,42034,31315],{"class":112},[67,42036,240],{"class":77},[67,42038,31320],{"class":112},[67,42040,31323],{"class":77},[67,42042,42043,42045,42047],{"class":69,"line":167},[67,42044,31338],{"class":73},[67,42046,31341],{"class":208},[67,42048,42049],{"class":77},"(self,in_channels,c1,c2,c3,c4):\n",[67,42051,42052,42054,42057,42059,42061,42063],{"class":69,"line":173},[67,42053,31354],{"class":208},[67,42055,42056],{"class":77},"(Inception,",[67,42058,31360],{"class":208},[67,42060,31363],{"class":77},[67,42062,31366],{"class":208},[67,42064,2698],{"class":77},[67,42066,42067,42069,42071,42073],{"class":69,"line":180},[67,42068,31382],{"class":208},[67,42070,35308],{"class":77},[67,42072,909],{"class":73},[67,42074,35313],{"class":77},[67,42076,42077],{"class":69,"line":186},[67,42078,42079],{"class":202},"        # 路线1：定义1*1卷积\n",[67,42081,42082,42084,42087,42089,42091,42093,42095,42098,42100,42102,42105,42107,42109,42111],{"class":69,"line":444},[67,42083,31382],{"class":208},[67,42085,42086],{"class":77},".p1_1",[67,42088,909],{"class":73},[67,42090,31390],{"class":77},[67,42092,31393],{"class":5935},[67,42094,909],{"class":73},[67,42096,42097],{"class":77},"in_channels,",[67,42099,31402],{"class":5935},[67,42101,909],{"class":73},[67,42103,42104],{"class":77},"c1,",[67,42106,31411],{"class":5935},[67,42108,909],{"class":73},[67,42110,1077],{"class":208},[67,42112,870],{"class":77},[67,42114,42115],{"class":69,"line":2335},[67,42116,42117],{"class":202},"        # 路线2：定义1*1卷积和3*3\n",[67,42119,42120,42122,42125,42127,42129,42131,42133,42135,42137,42139,42142,42144,42147,42149,42151,42153],{"class":69,"line":2340},[67,42121,31382],{"class":208},[67,42123,42124],{"class":77},".p2_1",[67,42126,909],{"class":73},[67,42128,31390],{"class":77},[67,42130,31393],{"class":5935},[67,42132,909],{"class":73},[67,42134,42097],{"class":77},[67,42136,31402],{"class":5935},[67,42138,909],{"class":73},[67,42140,42141],{"class":77},"c2[",[67,42143,1051],{"class":208},[67,42145,42146],{"class":77},"],",[67,42148,31411],{"class":5935},[67,42150,909],{"class":73},[67,42152,1077],{"class":208},[67,42154,870],{"class":77},[67,42156,42157,42159,42162,42164,42166,42168,42170,42172,42174,42176,42178,42180,42182,42184,42186,42188,42190,42192,42194,42196,42198,42200],{"class":69,"line":2346},[67,42158,31382],{"class":208},[67,42160,42161],{"class":77},".p2_2",[67,42163,909],{"class":73},[67,42165,31390],{"class":77},[67,42167,31393],{"class":5935},[67,42169,909],{"class":73},[67,42171,42141],{"class":77},[67,42173,1051],{"class":208},[67,42175,42146],{"class":77},[67,42177,31402],{"class":5935},[67,42179,909],{"class":73},[67,42181,42141],{"class":77},[67,42183,1077],{"class":208},[67,42185,42146],{"class":77},[67,42187,31411],{"class":5935},[67,42189,909],{"class":73},[67,42191,933],{"class":208},[67,42193,1236],{"class":77},[67,42195,31420],{"class":5935},[67,42197,909],{"class":73},[67,42199,1077],{"class":208},[67,42201,870],{"class":77},[67,42203,42204],{"class":69,"line":2351},[67,42205,42206],{"class":202},"        # 路线3：定义1*1卷积和5*5\n",[67,42208,42209,42211,42214,42216,42218,42220,42222,42224,42226,42228,42231,42233,42235,42237,42239,42241],{"class":69,"line":2365},[67,42210,31382],{"class":208},[67,42212,42213],{"class":77},".p3_1",[67,42215,909],{"class":73},[67,42217,31390],{"class":77},[67,42219,31393],{"class":5935},[67,42221,909],{"class":73},[67,42223,42097],{"class":77},[67,42225,31402],{"class":5935},[67,42227,909],{"class":73},[67,42229,42230],{"class":77},"c3[",[67,42232,1051],{"class":208},[67,42234,42146],{"class":77},[67,42236,31411],{"class":5935},[67,42238,909],{"class":73},[67,42240,1077],{"class":208},[67,42242,870],{"class":77},[67,42244,42245,42247,42250,42252,42254,42256,42258,42260,42262,42264,42266,42268,42270,42272,42274,42276,42278,42280,42282,42284,42286,42288],{"class":69,"line":2370},[67,42246,31382],{"class":208},[67,42248,42249],{"class":77},".p3_2",[67,42251,909],{"class":73},[67,42253,31390],{"class":77},[67,42255,31393],{"class":5935},[67,42257,909],{"class":73},[67,42259,42230],{"class":77},[67,42261,1051],{"class":208},[67,42263,42146],{"class":77},[67,42265,31402],{"class":5935},[67,42267,909],{"class":73},[67,42269,42230],{"class":77},[67,42271,1077],{"class":208},[67,42273,42146],{"class":77},[67,42275,31411],{"class":5935},[67,42277,909],{"class":73},[67,42279,1177],{"class":208},[67,42281,1236],{"class":77},[67,42283,31420],{"class":5935},[67,42285,909],{"class":73},[67,42287,939],{"class":208},[67,42289,870],{"class":77},[67,42291,42292],{"class":69,"line":2376},[67,42293,42294],{"class":202},"        # 路线4：定义3*3最大池化和1*1卷积\n",[67,42296,42297],{"class":69,"line":2397},[67,42298,42299],{"class":202},"        # 最大池化如果不写步幅的话，默认步幅等于卷积核大小\n",[67,42301,42302,42304,42307,42309,42311,42313,42315,42317,42319,42321,42323,42325,42327,42329,42331,42333],{"class":69,"line":2402},[67,42303,31382],{"class":208},[67,42305,42306],{"class":77},".p4_1",[67,42308,909],{"class":73},[67,42310,35366],{"class":77},[67,42312,31411],{"class":5935},[67,42314,909],{"class":73},[67,42316,933],{"class":208},[67,42318,1236],{"class":77},[67,42320,31466],{"class":5935},[67,42322,909],{"class":73},[67,42324,1077],{"class":208},[67,42326,1236],{"class":77},[67,42328,31420],{"class":5935},[67,42330,909],{"class":73},[67,42332,1077],{"class":208},[67,42334,870],{"class":77},[67,42336,42337,42339,42342,42344,42346,42348,42350,42352,42354,42356,42359,42361,42363,42365],{"class":69,"line":2416},[67,42338,31382],{"class":208},[67,42340,42341],{"class":77},".p4_2",[67,42343,909],{"class":73},[67,42345,31390],{"class":77},[67,42347,31393],{"class":5935},[67,42349,909],{"class":73},[67,42351,42097],{"class":77},[67,42353,31402],{"class":5935},[67,42355,909],{"class":73},[67,42357,42358],{"class":77},"c4,",[67,42360,31411],{"class":5935},[67,42362,909],{"class":73},[67,42364,1077],{"class":208},[67,42366,870],{"class":77},[67,42368,42369],{"class":69,"line":2421},[67,42370,177],{"emptyLinePlaceholder":176},[67,42372,42373,42375,42377],{"class":69,"line":2450},[67,42374,31338],{"class":73},[67,42376,31630],{"class":112},[67,42378,31633],{"class":77},[67,42380,42381,42384,42386,42388,42390,42392],{"class":69,"line":2455},[67,42382,42383],{"class":77},"        p1",[67,42385,909],{"class":73},[67,42387,31360],{"class":208},[67,42389,35721],{"class":77},[67,42391,31360],{"class":208},[67,42393,42394],{"class":77},".p1_1(x))\n",[67,42396,42397,42399,42401,42403,42405,42407,42410,42412,42414,42416],{"class":69,"line":2472},[67,42398,7804],{"class":77},[67,42400,909],{"class":73},[67,42402,31360],{"class":208},[67,42404,35721],{"class":77},[67,42406,31360],{"class":208},[67,42408,42409],{"class":77},".p2_2(",[67,42411,31360],{"class":208},[67,42413,35721],{"class":77},[67,42415,31360],{"class":208},[67,42417,42418],{"class":77},".p2_1(x))))\n",[67,42420,42421,42424,42426,42428,42430,42432,42435,42437,42439,42441],{"class":69,"line":2477},[67,42422,42423],{"class":77},"        p3",[67,42425,909],{"class":73},[67,42427,31360],{"class":208},[67,42429,35721],{"class":77},[67,42431,31360],{"class":208},[67,42433,42434],{"class":77},".p3_2(",[67,42436,31360],{"class":208},[67,42438,35721],{"class":77},[67,42440,31360],{"class":208},[67,42442,42443],{"class":77},".p3_1(x))))\n",[67,42445,42446,42449,42451,42453,42455,42457,42460,42462],{"class":69,"line":2482},[67,42447,42448],{"class":77},"        p4",[67,42450,909],{"class":73},[67,42452,31360],{"class":208},[67,42454,35721],{"class":77},[67,42456,31360],{"class":208},[67,42458,42459],{"class":77},".p4_2(",[67,42461,31360],{"class":208},[67,42463,42464],{"class":77},".p4_1(x)))\n",[67,42466,42467],{"class":69,"line":2487},[67,42468,42469],{"class":202},"        # 在通道维度上连结输出    .cat()函数用于将多个张量在指定维度上进行连接\n",[67,42471,42472,42474,42477,42479,42481,42483],{"class":69,"line":2501},[67,42473,15469],{"class":73},[67,42475,42476],{"class":77}," torch.cat((p1,p2,p3,p4),",[67,42478,33222],{"class":5935},[67,42480,909],{"class":73},[67,42482,1077],{"class":208},[67,42484,870],{"class":77},[67,42486,42487],{"class":69,"line":2506},[67,42488,177],{"emptyLinePlaceholder":176},[67,42490,42491],{"class":69,"line":3298},[67,42492,177],{"emptyLinePlaceholder":176},[67,42494,42495],{"class":69,"line":3312},[67,42496,42497],{"class":202},"# 搭建GoogLeNet网络\n",[67,42499,42500,42502,42505,42507,42509,42511,42513],{"class":69,"line":3320},[67,42501,15411],{"class":73},[67,42503,42504],{"class":112}," GoogLeNet",[67,42506,864],{"class":77},[67,42508,31315],{"class":112},[67,42510,240],{"class":77},[67,42512,31320],{"class":112},[67,42514,31323],{"class":77},[67,42516,42517],{"class":69,"line":3325},[67,42518,42519],{"class":202},"    # 必须把Inception导入到里边\n",[67,42521,42522,42524,42526],{"class":69,"line":3331},[67,42523,31338],{"class":73},[67,42525,31341],{"class":208},[67,42527,42528],{"class":77},"(self,Inception):\n",[67,42530,42531,42533,42536,42538,42540,42542],{"class":69,"line":3337},[67,42532,31354],{"class":208},[67,42534,42535],{"class":77},"(GoogLeNet,",[67,42537,31360],{"class":208},[67,42539,31363],{"class":77},[67,42541,31366],{"class":208},[67,42543,2698],{"class":77},[67,42545,42546,42548,42551,42553],{"class":69,"line":3342},[67,42547,31382],{"class":208},[67,42549,42550],{"class":77},".b1",[67,42552,909],{"class":73},[67,42554,38546],{"class":77},[67,42556,42557,42559,42561,42563,42565,42567,42569,42571,42573,42575,42577,42579,42581,42583,42585,42587,42589,42591,42593,42595,42597],{"class":69,"line":8667},[67,42558,38551],{"class":77},[67,42560,31393],{"class":5935},[67,42562,909],{"class":73},[67,42564,1077],{"class":208},[67,42566,1236],{"class":77},[67,42568,31402],{"class":5935},[67,42570,909],{"class":73},[67,42572,1063],{"class":208},[67,42574,1236],{"class":77},[67,42576,31411],{"class":5935},[67,42578,909],{"class":73},[67,42580,1227],{"class":208},[67,42582,1236],{"class":77},[67,42584,31466],{"class":5935},[67,42586,909],{"class":73},[67,42588,939],{"class":208},[67,42590,1236],{"class":77},[67,42592,31420],{"class":5935},[67,42594,909],{"class":73},[67,42596,933],{"class":208},[67,42598,38584],{"class":77},[67,42600,42601],{"class":69,"line":8691},[67,42602,38589],{"class":77},[67,42604,42605,42607,42609,42611,42613,42615,42617,42619,42621,42623,42625,42627,42629],{"class":69,"line":8696},[67,42606,38634],{"class":77},[67,42608,31411],{"class":5935},[67,42610,909],{"class":73},[67,42612,933],{"class":208},[67,42614,1236],{"class":77},[67,42616,31466],{"class":5935},[67,42618,909],{"class":73},[67,42620,939],{"class":208},[67,42622,1236],{"class":77},[67,42624,31420],{"class":5935},[67,42626,909],{"class":73},[67,42628,1077],{"class":208},[67,42630,870],{"class":77},[67,42632,42633],{"class":69,"line":8702},[67,42634,38663],{"class":77},[67,42636,42637,42639,42642,42644],{"class":69,"line":8729},[67,42638,31382],{"class":208},[67,42640,42641],{"class":77},".b2",[67,42643,909],{"class":73},[67,42645,38546],{"class":77},[67,42647,42648,42650,42652,42654,42656,42658,42660,42662,42664,42666,42668,42670,42672],{"class":69,"line":8734},[67,42649,38551],{"class":77},[67,42651,31393],{"class":5935},[67,42653,909],{"class":73},[67,42655,1063],{"class":208},[67,42657,1236],{"class":77},[67,42659,31402],{"class":5935},[67,42661,909],{"class":73},[67,42663,1063],{"class":208},[67,42665,1236],{"class":77},[67,42667,31411],{"class":5935},[67,42669,909],{"class":73},[67,42671,1077],{"class":208},[67,42673,38584],{"class":77},[67,42675,42676],{"class":69,"line":8740},[67,42677,38589],{"class":77},[67,42679,42680,42682,42684,42686,42688,42690,42692,42694,42697,42699,42701,42703,42705,42707,42709,42711,42713],{"class":69,"line":8752},[67,42681,38551],{"class":77},[67,42683,31393],{"class":5935},[67,42685,909],{"class":73},[67,42687,1063],{"class":208},[67,42689,1236],{"class":77},[67,42691,31402],{"class":5935},[67,42693,909],{"class":73},[67,42695,42696],{"class":208},"192",[67,42698,1236],{"class":77},[67,42700,31411],{"class":5935},[67,42702,909],{"class":73},[67,42704,933],{"class":208},[67,42706,1236],{"class":77},[67,42708,31420],{"class":5935},[67,42710,909],{"class":73},[67,42712,1077],{"class":208},[67,42714,38584],{"class":77},[67,42716,42717],{"class":69,"line":8764},[67,42718,38589],{"class":77},[67,42720,42721,42723,42725,42727,42729,42731,42733,42735,42737,42739,42741,42743,42745],{"class":69,"line":8776},[67,42722,38634],{"class":77},[67,42724,31411],{"class":5935},[67,42726,909],{"class":73},[67,42728,933],{"class":208},[67,42730,1236],{"class":77},[67,42732,31466],{"class":5935},[67,42734,909],{"class":73},[67,42736,939],{"class":208},[67,42738,1236],{"class":77},[67,42740,31420],{"class":5935},[67,42742,909],{"class":73},[67,42744,1077],{"class":208},[67,42746,870],{"class":77},[67,42748,42749],{"class":69,"line":10435},[67,42750,38663],{"class":77},[67,42752,42753,42755,42758,42760],{"class":69,"line":10459},[67,42754,31382],{"class":208},[67,42756,42757],{"class":77},".b3",[67,42759,909],{"class":73},[67,42761,38546],{"class":77},[67,42763,42764,42767,42769,42771,42773,42776,42778,42780,42782,42785,42787,42789,42791,42794,42796],{"class":69,"line":10482},[67,42765,42766],{"class":77},"            Inception(",[67,42768,42696],{"class":208},[67,42770,1236],{"class":77},[67,42772,1063],{"class":208},[67,42774,42775],{"class":77},",(",[67,42777,1069],{"class":208},[67,42779,1236],{"class":77},[67,42781,32607],{"class":208},[67,42783,42784],{"class":77},"),(",[67,42786,1457],{"class":208},[67,42788,1236],{"class":77},[67,42790,1057],{"class":208},[67,42792,42793],{"class":77},"),",[67,42795,1057],{"class":208},[67,42797,38584],{"class":77},[67,42799,42800,42802,42804,42806,42808,42810,42812,42814,42816,42818,42820,42822,42824,42826,42828],{"class":69,"line":10506},[67,42801,42766],{"class":77},[67,42803,35407],{"class":208},[67,42805,1236],{"class":77},[67,42807,32607],{"class":208},[67,42809,42775],{"class":77},[67,42811,32607],{"class":208},[67,42813,1236],{"class":77},[67,42815,42696],{"class":208},[67,42817,42784],{"class":77},[67,42819,1057],{"class":208},[67,42821,1236],{"class":77},[67,42823,1069],{"class":208},[67,42825,42793],{"class":77},[67,42827,1063],{"class":208},[67,42829,38584],{"class":77},[67,42831,42832,42834,42836,42838,42840,42842,42844,42846,42848,42850,42852,42854,42856],{"class":69,"line":10511},[67,42833,38634],{"class":77},[67,42835,31411],{"class":5935},[67,42837,909],{"class":73},[67,42839,933],{"class":208},[67,42841,1236],{"class":77},[67,42843,31466],{"class":5935},[67,42845,909],{"class":73},[67,42847,939],{"class":208},[67,42849,1236],{"class":77},[67,42851,31420],{"class":5935},[67,42853,909],{"class":73},[67,42855,1077],{"class":208},[67,42857,870],{"class":77},[67,42859,42860],{"class":69,"line":10516},[67,42861,38663],{"class":77},[67,42863,42864,42866,42869,42871],{"class":69,"line":10521},[67,42865,31382],{"class":208},[67,42867,42868],{"class":77},".b4",[67,42870,909],{"class":73},[67,42872,38546],{"class":77},[67,42874,42875,42877,42880,42882,42884,42886,42888,42890,42893,42895,42897,42899,42901,42903,42905],{"class":69,"line":10530},[67,42876,42766],{"class":77},[67,42878,42879],{"class":208},"480",[67,42881,1236],{"class":77},[67,42883,42696],{"class":208},[67,42885,42775],{"class":77},[67,42887,1069],{"class":208},[67,42889,1236],{"class":77},[67,42891,42892],{"class":208},"208",[67,42894,42784],{"class":77},[67,42896,1457],{"class":208},[67,42898,1236],{"class":77},[67,42900,1463],{"class":208},[67,42902,42793],{"class":77},[67,42904,1063],{"class":208},[67,42906,38584],{"class":77},[67,42908,42909,42911,42913,42915,42917,42919,42921,42923,42925,42927,42929,42931,42933,42935,42937],{"class":69,"line":10535},[67,42910,42766],{"class":77},[67,42912,38994],{"class":208},[67,42914,1236],{"class":77},[67,42916,21765],{"class":208},[67,42918,42775],{"class":77},[67,42920,1474],{"class":208},[67,42922,1236],{"class":77},[67,42924,32038],{"class":208},[67,42926,42784],{"class":77},[67,42928,1656],{"class":208},[67,42930,1236],{"class":77},[67,42932,1063],{"class":208},[67,42934,42793],{"class":77},[67,42936,1063],{"class":208},[67,42938,38584],{"class":77},[67,42940,42941,42943,42945,42947,42949,42951,42953,42955,42957,42959,42961,42963,42965,42967,42969],{"class":69,"line":10541},[67,42942,42766],{"class":77},[67,42944,38994],{"class":208},[67,42946,1236],{"class":77},[67,42948,32607],{"class":208},[67,42950,42775],{"class":77},[67,42952,32607],{"class":208},[67,42954,1236],{"class":77},[67,42956,35407],{"class":208},[67,42958,42784],{"class":77},[67,42960,1656],{"class":208},[67,42962,1236],{"class":77},[67,42964,1063],{"class":208},[67,42966,42793],{"class":77},[67,42968,1063],{"class":208},[67,42970,38584],{"class":77},[67,42972,42973,42975,42977,42979,42981,42983,42985,42987,42990,42992,42994,42996,42998,43000,43002],{"class":69,"line":10562},[67,42974,42766],{"class":77},[67,42976,38994],{"class":208},[67,42978,1236],{"class":77},[67,42980,1474],{"class":208},[67,42982,42775],{"class":77},[67,42984,32607],{"class":208},[67,42986,1236],{"class":77},[67,42988,42989],{"class":208},"288",[67,42991,42784],{"class":77},[67,42993,1057],{"class":208},[67,42995,1236],{"class":77},[67,42997,1063],{"class":208},[67,42999,42793],{"class":77},[67,43001,1063],{"class":208},[67,43003,38584],{"class":77},[67,43005,43006,43008,43011,43013,43015,43017,43019,43021,43024,43026,43028,43030,43032,43034,43036],{"class":69,"line":10568},[67,43007,42766],{"class":77},[67,43009,43010],{"class":208},"528",[67,43012,1236],{"class":77},[67,43014,35407],{"class":208},[67,43016,42775],{"class":77},[67,43018,21765],{"class":208},[67,43020,1236],{"class":77},[67,43022,43023],{"class":208},"320",[67,43025,42784],{"class":77},[67,43027,1057],{"class":208},[67,43029,1236],{"class":77},[67,43031,32607],{"class":208},[67,43033,42793],{"class":77},[67,43035,32607],{"class":208},[67,43037,38584],{"class":77},[67,43039,43040,43042,43044,43046,43048,43050,43052,43054,43056,43058,43060,43062,43064],{"class":69,"line":10582},[67,43041,38634],{"class":77},[67,43043,31411],{"class":5935},[67,43045,909],{"class":73},[67,43047,933],{"class":208},[67,43049,1236],{"class":77},[67,43051,31466],{"class":5935},[67,43053,909],{"class":73},[67,43055,939],{"class":208},[67,43057,1236],{"class":77},[67,43059,31420],{"class":5935},[67,43061,909],{"class":73},[67,43063,1077],{"class":208},[67,43065,870],{"class":77},[67,43067,43068],{"class":69,"line":10588},[67,43069,38663],{"class":77},[67,43071,43072,43074,43077,43079],{"class":69,"line":10615},[67,43073,31382],{"class":208},[67,43075,43076],{"class":77},".b5",[67,43078,909],{"class":73},[67,43080,38546],{"class":77},[67,43082,43083,43085,43088,43090,43092,43094,43096,43098,43100,43102,43104,43106,43108,43110,43112],{"class":69,"line":10624},[67,43084,42766],{"class":77},[67,43086,43087],{"class":208},"832",[67,43089,1236],{"class":77},[67,43091,35407],{"class":208},[67,43093,42775],{"class":77},[67,43095,21765],{"class":208},[67,43097,1236],{"class":77},[67,43099,43023],{"class":208},[67,43101,42784],{"class":77},[67,43103,1057],{"class":208},[67,43105,1236],{"class":77},[67,43107,32607],{"class":208},[67,43109,42793],{"class":77},[67,43111,32607],{"class":208},[67,43113,38584],{"class":77},[67,43115,43116,43118,43120,43122,43124,43126,43128,43130,43132,43134,43136,43138,43140,43142,43144],{"class":69,"line":10630},[67,43117,42766],{"class":77},[67,43119,43087],{"class":208},[67,43121,1236],{"class":77},[67,43123,35477],{"class":208},[67,43125,42775],{"class":77},[67,43127,42696],{"class":208},[67,43129,1236],{"class":77},[67,43131,35477],{"class":208},[67,43133,42784],{"class":77},[67,43135,1463],{"class":208},[67,43137,1236],{"class":77},[67,43139,32607],{"class":208},[67,43141,42793],{"class":77},[67,43143,32607],{"class":208},[67,43145,38584],{"class":77},[67,43147,43148,43151,43153,43155,43157],{"class":69,"line":10638},[67,43149,43150],{"class":77},"            nn.AdaptiveAvgPool2d((",[67,43152,1077],{"class":208},[67,43154,1236],{"class":77},[67,43156,1077],{"class":208},[67,43158,43159],{"class":77},")),\n",[67,43161,43162],{"class":69,"line":10643},[67,43163,39327],{"class":77},[67,43165,43166,43168,43171,43173,43175],{"class":69,"line":17321},[67,43167,39332],{"class":77},[67,43169,43170],{"class":208},"1024",[67,43172,1236],{"class":77},[67,43174,1303],{"class":208},[67,43176,870],{"class":77},[67,43178,43179],{"class":69,"line":17327},[67,43180,38663],{"class":77},[67,43182,43183],{"class":69,"line":17350},[67,43184,43185],{"class":202},"        # 对模型参数初始化\n",[67,43187,43188,43190,43192,43194,43196],{"class":69,"line":17356},[67,43189,4123],{"class":73},[67,43191,39405],{"class":77},[67,43193,81],{"class":73},[67,43195,39410],{"class":208},[67,43197,39413],{"class":77},[67,43199,43200,43202,43204],{"class":69,"line":17379},[67,43201,5361],{"class":73},[67,43203,39425],{"class":208},[67,43205,39428],{"class":77},[67,43207,43208,43210,43213,43215,43218,43220,43222,43224,43226],{"class":69,"line":17393},[67,43209,39438],{"class":77},[67,43211,43212],{"class":5935},"mode",[67,43214,909],{"class":73},[67,43216,43217],{"class":84},"'fan_out'",[67,43219,1236],{"class":77},[67,43221,39441],{"class":5935},[67,43223,909],{"class":73},[67,43225,39446],{"class":84},[67,43227,870],{"class":77},[67,43229,43230],{"class":69,"line":17413},[67,43231,43232],{"class":202},"                # ① m.weight要初始化的权重（比如Conv2d或Linear的权重矩阵）。\n",[67,43234,43235],{"class":69,"line":17419},[67,43236,43237],{"class":202},"                # ② mode = 'fan_out'决定使用的fan值：\n",[67,43239,43240],{"class":69,"line":17430},[67,43241,43242],{"class":202},"                # fan_in：输入通道数 × kernel大小（用于保持前向传播稳定）\n",[67,43244,43245],{"class":69,"line":17453},[67,43246,43247],{"class":202},"                # fan_out：输出通道数 × kernel大小（用于保持反向传播稳定）\n",[67,43249,43250],{"class":69,"line":17475},[67,43251,43252],{"class":202},"                # fan_out常用于残差网络ResNet，因为让反向传播更平稳。\n",[67,43254,43255],{"class":69,"line":17480},[67,43256,43257],{"class":202},"                # ③ nonlinearity = 'relu'告诉PyTorch你后面用的是ReLU，它会自动使用ReLU对应的gain系数\n",[67,43259,43260,43262,43264,43266,43268,43270],{"class":69,"line":17486},[67,43261,39458],{"class":73},[67,43263,39461],{"class":77},[67,43265,39464],{"class":73},[67,43267,39467],{"class":73},[67,43269,39470],{"class":208},[67,43271,4459],{"class":77},[67,43273,43274,43276,43278],{"class":69,"line":17500},[67,43275,39482],{"class":77},[67,43277,1051],{"class":208},[67,43279,870],{"class":77},[67,43281,43282,43285,43287],{"class":69,"line":17513},[67,43283,43284],{"class":73},"                elif",[67,43286,39425],{"class":208},[67,43288,39501],{"class":77},[67,43290,43291,43294,43296,43298,43300],{"class":69,"line":17518},[67,43292,43293],{"class":77},"                    nn.init.normal_(m.weight,",[67,43295,1051],{"class":208},[67,43297,1236],{"class":77},[67,43299,39523],{"class":208},[67,43301,870],{"class":77},[67,43303,43304,43307,43309,43311,43313,43315],{"class":69,"line":17532},[67,43305,43306],{"class":73},"                    if",[67,43308,39461],{"class":77},[67,43310,39464],{"class":73},[67,43312,39467],{"class":73},[67,43314,39470],{"class":208},[67,43316,4459],{"class":77},[67,43318,43319,43322,43324],{"class":69,"line":17537},[67,43320,43321],{"class":77},"                        nn.init.constant_(m.bias,",[67,43323,1051],{"class":208},[67,43325,870],{"class":77},[67,43327,43328],{"class":69,"line":17543},[67,43329,35702],{"class":202},[67,43331,43332,43334,43336],{"class":69,"line":17548},[67,43333,31338],{"class":73},[67,43335,31630],{"class":112},[67,43337,31633],{"class":77},[67,43339,43340,43342,43344,43346],{"class":69,"line":17562},[67,43341,31638],{"class":77},[67,43343,909],{"class":73},[67,43345,31360],{"class":208},[67,43347,43348],{"class":77},".b1(x)\n",[67,43350,43351,43353,43355,43357],{"class":69,"line":17567},[67,43352,31638],{"class":77},[67,43354,909],{"class":73},[67,43356,31360],{"class":208},[67,43358,43359],{"class":77},".b2(x)\n",[67,43361,43362,43364,43366,43368],{"class":69,"line":17572},[67,43363,31638],{"class":77},[67,43365,909],{"class":73},[67,43367,31360],{"class":208},[67,43369,43370],{"class":77},".b3(x)\n",[67,43372,43373,43375,43377,43379],{"class":69,"line":17586},[67,43374,31638],{"class":77},[67,43376,909],{"class":73},[67,43378,31360],{"class":208},[67,43380,43381],{"class":77},".b4(x)\n",[67,43383,43384,43386,43388,43390],{"class":69,"line":17598},[67,43385,31638],{"class":77},[67,43387,909],{"class":73},[67,43389,31360],{"class":208},[67,43391,43392],{"class":77},".b5(x)\n",[67,43394,43395,43397],{"class":69,"line":17603},[67,43396,15469],{"class":73},[67,43398,31746],{"class":77},[67,43400,43401],{"class":69,"line":17616},[67,43402,177],{"emptyLinePlaceholder":176},[67,43404,43405],{"class":69,"line":17621},[67,43406,43407],{"class":202},"# 模型展示\n",[67,43409,43410,43412,43414,43416,43418],{"class":69,"line":17626},[67,43411,2254],{"class":73},[67,43413,31757],{"class":208},[67,43415,3670],{"class":73},[67,43417,31762],{"class":84},[67,43419,4459],{"class":77},[67,43421,43422,43424,43426,43428,43430,43432,43434,43436,43438],{"class":69,"line":17631},[67,43423,31774],{"class":77},[67,43425,909],{"class":73},[67,43427,30988],{"class":77},[67,43429,31781],{"class":84},[67,43431,2427],{"class":73},[67,43433,31786],{"class":77},[67,43435,2424],{"class":73},[67,43437,31013],{"class":84},[67,43439,870],{"class":77},[67,43441,43442,43444,43446],{"class":69,"line":17644},[67,43443,31826],{"class":77},[67,43445,909],{"class":73},[67,43447,43448],{"class":77},"GoogLeNet(Inception).to(device)\n",[67,43450,43451,43453,43455,43457,43459,43461,43463,43465],{"class":69,"line":17649},[67,43452,31836],{"class":208},[67,43454,31839],{"class":77},[67,43456,1077],{"class":208},[67,43458,1236],{"class":77},[67,43460,32038],{"class":208},[67,43462,1236],{"class":77},[67,43464,32038],{"class":208},[67,43466,31852],{"class":77},[815,43468,43469],{"start":143},[818,43470,39720],{},[57,43472,43474],{"className":30915,"code":43473,"language":30917,"meta":62,"style":62},"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",[64,43475,43476,43482,43488,43498,43504,43514,43524,43534,43544,43554,43558,43569,43579,43583,43587,43591,43599,43611,43621,43637,43647,43679,43693,43703,43713,43717,43727,43741,43751,43761,43771,43777,43781,43785,43789,43793,43797,43805,43825,43829,43833,43837,43841,43845,43861,43865,43869,43877,43881,43885,43893,43897,43901,43905,43913,43917,43921,43925,43929,43937,43941,43949,43953,43961,43965,43973,43977,43985,43989,43993,44001,44005,44009,44013,44025,44049,44063,44067,44071,44075,44083,44087,44095,44099,44107,44111,44119,44123,44131,44135,44143,44147,44159,44163,44171,44175,44183,44187,44191,44195,44199,44207,44211,44227,44231,44239,44243,44247,44251,44255,44259,44263,44267,44283,44287,44299,44303,44315,44319,44331,44335,44343,44347,44355,44359,44363,44367,44373,44377,44385,44389,44405,44409,44417,44421,44437,44449,44453,44465,44469,44473,44481,44485,44489,44497,44501,44509,44513,44521,44525,44529,44571,44613,44617,44621,44637,44641,44657,44661,44665,44673,44677,44681,44693,44731,44735,44739,44747,44751,44765,44775,44781,44787,44793,44799,44803,44807,44813,44817,44821,44829,44833,44851,44855,44859,44863,44879,44883,44887,44891,44895,44899,44919,44939,44943,44947,44951,44959,44967,44971,44987,45007,45027,45031,45035,45043,45051,45055,45059,45063,45075,45079,45089,45097,45114],{"__ignoreMap":62},[67,43477,43478,43480],{"class":69,"line":70},[67,43479,30929],{"class":73},[67,43481,32359],{"class":77},[67,43483,43484,43486],{"class":69,"line":143},[67,43485,30929],{"class":73},[67,43487,32366],{"class":77},[67,43489,43490,43492,43494,43496],{"class":69,"line":149},[67,43491,30929],{"class":73},[67,43493,32377],{"class":77},[67,43495,31920],{"class":73},[67,43497,32382],{"class":77},[67,43499,43500,43502],{"class":69,"line":155},[67,43501,30929],{"class":73},[67,43503,30932],{"class":77},[67,43505,43506,43508,43510,43512],{"class":69,"line":161},[67,43507,31274],{"class":73},[67,43509,31952],{"class":77},[67,43511,30929],{"class":73},[67,43513,32399],{"class":77},[67,43515,43516,43518,43520,43522],{"class":69,"line":167},[67,43517,31274],{"class":73},[67,43519,31905],{"class":77},[67,43521,30929],{"class":73},[67,43523,31910],{"class":77},[67,43525,43526,43528,43530,43532],{"class":69,"line":173},[67,43527,31274],{"class":73},[67,43529,31935],{"class":77},[67,43531,30929],{"class":73},[67,43533,31940],{"class":77},[67,43535,43536,43538,43540,43542],{"class":69,"line":180},[67,43537,30929],{"class":73},[67,43539,31952],{"class":77},[67,43541,31920],{"class":73},[67,43543,31957],{"class":77},[67,43545,43546,43548,43550,43552],{"class":69,"line":186},[67,43547,30929],{"class":73},[67,43549,31969],{"class":77},[67,43551,31920],{"class":73},[67,43553,31974],{"class":77},[67,43555,43556],{"class":69,"line":444},[67,43557,32444],{"class":202},[67,43559,43560,43562,43564,43566],{"class":69,"line":2335},[67,43561,31274],{"class":73},[67,43563,32451],{"class":77},[67,43565,30929],{"class":73},[67,43567,43568],{"class":77}," GoogLeNet, Inception\n",[67,43570,43571,43573,43575,43577],{"class":69,"line":2340},[67,43572,31274],{"class":73},[67,43574,31277],{"class":77},[67,43576,30929],{"class":73},[67,43578,31282],{"class":77},[67,43580,43581],{"class":69,"line":2346},[67,43582,177],{"emptyLinePlaceholder":176},[67,43584,43585],{"class":69,"line":2351},[67,43586,177],{"emptyLinePlaceholder":176},[67,43588,43589],{"class":69,"line":2365},[67,43590,32479],{"class":202},[67,43592,43593,43595,43597],{"class":69,"line":2370},[67,43594,32484],{"class":73},[67,43596,32487],{"class":112},[67,43598,32490],{"class":77},[67,43600,43601,43603,43605,43607,43609],{"class":69,"line":2376},[67,43602,32495],{"class":77},[67,43604,909],{"class":73},[67,43606,31992],{"class":77},[67,43608,32000],{"class":84},[67,43610,32003],{"class":77},[67,43612,43613,43615,43617,43619],{"class":69,"line":2397},[67,43614,32508],{"class":5935},[67,43616,909],{"class":73},[67,43618,32013],{"class":208},[67,43620,32003],{"class":77},[67,43622,43623,43625,43627,43629,43631,43633,43635],{"class":69,"line":2402},[67,43624,32519],{"class":5935},[67,43626,909],{"class":73},[67,43628,32030],{"class":77},[67,43630,32033],{"class":5935},[67,43632,909],{"class":73},[67,43634,35986],{"class":208},[67,43636,32041],{"class":77},[67,43638,43639,43641,43643,43645],{"class":69,"line":2416},[67,43640,32536],{"class":5935},[67,43642,909],{"class":73},[67,43644,32013],{"class":208},[67,43646,870],{"class":77},[67,43648,43649,43651,43653,43655,43657,43659,43661,43663,43665,43667,43669,43671,43673,43675,43677],{"class":69,"line":2421},[67,43650,32547],{"class":77},[67,43652,909],{"class":73},[67,43654,32552],{"class":77},[67,43656,32555],{"class":208},[67,43658,864],{"class":77},[67,43660,32560],{"class":208},[67,43662,1312],{"class":73},[67,43664,8077],{"class":208},[67,43666,32567],{"class":77},[67,43668,32555],{"class":208},[67,43670,864],{"class":77},[67,43672,32574],{"class":208},[67,43674,1312],{"class":73},[67,43676,8077],{"class":208},[67,43678,32581],{"class":77},[67,43680,43681,43683,43685,43687,43689,43691],{"class":69,"line":2450},[67,43682,32586],{"class":77},[67,43684,909],{"class":73},[67,43686,32591],{"class":77},[67,43688,32074],{"class":5935},[67,43690,909],{"class":73},[67,43692,32079],{"class":77},[67,43694,43695,43697,43699,43701],{"class":69,"line":2455},[67,43696,32602],{"class":5935},[67,43698,909],{"class":73},[67,43700,1057],{"class":208},[67,43702,32003],{"class":77},[67,43704,43705,43707,43709,43711],{"class":69,"line":2472},[67,43706,32614],{"class":5935},[67,43708,909],{"class":73},[67,43710,32013],{"class":208},[67,43712,32003],{"class":77},[67,43714,43715],{"class":69,"line":2477},[67,43716,32625],{"class":202},[67,43718,43719,43721,43723,43725],{"class":69,"line":2482},[67,43720,32630],{"class":5935},[67,43722,909],{"class":73},[67,43724,1253],{"class":208},[67,43726,870],{"class":77},[67,43728,43729,43731,43733,43735,43737,43739],{"class":69,"line":2487},[67,43730,32641],{"class":77},[67,43732,909],{"class":73},[67,43734,32071],{"class":77},[67,43736,32074],{"class":5935},[67,43738,909],{"class":73},[67,43740,32652],{"class":77},[67,43742,43743,43745,43747,43749],{"class":69,"line":2501},[67,43744,32657],{"class":5935},[67,43746,909],{"class":73},[67,43748,1057],{"class":208},[67,43750,32003],{"class":77},[67,43752,43753,43755,43757,43759],{"class":69,"line":2506},[67,43754,32668],{"class":5935},[67,43756,909],{"class":73},[67,43758,32013],{"class":208},[67,43760,32003],{"class":77},[67,43762,43763,43765,43767,43769],{"class":69,"line":3298},[67,43764,32679],{"class":5935},[67,43766,909],{"class":73},[67,43768,1253],{"class":208},[67,43770,870],{"class":77},[67,43772,43773,43775],{"class":69,"line":3312},[67,43774,4810],{"class":73},[67,43776,32692],{"class":77},[67,43778,43779],{"class":69,"line":3320},[67,43780,177],{"emptyLinePlaceholder":176},[67,43782,43783],{"class":69,"line":3325},[67,43784,32701],{"class":202},[67,43786,43787],{"class":69,"line":3331},[67,43788,32706],{"class":202},[67,43790,43791],{"class":69,"line":3337},[67,43792,177],{"emptyLinePlaceholder":176},[67,43794,43795],{"class":69,"line":3342},[67,43796,32715],{"class":202},[67,43798,43799,43801,43803],{"class":69,"line":8667},[67,43800,32484],{"class":73},[67,43802,32722],{"class":112},[67,43804,32725],{"class":77},[67,43806,43807,43809,43811,43813,43815,43817,43819,43821,43823],{"class":69,"line":8691},[67,43808,31774],{"class":77},[67,43810,909],{"class":73},[67,43812,30988],{"class":77},[67,43814,31781],{"class":84},[67,43816,2427],{"class":73},[67,43818,31786],{"class":77},[67,43820,2424],{"class":73},[67,43822,32744],{"class":84},[67,43824,870],{"class":77},[67,43826,43827],{"class":69,"line":8696},[67,43828,177],{"emptyLinePlaceholder":176},[67,43830,43831],{"class":69,"line":8702},[67,43832,177],{"emptyLinePlaceholder":176},[67,43834,43835],{"class":69,"line":8729},[67,43836,32759],{"class":202},[67,43838,43839],{"class":69,"line":8734},[67,43840,32764],{"class":202},[67,43842,43843],{"class":69,"line":8740},[67,43844,32769],{"class":202},[67,43846,43847,43849,43851,43853,43855,43857,43859],{"class":69,"line":8752},[67,43848,32774],{"class":77},[67,43850,909],{"class":73},[67,43852,32779],{"class":77},[67,43854,32782],{"class":5935},[67,43856,909],{"class":73},[67,43858,32787],{"class":208},[67,43860,870],{"class":77},[67,43862,43863],{"class":69,"line":8764},[67,43864,177],{"emptyLinePlaceholder":176},[67,43866,43867],{"class":69,"line":8776},[67,43868,32798],{"class":202},[67,43870,43871,43873,43875],{"class":69,"line":10435},[67,43872,32803],{"class":77},[67,43874,909],{"class":73},[67,43876,32808],{"class":77},[67,43878,43879],{"class":69,"line":10459},[67,43880,177],{"emptyLinePlaceholder":176},[67,43882,43883],{"class":69,"line":10482},[67,43884,32817],{"class":202},[67,43886,43887,43889,43891],{"class":69,"line":10506},[67,43888,31826],{"class":77},[67,43890,909],{"class":73},[67,43892,32826],{"class":77},[67,43894,43895],{"class":69,"line":10511},[67,43896,32831],{"class":202},[67,43898,43899],{"class":69,"line":10516},[67,43900,32836],{"class":202},[67,43902,43903],{"class":69,"line":10521},[67,43904,32841],{"class":202},[67,43906,43907,43909,43911],{"class":69,"line":10530},[67,43908,32846],{"class":77},[67,43910,909],{"class":73},[67,43912,32851],{"class":77},[67,43914,43915],{"class":69,"line":10535},[67,43916,177],{"emptyLinePlaceholder":176},[67,43918,43919],{"class":69,"line":10541},[67,43920,177],{"emptyLinePlaceholder":176},[67,43922,43923],{"class":69,"line":10562},[67,43924,32864],{"class":202},[67,43926,43927],{"class":69,"line":10568},[67,43928,32869],{"class":202},[67,43930,43931,43933,43935],{"class":69,"line":10582},[67,43932,32874],{"class":77},[67,43934,909],{"class":73},[67,43936,32879],{"class":208},[67,43938,43939],{"class":69,"line":10588},[67,43940,32884],{"class":202},[67,43942,43943,43945,43947],{"class":69,"line":10615},[67,43944,32889],{"class":77},[67,43946,909],{"class":73},[67,43948,32894],{"class":77},[67,43950,43951],{"class":69,"line":10624},[67,43952,32899],{"class":202},[67,43954,43955,43957,43959],{"class":69,"line":10630},[67,43956,32904],{"class":77},[67,43958,909],{"class":73},[67,43960,32894],{"class":77},[67,43962,43963],{"class":69,"line":10638},[67,43964,32913],{"class":202},[67,43966,43967,43969,43971],{"class":69,"line":10643},[67,43968,32918],{"class":77},[67,43970,909],{"class":73},[67,43972,32894],{"class":77},[67,43974,43975],{"class":69,"line":17321},[67,43976,32927],{"class":202},[67,43978,43979,43981,43983],{"class":69,"line":17327},[67,43980,32932],{"class":77},[67,43982,909],{"class":73},[67,43984,32894],{"class":77},[67,43986,43987],{"class":69,"line":17350},[67,43988,177],{"emptyLinePlaceholder":176},[67,43990,43991],{"class":69,"line":17356},[67,43992,32945],{"class":202},[67,43994,43995,43997,43999],{"class":69,"line":17379},[67,43996,32950],{"class":77},[67,43998,909],{"class":73},[67,44000,32955],{"class":77},[67,44002,44003],{"class":69,"line":17393},[67,44004,177],{"emptyLinePlaceholder":176},[67,44006,44007],{"class":69,"line":17413},[67,44008,177],{"emptyLinePlaceholder":176},[67,44010,44011],{"class":69,"line":17419},[67,44012,32968],{"class":202},[67,44014,44015,44017,44019,44021,44023],{"class":69,"line":17430},[67,44016,3921],{"class":73},[67,44018,32975],{"class":77},[67,44020,81],{"class":73},[67,44022,32980],{"class":208},[67,44024,32983],{"class":77},[67,44026,44027,44029,44031,44033,44035,44037,44039,44041,44043,44045,44047],{"class":69,"line":17453},[67,44028,32988],{"class":208},[67,44030,864],{"class":77},[67,44032,32993],{"class":84},[67,44034,32996],{"class":208},[67,44036,1440],{"class":84},[67,44038,32996],{"class":208},[67,44040,257],{"class":84},[67,44042,33005],{"class":77},[67,44044,1389],{"class":73},[67,44046,1077],{"class":208},[67,44048,31034],{"class":77},[67,44050,44051,44053,44055,44057,44059,44061],{"class":69,"line":17475},[67,44052,32988],{"class":208},[67,44054,864],{"class":77},[67,44056,33020],{"class":84},[67,44058,1312],{"class":73},[67,44060,1303],{"class":208},[67,44062,870],{"class":77},[67,44064,44065],{"class":69,"line":17480},[67,44066,177],{"emptyLinePlaceholder":176},[67,44068,44069],{"class":69,"line":17486},[67,44070,33035],{"class":202},[67,44072,44073],{"class":69,"line":17500},[67,44074,33040],{"class":202},[67,44076,44077,44079,44081],{"class":69,"line":17513},[67,44078,33045],{"class":77},[67,44080,909],{"class":73},[67,44082,32879],{"class":208},[67,44084,44085],{"class":69,"line":17518},[67,44086,33054],{"class":202},[67,44088,44089,44091,44093],{"class":69,"line":17532},[67,44090,33059],{"class":77},[67,44092,909],{"class":73},[67,44094,3805],{"class":208},[67,44096,44097],{"class":69,"line":17537},[67,44098,33068],{"class":202},[67,44100,44101,44103,44105],{"class":69,"line":17543},[67,44102,33073],{"class":77},[67,44104,909],{"class":73},[67,44106,32879],{"class":208},[67,44108,44109],{"class":69,"line":17548},[67,44110,33082],{"class":202},[67,44112,44113,44115,44117],{"class":69,"line":17562},[67,44114,33087],{"class":77},[67,44116,909],{"class":73},[67,44118,3805],{"class":208},[67,44120,44121],{"class":69,"line":17567},[67,44122,33096],{"class":202},[67,44124,44125,44127,44129],{"class":69,"line":17572},[67,44126,33101],{"class":77},[67,44128,909],{"class":73},[67,44130,3805],{"class":208},[67,44132,44133],{"class":69,"line":17586},[67,44134,33110],{"class":202},[67,44136,44137,44139,44141],{"class":69,"line":17598},[67,44138,33115],{"class":77},[67,44140,909],{"class":73},[67,44142,3805],{"class":208},[67,44144,44145],{"class":69,"line":17603},[67,44146,33124],{"class":202},[67,44148,44149,44151,44153,44155,44157],{"class":69,"line":17616},[67,44150,4123],{"class":73},[67,44152,32138],{"class":77},[67,44154,81],{"class":73},[67,44156,32143],{"class":208},[67,44158,33137],{"class":77},[67,44160,44161],{"class":69,"line":17621},[67,44162,33142],{"class":202},[67,44164,44165,44167,44169],{"class":69,"line":17626},[67,44166,33147],{"class":77},[67,44168,909],{"class":73},[67,44170,33152],{"class":77},[67,44172,44173],{"class":69,"line":17631},[67,44174,33157],{"class":202},[67,44176,44177,44179,44181],{"class":69,"line":17644},[67,44178,33162],{"class":77},[67,44180,909],{"class":73},[67,44182,33167],{"class":77},[67,44184,44185],{"class":69,"line":17649},[67,44186,33173],{"class":202},[67,44188,44189],{"class":69,"line":33170},[67,44190,33179],{"class":77},[67,44192,44193],{"class":69,"line":33176},[67,44194,33185],{"class":202},[67,44196,44197],{"class":69,"line":33182},[67,44198,33191],{"class":202},[67,44200,44201,44203,44205],{"class":69,"line":33188},[67,44202,33197],{"class":77},[67,44204,909],{"class":73},[67,44206,33202],{"class":77},[67,44208,44209],{"class":69,"line":33194},[67,44210,33208],{"class":202},[67,44212,44213,44215,44217,44219,44221,44223,44225],{"class":69,"line":33205},[67,44214,33214],{"class":77},[67,44216,909],{"class":73},[67,44218,33219],{"class":77},[67,44220,33222],{"class":5935},[67,44222,909],{"class":73},[67,44224,1077],{"class":208},[67,44226,870],{"class":77},[67,44228,44229],{"class":69,"line":33211},[67,44230,33234],{"class":202},[67,44232,44233,44235,44237],{"class":69,"line":33231},[67,44234,33240],{"class":77},[67,44236,909],{"class":73},[67,44238,33245],{"class":77},[67,44240,44241],{"class":69,"line":33237},[67,44242,33251],{"class":202},[67,44244,44245],{"class":69,"line":33248},[67,44246,33257],{"class":77},[67,44248,44249],{"class":69,"line":33254},[67,44250,33263],{"class":202},[67,44252,44253],{"class":69,"line":33260},[67,44254,33269],{"class":77},[67,44256,44257],{"class":69,"line":33266},[67,44258,33275],{"class":202},[67,44260,44261],{"class":69,"line":33272},[67,44262,33281],{"class":77},[67,44264,44265],{"class":69,"line":33278},[67,44266,33287],{"class":202},[67,44268,44269,44271,44273,44275,44277,44279,44281],{"class":69,"line":33284},[67,44270,33293],{"class":77},[67,44272,10196],{"class":73},[67,44274,33298],{"class":77},[67,44276,1312],{"class":73},[67,44278,33303],{"class":77},[67,44280,1051],{"class":208},[67,44282,870],{"class":77},[67,44284,44285],{"class":69,"line":33290},[67,44286,33313],{"class":202},[67,44288,44289,44291,44293,44295,44297],{"class":69,"line":33310},[67,44290,33319],{"class":77},[67,44292,10196],{"class":73},[67,44294,33324],{"class":77},[67,44296,3670],{"class":73},[67,44298,33329],{"class":77},[67,44300,44301],{"class":69,"line":33316},[67,44302,33335],{"class":202},[67,44304,44305,44307,44309,44311,44313],{"class":69,"line":33332},[67,44306,33341],{"class":77},[67,44308,10196],{"class":73},[67,44310,33303],{"class":77},[67,44312,1051],{"class":208},[67,44314,870],{"class":77},[67,44316,44317],{"class":69,"line":33338},[67,44318,33355],{"class":202},[67,44320,44321,44323,44325,44327,44329],{"class":69,"line":33352},[67,44322,4123],{"class":73},[67,44324,33363],{"class":77},[67,44326,81],{"class":73},[67,44328,32143],{"class":208},[67,44330,33370],{"class":77},[67,44332,44333],{"class":69,"line":33358},[67,44334,33376],{"class":202},[67,44336,44337,44339,44341],{"class":69,"line":33373},[67,44338,33147],{"class":77},[67,44340,909],{"class":73},[67,44342,33152],{"class":77},[67,44344,44345],{"class":69,"line":33379},[67,44346,33391],{"class":202},[67,44348,44349,44351,44353],{"class":69,"line":33388},[67,44350,33162],{"class":77},[67,44352,909],{"class":73},[67,44354,33167],{"class":77},[67,44356,44357],{"class":69,"line":33394},[67,44358,33406],{"class":202},[67,44360,44361],{"class":69,"line":33403},[67,44362,33412],{"class":77},[67,44364,44365],{"class":69,"line":33409},[67,44366,36893],{"class":202},[67,44368,44369,44371],{"class":69,"line":33415},[67,44370,33418],{"class":73},[67,44372,33421],{"class":77},[67,44374,44375],{"class":69,"line":33424},[67,44376,33427],{"class":202},[67,44378,44379,44381,44383],{"class":69,"line":33430},[67,44380,36908],{"class":77},[67,44382,909],{"class":73},[67,44384,33202],{"class":77},[67,44386,44387],{"class":69,"line":33441},[67,44388,33444],{"class":202},[67,44390,44391,44393,44395,44397,44399,44401,44403],{"class":69,"line":33447},[67,44392,36921],{"class":77},[67,44394,909],{"class":73},[67,44396,33219],{"class":77},[67,44398,33222],{"class":5935},[67,44400,909],{"class":73},[67,44402,1077],{"class":208},[67,44404,870],{"class":77},[67,44406,44407],{"class":69,"line":33466},[67,44408,33469],{"class":202},[67,44410,44411,44413,44415],{"class":69,"line":33472},[67,44412,36942],{"class":77},[67,44414,909],{"class":73},[67,44416,33245],{"class":77},[67,44418,44419],{"class":69,"line":33483},[67,44420,33486],{"class":202},[67,44422,44423,44425,44427,44429,44431,44433,44435],{"class":69,"line":33489},[67,44424,36955],{"class":77},[67,44426,10196],{"class":73},[67,44428,36960],{"class":77},[67,44430,1312],{"class":73},[67,44432,33303],{"class":77},[67,44434,1051],{"class":208},[67,44436,870],{"class":77},[67,44438,44439,44441,44443,44445,44447],{"class":69,"line":33509},[67,44440,36973],{"class":77},[67,44442,10196],{"class":73},[67,44444,33324],{"class":77},[67,44446,3670],{"class":73},[67,44448,33329],{"class":77},[67,44450,44451],{"class":69,"line":33525},[67,44452,36986],{"class":202},[67,44454,44455,44457,44459,44461,44463],{"class":69,"line":33531},[67,44456,36991],{"class":77},[67,44458,10196],{"class":73},[67,44460,33303],{"class":77},[67,44462,1051],{"class":208},[67,44464,870],{"class":77},[67,44466,44467],{"class":69,"line":33545},[67,44468,33548],{"class":202},[67,44470,44471],{"class":69,"line":33551},[67,44472,33554],{"class":202},[67,44474,44475,44477,44479],{"class":69,"line":33557},[67,44476,33560],{"class":77},[67,44478,1440],{"class":73},[67,44480,33565],{"class":77},[67,44482,44483],{"class":69,"line":33568},[67,44484,33571],{"class":202},[67,44486,44487],{"class":69,"line":33574},[67,44488,33577],{"class":202},[67,44490,44491,44493,44495],{"class":69,"line":33580},[67,44492,33583],{"class":77},[67,44494,1440],{"class":73},[67,44496,33565],{"class":77},[67,44498,44499],{"class":69,"line":33590},[67,44500,33593],{"class":202},[67,44502,44503,44505,44507],{"class":69,"line":33596},[67,44504,33599],{"class":77},[67,44506,1440],{"class":73},[67,44508,33604],{"class":77},[67,44510,44511],{"class":69,"line":33607},[67,44512,33610],{"class":202},[67,44514,44515,44517,44519],{"class":69,"line":33613},[67,44516,33616],{"class":77},[67,44518,1440],{"class":73},[67,44520,33604],{"class":77},[67,44522,44523],{"class":69,"line":33623},[67,44524,177],{"emptyLinePlaceholder":176},[67,44526,44527],{"class":69,"line":33628},[67,44528,33631],{"class":202},[67,44530,44531,44533,44535,44537,44539,44541,44543,44545,44547,44549,44551,44553,44555,44557,44559,44561,44563,44565,44567,44569],{"class":69,"line":33634},[67,44532,32988],{"class":208},[67,44534,864],{"class":77},[67,44536,4312],{"class":84},[67,44538,32996],{"class":208},[67,44540,33645],{"class":84},[67,44542,1752],{"class":208},[67,44544,33650],{"class":73},[67,44546,1802],{"class":208},[67,44548,33655],{"class":84},[67,44550,1752],{"class":208},[67,44552,33650],{"class":73},[67,44554,1802],{"class":208},[67,44556,4312],{"class":84},[67,44558,33666],{"class":77},[67,44560,1389],{"class":73},[67,44562,1077],{"class":208},[67,44564,33673],{"class":77},[67,44566,1389],{"class":73},[67,44568,1077],{"class":208},[67,44570,33680],{"class":77},[67,44572,44573,44575,44577,44579,44581,44583,44585,44587,44589,44591,44593,44595,44597,44599,44601,44603,44605,44607,44609,44611],{"class":69,"line":33683},[67,44574,32988],{"class":208},[67,44576,864],{"class":77},[67,44578,4312],{"class":84},[67,44580,32996],{"class":208},[67,44582,33694],{"class":84},[67,44584,1752],{"class":208},[67,44586,33650],{"class":73},[67,44588,1802],{"class":208},[67,44590,33703],{"class":84},[67,44592,1752],{"class":208},[67,44594,33650],{"class":73},[67,44596,1802],{"class":208},[67,44598,4312],{"class":84},[67,44600,33714],{"class":77},[67,44602,1389],{"class":73},[67,44604,1077],{"class":208},[67,44606,33721],{"class":77},[67,44608,1389],{"class":73},[67,44610,1077],{"class":208},[67,44612,33680],{"class":77},[67,44614,44615],{"class":69,"line":33730},[67,44616,177],{"emptyLinePlaceholder":176},[67,44618,44619],{"class":69,"line":33735},[67,44620,33738],{"class":202},[67,44622,44623,44625,44627,44629,44631,44633,44635],{"class":69,"line":33741},[67,44624,3218],{"class":73},[67,44626,33746],{"class":77},[67,44628,1389],{"class":73},[67,44630,1077],{"class":208},[67,44632,1796],{"class":77},[67,44634,1816],{"class":73},[67,44636,33757],{"class":77},[67,44638,44639],{"class":69,"line":33760},[67,44640,33763],{"class":202},[67,44642,44643,44645,44647,44649,44651,44653,44655],{"class":69,"line":33766},[67,44644,33769],{"class":77},[67,44646,903],{"class":208},[67,44648,909],{"class":73},[67,44650,33776],{"class":77},[67,44652,1389],{"class":73},[67,44654,1077],{"class":208},[67,44656,33783],{"class":77},[67,44658,44659],{"class":69,"line":33786},[67,44660,33789],{"class":202},[67,44662,44663],{"class":69,"line":33792},[67,44664,33795],{"class":202},[67,44666,44667,44669,44671],{"class":69,"line":33798},[67,44668,33801],{"class":77},[67,44670,909],{"class":73},[67,44672,32851],{"class":77},[67,44674,44675],{"class":69,"line":33808},[67,44676,177],{"emptyLinePlaceholder":176},[67,44678,44679],{"class":69,"line":33813},[67,44680,33816],{"class":202},[67,44682,44683,44685,44687,44689,44691],{"class":69,"line":33819},[67,44684,33822],{"class":77},[67,44686,909],{"class":73},[67,44688,33827],{"class":77},[67,44690,1389],{"class":73},[67,44692,33832],{"class":77},[67,44694,44695,44697,44699,44701,44703,44705,44707,44709,44711,44713,44715,44717,44719,44721,44723,44725,44727,44729],{"class":69,"line":33835},[67,44696,32988],{"class":208},[67,44698,864],{"class":77},[67,44700,33842],{"class":84},[67,44702,1752],{"class":208},[67,44704,33847],{"class":73},[67,44706,1802],{"class":208},[67,44708,1401],{"class":84},[67,44710,1752],{"class":208},[67,44712,33847],{"class":73},[67,44714,1802],{"class":208},[67,44716,33860],{"class":84},[67,44718,33863],{"class":77},[67,44720,33866],{"class":73},[67,44722,1763],{"class":208},[67,44724,33871],{"class":77},[67,44726,1186],{"class":73},[67,44728,1763],{"class":208},[67,44730,31034],{"class":77},[67,44732,44733],{"class":69,"line":33880},[67,44734,37270],{"class":202},[67,44736,44737],{"class":69,"line":33886},[67,44738,37275],{"class":202},[67,44740,44741,44743,44745],{"class":69,"line":33892},[67,44742,37280],{"class":77},[67,44744,33904],{"class":84},[67,44746,870],{"class":77},[67,44748,44749],{"class":69,"line":33898},[67,44750,33924],{"class":202},[67,44752,44753,44755,44757,44759,44761,44763],{"class":69,"line":33909},[67,44754,33930],{"class":77},[67,44756,909],{"class":73},[67,44758,33935],{"class":77},[67,44760,33938],{"class":5935},[67,44762,909],{"class":73},[67,44764,2269],{"class":77},[67,44766,44767,44769,44771,44773],{"class":69,"line":33915},[67,44768,33948],{"class":84},[67,44770,1715],{"class":77},[67,44772,33953],{"class":208},[67,44774,33956],{"class":77},[67,44776,44777,44779],{"class":69,"line":33921},[67,44778,33962],{"class":84},[67,44780,33965],{"class":77},[67,44782,44783,44785],{"class":69,"line":33927},[67,44784,33971],{"class":84},[67,44786,33974],{"class":77},[67,44788,44789,44791],{"class":69,"line":33945},[67,44790,33980],{"class":84},[67,44792,33983],{"class":77},[67,44794,44795,44797],{"class":69,"line":33959},[67,44796,33989],{"class":84},[67,44798,33992],{"class":77},[67,44800,44801],{"class":69,"line":33968},[67,44802,33998],{"class":77},[67,44804,44805],{"class":69,"line":33977},[67,44806,34004],{"class":202},[67,44808,44809,44811],{"class":69,"line":33986},[67,44810,4810],{"class":73},[67,44812,34012],{"class":77},[67,44814,44815],{"class":69,"line":33995},[67,44816,177],{"emptyLinePlaceholder":176},[67,44818,44819],{"class":69,"line":34001},[67,44820,34023],{"class":202},[67,44822,44823,44825,44827],{"class":69,"line":34007},[67,44824,32484],{"class":73},[67,44826,34031],{"class":112},[67,44828,34034],{"class":77},[67,44830,44831],{"class":69,"line":34015},[67,44832,34040],{"class":202},[67,44834,44835,44837,44839,44841,44843,44845,44847,44849],{"class":69,"line":34020},[67,44836,34046],{"class":77},[67,44838,32230],{"class":5935},[67,44840,909],{"class":73},[67,44842,864],{"class":77},[67,44844,1355],{"class":208},[67,44846,1236],{"class":77},[67,44848,1151],{"class":208},[67,44850,31034],{"class":77},[67,44852,44853],{"class":69,"line":34026},[67,44854,34066],{"class":202},[67,44856,44857],{"class":69,"line":34037},[67,44858,34072],{"class":202},[67,44860,44861],{"class":69,"line":34043},[67,44862,34078],{"class":202},[67,44864,44865,44867,44869,44871,44873,44875,44877],{"class":69,"line":34063},[67,44866,32264],{"class":77},[67,44868,1077],{"class":208},[67,44870,1236],{"class":77},[67,44872,939],{"class":208},[67,44874,1236],{"class":77},[67,44876,1077],{"class":208},[67,44878,870],{"class":77},[67,44880,44881],{"class":69,"line":34069},[67,44882,34101],{"class":202},[67,44884,44885],{"class":69,"line":34075},[67,44886,34107],{"class":202},[67,44888,44889],{"class":69,"line":34081},[67,44890,34113],{"class":202},[67,44892,44893],{"class":69,"line":34098},[67,44894,34119],{"class":202},[67,44896,44897],{"class":69,"line":34104},[67,44898,34125],{"class":202},[67,44900,44901,44903,44905,44907,44909,44911,44913,44915,44917],{"class":69,"line":34110},[67,44902,34131],{"class":77},[67,44904,34134],{"class":84},[67,44906,34137],{"class":77},[67,44908,34140],{"class":84},[67,44910,1236],{"class":77},[67,44912,34145],{"class":5935},[67,44914,909],{"class":73},[67,44916,34150],{"class":84},[67,44918,870],{"class":77},[67,44920,44921,44923,44925,44927,44929,44931,44933,44935,44937],{"class":69,"line":34116},[67,44922,34131],{"class":77},[67,44924,34134],{"class":84},[67,44926,34162],{"class":77},[67,44928,34165],{"class":84},[67,44930,1236],{"class":77},[67,44932,34145],{"class":5935},[67,44934,909],{"class":73},[67,44936,34174],{"class":84},[67,44938,870],{"class":77},[67,44940,44941],{"class":69,"line":34122},[67,44942,34182],{"class":202},[67,44944,44945],{"class":69,"line":34128},[67,44946,34188],{"class":77},[67,44948,44949],{"class":69,"line":34155},[67,44950,34194],{"class":202},[67,44952,44953,44955,44957],{"class":69,"line":34179},[67,44954,34200],{"class":77},[67,44956,34203],{"class":84},[67,44958,870],{"class":77},[67,44960,44961,44963,44965],{"class":69,"line":34185},[67,44962,34211],{"class":77},[67,44964,34214],{"class":84},[67,44966,870],{"class":77},[67,44968,44969],{"class":69,"line":34191},[67,44970,34222],{"class":202},[67,44972,44973,44975,44977,44979,44981,44983,44985],{"class":69,"line":34197},[67,44974,32264],{"class":77},[67,44976,1077],{"class":208},[67,44978,1236],{"class":77},[67,44980,939],{"class":208},[67,44982,1236],{"class":77},[67,44984,939],{"class":208},[67,44986,870],{"class":77},[67,44988,44989,44991,44993,44995,44997,44999,45001,45003,45005],{"class":69,"line":34208},[67,44990,34131],{"class":77},[67,44992,34134],{"class":84},[67,44994,34249],{"class":77},[67,44996,34140],{"class":84},[67,44998,1236],{"class":77},[67,45000,34145],{"class":5935},[67,45002,909],{"class":73},[67,45004,34260],{"class":84},[67,45006,870],{"class":77},[67,45008,45009,45011,45013,45015,45017,45019,45021,45023,45025],{"class":69,"line":34219},[67,45010,34131],{"class":77},[67,45012,34134],{"class":84},[67,45014,34272],{"class":77},[67,45016,34165],{"class":84},[67,45018,1236],{"class":77},[67,45020,34145],{"class":5935},[67,45022,909],{"class":73},[67,45024,34283],{"class":84},[67,45026,870],{"class":77},[67,45028,45029],{"class":69,"line":34225},[67,45030,34291],{"class":202},[67,45032,45033],{"class":69,"line":34242},[67,45034,34188],{"class":77},[67,45036,45037,45039,45041],{"class":69,"line":34265},[67,45038,34200],{"class":77},[67,45040,34134],{"class":84},[67,45042,870],{"class":77},[67,45044,45045,45047,45049],{"class":69,"line":34288},[67,45046,34211],{"class":77},[67,45048,34313],{"class":84},[67,45050,870],{"class":77},[67,45052,45053],{"class":69,"line":34294},[67,45054,34321],{"class":77},[67,45056,45057],{"class":69,"line":34299},[67,45058,177],{"emptyLinePlaceholder":176},[67,45060,45061],{"class":69,"line":34308},[67,45062,34332],{"class":202},[67,45064,45065,45067,45069,45071,45073],{"class":69,"line":34318},[67,45066,2254],{"class":73},[67,45068,31757],{"class":208},[67,45070,3670],{"class":73},[67,45072,31762],{"class":84},[67,45074,4459],{"class":77},[67,45076,45077],{"class":69,"line":34324},[67,45078,34351],{"class":202},[67,45080,45081,45084,45086],{"class":69,"line":34329},[67,45082,45083],{"class":77},"    GoogLeNet",[67,45085,909],{"class":73},[67,45087,45088],{"class":77},"GoogLeNet(Inception)\n",[67,45090,45091,45093,45095],{"class":69,"line":34335},[67,45092,34368],{"class":77},[67,45094,909],{"class":73},[67,45096,34373],{"class":77},[67,45098,45099,45101,45103,45106,45108,45110,45112],{"class":69,"line":34348},[67,45100,33930],{"class":77},[67,45102,909],{"class":73},[67,45104,45105],{"class":77},"train_model_process(GoogLeNet,train_dataloader,val_dataloader,",[67,45107,34386],{"class":5935},[67,45109,909],{"class":73},[67,45111,1807],{"class":208},[67,45113,870],{"class":77},[67,45115,45116],{"class":69,"line":34354},[67,45117,34398],{"class":77},[815,45119,45120],{"start":149},[818,45121,41111],{},[57,45123,45125],{"className":30915,"code":45124,"language":30917,"meta":62,"style":62},"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",[64,45126,45127,45133,45143,45153,45157,45167,45178,45182,45186,45190,45198,45214,45224,45240,45250,45264,45268,45278,45288,45298,45304,45308,45312,45320,45324,45340,45348,45352,45356,45364,45372,45376,45380,45384,45388,45394,45398,45408,45416,45424,45428,45432,45436,45444,45448,45464,45468,45472,45476,45488,45492,45504,45508,45512,45524,45528,45538,45542,45546,45558,45562,45570,45574,45578,45586,45590,45598,45602,45606,45610,45614,45618,45634,45642,45646,45650,45698,45704,45708,45718,45726,45734,45738,45742,45746,45750,45758,45762,45778,45782,45790,45798],{"__ignoreMap":62},[67,45128,45129,45131],{"class":69,"line":70},[67,45130,30929],{"class":73},[67,45132,30932],{"class":77},[67,45134,45135,45137,45139,45141],{"class":69,"line":143},[67,45136,30929],{"class":73},[67,45138,31952],{"class":77},[67,45140,31920],{"class":73},[67,45142,31957],{"class":77},[67,45144,45145,45147,45149,45151],{"class":69,"line":149},[67,45146,31274],{"class":73},[67,45148,31935],{"class":77},[67,45150,30929],{"class":73},[67,45152,31940],{"class":77},[67,45154,45155],{"class":69,"line":155},[67,45156,34459],{"class":202},[67,45158,45159,45161,45163,45165],{"class":69,"line":161},[67,45160,31274],{"class":73},[67,45162,31905],{"class":77},[67,45164,30929],{"class":73},[67,45166,31910],{"class":77},[67,45168,45169,45171,45173,45175],{"class":69,"line":167},[67,45170,31274],{"class":73},[67,45172,32451],{"class":77},[67,45174,30929],{"class":73},[67,45176,45177],{"class":77}," GoogLeNet,Inception\n",[67,45179,45180],{"class":69,"line":173},[67,45181,177],{"emptyLinePlaceholder":176},[67,45183,45184],{"class":69,"line":180},[67,45185,177],{"emptyLinePlaceholder":176},[67,45187,45188],{"class":69,"line":186},[67,45189,34488],{"class":202},[67,45191,45192,45194,45196],{"class":69,"line":444},[67,45193,32484],{"class":73},[67,45195,34495],{"class":112},[67,45197,32490],{"class":77},[67,45199,45200,45202,45204,45206,45208,45210,45212],{"class":69,"line":2335},[67,45201,34502],{"class":77},[67,45203,909],{"class":73},[67,45205,31992],{"class":77},[67,45207,31995],{"class":5935},[67,45209,909],{"class":73},[67,45211,32000],{"class":84},[67,45213,32003],{"class":77},[67,45215,45216,45218,45220,45222],{"class":69,"line":2340},[67,45217,34519],{"class":5935},[67,45219,909],{"class":73},[67,45221,34524],{"class":208},[67,45223,32003],{"class":77},[67,45225,45226,45228,45230,45232,45234,45236,45238],{"class":69,"line":2346},[67,45227,34531],{"class":5935},[67,45229,909],{"class":73},[67,45231,32030],{"class":77},[67,45233,32033],{"class":5935},[67,45235,909],{"class":73},[67,45237,35986],{"class":208},[67,45239,32041],{"class":77},[67,45241,45242,45244,45246,45248],{"class":69,"line":2351},[67,45243,34548],{"class":5935},[67,45245,909],{"class":73},[67,45247,32013],{"class":208},[67,45249,870],{"class":77},[67,45251,45252,45254,45256,45258,45260,45262],{"class":69,"line":2365},[67,45253,34559],{"class":77},[67,45255,909],{"class":73},[67,45257,32071],{"class":77},[67,45259,32074],{"class":5935},[67,45261,909],{"class":73},[67,45263,34570],{"class":77},[67,45265,45266],{"class":69,"line":2370},[67,45267,34575],{"class":202},[67,45269,45270,45272,45274,45276],{"class":69,"line":2376},[67,45271,34580],{"class":5935},[67,45273,909],{"class":73},[67,45275,1077],{"class":208},[67,45277,32003],{"class":77},[67,45279,45280,45282,45284,45286],{"class":69,"line":2397},[67,45281,34591],{"class":5935},[67,45283,909],{"class":73},[67,45285,32013],{"class":208},[67,45287,32003],{"class":77},[67,45289,45290,45292,45294,45296],{"class":69,"line":2402},[67,45291,34602],{"class":5935},[67,45293,909],{"class":73},[67,45295,1051],{"class":208},[67,45297,870],{"class":77},[67,45299,45300,45302],{"class":69,"line":2416},[67,45301,4810],{"class":73},[67,45303,34615],{"class":77},[67,45305,45306],{"class":69,"line":2421},[67,45307,177],{"emptyLinePlaceholder":176},[67,45309,45310],{"class":69,"line":2450},[67,45311,34624],{"class":202},[67,45313,45314,45316,45318],{"class":69,"line":2455},[67,45315,32484],{"class":73},[67,45317,34631],{"class":112},[67,45319,34634],{"class":77},[67,45321,45322],{"class":69,"line":2472},[67,45323,34639],{"class":202},[67,45325,45326,45328,45330,45332,45334,45336,45338],{"class":69,"line":2477},[67,45327,31774],{"class":77},[67,45329,909],{"class":73},[67,45331,31781],{"class":84},[67,45333,2427],{"class":73},[67,45335,31786],{"class":77},[67,45337,2424],{"class":73},[67,45339,34656],{"class":84},[67,45341,45342,45344,45346],{"class":69,"line":2482},[67,45343,31826],{"class":77},[67,45345,909],{"class":73},[67,45347,32826],{"class":77},[67,45349,45350],{"class":69,"line":2487},[67,45351,177],{"emptyLinePlaceholder":176},[67,45353,45354],{"class":69,"line":2501},[67,45355,34673],{"class":202},[67,45357,45358,45360,45362],{"class":69,"line":2506},[67,45359,34678],{"class":77},[67,45361,909],{"class":73},[67,45363,32879],{"class":208},[67,45365,45366,45368,45370],{"class":69,"line":3298},[67,45367,34687],{"class":77},[67,45369,909],{"class":73},[67,45371,3805],{"class":208},[67,45373,45374],{"class":69,"line":3312},[67,45375,177],{"emptyLinePlaceholder":176},[67,45377,45378],{"class":69,"line":3320},[67,45379,34700],{"class":202},[67,45381,45382],{"class":69,"line":3325},[67,45383,34705],{"class":202},[67,45385,45386],{"class":69,"line":3331},[67,45387,34710],{"class":202},[67,45389,45390,45392],{"class":69,"line":3337},[67,45391,34715],{"class":73},[67,45393,33421],{"class":77},[67,45395,45396],{"class":69,"line":3342},[67,45397,34722],{"class":202},[67,45399,45400,45402,45404,45406],{"class":69,"line":8667},[67,45401,4123],{"class":73},[67,45403,34729],{"class":77},[67,45405,81],{"class":73},[67,45407,34734],{"class":77},[67,45409,45410,45412,45414],{"class":69,"line":8691},[67,45411,34739],{"class":77},[67,45413,909],{"class":73},[67,45415,34744],{"class":77},[67,45417,45418,45420,45422],{"class":69,"line":8696},[67,45419,34749],{"class":77},[67,45421,909],{"class":73},[67,45423,34754],{"class":77},[67,45425,45426],{"class":69,"line":8702},[67,45427,34759],{"class":202},[67,45429,45430],{"class":69,"line":8729},[67,45431,33412],{"class":77},[67,45433,45434],{"class":69,"line":8734},[67,45435,34768],{"class":202},[67,45437,45438,45440,45442],{"class":69,"line":8740},[67,45439,33197],{"class":77},[67,45441,909],{"class":73},[67,45443,34777],{"class":77},[67,45445,45446],{"class":69,"line":8752},[67,45447,34782],{"class":202},[67,45449,45450,45452,45454,45456,45458,45460,45462],{"class":69,"line":8764},[67,45451,33214],{"class":77},[67,45453,909],{"class":73},[67,45455,33219],{"class":77},[67,45457,33222],{"class":5935},[67,45459,909],{"class":73},[67,45461,1077],{"class":208},[67,45463,870],{"class":77},[67,45465,45466],{"class":69,"line":8776},[67,45467,34803],{"class":202},[67,45469,45470],{"class":69,"line":10435},[67,45471,34808],{"class":202},[67,45473,45474],{"class":69,"line":10459},[67,45475,34813],{"class":202},[67,45477,45478,45480,45482,45484,45486],{"class":69,"line":10482},[67,45479,34818],{"class":77},[67,45481,10196],{"class":73},[67,45483,33324],{"class":77},[67,45485,3670],{"class":73},[67,45487,34827],{"class":77},[67,45489,45490],{"class":69,"line":10506},[67,45491,34832],{"class":202},[67,45493,45494,45496,45498,45500,45502],{"class":69,"line":10511},[67,45495,34837],{"class":77},[67,45497,10196],{"class":73},[67,45499,34842],{"class":77},[67,45501,1051],{"class":208},[67,45503,870],{"class":77},[67,45505,45506],{"class":69,"line":10516},[67,45507,177],{"emptyLinePlaceholder":176},[67,45509,45510],{"class":69,"line":10521},[67,45511,34855],{"class":202},[67,45513,45514,45516,45518,45520,45522],{"class":69,"line":10530},[67,45515,34860],{"class":77},[67,45517,909],{"class":73},[67,45519,34865],{"class":77},[67,45521,1440],{"class":73},[67,45523,34870],{"class":77},[67,45525,45526],{"class":69,"line":10535},[67,45527,34875],{"class":202},[67,45529,45530,45532,45534,45536],{"class":69,"line":10541},[67,45531,32988],{"class":208},[67,45533,864],{"class":77},[67,45535,34884],{"class":84},[67,45537,34887],{"class":77},[67,45539,45540],{"class":69,"line":10562},[67,45541,177],{"emptyLinePlaceholder":176},[67,45543,45544],{"class":69,"line":10568},[67,45545,34896],{"class":202},[67,45547,45548,45550,45552,45554,45556],{"class":69,"line":10582},[67,45549,2254],{"class":73},[67,45551,31757],{"class":208},[67,45553,3670],{"class":73},[67,45555,31762],{"class":84},[67,45557,4459],{"class":77},[67,45559,45560],{"class":69,"line":10588},[67,45561,34913],{"class":202},[67,45563,45564,45566,45568],{"class":69,"line":10615},[67,45565,31826],{"class":77},[67,45567,909],{"class":73},[67,45569,45088],{"class":77},[67,45571,45572],{"class":69,"line":10624},[67,45573,34926],{"class":202},[67,45575,45576],{"class":69,"line":10630},[67,45577,34931],{"class":202},[67,45579,45580,45582,45584],{"class":69,"line":10638},[67,45581,34936],{"class":77},[67,45583,34939],{"class":84},[67,45585,31034],{"class":77},[67,45587,45588],{"class":69,"line":10643},[67,45589,34946],{"class":202},[67,45591,45592,45594,45596],{"class":69,"line":17321},[67,45593,34559],{"class":77},[67,45595,909],{"class":73},[67,45597,34955],{"class":77},[67,45599,45600],{"class":69,"line":17327},[67,45601,34960],{"class":202},[67,45603,45604],{"class":69,"line":17350},[67,45605,34965],{"class":77},[67,45607,45608],{"class":69,"line":17356},[67,45609,177],{"emptyLinePlaceholder":176},[67,45611,45612],{"class":69,"line":17379},[67,45613,34974],{"class":202},[67,45615,45616],{"class":69,"line":17393},[67,45617,34979],{"class":202},[67,45619,45620,45622,45624,45626,45628,45630,45632],{"class":69,"line":17413},[67,45621,31774],{"class":77},[67,45623,909],{"class":73},[67,45625,31781],{"class":84},[67,45627,2427],{"class":73},[67,45629,31786],{"class":77},[67,45631,2424],{"class":73},[67,45633,34656],{"class":84},[67,45635,45636,45638,45640],{"class":69,"line":17419},[67,45637,31826],{"class":77},[67,45639,909],{"class":73},[67,45641,32826],{"class":77},[67,45643,45644],{"class":69,"line":17430},[67,45645,35008],{"class":202},[67,45647,45648],{"class":69,"line":17453},[67,45649,35013],{"class":202},[67,45651,45652,45654,45656,45658,45660,45662,45664,45666,45668,45670,45672,45674,45676,45678,45680,45682,45684,45686,45688,45690,45692,45694,45696],{"class":69,"line":17475},[67,45653,35018],{"class":77},[67,45655,909],{"class":73},[67,45657,1746],{"class":77},[67,45659,35025],{"class":84},[67,45661,1236],{"class":77},[67,45663,35030],{"class":84},[67,45665,1236],{"class":77},[67,45667,35035],{"class":84},[67,45669,1236],{"class":77},[67,45671,35040],{"class":84},[67,45673,1236],{"class":77},[67,45675,35045],{"class":84},[67,45677,1236],{"class":77},[67,45679,35050],{"class":84},[67,45681,1236],{"class":77},[67,45683,35055],{"class":84},[67,45685,1236],{"class":77},[67,45687,35060],{"class":84},[67,45689,1236],{"class":77},[67,45691,35065],{"class":84},[67,45693,1236],{"class":77},[67,45695,35070],{"class":84},[67,45697,33783],{"class":77},[67,45699,45700,45702],{"class":69,"line":17480},[67,45701,34715],{"class":73},[67,45703,33421],{"class":77},[67,45705,45706],{"class":69,"line":17486},[67,45707,35083],{"class":202},[67,45709,45710,45712,45714,45716],{"class":69,"line":17500},[67,45711,4123],{"class":73},[67,45713,35090],{"class":77},[67,45715,81],{"class":73},[67,45717,34734],{"class":77},[67,45719,45720,45722,45724],{"class":69,"line":17513},[67,45721,33147],{"class":77},[67,45723,909],{"class":73},[67,45725,33152],{"class":77},[67,45727,45728,45730,45732],{"class":69,"line":17518},[67,45729,33162],{"class":77},[67,45731,909],{"class":73},[67,45733,33167],{"class":77},[67,45735,45736],{"class":69,"line":17532},[67,45737,177],{"emptyLinePlaceholder":176},[67,45739,45740],{"class":69,"line":17537},[67,45741,35119],{"class":202},[67,45743,45744],{"class":69,"line":17543},[67,45745,33412],{"class":77},[67,45747,45748],{"class":69,"line":17548},[67,45749,35128],{"class":202},[67,45751,45752,45754,45756],{"class":69,"line":17562},[67,45753,33197],{"class":77},[67,45755,909],{"class":73},[67,45757,33202],{"class":77},[67,45759,45760],{"class":69,"line":17567},[67,45761,35141],{"class":202},[67,45763,45764,45766,45768,45770,45772,45774,45776],{"class":69,"line":17572},[67,45765,33214],{"class":77},[67,45767,909],{"class":73},[67,45769,33219],{"class":77},[67,45771,33222],{"class":5935},[67,45773,909],{"class":73},[67,45775,1077],{"class":208},[67,45777,870],{"class":77},[67,45779,45780],{"class":69,"line":17586},[67,45781,35162],{"class":202},[67,45783,45784,45786,45788],{"class":69,"line":17598},[67,45785,35167],{"class":77},[67,45787,909],{"class":73},[67,45789,35172],{"class":77},[67,45791,45792,45794,45796],{"class":69,"line":17603},[67,45793,35177],{"class":77},[67,45795,909],{"class":73},[67,45797,35182],{"class":77},[67,45799,45800,45802,45804,45806,45808,45810,45812,45814],{"class":69,"line":17616},[67,45801,35187],{"class":208},[67,45803,864],{"class":77},[67,45805,35192],{"class":84},[67,45807,35195],{"class":77},[67,45809,35198],{"class":84},[67,45811,1236],{"class":77},[67,45813,35203],{"class":84},[67,45815,35206],{"class":77},[14,45817,45819],{"id":45818},"_24训练自己的数据集","2.4.训练自己的数据集",[19,45821,45822],{},"猫狗分类任务",[19,45824,45825],{},"划分数据集和验证集",[57,45827,45829],{"className":30915,"code":45828,"language":30917,"meta":62,"style":62},"# 创建脚本，用于划分数据集和验证集\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",[64,45830,45831,45836,45843,45848,45859,45866,45870,45880,45894,45903,45907,45912,45922,45942,45946,45951,45961,45972,45985,45989,45994,46003,46013,46024,46028,46033,46043,46047,46052,46057,46062,46067,46072,46076,46086,46113,46126,46138,46165,46170,46175,46189,46194,46206,46221,46236,46244,46248,46253,46259,46271,46284,46289,46294,46299,46349,46355,46359],{"__ignoreMap":62},[67,45832,45833],{"class":69,"line":70},[67,45834,45835],{"class":202},"# 创建脚本，用于划分数据集和验证集\n",[67,45837,45838,45840],{"class":69,"line":143},[67,45839,30929],{"class":73},[67,45841,45842],{"class":77}," os\n",[67,45844,45845],{"class":69,"line":149},[67,45846,45847],{"class":202},"# shutil 是 Python 标准库里的一个模块，主要用于高级文件操作，比如复制文件、移动文件、删除目录等\n",[67,45849,45850,45852,45855,45857],{"class":69,"line":155},[67,45851,31274],{"class":73},[67,45853,45854],{"class":77}," shutil ",[67,45856,30929],{"class":73},[67,45858,32359],{"class":77},[67,45860,45861,45863],{"class":69,"line":161},[67,45862,30929],{"class":73},[67,45864,45865],{"class":77}," random\n",[67,45867,45868],{"class":69,"line":167},[67,45869,177],{"emptyLinePlaceholder":176},[67,45871,45872,45874,45877],{"class":69,"line":173},[67,45873,32484],{"class":73},[67,45875,45876],{"class":112}," mkfile",[67,45878,45879],{"class":77},"(file):\n",[67,45881,45882,45884,45886,45889,45892],{"class":69,"line":180},[67,45883,3821],{"class":73},[67,45885,39467],{"class":73},[67,45887,45888],{"class":77}," os.path.exists(",[67,45890,45891],{"class":5935},"file",[67,45893,31323],{"class":77},[67,45895,45896,45899,45901],{"class":69,"line":186},[67,45897,45898],{"class":77},"        os.makedirs(",[67,45900,45891],{"class":5935},[67,45902,870],{"class":77},[67,45904,45905],{"class":69,"line":444},[67,45906,177],{"emptyLinePlaceholder":176},[67,45908,45909],{"class":69,"line":2335},[67,45910,45911],{"class":202},"# 获取data文件夹下所有文件夹名（即需要分类的类名）\n",[67,45913,45914,45917,45919],{"class":69,"line":2340},[67,45915,45916],{"class":77},"file_path",[67,45918,909],{"class":73},[67,45920,45921],{"class":84},"'data_cat_dog'\n",[67,45923,45924,45927,45929,45932,45934,45937,45939],{"class":69,"line":2346},[67,45925,45926],{"class":77},"flower_class",[67,45928,909],{"class":73},[67,45930,45931],{"class":77},"[cla ",[67,45933,74],{"class":73},[67,45935,45936],{"class":77}," cla ",[67,45938,81],{"class":73},[67,45940,45941],{"class":77}," os.listdir(file_path)]\n",[67,45943,45944],{"class":69,"line":2351},[67,45945,177],{"emptyLinePlaceholder":176},[67,45947,45948],{"class":69,"line":2365},[67,45949,45950],{"class":202},"# 创建训练集train文件夹\n",[67,45952,45953,45956,45959],{"class":69,"line":2370},[67,45954,45955],{"class":77},"mkfile(",[67,45957,45958],{"class":84},"'data\u002Ftrain'",[67,45960,870],{"class":77},[67,45962,45963,45965,45967,45969],{"class":69,"line":2376},[67,45964,74],{"class":73},[67,45966,45936],{"class":77},[67,45968,81],{"class":73},[67,45970,45971],{"class":77}," flower_class:\n",[67,45973,45974,45977,45980,45982],{"class":69,"line":2397},[67,45975,45976],{"class":77},"    mkfile(",[67,45978,45979],{"class":84},"'data\u002Ftrain\u002F'",[67,45981,1338],{"class":73},[67,45983,45984],{"class":77},"cla)\n",[67,45986,45987],{"class":69,"line":2402},[67,45988,177],{"emptyLinePlaceholder":176},[67,45990,45991],{"class":69,"line":2416},[67,45992,45993],{"class":202},"# 创建验证集val文件夹\n",[67,45995,45996,45998,46001],{"class":69,"line":2421},[67,45997,45955],{"class":77},[67,45999,46000],{"class":84},"'data\u002Ftest'",[67,46002,870],{"class":77},[67,46004,46005,46007,46009,46011],{"class":69,"line":2450},[67,46006,74],{"class":73},[67,46008,45936],{"class":77},[67,46010,81],{"class":73},[67,46012,45971],{"class":77},[67,46014,46015,46017,46020,46022],{"class":69,"line":2455},[67,46016,45976],{"class":77},[67,46018,46019],{"class":84},"'data\u002Ftest\u002F'",[67,46021,1338],{"class":73},[67,46023,45984],{"class":77},[67,46025,46026],{"class":69,"line":2472},[67,46027,177],{"emptyLinePlaceholder":176},[67,46029,46030],{"class":69,"line":2477},[67,46031,46032],{"class":202},"# 划分比例，训练集：测试集=9：1\n",[67,46034,46035,46038,46040],{"class":69,"line":2482},[67,46036,46037],{"class":77},"split_rate",[67,46039,909],{"class":73},[67,46041,46042],{"class":208},"0.1\n",[67,46044,46045],{"class":69,"line":2487},[67,46046,177],{"emptyLinePlaceholder":176},[67,46048,46049],{"class":69,"line":2501},[67,46050,46051],{"class":202},"# 遍历所有类别的全部图像并按比例分成训练集和验证集\n",[67,46053,46054],{"class":69,"line":2506},[67,46055,46056],{"class":202},"# cla_path：当前类别的原始图片路径\n",[67,46058,46059],{"class":69,"line":3298},[67,46060,46061],{"class":202},"# images：当前类别下所有图片的文件名列表\n",[67,46063,46064],{"class":69,"line":3312},[67,46065,46066],{"class":202},"# num：该类别图片总数\n",[67,46068,46069],{"class":69,"line":3320},[67,46070,46071],{"class":202},"# eval_index：从 images 随机抽取 10% 的图片作为验证集\n",[67,46073,46074],{"class":69,"line":3325},[67,46075,177],{"emptyLinePlaceholder":176},[67,46077,46078,46080,46082,46084],{"class":69,"line":3331},[67,46079,74],{"class":73},[67,46081,45936],{"class":77},[67,46083,81],{"class":73},[67,46085,45971],{"class":77},[67,46087,46088,46091,46093,46096,46098,46101,46104,46106,46108,46110],{"class":69,"line":3337},[67,46089,46090],{"class":77},"    cla_path ",[67,46092,909],{"class":73},[67,46094,46095],{"class":77}," file_path ",[67,46097,1338],{"class":73},[67,46099,46100],{"class":84}," '\u002F'",[67,46102,46103],{"class":73}," +",[67,46105,45936],{"class":77},[67,46107,1338],{"class":73},[67,46109,46100],{"class":84},[67,46111,46112],{"class":202},"  # 某一类别的子目录\n",[67,46114,46115,46118,46120,46123],{"class":69,"line":3342},[67,46116,46117],{"class":77},"    images ",[67,46119,909],{"class":73},[67,46121,46122],{"class":77}," os.listdir(cla_path)  ",[67,46124,46125],{"class":202},"# iamges 列表存储了该目录下所有图像的名称\n",[67,46127,46128,46131,46133,46135],{"class":69,"line":8667},[67,46129,46130],{"class":77},"    num ",[67,46132,909],{"class":73},[67,46134,8050],{"class":208},[67,46136,46137],{"class":77},"(images)\n",[67,46139,46140,46143,46145,46148,46150,46152,46154,46157,46159,46162],{"class":69,"line":8691},[67,46141,46142],{"class":77},"    eval_index ",[67,46144,909],{"class":73},[67,46146,46147],{"class":77}," random.sample(images, ",[67,46149,1350],{"class":5935},[67,46151,909],{"class":73},[67,46153,867],{"class":208},[67,46155,46156],{"class":77},"(num ",[67,46158,1312],{"class":73},[67,46160,46161],{"class":77}," split_rate))  ",[67,46163,46164],{"class":202},"# 从images列表中随机抽取 k 个图像名称\n",[67,46166,46167],{"class":69,"line":8696},[67,46168,46169],{"class":202},"    # 遍历该类别下的所有图片\n",[67,46171,46172],{"class":69,"line":8702},[67,46173,46174],{"class":202},"    # 如果图片在eval_index中，则复制到验证集对应目录，否则复制到训练集对应目录\n",[67,46176,46177,46179,46182,46184,46186],{"class":69,"line":8729},[67,46178,3921],{"class":73},[67,46180,46181],{"class":77}," index, image ",[67,46183,81],{"class":73},[67,46185,32143],{"class":208},[67,46187,46188],{"class":77},"(images):\n",[67,46190,46191],{"class":69,"line":8734},[67,46192,46193],{"class":202},"        # eval_index 中保存验证集val的图像名称\n",[67,46195,46196,46198,46201,46203],{"class":69,"line":8740},[67,46197,3218],{"class":73},[67,46199,46200],{"class":77}," image ",[67,46202,81],{"class":73},[67,46204,46205],{"class":77}," eval_index:\n",[67,46207,46208,46211,46213,46216,46218],{"class":69,"line":8752},[67,46209,46210],{"class":77},"            image_path ",[67,46212,909],{"class":73},[67,46214,46215],{"class":77}," cla_path ",[67,46217,1338],{"class":73},[67,46219,46220],{"class":77}," image\n",[67,46222,46223,46226,46228,46231,46233],{"class":69,"line":8764},[67,46224,46225],{"class":77},"            new_path ",[67,46227,909],{"class":73},[67,46229,46230],{"class":84}," 'data\u002Ftest\u002F'",[67,46232,46103],{"class":73},[67,46234,46235],{"class":77}," cla\n",[67,46237,46238,46241],{"class":69,"line":8776},[67,46239,46240],{"class":77},"            copy(image_path, new_path)  ",[67,46242,46243],{"class":202},"# 将选中的图像复制到新路径\n",[67,46245,46246],{"class":69,"line":10435},[67,46247,177],{"emptyLinePlaceholder":176},[67,46249,46250],{"class":69,"line":10459},[67,46251,46252],{"class":202},"        # 其余的图像保存在训练集train中\n",[67,46254,46255,46257],{"class":69,"line":10482},[67,46256,3255],{"class":73},[67,46258,4459],{"class":77},[67,46260,46261,46263,46265,46267,46269],{"class":69,"line":10506},[67,46262,46210],{"class":77},[67,46264,909],{"class":73},[67,46266,46215],{"class":77},[67,46268,1338],{"class":73},[67,46270,46220],{"class":77},[67,46272,46273,46275,46277,46280,46282],{"class":69,"line":10511},[67,46274,46225],{"class":77},[67,46276,909],{"class":73},[67,46278,46279],{"class":84}," 'data\u002Ftrain\u002F'",[67,46281,46103],{"class":73},[67,46283,46235],{"class":77},[67,46285,46286],{"class":69,"line":10516},[67,46287,46288],{"class":77},"            copy(image_path, new_path)\n",[67,46290,46291],{"class":69,"line":10521},[67,46292,46293],{"class":202},"            # 打印进度条信息\n",[67,46295,46296],{"class":69,"line":10530},[67,46297,46298],{"class":202},"            # \\r用于在同一行刷新。end = \"\"避免换行，每次刷新同一行显示进度\n",[67,46300,46301,46303,46305,46307,46310,46312,46314,46317,46319,46321,46323,46326,46329,46331,46333,46336,46339,46341,46343,46346],{"class":69,"line":10535},[67,46302,32988],{"class":208},[67,46304,864],{"class":77},[67,46306,257],{"class":84},[67,46308,46309],{"class":208},"\\r",[67,46311,1746],{"class":84},[67,46313,32996],{"class":208},[67,46315,46316],{"class":84},"] processing [",[67,46318,32996],{"class":208},[67,46320,1440],{"class":84},[67,46322,32996],{"class":208},[67,46324,46325],{"class":84},"]\"",[67,46327,46328],{"class":77},".format(cla, index ",[67,46330,1338],{"class":73},[67,46332,25828],{"class":208},[67,46334,46335],{"class":77},", num), ",[67,46337,46338],{"class":5935},"end",[67,46340,909],{"class":73},[67,46342,8371],{"class":84},[67,46344,46345],{"class":77},")  ",[67,46347,46348],{"class":202},"# processing bar\n",[67,46350,46351,46353],{"class":69,"line":10541},[67,46352,31836],{"class":208},[67,46354,2698],{"class":77},[67,46356,46357],{"class":69,"line":10562},[67,46358,177],{"emptyLinePlaceholder":176},[67,46360,46361,46363,46365,46368],{"class":69,"line":10568},[67,46362,30952],{"class":208},[67,46364,864],{"class":77},[67,46366,46367],{"class":84},"\"processing done!\"",[67,46369,870],{"class":77},[19,46371,46372],{},"这里使用的是GoogLeNet模型来实现猫狗分类的",[40,46374,46376],{"id":46375},"_242模型代码","2.4.2.模型代码",[19,46378,46379],{},"这里数据集中彩色图片，是三通道的数据，所以将模型中的输入通道改为3",[57,46381,46383],{"className":30915,"code":46382,"language":30917,"meta":62,"style":62},"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",[64,46384,46385,46391,46401,46411,46415,46431,46439,46453,46463,46467,46497,46501,46535,46581,46585,46619,46665,46669,46673,46707,46737,46741,46749,46763,46785,46807,46825,46829,46843,46847,46851,46867,46871,46879,46893,46903,46947,46951,46979,46983,46993,47021,47025,47061,47065,47093,47097,47107,47139,47171,47199,47203,47213,47245,47277,47309,47341,47373,47401,47405,47415,47447,47479,47491,47495,47507,47511,47515,47527,47535,47555,47559,47563,47567,47571,47575,47579,47593,47601,47609,47621,47635,47643,47647,47655,47665,47675,47685,47695,47705,47711,47715,47719,47731,47751,47759],{"__ignoreMap":62},[67,46386,46387,46389],{"class":69,"line":70},[67,46388,30929],{"class":73},[67,46390,30932],{"class":77},[67,46392,46393,46395,46397,46399],{"class":69,"line":143},[67,46394,31274],{"class":73},[67,46396,31277],{"class":77},[67,46398,30929],{"class":73},[67,46400,31282],{"class":77},[67,46402,46403,46405,46407,46409],{"class":69,"line":149},[67,46404,31274],{"class":73},[67,46406,31294],{"class":77},[67,46408,30929],{"class":73},[67,46410,31299],{"class":77},[67,46412,46413],{"class":69,"line":155},[67,46414,177],{"emptyLinePlaceholder":176},[67,46416,46417,46419,46421,46423,46425,46427,46429],{"class":69,"line":161},[67,46418,15411],{"class":73},[67,46420,42030],{"class":112},[67,46422,864],{"class":77},[67,46424,31315],{"class":112},[67,46426,240],{"class":77},[67,46428,31320],{"class":112},[67,46430,31323],{"class":77},[67,46432,46433,46435,46437],{"class":69,"line":167},[67,46434,31338],{"class":73},[67,46436,31341],{"class":208},[67,46438,42049],{"class":77},[67,46440,46441,46443,46445,46447,46449,46451],{"class":69,"line":173},[67,46442,31354],{"class":208},[67,46444,42056],{"class":77},[67,46446,31360],{"class":208},[67,46448,31363],{"class":77},[67,46450,31366],{"class":208},[67,46452,2698],{"class":77},[67,46454,46455,46457,46459,46461],{"class":69,"line":180},[67,46456,31382],{"class":208},[67,46458,35308],{"class":77},[67,46460,909],{"class":73},[67,46462,35313],{"class":77},[67,46464,46465],{"class":69,"line":186},[67,46466,42079],{"class":202},[67,46468,46469,46471,46473,46475,46477,46479,46481,46483,46485,46487,46489,46491,46493,46495],{"class":69,"line":444},[67,46470,31382],{"class":208},[67,46472,42086],{"class":77},[67,46474,909],{"class":73},[67,46476,31390],{"class":77},[67,46478,31393],{"class":5935},[67,46480,909],{"class":73},[67,46482,42097],{"class":77},[67,46484,31402],{"class":5935},[67,46486,909],{"class":73},[67,46488,42104],{"class":77},[67,46490,31411],{"class":5935},[67,46492,909],{"class":73},[67,46494,1077],{"class":208},[67,46496,870],{"class":77},[67,46498,46499],{"class":69,"line":2335},[67,46500,42117],{"class":202},[67,46502,46503,46505,46507,46509,46511,46513,46515,46517,46519,46521,46523,46525,46527,46529,46531,46533],{"class":69,"line":2340},[67,46504,31382],{"class":208},[67,46506,42124],{"class":77},[67,46508,909],{"class":73},[67,46510,31390],{"class":77},[67,46512,31393],{"class":5935},[67,46514,909],{"class":73},[67,46516,42097],{"class":77},[67,46518,31402],{"class":5935},[67,46520,909],{"class":73},[67,46522,42141],{"class":77},[67,46524,1051],{"class":208},[67,46526,42146],{"class":77},[67,46528,31411],{"class":5935},[67,46530,909],{"class":73},[67,46532,1077],{"class":208},[67,46534,870],{"class":77},[67,46536,46537,46539,46541,46543,46545,46547,46549,46551,46553,46555,46557,46559,46561,46563,46565,46567,46569,46571,46573,46575,46577,46579],{"class":69,"line":2346},[67,46538,31382],{"class":208},[67,46540,42161],{"class":77},[67,46542,909],{"class":73},[67,46544,31390],{"class":77},[67,46546,31393],{"class":5935},[67,46548,909],{"class":73},[67,46550,42141],{"class":77},[67,46552,1051],{"class":208},[67,46554,42146],{"class":77},[67,46556,31402],{"class":5935},[67,46558,909],{"class":73},[67,46560,42141],{"class":77},[67,46562,1077],{"class":208},[67,46564,42146],{"class":77},[67,46566,31411],{"class":5935},[67,46568,909],{"class":73},[67,46570,933],{"class":208},[67,46572,1236],{"class":77},[67,46574,31420],{"class":5935},[67,46576,909],{"class":73},[67,46578,1077],{"class":208},[67,46580,870],{"class":77},[67,46582,46583],{"class":69,"line":2351},[67,46584,42206],{"class":202},[67,46586,46587,46589,46591,46593,46595,46597,46599,46601,46603,46605,46607,46609,46611,46613,46615,46617],{"class":69,"line":2365},[67,46588,31382],{"class":208},[67,46590,42213],{"class":77},[67,46592,909],{"class":73},[67,46594,31390],{"class":77},[67,46596,31393],{"class":5935},[67,46598,909],{"class":73},[67,46600,42097],{"class":77},[67,46602,31402],{"class":5935},[67,46604,909],{"class":73},[67,46606,42230],{"class":77},[67,46608,1051],{"class":208},[67,46610,42146],{"class":77},[67,46612,31411],{"class":5935},[67,46614,909],{"class":73},[67,46616,1077],{"class":208},[67,46618,870],{"class":77},[67,46620,46621,46623,46625,46627,46629,46631,46633,46635,46637,46639,46641,46643,46645,46647,46649,46651,46653,46655,46657,46659,46661,46663],{"class":69,"line":2370},[67,46622,31382],{"class":208},[67,46624,42249],{"class":77},[67,46626,909],{"class":73},[67,46628,31390],{"class":77},[67,46630,31393],{"class":5935},[67,46632,909],{"class":73},[67,46634,42230],{"class":77},[67,46636,1051],{"class":208},[67,46638,42146],{"class":77},[67,46640,31402],{"class":5935},[67,46642,909],{"class":73},[67,46644,42230],{"class":77},[67,46646,1077],{"class":208},[67,46648,42146],{"class":77},[67,46650,31411],{"class":5935},[67,46652,909],{"class":73},[67,46654,1177],{"class":208},[67,46656,1236],{"class":77},[67,46658,31420],{"class":5935},[67,46660,909],{"class":73},[67,46662,939],{"class":208},[67,46664,870],{"class":77},[67,46666,46667],{"class":69,"line":2376},[67,46668,42294],{"class":202},[67,46670,46671],{"class":69,"line":2397},[67,46672,42299],{"class":202},[67,46674,46675,46677,46679,46681,46683,46685,46687,46689,46691,46693,46695,46697,46699,46701,46703,46705],{"class":69,"line":2402},[67,46676,31382],{"class":208},[67,46678,42306],{"class":77},[67,46680,909],{"class":73},[67,46682,35366],{"class":77},[67,46684,31411],{"class":5935},[67,46686,909],{"class":73},[67,46688,933],{"class":208},[67,46690,1236],{"class":77},[67,46692,31466],{"class":5935},[67,46694,909],{"class":73},[67,46696,1077],{"class":208},[67,46698,1236],{"class":77},[67,46700,31420],{"class":5935},[67,46702,909],{"class":73},[67,46704,1077],{"class":208},[67,46706,870],{"class":77},[67,46708,46709,46711,46713,46715,46717,46719,46721,46723,46725,46727,46729,46731,46733,46735],{"class":69,"line":2416},[67,46710,31382],{"class":208},[67,46712,42341],{"class":77},[67,46714,909],{"class":73},[67,46716,31390],{"class":77},[67,46718,31393],{"class":5935},[67,46720,909],{"class":73},[67,46722,42097],{"class":77},[67,46724,31402],{"class":5935},[67,46726,909],{"class":73},[67,46728,42358],{"class":77},[67,46730,31411],{"class":5935},[67,46732,909],{"class":73},[67,46734,1077],{"class":208},[67,46736,870],{"class":77},[67,46738,46739],{"class":69,"line":2421},[67,46740,177],{"emptyLinePlaceholder":176},[67,46742,46743,46745,46747],{"class":69,"line":2450},[67,46744,31338],{"class":73},[67,46746,31630],{"class":112},[67,46748,31633],{"class":77},[67,46750,46751,46753,46755,46757,46759,46761],{"class":69,"line":2455},[67,46752,42383],{"class":77},[67,46754,909],{"class":73},[67,46756,31360],{"class":208},[67,46758,35721],{"class":77},[67,46760,31360],{"class":208},[67,46762,42394],{"class":77},[67,46764,46765,46767,46769,46771,46773,46775,46777,46779,46781,46783],{"class":69,"line":2472},[67,46766,7804],{"class":77},[67,46768,909],{"class":73},[67,46770,31360],{"class":208},[67,46772,35721],{"class":77},[67,46774,31360],{"class":208},[67,46776,42409],{"class":77},[67,46778,31360],{"class":208},[67,46780,35721],{"class":77},[67,46782,31360],{"class":208},[67,46784,42418],{"class":77},[67,46786,46787,46789,46791,46793,46795,46797,46799,46801,46803,46805],{"class":69,"line":2477},[67,46788,42423],{"class":77},[67,46790,909],{"class":73},[67,46792,31360],{"class":208},[67,46794,35721],{"class":77},[67,46796,31360],{"class":208},[67,46798,42434],{"class":77},[67,46800,31360],{"class":208},[67,46802,35721],{"class":77},[67,46804,31360],{"class":208},[67,46806,42443],{"class":77},[67,46808,46809,46811,46813,46815,46817,46819,46821,46823],{"class":69,"line":2482},[67,46810,42448],{"class":77},[67,46812,909],{"class":73},[67,46814,31360],{"class":208},[67,46816,35721],{"class":77},[67,46818,31360],{"class":208},[67,46820,42459],{"class":77},[67,46822,31360],{"class":208},[67,46824,42464],{"class":77},[67,46826,46827],{"class":69,"line":2487},[67,46828,42469],{"class":202},[67,46830,46831,46833,46835,46837,46839,46841],{"class":69,"line":2501},[67,46832,15469],{"class":73},[67,46834,42476],{"class":77},[67,46836,33222],{"class":5935},[67,46838,909],{"class":73},[67,46840,1077],{"class":208},[67,46842,870],{"class":77},[67,46844,46845],{"class":69,"line":2506},[67,46846,177],{"emptyLinePlaceholder":176},[67,46848,46849],{"class":69,"line":3298},[67,46850,42497],{"class":202},[67,46852,46853,46855,46857,46859,46861,46863,46865],{"class":69,"line":3312},[67,46854,15411],{"class":73},[67,46856,42504],{"class":112},[67,46858,864],{"class":77},[67,46860,31315],{"class":112},[67,46862,240],{"class":77},[67,46864,31320],{"class":112},[67,46866,31323],{"class":77},[67,46868,46869],{"class":69,"line":3320},[67,46870,42519],{"class":202},[67,46872,46873,46875,46877],{"class":69,"line":3325},[67,46874,31338],{"class":73},[67,46876,31341],{"class":208},[67,46878,42528],{"class":77},[67,46880,46881,46883,46885,46887,46889,46891],{"class":69,"line":3331},[67,46882,31354],{"class":208},[67,46884,42535],{"class":77},[67,46886,31360],{"class":208},[67,46888,31363],{"class":77},[67,46890,31366],{"class":208},[67,46892,2698],{"class":77},[67,46894,46895,46897,46899,46901],{"class":69,"line":3337},[67,46896,31382],{"class":208},[67,46898,42550],{"class":77},[67,46900,909],{"class":73},[67,46902,38546],{"class":77},[67,46904,46905,46907,46909,46911,46913,46915,46917,46919,46921,46923,46925,46927,46929,46931,46933,46935,46937,46939,46941,46943,46945],{"class":69,"line":3342},[67,46906,38551],{"class":77},[67,46908,31393],{"class":5935},[67,46910,909],{"class":73},[67,46912,933],{"class":208},[67,46914,1236],{"class":77},[67,46916,31402],{"class":5935},[67,46918,909],{"class":73},[67,46920,1063],{"class":208},[67,46922,1236],{"class":77},[67,46924,31411],{"class":5935},[67,46926,909],{"class":73},[67,46928,1227],{"class":208},[67,46930,1236],{"class":77},[67,46932,31466],{"class":5935},[67,46934,909],{"class":73},[67,46936,939],{"class":208},[67,46938,1236],{"class":77},[67,46940,31420],{"class":5935},[67,46942,909],{"class":73},[67,46944,933],{"class":208},[67,46946,38584],{"class":77},[67,46948,46949],{"class":69,"line":8667},[67,46950,38589],{"class":77},[67,46952,46953,46955,46957,46959,46961,46963,46965,46967,46969,46971,46973,46975,46977],{"class":69,"line":8691},[67,46954,38634],{"class":77},[67,46956,31411],{"class":5935},[67,46958,909],{"class":73},[67,46960,933],{"class":208},[67,46962,1236],{"class":77},[67,46964,31466],{"class":5935},[67,46966,909],{"class":73},[67,46968,939],{"class":208},[67,46970,1236],{"class":77},[67,46972,31420],{"class":5935},[67,46974,909],{"class":73},[67,46976,1077],{"class":208},[67,46978,870],{"class":77},[67,46980,46981],{"class":69,"line":8696},[67,46982,38663],{"class":77},[67,46984,46985,46987,46989,46991],{"class":69,"line":8702},[67,46986,31382],{"class":208},[67,46988,42641],{"class":77},[67,46990,909],{"class":73},[67,46992,38546],{"class":77},[67,46994,46995,46997,46999,47001,47003,47005,47007,47009,47011,47013,47015,47017,47019],{"class":69,"line":8729},[67,46996,38551],{"class":77},[67,46998,31393],{"class":5935},[67,47000,909],{"class":73},[67,47002,1063],{"class":208},[67,47004,1236],{"class":77},[67,47006,31402],{"class":5935},[67,47008,909],{"class":73},[67,47010,1063],{"class":208},[67,47012,1236],{"class":77},[67,47014,31411],{"class":5935},[67,47016,909],{"class":73},[67,47018,1077],{"class":208},[67,47020,38584],{"class":77},[67,47022,47023],{"class":69,"line":8734},[67,47024,38589],{"class":77},[67,47026,47027,47029,47031,47033,47035,47037,47039,47041,47043,47045,47047,47049,47051,47053,47055,47057,47059],{"class":69,"line":8740},[67,47028,38551],{"class":77},[67,47030,31393],{"class":5935},[67,47032,909],{"class":73},[67,47034,1063],{"class":208},[67,47036,1236],{"class":77},[67,47038,31402],{"class":5935},[67,47040,909],{"class":73},[67,47042,42696],{"class":208},[67,47044,1236],{"class":77},[67,47046,31411],{"class":5935},[67,47048,909],{"class":73},[67,47050,933],{"class":208},[67,47052,1236],{"class":77},[67,47054,31420],{"class":5935},[67,47056,909],{"class":73},[67,47058,1077],{"class":208},[67,47060,38584],{"class":77},[67,47062,47063],{"class":69,"line":8752},[67,47064,38589],{"class":77},[67,47066,47067,47069,47071,47073,47075,47077,47079,47081,47083,47085,47087,47089,47091],{"class":69,"line":8764},[67,47068,38634],{"class":77},[67,47070,31411],{"class":5935},[67,47072,909],{"class":73},[67,47074,933],{"class":208},[67,47076,1236],{"class":77},[67,47078,31466],{"class":5935},[67,47080,909],{"class":73},[67,47082,939],{"class":208},[67,47084,1236],{"class":77},[67,47086,31420],{"class":5935},[67,47088,909],{"class":73},[67,47090,1077],{"class":208},[67,47092,870],{"class":77},[67,47094,47095],{"class":69,"line":8776},[67,47096,38663],{"class":77},[67,47098,47099,47101,47103,47105],{"class":69,"line":10435},[67,47100,31382],{"class":208},[67,47102,42757],{"class":77},[67,47104,909],{"class":73},[67,47106,38546],{"class":77},[67,47108,47109,47111,47113,47115,47117,47119,47121,47123,47125,47127,47129,47131,47133,47135,47137],{"class":69,"line":10459},[67,47110,42766],{"class":77},[67,47112,42696],{"class":208},[67,47114,1236],{"class":77},[67,47116,1063],{"class":208},[67,47118,42775],{"class":77},[67,47120,1069],{"class":208},[67,47122,1236],{"class":77},[67,47124,32607],{"class":208},[67,47126,42784],{"class":77},[67,47128,1457],{"class":208},[67,47130,1236],{"class":77},[67,47132,1057],{"class":208},[67,47134,42793],{"class":77},[67,47136,1057],{"class":208},[67,47138,38584],{"class":77},[67,47140,47141,47143,47145,47147,47149,47151,47153,47155,47157,47159,47161,47163,47165,47167,47169],{"class":69,"line":10482},[67,47142,42766],{"class":77},[67,47144,35407],{"class":208},[67,47146,1236],{"class":77},[67,47148,32607],{"class":208},[67,47150,42775],{"class":77},[67,47152,32607],{"class":208},[67,47154,1236],{"class":77},[67,47156,42696],{"class":208},[67,47158,42784],{"class":77},[67,47160,1057],{"class":208},[67,47162,1236],{"class":77},[67,47164,1069],{"class":208},[67,47166,42793],{"class":77},[67,47168,1063],{"class":208},[67,47170,38584],{"class":77},[67,47172,47173,47175,47177,47179,47181,47183,47185,47187,47189,47191,47193,47195,47197],{"class":69,"line":10506},[67,47174,38634],{"class":77},[67,47176,31411],{"class":5935},[67,47178,909],{"class":73},[67,47180,933],{"class":208},[67,47182,1236],{"class":77},[67,47184,31466],{"class":5935},[67,47186,909],{"class":73},[67,47188,939],{"class":208},[67,47190,1236],{"class":77},[67,47192,31420],{"class":5935},[67,47194,909],{"class":73},[67,47196,1077],{"class":208},[67,47198,870],{"class":77},[67,47200,47201],{"class":69,"line":10511},[67,47202,38663],{"class":77},[67,47204,47205,47207,47209,47211],{"class":69,"line":10516},[67,47206,31382],{"class":208},[67,47208,42868],{"class":77},[67,47210,909],{"class":73},[67,47212,38546],{"class":77},[67,47214,47215,47217,47219,47221,47223,47225,47227,47229,47231,47233,47235,47237,47239,47241,47243],{"class":69,"line":10521},[67,47216,42766],{"class":77},[67,47218,42879],{"class":208},[67,47220,1236],{"class":77},[67,47222,42696],{"class":208},[67,47224,42775],{"class":77},[67,47226,1069],{"class":208},[67,47228,1236],{"class":77},[67,47230,42892],{"class":208},[67,47232,42784],{"class":77},[67,47234,1457],{"class":208},[67,47236,1236],{"class":77},[67,47238,1463],{"class":208},[67,47240,42793],{"class":77},[67,47242,1063],{"class":208},[67,47244,38584],{"class":77},[67,47246,47247,47249,47251,47253,47255,47257,47259,47261,47263,47265,47267,47269,47271,47273,47275],{"class":69,"line":10530},[67,47248,42766],{"class":77},[67,47250,38994],{"class":208},[67,47252,1236],{"class":77},[67,47254,21765],{"class":208},[67,47256,42775],{"class":77},[67,47258,1474],{"class":208},[67,47260,1236],{"class":77},[67,47262,32038],{"class":208},[67,47264,42784],{"class":77},[67,47266,1656],{"class":208},[67,47268,1236],{"class":77},[67,47270,1063],{"class":208},[67,47272,42793],{"class":77},[67,47274,1063],{"class":208},[67,47276,38584],{"class":77},[67,47278,47279,47281,47283,47285,47287,47289,47291,47293,47295,47297,47299,47301,47303,47305,47307],{"class":69,"line":10535},[67,47280,42766],{"class":77},[67,47282,38994],{"class":208},[67,47284,1236],{"class":77},[67,47286,32607],{"class":208},[67,47288,42775],{"class":77},[67,47290,32607],{"class":208},[67,47292,1236],{"class":77},[67,47294,35407],{"class":208},[67,47296,42784],{"class":77},[67,47298,1656],{"class":208},[67,47300,1236],{"class":77},[67,47302,1063],{"class":208},[67,47304,42793],{"class":77},[67,47306,1063],{"class":208},[67,47308,38584],{"class":77},[67,47310,47311,47313,47315,47317,47319,47321,47323,47325,47327,47329,47331,47333,47335,47337,47339],{"class":69,"line":10541},[67,47312,42766],{"class":77},[67,47314,38994],{"class":208},[67,47316,1236],{"class":77},[67,47318,1474],{"class":208},[67,47320,42775],{"class":77},[67,47322,32607],{"class":208},[67,47324,1236],{"class":77},[67,47326,42989],{"class":208},[67,47328,42784],{"class":77},[67,47330,1057],{"class":208},[67,47332,1236],{"class":77},[67,47334,1063],{"class":208},[67,47336,42793],{"class":77},[67,47338,1063],{"class":208},[67,47340,38584],{"class":77},[67,47342,47343,47345,47347,47349,47351,47353,47355,47357,47359,47361,47363,47365,47367,47369,47371],{"class":69,"line":10562},[67,47344,42766],{"class":77},[67,47346,43010],{"class":208},[67,47348,1236],{"class":77},[67,47350,35407],{"class":208},[67,47352,42775],{"class":77},[67,47354,21765],{"class":208},[67,47356,1236],{"class":77},[67,47358,43023],{"class":208},[67,47360,42784],{"class":77},[67,47362,1057],{"class":208},[67,47364,1236],{"class":77},[67,47366,32607],{"class":208},[67,47368,42793],{"class":77},[67,47370,32607],{"class":208},[67,47372,38584],{"class":77},[67,47374,47375,47377,47379,47381,47383,47385,47387,47389,47391,47393,47395,47397,47399],{"class":69,"line":10568},[67,47376,38634],{"class":77},[67,47378,31411],{"class":5935},[67,47380,909],{"class":73},[67,47382,933],{"class":208},[67,47384,1236],{"class":77},[67,47386,31466],{"class":5935},[67,47388,909],{"class":73},[67,47390,939],{"class":208},[67,47392,1236],{"class":77},[67,47394,31420],{"class":5935},[67,47396,909],{"class":73},[67,47398,1077],{"class":208},[67,47400,870],{"class":77},[67,47402,47403],{"class":69,"line":10582},[67,47404,38663],{"class":77},[67,47406,47407,47409,47411,47413],{"class":69,"line":10588},[67,47408,31382],{"class":208},[67,47410,43076],{"class":77},[67,47412,909],{"class":73},[67,47414,38546],{"class":77},[67,47416,47417,47419,47421,47423,47425,47427,47429,47431,47433,47435,47437,47439,47441,47443,47445],{"class":69,"line":10615},[67,47418,42766],{"class":77},[67,47420,43087],{"class":208},[67,47422,1236],{"class":77},[67,47424,35407],{"class":208},[67,47426,42775],{"class":77},[67,47428,21765],{"class":208},[67,47430,1236],{"class":77},[67,47432,43023],{"class":208},[67,47434,42784],{"class":77},[67,47436,1057],{"class":208},[67,47438,1236],{"class":77},[67,47440,32607],{"class":208},[67,47442,42793],{"class":77},[67,47444,32607],{"class":208},[67,47446,38584],{"class":77},[67,47448,47449,47451,47453,47455,47457,47459,47461,47463,47465,47467,47469,47471,47473,47475,47477],{"class":69,"line":10624},[67,47450,42766],{"class":77},[67,47452,43087],{"class":208},[67,47454,1236],{"class":77},[67,47456,35477],{"class":208},[67,47458,42775],{"class":77},[67,47460,42696],{"class":208},[67,47462,1236],{"class":77},[67,47464,35477],{"class":208},[67,47466,42784],{"class":77},[67,47468,1463],{"class":208},[67,47470,1236],{"class":77},[67,47472,32607],{"class":208},[67,47474,42793],{"class":77},[67,47476,32607],{"class":208},[67,47478,38584],{"class":77},[67,47480,47481,47483,47485,47487,47489],{"class":69,"line":10630},[67,47482,43150],{"class":77},[67,47484,1077],{"class":208},[67,47486,1236],{"class":77},[67,47488,1077],{"class":208},[67,47490,43159],{"class":77},[67,47492,47493],{"class":69,"line":10638},[67,47494,39327],{"class":77},[67,47496,47497,47499,47501,47503,47505],{"class":69,"line":10643},[67,47498,39332],{"class":77},[67,47500,43170],{"class":208},[67,47502,1236],{"class":77},[67,47504,939],{"class":208},[67,47506,870],{"class":77},[67,47508,47509],{"class":69,"line":17321},[67,47510,38663],{"class":77},[67,47512,47513],{"class":69,"line":17327},[67,47514,43185],{"class":202},[67,47516,47517,47519,47521,47523,47525],{"class":69,"line":17350},[67,47518,4123],{"class":73},[67,47520,39405],{"class":77},[67,47522,81],{"class":73},[67,47524,39410],{"class":208},[67,47526,39413],{"class":77},[67,47528,47529,47531,47533],{"class":69,"line":17356},[67,47530,5361],{"class":73},[67,47532,39425],{"class":208},[67,47534,39428],{"class":77},[67,47536,47537,47539,47541,47543,47545,47547,47549,47551,47553],{"class":69,"line":17379},[67,47538,39438],{"class":77},[67,47540,43212],{"class":5935},[67,47542,909],{"class":73},[67,47544,43217],{"class":84},[67,47546,1236],{"class":77},[67,47548,39441],{"class":5935},[67,47550,909],{"class":73},[67,47552,39446],{"class":84},[67,47554,870],{"class":77},[67,47556,47557],{"class":69,"line":17393},[67,47558,43232],{"class":202},[67,47560,47561],{"class":69,"line":17413},[67,47562,43237],{"class":202},[67,47564,47565],{"class":69,"line":17419},[67,47566,43242],{"class":202},[67,47568,47569],{"class":69,"line":17430},[67,47570,43247],{"class":202},[67,47572,47573],{"class":69,"line":17453},[67,47574,43252],{"class":202},[67,47576,47577],{"class":69,"line":17475},[67,47578,43257],{"class":202},[67,47580,47581,47583,47585,47587,47589,47591],{"class":69,"line":17480},[67,47582,39458],{"class":73},[67,47584,39461],{"class":77},[67,47586,39464],{"class":73},[67,47588,39467],{"class":73},[67,47590,39470],{"class":208},[67,47592,4459],{"class":77},[67,47594,47595,47597,47599],{"class":69,"line":17486},[67,47596,39482],{"class":77},[67,47598,1051],{"class":208},[67,47600,870],{"class":77},[67,47602,47603,47605,47607],{"class":69,"line":17500},[67,47604,43284],{"class":73},[67,47606,39425],{"class":208},[67,47608,39501],{"class":77},[67,47610,47611,47613,47615,47617,47619],{"class":69,"line":17513},[67,47612,43293],{"class":77},[67,47614,1051],{"class":208},[67,47616,1236],{"class":77},[67,47618,39523],{"class":208},[67,47620,870],{"class":77},[67,47622,47623,47625,47627,47629,47631,47633],{"class":69,"line":17518},[67,47624,43306],{"class":73},[67,47626,39461],{"class":77},[67,47628,39464],{"class":73},[67,47630,39467],{"class":73},[67,47632,39470],{"class":208},[67,47634,4459],{"class":77},[67,47636,47637,47639,47641],{"class":69,"line":17532},[67,47638,43321],{"class":77},[67,47640,1051],{"class":208},[67,47642,870],{"class":77},[67,47644,47645],{"class":69,"line":17537},[67,47646,35702],{"class":202},[67,47648,47649,47651,47653],{"class":69,"line":17543},[67,47650,31338],{"class":73},[67,47652,31630],{"class":112},[67,47654,31633],{"class":77},[67,47656,47657,47659,47661,47663],{"class":69,"line":17548},[67,47658,31638],{"class":77},[67,47660,909],{"class":73},[67,47662,31360],{"class":208},[67,47664,43348],{"class":77},[67,47666,47667,47669,47671,47673],{"class":69,"line":17562},[67,47668,31638],{"class":77},[67,47670,909],{"class":73},[67,47672,31360],{"class":208},[67,47674,43359],{"class":77},[67,47676,47677,47679,47681,47683],{"class":69,"line":17567},[67,47678,31638],{"class":77},[67,47680,909],{"class":73},[67,47682,31360],{"class":208},[67,47684,43370],{"class":77},[67,47686,47687,47689,47691,47693],{"class":69,"line":17572},[67,47688,31638],{"class":77},[67,47690,909],{"class":73},[67,47692,31360],{"class":208},[67,47694,43381],{"class":77},[67,47696,47697,47699,47701,47703],{"class":69,"line":17586},[67,47698,31638],{"class":77},[67,47700,909],{"class":73},[67,47702,31360],{"class":208},[67,47704,43392],{"class":77},[67,47706,47707,47709],{"class":69,"line":17598},[67,47708,15469],{"class":73},[67,47710,31746],{"class":77},[67,47712,47713],{"class":69,"line":17603},[67,47714,177],{"emptyLinePlaceholder":176},[67,47716,47717],{"class":69,"line":17616},[67,47718,43407],{"class":202},[67,47720,47721,47723,47725,47727,47729],{"class":69,"line":17621},[67,47722,2254],{"class":73},[67,47724,31757],{"class":208},[67,47726,3670],{"class":73},[67,47728,31762],{"class":84},[67,47730,4459],{"class":77},[67,47732,47733,47735,47737,47739,47741,47743,47745,47747,47749],{"class":69,"line":17626},[67,47734,31774],{"class":77},[67,47736,909],{"class":73},[67,47738,30988],{"class":77},[67,47740,31781],{"class":84},[67,47742,2427],{"class":73},[67,47744,31786],{"class":77},[67,47746,2424],{"class":73},[67,47748,31013],{"class":84},[67,47750,870],{"class":77},[67,47752,47753,47755,47757],{"class":69,"line":17631},[67,47754,31826],{"class":77},[67,47756,909],{"class":73},[67,47758,43448],{"class":77},[67,47760,47761,47763,47765,47767,47769,47771,47773,47775],{"class":69,"line":17644},[67,47762,31836],{"class":208},[67,47764,31839],{"class":77},[67,47766,1077],{"class":208},[67,47768,1236],{"class":77},[67,47770,32038],{"class":208},[67,47772,1236],{"class":77},[67,47774,32038],{"class":208},[67,47776,31852],{"class":77},[40,47778,47780],{"id":47779},"_242训练代码包含预处理","2.4.2.训练代码（包含预处理）",[19,47782,47783],{},"计算图片的均值与方差，用于训练中归一化处理操作",[57,47785,47787],{"className":30915,"code":47786,"language":30917,"meta":62,"style":62},"# 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",[64,47788,47789,47794,47807,47812,47818,47823,47833,47837,47842,47852,47856,47861,47871,47888,47892,47897,47909,47921,47952,47961,47971,47981,47985,47990,48005,48009,48014,48019,48024,48034,48039,48064,48068,48073,48088,48092,48105,48109,48114,48119,48124,48129,48134,48144,48154,48177,48185,48193,48201,48205,48217,48221,48226,48230,48234,48241,48261,48285,48292,48306,48311,48316,48320,48334,48338,48350],{"__ignoreMap":62},[67,47790,47791],{"class":69,"line":70},[67,47792,47793],{"class":202},"# PIL（Python Imaging Library）里的 Image 用来读取图片\n",[67,47795,47796,47798,47801,47804],{"class":69,"line":143},[67,47797,31274],{"class":73},[67,47799,47800],{"class":208}," PIL",[67,47802,47803],{"class":73}," import",[67,47805,47806],{"class":77}," Image\n",[67,47808,47809],{"class":69,"line":149},[67,47810,47811],{"class":202},"# os 用来处理文件夹和文件路径\n",[67,47813,47814,47816],{"class":69,"line":155},[67,47815,30929],{"class":73},[67,47817,45842],{"class":77},[67,47819,47820],{"class":69,"line":161},[67,47821,47822],{"class":202},"# numpy 是科学计算库，用于做矩阵运算（这里用来处理图片像素）\n",[67,47824,47825,47827,47829,47831],{"class":69,"line":167},[67,47826,30929],{"class":73},[67,47828,31917],{"class":77},[67,47830,31920],{"class":73},[67,47832,31923],{"class":77},[67,47834,47835],{"class":69,"line":173},[67,47836,177],{"emptyLinePlaceholder":176},[67,47838,47839],{"class":69,"line":180},[67,47840,47841],{"class":202},"# 文件夹路径，包含所有图片文件\n",[67,47843,47844,47847,47849],{"class":69,"line":186},[67,47845,47846],{"class":77},"folder_path ",[67,47848,909],{"class":73},[67,47850,47851],{"class":84}," 'data_cat_dog'\n",[67,47853,47854],{"class":69,"line":444},[67,47855,177],{"emptyLinePlaceholder":176},[67,47857,47858],{"class":69,"line":2335},[67,47859,47860],{"class":202},"# 初始化累积变量\n",[67,47862,47863,47866,47868],{"class":69,"line":2340},[67,47864,47865],{"class":77},"total_pixels ",[67,47867,909],{"class":73},[67,47869,47870],{"class":208}," 0\n",[67,47872,47873,47876,47878,47881,47883,47885],{"class":69,"line":2346},[67,47874,47875],{"class":77},"sum_normalized_pixel_values ",[67,47877,909],{"class":73},[67,47879,47880],{"class":77}," np.zeros(",[67,47882,933],{"class":208},[67,47884,46345],{"class":77},[67,47886,47887],{"class":202},"# 如果是RGB图像，需要三个通道的均值和方差\n",[67,47889,47890],{"class":69,"line":2351},[67,47891,177],{"emptyLinePlaceholder":176},[67,47893,47894],{"class":69,"line":2365},[67,47895,47896],{"class":202},"# 遍历文件夹中的图片文件\n",[67,47898,47899,47901,47904,47906],{"class":69,"line":2370},[67,47900,74],{"class":73},[67,47902,47903],{"class":77}," root, dirs, files ",[67,47905,81],{"class":73},[67,47907,47908],{"class":77}," os.walk(folder_path):\n",[67,47910,47911,47913,47916,47918],{"class":69,"line":2376},[67,47912,3921],{"class":73},[67,47914,47915],{"class":77}," filename ",[67,47917,81],{"class":73},[67,47919,47920],{"class":77}," files:\n",[67,47922,47923,47925,47928,47931,47933,47936,47938,47941,47943,47946,47949],{"class":69,"line":2397},[67,47924,3218],{"class":73},[67,47926,47927],{"class":77}," filename.endswith((",[67,47929,47930],{"class":84},"'.jpg'",[67,47932,13153],{"class":77},[67,47934,47935],{"class":84},"'.jpeg'",[67,47937,13153],{"class":77},[67,47939,47940],{"class":84},"'.png'",[67,47942,13153],{"class":77},[67,47944,47945],{"class":84},"'.bmp'",[67,47947,47948],{"class":77},")):  ",[67,47950,47951],{"class":202},"# 可根据实际情况添加其他格式\n",[67,47953,47954,47956,47958],{"class":69,"line":2402},[67,47955,46210],{"class":77},[67,47957,909],{"class":73},[67,47959,47960],{"class":77}," os.path.join(root, filename)\n",[67,47962,47963,47966,47968],{"class":69,"line":2416},[67,47964,47965],{"class":77},"            image ",[67,47967,909],{"class":73},[67,47969,47970],{"class":77}," Image.open(image_path)\n",[67,47972,47973,47976,47978],{"class":69,"line":2421},[67,47974,47975],{"class":77},"            image_array ",[67,47977,909],{"class":73},[67,47979,47980],{"class":77}," np.array(image)\n",[67,47982,47983],{"class":69,"line":2450},[67,47984,177],{"emptyLinePlaceholder":176},[67,47986,47987],{"class":69,"line":2455},[67,47988,47989],{"class":202},"            # 归一化像素值到0-1之间\n",[67,47991,47992,47995,47997,48000,48002],{"class":69,"line":2472},[67,47993,47994],{"class":77},"            normalized_image_array ",[67,47996,909],{"class":73},[67,47998,47999],{"class":77}," image_array ",[67,48001,1440],{"class":73},[67,48003,48004],{"class":208}," 255.0\n",[67,48006,48007],{"class":69,"line":2477},[67,48008,177],{"emptyLinePlaceholder":176},[67,48010,48011],{"class":69,"line":2482},[67,48012,48013],{"class":202},"            # print(image_path)\n",[67,48015,48016],{"class":69,"line":2487},[67,48017,48018],{"class":202},"            # print(normalized_image_array.shape)\n",[67,48020,48021],{"class":69,"line":2501},[67,48022,48023],{"class":202},"            # 累积归一化后的像素值和像素数量\n",[67,48025,48026,48029,48031],{"class":69,"line":2506},[67,48027,48028],{"class":77},"            total_pixels ",[67,48030,10196],{"class":73},[67,48032,48033],{"class":77}," normalized_image_array.size\n",[67,48035,48036],{"class":69,"line":3298},[67,48037,48038],{"class":202},"            # 是把图片在高度和宽度方向求和，得到每个通道的总和（RGB 三个通道分别求）\n",[67,48040,48041,48044,48046,48049,48052,48054,48056,48058,48060,48062],{"class":69,"line":3312},[67,48042,48043],{"class":77},"            sum_normalized_pixel_values ",[67,48045,10196],{"class":73},[67,48047,48048],{"class":77}," np.sum(normalized_image_array, ",[67,48050,48051],{"class":5935},"axis",[67,48053,909],{"class":73},[67,48055,864],{"class":77},[67,48057,1051],{"class":208},[67,48059,13153],{"class":77},[67,48061,1077],{"class":208},[67,48063,31034],{"class":77},[67,48065,48066],{"class":69,"line":3320},[67,48067,177],{"emptyLinePlaceholder":176},[67,48069,48070],{"class":69,"line":3325},[67,48071,48072],{"class":202},"# 用像素总和\u002F像素总数 就得到每个通道的均值\n",[67,48074,48075,48078,48080,48083,48085],{"class":69,"line":3331},[67,48076,48077],{"class":77},"mean ",[67,48079,909],{"class":73},[67,48081,48082],{"class":77}," sum_normalized_pixel_values ",[67,48084,1440],{"class":73},[67,48086,48087],{"class":77}," total_pixels\n",[67,48089,48090],{"class":69,"line":3337},[67,48091,177],{"emptyLinePlaceholder":176},[67,48093,48094,48097,48099,48101,48103],{"class":69,"line":3342},[67,48095,48096],{"class":77},"sum_squared_diff ",[67,48098,909],{"class":73},[67,48100,47880],{"class":77},[67,48102,933],{"class":208},[67,48104,870],{"class":77},[67,48106,48107],{"class":69,"line":8667},[67,48108,177],{"emptyLinePlaceholder":176},[67,48110,48111],{"class":69,"line":8691},[67,48112,48113],{"class":202},"# os.walk(folder_path)：遍历文件夹里所有文件和子文件夹\n",[67,48115,48116],{"class":69,"line":8696},[67,48117,48118],{"class":202},"# filename.endswith(...)：只选择图片文件（jpg\u002Fpng\u002Fbmp）\n",[67,48120,48121],{"class":69,"line":8702},[67,48122,48123],{"class":202},"# os.path.join(root, filename)：得到每张图片的完整路径\n",[67,48125,48126],{"class":69,"line":8729},[67,48127,48128],{"class":202},"# Image.open(image_path)：打开图片\n",[67,48130,48131],{"class":69,"line":8734},[67,48132,48133],{"class":202},"# np.array(image)：把图片转成 numpy 数组，形状一般是 (高度, 宽度, 3)\n",[67,48135,48136,48138,48140,48142],{"class":69,"line":8740},[67,48137,74],{"class":73},[67,48139,47903],{"class":77},[67,48141,81],{"class":73},[67,48143,47908],{"class":77},[67,48145,48146,48148,48150,48152],{"class":69,"line":8752},[67,48147,3921],{"class":73},[67,48149,47915],{"class":77},[67,48151,81],{"class":73},[67,48153,47920],{"class":77},[67,48155,48156,48158,48160,48162,48164,48166,48168,48170,48172,48174],{"class":69,"line":8764},[67,48157,3218],{"class":73},[67,48159,47927],{"class":77},[67,48161,47930],{"class":84},[67,48163,13153],{"class":77},[67,48165,47935],{"class":84},[67,48167,13153],{"class":77},[67,48169,47940],{"class":84},[67,48171,13153],{"class":77},[67,48173,47945],{"class":84},[67,48175,48176],{"class":77},")):\n",[67,48178,48179,48181,48183],{"class":69,"line":8776},[67,48180,46210],{"class":77},[67,48182,909],{"class":73},[67,48184,47960],{"class":77},[67,48186,48187,48189,48191],{"class":69,"line":10435},[67,48188,47965],{"class":77},[67,48190,909],{"class":73},[67,48192,47970],{"class":77},[67,48194,48195,48197,48199],{"class":69,"line":10459},[67,48196,47975],{"class":77},[67,48198,909],{"class":73},[67,48200,47980],{"class":77},[67,48202,48203],{"class":69,"line":10482},[67,48204,47989],{"class":202},[67,48206,48207,48209,48211,48213,48215],{"class":69,"line":10506},[67,48208,47994],{"class":77},[67,48210,909],{"class":73},[67,48212,47999],{"class":77},[67,48214,1440],{"class":73},[67,48216,48004],{"class":208},[67,48218,48219],{"class":69,"line":10511},[67,48220,48018],{"class":202},[67,48222,48223],{"class":69,"line":10516},[67,48224,48225],{"class":202},"            # print(mean.shape)\n",[67,48227,48228],{"class":69,"line":10521},[67,48229,48013],{"class":202},[67,48231,48232],{"class":69,"line":10530},[67,48233,177],{"emptyLinePlaceholder":176},[67,48235,48236,48239],{"class":69,"line":10535},[67,48237,48238],{"class":73},"            try",[67,48240,4459],{"class":77},[67,48242,48243,48246,48248,48251,48253,48256,48258],{"class":69,"line":10541},[67,48244,48245],{"class":77},"                diff ",[67,48247,909],{"class":73},[67,48249,48250],{"class":77}," (normalized_image_array ",[67,48252,1389],{"class":73},[67,48254,48255],{"class":77}," mean) ",[67,48257,11379],{"class":73},[67,48259,48260],{"class":208}," 2\n",[67,48262,48263,48266,48268,48271,48273,48275,48277,48279,48281,48283],{"class":69,"line":10562},[67,48264,48265],{"class":77},"                sum_squared_diff ",[67,48267,10196],{"class":73},[67,48269,48270],{"class":77}," np.sum(diff, ",[67,48272,48051],{"class":5935},[67,48274,909],{"class":73},[67,48276,864],{"class":77},[67,48278,1051],{"class":208},[67,48280,13153],{"class":77},[67,48282,1077],{"class":208},[67,48284,31034],{"class":77},[67,48286,48287,48290],{"class":69,"line":10568},[67,48288,48289],{"class":73},"            except",[67,48291,4459],{"class":77},[67,48293,48294,48297,48299,48301,48304],{"class":69,"line":10582},[67,48295,48296],{"class":208},"                print",[67,48298,864],{"class":77},[67,48300,915],{"class":73},[67,48302,48303],{"class":84},"\"捕获到自定义异常\"",[67,48305,870],{"class":77},[67,48307,48308],{"class":69,"line":10588},[67,48309,48310],{"class":202},"            # diff = (normalized_image_array - mean) ** 2\n",[67,48312,48313],{"class":69,"line":10615},[67,48314,48315],{"class":202},"            # sum_squared_diff += np.sum(diff, axis=(0, 1))\n",[67,48317,48318],{"class":69,"line":10624},[67,48319,177],{"emptyLinePlaceholder":176},[67,48321,48322,48325,48327,48330,48332],{"class":69,"line":10630},[67,48323,48324],{"class":77},"variance ",[67,48326,909],{"class":73},[67,48328,48329],{"class":77}," sum_squared_diff ",[67,48331,1440],{"class":73},[67,48333,48087],{"class":77},[67,48335,48336],{"class":69,"line":10638},[67,48337,177],{"emptyLinePlaceholder":176},[67,48339,48340,48342,48344,48347],{"class":69,"line":10643},[67,48341,30952],{"class":208},[67,48343,864],{"class":77},[67,48345,48346],{"class":84},"\"Mean:\"",[67,48348,48349],{"class":77},", mean)\n",[67,48351,48352,48354,48356,48359],{"class":69,"line":17321},[67,48353,30952],{"class":208},[67,48355,864],{"class":77},[67,48357,48358],{"class":84},"\"Variance:\"",[67,48360,48361],{"class":77},", variance)\n",[57,48363,48365],{"className":30915,"code":48364,"language":30917,"meta":62,"style":62},"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",[64,48366,48367,48373,48379,48389,48395,48405,48419,48429,48439,48449,48453,48463,48473,48477,48481,48489,48494,48499,48518,48522,48527,48532,48537,48542,48583,48588,48598,48603,48616,48621,48626,48631,48636,48641,48645,48650,48655,48677,48681,48713,48727,48737,48747,48751,48761,48775,48785,48795,48805,48811,48815,48819,48823,48827,48831,48839,48859,48863,48867,48871,48875,48891,48895,48899,48907,48911,48915,48923,48927,48931,48935,48943,48947,48951,48955,48963,48967,48975,48979,48987,48991,48999,49003,49011,49015,49019,49027,49031,49035,49047,49071,49085,49089,49093,49097,49105,49109,49117,49121,49129,49133,49141,49145,49153,49157,49165,49169,49181,49185,49193,49197,49205,49209,49213,49217,49221,49229,49233,49249,49253,49261,49265,49269,49273,49277,49281,49285,49289,49305,49309,49321,49325,49337,49341,49353,49357,49365,49369,49377,49381,49385,49389,49395,49399,49407,49411,49427,49431,49439,49443,49459,49471,49475,49487,49491,49495,49503,49507,49511,49519,49523,49531,49535,49543,49547,49551,49593,49635,49639,49643,49659,49663,49679,49683,49687,49695,49699,49703,49715,49753,49757,49761,49769,49773,49787,49797,49803,49809,49815,49821,49825,49829,49835,49839,49843,49851,49855,49873,49877,49881,49885,49901,49905,49909,49913,49917,49921,49941,49961,49965,49969,49973,49981,49989,49993,50009,50029,50049,50053,50058,50067,50076,50081,50086,50091,50104,50109,50118,50127,50144],{"__ignoreMap":62},[67,48368,48369,48371],{"class":69,"line":70},[67,48370,30929],{"class":73},[67,48372,32359],{"class":77},[67,48374,48375,48377],{"class":69,"line":143},[67,48376,30929],{"class":73},[67,48378,32366],{"class":77},[67,48380,48381,48383,48385,48387],{"class":69,"line":149},[67,48382,30929],{"class":73},[67,48384,32377],{"class":77},[67,48386,31920],{"class":73},[67,48388,32382],{"class":77},[67,48390,48391,48393],{"class":69,"line":155},[67,48392,30929],{"class":73},[67,48394,30932],{"class":77},[67,48396,48397,48399,48401,48403],{"class":69,"line":161},[67,48398,31274],{"class":73},[67,48400,31952],{"class":77},[67,48402,30929],{"class":73},[67,48404,32399],{"class":77},[67,48406,48407,48409,48411,48413,48416],{"class":69,"line":167},[67,48408,31274],{"class":73},[67,48410,31905],{"class":77},[67,48412,30929],{"class":73},[67,48414,48415],{"class":77}," ImageFolder ",[67,48417,48418],{"class":202},"# 导入图像数据集,可以直接读取文件夹中的数据,并划分标签 \n",[67,48420,48421,48423,48425,48427],{"class":69,"line":173},[67,48422,31274],{"class":73},[67,48424,31935],{"class":77},[67,48426,30929],{"class":73},[67,48428,31940],{"class":77},[67,48430,48431,48433,48435,48437],{"class":69,"line":180},[67,48432,30929],{"class":73},[67,48434,31952],{"class":77},[67,48436,31920],{"class":73},[67,48438,31957],{"class":77},[67,48440,48441,48443,48445,48447],{"class":69,"line":186},[67,48442,30929],{"class":73},[67,48444,31969],{"class":77},[67,48446,31920],{"class":73},[67,48448,31974],{"class":77},[67,48450,48451],{"class":69,"line":444},[67,48452,32444],{"class":202},[67,48454,48455,48457,48459,48461],{"class":69,"line":2335},[67,48456,31274],{"class":73},[67,48458,32451],{"class":77},[67,48460,30929],{"class":73},[67,48462,43568],{"class":77},[67,48464,48465,48467,48469,48471],{"class":69,"line":2340},[67,48466,31274],{"class":73},[67,48468,31277],{"class":77},[67,48470,30929],{"class":73},[67,48472,31282],{"class":77},[67,48474,48475],{"class":69,"line":2346},[67,48476,177],{"emptyLinePlaceholder":176},[67,48478,48479],{"class":69,"line":2351},[67,48480,32479],{"class":202},[67,48482,48483,48485,48487],{"class":69,"line":2365},[67,48484,32484],{"class":73},[67,48486,32487],{"class":112},[67,48488,32490],{"class":77},[67,48490,48491],{"class":69,"line":2370},[67,48492,48493],{"class":202},"    # 导入自己的数据集，并进行数据处理\n",[67,48495,48496],{"class":69,"line":2376},[67,48497,48498],{"class":202},"    # 定义数据集的路径\n",[67,48500,48501,48504,48506,48508,48510,48512,48516],{"class":69,"line":2397},[67,48502,48503],{"class":208},"    ROOT_PATH",[67,48505,909],{"class":73},[67,48507,1526],{"class":73},[67,48509,257],{"class":84},[67,48511,240],{"class":208},[67,48513,48515],{"class":48514},"sA_wV","\u002Fdata\u002Ftrain",[67,48517,25842],{"class":84},[67,48519,48520],{"class":69,"line":2402},[67,48521,177],{"emptyLinePlaceholder":176},[67,48523,48524],{"class":69,"line":2416},[67,48525,48526],{"class":202},"    # 定义归一化方法\n",[67,48528,48529],{"class":69,"line":2421},[67,48530,48531],{"class":202},"    # 这里需要先计算一下数据集的均值和方差\n",[67,48533,48534],{"class":69,"line":2450},[67,48535,48536],{"class":202},"    #  mean_std.py 文件可以计算出均值和方差,然后把结果填入下面的 Normalize() 中\n",[67,48538,48539],{"class":69,"line":2455},[67,48540,48541],{"class":202},"    # 第一个参数是均值，第二个参数是方差\n",[67,48543,48544,48547,48549,48552,48555,48557,48560,48562,48565,48568,48571,48573,48576,48578,48581],{"class":69,"line":2472},[67,48545,48546],{"class":77},"    normalize",[67,48548,909],{"class":73},[67,48550,48551],{"class":77},"transforms.Normalize([",[67,48553,48554],{"class":208},"0.162",[67,48556,1236],{"class":77},[67,48558,48559],{"class":208},"0.151",[67,48561,1236],{"class":77},[67,48563,48564],{"class":208},"0.138",[67,48566,48567],{"class":77},"],[",[67,48569,48570],{"class":208},"0.058",[67,48572,1236],{"class":77},[67,48574,48575],{"class":208},"0.052",[67,48577,1236],{"class":77},[67,48579,48580],{"class":208},"0.048",[67,48582,5376],{"class":77},[67,48584,48585],{"class":69,"line":2477},[67,48586,48587],{"class":202},"    # 定义数据集处理方法变量\n",[67,48589,48590,48593,48595],{"class":69,"line":2482},[67,48591,48592],{"class":77},"    train_transform",[67,48594,909],{"class":73},[67,48596,48597],{"class":77},"transforms.Compose([\n",[67,48599,48600],{"class":69,"line":2487},[67,48601,48602],{"class":202},"        # 调整图像大小为224*224\n",[67,48604,48605,48608,48610,48612,48614],{"class":69,"line":2501},[67,48606,48607],{"class":77},"        transforms.Resize((",[67,48609,32038],{"class":208},[67,48611,1236],{"class":77},[67,48613,32038],{"class":208},[67,48615,43159],{"class":77},[67,48617,48618],{"class":69,"line":2506},[67,48619,48620],{"class":202},"        # 将图像转换为张量\n",[67,48622,48623],{"class":69,"line":3298},[67,48624,48625],{"class":77},"        transforms.ToTensor(),\n",[67,48627,48628],{"class":69,"line":3312},[67,48629,48630],{"class":77},"        normalize])\n",[67,48632,48633],{"class":69,"line":3320},[67,48634,48635],{"class":202},"    # 在进行转换tensor时,会将像素值归一化到[0,1]之间\n",[67,48637,48638],{"class":69,"line":3325},[67,48639,48640],{"class":202},"    # 但是没有进行均值方差归一化处理,需要进行均值方差归一化处理，使归一化后的数据符合标准正态分布\n",[67,48642,48643],{"class":69,"line":3331},[67,48644,177],{"emptyLinePlaceholder":176},[67,48646,48647],{"class":69,"line":3337},[67,48648,48649],{"class":202},"    # 加载数据集\n",[67,48651,48652],{"class":69,"line":3342},[67,48653,48654],{"class":202},"    # 传入数据集路径与处理方法\n",[67,48656,48657,48659,48661,48664,48667,48669,48672,48674],{"class":69,"line":8667},[67,48658,32495],{"class":77},[67,48660,909],{"class":73},[67,48662,48663],{"class":77},"ImageFolder(",[67,48665,48666],{"class":208},"ROOT_PATH",[67,48668,1236],{"class":77},[67,48670,48671],{"class":5935},"transform",[67,48673,909],{"class":73},[67,48675,48676],{"class":77},"train_transform)\n",[67,48678,48679],{"class":69,"line":8691},[67,48680,177],{"emptyLinePlaceholder":176},[67,48682,48683,48685,48687,48689,48691,48693,48695,48697,48699,48701,48703,48705,48707,48709,48711],{"class":69,"line":8696},[67,48684,32547],{"class":77},[67,48686,909],{"class":73},[67,48688,32552],{"class":77},[67,48690,32555],{"class":208},[67,48692,864],{"class":77},[67,48694,32560],{"class":208},[67,48696,1312],{"class":73},[67,48698,8077],{"class":208},[67,48700,32567],{"class":77},[67,48702,32555],{"class":208},[67,48704,864],{"class":77},[67,48706,32574],{"class":208},[67,48708,1312],{"class":73},[67,48710,8077],{"class":208},[67,48712,32581],{"class":77},[67,48714,48715,48717,48719,48721,48723,48725],{"class":69,"line":8702},[67,48716,32586],{"class":77},[67,48718,909],{"class":73},[67,48720,32591],{"class":77},[67,48722,32074],{"class":5935},[67,48724,909],{"class":73},[67,48726,32079],{"class":77},[67,48728,48729,48731,48733,48735],{"class":69,"line":8729},[67,48730,32602],{"class":5935},[67,48732,909],{"class":73},[67,48734,1057],{"class":208},[67,48736,32003],{"class":77},[67,48738,48739,48741,48743,48745],{"class":69,"line":8734},[67,48740,32614],{"class":5935},[67,48742,909],{"class":73},[67,48744,32013],{"class":208},[67,48746,32003],{"class":77},[67,48748,48749],{"class":69,"line":8740},[67,48750,32625],{"class":202},[67,48752,48753,48755,48757,48759],{"class":69,"line":8752},[67,48754,32630],{"class":5935},[67,48756,909],{"class":73},[67,48758,1253],{"class":208},[67,48760,870],{"class":77},[67,48762,48763,48765,48767,48769,48771,48773],{"class":69,"line":8764},[67,48764,32641],{"class":77},[67,48766,909],{"class":73},[67,48768,32071],{"class":77},[67,48770,32074],{"class":5935},[67,48772,909],{"class":73},[67,48774,32652],{"class":77},[67,48776,48777,48779,48781,48783],{"class":69,"line":8776},[67,48778,32657],{"class":5935},[67,48780,909],{"class":73},[67,48782,1057],{"class":208},[67,48784,32003],{"class":77},[67,48786,48787,48789,48791,48793],{"class":69,"line":10435},[67,48788,32668],{"class":5935},[67,48790,909],{"class":73},[67,48792,32013],{"class":208},[67,48794,32003],{"class":77},[67,48796,48797,48799,48801,48803],{"class":69,"line":10459},[67,48798,32679],{"class":5935},[67,48800,909],{"class":73},[67,48802,1253],{"class":208},[67,48804,870],{"class":77},[67,48806,48807,48809],{"class":69,"line":10482},[67,48808,4810],{"class":73},[67,48810,32692],{"class":77},[67,48812,48813],{"class":69,"line":10506},[67,48814,177],{"emptyLinePlaceholder":176},[67,48816,48817],{"class":69,"line":10511},[67,48818,32701],{"class":202},[67,48820,48821],{"class":69,"line":10516},[67,48822,32706],{"class":202},[67,48824,48825],{"class":69,"line":10521},[67,48826,177],{"emptyLinePlaceholder":176},[67,48828,48829],{"class":69,"line":10530},[67,48830,32715],{"class":202},[67,48832,48833,48835,48837],{"class":69,"line":10535},[67,48834,32484],{"class":73},[67,48836,32722],{"class":112},[67,48838,32725],{"class":77},[67,48840,48841,48843,48845,48847,48849,48851,48853,48855,48857],{"class":69,"line":10541},[67,48842,31774],{"class":77},[67,48844,909],{"class":73},[67,48846,30988],{"class":77},[67,48848,31781],{"class":84},[67,48850,2427],{"class":73},[67,48852,31786],{"class":77},[67,48854,2424],{"class":73},[67,48856,32744],{"class":84},[67,48858,870],{"class":77},[67,48860,48861],{"class":69,"line":10562},[67,48862,177],{"emptyLinePlaceholder":176},[67,48864,48865],{"class":69,"line":10568},[67,48866,32759],{"class":202},[67,48868,48869],{"class":69,"line":10582},[67,48870,32764],{"class":202},[67,48872,48873],{"class":69,"line":10588},[67,48874,32769],{"class":202},[67,48876,48877,48879,48881,48883,48885,48887,48889],{"class":69,"line":10615},[67,48878,32774],{"class":77},[67,48880,909],{"class":73},[67,48882,32779],{"class":77},[67,48884,32782],{"class":5935},[67,48886,909],{"class":73},[67,48888,32787],{"class":208},[67,48890,870],{"class":77},[67,48892,48893],{"class":69,"line":10624},[67,48894,177],{"emptyLinePlaceholder":176},[67,48896,48897],{"class":69,"line":10630},[67,48898,32798],{"class":202},[67,48900,48901,48903,48905],{"class":69,"line":10638},[67,48902,32803],{"class":77},[67,48904,909],{"class":73},[67,48906,32808],{"class":77},[67,48908,48909],{"class":69,"line":10643},[67,48910,177],{"emptyLinePlaceholder":176},[67,48912,48913],{"class":69,"line":17321},[67,48914,32817],{"class":202},[67,48916,48917,48919,48921],{"class":69,"line":17327},[67,48918,31826],{"class":77},[67,48920,909],{"class":73},[67,48922,32826],{"class":77},[67,48924,48925],{"class":69,"line":17350},[67,48926,32831],{"class":202},[67,48928,48929],{"class":69,"line":17356},[67,48930,32836],{"class":202},[67,48932,48933],{"class":69,"line":17379},[67,48934,32841],{"class":202},[67,48936,48937,48939,48941],{"class":69,"line":17393},[67,48938,32846],{"class":77},[67,48940,909],{"class":73},[67,48942,32851],{"class":77},[67,48944,48945],{"class":69,"line":17413},[67,48946,177],{"emptyLinePlaceholder":176},[67,48948,48949],{"class":69,"line":17419},[67,48950,32864],{"class":202},[67,48952,48953],{"class":69,"line":17430},[67,48954,32869],{"class":202},[67,48956,48957,48959,48961],{"class":69,"line":17453},[67,48958,32874],{"class":77},[67,48960,909],{"class":73},[67,48962,32879],{"class":208},[67,48964,48965],{"class":69,"line":17475},[67,48966,32884],{"class":202},[67,48968,48969,48971,48973],{"class":69,"line":17480},[67,48970,32889],{"class":77},[67,48972,909],{"class":73},[67,48974,32894],{"class":77},[67,48976,48977],{"class":69,"line":17486},[67,48978,32899],{"class":202},[67,48980,48981,48983,48985],{"class":69,"line":17500},[67,48982,32904],{"class":77},[67,48984,909],{"class":73},[67,48986,32894],{"class":77},[67,48988,48989],{"class":69,"line":17513},[67,48990,32913],{"class":202},[67,48992,48993,48995,48997],{"class":69,"line":17518},[67,48994,32918],{"class":77},[67,48996,909],{"class":73},[67,48998,32894],{"class":77},[67,49000,49001],{"class":69,"line":17532},[67,49002,32927],{"class":202},[67,49004,49005,49007,49009],{"class":69,"line":17537},[67,49006,32932],{"class":77},[67,49008,909],{"class":73},[67,49010,32894],{"class":77},[67,49012,49013],{"class":69,"line":17543},[67,49014,177],{"emptyLinePlaceholder":176},[67,49016,49017],{"class":69,"line":17548},[67,49018,32945],{"class":202},[67,49020,49021,49023,49025],{"class":69,"line":17562},[67,49022,32950],{"class":77},[67,49024,909],{"class":73},[67,49026,32955],{"class":77},[67,49028,49029],{"class":69,"line":17567},[67,49030,177],{"emptyLinePlaceholder":176},[67,49032,49033],{"class":69,"line":17572},[67,49034,32968],{"class":202},[67,49036,49037,49039,49041,49043,49045],{"class":69,"line":17586},[67,49038,3921],{"class":73},[67,49040,32975],{"class":77},[67,49042,81],{"class":73},[67,49044,32980],{"class":208},[67,49046,32983],{"class":77},[67,49048,49049,49051,49053,49055,49057,49059,49061,49063,49065,49067,49069],{"class":69,"line":17598},[67,49050,32988],{"class":208},[67,49052,864],{"class":77},[67,49054,32993],{"class":84},[67,49056,32996],{"class":208},[67,49058,1440],{"class":84},[67,49060,32996],{"class":208},[67,49062,257],{"class":84},[67,49064,33005],{"class":77},[67,49066,1389],{"class":73},[67,49068,1077],{"class":208},[67,49070,31034],{"class":77},[67,49072,49073,49075,49077,49079,49081,49083],{"class":69,"line":17603},[67,49074,32988],{"class":208},[67,49076,864],{"class":77},[67,49078,33020],{"class":84},[67,49080,1312],{"class":73},[67,49082,1303],{"class":208},[67,49084,870],{"class":77},[67,49086,49087],{"class":69,"line":17616},[67,49088,177],{"emptyLinePlaceholder":176},[67,49090,49091],{"class":69,"line":17621},[67,49092,33035],{"class":202},[67,49094,49095],{"class":69,"line":17626},[67,49096,33040],{"class":202},[67,49098,49099,49101,49103],{"class":69,"line":17631},[67,49100,33045],{"class":77},[67,49102,909],{"class":73},[67,49104,32879],{"class":208},[67,49106,49107],{"class":69,"line":17644},[67,49108,33054],{"class":202},[67,49110,49111,49113,49115],{"class":69,"line":17649},[67,49112,33059],{"class":77},[67,49114,909],{"class":73},[67,49116,3805],{"class":208},[67,49118,49119],{"class":69,"line":33170},[67,49120,33068],{"class":202},[67,49122,49123,49125,49127],{"class":69,"line":33176},[67,49124,33073],{"class":77},[67,49126,909],{"class":73},[67,49128,32879],{"class":208},[67,49130,49131],{"class":69,"line":33182},[67,49132,33082],{"class":202},[67,49134,49135,49137,49139],{"class":69,"line":33188},[67,49136,33087],{"class":77},[67,49138,909],{"class":73},[67,49140,3805],{"class":208},[67,49142,49143],{"class":69,"line":33194},[67,49144,33096],{"class":202},[67,49146,49147,49149,49151],{"class":69,"line":33205},[67,49148,33101],{"class":77},[67,49150,909],{"class":73},[67,49152,3805],{"class":208},[67,49154,49155],{"class":69,"line":33211},[67,49156,33110],{"class":202},[67,49158,49159,49161,49163],{"class":69,"line":33231},[67,49160,33115],{"class":77},[67,49162,909],{"class":73},[67,49164,3805],{"class":208},[67,49166,49167],{"class":69,"line":33237},[67,49168,33124],{"class":202},[67,49170,49171,49173,49175,49177,49179],{"class":69,"line":33248},[67,49172,4123],{"class":73},[67,49174,32138],{"class":77},[67,49176,81],{"class":73},[67,49178,32143],{"class":208},[67,49180,33137],{"class":77},[67,49182,49183],{"class":69,"line":33254},[67,49184,33142],{"class":202},[67,49186,49187,49189,49191],{"class":69,"line":33260},[67,49188,33147],{"class":77},[67,49190,909],{"class":73},[67,49192,33152],{"class":77},[67,49194,49195],{"class":69,"line":33266},[67,49196,33157],{"class":202},[67,49198,49199,49201,49203],{"class":69,"line":33272},[67,49200,33162],{"class":77},[67,49202,909],{"class":73},[67,49204,33167],{"class":77},[67,49206,49207],{"class":69,"line":33278},[67,49208,33173],{"class":202},[67,49210,49211],{"class":69,"line":33284},[67,49212,33179],{"class":77},[67,49214,49215],{"class":69,"line":33290},[67,49216,33185],{"class":202},[67,49218,49219],{"class":69,"line":33310},[67,49220,33191],{"class":202},[67,49222,49223,49225,49227],{"class":69,"line":33316},[67,49224,33197],{"class":77},[67,49226,909],{"class":73},[67,49228,33202],{"class":77},[67,49230,49231],{"class":69,"line":33332},[67,49232,33208],{"class":202},[67,49234,49235,49237,49239,49241,49243,49245,49247],{"class":69,"line":33338},[67,49236,33214],{"class":77},[67,49238,909],{"class":73},[67,49240,33219],{"class":77},[67,49242,33222],{"class":5935},[67,49244,909],{"class":73},[67,49246,1077],{"class":208},[67,49248,870],{"class":77},[67,49250,49251],{"class":69,"line":33352},[67,49252,33234],{"class":202},[67,49254,49255,49257,49259],{"class":69,"line":33358},[67,49256,33240],{"class":77},[67,49258,909],{"class":73},[67,49260,33245],{"class":77},[67,49262,49263],{"class":69,"line":33373},[67,49264,33251],{"class":202},[67,49266,49267],{"class":69,"line":33379},[67,49268,33257],{"class":77},[67,49270,49271],{"class":69,"line":33388},[67,49272,33263],{"class":202},[67,49274,49275],{"class":69,"line":33394},[67,49276,33269],{"class":77},[67,49278,49279],{"class":69,"line":33403},[67,49280,33275],{"class":202},[67,49282,49283],{"class":69,"line":33409},[67,49284,33281],{"class":77},[67,49286,49287],{"class":69,"line":33415},[67,49288,33287],{"class":202},[67,49290,49291,49293,49295,49297,49299,49301,49303],{"class":69,"line":33424},[67,49292,33293],{"class":77},[67,49294,10196],{"class":73},[67,49296,33298],{"class":77},[67,49298,1312],{"class":73},[67,49300,33303],{"class":77},[67,49302,1051],{"class":208},[67,49304,870],{"class":77},[67,49306,49307],{"class":69,"line":33430},[67,49308,33313],{"class":202},[67,49310,49311,49313,49315,49317,49319],{"class":69,"line":33441},[67,49312,33319],{"class":77},[67,49314,10196],{"class":73},[67,49316,33324],{"class":77},[67,49318,3670],{"class":73},[67,49320,33329],{"class":77},[67,49322,49323],{"class":69,"line":33447},[67,49324,33335],{"class":202},[67,49326,49327,49329,49331,49333,49335],{"class":69,"line":33466},[67,49328,33341],{"class":77},[67,49330,10196],{"class":73},[67,49332,33303],{"class":77},[67,49334,1051],{"class":208},[67,49336,870],{"class":77},[67,49338,49339],{"class":69,"line":33472},[67,49340,33355],{"class":202},[67,49342,49343,49345,49347,49349,49351],{"class":69,"line":33483},[67,49344,4123],{"class":73},[67,49346,33363],{"class":77},[67,49348,81],{"class":73},[67,49350,32143],{"class":208},[67,49352,33370],{"class":77},[67,49354,49355],{"class":69,"line":33489},[67,49356,33376],{"class":202},[67,49358,49359,49361,49363],{"class":69,"line":33509},[67,49360,33147],{"class":77},[67,49362,909],{"class":73},[67,49364,33152],{"class":77},[67,49366,49367],{"class":69,"line":33525},[67,49368,33391],{"class":202},[67,49370,49371,49373,49375],{"class":69,"line":33531},[67,49372,33162],{"class":77},[67,49374,909],{"class":73},[67,49376,33167],{"class":77},[67,49378,49379],{"class":69,"line":33545},[67,49380,33406],{"class":202},[67,49382,49383],{"class":69,"line":33551},[67,49384,33412],{"class":77},[67,49386,49387],{"class":69,"line":33557},[67,49388,36893],{"class":202},[67,49390,49391,49393],{"class":69,"line":33568},[67,49392,33418],{"class":73},[67,49394,33421],{"class":77},[67,49396,49397],{"class":69,"line":33574},[67,49398,33427],{"class":202},[67,49400,49401,49403,49405],{"class":69,"line":33580},[67,49402,36908],{"class":77},[67,49404,909],{"class":73},[67,49406,33202],{"class":77},[67,49408,49409],{"class":69,"line":33590},[67,49410,33444],{"class":202},[67,49412,49413,49415,49417,49419,49421,49423,49425],{"class":69,"line":33596},[67,49414,36921],{"class":77},[67,49416,909],{"class":73},[67,49418,33219],{"class":77},[67,49420,33222],{"class":5935},[67,49422,909],{"class":73},[67,49424,1077],{"class":208},[67,49426,870],{"class":77},[67,49428,49429],{"class":69,"line":33607},[67,49430,33469],{"class":202},[67,49432,49433,49435,49437],{"class":69,"line":33613},[67,49434,36942],{"class":77},[67,49436,909],{"class":73},[67,49438,33245],{"class":77},[67,49440,49441],{"class":69,"line":33623},[67,49442,33486],{"class":202},[67,49444,49445,49447,49449,49451,49453,49455,49457],{"class":69,"line":33628},[67,49446,36955],{"class":77},[67,49448,10196],{"class":73},[67,49450,36960],{"class":77},[67,49452,1312],{"class":73},[67,49454,33303],{"class":77},[67,49456,1051],{"class":208},[67,49458,870],{"class":77},[67,49460,49461,49463,49465,49467,49469],{"class":69,"line":33634},[67,49462,36973],{"class":77},[67,49464,10196],{"class":73},[67,49466,33324],{"class":77},[67,49468,3670],{"class":73},[67,49470,33329],{"class":77},[67,49472,49473],{"class":69,"line":33683},[67,49474,36986],{"class":202},[67,49476,49477,49479,49481,49483,49485],{"class":69,"line":33730},[67,49478,36991],{"class":77},[67,49480,10196],{"class":73},[67,49482,33303],{"class":77},[67,49484,1051],{"class":208},[67,49486,870],{"class":77},[67,49488,49489],{"class":69,"line":33735},[67,49490,33548],{"class":202},[67,49492,49493],{"class":69,"line":33741},[67,49494,33554],{"class":202},[67,49496,49497,49499,49501],{"class":69,"line":33760},[67,49498,33560],{"class":77},[67,49500,1440],{"class":73},[67,49502,33565],{"class":77},[67,49504,49505],{"class":69,"line":33766},[67,49506,33571],{"class":202},[67,49508,49509],{"class":69,"line":33786},[67,49510,33577],{"class":202},[67,49512,49513,49515,49517],{"class":69,"line":33792},[67,49514,33583],{"class":77},[67,49516,1440],{"class":73},[67,49518,33565],{"class":77},[67,49520,49521],{"class":69,"line":33798},[67,49522,33593],{"class":202},[67,49524,49525,49527,49529],{"class":69,"line":33808},[67,49526,33599],{"class":77},[67,49528,1440],{"class":73},[67,49530,33604],{"class":77},[67,49532,49533],{"class":69,"line":33813},[67,49534,33610],{"class":202},[67,49536,49537,49539,49541],{"class":69,"line":33819},[67,49538,33616],{"class":77},[67,49540,1440],{"class":73},[67,49542,33604],{"class":77},[67,49544,49545],{"class":69,"line":33835},[67,49546,177],{"emptyLinePlaceholder":176},[67,49548,49549],{"class":69,"line":33880},[67,49550,33631],{"class":202},[67,49552,49553,49555,49557,49559,49561,49563,49565,49567,49569,49571,49573,49575,49577,49579,49581,49583,49585,49587,49589,49591],{"class":69,"line":33886},[67,49554,32988],{"class":208},[67,49556,864],{"class":77},[67,49558,4312],{"class":84},[67,49560,32996],{"class":208},[67,49562,33645],{"class":84},[67,49564,1752],{"class":208},[67,49566,33650],{"class":73},[67,49568,1802],{"class":208},[67,49570,33655],{"class":84},[67,49572,1752],{"class":208},[67,49574,33650],{"class":73},[67,49576,1802],{"class":208},[67,49578,4312],{"class":84},[67,49580,33666],{"class":77},[67,49582,1389],{"class":73},[67,49584,1077],{"class":208},[67,49586,33673],{"class":77},[67,49588,1389],{"class":73},[67,49590,1077],{"class":208},[67,49592,33680],{"class":77},[67,49594,49595,49597,49599,49601,49603,49605,49607,49609,49611,49613,49615,49617,49619,49621,49623,49625,49627,49629,49631,49633],{"class":69,"line":33892},[67,49596,32988],{"class":208},[67,49598,864],{"class":77},[67,49600,4312],{"class":84},[67,49602,32996],{"class":208},[67,49604,33694],{"class":84},[67,49606,1752],{"class":208},[67,49608,33650],{"class":73},[67,49610,1802],{"class":208},[67,49612,33703],{"class":84},[67,49614,1752],{"class":208},[67,49616,33650],{"class":73},[67,49618,1802],{"class":208},[67,49620,4312],{"class":84},[67,49622,33714],{"class":77},[67,49624,1389],{"class":73},[67,49626,1077],{"class":208},[67,49628,33721],{"class":77},[67,49630,1389],{"class":73},[67,49632,1077],{"class":208},[67,49634,33680],{"class":77},[67,49636,49637],{"class":69,"line":33898},[67,49638,177],{"emptyLinePlaceholder":176},[67,49640,49641],{"class":69,"line":33909},[67,49642,33738],{"class":202},[67,49644,49645,49647,49649,49651,49653,49655,49657],{"class":69,"line":33915},[67,49646,3218],{"class":73},[67,49648,33746],{"class":77},[67,49650,1389],{"class":73},[67,49652,1077],{"class":208},[67,49654,1796],{"class":77},[67,49656,1816],{"class":73},[67,49658,33757],{"class":77},[67,49660,49661],{"class":69,"line":33921},[67,49662,33763],{"class":202},[67,49664,49665,49667,49669,49671,49673,49675,49677],{"class":69,"line":33927},[67,49666,33769],{"class":77},[67,49668,903],{"class":208},[67,49670,909],{"class":73},[67,49672,33776],{"class":77},[67,49674,1389],{"class":73},[67,49676,1077],{"class":208},[67,49678,33783],{"class":77},[67,49680,49681],{"class":69,"line":33945},[67,49682,33789],{"class":202},[67,49684,49685],{"class":69,"line":33959},[67,49686,33795],{"class":202},[67,49688,49689,49691,49693],{"class":69,"line":33968},[67,49690,33801],{"class":77},[67,49692,909],{"class":73},[67,49694,32851],{"class":77},[67,49696,49697],{"class":69,"line":33977},[67,49698,177],{"emptyLinePlaceholder":176},[67,49700,49701],{"class":69,"line":33986},[67,49702,33816],{"class":202},[67,49704,49705,49707,49709,49711,49713],{"class":69,"line":33995},[67,49706,33822],{"class":77},[67,49708,909],{"class":73},[67,49710,33827],{"class":77},[67,49712,1389],{"class":73},[67,49714,33832],{"class":77},[67,49716,49717,49719,49721,49723,49725,49727,49729,49731,49733,49735,49737,49739,49741,49743,49745,49747,49749,49751],{"class":69,"line":34001},[67,49718,32988],{"class":208},[67,49720,864],{"class":77},[67,49722,33842],{"class":84},[67,49724,1752],{"class":208},[67,49726,33847],{"class":73},[67,49728,1802],{"class":208},[67,49730,1401],{"class":84},[67,49732,1752],{"class":208},[67,49734,33847],{"class":73},[67,49736,1802],{"class":208},[67,49738,33860],{"class":84},[67,49740,33863],{"class":77},[67,49742,33866],{"class":73},[67,49744,1763],{"class":208},[67,49746,33871],{"class":77},[67,49748,1186],{"class":73},[67,49750,1763],{"class":208},[67,49752,31034],{"class":77},[67,49754,49755],{"class":69,"line":34007},[67,49756,37270],{"class":202},[67,49758,49759],{"class":69,"line":34015},[67,49760,37275],{"class":202},[67,49762,49763,49765,49767],{"class":69,"line":34020},[67,49764,37280],{"class":77},[67,49766,33904],{"class":84},[67,49768,870],{"class":77},[67,49770,49771],{"class":69,"line":34026},[67,49772,33924],{"class":202},[67,49774,49775,49777,49779,49781,49783,49785],{"class":69,"line":34037},[67,49776,33930],{"class":77},[67,49778,909],{"class":73},[67,49780,33935],{"class":77},[67,49782,33938],{"class":5935},[67,49784,909],{"class":73},[67,49786,2269],{"class":77},[67,49788,49789,49791,49793,49795],{"class":69,"line":34043},[67,49790,33948],{"class":84},[67,49792,1715],{"class":77},[67,49794,33953],{"class":208},[67,49796,33956],{"class":77},[67,49798,49799,49801],{"class":69,"line":34063},[67,49800,33962],{"class":84},[67,49802,33965],{"class":77},[67,49804,49805,49807],{"class":69,"line":34069},[67,49806,33971],{"class":84},[67,49808,33974],{"class":77},[67,49810,49811,49813],{"class":69,"line":34075},[67,49812,33980],{"class":84},[67,49814,33983],{"class":77},[67,49816,49817,49819],{"class":69,"line":34081},[67,49818,33989],{"class":84},[67,49820,33992],{"class":77},[67,49822,49823],{"class":69,"line":34098},[67,49824,33998],{"class":77},[67,49826,49827],{"class":69,"line":34104},[67,49828,34004],{"class":202},[67,49830,49831,49833],{"class":69,"line":34110},[67,49832,4810],{"class":73},[67,49834,34012],{"class":77},[67,49836,49837],{"class":69,"line":34116},[67,49838,177],{"emptyLinePlaceholder":176},[67,49840,49841],{"class":69,"line":34122},[67,49842,34023],{"class":202},[67,49844,49845,49847,49849],{"class":69,"line":34128},[67,49846,32484],{"class":73},[67,49848,34031],{"class":112},[67,49850,34034],{"class":77},[67,49852,49853],{"class":69,"line":34155},[67,49854,34040],{"class":202},[67,49856,49857,49859,49861,49863,49865,49867,49869,49871],{"class":69,"line":34179},[67,49858,34046],{"class":77},[67,49860,32230],{"class":5935},[67,49862,909],{"class":73},[67,49864,864],{"class":77},[67,49866,1355],{"class":208},[67,49868,1236],{"class":77},[67,49870,1151],{"class":208},[67,49872,31034],{"class":77},[67,49874,49875],{"class":69,"line":34185},[67,49876,34066],{"class":202},[67,49878,49879],{"class":69,"line":34191},[67,49880,34072],{"class":202},[67,49882,49883],{"class":69,"line":34197},[67,49884,34078],{"class":202},[67,49886,49887,49889,49891,49893,49895,49897,49899],{"class":69,"line":34208},[67,49888,32264],{"class":77},[67,49890,1077],{"class":208},[67,49892,1236],{"class":77},[67,49894,939],{"class":208},[67,49896,1236],{"class":77},[67,49898,1077],{"class":208},[67,49900,870],{"class":77},[67,49902,49903],{"class":69,"line":34219},[67,49904,34101],{"class":202},[67,49906,49907],{"class":69,"line":34225},[67,49908,34107],{"class":202},[67,49910,49911],{"class":69,"line":34242},[67,49912,34113],{"class":202},[67,49914,49915],{"class":69,"line":34265},[67,49916,34119],{"class":202},[67,49918,49919],{"class":69,"line":34288},[67,49920,34125],{"class":202},[67,49922,49923,49925,49927,49929,49931,49933,49935,49937,49939],{"class":69,"line":34294},[67,49924,34131],{"class":77},[67,49926,34134],{"class":84},[67,49928,34137],{"class":77},[67,49930,34140],{"class":84},[67,49932,1236],{"class":77},[67,49934,34145],{"class":5935},[67,49936,909],{"class":73},[67,49938,34150],{"class":84},[67,49940,870],{"class":77},[67,49942,49943,49945,49947,49949,49951,49953,49955,49957,49959],{"class":69,"line":34299},[67,49944,34131],{"class":77},[67,49946,34134],{"class":84},[67,49948,34162],{"class":77},[67,49950,34165],{"class":84},[67,49952,1236],{"class":77},[67,49954,34145],{"class":5935},[67,49956,909],{"class":73},[67,49958,34174],{"class":84},[67,49960,870],{"class":77},[67,49962,49963],{"class":69,"line":34308},[67,49964,34182],{"class":202},[67,49966,49967],{"class":69,"line":34318},[67,49968,34188],{"class":77},[67,49970,49971],{"class":69,"line":34324},[67,49972,34194],{"class":202},[67,49974,49975,49977,49979],{"class":69,"line":34329},[67,49976,34200],{"class":77},[67,49978,34203],{"class":84},[67,49980,870],{"class":77},[67,49982,49983,49985,49987],{"class":69,"line":34335},[67,49984,34211],{"class":77},[67,49986,34214],{"class":84},[67,49988,870],{"class":77},[67,49990,49991],{"class":69,"line":34348},[67,49992,34222],{"class":202},[67,49994,49995,49997,49999,50001,50003,50005,50007],{"class":69,"line":34354},[67,49996,32264],{"class":77},[67,49998,1077],{"class":208},[67,50000,1236],{"class":77},[67,50002,939],{"class":208},[67,50004,1236],{"class":77},[67,50006,939],{"class":208},[67,50008,870],{"class":77},[67,50010,50011,50013,50015,50017,50019,50021,50023,50025,50027],{"class":69,"line":34365},[67,50012,34131],{"class":77},[67,50014,34134],{"class":84},[67,50016,34249],{"class":77},[67,50018,34140],{"class":84},[67,50020,1236],{"class":77},[67,50022,34145],{"class":5935},[67,50024,909],{"class":73},[67,50026,34260],{"class":84},[67,50028,870],{"class":77},[67,50030,50031,50033,50035,50037,50039,50041,50043,50045,50047],{"class":69,"line":34376},[67,50032,34131],{"class":77},[67,50034,34134],{"class":84},[67,50036,34272],{"class":77},[67,50038,34165],{"class":84},[67,50040,1236],{"class":77},[67,50042,34145],{"class":5935},[67,50044,909],{"class":73},[67,50046,34283],{"class":84},[67,50048,870],{"class":77},[67,50050,50051],{"class":69,"line":34395},[67,50052,34291],{"class":202},[67,50054,50056],{"class":69,"line":50055},219,[67,50057,34188],{"class":77},[67,50059,50061,50063,50065],{"class":69,"line":50060},220,[67,50062,34200],{"class":77},[67,50064,34134],{"class":84},[67,50066,870],{"class":77},[67,50068,50070,50072,50074],{"class":69,"line":50069},221,[67,50071,34211],{"class":77},[67,50073,34313],{"class":84},[67,50075,870],{"class":77},[67,50077,50079],{"class":69,"line":50078},222,[67,50080,34321],{"class":77},[67,50082,50084],{"class":69,"line":50083},223,[67,50085,177],{"emptyLinePlaceholder":176},[67,50087,50089],{"class":69,"line":50088},224,[67,50090,34332],{"class":202},[67,50092,50094,50096,50098,50100,50102],{"class":69,"line":50093},225,[67,50095,2254],{"class":73},[67,50097,31757],{"class":208},[67,50099,3670],{"class":73},[67,50101,31762],{"class":84},[67,50103,4459],{"class":77},[67,50105,50107],{"class":69,"line":50106},226,[67,50108,34351],{"class":202},[67,50110,50112,50114,50116],{"class":69,"line":50111},227,[67,50113,45083],{"class":77},[67,50115,909],{"class":73},[67,50117,45088],{"class":77},[67,50119,50121,50123,50125],{"class":69,"line":50120},228,[67,50122,34368],{"class":77},[67,50124,909],{"class":73},[67,50126,34373],{"class":77},[67,50128,50130,50132,50134,50136,50138,50140,50142],{"class":69,"line":50129},229,[67,50131,33930],{"class":77},[67,50133,909],{"class":73},[67,50135,45105],{"class":77},[67,50137,34386],{"class":5935},[67,50139,909],{"class":73},[67,50141,1763],{"class":208},[67,50143,870],{"class":77},[67,50145,50147],{"class":69,"line":50146},230,[67,50148,34398],{"class":77},[40,50150,50152],{"id":50151},"_242测试代码","2.4.2.测试代码",[19,50154,50155],{},"使用测试集进行测试与推理",[57,50157,50159],{"className":30915,"code":50158,"language":30917,"meta":62,"style":62},"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",[64,50160,50161,50167,50177,50187,50198,50208,50212,50216,50224,50229,50233,50250,50254,50258,50262,50266,50270,50302,50306,50314,50318,50330,50334,50338,50342,50346,50350,50354,50358,50362,50380,50394,50398,50408,50418,50428,50434,50438,50442,50450,50454,50470,50478,50482,50486,50494,50502,50506,50510,50514,50518,50524,50528,50538,50546,50554,50558,50562,50566,50574,50578,50594,50598,50602,50606,50618,50622,50634,50638,50642,50654,50658,50668,50672,50676,50688,50692,50700,50704,50708,50716,50720,50728,50732,50736,50740,50744,50748,50764,50772,50776,50780,50798,50804,50808,50818,50826,50834,50838,50842,50846,50850,50858,50862,50878,50882,50890,50898],{"__ignoreMap":62},[67,50162,50163,50165],{"class":69,"line":70},[67,50164,30929],{"class":73},[67,50166,30932],{"class":77},[67,50168,50169,50171,50173,50175],{"class":69,"line":143},[67,50170,30929],{"class":73},[67,50172,31952],{"class":77},[67,50174,31920],{"class":73},[67,50176,31957],{"class":77},[67,50178,50179,50181,50183,50185],{"class":69,"line":149},[67,50180,31274],{"class":73},[67,50182,31935],{"class":77},[67,50184,30929],{"class":73},[67,50186,31940],{"class":77},[67,50188,50189,50191,50193,50195],{"class":69,"line":155},[67,50190,31274],{"class":73},[67,50192,31905],{"class":77},[67,50194,30929],{"class":73},[67,50196,50197],{"class":77}," ImageFolder\n",[67,50199,50200,50202,50204,50206],{"class":69,"line":161},[67,50201,31274],{"class":73},[67,50203,32451],{"class":77},[67,50205,30929],{"class":73},[67,50207,45177],{"class":77},[67,50209,50210],{"class":69,"line":167},[67,50211,177],{"emptyLinePlaceholder":176},[67,50213,50214],{"class":69,"line":173},[67,50215,34488],{"class":202},[67,50217,50218,50220,50222],{"class":69,"line":180},[67,50219,32484],{"class":73},[67,50221,34495],{"class":112},[67,50223,32490],{"class":77},[67,50225,50226],{"class":69,"line":186},[67,50227,50228],{"class":202},"   # 导入自己的数据集，并进行数据处理\n",[67,50230,50231],{"class":69,"line":444},[67,50232,48498],{"class":202},[67,50234,50235,50237,50239,50241,50243,50245,50248],{"class":69,"line":2335},[67,50236,48503],{"class":208},[67,50238,909],{"class":73},[67,50240,1526],{"class":73},[67,50242,257],{"class":84},[67,50244,240],{"class":208},[67,50246,50247],{"class":48514},"\u002Fdata\u002Ftest",[67,50249,25842],{"class":84},[67,50251,50252],{"class":69,"line":2340},[67,50253,177],{"emptyLinePlaceholder":176},[67,50255,50256],{"class":69,"line":2346},[67,50257,48526],{"class":202},[67,50259,50260],{"class":69,"line":2351},[67,50261,48531],{"class":202},[67,50263,50264],{"class":69,"line":2365},[67,50265,48536],{"class":202},[67,50267,50268],{"class":69,"line":2370},[67,50269,48541],{"class":202},[67,50271,50272,50274,50276,50278,50280,50282,50284,50286,50288,50290,50292,50294,50296,50298,50300],{"class":69,"line":2376},[67,50273,48546],{"class":77},[67,50275,909],{"class":73},[67,50277,48551],{"class":77},[67,50279,48554],{"class":208},[67,50281,1236],{"class":77},[67,50283,48559],{"class":208},[67,50285,1236],{"class":77},[67,50287,48564],{"class":208},[67,50289,48567],{"class":77},[67,50291,48570],{"class":208},[67,50293,1236],{"class":77},[67,50295,48575],{"class":208},[67,50297,1236],{"class":77},[67,50299,48580],{"class":208},[67,50301,5376],{"class":77},[67,50303,50304],{"class":69,"line":2397},[67,50305,48587],{"class":202},[67,50307,50308,50310,50312],{"class":69,"line":2402},[67,50309,48592],{"class":77},[67,50311,909],{"class":73},[67,50313,48597],{"class":77},[67,50315,50316],{"class":69,"line":2416},[67,50317,48602],{"class":202},[67,50319,50320,50322,50324,50326,50328],{"class":69,"line":2421},[67,50321,48607],{"class":77},[67,50323,32038],{"class":208},[67,50325,1236],{"class":77},[67,50327,32038],{"class":208},[67,50329,43159],{"class":77},[67,50331,50332],{"class":69,"line":2450},[67,50333,48620],{"class":202},[67,50335,50336],{"class":69,"line":2455},[67,50337,48625],{"class":77},[67,50339,50340],{"class":69,"line":2472},[67,50341,48630],{"class":77},[67,50343,50344],{"class":69,"line":2477},[67,50345,48635],{"class":202},[67,50347,50348],{"class":69,"line":2482},[67,50349,48640],{"class":202},[67,50351,50352],{"class":69,"line":2487},[67,50353,177],{"emptyLinePlaceholder":176},[67,50355,50356],{"class":69,"line":2501},[67,50357,48649],{"class":202},[67,50359,50360],{"class":69,"line":2506},[67,50361,48654],{"class":202},[67,50363,50364,50366,50368,50370,50372,50374,50376,50378],{"class":69,"line":3298},[67,50365,34502],{"class":77},[67,50367,909],{"class":73},[67,50369,48663],{"class":77},[67,50371,48666],{"class":208},[67,50373,1236],{"class":77},[67,50375,48671],{"class":5935},[67,50377,909],{"class":73},[67,50379,48676],{"class":77},[67,50381,50382,50384,50386,50388,50390,50392],{"class":69,"line":3312},[67,50383,34559],{"class":77},[67,50385,909],{"class":73},[67,50387,32071],{"class":77},[67,50389,32074],{"class":5935},[67,50391,909],{"class":73},[67,50393,34570],{"class":77},[67,50395,50396],{"class":69,"line":3320},[67,50397,34575],{"class":202},[67,50399,50400,50402,50404,50406],{"class":69,"line":3325},[67,50401,34580],{"class":5935},[67,50403,909],{"class":73},[67,50405,1077],{"class":208},[67,50407,32003],{"class":77},[67,50409,50410,50412,50414,50416],{"class":69,"line":3331},[67,50411,34591],{"class":5935},[67,50413,909],{"class":73},[67,50415,32013],{"class":208},[67,50417,32003],{"class":77},[67,50419,50420,50422,50424,50426],{"class":69,"line":3337},[67,50421,34602],{"class":5935},[67,50423,909],{"class":73},[67,50425,1051],{"class":208},[67,50427,870],{"class":77},[67,50429,50430,50432],{"class":69,"line":3342},[67,50431,4810],{"class":73},[67,50433,34615],{"class":77},[67,50435,50436],{"class":69,"line":8667},[67,50437,177],{"emptyLinePlaceholder":176},[67,50439,50440],{"class":69,"line":8691},[67,50441,34624],{"class":202},[67,50443,50444,50446,50448],{"class":69,"line":8696},[67,50445,32484],{"class":73},[67,50447,34631],{"class":112},[67,50449,34634],{"class":77},[67,50451,50452],{"class":69,"line":8702},[67,50453,34639],{"class":202},[67,50455,50456,50458,50460,50462,50464,50466,50468],{"class":69,"line":8729},[67,50457,31774],{"class":77},[67,50459,909],{"class":73},[67,50461,31781],{"class":84},[67,50463,2427],{"class":73},[67,50465,31786],{"class":77},[67,50467,2424],{"class":73},[67,50469,34656],{"class":84},[67,50471,50472,50474,50476],{"class":69,"line":8734},[67,50473,31826],{"class":77},[67,50475,909],{"class":73},[67,50477,32826],{"class":77},[67,50479,50480],{"class":69,"line":8740},[67,50481,177],{"emptyLinePlaceholder":176},[67,50483,50484],{"class":69,"line":8752},[67,50485,34673],{"class":202},[67,50487,50488,50490,50492],{"class":69,"line":8764},[67,50489,34678],{"class":77},[67,50491,909],{"class":73},[67,50493,32879],{"class":208},[67,50495,50496,50498,50500],{"class":69,"line":8776},[67,50497,34687],{"class":77},[67,50499,909],{"class":73},[67,50501,3805],{"class":208},[67,50503,50504],{"class":69,"line":10435},[67,50505,177],{"emptyLinePlaceholder":176},[67,50507,50508],{"class":69,"line":10459},[67,50509,34700],{"class":202},[67,50511,50512],{"class":69,"line":10482},[67,50513,34705],{"class":202},[67,50515,50516],{"class":69,"line":10506},[67,50517,34710],{"class":202},[67,50519,50520,50522],{"class":69,"line":10511},[67,50521,34715],{"class":73},[67,50523,33421],{"class":77},[67,50525,50526],{"class":69,"line":10516},[67,50527,34722],{"class":202},[67,50529,50530,50532,50534,50536],{"class":69,"line":10521},[67,50531,4123],{"class":73},[67,50533,34729],{"class":77},[67,50535,81],{"class":73},[67,50537,34734],{"class":77},[67,50539,50540,50542,50544],{"class":69,"line":10530},[67,50541,34739],{"class":77},[67,50543,909],{"class":73},[67,50545,34744],{"class":77},[67,50547,50548,50550,50552],{"class":69,"line":10535},[67,50549,34749],{"class":77},[67,50551,909],{"class":73},[67,50553,34754],{"class":77},[67,50555,50556],{"class":69,"line":10541},[67,50557,34759],{"class":202},[67,50559,50560],{"class":69,"line":10562},[67,50561,33412],{"class":77},[67,50563,50564],{"class":69,"line":10568},[67,50565,34768],{"class":202},[67,50567,50568,50570,50572],{"class":69,"line":10582},[67,50569,33197],{"class":77},[67,50571,909],{"class":73},[67,50573,34777],{"class":77},[67,50575,50576],{"class":69,"line":10588},[67,50577,34782],{"class":202},[67,50579,50580,50582,50584,50586,50588,50590,50592],{"class":69,"line":10615},[67,50581,33214],{"class":77},[67,50583,909],{"class":73},[67,50585,33219],{"class":77},[67,50587,33222],{"class":5935},[67,50589,909],{"class":73},[67,50591,1077],{"class":208},[67,50593,870],{"class":77},[67,50595,50596],{"class":69,"line":10624},[67,50597,34803],{"class":202},[67,50599,50600],{"class":69,"line":10630},[67,50601,34808],{"class":202},[67,50603,50604],{"class":69,"line":10638},[67,50605,34813],{"class":202},[67,50607,50608,50610,50612,50614,50616],{"class":69,"line":10643},[67,50609,34818],{"class":77},[67,50611,10196],{"class":73},[67,50613,33324],{"class":77},[67,50615,3670],{"class":73},[67,50617,34827],{"class":77},[67,50619,50620],{"class":69,"line":17321},[67,50621,34832],{"class":202},[67,50623,50624,50626,50628,50630,50632],{"class":69,"line":17327},[67,50625,34837],{"class":77},[67,50627,10196],{"class":73},[67,50629,34842],{"class":77},[67,50631,1051],{"class":208},[67,50633,870],{"class":77},[67,50635,50636],{"class":69,"line":17350},[67,50637,177],{"emptyLinePlaceholder":176},[67,50639,50640],{"class":69,"line":17356},[67,50641,34855],{"class":202},[67,50643,50644,50646,50648,50650,50652],{"class":69,"line":17379},[67,50645,34860],{"class":77},[67,50647,909],{"class":73},[67,50649,34865],{"class":77},[67,50651,1440],{"class":73},[67,50653,34870],{"class":77},[67,50655,50656],{"class":69,"line":17393},[67,50657,34875],{"class":202},[67,50659,50660,50662,50664,50666],{"class":69,"line":17413},[67,50661,32988],{"class":208},[67,50663,864],{"class":77},[67,50665,34884],{"class":84},[67,50667,34887],{"class":77},[67,50669,50670],{"class":69,"line":17419},[67,50671,177],{"emptyLinePlaceholder":176},[67,50673,50674],{"class":69,"line":17430},[67,50675,34896],{"class":202},[67,50677,50678,50680,50682,50684,50686],{"class":69,"line":17453},[67,50679,2254],{"class":73},[67,50681,31757],{"class":208},[67,50683,3670],{"class":73},[67,50685,31762],{"class":84},[67,50687,4459],{"class":77},[67,50689,50690],{"class":69,"line":17475},[67,50691,34913],{"class":202},[67,50693,50694,50696,50698],{"class":69,"line":17480},[67,50695,31826],{"class":77},[67,50697,909],{"class":73},[67,50699,45088],{"class":77},[67,50701,50702],{"class":69,"line":17486},[67,50703,34926],{"class":202},[67,50705,50706],{"class":69,"line":17500},[67,50707,34931],{"class":202},[67,50709,50710,50712,50714],{"class":69,"line":17513},[67,50711,34936],{"class":77},[67,50713,34939],{"class":84},[67,50715,31034],{"class":77},[67,50717,50718],{"class":69,"line":17518},[67,50719,34946],{"class":202},[67,50721,50722,50724,50726],{"class":69,"line":17532},[67,50723,34559],{"class":77},[67,50725,909],{"class":73},[67,50727,34955],{"class":77},[67,50729,50730],{"class":69,"line":17537},[67,50731,34960],{"class":202},[67,50733,50734],{"class":69,"line":17543},[67,50735,34965],{"class":77},[67,50737,50738],{"class":69,"line":17548},[67,50739,177],{"emptyLinePlaceholder":176},[67,50741,50742],{"class":69,"line":17562},[67,50743,34974],{"class":202},[67,50745,50746],{"class":69,"line":17567},[67,50747,34979],{"class":202},[67,50749,50750,50752,50754,50756,50758,50760,50762],{"class":69,"line":17572},[67,50751,31774],{"class":77},[67,50753,909],{"class":73},[67,50755,31781],{"class":84},[67,50757,2427],{"class":73},[67,50759,31786],{"class":77},[67,50761,2424],{"class":73},[67,50763,34656],{"class":84},[67,50765,50766,50768,50770],{"class":69,"line":17586},[67,50767,31826],{"class":77},[67,50769,909],{"class":73},[67,50771,32826],{"class":77},[67,50773,50774],{"class":69,"line":17598},[67,50775,35008],{"class":202},[67,50777,50778],{"class":69,"line":17603},[67,50779,35013],{"class":202},[67,50781,50782,50784,50786,50788,50791,50793,50796],{"class":69,"line":17616},[67,50783,35018],{"class":77},[67,50785,909],{"class":73},[67,50787,1746],{"class":77},[67,50789,50790],{"class":84},"'猫'",[67,50792,1236],{"class":77},[67,50794,50795],{"class":84},"'狗'",[67,50797,33783],{"class":77},[67,50799,50800,50802],{"class":69,"line":17621},[67,50801,34715],{"class":73},[67,50803,33421],{"class":77},[67,50805,50806],{"class":69,"line":17626},[67,50807,35083],{"class":202},[67,50809,50810,50812,50814,50816],{"class":69,"line":17631},[67,50811,4123],{"class":73},[67,50813,35090],{"class":77},[67,50815,81],{"class":73},[67,50817,34734],{"class":77},[67,50819,50820,50822,50824],{"class":69,"line":17644},[67,50821,33147],{"class":77},[67,50823,909],{"class":73},[67,50825,33152],{"class":77},[67,50827,50828,50830,50832],{"class":69,"line":17649},[67,50829,33162],{"class":77},[67,50831,909],{"class":73},[67,50833,33167],{"class":77},[67,50835,50836],{"class":69,"line":33170},[67,50837,177],{"emptyLinePlaceholder":176},[67,50839,50840],{"class":69,"line":33176},[67,50841,35119],{"class":202},[67,50843,50844],{"class":69,"line":33182},[67,50845,33412],{"class":77},[67,50847,50848],{"class":69,"line":33188},[67,50849,35128],{"class":202},[67,50851,50852,50854,50856],{"class":69,"line":33194},[67,50853,33197],{"class":77},[67,50855,909],{"class":73},[67,50857,33202],{"class":77},[67,50859,50860],{"class":69,"line":33205},[67,50861,35141],{"class":202},[67,50863,50864,50866,50868,50870,50872,50874,50876],{"class":69,"line":33211},[67,50865,33214],{"class":77},[67,50867,909],{"class":73},[67,50869,33219],{"class":77},[67,50871,33222],{"class":5935},[67,50873,909],{"class":73},[67,50875,1077],{"class":208},[67,50877,870],{"class":77},[67,50879,50880],{"class":69,"line":33231},[67,50881,35162],{"class":202},[67,50883,50884,50886,50888],{"class":69,"line":33237},[67,50885,35167],{"class":77},[67,50887,909],{"class":73},[67,50889,35172],{"class":77},[67,50891,50892,50894,50896],{"class":69,"line":33248},[67,50893,35177],{"class":77},[67,50895,909],{"class":73},[67,50897,35182],{"class":77},[67,50899,50900,50902,50904,50906,50908,50910,50912,50914],{"class":69,"line":33254},[67,50901,35187],{"class":208},[67,50903,864],{"class":77},[67,50905,35192],{"class":84},[67,50907,35195],{"class":77},[67,50909,35198],{"class":84},[67,50911,1236],{"class":77},[67,50913,35203],{"class":84},[67,50915,35206],{"class":77},[779,50917,50918],{},"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":62,"searchDepth":143,"depth":143,"links":50920},[50921,50922,50923,50924],{"id":31128,"depth":149,"text":31129},{"id":38376,"depth":149,"text":38377},{"id":41809,"depth":149,"text":41810},{"id":45818,"depth":149,"text":45819},{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch2",{"title":31120,"description":24093},"wiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络","Bxs5UQ86zdlE-CO6G4Yv0d8SCjaTflxjZXwosV5BYw0",{"id":50931,"title":50932,"body":50933,"description":24093,"extension":787,"meta":50940,"navigation":176,"path":50941,"seo":50942,"stem":50943,"__hash__":50944},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习.md","3.yolo模型学习",{"type":7,"value":50934,"toc":50938},[50935],[10,50936,50932],{"id":50937},"_3yolo模型学习",{"title":62,"searchDepth":143,"depth":143,"links":50939},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch3-yolo",{"title":50932,"description":24093},"wiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习","up9SfBhaIIBLUfBuXgY3nFD9vRIUbWF1AanknFvugPQ",{"id":50946,"title":50947,"body":50948,"description":50955,"extension":787,"meta":50956,"navigation":176,"path":50958,"seo":50959,"stem":50960,"__hash__":50961},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Findex.md","CNN基础",{"type":7,"value":50949,"toc":50953},[50950],[19,50951,50952],{},"yolo模型还未补充",{"title":62,"searchDepth":143,"depth":143,"links":50954},[],"深度学习学习",{"category":50957},"深度学习","\u002Fwiki\u002F2025-11-03-cnn",{"title":50947,"description":50955},"wiki\u002F2025-11-03-cnn基础\u002Findex","jomiRepUEk1d2yEd-72Mm5lgO1UAsmOClqiKKJLBiIE",{"id":50963,"title":50964,"body":50965,"description":24093,"extension":787,"meta":50990,"navigation":176,"path":50991,"seo":50992,"stem":50993,"__hash__":50994},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch1-工具.md","1.工具",{"type":7,"value":50966,"toc":50988},[50967,50970,50973,50978,50985],[10,50968,50964],{"id":50969},"_1工具",[19,50971,50972],{},"提示错误插件：有问题会提前报错",[19,50974,50975],{},[725,50976],{"alt":62,"src":50977},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-001.png",[19,50979,50980],{},[28,50981,50984],{"href":50982,"rel":50983},"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",[32],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002F前端资料搜集必备网站",[19,50986,50987],{},"alt键加上下箭头可以实现语句的移动",{"title":62,"searchDepth":143,"depth":143,"links":50989},[],{},"\u002Fwiki\u002F2025-09-02-js\u002Fch1",{"title":50964,"description":24093},"wiki\u002F2025-09-02-JS学习\u002Fch1-工具","ahoJ9ydgi0wuLgmhEUjAoGpyZKNS_IeMsqe-jPF9xx4",{"id":50996,"title":50997,"body":50998,"description":24093,"extension":787,"meta":53862,"navigation":176,"path":53863,"seo":53864,"stem":53865,"__hash__":53866},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch2-基础语法.md","2.基础语法",{"type":7,"value":50999,"toc":53813},[51000,51003,51007,51011,51016,51019,51024,51028,51035,51040,51047,51052,51059,51064,51068,51073,51076,51080,51085,51089,51094,51097,51100,51103,51106,51109,51112,51115,51118,51123,51128,51133,51137,51140,51143,51147,51152,51155,51163,51168,51185,51193,51198,51203,51208,51213,51218,51221,51226,51231,51235,51244,51249,51254,51258,51263,51266,51270,51275,51283,51288,51293,51296,51301,51306,51311,51314,51317,51320,51325,51330,51333,51338,51341,51346,51349,51352,51355,51360,51363,51366,51381,51386,51391,51396,51399,51402,51405,51419,51422,51427,51432,51435,51438,51441,51444,51447,51450,51453,51457,51461,51466,51470,51473,51478,51483,51486,51491,51494,51498,51503,51506,51509,51512,51515,51518,51521,51524,51527,51530,51534,51539,51544,51549,51552,51555,51559,51564,51567,51571,51574,51577,51582,51585,51588,51592,51596,51599,51604,51609,51612,51641,51646,51651,51656,51661,51665,51670,51674,51679,51682,51686,51690,51695,51699,51704,51709,51713,51718,51721,51723,51726,51731,51735,51740,51744,51748,51753,51758,51763,51768,51772,51777,51782,51787,51790,51793,51798,51801,51806,51811,51816,51821,51825,52632,52636,52979,52984,52987,52990,52993,52996,52999,53002,53005,53008,53010,53013,53015,53018,53022,53027,53030,53033,53036,53040,53045,53050,53070,53073,53077,53082,53087,53104,53108,53137,53141,53163,53165,53204,53212,53218,53222,53225,53228,53233,53238,53241,53244,53247,53252,53257,53260,53263,53266,53269,53272,53275,53278,53281,53284,53287,53290,53292,53295,53298,53301,53304,53307,53310,53313,53316,53320,53325,53328,53333,53336,53339,53342,53345,53348,53351,53354,53356,53359,53362,53365,53368,53371,53374,53378,53381,53390,53393,53398,53401,53406,53409,53412,53415,53418,53421,53424,53427,53431,53435,53438,53441,53446,53451,53456,53460,53465,53470,53473,53476,53479,53482,53485,53490,53493,53498,53500,53505,53508,53512,53517,53520,53523,53528,53532,53535,53540,53543,53546,53575,53580,53583,53586,53589,53592,53595,53599,53602,53688,53692,53695,53700,53705,53712,53715,53718,53721,53724,53727,53732,53737,53740,53743,53746,53749,53752,53755,53758,53761,53764,53766,53769,53773,53778,53783,53788,53791,53796,53801,53804,53807,53810],[10,51001,50997],{"id":51002},"_2基础语法",[803,51004,51006],{"id":51005},"_21-js的使用基本介绍","2.1 js的使用基本介绍",[14,51008,51010],{"id":51009},"_211-js组成","2.1.1 js组成",[815,51012,51013],{},[818,51014,51015],{},"js是编程语言，html和css不是编程语言，是标记语言",[19,51017,51018],{},"js组成：ECMAScript(JavaScript语言基础)和Web APIs(由DOM页面文档对象模型和BOM浏览器对象模型)",[815,51020,51021],{"start":143},[818,51022,51023],{},"JavaScript 程序不能独立运行，它需要被嵌入 HTML 中，然后浏览器才能执行 JavaScript 代码",[14,51025,51027],{"id":51026},"_212-js书写位置","2.1.2 js书写位置",[815,51029,51030],{},[818,51031,51032],{},[336,51033,51034],{},"内部 JavaScript",[19,51036,51037],{},[725,51038],{"alt":62,"src":51039},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-002.png",[815,51041,51042],{"start":143},[818,51043,51044],{},[336,51045,51046],{},"外部 JavaScript",[19,51048,51049],{},[725,51050],{"alt":62,"src":51051},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-003.png",[815,51053,51054],{"start":149},[818,51055,51056],{},[336,51057,51058],{},"内联 JavaScript",[19,51060,51061],{},[725,51062],{"alt":62,"src":51063},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-004.png",[14,51065,51067],{"id":51066},"_213-javascript注释","2.1.3 JavaScript注释",[19,51069,51070],{},[725,51071],{"alt":62,"src":51072},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-005.png",[19,51074,51075],{},"alt+shift+a一定要记住！",[14,51077,51079],{"id":51078},"_214-javascript结束符","2.1.4 JavaScript结束符",[19,51081,51082],{},[725,51083],{"alt":62,"src":51084},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-006.png",[14,51086,51088],{"id":51087},"_2115-javascript-输入输出语法","21.1.5 JavaScript 输入输出语法",[815,51090,51091],{},[818,51092,51093],{},"输出语法：",[19,51095,51096],{},"①document.write('要出的内容')",[19,51098,51099],{},"向body内输出内容；",[19,51101,51102],{},"如果输出的内容写的是标签，也会被解析cheng",[19,51104,51105],{},"②alert('要出的内容')",[19,51107,51108],{},"页面弹出警告对话框",[19,51110,51111],{},"③console.log('控制台打印')",[19,51113,51114],{},"控制台输出语法，程序员调试使用",[19,51116,51117],{},"输入log就行，自动生成：",[19,51119,51120],{},[725,51121],{"alt":62,"src":51122},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-007.png",[815,51124,51125],{"start":143},[818,51126,51127],{},"输入语法：",[19,51129,51130],{},[725,51131],{"alt":62,"src":51132},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-008.png",[14,51134,51136],{"id":51135},"_2116-字面量","21.1.6 字面量",[19,51138,51139],{},"在计算机科学中，字面量（literal）是在计算机中描述 事\u002F物",[19,51141,51142],{},"例如：18 是一个数字字面量；'pink' 是一个字符串字面量",[803,51144,51146],{"id":51145},"_22-变量","2.2 变量",[815,51148,51149],{},[818,51150,51151],{},"变量声明",[19,51153,51154],{},"let 变量名",[1863,51156,51157,51160],{},[818,51158,51159],{},"声明变量有两部分组成：声明关键字 变量名（也叫标识符）",[818,51161,51162],{},"let 即关键字 (let: 允许、许可、让、要)，所谓关键字是系统提供的专门用来声明（定义）变量的词语",[815,51164,51165],{"start":143},[818,51166,51167],{},"变量赋值",[57,51169,51173],{"className":51170,"code":51171,"language":51172,"meta":62,"style":62},"language-html shiki shiki-themes github-light github-dark","let age\nage=18 \n","html",[64,51174,51175,51180],{"__ignoreMap":62},[67,51176,51177],{"class":69,"line":70},[67,51178,51179],{"class":77},"let age\n",[67,51181,51182],{"class":69,"line":143},[67,51183,51184],{"class":77},"age=18\n",[815,51186,51187,51190],{"start":149},[818,51188,51189],{},"连这些（变量的初始化）：let age=18",[818,51191,51192],{},"更新变量",[19,51194,51195],{},[725,51196],{"alt":62,"src":51197},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-009.png",[815,51199,51200],{"start":161},[818,51201,51202],{},"声明多个变量",[19,51204,51205],{},[725,51206],{"alt":62,"src":51207},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-010.png",[815,51209,51210],{"start":167},[818,51211,51212],{},"变量命名规则与规范",[19,51214,51215],{},[725,51216],{"alt":62,"src":51217},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-011.png",[19,51219,51220],{},"遵守小驼峰！",[815,51222,51223],{"start":173},[818,51224,51225],{},"变量拓展-let和var的区别",[19,51227,51228],{},[725,51229],{"alt":62,"src":51230},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-012.png",[803,51232,51234],{"id":51233},"_23-数组","2.3 数组",[57,51236,51238],{"className":51170,"code":51237,"language":51172,"meta":62,"style":62},"let arr = []\n",[64,51239,51240],{"__ignoreMap":62},[67,51241,51242],{"class":69,"line":70},[67,51243,51237],{"class":77},[19,51245,51246],{},[725,51247],{"alt":62,"src":51248},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-013.png",[19,51250,51251],{},[725,51252],{"alt":62,"src":51253},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-014.png",[803,51255,51257],{"id":51256},"_24-常量","2.4 常量",[19,51259,51260],{},[725,51261],{"alt":62,"src":51262},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-015.png",[19,51264,51265],{},"const — 类似于 let ，但是变量的值无法被修改",[803,51267,51269],{"id":51268},"_25-数据类型","2.5 数据类型",[19,51271,51272],{},[725,51273],{"alt":62,"src":51274},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-016.png",[815,51276,51277,51280],{},[818,51278,51279],{},"js是一门弱数据类型的语言，只要是数字就是数字型语言",[818,51281,51282],{},"算数运算符：",[19,51284,51285],{},[725,51286],{"alt":62,"src":51287},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-017.png",[815,51289,51290],{"start":149},[818,51291,51292],{},"数字类型（Number）",[19,51294,51295],{},"JavaScript 中的正数、负数、小数等 统一称为 数字类型",[19,51297,51298],{},[725,51299],{"alt":62,"src":51300},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-018.png",[815,51302,51303],{"start":155},[818,51304,51305],{},"字符串类型（string）",[19,51307,51308],{},[725,51309],{"alt":62,"src":51310},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-019.png",[19,51312,51313],{},"反引号也是可以使用的",[19,51315,51316],{},"➕：数字相加，字符相连，只要有字符串就可以与其他进行相加",[19,51318,51319],{},"例如：document.write(\"我今年\"+age+\"岁\")",[815,51321,51322],{"start":161},[818,51323,51324],{},"模板字符串",[19,51326,51327],{},[725,51328],{"alt":62,"src":51329},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-020.png",[19,51331,51332],{},"类似于python的字符串格式化",[815,51334,51335],{"start":167},[818,51336,51337],{},"布尔类型",[19,51339,51340],{},"true 和 false",[815,51342,51343],{"start":173},[818,51344,51345],{},"未定义类型（underfined）",[19,51347,51348],{},"表示没有赋值",[19,51350,51351],{},"未定义类型是比较特殊的类型，只有一个值undefined",[19,51353,51354],{},"只声明变量，不赋值的情况下，变量的默认值为 undefined，一般很少【直接】为某个变量赋值为 undefined",[815,51356,51357],{"start":180},[818,51358,51359],{},"null（空类型）",[19,51361,51362],{},"JavaScript 中的 null 仅仅是一个代表“无”、“空”或“值未知”的特殊值",[19,51364,51365],{},"赋值了，但是内容为空",[57,51367,51369],{"className":51170,"code":51368,"language":51172,"meta":62,"style":62},"typeof null\n输出的是'object'，是一个对象数据类型\n",[64,51370,51371,51376],{"__ignoreMap":62},[67,51372,51373],{"class":69,"line":70},[67,51374,51375],{"class":77},"typeof null\n",[67,51377,51378],{"class":69,"line":143},[67,51379,51380],{"class":77},"输出的是'object'，是一个对象数据类型\n",[815,51382,51383],{"start":186},[818,51384,51385],{},"控制台检测数据类型",[19,51387,51388],{},[725,51389],{"alt":62,"src":51390},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-021.png",[815,51392,51393],{"start":444},[818,51394,51395],{},"类型转换",[19,51397,51398],{},"prompt输入的内容都是字符串字面量，还有html时的表单（input啥的输入的也是字符串字面量）",[19,51400,51401],{},"转换方式：隐式转换和显示转换",[19,51403,51404],{},"①隐式转换",[1863,51406,51407,51410,51413,51416],{},[818,51408,51409],{},"号两边只要有一个是字符串，都会把另外一个转成字符串",[818,51411,51412],{},"除了+以外的算术运算符 比如 - * \u002F 等都会把数据转成数字类型（只要有数字就会把另一个转化成数字字面变量）",[818,51414,51415],{},"加号作为正号解析可以转换成数字型：console.log(+'123')不再是字符串类型，是数字类型为123",[818,51417,51418],{},"任何数据和字符串相加结果都是字符串",[19,51420,51421],{},"②显示转换",[19,51423,51424],{},[725,51425],{"alt":62,"src":51426},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-022.png",[19,51428,51429],{},[725,51430],{"alt":62,"src":51431},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-023.png",[19,51433,51434],{},"在输入的时候要用好隐式转换，简单写起来",[19,51436,51437],{},"let num = +prompt(’请输入数字：‘)",[19,51439,51440],{},"  parseInt与parseFloat是只取前边的数字，如果前边有字母，是无法进行识别后边的数字的，会显示NaN，表示错误",[19,51442,51443],{},"console.log(parseInt('12.333px'))",[19,51445,51446],{},"输出为：12",[19,51448,51449],{},"console.log(parseInt('a'a'a12.333px'))",[19,51451,51452],{},"输出：NaN",[803,51454,51456],{"id":51455},"_26-运算符","2.6 运算符",[14,51458,51460],{"id":51459},"_261-赋值运算符","2.6.1 赋值运算符",[19,51462,51463],{},[725,51464],{"alt":62,"src":51465},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-024.png",[14,51467,51469],{"id":51468},"_262-一元运算符","2.6.2 一元运算符",[19,51471,51472],{},"众多的 JavaScript 的运算符可以根据所需表达式的个数，分为一元运算符、二元运算符、三元运算符，就看需要几个数来操作，例如+需要两个数才能相加，所以叫做二元运算符，正负号的话就是一元运算符",[19,51474,51475],{},[725,51476],{"alt":62,"src":51477},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-025.png",[19,51479,51480],{},[725,51481],{"alt":62,"src":51482},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-026.png",[19,51484,51485],{},"两者的区别：",[19,51487,51488],{},[725,51489],{"alt":62,"src":51490},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-027.png",[19,51492,51493],{},"前置先自加；后置后加，代码执行完之后再加",[14,51495,51497],{"id":51496},"_263-比较运算符","2.6.3 比较运算符",[19,51499,51500],{},[725,51501],{"alt":62,"src":51502},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-028.png",[19,51504,51505],{},"比较运算符也有隐式转换",[19,51507,51508],{},"console.log(2 == '2')输出为true，只判断值，==含有隐式转换，前边是数字字面量的情况下，会将字符串转化为数字字面量",[19,51510,51511],{},"console.log(2==='2')输出false，===全等，会判断值和数据类型，需要全部一样才为true",[19,51513,51514],{},"要使用三等，开发的时候",[19,51516,51517],{},"NaN不等于任何人，包括它自己",[19,51519,51520],{},"小数在进行运算的时候它会先把自己转化为整数，然后最后再除以放大的数变回原来：例如：0.5+0.2：它是0.5*10+0.2*10=7",[19,51522,51523],{},"7\u002F10=0.7",[19,51525,51526],{},"最后：0.5+0.2=0.7",[19,51528,51529],{},"字符串比较，比较的是字符对应的ASCII码",[14,51531,51533],{"id":51532},"_264-逻辑运算符","2.6.4 逻辑运算符",[19,51535,51536],{},[725,51537],{"alt":62,"src":51538},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-029.png",[19,51540,51541],{},[725,51542],{"alt":62,"src":51543},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-030.png",[19,51545,51546],{},[725,51547],{"alt":62,"src":51548},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-031.png",[19,51550,51551],{},"上述题目选D",[19,51553,51554],{},"与真2假1；或真1假2",[14,51556,51558],{"id":51557},"_265-运算符优先级","2.6.5 运算符优先级",[19,51560,51561],{},[725,51562],{"alt":62,"src":51563},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-032.png",[19,51565,51566],{},"先算逻辑与，后算逻辑或",[803,51568,51570],{"id":51569},"_27-语句","2.7 语句",[19,51572,51573],{},"表达式：是可以被求值的代码，会有结果给我们",[19,51575,51576],{},"语句：语句是可以被执行的代码，例如prompt()",[19,51578,51579],{},[725,51580],{"alt":62,"src":51581},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-033.png",[19,51583,51584],{},"因为表达式可被求值，所以它可以写在赋值语句的右侧。",[19,51586,51587],{},"而语句不一定有值，所以比如 alert() for和break 等语句就不能被用于赋值。",[14,51589,51591],{"id":51590},"_271-分支语句","2.7.1 分支语句",[40,51593,51595],{"id":51594},"_2711-if分支语句","2.7.1.1 if分支语句",[19,51597,51598],{},"if语句单行简单的话，可以不写{}，写在一行就行",[815,51600,51601],{},[818,51602,51603],{},"单分支语句",[19,51605,51606],{},[725,51607],{"alt":62,"src":51608},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-034.png",[19,51610,51611],{},"除了0，所有数字都为真",[57,51613,51615],{"className":51170,"code":51614,"language":51172,"meta":62,"style":62},"if（0) {\n    let a=1\n    alert(typeof a)\n}\n不输出，括号为假\n",[64,51616,51617,51622,51627,51632,51636],{"__ignoreMap":62},[67,51618,51619],{"class":69,"line":70},[67,51620,51621],{"class":77},"if（0) {\n",[67,51623,51624],{"class":69,"line":143},[67,51625,51626],{"class":77},"    let a=1\n",[67,51628,51629],{"class":69,"line":149},[67,51630,51631],{"class":77},"    alert(typeof a)\n",[67,51633,51634],{"class":69,"line":155},[67,51635,2288],{"class":77},[67,51637,51638],{"class":69,"line":161},[67,51639,51640],{"class":77},"不输出，括号为假\n",[815,51642,51643],{"start":143},[818,51644,51645],{},"双分支语句",[19,51647,51648],{},[725,51649],{"alt":62,"src":51650},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-035.png",[815,51652,51653],{"start":149},[818,51654,51655],{},"多分支语句",[19,51657,51658],{},[725,51659],{"alt":62,"src":51660},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-036.png",[40,51662,51664],{"id":51663},"_2712-三元运算符","2.7.1.2 三元运算符",[19,51666,51667],{},[725,51668],{"alt":62,"src":51669},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-037.png",[40,51671,51673],{"id":51672},"_2713-switch语句","2.7.1.3 switch语句",[19,51675,51676],{},[725,51677],{"alt":62,"src":51678},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-038.png",[19,51680,51681],{},"如果不写break，在匹配成功之后，输出完这个匹配内容后，switch语句就失效了，他会把后边的内容也全部输出",[14,51683,51685],{"id":51684},"_272-循环语句","2.7.2 循环语句",[40,51687,51689],{"id":51688},"_2721-断点演示","2.7.2.1 断点演示",[19,51691,51692],{},[725,51693],{"alt":62,"src":51694},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-039.png",[40,51696,51698],{"id":51697},"_2722-while循环","2.7.2.2 while循环",[19,51700,51701],{},[725,51702],{"alt":62,"src":51703},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-040.png",[19,51705,51706],{},[725,51707],{"alt":62,"src":51708},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-041.png",[40,51710,51712],{"id":51711},"_2723-for循环","2.7.2.3 for循环",[19,51714,51715],{},[725,51716],{"alt":62,"src":51717},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-042.png",[19,51719,51720],{},"for(;;) {",[19,51722,1802],{},[19,51724,51725],{},"表示无限循环",[19,51727,51728],{},[725,51729],{"alt":62,"src":51730},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-043.png",[40,51732,51734],{"id":51733},"_2724-循环的退出","2.7.2.4 循环的退出",[19,51736,51737],{},[725,51738],{"alt":62,"src":51739},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-044.png",[803,51741,51743],{"id":51742},"_28-数组","2.8 数组",[14,51745,51747],{"id":51746},"_281-基础认识","2.8.1 基础认识",[19,51749,51750],{},[725,51751],{"alt":62,"src":51752},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-045.png",[19,51754,51755],{},[725,51756],{"alt":62,"src":51757},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-046.png",[19,51759,51760],{},[725,51761],{"alt":62,"src":51762},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-047.png",[19,51764,51765],{},[725,51766],{"alt":62,"src":51767},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-048.png",[14,51769,51771],{"id":51770},"_282-操作数组","2.8.2 操作数组",[19,51773,51774],{},[725,51775],{"alt":62,"src":51776},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-049.png",[815,51778,51779],{},[818,51780,51781],{},"添加元素",[19,51783,51784],{},[725,51785],{"alt":62,"src":51786},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-050.png",[19,51788,51789],{},"console.log(arr.push('green'))",[19,51791,51792],{},"输出结果：为新数组的长度",[19,51794,51795],{},[725,51796],{"alt":62,"src":51797},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-051.png",[19,51799,51800],{},"push用的非常多，一定要记住",[815,51802,51803],{},[818,51804,51805],{},"删除元素",[19,51807,51808],{},[725,51809],{"alt":62,"src":51810},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-052.png",[19,51812,51813],{},[725,51814],{"alt":62,"src":51815},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-053.png",[19,51817,51818],{},[725,51819],{"alt":62,"src":51820},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-054.png",[14,51822,51824],{"id":51823},"_283-根据数据生成柱形图","2.8.3 根据数据生成柱形图",[57,51826,51828],{"className":51170,"code":51827,"language":51172,"meta":62,"style":62},"\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",[64,51829,51830,51845,51861,51865,51874,51892,51916,51938,51952,51960,51967,51979,51990,51994,51998,52005,52017,52032,52045,52064,52081,52096,52108,52120,52132,52136,52140,52151,52161,52173,52185,52197,52208,52212,52216,52228,52232,52246,52250,52254,52265,52279,52291,52305,52309,52318,52327,52331,52340,52344,52353,52358,52363,52376,52404,52409,52414,52439,52444,52448,52453,52458,52473,52477,52482,52512,52524,52540,52556,52570,52575,52582,52586,52591,52604,52612,52620,52624],{"__ignoreMap":62},[67,51831,51832,51835,51839,51842],{"class":69,"line":70},[67,51833,51834],{"class":77},"\u003C!",[67,51836,51838],{"class":51837},"s9eBZ","DOCTYPE",[67,51840,51841],{"class":112}," html",[67,51843,51844],{"class":77},">\n",[67,51846,51847,51849,51851,51854,51856,51859],{"class":69,"line":143},[67,51848,1766],{"class":77},[67,51850,51172],{"class":51837},[67,51852,51853],{"class":112}," lang",[67,51855,909],{"class":77},[67,51857,51858],{"class":84},"\"en\"",[67,51860,51844],{"class":77},[67,51862,51863],{"class":69,"line":149},[67,51864,177],{"emptyLinePlaceholder":176},[67,51866,51867,51869,51872],{"class":69,"line":155},[67,51868,1766],{"class":77},[67,51870,51871],{"class":51837},"head",[67,51873,51844],{"class":77},[67,51875,51876,51879,51882,51885,51887,51890],{"class":69,"line":161},[67,51877,51878],{"class":77},"    \u003C",[67,51880,51881],{"class":51837},"meta",[67,51883,51884],{"class":112}," charset",[67,51886,909],{"class":77},[67,51888,51889],{"class":84},"\"UTF-8\"",[67,51891,51844],{"class":77},[67,51893,51894,51896,51898,51901,51903,51906,51909,51911,51914],{"class":69,"line":167},[67,51895,51878],{"class":77},[67,51897,51881],{"class":51837},[67,51899,51900],{"class":112}," http-equiv",[67,51902,909],{"class":77},[67,51904,51905],{"class":84},"\"X-UA-Compatible\"",[67,51907,51908],{"class":112}," content",[67,51910,909],{"class":77},[67,51912,51913],{"class":84},"\"IE=edge\"",[67,51915,51844],{"class":77},[67,51917,51918,51920,51922,51924,51926,51929,51931,51933,51936],{"class":69,"line":173},[67,51919,51878],{"class":77},[67,51921,51881],{"class":51837},[67,51923,15637],{"class":112},[67,51925,909],{"class":77},[67,51927,51928],{"class":84},"\"viewport\"",[67,51930,51908],{"class":112},[67,51932,909],{"class":77},[67,51934,51935],{"class":84},"\"width=device-width, initial-scale=1.0\"",[67,51937,51844],{"class":77},[67,51939,51940,51942,51945,51948,51950],{"class":69,"line":180},[67,51941,51878],{"class":77},[67,51943,51944],{"class":51837},"title",[67,51946,51947],{"class":77},">Document\u003C\u002F",[67,51949,51944],{"class":51837},[67,51951,51844],{"class":77},[67,51953,51954,51956,51958],{"class":69,"line":186},[67,51955,51878],{"class":77},[67,51957,779],{"class":51837},[67,51959,51844],{"class":77},[67,51961,51962,51965],{"class":69,"line":444},[67,51963,51964],{"class":51837},"        *",[67,51966,16289],{"class":77},[67,51968,51969,51972,51975,51977],{"class":69,"line":2335},[67,51970,51971],{"class":208},"            margin",[67,51973,51974],{"class":77},": ",[67,51976,1051],{"class":208},[67,51978,2017],{"class":77},[67,51980,51981,51984,51986,51988],{"class":69,"line":2340},[67,51982,51983],{"class":208},"            padding",[67,51985,51974],{"class":77},[67,51987,1051],{"class":208},[67,51989,2017],{"class":77},[67,51991,51992],{"class":69,"line":2346},[67,51993,3250],{"class":77},[67,51995,51996],{"class":69,"line":2351},[67,51997,177],{"emptyLinePlaceholder":176},[67,51999,52000,52003],{"class":69,"line":2365},[67,52001,52002],{"class":112},"        .box",[67,52004,16289],{"class":77},[67,52006,52007,52010,52012,52015],{"class":69,"line":2370},[67,52008,52009],{"class":208},"            display",[67,52011,51974],{"class":77},[67,52013,52014],{"class":208},"flex",[67,52016,2017],{"class":77},[67,52018,52019,52022,52024,52027,52030],{"class":69,"line":2376},[67,52020,52021],{"class":208},"            width",[67,52023,51974],{"class":77},[67,52025,52026],{"class":208},"700",[67,52028,52029],{"class":73},"px",[67,52031,2017],{"class":77},[67,52033,52034,52037,52039,52041,52043],{"class":69,"line":2397},[67,52035,52036],{"class":208},"            height",[67,52038,51974],{"class":77},[67,52040,4693],{"class":208},[67,52042,52029],{"class":73},[67,52044,2017],{"class":77},[67,52046,52047,52050,52052,52054,52056,52059,52062],{"class":69,"line":2402},[67,52048,52049],{"class":208},"            border-left",[67,52051,51974],{"class":77},[67,52053,1077],{"class":208},[67,52055,52029],{"class":73},[67,52057,52058],{"class":208}," solid",[67,52060,52061],{"class":208}," pink",[67,52063,2017],{"class":77},[67,52065,52066,52069,52071,52073,52075,52077,52079],{"class":69,"line":2416},[67,52067,52068],{"class":208},"            border-bottom",[67,52070,51974],{"class":77},[67,52072,1077],{"class":208},[67,52074,52029],{"class":73},[67,52076,52058],{"class":208},[67,52078,52061],{"class":208},[67,52080,2017],{"class":77},[67,52082,52083,52085,52087,52089,52091,52094],{"class":69,"line":2421},[67,52084,51971],{"class":208},[67,52086,51974],{"class":77},[67,52088,1512],{"class":208},[67,52090,52029],{"class":73},[67,52092,52093],{"class":208}," auto",[67,52095,2017],{"class":77},[67,52097,52098,52101,52103,52106],{"class":69,"line":2450},[67,52099,52100],{"class":208},"            justify-content",[67,52102,51974],{"class":77},[67,52104,52105],{"class":208},"space-around",[67,52107,2017],{"class":77},[67,52109,52110,52113,52115,52118],{"class":69,"line":2455},[67,52111,52112],{"class":208},"            align-items",[67,52114,51974],{"class":77},[67,52116,52117],{"class":208},"flex-end",[67,52119,2017],{"class":77},[67,52121,52122,52125,52127,52130],{"class":69,"line":2472},[67,52123,52124],{"class":208},"            text-align",[67,52126,51974],{"class":77},[67,52128,52129],{"class":208},"center",[67,52131,2017],{"class":77},[67,52133,52134],{"class":69,"line":2477},[67,52135,3250],{"class":77},[67,52137,52138],{"class":69,"line":2482},[67,52139,177],{"emptyLinePlaceholder":176},[67,52141,52142,52144,52146,52149],{"class":69,"line":2487},[67,52143,52002],{"class":112},[67,52145,1816],{"class":73},[67,52147,52148],{"class":51837},"div",[67,52150,16289],{"class":77},[67,52152,52153,52155,52157,52159],{"class":69,"line":2501},[67,52154,52009],{"class":208},[67,52156,51974],{"class":77},[67,52158,52014],{"class":208},[67,52160,2017],{"class":77},[67,52162,52163,52165,52167,52169,52171],{"class":69,"line":2506},[67,52164,52021],{"class":208},[67,52166,51974],{"class":77},[67,52168,1512],{"class":208},[67,52170,52029],{"class":73},[67,52172,2017],{"class":77},[67,52174,52175,52178,52180,52183],{"class":69,"line":3298},[67,52176,52177],{"class":208},"            background-color",[67,52179,51974],{"class":77},[67,52181,52182],{"class":208},"pink",[67,52184,2017],{"class":77},[67,52186,52187,52190,52192,52195],{"class":69,"line":3312},[67,52188,52189],{"class":208},"            flex-direction",[67,52191,51974],{"class":77},[67,52193,52194],{"class":208},"column",[67,52196,2017],{"class":77},[67,52198,52199,52201,52203,52206],{"class":69,"line":3320},[67,52200,52100],{"class":208},[67,52202,51974],{"class":77},[67,52204,52205],{"class":208},"space-between",[67,52207,2017],{"class":77},[67,52209,52210],{"class":69,"line":3325},[67,52211,3250],{"class":77},[67,52213,52214],{"class":69,"line":3331},[67,52215,177],{"emptyLinePlaceholder":176},[67,52217,52218,52220,52223,52226],{"class":69,"line":3337},[67,52219,52002],{"class":112},[67,52221,52222],{"class":51837}," div",[67,52224,52225],{"class":51837}," span",[67,52227,16289],{"class":77},[67,52229,52230],{"class":69,"line":3342},[67,52231,177],{"emptyLinePlaceholder":176},[67,52233,52234,52237,52239,52242,52244],{"class":69,"line":8667},[67,52235,52236],{"class":208},"            margin-top",[67,52238,51974],{"class":77},[67,52240,52241],{"class":208},"-20",[67,52243,52029],{"class":73},[67,52245,2017],{"class":77},[67,52247,52248],{"class":69,"line":8691},[67,52249,3250],{"class":77},[67,52251,52252],{"class":69,"line":8696},[67,52253,177],{"emptyLinePlaceholder":176},[67,52255,52256,52258,52260,52263],{"class":69,"line":8702},[67,52257,52002],{"class":112},[67,52259,52222],{"class":51837},[67,52261,52262],{"class":51837}," h4",[67,52264,16289],{"class":77},[67,52266,52267,52270,52272,52275,52277],{"class":69,"line":8729},[67,52268,52269],{"class":208},"            margin-bottom",[67,52271,51974],{"class":77},[67,52273,52274],{"class":208},"-35",[67,52276,52029],{"class":73},[67,52278,2017],{"class":77},[67,52280,52281,52283,52285,52287,52289],{"class":69,"line":8734},[67,52282,52021],{"class":208},[67,52284,51974],{"class":77},[67,52286,1214],{"class":208},[67,52288,52029],{"class":73},[67,52290,2017],{"class":77},[67,52292,52293,52296,52298,52301,52303],{"class":69,"line":8740},[67,52294,52295],{"class":208},"            margin-left",[67,52297,51974],{"class":77},[67,52299,52300],{"class":208},"-10",[67,52302,52029],{"class":73},[67,52304,2017],{"class":77},[67,52306,52307],{"class":69,"line":8752},[67,52308,3250],{"class":77},[67,52310,52311,52314,52316],{"class":69,"line":8764},[67,52312,52313],{"class":77},"    \u003C\u002F",[67,52315,779],{"class":51837},[67,52317,51844],{"class":77},[67,52319,52320,52323,52325],{"class":69,"line":8776},[67,52321,52322],{"class":77},"\u003C\u002F",[67,52324,51871],{"class":51837},[67,52326,51844],{"class":77},[67,52328,52329],{"class":69,"line":10435},[67,52330,177],{"emptyLinePlaceholder":176},[67,52332,52333,52335,52338],{"class":69,"line":10459},[67,52334,1766],{"class":77},[67,52336,52337],{"class":51837},"body",[67,52339,51844],{"class":77},[67,52341,52342],{"class":69,"line":10482},[67,52343,177],{"emptyLinePlaceholder":176},[67,52345,52346,52348,52351],{"class":69,"line":10506},[67,52347,51878],{"class":77},[67,52349,52350],{"class":51837},"script",[67,52352,51844],{"class":77},[67,52354,52355],{"class":69,"line":10511},[67,52356,52357],{"class":202},"        \u002F\u002F 1. 四次弹框效果\n",[67,52359,52360],{"class":69,"line":10516},[67,52361,52362],{"class":202},"        \u002F\u002F 声明一个新的数组\n",[67,52364,52365,52368,52371,52373],{"class":69,"line":10521},[67,52366,52367],{"class":73},"        let",[67,52369,52370],{"class":77}," arr ",[67,52372,909],{"class":73},[67,52374,52375],{"class":77}," []\n",[67,52377,52378,52380,52382,52385,52387,52389,52391,52393,52395,52398,52400,52402],{"class":69,"line":10530},[67,52379,4123],{"class":73},[67,52381,2381],{"class":77},[67,52383,52384],{"class":73},"let",[67,52386,10157],{"class":77},[67,52388,909],{"class":73},[67,52390,25828],{"class":208},[67,52392,10164],{"class":77},[67,52394,2311],{"class":73},[67,52396,52397],{"class":208}," 4",[67,52399,3934],{"class":77},[67,52401,3014],{"class":73},[67,52403,13160],{"class":77},[67,52405,52406],{"class":69,"line":10535},[67,52407,52408],{"class":202},"            \u002F\u002F let num = prompt(`请输入第${i}季度的数据:`)\n",[67,52410,52411],{"class":69,"line":10541},[67,52412,52413],{"class":202},"            \u002F\u002F arr.push(num)\n",[67,52415,52416,52419,52422,52424,52427,52429,52432,52434,52437],{"class":69,"line":10562},[67,52417,52418],{"class":77},"            arr.",[67,52420,52421],{"class":112},"push",[67,52423,864],{"class":77},[67,52425,52426],{"class":112},"prompt",[67,52428,864],{"class":77},[67,52430,52431],{"class":84},"`请输入第${",[67,52433,1298],{"class":77},[67,52435,52436],{"class":84},"}季度的数据:`",[67,52438,31034],{"class":77},[67,52440,52441],{"class":69,"line":10568},[67,52442,52443],{"class":202},"            \u002F\u002F push记得加小括号，不是等号赋值的形式\n",[67,52445,52446],{"class":69,"line":10582},[67,52447,3250],{"class":77},[67,52449,52450],{"class":69,"line":10588},[67,52451,52452],{"class":202},"        \u002F\u002F console.log(arr)  ['123','135','345','234']\n",[67,52454,52455],{"class":69,"line":10615},[67,52456,52457],{"class":202},"        \u002F\u002F 盒子开头\n",[67,52459,52460,52463,52466,52468,52471],{"class":69,"line":10624},[67,52461,52462],{"class":77},"        document.",[67,52464,52465],{"class":112},"write",[67,52467,864],{"class":77},[67,52469,52470],{"class":84},"` \u003Cdiv class=\"box\">`",[67,52472,870],{"class":77},[67,52474,52475],{"class":69,"line":10630},[67,52476,177],{"emptyLinePlaceholder":176},[67,52478,52479],{"class":69,"line":10638},[67,52480,52481],{"class":202},"        \u002F\u002F 盒子中间 利用循环的形式  跟数组有关系\n",[67,52483,52484,52486,52488,52490,52492,52494,52496,52498,52500,52503,52506,52508,52510],{"class":69,"line":10643},[67,52485,4123],{"class":73},[67,52487,2381],{"class":77},[67,52489,52384],{"class":73},[67,52491,10157],{"class":77},[67,52493,909],{"class":73},[67,52495,4813],{"class":208},[67,52497,10164],{"class":77},[67,52499,1766],{"class":73},[67,52501,52502],{"class":77}," arr.",[67,52504,52505],{"class":208},"length",[67,52507,3934],{"class":77},[67,52509,3014],{"class":73},[67,52511,13160],{"class":77},[67,52513,52514,52517,52519,52521],{"class":69,"line":17321},[67,52515,52516],{"class":77},"            document.",[67,52518,52465],{"class":112},[67,52520,864],{"class":77},[67,52522,52523],{"class":84},"`\n",[67,52525,52526,52529,52531,52533,52535,52537],{"class":69,"line":17327},[67,52527,52528],{"class":84},"              \u003Cdiv style=\"height: ${",[67,52530,4600],{"class":77},[67,52532,1746],{"class":84},[67,52534,1298],{"class":77},[67,52536,1796],{"class":84},[67,52538,52539],{"class":84},"}px;\">\n",[67,52541,52542,52545,52547,52549,52551,52553],{"class":69,"line":17350},[67,52543,52544],{"class":84},"                \u003Cspan>${",[67,52546,4600],{"class":77},[67,52548,1746],{"class":84},[67,52550,1298],{"class":77},[67,52552,1796],{"class":84},[67,52554,52555],{"class":84},"}\u003C\u002Fspan>\n",[67,52557,52558,52561,52563,52565,52567],{"class":69,"line":17356},[67,52559,52560],{"class":84},"                \u003Ch4>第${",[67,52562,1298],{"class":77},[67,52564,46103],{"class":73},[67,52566,25828],{"class":208},[67,52568,52569],{"class":84},"}季度\u003C\u002Fh4>\n",[67,52571,52572],{"class":69,"line":17379},[67,52573,52574],{"class":84},"              \u003C\u002Fdiv>          \n",[67,52576,52577,52580],{"class":69,"line":17393},[67,52578,52579],{"class":84},"            `",[67,52581,870],{"class":77},[67,52583,52584],{"class":69,"line":17413},[67,52585,3250],{"class":77},[67,52587,52588],{"class":69,"line":17419},[67,52589,52590],{"class":202},"        \u002F\u002F 盒子结尾\n",[67,52592,52593,52595,52597,52599,52602],{"class":69,"line":17430},[67,52594,52462],{"class":77},[67,52596,52465],{"class":112},[67,52598,864],{"class":77},[67,52600,52601],{"class":84},"` \u003C\u002Fdiv>`",[67,52603,870],{"class":77},[67,52605,52606,52608,52610],{"class":69,"line":17453},[67,52607,52313],{"class":77},[67,52609,52350],{"class":51837},[67,52611,51844],{"class":77},[67,52613,52614,52616,52618],{"class":69,"line":17475},[67,52615,52322],{"class":77},[67,52617,52337],{"class":51837},[67,52619,51844],{"class":77},[67,52621,52622],{"class":69,"line":17480},[67,52623,177],{"emptyLinePlaceholder":176},[67,52625,52626,52628,52630],{"class":69,"line":17486},[67,52627,52322],{"class":77},[67,52629,51172],{"class":51837},[67,52631,51844],{"class":77},[14,52633,52635],{"id":52634},"_284-冒泡排序","2.8.4 冒泡排序",[57,52637,52639],{"className":51170,"code":52638,"language":51172,"meta":62,"style":62},"\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",[64,52640,52641,52651,52665,52669,52677,52692,52712,52724,52732,52736,52744,52752,52784,52817,52854,52859,52878,52883,52896,52911,52927,52931,52936,52940,52950,52959,52967,52971],{"__ignoreMap":62},[67,52642,52643,52645,52647,52649],{"class":69,"line":70},[67,52644,51834],{"class":77},[67,52646,51838],{"class":51837},[67,52648,51841],{"class":112},[67,52650,51844],{"class":77},[67,52652,52653,52655,52657,52659,52661,52663],{"class":69,"line":143},[67,52654,1766],{"class":77},[67,52656,51172],{"class":51837},[67,52658,51853],{"class":112},[67,52660,909],{"class":77},[67,52662,51858],{"class":84},[67,52664,51844],{"class":77},[67,52666,52667],{"class":69,"line":149},[67,52668,177],{"emptyLinePlaceholder":176},[67,52670,52671,52673,52675],{"class":69,"line":155},[67,52672,1766],{"class":77},[67,52674,51871],{"class":51837},[67,52676,51844],{"class":77},[67,52678,52679,52682,52684,52686,52688,52690],{"class":69,"line":161},[67,52680,52681],{"class":77},"  \u003C",[67,52683,51881],{"class":51837},[67,52685,51884],{"class":112},[67,52687,909],{"class":77},[67,52689,51889],{"class":84},[67,52691,51844],{"class":77},[67,52693,52694,52696,52698,52700,52702,52704,52706,52708,52710],{"class":69,"line":167},[67,52695,52681],{"class":77},[67,52697,51881],{"class":51837},[67,52699,15637],{"class":112},[67,52701,909],{"class":77},[67,52703,51928],{"class":84},[67,52705,51908],{"class":112},[67,52707,909],{"class":77},[67,52709,51935],{"class":84},[67,52711,51844],{"class":77},[67,52713,52714,52716,52718,52720,52722],{"class":69,"line":173},[67,52715,52681],{"class":77},[67,52717,51944],{"class":51837},[67,52719,51947],{"class":77},[67,52721,51944],{"class":51837},[67,52723,51844],{"class":77},[67,52725,52726,52728,52730],{"class":69,"line":180},[67,52727,52322],{"class":77},[67,52729,51871],{"class":51837},[67,52731,51844],{"class":77},[67,52733,52734],{"class":69,"line":186},[67,52735,177],{"emptyLinePlaceholder":176},[67,52737,52738,52740,52742],{"class":69,"line":444},[67,52739,1766],{"class":77},[67,52741,52337],{"class":51837},[67,52743,51844],{"class":77},[67,52745,52746,52748,52750],{"class":69,"line":2335},[67,52747,52681],{"class":77},[67,52749,52350],{"class":51837},[67,52751,51844],{"class":77},[67,52753,52754,52757,52759,52761,52764,52766,52768,52770,52772,52774,52776,52778,52780,52782],{"class":69,"line":2340},[67,52755,52756],{"class":73},"    let",[67,52758,52370],{"class":77},[67,52760,909],{"class":73},[67,52762,52763],{"class":77}," [",[67,52765,1177],{"class":208},[67,52767,13153],{"class":77},[67,52769,1151],{"class":208},[67,52771,13153],{"class":77},[67,52773,933],{"class":208},[67,52775,13153],{"class":77},[67,52777,939],{"class":208},[67,52779,13153],{"class":77},[67,52781,1077],{"class":208},[67,52783,33783],{"class":77},[67,52785,52786,52788,52790,52792,52794,52796,52798,52800,52802,52804,52806,52809,52811,52813,52815],{"class":69,"line":2346},[67,52787,3921],{"class":73},[67,52789,2381],{"class":77},[67,52791,52384],{"class":73},[67,52793,10157],{"class":77},[67,52795,909],{"class":73},[67,52797,4813],{"class":208},[67,52799,10164],{"class":77},[67,52801,1766],{"class":73},[67,52803,52502],{"class":77},[67,52805,52505],{"class":208},[67,52807,52808],{"class":73}," -",[67,52810,25828],{"class":208},[67,52812,3934],{"class":77},[67,52814,3014],{"class":73},[67,52816,13160],{"class":77},[67,52818,52819,52822,52824,52826,52828,52830,52832,52834,52836,52838,52840,52842,52844,52846,52848,52850,52852],{"class":69,"line":2351},[67,52820,52821],{"class":73},"      for",[67,52823,2381],{"class":77},[67,52825,52384],{"class":73},[67,52827,10219],{"class":77},[67,52829,909],{"class":73},[67,52831,4813],{"class":208},[67,52833,10226],{"class":77},[67,52835,1766],{"class":73},[67,52837,52502],{"class":77},[67,52839,52505],{"class":208},[67,52841,52808],{"class":73},[67,52843,10157],{"class":77},[67,52845,1389],{"class":73},[67,52847,25828],{"class":208},[67,52849,10233],{"class":77},[67,52851,3014],{"class":73},[67,52853,13160],{"class":77},[67,52855,52856],{"class":69,"line":2365},[67,52857,52858],{"class":202},"        \u002F\u002F 开始交换,但是前提 第一个数大于第二个数才会进行交换\n",[67,52860,52861,52863,52866,52868,52871,52873,52875],{"class":69,"line":2370},[67,52862,3218],{"class":73},[67,52864,52865],{"class":77}," (arr[j] ",[67,52867,1816],{"class":73},[67,52869,52870],{"class":77}," arr[j ",[67,52872,1338],{"class":73},[67,52874,25828],{"class":208},[67,52876,52877],{"class":77},"]) {\n",[67,52879,52880],{"class":69,"line":2376},[67,52881,52882],{"class":202},"          \u002F\u002F 交换两个变量\n",[67,52884,52885,52888,52891,52893],{"class":69,"line":2397},[67,52886,52887],{"class":73},"          let",[67,52889,52890],{"class":77}," tmp ",[67,52892,909],{"class":73},[67,52894,52895],{"class":77}," arr[j]\n",[67,52897,52898,52901,52903,52905,52907,52909],{"class":69,"line":2402},[67,52899,52900],{"class":77},"          arr[j] ",[67,52902,909],{"class":73},[67,52904,52870],{"class":77},[67,52906,1338],{"class":73},[67,52908,25828],{"class":208},[67,52910,33783],{"class":77},[67,52912,52913,52916,52918,52920,52922,52924],{"class":69,"line":2416},[67,52914,52915],{"class":77},"          arr[j ",[67,52917,1338],{"class":73},[67,52919,25828],{"class":208},[67,52921,5162],{"class":77},[67,52923,909],{"class":73},[67,52925,52926],{"class":77}," tmp\n",[67,52928,52929],{"class":69,"line":2421},[67,52930,3250],{"class":77},[67,52932,52933],{"class":69,"line":2450},[67,52934,52935],{"class":77},"      }\n",[67,52937,52938],{"class":69,"line":2455},[67,52939,2909],{"class":77},[67,52941,52942,52945,52947],{"class":69,"line":2472},[67,52943,52944],{"class":77},"    document.",[67,52946,52465],{"class":112},[67,52948,52949],{"class":77},"(arr)\n",[67,52951,52952,52955,52957],{"class":69,"line":2477},[67,52953,52954],{"class":77},"  \u003C\u002F",[67,52956,52350],{"class":51837},[67,52958,51844],{"class":77},[67,52960,52961,52963,52965],{"class":69,"line":2482},[67,52962,52322],{"class":77},[67,52964,52337],{"class":51837},[67,52966,51844],{"class":77},[67,52968,52969],{"class":69,"line":2487},[67,52970,177],{"emptyLinePlaceholder":176},[67,52972,52973,52975,52977],{"class":69,"line":2501},[67,52974,52322],{"class":77},[67,52976,51172],{"class":51837},[67,52978,51844],{"class":77},[19,52980,52981],{},[725,52982],{"alt":62,"src":52983},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-055.png",[19,52985,52986],{},"实际开发中我们使用的是函数：sort()，默认按照升序",[19,52988,52989],{},"let arr = [4, 2, 5, 1, 3]",[19,52991,52992],{},"\u002F\u002F 1.升序排列写法",[19,52994,52995],{},"arr.sort(function (a, b) {",[19,52997,52998],{},"return a - b",[19,53000,53001],{},"})",[19,53003,53004],{},"console.log(arr) \u002F\u002F [1, 2, 3, 4, 5]",[19,53006,53007],{},"\u002F\u002F 降序排列写法",[19,53009,52995],{},[19,53011,53012],{},"return b - a",[19,53014,53001],{},[19,53016,53017],{},"console.log(arr) \u002F\u002F [5, 4, 3, 2, 1]",[803,53019,53021],{"id":53020},"_29-函数","2.9 函数",[19,53023,53024],{},[725,53025],{"alt":62,"src":53026},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-056.png",[19,53028,53029],{},"（）是调用的意思，为了区分哪个函数，所以前边加上函数名，因此函数的调用：函数名()",[19,53031,53032],{},"函数的声明用function",[19,53034,53035],{},"函数里边可以嵌套函数",[14,53037,53039],{"id":53038},"_291-函数传参","2.9.1 函数传参",[19,53041,53042],{},[725,53043],{"alt":62,"src":53044},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-057.png",[19,53046,53047],{},[725,53048],{"alt":62,"src":53049},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-058.png",[1863,53051,53052,53055,53058,53061,53064,53067],{},[818,53053,53054],{},"形参：声明函数时写在函数名右边小括号里的叫形参（形式上的参数）",[818,53056,53057],{},"实参：调用函数时写在函数名右边小括号里的叫实参（实际上的参数）",[818,53059,53060],{},"形参可以理解为是在这个函数内声明的变量（比如 num1 = 10）实参可以理解为是给这个变量赋值",[818,53062,53063],{},"开发中尽量保持形参和实参个数一致",[818,53065,53066],{},"我们曾经使用过的 alert('打印'), parseInt('11'), Number('11') 本质上都是函数调用的传参",[818,53068,53069],{},"形参只在函数中有用，所以不需要进行声明这个变量",[19,53071,53072],{},"可以给形参初始值，此时函数调用的时候，不放实参这个函数也可以使用，不会报错；默认值只会在缺少实参参数传递时 才会被执行，所以有参数会优先执行传递过来的实参, 否则默认为undefined",[14,53074,53076],{"id":53075},"_292-函数的返回值","2.9.2 函数的返回值",[19,53078,53079],{},[725,53080],{"alt":62,"src":53081},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-059.png",[19,53083,53084],{},[725,53085],{"alt":62,"src":53086},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-060.png",[1863,53088,53089,53092,53095,53098,53101],{},[818,53090,53091],{},"在函数体中使用 return 关键字能将内部的执行结果交给函数外部使用",[818,53093,53094],{},"return 后面代码不会再被执行，会立即结束当前函数，所以 return 后面的数据不要换行写，return要写在函数的最下边",[818,53096,53097],{},"return函数可以没有 return，这种情况函数默认返回值为 undefined",[818,53099,53100],{},"返回多个值时使用数组，让它返回数组，就能将多个值返回",[818,53102,53103],{},"断点调试:进入函数内部看执行过程F11",[14,53105,53107],{"id":53106},"_293-参数个数不同情况","2.9.3 参数个数不同情况",[57,53109,53111],{"className":51170,"code":53110,"language":51172,"meta":62,"style":62},"    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",[64,53112,53113,53118,53123,53127,53132],{"__ignoreMap":62},[67,53114,53115],{"class":69,"line":70},[67,53116,53117],{"class":77},"    function fn(a, b) {\n",[67,53119,53120],{"class":69,"line":143},[67,53121,53122],{"class":77},"      console.log(a + b);\n",[67,53124,53125],{"class":69,"line":149},[67,53126,2909],{"class":77},[67,53128,53129],{"class":69,"line":155},[67,53130,53131],{"class":77},"    fn(1, 2, 3)输出3，最后一个参数没人接，不要\n",[67,53133,53134],{"class":69,"line":161},[67,53135,53136],{"class":77},"    fn(1)输出NaN，第二个值undefined,1+undefined=NaN,计算错误\n",[14,53138,53140],{"id":53139},"_294-作用域","2.9.4 作用域",[1863,53142,53143,53149,53154,53157,53160],{},[818,53144,53145,53146],{},"一段程序代码中所用到的名字并不总是有效和可用的，而限定这个名字的可用性的代码范围就是这个名字的 ",[336,53147,53148],{},"作用域",[818,53150,53151],{},[336,53152,53153],{},"作用域的使用提高了程序逻辑的局部性，增强了程序的可靠性，减少了名字冲突",[818,53155,53156],{},"分为全局作用域和局部作用域；全局作用域的变量叫作全局变量，局部作用域的变量叫作局部变量，也称为函数作用域，函数内部有效",[818,53158,53159],{},"函数内部可以直接所使用全局变量",[818,53161,53162],{},"如果函数内部，变量没有声明，直接赋值，也当全局变量看，但是强烈不推荐，但是需要先调用函数才可以输出函数内部的变量",[19,53164,15350],{},[57,53166,53168],{"className":51170,"code":53167,"language":51172,"meta":62,"style":62},"    function fun() {\n      num = 10\n    }\n    fun()\n    console.log(num)\n   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[64,53169,53170,53175,53180,53184,53189,53194,53199],{"__ignoreMap":62},[67,53171,53172],{"class":69,"line":70},[67,53173,53174],{"class":77},"    function fun() {\n",[67,53176,53177],{"class":69,"line":143},[67,53178,53179],{"class":77},"      num = 10\n",[67,53181,53182],{"class":69,"line":149},[67,53183,2909],{"class":77},[67,53185,53186],{"class":69,"line":155},[67,53187,53188],{"class":77},"    fun()\n",[67,53190,53191],{"class":69,"line":161},[67,53192,53193],{"class":77},"    console.log(num)\n",[67,53195,53196],{"class":69,"line":167},[67,53197,53198],{"class":77},"   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n",[67,53200,53201],{"class":69,"line":173},[67,53202,53203],{"class":77},"   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[1863,53205,53206,53209],{},[818,53207,53208],{},"函数内部的形参可以看做是局部变量",[818,53210,53211],{},"不同作用域变量可以重名；相同作用域变量不可以重名",[19,53213,53214,53215],{},"变量访问原则： ",[336,53216,53217],{},"在能够访问到的情况下 先局部， 局部没有在找全局",[14,53219,53221],{"id":53220},"_295-匿名函数","2.9.5 匿名函数",[19,53223,53224],{},"函数可以分为具名函数和匿名函数",[19,53226,53227],{},"匿名函数是指没有名字的函数，它是无法直接使用的，使用的两种方式：",[815,53229,53230],{},[818,53231,53232],{},"函数表达式",[19,53234,53235],{},[725,53236],{"alt":62,"src":53237},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-061.png",[19,53239,53240],{},"里边也可以写参数",[19,53242,53243],{},"具名函数调用位置可以随意调整；",[19,53245,53246],{},"匿名函数函数表达式形式只能在声明后才可以使用",[815,53248,53249],{"start":143},[818,53250,53251],{},"立即执行函数",[19,53253,53254],{},[725,53255],{"alt":62,"src":53256},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-062.png",[19,53258,53259],{},"直接执行函数，不需要再调用！！！本质它已经调用了",[19,53261,53262],{},"写法：两个小括号，然后在第一个小括号中写function",[19,53264,53265],{},"(function () {})();",[19,53267,53268],{},"不要落下最后的;",[19,53270,53271],{},"立即执行函数必须要加;",[19,53273,53274],{},"分号写前写后都没问题",[19,53276,53277],{},"写前：",[19,53279,53280],{},"(function() {})()",[19,53282,53283],{},";(function () {})();",[19,53285,53286],{},"写后:",[19,53288,53289],{},"(function() {})();",[19,53291,53265],{},[19,53293,53294],{},"可以这样理解：最后一个小括号实质是调用前边的函数，为了保证前边的函数正常进行又给其套了一层括号，最后括号里边的数为实参，function后面的参数为形参",[19,53296,53297],{},"还有一种写法：",[19,53299,53300],{},"(function(){}());",[19,53302,53303],{},"或者:",[19,53305,53306],{},"!function(){}();",[19,53308,53309],{},"立即执行函数有时候也是可以加名字的：",[19,53311,53312],{},"(function flexible(window,document) {}(window,document));",[19,53314,53315],{},"省一些调用方法",[14,53317,53319],{"id":53318},"_296-逻辑中断","2.9.6 逻辑中断!!!",[19,53321,53322],{},[725,53323],{"alt":62,"src":53324},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-063.png",[19,53326,53327],{},"这样就不用非得给x,y初始化了",[19,53329,53330],{},[725,53331],{"alt":62,"src":53332},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-064.png",[19,53334,53335],{},"代码执行时先看左边",[19,53337,53338],{},"例如：console.log(false && 3+5)",[19,53340,53341],{},"&&逻辑与遇假则假，当执行左边为假时就不执行右边了，所以输出false",[19,53343,53344],{},"&&都是真时，就返回最后一个真值",[19,53346,53347],{},"console.log(11 && 22)",[19,53349,53350],{},"输出22",[19,53352,53353],{},"逻辑与：遇真则真",[19,53355,15350],{},[19,53357,53358],{},"let age=1",[19,53360,53361],{},"console.log(11 || age++)",[19,53363,53364],{},"不执行后边的age++，先执行左边11为真，就是真，就直接结束语句了，输出11",[19,53366,53367],{},"console.log(11 || 22)",[19,53369,53370],{},"||逻辑或遇到真就直接输出，输出结果为11",[19,53372,53373],{},"||如果都是假的话，就取最后一个假的值了",[14,53375,53377],{"id":53376},"_297-转换为boolean型","2.9.7 转换为Boolean型",[19,53379,53380],{},"显示转换：",[19,53382,53383,53386,53387],{},[336,53384,53385],{},"记忆","： ",[336,53388,53389],{},"‘’ 、0、undefined、null、false、NaN 转换为布尔值后都是false, 其余则为 true",[19,53391,53392],{},"空字符串为假，其他字符串全为真",[19,53394,53395],{},[725,53396],{"alt":62,"src":53397},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-065.png",[19,53399,53400],{},"隐式转换：",[19,53402,53403],{},[725,53404],{"alt":62,"src":53405},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-066.png",[19,53407,53408],{},"隐式转换:",[19,53410,53411],{},"null+3=3",[19,53413,53414],{},"undefined+3=NaN",[19,53416,53417],{},"null==undefined 输出true,他两个都当0看",[19,53419,53420],{},"null===undefined 输出false",[19,53422,53423],{},"undefined做任何操作都是NaN",[19,53425,53426],{},"NaN不等于NaN，NaN表示计算错误",[803,53428,53430],{"id":53429},"_210-对象","2.10 对象",[14,53432,53434],{"id":53433},"_2101-对象的介绍","2.10.1 对象的介绍",[19,53436,53437],{},"对象也是一种数据类型，里边的数据是无序的",[19,53439,53440],{},"对象由属性和方法组成",[19,53442,53443],{},[725,53444],{"alt":62,"src":53445},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-067.png",[19,53447,53448],{},[725,53449],{"alt":62,"src":53450},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-068.png",[19,53452,53453],{},[725,53454],{"alt":62,"src":53455},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-069.png",[14,53457,53459],{"id":53458},"_2102-对象属性","2.10.2 对象属性",[19,53461,53462],{},[725,53463],{"alt":62,"src":53464},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-070.png",[815,53466,53467],{},[818,53468,53469],{},"查询对象",[19,53471,53472],{},"对象名.属性 goods.uname",[19,53474,53475],{},"属性名中带有字符串时采用：对象名['属性名'] goods['uname']",[19,53477,53478],{},"不带字符串的属性名也可以使用 对象名['属性名']",[19,53480,53481],{},"[]语法里面的值如果不添加引号 默认会当成变量解析",[19,53483,53484],{},"总结：点后面的属性名一定不要加引号；[] 里面的属性名一定加引号(单引双引都🆗)",[815,53486,53487],{"start":143},[818,53488,53489],{},"重新赋值",[19,53491,53492],{},"对象名.属性=新值",[815,53494,53495],{"start":149},[818,53496,53497],{},"增加新数据",[19,53499,53492],{},[815,53501,53502],{"start":155},[818,53503,53504],{},"删除对象中的属性",[19,53506,53507],{},"delete 对象名.属性",[14,53509,53511],{"id":53510},"_2103-对象方法","2.10.3 对象方法",[19,53513,53514],{},[725,53515],{"alt":62,"src":53516},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-071.png",[19,53518,53519],{},"后边跟的是匿名函数",[19,53521,53522],{},"对象外面的叫函数；对象内部的叫方法",[19,53524,53525],{},[725,53526],{"alt":62,"src":53527},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-072.png",[14,53529,53531],{"id":53530},"_2104-遍历对象","2.10.4 遍历对象",[19,53533,53534],{},"理解为加括号的python字典遍历",[19,53536,53537],{},[725,53538],{"alt":62,"src":53539},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-073.png",[19,53541,53542],{},"k是字符串类型",[19,53544,53545],{},"用for in可以实现对数组的遍历工作，但是k为字符串，我们在遍历的时候需要用到数组的下标，下表是数组字面量，不应该为字符串，所以我们不要使用for in来遍历字典，正常for循环遍历就可以",[57,53547,53549],{"className":51170,"code":53548,"language":51172,"meta":62,"style":62},"   let arr = [1, 2, 3]\n    for (let k in arr) {\n      console.log(k)\n      console.log(arr[k])\n    }\n",[64,53550,53551,53556,53561,53566,53571],{"__ignoreMap":62},[67,53552,53553],{"class":69,"line":70},[67,53554,53555],{"class":77},"   let arr = [1, 2, 3]\n",[67,53557,53558],{"class":69,"line":143},[67,53559,53560],{"class":77},"    for (let k in arr) {\n",[67,53562,53563],{"class":69,"line":149},[67,53564,53565],{"class":77},"      console.log(k)\n",[67,53567,53568],{"class":69,"line":155},[67,53569,53570],{"class":77},"      console.log(arr[k])\n",[67,53572,53573],{"class":69,"line":161},[67,53574,2909],{"class":77},[19,53576,53577],{},[725,53578],{"alt":62,"src":53579},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-074.png",[19,53581,53582],{},"数字型控制台输出颜色偏蓝，字符串型控制台打印是黑色的",[19,53584,53585],{},"for in 用来遍历对象 k这个写啥也行，习惯使用key或k",[19,53587,53588],{},"for in 得到的k是属性名",[52350,53590,53591],{},"\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,53593,53594],{},"k是字符串，不可以进行pink.k，这是不对的，k是带引号的属性名，点k的话，对象中就没有这个属性名了，所以得到的是undefined，无法准确遍历",[14,53596,53598],{"id":53597},"_2105-遍历数组对象","2.10.5 遍历数组对象、",[19,53600,53601],{},"数组中放对象信息",[57,53603,53607],{"className":53604,"code":53605,"language":53606,"meta":62,"style":62},"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",[64,53608,53609,53617,53622,53627,53632,53637,53642,53647,53652,53657,53662,53667,53672,53676,53680],{"__ignoreMap":62},[67,53610,53611,53613,53615],{"class":69,"line":70},[67,53612,1766],{"class":77},[67,53614,52350],{"class":51837},[67,53616,51844],{"class":77},[67,53618,53619],{"class":69,"line":143},[67,53620,53621],{"class":77},"    let students = [\n",[67,53623,53624],{"class":69,"line":149},[67,53625,53626],{"class":77},"      { name: '小明', age: 18, gender: '男', hometown: '河北省' },\n",[67,53628,53629],{"class":69,"line":155},[67,53630,53631],{"class":77},"      { name: '小红', age: 19, gender: '女', hometown: '河南省' },\n",[67,53633,53634],{"class":69,"line":161},[67,53635,53636],{"class":77},"      { name: '小刚', age: 17, gender: '男', hometown: '山西省' },\n",[67,53638,53639],{"class":69,"line":167},[67,53640,53641],{"class":77},"      { name: '小丽', age: 18, gender: '女', hometown: '山东省' }\n",[67,53643,53644],{"class":69,"line":173},[67,53645,53646],{"class":77},"    ]\n",[67,53648,53649],{"class":69,"line":180},[67,53650,53651],{"class":77},"    for (let i = 0; i \u003C students.length; i++) {\n",[67,53653,53654],{"class":69,"line":186},[67,53655,53656],{"class":77},"      for (let k in students[i]) {\n",[67,53658,53659],{"class":69,"line":444},[67,53660,53661],{"class":77},"        console.log(`输出第${i + 1}个同学的${k}:${students[i][k]}`)\n",[67,53663,53664],{"class":69,"line":2335},[67,53665,53666],{"class":77},"        \u002F\u002F输出每个人的名字：\n",[67,53668,53669],{"class":69,"line":2340},[67,53670,53671],{"class":77},"        \u002F\u002Fconsole.log(students[i].name)\n",[67,53673,53674],{"class":69,"line":2346},[67,53675,52935],{"class":77},[67,53677,53678],{"class":69,"line":2351},[67,53679,2909],{"class":77},[67,53681,53682,53684,53686],{"class":69,"line":2365},[67,53683,52954],{"class":77},[67,53685,52350],{"class":51837},[67,53687,51844],{"class":77},[14,53689,53691],{"id":53690},"_2106-内置对象","2.10.6 内置对象",[19,53693,53694],{},"JavaScript内部提供的对象，包含各种属性和方法给开发者调用，例如document.write()",[815,53696,53697],{},[818,53698,53699],{},"数学对象Math",[19,53701,53702],{},[725,53703],{"alt":62,"src":53704},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-075.png",[19,53706,53707],{},[28,53708,53711],{"href":53709,"rel":53710},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FMath",[32],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FMath",[19,53713,53714],{},"联想：parseInt转换为整数型，与floor相似，输入小数的数字，只取最小值",[19,53716,53717],{},"两者区别是parseInt可以传入字符串，会去掉后边的字符串，只留前边的数字",[19,53719,53720],{},"数组不可以使用Math中的max,min来求最大值与最小值",[19,53722,53723],{},"null是一个空对象，可以认为：null类似于let obj={}",[19,53725,53726],{},"null属于对象数据类型",[815,53728,53729],{"start":143},[818,53730,53731],{},"生成任意范围随机数",[19,53733,53734],{},[725,53735],{"alt":62,"src":53736},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-076.png",[19,53738,53739],{},"这里加1是想取到右边的部分，因为它是左闭右开，第一个是[0,11），永远取不到11",[19,53741,53742],{},"乘以几就取不到几",[19,53744,53745],{},"取数组中的随机元素：",[19,53747,53748],{},"let arr = ['red', 'green', 'blue']",[19,53750,53751],{},"let random = Math.floor(Math.random() * arr.length)",[19,53753,53754],{},"console.log(arr[random])",[19,53756,53757],{},"这个函数得到的是全闭区间",[19,53759,53760],{},"function getRandom(N, M) {",[19,53762,53763],{},"return Math.floor(Math.random() * (M - N + 1)) + N",[19,53765,1802],{},[19,53767,53768],{},"console.log(getRandom(4, 8))",[14,53770,53772],{"id":53771},"_2107-基本数据类型和引用数据类型","2.10.7 基本数据类型和引用数据类型",[19,53774,53775],{},[725,53776],{"alt":62,"src":53777},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-077.png",[19,53779,53780],{},[725,53781],{"alt":62,"src":53782},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-078.png",[19,53784,53785],{},[725,53786],{"alt":62,"src":53787},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-079.png",[19,53789,53790],{},"简单数据类型是直接把值放在了栈中，复杂数据类型是将值的地址放在栈中，值放在堆中，通过地址得到存放的内容",[19,53792,53793],{},[725,53794],{"alt":62,"src":53795},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-080.png",[19,53797,53798],{},[725,53799],{"alt":62,"src":53800},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-081.png",[19,53802,53803],{},"所有复杂数据类型都存放在堆中，将它内容的地址存放在栈中",[19,53805,53806],{},"简单数据类型是深拷贝，复杂数据类型是浅拷贝",[19,53808,53809],{},"js实际是没有堆栈的，这里是为了方便理解，在ts中有堆栈，ts与js百分之80是相同的",[779,53811,53812],{},"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":62,"searchDepth":143,"depth":143,"links":53814},[53815,53823,53824,53825,53826,53827,53834,53838,53844,53853],{"id":51005,"depth":143,"text":51006,"children":53816},[53817,53818,53819,53820,53821,53822],{"id":51009,"depth":149,"text":51010},{"id":51026,"depth":149,"text":51027},{"id":51066,"depth":149,"text":51067},{"id":51078,"depth":149,"text":51079},{"id":51087,"depth":149,"text":51088},{"id":51135,"depth":149,"text":51136},{"id":51145,"depth":143,"text":51146},{"id":51233,"depth":143,"text":51234},{"id":51256,"depth":143,"text":51257},{"id":51268,"depth":143,"text":51269},{"id":51455,"depth":143,"text":51456,"children":53828},[53829,53830,53831,53832,53833],{"id":51459,"depth":149,"text":51460},{"id":51468,"depth":149,"text":51469},{"id":51496,"depth":149,"text":51497},{"id":51532,"depth":149,"text":51533},{"id":51557,"depth":149,"text":51558},{"id":51569,"depth":143,"text":51570,"children":53835},[53836,53837],{"id":51590,"depth":149,"text":51591},{"id":51684,"depth":149,"text":51685},{"id":51742,"depth":143,"text":51743,"children":53839},[53840,53841,53842,53843],{"id":51746,"depth":149,"text":51747},{"id":51770,"depth":149,"text":51771},{"id":51823,"depth":149,"text":51824},{"id":52634,"depth":149,"text":52635},{"id":53020,"depth":143,"text":53021,"children":53845},[53846,53847,53848,53849,53850,53851,53852],{"id":53038,"depth":149,"text":53039},{"id":53075,"depth":149,"text":53076},{"id":53106,"depth":149,"text":53107},{"id":53139,"depth":149,"text":53140},{"id":53220,"depth":149,"text":53221},{"id":53318,"depth":149,"text":53319},{"id":53376,"depth":149,"text":53377},{"id":53429,"depth":143,"text":53430,"children":53854},[53855,53856,53857,53858,53859,53860,53861],{"id":53433,"depth":149,"text":53434},{"id":53458,"depth":149,"text":53459},{"id":53510,"depth":149,"text":53511},{"id":53530,"depth":149,"text":53531},{"id":53597,"depth":149,"text":53598},{"id":53690,"depth":149,"text":53691},{"id":53771,"depth":149,"text":53772},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch2",{"title":50997,"description":24093},"wiki\u002F2025-09-02-JS学习\u002Fch2-基础语法","rK6tHUmvUvisqc9Yrr_XipbUmuD7o7U3t6tcvliyB7c",{"id":53868,"title":53869,"body":53870,"description":24093,"extension":787,"meta":77210,"navigation":176,"path":77211,"seo":77212,"stem":77213,"__hash__":77214},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs.md","3.Web APIs",{"type":7,"value":53871,"toc":77150},[53872,53875,53878,53881,53886,53889,53892,53895,53899,53903,53909,53914,53922,53929,53932,53936,53941,53946,53951,53954,53957,53968,53971,53975,53978,53981,53986,53991,53996,53999,54002,54094,54097,54102,54105,54110,54113,54116,54121,54124,54129,54133,54136,54150,54154,54159,54162,54165,54169,54174,54177,54181,54185,54190,54194,54199,54202,54205,54208,54211,54214,54217,54222,54227,54255,54258,54261,54264,54269,54272,54275,54278,54281,54285,54314,54318,54323,54328,54331,54334,54337,54342,54457,54462,54467,54628,54633,54636,54640,54645,54650,54653,54656,54659,54662,54665,54668,54671,54674,54677,54680,54683,54686,54689,54692,54694,54697,54700,54703,54708,54712,55109,55112,55118,55122,55127,56409,56414,56417,56420,56423,56428,57624,57628,57634,57639,57642,57647,57652,57656,57660,57665,57668,57673,57676,57679,57683,58591,58594,58598,58819,58822,58825,58828,59054,59057,59281,59284,59288,59293,59296,59299,59527,59530,59563,59566,59570,59575,59579,59582,59585,59588,59591,59594,59597,59600,59605,60885,60889,60892,61985,61989,61992,61995,61998,62001,62005,62008,62011,62013,62021,63502,63506,63509,63512,63515,63724,63727,63731,63735,63740,63745,63748,63751,63756,63760,63765,63768,63877,63881,63886,63891,63894,63897,63901,63906,63911,63916,63919,63922,63933,63936,63941,63946,63949,63952,64025,64029,64034,64037,64039,64050,64054,64059,65385,65388,65391,65394,65396,65399,65402,65405,65408,65411,65414,65417,65420,65423,65426,65429,65432,65434,65436,65439,65443,66537,66540,66543,66559,66573,66576,66581,66587,66592,66596,66600,66605,66609,66614,67056,67061,67064,67068,67073,67076,67079,67083,67088,67092,67097,67102,67106,67111,67116,67119,67124,67129,67133,67138,67143,67247,67250,67254,67259,67625,67628,67631,67634,67637,67640,67643,67646,67649,68945,68949,68954,68959,68962,68965,68968,68971,68973,68978,68983,68986,68990,68995,69000,69005,69008,69011,69014,69017,69020,69025,69028,69032,69037,69042,69046,69051,69054,69059,69062,69065,69068,69071,69074,69079,69082,69085,69088,69091,69095,69100,69103,69107,69112,69115,69118,69122,69151,69154,69158,69162,69167,69171,69176,69179,69182,69185,69188,69191,69194,69197,69200,69203,69206,69209,69212,69215,69218,69222,69227,69232,69235,69239,69243,69248,69251,69255,69258,69261,69266,69271,69276,69281,69286,69289,69292,69297,69302,69306,69311,69314,69319,69322,69325,69328,69331,69336,69339,69348,69352,69357,69360,69363,69367,69370,69375,69379,69382,69388,69394,69398,69424,69427,70988,70991,71487,71490,71495,71500,71505,71509,71514,71519,71524,71528,71533,71536,71539,71542,71545,71549,71552,71557,71560,71565,71569,71574,71577,71582,71587,71592,71595,71598,71603,71608,71611,71614,71618,71621,71626,71629,71634,71637,71642,71647,71652,71655,71660,71725,71728,71739,71743,71748,71920,71924,71929,71932,71935,71938,71942,71953,71957,71960,71965,71970,71973,71976,71979,71982,71985,71987,71990,71993,71996,72001,72004,72009,72012,72016,72019,72022,72036,72040,72043,72098,72103,72106,72109,72114,72117,72121,72126,72256,72260,72265,72270,72351,72356,72360,72363,72368,72373,72379,72382,72385,72388,72392,72397,72400,72411,72415,72432,75479,75483,75486,75489,75492,75513,75517,75520,75528,75531,75536,75539,75542,75547,75552,75556,75577,75581,75586,75589,75592,75595,75598,75602,75607,75610,75614,75619,75622,75627,75630,75635,75638,75643,76846,76850,76855,76858,76863,77147],[10,53873,53869],{"id":53874},"_3web-apis",[19,53876,53877],{},"尽量使用const，因为绝大多数定义的变量基本上它的值都不会再改变",[19,53879,53880],{},"实际开发中的思路：有了变量先给const，如果发现它后面是要被修改的，再改为let",[19,53882,53883],{},[725,53884],{"alt":62,"src":53885},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-082.png",[19,53887,53888],{},"此时arr.push(3),给数组添加新的元素，这个元素加添加到堆中了，地址还是那个地址，因此这里的使用const来声明是没有问题的。如果此时接着写arr=[4,5,6]，此时这个就是一个新的数组，存到堆中的位置与之前那个是不同的，在栈中存了新地址，所以此时就会报错，就是不对的，如果想这样干，只能使用let来声明变量。const声明的是常量",[19,53890,53891],{},"建议数组和对象使用 const 来声明",[19,53893,53894],{},"Web APIs分为DoM(页面文档对象模型)和BoM(浏览器对象模型)",[803,53896,53898],{"id":53897},"_31-dom文档对象模型","3.1 Dom(文档对象模型)",[14,53900,53902],{"id":53901},"非常重要window是整个窗口html是dom树的根节点document代表了整个html中所有内容代表整个html页面dom树","非常重要：window是整个窗口；html是DOM树的根节点；document代表了整个html中所有内容，代表整个HTML页面（DOM树）",[19,53904,53905,53908],{},[64,53906,53907],{},"document"," = HTML 文件解析后的对象化表示；",[19,53910,53911,53913],{},[64,53912,53907],{}," ≠ HTML 文件本身",[19,53915,53916,53921],{},[336,53917,53918],{},[64,53919,53920],{},"window"," = 窗口对象，代表浏览器的这个标签页\u002F容器",[19,53923,53924,53928],{},[336,53925,53926],{},[64,53927,53907],{}," ：容器里的内容，代表当前加载的网页（DOM）",[19,53930,53931],{},"document实际上为window.document的简写",[14,53933,53935],{"id":53934},"_311-关于dom的基础知识","3.1.1 关于DoM的基础知识",[19,53937,53938],{},[725,53939],{"alt":62,"src":53940},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-083.png",[19,53942,53943],{},[725,53944],{"alt":62,"src":53945},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-084.png",[19,53947,53948],{},[725,53949],{"alt":62,"src":53950},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-085.png",[19,53952,53953],{},"console.dir()",[19,53955,53956],{},"dir用来打印对象",[1863,53958,53959,53962,53965],{},[818,53960,53961],{},"任何一个标签，都是一个对象",[818,53963,53964],{},"也就是说这些标签在HTML中就是一个标签，但是在js的DoM中从HTML获取过来就是对象，叫作DoM对象",[818,53966,53967],{},"在DoM中最大的对象是document对象，它提供的方法是用来访问和操作网页内容的，document是整个网页中最大的对象，它存放了页面的所有元素！",[19,53969,53970],{},"DoM对象可以理解为就是标签元素，在html中就是标签，修饰的时候使用的是css，在js中就是对象，通过对对象的属性进行修改来实现对标签的修饰",[14,53972,53974],{"id":53973},"_312-获取dom对象","3.1.2 获取DoM对象",[19,53976,53977],{},"css是通过选择器的方式来获取标签，对标签的样式进行修饰的",[19,53979,53980],{},"获取DoM元素现在主要是通过css选择器的方式来获取，必须牢记这一方法！！！",[19,53982,53983],{},[336,53984,53985],{},"查找元素DOM元素就是利用 JS 选择页面中标签元素",[815,53987,53988],{},[818,53989,53990],{},"利用CSS选择器来获取标签元素",[19,53992,53993],{},[725,53994],{"alt":62,"src":53995},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-086.png",[19,53997,53998],{},"里边的选择器必须必须加引号！！！",[19,54000,54001],{},"只选择第一个元素",[57,54003,54005],{"className":53604,"code":54004,"language":53606,"meta":62,"style":62},"\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",[64,54006,54007,54015,54036,54055,54063,54068,54073,54078,54086],{"__ignoreMap":62},[67,54008,54009,54011,54013],{"class":69,"line":70},[67,54010,1766],{"class":77},[67,54012,52337],{"class":51837},[67,54014,51844],{"class":77},[67,54016,54017,54019,54021,54024,54026,54029,54032,54034],{"class":69,"line":143},[67,54018,52681],{"class":77},[67,54020,52148],{"class":51837},[67,54022,54023],{"class":112}," class",[67,54025,909],{"class":77},[67,54027,54028],{"class":84},"\"box\"",[67,54030,54031],{"class":77},">123\u003C\u002F",[67,54033,52148],{"class":51837},[67,54035,51844],{"class":77},[67,54037,54038,54040,54042,54044,54046,54048,54051,54053],{"class":69,"line":149},[67,54039,52681],{"class":77},[67,54041,52148],{"class":51837},[67,54043,54023],{"class":112},[67,54045,909],{"class":77},[67,54047,54028],{"class":84},[67,54049,54050],{"class":77},">456\u003C\u002F",[67,54052,52148],{"class":51837},[67,54054,51844],{"class":77},[67,54056,54057,54059,54061],{"class":69,"line":155},[67,54058,52681],{"class":77},[67,54060,52350],{"class":51837},[67,54062,51844],{"class":77},[67,54064,54065],{"class":69,"line":161},[67,54066,54067],{"class":77},"    \u002F\u002F 1.获取匹配的第一个元素\n",[67,54069,54070],{"class":69,"line":167},[67,54071,54072],{"class":77},"    const box = document.querySelector('div')\n",[67,54074,54075],{"class":69,"line":173},[67,54076,54077],{"class":77},"    console.dir(box)\n",[67,54079,54080,54082,54084],{"class":69,"line":180},[67,54081,52954],{"class":77},[67,54083,52350],{"class":51837},[67,54085,51844],{"class":77},[67,54087,54088,54090,54092],{"class":69,"line":186},[67,54089,52322],{"class":77},[67,54091,52337],{"class":51837},[67,54093,51844],{"class":77},[19,54095,54096],{},"只选123，不选456",[19,54098,54099],{},[725,54100],{"alt":62,"src":54101},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-087.png",[19,54103,54104],{},"返回的是一个数组的集合，不能对其进行直接修改",[19,54106,54107],{},[725,54108],{"alt":62,"src":54109},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-088.png",[19,54111,54112],{},"单个标签也可以使用querySelectAll()来获取，直接通过索引号就可以使用这个元素",[19,54114,54115],{},"querySelect()的调用对象是它的父亲，并不一定用document来进行调用",[815,54117,54118],{"start":143},[818,54119,54120],{},"其他方法来获取标签元素",[19,54122,54123],{},"不要使用，还是使用css法获取DoM的元素的方法就行，下面的方法认识就ok",[19,54125,54126],{},[725,54127],{"alt":62,"src":54128},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-089.png",[14,54130,54132],{"id":54131},"_313-操作元素的内容","3.1.3 操作元素的内容",[19,54134,54135],{},"设置修改DOM元素内容有两种方式：",[1863,54137,54138,54141,54144,54147],{},[818,54139,54140],{},"元素.innerText=''",[818,54142,54143],{},"元素.innerHTML=''",[818,54145,54146],{},"不写字符串输出数字也是可以的",[818,54148,54149],{},"元素.innerHtml=1",[40,54151,54153],{"id":54152},"_3131-innertext","3.1.3.1 innerText",[19,54155,54156],{},[725,54157],{"alt":62,"src":54158},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-090.png",[19,54160,54161],{},"思路：实现了修改盒子中的内容！",[19,54163,54164],{},"它只显示纯文本，不解析标签",[40,54166,54168],{"id":54167},"_3132-innerhtml","3.1.3.2 innerHTML",[19,54170,54171],{},[725,54172],{"alt":62,"src":54173},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-091.png",[19,54175,54176],{},"相比于innerText，他的强大之处在于可以解析标签",[14,54178,54180],{"id":54179},"_314-操作元素属性","3.1.4 操作元素属性",[40,54182,54184],{"id":54183},"_3141-操作元素常用属性","3.1.4.1 操作元素常用属性",[19,54186,54187],{},[725,54188],{"alt":62,"src":54189},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-092.png",[40,54191,54193],{"id":54192},"_3142-操作元素样式属性","3.1.4.2 操作元素样式属性",[19,54195,54196],{},[725,54197],{"alt":62,"src":54198},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-093.png",[19,54200,54201],{},"后边跟的是字符串，必须加引号，然后单位也不要忘记",[19,54203,54204],{},"div.style.backgroundColor = 'hotpink'",[19,54206,54207],{},"如果按照css的写法，-表示减，就会出错",[19,54209,54210],{},"body元素不需要再获取，直接用就行！！！！！！",[19,54212,54213],{},"如果使用的是body标签，它是网页写标签部分的唯一标签，所以对body来说可以不用获取他的DOM对象，直接使用document.body.style来进行修改样式",[19,54215,54216],{},"通过该方式来修改css样式，解析之后生成的是行内样式，行内样式的权重高于内部样式，权重非常高，所以可以覆盖原有样式",[19,54218,54219],{},[725,54220],{"alt":62,"src":54221},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-094.png",[19,54223,54224],{},[725,54225],{"alt":62,"src":54226},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-095.png",[815,54228,54229,54232,54235,54238,54241,54244],{},[818,54230,54231],{},"className这个方式就是修改很多样式的时候来使用的！",[818,54233,54234],{},"常常用于一个动作特效，比如轮播图点下边按钮才动",[818,54236,54237],{},"这个只能添加类名，前边已经有classNmae，就不需要加点了，只写类名就ok!",[818,54239,54240],{},"className为属性名，如果还用class的话就导致与关键字冲突",[818,54242,54243],{},"通过操作类名来修改css时，一定要看看这个标签是否原本就有类名，如果不要之前的样式，写上div.classNmae=‘box’后会覆盖之前的nav，就是给对象中的属性改值了，就是如果要的话就写成div.className='nav box'",[818,54245,54246,54247,54252],{},"解析标签的时候就变为了",[52148,54248],{"className":54249},[54250,54251],"nav","box",[54253,54254],"br",{},[19,54256,54257],{},"例子：",[52148,54259],{"className":54260},[54250],[52350,54262,54263],{},"\n\nconst div = document.querySelector('div')\n\ndiv.className = 'box'\n\n",[19,54265,54266],{},[725,54267],{"alt":62,"src":54268},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-096.png",[19,54270,54271],{},"追加和删除类名用classList",[19,54273,54274],{},"常用于类似于开关的操作",[19,54276,54277],{},"toggle,切换一个类名意思就是：有就删掉，没有就加上（指的是盒子中是否有这个类名，不是说css中有没有这个类名，css中肯定得写类名的，不写那还要操作类控制css干嘛）",[19,54279,54280],{},"4.classList.contains()看看有没有包含某个类，如果有则返回true，没有则返回false",[40,54282,54284],{"id":54283},"_3143-牢记点","3.1.4.3 牢记点",[815,54286,54287,54290,54293,54296,54299,54302,54305,54308,54311],{},[818,54288,54289],{},"获取对象时在不忘记双引号的同时加上类选择器前的.；id选择器前的#",[818,54291,54292],{},"使用style属性操作css时不要忘记引号",[818,54294,54295],{},"使用className或者classList时也不要忘记引号",[818,54297,54298],{},"修改标签内容，也就是获取后的对象（浏览器根据html生成的js对象），通过innerText和innerHTML来实现，只不过innerText不能识别标签，innerHTML可以识别标签",[818,54300,54301],{},"获取后的标签就是一个对象，其中包含了非常多的属性值和方法，const xxx=document.querySelector('.nav')，这个xxx就是一个常量，起啥名也行，一般写成这个盒子的名或者原有类名，赋值给这个常量后，就变成对象，className等就是这个类（元素）下的方法",[818,54303,54304],{},"body就这么一个元素，所以可以对它不获取，来xiu'ga",[818,54306,54307],{},"若： let arr=['1','2',3] arr[0]=1",[818,54309,54310],{},"如果一个对象第一个属性值为‘1’，则获取该对象的属性值就是这个1",[818,54312,54313],{},"上述说明了输出对象和数组中字符串的时候是不带引号的，在修改对象属性值的时候必须加字符串必须加引号，不然中文会报错，计算机不会认为这是字符串，但是将这个字符串对应的数组加下标的方式给他，就不要加字符串了，它本身就是字符串呀这个元素",[14,54315,54317],{"id":54316},"_315-操作表单元素","3.1.5 操作表单元素",[815,54319,54320],{},[818,54321,54322],{},"天生的属性",[19,54324,54325],{},[725,54326],{"alt":62,"src":54327},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-097.png",[19,54329,54330],{},"innerHTML可以得到元素的内容 username.innerHTML,但是仅限于普通元素，表单不是通过它来进行获取的，得到表单内容用value,但是button比较特殊,它是双标签,要使用.innerHTML来获取,使用.value是无法获取的",[19,54332,54333],{},"console.log(username.innerHTML) 获取一般元素的值，对表单元素来说输出的是空，啥也没有，无法读取内容，修改内容是 username.innerHTML='修改的值'",[19,54335,54336],{},"console.log(username.value) 获取表单值 修改表单元素的值：username.value='修改的值'",[19,54338,54339],{},[725,54340],{"alt":62,"src":54341},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-098.png",[57,54343,54345],{"className":51170,"code":54344,"language":51172,"meta":62,"style":62},"在复选框中如果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",[64,54346,54347,54352,54384,54389,54394,54399,54404,54408,54413,54418,54435,54447,54452],{"__ignoreMap":62},[67,54348,54349],{"class":69,"line":70},[67,54350,54351],{"class":77},"在复选框中如果checked='checked',则可以在表单元素中只写一个checked\n",[67,54353,54354,54356,54359,54362,54364,54367,54369,54371,54373,54375,54377,54379,54382],{"class":69,"line":143},[67,54355,1766],{"class":77},[67,54357,54358],{"class":51837},"input",[67,54360,54361],{"class":112}," type",[67,54363,909],{"class":77},[67,54365,54366],{"class":84},"\"checkbox\"",[67,54368,15637],{"class":112},[67,54370,909],{"class":77},[67,54372,8371],{"class":84},[67,54374,15676],{"class":112},[67,54376,909],{"class":77},[67,54378,8371],{"class":84},[67,54380,54381],{"class":112}," checked",[67,54383,51844],{"class":77},[67,54385,54386],{"class":69,"line":149},[67,54387,54388],{"class":77},"不选的话：\n",[67,54390,54391],{"class":69,"line":155},[67,54392,54393],{"class":77},"const input = document.querySelector('input')\n",[67,54395,54396],{"class":69,"line":161},[67,54397,54398],{"class":77},"input.checked=false\n",[67,54400,54401],{"class":69,"line":167},[67,54402,54403],{"class":77},"这里写'true'也对，但是不要这样写，字符串只有空时为假，这里有隐式转换，就正常写布尔值就行\n",[67,54405,54406],{"class":69,"line":173},[67,54407,177],{"emptyLinePlaceholder":176},[67,54409,54410],{"class":69,"line":180},[67,54411,54412],{"class":77},"禁用按钮：\n",[67,54414,54415],{"class":69,"line":186},[67,54416,54417],{"class":77},"它的属性值disabled='disabled'这样可以进行，属性与值相等，就只写一个属性值就行\n",[67,54419,54420,54422,54425,54428,54431,54433],{"class":69,"line":444},[67,54421,1766],{"class":77},[67,54423,54424],{"class":51837},"button",[67,54426,54427],{"class":112}," disabled",[67,54429,54430],{"class":77},">点击\u003C\u002F",[67,54432,54424],{"class":51837},[67,54434,51844],{"class":77},[67,54436,54437,54439,54441,54443,54445],{"class":69,"line":2335},[67,54438,1766],{"class":77},[67,54440,54424],{"class":51837},[67,54442,54430],{"class":77},[67,54444,54424],{"class":51837},[67,54446,51844],{"class":77},[67,54448,54449],{"class":69,"line":2340},[67,54450,54451],{"class":77},"const bt = document.querySelector('button')\n",[67,54453,54454],{"class":69,"line":2346},[67,54455,54456],{"class":77},"bt.disabled = false\n",[815,54458,54459],{"start":143},[818,54460,54461],{},"自定义属性",[19,54463,54464],{},[725,54465],{"alt":62,"src":54466},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-099.png",[57,54468,54470],{"className":53604,"code":54469,"language":53606,"meta":62,"style":62},"\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",[64,54471,54472,54480,54508,54527,54546,54565,54584,54592,54597,54602,54607,54612,54620],{"__ignoreMap":62},[67,54473,54474,54476,54478],{"class":69,"line":70},[67,54475,1766],{"class":77},[67,54477,52337],{"class":51837},[67,54479,51844],{"class":77},[67,54481,54482,54484,54486,54489,54491,54493,54496,54498,54501,54504,54506],{"class":69,"line":143},[67,54483,52681],{"class":77},[67,54485,52148],{"class":51837},[67,54487,54488],{"class":112}," data-id",[67,54490,909],{"class":77},[67,54492,4398],{"class":84},[67,54494,54495],{"class":112}," data-spm",[67,54497,909],{"class":77},[67,54499,54500],{"class":84},"\"我不知道\"",[67,54502,54503],{"class":77},">1\u003C\u002F",[67,54505,52148],{"class":51837},[67,54507,51844],{"class":77},[67,54509,54510,54512,54514,54516,54518,54520,54523,54525],{"class":69,"line":149},[67,54511,52681],{"class":77},[67,54513,52148],{"class":51837},[67,54515,54488],{"class":112},[67,54517,909],{"class":77},[67,54519,4421],{"class":84},[67,54521,54522],{"class":77},">2\u003C\u002F",[67,54524,52148],{"class":51837},[67,54526,51844],{"class":77},[67,54528,54529,54531,54533,54535,54537,54539,54542,54544],{"class":69,"line":155},[67,54530,52681],{"class":77},[67,54532,52148],{"class":51837},[67,54534,54488],{"class":112},[67,54536,909],{"class":77},[67,54538,4434],{"class":84},[67,54540,54541],{"class":77},">3\u003C\u002F",[67,54543,52148],{"class":51837},[67,54545,51844],{"class":77},[67,54547,54548,54550,54552,54554,54556,54558,54561,54563],{"class":69,"line":161},[67,54549,52681],{"class":77},[67,54551,52148],{"class":51837},[67,54553,54488],{"class":112},[67,54555,909],{"class":77},[67,54557,4447],{"class":84},[67,54559,54560],{"class":77},">4\u003C\u002F",[67,54562,52148],{"class":51837},[67,54564,51844],{"class":77},[67,54566,54567,54569,54571,54573,54575,54577,54580,54582],{"class":69,"line":167},[67,54568,52681],{"class":77},[67,54570,52148],{"class":51837},[67,54572,54488],{"class":112},[67,54574,909],{"class":77},[67,54576,4468],{"class":84},[67,54578,54579],{"class":77},">5\u003C\u002F",[67,54581,52148],{"class":51837},[67,54583,51844],{"class":77},[67,54585,54586,54588,54590],{"class":69,"line":173},[67,54587,52681],{"class":77},[67,54589,52350],{"class":51837},[67,54591,51844],{"class":77},[67,54593,54594],{"class":69,"line":180},[67,54595,54596],{"class":77},"    const one = document.querySelector('div')\n",[67,54598,54599],{"class":69,"line":186},[67,54600,54601],{"class":77},"    console.log(one.dataset)\n",[67,54603,54604],{"class":69,"line":444},[67,54605,54606],{"class":77},"    console.log(one.dataset.id)\n",[67,54608,54609],{"class":69,"line":2335},[67,54610,54611],{"class":77},"    console.log(one.dataset.spm)\n",[67,54613,54614,54616,54618],{"class":69,"line":2340},[67,54615,52954],{"class":77},[67,54617,52350],{"class":51837},[67,54619,51844],{"class":77},[67,54621,54622,54624,54626],{"class":69,"line":2346},[67,54623,52322],{"class":77},[67,54625,52337],{"class":51837},[67,54627,51844],{"class":77},[19,54629,54630],{},[725,54631],{"alt":62,"src":54632},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-100.png",[19,54634,54635],{},"document.querySelector选择的是第一个对象（元素）",[14,54637,54639],{"id":54638},"_316-定时器-间歇函数","3.1.6 定时器-间歇函数",[19,54641,54642],{},[725,54643],{"alt":62,"src":54644},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-101.png",[19,54646,54647],{},[725,54648],{"alt":62,"src":54649},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-102.png",[19,54651,54652],{},"定时器返回的是数字，表示第几个定时器，每个定时器的都是独一无二的，表示的是第几个定时器：",[52350,54654,54655],{},"\n\nfunction fn() {\n\n   document.write(1)\n\n   }\n\nlet n = setInterval(fn, 1000)\n\n   console.log(n)\n\n",[19,54657,54658],{},"此时输出结果为1，每1000毫秒输出一个1，若：",[52350,54660,54661],{},"\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,54663,54664],{},"此时输出结果就是2，每1秒输出两个1（因为前边还有一个执行输出1的定时器，两个一起作用在浏览器就每秒输出11）",[19,54666,54667],{},"当个执行时输出前有一秒的空窗期，当经过setInterval时，如果间隔时间为1000，它就是过了一秒钟才去调用函数，他不是立即执行的函数，跟后边的间隔时间有关",[19,54669,54670],{},"单位为毫秒！！！",[19,54672,54673],{},"可以搭配匿名函数来用！！！",[19,54675,54676],{},"setInterval(function () {",[19,54678,54679],{},"alert('两秒执行一次')",[19,54681,54682],{},"}, 2000)",[19,54684,54685],{},"如果有名函数的话，就不要在函数名的后边加小括号，小括号表示调用这个函数",[19,54687,54688],{},"function fn() {",[19,54690,54691],{},"document.write(1)",[19,54693,1802],{},[19,54695,54696],{},"setInterval(fn, 1000)",[19,54698,54699],{},"如果函数名后边非得加括号的话，就将这个函数再加个引号，但是尽量不要用这种方式",[19,54701,54702],{},"setInterval('fn()', 1000)",[19,54704,54705],{},[725,54706],{"alt":62,"src":54707},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-103.png",[40,54709,54711],{"id":54710},"_3161-阅读注册协议","3.1.6.1 阅读注册协议",[57,54713,54715],{"className":51170,"code":54714,"language":51172,"meta":62,"style":62},"\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",[64,54716,54717,54727,54741,54745,54753,54767,54787,54799,54807,54811,54819,54856,54861,54866,54871,54879,54887,54909,54917,54922,54944,54949,54954,54965,54970,54990,54998,55013,55028,55039,55044,55054,55064,55068,55077,55081,55089,55097,55101],{"__ignoreMap":62},[67,54718,54719,54721,54723,54725],{"class":69,"line":70},[67,54720,51834],{"class":77},[67,54722,51838],{"class":51837},[67,54724,51841],{"class":112},[67,54726,51844],{"class":77},[67,54728,54729,54731,54733,54735,54737,54739],{"class":69,"line":143},[67,54730,1766],{"class":77},[67,54732,51172],{"class":51837},[67,54734,51853],{"class":112},[67,54736,909],{"class":77},[67,54738,51858],{"class":84},[67,54740,51844],{"class":77},[67,54742,54743],{"class":69,"line":149},[67,54744,177],{"emptyLinePlaceholder":176},[67,54746,54747,54749,54751],{"class":69,"line":155},[67,54748,1766],{"class":77},[67,54750,51871],{"class":51837},[67,54752,51844],{"class":77},[67,54754,54755,54757,54759,54761,54763,54765],{"class":69,"line":161},[67,54756,52681],{"class":77},[67,54758,51881],{"class":51837},[67,54760,51884],{"class":112},[67,54762,909],{"class":77},[67,54764,51889],{"class":84},[67,54766,51844],{"class":77},[67,54768,54769,54771,54773,54775,54777,54779,54781,54783,54785],{"class":69,"line":167},[67,54770,52681],{"class":77},[67,54772,51881],{"class":51837},[67,54774,15637],{"class":112},[67,54776,909],{"class":77},[67,54778,51928],{"class":84},[67,54780,51908],{"class":112},[67,54782,909],{"class":77},[67,54784,51935],{"class":84},[67,54786,51844],{"class":77},[67,54788,54789,54791,54793,54795,54797],{"class":69,"line":173},[67,54790,52681],{"class":77},[67,54792,51944],{"class":51837},[67,54794,51947],{"class":77},[67,54796,51944],{"class":51837},[67,54798,51844],{"class":77},[67,54800,54801,54803,54805],{"class":69,"line":180},[67,54802,52322],{"class":77},[67,54804,51871],{"class":51837},[67,54806,51844],{"class":77},[67,54808,54809],{"class":69,"line":186},[67,54810,177],{"emptyLinePlaceholder":176},[67,54812,54813,54815,54817],{"class":69,"line":444},[67,54814,1766],{"class":77},[67,54816,52337],{"class":51837},[67,54818,51844],{"class":77},[67,54820,54821,54823,54826,54828,54830,54832,54834,54836,54838,54841,54843,54846,54849,54851,54854],{"class":69,"line":2335},[67,54822,52681],{"class":77},[67,54824,54825],{"class":51837},"textarea",[67,54827,15637],{"class":112},[67,54829,909],{"class":77},[67,54831,8371],{"class":84},[67,54833,15676],{"class":112},[67,54835,909],{"class":77},[67,54837,8371],{"class":84},[67,54839,54840],{"class":112}," cols",[67,54842,909],{"class":77},[67,54844,54845],{"class":84},"\"30\"",[67,54847,54848],{"class":112}," rows",[67,54850,909],{"class":77},[67,54852,54853],{"class":84},"\"10\"",[67,54855,51844],{"class":77},[67,54857,54858],{"class":69,"line":2340},[67,54859,54860],{"class":77},"        用户注册协议\n",[67,54862,54863],{"class":69,"line":2346},[67,54864,54865],{"class":77},"        欢迎注册成为京东用户！在您注册过程中，您需要完成我们的注册流程并通过点击同意的形式在线签署以下协议，请您务必仔细阅读、充分理解协议中的条款内容后再点击同意（尤其是以粗体或下划线标识的条款，因为这些条款可能会明确您应履行的义务或对您的权利有所限制）。\n",[67,54867,54868],{"class":69,"line":2351},[67,54869,54870],{"class":77},"        【请您注意】如果您不同意以下协议全部或任何条款约定，请您停止注册。您停止注册后将仅可以浏览我们的商品信息但无法享受我们的产品或服务。如您按照注册流程提示填写信息，阅读并点击同意上述协议且完成全部注册流程后，即表示您已充分阅读、理解并接受协议的全部内容，并表明您同意我们可以依据协议内容来处理您的个人信息，并同意我们将您的订单信息共享给为完成此订单所必须的第三方合作方（详情查看\n",[67,54872,54873,54875,54877],{"class":69,"line":2365},[67,54874,52313],{"class":77},[67,54876,54825],{"class":51837},[67,54878,51844],{"class":77},[67,54880,54881,54883,54885],{"class":69,"line":2370},[67,54882,52681],{"class":77},[67,54884,54253],{"class":51837},[67,54886,51844],{"class":77},[67,54888,54889,54891,54893,54895,54897,54900,54902,54905,54907],{"class":69,"line":2376},[67,54890,52681],{"class":77},[67,54892,54424],{"class":51837},[67,54894,54023],{"class":112},[67,54896,909],{"class":77},[67,54898,54899],{"class":84},"\"btn\"",[67,54901,54427],{"class":112},[67,54903,54904],{"class":77},">我已经阅读用户协议(5)\u003C\u002F",[67,54906,54424],{"class":51837},[67,54908,51844],{"class":77},[67,54910,54911,54913,54915],{"class":69,"line":2397},[67,54912,52681],{"class":77},[67,54914,52350],{"class":51837},[67,54916,51844],{"class":77},[67,54918,54919],{"class":69,"line":2402},[67,54920,54921],{"class":202},"    \u002F\u002F 1. 获取元素\n",[67,54923,54924,54926,54929,54931,54934,54937,54939,54942],{"class":69,"line":2416},[67,54925,11939],{"class":73},[67,54927,54928],{"class":208}," btn",[67,54930,14282],{"class":73},[67,54932,54933],{"class":77}," document.",[67,54935,54936],{"class":112},"querySelector",[67,54938,864],{"class":77},[67,54940,54941],{"class":84},"'.btn'",[67,54943,870],{"class":77},[67,54945,54946],{"class":69,"line":2421},[67,54947,54948],{"class":202},"    \u002F\u002F console.log(btn.innerHTML)  butto按钮特殊用innerHTML\n",[67,54950,54951],{"class":69,"line":2450},[67,54952,54953],{"class":202},"    \u002F\u002F 2. 倒计时\n",[67,54955,54956,54958,54960,54962],{"class":69,"line":2455},[67,54957,52756],{"class":73},[67,54959,10157],{"class":77},[67,54961,909],{"class":73},[67,54963,54964],{"class":208}," 5\n",[67,54966,54967],{"class":69,"line":2472},[67,54968,54969],{"class":202},"    \u002F\u002F 2.1 开启定时器\n",[67,54971,54972,54974,54977,54979,54982,54984,54987],{"class":69,"line":2477},[67,54973,52756],{"class":73},[67,54975,54976],{"class":77}," n ",[67,54978,909],{"class":73},[67,54980,54981],{"class":112}," setInterval",[67,54983,864],{"class":77},[67,54985,54986],{"class":73},"function",[67,54988,54989],{"class":77}," () {\n",[67,54991,54992,54995],{"class":69,"line":2482},[67,54993,54994],{"class":77},"      i",[67,54996,54997],{"class":73},"--\n",[67,54999,55000,55003,55005,55008,55010],{"class":69,"line":2487},[67,55001,55002],{"class":77},"      btn.innerHTML ",[67,55004,909],{"class":73},[67,55006,55007],{"class":84}," `我已经阅读用户协议(${",[67,55009,1298],{"class":77},[67,55011,55012],{"class":84},"})`\n",[67,55014,55015,55018,55021,55024,55026],{"class":69,"line":2501},[67,55016,55017],{"class":73},"      if",[67,55019,55020],{"class":77}," (i ",[67,55022,55023],{"class":73},"===",[67,55025,4813],{"class":208},[67,55027,13160],{"class":77},[67,55029,55030,55033,55036],{"class":69,"line":2506},[67,55031,55032],{"class":112},"        clearInterval",[67,55034,55035],{"class":77},"(n)  ",[67,55037,55038],{"class":202},"\u002F\u002F 关闭定时器\n",[67,55040,55041],{"class":69,"line":3298},[67,55042,55043],{"class":202},"        \u002F\u002F 定时器停了，我就可以开按钮\n",[67,55045,55046,55049,55051],{"class":69,"line":3312},[67,55047,55048],{"class":77},"        btn.disabled ",[67,55050,909],{"class":73},[67,55052,55053],{"class":208}," false\n",[67,55055,55056,55059,55061],{"class":69,"line":3320},[67,55057,55058],{"class":77},"        btn.innerHTML ",[67,55060,909],{"class":73},[67,55062,55063],{"class":84}," '同意'\n",[67,55065,55066],{"class":69,"line":3325},[67,55067,52935],{"class":77},[67,55069,55070,55073,55075],{"class":69,"line":3331},[67,55071,55072],{"class":77},"    }, ",[67,55074,7129],{"class":208},[67,55076,870],{"class":77},[67,55078,55079],{"class":69,"line":3337},[67,55080,177],{"emptyLinePlaceholder":176},[67,55082,55083,55085,55087],{"class":69,"line":3342},[67,55084,52954],{"class":77},[67,55086,52350],{"class":51837},[67,55088,51844],{"class":77},[67,55090,55091,55093,55095],{"class":69,"line":8667},[67,55092,52322],{"class":77},[67,55094,52337],{"class":51837},[67,55096,51844],{"class":77},[67,55098,55099],{"class":69,"line":8691},[67,55100,177],{"emptyLinePlaceholder":176},[67,55102,55103,55105,55107],{"class":69,"line":8696},[67,55104,52322],{"class":77},[67,55106,51172],{"class":51837},[67,55108,51844],{"class":77},[19,55110,55111],{},"不要一直想着用死循环,避免死循环",[19,55113,55114,55117],{},[64,55115,55116],{},"定时器本身就是循环",",就直接在匿名函数中写就欧克了,不要再去写循环了,尤其死循环!!!",[40,55119,55121],{"id":55120},"_3162-轮播图定时版","3.1.6.2 轮播图定时版",[815,55123,55124],{},[818,55125,55126],{},"法1",[57,55128,55130],{"className":51170,"code":55129,"language":51172,"meta":62,"style":62},"\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",[64,55131,55132,55142,55156,55160,55168,55182,55202,55214,55222,55228,55239,55250,55254,55258,55265,55277,55281,55285,55292,55304,55318,55331,55345,55349,55353,55360,55371,55382,55393,55405,55417,55429,55433,55437,55445,55455,55468,55480,55493,55497,55501,55508,55518,55530,55542,55553,55564,55574,55586,55598,55602,55606,55615,55627,55639,55667,55680,55684,55688,55695,55706,55710,55718,55726,55730,55738,55752,55767,55791,55799,55814,55827,55835,55856,55868,55880,55892,55904,55916,55928,55940,55949,55957,55965,55973,55985,56008,56027,56046,56065,56084,56103,56122,56142,56146,56166,56185,56205,56226,56237,56254,56264,56274,56284,56289,56294,56299,56304,56329,56342,56346,56369,56373,56381,56389,56397,56401],{"__ignoreMap":62},[67,55133,55134,55136,55138,55140],{"class":69,"line":70},[67,55135,51834],{"class":77},[67,55137,51838],{"class":51837},[67,55139,51841],{"class":112},[67,55141,51844],{"class":77},[67,55143,55144,55146,55148,55150,55152,55154],{"class":69,"line":143},[67,55145,1766],{"class":77},[67,55147,51172],{"class":51837},[67,55149,51853],{"class":112},[67,55151,909],{"class":77},[67,55153,51858],{"class":84},[67,55155,51844],{"class":77},[67,55157,55158],{"class":69,"line":149},[67,55159,177],{"emptyLinePlaceholder":176},[67,55161,55162,55164,55166],{"class":69,"line":155},[67,55163,1766],{"class":77},[67,55165,51871],{"class":51837},[67,55167,51844],{"class":77},[67,55169,55170,55172,55174,55176,55178,55180],{"class":69,"line":161},[67,55171,52681],{"class":77},[67,55173,51881],{"class":51837},[67,55175,51884],{"class":112},[67,55177,909],{"class":77},[67,55179,51889],{"class":84},[67,55181,51844],{"class":77},[67,55183,55184,55186,55188,55190,55192,55194,55196,55198,55200],{"class":69,"line":167},[67,55185,52681],{"class":77},[67,55187,51881],{"class":51837},[67,55189,15637],{"class":112},[67,55191,909],{"class":77},[67,55193,51928],{"class":84},[67,55195,51908],{"class":112},[67,55197,909],{"class":77},[67,55199,51935],{"class":84},[67,55201,51844],{"class":77},[67,55203,55204,55206,55208,55210,55212],{"class":69,"line":173},[67,55205,52681],{"class":77},[67,55207,51944],{"class":51837},[67,55209,51947],{"class":77},[67,55211,51944],{"class":51837},[67,55213,51844],{"class":77},[67,55215,55216,55218,55220],{"class":69,"line":180},[67,55217,52681],{"class":77},[67,55219,779],{"class":51837},[67,55221,51844],{"class":77},[67,55223,55224,55226],{"class":69,"line":186},[67,55225,7122],{"class":51837},[67,55227,16289],{"class":77},[67,55229,55230,55233,55235,55237],{"class":69,"line":444},[67,55231,55232],{"class":208},"      padding",[67,55234,51974],{"class":77},[67,55236,1051],{"class":208},[67,55238,2017],{"class":77},[67,55240,55241,55244,55246,55248],{"class":69,"line":2335},[67,55242,55243],{"class":208},"      margin",[67,55245,51974],{"class":77},[67,55247,1051],{"class":208},[67,55249,2017],{"class":77},[67,55251,55252],{"class":69,"line":2340},[67,55253,2909],{"class":77},[67,55255,55256],{"class":69,"line":2346},[67,55257,177],{"emptyLinePlaceholder":176},[67,55259,55260,55263],{"class":69,"line":2351},[67,55261,55262],{"class":51837},"    li",[67,55264,16289],{"class":77},[67,55266,55267,55270,55272,55275],{"class":69,"line":2365},[67,55268,55269],{"class":208},"      list-style",[67,55271,51974],{"class":77},[67,55273,55274],{"class":208},"none",[67,55276,2017],{"class":77},[67,55278,55279],{"class":69,"line":2370},[67,55280,2909],{"class":77},[67,55282,55283],{"class":69,"line":2376},[67,55284,177],{"emptyLinePlaceholder":176},[67,55286,55287,55290],{"class":69,"line":2397},[67,55288,55289],{"class":112},"    .box",[67,55291,16289],{"class":77},[67,55293,55294,55297,55299,55302],{"class":69,"line":2402},[67,55295,55296],{"class":208},"      position",[67,55298,51974],{"class":77},[67,55300,55301],{"class":208},"relative",[67,55303,2017],{"class":77},[67,55305,55306,55309,55311,55314,55316],{"class":69,"line":2416},[67,55307,55308],{"class":208},"      width",[67,55310,51974],{"class":77},[67,55312,55313],{"class":208},"976",[67,55315,52029],{"class":73},[67,55317,2017],{"class":77},[67,55319,55320,55323,55325,55327,55329],{"class":69,"line":2421},[67,55321,55322],{"class":208},"      height",[67,55324,51974],{"class":77},[67,55326,2262],{"class":208},[67,55328,52029],{"class":73},[67,55330,2017],{"class":77},[67,55332,55333,55335,55337,55339,55341,55343],{"class":69,"line":2450},[67,55334,55243],{"class":208},[67,55336,51974],{"class":77},[67,55338,1169],{"class":208},[67,55340,52029],{"class":73},[67,55342,52093],{"class":208},[67,55344,2017],{"class":77},[67,55346,55347],{"class":69,"line":2455},[67,55348,2909],{"class":77},[67,55350,55351],{"class":69,"line":2472},[67,55352,177],{"emptyLinePlaceholder":176},[67,55354,55355,55358],{"class":69,"line":2477},[67,55356,55357],{"class":112},"    .slider-footer",[67,55359,16289],{"class":77},[67,55361,55362,55364,55366,55369],{"class":69,"line":2482},[67,55363,55296],{"class":208},[67,55365,51974],{"class":77},[67,55367,55368],{"class":208},"absolute",[67,55370,2017],{"class":77},[67,55372,55373,55376,55378,55380],{"class":69,"line":2487},[67,55374,55375],{"class":208},"      left",[67,55377,51974],{"class":77},[67,55379,1051],{"class":208},[67,55381,2017],{"class":77},[67,55383,55384,55387,55389,55391],{"class":69,"line":2501},[67,55385,55386],{"class":208},"      bottom",[67,55388,51974],{"class":77},[67,55390,1051],{"class":208},[67,55392,2017],{"class":77},[67,55394,55395,55397,55399,55401,55403],{"class":69,"line":2506},[67,55396,55308],{"class":208},[67,55398,51974],{"class":77},[67,55400,1169],{"class":208},[67,55402,1186],{"class":73},[67,55404,2017],{"class":77},[67,55406,55407,55409,55411,55413,55415],{"class":69,"line":3298},[67,55408,55322],{"class":208},[67,55410,51974],{"class":77},[67,55412,1431],{"class":208},[67,55414,1186],{"class":73},[67,55416,2017],{"class":77},[67,55418,55419,55422,55424,55427],{"class":69,"line":3312},[67,55420,55421],{"class":208},"      background-color",[67,55423,51974],{"class":77},[67,55425,55426],{"class":208},"skyblue",[67,55428,2017],{"class":77},[67,55430,55431],{"class":69,"line":3320},[67,55432,2909],{"class":77},[67,55434,55435],{"class":69,"line":3325},[67,55436,177],{"emptyLinePlaceholder":176},[67,55438,55439,55441,55443],{"class":69,"line":3331},[67,55440,55357],{"class":112},[67,55442,7544],{"class":51837},[67,55444,16289],{"class":77},[67,55446,55447,55449,55451,55453],{"class":69,"line":3337},[67,55448,55296],{"class":208},[67,55450,51974],{"class":77},[67,55452,55368],{"class":208},[67,55454,2017],{"class":77},[67,55456,55457,55460,55462,55464,55466],{"class":69,"line":3342},[67,55458,55459],{"class":208},"      font-size",[67,55461,51974],{"class":77},[67,55463,1757],{"class":208},[67,55465,52029],{"class":73},[67,55467,2017],{"class":77},[67,55469,55470,55472,55474,55476,55478],{"class":69,"line":8667},[67,55471,55375],{"class":208},[67,55473,51974],{"class":77},[67,55475,1556],{"class":208},[67,55477,52029],{"class":73},[67,55479,2017],{"class":77},[67,55481,55482,55485,55487,55489,55491],{"class":69,"line":8691},[67,55483,55484],{"class":208},"      top",[67,55486,51974],{"class":77},[67,55488,1177],{"class":208},[67,55490,52029],{"class":73},[67,55492,2017],{"class":77},[67,55494,55495],{"class":69,"line":8696},[67,55496,2909],{"class":77},[67,55498,55499],{"class":69,"line":8702},[67,55500,177],{"emptyLinePlaceholder":176},[67,55502,55503,55506],{"class":69,"line":8729},[67,55504,55505],{"class":51837},"    ul",[67,55507,16289],{"class":77},[67,55509,55510,55512,55514,55516],{"class":69,"line":8734},[67,55511,55296],{"class":208},[67,55513,51974],{"class":77},[67,55515,55368],{"class":208},[67,55517,2017],{"class":77},[67,55519,55520,55522,55524,55526,55528],{"class":69,"line":8740},[67,55521,55484],{"class":208},[67,55523,51974],{"class":77},[67,55525,1637],{"class":208},[67,55527,52029],{"class":73},[67,55529,2017],{"class":77},[67,55531,55532,55534,55536,55538,55540],{"class":69,"line":8752},[67,55533,55375],{"class":208},[67,55535,51974],{"class":77},[67,55537,1556],{"class":208},[67,55539,52029],{"class":73},[67,55541,2017],{"class":77},[67,55543,55544,55547,55549,55551],{"class":69,"line":8764},[67,55545,55546],{"class":208},"      display",[67,55548,51974],{"class":77},[67,55550,52014],{"class":208},[67,55552,2017],{"class":77},[67,55554,55555,55558,55560,55562],{"class":69,"line":8776},[67,55556,55557],{"class":208},"      justify-content",[67,55559,51974],{"class":77},[67,55561,52205],{"class":208},[67,55563,2017],{"class":77},[67,55565,55566,55568,55570,55572],{"class":69,"line":10435},[67,55567,55296],{"class":208},[67,55569,51974],{"class":77},[67,55571,55368],{"class":208},[67,55573,2017],{"class":77},[67,55575,55576,55578,55580,55582,55584],{"class":69,"line":10459},[67,55577,55308],{"class":208},[67,55579,51974],{"class":77},[67,55581,4712],{"class":208},[67,55583,52029],{"class":73},[67,55585,2017],{"class":77},[67,55587,55588,55590,55592,55594,55596],{"class":69,"line":10482},[67,55589,55322],{"class":208},[67,55591,51974],{"class":77},[67,55593,1556],{"class":208},[67,55595,52029],{"class":73},[67,55597,2017],{"class":77},[67,55599,55600],{"class":69,"line":10506},[67,55601,2909],{"class":77},[67,55603,55604],{"class":69,"line":10511},[67,55605,177],{"emptyLinePlaceholder":176},[67,55607,55608,55610,55613],{"class":69,"line":10516},[67,55609,55505],{"class":51837},[67,55611,55612],{"class":51837}," li",[67,55614,16289],{"class":77},[67,55616,55617,55619,55621,55623,55625],{"class":69,"line":10521},[67,55618,55308],{"class":208},[67,55620,51974],{"class":77},[67,55622,1556],{"class":208},[67,55624,52029],{"class":73},[67,55626,2017],{"class":77},[67,55628,55629,55631,55633,55635,55637],{"class":69,"line":10530},[67,55630,55322],{"class":208},[67,55632,51974],{"class":77},[67,55634,1556],{"class":208},[67,55636,52029],{"class":73},[67,55638,2017],{"class":77},[67,55640,55641,55643,55645,55648,55650,55652,55654,55656,55658,55660,55662,55665],{"class":69,"line":10535},[67,55642,55421],{"class":208},[67,55644,51974],{"class":77},[67,55646,55647],{"class":208},"rgba",[67,55649,864],{"class":77},[67,55651,1051],{"class":208},[67,55653,13153],{"class":77},[67,55655,1051],{"class":208},[67,55657,13153],{"class":77},[67,55659,1051],{"class":208},[67,55661,13153],{"class":77},[67,55663,55664],{"class":208},".4",[67,55666,3440],{"class":77},[67,55668,55669,55672,55674,55676,55678],{"class":69,"line":10541},[67,55670,55671],{"class":208},"      border-radius",[67,55673,51974],{"class":77},[67,55675,1303],{"class":208},[67,55677,52029],{"class":73},[67,55679,2017],{"class":77},[67,55681,55682],{"class":69,"line":10562},[67,55683,2909],{"class":77},[67,55685,55686],{"class":69,"line":10568},[67,55687,177],{"emptyLinePlaceholder":176},[67,55689,55690,55693],{"class":69,"line":10582},[67,55691,55692],{"class":112},"    .activate",[67,55694,16289],{"class":77},[67,55696,55697,55699,55701,55704],{"class":69,"line":10588},[67,55698,55421],{"class":208},[67,55700,51974],{"class":77},[67,55702,55703],{"class":208},"#f7f7f7",[67,55705,2017],{"class":77},[67,55707,55708],{"class":69,"line":10615},[67,55709,2909],{"class":77},[67,55711,55712,55714,55716],{"class":69,"line":10624},[67,55713,52954],{"class":77},[67,55715,779],{"class":51837},[67,55717,51844],{"class":77},[67,55719,55720,55722,55724],{"class":69,"line":10630},[67,55721,52322],{"class":77},[67,55723,51871],{"class":51837},[67,55725,51844],{"class":77},[67,55727,55728],{"class":69,"line":10638},[67,55729,177],{"emptyLinePlaceholder":176},[67,55731,55732,55734,55736],{"class":69,"line":10643},[67,55733,1766],{"class":77},[67,55735,52337],{"class":51837},[67,55737,51844],{"class":77},[67,55739,55740,55742,55744,55746,55748,55750],{"class":69,"line":17321},[67,55741,52681],{"class":77},[67,55743,52148],{"class":51837},[67,55745,54023],{"class":112},[67,55747,909],{"class":77},[67,55749,54028],{"class":84},[67,55751,51844],{"class":77},[67,55753,55754,55756,55758,55760,55762,55765],{"class":69,"line":17327},[67,55755,51878],{"class":77},[67,55757,52148],{"class":51837},[67,55759,54023],{"class":112},[67,55761,909],{"class":77},[67,55763,55764],{"class":84},"\"slider-wrapper\"",[67,55766,51844],{"class":77},[67,55768,55769,55772,55774,55777,55779,55782,55785,55787,55789],{"class":69,"line":17350},[67,55770,55771],{"class":77},"      \u003C",[67,55773,725],{"class":51837},[67,55775,55776],{"class":112}," src",[67,55778,909],{"class":77},[67,55780,55781],{"class":84},"\"....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[67,55783,55784],{"class":112}," alt",[67,55786,909],{"class":77},[67,55788,8371],{"class":84},[67,55790,51844],{"class":77},[67,55792,55793,55795,55797],{"class":69,"line":17356},[67,55794,52313],{"class":77},[67,55796,52148],{"class":51837},[67,55798,51844],{"class":77},[67,55800,55801,55803,55805,55807,55809,55812],{"class":69,"line":17379},[67,55802,51878],{"class":77},[67,55804,52148],{"class":51837},[67,55806,54023],{"class":112},[67,55808,909],{"class":77},[67,55810,55811],{"class":84},"\"slider-footer\"",[67,55813,51844],{"class":77},[67,55815,55816,55818,55820,55823,55825],{"class":69,"line":17393},[67,55817,55771],{"class":77},[67,55819,19],{"class":51837},[67,55821,55822],{"class":77},">对人类来说会不会太超前了?\u003C\u002F",[67,55824,19],{"class":51837},[67,55826,51844],{"class":77},[67,55828,55829,55831,55833],{"class":69,"line":17413},[67,55830,55771],{"class":77},[67,55832,1863],{"class":51837},[67,55834,51844],{"class":77},[67,55836,55837,55840,55842,55844,55846,55849,55852,55854],{"class":69,"line":17419},[67,55838,55839],{"class":77},"        \u003C",[67,55841,818],{"class":51837},[67,55843,54023],{"class":112},[67,55845,909],{"class":77},[67,55847,55848],{"class":84},"\"activate\"",[67,55850,55851],{"class":77},">\u003C\u002F",[67,55853,818],{"class":51837},[67,55855,51844],{"class":77},[67,55857,55858,55860,55862,55864,55866],{"class":69,"line":17430},[67,55859,55839],{"class":77},[67,55861,818],{"class":51837},[67,55863,55851],{"class":77},[67,55865,818],{"class":51837},[67,55867,51844],{"class":77},[67,55869,55870,55872,55874,55876,55878],{"class":69,"line":17453},[67,55871,55839],{"class":77},[67,55873,818],{"class":51837},[67,55875,55851],{"class":77},[67,55877,818],{"class":51837},[67,55879,51844],{"class":77},[67,55881,55882,55884,55886,55888,55890],{"class":69,"line":17475},[67,55883,55839],{"class":77},[67,55885,818],{"class":51837},[67,55887,55851],{"class":77},[67,55889,818],{"class":51837},[67,55891,51844],{"class":77},[67,55893,55894,55896,55898,55900,55902],{"class":69,"line":17480},[67,55895,55839],{"class":77},[67,55897,818],{"class":51837},[67,55899,55851],{"class":77},[67,55901,818],{"class":51837},[67,55903,51844],{"class":77},[67,55905,55906,55908,55910,55912,55914],{"class":69,"line":17486},[67,55907,55839],{"class":77},[67,55909,818],{"class":51837},[67,55911,55851],{"class":77},[67,55913,818],{"class":51837},[67,55915,51844],{"class":77},[67,55917,55918,55920,55922,55924,55926],{"class":69,"line":17500},[67,55919,55839],{"class":77},[67,55921,818],{"class":51837},[67,55923,55851],{"class":77},[67,55925,818],{"class":51837},[67,55927,51844],{"class":77},[67,55929,55930,55932,55934,55936,55938],{"class":69,"line":17513},[67,55931,55839],{"class":77},[67,55933,818],{"class":51837},[67,55935,55851],{"class":77},[67,55937,818],{"class":51837},[67,55939,51844],{"class":77},[67,55941,55942,55945,55947],{"class":69,"line":17518},[67,55943,55944],{"class":77},"      \u003C\u002F",[67,55946,1863],{"class":51837},[67,55948,51844],{"class":77},[67,55950,55951,55953,55955],{"class":69,"line":17532},[67,55952,52313],{"class":77},[67,55954,52148],{"class":51837},[67,55956,51844],{"class":77},[67,55958,55959,55961,55963],{"class":69,"line":17537},[67,55960,52954],{"class":77},[67,55962,52148],{"class":51837},[67,55964,51844],{"class":77},[67,55966,55967,55969,55971],{"class":69,"line":17543},[67,55968,52681],{"class":77},[67,55970,52350],{"class":51837},[67,55972,51844],{"class":77},[67,55974,55975,55977,55980,55982],{"class":69,"line":17548},[67,55976,11939],{"class":73},[67,55978,55979],{"class":208}," arrImage",[67,55981,14282],{"class":73},[67,55983,55984],{"class":77}," [\n",[67,55986,55987,55990,55993,55996,55999,56002,56005],{"class":69,"line":17562},[67,55988,55989],{"class":77},"      { url: ",[67,55991,55992],{"class":84},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg'",[67,55994,55995],{"class":77},", title: ",[67,55997,55998],{"class":84},"'对人类来说会不会太超前了?'",[67,56000,56001],{"class":77},", color: ",[67,56003,56004],{"class":84},"'rgba(100,67,68)'",[67,56006,56007],{"class":77}," },\n",[67,56009,56010,56012,56015,56017,56020,56022,56025],{"class":69,"line":17567},[67,56011,55989],{"class":77},[67,56013,56014],{"class":84},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg'",[67,56016,55995],{"class":77},[67,56018,56019],{"class":84},"'开启剑与雪的黑暗传说!'",[67,56021,56001],{"class":77},[67,56023,56024],{"class":84},"'rgba(43,35,26)'",[67,56026,56007],{"class":77},[67,56028,56029,56031,56034,56036,56039,56041,56044],{"class":69,"line":17572},[67,56030,55989],{"class":77},[67,56032,56033],{"class":84},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg'",[67,56035,55995],{"class":77},[67,56037,56038],{"class":84},"'真正的jo厨出现了!'",[67,56040,56001],{"class":77},[67,56042,56043],{"class":84},"'rgba(36,31,33)'",[67,56045,56007],{"class":77},[67,56047,56048,56050,56053,56055,56058,56060,56063],{"class":69,"line":17586},[67,56049,55989],{"class":77},[67,56051,56052],{"class":84},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg'",[67,56054,55995],{"class":77},[67,56056,56057],{"class":84},"'李玉刚:让世界通过b站看到东方大国文化'",[67,56059,56001],{"class":77},[67,56061,56062],{"class":84},"'rgba(139,98,66)'",[67,56064,56007],{"class":77},[67,56066,56067,56069,56072,56074,56077,56079,56082],{"class":69,"line":17598},[67,56068,55989],{"class":77},[67,56070,56071],{"class":84},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg'",[67,56073,55995],{"class":77},[67,56075,56076],{"class":84},"'快来分享你的寒假日常吧'",[67,56078,56001],{"class":77},[67,56080,56081],{"class":84},"'rgba(67,90,92)'",[67,56083,56007],{"class":77},[67,56085,56086,56088,56091,56093,56096,56098,56101],{"class":69,"line":17603},[67,56087,55989],{"class":77},[67,56089,56090],{"class":84},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg'",[67,56092,55995],{"class":77},[67,56094,56095],{"class":84},"'哔哩哔哩小年YEAR'",[67,56097,56001],{"class":77},[67,56099,56100],{"class":84},"'rgba(166,131,143)'",[67,56102,56007],{"class":77},[67,56104,56105,56107,56110,56112,56115,56117,56120],{"class":69,"line":17616},[67,56106,55989],{"class":77},[67,56108,56109],{"class":84},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg'",[67,56111,55995],{"class":77},[67,56113,56114],{"class":84},"'一站式解决你的电脑配置问题'",[67,56116,56001],{"class":77},[67,56118,56119],{"class":84},"'rgba(53,29,25)'",[67,56121,56007],{"class":77},[67,56123,56124,56126,56129,56131,56134,56136,56139],{"class":69,"line":17621},[67,56125,55989],{"class":77},[67,56127,56128],{"class":84},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg'",[67,56130,55995],{"class":77},[67,56132,56133],{"class":84},"'谁不想和小猫咪贴贴呢?'",[67,56135,56001],{"class":77},[67,56137,56138],{"class":84},"'rgba(99,72,114)'",[67,56140,56141],{"class":77}," }\n",[67,56143,56144],{"class":69,"line":17626},[67,56145,53646],{"class":77},[67,56147,56148,56150,56153,56155,56157,56159,56161,56164],{"class":69,"line":17631},[67,56149,11939],{"class":73},[67,56151,56152],{"class":208}," img",[67,56154,14282],{"class":73},[67,56156,54933],{"class":77},[67,56158,54936],{"class":112},[67,56160,864],{"class":77},[67,56162,56163],{"class":84},"'.slider-wrapper img'",[67,56165,870],{"class":77},[67,56167,56168,56170,56172,56174,56176,56178,56180,56183],{"class":69,"line":17644},[67,56169,11939],{"class":73},[67,56171,7544],{"class":208},[67,56173,14282],{"class":73},[67,56175,54933],{"class":77},[67,56177,54936],{"class":112},[67,56179,864],{"class":77},[67,56181,56182],{"class":84},"'.slider-footer p'",[67,56184,870],{"class":77},[67,56186,56187,56189,56192,56194,56196,56198,56200,56203],{"class":69,"line":17649},[67,56188,11939],{"class":73},[67,56190,56191],{"class":208}," color",[67,56193,14282],{"class":73},[67,56195,54933],{"class":77},[67,56197,54936],{"class":112},[67,56199,864],{"class":77},[67,56201,56202],{"class":84},"'.slider-footer'",[67,56204,870],{"class":77},[67,56206,56207,56209,56212,56214,56216,56219,56221,56224],{"class":69,"line":33170},[67,56208,11939],{"class":73},[67,56210,56211],{"class":208}," lis",[67,56213,14282],{"class":73},[67,56215,54933],{"class":77},[67,56217,56218],{"class":112},"querySelectorAll",[67,56220,864],{"class":77},[67,56222,56223],{"class":84},"'.slider-footer ul li'",[67,56225,870],{"class":77},[67,56227,56228,56230,56232,56234],{"class":69,"line":33176},[67,56229,52756],{"class":73},[67,56231,10157],{"class":77},[67,56233,909],{"class":73},[67,56235,56236],{"class":208}," 1\n",[67,56238,56239,56241,56244,56246,56248,56250,56252],{"class":69,"line":33182},[67,56240,52756],{"class":73},[67,56242,56243],{"class":77}," timer ",[67,56245,909],{"class":73},[67,56247,54981],{"class":112},[67,56249,864],{"class":77},[67,56251,54986],{"class":73},[67,56253,54989],{"class":77},[67,56255,56256,56259,56261],{"class":69,"line":33188},[67,56257,56258],{"class":77},"      img.src ",[67,56260,909],{"class":73},[67,56262,56263],{"class":77}," arrImage[i].url\n",[67,56265,56266,56269,56271],{"class":69,"line":33194},[67,56267,56268],{"class":77},"      p.innerHTML ",[67,56270,909],{"class":73},[67,56272,56273],{"class":77}," arrImage[i].title\n",[67,56275,56276,56279,56281],{"class":69,"line":33205},[67,56277,56278],{"class":77},"      color.style.backgroundColor ",[67,56280,909],{"class":73},[67,56282,56283],{"class":77}," arrImage[i].color\n",[67,56285,56286],{"class":69,"line":33211},[67,56287,56288],{"class":202},"      \u002F\u002F let li = document.querySelector(`.slider-footer ul li:nth-child(${i + 1})`)\n",[67,56290,56291],{"class":69,"line":33231},[67,56292,56293],{"class":202},"      \u002F\u002F li.classList.add('activate')\n",[67,56295,56296],{"class":69,"line":33237},[67,56297,56298],{"class":202},"      \u002F\u002F lis[i + 1].classList.add('activate')\n",[67,56300,56301],{"class":69,"line":33248},[67,56302,56303],{"class":202},"      \u002F\u002F lis[i].classList.remove('activate')\n",[67,56305,56306,56309,56311,56313,56316,56319,56322,56324,56327],{"class":69,"line":33254},[67,56307,56308],{"class":77},"      document.",[67,56310,54936],{"class":112},[67,56312,864],{"class":77},[67,56314,56315],{"class":84},"'.activate'",[67,56317,56318],{"class":77},")?.classList.",[67,56320,56321],{"class":112},"toggle",[67,56323,864],{"class":77},[67,56325,56326],{"class":84},"'activate'",[67,56328,870],{"class":77},[67,56330,56331,56334,56336,56338,56340],{"class":69,"line":33260},[67,56332,56333],{"class":77},"      lis[i].classList.",[67,56335,6053],{"class":112},[67,56337,864],{"class":77},[67,56339,56326],{"class":84},[67,56341,870],{"class":77},[67,56343,56344],{"class":69,"line":33266},[67,56345,177],{"emptyLinePlaceholder":176},[67,56347,56348,56351,56353,56355,56357,56359,56361,56363,56366],{"class":69,"line":33272},[67,56349,56350],{"class":77},"      i ",[67,56352,909],{"class":73},[67,56354,55020],{"class":77},[67,56356,1338],{"class":73},[67,56358,25828],{"class":208},[67,56360,14432],{"class":77},[67,56362,1186],{"class":73},[67,56364,56365],{"class":77}," arrImage.",[67,56367,56368],{"class":208},"length\n",[67,56370,56371],{"class":69,"line":33278},[67,56372,177],{"emptyLinePlaceholder":176},[67,56374,56375,56377,56379],{"class":69,"line":33284},[67,56376,55072],{"class":77},[67,56378,7129],{"class":208},[67,56380,870],{"class":77},[67,56382,56383,56385,56387],{"class":69,"line":33290},[67,56384,52954],{"class":77},[67,56386,52350],{"class":51837},[67,56388,51844],{"class":77},[67,56390,56391,56393,56395],{"class":69,"line":33310},[67,56392,52322],{"class":77},[67,56394,52337],{"class":51837},[67,56396,51844],{"class":77},[67,56398,56399],{"class":69,"line":33316},[67,56400,177],{"emptyLinePlaceholder":176},[67,56402,56403,56405,56407],{"class":69,"line":33332},[67,56404,52322],{"class":77},[67,56406,51172],{"class":51837},[67,56408,51844],{"class":77},[19,56410,56411],{},[725,56412],{"alt":62,"src":56413},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-104.png",[19,56415,56416],{},"?.就是短路保护,确保输出正常进行",[19,56418,56419],{},"不要忘记取余%,有时候可以用",[19,56421,56422],{},"相同部分可以封装成函数,然后调用这部分就可以!!!",[815,56424,56425],{"start":143},[818,56426,56427],{},"法2",[57,56429,56431],{"className":51170,"code":56430,"language":51172,"meta":62,"style":62},"\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",[64,56432,56433,56443,56457,56461,56469,56483,56503,56515,56523,56529,56539,56549,56553,56557,56563,56573,56577,56581,56587,56597,56609,56621,56635,56639,56643,56649,56659,56669,56679,56691,56703,56713,56717,56721,56729,56739,56751,56763,56775,56779,56783,56789,56799,56811,56823,56833,56843,56853,56865,56877,56881,56885,56893,56905,56917,56943,56955,56959,56963,56969,56979,56983,56991,56999,57003,57011,57025,57039,57059,57067,57081,57093,57101,57119,57131,57143,57155,57167,57179,57191,57203,57211,57219,57227,57235,57246,57262,57278,57294,57310,57326,57342,57358,57374,57378,57383,57401,57419,57429,57434,57439,57450,57456,57471,57480,57484,57489,57498,57503,57512,57517,57522,57527,57550,57580,57584,57592,57596,57604,57612,57616],{"__ignoreMap":62},[67,56434,56435,56437,56439,56441],{"class":69,"line":70},[67,56436,51834],{"class":77},[67,56438,51838],{"class":51837},[67,56440,51841],{"class":112},[67,56442,51844],{"class":77},[67,56444,56445,56447,56449,56451,56453,56455],{"class":69,"line":143},[67,56446,1766],{"class":77},[67,56448,51172],{"class":51837},[67,56450,51853],{"class":112},[67,56452,909],{"class":77},[67,56454,51858],{"class":84},[67,56456,51844],{"class":77},[67,56458,56459],{"class":69,"line":149},[67,56460,177],{"emptyLinePlaceholder":176},[67,56462,56463,56465,56467],{"class":69,"line":155},[67,56464,1766],{"class":77},[67,56466,51871],{"class":51837},[67,56468,51844],{"class":77},[67,56470,56471,56473,56475,56477,56479,56481],{"class":69,"line":161},[67,56472,52681],{"class":77},[67,56474,51881],{"class":51837},[67,56476,51884],{"class":112},[67,56478,909],{"class":77},[67,56480,51889],{"class":84},[67,56482,51844],{"class":77},[67,56484,56485,56487,56489,56491,56493,56495,56497,56499,56501],{"class":69,"line":167},[67,56486,52681],{"class":77},[67,56488,51881],{"class":51837},[67,56490,15637],{"class":112},[67,56492,909],{"class":77},[67,56494,51928],{"class":84},[67,56496,51908],{"class":112},[67,56498,909],{"class":77},[67,56500,51935],{"class":84},[67,56502,51844],{"class":77},[67,56504,56505,56507,56509,56511,56513],{"class":69,"line":173},[67,56506,52681],{"class":77},[67,56508,51944],{"class":51837},[67,56510,51947],{"class":77},[67,56512,51944],{"class":51837},[67,56514,51844],{"class":77},[67,56516,56517,56519,56521],{"class":69,"line":180},[67,56518,52681],{"class":77},[67,56520,779],{"class":51837},[67,56522,51844],{"class":77},[67,56524,56525,56527],{"class":69,"line":186},[67,56526,7122],{"class":51837},[67,56528,16289],{"class":77},[67,56530,56531,56533,56535,56537],{"class":69,"line":444},[67,56532,55232],{"class":208},[67,56534,51974],{"class":77},[67,56536,1051],{"class":208},[67,56538,2017],{"class":77},[67,56540,56541,56543,56545,56547],{"class":69,"line":2335},[67,56542,55243],{"class":208},[67,56544,51974],{"class":77},[67,56546,1051],{"class":208},[67,56548,2017],{"class":77},[67,56550,56551],{"class":69,"line":2340},[67,56552,2909],{"class":77},[67,56554,56555],{"class":69,"line":2346},[67,56556,177],{"emptyLinePlaceholder":176},[67,56558,56559,56561],{"class":69,"line":2351},[67,56560,55262],{"class":51837},[67,56562,16289],{"class":77},[67,56564,56565,56567,56569,56571],{"class":69,"line":2365},[67,56566,55269],{"class":208},[67,56568,51974],{"class":77},[67,56570,55274],{"class":208},[67,56572,2017],{"class":77},[67,56574,56575],{"class":69,"line":2370},[67,56576,2909],{"class":77},[67,56578,56579],{"class":69,"line":2376},[67,56580,177],{"emptyLinePlaceholder":176},[67,56582,56583,56585],{"class":69,"line":2397},[67,56584,55289],{"class":112},[67,56586,16289],{"class":77},[67,56588,56589,56591,56593,56595],{"class":69,"line":2402},[67,56590,55296],{"class":208},[67,56592,51974],{"class":77},[67,56594,55301],{"class":208},[67,56596,2017],{"class":77},[67,56598,56599,56601,56603,56605,56607],{"class":69,"line":2416},[67,56600,55308],{"class":208},[67,56602,51974],{"class":77},[67,56604,55313],{"class":208},[67,56606,52029],{"class":73},[67,56608,2017],{"class":77},[67,56610,56611,56613,56615,56617,56619],{"class":69,"line":2421},[67,56612,55322],{"class":208},[67,56614,51974],{"class":77},[67,56616,2262],{"class":208},[67,56618,52029],{"class":73},[67,56620,2017],{"class":77},[67,56622,56623,56625,56627,56629,56631,56633],{"class":69,"line":2450},[67,56624,55243],{"class":208},[67,56626,51974],{"class":77},[67,56628,1169],{"class":208},[67,56630,52029],{"class":73},[67,56632,52093],{"class":208},[67,56634,2017],{"class":77},[67,56636,56637],{"class":69,"line":2455},[67,56638,2909],{"class":77},[67,56640,56641],{"class":69,"line":2472},[67,56642,177],{"emptyLinePlaceholder":176},[67,56644,56645,56647],{"class":69,"line":2477},[67,56646,55357],{"class":112},[67,56648,16289],{"class":77},[67,56650,56651,56653,56655,56657],{"class":69,"line":2482},[67,56652,55296],{"class":208},[67,56654,51974],{"class":77},[67,56656,55368],{"class":208},[67,56658,2017],{"class":77},[67,56660,56661,56663,56665,56667],{"class":69,"line":2487},[67,56662,55375],{"class":208},[67,56664,51974],{"class":77},[67,56666,1051],{"class":208},[67,56668,2017],{"class":77},[67,56670,56671,56673,56675,56677],{"class":69,"line":2501},[67,56672,55386],{"class":208},[67,56674,51974],{"class":77},[67,56676,1051],{"class":208},[67,56678,2017],{"class":77},[67,56680,56681,56683,56685,56687,56689],{"class":69,"line":2506},[67,56682,55308],{"class":208},[67,56684,51974],{"class":77},[67,56686,1169],{"class":208},[67,56688,1186],{"class":73},[67,56690,2017],{"class":77},[67,56692,56693,56695,56697,56699,56701],{"class":69,"line":3298},[67,56694,55322],{"class":208},[67,56696,51974],{"class":77},[67,56698,1431],{"class":208},[67,56700,1186],{"class":73},[67,56702,2017],{"class":77},[67,56704,56705,56707,56709,56711],{"class":69,"line":3312},[67,56706,55421],{"class":208},[67,56708,51974],{"class":77},[67,56710,55426],{"class":208},[67,56712,2017],{"class":77},[67,56714,56715],{"class":69,"line":3320},[67,56716,2909],{"class":77},[67,56718,56719],{"class":69,"line":3325},[67,56720,177],{"emptyLinePlaceholder":176},[67,56722,56723,56725,56727],{"class":69,"line":3331},[67,56724,55357],{"class":112},[67,56726,7544],{"class":51837},[67,56728,16289],{"class":77},[67,56730,56731,56733,56735,56737],{"class":69,"line":3337},[67,56732,55296],{"class":208},[67,56734,51974],{"class":77},[67,56736,55368],{"class":208},[67,56738,2017],{"class":77},[67,56740,56741,56743,56745,56747,56749],{"class":69,"line":3342},[67,56742,55459],{"class":208},[67,56744,51974],{"class":77},[67,56746,1757],{"class":208},[67,56748,52029],{"class":73},[67,56750,2017],{"class":77},[67,56752,56753,56755,56757,56759,56761],{"class":69,"line":8667},[67,56754,55375],{"class":208},[67,56756,51974],{"class":77},[67,56758,1556],{"class":208},[67,56760,52029],{"class":73},[67,56762,2017],{"class":77},[67,56764,56765,56767,56769,56771,56773],{"class":69,"line":8691},[67,56766,55484],{"class":208},[67,56768,51974],{"class":77},[67,56770,1177],{"class":208},[67,56772,52029],{"class":73},[67,56774,2017],{"class":77},[67,56776,56777],{"class":69,"line":8696},[67,56778,2909],{"class":77},[67,56780,56781],{"class":69,"line":8702},[67,56782,177],{"emptyLinePlaceholder":176},[67,56784,56785,56787],{"class":69,"line":8729},[67,56786,55505],{"class":51837},[67,56788,16289],{"class":77},[67,56790,56791,56793,56795,56797],{"class":69,"line":8734},[67,56792,55296],{"class":208},[67,56794,51974],{"class":77},[67,56796,55368],{"class":208},[67,56798,2017],{"class":77},[67,56800,56801,56803,56805,56807,56809],{"class":69,"line":8740},[67,56802,55484],{"class":208},[67,56804,51974],{"class":77},[67,56806,1637],{"class":208},[67,56808,52029],{"class":73},[67,56810,2017],{"class":77},[67,56812,56813,56815,56817,56819,56821],{"class":69,"line":8752},[67,56814,55375],{"class":208},[67,56816,51974],{"class":77},[67,56818,1556],{"class":208},[67,56820,52029],{"class":73},[67,56822,2017],{"class":77},[67,56824,56825,56827,56829,56831],{"class":69,"line":8764},[67,56826,55546],{"class":208},[67,56828,51974],{"class":77},[67,56830,52014],{"class":208},[67,56832,2017],{"class":77},[67,56834,56835,56837,56839,56841],{"class":69,"line":8776},[67,56836,55557],{"class":208},[67,56838,51974],{"class":77},[67,56840,52205],{"class":208},[67,56842,2017],{"class":77},[67,56844,56845,56847,56849,56851],{"class":69,"line":10435},[67,56846,55296],{"class":208},[67,56848,51974],{"class":77},[67,56850,55368],{"class":208},[67,56852,2017],{"class":77},[67,56854,56855,56857,56859,56861,56863],{"class":69,"line":10459},[67,56856,55308],{"class":208},[67,56858,51974],{"class":77},[67,56860,4712],{"class":208},[67,56862,52029],{"class":73},[67,56864,2017],{"class":77},[67,56866,56867,56869,56871,56873,56875],{"class":69,"line":10482},[67,56868,55322],{"class":208},[67,56870,51974],{"class":77},[67,56872,1556],{"class":208},[67,56874,52029],{"class":73},[67,56876,2017],{"class":77},[67,56878,56879],{"class":69,"line":10506},[67,56880,2909],{"class":77},[67,56882,56883],{"class":69,"line":10511},[67,56884,177],{"emptyLinePlaceholder":176},[67,56886,56887,56889,56891],{"class":69,"line":10516},[67,56888,55505],{"class":51837},[67,56890,55612],{"class":51837},[67,56892,16289],{"class":77},[67,56894,56895,56897,56899,56901,56903],{"class":69,"line":10521},[67,56896,55308],{"class":208},[67,56898,51974],{"class":77},[67,56900,1556],{"class":208},[67,56902,52029],{"class":73},[67,56904,2017],{"class":77},[67,56906,56907,56909,56911,56913,56915],{"class":69,"line":10530},[67,56908,55322],{"class":208},[67,56910,51974],{"class":77},[67,56912,1556],{"class":208},[67,56914,52029],{"class":73},[67,56916,2017],{"class":77},[67,56918,56919,56921,56923,56925,56927,56929,56931,56933,56935,56937,56939,56941],{"class":69,"line":10535},[67,56920,55421],{"class":208},[67,56922,51974],{"class":77},[67,56924,55647],{"class":208},[67,56926,864],{"class":77},[67,56928,1051],{"class":208},[67,56930,13153],{"class":77},[67,56932,1051],{"class":208},[67,56934,13153],{"class":77},[67,56936,1051],{"class":208},[67,56938,13153],{"class":77},[67,56940,55664],{"class":208},[67,56942,3440],{"class":77},[67,56944,56945,56947,56949,56951,56953],{"class":69,"line":10541},[67,56946,55671],{"class":208},[67,56948,51974],{"class":77},[67,56950,1303],{"class":208},[67,56952,52029],{"class":73},[67,56954,2017],{"class":77},[67,56956,56957],{"class":69,"line":10562},[67,56958,2909],{"class":77},[67,56960,56961],{"class":69,"line":10568},[67,56962,177],{"emptyLinePlaceholder":176},[67,56964,56965,56967],{"class":69,"line":10582},[67,56966,55692],{"class":112},[67,56968,16289],{"class":77},[67,56970,56971,56973,56975,56977],{"class":69,"line":10588},[67,56972,55421],{"class":208},[67,56974,51974],{"class":77},[67,56976,55703],{"class":208},[67,56978,2017],{"class":77},[67,56980,56981],{"class":69,"line":10615},[67,56982,2909],{"class":77},[67,56984,56985,56987,56989],{"class":69,"line":10624},[67,56986,52954],{"class":77},[67,56988,779],{"class":51837},[67,56990,51844],{"class":77},[67,56992,56993,56995,56997],{"class":69,"line":10630},[67,56994,52322],{"class":77},[67,56996,51871],{"class":51837},[67,56998,51844],{"class":77},[67,57000,57001],{"class":69,"line":10638},[67,57002,177],{"emptyLinePlaceholder":176},[67,57004,57005,57007,57009],{"class":69,"line":10643},[67,57006,1766],{"class":77},[67,57008,52337],{"class":51837},[67,57010,51844],{"class":77},[67,57012,57013,57015,57017,57019,57021,57023],{"class":69,"line":17321},[67,57014,52681],{"class":77},[67,57016,52148],{"class":51837},[67,57018,54023],{"class":112},[67,57020,909],{"class":77},[67,57022,54028],{"class":84},[67,57024,51844],{"class":77},[67,57026,57027,57029,57031,57033,57035,57037],{"class":69,"line":17327},[67,57028,51878],{"class":77},[67,57030,52148],{"class":51837},[67,57032,54023],{"class":112},[67,57034,909],{"class":77},[67,57036,55764],{"class":84},[67,57038,51844],{"class":77},[67,57040,57041,57043,57045,57047,57049,57051,57053,57055,57057],{"class":69,"line":17350},[67,57042,55771],{"class":77},[67,57044,725],{"class":51837},[67,57046,55776],{"class":112},[67,57048,909],{"class":77},[67,57050,55781],{"class":84},[67,57052,55784],{"class":112},[67,57054,909],{"class":77},[67,57056,8371],{"class":84},[67,57058,51844],{"class":77},[67,57060,57061,57063,57065],{"class":69,"line":17356},[67,57062,52313],{"class":77},[67,57064,52148],{"class":51837},[67,57066,51844],{"class":77},[67,57068,57069,57071,57073,57075,57077,57079],{"class":69,"line":17379},[67,57070,51878],{"class":77},[67,57072,52148],{"class":51837},[67,57074,54023],{"class":112},[67,57076,909],{"class":77},[67,57078,55811],{"class":84},[67,57080,51844],{"class":77},[67,57082,57083,57085,57087,57089,57091],{"class":69,"line":17393},[67,57084,55771],{"class":77},[67,57086,19],{"class":51837},[67,57088,55822],{"class":77},[67,57090,19],{"class":51837},[67,57092,51844],{"class":77},[67,57094,57095,57097,57099],{"class":69,"line":17413},[67,57096,55771],{"class":77},[67,57098,1863],{"class":51837},[67,57100,51844],{"class":77},[67,57102,57103,57105,57107,57109,57111,57113,57115,57117],{"class":69,"line":17419},[67,57104,55839],{"class":77},[67,57106,818],{"class":51837},[67,57108,54023],{"class":112},[67,57110,909],{"class":77},[67,57112,55848],{"class":84},[67,57114,55851],{"class":77},[67,57116,818],{"class":51837},[67,57118,51844],{"class":77},[67,57120,57121,57123,57125,57127,57129],{"class":69,"line":17430},[67,57122,55839],{"class":77},[67,57124,818],{"class":51837},[67,57126,55851],{"class":77},[67,57128,818],{"class":51837},[67,57130,51844],{"class":77},[67,57132,57133,57135,57137,57139,57141],{"class":69,"line":17453},[67,57134,55839],{"class":77},[67,57136,818],{"class":51837},[67,57138,55851],{"class":77},[67,57140,818],{"class":51837},[67,57142,51844],{"class":77},[67,57144,57145,57147,57149,57151,57153],{"class":69,"line":17475},[67,57146,55839],{"class":77},[67,57148,818],{"class":51837},[67,57150,55851],{"class":77},[67,57152,818],{"class":51837},[67,57154,51844],{"class":77},[67,57156,57157,57159,57161,57163,57165],{"class":69,"line":17480},[67,57158,55839],{"class":77},[67,57160,818],{"class":51837},[67,57162,55851],{"class":77},[67,57164,818],{"class":51837},[67,57166,51844],{"class":77},[67,57168,57169,57171,57173,57175,57177],{"class":69,"line":17486},[67,57170,55839],{"class":77},[67,57172,818],{"class":51837},[67,57174,55851],{"class":77},[67,57176,818],{"class":51837},[67,57178,51844],{"class":77},[67,57180,57181,57183,57185,57187,57189],{"class":69,"line":17500},[67,57182,55839],{"class":77},[67,57184,818],{"class":51837},[67,57186,55851],{"class":77},[67,57188,818],{"class":51837},[67,57190,51844],{"class":77},[67,57192,57193,57195,57197,57199,57201],{"class":69,"line":17513},[67,57194,55839],{"class":77},[67,57196,818],{"class":51837},[67,57198,55851],{"class":77},[67,57200,818],{"class":51837},[67,57202,51844],{"class":77},[67,57204,57205,57207,57209],{"class":69,"line":17518},[67,57206,55944],{"class":77},[67,57208,1863],{"class":51837},[67,57210,51844],{"class":77},[67,57212,57213,57215,57217],{"class":69,"line":17532},[67,57214,52313],{"class":77},[67,57216,52148],{"class":51837},[67,57218,51844],{"class":77},[67,57220,57221,57223,57225],{"class":69,"line":17537},[67,57222,52954],{"class":77},[67,57224,52148],{"class":51837},[67,57226,51844],{"class":77},[67,57228,57229,57231,57233],{"class":69,"line":17543},[67,57230,52681],{"class":77},[67,57232,52350],{"class":51837},[67,57234,51844],{"class":77},[67,57236,57237,57239,57242,57244],{"class":69,"line":17548},[67,57238,11939],{"class":73},[67,57240,57241],{"class":208}," sliderData",[67,57243,14282],{"class":73},[67,57245,55984],{"class":77},[67,57247,57248,57250,57252,57254,57256,57258,57260],{"class":69,"line":17562},[67,57249,55989],{"class":77},[67,57251,55992],{"class":84},[67,57253,55995],{"class":77},[67,57255,55998],{"class":84},[67,57257,56001],{"class":77},[67,57259,56004],{"class":84},[67,57261,56007],{"class":77},[67,57263,57264,57266,57268,57270,57272,57274,57276],{"class":69,"line":17567},[67,57265,55989],{"class":77},[67,57267,56014],{"class":84},[67,57269,55995],{"class":77},[67,57271,56019],{"class":84},[67,57273,56001],{"class":77},[67,57275,56024],{"class":84},[67,57277,56007],{"class":77},[67,57279,57280,57282,57284,57286,57288,57290,57292],{"class":69,"line":17572},[67,57281,55989],{"class":77},[67,57283,56033],{"class":84},[67,57285,55995],{"class":77},[67,57287,56038],{"class":84},[67,57289,56001],{"class":77},[67,57291,56043],{"class":84},[67,57293,56007],{"class":77},[67,57295,57296,57298,57300,57302,57304,57306,57308],{"class":69,"line":17586},[67,57297,55989],{"class":77},[67,57299,56052],{"class":84},[67,57301,55995],{"class":77},[67,57303,56057],{"class":84},[67,57305,56001],{"class":77},[67,57307,56062],{"class":84},[67,57309,56007],{"class":77},[67,57311,57312,57314,57316,57318,57320,57322,57324],{"class":69,"line":17598},[67,57313,55989],{"class":77},[67,57315,56071],{"class":84},[67,57317,55995],{"class":77},[67,57319,56076],{"class":84},[67,57321,56001],{"class":77},[67,57323,56081],{"class":84},[67,57325,56007],{"class":77},[67,57327,57328,57330,57332,57334,57336,57338,57340],{"class":69,"line":17603},[67,57329,55989],{"class":77},[67,57331,56090],{"class":84},[67,57333,55995],{"class":77},[67,57335,56095],{"class":84},[67,57337,56001],{"class":77},[67,57339,56100],{"class":84},[67,57341,56007],{"class":77},[67,57343,57344,57346,57348,57350,57352,57354,57356],{"class":69,"line":17616},[67,57345,55989],{"class":77},[67,57347,56109],{"class":84},[67,57349,55995],{"class":77},[67,57351,56114],{"class":84},[67,57353,56001],{"class":77},[67,57355,56119],{"class":84},[67,57357,56007],{"class":77},[67,57359,57360,57362,57364,57366,57368,57370,57372],{"class":69,"line":17621},[67,57361,55989],{"class":77},[67,57363,56128],{"class":84},[67,57365,55995],{"class":77},[67,57367,56133],{"class":84},[67,57369,56001],{"class":77},[67,57371,56138],{"class":84},[67,57373,56141],{"class":77},[67,57375,57376],{"class":69,"line":17626},[67,57377,53646],{"class":77},[67,57379,57380],{"class":69,"line":17631},[67,57381,57382],{"class":202},"    \u002F\u002F 1.获取元素\n",[67,57384,57385,57387,57389,57391,57393,57395,57397,57399],{"class":69,"line":17644},[67,57386,11939],{"class":73},[67,57388,56152],{"class":208},[67,57390,14282],{"class":73},[67,57392,54933],{"class":77},[67,57394,54936],{"class":112},[67,57396,864],{"class":77},[67,57398,56163],{"class":84},[67,57400,870],{"class":77},[67,57402,57403,57405,57407,57409,57411,57413,57415,57417],{"class":69,"line":17649},[67,57404,11939],{"class":73},[67,57406,7544],{"class":208},[67,57408,14282],{"class":73},[67,57410,54933],{"class":77},[67,57412,54936],{"class":112},[67,57414,864],{"class":77},[67,57416,56182],{"class":84},[67,57418,870],{"class":77},[67,57420,57421,57423,57425,57427],{"class":69,"line":33170},[67,57422,52756],{"class":73},[67,57424,10157],{"class":77},[67,57426,909],{"class":73},[67,57428,47870],{"class":208},[67,57430,57431],{"class":69,"line":33176},[67,57432,57433],{"class":202},"    \u002F\u002F 2.开启定时器\n",[67,57435,57436],{"class":69,"line":33182},[67,57437,57438],{"class":202},"    \u002F\u002F console.log(sliderData[i]) 拿到对应对象了\n",[67,57440,57441,57444,57446,57448],{"class":69,"line":33188},[67,57442,57443],{"class":112},"    setInterval",[67,57445,864],{"class":77},[67,57447,54986],{"class":73},[67,57449,54989],{"class":77},[67,57451,57452,57454],{"class":69,"line":33194},[67,57453,54994],{"class":77},[67,57455,3423],{"class":73},[67,57457,57458,57460,57462,57464,57467,57469],{"class":69,"line":33205},[67,57459,55017],{"class":73},[67,57461,55020],{"class":77},[67,57463,2433],{"class":73},[67,57465,57466],{"class":77}," sliderData.",[67,57468,52505],{"class":208},[67,57470,13160],{"class":77},[67,57472,57473,57476,57478],{"class":69,"line":33211},[67,57474,57475],{"class":77},"        i ",[67,57477,909],{"class":73},[67,57479,47870],{"class":208},[67,57481,57482],{"class":69,"line":33231},[67,57483,52935],{"class":77},[67,57485,57486],{"class":69,"line":33237},[67,57487,57488],{"class":202},"      \u002F\u002F 更换图片路径\n",[67,57490,57491,57493,57495],{"class":69,"line":33248},[67,57492,56258],{"class":77},[67,57494,909],{"class":73},[67,57496,57497],{"class":77}," sliderData[i].url\n",[67,57499,57500],{"class":69,"line":33254},[67,57501,57502],{"class":202},"      \u002F\u002F 把文字写到p里面\n",[67,57504,57505,57507,57509],{"class":69,"line":33260},[67,57506,56268],{"class":77},[67,57508,909],{"class":73},[67,57510,57511],{"class":77}," sliderData[i].title\n",[67,57513,57514],{"class":69,"line":33266},[67,57515,57516],{"class":202},"      \u002F\u002F 小圆点\n",[67,57518,57519],{"class":69,"line":33272},[67,57520,57521],{"class":202},"      \u002F\u002F 先删除以前的active\n",[67,57523,57524],{"class":69,"line":33278},[67,57525,57526],{"class":202},"      \u002F\u002F 只让当前li添加active\n",[67,57528,57529,57531,57533,57535,57538,57541,57544,57546,57548],{"class":69,"line":33284},[67,57530,56308],{"class":77},[67,57532,54936],{"class":112},[67,57534,864],{"class":77},[67,57536,57537],{"class":84},"'.slider-footer .activate'",[67,57539,57540],{"class":77},").classList.",[67,57542,57543],{"class":112},"remove",[67,57545,864],{"class":77},[67,57547,56326],{"class":84},[67,57549,870],{"class":77},[67,57551,57552,57554,57556,57558,57561,57563,57565,57567,57570,57572,57574,57576,57578],{"class":69,"line":33290},[67,57553,56308],{"class":77},[67,57555,54936],{"class":112},[67,57557,864],{"class":77},[67,57559,57560],{"class":84},"`.slider-footer ul li:nth-child(${",[67,57562,1298],{"class":77},[67,57564,46103],{"class":73},[67,57566,25828],{"class":208},[67,57568,57569],{"class":84},"})`",[67,57571,57540],{"class":77},[67,57573,6053],{"class":112},[67,57575,864],{"class":77},[67,57577,56326],{"class":84},[67,57579,870],{"class":77},[67,57581,57582],{"class":69,"line":33310},[67,57583,177],{"emptyLinePlaceholder":176},[67,57585,57586,57588,57590],{"class":69,"line":33316},[67,57587,55072],{"class":77},[67,57589,7129],{"class":208},[67,57591,870],{"class":77},[67,57593,57594],{"class":69,"line":33332},[67,57595,177],{"emptyLinePlaceholder":176},[67,57597,57598,57600,57602],{"class":69,"line":33338},[67,57599,52954],{"class":77},[67,57601,52350],{"class":51837},[67,57603,51844],{"class":77},[67,57605,57606,57608,57610],{"class":69,"line":33352},[67,57607,52322],{"class":77},[67,57609,52337],{"class":51837},[67,57611,51844],{"class":77},[67,57613,57614],{"class":69,"line":33358},[67,57615,177],{"emptyLinePlaceholder":176},[67,57617,57618,57620,57622],{"class":69,"line":33373},[67,57619,52322],{"class":77},[67,57621,51172],{"class":51837},[67,57623,51844],{"class":77},[14,57625,57627],{"id":57626},"_317-重要知识点","3.1.7 重要知识点",[19,57629,57630,57631],{},"浏览器在渲染文本时， ",[336,57632,57633],{},"没有空格或换行符就没有“断行点”",[19,57635,57636],{},[725,57637],{"alt":62,"src":57638},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-105.png",[19,57640,57641],{},"让一些文字一直在浏览器打印输出的话，如果没有空格，就一直在浏览器一行内打印；当加上空格后，在浏览器一行内打印不开时就自动换行",[19,57643,57644],{},[725,57645],{"alt":62,"src":57646},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-106.png",[19,57648,57649],{},[725,57650],{"alt":62,"src":57651},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-107.png",[803,57653,57655],{"id":57654},"_32-dom事件基础","3.2 DOM事件基础",[14,57657,57659],{"id":57658},"_321-事件监听","3.2.1 事件监听",[19,57661,57662],{},[725,57663],{"alt":62,"src":57664},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-108.png",[19,57666,57667],{},"事件监听有响应的发生",[19,57669,57670],{},[725,57671],{"alt":62,"src":57672},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-109.png",[19,57674,57675],{},"不会立即执行,跟定时器差不多,定时器是经过了间隔时间再输出;定时器是当经历事件触发之后才会执行",[19,57677,57678],{},"对于有名函数,要执行的函数名后边不要加()",[14,57680,57682],{"id":57681},"_322-随机点名案例","3.2.2 随机点名案例",[57,57684,57686],{"className":51170,"code":57685,"language":51172,"meta":62,"style":62},"\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",[64,57687,57688,57698,57712,57716,57724,57738,57758,57770,57778,57784,57794,57804,57808,57812,57819,57830,57834,57838,57844,57856,57870,57880,57892,57905,57909,57913,57920,57924,57937,57949,57961,57965,57969,57973,57980,57990,57994,57998,58007,58019,58031,58046,58050,58058,58066,58070,58078,58091,58105,58118,58138,58146,58161,58181,58201,58209,58213,58221,58226,58262,58282,58287,58306,58311,58322,58327,58338,58343,58362,58377,58382,58408,58418,58427,58432,58448,58453,58458,58463,58478,58482,58486,58491,58510,58527,58535,58540,58555,58559,58563,58571,58579,58583],{"__ignoreMap":62},[67,57689,57690,57692,57694,57696],{"class":69,"line":70},[67,57691,51834],{"class":77},[67,57693,51838],{"class":51837},[67,57695,51841],{"class":112},[67,57697,51844],{"class":77},[67,57699,57700,57702,57704,57706,57708,57710],{"class":69,"line":143},[67,57701,1766],{"class":77},[67,57703,51172],{"class":51837},[67,57705,51853],{"class":112},[67,57707,909],{"class":77},[67,57709,51858],{"class":84},[67,57711,51844],{"class":77},[67,57713,57714],{"class":69,"line":149},[67,57715,177],{"emptyLinePlaceholder":176},[67,57717,57718,57720,57722],{"class":69,"line":155},[67,57719,1766],{"class":77},[67,57721,51871],{"class":51837},[67,57723,51844],{"class":77},[67,57725,57726,57728,57730,57732,57734,57736],{"class":69,"line":161},[67,57727,52681],{"class":77},[67,57729,51881],{"class":51837},[67,57731,51884],{"class":112},[67,57733,909],{"class":77},[67,57735,51889],{"class":84},[67,57737,51844],{"class":77},[67,57739,57740,57742,57744,57746,57748,57750,57752,57754,57756],{"class":69,"line":167},[67,57741,52681],{"class":77},[67,57743,51881],{"class":51837},[67,57745,15637],{"class":112},[67,57747,909],{"class":77},[67,57749,51928],{"class":84},[67,57751,51908],{"class":112},[67,57753,909],{"class":77},[67,57755,51935],{"class":84},[67,57757,51844],{"class":77},[67,57759,57760,57762,57764,57766,57768],{"class":69,"line":173},[67,57761,52681],{"class":77},[67,57763,51944],{"class":51837},[67,57765,51947],{"class":77},[67,57767,51944],{"class":51837},[67,57769,51844],{"class":77},[67,57771,57772,57774,57776],{"class":69,"line":180},[67,57773,52681],{"class":77},[67,57775,779],{"class":51837},[67,57777,51844],{"class":77},[67,57779,57780,57782],{"class":69,"line":186},[67,57781,7122],{"class":51837},[67,57783,16289],{"class":77},[67,57785,57786,57788,57790,57792],{"class":69,"line":444},[67,57787,55243],{"class":208},[67,57789,51974],{"class":77},[67,57791,1051],{"class":208},[67,57793,2017],{"class":77},[67,57795,57796,57798,57800,57802],{"class":69,"line":2335},[67,57797,55232],{"class":208},[67,57799,51974],{"class":77},[67,57801,1051],{"class":208},[67,57803,2017],{"class":77},[67,57805,57806],{"class":69,"line":2340},[67,57807,2909],{"class":77},[67,57809,57810],{"class":69,"line":2346},[67,57811,177],{"emptyLinePlaceholder":176},[67,57813,57814,57817],{"class":69,"line":2351},[67,57815,57816],{"class":51837},"    h2",[67,57818,16289],{"class":77},[67,57820,57821,57824,57826,57828],{"class":69,"line":2365},[67,57822,57823],{"class":208},"      text-align",[67,57825,51974],{"class":77},[67,57827,52129],{"class":208},[67,57829,2017],{"class":77},[67,57831,57832],{"class":69,"line":2370},[67,57833,2909],{"class":77},[67,57835,57836],{"class":69,"line":2376},[67,57837,177],{"emptyLinePlaceholder":176},[67,57839,57840,57842],{"class":69,"line":2397},[67,57841,55289],{"class":112},[67,57843,16289],{"class":77},[67,57845,57846,57848,57850,57852,57854],{"class":69,"line":2402},[67,57847,55308],{"class":208},[67,57849,51974],{"class":77},[67,57851,2262],{"class":208},[67,57853,52029],{"class":73},[67,57855,2017],{"class":77},[67,57857,57858,57860,57862,57864,57866,57868],{"class":69,"line":2416},[67,57859,55243],{"class":208},[67,57861,51974],{"class":77},[67,57863,1512],{"class":208},[67,57865,52029],{"class":73},[67,57867,52093],{"class":208},[67,57869,2017],{"class":77},[67,57871,57872,57874,57876,57878],{"class":69,"line":2421},[67,57873,55546],{"class":208},[67,57875,51974],{"class":77},[67,57877,52014],{"class":208},[67,57879,2017],{"class":77},[67,57881,57882,57884,57886,57888,57890],{"class":69,"line":2450},[67,57883,55459],{"class":208},[67,57885,51974],{"class":77},[67,57887,1681],{"class":208},[67,57889,52029],{"class":73},[67,57891,2017],{"class":77},[67,57893,57894,57897,57899,57901,57903],{"class":69,"line":2455},[67,57895,57896],{"class":208},"      line-height",[67,57898,51974],{"class":77},[67,57900,1259],{"class":208},[67,57902,52029],{"class":73},[67,57904,2017],{"class":77},[67,57906,57907],{"class":69,"line":2472},[67,57908,2909],{"class":77},[67,57910,57911],{"class":69,"line":2477},[67,57912,177],{"emptyLinePlaceholder":176},[67,57914,57915,57918],{"class":69,"line":2482},[67,57916,57917],{"class":112},"    .qs",[67,57919,16289],{"class":77},[67,57921,57922],{"class":69,"line":2487},[67,57923,177],{"emptyLinePlaceholder":176},[67,57925,57926,57928,57930,57933,57935],{"class":69,"line":2501},[67,57927,55308],{"class":208},[67,57929,51974],{"class":77},[67,57931,57932],{"class":208},"450",[67,57934,52029],{"class":73},[67,57936,2017],{"class":77},[67,57938,57939,57941,57943,57945,57947],{"class":69,"line":2506},[67,57940,55322],{"class":208},[67,57942,51974],{"class":77},[67,57944,1259],{"class":208},[67,57946,52029],{"class":73},[67,57948,2017],{"class":77},[67,57950,57951,57954,57956,57959],{"class":69,"line":3298},[67,57952,57953],{"class":208},"      color",[67,57955,51974],{"class":77},[67,57957,57958],{"class":208},"red",[67,57960,2017],{"class":77},[67,57962,57963],{"class":69,"line":3312},[67,57964,177],{"emptyLinePlaceholder":176},[67,57966,57967],{"class":69,"line":3320},[67,57968,2909],{"class":77},[67,57970,57971],{"class":69,"line":3325},[67,57972,177],{"emptyLinePlaceholder":176},[67,57974,57975,57978],{"class":69,"line":3331},[67,57976,57977],{"class":112},"    .btns",[67,57979,16289],{"class":77},[67,57981,57982,57984,57986,57988],{"class":69,"line":3337},[67,57983,57823],{"class":208},[67,57985,51974],{"class":77},[67,57987,52129],{"class":208},[67,57989,2017],{"class":77},[67,57991,57992],{"class":69,"line":3342},[67,57993,2909],{"class":77},[67,57995,57996],{"class":69,"line":8667},[67,57997,177],{"emptyLinePlaceholder":176},[67,57999,58000,58002,58005],{"class":69,"line":8691},[67,58001,57977],{"class":112},[67,58003,58004],{"class":51837}," button",[67,58006,16289],{"class":77},[67,58008,58009,58011,58013,58015,58017],{"class":69,"line":8696},[67,58010,55308],{"class":208},[67,58012,51974],{"class":77},[67,58014,1673],{"class":208},[67,58016,52029],{"class":73},[67,58018,2017],{"class":77},[67,58020,58021,58023,58025,58027,58029],{"class":69,"line":8702},[67,58022,55322],{"class":208},[67,58024,51974],{"class":77},[67,58026,1131],{"class":208},[67,58028,52029],{"class":73},[67,58030,2017],{"class":77},[67,58032,58033,58035,58037,58039,58042,58044],{"class":69,"line":8729},[67,58034,55243],{"class":208},[67,58036,51974],{"class":77},[67,58038,1051],{"class":208},[67,58040,58041],{"class":208}," 50",[67,58043,52029],{"class":73},[67,58045,2017],{"class":77},[67,58047,58048],{"class":69,"line":8734},[67,58049,2909],{"class":77},[67,58051,58052,58054,58056],{"class":69,"line":8740},[67,58053,52954],{"class":77},[67,58055,779],{"class":51837},[67,58057,51844],{"class":77},[67,58059,58060,58062,58064],{"class":69,"line":8752},[67,58061,52322],{"class":77},[67,58063,51871],{"class":51837},[67,58065,51844],{"class":77},[67,58067,58068],{"class":69,"line":8764},[67,58069,177],{"emptyLinePlaceholder":176},[67,58071,58072,58074,58076],{"class":69,"line":8776},[67,58073,1766],{"class":77},[67,58075,52337],{"class":51837},[67,58077,51844],{"class":77},[67,58079,58080,58082,58084,58087,58089],{"class":69,"line":10435},[67,58081,52681],{"class":77},[67,58083,803],{"class":51837},[67,58085,58086],{"class":77},">随机点名\u003C\u002F",[67,58088,803],{"class":51837},[67,58090,51844],{"class":77},[67,58092,58093,58095,58097,58099,58101,58103],{"class":69,"line":10459},[67,58094,52681],{"class":77},[67,58096,52148],{"class":51837},[67,58098,54023],{"class":112},[67,58100,909],{"class":77},[67,58102,54028],{"class":84},[67,58104,51844],{"class":77},[67,58106,58107,58109,58111,58114,58116],{"class":69,"line":10482},[67,58108,51878],{"class":77},[67,58110,67],{"class":51837},[67,58112,58113],{"class":77},">名字是：\u003C\u002F",[67,58115,67],{"class":51837},[67,58117,51844],{"class":77},[67,58119,58120,58122,58124,58126,58128,58131,58134,58136],{"class":69,"line":10506},[67,58121,51878],{"class":77},[67,58123,52148],{"class":51837},[67,58125,54023],{"class":112},[67,58127,909],{"class":77},[67,58129,58130],{"class":84},"\"qs\"",[67,58132,58133],{"class":77},">这里显示姓名\u003C\u002F",[67,58135,52148],{"class":51837},[67,58137,51844],{"class":77},[67,58139,58140,58142,58144],{"class":69,"line":10511},[67,58141,52954],{"class":77},[67,58143,52148],{"class":51837},[67,58145,51844],{"class":77},[67,58147,58148,58150,58152,58154,58156,58159],{"class":69,"line":10516},[67,58149,52681],{"class":77},[67,58151,52148],{"class":51837},[67,58153,54023],{"class":112},[67,58155,909],{"class":77},[67,58157,58158],{"class":84},"\"btns\"",[67,58160,51844],{"class":77},[67,58162,58163,58165,58167,58169,58171,58174,58177,58179],{"class":69,"line":10521},[67,58164,51878],{"class":77},[67,58166,54424],{"class":51837},[67,58168,54023],{"class":112},[67,58170,909],{"class":77},[67,58172,58173],{"class":84},"\"start\"",[67,58175,58176],{"class":77},">开始\u003C\u002F",[67,58178,54424],{"class":51837},[67,58180,51844],{"class":77},[67,58182,58183,58185,58187,58189,58191,58194,58197,58199],{"class":69,"line":10530},[67,58184,51878],{"class":77},[67,58186,54424],{"class":51837},[67,58188,54023],{"class":112},[67,58190,909],{"class":77},[67,58192,58193],{"class":84},"\"end\"",[67,58195,58196],{"class":77},">结束\u003C\u002F",[67,58198,54424],{"class":51837},[67,58200,51844],{"class":77},[67,58202,58203,58205,58207],{"class":69,"line":10535},[67,58204,52954],{"class":77},[67,58206,52148],{"class":51837},[67,58208,51844],{"class":77},[67,58210,58211],{"class":69,"line":10541},[67,58212,177],{"emptyLinePlaceholder":176},[67,58214,58215,58217,58219],{"class":69,"line":10562},[67,58216,52681],{"class":77},[67,58218,52350],{"class":51837},[67,58220,51844],{"class":77},[67,58222,58223],{"class":69,"line":10568},[67,58224,58225],{"class":202},"    \u002F\u002F 数据数组\n",[67,58227,58228,58230,58233,58235,58237,58240,58242,58245,58247,58250,58252,58255,58257,58260],{"class":69,"line":10582},[67,58229,11939],{"class":73},[67,58231,58232],{"class":208}," arr",[67,58234,14282],{"class":73},[67,58236,52763],{"class":77},[67,58238,58239],{"class":84},"'马超'",[67,58241,13153],{"class":77},[67,58243,58244],{"class":84},"'黄忠'",[67,58246,13153],{"class":77},[67,58248,58249],{"class":84},"'赵云'",[67,58251,13153],{"class":77},[67,58253,58254],{"class":84},"'关羽'",[67,58256,13153],{"class":77},[67,58258,58259],{"class":84},"'张飞'",[67,58261,33783],{"class":77},[67,58263,58264,58266,58269,58271,58273,58275,58277,58280],{"class":69,"line":10588},[67,58265,11939],{"class":73},[67,58267,58268],{"class":208}," qs",[67,58270,14282],{"class":73},[67,58272,54933],{"class":77},[67,58274,54936],{"class":112},[67,58276,864],{"class":77},[67,58278,58279],{"class":84},"'.qs'",[67,58281,870],{"class":77},[67,58283,58284],{"class":69,"line":10615},[67,58285,58286],{"class":202},"    \u002F\u002F 1.业务1.开始按钮模块\n",[67,58288,58289,58291,58293,58295,58297,58299,58301,58304],{"class":69,"line":10624},[67,58290,11939],{"class":73},[67,58292,580],{"class":208},[67,58294,14282],{"class":73},[67,58296,54933],{"class":77},[67,58298,54936],{"class":112},[67,58300,864],{"class":77},[67,58302,58303],{"class":84},"'.start'",[67,58305,870],{"class":77},[67,58307,58308],{"class":69,"line":10630},[67,58309,58310],{"class":202},"    \u002F\u002F 定义全局变量, 如果在函数里边的话就是局部变量, 另一个函数无法使用\n",[67,58312,58313,58315,58318,58320],{"class":69,"line":10638},[67,58314,52756],{"class":73},[67,58316,58317],{"class":77}," timerId ",[67,58319,909],{"class":73},[67,58321,47870],{"class":208},[67,58323,58324],{"class":69,"line":10643},[67,58325,58326],{"class":202},"    \u002F\u002F 随机号要全局变量\n",[67,58328,58329,58331,58334,58336],{"class":69,"line":17321},[67,58330,52756],{"class":73},[67,58332,58333],{"class":77}," random ",[67,58335,909],{"class":73},[67,58337,47870],{"class":208},[67,58339,58340],{"class":69,"line":17327},[67,58341,58342],{"class":202},"    \u002F\u002F 1.1 添加点击事件\n",[67,58344,58345,58348,58351,58353,58356,58358,58360],{"class":69,"line":17350},[67,58346,58347],{"class":77},"    start.",[67,58349,58350],{"class":112},"addEventListener",[67,58352,864],{"class":77},[67,58354,58355],{"class":84},"'click'",[67,58357,13153],{"class":77},[67,58359,54986],{"class":73},[67,58361,54989],{"class":77},[67,58363,58364,58367,58369,58371,58373,58375],{"class":69,"line":17356},[67,58365,58366],{"class":77},"      timerId ",[67,58368,909],{"class":73},[67,58370,54981],{"class":112},[67,58372,864],{"class":77},[67,58374,54986],{"class":73},[67,58376,54989],{"class":77},[67,58378,58379],{"class":69,"line":17379},[67,58380,58381],{"class":202},"        \u002F\u002F 随机数\n",[67,58383,58384,58387,58389,58392,58395,58398,58400,58402,58404,58406],{"class":69,"line":17393},[67,58385,58386],{"class":77},"        random ",[67,58388,909],{"class":73},[67,58390,58391],{"class":112}," parseInt",[67,58393,58394],{"class":77},"(Math.",[67,58396,58397],{"class":112},"random",[67,58399,13768],{"class":77},[67,58401,1312],{"class":73},[67,58403,52502],{"class":77},[67,58405,52505],{"class":208},[67,58407,870],{"class":77},[67,58409,58410,58413,58415],{"class":69,"line":17413},[67,58411,58412],{"class":77},"        qs.innerHTML ",[67,58414,909],{"class":73},[67,58416,58417],{"class":77}," arr[random]\n",[67,58419,58420,58423,58425],{"class":69,"line":17419},[67,58421,58422],{"class":77},"      }, ",[67,58424,1131],{"class":208},[67,58426,870],{"class":77},[67,58428,58429],{"class":69,"line":17430},[67,58430,58431],{"class":202},"      \u002F\u002F 如果数组里面只有一个值了, 不需要抽取了, 让两个按钮禁用就可以\n",[67,58433,58434,58436,58439,58441,58444,58446],{"class":69,"line":17453},[67,58435,55017],{"class":73},[67,58437,58438],{"class":77}," (arr.",[67,58440,52505],{"class":208},[67,58442,58443],{"class":73}," ===",[67,58445,25828],{"class":208},[67,58447,13160],{"class":77},[67,58449,58450],{"class":69,"line":17475},[67,58451,58452],{"class":202},"        \u002F\u002F start.disabled = true\n",[67,58454,58455],{"class":69,"line":17480},[67,58456,58457],{"class":202},"        \u002F\u002F end.disabled = true\n",[67,58459,58460],{"class":69,"line":17486},[67,58461,58462],{"class":202},"        \u002F\u002F 可以合起来写\n",[67,58464,58465,58468,58470,58473,58475],{"class":69,"line":17500},[67,58466,58467],{"class":77},"        start.disabled ",[67,58469,909],{"class":73},[67,58471,58472],{"class":77}," end.disabled ",[67,58474,909],{"class":73},[67,58476,58477],{"class":208}," true\n",[67,58479,58480],{"class":69,"line":17513},[67,58481,52935],{"class":77},[67,58483,58484],{"class":69,"line":17518},[67,58485,33998],{"class":77},[67,58487,58488],{"class":69,"line":17532},[67,58489,58490],{"class":202},"    \u002F\u002F 1.2 关闭按钮模块\n",[67,58492,58493,58495,58497,58499,58501,58503,58505,58508],{"class":69,"line":17537},[67,58494,11939],{"class":73},[67,58496,4919],{"class":208},[67,58498,14282],{"class":73},[67,58500,54933],{"class":77},[67,58502,54936],{"class":112},[67,58504,864],{"class":77},[67,58506,58507],{"class":84},"'.end'",[67,58509,870],{"class":77},[67,58511,58512,58515,58517,58519,58521,58523,58525],{"class":69,"line":17543},[67,58513,58514],{"class":77},"    end.",[67,58516,58350],{"class":112},[67,58518,864],{"class":77},[67,58520,58355],{"class":84},[67,58522,13153],{"class":77},[67,58524,54986],{"class":73},[67,58526,54989],{"class":77},[67,58528,58529,58532],{"class":69,"line":17548},[67,58530,58531],{"class":112},"      clearInterval",[67,58533,58534],{"class":77},"(timerId)\n",[67,58536,58537],{"class":69,"line":17562},[67,58538,58539],{"class":202},"      \u002F\u002F 结束了.可以删除掉当前抽取的那个数组元素\n",[67,58541,58542,58545,58548,58551,58553],{"class":69,"line":17567},[67,58543,58544],{"class":77},"      arr.",[67,58546,58547],{"class":112},"splice",[67,58549,58550],{"class":77},"(random, ",[67,58552,1077],{"class":208},[67,58554,870],{"class":77},[67,58556,58557],{"class":69,"line":17572},[67,58558,33998],{"class":77},[67,58560,58561],{"class":69,"line":17586},[67,58562,177],{"emptyLinePlaceholder":176},[67,58564,58565,58567,58569],{"class":69,"line":17598},[67,58566,52954],{"class":77},[67,58568,52350],{"class":51837},[67,58570,51844],{"class":77},[67,58572,58573,58575,58577],{"class":69,"line":17603},[67,58574,52322],{"class":77},[67,58576,52337],{"class":51837},[67,58578,51844],{"class":77},[67,58580,58581],{"class":69,"line":17616},[67,58582,177],{"emptyLinePlaceholder":176},[67,58584,58585,58587,58589],{"class":69,"line":17621},[67,58586,52322],{"class":77},[67,58588,51172],{"class":51837},[67,58590,51844],{"class":77},[19,58592,58593],{},"函数中声明的变量是局部作用变量,另一个函数是无法使用的,想使用的话,就将这个变量改为全局变量",[14,58595,58597],{"id":58596},"_323-垃圾回收机制","3.2.3 垃圾回收机制",[57,58599,58601],{"className":51170,"code":58600,"language":51172,"meta":62,"style":62},"\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",[64,58602,58603,58613,58627,58631,58639,58653,58673,58685,58693,58697,58705,58717,58725,58744,58761,58777,58787,58791,58799,58807,58811],{"__ignoreMap":62},[67,58604,58605,58607,58609,58611],{"class":69,"line":70},[67,58606,51834],{"class":77},[67,58608,51838],{"class":51837},[67,58610,51841],{"class":112},[67,58612,51844],{"class":77},[67,58614,58615,58617,58619,58621,58623,58625],{"class":69,"line":143},[67,58616,1766],{"class":77},[67,58618,51172],{"class":51837},[67,58620,51853],{"class":112},[67,58622,909],{"class":77},[67,58624,51858],{"class":84},[67,58626,51844],{"class":77},[67,58628,58629],{"class":69,"line":149},[67,58630,177],{"emptyLinePlaceholder":176},[67,58632,58633,58635,58637],{"class":69,"line":155},[67,58634,1766],{"class":77},[67,58636,51871],{"class":51837},[67,58638,51844],{"class":77},[67,58640,58641,58643,58645,58647,58649,58651],{"class":69,"line":161},[67,58642,52681],{"class":77},[67,58644,51881],{"class":51837},[67,58646,51884],{"class":112},[67,58648,909],{"class":77},[67,58650,51889],{"class":84},[67,58652,51844],{"class":77},[67,58654,58655,58657,58659,58661,58663,58665,58667,58669,58671],{"class":69,"line":167},[67,58656,52681],{"class":77},[67,58658,51881],{"class":51837},[67,58660,15637],{"class":112},[67,58662,909],{"class":77},[67,58664,51928],{"class":84},[67,58666,51908],{"class":112},[67,58668,909],{"class":77},[67,58670,51935],{"class":84},[67,58672,51844],{"class":77},[67,58674,58675,58677,58679,58681,58683],{"class":69,"line":173},[67,58676,52681],{"class":77},[67,58678,51944],{"class":51837},[67,58680,51947],{"class":77},[67,58682,51944],{"class":51837},[67,58684,51844],{"class":77},[67,58686,58687,58689,58691],{"class":69,"line":180},[67,58688,52322],{"class":77},[67,58690,51871],{"class":51837},[67,58692,51844],{"class":77},[67,58694,58695],{"class":69,"line":186},[67,58696,177],{"emptyLinePlaceholder":176},[67,58698,58699,58701,58703],{"class":69,"line":444},[67,58700,1766],{"class":77},[67,58702,52337],{"class":51837},[67,58704,51844],{"class":77},[67,58706,58707,58709,58711,58713,58715],{"class":69,"line":2335},[67,58708,52681],{"class":77},[67,58710,54424],{"class":51837},[67,58712,54430],{"class":77},[67,58714,54424],{"class":51837},[67,58716,51844],{"class":77},[67,58718,58719,58721,58723],{"class":69,"line":2340},[67,58720,52681],{"class":77},[67,58722,52350],{"class":51837},[67,58724,51844],{"class":77},[67,58726,58727,58729,58731,58733,58735,58737,58739,58742],{"class":69,"line":2346},[67,58728,11939],{"class":73},[67,58730,54928],{"class":208},[67,58732,14282],{"class":73},[67,58734,54933],{"class":77},[67,58736,54936],{"class":112},[67,58738,864],{"class":77},[67,58740,58741],{"class":84},"'button'",[67,58743,870],{"class":77},[67,58745,58746,58749,58751,58753,58755,58757,58759],{"class":69,"line":2351},[67,58747,58748],{"class":77},"    btn.",[67,58750,58350],{"class":112},[67,58752,864],{"class":77},[67,58754,58355],{"class":84},[67,58756,13153],{"class":77},[67,58758,54986],{"class":73},[67,58760,54989],{"class":77},[67,58762,58763,58766,58768,58770,58773,58775],{"class":69,"line":2365},[67,58764,58765],{"class":73},"      const",[67,58767,2962],{"class":208},[67,58769,14282],{"class":73},[67,58771,58772],{"class":77}," Math.",[67,58774,58397],{"class":112},[67,58776,2698],{"class":77},[67,58778,58779,58782,58785],{"class":69,"line":2370},[67,58780,58781],{"class":77},"      console.",[67,58783,58784],{"class":112},"log",[67,58786,877],{"class":77},[67,58788,58789],{"class":69,"line":2376},[67,58790,33998],{"class":77},[67,58792,58793,58795,58797],{"class":69,"line":2397},[67,58794,52954],{"class":77},[67,58796,52350],{"class":51837},[67,58798,51844],{"class":77},[67,58800,58801,58803,58805],{"class":69,"line":2402},[67,58802,52322],{"class":77},[67,58804,52337],{"class":51837},[67,58806,51844],{"class":77},[67,58808,58809],{"class":69,"line":2416},[67,58810,177],{"emptyLinePlaceholder":176},[67,58812,58813,58815,58817],{"class":69,"line":2421},[67,58814,52322],{"class":77},[67,58816,51172],{"class":51837},[67,58818,51844],{"class":77},[19,58820,58821],{},"当对按钮进行点击事件,就会执行函数,执行完之后这个变量就没用了,js有自动回收机制,相当于把这两行代码给删除了,当再次点击时,会创立一个新的变量出来,这个新变量与之前的那个是不同的,之前那个压根就没了,被回了,所以写const没事",[19,58823,58824],{},"常量不可以重新赋值",[19,58826,58827],{},"函数内部的变量和定义的常量在函数执行之后会有垃圾回收机制",[57,58829,58831],{"className":51170,"code":58830,"language":51172,"meta":62,"style":62},"\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",[64,58832,58833,58843,58857,58861,58869,58883,58903,58915,58923,58927,58935,58947,58955,58966,58984,59000,59014,59022,59026,59034,59042,59046],{"__ignoreMap":62},[67,58834,58835,58837,58839,58841],{"class":69,"line":70},[67,58836,51834],{"class":77},[67,58838,51838],{"class":51837},[67,58840,51841],{"class":112},[67,58842,51844],{"class":77},[67,58844,58845,58847,58849,58851,58853,58855],{"class":69,"line":143},[67,58846,1766],{"class":77},[67,58848,51172],{"class":51837},[67,58850,51853],{"class":112},[67,58852,909],{"class":77},[67,58854,51858],{"class":84},[67,58856,51844],{"class":77},[67,58858,58859],{"class":69,"line":149},[67,58860,177],{"emptyLinePlaceholder":176},[67,58862,58863,58865,58867],{"class":69,"line":155},[67,58864,1766],{"class":77},[67,58866,51871],{"class":51837},[67,58868,51844],{"class":77},[67,58870,58871,58873,58875,58877,58879,58881],{"class":69,"line":161},[67,58872,52681],{"class":77},[67,58874,51881],{"class":51837},[67,58876,51884],{"class":112},[67,58878,909],{"class":77},[67,58880,51889],{"class":84},[67,58882,51844],{"class":77},[67,58884,58885,58887,58889,58891,58893,58895,58897,58899,58901],{"class":69,"line":167},[67,58886,52681],{"class":77},[67,58888,51881],{"class":51837},[67,58890,15637],{"class":112},[67,58892,909],{"class":77},[67,58894,51928],{"class":84},[67,58896,51908],{"class":112},[67,58898,909],{"class":77},[67,58900,51935],{"class":84},[67,58902,51844],{"class":77},[67,58904,58905,58907,58909,58911,58913],{"class":69,"line":173},[67,58906,52681],{"class":77},[67,58908,51944],{"class":51837},[67,58910,51947],{"class":77},[67,58912,51944],{"class":51837},[67,58914,51844],{"class":77},[67,58916,58917,58919,58921],{"class":69,"line":180},[67,58918,52322],{"class":77},[67,58920,51871],{"class":51837},[67,58922,51844],{"class":77},[67,58924,58925],{"class":69,"line":186},[67,58926,177],{"emptyLinePlaceholder":176},[67,58928,58929,58931,58933],{"class":69,"line":444},[67,58930,1766],{"class":77},[67,58932,52337],{"class":51837},[67,58934,51844],{"class":77},[67,58936,58937,58939,58941,58943,58945],{"class":69,"line":2335},[67,58938,52681],{"class":77},[67,58940,54424],{"class":51837},[67,58942,54430],{"class":77},[67,58944,54424],{"class":51837},[67,58946,51844],{"class":77},[67,58948,58949,58951,58953],{"class":69,"line":2340},[67,58950,52681],{"class":77},[67,58952,52350],{"class":51837},[67,58954,51844],{"class":77},[67,58956,58957,58959,58961,58963],{"class":69,"line":2346},[67,58958,11939],{"class":73},[67,58960,2962],{"class":208},[67,58962,14282],{"class":73},[67,58964,58965],{"class":208}," 10\n",[67,58967,58968,58970,58972,58974,58976,58978,58980,58982],{"class":69,"line":2351},[67,58969,11939],{"class":73},[67,58971,54928],{"class":208},[67,58973,14282],{"class":73},[67,58975,54933],{"class":77},[67,58977,54936],{"class":112},[67,58979,864],{"class":77},[67,58981,58741],{"class":84},[67,58983,870],{"class":77},[67,58985,58986,58988,58990,58992,58994,58996,58998],{"class":69,"line":2365},[67,58987,58748],{"class":77},[67,58989,58350],{"class":112},[67,58991,864],{"class":77},[67,58993,58355],{"class":84},[67,58995,13153],{"class":77},[67,58997,54986],{"class":73},[67,58999,54989],{"class":77},[67,59001,59002,59004,59006,59008,59010,59012],{"class":69,"line":2370},[67,59003,58765],{"class":73},[67,59005,2962],{"class":208},[67,59007,14282],{"class":73},[67,59009,58772],{"class":77},[67,59011,58397],{"class":112},[67,59013,2698],{"class":77},[67,59015,59016,59018,59020],{"class":69,"line":2376},[67,59017,58781],{"class":77},[67,59019,58784],{"class":112},[67,59021,877],{"class":77},[67,59023,59024],{"class":69,"line":2397},[67,59025,33998],{"class":77},[67,59027,59028,59030,59032],{"class":69,"line":2402},[67,59029,52954],{"class":77},[67,59031,52350],{"class":51837},[67,59033,51844],{"class":77},[67,59035,59036,59038,59040],{"class":69,"line":2416},[67,59037,52322],{"class":77},[67,59039,52337],{"class":51837},[67,59041,51844],{"class":77},[67,59043,59044],{"class":69,"line":2421},[67,59045,177],{"emptyLinePlaceholder":176},[67,59047,59048,59050,59052],{"class":69,"line":2450},[67,59049,52322],{"class":77},[67,59051,51172],{"class":51837},[67,59053,51844],{"class":77},[19,59055,59056],{},"不会报错,num所述的作用域不同,一个在全局作用域,一个在局部作用域",[57,59058,59060],{"className":51170,"code":59059,"language":51172,"meta":62,"style":62},"\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",[64,59061,59062,59072,59086,59090,59098,59112,59132,59144,59152,59156,59164,59176,59184,59194,59212,59228,59241,59249,59253,59261,59269,59273],{"__ignoreMap":62},[67,59063,59064,59066,59068,59070],{"class":69,"line":70},[67,59065,51834],{"class":77},[67,59067,51838],{"class":51837},[67,59069,51841],{"class":112},[67,59071,51844],{"class":77},[67,59073,59074,59076,59078,59080,59082,59084],{"class":69,"line":143},[67,59075,1766],{"class":77},[67,59077,51172],{"class":51837},[67,59079,51853],{"class":112},[67,59081,909],{"class":77},[67,59083,51858],{"class":84},[67,59085,51844],{"class":77},[67,59087,59088],{"class":69,"line":149},[67,59089,177],{"emptyLinePlaceholder":176},[67,59091,59092,59094,59096],{"class":69,"line":155},[67,59093,1766],{"class":77},[67,59095,51871],{"class":51837},[67,59097,51844],{"class":77},[67,59099,59100,59102,59104,59106,59108,59110],{"class":69,"line":161},[67,59101,52681],{"class":77},[67,59103,51881],{"class":51837},[67,59105,51884],{"class":112},[67,59107,909],{"class":77},[67,59109,51889],{"class":84},[67,59111,51844],{"class":77},[67,59113,59114,59116,59118,59120,59122,59124,59126,59128,59130],{"class":69,"line":167},[67,59115,52681],{"class":77},[67,59117,51881],{"class":51837},[67,59119,15637],{"class":112},[67,59121,909],{"class":77},[67,59123,51928],{"class":84},[67,59125,51908],{"class":112},[67,59127,909],{"class":77},[67,59129,51935],{"class":84},[67,59131,51844],{"class":77},[67,59133,59134,59136,59138,59140,59142],{"class":69,"line":173},[67,59135,52681],{"class":77},[67,59137,51944],{"class":51837},[67,59139,51947],{"class":77},[67,59141,51944],{"class":51837},[67,59143,51844],{"class":77},[67,59145,59146,59148,59150],{"class":69,"line":180},[67,59147,52322],{"class":77},[67,59149,51871],{"class":51837},[67,59151,51844],{"class":77},[67,59153,59154],{"class":69,"line":186},[67,59155,177],{"emptyLinePlaceholder":176},[67,59157,59158,59160,59162],{"class":69,"line":444},[67,59159,1766],{"class":77},[67,59161,52337],{"class":51837},[67,59163,51844],{"class":77},[67,59165,59166,59168,59170,59172,59174],{"class":69,"line":2335},[67,59167,52681],{"class":77},[67,59169,54424],{"class":51837},[67,59171,54430],{"class":77},[67,59173,54424],{"class":51837},[67,59175,51844],{"class":77},[67,59177,59178,59180,59182],{"class":69,"line":2340},[67,59179,52681],{"class":77},[67,59181,52350],{"class":51837},[67,59183,51844],{"class":77},[67,59185,59186,59188,59190,59192],{"class":69,"line":2346},[67,59187,11939],{"class":73},[67,59189,2962],{"class":208},[67,59191,14282],{"class":73},[67,59193,58965],{"class":208},[67,59195,59196,59198,59200,59202,59204,59206,59208,59210],{"class":69,"line":2351},[67,59197,11939],{"class":73},[67,59199,54928],{"class":208},[67,59201,14282],{"class":73},[67,59203,54933],{"class":77},[67,59205,54936],{"class":112},[67,59207,864],{"class":77},[67,59209,58741],{"class":84},[67,59211,870],{"class":77},[67,59213,59214,59216,59218,59220,59222,59224,59226],{"class":69,"line":2365},[67,59215,58748],{"class":77},[67,59217,58350],{"class":112},[67,59219,864],{"class":77},[67,59221,58355],{"class":84},[67,59223,13153],{"class":77},[67,59225,54986],{"class":73},[67,59227,54989],{"class":77},[67,59229,59230,59233,59235,59237,59239],{"class":69,"line":2370},[67,59231,59232],{"class":77},"      num ",[67,59234,909],{"class":73},[67,59236,58772],{"class":77},[67,59238,58397],{"class":112},[67,59240,2698],{"class":77},[67,59242,59243,59245,59247],{"class":69,"line":2376},[67,59244,58781],{"class":77},[67,59246,58784],{"class":112},[67,59248,877],{"class":77},[67,59250,59251],{"class":69,"line":2397},[67,59252,33998],{"class":77},[67,59254,59255,59257,59259],{"class":69,"line":2402},[67,59256,52954],{"class":77},[67,59258,52350],{"class":51837},[67,59260,51844],{"class":77},[67,59262,59263,59265,59267],{"class":69,"line":2416},[67,59264,52322],{"class":77},[67,59266,52337],{"class":51837},[67,59268,51844],{"class":77},[67,59270,59271],{"class":69,"line":2421},[67,59272,177],{"emptyLinePlaceholder":176},[67,59274,59275,59277,59279],{"class":69,"line":2450},[67,59276,52322],{"class":77},[67,59278,51172],{"class":51837},[67,59280,51844],{"class":77},[19,59282,59283],{},"此时报错,对全局重新赋值,肯定不对,出错!!!",[14,59285,59287],{"id":59286},"_324-事件监听版本","3.2.4 事件监听版本",[19,59289,59290],{},[725,59291],{"alt":62,"src":59292},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-110.png",[19,59294,59295],{},"DOM L0和DOM L1都是用的:事件源.on事件=function(){}",[19,59297,59298],{},"这种方式会覆盖前边的事件监听:",[57,59300,59302],{"className":51170,"code":59301,"language":51172,"meta":62,"style":62},"\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",[64,59303,59304,59314,59328,59332,59340,59354,59374,59386,59394,59398,59406,59418,59426,59444,59458,59469,59473,59485,59495,59499,59507,59515,59519],{"__ignoreMap":62},[67,59305,59306,59308,59310,59312],{"class":69,"line":70},[67,59307,51834],{"class":77},[67,59309,51838],{"class":51837},[67,59311,51841],{"class":112},[67,59313,51844],{"class":77},[67,59315,59316,59318,59320,59322,59324,59326],{"class":69,"line":143},[67,59317,1766],{"class":77},[67,59319,51172],{"class":51837},[67,59321,51853],{"class":112},[67,59323,909],{"class":77},[67,59325,51858],{"class":84},[67,59327,51844],{"class":77},[67,59329,59330],{"class":69,"line":149},[67,59331,177],{"emptyLinePlaceholder":176},[67,59333,59334,59336,59338],{"class":69,"line":155},[67,59335,1766],{"class":77},[67,59337,51871],{"class":51837},[67,59339,51844],{"class":77},[67,59341,59342,59344,59346,59348,59350,59352],{"class":69,"line":161},[67,59343,52681],{"class":77},[67,59345,51881],{"class":51837},[67,59347,51884],{"class":112},[67,59349,909],{"class":77},[67,59351,51889],{"class":84},[67,59353,51844],{"class":77},[67,59355,59356,59358,59360,59362,59364,59366,59368,59370,59372],{"class":69,"line":167},[67,59357,52681],{"class":77},[67,59359,51881],{"class":51837},[67,59361,15637],{"class":112},[67,59363,909],{"class":77},[67,59365,51928],{"class":84},[67,59367,51908],{"class":112},[67,59369,909],{"class":77},[67,59371,51935],{"class":84},[67,59373,51844],{"class":77},[67,59375,59376,59378,59380,59382,59384],{"class":69,"line":173},[67,59377,52681],{"class":77},[67,59379,51944],{"class":51837},[67,59381,51947],{"class":77},[67,59383,51944],{"class":51837},[67,59385,51844],{"class":77},[67,59387,59388,59390,59392],{"class":69,"line":180},[67,59389,52322],{"class":77},[67,59391,51871],{"class":51837},[67,59393,51844],{"class":77},[67,59395,59396],{"class":69,"line":186},[67,59397,177],{"emptyLinePlaceholder":176},[67,59399,59400,59402,59404],{"class":69,"line":444},[67,59401,1766],{"class":77},[67,59403,52337],{"class":51837},[67,59405,51844],{"class":77},[67,59407,59408,59410,59412,59414,59416],{"class":69,"line":2335},[67,59409,52681],{"class":77},[67,59411,54424],{"class":51837},[67,59413,54430],{"class":77},[67,59415,54424],{"class":51837},[67,59417,51844],{"class":77},[67,59419,59420,59422,59424],{"class":69,"line":2340},[67,59421,52681],{"class":77},[67,59423,52350],{"class":51837},[67,59425,51844],{"class":77},[67,59427,59428,59430,59432,59434,59436,59438,59440,59442],{"class":69,"line":2346},[67,59429,11939],{"class":73},[67,59431,54928],{"class":208},[67,59433,14282],{"class":73},[67,59435,54933],{"class":77},[67,59437,54936],{"class":112},[67,59439,864],{"class":77},[67,59441,58741],{"class":84},[67,59443,870],{"class":77},[67,59445,59446,59448,59451,59453,59456],{"class":69,"line":2351},[67,59447,58748],{"class":77},[67,59449,59450],{"class":112},"onclick",[67,59452,14282],{"class":73},[67,59454,59455],{"class":73}," function",[67,59457,54989],{"class":77},[67,59459,59460,59463,59465,59467],{"class":69,"line":2365},[67,59461,59462],{"class":112},"      alert",[67,59464,864],{"class":77},[67,59466,1329],{"class":208},[67,59468,870],{"class":77},[67,59470,59471],{"class":69,"line":2370},[67,59472,2909],{"class":77},[67,59474,59475,59477,59479,59481,59483],{"class":69,"line":2376},[67,59476,58748],{"class":77},[67,59478,59450],{"class":112},[67,59480,14282],{"class":73},[67,59482,59455],{"class":73},[67,59484,54989],{"class":77},[67,59486,59487,59489,59491,59493],{"class":69,"line":2397},[67,59488,59462],{"class":112},[67,59490,864],{"class":77},[67,59492,1606],{"class":208},[67,59494,870],{"class":77},[67,59496,59497],{"class":69,"line":2402},[67,59498,2909],{"class":77},[67,59500,59501,59503,59505],{"class":69,"line":2416},[67,59502,52954],{"class":77},[67,59504,52350],{"class":51837},[67,59506,51844],{"class":77},[67,59508,59509,59511,59513],{"class":69,"line":2421},[67,59510,52322],{"class":77},[67,59512,52337],{"class":51837},[67,59514,51844],{"class":77},[67,59516,59517],{"class":69,"line":2450},[67,59518,177],{"emptyLinePlaceholder":176},[67,59520,59521,59523,59525],{"class":69,"line":2455},[67,59522,52322],{"class":77},[67,59524,51172],{"class":51837},[67,59526,51844],{"class":77},[19,59528,59529],{},"只要点击就输出结果为22,前边11被覆盖了",[57,59531,59533],{"className":51170,"code":59532,"language":51172,"meta":62,"style":62},"  btn.addEventListener('click', function () {\n      alert(11)\n    })\n    btn.addEventListener('click', function () {\n      alert(22)\n    })\n",[64,59534,59535,59540,59545,59549,59554,59559],{"__ignoreMap":62},[67,59536,59537],{"class":69,"line":70},[67,59538,59539],{"class":77},"  btn.addEventListener('click', function () {\n",[67,59541,59542],{"class":69,"line":143},[67,59543,59544],{"class":77},"      alert(11)\n",[67,59546,59547],{"class":69,"line":149},[67,59548,33998],{"class":77},[67,59550,59551],{"class":69,"line":155},[67,59552,59553],{"class":77},"    btn.addEventListener('click', function () {\n",[67,59555,59556],{"class":69,"line":161},[67,59557,59558],{"class":77},"      alert(22)\n",[67,59560,59561],{"class":69,"line":167},[67,59562,33998],{"class":77},[19,59564,59565],{},"点击第一次输出11,第二次点击为22",[14,59567,59569],{"id":59568},"_325-事件类型","3.2.5 事件类型",[19,59571,59572],{},[725,59573],{"alt":62,"src":59574},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-111.png",[40,59576,59578],{"id":59577},"_3251-鼠标事件","3.2.5.1 鼠标事件",[19,59580,59581],{},"补充知识:",[19,59583,59584],{},"轮播图自动播放模块,可以使用",[19,59586,59587],{},"let timerId = setInterval(function () {",[19,59589,59590],{},"\u002F\u002F 利用js自动调用点击事件 click() 一定加小括号调用函数",[19,59592,59593],{},"用js方法模拟进行点击事件,click必须加()",[19,59595,59596],{},"next.click()",[19,59598,59599],{},"}, 1000)",[19,59601,59602],{},[725,59603],{"alt":62,"src":59604},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-112.png",[57,59606,59608],{"className":53604,"code":59607,"language":53606,"meta":62,"style":62},"\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",[64,59609,59610,59614,59624,59638,59642,59650,59665,59685,59705,59718,59726,59731,59736,59740,59744,59749,59754,59759,59764,59768,59772,59777,59782,59787,59791,59795,59800,59804,59809,59814,59818,59822,59827,59832,59837,59842,59847,59851,59855,59860,59865,59870,59875,59880,59884,59888,59893,59898,59903,59908,59913,59918,59923,59928,59933,59938,59942,59946,59951,59956,59960,59964,59969,59974,59978,59983,59988,59992,59996,60001,60005,60010,60015,60019,60024,60028,60032,60037,60042,60047,60052,60057,60062,60067,60071,60075,60079,60084,60089,60094,60099,60103,60111,60119,60123,60131,60146,60160,60181,60189,60203,60216,60231,60250,60262,60274,60286,60298,60310,60322,60334,60342,60357,60381,60405,60413,60421,60429,60437,60442,60447,60452,60457,60462,60467,60472,60477,60482,60487,60491,60496,60501,60506,60511,60516,60521,60526,60531,60536,60540,60545,60550,60555,60560,60565,60570,60575,60580,60585,60590,60595,60600,60604,60608,60613,60618,60623,60627,60632,60637,60642,60647,60652,60656,60661,60665,60669,60673,60677,60681,60685,60690,60695,60700,60705,60710,60715,60720,60725,60730,60734,60738,60743,60748,60753,60758,60763,60767,60772,60777,60782,60787,60792,60797,60801,60805,60810,60814,60819,60823,60828,60833,60838,60843,60848,60853,60857,60865,60873,60877],{"__ignoreMap":62},[67,59611,59612],{"class":69,"line":70},[67,59613,177],{"emptyLinePlaceholder":176},[67,59615,59616,59618,59620,59622],{"class":69,"line":143},[67,59617,51834],{"class":77},[67,59619,51838],{"class":73},[67,59621,51841],{"class":208},[67,59623,51844],{"class":77},[67,59625,59626,59628,59630,59632,59634,59636],{"class":69,"line":149},[67,59627,1766],{"class":77},[67,59629,51172],{"class":51837},[67,59631,51853],{"class":112},[67,59633,909],{"class":77},[67,59635,51858],{"class":84},[67,59637,51844],{"class":77},[67,59639,59640],{"class":69,"line":155},[67,59641,177],{"emptyLinePlaceholder":176},[67,59643,59644,59646,59648],{"class":69,"line":161},[67,59645,1766],{"class":77},[67,59647,51871],{"class":51837},[67,59649,51844],{"class":77},[67,59651,59652,59654,59656,59658,59660,59662],{"class":69,"line":167},[67,59653,52681],{"class":77},[67,59655,51881],{"class":51837},[67,59657,51884],{"class":112},[67,59659,909],{"class":77},[67,59661,51889],{"class":84},[67,59663,59664],{"class":77}," \u002F>\n",[67,59666,59667,59669,59671,59673,59675,59677,59679,59681,59683],{"class":69,"line":173},[67,59668,52681],{"class":77},[67,59670,51881],{"class":51837},[67,59672,51900],{"class":112},[67,59674,909],{"class":77},[67,59676,51905],{"class":84},[67,59678,51908],{"class":112},[67,59680,909],{"class":77},[67,59682,51913],{"class":84},[67,59684,59664],{"class":77},[67,59686,59687,59689,59691,59693,59695,59697,59699,59701,59703],{"class":69,"line":180},[67,59688,52681],{"class":77},[67,59690,51881],{"class":51837},[67,59692,15637],{"class":112},[67,59694,909],{"class":77},[67,59696,51928],{"class":84},[67,59698,51908],{"class":112},[67,59700,909],{"class":77},[67,59702,51935],{"class":84},[67,59704,59664],{"class":77},[67,59706,59707,59709,59711,59714,59716],{"class":69,"line":186},[67,59708,52681],{"class":77},[67,59710,51944],{"class":51837},[67,59712,59713],{"class":77},">轮播图点击切换\u003C\u002F",[67,59715,51944],{"class":51837},[67,59717,51844],{"class":77},[67,59719,59720,59722,59724],{"class":69,"line":444},[67,59721,52681],{"class":77},[67,59723,779],{"class":51837},[67,59725,51844],{"class":77},[67,59727,59728],{"class":69,"line":2335},[67,59729,59730],{"class":77},"    * {\n",[67,59732,59733],{"class":69,"line":2340},[67,59734,59735],{"class":77},"      box-sizing: border-box;\n",[67,59737,59738],{"class":69,"line":2346},[67,59739,2909],{"class":77},[67,59741,59742],{"class":69,"line":2351},[67,59743,177],{"emptyLinePlaceholder":176},[67,59745,59746],{"class":69,"line":2365},[67,59747,59748],{"class":77},"    .slider {\n",[67,59750,59751],{"class":69,"line":2370},[67,59752,59753],{"class":77},"      width: 560px;\n",[67,59755,59756],{"class":69,"line":2376},[67,59757,59758],{"class":77},"      height: 400px;\n",[67,59760,59761],{"class":69,"line":2397},[67,59762,59763],{"class":77},"      overflow: hidden;\n",[67,59765,59766],{"class":69,"line":2402},[67,59767,2909],{"class":77},[67,59769,59770],{"class":69,"line":2416},[67,59771,177],{"emptyLinePlaceholder":176},[67,59773,59774],{"class":69,"line":2421},[67,59775,59776],{"class":77},"    .slider-wrapper {\n",[67,59778,59779],{"class":69,"line":2450},[67,59780,59781],{"class":77},"      width: 100%;\n",[67,59783,59784],{"class":69,"line":2455},[67,59785,59786],{"class":77},"      height: 320px;\n",[67,59788,59789],{"class":69,"line":2472},[67,59790,2909],{"class":77},[67,59792,59793],{"class":69,"line":2477},[67,59794,177],{"emptyLinePlaceholder":176},[67,59796,59797],{"class":69,"line":2482},[67,59798,59799],{"class":77},"    .slider-wrapper img {\n",[67,59801,59802],{"class":69,"line":2487},[67,59803,59781],{"class":77},[67,59805,59806],{"class":69,"line":2501},[67,59807,59808],{"class":77},"      height: 100%;\n",[67,59810,59811],{"class":69,"line":2506},[67,59812,59813],{"class":77},"      display: block;\n",[67,59815,59816],{"class":69,"line":3298},[67,59817,2909],{"class":77},[67,59819,59820],{"class":69,"line":3312},[67,59821,177],{"emptyLinePlaceholder":176},[67,59823,59824],{"class":69,"line":3320},[67,59825,59826],{"class":77},"    .slider-footer {\n",[67,59828,59829],{"class":69,"line":3325},[67,59830,59831],{"class":77},"      height: 80px;\n",[67,59833,59834],{"class":69,"line":3331},[67,59835,59836],{"class":77},"      background-color: rgb(100, 67, 68);\n",[67,59838,59839],{"class":69,"line":3337},[67,59840,59841],{"class":77},"      padding: 12px 12px 0 12px;\n",[67,59843,59844],{"class":69,"line":3342},[67,59845,59846],{"class":77},"      position: relative;\n",[67,59848,59849],{"class":69,"line":8667},[67,59850,2909],{"class":77},[67,59852,59853],{"class":69,"line":8691},[67,59854,177],{"emptyLinePlaceholder":176},[67,59856,59857],{"class":69,"line":8696},[67,59858,59859],{"class":77},"    .slider-footer .toggle {\n",[67,59861,59862],{"class":69,"line":8702},[67,59863,59864],{"class":77},"      position: absolute;\n",[67,59866,59867],{"class":69,"line":8729},[67,59868,59869],{"class":77},"      right: 0;\n",[67,59871,59872],{"class":69,"line":8734},[67,59873,59874],{"class":77},"      top: 12px;\n",[67,59876,59877],{"class":69,"line":8740},[67,59878,59879],{"class":77},"      display: flex;\n",[67,59881,59882],{"class":69,"line":8752},[67,59883,2909],{"class":77},[67,59885,59886],{"class":69,"line":8764},[67,59887,177],{"emptyLinePlaceholder":176},[67,59889,59890],{"class":69,"line":8776},[67,59891,59892],{"class":77},"    .slider-footer .toggle button {\n",[67,59894,59895],{"class":69,"line":10435},[67,59896,59897],{"class":77},"      margin-right: 12px;\n",[67,59899,59900],{"class":69,"line":10459},[67,59901,59902],{"class":77},"      width: 28px;\n",[67,59904,59905],{"class":69,"line":10482},[67,59906,59907],{"class":77},"      height: 28px;\n",[67,59909,59910],{"class":69,"line":10506},[67,59911,59912],{"class":77},"      appearance: none;\n",[67,59914,59915],{"class":69,"line":10511},[67,59916,59917],{"class":77},"      border: none;\n",[67,59919,59920],{"class":69,"line":10516},[67,59921,59922],{"class":77},"      background: rgba(255, 255, 255, 0.1);\n",[67,59924,59925],{"class":69,"line":10521},[67,59926,59927],{"class":77},"      color: #fff;\n",[67,59929,59930],{"class":69,"line":10530},[67,59931,59932],{"class":77},"      border-radius: 4px;\n",[67,59934,59935],{"class":69,"line":10535},[67,59936,59937],{"class":77},"      cursor: pointer;\n",[67,59939,59940],{"class":69,"line":10541},[67,59941,2909],{"class":77},[67,59943,59944],{"class":69,"line":10562},[67,59945,177],{"emptyLinePlaceholder":176},[67,59947,59948],{"class":69,"line":10568},[67,59949,59950],{"class":77},"    .slider-footer .toggle button:hover {\n",[67,59952,59953],{"class":69,"line":10582},[67,59954,59955],{"class":77},"      background: rgba(255, 255, 255, 0.2);\n",[67,59957,59958],{"class":69,"line":10588},[67,59959,2909],{"class":77},[67,59961,59962],{"class":69,"line":10615},[67,59963,177],{"emptyLinePlaceholder":176},[67,59965,59966],{"class":69,"line":10624},[67,59967,59968],{"class":77},"    .slider-footer p {\n",[67,59970,59971],{"class":69,"line":10630},[67,59972,59973],{"class":77},"      margin: 0;\n",[67,59975,59976],{"class":69,"line":10638},[67,59977,59927],{"class":77},[67,59979,59980],{"class":69,"line":10643},[67,59981,59982],{"class":77},"      font-size: 18px;\n",[67,59984,59985],{"class":69,"line":17321},[67,59986,59987],{"class":77},"      margin-bottom: 10px;\n",[67,59989,59990],{"class":69,"line":17327},[67,59991,2909],{"class":77},[67,59993,59994],{"class":69,"line":17350},[67,59995,177],{"emptyLinePlaceholder":176},[67,59997,59998],{"class":69,"line":17356},[67,59999,60000],{"class":77},"    .slider-indicator {\n",[67,60002,60003],{"class":69,"line":17379},[67,60004,59973],{"class":77},[67,60006,60007],{"class":69,"line":17393},[67,60008,60009],{"class":77},"      padding: 0;\n",[67,60011,60012],{"class":69,"line":17413},[67,60013,60014],{"class":77},"      list-style: none;\n",[67,60016,60017],{"class":69,"line":17419},[67,60018,59879],{"class":77},[67,60020,60021],{"class":69,"line":17430},[67,60022,60023],{"class":77},"      align-items: center;\n",[67,60025,60026],{"class":69,"line":17453},[67,60027,2909],{"class":77},[67,60029,60030],{"class":69,"line":17475},[67,60031,177],{"emptyLinePlaceholder":176},[67,60033,60034],{"class":69,"line":17480},[67,60035,60036],{"class":77},"    .slider-indicator li {\n",[67,60038,60039],{"class":69,"line":17486},[67,60040,60041],{"class":77},"      width: 8px;\n",[67,60043,60044],{"class":69,"line":17500},[67,60045,60046],{"class":77},"      height: 8px;\n",[67,60048,60049],{"class":69,"line":17513},[67,60050,60051],{"class":77},"      margin: 4px;\n",[67,60053,60054],{"class":69,"line":17518},[67,60055,60056],{"class":77},"      border-radius: 50%;\n",[67,60058,60059],{"class":69,"line":17532},[67,60060,60061],{"class":77},"      background: #fff;\n",[67,60063,60064],{"class":69,"line":17537},[67,60065,60066],{"class":77},"      opacity: 0.4;\n",[67,60068,60069],{"class":69,"line":17543},[67,60070,59937],{"class":77},[67,60072,60073],{"class":69,"line":17548},[67,60074,2909],{"class":77},[67,60076,60077],{"class":69,"line":17562},[67,60078,177],{"emptyLinePlaceholder":176},[67,60080,60081],{"class":69,"line":17567},[67,60082,60083],{"class":77},"    .slider-indicator li.active {\n",[67,60085,60086],{"class":69,"line":17572},[67,60087,60088],{"class":77},"      width: 12px;\n",[67,60090,60091],{"class":69,"line":17586},[67,60092,60093],{"class":77},"      height: 12px;\n",[67,60095,60096],{"class":69,"line":17598},[67,60097,60098],{"class":77},"      opacity: 1;\n",[67,60100,60101],{"class":69,"line":17603},[67,60102,2909],{"class":77},[67,60104,60105,60107,60109],{"class":69,"line":17616},[67,60106,52954],{"class":77},[67,60108,779],{"class":51837},[67,60110,51844],{"class":77},[67,60112,60113,60115,60117],{"class":69,"line":17621},[67,60114,52322],{"class":77},[67,60116,51871],{"class":51837},[67,60118,51844],{"class":77},[67,60120,60121],{"class":69,"line":17626},[67,60122,177],{"emptyLinePlaceholder":176},[67,60124,60125,60127,60129],{"class":69,"line":17631},[67,60126,1766],{"class":77},[67,60128,52337],{"class":51837},[67,60130,51844],{"class":77},[67,60132,60133,60135,60137,60139,60141,60144],{"class":69,"line":17644},[67,60134,52681],{"class":77},[67,60136,52148],{"class":51837},[67,60138,54023],{"class":112},[67,60140,909],{"class":77},[67,60142,60143],{"class":84},"\"slider\"",[67,60145,51844],{"class":77},[67,60147,60148,60150,60152,60154,60156,60158],{"class":69,"line":17649},[67,60149,51878],{"class":77},[67,60151,52148],{"class":51837},[67,60153,54023],{"class":112},[67,60155,909],{"class":77},[67,60157,55764],{"class":84},[67,60159,51844],{"class":77},[67,60161,60162,60164,60166,60168,60170,60173,60175,60177,60179],{"class":69,"line":33170},[67,60163,55771],{"class":77},[67,60165,725],{"class":51837},[67,60167,55776],{"class":112},[67,60169,909],{"class":77},[67,60171,60172],{"class":84},"\"...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[67,60174,55784],{"class":112},[67,60176,909],{"class":77},[67,60178,8371],{"class":84},[67,60180,59664],{"class":77},[67,60182,60183,60185,60187],{"class":69,"line":33176},[67,60184,52313],{"class":77},[67,60186,52148],{"class":51837},[67,60188,51844],{"class":77},[67,60190,60191,60193,60195,60197,60199,60201],{"class":69,"line":33182},[67,60192,51878],{"class":77},[67,60194,52148],{"class":51837},[67,60196,54023],{"class":112},[67,60198,909],{"class":77},[67,60200,55811],{"class":84},[67,60202,51844],{"class":77},[67,60204,60205,60207,60209,60212,60214],{"class":69,"line":33188},[67,60206,55771],{"class":77},[67,60208,19],{"class":51837},[67,60210,60211],{"class":77},">对人类来说会不会太超前了？\u003C\u002F",[67,60213,19],{"class":51837},[67,60215,51844],{"class":77},[67,60217,60218,60220,60222,60224,60226,60229],{"class":69,"line":33194},[67,60219,55771],{"class":77},[67,60221,1863],{"class":51837},[67,60223,54023],{"class":112},[67,60225,909],{"class":77},[67,60227,60228],{"class":84},"\"slider-indicator\"",[67,60230,51844],{"class":77},[67,60232,60233,60235,60237,60239,60241,60244,60246,60248],{"class":69,"line":33205},[67,60234,55839],{"class":77},[67,60236,818],{"class":51837},[67,60238,54023],{"class":112},[67,60240,909],{"class":77},[67,60242,60243],{"class":84},"\"active\"",[67,60245,55851],{"class":77},[67,60247,818],{"class":51837},[67,60249,51844],{"class":77},[67,60251,60252,60254,60256,60258,60260],{"class":69,"line":33211},[67,60253,55839],{"class":77},[67,60255,818],{"class":51837},[67,60257,55851],{"class":77},[67,60259,818],{"class":51837},[67,60261,51844],{"class":77},[67,60263,60264,60266,60268,60270,60272],{"class":69,"line":33231},[67,60265,55839],{"class":77},[67,60267,818],{"class":51837},[67,60269,55851],{"class":77},[67,60271,818],{"class":51837},[67,60273,51844],{"class":77},[67,60275,60276,60278,60280,60282,60284],{"class":69,"line":33237},[67,60277,55839],{"class":77},[67,60279,818],{"class":51837},[67,60281,55851],{"class":77},[67,60283,818],{"class":51837},[67,60285,51844],{"class":77},[67,60287,60288,60290,60292,60294,60296],{"class":69,"line":33248},[67,60289,55839],{"class":77},[67,60291,818],{"class":51837},[67,60293,55851],{"class":77},[67,60295,818],{"class":51837},[67,60297,51844],{"class":77},[67,60299,60300,60302,60304,60306,60308],{"class":69,"line":33254},[67,60301,55839],{"class":77},[67,60303,818],{"class":51837},[67,60305,55851],{"class":77},[67,60307,818],{"class":51837},[67,60309,51844],{"class":77},[67,60311,60312,60314,60316,60318,60320],{"class":69,"line":33260},[67,60313,55839],{"class":77},[67,60315,818],{"class":51837},[67,60317,55851],{"class":77},[67,60319,818],{"class":51837},[67,60321,51844],{"class":77},[67,60323,60324,60326,60328,60330,60332],{"class":69,"line":33266},[67,60325,55839],{"class":77},[67,60327,818],{"class":51837},[67,60329,55851],{"class":77},[67,60331,818],{"class":51837},[67,60333,51844],{"class":77},[67,60335,60336,60338,60340],{"class":69,"line":33272},[67,60337,55944],{"class":77},[67,60339,1863],{"class":51837},[67,60341,51844],{"class":77},[67,60343,60344,60346,60348,60350,60352,60355],{"class":69,"line":33278},[67,60345,55771],{"class":77},[67,60347,52148],{"class":51837},[67,60349,54023],{"class":112},[67,60351,909],{"class":77},[67,60353,60354],{"class":84},"\"toggle\"",[67,60356,51844],{"class":77},[67,60358,60359,60361,60363,60365,60367,60370,60372,60375,60377,60379],{"class":69,"line":33284},[67,60360,55839],{"class":77},[67,60362,54424],{"class":51837},[67,60364,54023],{"class":112},[67,60366,909],{"class":77},[67,60368,60369],{"class":84},"\"prev\"",[67,60371,1816],{"class":77},[67,60373,60374],{"class":208},"&lt;",[67,60376,52322],{"class":77},[67,60378,54424],{"class":51837},[67,60380,51844],{"class":77},[67,60382,60383,60385,60387,60389,60391,60394,60396,60399,60401,60403],{"class":69,"line":33290},[67,60384,55839],{"class":77},[67,60386,54424],{"class":51837},[67,60388,54023],{"class":112},[67,60390,909],{"class":77},[67,60392,60393],{"class":84},"\"next\"",[67,60395,1816],{"class":77},[67,60397,60398],{"class":208},"&gt;",[67,60400,52322],{"class":77},[67,60402,54424],{"class":51837},[67,60404,51844],{"class":77},[67,60406,60407,60409,60411],{"class":69,"line":33310},[67,60408,55944],{"class":77},[67,60410,52148],{"class":51837},[67,60412,51844],{"class":77},[67,60414,60415,60417,60419],{"class":69,"line":33316},[67,60416,52313],{"class":77},[67,60418,52148],{"class":51837},[67,60420,51844],{"class":77},[67,60422,60423,60425,60427],{"class":69,"line":33332},[67,60424,52954],{"class":77},[67,60426,52148],{"class":51837},[67,60428,51844],{"class":77},[67,60430,60431,60433,60435],{"class":69,"line":33338},[67,60432,52681],{"class":77},[67,60434,52350],{"class":51837},[67,60436,51844],{"class":77},[67,60438,60439],{"class":69,"line":33352},[67,60440,60441],{"class":77},"    \u002F\u002F 1. 初始数据\n",[67,60443,60444],{"class":69,"line":33358},[67,60445,60446],{"class":77},"    const data = [\n",[67,60448,60449],{"class":69,"line":33373},[67,60450,60451],{"class":77},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg', title: '对人类来说会不会太超前了？', color: 'rgb(100, 67, 68)' },\n",[67,60453,60454],{"class":69,"line":33379},[67,60455,60456],{"class":77},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg', title: '开启剑与雪的黑暗传说！', color: 'rgb(43, 35, 26)' },\n",[67,60458,60459],{"class":69,"line":33388},[67,60460,60461],{"class":77},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg', title: '真正的jo厨出现了！', color: 'rgb(36, 31, 33)' },\n",[67,60463,60464],{"class":69,"line":33394},[67,60465,60466],{"class":77},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg', title: '李玉刚：让世界通过B站看到东方大国文化', color: 'rgb(139, 98, 66)' },\n",[67,60468,60469],{"class":69,"line":33403},[67,60470,60471],{"class":77},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg', title: '快来分享你的寒假日常吧~', color: 'rgb(67, 90, 92)' },\n",[67,60473,60474],{"class":69,"line":33409},[67,60475,60476],{"class":77},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg', title: '哔哩哔哩小年YEAH', color: 'rgb(166, 131, 143)' },\n",[67,60478,60479],{"class":69,"line":33415},[67,60480,60481],{"class":77},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg', title: '一站式解决你的电脑配置问题！！！', color: 'rgb(53, 29, 25)' },\n",[67,60483,60484],{"class":69,"line":33424},[67,60485,60486],{"class":77},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg', title: '谁不想和小猫咪贴贴呢！', color: 'rgb(99, 72, 114)' },\n",[67,60488,60489],{"class":69,"line":33430},[67,60490,53646],{"class":77},[67,60492,60493],{"class":69,"line":33441},[67,60494,60495],{"class":77},"    \u002F\u002F 获取元素\n",[67,60497,60498],{"class":69,"line":33447},[67,60499,60500],{"class":77},"    const img = document.querySelector('.slider-wrapper img')\n",[67,60502,60503],{"class":69,"line":33466},[67,60504,60505],{"class":77},"    const p = document.querySelector('.slider-footer p')\n",[67,60507,60508],{"class":69,"line":33472},[67,60509,60510],{"class":77},"    const footer = document.querySelector('.slider-footer')\n",[67,60512,60513],{"class":69,"line":33483},[67,60514,60515],{"class":77},"    \u002F\u002F 1. 右按钮业务\n",[67,60517,60518],{"class":69,"line":33489},[67,60519,60520],{"class":77},"    \u002F\u002F 1.1 获取右侧按钮 \n",[67,60522,60523],{"class":69,"line":33509},[67,60524,60525],{"class":77},"    const next = document.querySelector('.next')\n",[67,60527,60528],{"class":69,"line":33525},[67,60529,60530],{"class":77},"    let i = 0  \u002F\u002F 信号量 控制播放图片张数\n",[67,60532,60533],{"class":69,"line":33531},[67,60534,60535],{"class":77},"    \u002F\u002F 1.2 注册点击事件\n",[67,60537,60538],{"class":69,"line":33545},[67,60539,177],{"emptyLinePlaceholder":176},[67,60541,60542],{"class":69,"line":33551},[67,60543,60544],{"class":77},"    next.addEventListener('click', function () {\n",[67,60546,60547],{"class":69,"line":33557},[67,60548,60549],{"class":77},"      \u002F\u002F console.log(11)\n",[67,60551,60552],{"class":69,"line":33568},[67,60553,60554],{"class":77},"      i++\n",[67,60556,60557],{"class":69,"line":33574},[67,60558,60559],{"class":77},"      \u002F\u002F 1.6判断条件  如果大于8 就复原为 0\n",[67,60561,60562],{"class":69,"line":33580},[67,60563,60564],{"class":77},"      \u002F\u002F if (i >= 8) {\n",[67,60566,60567],{"class":69,"line":33590},[67,60568,60569],{"class":77},"      \u002F\u002F   i = 0\n",[67,60571,60572],{"class":69,"line":33596},[67,60573,60574],{"class":77},"      \u002F\u002F }\n",[67,60576,60577],{"class":69,"line":33607},[67,60578,60579],{"class":77},"      i = i >= data.length ? 0 : i\n",[67,60581,60582],{"class":69,"line":33613},[67,60583,60584],{"class":77},"      \u002F\u002F 1.3 得到对应的对象\n",[67,60586,60587],{"class":69,"line":33623},[67,60588,60589],{"class":77},"      \u002F\u002F console.log(data[i])\n",[67,60591,60592],{"class":69,"line":33628},[67,60593,60594],{"class":77},"      \u002F\u002F 调用函数\n",[67,60596,60597],{"class":69,"line":33634},[67,60598,60599],{"class":77},"      toggle()\n",[67,60601,60602],{"class":69,"line":33683},[67,60603,33998],{"class":77},[67,60605,60606],{"class":69,"line":33730},[67,60607,177],{"emptyLinePlaceholder":176},[67,60609,60610],{"class":69,"line":33735},[67,60611,60612],{"class":77},"    \u002F\u002F 2. 左侧按钮业务\n",[67,60614,60615],{"class":69,"line":33741},[67,60616,60617],{"class":77},"    \u002F\u002F 2.1 获取左侧按钮 \n",[67,60619,60620],{"class":69,"line":33760},[67,60621,60622],{"class":77},"    const prev = document.querySelector('.prev')\n",[67,60624,60625],{"class":69,"line":33766},[67,60626,60535],{"class":77},[67,60628,60629],{"class":69,"line":33786},[67,60630,60631],{"class":77},"    prev.addEventListener('click', function () {\n",[67,60633,60634],{"class":69,"line":33792},[67,60635,60636],{"class":77},"      i--\n",[67,60638,60639],{"class":69,"line":33798},[67,60640,60641],{"class":77},"      \u002F\u002F 判断条件  如果小于0  则爬到最后一张图片索引号是 7\n",[67,60643,60644],{"class":69,"line":33808},[67,60645,60646],{"class":77},"      \u002F\u002F if (i \u003C 0) {\n",[67,60648,60649],{"class":69,"line":33813},[67,60650,60651],{"class":77},"      \u002F\u002F   i = 7\n",[67,60653,60654],{"class":69,"line":33819},[67,60655,60574],{"class":77},[67,60657,60658],{"class":69,"line":33835},[67,60659,60660],{"class":77},"      i = i \u003C 0 ? data.length - 1 : i\n",[67,60662,60663],{"class":69,"line":33880},[67,60664,60584],{"class":77},[67,60666,60667],{"class":69,"line":33886},[67,60668,60589],{"class":77},[67,60670,60671],{"class":69,"line":33892},[67,60672,60594],{"class":77},[67,60674,60675],{"class":69,"line":33898},[67,60676,60599],{"class":77},[67,60678,60679],{"class":69,"line":33909},[67,60680,33998],{"class":77},[67,60682,60683],{"class":69,"line":33915},[67,60684,177],{"emptyLinePlaceholder":176},[67,60686,60687],{"class":69,"line":33921},[67,60688,60689],{"class":77},"    \u002F\u002F 声明一个渲染的函数作为复用\n",[67,60691,60692],{"class":69,"line":33927},[67,60693,60694],{"class":77},"    function toggle() {\n",[67,60696,60697],{"class":69,"line":33945},[67,60698,60699],{"class":77},"      \u002F\u002F 1.4 渲染对应的数据\n",[67,60701,60702],{"class":69,"line":33959},[67,60703,60704],{"class":77},"      img.src = data[i].url\n",[67,60706,60707],{"class":69,"line":33968},[67,60708,60709],{"class":77},"      p.innerHTML = data[i].title\n",[67,60711,60712],{"class":69,"line":33977},[67,60713,60714],{"class":77},"      footer.style.backgroundColor = data[i].color\n",[67,60716,60717],{"class":69,"line":33986},[67,60718,60719],{"class":77},"      \u002F\u002F 1.5 更换小圆点    先移除原来的类名， 当前li再添加 这个 类名\n",[67,60721,60722],{"class":69,"line":33995},[67,60723,60724],{"class":77},"      document.querySelector('.slider-indicator .active').classList.remove('active')\n",[67,60726,60727],{"class":69,"line":34001},[67,60728,60729],{"class":77},"      document.querySelector(`.slider-indicator li:nth-child(${i + 1})`).classList.add('active')\n",[67,60731,60732],{"class":69,"line":34007},[67,60733,2909],{"class":77},[67,60735,60736],{"class":69,"line":34015},[67,60737,177],{"emptyLinePlaceholder":176},[67,60739,60740],{"class":69,"line":34020},[67,60741,60742],{"class":77},"    \u002F\u002F 3. 自动播放模块\n",[67,60744,60745],{"class":69,"line":34026},[67,60746,60747],{"class":77},"    let timerId = setInterval(function () {\n",[67,60749,60750],{"class":69,"line":34037},[67,60751,60752],{"class":77},"      \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[67,60754,60755],{"class":69,"line":34043},[67,60756,60757],{"class":77},"      next.click()\n",[67,60759,60760],{"class":69,"line":34063},[67,60761,60762],{"class":77},"    }, 1000)\n",[67,60764,60765],{"class":69,"line":34069},[67,60766,177],{"emptyLinePlaceholder":176},[67,60768,60769],{"class":69,"line":34075},[67,60770,60771],{"class":77},"    \u002F\u002F 4. 鼠标经过大盒子，停止定时器\n",[67,60773,60774],{"class":69,"line":34081},[67,60775,60776],{"class":77},"    const slider = document.querySelector('.slider')\n",[67,60778,60779],{"class":69,"line":34098},[67,60780,60781],{"class":77},"    \u002F\u002F 注册事件\n",[67,60783,60784],{"class":69,"line":34104},[67,60785,60786],{"class":77},"    slider.addEventListener('mouseenter', function () {\n",[67,60788,60789],{"class":69,"line":34110},[67,60790,60791],{"class":77},"      \u002F\u002F 停止定时器\n",[67,60793,60794],{"class":69,"line":34116},[67,60795,60796],{"class":77},"      clearInterval(timerId)\n",[67,60798,60799],{"class":69,"line":34122},[67,60800,33998],{"class":77},[67,60802,60803],{"class":69,"line":34128},[67,60804,177],{"emptyLinePlaceholder":176},[67,60806,60807],{"class":69,"line":34155},[67,60808,60809],{"class":77},"    \u002F\u002F 5. 鼠标离开大盒子，开启定时器\n",[67,60811,60812],{"class":69,"line":34179},[67,60813,60781],{"class":77},[67,60815,60816],{"class":69,"line":34185},[67,60817,60818],{"class":77},"    slider.addEventListener('mouseleave', function () {\n",[67,60820,60821],{"class":69,"line":34191},[67,60822,60791],{"class":77},[67,60824,60825],{"class":69,"line":34197},[67,60826,60827],{"class":77},"      if (timerId) clearInterval(timerId)\n",[67,60829,60830],{"class":69,"line":34208},[67,60831,60832],{"class":77},"      \u002F\u002F 开启定时器\n",[67,60834,60835],{"class":69,"line":34219},[67,60836,60837],{"class":77},"      timerId = setInterval(function () {\n",[67,60839,60840],{"class":69,"line":34225},[67,60841,60842],{"class":77},"        \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[67,60844,60845],{"class":69,"line":34242},[67,60846,60847],{"class":77},"        next.click()\n",[67,60849,60850],{"class":69,"line":34265},[67,60851,60852],{"class":77},"      }, 1000)\n",[67,60854,60855],{"class":69,"line":34288},[67,60856,33998],{"class":77},[67,60858,60859,60861,60863],{"class":69,"line":34294},[67,60860,52954],{"class":77},[67,60862,52350],{"class":51837},[67,60864,51844],{"class":77},[67,60866,60867,60869,60871],{"class":69,"line":34299},[67,60868,52322],{"class":77},[67,60870,52337],{"class":51837},[67,60872,51844],{"class":77},[67,60874,60875],{"class":69,"line":34308},[67,60876,177],{"emptyLinePlaceholder":176},[67,60878,60879,60881,60883],{"class":69,"line":34318},[67,60880,52322],{"class":77},[67,60882,51172],{"class":51837},[67,60884,51844],{"class":77},[40,60886,60888],{"id":60887},"_3252-焦点事件","3.2.5.2 焦点事件",[19,60890,60891],{},"小米搜索框案例：",[57,60893,60895],{"className":51170,"code":60894,"language":51172,"meta":62,"style":62},"\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",[64,60896,60897,60907,60921,60925,60933,60947,60967,60987,60999,61007,61013,61023,61033,61045,61049,61053,61060,61064,61075,61079,61083,61090,61101,61114,61128,61132,61136,61145,61157,61169,61183,61196,61209,61227,61238,61242,61246,61255,61272,61276,61280,61287,61297,61307,61318,61331,61343,61359,61370,61382,61386,61390,61398,61409,61426,61438,61450,61461,61465,61469,61480,61491,61495,61503,61507,61515,61519,61527,61542,61565,61580,61611,61638,61665,61692,61719,61746,61773,61782,61790,61798,61803,61823,61843,61848,61853,61871,61876,61886,61891,61905,61910,61915,61932,61941,61953,61957,61965,61973,61977],{"__ignoreMap":62},[67,60898,60899,60901,60903,60905],{"class":69,"line":70},[67,60900,51834],{"class":77},[67,60902,51838],{"class":51837},[67,60904,51841],{"class":112},[67,60906,51844],{"class":77},[67,60908,60909,60911,60913,60915,60917,60919],{"class":69,"line":143},[67,60910,1766],{"class":77},[67,60912,51172],{"class":51837},[67,60914,51853],{"class":112},[67,60916,909],{"class":77},[67,60918,51858],{"class":84},[67,60920,51844],{"class":77},[67,60922,60923],{"class":69,"line":149},[67,60924,177],{"emptyLinePlaceholder":176},[67,60926,60927,60929,60931],{"class":69,"line":155},[67,60928,1766],{"class":77},[67,60930,51871],{"class":51837},[67,60932,51844],{"class":77},[67,60934,60935,60937,60939,60941,60943,60945],{"class":69,"line":161},[67,60936,51878],{"class":77},[67,60938,51881],{"class":51837},[67,60940,51884],{"class":112},[67,60942,909],{"class":77},[67,60944,51889],{"class":84},[67,60946,51844],{"class":77},[67,60948,60949,60951,60953,60955,60957,60959,60961,60963,60965],{"class":69,"line":167},[67,60950,51878],{"class":77},[67,60952,51881],{"class":51837},[67,60954,51900],{"class":112},[67,60956,909],{"class":77},[67,60958,51905],{"class":84},[67,60960,51908],{"class":112},[67,60962,909],{"class":77},[67,60964,51913],{"class":84},[67,60966,51844],{"class":77},[67,60968,60969,60971,60973,60975,60977,60979,60981,60983,60985],{"class":69,"line":173},[67,60970,51878],{"class":77},[67,60972,51881],{"class":51837},[67,60974,15637],{"class":112},[67,60976,909],{"class":77},[67,60978,51928],{"class":84},[67,60980,51908],{"class":112},[67,60982,909],{"class":77},[67,60984,51935],{"class":84},[67,60986,51844],{"class":77},[67,60988,60989,60991,60993,60995,60997],{"class":69,"line":180},[67,60990,51878],{"class":77},[67,60992,51944],{"class":51837},[67,60994,51947],{"class":77},[67,60996,51944],{"class":51837},[67,60998,51844],{"class":77},[67,61000,61001,61003,61005],{"class":69,"line":186},[67,61002,51878],{"class":77},[67,61004,779],{"class":51837},[67,61006,51844],{"class":77},[67,61008,61009,61011],{"class":69,"line":444},[67,61010,51964],{"class":51837},[67,61012,16289],{"class":77},[67,61014,61015,61017,61019,61021],{"class":69,"line":2335},[67,61016,51971],{"class":208},[67,61018,51974],{"class":77},[67,61020,1051],{"class":208},[67,61022,2017],{"class":77},[67,61024,61025,61027,61029,61031],{"class":69,"line":2340},[67,61026,51983],{"class":208},[67,61028,51974],{"class":77},[67,61030,1051],{"class":208},[67,61032,2017],{"class":77},[67,61034,61035,61038,61040,61043],{"class":69,"line":2346},[67,61036,61037],{"class":208},"            box-sizing",[67,61039,51974],{"class":77},[67,61041,61042],{"class":208},"border-box",[67,61044,2017],{"class":77},[67,61046,61047],{"class":69,"line":2351},[67,61048,3250],{"class":77},[67,61050,61051],{"class":69,"line":2365},[67,61052,177],{"emptyLinePlaceholder":176},[67,61054,61055,61058],{"class":69,"line":2370},[67,61056,61057],{"class":51837},"        ul",[67,61059,16289],{"class":77},[67,61061,61062],{"class":69,"line":2376},[67,61063,177],{"emptyLinePlaceholder":176},[67,61065,61066,61069,61071,61073],{"class":69,"line":2397},[67,61067,61068],{"class":208},"            list-style",[67,61070,51974],{"class":77},[67,61072,55274],{"class":208},[67,61074,2017],{"class":77},[67,61076,61077],{"class":69,"line":2402},[67,61078,3250],{"class":77},[67,61080,61081],{"class":69,"line":2416},[67,61082,177],{"emptyLinePlaceholder":176},[67,61084,61085,61088],{"class":69,"line":2421},[67,61086,61087],{"class":112},"        .mi",[67,61089,16289],{"class":77},[67,61091,61092,61095,61097,61099],{"class":69,"line":2450},[67,61093,61094],{"class":208},"            position",[67,61096,51974],{"class":77},[67,61098,55301],{"class":208},[67,61100,2017],{"class":77},[67,61102,61103,61105,61107,61110,61112],{"class":69,"line":2455},[67,61104,52021],{"class":208},[67,61106,51974],{"class":77},[67,61108,61109],{"class":208},"223",[67,61111,52029],{"class":73},[67,61113,2017],{"class":77},[67,61115,61116,61118,61120,61122,61124,61126],{"class":69,"line":2472},[67,61117,51971],{"class":208},[67,61119,51974],{"class":77},[67,61121,1169],{"class":208},[67,61123,52029],{"class":73},[67,61125,52093],{"class":208},[67,61127,2017],{"class":77},[67,61129,61130],{"class":69,"line":2477},[67,61131,3250],{"class":77},[67,61133,61134],{"class":69,"line":2482},[67,61135,177],{"emptyLinePlaceholder":176},[67,61137,61138,61140,61143],{"class":69,"line":2487},[67,61139,61087],{"class":112},[67,61141,61142],{"class":51837}," input",[67,61144,16289],{"class":77},[67,61146,61147,61149,61151,61153,61155],{"class":69,"line":2501},[67,61148,52021],{"class":208},[67,61150,51974],{"class":77},[67,61152,61109],{"class":208},[67,61154,52029],{"class":73},[67,61156,2017],{"class":77},[67,61158,61159,61161,61163,61165,61167],{"class":69,"line":2506},[67,61160,52036],{"class":208},[67,61162,51974],{"class":77},[67,61164,1463],{"class":208},[67,61166,52029],{"class":73},[67,61168,2017],{"class":77},[67,61170,61171,61173,61175,61177,61179,61181],{"class":69,"line":3298},[67,61172,51983],{"class":208},[67,61174,51974],{"class":77},[67,61176,1051],{"class":208},[67,61178,2760],{"class":208},[67,61180,52029],{"class":73},[67,61182,2017],{"class":77},[67,61184,61185,61188,61190,61192,61194],{"class":69,"line":3312},[67,61186,61187],{"class":208},"            font-size",[67,61189,51974],{"class":77},[67,61191,1406],{"class":208},[67,61193,52029],{"class":73},[67,61195,2017],{"class":77},[67,61197,61198,61201,61203,61205,61207],{"class":69,"line":3320},[67,61199,61200],{"class":208},"            line-height",[67,61202,51974],{"class":77},[67,61204,1463],{"class":208},[67,61206,52029],{"class":73},[67,61208,2017],{"class":77},[67,61210,61211,61214,61216,61218,61220,61222,61225],{"class":69,"line":3325},[67,61212,61213],{"class":208},"            border",[67,61215,51974],{"class":77},[67,61217,1077],{"class":208},[67,61219,52029],{"class":73},[67,61221,52058],{"class":208},[67,61223,61224],{"class":208}," #e0e0e0",[67,61226,2017],{"class":77},[67,61228,61229,61232,61234,61236],{"class":69,"line":3331},[67,61230,61231],{"class":208},"            outline",[67,61233,51974],{"class":77},[67,61235,55274],{"class":208},[67,61237,2017],{"class":77},[67,61239,61240],{"class":69,"line":3337},[67,61241,3250],{"class":77},[67,61243,61244],{"class":69,"line":3342},[67,61245,177],{"emptyLinePlaceholder":176},[67,61247,61248,61250,61253],{"class":69,"line":8667},[67,61249,61087],{"class":112},[67,61251,61252],{"class":112}," .search",[67,61254,16289],{"class":77},[67,61256,61257,61259,61261,61263,61265,61267,61270],{"class":69,"line":8691},[67,61258,61213],{"class":208},[67,61260,51974],{"class":77},[67,61262,1077],{"class":208},[67,61264,52029],{"class":73},[67,61266,52058],{"class":208},[67,61268,61269],{"class":208}," #ff6700",[67,61271,2017],{"class":77},[67,61273,61274],{"class":69,"line":8696},[67,61275,3250],{"class":77},[67,61277,61278],{"class":69,"line":8702},[67,61279,177],{"emptyLinePlaceholder":176},[67,61281,61282,61285],{"class":69,"line":8729},[67,61283,61284],{"class":112},"        .result-list",[67,61286,16289],{"class":77},[67,61288,61289,61291,61293,61295],{"class":69,"line":8734},[67,61290,52009],{"class":208},[67,61292,51974],{"class":77},[67,61294,55274],{"class":208},[67,61296,2017],{"class":77},[67,61298,61299,61301,61303,61305],{"class":69,"line":8740},[67,61300,61094],{"class":208},[67,61302,51974],{"class":77},[67,61304,55368],{"class":208},[67,61306,2017],{"class":77},[67,61308,61309,61312,61314,61316],{"class":69,"line":8752},[67,61310,61311],{"class":208},"            left",[67,61313,51974],{"class":77},[67,61315,1051],{"class":208},[67,61317,2017],{"class":77},[67,61319,61320,61323,61325,61327,61329],{"class":69,"line":8764},[67,61321,61322],{"class":208},"            top",[67,61324,51974],{"class":77},[67,61326,1463],{"class":208},[67,61328,52029],{"class":73},[67,61330,2017],{"class":77},[67,61332,61333,61335,61337,61339,61341],{"class":69,"line":8776},[67,61334,52021],{"class":208},[67,61336,51974],{"class":77},[67,61338,61109],{"class":208},[67,61340,52029],{"class":73},[67,61342,2017],{"class":77},[67,61344,61345,61347,61349,61351,61353,61355,61357],{"class":69,"line":10435},[67,61346,61213],{"class":208},[67,61348,51974],{"class":77},[67,61350,1077],{"class":208},[67,61352,52029],{"class":73},[67,61354,52058],{"class":208},[67,61356,61269],{"class":208},[67,61358,2017],{"class":77},[67,61360,61361,61364,61366,61368],{"class":69,"line":10459},[67,61362,61363],{"class":208},"            border-top",[67,61365,51974],{"class":77},[67,61367,1051],{"class":208},[67,61369,2017],{"class":77},[67,61371,61372,61375,61377,61380],{"class":69,"line":10482},[67,61373,61374],{"class":208},"            background",[67,61376,51974],{"class":77},[67,61378,61379],{"class":208},"#fff",[67,61381,2017],{"class":77},[67,61383,61384],{"class":69,"line":10506},[67,61385,3250],{"class":77},[67,61387,61388],{"class":69,"line":10511},[67,61389,177],{"emptyLinePlaceholder":176},[67,61391,61392,61394,61396],{"class":69,"line":10516},[67,61393,61284],{"class":112},[67,61395,2122],{"class":51837},[67,61397,16289],{"class":77},[67,61399,61400,61402,61404,61407],{"class":69,"line":10521},[67,61401,52009],{"class":208},[67,61403,51974],{"class":77},[67,61405,61406],{"class":208},"block",[67,61408,2017],{"class":77},[67,61410,61411,61413,61415,61417,61419,61422,61424],{"class":69,"line":10530},[67,61412,51983],{"class":208},[67,61414,51974],{"class":77},[67,61416,1202],{"class":208},[67,61418,52029],{"class":73},[67,61420,61421],{"class":208}," 15",[67,61423,52029],{"class":73},[67,61425,2017],{"class":77},[67,61427,61428,61430,61432,61434,61436],{"class":69,"line":10535},[67,61429,61187],{"class":208},[67,61431,51974],{"class":77},[67,61433,1355],{"class":208},[67,61435,52029],{"class":73},[67,61437,2017],{"class":77},[67,61439,61440,61443,61445,61448],{"class":69,"line":10541},[67,61441,61442],{"class":208},"            color",[67,61444,51974],{"class":77},[67,61446,61447],{"class":208},"#424242",[67,61449,2017],{"class":77},[67,61451,61452,61455,61457,61459],{"class":69,"line":10562},[67,61453,61454],{"class":208},"            text-decoration",[67,61456,51974],{"class":77},[67,61458,55274],{"class":208},[67,61460,2017],{"class":77},[67,61462,61463],{"class":69,"line":10568},[67,61464,3250],{"class":77},[67,61466,61467],{"class":69,"line":10582},[67,61468,177],{"emptyLinePlaceholder":176},[67,61470,61471,61473,61475,61478],{"class":69,"line":10588},[67,61472,61284],{"class":112},[67,61474,2122],{"class":51837},[67,61476,61477],{"class":112},":hover",[67,61479,16289],{"class":77},[67,61481,61482,61484,61486,61489],{"class":69,"line":10615},[67,61483,52177],{"class":208},[67,61485,51974],{"class":77},[67,61487,61488],{"class":208},"#eee",[67,61490,2017],{"class":77},[67,61492,61493],{"class":69,"line":10624},[67,61494,3250],{"class":77},[67,61496,61497,61499,61501],{"class":69,"line":10630},[67,61498,52313],{"class":77},[67,61500,779],{"class":51837},[67,61502,51844],{"class":77},[67,61504,61505],{"class":69,"line":10638},[67,61506,177],{"emptyLinePlaceholder":176},[67,61508,61509,61511,61513],{"class":69,"line":10643},[67,61510,52322],{"class":77},[67,61512,51871],{"class":51837},[67,61514,51844],{"class":77},[67,61516,61517],{"class":69,"line":17321},[67,61518,177],{"emptyLinePlaceholder":176},[67,61520,61521,61523,61525],{"class":69,"line":17327},[67,61522,1766],{"class":77},[67,61524,52337],{"class":51837},[67,61526,51844],{"class":77},[67,61528,61529,61531,61533,61535,61537,61540],{"class":69,"line":17350},[67,61530,51878],{"class":77},[67,61532,52148],{"class":51837},[67,61534,54023],{"class":112},[67,61536,909],{"class":77},[67,61538,61539],{"class":84},"\"mi\"",[67,61541,51844],{"class":77},[67,61543,61544,61546,61548,61550,61552,61555,61558,61560,61563],{"class":69,"line":17356},[67,61545,55839],{"class":77},[67,61547,54358],{"class":51837},[67,61549,54361],{"class":112},[67,61551,909],{"class":77},[67,61553,61554],{"class":84},"\"search\"",[67,61556,61557],{"class":112}," placeholder",[67,61559,909],{"class":77},[67,61561,61562],{"class":84},"\"小米笔记本\"",[67,61564,51844],{"class":77},[67,61566,61567,61569,61571,61573,61575,61578],{"class":69,"line":17379},[67,61568,55839],{"class":77},[67,61570,1863],{"class":51837},[67,61572,54023],{"class":112},[67,61574,909],{"class":77},[67,61576,61577],{"class":84},"\"result-list\"",[67,61579,51844],{"class":77},[67,61581,61582,61585,61587,61590,61592,61595,61597,61600,61603,61605,61607,61609],{"class":69,"line":17393},[67,61583,61584],{"class":77},"            \u003C",[67,61586,818],{"class":51837},[67,61588,61589],{"class":77},">\u003C",[67,61591,28],{"class":51837},[67,61593,61594],{"class":112}," href",[67,61596,909],{"class":77},[67,61598,61599],{"class":84},"\"#\"",[67,61601,61602],{"class":77},">全部商品\u003C\u002F",[67,61604,28],{"class":51837},[67,61606,55851],{"class":77},[67,61608,818],{"class":51837},[67,61610,51844],{"class":77},[67,61612,61613,61615,61617,61619,61621,61623,61625,61627,61630,61632,61634,61636],{"class":69,"line":17413},[67,61614,61584],{"class":77},[67,61616,818],{"class":51837},[67,61618,61589],{"class":77},[67,61620,28],{"class":51837},[67,61622,61594],{"class":112},[67,61624,909],{"class":77},[67,61626,61599],{"class":84},[67,61628,61629],{"class":77},">小米11\u003C\u002F",[67,61631,28],{"class":51837},[67,61633,55851],{"class":77},[67,61635,818],{"class":51837},[67,61637,51844],{"class":77},[67,61639,61640,61642,61644,61646,61648,61650,61652,61654,61657,61659,61661,61663],{"class":69,"line":17419},[67,61641,61584],{"class":77},[67,61643,818],{"class":51837},[67,61645,61589],{"class":77},[67,61647,28],{"class":51837},[67,61649,61594],{"class":112},[67,61651,909],{"class":77},[67,61653,61599],{"class":84},[67,61655,61656],{"class":77},">小米10S\u003C\u002F",[67,61658,28],{"class":51837},[67,61660,55851],{"class":77},[67,61662,818],{"class":51837},[67,61664,51844],{"class":77},[67,61666,61667,61669,61671,61673,61675,61677,61679,61681,61684,61686,61688,61690],{"class":69,"line":17430},[67,61668,61584],{"class":77},[67,61670,818],{"class":51837},[67,61672,61589],{"class":77},[67,61674,28],{"class":51837},[67,61676,61594],{"class":112},[67,61678,909],{"class":77},[67,61680,61599],{"class":84},[67,61682,61683],{"class":77},">小米笔记本\u003C\u002F",[67,61685,28],{"class":51837},[67,61687,55851],{"class":77},[67,61689,818],{"class":51837},[67,61691,51844],{"class":77},[67,61693,61694,61696,61698,61700,61702,61704,61706,61708,61711,61713,61715,61717],{"class":69,"line":17453},[67,61695,61584],{"class":77},[67,61697,818],{"class":51837},[67,61699,61589],{"class":77},[67,61701,28],{"class":51837},[67,61703,61594],{"class":112},[67,61705,909],{"class":77},[67,61707,61599],{"class":84},[67,61709,61710],{"class":77},">小米手机\u003C\u002F",[67,61712,28],{"class":51837},[67,61714,55851],{"class":77},[67,61716,818],{"class":51837},[67,61718,51844],{"class":77},[67,61720,61721,61723,61725,61727,61729,61731,61733,61735,61738,61740,61742,61744],{"class":69,"line":17475},[67,61722,61584],{"class":77},[67,61724,818],{"class":51837},[67,61726,61589],{"class":77},[67,61728,28],{"class":51837},[67,61730,61594],{"class":112},[67,61732,909],{"class":77},[67,61734,61599],{"class":84},[67,61736,61737],{"class":77},">黑鲨4\u003C\u002F",[67,61739,28],{"class":51837},[67,61741,55851],{"class":77},[67,61743,818],{"class":51837},[67,61745,51844],{"class":77},[67,61747,61748,61750,61752,61754,61756,61758,61760,61762,61765,61767,61769,61771],{"class":69,"line":17480},[67,61749,61584],{"class":77},[67,61751,818],{"class":51837},[67,61753,61589],{"class":77},[67,61755,28],{"class":51837},[67,61757,61594],{"class":112},[67,61759,909],{"class":77},[67,61761,61599],{"class":84},[67,61763,61764],{"class":77},">空调\u003C\u002F",[67,61766,28],{"class":51837},[67,61768,55851],{"class":77},[67,61770,818],{"class":51837},[67,61772,51844],{"class":77},[67,61774,61775,61778,61780],{"class":69,"line":17486},[67,61776,61777],{"class":77},"        \u003C\u002F",[67,61779,1863],{"class":51837},[67,61781,51844],{"class":77},[67,61783,61784,61786,61788],{"class":69,"line":17500},[67,61785,52313],{"class":77},[67,61787,52148],{"class":51837},[67,61789,51844],{"class":77},[67,61791,61792,61794,61796],{"class":69,"line":17513},[67,61793,51878],{"class":77},[67,61795,52350],{"class":51837},[67,61797,51844],{"class":77},[67,61799,61800],{"class":69,"line":17518},[67,61801,61802],{"class":202},"        \u002F\u002F 1. 获取元素\n",[67,61804,61805,61808,61810,61812,61814,61816,61818,61821],{"class":69,"line":17532},[67,61806,61807],{"class":73},"        const",[67,61809,61142],{"class":208},[67,61811,14282],{"class":73},[67,61813,54933],{"class":77},[67,61815,54936],{"class":112},[67,61817,864],{"class":77},[67,61819,61820],{"class":84},"'[type=search]'",[67,61822,870],{"class":77},[67,61824,61825,61827,61830,61832,61834,61836,61838,61841],{"class":69,"line":17537},[67,61826,61807],{"class":73},[67,61828,61829],{"class":208}," ul",[67,61831,14282],{"class":73},[67,61833,54933],{"class":77},[67,61835,54936],{"class":112},[67,61837,864],{"class":77},[67,61839,61840],{"class":84},"'.result-list'",[67,61842,870],{"class":77},[67,61844,61845],{"class":69,"line":17543},[67,61846,61847],{"class":202},"        \u002F\u002F console.log(input)\n",[67,61849,61850],{"class":69,"line":17548},[67,61851,61852],{"class":202},"        \u002F\u002F 2. 监听事件 获得焦点\n",[67,61854,61855,61858,61860,61862,61865,61867,61869],{"class":69,"line":17562},[67,61856,61857],{"class":77},"        input.",[67,61859,58350],{"class":112},[67,61861,864],{"class":77},[67,61863,61864],{"class":84},"'focus'",[67,61866,13153],{"class":77},[67,61868,54986],{"class":73},[67,61870,54989],{"class":77},[67,61872,61873],{"class":69,"line":17567},[67,61874,61875],{"class":202},"            \u002F\u002F ul显示\n",[67,61877,61878,61881,61883],{"class":69,"line":17572},[67,61879,61880],{"class":77},"            ul.style.display ",[67,61882,909],{"class":73},[67,61884,61885],{"class":84}," 'block'\n",[67,61887,61888],{"class":69,"line":17586},[67,61889,61890],{"class":202},"            \u002F\u002F 添加一个带有颜色边框的类名\n",[67,61892,61893,61896,61898,61900,61903],{"class":69,"line":17598},[67,61894,61895],{"class":77},"            input.classList.",[67,61897,6053],{"class":112},[67,61899,864],{"class":77},[67,61901,61902],{"class":84},"'search'",[67,61904,870],{"class":77},[67,61906,61907],{"class":69,"line":17603},[67,61908,61909],{"class":77},"        })\n",[67,61911,61912],{"class":69,"line":17616},[67,61913,61914],{"class":202},"        \u002F\u002F 3. 监听事件 失去焦点\n",[67,61916,61917,61919,61921,61923,61926,61928,61930],{"class":69,"line":17621},[67,61918,61857],{"class":77},[67,61920,58350],{"class":112},[67,61922,864],{"class":77},[67,61924,61925],{"class":84},"'blur'",[67,61927,13153],{"class":77},[67,61929,54986],{"class":73},[67,61931,54989],{"class":77},[67,61933,61934,61936,61938],{"class":69,"line":17626},[67,61935,61880],{"class":77},[67,61937,909],{"class":73},[67,61939,61940],{"class":84}," 'none'\n",[67,61942,61943,61945,61947,61949,61951],{"class":69,"line":17631},[67,61944,61895],{"class":77},[67,61946,57543],{"class":112},[67,61948,864],{"class":77},[67,61950,61902],{"class":84},[67,61952,870],{"class":77},[67,61954,61955],{"class":69,"line":17644},[67,61956,61909],{"class":77},[67,61958,61959,61961,61963],{"class":69,"line":17649},[67,61960,52313],{"class":77},[67,61962,52350],{"class":51837},[67,61964,51844],{"class":77},[67,61966,61967,61969,61971],{"class":69,"line":33170},[67,61968,52322],{"class":77},[67,61970,52337],{"class":51837},[67,61972,51844],{"class":77},[67,61974,61975],{"class":69,"line":33176},[67,61976,177],{"emptyLinePlaceholder":176},[67,61978,61979,61981,61983],{"class":69,"line":33182},[67,61980,52322],{"class":77},[67,61982,51172],{"class":51837},[67,61984,51844],{"class":77},[40,61986,61988],{"id":61987},"_3253-键盘事件","3.2.5.3 键盘事件",[19,61990,61991],{},"评论字数统计案例",[19,61993,61994],{},"补充知识点：点击表单元素，获得焦点时盒子变大，可以使用focus伪类选择器",[19,61996,61997],{},"牢记focus伪类选择器",[51881,61999],{"charSet":62000},"UTF-8",[51881,62002],{"name":62003,"content":62004},"viewport","width=device-width, initial-scale=1.0",[51944,62006,62007],{},"Document",[779,62009,62010],{},"\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",[54358,62012],{"type":5906},[1863,62014,62015,62018],{},[818,62016,62017],{},"键盘事件代码，显示可以使用opacity样式属性，通过透明度的形式实现盒子或者文字显示和隐藏，相比于disabled来说显示效果更好一些，一定要学会使用",[818,62019,62020],{},"一定要用好placeholder，它是表单元素的属性值，表示提示文本",[57,62022,62024],{"className":51170,"code":62023,"language":51172,"meta":62,"style":62},"\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",[64,62025,62026,62036,62050,62054,62062,62076,62096,62116,62129,62137,62144,62157,62171,62181,62191,62195,62199,62206,62218,62230,62242,62254,62283,62296,62300,62304,62313,62324,62336,62347,62358,62370,62381,62393,62409,62421,62425,62429,62440,62451,62461,62473,62477,62481,62489,62500,62510,62521,62533,62546,62558,62570,62574,62578,62587,62599,62610,62623,62634,62648,62652,62656,62663,62675,62687,62697,62701,62705,62714,62726,62736,62740,62744,62755,62765,62784,62797,62801,62805,62815,62825,62829,62833,62844,62855,62867,62879,62883,62887,62898,62909,62923,62927,62931,62942,62952,62964,62968,62976,62984,62988,62996,63011,63030,63070,63083,63091,63105,63125,63133,63148,63171,63189,63204,63224,63244,63264,63272,63280,63288,63296,63316,63336,63341,63358,63367,63371,63376,63392,63400,63404,63409,63426,63431,63456,63460,63464,63469,63474,63482,63490,63494],{"__ignoreMap":62},[67,62027,62028,62030,62032,62034],{"class":69,"line":70},[67,62029,51834],{"class":77},[67,62031,51838],{"class":51837},[67,62033,51841],{"class":112},[67,62035,51844],{"class":77},[67,62037,62038,62040,62042,62044,62046,62048],{"class":69,"line":143},[67,62039,1766],{"class":77},[67,62041,51172],{"class":51837},[67,62043,51853],{"class":112},[67,62045,909],{"class":77},[67,62047,51858],{"class":84},[67,62049,51844],{"class":77},[67,62051,62052],{"class":69,"line":149},[67,62053,177],{"emptyLinePlaceholder":176},[67,62055,62056,62058,62060],{"class":69,"line":155},[67,62057,1766],{"class":77},[67,62059,51871],{"class":51837},[67,62061,51844],{"class":77},[67,62063,62064,62066,62068,62070,62072,62074],{"class":69,"line":161},[67,62065,52681],{"class":77},[67,62067,51881],{"class":51837},[67,62069,51884],{"class":112},[67,62071,909],{"class":77},[67,62073,51889],{"class":84},[67,62075,51844],{"class":77},[67,62077,62078,62080,62082,62084,62086,62088,62090,62092,62094],{"class":69,"line":167},[67,62079,52681],{"class":77},[67,62081,51881],{"class":51837},[67,62083,51900],{"class":112},[67,62085,909],{"class":77},[67,62087,51905],{"class":84},[67,62089,51908],{"class":112},[67,62091,909],{"class":77},[67,62093,51913],{"class":84},[67,62095,51844],{"class":77},[67,62097,62098,62100,62102,62104,62106,62108,62110,62112,62114],{"class":69,"line":173},[67,62099,52681],{"class":77},[67,62101,51881],{"class":51837},[67,62103,15637],{"class":112},[67,62105,909],{"class":77},[67,62107,51928],{"class":84},[67,62109,51908],{"class":112},[67,62111,909],{"class":77},[67,62113,51935],{"class":84},[67,62115,51844],{"class":77},[67,62117,62118,62120,62122,62125,62127],{"class":69,"line":180},[67,62119,52681],{"class":77},[67,62121,51944],{"class":51837},[67,62123,62124],{"class":77},">评论回车发布\u003C\u002F",[67,62126,51944],{"class":51837},[67,62128,51844],{"class":77},[67,62130,62131,62133,62135],{"class":69,"line":186},[67,62132,52681],{"class":77},[67,62134,779],{"class":51837},[67,62136,51844],{"class":77},[67,62138,62139,62142],{"class":69,"line":444},[67,62140,62141],{"class":112},"    .wrapper",[67,62143,16289],{"class":77},[67,62145,62146,62149,62151,62153,62155],{"class":69,"line":2335},[67,62147,62148],{"class":208},"      min-width",[67,62150,51974],{"class":77},[67,62152,4707],{"class":208},[67,62154,52029],{"class":73},[67,62156,2017],{"class":77},[67,62158,62159,62162,62164,62167,62169],{"class":69,"line":2340},[67,62160,62161],{"class":208},"      max-width",[67,62163,51974],{"class":77},[67,62165,62166],{"class":208},"800",[67,62168,52029],{"class":73},[67,62170,2017],{"class":77},[67,62172,62173,62175,62177,62179],{"class":69,"line":2346},[67,62174,55546],{"class":208},[67,62176,51974],{"class":77},[67,62178,52014],{"class":208},[67,62180,2017],{"class":77},[67,62182,62183,62185,62187,62189],{"class":69,"line":2351},[67,62184,55557],{"class":208},[67,62186,51974],{"class":77},[67,62188,52117],{"class":208},[67,62190,2017],{"class":77},[67,62192,62193],{"class":69,"line":2365},[67,62194,2909],{"class":77},[67,62196,62197],{"class":69,"line":2370},[67,62198,177],{"emptyLinePlaceholder":176},[67,62200,62201,62204],{"class":69,"line":2376},[67,62202,62203],{"class":112},"    .avatar",[67,62205,16289],{"class":77},[67,62207,62208,62210,62212,62214,62216],{"class":69,"line":2397},[67,62209,55308],{"class":208},[67,62211,51974],{"class":77},[67,62213,1463],{"class":208},[67,62215,52029],{"class":73},[67,62217,2017],{"class":77},[67,62219,62220,62222,62224,62226,62228],{"class":69,"line":2402},[67,62221,55322],{"class":208},[67,62223,51974],{"class":77},[67,62225,1463],{"class":208},[67,62227,52029],{"class":73},[67,62229,2017],{"class":77},[67,62231,62232,62234,62236,62238,62240],{"class":69,"line":2416},[67,62233,55671],{"class":208},[67,62235,51974],{"class":77},[67,62237,1512],{"class":208},[67,62239,1186],{"class":73},[67,62241,2017],{"class":77},[67,62243,62244,62247,62249,62252],{"class":69,"line":2421},[67,62245,62246],{"class":208},"      overflow",[67,62248,51974],{"class":77},[67,62250,62251],{"class":208},"hidden",[67,62253,2017],{"class":77},[67,62255,62256,62259,62261,62264,62266,62269,62271,62274,62276,62278,62281],{"class":69,"line":2450},[67,62257,62258],{"class":208},"      background",[67,62260,51974],{"class":77},[67,62262,62263],{"class":208},"url",[67,62265,864],{"class":77},[67,62267,62268],{"class":5935},"...\u002F..\u002Fpublic\u002Fimages\u002Favatar.jpg",[67,62270,14432],{"class":77},[67,62272,62273],{"class":208},"no-repeat",[67,62275,17861],{"class":208},[67,62277,25690],{"class":77},[67,62279,62280],{"class":208},"cover",[67,62282,2017],{"class":77},[67,62284,62285,62288,62290,62292,62294],{"class":69,"line":2455},[67,62286,62287],{"class":208},"      margin-right",[67,62289,51974],{"class":77},[67,62291,1556],{"class":208},[67,62293,52029],{"class":73},[67,62295,2017],{"class":77},[67,62297,62298],{"class":69,"line":2472},[67,62299,2909],{"class":77},[67,62301,62302],{"class":69,"line":2477},[67,62303,177],{"emptyLinePlaceholder":176},[67,62305,62306,62308,62311],{"class":69,"line":2482},[67,62307,62141],{"class":112},[67,62309,62310],{"class":51837}," textarea",[67,62312,16289],{"class":77},[67,62314,62315,62318,62320,62322],{"class":69,"line":2487},[67,62316,62317],{"class":208},"      outline",[67,62319,51974],{"class":77},[67,62321,55274],{"class":208},[67,62323,2017],{"class":77},[67,62325,62326,62329,62331,62334],{"class":69,"line":2501},[67,62327,62328],{"class":208},"      border-color",[67,62330,51974],{"class":77},[67,62332,62333],{"class":208},"transparent",[67,62335,2017],{"class":77},[67,62337,62338,62341,62343,62345],{"class":69,"line":2506},[67,62339,62340],{"class":208},"      resize",[67,62342,51974],{"class":77},[67,62344,55274],{"class":208},[67,62346,2017],{"class":77},[67,62348,62349,62351,62353,62356],{"class":69,"line":3298},[67,62350,62258],{"class":208},[67,62352,51974],{"class":77},[67,62354,62355],{"class":208},"#f5f5f5",[67,62357,2017],{"class":77},[67,62359,62360,62362,62364,62366,62368],{"class":69,"line":3312},[67,62361,55671],{"class":208},[67,62363,51974],{"class":77},[67,62365,1151],{"class":208},[67,62367,52029],{"class":73},[67,62369,2017],{"class":77},[67,62371,62372,62375,62377,62379],{"class":69,"line":3320},[67,62373,62374],{"class":208},"      flex",[67,62376,51974],{"class":77},[67,62378,1077],{"class":208},[67,62380,2017],{"class":77},[67,62382,62383,62385,62387,62389,62391],{"class":69,"line":3325},[67,62384,55232],{"class":208},[67,62386,51974],{"class":77},[67,62388,1303],{"class":208},[67,62390,52029],{"class":73},[67,62392,2017],{"class":77},[67,62394,62395,62398,62400,62402,62405,62407],{"class":69,"line":3331},[67,62396,62397],{"class":208},"      transition",[67,62399,51974],{"class":77},[67,62401,28658],{"class":208},[67,62403,62404],{"class":208}," 0.5",[67,62406,1551],{"class":73},[67,62408,2017],{"class":77},[67,62410,62411,62413,62415,62417,62419],{"class":69,"line":3337},[67,62412,55322],{"class":208},[67,62414,51974],{"class":77},[67,62416,1807],{"class":208},[67,62418,52029],{"class":73},[67,62420,2017],{"class":77},[67,62422,62423],{"class":69,"line":3342},[67,62424,2909],{"class":77},[67,62426,62427],{"class":69,"line":8667},[67,62428,177],{"emptyLinePlaceholder":176},[67,62430,62431,62433,62435,62438],{"class":69,"line":8691},[67,62432,62141],{"class":112},[67,62434,62310],{"class":51837},[67,62436,62437],{"class":112},":focus",[67,62439,16289],{"class":77},[67,62441,62442,62444,62446,62449],{"class":69,"line":8696},[67,62443,62328],{"class":208},[67,62445,51974],{"class":77},[67,62447,62448],{"class":208},"#e4e4e4",[67,62450,2017],{"class":77},[67,62452,62453,62455,62457,62459],{"class":69,"line":8702},[67,62454,62258],{"class":208},[67,62456,51974],{"class":77},[67,62458,61379],{"class":208},[67,62460,2017],{"class":77},[67,62462,62463,62465,62467,62469,62471],{"class":69,"line":8729},[67,62464,55322],{"class":208},[67,62466,51974],{"class":77},[67,62468,1512],{"class":208},[67,62470,52029],{"class":73},[67,62472,2017],{"class":77},[67,62474,62475],{"class":69,"line":8734},[67,62476,2909],{"class":77},[67,62478,62479],{"class":69,"line":8740},[67,62480,177],{"emptyLinePlaceholder":176},[67,62482,62483,62485,62487],{"class":69,"line":8752},[67,62484,62141],{"class":112},[67,62486,58004],{"class":51837},[67,62488,16289],{"class":77},[67,62490,62491,62493,62495,62498],{"class":69,"line":8764},[67,62492,62258],{"class":208},[67,62494,51974],{"class":77},[67,62496,62497],{"class":208},"#00aeec",[67,62499,2017],{"class":77},[67,62501,62502,62504,62506,62508],{"class":69,"line":8776},[67,62503,57953],{"class":208},[67,62505,51974],{"class":77},[67,62507,61379],{"class":208},[67,62509,2017],{"class":77},[67,62511,62512,62515,62517,62519],{"class":69,"line":10435},[67,62513,62514],{"class":208},"      border",[67,62516,51974],{"class":77},[67,62518,55274],{"class":208},[67,62520,2017],{"class":77},[67,62522,62523,62525,62527,62529,62531],{"class":69,"line":10459},[67,62524,55671],{"class":208},[67,62526,51974],{"class":77},[67,62528,1151],{"class":208},[67,62530,52029],{"class":73},[67,62532,2017],{"class":77},[67,62534,62535,62538,62540,62542,62544],{"class":69,"line":10482},[67,62536,62537],{"class":208},"      margin-left",[67,62539,51974],{"class":77},[67,62541,1303],{"class":208},[67,62543,52029],{"class":73},[67,62545,2017],{"class":77},[67,62547,62548,62550,62552,62554,62556],{"class":69,"line":10506},[67,62549,55308],{"class":208},[67,62551,51974],{"class":77},[67,62553,1214],{"class":208},[67,62555,52029],{"class":73},[67,62557,2017],{"class":77},[67,62559,62560,62563,62565,62568],{"class":69,"line":10511},[67,62561,62562],{"class":208},"      cursor",[67,62564,51974],{"class":77},[67,62566,62567],{"class":208},"pointer",[67,62569,2017],{"class":77},[67,62571,62572],{"class":69,"line":10516},[67,62573,2909],{"class":77},[67,62575,62576],{"class":69,"line":10521},[67,62577,177],{"emptyLinePlaceholder":176},[67,62579,62580,62582,62585],{"class":69,"line":10530},[67,62581,62141],{"class":112},[67,62583,62584],{"class":112}," .total",[67,62586,16289],{"class":77},[67,62588,62589,62591,62593,62595,62597],{"class":69,"line":10535},[67,62590,62287],{"class":208},[67,62592,51974],{"class":77},[67,62594,1468],{"class":208},[67,62596,52029],{"class":73},[67,62598,2017],{"class":77},[67,62600,62601,62603,62605,62608],{"class":69,"line":10541},[67,62602,57953],{"class":208},[67,62604,51974],{"class":77},[67,62606,62607],{"class":208},"#999",[67,62609,2017],{"class":77},[67,62611,62612,62615,62617,62619,62621],{"class":69,"line":10562},[67,62613,62614],{"class":208},"      margin-top",[67,62616,51974],{"class":77},[67,62618,1177],{"class":208},[67,62620,52029],{"class":73},[67,62622,2017],{"class":77},[67,62624,62625,62628,62630,62632],{"class":69,"line":10568},[67,62626,62627],{"class":208},"      opacity",[67,62629,51974],{"class":77},[67,62631,1051],{"class":208},[67,62633,2017],{"class":77},[67,62635,62636,62638,62640,62642,62644,62646],{"class":69,"line":10582},[67,62637,62397],{"class":208},[67,62639,51974],{"class":77},[67,62641,28658],{"class":208},[67,62643,62404],{"class":208},[67,62645,1551],{"class":73},[67,62647,2017],{"class":77},[67,62649,62650],{"class":69,"line":10588},[67,62651,2909],{"class":77},[67,62653,62654],{"class":69,"line":10615},[67,62655,177],{"emptyLinePlaceholder":176},[67,62657,62658,62661],{"class":69,"line":10624},[67,62659,62660],{"class":112},"    .list",[67,62662,16289],{"class":77},[67,62664,62665,62667,62669,62671,62673],{"class":69,"line":10630},[67,62666,62148],{"class":208},[67,62668,51974],{"class":77},[67,62670,4707],{"class":208},[67,62672,52029],{"class":73},[67,62674,2017],{"class":77},[67,62676,62677,62679,62681,62683,62685],{"class":69,"line":10638},[67,62678,62161],{"class":208},[67,62680,51974],{"class":77},[67,62682,62166],{"class":208},[67,62684,52029],{"class":73},[67,62686,2017],{"class":77},[67,62688,62689,62691,62693,62695],{"class":69,"line":10643},[67,62690,55546],{"class":208},[67,62692,51974],{"class":77},[67,62694,52014],{"class":208},[67,62696,2017],{"class":77},[67,62698,62699],{"class":69,"line":17321},[67,62700,2909],{"class":77},[67,62702,62703],{"class":69,"line":17327},[67,62704,177],{"emptyLinePlaceholder":176},[67,62706,62707,62709,62712],{"class":69,"line":17350},[67,62708,62660],{"class":112},[67,62710,62711],{"class":112}," .item",[67,62713,16289],{"class":77},[67,62715,62716,62718,62720,62722,62724],{"class":69,"line":17356},[67,62717,55308],{"class":208},[67,62719,51974],{"class":77},[67,62721,1169],{"class":208},[67,62723,1186],{"class":73},[67,62725,2017],{"class":77},[67,62727,62728,62730,62732,62734],{"class":69,"line":17379},[67,62729,55546],{"class":208},[67,62731,51974],{"class":77},[67,62733,52014],{"class":208},[67,62735,2017],{"class":77},[67,62737,62738],{"class":69,"line":17393},[67,62739,2909],{"class":77},[67,62741,62742],{"class":69,"line":17413},[67,62743,177],{"emptyLinePlaceholder":176},[67,62745,62746,62748,62750,62753],{"class":69,"line":17419},[67,62747,62660],{"class":112},[67,62749,62711],{"class":112},[67,62751,62752],{"class":112}," .info",[67,62754,16289],{"class":77},[67,62756,62757,62759,62761,62763],{"class":69,"line":17430},[67,62758,62374],{"class":208},[67,62760,51974],{"class":77},[67,62762,1077],{"class":208},[67,62764,2017],{"class":77},[67,62766,62767,62770,62772,62774,62776,62779,62782],{"class":69,"line":17453},[67,62768,62769],{"class":208},"      border-bottom",[67,62771,51974],{"class":77},[67,62773,1077],{"class":208},[67,62775,52029],{"class":73},[67,62777,62778],{"class":208}," dashed",[67,62780,62781],{"class":208}," #e4e4e4",[67,62783,2017],{"class":77},[67,62785,62786,62789,62791,62793,62795],{"class":69,"line":17475},[67,62787,62788],{"class":208},"      padding-bottom",[67,62790,51974],{"class":77},[67,62792,1303],{"class":208},[67,62794,52029],{"class":73},[67,62796,2017],{"class":77},[67,62798,62799],{"class":69,"line":17480},[67,62800,2909],{"class":77},[67,62802,62803],{"class":69,"line":17486},[67,62804,177],{"emptyLinePlaceholder":176},[67,62806,62807,62809,62811,62813],{"class":69,"line":17500},[67,62808,62660],{"class":112},[67,62810,62711],{"class":112},[67,62812,7544],{"class":51837},[67,62814,16289],{"class":77},[67,62816,62817,62819,62821,62823],{"class":69,"line":17513},[67,62818,55243],{"class":208},[67,62820,51974],{"class":77},[67,62822,1051],{"class":208},[67,62824,2017],{"class":77},[67,62826,62827],{"class":69,"line":17518},[67,62828,2909],{"class":77},[67,62830,62831],{"class":69,"line":17532},[67,62832,177],{"emptyLinePlaceholder":176},[67,62834,62835,62837,62839,62842],{"class":69,"line":17537},[67,62836,62660],{"class":112},[67,62838,62711],{"class":112},[67,62840,62841],{"class":112}," .name",[67,62843,16289],{"class":77},[67,62845,62846,62848,62850,62853],{"class":69,"line":17543},[67,62847,57953],{"class":208},[67,62849,51974],{"class":77},[67,62851,62852],{"class":208},"#FB7299",[67,62854,2017],{"class":77},[67,62856,62857,62859,62861,62863,62865],{"class":69,"line":17548},[67,62858,55459],{"class":208},[67,62860,51974],{"class":77},[67,62862,1406],{"class":208},[67,62864,52029],{"class":73},[67,62866,2017],{"class":77},[67,62868,62869,62872,62874,62877],{"class":69,"line":17562},[67,62870,62871],{"class":208},"      font-weight",[67,62873,51974],{"class":77},[67,62875,62876],{"class":208},"bold",[67,62878,2017],{"class":77},[67,62880,62881],{"class":69,"line":17567},[67,62882,2909],{"class":77},[67,62884,62885],{"class":69,"line":17572},[67,62886,177],{"emptyLinePlaceholder":176},[67,62888,62889,62891,62893,62896],{"class":69,"line":17586},[67,62890,62660],{"class":112},[67,62892,62711],{"class":112},[67,62894,62895],{"class":112}," .text",[67,62897,16289],{"class":77},[67,62899,62900,62902,62904,62907],{"class":69,"line":17598},[67,62901,57953],{"class":208},[67,62903,51974],{"class":77},[67,62905,62906],{"class":208},"#333",[67,62908,2017],{"class":77},[67,62910,62911,62913,62915,62917,62919,62921],{"class":69,"line":17603},[67,62912,55232],{"class":208},[67,62914,51974],{"class":77},[67,62916,1303],{"class":208},[67,62918,52029],{"class":73},[67,62920,4813],{"class":208},[67,62922,2017],{"class":77},[67,62924,62925],{"class":69,"line":17616},[67,62926,2909],{"class":77},[67,62928,62929],{"class":69,"line":17621},[67,62930,177],{"emptyLinePlaceholder":176},[67,62932,62933,62935,62937,62940],{"class":69,"line":17626},[67,62934,62660],{"class":112},[67,62936,62711],{"class":112},[67,62938,62939],{"class":112}," .time",[67,62941,16289],{"class":77},[67,62943,62944,62946,62948,62950],{"class":69,"line":17631},[67,62945,57953],{"class":208},[67,62947,51974],{"class":77},[67,62949,62607],{"class":208},[67,62951,2017],{"class":77},[67,62953,62954,62956,62958,62960,62962],{"class":69,"line":17644},[67,62955,55459],{"class":208},[67,62957,51974],{"class":77},[67,62959,1355],{"class":208},[67,62961,52029],{"class":73},[67,62963,2017],{"class":77},[67,62965,62966],{"class":69,"line":17649},[67,62967,2909],{"class":77},[67,62969,62970,62972,62974],{"class":69,"line":33170},[67,62971,52954],{"class":77},[67,62973,779],{"class":51837},[67,62975,51844],{"class":77},[67,62977,62978,62980,62982],{"class":69,"line":33176},[67,62979,52322],{"class":77},[67,62981,51871],{"class":51837},[67,62983,51844],{"class":77},[67,62985,62986],{"class":69,"line":33182},[67,62987,177],{"emptyLinePlaceholder":176},[67,62989,62990,62992,62994],{"class":69,"line":33188},[67,62991,1766],{"class":77},[67,62993,52337],{"class":51837},[67,62995,51844],{"class":77},[67,62997,62998,63000,63002,63004,63006,63009],{"class":69,"line":33194},[67,62999,52681],{"class":77},[67,63001,52148],{"class":51837},[67,63003,54023],{"class":112},[67,63005,909],{"class":77},[67,63007,63008],{"class":84},"\"wrapper\"",[67,63010,51844],{"class":77},[67,63012,63013,63015,63017,63019,63021,63024,63026,63028],{"class":69,"line":33205},[67,63014,51878],{"class":77},[67,63016,1298],{"class":51837},[67,63018,54023],{"class":112},[67,63020,909],{"class":77},[67,63022,63023],{"class":84},"\"avatar\"",[67,63025,55851],{"class":77},[67,63027,1298],{"class":51837},[67,63029,51844],{"class":77},[67,63031,63032,63034,63036,63038,63040,63043,63045,63047,63050,63052,63054,63056,63059,63061,63064,63066,63068],{"class":69,"line":33211},[67,63033,51878],{"class":77},[67,63035,54825],{"class":51837},[67,63037,15676],{"class":112},[67,63039,909],{"class":77},[67,63041,63042],{"class":84},"\"tx\"",[67,63044,61557],{"class":112},[67,63046,909],{"class":77},[67,63048,63049],{"class":84},"\"发一条友善的评论\"",[67,63051,54848],{"class":112},[67,63053,909],{"class":77},[67,63055,4421],{"class":84},[67,63057,63058],{"class":112}," maxlength",[67,63060,909],{"class":77},[67,63062,63063],{"class":84},"\"200\"",[67,63065,55851],{"class":77},[67,63067,54825],{"class":51837},[67,63069,51844],{"class":77},[67,63071,63072,63074,63076,63079,63081],{"class":69,"line":33231},[67,63073,51878],{"class":77},[67,63075,54424],{"class":51837},[67,63077,63078],{"class":77},">发布\u003C\u002F",[67,63080,54424],{"class":51837},[67,63082,51844],{"class":77},[67,63084,63085,63087,63089],{"class":69,"line":33237},[67,63086,52954],{"class":77},[67,63088,52148],{"class":51837},[67,63090,51844],{"class":77},[67,63092,63093,63095,63097,63099,63101,63103],{"class":69,"line":33248},[67,63094,52681],{"class":77},[67,63096,52148],{"class":51837},[67,63098,54023],{"class":112},[67,63100,909],{"class":77},[67,63102,63008],{"class":84},[67,63104,51844],{"class":77},[67,63106,63107,63109,63111,63113,63115,63118,63121,63123],{"class":69,"line":33254},[67,63108,51878],{"class":77},[67,63110,67],{"class":51837},[67,63112,54023],{"class":112},[67,63114,909],{"class":77},[67,63116,63117],{"class":84},"\"total\"",[67,63119,63120],{"class":77},">0\u002F200字\u003C\u002F",[67,63122,67],{"class":51837},[67,63124,51844],{"class":77},[67,63126,63127,63129,63131],{"class":69,"line":33260},[67,63128,52954],{"class":77},[67,63130,52148],{"class":51837},[67,63132,51844],{"class":77},[67,63134,63135,63137,63139,63141,63143,63146],{"class":69,"line":33266},[67,63136,52681],{"class":77},[67,63138,52148],{"class":51837},[67,63140,54023],{"class":112},[67,63142,909],{"class":77},[67,63144,63145],{"class":84},"\"list\"",[67,63147,51844],{"class":77},[67,63149,63150,63152,63154,63156,63158,63161,63164,63166,63169],{"class":69,"line":33272},[67,63151,51878],{"class":77},[67,63153,52148],{"class":51837},[67,63155,54023],{"class":112},[67,63157,909],{"class":77},[67,63159,63160],{"class":84},"\"item\"",[67,63162,63163],{"class":112}," style",[67,63165,909],{"class":77},[67,63167,63168],{"class":84},"\"display: none;\"",[67,63170,51844],{"class":77},[67,63172,63173,63175,63177,63179,63181,63183,63185,63187],{"class":69,"line":33278},[67,63174,55771],{"class":77},[67,63176,1298],{"class":51837},[67,63178,54023],{"class":112},[67,63180,909],{"class":77},[67,63182,63023],{"class":84},[67,63184,55851],{"class":77},[67,63186,1298],{"class":51837},[67,63188,51844],{"class":77},[67,63190,63191,63193,63195,63197,63199,63202],{"class":69,"line":33284},[67,63192,55771],{"class":77},[67,63194,52148],{"class":51837},[67,63196,54023],{"class":112},[67,63198,909],{"class":77},[67,63200,63201],{"class":84},"\"info\"",[67,63203,51844],{"class":77},[67,63205,63206,63208,63210,63212,63214,63217,63220,63222],{"class":69,"line":33290},[67,63207,55839],{"class":77},[67,63209,19],{"class":51837},[67,63211,54023],{"class":112},[67,63213,909],{"class":77},[67,63215,63216],{"class":84},"\"name\"",[67,63218,63219],{"class":77},">清风徐来\u003C\u002F",[67,63221,19],{"class":51837},[67,63223,51844],{"class":77},[67,63225,63226,63228,63230,63232,63234,63237,63240,63242],{"class":69,"line":33310},[67,63227,55839],{"class":77},[67,63229,19],{"class":51837},[67,63231,54023],{"class":112},[67,63233,909],{"class":77},[67,63235,63236],{"class":84},"\"text\"",[67,63238,63239],{"class":77},">大家都辛苦啦，感谢各位大大的努力，能圆满完成真是太好了[笑哭][支持]\u003C\u002F",[67,63241,19],{"class":51837},[67,63243,51844],{"class":77},[67,63245,63246,63248,63250,63252,63254,63257,63260,63262],{"class":69,"line":33316},[67,63247,55839],{"class":77},[67,63249,19],{"class":51837},[67,63251,54023],{"class":112},[67,63253,909],{"class":77},[67,63255,63256],{"class":84},"\"time\"",[67,63258,63259],{"class":77},">2022-10-10 20:29:21\u003C\u002F",[67,63261,19],{"class":51837},[67,63263,51844],{"class":77},[67,63265,63266,63268,63270],{"class":69,"line":33332},[67,63267,55944],{"class":77},[67,63269,52148],{"class":51837},[67,63271,51844],{"class":77},[67,63273,63274,63276,63278],{"class":69,"line":33338},[67,63275,52313],{"class":77},[67,63277,52148],{"class":51837},[67,63279,51844],{"class":77},[67,63281,63282,63284,63286],{"class":69,"line":33352},[67,63283,52954],{"class":77},[67,63285,52148],{"class":51837},[67,63287,51844],{"class":77},[67,63289,63290,63292,63294],{"class":69,"line":33358},[67,63291,52681],{"class":77},[67,63293,52350],{"class":51837},[67,63295,51844],{"class":77},[67,63297,63298,63300,63303,63305,63307,63309,63311,63314],{"class":69,"line":33373},[67,63299,11939],{"class":73},[67,63301,63302],{"class":208}," tx",[67,63304,14282],{"class":73},[67,63306,54933],{"class":77},[67,63308,54936],{"class":112},[67,63310,864],{"class":77},[67,63312,63313],{"class":84},"'#tx'",[67,63315,870],{"class":77},[67,63317,63318,63320,63323,63325,63327,63329,63331,63334],{"class":69,"line":33379},[67,63319,11939],{"class":73},[67,63321,63322],{"class":208}," total",[67,63324,14282],{"class":73},[67,63326,54933],{"class":77},[67,63328,54936],{"class":112},[67,63330,864],{"class":77},[67,63332,63333],{"class":84},"'.total'",[67,63335,870],{"class":77},[67,63337,63338],{"class":69,"line":33388},[67,63339,63340],{"class":202},"    \u002F\u002F 1. 当我们文本域获得了焦点，就让 total 显示出来\n",[67,63342,63343,63346,63348,63350,63352,63354,63356],{"class":69,"line":33394},[67,63344,63345],{"class":77},"    tx.",[67,63347,58350],{"class":112},[67,63349,864],{"class":77},[67,63351,61864],{"class":84},[67,63353,13153],{"class":77},[67,63355,54986],{"class":73},[67,63357,54989],{"class":77},[67,63359,63360,63363,63365],{"class":69,"line":33403},[67,63361,63362],{"class":77},"      total.style.opacity ",[67,63364,909],{"class":73},[67,63366,56236],{"class":208},[67,63368,63369],{"class":69,"line":33409},[67,63370,33998],{"class":77},[67,63372,63373],{"class":69,"line":33415},[67,63374,63375],{"class":202},"    \u002F\u002F 2. 当我们文本域失去了焦点，就让 total 隐藏出来\n",[67,63377,63378,63380,63382,63384,63386,63388,63390],{"class":69,"line":33424},[67,63379,63345],{"class":77},[67,63381,58350],{"class":112},[67,63383,864],{"class":77},[67,63385,61925],{"class":84},[67,63387,13153],{"class":77},[67,63389,54986],{"class":73},[67,63391,54989],{"class":77},[67,63393,63394,63396,63398],{"class":69,"line":33430},[67,63395,63362],{"class":77},[67,63397,909],{"class":73},[67,63399,47870],{"class":208},[67,63401,63402],{"class":69,"line":33441},[67,63403,33998],{"class":77},[67,63405,63406],{"class":69,"line":33447},[67,63407,63408],{"class":202},"    \u002F\u002F 3. 检测用户输入\n",[67,63410,63411,63413,63415,63417,63420,63422,63424],{"class":69,"line":33466},[67,63412,63345],{"class":77},[67,63414,58350],{"class":112},[67,63416,864],{"class":77},[67,63418,63419],{"class":84},"'input'",[67,63421,13153],{"class":77},[67,63423,54986],{"class":73},[67,63425,54989],{"class":77},[67,63427,63428],{"class":69,"line":33472},[67,63429,63430],{"class":202},"      \u002F\u002F console.log(tx.value.length)  得到输入的长度\n",[67,63432,63433,63436,63438,63441,63444,63446,63449,63451,63453],{"class":69,"line":33483},[67,63434,63435],{"class":77},"      total.innerHTML ",[67,63437,909],{"class":73},[67,63439,63440],{"class":84}," `${",[67,63442,63443],{"class":77},"tx",[67,63445,240],{"class":84},[67,63447,63448],{"class":77},"value",[67,63450,240],{"class":84},[67,63452,52505],{"class":208},[67,63454,63455],{"class":84},"}\u002F200字`\n",[67,63457,63458],{"class":69,"line":33489},[67,63459,33998],{"class":77},[67,63461,63462],{"class":69,"line":33509},[67,63463,177],{"emptyLinePlaceholder":176},[67,63465,63466],{"class":69,"line":33525},[67,63467,63468],{"class":202},"    \u002F\u002F const str = 'andy'\n",[67,63470,63471],{"class":69,"line":33531},[67,63472,63473],{"class":202},"    \u002F\u002F console.log(str.length)\n",[67,63475,63476,63478,63480],{"class":69,"line":33545},[67,63477,52954],{"class":77},[67,63479,52350],{"class":51837},[67,63481,51844],{"class":77},[67,63483,63484,63486,63488],{"class":69,"line":33551},[67,63485,52322],{"class":77},[67,63487,52337],{"class":51837},[67,63489,51844],{"class":77},[67,63491,63492],{"class":69,"line":33557},[67,63493,177],{"emptyLinePlaceholder":176},[67,63495,63496,63498,63500],{"class":69,"line":33568},[67,63497,52322],{"class":77},[67,63499,51172],{"class":51837},[67,63501,51844],{"class":77},[40,63503,63505],{"id":63504},"_3254-change事件","3.2.5.4 change事件",[19,63507,63508],{},"在输入框中，获得焦点，不输入任何内容，再失去焦点，则会不会触发事件，函数不会执行",[19,63510,63511],{},"第一次要输入内容时，获得焦点，输入内容，失去焦点，函数执行",[19,63513,63514],{},"后边如果获得焦点不输入任何内容，表单里的内容只要不变，函数就不会去执行",[57,63516,63518],{"className":51170,"code":63517,"language":51172,"meta":62,"style":62},"\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",[64,63519,63520,63530,63544,63548,63556,63570,63590,63602,63610,63614,63622,63636,63644,63662,63680,63692,63696,63704,63712,63716],{"__ignoreMap":62},[67,63521,63522,63524,63526,63528],{"class":69,"line":70},[67,63523,51834],{"class":77},[67,63525,51838],{"class":51837},[67,63527,51841],{"class":112},[67,63529,51844],{"class":77},[67,63531,63532,63534,63536,63538,63540,63542],{"class":69,"line":143},[67,63533,1766],{"class":77},[67,63535,51172],{"class":51837},[67,63537,51853],{"class":112},[67,63539,909],{"class":77},[67,63541,51858],{"class":84},[67,63543,51844],{"class":77},[67,63545,63546],{"class":69,"line":149},[67,63547,177],{"emptyLinePlaceholder":176},[67,63549,63550,63552,63554],{"class":69,"line":155},[67,63551,1766],{"class":77},[67,63553,51871],{"class":51837},[67,63555,51844],{"class":77},[67,63557,63558,63560,63562,63564,63566,63568],{"class":69,"line":161},[67,63559,52681],{"class":77},[67,63561,51881],{"class":51837},[67,63563,51884],{"class":112},[67,63565,909],{"class":77},[67,63567,51889],{"class":84},[67,63569,51844],{"class":77},[67,63571,63572,63574,63576,63578,63580,63582,63584,63586,63588],{"class":69,"line":167},[67,63573,52681],{"class":77},[67,63575,51881],{"class":51837},[67,63577,15637],{"class":112},[67,63579,909],{"class":77},[67,63581,51928],{"class":84},[67,63583,51908],{"class":112},[67,63585,909],{"class":77},[67,63587,51935],{"class":84},[67,63589,51844],{"class":77},[67,63591,63592,63594,63596,63598,63600],{"class":69,"line":173},[67,63593,52681],{"class":77},[67,63595,51944],{"class":51837},[67,63597,51947],{"class":77},[67,63599,51944],{"class":51837},[67,63601,51844],{"class":77},[67,63603,63604,63606,63608],{"class":69,"line":180},[67,63605,52322],{"class":77},[67,63607,51871],{"class":51837},[67,63609,51844],{"class":77},[67,63611,63612],{"class":69,"line":186},[67,63613,177],{"emptyLinePlaceholder":176},[67,63615,63616,63618,63620],{"class":69,"line":444},[67,63617,1766],{"class":77},[67,63619,52337],{"class":51837},[67,63621,51844],{"class":77},[67,63623,63624,63626,63628,63630,63632,63634],{"class":69,"line":2335},[67,63625,52681],{"class":77},[67,63627,54358],{"class":51837},[67,63629,54361],{"class":112},[67,63631,909],{"class":77},[67,63633,63236],{"class":84},[67,63635,51844],{"class":77},[67,63637,63638,63640,63642],{"class":69,"line":2340},[67,63639,52681],{"class":77},[67,63641,52350],{"class":51837},[67,63643,51844],{"class":77},[67,63645,63646,63648,63650,63652,63654,63656,63658,63660],{"class":69,"line":2346},[67,63647,11939],{"class":73},[67,63649,61142],{"class":208},[67,63651,14282],{"class":73},[67,63653,54933],{"class":77},[67,63655,54936],{"class":112},[67,63657,864],{"class":77},[67,63659,63419],{"class":84},[67,63661,870],{"class":77},[67,63663,63664,63667,63669,63671,63674,63676,63678],{"class":69,"line":2351},[67,63665,63666],{"class":77},"    input.",[67,63668,58350],{"class":112},[67,63670,864],{"class":77},[67,63672,63673],{"class":84},"'change'",[67,63675,13153],{"class":77},[67,63677,54986],{"class":73},[67,63679,54989],{"class":77},[67,63681,63682,63684,63686,63688,63690],{"class":69,"line":2365},[67,63683,58781],{"class":77},[67,63685,58784],{"class":112},[67,63687,864],{"class":77},[67,63689,1449],{"class":208},[67,63691,870],{"class":77},[67,63693,63694],{"class":69,"line":2370},[67,63695,33998],{"class":77},[67,63697,63698,63700,63702],{"class":69,"line":2376},[67,63699,52954],{"class":77},[67,63701,52350],{"class":51837},[67,63703,51844],{"class":77},[67,63705,63706,63708,63710],{"class":69,"line":2397},[67,63707,52322],{"class":77},[67,63709,52337],{"class":51837},[67,63711,51844],{"class":77},[67,63713,63714],{"class":69,"line":2402},[67,63715,177],{"emptyLinePlaceholder":176},[67,63717,63718,63720,63722],{"class":69,"line":2416},[67,63719,52322],{"class":77},[67,63721,51172],{"class":51837},[67,63723,51844],{"class":77},[19,63725,63726],{},"总结：内容发生改变才回去触发",[14,63728,63730],{"id":63729},"_326-事件对象","3.2.6 事件对象",[40,63732,63734],{"id":63733},"_3261-事件对象的介绍","3.2.6.1 事件对象的介绍",[19,63736,63737],{},[725,63738],{"alt":62,"src":63739},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-113.png",[19,63741,63742],{},[725,63743],{"alt":62,"src":63744},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-114.png",[19,63746,63747],{},"点击一次，就输出了事件对象，它是个对象",[19,63749,63750],{},"只有事件监听中里边的执行函数括号里边的内容才是事件对象，其他的函数后边括号中的变量是一个形参",[19,63752,63753],{},[725,63754],{"alt":62,"src":63755},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-115.png",[40,63757,63759],{"id":63758},"_3262-事件对象的属性","3.2.6.2 事件对象的属性",[19,63761,63762],{},[725,63763],{"alt":62,"src":63764},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-116.png",[19,63766,63767],{},"实现按特殊字符才是实现打印输出效果：",[57,63769,63771],{"className":53604,"code":63770,"language":53606,"meta":62,"style":62},"\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",[64,63772,63773,63781,63786,63800,63808,63813,63818,63823,63828,63833,63838,63843,63848,63853,63857,63861,63869],{"__ignoreMap":62},[67,63774,63775,63777,63779],{"class":69,"line":70},[67,63776,1766],{"class":77},[67,63778,52337],{"class":51837},[67,63780,51844],{"class":77},[67,63782,63783],{"class":69,"line":143},[67,63784,63785],{"class":202},"  \u003C!-- \u003Cbutton>点击\u003C\u002Fbutton> -->\n",[67,63787,63788,63790,63792,63794,63796,63798],{"class":69,"line":149},[67,63789,52681],{"class":77},[67,63791,54358],{"class":51837},[67,63793,54361],{"class":112},[67,63795,909],{"class":77},[67,63797,63236],{"class":84},[67,63799,51844],{"class":77},[67,63801,63802,63804,63806],{"class":69,"line":155},[67,63803,52681],{"class":77},[67,63805,52350],{"class":51837},[67,63807,51844],{"class":77},[67,63809,63810],{"class":69,"line":161},[67,63811,63812],{"class":77},"    \u002F\u002F const btn = document.querySelector('button')\n",[67,63814,63815],{"class":69,"line":167},[67,63816,63817],{"class":77},"    \u002F\u002F btn.addEventListener('click', function (e) {\n",[67,63819,63820],{"class":69,"line":173},[67,63821,63822],{"class":77},"    \u002F\u002F   console.log(e);\n",[67,63824,63825],{"class":69,"line":180},[67,63826,63827],{"class":77},"    \u002F\u002F })\n",[67,63829,63830],{"class":69,"line":186},[67,63831,63832],{"class":77},"    \u002F\u002F 按回车键才进行触发这个事件的话一定要使用事件对象\n",[67,63834,63835],{"class":69,"line":444},[67,63836,63837],{"class":77},"    const input = document.querySelector('input')\n",[67,63839,63840],{"class":69,"line":2335},[67,63841,63842],{"class":77},"    input.addEventListener('keyup', function (e) {\n",[67,63844,63845],{"class":69,"line":2340},[67,63846,63847],{"class":77},"      if (e.key === 'Enter') {\n",[67,63849,63850],{"class":69,"line":2346},[67,63851,63852],{"class":77},"        console.log('我按下了回车键')\n",[67,63854,63855],{"class":69,"line":2351},[67,63856,52935],{"class":77},[67,63858,63859],{"class":69,"line":2365},[67,63860,33998],{"class":77},[67,63862,63863,63865,63867],{"class":69,"line":2370},[67,63864,52954],{"class":77},[67,63866,52350],{"class":51837},[67,63868,51844],{"class":77},[67,63870,63871,63873,63875],{"class":69,"line":2376},[67,63872,52322],{"class":77},[67,63874,52337],{"class":51837},[67,63876,51844],{"class":77},[40,63878,63880],{"id":63879},"_3263-trim方法","3.2.6.3 trim方法",[19,63882,63883],{},[725,63884],{"alt":62,"src":63885},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-117.png",[19,63887,63888],{},[725,63889],{"alt":62,"src":63890},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-118.png",[19,63892,63893],{},"打印输出出现了空格，可以去除两侧的空格，不会去除左右的空格",[19,63895,63896],{},"str.trim()",[14,63898,63900],{"id":63899},"_327-环境对象","3.2.7 环境对象",[19,63902,63903],{},[725,63904],{"alt":62,"src":63905},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-119.png",[19,63907,63908],{},[725,63909],{"alt":62,"src":63910},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-120.png",[19,63912,63913],{},[725,63914],{"alt":62,"src":63915},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-121.png",[19,63917,63918],{},"实际函数调用是window.fn()",[19,63920,63921],{},"普通函数里面this指向的是window",[1863,63923,63924,63927,63930],{},[818,63925,63926],{},"在普通函数下，this指向的是window",[818,63928,63929],{},"在事件监听中this指向的是调用者，例如下面的开关，this指向的是button",[818,63931,63932],{},"箭头函数没有this",[19,63934,63935],{},"粗略记法就是：谁调用，this就指向谁",[19,63937,63938],{},[725,63939],{"alt":62,"src":63940},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-122.png",[19,63942,63943],{},[725,63944],{"alt":62,"src":63945},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-123.png",[19,63947,63948],{},"这里button调用的这个执行函数，所以this就是button，this就表示它自己",[19,63950,63951],{},"this的用处，点击按钮，按钮自己的字变为粉色：",[57,63953,63955],{"className":53604,"code":63954,"language":53606,"meta":62,"style":62},"\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",[64,63956,63957,63965,63977,63985,63990,63995,64000,64005,64009,64017],{"__ignoreMap":62},[67,63958,63959,63961,63963],{"class":69,"line":70},[67,63960,1766],{"class":77},[67,63962,52337],{"class":51837},[67,63964,51844],{"class":77},[67,63966,63967,63969,63971,63973,63975],{"class":69,"line":143},[67,63968,52681],{"class":77},[67,63970,54424],{"class":51837},[67,63972,54430],{"class":77},[67,63974,54424],{"class":51837},[67,63976,51844],{"class":77},[67,63978,63979,63981,63983],{"class":69,"line":149},[67,63980,52681],{"class":77},[67,63982,52350],{"class":51837},[67,63984,51844],{"class":77},[67,63986,63987],{"class":69,"line":155},[67,63988,63989],{"class":77},"    const button = document.querySelector('button')\n",[67,63991,63992],{"class":69,"line":161},[67,63993,63994],{"class":77},"    button.addEventListener('click', function () {\n",[67,63996,63997],{"class":69,"line":167},[67,63998,63999],{"class":77},"      \u002F\u002F console.log(this);\n",[67,64001,64002],{"class":69,"line":173},[67,64003,64004],{"class":77},"      this.style.color = 'pink'\n",[67,64006,64007],{"class":69,"line":180},[67,64008,33998],{"class":77},[67,64010,64011,64013,64015],{"class":69,"line":186},[67,64012,52954],{"class":77},[67,64014,52350],{"class":51837},[67,64016,51844],{"class":77},[67,64018,64019,64021,64023],{"class":69,"line":444},[67,64020,52322],{"class":77},[67,64022,52337],{"class":51837},[67,64024,51844],{"class":77},[14,64026,64028],{"id":64027},"_328-回调函数","3.2.8 回调函数",[19,64030,64031],{},[725,64032],{"alt":62,"src":64033},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-124.png",[19,64035,64036],{},"定时器本身就是个函数，fn函数作为参数传递给了这个定时器这个函数，过了一秒钟就调用这个函数，fn就是回调函数",[19,64038,12050],{},[1863,64040,64041,64044,64047],{},[818,64042,64043],{},"把函数当做另外一个函数的参数传递，这个函数就叫回调函数",[818,64045,64046],{},"回调函数本质还是函数，只不过把它当成参数使用",[818,64048,64049],{},"使用匿名函数做为回调函数比较常见",[14,64051,64053],{"id":64052},"_329-tab栏切换","3.2.9 tab栏切换",[19,64055,64056],{},[725,64057],{"alt":62,"src":64058},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-125.png",[57,64060,64062],{"className":51170,"code":64061,"language":51172,"meta":62,"style":62},"\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",[64,64063,64064,64074,64088,64092,64100,64114,64134,64154,64167,64175,64181,64191,64201,64205,64209,64216,64229,64242,64254,64270,64274,64278,64285,64297,64309,64321,64331,64341,64345,64349,64358,64370,64381,64393,64397,64401,64409,64419,64429,64439,64443,64447,64457,64471,64483,64487,64491,64503,64514,64531,64541,64545,64549,64564,64575,64585,64589,64593,64600,64615,64619,64623,64631,64641,64645,64649,64658,64668,64672,64680,64688,64692,64700,64715,64730,64743,64751,64785,64812,64839,64866,64893,64901,64909,64924,64961,64996,65031,65066,65101,65109,65117,65125,65130,65135,65155,65160,65189,65194,65199,65217,65222,65227,65232,65254,65259,65275,65279,65284,65289,65310,65315,65344,65348,65353,65357,65365,65373,65377],{"__ignoreMap":62},[67,64065,64066,64068,64070,64072],{"class":69,"line":70},[67,64067,51834],{"class":77},[67,64069,51838],{"class":51837},[67,64071,51841],{"class":112},[67,64073,51844],{"class":77},[67,64075,64076,64078,64080,64082,64084,64086],{"class":69,"line":143},[67,64077,1766],{"class":77},[67,64079,51172],{"class":51837},[67,64081,51853],{"class":112},[67,64083,909],{"class":77},[67,64085,51858],{"class":84},[67,64087,51844],{"class":77},[67,64089,64090],{"class":69,"line":149},[67,64091,177],{"emptyLinePlaceholder":176},[67,64093,64094,64096,64098],{"class":69,"line":155},[67,64095,1766],{"class":77},[67,64097,51871],{"class":51837},[67,64099,51844],{"class":77},[67,64101,64102,64104,64106,64108,64110,64112],{"class":69,"line":161},[67,64103,52681],{"class":77},[67,64105,51881],{"class":51837},[67,64107,51884],{"class":112},[67,64109,909],{"class":77},[67,64111,51889],{"class":84},[67,64113,59664],{"class":77},[67,64115,64116,64118,64120,64122,64124,64126,64128,64130,64132],{"class":69,"line":167},[67,64117,52681],{"class":77},[67,64119,51881],{"class":51837},[67,64121,51900],{"class":112},[67,64123,909],{"class":77},[67,64125,51905],{"class":84},[67,64127,51908],{"class":112},[67,64129,909],{"class":77},[67,64131,51913],{"class":84},[67,64133,59664],{"class":77},[67,64135,64136,64138,64140,64142,64144,64146,64148,64150,64152],{"class":69,"line":173},[67,64137,52681],{"class":77},[67,64139,51881],{"class":51837},[67,64141,15637],{"class":112},[67,64143,909],{"class":77},[67,64145,51928],{"class":84},[67,64147,51908],{"class":112},[67,64149,909],{"class":77},[67,64151,51935],{"class":84},[67,64153,59664],{"class":77},[67,64155,64156,64158,64160,64163,64165],{"class":69,"line":180},[67,64157,52681],{"class":77},[67,64159,51944],{"class":51837},[67,64161,64162],{"class":77},">tab栏切换\u003C\u002F",[67,64164,51944],{"class":51837},[67,64166,51844],{"class":77},[67,64168,64169,64171,64173],{"class":69,"line":186},[67,64170,52681],{"class":77},[67,64172,779],{"class":51837},[67,64174,51844],{"class":77},[67,64176,64177,64179],{"class":69,"line":444},[67,64178,7122],{"class":51837},[67,64180,16289],{"class":77},[67,64182,64183,64185,64187,64189],{"class":69,"line":2335},[67,64184,55243],{"class":208},[67,64186,51974],{"class":77},[67,64188,1051],{"class":208},[67,64190,2017],{"class":77},[67,64192,64193,64195,64197,64199],{"class":69,"line":2340},[67,64194,55232],{"class":208},[67,64196,51974],{"class":77},[67,64198,1051],{"class":208},[67,64200,2017],{"class":77},[67,64202,64203],{"class":69,"line":2346},[67,64204,2909],{"class":77},[67,64206,64207],{"class":69,"line":2351},[67,64208,177],{"emptyLinePlaceholder":176},[67,64210,64211,64214],{"class":69,"line":2365},[67,64212,64213],{"class":112},"    .tab",[67,64215,16289],{"class":77},[67,64217,64218,64220,64222,64225,64227],{"class":69,"line":2370},[67,64219,55308],{"class":208},[67,64221,51974],{"class":77},[67,64223,64224],{"class":208},"590",[67,64226,52029],{"class":73},[67,64228,2017],{"class":77},[67,64230,64231,64233,64235,64238,64240],{"class":69,"line":2376},[67,64232,55322],{"class":208},[67,64234,51974],{"class":77},[67,64236,64237],{"class":208},"340",[67,64239,52029],{"class":73},[67,64241,2017],{"class":77},[67,64243,64244,64246,64248,64250,64252],{"class":69,"line":2397},[67,64245,55243],{"class":208},[67,64247,51974],{"class":77},[67,64249,1556],{"class":208},[67,64251,52029],{"class":73},[67,64253,2017],{"class":77},[67,64255,64256,64258,64260,64262,64264,64266,64268],{"class":69,"line":2402},[67,64257,62514],{"class":208},[67,64259,51974],{"class":77},[67,64261,1077],{"class":208},[67,64263,52029],{"class":73},[67,64265,52058],{"class":208},[67,64267,62781],{"class":208},[67,64269,2017],{"class":77},[67,64271,64272],{"class":69,"line":2416},[67,64273,2909],{"class":77},[67,64275,64276],{"class":69,"line":2421},[67,64277,177],{"emptyLinePlaceholder":176},[67,64279,64280,64283],{"class":69,"line":2450},[67,64281,64282],{"class":112},"    .tab-nav",[67,64284,16289],{"class":77},[67,64286,64287,64289,64291,64293,64295],{"class":69,"line":2455},[67,64288,55308],{"class":208},[67,64290,51974],{"class":77},[67,64292,1169],{"class":208},[67,64294,1186],{"class":73},[67,64296,2017],{"class":77},[67,64298,64299,64301,64303,64305,64307],{"class":69,"line":2472},[67,64300,55322],{"class":208},[67,64302,51974],{"class":77},[67,64304,1763],{"class":208},[67,64306,52029],{"class":73},[67,64308,2017],{"class":77},[67,64310,64311,64313,64315,64317,64319],{"class":69,"line":2477},[67,64312,57896],{"class":208},[67,64314,51974],{"class":77},[67,64316,1763],{"class":208},[67,64318,52029],{"class":73},[67,64320,2017],{"class":77},[67,64322,64323,64325,64327,64329],{"class":69,"line":2482},[67,64324,55546],{"class":208},[67,64326,51974],{"class":77},[67,64328,52014],{"class":208},[67,64330,2017],{"class":77},[67,64332,64333,64335,64337,64339],{"class":69,"line":2487},[67,64334,55557],{"class":208},[67,64336,51974],{"class":77},[67,64338,52205],{"class":208},[67,64340,2017],{"class":77},[67,64342,64343],{"class":69,"line":2501},[67,64344,2909],{"class":77},[67,64346,64347],{"class":69,"line":2506},[67,64348,177],{"emptyLinePlaceholder":176},[67,64350,64351,64353,64356],{"class":69,"line":3298},[67,64352,64282],{"class":112},[67,64354,64355],{"class":51837}," h3",[67,64357,16289],{"class":77},[67,64359,64360,64362,64364,64366,64368],{"class":69,"line":3312},[67,64361,55459],{"class":208},[67,64363,51974],{"class":77},[67,64365,1656],{"class":208},[67,64367,52029],{"class":73},[67,64369,2017],{"class":77},[67,64371,64372,64374,64376,64379],{"class":69,"line":3320},[67,64373,62871],{"class":208},[67,64375,51974],{"class":77},[67,64377,64378],{"class":208},"normal",[67,64380,2017],{"class":77},[67,64382,64383,64385,64387,64389,64391],{"class":69,"line":3325},[67,64384,62537],{"class":208},[67,64386,51974],{"class":77},[67,64388,1556],{"class":208},[67,64390,52029],{"class":73},[67,64392,2017],{"class":77},[67,64394,64395],{"class":69,"line":3331},[67,64396,2909],{"class":77},[67,64398,64399],{"class":69,"line":3337},[67,64400,177],{"emptyLinePlaceholder":176},[67,64402,64403,64405,64407],{"class":69,"line":3342},[67,64404,64282],{"class":112},[67,64406,61829],{"class":51837},[67,64408,16289],{"class":77},[67,64410,64411,64413,64415,64417],{"class":69,"line":8667},[67,64412,55269],{"class":208},[67,64414,51974],{"class":77},[67,64416,55274],{"class":208},[67,64418,2017],{"class":77},[67,64420,64421,64423,64425,64427],{"class":69,"line":8691},[67,64422,55546],{"class":208},[67,64424,51974],{"class":77},[67,64426,52014],{"class":208},[67,64428,2017],{"class":77},[67,64430,64431,64433,64435,64437],{"class":69,"line":8696},[67,64432,55557],{"class":208},[67,64434,51974],{"class":77},[67,64436,52117],{"class":208},[67,64438,2017],{"class":77},[67,64440,64441],{"class":69,"line":8702},[67,64442,2909],{"class":77},[67,64444,64445],{"class":69,"line":8729},[67,64446,177],{"emptyLinePlaceholder":176},[67,64448,64449,64451,64453,64455],{"class":69,"line":8734},[67,64450,64282],{"class":112},[67,64452,61829],{"class":51837},[67,64454,55612],{"class":51837},[67,64456,16289],{"class":77},[67,64458,64459,64461,64463,64465,64467,64469],{"class":69,"line":8740},[67,64460,55243],{"class":208},[67,64462,51974],{"class":77},[67,64464,1051],{"class":208},[67,64466,9669],{"class":208},[67,64468,52029],{"class":73},[67,64470,2017],{"class":77},[67,64472,64473,64475,64477,64479,64481],{"class":69,"line":8752},[67,64474,55459],{"class":208},[67,64476,51974],{"class":77},[67,64478,1406],{"class":208},[67,64480,52029],{"class":73},[67,64482,2017],{"class":77},[67,64484,64485],{"class":69,"line":8764},[67,64486,2909],{"class":77},[67,64488,64489],{"class":69,"line":8776},[67,64490,177],{"emptyLinePlaceholder":176},[67,64492,64493,64495,64497,64499,64501],{"class":69,"line":10435},[67,64494,64282],{"class":112},[67,64496,61829],{"class":51837},[67,64498,55612],{"class":51837},[67,64500,2122],{"class":51837},[67,64502,16289],{"class":77},[67,64504,64505,64508,64510,64512],{"class":69,"line":10459},[67,64506,64507],{"class":208},"      text-decoration",[67,64509,51974],{"class":77},[67,64511,55274],{"class":208},[67,64513,2017],{"class":77},[67,64515,64516,64518,64520,64522,64524,64526,64529],{"class":69,"line":10482},[67,64517,62769],{"class":208},[67,64519,51974],{"class":77},[67,64521,939],{"class":208},[67,64523,52029],{"class":73},[67,64525,52058],{"class":208},[67,64527,64528],{"class":208}," transparent",[67,64530,2017],{"class":77},[67,64532,64533,64535,64537,64539],{"class":69,"line":10506},[67,64534,57953],{"class":208},[67,64536,51974],{"class":77},[67,64538,62906],{"class":208},[67,64540,2017],{"class":77},[67,64542,64543],{"class":69,"line":10511},[67,64544,2909],{"class":77},[67,64546,64547],{"class":69,"line":10516},[67,64548,177],{"emptyLinePlaceholder":176},[67,64550,64551,64553,64555,64557,64559,64562],{"class":69,"line":10521},[67,64552,64282],{"class":112},[67,64554,61829],{"class":51837},[67,64556,55612],{"class":51837},[67,64558,2122],{"class":51837},[67,64560,64561],{"class":112},".active",[67,64563,16289],{"class":77},[67,64565,64566,64568,64570,64573],{"class":69,"line":10530},[67,64567,62328],{"class":208},[67,64569,51974],{"class":77},[67,64571,64572],{"class":208},"#e1251b",[67,64574,2017],{"class":77},[67,64576,64577,64579,64581,64583],{"class":69,"line":10535},[67,64578,57953],{"class":208},[67,64580,51974],{"class":77},[67,64582,64572],{"class":208},[67,64584,2017],{"class":77},[67,64586,64587],{"class":69,"line":10541},[67,64588,2909],{"class":77},[67,64590,64591],{"class":69,"line":10562},[67,64592,177],{"emptyLinePlaceholder":176},[67,64594,64595,64598],{"class":69,"line":10568},[67,64596,64597],{"class":112},"    .tab-content",[67,64599,16289],{"class":77},[67,64601,64602,64604,64606,64608,64611,64613],{"class":69,"line":10582},[67,64603,55232],{"class":208},[67,64605,51974],{"class":77},[67,64607,1051],{"class":208},[67,64609,64610],{"class":208}," 16",[67,64612,52029],{"class":73},[67,64614,2017],{"class":77},[67,64616,64617],{"class":69,"line":10588},[67,64618,2909],{"class":77},[67,64620,64621],{"class":69,"line":10615},[67,64622,177],{"emptyLinePlaceholder":176},[67,64624,64625,64627,64629],{"class":69,"line":10624},[67,64626,64597],{"class":112},[67,64628,62711],{"class":112},[67,64630,16289],{"class":77},[67,64632,64633,64635,64637,64639],{"class":69,"line":10630},[67,64634,55546],{"class":208},[67,64636,51974],{"class":77},[67,64638,55274],{"class":208},[67,64640,2017],{"class":77},[67,64642,64643],{"class":69,"line":10638},[67,64644,2909],{"class":77},[67,64646,64647],{"class":69,"line":10643},[67,64648,177],{"emptyLinePlaceholder":176},[67,64650,64651,64653,64656],{"class":69,"line":17321},[67,64652,64597],{"class":112},[67,64654,64655],{"class":112}," .item.active",[67,64657,16289],{"class":77},[67,64659,64660,64662,64664,64666],{"class":69,"line":17327},[67,64661,55546],{"class":208},[67,64663,51974],{"class":77},[67,64665,61406],{"class":208},[67,64667,2017],{"class":77},[67,64669,64670],{"class":69,"line":17350},[67,64671,2909],{"class":77},[67,64673,64674,64676,64678],{"class":69,"line":17356},[67,64675,52954],{"class":77},[67,64677,779],{"class":51837},[67,64679,51844],{"class":77},[67,64681,64682,64684,64686],{"class":69,"line":17379},[67,64683,52322],{"class":77},[67,64685,51871],{"class":51837},[67,64687,51844],{"class":77},[67,64689,64690],{"class":69,"line":17393},[67,64691,177],{"emptyLinePlaceholder":176},[67,64693,64694,64696,64698],{"class":69,"line":17413},[67,64695,1766],{"class":77},[67,64697,52337],{"class":51837},[67,64699,51844],{"class":77},[67,64701,64702,64704,64706,64708,64710,64713],{"class":69,"line":17419},[67,64703,52681],{"class":77},[67,64705,52148],{"class":51837},[67,64707,54023],{"class":112},[67,64709,909],{"class":77},[67,64711,64712],{"class":84},"\"tab\"",[67,64714,51844],{"class":77},[67,64716,64717,64719,64721,64723,64725,64728],{"class":69,"line":17430},[67,64718,51878],{"class":77},[67,64720,52148],{"class":51837},[67,64722,54023],{"class":112},[67,64724,909],{"class":77},[67,64726,64727],{"class":84},"\"tab-nav\"",[67,64729,51844],{"class":77},[67,64731,64732,64734,64736,64739,64741],{"class":69,"line":17453},[67,64733,55771],{"class":77},[67,64735,14],{"class":51837},[67,64737,64738],{"class":77},">每日特价\u003C\u002F",[67,64740,14],{"class":51837},[67,64742,51844],{"class":77},[67,64744,64745,64747,64749],{"class":69,"line":17475},[67,64746,55771],{"class":77},[67,64748,1863],{"class":51837},[67,64750,51844],{"class":77},[67,64752,64753,64755,64757,64759,64761,64763,64765,64767,64769,64771,64774,64777,64779,64781,64783],{"class":69,"line":17480},[67,64754,55839],{"class":77},[67,64756,818],{"class":51837},[67,64758,61589],{"class":77},[67,64760,28],{"class":51837},[67,64762,54023],{"class":112},[67,64764,909],{"class":77},[67,64766,60243],{"class":84},[67,64768,61594],{"class":112},[67,64770,909],{"class":77},[67,64772,64773],{"class":84},"\"javascript:;\"",[67,64775,64776],{"class":77},">精选\u003C\u002F",[67,64778,28],{"class":51837},[67,64780,55851],{"class":77},[67,64782,818],{"class":51837},[67,64784,51844],{"class":77},[67,64786,64787,64789,64791,64793,64795,64797,64799,64801,64804,64806,64808,64810],{"class":69,"line":17486},[67,64788,55839],{"class":77},[67,64790,818],{"class":51837},[67,64792,61589],{"class":77},[67,64794,28],{"class":51837},[67,64796,61594],{"class":112},[67,64798,909],{"class":77},[67,64800,64773],{"class":84},[67,64802,64803],{"class":77},">美食\u003C\u002F",[67,64805,28],{"class":51837},[67,64807,55851],{"class":77},[67,64809,818],{"class":51837},[67,64811,51844],{"class":77},[67,64813,64814,64816,64818,64820,64822,64824,64826,64828,64831,64833,64835,64837],{"class":69,"line":17500},[67,64815,55839],{"class":77},[67,64817,818],{"class":51837},[67,64819,61589],{"class":77},[67,64821,28],{"class":51837},[67,64823,61594],{"class":112},[67,64825,909],{"class":77},[67,64827,64773],{"class":84},[67,64829,64830],{"class":77},">百货\u003C\u002F",[67,64832,28],{"class":51837},[67,64834,55851],{"class":77},[67,64836,818],{"class":51837},[67,64838,51844],{"class":77},[67,64840,64841,64843,64845,64847,64849,64851,64853,64855,64858,64860,64862,64864],{"class":69,"line":17513},[67,64842,55839],{"class":77},[67,64844,818],{"class":51837},[67,64846,61589],{"class":77},[67,64848,28],{"class":51837},[67,64850,61594],{"class":112},[67,64852,909],{"class":77},[67,64854,64773],{"class":84},[67,64856,64857],{"class":77},">个护\u003C\u002F",[67,64859,28],{"class":51837},[67,64861,55851],{"class":77},[67,64863,818],{"class":51837},[67,64865,51844],{"class":77},[67,64867,64868,64870,64872,64874,64876,64878,64880,64882,64885,64887,64889,64891],{"class":69,"line":17518},[67,64869,55839],{"class":77},[67,64871,818],{"class":51837},[67,64873,61589],{"class":77},[67,64875,28],{"class":51837},[67,64877,61594],{"class":112},[67,64879,909],{"class":77},[67,64881,64773],{"class":84},[67,64883,64884],{"class":77},">预告\u003C\u002F",[67,64886,28],{"class":51837},[67,64888,55851],{"class":77},[67,64890,818],{"class":51837},[67,64892,51844],{"class":77},[67,64894,64895,64897,64899],{"class":69,"line":17532},[67,64896,55944],{"class":77},[67,64898,1863],{"class":51837},[67,64900,51844],{"class":77},[67,64902,64903,64905,64907],{"class":69,"line":17537},[67,64904,52313],{"class":77},[67,64906,52148],{"class":51837},[67,64908,51844],{"class":77},[67,64910,64911,64913,64915,64917,64919,64922],{"class":69,"line":17543},[67,64912,51878],{"class":77},[67,64914,52148],{"class":51837},[67,64916,54023],{"class":112},[67,64918,909],{"class":77},[67,64920,64921],{"class":84},"\"tab-content\"",[67,64923,51844],{"class":77},[67,64925,64926,64928,64930,64932,64934,64937,64939,64941,64943,64945,64948,64950,64952,64954,64957,64959],{"class":69,"line":17548},[67,64927,55771],{"class":77},[67,64929,52148],{"class":51837},[67,64931,54023],{"class":112},[67,64933,909],{"class":77},[67,64935,64936],{"class":84},"\"item active\"",[67,64938,61589],{"class":77},[67,64940,725],{"class":51837},[67,64942,55776],{"class":112},[67,64944,909],{"class":77},[67,64946,64947],{"class":84},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab00.png\"",[67,64949,55784],{"class":112},[67,64951,909],{"class":77},[67,64953,8371],{"class":84},[67,64955,64956],{"class":77}," \u002F>\u003C\u002F",[67,64958,52148],{"class":51837},[67,64960,51844],{"class":77},[67,64962,64963,64965,64967,64969,64971,64973,64975,64977,64979,64981,64984,64986,64988,64990,64992,64994],{"class":69,"line":17562},[67,64964,55771],{"class":77},[67,64966,52148],{"class":51837},[67,64968,54023],{"class":112},[67,64970,909],{"class":77},[67,64972,63160],{"class":84},[67,64974,61589],{"class":77},[67,64976,725],{"class":51837},[67,64978,55776],{"class":112},[67,64980,909],{"class":77},[67,64982,64983],{"class":84},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab01.png\"",[67,64985,55784],{"class":112},[67,64987,909],{"class":77},[67,64989,8371],{"class":84},[67,64991,64956],{"class":77},[67,64993,52148],{"class":51837},[67,64995,51844],{"class":77},[67,64997,64998,65000,65002,65004,65006,65008,65010,65012,65014,65016,65019,65021,65023,65025,65027,65029],{"class":69,"line":17567},[67,64999,55771],{"class":77},[67,65001,52148],{"class":51837},[67,65003,54023],{"class":112},[67,65005,909],{"class":77},[67,65007,63160],{"class":84},[67,65009,61589],{"class":77},[67,65011,725],{"class":51837},[67,65013,55776],{"class":112},[67,65015,909],{"class":77},[67,65017,65018],{"class":84},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab02.png\"",[67,65020,55784],{"class":112},[67,65022,909],{"class":77},[67,65024,8371],{"class":84},[67,65026,64956],{"class":77},[67,65028,52148],{"class":51837},[67,65030,51844],{"class":77},[67,65032,65033,65035,65037,65039,65041,65043,65045,65047,65049,65051,65054,65056,65058,65060,65062,65064],{"class":69,"line":17572},[67,65034,55771],{"class":77},[67,65036,52148],{"class":51837},[67,65038,54023],{"class":112},[67,65040,909],{"class":77},[67,65042,63160],{"class":84},[67,65044,61589],{"class":77},[67,65046,725],{"class":51837},[67,65048,55776],{"class":112},[67,65050,909],{"class":77},[67,65052,65053],{"class":84},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab03.png\"",[67,65055,55784],{"class":112},[67,65057,909],{"class":77},[67,65059,8371],{"class":84},[67,65061,64956],{"class":77},[67,65063,52148],{"class":51837},[67,65065,51844],{"class":77},[67,65067,65068,65070,65072,65074,65076,65078,65080,65082,65084,65086,65089,65091,65093,65095,65097,65099],{"class":69,"line":17586},[67,65069,55771],{"class":77},[67,65071,52148],{"class":51837},[67,65073,54023],{"class":112},[67,65075,909],{"class":77},[67,65077,63160],{"class":84},[67,65079,61589],{"class":77},[67,65081,725],{"class":51837},[67,65083,55776],{"class":112},[67,65085,909],{"class":77},[67,65087,65088],{"class":84},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab04.png\"",[67,65090,55784],{"class":112},[67,65092,909],{"class":77},[67,65094,8371],{"class":84},[67,65096,64956],{"class":77},[67,65098,52148],{"class":51837},[67,65100,51844],{"class":77},[67,65102,65103,65105,65107],{"class":69,"line":17598},[67,65104,52313],{"class":77},[67,65106,52148],{"class":51837},[67,65108,51844],{"class":77},[67,65110,65111,65113,65115],{"class":69,"line":17603},[67,65112,52954],{"class":77},[67,65114,52148],{"class":51837},[67,65116,51844],{"class":77},[67,65118,65119,65121,65123],{"class":69,"line":17616},[67,65120,52681],{"class":77},[67,65122,52350],{"class":51837},[67,65124,51844],{"class":77},[67,65126,65127],{"class":69,"line":17621},[67,65128,65129],{"class":202},"    \u002F\u002F 1. a 模块制作 要给 5个链接绑定鼠标经过事件\n",[67,65131,65132],{"class":69,"line":17626},[67,65133,65134],{"class":202},"    \u002F\u002F 1.1 获取 a 元素 \n",[67,65136,65137,65139,65142,65144,65146,65148,65150,65153],{"class":69,"line":17631},[67,65138,11939],{"class":73},[67,65140,65141],{"class":208}," as",[67,65143,14282],{"class":73},[67,65145,54933],{"class":77},[67,65147,56218],{"class":112},[67,65149,864],{"class":77},[67,65151,65152],{"class":84},"'.tab-nav a'",[67,65154,870],{"class":77},[67,65156,65157],{"class":69,"line":17644},[67,65158,65159],{"class":202},"    \u002F\u002F console.log(as) \n",[67,65161,65162,65164,65166,65168,65170,65172,65174,65176,65178,65181,65183,65185,65187],{"class":69,"line":17649},[67,65163,3921],{"class":73},[67,65165,2381],{"class":77},[67,65167,52384],{"class":73},[67,65169,10157],{"class":77},[67,65171,909],{"class":73},[67,65173,4813],{"class":208},[67,65175,10164],{"class":77},[67,65177,1766],{"class":73},[67,65179,65180],{"class":77}," as.",[67,65182,52505],{"class":208},[67,65184,3934],{"class":77},[67,65186,3014],{"class":73},[67,65188,13160],{"class":77},[67,65190,65191],{"class":69,"line":33170},[67,65192,65193],{"class":202},"      \u002F\u002F console.log(as[i])\n",[67,65195,65196],{"class":69,"line":33176},[67,65197,65198],{"class":202},"      \u002F\u002F 要给 5个链接绑定鼠标经过事件\n",[67,65200,65201,65204,65206,65208,65211,65213,65215],{"class":69,"line":33182},[67,65202,65203],{"class":77},"      as[i].",[67,65205,58350],{"class":112},[67,65207,864],{"class":77},[67,65209,65210],{"class":84},"'mouseenter'",[67,65212,13153],{"class":77},[67,65214,54986],{"class":73},[67,65216,54989],{"class":77},[67,65218,65219],{"class":69,"line":33188},[67,65220,65221],{"class":202},"        \u002F\u002F console.log('鼠标经过')\n",[67,65223,65224],{"class":69,"line":33194},[67,65225,65226],{"class":202},"        \u002F\u002F 排他思想  \n",[67,65228,65229],{"class":69,"line":33205},[67,65230,65231],{"class":202},"        \u002F\u002F 干掉别人 移除类active\n",[67,65233,65234,65236,65238,65240,65243,65245,65247,65249,65252],{"class":69,"line":33211},[67,65235,52462],{"class":77},[67,65237,54936],{"class":112},[67,65239,864],{"class":77},[67,65241,65242],{"class":84},"'.tab-nav .active'",[67,65244,57540],{"class":77},[67,65246,57543],{"class":112},[67,65248,864],{"class":77},[67,65250,65251],{"class":84},"'active'",[67,65253,870],{"class":77},[67,65255,65256],{"class":69,"line":33231},[67,65257,65258],{"class":202},"        \u002F\u002F 我登基 我添加类 active  this 当前的那个 a \n",[67,65260,65261,65264,65267,65269,65271,65273],{"class":69,"line":33237},[67,65262,65263],{"class":208},"        this",[67,65265,65266],{"class":77},".classList.",[67,65268,6053],{"class":112},[67,65270,864],{"class":77},[67,65272,65251],{"class":84},[67,65274,870],{"class":77},[67,65276,65277],{"class":69,"line":33248},[67,65278,177],{"emptyLinePlaceholder":176},[67,65280,65281],{"class":69,"line":33254},[67,65282,65283],{"class":202},"        \u002F\u002F 下面5个大盒子 一一对应  .item \n",[67,65285,65286],{"class":69,"line":33260},[67,65287,65288],{"class":202},"        \u002F\u002F 干掉别人\n",[67,65290,65291,65293,65295,65297,65300,65302,65304,65306,65308],{"class":69,"line":33266},[67,65292,52462],{"class":77},[67,65294,54936],{"class":112},[67,65296,864],{"class":77},[67,65298,65299],{"class":84},"'.tab-content .active'",[67,65301,57540],{"class":77},[67,65303,57543],{"class":112},[67,65305,864],{"class":77},[67,65307,65251],{"class":84},[67,65309,870],{"class":77},[67,65311,65312],{"class":69,"line":33272},[67,65313,65314],{"class":202},"        \u002F\u002F 对应序号的那个 item 显示 添加 active 类\n",[67,65316,65317,65319,65321,65323,65326,65328,65330,65332,65334,65336,65338,65340,65342],{"class":69,"line":33278},[67,65318,52462],{"class":77},[67,65320,54936],{"class":112},[67,65322,864],{"class":77},[67,65324,65325],{"class":84},"`.tab-content .item:nth-child(${",[67,65327,1298],{"class":77},[67,65329,46103],{"class":73},[67,65331,25828],{"class":208},[67,65333,57569],{"class":84},[67,65335,57540],{"class":77},[67,65337,6053],{"class":112},[67,65339,864],{"class":77},[67,65341,65251],{"class":84},[67,65343,870],{"class":77},[67,65345,65346],{"class":69,"line":33284},[67,65347,177],{"emptyLinePlaceholder":176},[67,65349,65350],{"class":69,"line":33290},[67,65351,65352],{"class":77},"      })\n",[67,65354,65355],{"class":69,"line":33310},[67,65356,2909],{"class":77},[67,65358,65359,65361,65363],{"class":69,"line":33316},[67,65360,52954],{"class":77},[67,65362,52350],{"class":51837},[67,65364,51844],{"class":77},[67,65366,65367,65369,65371],{"class":69,"line":33332},[67,65368,52322],{"class":77},[67,65370,52337],{"class":51837},[67,65372,51844],{"class":77},[67,65374,65375],{"class":69,"line":33338},[67,65376,177],{"emptyLinePlaceholder":176},[67,65378,65379,65381,65383],{"class":69,"line":33352},[67,65380,52322],{"class":77},[67,65382,51172],{"class":51837},[67,65384,51844],{"class":77},[19,65386,65387],{},"总结：不要忘记this，还有tab栏优先考虑使用循环！！！",[19,65389,65390],{},"在监听事件中，this指向的就是他的调用者",[19,65392,65393],{},"补充：如果刚开始是没有active选中的，可以进行.active(使用这个类)的对象元素的获取，如果没有就是null，空为假，然后就可以进行if语句的判断，如果假的话就不用执行删除，真的话就删除，然后再添加active这个类就可以！",[19,65395,54257],{},[19,65397,65398],{},"(function () {",[19,65400,65401],{},"const list = document.querySelector('.xtx-elevator-list')",[19,65403,65404],{},"list.addEventListener('click', function (e) {",[19,65406,65407],{},"if (e.target.tagName === 'A') {",[19,65409,65410],{},"\u002F\u002F 排他思想",[19,65412,65413],{},"\u002F\u002F 在不知道有么有active这个类的情况下不能上来就删除",[19,65415,65416],{},"const old = document.querySelector('.xtx-elevator-list .active')",[19,65418,65419],{},"\u002F\u002F console.log(old);",[19,65421,65422],{},"\u002F\u002F 判断",[19,65424,65425],{},"\u002F\u002F 没有的话old=null，空为假，就不执行后边的操作",[19,65427,65428],{},"if (old) old.classList.remove('active')",[19,65430,65431],{},"e.target.classList.add('active')",[19,65433,1802],{},[19,65435,53001],{},[19,65437,65438],{},"})();",[14,65440,65442],{"id":65441},"_3210-按钮全选或反选案例","3.2.10 按钮全选或反选案例",[57,65444,65446],{"className":51170,"code":65445,"language":51172,"meta":62,"style":62},"\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",[64,65447,65448,65458,65462,65470,65474,65488,65502,65514,65522,65528,65538,65548,65552,65556,65563,65575,65586,65603,65616,65630,65640,65644,65648,65655,65666,65684,65694,65706,65710,65714,65721,65738,65749,65761,65765,65769,65776,65788,65792,65800,65808,65812,65820,65828,65836,65851,65895,65903,65916,65929,65942,65950,65958,65966,65994,66002,66014,66027,66040,66048,66056,66064,66090,66098,66111,66123,66136,66144,66152,66160,66186,66194,66207,66219,66232,66240,66248,66256,66261,66281,66286,66306,66311,66328,66333,66341,66346,66375,66388,66392,66396,66401,66405,66433,66438,66455,66460,66465,66470,66475,66501,66505,66509,66517,66525,66529],{"__ignoreMap":62},[67,65449,65450,65452,65454,65456],{"class":69,"line":70},[67,65451,51834],{"class":77},[67,65453,51838],{"class":51837},[67,65455,51841],{"class":112},[67,65457,51844],{"class":77},[67,65459,65460],{"class":69,"line":143},[67,65461,177],{"emptyLinePlaceholder":176},[67,65463,65464,65466,65468],{"class":69,"line":149},[67,65465,1766],{"class":77},[67,65467,51172],{"class":51837},[67,65469,51844],{"class":77},[67,65471,65472],{"class":69,"line":155},[67,65473,177],{"emptyLinePlaceholder":176},[67,65475,65476,65478,65480,65482,65484,65486],{"class":69,"line":161},[67,65477,1766],{"class":77},[67,65479,51871],{"class":51837},[67,65481,51853],{"class":112},[67,65483,909],{"class":77},[67,65485,51858],{"class":84},[67,65487,51844],{"class":77},[67,65489,65490,65492,65494,65496,65498,65500],{"class":69,"line":167},[67,65491,52681],{"class":77},[67,65493,51881],{"class":51837},[67,65495,51884],{"class":112},[67,65497,909],{"class":77},[67,65499,51889],{"class":84},[67,65501,51844],{"class":77},[67,65503,65504,65506,65508,65510,65512],{"class":69,"line":173},[67,65505,52681],{"class":77},[67,65507,51944],{"class":51837},[67,65509,55851],{"class":77},[67,65511,51944],{"class":51837},[67,65513,51844],{"class":77},[67,65515,65516,65518,65520],{"class":69,"line":180},[67,65517,52681],{"class":77},[67,65519,779],{"class":51837},[67,65521,51844],{"class":77},[67,65523,65524,65526],{"class":69,"line":186},[67,65525,7122],{"class":51837},[67,65527,16289],{"class":77},[67,65529,65530,65532,65534,65536],{"class":69,"line":444},[67,65531,55243],{"class":208},[67,65533,51974],{"class":77},[67,65535,1051],{"class":208},[67,65537,2017],{"class":77},[67,65539,65540,65542,65544,65546],{"class":69,"line":2335},[67,65541,55232],{"class":208},[67,65543,51974],{"class":77},[67,65545,1051],{"class":208},[67,65547,2017],{"class":77},[67,65549,65550],{"class":69,"line":2340},[67,65551,2909],{"class":77},[67,65553,65554],{"class":69,"line":2346},[67,65555,177],{"emptyLinePlaceholder":176},[67,65557,65558,65561],{"class":69,"line":2351},[67,65559,65560],{"class":51837},"    table",[67,65562,16289],{"class":77},[67,65564,65565,65568,65570,65573],{"class":69,"line":2365},[67,65566,65567],{"class":208},"      border-collapse",[67,65569,51974],{"class":77},[67,65571,65572],{"class":208},"collapse",[67,65574,2017],{"class":77},[67,65576,65577,65580,65582,65584],{"class":69,"line":2370},[67,65578,65579],{"class":208},"      border-spacing",[67,65581,51974],{"class":77},[67,65583,1051],{"class":208},[67,65585,2017],{"class":77},[67,65587,65588,65590,65592,65594,65596,65598,65601],{"class":69,"line":2376},[67,65589,62514],{"class":208},[67,65591,51974],{"class":77},[67,65593,1077],{"class":208},[67,65595,52029],{"class":73},[67,65597,52058],{"class":208},[67,65599,65600],{"class":208}," #c0c0c0",[67,65602,2017],{"class":77},[67,65604,65605,65607,65609,65612,65614],{"class":69,"line":2397},[67,65606,55308],{"class":208},[67,65608,51974],{"class":77},[67,65610,65611],{"class":208},"500",[67,65613,52029],{"class":73},[67,65615,2017],{"class":77},[67,65617,65618,65620,65622,65624,65626,65628],{"class":69,"line":2402},[67,65619,55243],{"class":208},[67,65621,51974],{"class":77},[67,65623,1169],{"class":208},[67,65625,52029],{"class":73},[67,65627,52093],{"class":208},[67,65629,2017],{"class":77},[67,65631,65632,65634,65636,65638],{"class":69,"line":2416},[67,65633,57823],{"class":208},[67,65635,51974],{"class":77},[67,65637,52129],{"class":208},[67,65639,2017],{"class":77},[67,65641,65642],{"class":69,"line":2421},[67,65643,2909],{"class":77},[67,65645,65646],{"class":69,"line":2450},[67,65647,177],{"emptyLinePlaceholder":176},[67,65649,65650,65653],{"class":69,"line":2455},[67,65651,65652],{"class":51837},"    th",[67,65654,16289],{"class":77},[67,65656,65657,65659,65661,65664],{"class":69,"line":2472},[67,65658,55421],{"class":208},[67,65660,51974],{"class":77},[67,65662,65663],{"class":208},"#09c",[67,65665,2017],{"class":77},[67,65667,65668,65671,65673,65675,65677,65679,65682],{"class":69,"line":2477},[67,65669,65670],{"class":208},"      font",[67,65672,51974],{"class":77},[67,65674,62876],{"class":208},[67,65676,64610],{"class":208},[67,65678,52029],{"class":73},[67,65680,65681],{"class":84}," \"微软雅黑\"",[67,65683,2017],{"class":77},[67,65685,65686,65688,65690,65692],{"class":69,"line":2482},[67,65687,57953],{"class":208},[67,65689,51974],{"class":77},[67,65691,61379],{"class":208},[67,65693,2017],{"class":77},[67,65695,65696,65698,65700,65702,65704],{"class":69,"line":2487},[67,65697,55322],{"class":208},[67,65699,51974],{"class":77},[67,65701,1656],{"class":208},[67,65703,52029],{"class":73},[67,65705,2017],{"class":77},[67,65707,65708],{"class":69,"line":2501},[67,65709,2909],{"class":77},[67,65711,65712],{"class":69,"line":2506},[67,65713,177],{"emptyLinePlaceholder":176},[67,65715,65716,65719],{"class":69,"line":3298},[67,65717,65718],{"class":51837},"    td",[67,65720,16289],{"class":77},[67,65722,65723,65725,65727,65729,65731,65733,65736],{"class":69,"line":3312},[67,65724,62514],{"class":208},[67,65726,51974],{"class":77},[67,65728,1077],{"class":208},[67,65730,52029],{"class":73},[67,65732,52058],{"class":208},[67,65734,65735],{"class":208}," #d0d0d0",[67,65737,2017],{"class":77},[67,65739,65740,65742,65744,65747],{"class":69,"line":3320},[67,65741,57953],{"class":208},[67,65743,51974],{"class":77},[67,65745,65746],{"class":208},"#404060",[67,65748,2017],{"class":77},[67,65750,65751,65753,65755,65757,65759],{"class":69,"line":3325},[67,65752,55232],{"class":208},[67,65754,51974],{"class":77},[67,65756,1303],{"class":208},[67,65758,52029],{"class":73},[67,65760,2017],{"class":77},[67,65762,65763],{"class":69,"line":3331},[67,65764,2909],{"class":77},[67,65766,65767],{"class":69,"line":3337},[67,65768,177],{"emptyLinePlaceholder":176},[67,65770,65771,65774],{"class":69,"line":3342},[67,65772,65773],{"class":112},"    .allCheck",[67,65775,16289],{"class":77},[67,65777,65778,65780,65782,65784,65786],{"class":69,"line":8667},[67,65779,55308],{"class":208},[67,65781,51974],{"class":77},[67,65783,1468],{"class":208},[67,65785,52029],{"class":73},[67,65787,2017],{"class":77},[67,65789,65790],{"class":69,"line":8691},[67,65791,2909],{"class":77},[67,65793,65794,65796,65798],{"class":69,"line":8696},[67,65795,52954],{"class":77},[67,65797,779],{"class":51837},[67,65799,51844],{"class":77},[67,65801,65802,65804,65806],{"class":69,"line":8702},[67,65803,52322],{"class":77},[67,65805,51871],{"class":51837},[67,65807,51844],{"class":77},[67,65809,65810],{"class":69,"line":8729},[67,65811,177],{"emptyLinePlaceholder":176},[67,65813,65814,65816,65818],{"class":69,"line":8734},[67,65815,1766],{"class":77},[67,65817,52337],{"class":51837},[67,65819,51844],{"class":77},[67,65821,65822,65824,65826],{"class":69,"line":8740},[67,65823,52681],{"class":77},[67,65825,998],{"class":51837},[67,65827,51844],{"class":77},[67,65829,65830,65832,65834],{"class":69,"line":8752},[67,65831,51878],{"class":77},[67,65833,1004],{"class":51837},[67,65835,51844],{"class":77},[67,65837,65838,65840,65842,65844,65846,65849],{"class":69,"line":8764},[67,65839,55771],{"class":77},[67,65841,1007],{"class":51837},[67,65843,54023],{"class":112},[67,65845,909],{"class":77},[67,65847,65848],{"class":84},"\"allCheck\"",[67,65850,51844],{"class":77},[67,65852,65853,65855,65857,65859,65861,65863,65865,65867,65869,65871,65873,65876,65879,65881,65883,65885,65888,65891,65893],{"class":69,"line":8776},[67,65854,55839],{"class":77},[67,65856,54358],{"class":51837},[67,65858,54361],{"class":112},[67,65860,909],{"class":77},[67,65862,54366],{"class":84},[67,65864,15637],{"class":112},[67,65866,909],{"class":77},[67,65868,8371],{"class":84},[67,65870,15676],{"class":112},[67,65872,909],{"class":77},[67,65874,65875],{"class":84},"\"checkAll\"",[67,65877,65878],{"class":77},"> \u003C",[67,65880,67],{"class":51837},[67,65882,54023],{"class":112},[67,65884,909],{"class":77},[67,65886,65887],{"class":84},"\"all\"",[67,65889,65890],{"class":77},">全选\u003C\u002F",[67,65892,67],{"class":51837},[67,65894,51844],{"class":77},[67,65896,65897,65899,65901],{"class":69,"line":10435},[67,65898,55944],{"class":77},[67,65900,1007],{"class":51837},[67,65902,51844],{"class":77},[67,65904,65905,65907,65909,65912,65914],{"class":69,"line":10459},[67,65906,55771],{"class":77},[67,65908,1007],{"class":51837},[67,65910,65911],{"class":77},">商品\u003C\u002F",[67,65913,1007],{"class":51837},[67,65915,51844],{"class":77},[67,65917,65918,65920,65922,65925,65927],{"class":69,"line":10482},[67,65919,55771],{"class":77},[67,65921,1007],{"class":51837},[67,65923,65924],{"class":77},">商家\u003C\u002F",[67,65926,1007],{"class":51837},[67,65928,51844],{"class":77},[67,65930,65931,65933,65935,65938,65940],{"class":69,"line":10506},[67,65932,55771],{"class":77},[67,65934,1007],{"class":51837},[67,65936,65937],{"class":77},">价格\u003C\u002F",[67,65939,1007],{"class":51837},[67,65941,51844],{"class":77},[67,65943,65944,65946,65948],{"class":69,"line":10511},[67,65945,52313],{"class":77},[67,65947,1004],{"class":51837},[67,65949,51844],{"class":77},[67,65951,65952,65954,65956],{"class":69,"line":10516},[67,65953,51878],{"class":77},[67,65955,1004],{"class":51837},[67,65957,51844],{"class":77},[67,65959,65960,65962,65964],{"class":69,"line":10521},[67,65961,55771],{"class":77},[67,65963,1049],{"class":51837},[67,65965,51844],{"class":77},[67,65967,65968,65970,65972,65974,65976,65978,65980,65982,65985,65987,65989,65992],{"class":69,"line":10530},[67,65969,55839],{"class":77},[67,65971,54358],{"class":51837},[67,65973,54361],{"class":112},[67,65975,909],{"class":77},[67,65977,54366],{"class":84},[67,65979,15637],{"class":112},[67,65981,909],{"class":77},[67,65983,65984],{"class":84},"\"check\"",[67,65986,54023],{"class":112},[67,65988,909],{"class":77},[67,65990,65991],{"class":84},"\"ck\"",[67,65993,51844],{"class":77},[67,65995,65996,65998,66000],{"class":69,"line":10535},[67,65997,55944],{"class":77},[67,65999,1049],{"class":51837},[67,66001,51844],{"class":77},[67,66003,66004,66006,66008,66010,66012],{"class":69,"line":10541},[67,66005,55771],{"class":77},[67,66007,1049],{"class":51837},[67,66009,61710],{"class":77},[67,66011,1049],{"class":51837},[67,66013,51844],{"class":77},[67,66015,66016,66018,66020,66023,66025],{"class":69,"line":10562},[67,66017,55771],{"class":77},[67,66019,1049],{"class":51837},[67,66021,66022],{"class":77},">小米\u003C\u002F",[67,66024,1049],{"class":51837},[67,66026,51844],{"class":77},[67,66028,66029,66031,66033,66036,66038],{"class":69,"line":10568},[67,66030,55771],{"class":77},[67,66032,1049],{"class":51837},[67,66034,66035],{"class":77},">￥1999\u003C\u002F",[67,66037,1049],{"class":51837},[67,66039,51844],{"class":77},[67,66041,66042,66044,66046],{"class":69,"line":10582},[67,66043,52313],{"class":77},[67,66045,1004],{"class":51837},[67,66047,51844],{"class":77},[67,66049,66050,66052,66054],{"class":69,"line":10588},[67,66051,51878],{"class":77},[67,66053,1004],{"class":51837},[67,66055,51844],{"class":77},[67,66057,66058,66060,66062],{"class":69,"line":10615},[67,66059,55771],{"class":77},[67,66061,1049],{"class":51837},[67,66063,51844],{"class":77},[67,66065,66066,66068,66070,66072,66074,66076,66078,66080,66082,66084,66086,66088],{"class":69,"line":10624},[67,66067,55839],{"class":77},[67,66069,54358],{"class":51837},[67,66071,54361],{"class":112},[67,66073,909],{"class":77},[67,66075,54366],{"class":84},[67,66077,15637],{"class":112},[67,66079,909],{"class":77},[67,66081,65984],{"class":84},[67,66083,54023],{"class":112},[67,66085,909],{"class":77},[67,66087,65991],{"class":84},[67,66089,51844],{"class":77},[67,66091,66092,66094,66096],{"class":69,"line":10630},[67,66093,55944],{"class":77},[67,66095,1049],{"class":51837},[67,66097,51844],{"class":77},[67,66099,66100,66102,66104,66107,66109],{"class":69,"line":10638},[67,66101,55771],{"class":77},[67,66103,1049],{"class":51837},[67,66105,66106],{"class":77},">小米净水器\u003C\u002F",[67,66108,1049],{"class":51837},[67,66110,51844],{"class":77},[67,66112,66113,66115,66117,66119,66121],{"class":69,"line":10643},[67,66114,55771],{"class":77},[67,66116,1049],{"class":51837},[67,66118,66022],{"class":77},[67,66120,1049],{"class":51837},[67,66122,51844],{"class":77},[67,66124,66125,66127,66129,66132,66134],{"class":69,"line":17321},[67,66126,55771],{"class":77},[67,66128,1049],{"class":51837},[67,66130,66131],{"class":77},">￥4999\u003C\u002F",[67,66133,1049],{"class":51837},[67,66135,51844],{"class":77},[67,66137,66138,66140,66142],{"class":69,"line":17327},[67,66139,52313],{"class":77},[67,66141,1004],{"class":51837},[67,66143,51844],{"class":77},[67,66145,66146,66148,66150],{"class":69,"line":17350},[67,66147,51878],{"class":77},[67,66149,1004],{"class":51837},[67,66151,51844],{"class":77},[67,66153,66154,66156,66158],{"class":69,"line":17356},[67,66155,55771],{"class":77},[67,66157,1049],{"class":51837},[67,66159,51844],{"class":77},[67,66161,66162,66164,66166,66168,66170,66172,66174,66176,66178,66180,66182,66184],{"class":69,"line":17379},[67,66163,55839],{"class":77},[67,66165,54358],{"class":51837},[67,66167,54361],{"class":112},[67,66169,909],{"class":77},[67,66171,54366],{"class":84},[67,66173,15637],{"class":112},[67,66175,909],{"class":77},[67,66177,65984],{"class":84},[67,66179,54023],{"class":112},[67,66181,909],{"class":77},[67,66183,65991],{"class":84},[67,66185,51844],{"class":77},[67,66187,66188,66190,66192],{"class":69,"line":17393},[67,66189,55944],{"class":77},[67,66191,1049],{"class":51837},[67,66193,51844],{"class":77},[67,66195,66196,66198,66200,66203,66205],{"class":69,"line":17413},[67,66197,55771],{"class":77},[67,66199,1049],{"class":51837},[67,66201,66202],{"class":77},">小米电视\u003C\u002F",[67,66204,1049],{"class":51837},[67,66206,51844],{"class":77},[67,66208,66209,66211,66213,66215,66217],{"class":69,"line":17419},[67,66210,55771],{"class":77},[67,66212,1049],{"class":51837},[67,66214,66022],{"class":77},[67,66216,1049],{"class":51837},[67,66218,51844],{"class":77},[67,66220,66221,66223,66225,66228,66230],{"class":69,"line":17430},[67,66222,55771],{"class":77},[67,66224,1049],{"class":51837},[67,66226,66227],{"class":77},">￥5999\u003C\u002F",[67,66229,1049],{"class":51837},[67,66231,51844],{"class":77},[67,66233,66234,66236,66238],{"class":69,"line":17453},[67,66235,52313],{"class":77},[67,66237,1004],{"class":51837},[67,66239,51844],{"class":77},[67,66241,66242,66244,66246],{"class":69,"line":17475},[67,66243,52954],{"class":77},[67,66245,998],{"class":51837},[67,66247,51844],{"class":77},[67,66249,66250,66252,66254],{"class":69,"line":17480},[67,66251,52681],{"class":77},[67,66253,52350],{"class":51837},[67,66255,51844],{"class":77},[67,66257,66258],{"class":69,"line":17486},[67,66259,66260],{"class":202},"    \u002F\u002F 1. 获取大复选框\n",[67,66262,66263,66265,66268,66270,66272,66274,66276,66279],{"class":69,"line":17500},[67,66264,11939],{"class":73},[67,66266,66267],{"class":208}," checkAll",[67,66269,14282],{"class":73},[67,66271,54933],{"class":77},[67,66273,54936],{"class":112},[67,66275,864],{"class":77},[67,66277,66278],{"class":84},"'#checkAll'",[67,66280,870],{"class":77},[67,66282,66283],{"class":69,"line":17513},[67,66284,66285],{"class":202},"    \u002F\u002F 2. 获取所有的小复选框\n",[67,66287,66288,66290,66293,66295,66297,66299,66301,66304],{"class":69,"line":17518},[67,66289,11939],{"class":73},[67,66291,66292],{"class":208}," cks",[67,66294,14282],{"class":73},[67,66296,54933],{"class":77},[67,66298,56218],{"class":112},[67,66300,864],{"class":77},[67,66302,66303],{"class":84},"'.ck'",[67,66305,870],{"class":77},[67,66307,66308],{"class":69,"line":17532},[67,66309,66310],{"class":202},"    \u002F\u002F 3. 点击大复选框  注册事件\n",[67,66312,66313,66316,66318,66320,66322,66324,66326],{"class":69,"line":17537},[67,66314,66315],{"class":77},"    checkAll.",[67,66317,58350],{"class":112},[67,66319,864],{"class":77},[67,66321,58355],{"class":84},[67,66323,13153],{"class":77},[67,66325,54986],{"class":73},[67,66327,54989],{"class":77},[67,66329,66330],{"class":69,"line":17543},[67,66331,66332],{"class":202},"      \u002F\u002F 得到当前大复选框的选中状态\n",[67,66334,66335,66338],{"class":69,"line":17548},[67,66336,66337],{"class":202},"      \u002F\u002F console.log(checkAll.checked)",[67,66339,66340],{"class":202},"  \u002F\u002F 得到 是 true 或者是 false\n",[67,66342,66343],{"class":69,"line":17562},[67,66344,66345],{"class":202},"      \u002F\u002F 4. 遍历所有的小复选框 让小复选框的checked  =  大复选框的 checked\n",[67,66347,66348,66350,66352,66354,66356,66358,66360,66362,66364,66367,66369,66371,66373],{"class":69,"line":17567},[67,66349,52821],{"class":73},[67,66351,2381],{"class":77},[67,66353,52384],{"class":73},[67,66355,10157],{"class":77},[67,66357,909],{"class":73},[67,66359,4813],{"class":208},[67,66361,10164],{"class":77},[67,66363,1766],{"class":73},[67,66365,66366],{"class":77}," cks.",[67,66368,52505],{"class":208},[67,66370,3934],{"class":77},[67,66372,3014],{"class":73},[67,66374,13160],{"class":77},[67,66376,66377,66380,66382,66385],{"class":69,"line":17572},[67,66378,66379],{"class":77},"        cks[i].checked ",[67,66381,909],{"class":73},[67,66383,66384],{"class":208}," this",[67,66386,66387],{"class":77},".checked\n",[67,66389,66390],{"class":69,"line":17586},[67,66391,52935],{"class":77},[67,66393,66394],{"class":69,"line":17598},[67,66395,33998],{"class":77},[67,66397,66398],{"class":69,"line":17603},[67,66399,66400],{"class":202},"    \u002F\u002F 5. 小复选框控制大复选框\n",[67,66402,66403],{"class":69,"line":17616},[67,66404,177],{"emptyLinePlaceholder":176},[67,66406,66407,66409,66411,66413,66415,66417,66419,66421,66423,66425,66427,66429,66431],{"class":69,"line":17621},[67,66408,3921],{"class":73},[67,66410,2381],{"class":77},[67,66412,52384],{"class":73},[67,66414,10157],{"class":77},[67,66416,909],{"class":73},[67,66418,4813],{"class":208},[67,66420,10164],{"class":77},[67,66422,1766],{"class":73},[67,66424,66366],{"class":77},[67,66426,52505],{"class":208},[67,66428,3934],{"class":77},[67,66430,3014],{"class":73},[67,66432,13160],{"class":77},[67,66434,66435],{"class":69,"line":17626},[67,66436,66437],{"class":202},"      \u002F\u002F 5.1 给所有的小复选框添加点击事件\n",[67,66439,66440,66443,66445,66447,66449,66451,66453],{"class":69,"line":17631},[67,66441,66442],{"class":77},"      cks[i].",[67,66444,58350],{"class":112},[67,66446,864],{"class":77},[67,66448,58355],{"class":84},[67,66450,13153],{"class":77},[67,66452,54986],{"class":73},[67,66454,54989],{"class":77},[67,66456,66457],{"class":69,"line":17644},[67,66458,66459],{"class":202},"        \u002F\u002F 判断选中的小复选框个数 是不是等于  总的小复选框个数\n",[67,66461,66462],{"class":69,"line":17649},[67,66463,66464],{"class":202},"        \u002F\u002F 一定要写到点击里面，因为每次要获得最新的个数\n",[67,66466,66467],{"class":69,"line":33170},[67,66468,66469],{"class":202},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length)\n",[67,66471,66472],{"class":69,"line":33176},[67,66473,66474],{"class":202},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length === cks.length)\n",[67,66476,66477,66480,66482,66484,66486,66488,66491,66493,66495,66497,66499],{"class":69,"line":33182},[67,66478,66479],{"class":77},"        checkAll.checked ",[67,66481,909],{"class":73},[67,66483,54933],{"class":77},[67,66485,56218],{"class":112},[67,66487,864],{"class":77},[67,66489,66490],{"class":84},"'.ck:checked'",[67,66492,31363],{"class":77},[67,66494,52505],{"class":208},[67,66496,58443],{"class":73},[67,66498,66366],{"class":77},[67,66500,56368],{"class":208},[67,66502,66503],{"class":69,"line":33188},[67,66504,65352],{"class":77},[67,66506,66507],{"class":69,"line":33194},[67,66508,2909],{"class":77},[67,66510,66511,66513,66515],{"class":69,"line":33205},[67,66512,52954],{"class":77},[67,66514,52350],{"class":51837},[67,66516,51844],{"class":77},[67,66518,66519,66521,66523],{"class":69,"line":33211},[67,66520,52322],{"class":77},[67,66522,52337],{"class":51837},[67,66524,51844],{"class":77},[67,66526,66527],{"class":69,"line":33231},[67,66528,177],{"emptyLinePlaceholder":176},[67,66530,66531,66533,66535],{"class":69,"line":33237},[67,66532,52322],{"class":77},[67,66534,51172],{"class":51837},[67,66536,51844],{"class":77},[19,66538,66539],{},"一定要懂思路，反选做不出来去了解布尔值！！！",[19,66541,66542],{},"用好之间比较得到的布尔值！！！",[19,66544,66545,66546,66549,66550,2381,66553,1440,66555,66558],{},"在 JS 里访问的时候，",[64,66547,66548],{},"checkbox.checked"," 是一个 ",[336,66551,66552],{},"布尔值",[64,66554,2086],{},[64,66556,66557],{},"false",")，不是字符串，也就是说js通过这个属性值可以实现对复选按钮选择与否的控制",[19,66560,66561,66562,66565,66566],{},"HTML 的 ",[64,66563,66564],{},"checked=\"checked\""," 只是 ",[336,66567,66568,66569,66572],{},"初始值；JS 的 ",[64,66570,66571],{},".checked"," 表示当前实时状态，值是个布尔值，是true和false",[19,66574,66575],{},"：checked是一个伪类选择器",[19,66577,66578],{},[725,66579],{"alt":62,"src":66580},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-126.png",[19,66582,66583,66586],{},[66584,66585],"checked",{},"是一个伪类选择器，这个伪类选择器是对被勾选的复选框的样式进行处理",[19,66588,66589],{},[725,66590],{"alt":62,"src":66591},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-127.png",[803,66593,66595],{"id":66594},"_33-dom事件进阶","3.3 DOM事件进阶",[14,66597,66599],{"id":66598},"_331-事件流","3.3.1 事件流",[19,66601,66602],{},[725,66603],{"alt":62,"src":66604},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-128.png",[40,66606,66608],{"id":66607},"_3311-事件捕获","3.3.1.1 事件捕获",[19,66610,66611],{},[725,66612],{"alt":62,"src":66613},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-129.png",[57,66615,66617],{"className":51170,"code":66616,"language":51172,"meta":62,"style":62},"\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",[64,66618,66619,66629,66643,66647,66655,66669,66689,66701,66709,66716,66728,66740,66750,66754,66758,66765,66777,66789,66799,66803,66811,66819,66823,66831,66846,66865,66873,66881,66901,66921,66937,66948,66956,66973,66984,66992,67009,67020,67028,67036,67044,67048],{"__ignoreMap":62},[67,66620,66621,66623,66625,66627],{"class":69,"line":70},[67,66622,51834],{"class":77},[67,66624,51838],{"class":51837},[67,66626,51841],{"class":112},[67,66628,51844],{"class":77},[67,66630,66631,66633,66635,66637,66639,66641],{"class":69,"line":143},[67,66632,1766],{"class":77},[67,66634,51172],{"class":51837},[67,66636,51853],{"class":112},[67,66638,909],{"class":77},[67,66640,51858],{"class":84},[67,66642,51844],{"class":77},[67,66644,66645],{"class":69,"line":149},[67,66646,177],{"emptyLinePlaceholder":176},[67,66648,66649,66651,66653],{"class":69,"line":155},[67,66650,1766],{"class":77},[67,66652,51871],{"class":51837},[67,66654,51844],{"class":77},[67,66656,66657,66659,66661,66663,66665,66667],{"class":69,"line":161},[67,66658,52681],{"class":77},[67,66660,51881],{"class":51837},[67,66662,51884],{"class":112},[67,66664,909],{"class":77},[67,66666,51889],{"class":84},[67,66668,51844],{"class":77},[67,66670,66671,66673,66675,66677,66679,66681,66683,66685,66687],{"class":69,"line":167},[67,66672,52681],{"class":77},[67,66674,51881],{"class":51837},[67,66676,15637],{"class":112},[67,66678,909],{"class":77},[67,66680,51928],{"class":84},[67,66682,51908],{"class":112},[67,66684,909],{"class":77},[67,66686,51935],{"class":84},[67,66688,51844],{"class":77},[67,66690,66691,66693,66695,66697,66699],{"class":69,"line":173},[67,66692,52681],{"class":77},[67,66694,51944],{"class":51837},[67,66696,51947],{"class":77},[67,66698,51944],{"class":51837},[67,66700,51844],{"class":77},[67,66702,66703,66705,66707],{"class":69,"line":180},[67,66704,52681],{"class":77},[67,66706,779],{"class":51837},[67,66708,51844],{"class":77},[67,66710,66711,66714],{"class":69,"line":186},[67,66712,66713],{"class":112},"    .father",[67,66715,16289],{"class":77},[67,66717,66718,66720,66722,66724,66726],{"class":69,"line":444},[67,66719,55308],{"class":208},[67,66721,51974],{"class":77},[67,66723,65611],{"class":208},[67,66725,52029],{"class":73},[67,66727,2017],{"class":77},[67,66729,66730,66732,66734,66736,66738],{"class":69,"line":2335},[67,66731,55322],{"class":208},[67,66733,51974],{"class":77},[67,66735,65611],{"class":208},[67,66737,52029],{"class":73},[67,66739,2017],{"class":77},[67,66741,66742,66744,66746,66748],{"class":69,"line":2340},[67,66743,55421],{"class":208},[67,66745,51974],{"class":77},[67,66747,52182],{"class":208},[67,66749,2017],{"class":77},[67,66751,66752],{"class":69,"line":2346},[67,66753,2909],{"class":77},[67,66755,66756],{"class":69,"line":2351},[67,66757,177],{"emptyLinePlaceholder":176},[67,66759,66760,66763],{"class":69,"line":2365},[67,66761,66762],{"class":112},"    .son",[67,66764,16289],{"class":77},[67,66766,66767,66769,66771,66773,66775],{"class":69,"line":2370},[67,66768,55308],{"class":208},[67,66770,51974],{"class":77},[67,66772,2445],{"class":208},[67,66774,52029],{"class":73},[67,66776,2017],{"class":77},[67,66778,66779,66781,66783,66785,66787],{"class":69,"line":2376},[67,66780,55322],{"class":208},[67,66782,51974],{"class":77},[67,66784,2445],{"class":208},[67,66786,52029],{"class":73},[67,66788,2017],{"class":77},[67,66790,66791,66793,66795,66797],{"class":69,"line":2397},[67,66792,55421],{"class":208},[67,66794,51974],{"class":77},[67,66796,55426],{"class":208},[67,66798,2017],{"class":77},[67,66800,66801],{"class":69,"line":2402},[67,66802,2909],{"class":77},[67,66804,66805,66807,66809],{"class":69,"line":2416},[67,66806,52954],{"class":77},[67,66808,779],{"class":51837},[67,66810,51844],{"class":77},[67,66812,66813,66815,66817],{"class":69,"line":2421},[67,66814,52322],{"class":77},[67,66816,51871],{"class":51837},[67,66818,51844],{"class":77},[67,66820,66821],{"class":69,"line":2450},[67,66822,177],{"emptyLinePlaceholder":176},[67,66824,66825,66827,66829],{"class":69,"line":2455},[67,66826,1766],{"class":77},[67,66828,52337],{"class":51837},[67,66830,51844],{"class":77},[67,66832,66833,66835,66837,66839,66841,66844],{"class":69,"line":2472},[67,66834,52681],{"class":77},[67,66836,52148],{"class":51837},[67,66838,54023],{"class":112},[67,66840,909],{"class":77},[67,66842,66843],{"class":84},"\"father\"",[67,66845,51844],{"class":77},[67,66847,66848,66850,66852,66854,66856,66859,66861,66863],{"class":69,"line":2477},[67,66849,51878],{"class":77},[67,66851,52148],{"class":51837},[67,66853,54023],{"class":112},[67,66855,909],{"class":77},[67,66857,66858],{"class":84},"\"son\"",[67,66860,55851],{"class":77},[67,66862,52148],{"class":51837},[67,66864,51844],{"class":77},[67,66866,66867,66869,66871],{"class":69,"line":2482},[67,66868,52954],{"class":77},[67,66870,52148],{"class":51837},[67,66872,51844],{"class":77},[67,66874,66875,66877,66879],{"class":69,"line":2487},[67,66876,52681],{"class":77},[67,66878,52350],{"class":51837},[67,66880,51844],{"class":77},[67,66882,66883,66885,66888,66890,66892,66894,66896,66899],{"class":69,"line":2501},[67,66884,11939],{"class":73},[67,66886,66887],{"class":208}," fa",[67,66889,14282],{"class":73},[67,66891,54933],{"class":77},[67,66893,54936],{"class":112},[67,66895,864],{"class":77},[67,66897,66898],{"class":84},"'.father'",[67,66900,870],{"class":77},[67,66902,66903,66905,66908,66910,66912,66914,66916,66919],{"class":69,"line":2506},[67,66904,11939],{"class":73},[67,66906,66907],{"class":208}," son",[67,66909,14282],{"class":73},[67,66911,54933],{"class":77},[67,66913,54936],{"class":112},[67,66915,864],{"class":77},[67,66917,66918],{"class":84},"'.son'",[67,66920,870],{"class":77},[67,66922,66923,66925,66927,66929,66931,66933,66935],{"class":69,"line":3298},[67,66924,52944],{"class":77},[67,66926,58350],{"class":112},[67,66928,864],{"class":77},[67,66930,58355],{"class":84},[67,66932,13153],{"class":77},[67,66934,54986],{"class":73},[67,66936,54989],{"class":77},[67,66938,66939,66941,66943,66946],{"class":69,"line":3312},[67,66940,59462],{"class":112},[67,66942,864],{"class":77},[67,66944,66945],{"class":84},"'woshiu1'",[67,66947,870],{"class":77},[67,66949,66950,66952,66954],{"class":69,"line":3320},[67,66951,55072],{"class":77},[67,66953,2086],{"class":208},[67,66955,870],{"class":77},[67,66957,66958,66961,66963,66965,66967,66969,66971],{"class":69,"line":3325},[67,66959,66960],{"class":77},"    fa.",[67,66962,58350],{"class":112},[67,66964,864],{"class":77},[67,66966,58355],{"class":84},[67,66968,13153],{"class":77},[67,66970,54986],{"class":73},[67,66972,54989],{"class":77},[67,66974,66975,66977,66979,66982],{"class":69,"line":3331},[67,66976,59462],{"class":112},[67,66978,864],{"class":77},[67,66980,66981],{"class":84},"'1'",[67,66983,870],{"class":77},[67,66985,66986,66988,66990],{"class":69,"line":3337},[67,66987,55072],{"class":77},[67,66989,2086],{"class":208},[67,66991,870],{"class":77},[67,66993,66994,66997,66999,67001,67003,67005,67007],{"class":69,"line":3342},[67,66995,66996],{"class":77},"    son.",[67,66998,58350],{"class":112},[67,67000,864],{"class":77},[67,67002,58355],{"class":84},[67,67004,13153],{"class":77},[67,67006,54986],{"class":73},[67,67008,54989],{"class":77},[67,67010,67011,67013,67015,67018],{"class":69,"line":8667},[67,67012,59462],{"class":112},[67,67014,864],{"class":77},[67,67016,67017],{"class":84},"'2'",[67,67019,870],{"class":77},[67,67021,67022,67024,67026],{"class":69,"line":8691},[67,67023,55072],{"class":77},[67,67025,2086],{"class":208},[67,67027,870],{"class":77},[67,67029,67030,67032,67034],{"class":69,"line":8696},[67,67031,52954],{"class":77},[67,67033,52350],{"class":51837},[67,67035,51844],{"class":77},[67,67037,67038,67040,67042],{"class":69,"line":8702},[67,67039,52322],{"class":77},[67,67041,52337],{"class":51837},[67,67043,51844],{"class":77},[67,67045,67046],{"class":69,"line":8729},[67,67047,177],{"emptyLinePlaceholder":176},[67,67049,67050,67052,67054],{"class":69,"line":8734},[67,67051,52322],{"class":77},[67,67053,51172],{"class":51837},[67,67055,51844],{"class":77},[19,67057,67058],{},[725,67059],{"alt":62,"src":67060},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-130.png",[19,67062,67063],{},"点击小盒子，先从最大盒子开始执行，先弹出woshiu1，再弹出1，最后弹出2；点击粉色盒子：先弹出woshiu1，再弹出1；点击浏览器其他区域，弹出woshiu1，捕获就是从最大对象（元素）开始往下找",[40,67065,67067],{"id":67066},"_3312-事件冒泡","3.3.1.2 事件冒泡",[19,67069,67070],{},[725,67071],{"alt":62,"src":67072},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-131.png",[19,67074,67075],{},"反着来",[19,67077,67078],{},"注意是同名事件，比如都是‘click’",[40,67080,67082],{"id":67081},"_3313-阻止冒泡","3.3.1.3 阻止冒泡",[19,67084,67085],{},[725,67086],{"alt":62,"src":67087},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-132.png",[40,67089,67091],{"id":67090},"_3314-解绑事件","3.3.1.4 解绑事件",[19,67093,67094],{},[725,67095],{"alt":62,"src":67096},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-133.png",[19,67098,67099],{},[725,67100],{"alt":62,"src":67101},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-134.png",[40,67103,67105],{"id":67104},"_3315-事件类型和注册事件的区别","3.3.1.5 事件类型和注册事件的区别",[815,67107,67108],{},[818,67109,67110],{},"事件类型的区别",[19,67112,67113],{},[725,67114],{"alt":62,"src":67115},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-135.png",[19,67117,67118],{},"mouseover有冒泡，如果想实现鼠标经过有冒泡效果，就不要使用mouseenter,用mouseover",[815,67120,67121],{"start":143},[818,67122,67123],{},"注册事件的区别",[19,67125,67126],{},[725,67127],{"alt":62,"src":67128},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-136.png",[40,67130,67132],{"id":67131},"_3316-阻止冒泡","3.3.1.6 阻止冒泡",[19,67134,67135],{},[725,67136],{"alt":62,"src":67137},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-137.png",[19,67139,67140],{},[725,67141],{"alt":62,"src":67142},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-138.png",[57,67144,67146],{"className":53604,"code":67145,"language":53606,"meta":62,"style":62},"\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",[64,67147,67148,67156,67173,67196,67204,67209,67214,67219,67223,67231,67239],{"__ignoreMap":62},[67,67149,67150,67152,67154],{"class":69,"line":70},[67,67151,1766],{"class":77},[67,67153,52337],{"class":51837},[67,67155,51844],{"class":77},[67,67157,67158,67160,67163,67166,67168,67171],{"class":69,"line":143},[67,67159,52681],{"class":77},[67,67161,67162],{"class":51837},"form",[67,67164,67165],{"class":112}," action",[67,67167,909],{"class":77},[67,67169,67170],{"class":84},"\"http:\u002F\u002Fwww.itcast.cn\"",[67,67172,51844],{"class":77},[67,67174,67175,67177,67179,67181,67183,67186,67189,67191,67194],{"class":69,"line":149},[67,67176,51878],{"class":77},[67,67178,54358],{"class":51837},[67,67180,54361],{"class":112},[67,67182,909],{"class":77},[67,67184,67185],{"class":84},"\"submit\"",[67,67187,67188],{"class":112}," value",[67,67190,909],{"class":77},[67,67192,67193],{"class":84},"\"免费注册\"",[67,67195,51844],{"class":77},[67,67197,67198,67200,67202],{"class":69,"line":155},[67,67199,51878],{"class":77},[67,67201,52350],{"class":51837},[67,67203,51844],{"class":77},[67,67205,67206],{"class":69,"line":161},[67,67207,67208],{"class":77},"      const form = document.querySelector('form')\n",[67,67210,67211],{"class":69,"line":167},[67,67212,67213],{"class":77},"      form.addEventListener('submit', function (e) {\n",[67,67215,67216],{"class":69,"line":173},[67,67217,67218],{"class":77},"        e.preventDefault()\n",[67,67220,67221],{"class":69,"line":180},[67,67222,65352],{"class":77},[67,67224,67225,67227,67229],{"class":69,"line":186},[67,67226,52313],{"class":77},[67,67228,52350],{"class":51837},[67,67230,51844],{"class":77},[67,67232,67233,67235,67237],{"class":69,"line":444},[67,67234,52954],{"class":77},[67,67236,67162],{"class":51837},[67,67238,51844],{"class":77},[67,67240,67241,67243,67245],{"class":69,"line":2335},[67,67242,52322],{"class":77},[67,67244,52337],{"class":51837},[67,67246,51844],{"class":77},[19,67248,67249],{},"点击不在跳转！！！",[14,67251,67253],{"id":67252},"_332-事件委托","3.3.2 事件委托",[19,67255,67256],{},[725,67257],{"alt":62,"src":67258},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-139.png",[57,67260,67262],{"className":51170,"code":67261,"language":51172,"meta":62,"style":62},"\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",[64,67263,67264,67274,67288,67292,67300,67314,67334,67346,67354,67358,67366,67374,67386,67398,67410,67422,67434,67447,67455,67463,67468,67487,67508,67513,67518,67523,67528,67537,67541,67551,67555,67560,67565,67579,67589,67593,67597,67605,67613,67617],{"__ignoreMap":62},[67,67265,67266,67268,67270,67272],{"class":69,"line":70},[67,67267,51834],{"class":77},[67,67269,51838],{"class":51837},[67,67271,51841],{"class":112},[67,67273,51844],{"class":77},[67,67275,67276,67278,67280,67282,67284,67286],{"class":69,"line":143},[67,67277,1766],{"class":77},[67,67279,51172],{"class":51837},[67,67281,51853],{"class":112},[67,67283,909],{"class":77},[67,67285,51858],{"class":84},[67,67287,51844],{"class":77},[67,67289,67290],{"class":69,"line":149},[67,67291,177],{"emptyLinePlaceholder":176},[67,67293,67294,67296,67298],{"class":69,"line":155},[67,67295,1766],{"class":77},[67,67297,51871],{"class":51837},[67,67299,51844],{"class":77},[67,67301,67302,67304,67306,67308,67310,67312],{"class":69,"line":161},[67,67303,52681],{"class":77},[67,67305,51881],{"class":51837},[67,67307,51884],{"class":112},[67,67309,909],{"class":77},[67,67311,51889],{"class":84},[67,67313,51844],{"class":77},[67,67315,67316,67318,67320,67322,67324,67326,67328,67330,67332],{"class":69,"line":167},[67,67317,52681],{"class":77},[67,67319,51881],{"class":51837},[67,67321,15637],{"class":112},[67,67323,909],{"class":77},[67,67325,51928],{"class":84},[67,67327,51908],{"class":112},[67,67329,909],{"class":77},[67,67331,51935],{"class":84},[67,67333,51844],{"class":77},[67,67335,67336,67338,67340,67342,67344],{"class":69,"line":173},[67,67337,52681],{"class":77},[67,67339,51944],{"class":51837},[67,67341,51947],{"class":77},[67,67343,51944],{"class":51837},[67,67345,51844],{"class":77},[67,67347,67348,67350,67352],{"class":69,"line":180},[67,67349,52322],{"class":77},[67,67351,51871],{"class":51837},[67,67353,51844],{"class":77},[67,67355,67356],{"class":69,"line":186},[67,67357,177],{"emptyLinePlaceholder":176},[67,67359,67360,67362,67364],{"class":69,"line":444},[67,67361,1766],{"class":77},[67,67363,52337],{"class":51837},[67,67365,51844],{"class":77},[67,67367,67368,67370,67372],{"class":69,"line":2335},[67,67369,52681],{"class":77},[67,67371,1863],{"class":51837},[67,67373,51844],{"class":77},[67,67375,67376,67378,67380,67382,67384],{"class":69,"line":2340},[67,67377,51878],{"class":77},[67,67379,818],{"class":51837},[67,67381,54503],{"class":77},[67,67383,818],{"class":51837},[67,67385,51844],{"class":77},[67,67387,67388,67390,67392,67394,67396],{"class":69,"line":2346},[67,67389,51878],{"class":77},[67,67391,818],{"class":51837},[67,67393,54522],{"class":77},[67,67395,818],{"class":51837},[67,67397,51844],{"class":77},[67,67399,67400,67402,67404,67406,67408],{"class":69,"line":2351},[67,67401,51878],{"class":77},[67,67403,818],{"class":51837},[67,67405,54541],{"class":77},[67,67407,818],{"class":51837},[67,67409,51844],{"class":77},[67,67411,67412,67414,67416,67418,67420],{"class":69,"line":2365},[67,67413,51878],{"class":77},[67,67415,818],{"class":51837},[67,67417,54560],{"class":77},[67,67419,818],{"class":51837},[67,67421,51844],{"class":77},[67,67423,67424,67426,67428,67430,67432],{"class":69,"line":2370},[67,67425,51878],{"class":77},[67,67427,818],{"class":51837},[67,67429,54579],{"class":77},[67,67431,818],{"class":51837},[67,67433,51844],{"class":77},[67,67435,67436,67438,67440,67443,67445],{"class":69,"line":2376},[67,67437,51878],{"class":77},[67,67439,19],{"class":51837},[67,67441,67442],{"class":77},">我不需要变色\u003C\u002F",[67,67444,19],{"class":51837},[67,67446,51844],{"class":77},[67,67448,67449,67451,67453],{"class":69,"line":2397},[67,67450,52954],{"class":77},[67,67452,1863],{"class":51837},[67,67454,51844],{"class":77},[67,67456,67457,67459,67461],{"class":69,"line":2402},[67,67458,52681],{"class":77},[67,67460,52350],{"class":51837},[67,67462,51844],{"class":77},[67,67464,67465],{"class":69,"line":2416},[67,67466,67467],{"class":202},"    \u002F\u002F 点击每个li，当前文字变为红色\n",[67,67469,67470,67472,67474,67476,67478,67480,67482,67485],{"class":69,"line":2421},[67,67471,11939],{"class":73},[67,67473,61829],{"class":208},[67,67475,14282],{"class":73},[67,67477,54933],{"class":77},[67,67479,54936],{"class":112},[67,67481,864],{"class":77},[67,67483,67484],{"class":84},"'ul'",[67,67486,870],{"class":77},[67,67488,67489,67492,67494,67496,67498,67500,67502,67504,67506],{"class":69,"line":2450},[67,67490,67491],{"class":77},"    ul.",[67,67493,58350],{"class":112},[67,67495,864],{"class":77},[67,67497,58355],{"class":84},[67,67499,13153],{"class":77},[67,67501,54986],{"class":73},[67,67503,2381],{"class":77},[67,67505,936],{"class":5935},[67,67507,13160],{"class":77},[67,67509,67510],{"class":69,"line":2455},[67,67511,67512],{"class":202},"      \u002F\u002F alert(1)\n",[67,67514,67515],{"class":69,"line":2472},[67,67516,67517],{"class":202},"      \u002F\u002F e.target就是我们点击的对象\n",[67,67519,67520],{"class":69,"line":2477},[67,67521,67522],{"class":202},"      \u002F\u002F 当点击时会获得事件对象，事件对象下面target属性中里边就是li\n",[67,67524,67525],{"class":69,"line":2482},[67,67526,67527],{"class":202},"      \u002F\u002F e.target.style.color = 'red'\n",[67,67529,67530,67532,67534],{"class":69,"line":2487},[67,67531,58781],{"class":77},[67,67533,58784],{"class":112},[67,67535,67536],{"class":77},"(e)\n",[67,67538,67539],{"class":69,"line":2501},[67,67540,177],{"emptyLinePlaceholder":176},[67,67542,67543,67545,67548],{"class":69,"line":2506},[67,67544,58781],{"class":77},[67,67546,67547],{"class":112},"dir",[67,67549,67550],{"class":77},"(e.target)\n",[67,67552,67553],{"class":69,"line":3298},[67,67554,177],{"emptyLinePlaceholder":176},[67,67556,67557],{"class":69,"line":3312},[67,67558,67559],{"class":202},"      \u002F\u002F 我们需求，我们只有点击li才会变色\n",[67,67561,67562],{"class":69,"line":3320},[67,67563,67564],{"class":202},"      \u002F\u002F 通过tagName来进行判断\n",[67,67566,67567,67569,67572,67574,67577],{"class":69,"line":3325},[67,67568,55017],{"class":73},[67,67570,67571],{"class":77}," (e.target.tagName ",[67,67573,55023],{"class":73},[67,67575,67576],{"class":84}," 'LI'",[67,67578,13160],{"class":77},[67,67580,67581,67584,67586],{"class":69,"line":3331},[67,67582,67583],{"class":77},"        e.target.style.color ",[67,67585,909],{"class":73},[67,67587,67588],{"class":84}," 'red'\n",[67,67590,67591],{"class":69,"line":3337},[67,67592,52935],{"class":77},[67,67594,67595],{"class":69,"line":3342},[67,67596,33998],{"class":77},[67,67598,67599,67601,67603],{"class":69,"line":8667},[67,67600,52954],{"class":77},[67,67602,52350],{"class":51837},[67,67604,51844],{"class":77},[67,67606,67607,67609,67611],{"class":69,"line":8691},[67,67608,52322],{"class":77},[67,67610,52337],{"class":51837},[67,67612,51844],{"class":77},[67,67614,67615],{"class":69,"line":8696},[67,67616,177],{"emptyLinePlaceholder":176},[67,67618,67619,67621,67623],{"class":69,"line":8702},[67,67620,52322],{"class":77},[67,67622,51172],{"class":51837},[67,67624,51844],{"class":77},[19,67626,67627],{},"当进行点击时，会获得事件对象的信息，这个对象中有一个属性为target，里边存放了点击的那个对象，然后target中又有属性值为tagName为所点击对象的名字，如果只想点击确定的对象实现某功能的话，就可以使用tagName来进行判断，对于p标签，只有点击p标签的时候执行效果，使用的是",[19,67629,67630],{},"if(e.target.ragName==='P') {}",[19,67632,67633],{},"一定要大写，可能写源码的人为了区分跟获取的p对象，才必须得大写",[19,67635,67636],{},"通过事件委托的方式实现tab栏切换改造：",[19,67638,67639],{},"一定要记住自定义属性！！！！！！",[19,67641,67642],{},"自定义属性内容都存放在了dataset这个属性中了，也就是获取值的时候就得",[19,67644,67645],{},"id是自定义的属性名",[19,67647,67648],{},"dataset.id 获取的是后面自定义属性的内容（标号），这些内容是个字符串，如果需要的是数字的话可以用parseint()，优先用隐式转换，直接在前加个+就ok",[57,67650,67652],{"className":51170,"code":67651,"language":51172,"meta":62,"style":62},"\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",[64,67653,67654,67664,67678,67682,67690,67704,67724,67744,67756,67764,67770,67780,67790,67794,67798,67804,67816,67828,67840,67856,67860,67864,67870,67882,67894,67906,67916,67926,67930,67934,67942,67954,67964,67976,67980,67984,67992,68002,68012,68022,68026,68030,68040,68054,68066,68070,68074,68086,68096,68112,68122,68126,68130,68144,68154,68164,68168,68172,68178,68192,68196,68200,68208,68218,68222,68226,68235,68245,68249,68257,68265,68269,68277,68291,68305,68317,68325,68364,68396,68428,68460,68492,68500,68508,68522,68556,68590,68624,68658,68692,68700,68708,68716,68721,68726,68745,68750,68770,68778,68783,68796,68817,68830,68834,68839,68844,68857,68877,68905,68909,68913,68917,68925,68933,68937],{"__ignoreMap":62},[67,67655,67656,67658,67660,67662],{"class":69,"line":70},[67,67657,51834],{"class":77},[67,67659,51838],{"class":51837},[67,67661,51841],{"class":112},[67,67663,51844],{"class":77},[67,67665,67666,67668,67670,67672,67674,67676],{"class":69,"line":143},[67,67667,1766],{"class":77},[67,67669,51172],{"class":51837},[67,67671,51853],{"class":112},[67,67673,909],{"class":77},[67,67675,51858],{"class":84},[67,67677,51844],{"class":77},[67,67679,67680],{"class":69,"line":149},[67,67681,177],{"emptyLinePlaceholder":176},[67,67683,67684,67686,67688],{"class":69,"line":155},[67,67685,1766],{"class":77},[67,67687,51871],{"class":51837},[67,67689,51844],{"class":77},[67,67691,67692,67694,67696,67698,67700,67702],{"class":69,"line":161},[67,67693,52681],{"class":77},[67,67695,51881],{"class":51837},[67,67697,51884],{"class":112},[67,67699,909],{"class":77},[67,67701,51889],{"class":84},[67,67703,59664],{"class":77},[67,67705,67706,67708,67710,67712,67714,67716,67718,67720,67722],{"class":69,"line":167},[67,67707,52681],{"class":77},[67,67709,51881],{"class":51837},[67,67711,51900],{"class":112},[67,67713,909],{"class":77},[67,67715,51905],{"class":84},[67,67717,51908],{"class":112},[67,67719,909],{"class":77},[67,67721,51913],{"class":84},[67,67723,59664],{"class":77},[67,67725,67726,67728,67730,67732,67734,67736,67738,67740,67742],{"class":69,"line":173},[67,67727,52681],{"class":77},[67,67729,51881],{"class":51837},[67,67731,15637],{"class":112},[67,67733,909],{"class":77},[67,67735,51928],{"class":84},[67,67737,51908],{"class":112},[67,67739,909],{"class":77},[67,67741,51935],{"class":84},[67,67743,59664],{"class":77},[67,67745,67746,67748,67750,67752,67754],{"class":69,"line":180},[67,67747,52681],{"class":77},[67,67749,51944],{"class":51837},[67,67751,64162],{"class":77},[67,67753,51944],{"class":51837},[67,67755,51844],{"class":77},[67,67757,67758,67760,67762],{"class":69,"line":186},[67,67759,52681],{"class":77},[67,67761,779],{"class":51837},[67,67763,51844],{"class":77},[67,67765,67766,67768],{"class":69,"line":444},[67,67767,7122],{"class":51837},[67,67769,16289],{"class":77},[67,67771,67772,67774,67776,67778],{"class":69,"line":2335},[67,67773,55243],{"class":208},[67,67775,51974],{"class":77},[67,67777,1051],{"class":208},[67,67779,2017],{"class":77},[67,67781,67782,67784,67786,67788],{"class":69,"line":2340},[67,67783,55232],{"class":208},[67,67785,51974],{"class":77},[67,67787,1051],{"class":208},[67,67789,2017],{"class":77},[67,67791,67792],{"class":69,"line":2346},[67,67793,2909],{"class":77},[67,67795,67796],{"class":69,"line":2351},[67,67797,177],{"emptyLinePlaceholder":176},[67,67799,67800,67802],{"class":69,"line":2365},[67,67801,64213],{"class":112},[67,67803,16289],{"class":77},[67,67805,67806,67808,67810,67812,67814],{"class":69,"line":2370},[67,67807,55308],{"class":208},[67,67809,51974],{"class":77},[67,67811,64224],{"class":208},[67,67813,52029],{"class":73},[67,67815,2017],{"class":77},[67,67817,67818,67820,67822,67824,67826],{"class":69,"line":2376},[67,67819,55322],{"class":208},[67,67821,51974],{"class":77},[67,67823,64237],{"class":208},[67,67825,52029],{"class":73},[67,67827,2017],{"class":77},[67,67829,67830,67832,67834,67836,67838],{"class":69,"line":2397},[67,67831,55243],{"class":208},[67,67833,51974],{"class":77},[67,67835,1556],{"class":208},[67,67837,52029],{"class":73},[67,67839,2017],{"class":77},[67,67841,67842,67844,67846,67848,67850,67852,67854],{"class":69,"line":2402},[67,67843,62514],{"class":208},[67,67845,51974],{"class":77},[67,67847,1077],{"class":208},[67,67849,52029],{"class":73},[67,67851,52058],{"class":208},[67,67853,62781],{"class":208},[67,67855,2017],{"class":77},[67,67857,67858],{"class":69,"line":2416},[67,67859,2909],{"class":77},[67,67861,67862],{"class":69,"line":2421},[67,67863,177],{"emptyLinePlaceholder":176},[67,67865,67866,67868],{"class":69,"line":2450},[67,67867,64282],{"class":112},[67,67869,16289],{"class":77},[67,67871,67872,67874,67876,67878,67880],{"class":69,"line":2455},[67,67873,55308],{"class":208},[67,67875,51974],{"class":77},[67,67877,1169],{"class":208},[67,67879,1186],{"class":73},[67,67881,2017],{"class":77},[67,67883,67884,67886,67888,67890,67892],{"class":69,"line":2472},[67,67885,55322],{"class":208},[67,67887,51974],{"class":77},[67,67889,1763],{"class":208},[67,67891,52029],{"class":73},[67,67893,2017],{"class":77},[67,67895,67896,67898,67900,67902,67904],{"class":69,"line":2477},[67,67897,57896],{"class":208},[67,67899,51974],{"class":77},[67,67901,1763],{"class":208},[67,67903,52029],{"class":73},[67,67905,2017],{"class":77},[67,67907,67908,67910,67912,67914],{"class":69,"line":2482},[67,67909,55546],{"class":208},[67,67911,51974],{"class":77},[67,67913,52014],{"class":208},[67,67915,2017],{"class":77},[67,67917,67918,67920,67922,67924],{"class":69,"line":2487},[67,67919,55557],{"class":208},[67,67921,51974],{"class":77},[67,67923,52205],{"class":208},[67,67925,2017],{"class":77},[67,67927,67928],{"class":69,"line":2501},[67,67929,2909],{"class":77},[67,67931,67932],{"class":69,"line":2506},[67,67933,177],{"emptyLinePlaceholder":176},[67,67935,67936,67938,67940],{"class":69,"line":3298},[67,67937,64282],{"class":112},[67,67939,64355],{"class":51837},[67,67941,16289],{"class":77},[67,67943,67944,67946,67948,67950,67952],{"class":69,"line":3312},[67,67945,55459],{"class":208},[67,67947,51974],{"class":77},[67,67949,1656],{"class":208},[67,67951,52029],{"class":73},[67,67953,2017],{"class":77},[67,67955,67956,67958,67960,67962],{"class":69,"line":3320},[67,67957,62871],{"class":208},[67,67959,51974],{"class":77},[67,67961,64378],{"class":208},[67,67963,2017],{"class":77},[67,67965,67966,67968,67970,67972,67974],{"class":69,"line":3325},[67,67967,62537],{"class":208},[67,67969,51974],{"class":77},[67,67971,1556],{"class":208},[67,67973,52029],{"class":73},[67,67975,2017],{"class":77},[67,67977,67978],{"class":69,"line":3331},[67,67979,2909],{"class":77},[67,67981,67982],{"class":69,"line":3337},[67,67983,177],{"emptyLinePlaceholder":176},[67,67985,67986,67988,67990],{"class":69,"line":3342},[67,67987,64282],{"class":112},[67,67989,61829],{"class":51837},[67,67991,16289],{"class":77},[67,67993,67994,67996,67998,68000],{"class":69,"line":8667},[67,67995,55269],{"class":208},[67,67997,51974],{"class":77},[67,67999,55274],{"class":208},[67,68001,2017],{"class":77},[67,68003,68004,68006,68008,68010],{"class":69,"line":8691},[67,68005,55546],{"class":208},[67,68007,51974],{"class":77},[67,68009,52014],{"class":208},[67,68011,2017],{"class":77},[67,68013,68014,68016,68018,68020],{"class":69,"line":8696},[67,68015,55557],{"class":208},[67,68017,51974],{"class":77},[67,68019,52117],{"class":208},[67,68021,2017],{"class":77},[67,68023,68024],{"class":69,"line":8702},[67,68025,2909],{"class":77},[67,68027,68028],{"class":69,"line":8729},[67,68029,177],{"emptyLinePlaceholder":176},[67,68031,68032,68034,68036,68038],{"class":69,"line":8734},[67,68033,64282],{"class":112},[67,68035,61829],{"class":51837},[67,68037,55612],{"class":51837},[67,68039,16289],{"class":77},[67,68041,68042,68044,68046,68048,68050,68052],{"class":69,"line":8740},[67,68043,55243],{"class":208},[67,68045,51974],{"class":77},[67,68047,1051],{"class":208},[67,68049,9669],{"class":208},[67,68051,52029],{"class":73},[67,68053,2017],{"class":77},[67,68055,68056,68058,68060,68062,68064],{"class":69,"line":8752},[67,68057,55459],{"class":208},[67,68059,51974],{"class":77},[67,68061,1406],{"class":208},[67,68063,52029],{"class":73},[67,68065,2017],{"class":77},[67,68067,68068],{"class":69,"line":8764},[67,68069,2909],{"class":77},[67,68071,68072],{"class":69,"line":8776},[67,68073,177],{"emptyLinePlaceholder":176},[67,68075,68076,68078,68080,68082,68084],{"class":69,"line":10435},[67,68077,64282],{"class":112},[67,68079,61829],{"class":51837},[67,68081,55612],{"class":51837},[67,68083,2122],{"class":51837},[67,68085,16289],{"class":77},[67,68087,68088,68090,68092,68094],{"class":69,"line":10459},[67,68089,64507],{"class":208},[67,68091,51974],{"class":77},[67,68093,55274],{"class":208},[67,68095,2017],{"class":77},[67,68097,68098,68100,68102,68104,68106,68108,68110],{"class":69,"line":10482},[67,68099,62769],{"class":208},[67,68101,51974],{"class":77},[67,68103,939],{"class":208},[67,68105,52029],{"class":73},[67,68107,52058],{"class":208},[67,68109,64528],{"class":208},[67,68111,2017],{"class":77},[67,68113,68114,68116,68118,68120],{"class":69,"line":10506},[67,68115,57953],{"class":208},[67,68117,51974],{"class":77},[67,68119,62906],{"class":208},[67,68121,2017],{"class":77},[67,68123,68124],{"class":69,"line":10511},[67,68125,2909],{"class":77},[67,68127,68128],{"class":69,"line":10516},[67,68129,177],{"emptyLinePlaceholder":176},[67,68131,68132,68134,68136,68138,68140,68142],{"class":69,"line":10521},[67,68133,64282],{"class":112},[67,68135,61829],{"class":51837},[67,68137,55612],{"class":51837},[67,68139,2122],{"class":51837},[67,68141,64561],{"class":112},[67,68143,16289],{"class":77},[67,68145,68146,68148,68150,68152],{"class":69,"line":10530},[67,68147,62328],{"class":208},[67,68149,51974],{"class":77},[67,68151,64572],{"class":208},[67,68153,2017],{"class":77},[67,68155,68156,68158,68160,68162],{"class":69,"line":10535},[67,68157,57953],{"class":208},[67,68159,51974],{"class":77},[67,68161,64572],{"class":208},[67,68163,2017],{"class":77},[67,68165,68166],{"class":69,"line":10541},[67,68167,2909],{"class":77},[67,68169,68170],{"class":69,"line":10562},[67,68171,177],{"emptyLinePlaceholder":176},[67,68173,68174,68176],{"class":69,"line":10568},[67,68175,64597],{"class":112},[67,68177,16289],{"class":77},[67,68179,68180,68182,68184,68186,68188,68190],{"class":69,"line":10582},[67,68181,55232],{"class":208},[67,68183,51974],{"class":77},[67,68185,1051],{"class":208},[67,68187,64610],{"class":208},[67,68189,52029],{"class":73},[67,68191,2017],{"class":77},[67,68193,68194],{"class":69,"line":10588},[67,68195,2909],{"class":77},[67,68197,68198],{"class":69,"line":10615},[67,68199,177],{"emptyLinePlaceholder":176},[67,68201,68202,68204,68206],{"class":69,"line":10624},[67,68203,64597],{"class":112},[67,68205,62711],{"class":112},[67,68207,16289],{"class":77},[67,68209,68210,68212,68214,68216],{"class":69,"line":10630},[67,68211,55546],{"class":208},[67,68213,51974],{"class":77},[67,68215,55274],{"class":208},[67,68217,2017],{"class":77},[67,68219,68220],{"class":69,"line":10638},[67,68221,2909],{"class":77},[67,68223,68224],{"class":69,"line":10643},[67,68225,177],{"emptyLinePlaceholder":176},[67,68227,68228,68230,68233],{"class":69,"line":17321},[67,68229,64597],{"class":112},[67,68231,68232],{"class":112}," .active",[67,68234,16289],{"class":77},[67,68236,68237,68239,68241,68243],{"class":69,"line":17327},[67,68238,55546],{"class":208},[67,68240,51974],{"class":77},[67,68242,61406],{"class":208},[67,68244,2017],{"class":77},[67,68246,68247],{"class":69,"line":17350},[67,68248,2909],{"class":77},[67,68250,68251,68253,68255],{"class":69,"line":17356},[67,68252,52954],{"class":77},[67,68254,779],{"class":51837},[67,68256,51844],{"class":77},[67,68258,68259,68261,68263],{"class":69,"line":17379},[67,68260,52322],{"class":77},[67,68262,51871],{"class":51837},[67,68264,51844],{"class":77},[67,68266,68267],{"class":69,"line":17393},[67,68268,177],{"emptyLinePlaceholder":176},[67,68270,68271,68273,68275],{"class":69,"line":17413},[67,68272,1766],{"class":77},[67,68274,52337],{"class":51837},[67,68276,51844],{"class":77},[67,68278,68279,68281,68283,68285,68287,68289],{"class":69,"line":17419},[67,68280,52681],{"class":77},[67,68282,52148],{"class":51837},[67,68284,54023],{"class":112},[67,68286,909],{"class":77},[67,68288,64712],{"class":84},[67,68290,51844],{"class":77},[67,68292,68293,68295,68297,68299,68301,68303],{"class":69,"line":17430},[67,68294,51878],{"class":77},[67,68296,52148],{"class":51837},[67,68298,54023],{"class":112},[67,68300,909],{"class":77},[67,68302,64727],{"class":84},[67,68304,51844],{"class":77},[67,68306,68307,68309,68311,68313,68315],{"class":69,"line":17453},[67,68308,55771],{"class":77},[67,68310,14],{"class":51837},[67,68312,64738],{"class":77},[67,68314,14],{"class":51837},[67,68316,51844],{"class":77},[67,68318,68319,68321,68323],{"class":69,"line":17475},[67,68320,55771],{"class":77},[67,68322,1863],{"class":51837},[67,68324,51844],{"class":77},[67,68326,68327,68329,68331,68333,68335,68337,68339,68341,68343,68345,68347,68349,68351,68354,68356,68358,68360,68362],{"class":69,"line":17480},[67,68328,55839],{"class":77},[67,68330,818],{"class":51837},[67,68332,61589],{"class":77},[67,68334,28],{"class":51837},[67,68336,54023],{"class":112},[67,68338,909],{"class":77},[67,68340,60243],{"class":84},[67,68342,61594],{"class":112},[67,68344,909],{"class":77},[67,68346,64773],{"class":84},[67,68348,54488],{"class":112},[67,68350,909],{"class":77},[67,68352,68353],{"class":84},"\"0\"",[67,68355,64776],{"class":77},[67,68357,28],{"class":51837},[67,68359,55851],{"class":77},[67,68361,818],{"class":51837},[67,68363,51844],{"class":77},[67,68365,68366,68368,68370,68372,68374,68376,68378,68380,68382,68384,68386,68388,68390,68392,68394],{"class":69,"line":17486},[67,68367,55839],{"class":77},[67,68369,818],{"class":51837},[67,68371,61589],{"class":77},[67,68373,28],{"class":51837},[67,68375,61594],{"class":112},[67,68377,909],{"class":77},[67,68379,64773],{"class":84},[67,68381,54488],{"class":112},[67,68383,909],{"class":77},[67,68385,4398],{"class":84},[67,68387,64803],{"class":77},[67,68389,28],{"class":51837},[67,68391,55851],{"class":77},[67,68393,818],{"class":51837},[67,68395,51844],{"class":77},[67,68397,68398,68400,68402,68404,68406,68408,68410,68412,68414,68416,68418,68420,68422,68424,68426],{"class":69,"line":17500},[67,68399,55839],{"class":77},[67,68401,818],{"class":51837},[67,68403,61589],{"class":77},[67,68405,28],{"class":51837},[67,68407,61594],{"class":112},[67,68409,909],{"class":77},[67,68411,64773],{"class":84},[67,68413,54488],{"class":112},[67,68415,909],{"class":77},[67,68417,4421],{"class":84},[67,68419,64830],{"class":77},[67,68421,28],{"class":51837},[67,68423,55851],{"class":77},[67,68425,818],{"class":51837},[67,68427,51844],{"class":77},[67,68429,68430,68432,68434,68436,68438,68440,68442,68444,68446,68448,68450,68452,68454,68456,68458],{"class":69,"line":17513},[67,68431,55839],{"class":77},[67,68433,818],{"class":51837},[67,68435,61589],{"class":77},[67,68437,28],{"class":51837},[67,68439,61594],{"class":112},[67,68441,909],{"class":77},[67,68443,64773],{"class":84},[67,68445,54488],{"class":112},[67,68447,909],{"class":77},[67,68449,4434],{"class":84},[67,68451,64857],{"class":77},[67,68453,28],{"class":51837},[67,68455,55851],{"class":77},[67,68457,818],{"class":51837},[67,68459,51844],{"class":77},[67,68461,68462,68464,68466,68468,68470,68472,68474,68476,68478,68480,68482,68484,68486,68488,68490],{"class":69,"line":17518},[67,68463,55839],{"class":77},[67,68465,818],{"class":51837},[67,68467,61589],{"class":77},[67,68469,28],{"class":51837},[67,68471,61594],{"class":112},[67,68473,909],{"class":77},[67,68475,64773],{"class":84},[67,68477,54488],{"class":112},[67,68479,909],{"class":77},[67,68481,4447],{"class":84},[67,68483,64884],{"class":77},[67,68485,28],{"class":51837},[67,68487,55851],{"class":77},[67,68489,818],{"class":51837},[67,68491,51844],{"class":77},[67,68493,68494,68496,68498],{"class":69,"line":17532},[67,68495,55944],{"class":77},[67,68497,1863],{"class":51837},[67,68499,51844],{"class":77},[67,68501,68502,68504,68506],{"class":69,"line":17537},[67,68503,52313],{"class":77},[67,68505,52148],{"class":51837},[67,68507,51844],{"class":77},[67,68509,68510,68512,68514,68516,68518,68520],{"class":69,"line":17543},[67,68511,51878],{"class":77},[67,68513,52148],{"class":51837},[67,68515,54023],{"class":112},[67,68517,909],{"class":77},[67,68519,64921],{"class":84},[67,68521,51844],{"class":77},[67,68523,68524,68526,68528,68530,68532,68534,68536,68538,68540,68542,68544,68546,68548,68550,68552,68554],{"class":69,"line":17548},[67,68525,55771],{"class":77},[67,68527,52148],{"class":51837},[67,68529,54023],{"class":112},[67,68531,909],{"class":77},[67,68533,64936],{"class":84},[67,68535,61589],{"class":77},[67,68537,725],{"class":51837},[67,68539,55776],{"class":112},[67,68541,909],{"class":77},[67,68543,64947],{"class":84},[67,68545,55784],{"class":112},[67,68547,909],{"class":77},[67,68549,8371],{"class":84},[67,68551,64956],{"class":77},[67,68553,52148],{"class":51837},[67,68555,51844],{"class":77},[67,68557,68558,68560,68562,68564,68566,68568,68570,68572,68574,68576,68578,68580,68582,68584,68586,68588],{"class":69,"line":17562},[67,68559,55771],{"class":77},[67,68561,52148],{"class":51837},[67,68563,54023],{"class":112},[67,68565,909],{"class":77},[67,68567,63160],{"class":84},[67,68569,61589],{"class":77},[67,68571,725],{"class":51837},[67,68573,55776],{"class":112},[67,68575,909],{"class":77},[67,68577,64983],{"class":84},[67,68579,55784],{"class":112},[67,68581,909],{"class":77},[67,68583,8371],{"class":84},[67,68585,64956],{"class":77},[67,68587,52148],{"class":51837},[67,68589,51844],{"class":77},[67,68591,68592,68594,68596,68598,68600,68602,68604,68606,68608,68610,68612,68614,68616,68618,68620,68622],{"class":69,"line":17567},[67,68593,55771],{"class":77},[67,68595,52148],{"class":51837},[67,68597,54023],{"class":112},[67,68599,909],{"class":77},[67,68601,63160],{"class":84},[67,68603,61589],{"class":77},[67,68605,725],{"class":51837},[67,68607,55776],{"class":112},[67,68609,909],{"class":77},[67,68611,65018],{"class":84},[67,68613,55784],{"class":112},[67,68615,909],{"class":77},[67,68617,8371],{"class":84},[67,68619,64956],{"class":77},[67,68621,52148],{"class":51837},[67,68623,51844],{"class":77},[67,68625,68626,68628,68630,68632,68634,68636,68638,68640,68642,68644,68646,68648,68650,68652,68654,68656],{"class":69,"line":17572},[67,68627,55771],{"class":77},[67,68629,52148],{"class":51837},[67,68631,54023],{"class":112},[67,68633,909],{"class":77},[67,68635,63160],{"class":84},[67,68637,61589],{"class":77},[67,68639,725],{"class":51837},[67,68641,55776],{"class":112},[67,68643,909],{"class":77},[67,68645,65053],{"class":84},[67,68647,55784],{"class":112},[67,68649,909],{"class":77},[67,68651,8371],{"class":84},[67,68653,64956],{"class":77},[67,68655,52148],{"class":51837},[67,68657,51844],{"class":77},[67,68659,68660,68662,68664,68666,68668,68670,68672,68674,68676,68678,68680,68682,68684,68686,68688,68690],{"class":69,"line":17586},[67,68661,55771],{"class":77},[67,68663,52148],{"class":51837},[67,68665,54023],{"class":112},[67,68667,909],{"class":77},[67,68669,63160],{"class":84},[67,68671,61589],{"class":77},[67,68673,725],{"class":51837},[67,68675,55776],{"class":112},[67,68677,909],{"class":77},[67,68679,65088],{"class":84},[67,68681,55784],{"class":112},[67,68683,909],{"class":77},[67,68685,8371],{"class":84},[67,68687,64956],{"class":77},[67,68689,52148],{"class":51837},[67,68691,51844],{"class":77},[67,68693,68694,68696,68698],{"class":69,"line":17598},[67,68695,52313],{"class":77},[67,68697,52148],{"class":51837},[67,68699,51844],{"class":77},[67,68701,68702,68704,68706],{"class":69,"line":17603},[67,68703,52954],{"class":77},[67,68705,52148],{"class":51837},[67,68707,51844],{"class":77},[67,68709,68710,68712,68714],{"class":69,"line":17616},[67,68711,52681],{"class":77},[67,68713,52350],{"class":51837},[67,68715,51844],{"class":77},[67,68717,68718],{"class":69,"line":17621},[67,68719,68720],{"class":202},"    \u002F\u002F 采取事件委托的形式，tab栏切换\n",[67,68722,68723],{"class":69,"line":17626},[67,68724,68725],{"class":202},"    \u002F\u002F 1.获取ul父元素，因为ul只有一个\n",[67,68727,68728,68730,68732,68734,68736,68738,68740,68743],{"class":69,"line":17631},[67,68729,11939],{"class":73},[67,68731,61829],{"class":208},[67,68733,14282],{"class":73},[67,68735,54933],{"class":77},[67,68737,54936],{"class":112},[67,68739,864],{"class":77},[67,68741,68742],{"class":84},"'.tab-nav ul'",[67,68744,870],{"class":77},[67,68746,68747],{"class":69,"line":17644},[67,68748,68749],{"class":202},"    \u002F\u002F 2.添加事件\n",[67,68751,68752,68754,68756,68758,68760,68762,68764,68766,68768],{"class":69,"line":17649},[67,68753,67491],{"class":77},[67,68755,58350],{"class":112},[67,68757,864],{"class":77},[67,68759,58355],{"class":84},[67,68761,13153],{"class":77},[67,68763,54986],{"class":73},[67,68765,2381],{"class":77},[67,68767,936],{"class":5935},[67,68769,13160],{"class":77},[67,68771,68772,68774,68776],{"class":69,"line":33170},[67,68773,58781],{"class":77},[67,68775,67547],{"class":112},[67,68777,67550],{"class":77},[67,68779,68780],{"class":69,"line":33176},[67,68781,68782],{"class":202},"      \u002F\u002Fe.targer是我们点击的对象\n",[67,68784,68785,68787,68789,68791,68794],{"class":69,"line":33182},[67,68786,55017],{"class":73},[67,68788,67571],{"class":77},[67,68790,55023],{"class":73},[67,68792,68793],{"class":84}," 'A'",[67,68795,13160],{"class":77},[67,68797,68798,68800,68802,68804,68807,68809,68811,68813,68815],{"class":69,"line":33188},[67,68799,52462],{"class":77},[67,68801,54936],{"class":112},[67,68803,864],{"class":77},[67,68805,68806],{"class":84},"'.active'",[67,68808,57540],{"class":77},[67,68810,57543],{"class":112},[67,68812,864],{"class":77},[67,68814,65251],{"class":84},[67,68816,870],{"class":77},[67,68818,68819,68822,68824,68826,68828],{"class":69,"line":33194},[67,68820,68821],{"class":77},"        e.target.classList.",[67,68823,6053],{"class":112},[67,68825,864],{"class":77},[67,68827,65251],{"class":84},[67,68829,870],{"class":77},[67,68831,68832],{"class":69,"line":33205},[67,68833,177],{"emptyLinePlaceholder":176},[67,68835,68836],{"class":69,"line":33211},[67,68837,68838],{"class":202},"        \u002F\u002F 下面大盒子模块\n",[67,68840,68841],{"class":69,"line":33231},[67,68842,68843],{"class":202},"        \u002F\u002F console.log(e.target.dataset.id)\n",[67,68845,68846,68848,68850,68852,68854],{"class":69,"line":33237},[67,68847,61807],{"class":73},[67,68849,3752],{"class":208},[67,68851,14282],{"class":73},[67,68853,46103],{"class":73},[67,68855,68856],{"class":77},"e.target.dataset.id\n",[67,68858,68859,68861,68863,68865,68867,68869,68871,68873,68875],{"class":69,"line":33248},[67,68860,52462],{"class":77},[67,68862,54936],{"class":112},[67,68864,864],{"class":77},[67,68866,65299],{"class":84},[67,68868,57540],{"class":77},[67,68870,57543],{"class":112},[67,68872,864],{"class":77},[67,68874,65251],{"class":84},[67,68876,870],{"class":77},[67,68878,68879,68881,68883,68885,68887,68889,68891,68893,68895,68897,68899,68901,68903],{"class":69,"line":33254},[67,68880,52462],{"class":77},[67,68882,54936],{"class":112},[67,68884,864],{"class":77},[67,68886,65325],{"class":84},[67,68888,1298],{"class":77},[67,68890,46103],{"class":73},[67,68892,25828],{"class":208},[67,68894,57569],{"class":84},[67,68896,57540],{"class":77},[67,68898,6053],{"class":112},[67,68900,864],{"class":77},[67,68902,65251],{"class":84},[67,68904,870],{"class":77},[67,68906,68907],{"class":69,"line":33260},[67,68908,177],{"emptyLinePlaceholder":176},[67,68910,68911],{"class":69,"line":33266},[67,68912,52935],{"class":77},[67,68914,68915],{"class":69,"line":33272},[67,68916,33998],{"class":77},[67,68918,68919,68921,68923],{"class":69,"line":33278},[67,68920,52954],{"class":77},[67,68922,52350],{"class":51837},[67,68924,51844],{"class":77},[67,68926,68927,68929,68931],{"class":69,"line":33284},[67,68928,52322],{"class":77},[67,68930,52337],{"class":51837},[67,68932,51844],{"class":77},[67,68934,68935],{"class":69,"line":33290},[67,68936,177],{"emptyLinePlaceholder":176},[67,68938,68939,68941,68943],{"class":69,"line":33310},[67,68940,52322],{"class":77},[67,68942,51172],{"class":51837},[67,68944,51844],{"class":77},[14,68946,68948],{"id":68947},"_333-页面加载事件","3.3.3 页面加载事件",[815,68950,68951],{},[818,68952,68953],{},"load",[19,68955,68956],{},[725,68957],{"alt":62,"src":68958},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-140.png",[19,68960,68961],{},"window代表整个窗口，比document还要大",[19,68963,68964],{},"并不一定非得window才可以用，其他的DOM对象也可以用",[19,68966,68967],{},"img.addEventListener('load', function () {",[19,68969,68970],{},"\u002F\u002F 等待图片加载完毕，再去执行里面的代码",[19,68972,53001],{},[815,68974,68975],{"start":143},[818,68976,68977],{},"DOMContentLoaded",[19,68979,68980],{},[725,68981],{"alt":62,"src":68982},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-141.png",[19,68984,68985],{},"这个主要是给html标签，给的是文档进行处理的，所以不是对整个页面，不是window,是document",[14,68987,68989],{"id":68988},"_334-元素滚动事件","3.3.4 元素滚动事件",[19,68991,68992],{},[725,68993],{"alt":62,"src":68994},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-142.png",[19,68996,68997],{},[725,68998],{"alt":62,"src":68999},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-143.png",[19,69001,69002],{},[725,69003],{"alt":62,"src":69004},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-144.png",[19,69006,69007],{},"scrollTop和scrollLeft都是属性，他不是方法，所以后面不需要加括号",[19,69009,69010],{},"获得的是数字型数据，不带单位",[19,69012,69013],{},"scrollTop可读写，既可以获得数据，也可以进行赋值操作",[19,69015,69016],{},"body作为document的属性可以直接通过document.boby进行获取，但是html不可以这样获取",[19,69018,69019],{},"它是通过document.documentElement来获取",[19,69021,69022],{},[725,69023],{"alt":62,"src":69024},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-145.png",[19,69026,69027],{},"让页面滚动，scrollTo()是方法，上边那个scrollTop是属性值",[14,69029,69031],{"id":69030},"_335-页面缩放事件","3.3.5 页面缩放事件",[19,69033,69034],{},[725,69035],{"alt":62,"src":69036},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-146.png",[19,69038,69039],{},[725,69040],{"alt":62,"src":69041},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-147.png",[14,69043,69045],{"id":69044},"_336-元素尺寸位置","3.3.6 元素尺寸位置",[19,69047,69048],{},[725,69049],{"alt":62,"src":69050},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-148.png",[19,69052,69053],{},"offsetWidth和offsetHeight相比于clientWidth和clientHeight来说多了包含边框",[19,69055,69056],{},[725,69057],{"alt":62,"src":69058},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-149.png",[19,69060,69061],{},"scrollLeft和scrollTop与滚动有关系，是读写的，而offsetLeft和offsetTop与盒子的位置有关系，只可以读取，不可以进行赋值操作",[19,69063,69064],{},"offsetTop和offsetLeft 得到位置以带有定位的父级为准，如果都没有则以 文档左上角为准",[19,69066,69067],{},"pageX和pageY可以获取鼠标在页面中的坐标，要搭配事件对象使用",[19,69069,69070],{},"大盒子中套了一个小盒子，大盒子为相对定位，小盒子为绝对定位，则我对小盒子使用offsetTop和offsetLeft获取的位置是从小盒子的外边框到大盒子的内边框的距离，如果我们想获得小盒子在浏览器页面的位置可以使用 getBoundingClientRect() 这个函数不会受定位盒子的影响",[19,69072,69073],{},"getBoundingClientRect()这个方法得到的是一个对象，包含left,top等属性",[19,69075,69076],{},[725,69077],{"alt":62,"src":69078},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-150.png",[19,69080,69081],{},"getBoundingClientRect()是相对于浏览器可视页面的距离，滚动条稍微向下滚动一些，getBoundingClientRect().top的值就不准了，如果想得到鼠标在盒子中的y方向的距离，此时需要：e.pageY-box.getBoundingClientRect().top-document.documentElement.scrollTop",[19,69083,69084],{},"多减一下滚动的距离(HTML文档在window窗口内滚动的距离)，就可以得到鼠标在box盒子中相对父盒子的距离",[19,69086,69087],{},"浏览器页面由于基本不会进行左右拖动，可以不用考虑这方面的因素，鼠标相对于浏览器可视区域左侧的距离为：",[19,69089,69090],{},"e.pageX-box.getBoundingClientRect()",[14,69092,69094],{"id":69093},"_337-获取元素位置的另一种方法","3.3.7 获取元素位置的另一种方法",[19,69096,69097],{},[725,69098],{"alt":62,"src":69099},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-151.png",[19,69101,69102],{},"这个是相对于视口来说的，它是个方法，不是属性值",[14,69104,69106],{"id":69105},"_338-总结","3.3.8 总结",[19,69108,69109],{},[725,69110],{"alt":62,"src":69111},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-152.png",[19,69113,69114],{},"clientWidth\u002FclientHeight和offsetWidth\u002FoffsetHeight都是可读的，不能进行赋值操作",[19,69116,69117],{},"修改盒子的宽高只能通过width和height来实现",[14,69119,69121],{"id":69120},"_339-页面滚动丝滑css写法","3.3.9 页面滚动丝滑css写法",[57,69123,69125],{"className":51170,"code":69124,"language":51172,"meta":62,"style":62},"\u002F* 页面滑动 *\u002F\nhtml {\n  \u002F* 让滚动条丝滑的滚动 *\u002F\n  scroll-behavior: smooth;\n}\n",[64,69126,69127,69132,69137,69142,69147],{"__ignoreMap":62},[67,69128,69129],{"class":69,"line":70},[67,69130,69131],{"class":77},"\u002F* 页面滑动 *\u002F\n",[67,69133,69134],{"class":69,"line":143},[67,69135,69136],{"class":77},"html {\n",[67,69138,69139],{"class":69,"line":149},[67,69140,69141],{"class":77},"  \u002F* 让滚动条丝滑的滚动 *\u002F\n",[67,69143,69144],{"class":69,"line":155},[67,69145,69146],{"class":77},"  scroll-behavior: smooth;\n",[67,69148,69149],{"class":69,"line":161},[67,69150,2288],{"class":77},[19,69152,69153],{},"默认是auto",[14,69155,69157],{"id":69156},"_3310-日期对象","3.3.10 日期对象",[40,69159,69161],{"id":69160},"_33101-实例化","3.3.10.1 实例化",[19,69163,69164],{},[725,69165],{"alt":62,"src":69166},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-153.png",[40,69168,69170],{"id":69169},"_33102-时期对象方法","3.3.10.2 时期对象方法",[19,69172,69173],{},[725,69174],{"alt":62,"src":69175},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-154.png",[19,69177,69178],{},"月份+1",[19,69180,69181],{},"老外认为第一天为0，星期天",[19,69183,69184],{},"方法使用的时候必须要跟括号",[19,69186,69187],{},"快速获得日期",[19,69189,69190],{},"\u002F\u002F 得到年月日",[19,69192,69193],{},"\u002F\u002F div.innerHTML = date.toLocaleDateString()",[19,69195,69196],{},"\u002F\u002F 得到当地日期",[19,69198,69199],{},"\u002F\u002F div.innerHTML = date.toLocaleString()",[19,69201,69202],{},"\u002F\u002F 得到当地时间",[19,69204,69205],{},"\u002F\u002F div.innerHTML = date.toLocaleTimeString()",[19,69207,69208],{},"注意再使用定时器时，在定时器外也写一个获得时间，不然刷新浏览器刚开始由于定时器要间隔一段时间采取调用函数，会导致一开始不显示",[19,69210,69211],{},"如果不考虑快速的方式，要设置自己的样式的话，自己封装一个函数！！！",[52350,69213,69214],{},"\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,69216,69217],{},"学会去封装函数！",[40,69219,69221],{"id":69220},"_33103-时间戳","3.3.10.3 时间戳",[19,69223,69224],{},[725,69225],{"alt":62,"src":69226},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-155.png",[19,69228,69229],{},[725,69230],{"alt":62,"src":69231},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-156.png",[19,69233,69234],{},"三种方法记住一个就可以",[14,69236,69238],{"id":69237},"_3311-节点操作","3.3.11 节点操作",[40,69240,69242],{"id":69241},"_33111-dom节点","3.3.11.1 DOM节点",[19,69244,69245],{},[725,69246],{"alt":62,"src":69247},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-157.png",[19,69249,69250],{},"我们主要用的就是元素节点，因为对元素节点操作就可以实现对标签内容样式的修改，就不需要使用属性节点和文本节点来操作了，后边的增删改查都是对元素节点来进行操作的",[40,69252,69254],{"id":69253},"_33112-查找节点","3.3.11.2 查找节点",[19,69256,69257],{},"前边的document.querySelector()是获取的元素",[19,69259,69260],{},"这里是通过关系来获取！！！，就是正常通过document.querySelector()获取元素，这个元素是个对象，此时他的父亲儿子啥的就不用再使用document.querySelector()来获取了，直接通过关系来获取",[19,69262,69263],{},[725,69264],{"alt":62,"src":69265},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-158.png",[815,69267,69268],{},[818,69269,69270],{},"父节点",[19,69272,69273],{},[725,69274],{"alt":62,"src":69275},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-159.png",[815,69277,69278],{"start":143},[818,69279,69280],{},"子节点",[19,69282,69283],{},[725,69284],{"alt":62,"src":69285},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-160.png",[19,69287,69288],{},"如果使用childNodes来获得子节点，还包括文本节点、注释节点等，但是这些对我们来说没啥用，所以children来获取子节点，他就是个标签",[19,69290,69291],{},"children获得的是伪数组，是亲儿子",[815,69293,69294],{"start":149},[818,69295,69296],{},"兄弟节点",[19,69298,69299],{},[725,69300],{"alt":62,"src":69301},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-161.png",[40,69303,69305],{"id":69304},"_33113-增加节点","3.3.11.3 增加节点",[19,69307,69308],{},[725,69309],{"alt":62,"src":69310},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-162.png",[19,69312,69313],{},"创建好之后给它通过innerHTML添加内容是不显示的内容的，因为只是创建了节点，还不知道节点在哪里",[19,69315,69316],{},[725,69317],{"alt":62,"src":69318},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-163.png",[19,69320,69321],{},"在主体板块制作时，就是将各个信息写成数组对象的形式，然后利用循环来添加和追加节点，并将信息使用innerHTML来实现效果输出，因为innerHTML可以实现对标签的解析",[19,69323,69324],{},"下面是写法的部分展示，就按照下边的格式来写",[19,69326,69327],{},"例：",[52350,69329,69330],{},"\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,69332,69333],{},[725,69334],{"alt":62,"src":69335},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-164.png",[19,69337,69338],{},"false只克隆标签，里边的内容不会克隆过来",[57,69340,69342],{"className":51170,"code":69341,"language":51172,"meta":62,"style":62},"    ul.appendChild(ul.children[1].cloneNode(true))\n",[64,69343,69344],{"__ignoreMap":62},[67,69345,69346],{"class":69,"line":70},[67,69347,69341],{"class":77},[40,69349,69351],{"id":69350},"_33114-删除节点","3.3.11.4 删除节点",[19,69353,69354],{},[725,69355],{"alt":62,"src":69356},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-165.png",[19,69358,69359],{},"父亲删儿子",[19,69361,69362],{},"removeChild是真删除节点了，直接从HTML中删除了；而display: none;只是隐藏起来了盒子，而且还不占位置",[14,69364,69366],{"id":69365},"_3312-m端事件","3.3.12 M端事件",[19,69368,69369],{},"M端就是移动端",[19,69371,69372],{},[725,69373],{"alt":62,"src":69374},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-166.png",[14,69376,69378],{"id":69377},"_3313-插件","3.3.13 插件",[19,69380,69381],{},"要熟悉官网！！！",[19,69383,69384],{},[28,69385,69386],{"href":69386,"rel":69387},"https:\u002F\u002Fwww.swiper.com.cn\u002F",[32],[19,69389,69390],{},[28,69391,69392],{"href":69392,"rel":69393},"https:\u002F\u002Fwww.swiper.com.cn\u002Fdemo\u002Findex.html",[32],[14,69395,69397],{"id":69396},"_3314-学生信息表","3.3.14 学生信息表",[815,69399,69400,69403,69406,69409,69412,69415,69418,69421],{},[818,69401,69402],{},"对于表单元素，添加事件监听的时候，事件类型应当为submit，即给form标签添加事件监听，事件类型为submit",[818,69404,69405],{},"提交表单的时候不能跳转刷新，应当使用阻止跳转 e.preventDefault() 点任何地方都不可以跳转",[818,69407,69408],{},"在提交信息之后内容填写的内容应当清空，清空的操作(this就是指的form,因为是对它添加的事件监听)：this.reset()",[818,69410,69411],{},"用好表单元素自带的属性，value,name等",[818,69413,69414],{},"删除操作的时不要删DOM节点，删除的是数组中的数据，要使用的是自定义属性，让它自己生成，循环的时候加上自定义属性",[818,69416,69417],{},"不要忘记事件对象",[818,69419,69420],{},"selecte选择标签，里边的option的value一定要写，不然通过.value的形式获取不到值",[818,69422,69423],{},"表单元素不要具备记录标签，就是过段事件点击填写，不显示上次输入的内容：给form的属性autocomplete设为off，这个属性两个值，on是记录，off是不记录",[19,69425,69426],{},"结构：",[57,69428,69430],{"className":51170,"code":69429,"language":51172,"meta":62,"style":62},"\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",[64,69431,69432,69442,69456,69460,69468,69482,69502,69523,69536,69560,69568,69572,69580,69593,69614,69642,69670,69675,69697,69717,69736,69744,69772,69794,69814,69834,69854,69874,69894,69902,69922,69930,69934,69947,69955,69963,69971,69984,69997,70010,70023,70036,70049,70062,70070,70078,70086,70091,70096,70101,70106,70111,70116,70121,70126,70131,70136,70141,70146,70151,70159,70167,70175,70179,70199,70218,70238,70258,70278,70298,70302,70307,70327,70332,70342,70347,70352,70372,70394,70399,70409,70413,70417,70422,70427,70456,70470,70485,70489,70493,70497,70502,70513,70526,70531,70536,70541,70546,70551,70555,70560,70565,70574,70579,70584,70596,70601,70608,70612,70617,70627,70632,70642,70647,70675,70696,70706,70726,70744,70761,70778,70795,70812,70816,70826,70831,70836,70841,70852,70856,70860,70864,70869,70874,70895,70907,70912,70917,70922,70936,70941,70948,70952,70956,70964,70968,70976,70980],{"__ignoreMap":62},[67,69433,69434,69436,69438,69440],{"class":69,"line":70},[67,69435,51834],{"class":77},[67,69437,51838],{"class":51837},[67,69439,51841],{"class":112},[67,69441,51844],{"class":77},[67,69443,69444,69446,69448,69450,69452,69454],{"class":69,"line":143},[67,69445,1766],{"class":77},[67,69447,51172],{"class":51837},[67,69449,51853],{"class":112},[67,69451,909],{"class":77},[67,69453,51858],{"class":84},[67,69455,51844],{"class":77},[67,69457,69458],{"class":69,"line":149},[67,69459,177],{"emptyLinePlaceholder":176},[67,69461,69462,69464,69466],{"class":69,"line":155},[67,69463,1766],{"class":77},[67,69465,51871],{"class":51837},[67,69467,51844],{"class":77},[67,69469,69470,69472,69474,69476,69478,69480],{"class":69,"line":161},[67,69471,52681],{"class":77},[67,69473,51881],{"class":51837},[67,69475,51884],{"class":112},[67,69477,909],{"class":77},[67,69479,51889],{"class":84},[67,69481,59664],{"class":77},[67,69483,69484,69486,69488,69490,69492,69494,69496,69498,69500],{"class":69,"line":167},[67,69485,52681],{"class":77},[67,69487,51881],{"class":51837},[67,69489,15637],{"class":112},[67,69491,909],{"class":77},[67,69493,51928],{"class":84},[67,69495,51908],{"class":112},[67,69497,909],{"class":77},[67,69499,51935],{"class":84},[67,69501,59664],{"class":77},[67,69503,69504,69506,69508,69510,69512,69514,69516,69518,69521],{"class":69,"line":173},[67,69505,52681],{"class":77},[67,69507,51881],{"class":51837},[67,69509,51900],{"class":112},[67,69511,909],{"class":77},[67,69513,51905],{"class":84},[67,69515,51908],{"class":112},[67,69517,909],{"class":77},[67,69519,69520],{"class":84},"\"ie=edge\"",[67,69522,59664],{"class":77},[67,69524,69525,69527,69529,69532,69534],{"class":69,"line":180},[67,69526,52681],{"class":77},[67,69528,51944],{"class":51837},[67,69530,69531],{"class":77},">学生信息管理\u003C\u002F",[67,69533,51944],{"class":51837},[67,69535,51844],{"class":77},[67,69537,69538,69540,69543,69546,69548,69551,69553,69555,69558],{"class":69,"line":186},[67,69539,52681],{"class":77},[67,69541,69542],{"class":51837},"link",[67,69544,69545],{"class":112}," rel",[67,69547,909],{"class":77},[67,69549,69550],{"class":84},"\"stylesheet\"",[67,69552,61594],{"class":112},[67,69554,909],{"class":77},[67,69556,69557],{"class":84},"\"css\u002Findex.css\"",[67,69559,59664],{"class":77},[67,69561,69562,69564,69566],{"class":69,"line":444},[67,69563,52322],{"class":77},[67,69565,51871],{"class":51837},[67,69567,51844],{"class":77},[67,69569,69570],{"class":69,"line":2335},[67,69571,177],{"emptyLinePlaceholder":176},[67,69573,69574,69576,69578],{"class":69,"line":2340},[67,69575,1766],{"class":77},[67,69577,52337],{"class":51837},[67,69579,51844],{"class":77},[67,69581,69582,69584,69586,69589,69591],{"class":69,"line":2346},[67,69583,52681],{"class":77},[67,69585,10],{"class":51837},[67,69587,69588],{"class":77},">新增学员\u003C\u002F",[67,69590,10],{"class":51837},[67,69592,51844],{"class":77},[67,69594,69595,69597,69599,69601,69603,69605,69608,69610,69612],{"class":69,"line":2351},[67,69596,52681],{"class":77},[67,69598,67162],{"class":51837},[67,69600,54023],{"class":112},[67,69602,909],{"class":77},[67,69604,63201],{"class":84},[67,69606,69607],{"class":112}," autocomplete",[67,69609,909],{"class":77},[67,69611,32313],{"class":84},[67,69613,51844],{"class":77},[67,69615,69616,69619,69621,69623,69625,69627,69629,69631,69634,69636,69638,69640],{"class":69,"line":2365},[67,69617,69618],{"class":77},"    姓名：\u003C",[67,69620,54358],{"class":51837},[67,69622,54361],{"class":112},[67,69624,909],{"class":77},[67,69626,63236],{"class":84},[67,69628,54023],{"class":112},[67,69630,909],{"class":77},[67,69632,69633],{"class":84},"\"uname\"",[67,69635,15637],{"class":112},[67,69637,909],{"class":77},[67,69639,69633],{"class":84},[67,69641,59664],{"class":77},[67,69643,69644,69647,69649,69651,69653,69655,69657,69659,69662,69664,69666,69668],{"class":69,"line":2370},[67,69645,69646],{"class":77},"    年龄：\u003C",[67,69648,54358],{"class":51837},[67,69650,54361],{"class":112},[67,69652,909],{"class":77},[67,69654,63236],{"class":84},[67,69656,54023],{"class":112},[67,69658,909],{"class":77},[67,69660,69661],{"class":84},"\"age\"",[67,69663,15637],{"class":112},[67,69665,909],{"class":77},[67,69667,69661],{"class":84},[67,69669,59664],{"class":77},[67,69671,69672],{"class":69,"line":2376},[67,69673,69674],{"class":77},"    性别:\n",[67,69676,69677,69679,69682,69684,69686,69689,69691,69693,69695],{"class":69,"line":2397},[67,69678,51878],{"class":77},[67,69680,69681],{"class":51837},"select",[67,69683,15637],{"class":112},[67,69685,909],{"class":77},[67,69687,69688],{"class":84},"\"gender\"",[67,69690,54023],{"class":112},[67,69692,909],{"class":77},[67,69694,69688],{"class":84},[67,69696,51844],{"class":77},[67,69698,69699,69701,69704,69706,69708,69710,69713,69715],{"class":69,"line":2402},[67,69700,55771],{"class":77},[67,69702,69703],{"class":51837},"option",[67,69705,67188],{"class":112},[67,69707,909],{"class":77},[67,69709,10679],{"class":84},[67,69711,69712],{"class":77},">男\u003C\u002F",[67,69714,69703],{"class":51837},[67,69716,51844],{"class":77},[67,69718,69719,69721,69723,69725,69727,69729,69732,69734],{"class":69,"line":2416},[67,69720,55771],{"class":77},[67,69722,69703],{"class":51837},[67,69724,67188],{"class":112},[67,69726,909],{"class":77},[67,69728,10748],{"class":84},[67,69730,69731],{"class":77},">女\u003C\u002F",[67,69733,69703],{"class":51837},[67,69735,51844],{"class":77},[67,69737,69738,69740,69742],{"class":69,"line":2421},[67,69739,52313],{"class":77},[67,69741,69681],{"class":51837},[67,69743,51844],{"class":77},[67,69745,69746,69749,69751,69753,69755,69757,69759,69761,69764,69766,69768,69770],{"class":69,"line":2450},[67,69747,69748],{"class":77},"    薪资：\u003C",[67,69750,54358],{"class":51837},[67,69752,54361],{"class":112},[67,69754,909],{"class":77},[67,69756,63236],{"class":84},[67,69758,54023],{"class":112},[67,69760,909],{"class":77},[67,69762,69763],{"class":84},"\"salary\"",[67,69765,15637],{"class":112},[67,69767,909],{"class":77},[67,69769,69763],{"class":84},[67,69771,59664],{"class":77},[67,69773,69774,69777,69779,69781,69783,69786,69788,69790,69792],{"class":69,"line":2455},[67,69775,69776],{"class":77},"    就业城市：\u003C",[67,69778,69681],{"class":51837},[67,69780,15637],{"class":112},[67,69782,909],{"class":77},[67,69784,69785],{"class":84},"\"city\"",[67,69787,54023],{"class":112},[67,69789,909],{"class":77},[67,69791,69785],{"class":84},[67,69793,51844],{"class":77},[67,69795,69796,69798,69800,69802,69804,69807,69810,69812],{"class":69,"line":2472},[67,69797,55771],{"class":77},[67,69799,69703],{"class":51837},[67,69801,67188],{"class":112},[67,69803,909],{"class":77},[67,69805,69806],{"class":84},"\"北京\"",[67,69808,69809],{"class":77},">北京\u003C\u002F",[67,69811,69703],{"class":51837},[67,69813,51844],{"class":77},[67,69815,69816,69818,69820,69822,69824,69827,69830,69832],{"class":69,"line":2477},[67,69817,55771],{"class":77},[67,69819,69703],{"class":51837},[67,69821,67188],{"class":112},[67,69823,909],{"class":77},[67,69825,69826],{"class":84},"\"上海\"",[67,69828,69829],{"class":77},">上海\u003C\u002F",[67,69831,69703],{"class":51837},[67,69833,51844],{"class":77},[67,69835,69836,69838,69840,69842,69844,69847,69850,69852],{"class":69,"line":2482},[67,69837,55771],{"class":77},[67,69839,69703],{"class":51837},[67,69841,67188],{"class":112},[67,69843,909],{"class":77},[67,69845,69846],{"class":84},"\"广州\"",[67,69848,69849],{"class":77},">广州\u003C\u002F",[67,69851,69703],{"class":51837},[67,69853,51844],{"class":77},[67,69855,69856,69858,69860,69862,69864,69867,69870,69872],{"class":69,"line":2487},[67,69857,55771],{"class":77},[67,69859,69703],{"class":51837},[67,69861,67188],{"class":112},[67,69863,909],{"class":77},[67,69865,69866],{"class":84},"\"深圳\"",[67,69868,69869],{"class":77},">深圳\u003C\u002F",[67,69871,69703],{"class":51837},[67,69873,51844],{"class":77},[67,69875,69876,69878,69880,69882,69884,69887,69890,69892],{"class":69,"line":2501},[67,69877,55771],{"class":77},[67,69879,69703],{"class":51837},[67,69881,67188],{"class":112},[67,69883,909],{"class":77},[67,69885,69886],{"class":84},"\"曹县\"",[67,69888,69889],{"class":77},">曹县\u003C\u002F",[67,69891,69703],{"class":51837},[67,69893,51844],{"class":77},[67,69895,69896,69898,69900],{"class":69,"line":2506},[67,69897,52313],{"class":77},[67,69899,69681],{"class":51837},[67,69901,51844],{"class":77},[67,69903,69904,69906,69908,69910,69912,69915,69918,69920],{"class":69,"line":3298},[67,69905,51878],{"class":77},[67,69907,54424],{"class":51837},[67,69909,54023],{"class":112},[67,69911,909],{"class":77},[67,69913,69914],{"class":84},"\"add\"",[67,69916,69917],{"class":77},">录入\u003C\u002F",[67,69919,54424],{"class":51837},[67,69921,51844],{"class":77},[67,69923,69924,69926,69928],{"class":69,"line":3312},[67,69925,52954],{"class":77},[67,69927,67162],{"class":51837},[67,69929,51844],{"class":77},[67,69931,69932],{"class":69,"line":3320},[67,69933,177],{"emptyLinePlaceholder":176},[67,69935,69936,69938,69940,69943,69945],{"class":69,"line":3325},[67,69937,52681],{"class":77},[67,69939,10],{"class":51837},[67,69941,69942],{"class":77},">就业榜\u003C\u002F",[67,69944,10],{"class":51837},[67,69946,51844],{"class":77},[67,69948,69949,69951,69953],{"class":69,"line":3331},[67,69950,52681],{"class":77},[67,69952,998],{"class":51837},[67,69954,51844],{"class":77},[67,69956,69957,69959,69961],{"class":69,"line":3337},[67,69958,51878],{"class":77},[67,69960,1001],{"class":51837},[67,69962,51844],{"class":77},[67,69964,69965,69967,69969],{"class":69,"line":3342},[67,69966,55771],{"class":77},[67,69968,1004],{"class":51837},[67,69970,51844],{"class":77},[67,69972,69973,69975,69977,69980,69982],{"class":69,"line":8667},[67,69974,55839],{"class":77},[67,69976,1007],{"class":51837},[67,69978,69979],{"class":77},">序号\u003C\u002F",[67,69981,1007],{"class":51837},[67,69983,51844],{"class":77},[67,69985,69986,69988,69990,69993,69995],{"class":69,"line":8691},[67,69987,55839],{"class":77},[67,69989,1007],{"class":51837},[67,69991,69992],{"class":77},">姓名\u003C\u002F",[67,69994,1007],{"class":51837},[67,69996,51844],{"class":77},[67,69998,69999,70001,70003,70006,70008],{"class":69,"line":8696},[67,70000,55839],{"class":77},[67,70002,1007],{"class":51837},[67,70004,70005],{"class":77},">年龄\u003C\u002F",[67,70007,1007],{"class":51837},[67,70009,51844],{"class":77},[67,70011,70012,70014,70016,70019,70021],{"class":69,"line":8702},[67,70013,55839],{"class":77},[67,70015,1007],{"class":51837},[67,70017,70018],{"class":77},">性别\u003C\u002F",[67,70020,1007],{"class":51837},[67,70022,51844],{"class":77},[67,70024,70025,70027,70029,70032,70034],{"class":69,"line":8729},[67,70026,55839],{"class":77},[67,70028,1007],{"class":51837},[67,70030,70031],{"class":77},">薪资\u003C\u002F",[67,70033,1007],{"class":51837},[67,70035,51844],{"class":77},[67,70037,70038,70040,70042,70045,70047],{"class":69,"line":8734},[67,70039,55839],{"class":77},[67,70041,1007],{"class":51837},[67,70043,70044],{"class":77},">就业城市\u003C\u002F",[67,70046,1007],{"class":51837},[67,70048,51844],{"class":77},[67,70050,70051,70053,70055,70058,70060],{"class":69,"line":8740},[67,70052,55839],{"class":77},[67,70054,1007],{"class":51837},[67,70056,70057],{"class":77},">操作\u003C\u002F",[67,70059,1007],{"class":51837},[67,70061,51844],{"class":77},[67,70063,70064,70066,70068],{"class":69,"line":8752},[67,70065,55944],{"class":77},[67,70067,1004],{"class":51837},[67,70069,51844],{"class":77},[67,70071,70072,70074,70076],{"class":69,"line":8764},[67,70073,52313],{"class":77},[67,70075,1001],{"class":51837},[67,70077,51844],{"class":77},[67,70079,70080,70082,70084],{"class":69,"line":8776},[67,70081,51878],{"class":77},[67,70083,1044],{"class":51837},[67,70085,51844],{"class":77},[67,70087,70088],{"class":69,"line":10435},[67,70089,70090],{"class":202},"      \u003C!-- \n",[67,70092,70093],{"class":69,"line":10459},[67,70094,70095],{"class":202},"        \u003Ctr>\n",[67,70097,70098],{"class":69,"line":10482},[67,70099,70100],{"class":202},"          \u003Ctd>1001\u003C\u002Ftd>\n",[67,70102,70103],{"class":69,"line":10506},[67,70104,70105],{"class":202},"          \u003Ctd>欧阳霸天\u003C\u002Ftd>\n",[67,70107,70108],{"class":69,"line":10511},[67,70109,70110],{"class":202},"          \u003Ctd>19\u003C\u002Ftd>\n",[67,70112,70113],{"class":69,"line":10516},[67,70114,70115],{"class":202},"          \u003Ctd>男\u003C\u002Ftd>\n",[67,70117,70118],{"class":69,"line":10521},[67,70119,70120],{"class":202},"          \u003Ctd>15000\u003C\u002Ftd>\n",[67,70122,70123],{"class":69,"line":10530},[67,70124,70125],{"class":202},"          \u003Ctd>上海\u003C\u002Ftd>\n",[67,70127,70128],{"class":69,"line":10535},[67,70129,70130],{"class":202},"          \u003Ctd>\n",[67,70132,70133],{"class":69,"line":10541},[67,70134,70135],{"class":202},"            \u003Ca href=\"javascript:\">删除\u003C\u002Fa>\n",[67,70137,70138],{"class":69,"line":10562},[67,70139,70140],{"class":202},"          \u003C\u002Ftd>\n",[67,70142,70143],{"class":69,"line":10568},[67,70144,70145],{"class":202},"        \u003C\u002Ftr> \n",[67,70147,70148],{"class":69,"line":10582},[67,70149,70150],{"class":202},"        -->\n",[67,70152,70153,70155,70157],{"class":69,"line":10588},[67,70154,52313],{"class":77},[67,70156,1044],{"class":51837},[67,70158,51844],{"class":77},[67,70160,70161,70163,70165],{"class":69,"line":10615},[67,70162,52954],{"class":77},[67,70164,998],{"class":51837},[67,70166,51844],{"class":77},[67,70168,70169,70171,70173],{"class":69,"line":10624},[67,70170,52681],{"class":77},[67,70172,52350],{"class":51837},[67,70174,51844],{"class":77},[67,70176,70177],{"class":69,"line":10630},[67,70178,60495],{"class":202},[67,70180,70181,70183,70186,70188,70190,70192,70194,70197],{"class":69,"line":10638},[67,70182,11939],{"class":73},[67,70184,70185],{"class":208}," uname",[67,70187,14282],{"class":73},[67,70189,54933],{"class":77},[67,70191,54936],{"class":112},[67,70193,864],{"class":77},[67,70195,70196],{"class":84},"'.uname'",[67,70198,870],{"class":77},[67,70200,70201,70203,70205,70207,70209,70211,70213,70216],{"class":69,"line":10643},[67,70202,11939],{"class":73},[67,70204,16406],{"class":208},[67,70206,14282],{"class":73},[67,70208,54933],{"class":77},[67,70210,54936],{"class":112},[67,70212,864],{"class":77},[67,70214,70215],{"class":84},"'.age'",[67,70217,870],{"class":77},[67,70219,70220,70222,70225,70227,70229,70231,70233,70236],{"class":69,"line":17321},[67,70221,11939],{"class":73},[67,70223,70224],{"class":208}," gender",[67,70226,14282],{"class":73},[67,70228,54933],{"class":77},[67,70230,54936],{"class":112},[67,70232,864],{"class":77},[67,70234,70235],{"class":84},"'.gender'",[67,70237,870],{"class":77},[67,70239,70240,70242,70245,70247,70249,70251,70253,70256],{"class":69,"line":17327},[67,70241,11939],{"class":73},[67,70243,70244],{"class":208}," salary",[67,70246,14282],{"class":73},[67,70248,54933],{"class":77},[67,70250,54936],{"class":112},[67,70252,864],{"class":77},[67,70254,70255],{"class":84},"'.salary'",[67,70257,870],{"class":77},[67,70259,70260,70262,70265,70267,70269,70271,70273,70276],{"class":69,"line":17350},[67,70261,11939],{"class":73},[67,70263,70264],{"class":208}," city",[67,70266,14282],{"class":73},[67,70268,54933],{"class":77},[67,70270,54936],{"class":112},[67,70272,864],{"class":77},[67,70274,70275],{"class":84},"'.city'",[67,70277,870],{"class":77},[67,70279,70280,70282,70285,70287,70289,70291,70293,70296],{"class":69,"line":17356},[67,70281,11939],{"class":73},[67,70283,70284],{"class":208}," tbody",[67,70286,14282],{"class":73},[67,70288,54933],{"class":77},[67,70290,54936],{"class":112},[67,70292,864],{"class":77},[67,70294,70295],{"class":84},"'tbody'",[67,70297,870],{"class":77},[67,70299,70300],{"class":69,"line":17379},[67,70301,177],{"emptyLinePlaceholder":176},[67,70303,70304],{"class":69,"line":17393},[67,70305,70306],{"class":202},"    \u002F\u002F 获取所有带有name属性的元素\n",[67,70308,70309,70311,70314,70316,70318,70320,70322,70325],{"class":69,"line":17413},[67,70310,11939],{"class":73},[67,70312,70313],{"class":208}," items",[67,70315,14282],{"class":73},[67,70317,54933],{"class":77},[67,70319,56218],{"class":112},[67,70321,864],{"class":77},[67,70323,70324],{"class":84},"'[name]'",[67,70326,870],{"class":77},[67,70328,70329],{"class":69,"line":17419},[67,70330,70331],{"class":202},"    \u002F\u002F 声明一个空的数组\n",[67,70333,70334,70336,70338,70340],{"class":69,"line":17430},[67,70335,11939],{"class":73},[67,70337,58232],{"class":208},[67,70339,14282],{"class":73},[67,70341,52375],{"class":77},[67,70343,70344],{"class":69,"line":17453},[67,70345,70346],{"class":202},"    \u002F\u002F 1.录入模块\n",[67,70348,70349],{"class":69,"line":17475},[67,70350,70351],{"class":202},"    \u002F\u002F 1.1这是一个表单提交事件\n",[67,70353,70354,70356,70359,70361,70363,70365,70367,70370],{"class":69,"line":17480},[67,70355,11939],{"class":73},[67,70357,70358],{"class":208}," info",[67,70360,14282],{"class":73},[67,70362,54933],{"class":77},[67,70364,54936],{"class":112},[67,70366,864],{"class":77},[67,70368,70369],{"class":84},"'.info'",[67,70371,870],{"class":77},[67,70373,70374,70377,70379,70381,70384,70386,70388,70390,70392],{"class":69,"line":17486},[67,70375,70376],{"class":77},"    info.",[67,70378,58350],{"class":112},[67,70380,864],{"class":77},[67,70382,70383],{"class":84},"'submit'",[67,70385,13153],{"class":77},[67,70387,54986],{"class":73},[67,70389,2381],{"class":77},[67,70391,936],{"class":5935},[67,70393,13160],{"class":77},[67,70395,70396],{"class":69,"line":17500},[67,70397,70398],{"class":202},"      \u002F\u002F 阻止默认行为，点击按钮之后不进行跳转\n",[67,70400,70401,70404,70407],{"class":69,"line":17513},[67,70402,70403],{"class":77},"      e.",[67,70405,70406],{"class":112},"preventDefault",[67,70408,2698],{"class":77},[67,70410,70411],{"class":69,"line":17518},[67,70412,60549],{"class":202},[67,70414,70415],{"class":69,"line":17532},[67,70416,177],{"emptyLinePlaceholder":176},[67,70418,70419],{"class":69,"line":17537},[67,70420,70421],{"class":202},"      \u002F\u002F 这里进行表单验证  如果不通过,直接添加中断,不需要添加数据\n",[67,70423,70424],{"class":69,"line":17543},[67,70425,70426],{"class":202},"      \u002F\u002F 先遍历循环\n",[67,70428,70429,70431,70433,70435,70437,70439,70441,70443,70445,70448,70450,70452,70454],{"class":69,"line":17548},[67,70430,52821],{"class":73},[67,70432,2381],{"class":77},[67,70434,52384],{"class":73},[67,70436,10157],{"class":77},[67,70438,909],{"class":73},[67,70440,4813],{"class":208},[67,70442,10164],{"class":77},[67,70444,1766],{"class":73},[67,70446,70447],{"class":77}," items.",[67,70449,52505],{"class":208},[67,70451,3934],{"class":77},[67,70453,3014],{"class":73},[67,70455,13160],{"class":77},[67,70457,70458,70460,70463,70465,70468],{"class":69,"line":17562},[67,70459,3218],{"class":73},[67,70461,70462],{"class":77}," (items[i].value ",[67,70464,55023],{"class":73},[67,70466,70467],{"class":84}," ''",[67,70469,13160],{"class":77},[67,70471,70472,70475,70478,70480,70483],{"class":69,"line":17567},[67,70473,70474],{"class":73},"          return",[67,70476,70477],{"class":112}," alert",[67,70479,864],{"class":77},[67,70481,70482],{"class":84},"'输入内容不能为空'",[67,70484,870],{"class":77},[67,70486,70487],{"class":69,"line":17572},[67,70488,3250],{"class":77},[67,70490,70491],{"class":69,"line":17586},[67,70492,52935],{"class":77},[67,70494,70495],{"class":69,"line":17598},[67,70496,177],{"emptyLinePlaceholder":176},[67,70498,70499],{"class":69,"line":17603},[67,70500,70501],{"class":202},"      \u002F\u002F 创建新的对象\n",[67,70503,70504,70506,70509,70511],{"class":69,"line":17616},[67,70505,58765],{"class":73},[67,70507,70508],{"class":208}," obj",[67,70510,14282],{"class":73},[67,70512,16289],{"class":77},[67,70514,70515,70518,70520,70522,70524],{"class":69,"line":17621},[67,70516,70517],{"class":77},"        stuID: arr.",[67,70519,52505],{"class":208},[67,70521,46103],{"class":73},[67,70523,25828],{"class":208},[67,70525,32003],{"class":77},[67,70527,70528],{"class":69,"line":17626},[67,70529,70530],{"class":77},"        uname: uname.value,\n",[67,70532,70533],{"class":69,"line":17631},[67,70534,70535],{"class":77},"        age: age.value,\n",[67,70537,70538],{"class":69,"line":17644},[67,70539,70540],{"class":77},"        gender: gender.value,\n",[67,70542,70543],{"class":69,"line":17649},[67,70544,70545],{"class":77},"        salary: salary.value,\n",[67,70547,70548],{"class":69,"line":33170},[67,70549,70550],{"class":77},"        city: city.value\n",[67,70552,70553],{"class":69,"line":33176},[67,70554,52935],{"class":77},[67,70556,70557],{"class":69,"line":33182},[67,70558,70559],{"class":202},"      \u002F\u002F console.log(obj);\n",[67,70561,70562],{"class":69,"line":33188},[67,70563,70564],{"class":202},"      \u002F\u002F 追加到数组里面\n",[67,70566,70567,70569,70571],{"class":69,"line":33194},[67,70568,58544],{"class":77},[67,70570,52421],{"class":112},[67,70572,70573],{"class":77},"(obj)\n",[67,70575,70576],{"class":69,"line":33205},[67,70577,70578],{"class":202},"      \u002F\u002F console.log(arr);\n",[67,70580,70581],{"class":69,"line":33211},[67,70582,70583],{"class":202},"      \u002F\u002F 清空表单  reset重置表单\n",[67,70585,70586,70589,70591,70594],{"class":69,"line":33231},[67,70587,70588],{"class":208},"      this",[67,70590,240],{"class":77},[67,70592,70593],{"class":112},"reset",[67,70595,2698],{"class":77},[67,70597,70598],{"class":69,"line":33237},[67,70599,70600],{"class":202},"      \u002F\u002F 调用渲染函数\n",[67,70602,70603,70606],{"class":69,"line":33248},[67,70604,70605],{"class":112},"      render",[67,70607,2698],{"class":77},[67,70609,70610],{"class":69,"line":33254},[67,70611,33998],{"class":77},[67,70613,70614],{"class":69,"line":33260},[67,70615,70616],{"class":202},"    \u002F\u002F 2.渲染函数(因为增加和删除都需要渲染)\n",[67,70618,70619,70622,70625],{"class":69,"line":33266},[67,70620,70621],{"class":73},"    function",[67,70623,70624],{"class":112}," render",[67,70626,11571],{"class":77},[67,70628,70629],{"class":69,"line":33272},[67,70630,70631],{"class":202},"      \u002F\u002F 先清空tbody,把最新数组里面的数据渲染完毕\n",[67,70633,70634,70637,70639],{"class":69,"line":33278},[67,70635,70636],{"class":77},"      tbody.innerHTML ",[67,70638,909],{"class":73},[67,70640,70641],{"class":84}," ''\n",[67,70643,70644],{"class":69,"line":33284},[67,70645,70646],{"class":202},"      \u002F\u002F 遍历数组\n",[67,70648,70649,70651,70653,70655,70657,70659,70661,70663,70665,70667,70669,70671,70673],{"class":69,"line":33290},[67,70650,52821],{"class":73},[67,70652,2381],{"class":77},[67,70654,52384],{"class":73},[67,70656,10157],{"class":77},[67,70658,909],{"class":73},[67,70660,4813],{"class":208},[67,70662,10164],{"class":77},[67,70664,1766],{"class":73},[67,70666,52502],{"class":77},[67,70668,52505],{"class":208},[67,70670,3934],{"class":77},[67,70672,3014],{"class":73},[67,70674,13160],{"class":77},[67,70676,70677,70679,70682,70684,70686,70689,70691,70694],{"class":69,"line":33310},[67,70678,61807],{"class":73},[67,70680,70681],{"class":208}," tr",[67,70683,14282],{"class":73},[67,70685,54933],{"class":77},[67,70687,70688],{"class":112},"createElement",[67,70690,864],{"class":77},[67,70692,70693],{"class":84},"'tr'",[67,70695,870],{"class":77},[67,70697,70698,70701,70703],{"class":69,"line":33316},[67,70699,70700],{"class":77},"        tr.innerHTML ",[67,70702,909],{"class":73},[67,70704,70705],{"class":84}," `\n",[67,70707,70708,70711,70713,70715,70717,70720,70723],{"class":69,"line":33332},[67,70709,70710],{"class":84},"        \u003Ctd>${",[67,70712,4600],{"class":77},[67,70714,1746],{"class":84},[67,70716,1298],{"class":77},[67,70718,70719],{"class":84},"].",[67,70721,70722],{"class":77},"stuID",[67,70724,70725],{"class":84},"}\u003C\u002Ftd>\n",[67,70727,70728,70731,70733,70735,70737,70739,70742],{"class":69,"line":33338},[67,70729,70730],{"class":84},"          \u003Ctd>${",[67,70732,4600],{"class":77},[67,70734,1746],{"class":84},[67,70736,1298],{"class":77},[67,70738,70719],{"class":84},[67,70740,70741],{"class":77},"uname",[67,70743,70725],{"class":84},[67,70745,70746,70748,70750,70752,70754,70756,70759],{"class":69,"line":33352},[67,70747,70730],{"class":84},[67,70749,4600],{"class":77},[67,70751,1746],{"class":84},[67,70753,1298],{"class":77},[67,70755,70719],{"class":84},[67,70757,70758],{"class":77},"age",[67,70760,70725],{"class":84},[67,70762,70763,70765,70767,70769,70771,70773,70776],{"class":69,"line":33358},[67,70764,70730],{"class":84},[67,70766,4600],{"class":77},[67,70768,1746],{"class":84},[67,70770,1298],{"class":77},[67,70772,70719],{"class":84},[67,70774,70775],{"class":77},"gender",[67,70777,70725],{"class":84},[67,70779,70780,70782,70784,70786,70788,70790,70793],{"class":69,"line":33373},[67,70781,70730],{"class":84},[67,70783,4600],{"class":77},[67,70785,1746],{"class":84},[67,70787,1298],{"class":77},[67,70789,70719],{"class":84},[67,70791,70792],{"class":77},"salary",[67,70794,70725],{"class":84},[67,70796,70797,70799,70801,70803,70805,70807,70810],{"class":69,"line":33379},[67,70798,70730],{"class":84},[67,70800,4600],{"class":77},[67,70802,1746],{"class":84},[67,70804,1298],{"class":77},[67,70806,70719],{"class":84},[67,70808,70809],{"class":77},"city",[67,70811,70725],{"class":84},[67,70813,70814],{"class":69,"line":33388},[67,70815,70130],{"class":84},[67,70817,70818,70821,70823],{"class":69,"line":33394},[67,70819,70820],{"class":84},"            \u003Ca href=\"javascript:\" data-id=${",[67,70822,1298],{"class":77},[67,70824,70825],{"class":84},"}>删除\u003C\u002Fa>\n",[67,70827,70828],{"class":69,"line":33403},[67,70829,70830],{"class":84},"          \u003C\u002Ftd> \n",[67,70832,70833],{"class":69,"line":33409},[67,70834,70835],{"class":84},"          `\n",[67,70837,70838],{"class":69,"line":33415},[67,70839,70840],{"class":202},"        \u002F\u002F 追加元素 父元素.appendChild(子元素)\n",[67,70842,70843,70846,70849],{"class":69,"line":33424},[67,70844,70845],{"class":77},"        tbody.",[67,70847,70848],{"class":112},"appendChild",[67,70850,70851],{"class":77},"(tr)\n",[67,70853,70854],{"class":69,"line":33430},[67,70855,52935],{"class":77},[67,70857,70858],{"class":69,"line":33441},[67,70859,2909],{"class":77},[67,70861,70862],{"class":69,"line":33447},[67,70863,177],{"emptyLinePlaceholder":176},[67,70865,70866],{"class":69,"line":33466},[67,70867,70868],{"class":202},"    \u002F\u002F 3.删除委托\n",[67,70870,70871],{"class":69,"line":33472},[67,70872,70873],{"class":202},"    \u002F\u002F 3.1 事件委托 tbody\n",[67,70875,70876,70879,70881,70883,70885,70887,70889,70891,70893],{"class":69,"line":33483},[67,70877,70878],{"class":77},"    tbody.",[67,70880,58350],{"class":112},[67,70882,864],{"class":77},[67,70884,58355],{"class":84},[67,70886,13153],{"class":77},[67,70888,54986],{"class":73},[67,70890,2381],{"class":77},[67,70892,936],{"class":5935},[67,70894,13160],{"class":77},[67,70896,70897,70899,70901,70903,70905],{"class":69,"line":33489},[67,70898,55017],{"class":73},[67,70900,67571],{"class":77},[67,70902,55023],{"class":73},[67,70904,68793],{"class":84},[67,70906,13160],{"class":77},[67,70908,70909],{"class":69,"line":33509},[67,70910,70911],{"class":202},"        \u002F\u002F 得到当前元素的自定义属性 data-id\n",[67,70913,70914],{"class":69,"line":33525},[67,70915,70916],{"class":202},"        \u002F\u002F console.log(e.target.dataset.id);\n",[67,70918,70919],{"class":69,"line":33531},[67,70920,70921],{"class":202},"        \u002F\u002F 删除arr 数组里面对应的数据\n",[67,70923,70924,70927,70929,70932,70934],{"class":69,"line":33545},[67,70925,70926],{"class":77},"        arr.",[67,70928,58547],{"class":112},[67,70930,70931],{"class":77},"(e.target.dataset.id, ",[67,70933,1077],{"class":208},[67,70935,870],{"class":77},[67,70937,70938],{"class":69,"line":33551},[67,70939,70940],{"class":202},"        \u002F\u002F 重新渲染一次\n",[67,70942,70943,70946],{"class":69,"line":33557},[67,70944,70945],{"class":112},"        render",[67,70947,2698],{"class":77},[67,70949,70950],{"class":69,"line":33568},[67,70951,52935],{"class":77},[67,70953,70954],{"class":69,"line":33574},[67,70955,33998],{"class":77},[67,70957,70958,70960,70962],{"class":69,"line":33580},[67,70959,52954],{"class":77},[67,70961,52350],{"class":51837},[67,70963,51844],{"class":77},[67,70965,70966],{"class":69,"line":33590},[67,70967,177],{"emptyLinePlaceholder":176},[67,70969,70970,70972,70974],{"class":69,"line":33596},[67,70971,52322],{"class":77},[67,70973,52337],{"class":51837},[67,70975,51844],{"class":77},[67,70977,70978],{"class":69,"line":33607},[67,70979,177],{"emptyLinePlaceholder":176},[67,70981,70982,70984,70986],{"class":69,"line":33613},[67,70983,52322],{"class":77},[67,70985,51172],{"class":51837},[67,70987,51844],{"class":77},[19,70989,70990],{},"样式：",[57,70992,70996],{"className":70993,"code":70994,"language":70995,"meta":62,"style":62},"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",[64,70997,70998,71003,71013,71022,71026,71030,71035,71045,71050,71054,71059,71069,71074,71083,71087,71091,71096,71101,71111,71121,71126,71130,71135,71144,71154,71159,71169,71179,71183,71188,71196,71200,71205,71210,71215,71223,71232,71236,71241,71250,71254,71259,71268,71272,71277,71286,71295,71303,71307,71312,71321,71331,71340,71350,71356,71365,71375,71385,71389,71394,71403,71411,71421,71429,71438,71447,71457,71465,71469,71474,71483],{"__ignoreMap":62},[67,70999,71000],{"class":69,"line":70},[67,71001,71002],{"class":77},"* {\n",[67,71004,71005,71008,71010],{"class":69,"line":143},[67,71006,71007],{"class":51837},"  margin",[67,71009,51974],{"class":77},[67,71011,71012],{"class":84},"0;\n",[67,71014,71015,71018,71020],{"class":69,"line":149},[67,71016,71017],{"class":84},"  padding",[67,71019,51974],{"class":77},[67,71021,71012],{"class":84},[67,71023,71024],{"class":69,"line":155},[67,71025,2288],{"class":77},[67,71027,71028],{"class":69,"line":161},[67,71029,177],{"emptyLinePlaceholder":176},[67,71031,71032],{"class":69,"line":167},[67,71033,71034],{"class":84},"a {\n",[67,71036,71037,71040,71042],{"class":69,"line":173},[67,71038,71039],{"class":51837},"  text-decoration",[67,71041,51974],{"class":77},[67,71043,71044],{"class":84},"none;\n",[67,71046,71047],{"class":69,"line":180},[67,71048,71049],{"class":84},"  color:#721c24;\n",[67,71051,71052],{"class":69,"line":186},[67,71053,2288],{"class":77},[67,71055,71056],{"class":69,"line":444},[67,71057,71058],{"class":84},"h1 {\n",[67,71060,71061,71064,71066],{"class":69,"line":2335},[67,71062,71063],{"class":51837},"  text-align",[67,71065,51974],{"class":77},[67,71067,71068],{"class":84},"center;\n",[67,71070,71071],{"class":69,"line":2340},[67,71072,71073],{"class":84},"  color:#333;\n",[67,71075,71076,71078,71080],{"class":69,"line":2346},[67,71077,71007],{"class":51837},[67,71079,51974],{"class":77},[67,71081,71082],{"class":84},"20px 0;\n",[67,71084,71085],{"class":69,"line":2351},[67,71086,3395],{"class":77},[67,71088,71089],{"class":69,"line":2365},[67,71090,2288],{"class":77},[67,71092,71093],{"class":69,"line":2370},[67,71094,71095],{"class":84},"table {\n",[67,71097,71098],{"class":69,"line":2376},[67,71099,71100],{"class":84},"  margin:0 auto;\n",[67,71102,71103,71106,71108],{"class":69,"line":2397},[67,71104,71105],{"class":51837},"  width",[67,71107,51974],{"class":77},[67,71109,71110],{"class":84},"800px;\n",[67,71112,71113,71116,71118],{"class":69,"line":2402},[67,71114,71115],{"class":51837},"  border-collapse",[67,71117,51974],{"class":77},[67,71119,71120],{"class":84},"collapse;\n",[67,71122,71123],{"class":69,"line":2416},[67,71124,71125],{"class":84},"  color:#004085;\n",[67,71127,71128],{"class":69,"line":2421},[67,71129,2288],{"class":77},[67,71131,71132],{"class":69,"line":2450},[67,71133,71134],{"class":84},"th {\n",[67,71136,71137,71139,71141],{"class":69,"line":2455},[67,71138,71017],{"class":51837},[67,71140,51974],{"class":77},[67,71142,71143],{"class":84},"10px;\n",[67,71145,71146,71149,71151],{"class":69,"line":2472},[67,71147,71148],{"class":51837},"  background",[67,71150,51974],{"class":77},[67,71152,71153],{"class":202},"#cfe5ff;\n",[67,71155,71156],{"class":69,"line":2477},[67,71157,71158],{"class":77},"  \n",[67,71160,71161,71164,71166],{"class":69,"line":2482},[67,71162,71163],{"class":51837},"  font-size",[67,71165,51974],{"class":77},[67,71167,71168],{"class":84},"20px;\n",[67,71170,71171,71174,71176],{"class":69,"line":2487},[67,71172,71173],{"class":51837},"  font-weight",[67,71175,51974],{"class":77},[67,71177,71178],{"class":84},"400;\n",[67,71180,71181],{"class":69,"line":2501},[67,71182,2288],{"class":77},[67,71184,71185],{"class":69,"line":2506},[67,71186,71187],{"class":84},"td,th {\n",[67,71189,71190,71193],{"class":69,"line":3298},[67,71191,71192],{"class":84},"  border:1px solid",[67,71194,71195],{"class":202}," #b8daff;\n",[67,71197,71198],{"class":69,"line":3312},[67,71199,2288],{"class":77},[67,71201,71202],{"class":69,"line":3320},[67,71203,71204],{"class":84},"td {\n",[67,71206,71207],{"class":69,"line":3325},[67,71208,71209],{"class":84},"  padding:10px;\n",[67,71211,71212],{"class":69,"line":3331},[67,71213,71214],{"class":84},"  color:#666;\n",[67,71216,71217,71219,71221],{"class":69,"line":3337},[67,71218,71063],{"class":51837},[67,71220,51974],{"class":77},[67,71222,71068],{"class":84},[67,71224,71225,71227,71229],{"class":69,"line":3342},[67,71226,71163],{"class":51837},[67,71228,51974],{"class":77},[67,71230,71231],{"class":84},"16px;\n",[67,71233,71234],{"class":69,"line":8667},[67,71235,2288],{"class":77},[67,71237,71238],{"class":69,"line":8691},[67,71239,71240],{"class":84},"tbody tr {\n",[67,71242,71243,71245,71247],{"class":69,"line":8696},[67,71244,71148],{"class":51837},[67,71246,51974],{"class":77},[67,71248,71249],{"class":202},"#fff;\n",[67,71251,71252],{"class":69,"line":8702},[67,71253,2288],{"class":77},[67,71255,71256],{"class":69,"line":8729},[67,71257,71258],{"class":84},"tbody tr:hover {\n",[67,71260,71261,71263,71265],{"class":69,"line":8734},[67,71262,71148],{"class":51837},[67,71264,51974],{"class":77},[67,71266,71267],{"class":202},"#e1ecf8;\n",[67,71269,71270],{"class":69,"line":8740},[67,71271,2288],{"class":77},[67,71273,71274],{"class":69,"line":8752},[67,71275,71276],{"class":84},".info {\n",[67,71278,71279,71281,71283],{"class":69,"line":8764},[67,71280,71105],{"class":51837},[67,71282,51974],{"class":77},[67,71284,71285],{"class":84},"900px;\n",[67,71287,71288,71290,71292],{"class":69,"line":8776},[67,71289,71007],{"class":51837},[67,71291,51974],{"class":77},[67,71293,71294],{"class":84},"50px auto;\n",[67,71296,71297,71299,71301],{"class":69,"line":10435},[67,71298,71063],{"class":51837},[67,71300,51974],{"class":77},[67,71302,71068],{"class":84},[67,71304,71305],{"class":69,"line":10459},[67,71306,2288],{"class":77},[67,71308,71309],{"class":69,"line":10482},[67,71310,71311],{"class":84},".info  input, .info select {\n",[67,71313,71314,71316,71318],{"class":69,"line":10506},[67,71315,71105],{"class":51837},[67,71317,51974],{"class":77},[67,71319,71320],{"class":84},"80px;\n",[67,71322,71323,71326,71328],{"class":69,"line":10511},[67,71324,71325],{"class":51837},"  height",[67,71327,51974],{"class":77},[67,71329,71330],{"class":84},"27px;\n",[67,71332,71333,71336,71338],{"class":69,"line":10516},[67,71334,71335],{"class":51837},"  outline",[67,71337,51974],{"class":77},[67,71339,71044],{"class":84},[67,71341,71342,71345,71347],{"class":69,"line":10521},[67,71343,71344],{"class":51837},"  border-radius",[67,71346,51974],{"class":77},[67,71348,71349],{"class":84},"5px;\n",[67,71351,71352,71354],{"class":69,"line":10530},[67,71353,71192],{"class":84},[67,71355,71195],{"class":202},[67,71357,71358,71361,71363],{"class":69,"line":10535},[67,71359,71360],{"class":51837},"  padding-left",[67,71362,51974],{"class":77},[67,71364,71349],{"class":84},[67,71366,71367,71370,71372],{"class":69,"line":10541},[67,71368,71369],{"class":51837},"  box-sizing",[67,71371,51974],{"class":77},[67,71373,71374],{"class":84},"border-box;\n",[67,71376,71377,71380,71382],{"class":69,"line":10562},[67,71378,71379],{"class":51837},"  margin-right",[67,71381,51974],{"class":77},[67,71383,71384],{"class":84},"15px;\n",[67,71386,71387],{"class":69,"line":10568},[67,71388,2288],{"class":77},[67,71390,71391],{"class":69,"line":10582},[67,71392,71393],{"class":84},".info button {\n",[67,71395,71396,71398,71400],{"class":69,"line":10588},[67,71397,71105],{"class":51837},[67,71399,51974],{"class":77},[67,71401,71402],{"class":84},"60px;\n",[67,71404,71405,71407,71409],{"class":69,"line":10615},[67,71406,71325],{"class":51837},[67,71408,51974],{"class":77},[67,71410,71330],{"class":84},[67,71412,71413,71416,71418],{"class":69,"line":10624},[67,71414,71415],{"class":51837},"  background-color",[67,71417,51974],{"class":77},[67,71419,71420],{"class":202},"#004085;\n",[67,71422,71423,71425,71427],{"class":69,"line":10630},[67,71424,71335],{"class":51837},[67,71426,51974],{"class":77},[67,71428,71044],{"class":84},[67,71430,71431,71434,71436],{"class":69,"line":10638},[67,71432,71433],{"class":51837},"  border",[67,71435,51974],{"class":77},[67,71437,71012],{"class":84},[67,71439,71440,71443,71445],{"class":69,"line":10643},[67,71441,71442],{"class":51837},"  color",[67,71444,51974],{"class":77},[67,71446,71249],{"class":202},[67,71448,71449,71452,71454],{"class":69,"line":17321},[67,71450,71451],{"class":51837},"  cursor",[67,71453,51974],{"class":77},[67,71455,71456],{"class":84},"pointer;\n",[67,71458,71459,71461,71463],{"class":69,"line":17327},[67,71460,71344],{"class":51837},[67,71462,51974],{"class":77},[67,71464,71349],{"class":84},[67,71466,71467],{"class":69,"line":17350},[67,71468,2288],{"class":77},[67,71470,71471],{"class":69,"line":17356},[67,71472,71473],{"class":84},".info .age {\n",[67,71475,71476,71478,71480],{"class":69,"line":17379},[67,71477,71105],{"class":51837},[67,71479,51974],{"class":77},[67,71481,71482],{"class":84},"50px;\n",[67,71484,71485],{"class":69,"line":17393},[67,71486,2288],{"class":77},[19,71488,71489],{},"思路：",[19,71491,71492],{},[725,71493],{"alt":62,"src":71494},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-167.png",[19,71496,71497],{},[725,71498],{"alt":62,"src":71499},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-168.png",[19,71501,71502],{},[725,71503],{"alt":62,"src":71504},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-169.png",[14,71506,71508],{"id":71507},"_3315-重绘回流","3.3.15 重绘回流",[19,71510,71511],{},[725,71512],{"alt":62,"src":71513},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-170.png",[19,71515,71516],{},[725,71517],{"alt":62,"src":71518},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-171.png",[19,71520,71521],{},[725,71522],{"alt":62,"src":71523},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-172.png",[803,71525,71527],{"id":71526},"_34-bom","3.4 BOM",[19,71529,71530],{},[725,71531],{"alt":62,"src":71532},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-173.png",[19,71534,71535],{},"平时写的document省略了window而已，实际上是window.document",[19,71537,71538],{},"函数也是这样，调用的时候实际为window.fn()",[19,71540,71541],{},"var声明标量也是这样的，const和let是挂载在自己的作用域内，所以如果写：const num=10 console.log(window.num)会输出undefined",[19,71543,71544],{},"window大部分情况下可以省略",[14,71546,71548],{"id":71547},"_341-定时器-延时函数","3.4.1 定时器-延时函数",[19,71550,71551],{},"只执行一次",[19,71553,71554],{},[725,71555],{"alt":62,"src":71556},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-174.png",[19,71558,71559],{},"某些特殊情况下，如递归函数中，我需要自己调用自己，此时就需要清除一下延时函数了",[19,71561,71562],{},[725,71563],{"alt":62,"src":71564},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-175.png",[14,71566,71568],{"id":71567},"_342-js执行机制","3.4.2 JS执行机制",[19,71570,71571],{},[725,71572],{"alt":62,"src":71573},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-176.png",[19,71575,71576],{},"两个的结果都是1111 3333 2222",[19,71578,71579],{},[725,71580],{"alt":62,"src":71581},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-177.png",[19,71583,71584],{},[725,71585],{"alt":62,"src":71586},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-178.png",[19,71588,71589],{},[725,71590],{"alt":62,"src":71591},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-179.png",[19,71593,71594],{},"总结：同步任务是立马可以执行的，异步是需要事件的",[19,71596,71597],{},"工作流程：",[19,71599,71600],{},[725,71601],{"alt":62,"src":71602},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-180.png",[19,71604,71605],{},[725,71606],{"alt":62,"src":71607},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-181.png",[19,71609,71610],{},"js只能进行单线程的操作，右边部分是浏览器操作，在浏览的作用下可以实现多线程任务",[19,71612,71613],{},"由于主线程不断的重复获得任务、执行任务、再获取任务、再执行，所以这种机制被称为事件循环（ event loop）",[14,71615,71617],{"id":71616},"_343-location对象","3.4.3 location对象",[19,71619,71620],{},"location对象属于window这个全局对象下的，可以 省略window",[19,71622,71623],{},[725,71624],{"alt":62,"src":71625},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-182.png",[19,71627,71628],{},"href可以跳转页面",[815,71630,71631],{},[818,71632,71633],{},"search:在表单中提交信息之后,上边的网址后面会包含自己的信息",[19,71635,71636],{},"search得到提交信息之后网站后边的地址",[19,71638,71639],{},[725,71640],{"alt":62,"src":71641},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-183.png",[19,71643,71644],{},[725,71645],{"alt":62,"src":71646},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-184.png",[815,71648,71649],{"start":143},[818,71650,71651],{},"hash:这个获取单页面应用#后边的地址",[19,71653,71654],{},"如下,点击我的音乐等按钮,浏览器不会刷新,只是刷新下边的内容,此时网站后边的地址为#",[19,71656,71657],{},[725,71658],{"alt":62,"src":71659},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-185.png",[57,71661,71663],{"className":53604,"code":71662,"language":53606,"meta":62,"style":62},"  \u003Ca href=\"#\u002Fmy\">我的\u003C\u002Fa>\n  \u003Ca href=\"#\u002Ffriend\">关注\u003C\u002Fa>\n  \u003Ca href=\"#\u002Fdownload\">下载\u003C\u002Fa>\n",[64,71664,71665,71685,71705],{"__ignoreMap":62},[67,71666,71667,71669,71671,71673,71675,71678,71681,71683],{"class":69,"line":70},[67,71668,52681],{"class":77},[67,71670,28],{"class":51837},[67,71672,61594],{"class":112},[67,71674,909],{"class":77},[67,71676,71677],{"class":84},"\"#\u002Fmy\"",[67,71679,71680],{"class":77},">我的\u003C\u002F",[67,71682,28],{"class":51837},[67,71684,51844],{"class":77},[67,71686,71687,71689,71691,71693,71695,71698,71701,71703],{"class":69,"line":143},[67,71688,52681],{"class":77},[67,71690,28],{"class":51837},[67,71692,61594],{"class":112},[67,71694,909],{"class":77},[67,71696,71697],{"class":84},"\"#\u002Ffriend\"",[67,71699,71700],{"class":77},">关注\u003C\u002F",[67,71702,28],{"class":51837},[67,71704,51844],{"class":77},[67,71706,71707,71709,71711,71713,71715,71718,71721,71723],{"class":69,"line":149},[67,71708,52681],{"class":77},[67,71710,28],{"class":51837},[67,71712,61594],{"class":112},[67,71714,909],{"class":77},[67,71716,71717],{"class":84},"\"#\u002Fdownload\"",[67,71719,71720],{"class":77},">下载\u003C\u002F",[67,71722,28],{"class":51837},[67,71724,51844],{"class":77},[19,71726,71727],{},"就是当时候提前写好每部分,一点就会换过来写好的这部分,浏览器不会刷新,在vue中会详细说明",[815,71729,71730],{"start":149},[818,71731,71732,71733,71735,71736,71738],{},"reload 类似于浏览器中点击F5,进行刷新操作,它是个方法!!! 用的时候要加()",[54253,71734],{},"  强制刷新是从在线重新获取数据(ctrl+f5) location.reload(true)",[54253,71737],{},"  刷新是从本地获取数据 (f5) location.reload(false)",[14,71740,71742],{"id":71741},"_345-navigator对象","3.4.5 navigator对象",[19,71744,71745],{},[725,71746],{"alt":62,"src":71747},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-186.png",[57,71749,71753],{"className":71750,"code":71751,"language":71752,"meta":62,"style":62},"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",[64,71754,71755,71760,71771,71783,71788,71839,71880,71885,71898,71910,71915],{"__ignoreMap":62},[67,71756,71757],{"class":69,"line":70},[67,71758,71759],{"class":202},"\u002F\u002F 检测 userAgent（浏览器信息） \n",[67,71761,71762,71764,71766,71768],{"class":69,"line":143},[67,71763,1086],{"class":73},[67,71765,864],{"class":77},[67,71767,54986],{"class":73},[67,71769,71770],{"class":77}," () { \n",[67,71772,71773,71775,71778,71780],{"class":69,"line":149},[67,71774,7511],{"class":73},[67,71776,71777],{"class":208}," userAgent",[67,71779,14282],{"class":73},[67,71781,71782],{"class":77}," navigator.userAgent \n",[67,71784,71785],{"class":69,"line":155},[67,71786,71787],{"class":202},"\u002F\u002F 验证是否为Android或iPhone \n",[67,71789,71790,71792,71795,71797,71800,71803,71805,71807,71810,71812,71815,71819,71821,71823,71825,71828,71830,71832,71834,71836],{"class":69,"line":161},[67,71791,7511],{"class":73},[67,71793,71794],{"class":208}," android",[67,71796,14282],{"class":73},[67,71798,71799],{"class":77}," userAgent.",[67,71801,71802],{"class":112},"match",[67,71804,864],{"class":77},[67,71806,1440],{"class":84},[67,71808,71809],{"class":48514},"(Android);",[67,71811,1842],{"class":73},[67,71813,71814],{"class":208},"[\\s",[67,71816,71818],{"class":71817},"snhLl","\\\u002F",[67,71820,1796],{"class":208},[67,71822,1338],{"class":73},[67,71824,864],{"class":48514},[67,71826,71827],{"class":208},"[\\d.]",[67,71829,1338],{"class":73},[67,71831,260],{"class":48514},[67,71833,1842],{"class":73},[67,71835,1440],{"class":84},[67,71837,71838],{"class":77},") \n",[67,71840,71841,71843,71846,71848,71850,71852,71854,71856,71859,71862,71865,71867,71869,71872,71874,71876,71878],{"class":69,"line":167},[67,71842,7511],{"class":73},[67,71844,71845],{"class":208}," iphone",[67,71847,14282],{"class":73},[67,71849,71799],{"class":77},[67,71851,71802],{"class":112},[67,71853,864],{"class":77},[67,71855,1440],{"class":84},[67,71857,71858],{"class":48514},"(iPhone",[67,71860,71861],{"class":208},"\\s",[67,71863,71864],{"class":48514},"OS)",[67,71866,71861],{"class":208},[67,71868,864],{"class":48514},[67,71870,71871],{"class":208},"[\\d_]",[67,71873,1338],{"class":73},[67,71875,260],{"class":48514},[67,71877,1440],{"class":84},[67,71879,71838],{"class":77},[67,71881,71882],{"class":69,"line":173},[67,71883,71884],{"class":202},"\u002F\u002F 如果是Android或iPhone，则跳转至移动站点 \n",[67,71886,71887,71889,71892,71895],{"class":69,"line":180},[67,71888,2254],{"class":73},[67,71890,71891],{"class":77}," (android ",[67,71893,71894],{"class":73},"||",[67,71896,71897],{"class":77}," iphone) { \n",[67,71899,71900,71903,71905,71908],{"class":69,"line":186},[67,71901,71902],{"class":77},"location.href ",[67,71904,909],{"class":73},[67,71906,71907],{"class":84}," 'http:\u002F\u002Fm.itcast.cn'",[67,71909,3395],{"class":77},[67,71911,71912],{"class":69,"line":444},[67,71913,71914],{"class":77},"} \n",[67,71916,71917],{"class":69,"line":2335},[67,71918,71919],{"class":77},"})()\n",[14,71921,71923],{"id":71922},"_346-histroy对象","3.4.6 histroy对象",[19,71925,71926],{},[725,71927],{"alt":62,"src":71928},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-187.png",[19,71930,71931],{},"浏览器地址的前进与后退!!!",[19,71933,71934],{},"history.back() 等效于 history.go(-1)",[19,71936,71937],{},"history.forward() 等效于 history.go(1)",[803,71939,71941],{"id":71940},"_35-本地存储","3.5 本地存储",[815,71943,71944,71947,71950],{},[818,71945,71946],{},"数据存储在用户浏览器中",[818,71948,71949],{},"设置、读取方便、甚至页面刷新不丢失数据",[818,71951,71952],{},"容量较大，sessionStorage和localStorage约 5M 左右",[14,71954,71956],{"id":71955},"_351-本地存储分类-localstorage","3.5.1 本地存储分类- localStorage",[19,71958,71959],{},"只能存储字符串",[19,71961,71962],{},[725,71963],{"alt":62,"src":71964},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-188.png",[19,71966,71967],{},[725,71968],{"alt":62,"src":71969},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-189.png",[19,71971,71972],{},"键值对要加引号,不然就会当变量来看了",[19,71974,71975],{},"localStorage.setItem('uname', 'pink')",[19,71977,71978],{},"刷新之后信息不再丢失",[19,71980,71981],{},"操作key,value会跟着变",[19,71983,71984],{},"删除只删除键就可以,即名字",[19,71986,71975],{},[19,71988,71989],{},"改:",[19,71991,71992],{},"localStorage.setItem('uname','red')",[19,71994,71995],{},"有这个键就是改,没有这个键就是改",[19,71997,71998],{},[725,71999],{"alt":62,"src":72000},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-190.png",[19,72002,72003],{},"这个是全部删除,但是如果代码没有改动的话,一刷新,这些数据又都会存储在这里边,在测试中使用:",[19,72005,72006],{},[725,72007],{"alt":62,"src":72008},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-191.png",[19,72010,72011],{},"本地存储只能存储字符串,在存储数据时,文字必须使用引号,不然字母会被看成变量,数字可以不加引号,但是本地存储之后都会变成字符串",[14,72013,72015],{"id":72014},"_352-本地存储分类-sessionstorage","3.5.2 本地存储分类- sessionStorage",[19,72017,72018],{},"相比于localStorage来说,关闭浏览器就会消失,但是localStorage关闭浏览器是不会消失的",[19,72020,72021],{},"特性:",[815,72023,72024,72027,72030,72033],{},[818,72025,72026],{},"生命周期为关闭浏览器窗口",[818,72028,72029],{},"在同一个窗口(页面)下数据可以共享",[818,72031,72032],{},"以键值对的形式存储使用",[818,72034,72035],{},"用法跟localStorage 基本相同",[14,72037,72039],{"id":72038},"_353-存储复杂数据类型","3.5.3 存储复杂数据类型",[19,72041,72042],{},"本地只能存储字符串,无法直接存储复杂数据类型",[57,72044,72046],{"className":53604,"code":72045,"language":53606,"meta":62,"style":62},"\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",[64,72047,72048,72056,72061,72066,72071,72076,72080,72085,72090],{"__ignoreMap":62},[67,72049,72050,72052,72054],{"class":69,"line":70},[67,72051,1766],{"class":77},[67,72053,52350],{"class":51837},[67,72055,51844],{"class":77},[67,72057,72058],{"class":69,"line":143},[67,72059,72060],{"class":77},"    const obj = {\n",[67,72062,72063],{"class":69,"line":149},[67,72064,72065],{"class":77},"      uname: 'pink老师',\n",[67,72067,72068],{"class":69,"line":155},[67,72069,72070],{"class":77},"      age: 18,\n",[67,72072,72073],{"class":69,"line":161},[67,72074,72075],{"class":77},"      gender: '女'\n",[67,72077,72078],{"class":69,"line":167},[67,72079,2909],{"class":77},[67,72081,72082],{"class":69,"line":173},[67,72083,72084],{"class":77},"    \u002F\u002F 存储复杂数据类型\n",[67,72086,72087],{"class":69,"line":180},[67,72088,72089],{"class":77},"    localStorage.setItem('obj', obj)\n",[67,72091,72092,72094,72096],{"class":69,"line":186},[67,72093,52954],{"class":77},[67,72095,52350],{"class":51837},[67,72097,51844],{"class":77},[19,72099,72100],{},[725,72101],{"alt":62,"src":72102},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-192.png",[19,72104,72105],{},"如果获取一下数据:",[19,72107,72108],{},"log(localStorage.getItem('obj'))",[19,72110,72111],{},[725,72112],{"alt":62,"src":72113},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-193.png",[19,72115,72116],{},"发现直接存对象是使用不了的!!!",[40,72118,72120],{"id":72119},"_3531-复杂对象转化为jso字符串","3.5.3.1 复杂对象转化为JSO字符串",[19,72122,72123],{},[725,72124],{"alt":62,"src":72125},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-194.png",[57,72127,72129],{"className":51170,"code":72128,"language":51172,"meta":62,"style":62},"\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",[64,72130,72131,72139,72149,72159,72168,72176,72180,72184,72210,72229,72237,72241,72246,72251],{"__ignoreMap":62},[67,72132,72133,72135,72137],{"class":69,"line":70},[67,72134,1766],{"class":77},[67,72136,52350],{"class":51837},[67,72138,51844],{"class":77},[67,72140,72141,72143,72145,72147],{"class":69,"line":143},[67,72142,11939],{"class":73},[67,72144,70508],{"class":208},[67,72146,14282],{"class":73},[67,72148,16289],{"class":77},[67,72150,72151,72154,72157],{"class":69,"line":149},[67,72152,72153],{"class":77},"      uname: ",[67,72155,72156],{"class":84},"'pink老师'",[67,72158,32003],{"class":77},[67,72160,72161,72164,72166],{"class":69,"line":155},[67,72162,72163],{"class":77},"      age: ",[67,72165,1506],{"class":208},[67,72167,32003],{"class":77},[67,72169,72170,72173],{"class":69,"line":161},[67,72171,72172],{"class":77},"      gender: ",[67,72174,72175],{"class":84},"'女'\n",[67,72177,72178],{"class":69,"line":167},[67,72179,2909],{"class":77},[67,72181,72182],{"class":69,"line":173},[67,72183,72084],{"class":202},[67,72185,72186,72189,72192,72194,72197,72199,72202,72204,72207],{"class":69,"line":180},[67,72187,72188],{"class":77},"  localStorage.",[67,72190,72191],{"class":112},"setItem",[67,72193,864],{"class":77},[67,72195,72196],{"class":84},"'obj'",[67,72198,13153],{"class":77},[67,72200,72201],{"class":208},"JSON",[67,72203,240],{"class":77},[67,72205,72206],{"class":112},"stringify",[67,72208,72209],{"class":77},"(obj))\n",[67,72211,72212,72215,72217,72220,72223,72225,72227],{"class":69,"line":186},[67,72213,72214],{"class":77},"  console.",[67,72216,58784],{"class":112},[67,72218,72219],{"class":77},"(localStorage.",[67,72221,72222],{"class":112},"getItem",[67,72224,864],{"class":77},[67,72226,72196],{"class":84},[67,72228,31034],{"class":77},[67,72230,72231,72233,72235],{"class":69,"line":444},[67,72232,52954],{"class":77},[67,72234,52350],{"class":51837},[67,72236,51844],{"class":77},[67,72238,72239],{"class":69,"line":2335},[67,72240,71158],{"class":77},[67,72242,72243],{"class":69,"line":2340},[67,72244,72245],{"class":77},"  输出:{\"uname\":\"pink老师\",\"age\":18,\"gender\":\"女\"}\n",[67,72247,72248],{"class":69,"line":2346},[67,72249,72250],{"class":77},"  类型是字符串的\n",[67,72252,72253],{"class":69,"line":2351},[67,72254,72255],{"class":77},"  JSON对象 属性和值有引号,而且引号统一是双引号\n",[40,72257,72259],{"id":72258},"_3532-json字符串转化为对象","3.5.3.2 JSON字符串转化为对象",[19,72261,72262],{},[725,72263],{"alt":62,"src":72264},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-195.png",[19,72266,72267],{},[725,72268],{"alt":62,"src":72269},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-196.png",[57,72271,72273],{"className":53604,"code":72272,"language":53606,"meta":62,"style":62},"  \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",[64,72274,72275,72283,72287,72291,72295,72299,72303,72308,72313,72318,72323,72328,72333,72338,72343],{"__ignoreMap":62},[67,72276,72277,72279,72281],{"class":69,"line":70},[67,72278,52681],{"class":77},[67,72280,52350],{"class":51837},[67,72282,51844],{"class":77},[67,72284,72285],{"class":69,"line":143},[67,72286,72060],{"class":77},[67,72288,72289],{"class":69,"line":149},[67,72290,72065],{"class":77},[67,72292,72293],{"class":69,"line":155},[67,72294,72070],{"class":77},[67,72296,72297],{"class":69,"line":161},[67,72298,72075],{"class":77},[67,72300,72301],{"class":69,"line":167},[67,72302,2909],{"class":77},[67,72304,72305],{"class":69,"line":173},[67,72306,72307],{"class":77},"    \u002F\u002F 1.存储复杂数据类型\n",[67,72309,72310],{"class":69,"line":180},[67,72311,72312],{"class":77},"    \u002F\u002F localStorage.setItem('obj', obj)\n",[67,72314,72315],{"class":69,"line":186},[67,72316,72317],{"class":77},"    \u002F\u002F console.log(localStorage.getItem('obj'))\n",[67,72319,72320],{"class":69,"line":444},[67,72321,72322],{"class":77},"    \u002F\u002F 2.复杂数据类型存储必须转换为JSON字符串存储\n",[67,72324,72325],{"class":69,"line":2335},[67,72326,72327],{"class":77},"    localStorage.setItem('obj', JSON.stringify(obj))\n",[67,72329,72330],{"class":69,"line":2340},[67,72331,72332],{"class":77},"    \u002F\u002F 取\n",[67,72334,72335],{"class":69,"line":2346},[67,72336,72337],{"class":77},"    \u002F\u002F console.log(typeof localStorage.getItem('obj'))\n",[67,72339,72340],{"class":69,"line":2351},[67,72341,72342],{"class":77},"    console.log(JSON.parse(localStorage.getItem('obj')))\n",[67,72344,72345,72347,72349],{"class":69,"line":2365},[67,72346,52954],{"class":77},[67,72348,52350],{"class":51837},[67,72350,51844],{"class":77},[19,72352,72353],{},[725,72354],{"alt":62,"src":72355},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-197.png",[14,72357,72359],{"id":72358},"_356-数组map方法","3.5.6 数组map方法",[19,72361,72362],{},"map多和join一起使用，使用map，将原数组的内容给小盒子，然后遍历完得到好多小盒子（就是小盒子填上了内容），这些小盒子就作为元素添加到了新的数组中，新的数组使用join的方法，比如新数组叫newArr，然后新数组newArr.join(''),元素之间不再有分隔符，转为了一个字符串塞给了大盒子，就可以实现对大盒子的填充",[19,72364,72365],{},[725,72366],{"alt":62,"src":72367},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-198.png",[19,72369,72370],{},[725,72371],{"alt":62,"src":72372},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-199.png",[19,72374,72375,72378],{},[336,72376,72377],{},"map 也称为映射。"," 映射是个术语，指两个元素的集之间元素相互“对应”的关系",[19,72380,72381],{},"map有返回值，但是forEach没有返回值",[19,72383,72384],{},"map是个方法。用的时候要加 ()",[19,72386,72387],{},"map返回的是一个数组",[14,72389,72391],{"id":72390},"_357-数组中join方法","3.5.7 数组中join方法",[19,72393,72394],{},[725,72395],{"alt":62,"src":72396},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-200.png",[19,72398,72399],{},"类似于python中拼接字符串一样！",[815,72401,72402,72405,72408],{},[818,72403,72404],{},"小括号为空则逗号分开",[818,72406,72407],{},"小括号为空字符串 ''，则元素之间没有分隔符",[818,72409,72410],{},"小括号用啥符号就用进行分割",[14,72412,72414],{"id":72413},"_358-学生就业统计表本地存储","3.5.8 学生就业统计表本地存储",[815,72416,72417,72420,72423,72426,72429],{},[818,72418,72419],{},"记住本地时间获取快速方式：new Date().toDateString()",[818,72421,72422],{},"尽量减少DOM操作，用好map+join的渲染方式",[818,72424,72425],{},"输入内容为空不执行，可以使用！,获取输入的内容，!输入的内容 如果输入了字，那这个字符串的非为假，放到if语句中就不执行，如果没有输入字，那么输入的字符串的非为真，就去执行if语句",[818,72427,72428],{},"return可以实现函数的结束",[818,72430,72431],{},"禁止跳转是 preventDefault() 不要忘记",[57,72433,72435],{"className":51170,"code":72434,"language":51172,"meta":62,"style":62},"\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",[64,72436,72437,72447,72461,72465,72473,72487,72507,72519,72527,72533,72543,72553,72557,72561,72567,72577,72589,72593,72597,72604,72616,72630,72640,72644,72648,72655,72662,72669,72681,72693,72703,72715,72719,72723,72730,72737,72749,72761,72771,72783,72813,72817,72821,72828,72840,72852,72876,72886,72896,72900,72904,72912,72923,72935,72947,72959,72976,72988,73000,73004,73008,73015,73027,73039,73051,73062,73080,73093,73105,73129,73140,73144,73148,73156,73166,73170,73174,73180,73192,73203,73213,73217,73221,73227,73249,73253,73257,73263,73269,73281,73291,73303,73333,73346,73363,73367,73371,73382,73404,73414,73418,73422,73435,73445,73457,73469,73481,73493,73503,73513,73523,73534,73547,73551,73559,73567,73571,73579,73592,73612,73645,73678,73711,73737,73755,73773,73781,73807,73825,73843,73861,73879,73897,73905,73913,73931,73939,73968,73976,73984,73992,74005,74017,74029,74041,74053,74065,74078,74090,74098,74106,74114,74119,74124,74128,74132,74136,74140,74144,74148,74153,74158,74163,74168,74176,74184,74192,74197,74202,74207,74212,74217,74222,74227,74232,74237,74242,74247,74252,74257,74262,74266,74271,74276,74286,74295,74299,74304,74313,74329,74371,74411,74450,74515,74523,74527,74532,74550,74558,74563,74568,74598,74604,74609,74622,74634,74646,74658,74670,74682,74694,74698,74708,74712,74717,74722,74726,74735,74739,74744,74749,74768,74773,74793,74797,74802,74806,74811,74829,74847,74865,74884,74903,74922,74927,74933,74954,74960,74969,74975,74981,74987,75014,75027,75032,75042,75048,75054,75060,75066,75071,75077,75083,75089,75095,75128,75133,75138,75143,75148,75154,75160,75166,75177,75182,75188,75195,75209,75215,75239,75244,75249,75255,75261,75282,75288,75301,75307,75313,75319,75325,75330,75336,75342,75348,75366,75380,75386,75394,75400,75422,75427,75432,75437,75442,75447,75456,75465,75470],{"__ignoreMap":62},[67,72438,72439,72441,72443,72445],{"class":69,"line":70},[67,72440,51834],{"class":77},[67,72442,51838],{"class":51837},[67,72444,51841],{"class":112},[67,72446,51844],{"class":77},[67,72448,72449,72451,72453,72455,72457,72459],{"class":69,"line":143},[67,72450,1766],{"class":77},[67,72452,51172],{"class":51837},[67,72454,51853],{"class":112},[67,72456,909],{"class":77},[67,72458,51858],{"class":84},[67,72460,51844],{"class":77},[67,72462,72463],{"class":69,"line":149},[67,72464,177],{"emptyLinePlaceholder":176},[67,72466,72467,72469,72471],{"class":69,"line":155},[67,72468,1766],{"class":77},[67,72470,51871],{"class":51837},[67,72472,51844],{"class":77},[67,72474,72475,72477,72479,72481,72483,72485],{"class":69,"line":161},[67,72476,52681],{"class":77},[67,72478,51881],{"class":51837},[67,72480,51884],{"class":112},[67,72482,909],{"class":77},[67,72484,51889],{"class":84},[67,72486,51844],{"class":77},[67,72488,72489,72491,72493,72495,72497,72499,72501,72503,72505],{"class":69,"line":167},[67,72490,52681],{"class":77},[67,72492,51881],{"class":51837},[67,72494,15637],{"class":112},[67,72496,909],{"class":77},[67,72498,51928],{"class":84},[67,72500,51908],{"class":112},[67,72502,909],{"class":77},[67,72504,51935],{"class":84},[67,72506,51844],{"class":77},[67,72508,72509,72511,72513,72515,72517],{"class":69,"line":173},[67,72510,52681],{"class":77},[67,72512,51944],{"class":51837},[67,72514,51947],{"class":77},[67,72516,51944],{"class":51837},[67,72518,51844],{"class":77},[67,72520,72521,72523,72525],{"class":69,"line":180},[67,72522,52681],{"class":77},[67,72524,779],{"class":51837},[67,72526,51844],{"class":77},[67,72528,72529,72531],{"class":69,"line":186},[67,72530,7122],{"class":51837},[67,72532,16289],{"class":77},[67,72534,72535,72537,72539,72541],{"class":69,"line":444},[67,72536,55232],{"class":208},[67,72538,51974],{"class":77},[67,72540,1051],{"class":208},[67,72542,2017],{"class":77},[67,72544,72545,72547,72549,72551],{"class":69,"line":2335},[67,72546,55243],{"class":208},[67,72548,51974],{"class":77},[67,72550,1051],{"class":208},[67,72552,2017],{"class":77},[67,72554,72555],{"class":69,"line":2340},[67,72556,2909],{"class":77},[67,72558,72559],{"class":69,"line":2346},[67,72560,177],{"emptyLinePlaceholder":176},[67,72562,72563,72565],{"class":69,"line":2351},[67,72564,57816],{"class":51837},[67,72566,16289],{"class":77},[67,72568,72569,72571,72573,72575],{"class":69,"line":2365},[67,72570,57823],{"class":208},[67,72572,51974],{"class":77},[67,72574,52129],{"class":208},[67,72576,2017],{"class":77},[67,72578,72579,72581,72583,72585,72587],{"class":69,"line":2370},[67,72580,62614],{"class":208},[67,72582,51974],{"class":77},[67,72584,1556],{"class":208},[67,72586,52029],{"class":73},[67,72588,2017],{"class":77},[67,72590,72591],{"class":69,"line":2376},[67,72592,2909],{"class":77},[67,72594,72595],{"class":69,"line":2397},[67,72596,177],{"emptyLinePlaceholder":176},[67,72598,72599,72602],{"class":69,"line":2402},[67,72600,72601],{"class":112},"    .info",[67,72603,16289],{"class":77},[67,72605,72606,72608,72610,72612,72614],{"class":69,"line":2416},[67,72607,55308],{"class":208},[67,72609,51974],{"class":77},[67,72611,52026],{"class":208},[67,72613,52029],{"class":73},[67,72615,2017],{"class":77},[67,72617,72618,72620,72622,72624,72626,72628],{"class":69,"line":2421},[67,72619,55243],{"class":208},[67,72621,51974],{"class":77},[67,72623,1303],{"class":208},[67,72625,52029],{"class":73},[67,72627,52093],{"class":208},[67,72629,2017],{"class":77},[67,72631,72632,72634,72636,72638],{"class":69,"line":2450},[67,72633,57823],{"class":208},[67,72635,51974],{"class":77},[67,72637,52129],{"class":208},[67,72639,2017],{"class":77},[67,72641,72642],{"class":69,"line":2455},[67,72643,2909],{"class":77},[67,72645,72646],{"class":69,"line":2472},[67,72647,177],{"emptyLinePlaceholder":176},[67,72649,72650,72653],{"class":69,"line":2477},[67,72651,72652],{"class":112},"    .uname",[67,72654,32003],{"class":77},[67,72656,72657,72660],{"class":69,"line":2482},[67,72658,72659],{"class":112},"    .age",[67,72661,32003],{"class":77},[67,72663,72664,72667],{"class":69,"line":2487},[67,72665,72666],{"class":112},"    .salary",[67,72668,16289],{"class":77},[67,72670,72671,72673,72675,72677,72679],{"class":69,"line":2501},[67,72672,55308],{"class":208},[67,72674,51974],{"class":77},[67,72676,1169],{"class":208},[67,72678,52029],{"class":73},[67,72680,2017],{"class":77},[67,72682,72683,72685,72687,72689,72691],{"class":69,"line":2506},[67,72684,55322],{"class":208},[67,72686,51974],{"class":77},[67,72688,1556],{"class":208},[67,72690,52029],{"class":73},[67,72692,2017],{"class":77},[67,72694,72695,72697,72699,72701],{"class":69,"line":3298},[67,72696,62317],{"class":208},[67,72698,51974],{"class":77},[67,72700,55274],{"class":208},[67,72702,2017],{"class":77},[67,72704,72705,72707,72709,72711,72713],{"class":69,"line":3312},[67,72706,62287],{"class":208},[67,72708,51974],{"class":77},[67,72710,1431],{"class":208},[67,72712,52029],{"class":73},[67,72714,2017],{"class":77},[67,72716,72717],{"class":69,"line":3320},[67,72718,2909],{"class":77},[67,72720,72721],{"class":69,"line":3325},[67,72722,177],{"emptyLinePlaceholder":176},[67,72724,72725,72728],{"class":69,"line":3331},[67,72726,72727],{"class":112},"    .gender",[67,72729,32003],{"class":77},[67,72731,72732,72735],{"class":69,"line":3337},[67,72733,72734],{"class":112},"    .city",[67,72736,16289],{"class":77},[67,72738,72739,72741,72743,72745,72747],{"class":69,"line":3342},[67,72740,55308],{"class":208},[67,72742,51974],{"class":77},[67,72744,1169],{"class":208},[67,72746,52029],{"class":73},[67,72748,2017],{"class":77},[67,72750,72751,72753,72755,72757,72759],{"class":69,"line":8667},[67,72752,55322],{"class":208},[67,72754,51974],{"class":77},[67,72756,1681],{"class":208},[67,72758,52029],{"class":73},[67,72760,2017],{"class":77},[67,72762,72763,72765,72767,72769],{"class":69,"line":8691},[67,72764,62317],{"class":208},[67,72766,51974],{"class":77},[67,72768,55274],{"class":208},[67,72770,2017],{"class":77},[67,72772,72773,72775,72777,72779,72781],{"class":69,"line":8696},[67,72774,62287],{"class":208},[67,72776,51974],{"class":77},[67,72778,1431],{"class":208},[67,72780,52029],{"class":73},[67,72782,2017],{"class":77},[67,72784,72785,72787,72789,72791,72793,72795,72798,72800,72802,72804,72807,72809,72811],{"class":69,"line":8702},[67,72786,62514],{"class":208},[67,72788,51974],{"class":77},[67,72790,1077],{"class":208},[67,72792,52029],{"class":73},[67,72794,52058],{"class":208},[67,72796,72797],{"class":208}," rgb",[67,72799,864],{"class":77},[67,72801,2445],{"class":208},[67,72803,13153],{"class":77},[67,72805,72806],{"class":208},"197",[67,72808,13153],{"class":77},[67,72810,72806],{"class":208},[67,72812,3440],{"class":77},[67,72814,72815],{"class":69,"line":8729},[67,72816,2909],{"class":77},[67,72818,72819],{"class":69,"line":8734},[67,72820,177],{"emptyLinePlaceholder":176},[67,72822,72823,72826],{"class":69,"line":8740},[67,72824,72825],{"class":51837},"    button",[67,72827,16289],{"class":77},[67,72829,72830,72832,72834,72836,72838],{"class":69,"line":8752},[67,72831,55322],{"class":208},[67,72833,51974],{"class":77},[67,72835,1681],{"class":208},[67,72837,52029],{"class":73},[67,72839,2017],{"class":77},[67,72841,72842,72844,72846,72848,72850],{"class":69,"line":8764},[67,72843,55308],{"class":208},[67,72845,51974],{"class":77},[67,72847,1341],{"class":208},[67,72849,52029],{"class":73},[67,72851,2017],{"class":77},[67,72853,72854,72856,72858,72861,72863,72865,72867,72870,72872,72874],{"class":69,"line":8776},[67,72855,55421],{"class":208},[67,72857,51974],{"class":77},[67,72859,72860],{"class":208},"rgb",[67,72862,864],{"class":77},[67,72864,1825],{"class":208},[67,72866,13153],{"class":77},[67,72868,72869],{"class":208},"187",[67,72871,13153],{"class":77},[67,72873,1157],{"class":208},[67,72875,3440],{"class":77},[67,72877,72878,72880,72882,72884],{"class":69,"line":10435},[67,72879,57953],{"class":208},[67,72881,51974],{"class":77},[67,72883,61379],{"class":208},[67,72885,2017],{"class":77},[67,72887,72888,72890,72892,72894],{"class":69,"line":10459},[67,72889,62514],{"class":208},[67,72891,51974],{"class":77},[67,72893,1051],{"class":208},[67,72895,2017],{"class":77},[67,72897,72898],{"class":69,"line":10482},[67,72899,2909],{"class":77},[67,72901,72902],{"class":69,"line":10506},[67,72903,177],{"emptyLinePlaceholder":176},[67,72905,72906,72908,72910],{"class":69,"line":10511},[67,72907,72825],{"class":51837},[67,72909,52225],{"class":51837},[67,72911,16289],{"class":77},[67,72913,72914,72916,72918,72921],{"class":69,"line":10516},[67,72915,55546],{"class":208},[67,72917,51974],{"class":77},[67,72919,72920],{"class":208},"inline-block",[67,72922,2017],{"class":77},[67,72924,72925,72927,72929,72931,72933],{"class":69,"line":10521},[67,72926,55308],{"class":208},[67,72928,51974],{"class":77},[67,72930,1303],{"class":208},[67,72932,52029],{"class":73},[67,72934,2017],{"class":77},[67,72936,72937,72939,72941,72943,72945],{"class":69,"line":10530},[67,72938,55322],{"class":208},[67,72940,51974],{"class":77},[67,72942,1303],{"class":208},[67,72944,52029],{"class":73},[67,72946,2017],{"class":77},[67,72948,72949,72951,72953,72955,72957],{"class":69,"line":10535},[67,72950,57896],{"class":208},[67,72952,51974],{"class":77},[67,72954,1329],{"class":208},[67,72956,52029],{"class":73},[67,72958,2017],{"class":77},[67,72960,72961,72963,72965,72967,72969,72971,72974],{"class":69,"line":10541},[67,72962,62514],{"class":208},[67,72964,51974],{"class":77},[67,72966,1077],{"class":208},[67,72968,52029],{"class":73},[67,72970,52058],{"class":208},[67,72972,72973],{"class":208}," #fff",[67,72975,2017],{"class":77},[67,72977,72978,72980,72982,72984,72986],{"class":69,"line":10562},[67,72979,55671],{"class":208},[67,72981,51974],{"class":77},[67,72983,1177],{"class":208},[67,72985,52029],{"class":73},[67,72987,2017],{"class":77},[67,72989,72990,72992,72994,72996,72998],{"class":69,"line":10568},[67,72991,62287],{"class":208},[67,72993,51974],{"class":77},[67,72995,1077],{"class":208},[67,72997,52029],{"class":73},[67,72999,2017],{"class":77},[67,73001,73002],{"class":69,"line":10582},[67,73003,2909],{"class":77},[67,73005,73006],{"class":69,"line":10588},[67,73007,177],{"emptyLinePlaceholder":176},[67,73009,73010,73013],{"class":69,"line":10615},[67,73011,73012],{"class":112},"    .total",[67,73014,16289],{"class":77},[67,73016,73017,73019,73021,73023,73025],{"class":69,"line":10624},[67,73018,55308],{"class":208},[67,73020,51974],{"class":77},[67,73022,62166],{"class":208},[67,73024,52029],{"class":73},[67,73026,2017],{"class":77},[67,73028,73029,73031,73033,73035,73037],{"class":69,"line":10630},[67,73030,55322],{"class":208},[67,73032,51974],{"class":77},[67,73034,1259],{"class":208},[67,73036,52029],{"class":73},[67,73038,2017],{"class":77},[67,73040,73041,73043,73045,73047,73049],{"class":69,"line":10638},[67,73042,57896],{"class":208},[67,73044,51974],{"class":77},[67,73046,1259],{"class":208},[67,73048,52029],{"class":73},[67,73050,2017],{"class":77},[67,73052,73053,73055,73057,73060],{"class":69,"line":10643},[67,73054,57823],{"class":208},[67,73056,51974],{"class":77},[67,73058,73059],{"class":208},"right",[67,73061,2017],{"class":77},[67,73063,73064,73066,73068,73070,73072,73074,73076,73078],{"class":69,"line":17321},[67,73065,55243],{"class":208},[67,73067,51974],{"class":77},[67,73069,1259],{"class":208},[67,73071,52029],{"class":73},[67,73073,52093],{"class":208},[67,73075,2760],{"class":208},[67,73077,52029],{"class":73},[67,73079,2017],{"class":77},[67,73081,73082,73085,73087,73089,73091],{"class":69,"line":17327},[67,73083,73084],{"class":208},"      padding-right",[67,73086,51974],{"class":77},[67,73088,1303],{"class":208},[67,73090,52029],{"class":73},[67,73092,2017],{"class":77},[67,73094,73095,73097,73099,73101,73103],{"class":69,"line":17350},[67,73096,55459],{"class":208},[67,73098,51974],{"class":77},[67,73100,1380],{"class":208},[67,73102,52029],{"class":73},[67,73104,2017],{"class":77},[67,73106,73107,73109,73111,73113,73115,73118,73120,73123,73125,73127],{"class":69,"line":17356},[67,73108,55421],{"class":208},[67,73110,51974],{"class":77},[67,73112,72860],{"class":208},[67,73114,864],{"class":77},[67,73116,73117],{"class":208},"237",[67,73119,13153],{"class":77},[67,73121,73122],{"class":208},"235",[67,73124,13153],{"class":77},[67,73126,73122],{"class":208},[67,73128,3440],{"class":77},[67,73130,73131,73134,73136,73138],{"class":69,"line":17379},[67,73132,73133],{"class":208},"      box-sizing",[67,73135,51974],{"class":77},[67,73137,61042],{"class":208},[67,73139,2017],{"class":77},[67,73141,73142],{"class":69,"line":17393},[67,73143,2909],{"class":77},[67,73145,73146],{"class":69,"line":17413},[67,73147,177],{"emptyLinePlaceholder":176},[67,73149,73150,73152,73154],{"class":69,"line":17419},[67,73151,73012],{"class":112},[67,73153,52225],{"class":51837},[67,73155,16289],{"class":77},[67,73157,73158,73160,73162,73164],{"class":69,"line":17430},[67,73159,57953],{"class":208},[67,73161,51974],{"class":77},[67,73163,57958],{"class":208},[67,73165,2017],{"class":77},[67,73167,73168],{"class":69,"line":17453},[67,73169,2909],{"class":77},[67,73171,73172],{"class":69,"line":17475},[67,73173,177],{"emptyLinePlaceholder":176},[67,73175,73176,73178],{"class":69,"line":17480},[67,73177,65560],{"class":51837},[67,73179,16289],{"class":77},[67,73181,73182,73184,73186,73188,73190],{"class":69,"line":17486},[67,73183,55308],{"class":208},[67,73185,51974],{"class":77},[67,73187,62166],{"class":208},[67,73189,52029],{"class":73},[67,73191,2017],{"class":77},[67,73193,73194,73196,73198,73201],{"class":69,"line":17500},[67,73195,55243],{"class":208},[67,73197,51974],{"class":77},[67,73199,73200],{"class":208},"auto",[67,73202,2017],{"class":77},[67,73204,73205,73207,73209,73211],{"class":69,"line":17513},[67,73206,65567],{"class":208},[67,73208,51974],{"class":77},[67,73210,65572],{"class":208},[67,73212,2017],{"class":77},[67,73214,73215],{"class":69,"line":17518},[67,73216,2909],{"class":77},[67,73218,73219],{"class":69,"line":17532},[67,73220,177],{"emptyLinePlaceholder":176},[67,73222,73223,73225],{"class":69,"line":17537},[67,73224,65652],{"class":51837},[67,73226,16289],{"class":77},[67,73228,73229,73231,73233,73235,73237,73239,73241,73243,73245,73247],{"class":69,"line":17543},[67,73230,55421],{"class":208},[67,73232,51974],{"class":77},[67,73234,72860],{"class":208},[67,73236,864],{"class":77},[67,73238,73117],{"class":208},[67,73240,13153],{"class":77},[67,73242,73122],{"class":208},[67,73244,13153],{"class":77},[67,73246,73122],{"class":208},[67,73248,3440],{"class":77},[67,73250,73251],{"class":69,"line":17548},[67,73252,2909],{"class":77},[67,73254,73255],{"class":69,"line":17562},[67,73256,177],{"emptyLinePlaceholder":176},[67,73258,73259,73261],{"class":69,"line":17567},[67,73260,65652],{"class":51837},[67,73262,32003],{"class":77},[67,73264,73265,73267],{"class":69,"line":17572},[67,73266,65718],{"class":51837},[67,73268,16289],{"class":77},[67,73270,73271,73273,73275,73277,73279],{"class":69,"line":17586},[67,73272,55322],{"class":208},[67,73274,51974],{"class":77},[67,73276,1131],{"class":208},[67,73278,52029],{"class":73},[67,73280,2017],{"class":77},[67,73282,73283,73285,73287,73289],{"class":69,"line":17598},[67,73284,57823],{"class":208},[67,73286,51974],{"class":77},[67,73288,24453],{"class":208},[67,73290,2017],{"class":77},[67,73292,73293,73295,73297,73299,73301],{"class":69,"line":17603},[67,73294,55459],{"class":208},[67,73296,51974],{"class":77},[67,73298,1406],{"class":208},[67,73300,52029],{"class":73},[67,73302,2017],{"class":77},[67,73304,73305,73307,73309,73311,73313,73315,73317,73319,73322,73324,73327,73329,73331],{"class":69,"line":17616},[67,73306,62514],{"class":208},[67,73308,51974],{"class":77},[67,73310,1077],{"class":208},[67,73312,52029],{"class":73},[67,73314,52058],{"class":208},[67,73316,72797],{"class":208},[67,73318,864],{"class":77},[67,73320,73321],{"class":208},"228",[67,73323,13153],{"class":77},[67,73325,73326],{"class":208},"225",[67,73328,13153],{"class":77},[67,73330,73326],{"class":208},[67,73332,3440],{"class":77},[67,73334,73335,73338,73340,73342,73344],{"class":69,"line":17621},[67,73336,73337],{"class":208},"      padding-left",[67,73339,51974],{"class":77},[67,73341,1177],{"class":208},[67,73343,52029],{"class":73},[67,73345,2017],{"class":77},[67,73347,73348,73350,73352,73354,73357,73359,73361],{"class":69,"line":17626},[67,73349,62397],{"class":208},[67,73351,51974],{"class":77},[67,73353,28658],{"class":208},[67,73355,73356],{"class":208}," linear",[67,73358,62404],{"class":208},[67,73360,1551],{"class":73},[67,73362,2017],{"class":77},[67,73364,73365],{"class":69,"line":17631},[67,73366,2909],{"class":77},[67,73368,73369],{"class":69,"line":17644},[67,73370,177],{"emptyLinePlaceholder":176},[67,73372,73373,73376,73378,73380],{"class":69,"line":17649},[67,73374,73375],{"class":51837},"    tbody",[67,73377,70681],{"class":51837},[67,73379,61477],{"class":112},[67,73381,16289],{"class":77},[67,73383,73384,73386,73388,73390,73392,73394,73396,73398,73400,73402],{"class":69,"line":33170},[67,73385,55421],{"class":208},[67,73387,51974],{"class":77},[67,73389,72860],{"class":208},[67,73391,864],{"class":77},[67,73393,73117],{"class":208},[67,73395,13153],{"class":77},[67,73397,73122],{"class":208},[67,73399,13153],{"class":77},[67,73401,73122],{"class":208},[67,73403,3440],{"class":77},[67,73405,73406,73408,73410,73412],{"class":69,"line":33176},[67,73407,62562],{"class":208},[67,73409,51974],{"class":77},[67,73411,62567],{"class":208},[67,73413,2017],{"class":77},[67,73415,73416],{"class":69,"line":33182},[67,73417,2909],{"class":77},[67,73419,73420],{"class":69,"line":33188},[67,73421,177],{"emptyLinePlaceholder":176},[67,73423,73424,73426,73428,73431,73433],{"class":69,"line":33194},[67,73425,73375],{"class":51837},[67,73427,70681],{"class":51837},[67,73429,73430],{"class":51837}," td",[67,73432,2122],{"class":51837},[67,73434,16289],{"class":77},[67,73436,73437,73439,73441,73443],{"class":69,"line":33205},[67,73438,55546],{"class":208},[67,73440,51974],{"class":77},[67,73442,61406],{"class":208},[67,73444,2017],{"class":77},[67,73446,73447,73449,73451,73453,73455],{"class":69,"line":33211},[67,73448,55308],{"class":208},[67,73450,51974],{"class":77},[67,73452,1763],{"class":208},[67,73454,52029],{"class":73},[67,73456,2017],{"class":77},[67,73458,73459,73461,73463,73465,73467],{"class":69,"line":33231},[67,73460,55322],{"class":208},[67,73462,51974],{"class":77},[67,73464,1681],{"class":208},[67,73466,52029],{"class":73},[67,73468,2017],{"class":77},[67,73470,73471,73473,73475,73477,73479],{"class":69,"line":33237},[67,73472,57896],{"class":208},[67,73474,51974],{"class":77},[67,73476,1681],{"class":208},[67,73478,52029],{"class":73},[67,73480,2017],{"class":77},[67,73482,73483,73485,73487,73489,73491],{"class":69,"line":33248},[67,73484,62614],{"class":208},[67,73486,51974],{"class":77},[67,73488,939],{"class":208},[67,73490,52029],{"class":73},[67,73492,2017],{"class":77},[67,73494,73495,73497,73499,73501],{"class":69,"line":33254},[67,73496,57953],{"class":208},[67,73498,51974],{"class":77},[67,73500,61379],{"class":208},[67,73502,2017],{"class":77},[67,73504,73505,73507,73509,73511],{"class":69,"line":33260},[67,73506,57823],{"class":208},[67,73508,51974],{"class":77},[67,73510,52129],{"class":208},[67,73512,2017],{"class":77},[67,73514,73515,73517,73519,73521],{"class":69,"line":33266},[67,73516,64507],{"class":208},[67,73518,51974],{"class":77},[67,73520,55274],{"class":208},[67,73522,2017],{"class":77},[67,73524,73525,73527,73529,73532],{"class":69,"line":33272},[67,73526,55421],{"class":208},[67,73528,51974],{"class":77},[67,73530,73531],{"class":208},"orange",[67,73533,2017],{"class":77},[67,73535,73536,73538,73540,73543,73545],{"class":69,"line":33278},[67,73537,55671],{"class":208},[67,73539,51974],{"class":77},[67,73541,73542],{"class":208},"12.5",[67,73544,52029],{"class":73},[67,73546,2017],{"class":77},[67,73548,73549],{"class":69,"line":33284},[67,73550,2909],{"class":77},[67,73552,73553,73555,73557],{"class":69,"line":33290},[67,73554,52954],{"class":77},[67,73556,779],{"class":51837},[67,73558,51844],{"class":77},[67,73560,73561,73563,73565],{"class":69,"line":33310},[67,73562,52322],{"class":77},[67,73564,51871],{"class":51837},[67,73566,51844],{"class":77},[67,73568,73569],{"class":69,"line":33316},[67,73570,177],{"emptyLinePlaceholder":176},[67,73572,73573,73575,73577],{"class":69,"line":33332},[67,73574,1766],{"class":77},[67,73576,52337],{"class":51837},[67,73578,51844],{"class":77},[67,73580,73581,73583,73585,73588,73590],{"class":69,"line":33338},[67,73582,52681],{"class":77},[67,73584,803],{"class":51837},[67,73586,73587],{"class":77},">学生就业统计表\u003C\u002F",[67,73589,803],{"class":51837},[67,73591,51844],{"class":77},[67,73593,73594,73596,73598,73600,73602,73604,73606,73608,73610],{"class":69,"line":33352},[67,73595,52681],{"class":77},[67,73597,67162],{"class":51837},[67,73599,54023],{"class":112},[67,73601,909],{"class":77},[67,73603,63201],{"class":84},[67,73605,69607],{"class":112},[67,73607,909],{"class":77},[67,73609,32313],{"class":84},[67,73611,51844],{"class":77},[67,73613,73614,73616,73618,73620,73622,73624,73626,73628,73630,73632,73634,73637,73639,73641,73643],{"class":69,"line":33358},[67,73615,51878],{"class":77},[67,73617,54358],{"class":51837},[67,73619,54361],{"class":112},[67,73621,909],{"class":77},[67,73623,63236],{"class":84},[67,73625,15637],{"class":112},[67,73627,909],{"class":77},[67,73629,69633],{"class":84},[67,73631,61557],{"class":112},[67,73633,909],{"class":77},[67,73635,73636],{"class":84},"\"姓名\"",[67,73638,54023],{"class":112},[67,73640,909],{"class":77},[67,73642,69633],{"class":84},[67,73644,51844],{"class":77},[67,73646,73647,73649,73651,73653,73655,73657,73659,73661,73663,73665,73667,73670,73672,73674,73676],{"class":69,"line":33373},[67,73648,51878],{"class":77},[67,73650,54358],{"class":51837},[67,73652,54361],{"class":112},[67,73654,909],{"class":77},[67,73656,63236],{"class":84},[67,73658,15637],{"class":112},[67,73660,909],{"class":77},[67,73662,69661],{"class":84},[67,73664,61557],{"class":112},[67,73666,909],{"class":77},[67,73668,73669],{"class":84},"\"年龄\"",[67,73671,54023],{"class":112},[67,73673,909],{"class":77},[67,73675,69661],{"class":84},[67,73677,51844],{"class":77},[67,73679,73680,73682,73684,73686,73688,73690,73692,73694,73696,73698,73700,73703,73705,73707,73709],{"class":69,"line":33379},[67,73681,51878],{"class":77},[67,73683,54358],{"class":51837},[67,73685,54361],{"class":112},[67,73687,909],{"class":77},[67,73689,63236],{"class":84},[67,73691,15637],{"class":112},[67,73693,909],{"class":77},[67,73695,69763],{"class":84},[67,73697,61557],{"class":112},[67,73699,909],{"class":77},[67,73701,73702],{"class":84},"\"薪资\"",[67,73704,54023],{"class":112},[67,73706,909],{"class":77},[67,73708,69763],{"class":84},[67,73710,51844],{"class":77},[67,73712,73713,73715,73717,73719,73721,73723,73725,73727,73729,73731,73733,73735],{"class":69,"line":33388},[67,73714,51878],{"class":77},[67,73716,69681],{"class":51837},[67,73718,15637],{"class":112},[67,73720,909],{"class":77},[67,73722,69688],{"class":84},[67,73724,15676],{"class":112},[67,73726,909],{"class":77},[67,73728,8371],{"class":84},[67,73730,54023],{"class":112},[67,73732,909],{"class":77},[67,73734,69688],{"class":84},[67,73736,51844],{"class":77},[67,73738,73739,73741,73743,73745,73747,73749,73751,73753],{"class":69,"line":33394},[67,73740,55771],{"class":77},[67,73742,69703],{"class":51837},[67,73744,67188],{"class":112},[67,73746,909],{"class":77},[67,73748,10679],{"class":84},[67,73750,69712],{"class":77},[67,73752,69703],{"class":51837},[67,73754,51844],{"class":77},[67,73756,73757,73759,73761,73763,73765,73767,73769,73771],{"class":69,"line":33403},[67,73758,55771],{"class":77},[67,73760,69703],{"class":51837},[67,73762,67188],{"class":112},[67,73764,909],{"class":77},[67,73766,10748],{"class":84},[67,73768,69731],{"class":77},[67,73770,69703],{"class":51837},[67,73772,51844],{"class":77},[67,73774,73775,73777,73779],{"class":69,"line":33409},[67,73776,52313],{"class":77},[67,73778,69681],{"class":51837},[67,73780,51844],{"class":77},[67,73782,73783,73785,73787,73789,73791,73793,73795,73797,73799,73801,73803,73805],{"class":69,"line":33415},[67,73784,51878],{"class":77},[67,73786,69681],{"class":51837},[67,73788,15637],{"class":112},[67,73790,909],{"class":77},[67,73792,69785],{"class":84},[67,73794,15676],{"class":112},[67,73796,909],{"class":77},[67,73798,8371],{"class":84},[67,73800,54023],{"class":112},[67,73802,909],{"class":77},[67,73804,69785],{"class":84},[67,73806,51844],{"class":77},[67,73808,73809,73811,73813,73815,73817,73819,73821,73823],{"class":69,"line":33424},[67,73810,55771],{"class":77},[67,73812,69703],{"class":51837},[67,73814,67188],{"class":112},[67,73816,909],{"class":77},[67,73818,69806],{"class":84},[67,73820,69809],{"class":77},[67,73822,69703],{"class":51837},[67,73824,51844],{"class":77},[67,73826,73827,73829,73831,73833,73835,73837,73839,73841],{"class":69,"line":33430},[67,73828,55771],{"class":77},[67,73830,69703],{"class":51837},[67,73832,67188],{"class":112},[67,73834,909],{"class":77},[67,73836,69826],{"class":84},[67,73838,69829],{"class":77},[67,73840,69703],{"class":51837},[67,73842,51844],{"class":77},[67,73844,73845,73847,73849,73851,73853,73855,73857,73859],{"class":69,"line":33441},[67,73846,55771],{"class":77},[67,73848,69703],{"class":51837},[67,73850,67188],{"class":112},[67,73852,909],{"class":77},[67,73854,69846],{"class":84},[67,73856,69849],{"class":77},[67,73858,69703],{"class":51837},[67,73860,51844],{"class":77},[67,73862,73863,73865,73867,73869,73871,73873,73875,73877],{"class":69,"line":33447},[67,73864,55771],{"class":77},[67,73866,69703],{"class":51837},[67,73868,67188],{"class":112},[67,73870,909],{"class":77},[67,73872,69866],{"class":84},[67,73874,69869],{"class":77},[67,73876,69703],{"class":51837},[67,73878,51844],{"class":77},[67,73880,73881,73883,73885,73887,73889,73891,73893,73895],{"class":69,"line":33466},[67,73882,55771],{"class":77},[67,73884,69703],{"class":51837},[67,73886,67188],{"class":112},[67,73888,909],{"class":77},[67,73890,69886],{"class":84},[67,73892,69889],{"class":77},[67,73894,69703],{"class":51837},[67,73896,51844],{"class":77},[67,73898,73899,73901,73903],{"class":69,"line":33472},[67,73900,52313],{"class":77},[67,73902,69681],{"class":51837},[67,73904,51844],{"class":77},[67,73906,73907,73909,73911],{"class":69,"line":33483},[67,73908,51878],{"class":77},[67,73910,54424],{"class":51837},[67,73912,51844],{"class":77},[67,73914,73915,73917,73919,73922,73924,73927,73929],{"class":69,"line":33489},[67,73916,55771],{"class":77},[67,73918,67],{"class":51837},[67,73920,73921],{"class":77},">+\u003C\u002F",[67,73923,67],{"class":51837},[67,73925,73926],{"class":77},">添加\u003C\u002F",[67,73928,54424],{"class":51837},[67,73930,51844],{"class":77},[67,73932,73933,73935,73937],{"class":69,"line":33509},[67,73934,52954],{"class":77},[67,73936,67162],{"class":51837},[67,73938,51844],{"class":77},[67,73940,73941,73943,73945,73947,73949,73951,73954,73956,73959,73961,73964,73966],{"class":69,"line":33525},[67,73942,52681],{"class":77},[67,73944,52148],{"class":51837},[67,73946,54023],{"class":112},[67,73948,909],{"class":77},[67,73950,63117],{"class":84},[67,73952,73953],{"class":77},">共有数据 \u003C",[67,73955,67],{"class":51837},[67,73957,73958],{"class":77},">0\u003C\u002F",[67,73960,67],{"class":51837},[67,73962,73963],{"class":77},"> 条\u003C\u002F",[67,73965,52148],{"class":51837},[67,73967,51844],{"class":77},[67,73969,73970,73972,73974],{"class":69,"line":33531},[67,73971,52681],{"class":77},[67,73973,998],{"class":51837},[67,73975,51844],{"class":77},[67,73977,73978,73980,73982],{"class":69,"line":33545},[67,73979,51878],{"class":77},[67,73981,1001],{"class":51837},[67,73983,51844],{"class":77},[67,73985,73986,73988,73990],{"class":69,"line":33551},[67,73987,55771],{"class":77},[67,73989,1004],{"class":51837},[67,73991,51844],{"class":77},[67,73993,73994,73996,73998,74001,74003],{"class":69,"line":33557},[67,73995,55839],{"class":77},[67,73997,1007],{"class":51837},[67,73999,74000],{"class":77},">ID\u003C\u002F",[67,74002,1007],{"class":51837},[67,74004,51844],{"class":77},[67,74006,74007,74009,74011,74013,74015],{"class":69,"line":33568},[67,74008,55839],{"class":77},[67,74010,1007],{"class":51837},[67,74012,69992],{"class":77},[67,74014,1007],{"class":51837},[67,74016,51844],{"class":77},[67,74018,74019,74021,74023,74025,74027],{"class":69,"line":33574},[67,74020,55839],{"class":77},[67,74022,1007],{"class":51837},[67,74024,70005],{"class":77},[67,74026,1007],{"class":51837},[67,74028,51844],{"class":77},[67,74030,74031,74033,74035,74037,74039],{"class":69,"line":33580},[67,74032,55839],{"class":77},[67,74034,1007],{"class":51837},[67,74036,70018],{"class":77},[67,74038,1007],{"class":51837},[67,74040,51844],{"class":77},[67,74042,74043,74045,74047,74049,74051],{"class":69,"line":33590},[67,74044,55839],{"class":77},[67,74046,1007],{"class":51837},[67,74048,70031],{"class":77},[67,74050,1007],{"class":51837},[67,74052,51844],{"class":77},[67,74054,74055,74057,74059,74061,74063],{"class":69,"line":33596},[67,74056,55839],{"class":77},[67,74058,1007],{"class":51837},[67,74060,70044],{"class":77},[67,74062,1007],{"class":51837},[67,74064,51844],{"class":77},[67,74066,74067,74069,74071,74074,74076],{"class":69,"line":33607},[67,74068,55839],{"class":77},[67,74070,1007],{"class":51837},[67,74072,74073],{"class":77},">录入时间\u003C\u002F",[67,74075,1007],{"class":51837},[67,74077,51844],{"class":77},[67,74079,74080,74082,74084,74086,74088],{"class":69,"line":33613},[67,74081,55839],{"class":77},[67,74083,1007],{"class":51837},[67,74085,70057],{"class":77},[67,74087,1007],{"class":51837},[67,74089,51844],{"class":77},[67,74091,74092,74094,74096],{"class":69,"line":33623},[67,74093,55944],{"class":77},[67,74095,1004],{"class":51837},[67,74097,51844],{"class":77},[67,74099,74100,74102,74104],{"class":69,"line":33628},[67,74101,52313],{"class":77},[67,74103,1001],{"class":51837},[67,74105,51844],{"class":77},[67,74107,74108,74110,74112],{"class":69,"line":33634},[67,74109,51878],{"class":77},[67,74111,1044],{"class":51837},[67,74113,51844],{"class":77},[67,74115,74116],{"class":69,"line":33683},[67,74117,74118],{"class":202},"      \u003C!-- \u003Ctr>\n",[67,74120,74121],{"class":69,"line":33730},[67,74122,74123],{"class":202},"        \u003Ctd>1\u003C\u002Ftd>\n",[67,74125,74126],{"class":69,"line":33735},[67,74127,74123],{"class":202},[67,74129,74130],{"class":69,"line":33741},[67,74131,74123],{"class":202},[67,74133,74134],{"class":69,"line":33760},[67,74135,74123],{"class":202},[67,74137,74138],{"class":69,"line":33766},[67,74139,74123],{"class":202},[67,74141,74142],{"class":69,"line":33786},[67,74143,74123],{"class":202},[67,74145,74146],{"class":69,"line":33792},[67,74147,74123],{"class":202},[67,74149,74150],{"class":69,"line":33798},[67,74151,74152],{"class":202},"        \u003Ctd>\n",[67,74154,74155],{"class":69,"line":33808},[67,74156,74157],{"class":202},"          \u003Ca href=\"#\" data-id=\"\">\u003C\u002Fa>\n",[67,74159,74160],{"class":69,"line":33813},[67,74161,74162],{"class":202},"        \u003C\u002Ftd>\n",[67,74164,74165],{"class":69,"line":33819},[67,74166,74167],{"class":202},"      \u003C\u002Ftr> -->\n",[67,74169,74170,74172,74174],{"class":69,"line":33835},[67,74171,52313],{"class":77},[67,74173,1044],{"class":51837},[67,74175,51844],{"class":77},[67,74177,74178,74180,74182],{"class":69,"line":33880},[67,74179,52954],{"class":77},[67,74181,998],{"class":51837},[67,74183,51844],{"class":77},[67,74185,74186,74188,74190],{"class":69,"line":33886},[67,74187,52681],{"class":77},[67,74189,52350],{"class":51837},[67,74191,51844],{"class":77},[67,74193,74194],{"class":69,"line":33892},[67,74195,74196],{"class":202},"    \u002F\u002F const initData = [{\n",[67,74198,74199],{"class":69,"line":33898},[67,74200,74201],{"class":202},"    \u002F\u002F   unameId: 1,\n",[67,74203,74204],{"class":69,"line":33909},[67,74205,74206],{"class":202},"    \u002F\u002F   uname: '华晨宇',\n",[67,74208,74209],{"class":69,"line":33915},[67,74210,74211],{"class":202},"    \u002F\u002F   age: 22,\n",[67,74213,74214],{"class":69,"line":33921},[67,74215,74216],{"class":202},"    \u002F\u002F   salary: 12000,\n",[67,74218,74219],{"class":69,"line":33927},[67,74220,74221],{"class":202},"    \u002F\u002F   gender: '男',\n",[67,74223,74224],{"class":69,"line":33945},[67,74225,74226],{"class":202},"    \u002F\u002F   city: '北京',\n",[67,74228,74229],{"class":69,"line":33959},[67,74230,74231],{"class":202},"    \u002F\u002F   time: '2099\u002F9\u002F9 08:08:08'\n",[67,74233,74234],{"class":69,"line":33968},[67,74235,74236],{"class":202},"    \u002F\u002F }]\n",[67,74238,74239],{"class":69,"line":33977},[67,74240,74241],{"class":202},"    \u002F\u002F localStorage.setItem('data', JSON.stringify(initData))\n",[67,74243,74244],{"class":69,"line":33986},[67,74245,74246],{"class":202},"    \u002F\u002F 1.渲染业务\n",[67,74248,74249],{"class":69,"line":33995},[67,74250,74251],{"class":202},"    \u002F\u002F 1.1 先读取本地存储的数据\n",[67,74253,74254],{"class":69,"line":34001},[67,74255,74256],{"class":202},"    \u002F\u002F (1) 本地存储有数据记得转换为对象然后存储到变量里面，后期用于渲染页面\n",[67,74258,74259],{"class":69,"line":34007},[67,74260,74261],{"class":202},"    \u002F\u002F (2) 如果没有数据，则用空数组来代替\n",[67,74263,74264],{"class":69,"line":34015},[67,74265,177],{"emptyLinePlaceholder":176},[67,74267,74268],{"class":69,"line":34020},[67,74269,74270],{"class":202},"    \u002F\u002F 下面这句话意思是去本地存储读取最新的数据\n",[67,74272,74273],{"class":69,"line":34026},[67,74274,74275],{"class":202},"    \u002F\u002F const arr = JSON.parse(localStorage.getItem('data')) || []\n",[67,74277,74278,74280,74282,74284],{"class":69,"line":34037},[67,74279,11939],{"class":73},[67,74281,58232],{"class":208},[67,74283,14282],{"class":73},[67,74285,52375],{"class":77},[67,74287,74288,74291,74293],{"class":69,"line":34043},[67,74289,74290],{"class":77},"    console.",[67,74292,58784],{"class":112},[67,74294,52949],{"class":77},[67,74296,74297],{"class":69,"line":34063},[67,74298,177],{"emptyLinePlaceholder":176},[67,74300,74301],{"class":69,"line":34069},[67,74302,74303],{"class":202},"    \u002F\u002F 时间函数\n",[67,74305,74306,74308,74311],{"class":69,"line":34075},[67,74307,70621],{"class":73},[67,74309,74310],{"class":112}," getTime",[67,74312,11571],{"class":77},[67,74314,74315,74317,74320,74322,74324,74327],{"class":69,"line":34081},[67,74316,58765],{"class":73},[67,74318,74319],{"class":208}," date",[67,74321,14282],{"class":73},[67,74323,12296],{"class":73},[67,74325,74326],{"class":112}," Date",[67,74328,2698],{"class":77},[67,74330,74331,74333,74335,74337,74340,74343,74345,74347,74349,74352,74355,74357,74359,74361,74363,74365,74367,74369],{"class":69,"line":34098},[67,74332,58765],{"class":73},[67,74334,16808],{"class":208},[67,74336,14282],{"class":73},[67,74338,74339],{"class":77}," date.",[67,74341,74342],{"class":112},"getHours",[67,74344,13768],{"class":77},[67,74346,1766],{"class":73},[67,74348,2760],{"class":208},[67,74350,74351],{"class":73}," ?",[67,74353,74354],{"class":84}," '0'",[67,74356,46103],{"class":73},[67,74358,74339],{"class":77},[67,74360,74342],{"class":112},[67,74362,13768],{"class":77},[67,74364,1715],{"class":73},[67,74366,74339],{"class":77},[67,74368,74342],{"class":112},[67,74370,2698],{"class":77},[67,74372,74373,74375,74378,74380,74382,74385,74387,74389,74391,74393,74395,74397,74399,74401,74403,74405,74407,74409],{"class":69,"line":34104},[67,74374,58765],{"class":73},[67,74376,74377],{"class":208}," m",[67,74379,14282],{"class":73},[67,74381,74339],{"class":77},[67,74383,74384],{"class":112},"getMinutes",[67,74386,13768],{"class":77},[67,74388,1766],{"class":73},[67,74390,2760],{"class":208},[67,74392,74351],{"class":73},[67,74394,74354],{"class":84},[67,74396,46103],{"class":73},[67,74398,74339],{"class":77},[67,74400,74384],{"class":112},[67,74402,13768],{"class":77},[67,74404,1715],{"class":73},[67,74406,74339],{"class":77},[67,74408,74384],{"class":112},[67,74410,2698],{"class":77},[67,74412,74413,74415,74417,74419,74421,74424,74426,74428,74430,74432,74434,74436,74438,74440,74442,74444,74446,74448],{"class":69,"line":34110},[67,74414,58765],{"class":73},[67,74416,9147],{"class":208},[67,74418,14282],{"class":73},[67,74420,74339],{"class":77},[67,74422,74423],{"class":112},"getSeconds",[67,74425,13768],{"class":77},[67,74427,1766],{"class":73},[67,74429,2760],{"class":208},[67,74431,74351],{"class":73},[67,74433,74354],{"class":84},[67,74435,46103],{"class":73},[67,74437,74339],{"class":77},[67,74439,74423],{"class":112},[67,74441,13768],{"class":77},[67,74443,1715],{"class":73},[67,74445,74339],{"class":77},[67,74447,74423],{"class":112},[67,74449,2698],{"class":77},[67,74451,74452,74454,74457,74459,74461,74464,74466,74469,74471,74474,74476,74478,74481,74483,74485,74487,74489,74491,74493,74496,74498,74501,74503,74506,74508,74510,74512],{"class":69,"line":34116},[67,74453,58765],{"class":73},[67,74455,74456],{"class":208}," str",[67,74458,14282],{"class":73},[67,74460,63440],{"class":84},[67,74462,74463],{"class":77},"date",[67,74465,240],{"class":84},[67,74467,74468],{"class":112},"getFullYear",[67,74470,3148],{"class":84},[67,74472,74473],{"class":84},"}\u002F${",[67,74475,74463],{"class":77},[67,74477,240],{"class":84},[67,74479,74480],{"class":112},"getMonth",[67,74482,13768],{"class":84},[67,74484,1338],{"class":73},[67,74486,25828],{"class":208},[67,74488,74473],{"class":84},[67,74490,74463],{"class":77},[67,74492,240],{"class":84},[67,74494,74495],{"class":112},"getDate",[67,74497,3148],{"class":84},[67,74499,74500],{"class":84},"} ${",[67,74502,1273],{"class":77},[67,74504,74505],{"class":84},"}:${",[67,74507,1401],{"class":77},[67,74509,74505],{"class":84},[67,74511,1551],{"class":77},[67,74513,74514],{"class":84},"}`\n",[67,74516,74517,74520],{"class":69,"line":34122},[67,74518,74519],{"class":73},"      return",[67,74521,74522],{"class":77}," str\n",[67,74524,74525],{"class":69,"line":34128},[67,74526,2909],{"class":77},[67,74528,74529],{"class":69,"line":34155},[67,74530,74531],{"class":202},"    \u002F\u002F 渲染函数\n",[67,74533,74534,74536,74538,74540,74542,74544,74546,74548],{"class":69,"line":34179},[67,74535,11939],{"class":73},[67,74537,70284],{"class":208},[67,74539,14282],{"class":73},[67,74541,54933],{"class":77},[67,74543,54936],{"class":112},[67,74545,864],{"class":77},[67,74547,70295],{"class":84},[67,74549,870],{"class":77},[67,74551,74552,74554,74556],{"class":69,"line":34185},[67,74553,70621],{"class":73},[67,74555,70624],{"class":112},[67,74557,11571],{"class":77},[67,74559,74560],{"class":69,"line":34191},[67,74561,74562],{"class":202},"      \u002F\u002F (1) 利用map遍历数组，返回对应tr的数组\n",[67,74564,74565],{"class":69,"line":34197},[67,74566,74567],{"class":202},"      \u002F\u002F map遍历的是数组，这里里边存的都是对象，所以ele就是代表里边的对象\n",[67,74569,74570,74572,74575,74577,74579,74582,74584,74586,74588,74591,74593,74596],{"class":69,"line":34208},[67,74571,58765],{"class":73},[67,74573,74574],{"class":208}," trArr",[67,74576,14282],{"class":73},[67,74578,52502],{"class":77},[67,74580,74581],{"class":112},"map",[67,74583,864],{"class":77},[67,74585,54986],{"class":73},[67,74587,2381],{"class":77},[67,74589,74590],{"class":5935},"ele",[67,74592,13153],{"class":77},[67,74594,74595],{"class":5935},"index",[67,74597,13160],{"class":77},[67,74599,74600,74602],{"class":69,"line":34219},[67,74601,15469],{"class":73},[67,74603,70705],{"class":84},[67,74605,74606],{"class":69,"line":34225},[67,74607,74608],{"class":84},"      \u003Ctr>\n",[67,74610,74611,74613,74615,74617,74620],{"class":69,"line":34242},[67,74612,70710],{"class":84},[67,74614,74590],{"class":77},[67,74616,240],{"class":84},[67,74618,74619],{"class":77},"unameId",[67,74621,70725],{"class":84},[67,74623,74624,74626,74628,74630,74632],{"class":69,"line":34265},[67,74625,70710],{"class":84},[67,74627,74590],{"class":77},[67,74629,240],{"class":84},[67,74631,70741],{"class":77},[67,74633,70725],{"class":84},[67,74635,74636,74638,74640,74642,74644],{"class":69,"line":34288},[67,74637,70710],{"class":84},[67,74639,74590],{"class":77},[67,74641,240],{"class":84},[67,74643,70758],{"class":77},[67,74645,70725],{"class":84},[67,74647,74648,74650,74652,74654,74656],{"class":69,"line":34294},[67,74649,70710],{"class":84},[67,74651,74590],{"class":77},[67,74653,240],{"class":84},[67,74655,70775],{"class":77},[67,74657,70725],{"class":84},[67,74659,74660,74662,74664,74666,74668],{"class":69,"line":34299},[67,74661,70710],{"class":84},[67,74663,74590],{"class":77},[67,74665,240],{"class":84},[67,74667,70792],{"class":77},[67,74669,70725],{"class":84},[67,74671,74672,74674,74676,74678,74680],{"class":69,"line":34308},[67,74673,70710],{"class":84},[67,74675,74590],{"class":77},[67,74677,240],{"class":84},[67,74679,70809],{"class":77},[67,74681,70725],{"class":84},[67,74683,74684,74686,74688,74690,74692],{"class":69,"line":34318},[67,74685,70710],{"class":84},[67,74687,74590],{"class":77},[67,74689,240],{"class":84},[67,74691,3109],{"class":77},[67,74693,70725],{"class":84},[67,74695,74696],{"class":69,"line":34324},[67,74697,74152],{"class":84},[67,74699,74700,74703,74705],{"class":69,"line":34329},[67,74701,74702],{"class":84},"          \u003Ca href=\"#\" data-id=\"${",[67,74704,74595],{"class":77},[67,74706,74707],{"class":84},"}\">删除\u003C\u002Fa>\n",[67,74709,74710],{"class":69,"line":34335},[67,74711,74162],{"class":84},[67,74713,74714],{"class":69,"line":34348},[67,74715,74716],{"class":84},"      \u003C\u002Ftr>\n",[67,74718,74719],{"class":69,"line":34354},[67,74720,74721],{"class":84},"  `\n",[67,74723,74724],{"class":69,"line":34365},[67,74725,65352],{"class":77},[67,74727,74728,74730,74732],{"class":69,"line":34376},[67,74729,58781],{"class":77},[67,74731,58784],{"class":112},[67,74733,74734],{"class":77},"(trArr)\n",[67,74736,74737],{"class":69,"line":34395},[67,74738,177],{"emptyLinePlaceholder":176},[67,74740,74741],{"class":69,"line":50055},[67,74742,74743],{"class":202},"      \u002F\u002F (2) 把数组转换为字符串join\n",[67,74745,74746],{"class":69,"line":50060},[67,74747,74748],{"class":202},"      \u002F\u002F (3) 把生成的字符串追加给tobody\n",[67,74750,74751,74753,74755,74758,74761,74763,74766],{"class":69,"line":50069},[67,74752,70636],{"class":77},[67,74754,909],{"class":73},[67,74756,74757],{"class":77}," trArr.",[67,74759,74760],{"class":112},"join",[67,74762,864],{"class":77},[67,74764,74765],{"class":84},"''",[67,74767,870],{"class":77},[67,74769,74770],{"class":69,"line":50078},[67,74771,74772],{"class":202},"      \u002F\u002F 显示共有几条\n",[67,74774,74775,74777,74779,74781,74784,74787,74789,74791],{"class":69,"line":50083},[67,74776,56308],{"class":77},[67,74778,54936],{"class":112},[67,74780,864],{"class":77},[67,74782,74783],{"class":84},"'.total span'",[67,74785,74786],{"class":77},").innerHTML ",[67,74788,909],{"class":73},[67,74790,52502],{"class":77},[67,74792,56368],{"class":208},[67,74794,74795],{"class":69,"line":50088},[67,74796,2909],{"class":77},[67,74798,74799],{"class":69,"line":50093},[67,74800,74801],{"class":202},"    \u002F\u002F render()\n",[67,74803,74804],{"class":69,"line":50106},[67,74805,177],{"emptyLinePlaceholder":176},[67,74807,74808],{"class":69,"line":50111},[67,74809,74810],{"class":202},"    \u002F\u002F 获取DOM对象\n",[67,74812,74813,74815,74817,74819,74821,74823,74825,74827],{"class":69,"line":50120},[67,74814,11939],{"class":73},[67,74816,70358],{"class":208},[67,74818,14282],{"class":73},[67,74820,54933],{"class":77},[67,74822,54936],{"class":112},[67,74824,864],{"class":77},[67,74826,70369],{"class":84},[67,74828,870],{"class":77},[67,74830,74831,74833,74835,74837,74839,74841,74843,74845],{"class":69,"line":50129},[67,74832,11939],{"class":73},[67,74834,70185],{"class":208},[67,74836,14282],{"class":73},[67,74838,54933],{"class":77},[67,74840,54936],{"class":112},[67,74842,864],{"class":77},[67,74844,70196],{"class":84},[67,74846,870],{"class":77},[67,74848,74849,74851,74853,74855,74857,74859,74861,74863],{"class":69,"line":50146},[67,74850,11939],{"class":73},[67,74852,16406],{"class":208},[67,74854,14282],{"class":73},[67,74856,54933],{"class":77},[67,74858,54936],{"class":112},[67,74860,864],{"class":77},[67,74862,70215],{"class":84},[67,74864,870],{"class":77},[67,74866,74868,74870,74872,74874,74876,74878,74880,74882],{"class":69,"line":74867},231,[67,74869,11939],{"class":73},[67,74871,70244],{"class":208},[67,74873,14282],{"class":73},[67,74875,54933],{"class":77},[67,74877,54936],{"class":112},[67,74879,864],{"class":77},[67,74881,70255],{"class":84},[67,74883,870],{"class":77},[67,74885,74887,74889,74891,74893,74895,74897,74899,74901],{"class":69,"line":74886},232,[67,74888,11939],{"class":73},[67,74890,70224],{"class":208},[67,74892,14282],{"class":73},[67,74894,54933],{"class":77},[67,74896,54936],{"class":112},[67,74898,864],{"class":77},[67,74900,70235],{"class":84},[67,74902,870],{"class":77},[67,74904,74906,74908,74910,74912,74914,74916,74918,74920],{"class":69,"line":74905},233,[67,74907,11939],{"class":73},[67,74909,70264],{"class":208},[67,74911,14282],{"class":73},[67,74913,54933],{"class":77},[67,74915,54936],{"class":112},[67,74917,864],{"class":77},[67,74919,70275],{"class":84},[67,74921,870],{"class":77},[67,74923,74925],{"class":69,"line":74924},234,[67,74926,177],{"emptyLinePlaceholder":176},[67,74928,74930],{"class":69,"line":74929},235,[67,74931,74932],{"class":202},"    \u002F\u002F form表单注册提交事件，阻止默认行为\n",[67,74934,74936,74938,74940,74942,74944,74946,74948,74950,74952],{"class":69,"line":74935},236,[67,74937,70376],{"class":77},[67,74939,58350],{"class":112},[67,74941,864],{"class":77},[67,74943,70383],{"class":84},[67,74945,13153],{"class":77},[67,74947,54986],{"class":73},[67,74949,2381],{"class":77},[67,74951,936],{"class":5935},[67,74953,13160],{"class":77},[67,74955,74957],{"class":69,"line":74956},237,[67,74958,74959],{"class":202},"      \u002F\u002F 禁止浏览器跳转\n",[67,74961,74963,74965,74967],{"class":69,"line":74962},238,[67,74964,70403],{"class":77},[67,74966,70406],{"class":112},[67,74968,2698],{"class":77},[67,74970,74972],{"class":69,"line":74971},239,[67,74973,74974],{"class":202},"      \u002F\u002F 非空判断\n",[67,74976,74978],{"class":69,"line":74977},240,[67,74979,74980],{"class":202},"      \u002F\u002F !代表取反的意思，输入的是字符串，如果输入了内容，字符串就是真，取反之后就为假\n",[67,74982,74984],{"class":69,"line":74983},241,[67,74985,74986],{"class":202},"      \u002F\u002F 就不执行if语句，如果没输入取反就为真，就执行了if语句，表示信息输入不全\n",[67,74988,74990,74992,74994,74996,74999,75001,75004,75007,75009,75011],{"class":69,"line":74989},242,[67,74991,55017],{"class":73},[67,74993,2381],{"class":77},[67,74995,1086],{"class":73},[67,74997,74998],{"class":77},"uname.value ",[67,75000,71894],{"class":73},[67,75002,75003],{"class":73}," !",[67,75005,75006],{"class":77},"age.value ",[67,75008,71894],{"class":73},[67,75010,75003],{"class":73},[67,75012,75013],{"class":77},"salary.value) {\n",[67,75015,75017,75019,75021,75023,75025],{"class":69,"line":75016},243,[67,75018,15469],{"class":73},[67,75020,70477],{"class":112},[67,75022,864],{"class":77},[67,75024,70482],{"class":84},[67,75026,870],{"class":77},[67,75028,75030],{"class":69,"line":75029},244,[67,75031,52935],{"class":77},[67,75033,75035,75037,75039],{"class":69,"line":75034},245,[67,75036,58544],{"class":77},[67,75038,52421],{"class":112},[67,75040,75041],{"class":77},"({\n",[67,75043,75045],{"class":69,"line":75044},246,[67,75046,75047],{"class":202},"        \u002F\u002F 这里是push，给数组添加对象，原来的数组如果只有一个对象的话，数组长度为1，\n",[67,75049,75051],{"class":69,"line":75050},247,[67,75052,75053],{"class":202},"        \u002F\u002F 在加上现在这个对象，数组里边的对象就有两个了，数组长度为2，所以新加的这个\n",[67,75055,75057],{"class":69,"line":75056},248,[67,75058,75059],{"class":202},"        \u002F\u002F 对象的序号应为数组长度+1\n",[67,75061,75063],{"class":69,"line":75062},249,[67,75064,75065],{"class":202},"        \u002F\u002F unameId: arr.length + 1,\n",[67,75067,75069],{"class":69,"line":75068},250,[67,75070,177],{"emptyLinePlaceholder":176},[67,75072,75074],{"class":69,"line":75073},251,[67,75075,75076],{"class":202},"        \u002F\u002F 因为是push  元素从数组的最后边添加，如果按照上边按照数组长度的方式来计算的话会出现图中两个数据ID分别为1，2\n",[67,75078,75080],{"class":69,"line":75079},252,[67,75081,75082],{"class":202},"        \u002F\u002F 删除1后，在添加一个数据，此时就都为2，2了\n",[67,75084,75086],{"class":69,"line":75085},253,[67,75087,75088],{"class":202},"        \u002F\u002F 必须进行判断，因为当全删除之后，就没有数据了，就不能通过数组中最后元素的unameId来获取了，此时直接给它赋值为1就可以\n",[67,75090,75092],{"class":69,"line":75091},254,[67,75093,75094],{"class":202},"        \u002F\u002F 0当假看\n",[67,75096,75098,75101,75103,75105,75108,75110,75112,75114,75117,75119,75121,75124,75126],{"class":69,"line":75097},255,[67,75099,75100],{"class":77},"        unameId: arr.",[67,75102,52505],{"class":208},[67,75104,74351],{"class":73},[67,75106,75107],{"class":77}," arr[arr.",[67,75109,52505],{"class":208},[67,75111,52808],{"class":73},[67,75113,25828],{"class":208},[67,75115,75116],{"class":77},"].unameId ",[67,75118,1338],{"class":73},[67,75120,25828],{"class":208},[67,75122,75123],{"class":73}," :",[67,75125,25828],{"class":208},[67,75127,32003],{"class":77},[67,75129,75131],{"class":69,"line":75130},256,[67,75132,70530],{"class":77},[67,75134,75136],{"class":69,"line":75135},257,[67,75137,70535],{"class":77},[67,75139,75141],{"class":69,"line":75140},258,[67,75142,70545],{"class":77},[67,75144,75146],{"class":69,"line":75145},259,[67,75147,70540],{"class":77},[67,75149,75151],{"class":69,"line":75150},260,[67,75152,75153],{"class":77},"        city: city.value,\n",[67,75155,75157],{"class":69,"line":75156},261,[67,75158,75159],{"class":202},"        \u002F\u002F 这里的时间可以不去封装函数，直接使用toLocaleString()方法\n",[67,75161,75163],{"class":69,"line":75162},262,[67,75164,75165],{"class":202},"        \u002F\u002F time: new Date().toDateString()\n",[67,75167,75169,75172,75175],{"class":69,"line":75168},263,[67,75170,75171],{"class":77},"        time: ",[67,75173,75174],{"class":112},"getTime",[67,75176,2698],{"class":77},[67,75178,75180],{"class":69,"line":75179},264,[67,75181,65352],{"class":77},[67,75183,75185],{"class":69,"line":75184},265,[67,75186,75187],{"class":202},"      \u002F\u002F 渲染页面和重置表单 （reset()方法）\n",[67,75189,75191,75193],{"class":69,"line":75190},266,[67,75192,70605],{"class":112},[67,75194,2698],{"class":77},[67,75196,75198,75200,75202,75204,75206],{"class":69,"line":75197},267,[67,75199,70588],{"class":208},[67,75201,240],{"class":77},[67,75203,70593],{"class":112},[67,75205,13768],{"class":77},[67,75207,75208],{"class":202},"\u002F\u002F重置表单\n",[67,75210,75212],{"class":69,"line":75211},268,[67,75213,75214],{"class":202},"      \u002F\u002F 把数据重新存放在本地存储里面，记得转换为JOSN字符串存储\n",[67,75216,75218,75221,75223,75225,75228,75230,75232,75234,75236],{"class":69,"line":75217},269,[67,75219,75220],{"class":77},"      localStorage.",[67,75222,72191],{"class":112},[67,75224,864],{"class":77},[67,75226,75227],{"class":84},"'data'",[67,75229,13153],{"class":77},[67,75231,72201],{"class":208},[67,75233,240],{"class":77},[67,75235,72206],{"class":112},[67,75237,75238],{"class":77},"(arr))\n",[67,75240,75242],{"class":69,"line":75241},270,[67,75243,33998],{"class":77},[67,75245,75247],{"class":69,"line":75246},271,[67,75248,177],{"emptyLinePlaceholder":176},[67,75250,75252],{"class":69,"line":75251},272,[67,75253,75254],{"class":202},"    \u002F\u002F 3.删除业务\n",[67,75256,75258],{"class":69,"line":75257},273,[67,75259,75260],{"class":202},"    \u002F\u002F 3.1 采取事件委托的形式，给body注册点击事件\n",[67,75262,75264,75266,75268,75270,75272,75274,75276,75278,75280],{"class":69,"line":75263},274,[67,75265,70878],{"class":77},[67,75267,58350],{"class":112},[67,75269,864],{"class":77},[67,75271,58355],{"class":84},[67,75273,13153],{"class":77},[67,75275,54986],{"class":73},[67,75277,2381],{"class":77},[67,75279,936],{"class":5935},[67,75281,13160],{"class":77},[67,75283,75285],{"class":69,"line":75284},275,[67,75286,75287],{"class":202},"      \u002F\u002F 判断是否点击的是删除按钮\n",[67,75289,75291,75293,75295,75297,75299],{"class":69,"line":75290},276,[67,75292,55017],{"class":73},[67,75294,67571],{"class":77},[67,75296,55023],{"class":73},[67,75298,68793],{"class":84},[67,75300,13160],{"class":77},[67,75302,75304],{"class":69,"line":75303},277,[67,75305,75306],{"class":202},"        \u002F\u002F alert(1)\n",[67,75308,75310],{"class":69,"line":75309},278,[67,75311,75312],{"class":202},"        \u002F\u002F 3.2 得到当前点击的索引号。渲染数据的时候，动态给a链接添加自定义属性例如data-id='0'\n",[67,75314,75316],{"class":69,"line":75315},279,[67,75317,75318],{"class":202},"        \u002F\u002F console.log(e.target)\n",[67,75320,75322],{"class":69,"line":75321},280,[67,75323,75324],{"class":202},"        \u002F\u002F 3.3 根据索引号，利用splice删除数组这条数据\n",[67,75326,75328],{"class":69,"line":75327},281,[67,75329,177],{"emptyLinePlaceholder":176},[67,75331,75333],{"class":69,"line":75332},282,[67,75334,75335],{"class":202},"        \u002F\u002F 确认框，确然是否真的要删除\n",[67,75337,75339],{"class":69,"line":75338},283,[67,75340,75341],{"class":202},"        \u002F\u002F confirm()为确认框\n",[67,75343,75345],{"class":69,"line":75344},284,[67,75346,75347],{"class":202},"        \u002F\u002F confirm会返回两个值，如果点击确定，就会返回true，如果点击取消，就会返回false\n",[67,75349,75351,75353,75355,75358,75360,75363],{"class":69,"line":75350},285,[67,75352,3218],{"class":73},[67,75354,2381],{"class":77},[67,75356,75357],{"class":112},"confirm",[67,75359,864],{"class":77},[67,75361,75362],{"class":84},"'您确定要删除这条数据吗？'",[67,75364,75365],{"class":77},")) {\n",[67,75367,75369,75372,75374,75376,75378],{"class":69,"line":75368},286,[67,75370,75371],{"class":77},"          arr.",[67,75373,58547],{"class":112},[67,75375,70931],{"class":77},[67,75377,1077],{"class":208},[67,75379,870],{"class":77},[67,75381,75383],{"class":69,"line":75382},287,[67,75384,75385],{"class":202},"          \u002F\u002F 3.4 重新渲染页面\n",[67,75387,75389,75392],{"class":69,"line":75388},288,[67,75390,75391],{"class":112},"          render",[67,75393,2698],{"class":77},[67,75395,75397],{"class":69,"line":75396},289,[67,75398,75399],{"class":202},"          \u002F\u002F 3.5 把最新arr数组存到本地存储\n",[67,75401,75403,75406,75408,75410,75412,75414,75416,75418,75420],{"class":69,"line":75402},290,[67,75404,75405],{"class":77},"          localStorage.",[67,75407,72191],{"class":112},[67,75409,864],{"class":77},[67,75411,75227],{"class":84},[67,75413,13153],{"class":77},[67,75415,72201],{"class":208},[67,75417,240],{"class":77},[67,75419,72206],{"class":112},[67,75421,75238],{"class":77},[67,75423,75425],{"class":69,"line":75424},291,[67,75426,3250],{"class":77},[67,75428,75430],{"class":69,"line":75429},292,[67,75431,52935],{"class":77},[67,75433,75435],{"class":69,"line":75434},293,[67,75436,177],{"emptyLinePlaceholder":176},[67,75438,75440],{"class":69,"line":75439},294,[67,75441,33998],{"class":77},[67,75443,75445],{"class":69,"line":75444},295,[67,75446,177],{"emptyLinePlaceholder":176},[67,75448,75450,75452,75454],{"class":69,"line":75449},296,[67,75451,52954],{"class":77},[67,75453,52350],{"class":51837},[67,75455,51844],{"class":77},[67,75457,75459,75461,75463],{"class":69,"line":75458},297,[67,75460,52322],{"class":77},[67,75462,52337],{"class":51837},[67,75464,51844],{"class":77},[67,75466,75468],{"class":69,"line":75467},298,[67,75469,177],{"emptyLinePlaceholder":176},[67,75471,75473,75475,75477],{"class":69,"line":75472},299,[67,75474,52322],{"class":77},[67,75476,51172],{"class":51837},[67,75478,51844],{"class":77},[803,75480,75482],{"id":75481},"_36-正则表达式","3.6 正则表达式",[19,75484,75485],{},"正则表达式（Regular Expression）是用于匹配字符串中字符组合的模式。在 JavaScript中，正则表达式也是对",[19,75487,75488],{},"象，通常用来查找、替换那些符合正则表达式的文本，许多语言都支持正则表达式。",[19,75490,75491],{},"正则表达式的作用：",[1863,75493,75494,75501,75507],{},[818,75495,75496,75497,75500],{},"表单验证（ ",[336,75498,75499],{},"匹配"," ）",[818,75502,75503,75504,75500],{},"过滤敏感词（ ",[336,75505,75506],{},"替换",[818,75508,75509,75510,75500],{},"字符串中提取我们想要的部分（ ",[336,75511,75512],{},"提取",[14,75514,75516],{"id":75515},"_361-语法","3.6.1 语法",[19,75518,75519],{},"正则表达式使用步骤：",[815,75521,75522,75525],{},[818,75523,75524],{},"定义规则",[818,75526,75527],{},"查找是否匹配",[19,75529,75530],{},"正则表达式里边不需要写引号",[19,75532,75533],{},[725,75534],{"alt":62,"src":75535},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-201.png",[19,75537,75538],{},"记忆方法：先有规则，再有在看后边的数据是否可以与前边规则匹配",[19,75540,75541],{},"reg.test(str)",[19,75543,75544],{},[725,75545],{"alt":62,"src":75546},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-202.png",[19,75548,75549],{},[725,75550],{"alt":62,"src":75551},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-203.png",[14,75553,75555],{"id":75554},"_362-元字符","3.6.2 元字符",[815,75557,75558,75561,75564,75567,75574],{},[818,75559,75560],{},"普通字符：大多数的字符仅能够描述它们本身，这些字符称作普通字符，例如所有的字母和数字。也就是说普通字符只能够匹配字符串中与它们相同的字符。",[818,75562,75563],{},"元字符（特殊字符）：是一些具有特殊含义的字符，可以极大提高了灵活性和强大的匹配功能。",[818,75565,75566],{},"比如，规定用户只能输入英文26个英文字母，普通字符的话 abcdefghijklm….. 但是换成元字符写法： [a-z]",[818,75568,75569,75570],{},"正则验证工具：",[28,75571,75572],{"href":75572,"rel":75573},"https:\u002F\u002Ftool.oschina.net\u002Fregex",[32],[818,75575,75576],{},"分类：边界符（表示位置，开头和结尾，必须用什么开头，用什么结尾）、量词（（表示重复次数）、字符类（比如 \\d 表示 0~9）",[40,75578,75580],{"id":75579},"_3621-边界符","3.6.2.1 边界符",[19,75582,75583],{},[725,75584],{"alt":62,"src":75585},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-204.png",[19,75587,75588],{},"console.log(\u002F^哈$\u002F.test('哈哈')) \u002F\u002Ffalse 加上量词之后会true",[19,75590,75591],{},"只有console.log(\u002F^哈$\u002F.test('哈'))这样才会true，开头结尾都写的话就是精准匹配",[19,75593,75594],{},"只匹配一次",[19,75596,75597],{},"两个其中一个来进行匹配的话，可以使用| ：\u002F我是|它会\u002F",[40,75599,75601],{"id":75600},"_3622-量词","3.6.2.2 量词",[19,75603,75604],{},[725,75605],{"alt":62,"src":75606},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-205.png",[19,75608,75609],{},"console.log(\u002F^哈*$\u002F.test('哈好哈')) \u002F\u002Ffalse，只允许里边只允许有哈，不允许出现任何其他字符",[40,75611,75613],{"id":75612},"_3623-元字符","3.6.2.3 元字符",[19,75615,75616],{},[725,75617],{"alt":62,"src":75618},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-206.png",[19,75620,75621],{},"匹配的是a或b或c []只选一个",[19,75623,75624],{},[725,75625],{"alt":62,"src":75626},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-207.png",[19,75628,75629],{},"qq号是从1开始的，第一个为1-9已经进行匹配完成了，从第二位开始0-9都可以了，大括号{}只重复前边离他最近的那个字符，{}就近原则",[19,75631,75632],{},[725,75633],{"alt":62,"src":75634},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-208.png",[19,75636,75637],{},"（2）. 匹配除换行符之外的任何单个字符，除了换行都行",[19,75639,75640],{},[725,75641],{"alt":62,"src":75642},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-209.png",[57,75644,75646],{"className":51170,"code":75645,"language":51172,"meta":62,"style":62},"\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",[64,75647,75648,75658,75672,75676,75684,75698,75718,75730,75738,75742,75750,75758,75763,75794,75821,75849,75853,75858,75886,75917,75922,75927,75958,75990,76022,76026,76031,76062,76092,76122,76126,76131,76162,76193,76223,76253,76257,76262,76295,76299,76304,76335,76366,76370,76375,76406,76436,76467,76471,76476,76508,76539,76570,76597,76628,76660,76693,76724,76755,76787,76818,76826,76834,76838],{"__ignoreMap":62},[67,75649,75650,75652,75654,75656],{"class":69,"line":70},[67,75651,51834],{"class":77},[67,75653,51838],{"class":51837},[67,75655,51841],{"class":112},[67,75657,51844],{"class":77},[67,75659,75660,75662,75664,75666,75668,75670],{"class":69,"line":143},[67,75661,1766],{"class":77},[67,75663,51172],{"class":51837},[67,75665,51853],{"class":112},[67,75667,909],{"class":77},[67,75669,51858],{"class":84},[67,75671,51844],{"class":77},[67,75673,75674],{"class":69,"line":149},[67,75675,177],{"emptyLinePlaceholder":176},[67,75677,75678,75680,75682],{"class":69,"line":155},[67,75679,1766],{"class":77},[67,75681,51871],{"class":51837},[67,75683,51844],{"class":77},[67,75685,75686,75688,75690,75692,75694,75696],{"class":69,"line":161},[67,75687,52681],{"class":77},[67,75689,51881],{"class":51837},[67,75691,51884],{"class":112},[67,75693,909],{"class":77},[67,75695,51889],{"class":84},[67,75697,51844],{"class":77},[67,75699,75700,75702,75704,75706,75708,75710,75712,75714,75716],{"class":69,"line":167},[67,75701,52681],{"class":77},[67,75703,51881],{"class":51837},[67,75705,15637],{"class":112},[67,75707,909],{"class":77},[67,75709,51928],{"class":84},[67,75711,51908],{"class":112},[67,75713,909],{"class":77},[67,75715,51935],{"class":84},[67,75717,51844],{"class":77},[67,75719,75720,75722,75724,75726,75728],{"class":69,"line":173},[67,75721,52681],{"class":77},[67,75723,51944],{"class":51837},[67,75725,51947],{"class":77},[67,75727,51944],{"class":51837},[67,75729,51844],{"class":77},[67,75731,75732,75734,75736],{"class":69,"line":180},[67,75733,52322],{"class":77},[67,75735,51871],{"class":51837},[67,75737,51844],{"class":77},[67,75739,75740],{"class":69,"line":186},[67,75741,177],{"emptyLinePlaceholder":176},[67,75743,75744,75746,75748],{"class":69,"line":444},[67,75745,1766],{"class":77},[67,75747,52337],{"class":51837},[67,75749,51844],{"class":77},[67,75751,75752,75754,75756],{"class":69,"line":2335},[67,75753,52681],{"class":77},[67,75755,52350],{"class":51837},[67,75757,51844],{"class":77},[67,75759,75760],{"class":69,"line":2340},[67,75761,75762],{"class":202},"    \u002F\u002F 元字符中\n",[67,75764,75765,75767,75769,75771,75773,75776,75778,75780,75783,75785,75788,75791],{"class":69,"line":2346},[67,75766,74290],{"class":77},[67,75768,58784],{"class":112},[67,75770,864],{"class":77},[67,75772,1440],{"class":84},[67,75774,75775],{"class":48514},"哈",[67,75777,1440],{"class":84},[67,75779,240],{"class":77},[67,75781,75782],{"class":112},"test",[67,75784,864],{"class":77},[67,75786,75787],{"class":84},"'哈'",[67,75789,75790],{"class":77},"))  ",[67,75792,75793],{"class":202},"\u002F\u002Ftrue\n",[67,75795,75796,75798,75800,75802,75804,75806,75808,75810,75812,75814,75817,75819],{"class":69,"line":2351},[67,75797,74290],{"class":77},[67,75799,58784],{"class":112},[67,75801,864],{"class":77},[67,75803,1440],{"class":84},[67,75805,75775],{"class":48514},[67,75807,1440],{"class":84},[67,75809,240],{"class":77},[67,75811,75782],{"class":112},[67,75813,864],{"class":77},[67,75815,75816],{"class":84},"'哈哈'",[67,75818,75790],{"class":77},[67,75820,75793],{"class":202},[67,75822,75823,75825,75827,75829,75831,75833,75835,75837,75839,75841,75844,75847],{"class":69,"line":2365},[67,75824,74290],{"class":77},[67,75826,58784],{"class":112},[67,75828,864],{"class":77},[67,75830,1440],{"class":84},[67,75832,75775],{"class":48514},[67,75834,1440],{"class":84},[67,75836,240],{"class":77},[67,75838,75782],{"class":112},[67,75840,864],{"class":77},[67,75842,75843],{"class":84},"'二哈'",[67,75845,75846],{"class":77},"))   ",[67,75848,75793],{"class":202},[67,75850,75851],{"class":69,"line":2370},[67,75852,177],{"emptyLinePlaceholder":176},[67,75854,75855],{"class":69,"line":2376},[67,75856,75857],{"class":202},"    \u002F\u002F 1.边界符\n",[67,75859,75860,75862,75864,75866,75868,75870,75872,75874,75876,75878,75880,75882,75884],{"class":69,"line":2397},[67,75861,74290],{"class":77},[67,75863,58784],{"class":112},[67,75865,864],{"class":77},[67,75867,1440],{"class":84},[67,75869,1822],{"class":73},[67,75871,75775],{"class":48514},[67,75873,1440],{"class":84},[67,75875,240],{"class":77},[67,75877,75782],{"class":112},[67,75879,864],{"class":77},[67,75881,75787],{"class":84},[67,75883,75790],{"class":77},[67,75885,75793],{"class":202},[67,75887,75888,75890,75892,75894,75896,75898,75900,75902,75904,75906,75908,75910,75912,75914],{"class":69,"line":2402},[67,75889,74290],{"class":77},[67,75891,58784],{"class":112},[67,75893,864],{"class":77},[67,75895,1440],{"class":84},[67,75897,1822],{"class":73},[67,75899,75775],{"class":48514},[67,75901,1160],{"class":73},[67,75903,1440],{"class":84},[67,75905,240],{"class":77},[67,75907,75782],{"class":112},[67,75909,864],{"class":77},[67,75911,75816],{"class":84},[67,75913,75790],{"class":77},[67,75915,75916],{"class":202},"\u002F\u002Ffalse\n",[67,75918,75919],{"class":69,"line":2416},[67,75920,75921],{"class":202},"    \u002F\u002F 2.量词\n",[67,75923,75924],{"class":69,"line":2421},[67,75925,75926],{"class":202},"    \u002F\u002F 量词 * 类似于 >= 0\n",[67,75928,75929,75931,75933,75935,75937,75939,75941,75944,75946,75948,75950,75952,75954,75956],{"class":69,"line":2450},[67,75930,74290],{"class":77},[67,75932,58784],{"class":112},[67,75934,864],{"class":77},[67,75936,1440],{"class":84},[67,75938,1822],{"class":73},[67,75940,75775],{"class":48514},[67,75942,75943],{"class":73},"*$",[67,75945,1440],{"class":84},[67,75947,240],{"class":77},[67,75949,75782],{"class":112},[67,75951,864],{"class":77},[67,75953,75816],{"class":84},[67,75955,75790],{"class":77},[67,75957,75793],{"class":202},[67,75959,75960,75962,75964,75966,75968,75970,75972,75974,75976,75978,75980,75982,75985,75987],{"class":69,"line":2455},[67,75961,74290],{"class":77},[67,75963,58784],{"class":112},[67,75965,864],{"class":77},[67,75967,1440],{"class":84},[67,75969,1822],{"class":73},[67,75971,75775],{"class":48514},[67,75973,75943],{"class":73},[67,75975,1440],{"class":84},[67,75977,240],{"class":77},[67,75979,75782],{"class":112},[67,75981,864],{"class":77},[67,75983,75984],{"class":84},"'二哈好傻'",[67,75986,75790],{"class":77},[67,75988,75989],{"class":202},"\u002F\u002Ffalse 必须以哈开头或结尾\n",[67,75991,75992,75994,75996,75998,76000,76002,76004,76006,76008,76010,76012,76014,76017,76019],{"class":69,"line":2472},[67,75993,74290],{"class":77},[67,75995,58784],{"class":112},[67,75997,864],{"class":77},[67,75999,1440],{"class":84},[67,76001,1822],{"class":73},[67,76003,75775],{"class":48514},[67,76005,75943],{"class":73},[67,76007,1440],{"class":84},[67,76009,240],{"class":77},[67,76011,75782],{"class":112},[67,76013,864],{"class":77},[67,76015,76016],{"class":84},"'哈好哈'",[67,76018,75846],{"class":77},[67,76020,76021],{"class":202},"\u002F\u002Ffalse，只允许里边只有哈，不允许出现任何其他字符\n",[67,76023,76024],{"class":69,"line":2477},[67,76025,177],{"emptyLinePlaceholder":176},[67,76027,76028],{"class":69,"line":2482},[67,76029,76030],{"class":202},"    \u002F\u002F +类似于>=1\n",[67,76032,76033,76035,76037,76039,76041,76043,76045,76048,76050,76052,76054,76056,76058,76060],{"class":69,"line":2487},[67,76034,74290],{"class":77},[67,76036,58784],{"class":112},[67,76038,864],{"class":77},[67,76040,1440],{"class":84},[67,76042,1822],{"class":73},[67,76044,75775],{"class":48514},[67,76046,76047],{"class":73},"+$",[67,76049,1440],{"class":84},[67,76051,240],{"class":77},[67,76053,75782],{"class":112},[67,76055,864],{"class":77},[67,76057,75816],{"class":84},[67,76059,75790],{"class":77},[67,76061,75793],{"class":202},[67,76063,76064,76066,76068,76070,76072,76074,76076,76078,76080,76082,76084,76086,76088,76090],{"class":69,"line":2501},[67,76065,74290],{"class":77},[67,76067,58784],{"class":112},[67,76069,864],{"class":77},[67,76071,1440],{"class":84},[67,76073,1822],{"class":73},[67,76075,75775],{"class":48514},[67,76077,76047],{"class":73},[67,76079,1440],{"class":84},[67,76081,240],{"class":77},[67,76083,75782],{"class":112},[67,76085,864],{"class":77},[67,76087,75984],{"class":84},[67,76089,75790],{"class":77},[67,76091,75989],{"class":202},[67,76093,76094,76096,76098,76100,76102,76104,76106,76108,76110,76112,76114,76116,76118,76120],{"class":69,"line":2506},[67,76095,74290],{"class":77},[67,76097,58784],{"class":112},[67,76099,864],{"class":77},[67,76101,1440],{"class":84},[67,76103,1822],{"class":73},[67,76105,75775],{"class":48514},[67,76107,76047],{"class":73},[67,76109,1440],{"class":84},[67,76111,240],{"class":77},[67,76113,75782],{"class":112},[67,76115,864],{"class":77},[67,76117,76016],{"class":84},[67,76119,75846],{"class":77},[67,76121,75916],{"class":202},[67,76123,76124],{"class":69,"line":3298},[67,76125,177],{"emptyLinePlaceholder":176},[67,76127,76128],{"class":69,"line":3312},[67,76129,76130],{"class":202},"    \u002F\u002F ?类似于0次或一次\n",[67,76132,76133,76135,76137,76139,76141,76143,76146,76148,76150,76152,76154,76156,76158,76160],{"class":69,"line":3320},[67,76134,74290],{"class":77},[67,76136,58784],{"class":112},[67,76138,864],{"class":77},[67,76140,1440],{"class":84},[67,76142,1822],{"class":73},[67,76144,76145],{"class":48514},"哈？",[67,76147,1160],{"class":73},[67,76149,1440],{"class":84},[67,76151,240],{"class":77},[67,76153,75782],{"class":112},[67,76155,864],{"class":77},[67,76157,74765],{"class":84},[67,76159,75846],{"class":77},[67,76161,75793],{"class":202},[67,76163,76164,76166,76168,76170,76172,76174,76176,76179,76181,76183,76185,76187,76189,76191],{"class":69,"line":3325},[67,76165,74290],{"class":77},[67,76167,58784],{"class":112},[67,76169,864],{"class":77},[67,76171,1440],{"class":84},[67,76173,1822],{"class":73},[67,76175,75775],{"class":48514},[67,76177,76178],{"class":73},"?$",[67,76180,1440],{"class":84},[67,76182,240],{"class":77},[67,76184,75782],{"class":112},[67,76186,864],{"class":77},[67,76188,75816],{"class":84},[67,76190,75790],{"class":77},[67,76192,75916],{"class":202},[67,76194,76195,76197,76199,76201,76203,76205,76207,76209,76211,76213,76215,76217,76219,76221],{"class":69,"line":3331},[67,76196,74290],{"class":77},[67,76198,58784],{"class":112},[67,76200,864],{"class":77},[67,76202,1440],{"class":84},[67,76204,1822],{"class":73},[67,76206,75775],{"class":48514},[67,76208,76178],{"class":73},[67,76210,1440],{"class":84},[67,76212,240],{"class":77},[67,76214,75782],{"class":112},[67,76216,864],{"class":77},[67,76218,75984],{"class":84},[67,76220,75790],{"class":77},[67,76222,75989],{"class":202},[67,76224,76225,76227,76229,76231,76233,76235,76237,76239,76241,76243,76245,76247,76249,76251],{"class":69,"line":3337},[67,76226,74290],{"class":77},[67,76228,58784],{"class":112},[67,76230,864],{"class":77},[67,76232,1440],{"class":84},[67,76234,1822],{"class":73},[67,76236,75775],{"class":48514},[67,76238,76178],{"class":73},[67,76240,1440],{"class":84},[67,76242,240],{"class":77},[67,76244,75782],{"class":112},[67,76246,864],{"class":77},[67,76248,76016],{"class":84},[67,76250,75790],{"class":77},[67,76252,75916],{"class":202},[67,76254,76255],{"class":69,"line":3342},[67,76256,177],{"emptyLinePlaceholder":176},[67,76258,76259],{"class":69,"line":8667},[67,76260,76261],{"class":202},"    \u002F\u002F {n}写几，就必须出现几次\n",[67,76263,76264,76266,76268,76270,76272,76274,76276,76279,76281,76283,76285,76287,76290,76293],{"class":69,"line":8691},[67,76265,74290],{"class":77},[67,76267,58784],{"class":112},[67,76269,864],{"class":77},[67,76271,1440],{"class":84},[67,76273,1822],{"class":73},[67,76275,75775],{"class":48514},[67,76277,76278],{"class":73},"{4}$",[67,76280,1440],{"class":84},[67,76282,240],{"class":77},[67,76284,75782],{"class":112},[67,76286,864],{"class":77},[67,76288,76289],{"class":84},"'哈哈哈哈'",[67,76291,76292],{"class":77},")) ",[67,76294,75793],{"class":202},[67,76296,76297],{"class":69,"line":8696},[67,76298,177],{"emptyLinePlaceholder":176},[67,76300,76301],{"class":69,"line":8702},[67,76302,76303],{"class":202},"    \u002F\u002F {n,}大于等于n次\n",[67,76305,76306,76308,76310,76312,76314,76316,76318,76321,76323,76325,76327,76329,76331,76333],{"class":69,"line":8729},[67,76307,74290],{"class":77},[67,76309,58784],{"class":112},[67,76311,864],{"class":77},[67,76313,1440],{"class":84},[67,76315,1822],{"class":73},[67,76317,75775],{"class":48514},[67,76319,76320],{"class":73},"{4,}$",[67,76322,1440],{"class":84},[67,76324,240],{"class":77},[67,76326,75782],{"class":112},[67,76328,864],{"class":77},[67,76330,76289],{"class":84},[67,76332,76292],{"class":77},[67,76334,75793],{"class":202},[67,76336,76337,76339,76341,76343,76345,76347,76349,76351,76353,76355,76357,76359,76362,76364],{"class":69,"line":8734},[67,76338,74290],{"class":77},[67,76340,58784],{"class":112},[67,76342,864],{"class":77},[67,76344,1440],{"class":84},[67,76346,1822],{"class":73},[67,76348,75775],{"class":48514},[67,76350,76320],{"class":73},[67,76352,1440],{"class":84},[67,76354,240],{"class":77},[67,76356,75782],{"class":112},[67,76358,864],{"class":77},[67,76360,76361],{"class":84},"'哈哈哈哈哈'",[67,76363,76292],{"class":77},[67,76365,75793],{"class":202},[67,76367,76368],{"class":69,"line":8740},[67,76369,177],{"emptyLinePlaceholder":176},[67,76371,76372],{"class":69,"line":8752},[67,76373,76374],{"class":202},"    \u002F\u002F 重复{n,m} 重复n到m次，逗号两侧不能有空格\n",[67,76376,76377,76379,76381,76383,76385,76387,76389,76392,76394,76396,76398,76400,76402,76404],{"class":69,"line":8764},[67,76378,74290],{"class":77},[67,76380,58784],{"class":112},[67,76382,864],{"class":77},[67,76384,1440],{"class":84},[67,76386,1822],{"class":73},[67,76388,75775],{"class":48514},[67,76390,76391],{"class":73},"{4,6}$",[67,76393,1440],{"class":84},[67,76395,240],{"class":77},[67,76397,75782],{"class":112},[67,76399,864],{"class":77},[67,76401,76289],{"class":84},[67,76403,76292],{"class":77},[67,76405,75793],{"class":202},[67,76407,76408,76410,76412,76414,76416,76418,76420,76422,76424,76426,76428,76430,76432,76434],{"class":69,"line":8776},[67,76409,74290],{"class":77},[67,76411,58784],{"class":112},[67,76413,864],{"class":77},[67,76415,1440],{"class":84},[67,76417,1822],{"class":73},[67,76419,75775],{"class":48514},[67,76421,76391],{"class":73},[67,76423,1440],{"class":84},[67,76425,240],{"class":77},[67,76427,75782],{"class":112},[67,76429,864],{"class":77},[67,76431,76361],{"class":84},[67,76433,76292],{"class":77},[67,76435,75793],{"class":202},[67,76437,76438,76440,76442,76444,76446,76448,76450,76452,76454,76456,76458,76460,76463,76465],{"class":69,"line":10435},[67,76439,74290],{"class":77},[67,76441,58784],{"class":112},[67,76443,864],{"class":77},[67,76445,1440],{"class":84},[67,76447,1822],{"class":73},[67,76449,75775],{"class":48514},[67,76451,76391],{"class":73},[67,76453,1440],{"class":84},[67,76455,240],{"class":77},[67,76457,75782],{"class":112},[67,76459,864],{"class":77},[67,76461,76462],{"class":84},"'哈哈哈哈哈哈哈'",[67,76464,76292],{"class":77},[67,76466,75916],{"class":202},[67,76468,76469],{"class":69,"line":10459},[67,76470,177],{"emptyLinePlaceholder":176},[67,76472,76473],{"class":69,"line":10482},[67,76474,76475],{"class":202},"    \u002F\u002F 3.字符类 [abc] 只选一个字符\n",[67,76477,76478,76480,76482,76484,76486,76488,76491,76493,76495,76497,76499,76501,76504,76506],{"class":69,"line":10506},[67,76479,74290],{"class":77},[67,76481,58784],{"class":112},[67,76483,864],{"class":77},[67,76485,1440],{"class":84},[67,76487,1822],{"class":73},[67,76489,76490],{"class":208},"[abc]",[67,76492,1160],{"class":73},[67,76494,1440],{"class":84},[67,76496,240],{"class":77},[67,76498,75782],{"class":112},[67,76500,864],{"class":77},[67,76502,76503],{"class":84},"'a'",[67,76505,75790],{"class":77},[67,76507,75793],{"class":202},[67,76509,76510,76512,76514,76516,76518,76520,76522,76524,76526,76528,76530,76532,76535,76537],{"class":69,"line":10511},[67,76511,74290],{"class":77},[67,76513,58784],{"class":112},[67,76515,864],{"class":77},[67,76517,1440],{"class":84},[67,76519,1822],{"class":73},[67,76521,76490],{"class":208},[67,76523,1160],{"class":73},[67,76525,1440],{"class":84},[67,76527,240],{"class":77},[67,76529,75782],{"class":112},[67,76531,864],{"class":77},[67,76533,76534],{"class":84},"'b'",[67,76536,75790],{"class":77},[67,76538,75793],{"class":202},[67,76540,76541,76543,76545,76547,76549,76551,76553,76555,76557,76559,76561,76563,76566,76568],{"class":69,"line":10516},[67,76542,74290],{"class":77},[67,76544,58784],{"class":112},[67,76546,864],{"class":77},[67,76548,1440],{"class":84},[67,76550,1822],{"class":73},[67,76552,76490],{"class":208},[67,76554,1160],{"class":73},[67,76556,1440],{"class":84},[67,76558,240],{"class":77},[67,76560,75782],{"class":112},[67,76562,864],{"class":77},[67,76564,76565],{"class":84},"'c'",[67,76567,75790],{"class":77},[67,76569,75793],{"class":202},[67,76571,76572,76574,76576,76578,76580,76582,76584,76586,76588,76590,76593,76595],{"class":69,"line":10521},[67,76573,74290],{"class":77},[67,76575,58784],{"class":112},[67,76577,864],{"class":77},[67,76579,1440],{"class":84},[67,76581,76490],{"class":208},[67,76583,1440],{"class":84},[67,76585,240],{"class":77},[67,76587,75782],{"class":112},[67,76589,864],{"class":77},[67,76591,76592],{"class":84},"'ab'",[67,76594,75790],{"class":77},[67,76596,75793],{"class":202},[67,76598,76599,76601,76603,76605,76607,76609,76611,76613,76615,76617,76619,76621,76623,76625],{"class":69,"line":10530},[67,76600,74290],{"class":77},[67,76602,58784],{"class":112},[67,76604,864],{"class":77},[67,76606,1440],{"class":84},[67,76608,1822],{"class":73},[67,76610,76490],{"class":208},[67,76612,1160],{"class":73},[67,76614,1440],{"class":84},[67,76616,240],{"class":77},[67,76618,75782],{"class":112},[67,76620,864],{"class":77},[67,76622,76592],{"class":84},[67,76624,75790],{"class":77},[67,76626,76627],{"class":202},"\u002F\u002Ffalse     不加精确匹配，就是true\n",[67,76629,76630,76632,76634,76636,76638,76640,76642,76645,76647,76649,76651,76653,76655,76657],{"class":69,"line":10535},[67,76631,74290],{"class":77},[67,76633,58784],{"class":112},[67,76635,864],{"class":77},[67,76637,1440],{"class":84},[67,76639,1822],{"class":73},[67,76641,76490],{"class":208},[67,76643,76644],{"class":73},"{2}$",[67,76646,1440],{"class":84},[67,76648,240],{"class":77},[67,76650,75782],{"class":112},[67,76652,864],{"class":77},[67,76654,76592],{"class":84},[67,76656,75790],{"class":77},[67,76658,76659],{"class":202},"\u002F\u002Ftrue   可以选两个\n",[67,76661,76662,76664,76666,76668,76670,76672,76675,76677,76679,76681,76683,76685,76688,76690],{"class":69,"line":10541},[67,76663,74290],{"class":77},[67,76665,58784],{"class":112},[67,76667,864],{"class":77},[67,76669,1440],{"class":84},[67,76671,1822],{"class":73},[67,76673,76674],{"class":208},"[a-z]",[67,76676,1160],{"class":73},[67,76678,1440],{"class":84},[67,76680,240],{"class":77},[67,76682,75782],{"class":112},[67,76684,864],{"class":77},[67,76686,76687],{"class":84},"'p'",[67,76689,75846],{"class":77},[67,76691,76692],{"class":202},"\u002F\u002Ftrue   依然只能选一个\n",[67,76694,76695,76697,76699,76701,76703,76705,76708,76710,76712,76714,76716,76718,76720,76722],{"class":69,"line":10562},[67,76696,74290],{"class":77},[67,76698,58784],{"class":112},[67,76700,864],{"class":77},[67,76702,1440],{"class":84},[67,76704,1822],{"class":73},[67,76706,76707],{"class":208},"[A-Z]",[67,76709,1160],{"class":73},[67,76711,1440],{"class":84},[67,76713,240],{"class":77},[67,76715,75782],{"class":112},[67,76717,864],{"class":77},[67,76719,76687],{"class":84},[67,76721,75846],{"class":77},[67,76723,75916],{"class":202},[67,76725,76726,76728,76730,76732,76734,76736,76738,76740,76742,76744,76746,76748,76751,76753],{"class":69,"line":10568},[67,76727,74290],{"class":77},[67,76729,58784],{"class":112},[67,76731,864],{"class":77},[67,76733,1440],{"class":84},[67,76735,1822],{"class":73},[67,76737,76707],{"class":208},[67,76739,1160],{"class":73},[67,76741,1440],{"class":84},[67,76743,240],{"class":77},[67,76745,75782],{"class":112},[67,76747,864],{"class":77},[67,76749,76750],{"class":84},"'P'",[67,76752,75846],{"class":77},[67,76754,75793],{"class":202},[67,76756,76757,76759,76761,76763,76765,76767,76770,76772,76774,76776,76778,76780,76783,76785],{"class":69,"line":10582},[67,76758,74290],{"class":77},[67,76760,58784],{"class":112},[67,76762,864],{"class":77},[67,76764,1440],{"class":84},[67,76766,1822],{"class":73},[67,76768,76769],{"class":208},"[0-9]",[67,76771,1160],{"class":73},[67,76773,1440],{"class":84},[67,76775,240],{"class":77},[67,76777,75782],{"class":112},[67,76779,864],{"class":77},[67,76781,76782],{"class":84},"'0'",[67,76784,75846],{"class":77},[67,76786,75793],{"class":202},[67,76788,76789,76791,76793,76795,76797,76799,76802,76804,76806,76808,76810,76812,76814,76816],{"class":69,"line":10588},[67,76790,74290],{"class":77},[67,76792,58784],{"class":112},[67,76794,864],{"class":77},[67,76796,1440],{"class":84},[67,76798,1822],{"class":73},[67,76800,76801],{"class":208},"[a-zA-Z0-9]",[67,76803,1160],{"class":73},[67,76805,1440],{"class":84},[67,76807,240],{"class":77},[67,76809,75782],{"class":112},[67,76811,864],{"class":77},[67,76813,76687],{"class":84},[67,76815,75790],{"class":77},[67,76817,75793],{"class":202},[67,76819,76820,76822,76824],{"class":69,"line":10615},[67,76821,52954],{"class":77},[67,76823,52350],{"class":51837},[67,76825,51844],{"class":77},[67,76827,76828,76830,76832],{"class":69,"line":10624},[67,76829,52322],{"class":77},[67,76831,52337],{"class":51837},[67,76833,51844],{"class":77},[67,76835,76836],{"class":69,"line":10630},[67,76837,177],{"emptyLinePlaceholder":176},[67,76839,76840,76842,76844],{"class":69,"line":10638},[67,76841,52322],{"class":77},[67,76843,51172],{"class":51837},[67,76845,51844],{"class":77},[40,76847,76849],{"id":76848},"_3624-修饰符","3.6.2.4 修饰符",[19,76851,76852],{},[725,76853],{"alt":62,"src":76854},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-210.png",[19,76856,76857],{},"replace是个方法，使用的时候一定不要忘记括号()",[19,76859,76860],{},[725,76861],{"alt":62,"src":76862},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-211.png",[57,76864,76866],{"className":51170,"code":76865,"language":51172,"meta":62,"style":62},"\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",[64,76867,76868,76878,76892,76900,76914,76934,76946,76954,76962,76970,77002,77033,77038,77070,77081,77114,77123,77131,77139],{"__ignoreMap":62},[67,76869,76870,76872,76874,76876],{"class":69,"line":70},[67,76871,51834],{"class":77},[67,76873,51838],{"class":51837},[67,76875,51841],{"class":112},[67,76877,51844],{"class":77},[67,76879,76880,76882,76884,76886,76888,76890],{"class":69,"line":143},[67,76881,1766],{"class":77},[67,76883,51172],{"class":51837},[67,76885,51853],{"class":112},[67,76887,909],{"class":77},[67,76889,51858],{"class":84},[67,76891,51844],{"class":77},[67,76893,76894,76896,76898],{"class":69,"line":149},[67,76895,1766],{"class":77},[67,76897,51871],{"class":51837},[67,76899,51844],{"class":77},[67,76901,76902,76904,76906,76908,76910,76912],{"class":69,"line":155},[67,76903,52681],{"class":77},[67,76905,51881],{"class":51837},[67,76907,51884],{"class":112},[67,76909,909],{"class":77},[67,76911,51889],{"class":84},[67,76913,51844],{"class":77},[67,76915,76916,76918,76920,76922,76924,76926,76928,76930,76932],{"class":69,"line":161},[67,76917,52681],{"class":77},[67,76919,51881],{"class":51837},[67,76921,15637],{"class":112},[67,76923,909],{"class":77},[67,76925,51928],{"class":84},[67,76927,51908],{"class":112},[67,76929,909],{"class":77},[67,76931,51935],{"class":84},[67,76933,51844],{"class":77},[67,76935,76936,76938,76940,76942,76944],{"class":69,"line":167},[67,76937,52681],{"class":77},[67,76939,51944],{"class":51837},[67,76941,51947],{"class":77},[67,76943,51944],{"class":51837},[67,76945,51844],{"class":77},[67,76947,76948,76950,76952],{"class":69,"line":173},[67,76949,52322],{"class":77},[67,76951,51871],{"class":51837},[67,76953,51844],{"class":77},[67,76955,76956,76958,76960],{"class":69,"line":180},[67,76957,1766],{"class":77},[67,76959,52337],{"class":51837},[67,76961,51844],{"class":77},[67,76963,76964,76966,76968],{"class":69,"line":186},[67,76965,52681],{"class":77},[67,76967,52350],{"class":51837},[67,76969,51844],{"class":77},[67,76971,76972,76974,76976,76978,76980,76982,76985,76987,76989,76991,76993,76995,76998,77000],{"class":69,"line":444},[67,76973,74290],{"class":77},[67,76975,58784],{"class":112},[67,76977,864],{"class":77},[67,76979,1440],{"class":84},[67,76981,1822],{"class":73},[67,76983,76984],{"class":48514},"java",[67,76986,1160],{"class":73},[67,76988,1440],{"class":84},[67,76990,240],{"class":77},[67,76992,75782],{"class":112},[67,76994,864],{"class":77},[67,76996,76997],{"class":84},"'java'",[67,76999,76292],{"class":77},[67,77001,75793],{"class":202},[67,77003,77004,77006,77008,77010,77012,77014,77016,77018,77020,77022,77024,77026,77029,77031],{"class":69,"line":2335},[67,77005,74290],{"class":77},[67,77007,58784],{"class":112},[67,77009,864],{"class":77},[67,77011,1440],{"class":84},[67,77013,1822],{"class":73},[67,77015,76984],{"class":48514},[67,77017,1160],{"class":73},[67,77019,1440],{"class":84},[67,77021,240],{"class":77},[67,77023,75782],{"class":112},[67,77025,864],{"class":77},[67,77027,77028],{"class":84},"'Java'",[67,77030,76292],{"class":77},[67,77032,75916],{"class":202},[67,77034,77035],{"class":69,"line":2340},[67,77036,77037],{"class":202},"    \u002F\u002F 不区分大小写、\n",[67,77039,77040,77042,77044,77046,77048,77050,77052,77054,77056,77058,77060,77062,77064,77066,77068],{"class":69,"line":2346},[67,77041,74290],{"class":77},[67,77043,58784],{"class":112},[67,77045,864],{"class":77},[67,77047,1440],{"class":84},[67,77049,1822],{"class":73},[67,77051,76984],{"class":48514},[67,77053,1160],{"class":73},[67,77055,1440],{"class":84},[67,77057,1298],{"class":73},[67,77059,240],{"class":77},[67,77061,75782],{"class":112},[67,77063,864],{"class":77},[67,77065,77028],{"class":84},[67,77067,76292],{"class":77},[67,77069,75793],{"class":202},[67,77071,77072,77074,77076,77078],{"class":69,"line":2351},[67,77073,11939],{"class":73},[67,77075,74456],{"class":208},[67,77077,14282],{"class":73},[67,77079,77080],{"class":84}," 'java是一门编程语言，学完java工资很高'\n",[67,77082,77083,77085,77088,77090,77093,77096,77098,77100,77102,77104,77107,77109,77112],{"class":69,"line":2365},[67,77084,11939],{"class":73},[67,77086,77087],{"class":208}," result",[67,77089,14282],{"class":73},[67,77091,77092],{"class":77}," str.",[67,77094,77095],{"class":112},"replace",[67,77097,864],{"class":77},[67,77099,1440],{"class":84},[67,77101,76984],{"class":48514},[67,77103,1440],{"class":84},[67,77105,77106],{"class":73},"ig",[67,77108,13153],{"class":77},[67,77110,77111],{"class":84},"'前端'",[67,77113,870],{"class":77},[67,77115,77116,77118,77120],{"class":69,"line":2370},[67,77117,74290],{"class":77},[67,77119,58784],{"class":112},[67,77121,77122],{"class":77},"(result)\n",[67,77124,77125,77127,77129],{"class":69,"line":2376},[67,77126,52954],{"class":77},[67,77128,52350],{"class":51837},[67,77130,51844],{"class":77},[67,77132,77133,77135,77137],{"class":69,"line":2397},[67,77134,52322],{"class":77},[67,77136,52337],{"class":51837},[67,77138,51844],{"class":77},[67,77140,77141,77143,77145],{"class":69,"line":2402},[67,77142,52322],{"class":77},[67,77144,51172],{"class":51837},[67,77146,51844],{"class":77},[779,77148,77149],{},"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":62,"searchDepth":143,"depth":143,"links":77151},[77152,77162,77174,77191,77198,77206],{"id":53897,"depth":143,"text":53898,"children":77153},[77154,77155,77156,77157,77158,77159,77160,77161],{"id":53901,"depth":149,"text":53902},{"id":53934,"depth":149,"text":53935},{"id":53973,"depth":149,"text":53974},{"id":54131,"depth":149,"text":54132},{"id":54179,"depth":149,"text":54180},{"id":54316,"depth":149,"text":54317},{"id":54638,"depth":149,"text":54639},{"id":57626,"depth":149,"text":57627},{"id":57654,"depth":143,"text":57655,"children":77163},[77164,77165,77166,77167,77168,77169,77170,77171,77172,77173],{"id":57658,"depth":149,"text":57659},{"id":57681,"depth":149,"text":57682},{"id":58596,"depth":149,"text":58597},{"id":59286,"depth":149,"text":59287},{"id":59568,"depth":149,"text":59569},{"id":63729,"depth":149,"text":63730},{"id":63899,"depth":149,"text":63900},{"id":64027,"depth":149,"text":64028},{"id":64052,"depth":149,"text":64053},{"id":65441,"depth":149,"text":65442},{"id":66594,"depth":143,"text":66595,"children":77175},[77176,77177,77178,77179,77180,77181,77182,77183,77184,77185,77186,77187,77188,77189,77190],{"id":66598,"depth":149,"text":66599},{"id":67252,"depth":149,"text":67253},{"id":68947,"depth":149,"text":68948},{"id":68988,"depth":149,"text":68989},{"id":69030,"depth":149,"text":69031},{"id":69044,"depth":149,"text":69045},{"id":69093,"depth":149,"text":69094},{"id":69105,"depth":149,"text":69106},{"id":69120,"depth":149,"text":69121},{"id":69156,"depth":149,"text":69157},{"id":69237,"depth":149,"text":69238},{"id":69365,"depth":149,"text":69366},{"id":69377,"depth":149,"text":69378},{"id":69396,"depth":149,"text":69397},{"id":71507,"depth":149,"text":71508},{"id":71526,"depth":143,"text":71527,"children":77192},[77193,77194,77195,77196,77197],{"id":71547,"depth":149,"text":71548},{"id":71567,"depth":149,"text":71568},{"id":71616,"depth":149,"text":71617},{"id":71741,"depth":149,"text":71742},{"id":71922,"depth":149,"text":71923},{"id":71940,"depth":143,"text":71941,"children":77199},[77200,77201,77202,77203,77204,77205],{"id":71955,"depth":149,"text":71956},{"id":72014,"depth":149,"text":72015},{"id":72038,"depth":149,"text":72039},{"id":72358,"depth":149,"text":72359},{"id":72390,"depth":149,"text":72391},{"id":72413,"depth":149,"text":72414},{"id":75481,"depth":143,"text":75482,"children":77207},[77208,77209],{"id":75515,"depth":149,"text":75516},{"id":75554,"depth":149,"text":75555},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch3-web-apis",{"title":53869,"description":24093},"wiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs","fsyWKB50sKQwy-LTDR6QPET-tuocjiLU1OtngUya7UQ",{"id":77216,"title":77217,"body":77218,"description":24093,"extension":787,"meta":93355,"navigation":176,"path":93356,"seo":93357,"stem":93358,"__hash__":93359},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch4-js进阶.md","4.js进阶",{"type":7,"value":77219,"toc":93291},[77220,77223,77226,77230,77234,77239,77244,77255,77259,77264,77267,77271,77274,77279,77283,77287,77290,77295,77298,77302,77305,77313,77316,77320,77325,77330,77333,77337,77342,77347,77350,77354,77359,77362,77367,77370,77375,77378,77383,77388,77391,77394,77398,77403,77408,77411,77415,77419,77422,77425,77428,77432,77436,77441,77446,77449,77453,77458,77463,77466,77469,77472,77475,77478,77481,77484,77487,77490,77495,77499,77504,77509,77512,77515,77518,77521,77524,77527,77530,77533,77537,77541,77544,77547,77550,77555,77557,77560,77563,77566,77569,77572,77575,77578,77581,77584,77587,77590,77593,77596,77601,77606,77611,77614,77618,77621,77626,77630,77632,77643,77648,77749,77752,77755,77758,77761,77764,77767,77770,77773,77775,77778,77781,77784,77787,77790,77792,77795,77798,77801,77804,77807,77810,77812,77815,77817,77819,77822,77826,77830,77833,77836,77839,77842,77845,77848,77851,77854,77857,77862,77982,77985,77988,77993,77996,77999,78002,78005,78010,78013,78016,78019,78022,78027,78030,78130,78195,78269,78273,78276,78279,78283,78286,78300,78329,78332,78335,78338,78341,78344,78347,78350,78352,78355,78358,78361,78364,78368,78373,78377,78382,78457,78460,78643,78646,78649,78652,78655,78658,78660,78663,78666,78669,78672,78675,78678,78680,78684,78687,78692,78695,78698,78701,78704,78706,78711,78714,78717,78720,78723,78725,78730,78733,78736,78738,78740,78743,78747,78750,78753,78758,78761,78764,78767,78817,78822,78826,78831,78834,78903,78906,78915,78919,78924,78927,78930,78938,78941,78958,80760,80764,80768,80773,80776,80780,80786,80792,80944,80949,80954,80957,80960,80963,80966,80969,80972,80975,80978,80981,80984,80987,80990,80995,80999,81002,81013,81017,81022,81025,81028,81031,81034,81037,81039,81042,81045,81048,81051,81053,81070,81073,81077,81080,81085,81090,81093,81096,81100,81103,81106,81115,81118,81122,81125,81130,81135,81202,81206,81209,81212,81217,81222,81308,81313,81317,81320,81323,81338,81341,81346,81350,81355,81464,81467,81478,81628,81632,81637,81746,81750,81755,81760,81765,81768,81775,81795,81831,81995,82000,82003,82008,82015,82018,82021,82024,82083,82139,82195,82199,82204,82519,82522,82526,82529,82534,82643,82648,82652,82657,82661,82732,82736,82738,82741,82744,82782,83058,83062,83079,83145,83179,83183,83186,83191,83220,83227,83236,83241,83256,83261,83270,83273,83410,83414,83476,83480,83485,83730,83734,83739,83742,83745,83748,83751,83755,83760,85341,85345,85349,85355,85358,85363,85367,85370,85375,85378,85389,85393,85398,85402,85407,85412,85415,85420,85424,85428,85431,85436,85441,85444,85447,85450,85572,85577,85679,85682,85685,85689,85694,85866,85871,85875,85878,85883,85949,85954,85957,86088,86091,86096,86099,86102,86193,86198,86201,86204,86207,86210,86215,86220,86223,86228,86233,86238,86242,86245,86248,86253,86258,86263,86268,86322,86325,86328,86333,86336,86339,86344,86349,86354,86358,86363,86377,86382,86385,86390,86394,86399,86404,86409,86414,86419,86424,86429,86434,86437,86441,86446,86449,86452,86455,86460,86465,86468,86471,86475,86478,86481,86486,86491,86496,86501,86504,86509,86514,86575,86580,86583,86588,87829,87834,87838,87842,87847,87850,87855,87860,87863,87868,87870,87875,87879,87882,87885,87896,87900,87905,87910,87965,87970,87975,87980,88191,88196,88200,88205,88208,88210,88213,88216,88663,88668,88675,88681,88684,88687,88951,88956,88960,89225,89230,89234,89239,89244,89249,89254,89585,89588,89593,89598,89601,89605,89609,89614,89619,89624,89629,89634,89639,89643,89646,89651,89656,89659,89733,89738,89743,89748,89750,89753,90123,90128,90133,90138,90141,90144,90246,90251,90256,90359,90363,90368,90372,90376,90381,90386,90389,90394,90397,90400,90793,90798,90801,90804,90807,90810,91330,91334,91339,91344,91349,91352,91357,91360,91363,91745,91750,91752,91754,91757,91760,92272,92276,92337,92340,92343,92346,92350,92353,92358,92363,93288],[10,77221,77217],{"id":77222},"_4js进阶",[19,77224,77225],{},"这部分是对es6的新特性和es7,es8等的描述，统称为es6+",[803,77227,77229],{"id":77228},"_41-作用域","4.1 作用域",[14,77231,77233],{"id":77232},"_411-局部作用域","4.1.1 局部作用域",[19,77235,77236],{},[725,77237],{"alt":62,"src":77238},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-212.png",[19,77240,77241],{},[725,77242],{"alt":62,"src":77243},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-213.png",[1863,77245,77246,77249,77252],{},[818,77247,77248],{},"函数作用域在函数内部",[818,77250,77251],{},"块级作用域在{}",[818,77253,77254],{},"对象的那个{}不是作用域，不是块作用域",[14,77256,77258],{"id":77257},"_412-全局作用域","4.1.2 全局作用域",[19,77260,77261],{},[725,77262],{"alt":62,"src":77263},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-214.png",[19,77265,77266],{},"window.a=10不要这样写",[14,77268,77270],{"id":77269},"_413-作用域链","4.1.3 作用域链",[19,77272,77273],{},"变量查找机制",[19,77275,77276],{},[725,77277],{"alt":62,"src":77278},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-215.png",[803,77280,77282],{"id":77281},"_42-垃圾回收机制","4.2 垃圾回收机制",[14,77284,77286],{"id":77285},"_421-大体介绍","4.2.1 大体介绍",[19,77288,77289],{},"垃圾回收机制(Garbage Collection) 简称 GC",[19,77291,77292],{},[725,77293],{"alt":62,"src":77294},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-216.png",[19,77296,77297],{},"内存泄漏：程序中分配的内存由于某种原因程序未释放或无法释放叫作泄露",[14,77299,77301],{"id":77300},"_422-js垃圾回收机制算法说明","4.2.2 JS垃圾回收机制算法说明",[19,77303,77304],{},"堆栈空间分配区别：",[815,77306,77307,77310],{},[818,77308,77309],{},"栈（操作系统）: 由操作系统自动分配释放函数的参数值、局部变量等，基本数据类型放到栈里面。",[818,77311,77312],{},"堆（操作系统）: 一般由程序员分配释放，若程序员不释放，由垃圾回收机制回收。复杂数据类型放到堆里面。",[19,77314,77315],{},"目前常见的浏览器垃圾回收算法: 引用计数法 和 标记清除法",[40,77317,77319],{"id":77318},"_4221-引用计数","4.2.2.1 引用计数",[19,77321,77322],{},[725,77323],{"alt":62,"src":77324},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-217.png",[19,77326,77327],{},[725,77328],{"alt":62,"src":77329},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-218.png",[19,77331,77332],{},"如果不写o1.a=o2和o2.a=o1，则函数执行完之后，o1和o2都是局部变量，会自动被系统回收掉，加上这个之后堆内的这两个对象相互指引，引用次数不为0，导致了变量的无法回收，就产生了内存泄漏",[40,77334,77336],{"id":77335},"_4222-标记清除法","4.2.2.2 标记清除法",[19,77338,77339],{},[725,77340],{"alt":62,"src":77341},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-219.png",[19,77343,77344],{},[725,77345],{"alt":62,"src":77346},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-220.png",[19,77348,77349],{},"这个算法就是全局开始的，找到就是有用，找不到就是没用，就清除",[803,77351,77353],{"id":77352},"_43-闭包","4.3 闭包",[19,77355,77356],{},[725,77357],{"alt":62,"src":77358},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-221.png",[19,77360,77361],{},"闭包：内层函数+外层函数的变量",[19,77363,77364],{},[725,77365],{"alt":62,"src":77366},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-222.png",[19,77368,77369],{},"closure就是闭包",[19,77371,77372],{},[725,77373],{"alt":62,"src":77374},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-223.png",[19,77376,77377],{},"内层函数必须包含外层函数的变量才是闭包",[19,77379,77380],{},[725,77381],{"alt":62,"src":77382},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-224.png",[19,77384,77385],{},[725,77386],{"alt":62,"src":77387},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-225.png",[19,77389,77390],{},"闭包可能会引起内存泄漏",[19,77392,77393],{},"闭包作用：封闭数据，实现数据私有，外部也可以访问函数内部的变量",[803,77395,77397],{"id":77396},"_44-变量提升","4.4 变量提升",[19,77399,77400],{},[725,77401],{"alt":62,"src":77402},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-226.png",[19,77404,77405],{},[725,77406],{"alt":62,"src":77407},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-227.png",[19,77409,77410],{},"在代码执行之前，先去检测当前作用域下所有var声明的变量，把所有var声明的变量提到当前作用域的前边，只提升声明，但不提升赋值",[803,77412,77414],{"id":77413},"_45-函数进阶","4.5 函数进阶",[14,77416,77418],{"id":77417},"_451-函数提升","4.5.1 函数提升",[19,77420,77421],{},"在程序执行之前会把所有函数声明提升到当前作用域的最前面",[19,77423,77424],{},"只提升函数声明，不提升函数调用",[52350,77426,77427],{},"\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",[14,77429,77431],{"id":77430},"_452-函数参数","4.5.2 函数参数",[40,77433,77435],{"id":77434},"_4521-动态参数","4.5.2.1 动态参数",[19,77437,77438],{},[725,77439],{"alt":62,"src":77440},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-228.png",[19,77442,77443],{},[725,77444],{"alt":62,"src":77445},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-229.png",[19,77447,77448],{},"箭头函数里边没有arguments",[40,77450,77452],{"id":77451},"_4522-剩余参数","4.5.2.2 剩余参数",[19,77454,77455],{},[725,77456],{"alt":62,"src":77457},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-230.png",[19,77459,77460],{},[725,77461],{"alt":62,"src":77462},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-231.png",[19,77464,77465],{},"剩余参数使用的时候不需要写...",[19,77467,77468],{},"剩余参数更加的灵活，我可以在函数括号中写上参数，然后再写...arr，如果是：",[19,77470,77471],{},"  function getSum(a,b,...arr) {",[19,77473,77474],{},"  console.log(11)",[19,77476,77477],{},"  }",[19,77479,77480],{},"  getSum(1,2,3,4)",[19,77482,77483],{},"  将1传给a，2传给b，剩下的传给剩余参数",[19,77485,77486],{},"  getSum(1,2)",[19,77488,77489],{},"  将1传给a，2传给b，剩余参数为一个空数组",[19,77491,77492],{},[725,77493],{"alt":62,"src":77494},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-232.png",[40,77496,77498],{"id":77497},"_4523-展开运算符与剩余参数的区别","4.5.2.3 展开运算符与剩余参数的区别",[19,77500,77501],{},[725,77502],{"alt":62,"src":77503},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-233.png",[19,77505,77506],{},[725,77507],{"alt":62,"src":77508},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-234.png",[19,77510,77511],{},"...arr其实是等价于1,2,3的，这样才可以丢给Math对象来求最值",[19,77513,77514],{},"展开运算符可以用于数组之间的合并：",[19,77516,77517],{},"const arr1 = [1, 2, 3]",[19,77519,77520],{},"const arr2 = [3, 4, 5]",[19,77522,77523],{},"const arr = [...arr1, ...arr2]",[19,77525,77526],{},"console.log(arr) \u002F\u002F输出[1,2,3,3,4,5]",[19,77528,77529],{},"剩余参数：函数参数使用，得到真数组",[19,77531,77532],{},"展开运算符：数组中使用，数组展开",[14,77534,77536],{"id":77535},"_453-箭头函数","4.5.3 箭头函数",[40,77538,77540],{"id":77539},"_4531-语法基本介绍","4.5.3.1 语法基本介绍",[19,77542,77543],{},"箭头函数不是为了替代以前的函数，不是意味着以前的函数不再写了，箭头函数是为了替代原来需要匿名函数的地方",[19,77545,77546],{},"它不是万能的！！！",[19,77548,77549],{},"箭头函数在vue中用的非常多，必须保证百分百会！！！",[19,77551,77552],{},[725,77553],{"alt":62,"src":77554},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-235.png",[19,77556,893],{},[19,77558,77559],{},"① 只有一个形参的时候，可以省略小括号：",[19,77561,77562],{},"const fn=x=>{console.log(x)}",[19,77564,77565],{},"② 只有一行代码时可以省略大括号：",[19,77567,77568],{},"const fn=x=>console.log(11)",[19,77570,77571],{},"③ 如果函数有返回值的话，如果只有一行代码的话return可以省略，大括号也可以省略，写在一行中：",[19,77573,77574],{},"const fn=x=>x+x",[19,77576,77577],{},"④ 没有参数或者两个参数及以上的都不可以省去括号",[19,77579,77580],{},"⑤ 阻止表单默认提交：",[19,77582,77583],{},"const form = document.querySelector('form')",[19,77585,77586],{},"form.addEventListener('click', ev => ev.preventDefault())",[19,77588,77589],{},"⑤ 箭头函数可以直接返回一个对象，理解为自带return的：",[19,77591,77592],{},"const fn=uname=>({uname:uname})",[19,77594,77595],{},"对象是需要大括号的，函数也有大括号，函数的大括号和对象大括号冲突了，所以将对象用小括号进行包住，这个等价会有一个返回值",[19,77597,77598],{},[725,77599],{"alt":62,"src":77600},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-236.png",[19,77602,77603],{},[725,77604],{"alt":62,"src":77605},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-237.png",[19,77607,77608],{},[725,77609],{"alt":62,"src":77610},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-238.png",[19,77612,77613],{},"一定不要忘记用()，有()就理解为自带return",[40,77615,77617],{"id":77616},"_4532-箭头函数参数","4.5.3.2 箭头函数参数",[19,77619,77620],{},"箭头函数是没有动态参数的arguments",[19,77622,77623],{},[725,77624],{"alt":62,"src":77625},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-239.png",[40,77627,77629],{"id":77628},"_4533-箭头函数this","4.5.3.3 箭头函数this",[19,77631,12050],{},[815,77633,77634,77637,77640],{},[818,77635,77636],{},"可以理解为箭头函数中this值就看它父亲的this的指向",[818,77638,77639],{},"事件回调函数使用箭头函数时，this 为全局的 window",[818,77641,77642],{},"DOM事件回调函数最好不要使用箭头函数，尤其是需要用到this的时候",[19,77644,77645],{},[725,77646],{"alt":62,"src":77647},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-240.png",[57,77649,77651],{"className":53604,"code":77650,"language":53606,"meta":62,"style":62},"  \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",[64,77652,77653,77661,77666,77671,77676,77681,77686,77690,77695,77699,77703,77708,77713,77718,77722,77726,77731,77736,77741],{"__ignoreMap":62},[67,77654,77655,77657,77659],{"class":69,"line":70},[67,77656,52681],{"class":77},[67,77658,52350],{"class":51837},[67,77660,51844],{"class":77},[67,77662,77663],{"class":69,"line":143},[67,77664,77665],{"class":77},"    \u002F\u002F 1.以前this的指向：谁调用的这个函数，this就指向谁\n",[67,77667,77668],{"class":69,"line":149},[67,77669,77670],{"class":77},"    console.log(this) \u002F\u002F指向window\n",[67,77672,77673],{"class":69,"line":155},[67,77674,77675],{"class":77},"    \u002F\u002F window.console.log(111)   实际写法，window进行了省略\n",[67,77677,77678],{"class":69,"line":161},[67,77679,77680],{"class":77},"    function fn() {\n",[67,77682,77683],{"class":69,"line":167},[67,77684,77685],{"class":77},"      console.log(this)  \u002F\u002F指向window\n",[67,77687,77688],{"class":69,"line":173},[67,77689,2909],{"class":77},[67,77691,77692],{"class":69,"line":180},[67,77693,77694],{"class":77},"    window.fn()\u002F\u002F实际写法，调用时可以省略window\n",[67,77696,77697],{"class":69,"line":186},[67,77698,177],{"emptyLinePlaceholder":176},[67,77700,77701],{"class":69,"line":444},[67,77702,72060],{"class":77},[67,77704,77705],{"class":69,"line":2335},[67,77706,77707],{"class":77},"      name: 'andy',\n",[67,77709,77710],{"class":69,"line":2340},[67,77711,77712],{"class":77},"      sayHai: function () {\n",[67,77714,77715],{"class":69,"line":2346},[67,77716,77717],{"class":77},"        console.log(this)\n",[67,77719,77720],{"class":69,"line":2351},[67,77721,52935],{"class":77},[67,77723,77724],{"class":69,"line":2365},[67,77725,2909],{"class":77},[67,77727,77728],{"class":69,"line":2370},[67,77729,77730],{"class":77},"    obj.sayHai() \u002F\u002Fthis指向obj\n",[67,77732,77733],{"class":69,"line":2376},[67,77734,77735],{"class":77},"    \u002F\u002F 2.箭头函数的this\n",[67,77737,77738],{"class":69,"line":2397},[67,77739,77740],{"class":77},"    const fn = () => console.log(this)\n",[67,77742,77743,77745,77747],{"class":69,"line":2402},[67,77744,52954],{"class":77},[67,77746,52350],{"class":51837},[67,77748,51844],{"class":77},[19,77750,77751],{},"2.箭头函数的this 是上一层作用域的this指向，箭头函数是不会创建自己的this的",[19,77753,77754],{},"const fn = () => console.log(this)",[19,77756,77757],{},"fn() \u002F\u002F指向window",[19,77759,77760],{},"\u002F\u002F 3.对象方法箭头函数 this",[19,77762,77763],{},"①",[19,77765,77766],{},"const obj = {",[19,77768,77769],{},"uname: 'pink老师',",[19,77771,77772],{},"sayHai: () => console.log(this) \u002F\u002Fthis指向的是window",[19,77774,1802],{},[19,77776,77777],{},"调用对象里边的函数",[19,77779,77780],{},"箭头函数里不会创建自己的this，所以在箭头函数没有this，所以会往这个箭头函数上方去寻找，对象是没有作用域的，上一层的作用域是指向window的，因为obj在这个作用域，也就是说可以看obj的this的指向，指向window，所以这个this指向window，obj实际为window.obj",[19,77782,77783],{},"obj.sayHai()",[19,77785,77786],{},"②",[19,77788,77789],{},"const obj1 = {",[19,77791,77769],{},[19,77793,77794],{},"sayHai: function () {",[19,77796,77797],{},"let i = 10",[19,77799,77800],{},"const count = () => {",[19,77802,77803],{},"console.log(this)",[19,77805,77806],{},"这个this指向的是obj1,箭头函数不会创建this，所以不指向这个作用域的的父亲",[19,77808,77809],{},"也就是count，这个作用域的上层作用域在这个匿名函数中，这个匿名函数的this指向的obj1",[19,77811,1802],{},[19,77813,77814],{},"count()",[19,77816,1802],{},[19,77818,1802],{},[19,77820,77821],{},"obj1.sayHai()",[803,77823,77825],{"id":77824},"_46-解构赋值","4.6 解构赋值",[14,77827,77829],{"id":77828},"_461-数组解构","4.6.1 数组解构",[19,77831,77832],{},"以前要是使用数组中的值的话：",[19,77834,77835],{},"假设一个数组我存放了3个值，分别为最大值，最小值和平均值，我要使用里边的值的话，我需要再去声明这个常量",[19,77837,77838],{},"const arr=[100,60,80]",[19,77840,77841],{},"const max=arr[0]",[19,77843,77844],{},"const min=arr[1]",[19,77846,77847],{},"const avg=arr[2]",[19,77849,77850],{},"要写很多行代码，较为麻烦，所以我们需要用到数组解构",[19,77852,77853],{},"用数组解构的话：const [max,min,avr]=[100,60,80]",[19,77855,77856],{},"这个写法就类似于上边的那种用很多const的方法",[19,77858,77859],{},[725,77860],{"alt":62,"src":77861},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-241.png",[57,77863,77865],{"className":51170,"code":77864,"language":51172,"meta":62,"style":62},"①变量之间交换值:\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",[64,77866,77867,77872,77877,77882,77887,77892,77896,77900,77905,77909,77914,77919,77923,77928,77933,77944,77954,77959,77964,77969,77973,77977],{"__ignoreMap":62},[67,77868,77869],{"class":69,"line":70},[67,77870,77871],{"class":77},"①变量之间交换值:\n",[67,77873,77874],{"class":69,"line":143},[67,77875,77876],{"class":77},"let a=1\n",[67,77878,77879],{"class":69,"line":149},[67,77880,77881],{"class":77},"let b=2;\n",[67,77883,77884],{"class":69,"line":155},[67,77885,77886],{"class":77},"必须加这行代码，不然就会报错\n",[67,77888,77889],{"class":69,"line":161},[67,77890,77891],{"class":77},"[b,a]=[a,b]\n",[67,77893,77894],{"class":69,"line":167},[67,77895,177],{"emptyLinePlaceholder":176},[67,77897,77898],{"class":69,"line":173},[67,77899,177],{"emptyLinePlaceholder":176},[67,77901,77902],{"class":69,"line":180},[67,77903,77904],{"class":77},"可以写成下面的方式：\n",[67,77906,77907],{"class":69,"line":186},[67,77908,77876],{"class":77},[67,77910,77911],{"class":69,"line":444},[67,77912,77913],{"class":77},"let b=2\n",[67,77915,77916],{"class":69,"line":2335},[67,77917,77918],{"class":77},";[b,a]=[a,b]\n",[67,77920,77921],{"class":69,"line":2340},[67,77922,177],{"emptyLinePlaceholder":176},[67,77924,77925],{"class":69,"line":2346},[67,77926,77927],{"class":77},"②排序\n",[67,77929,77930],{"class":69,"line":2351},[67,77931,77932],{"class":77},"const arr1 = [2, 6, 4, 3, 5, 1]\n",[67,77934,77935,77938,77941],{"class":69,"line":2365},[67,77936,77937],{"class":77},"for (let i = 0; i ",[67,77939,1766],{"class":77940},"s7hpK",[67,77942,77943],{"class":77}," arr1.length; i++) {\n",[67,77945,77946,77949,77951],{"class":69,"line":2370},[67,77947,77948],{"class":77},"   for (let j = 0; j ",[67,77950,1766],{"class":77940},[67,77952,77953],{"class":77}," arr1.length - 1; j++) {\n",[67,77955,77956],{"class":69,"line":2376},[67,77957,77958],{"class":77},"      if (arr1[j] > arr1[j + 1]) {\n",[67,77960,77961],{"class":69,"line":2397},[67,77962,77963],{"class":77},"         [arr1[j + 1], arr1[j]] = [arr1[j], arr1[j + 1]]\n",[67,77965,77966],{"class":69,"line":2402},[67,77967,77968],{"class":77},"       }\n",[67,77970,77971],{"class":69,"line":2416},[67,77972,5028],{"class":77},[67,77974,77975],{"class":69,"line":2421},[67,77976,2288],{"class":77},[67,77978,77979],{"class":69,"line":2450},[67,77980,77981],{"class":77},"console.log(arr1)\n",[19,77983,77984],{},"数组解构的细节：",[19,77986,77987],{},"①变量多，单元值少",[19,77989,77990],{},[725,77991],{"alt":62,"src":77992},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-242.png",[19,77994,77995],{},"防止出现undefined的方法：",[19,77997,77998],{},"const [a=0,b=0] =[1]",[19,78000,78001],{},"a为1，b为0；优先执行传过来的参数，没有参数传过来就是用自己的参数",[19,78003,78004],{},"②变量少，单元值多",[19,78006,78007],{},[725,78008],{"alt":62,"src":78009},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-243.png",[19,78011,78012],{},"此时可以使用剩余参数来接收多余的值",[19,78014,78015],{},"const [a,b,...c]=[1,2,3,4]",[19,78017,78018],{},"console.log(c) 输出[3,4]",[19,78020,78021],{},"③可以按需导入，忽略某些返回值",[19,78023,78024],{},[725,78025],{"alt":62,"src":78026},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-244.png",[19,78028,78029],{},"④支持多维数组的结构",[57,78031,78035],{"className":78032,"code":78033,"language":78034,"meta":62,"style":62},"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",[64,78036,78037,78065,78081,78096,78111],{"__ignoreMap":62},[67,78038,78039,78041,78043,78045,78047,78049,78051,78053,78056,78058,78060,78062],{"class":69,"line":70},[67,78040,7511],{"class":73},[67,78042,52370],{"class":77},[67,78044,909],{"class":73},[67,78046,52763],{"class":77},[67,78048,1077],{"class":208},[67,78050,13153],{"class":77},[67,78052,939],{"class":208},[67,78054,78055],{"class":77},", [",[67,78057,933],{"class":208},[67,78059,13153],{"class":77},[67,78061,1151],{"class":208},[67,78063,78064],{"class":77},"]]\n",[67,78066,78067,78070,78072,78074,78076,78078],{"class":69,"line":143},[67,78068,78069],{"class":77},"console.",[67,78071,58784],{"class":112},[67,78073,4571],{"class":77},[67,78075,1051],{"class":208},[67,78077,4935],{"class":77},[67,78079,78080],{"class":202},"  \u002F\u002F1\n",[67,78082,78083,78085,78087,78089,78091,78093],{"class":69,"line":149},[67,78084,78069],{"class":77},[67,78086,58784],{"class":112},[67,78088,4571],{"class":77},[67,78090,1077],{"class":208},[67,78092,4935],{"class":77},[67,78094,78095],{"class":202},"  \u002F\u002F2\n",[67,78097,78098,78100,78102,78104,78106,78108],{"class":69,"line":155},[67,78099,78069],{"class":77},[67,78101,58784],{"class":112},[67,78103,4571],{"class":77},[67,78105,939],{"class":208},[67,78107,4935],{"class":77},[67,78109,78110],{"class":202},"  \u002F\u002F[3,4]\n",[67,78112,78113,78115,78117,78119,78121,78123,78125,78127],{"class":69,"line":161},[67,78114,78069],{"class":77},[67,78116,58784],{"class":112},[67,78118,4571],{"class":77},[67,78120,939],{"class":208},[67,78122,5620],{"class":77},[67,78124,1051],{"class":208},[67,78126,4935],{"class":77},[67,78128,78129],{"class":202},"  \u002F\u002F3\n",[57,78131,78133],{"className":78032,"code":78132,"language":78034,"meta":62,"style":62},"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",[64,78134,78135,78162,78173,78184],{"__ignoreMap":62},[67,78136,78137,78139,78142,78144,78146,78148,78150,78152,78154,78156,78158,78160],{"class":69,"line":70},[67,78138,7511],{"class":73},[67,78140,78141],{"class":77}," [a, b, c] ",[67,78143,909],{"class":73},[67,78145,52763],{"class":77},[67,78147,1077],{"class":208},[67,78149,13153],{"class":77},[67,78151,939],{"class":208},[67,78153,78055],{"class":77},[67,78155,933],{"class":208},[67,78157,13153],{"class":77},[67,78159,1151],{"class":208},[67,78161,78064],{"class":77},[67,78163,78164,78166,78168,78171],{"class":69,"line":143},[67,78165,78069],{"class":77},[67,78167,58784],{"class":112},[67,78169,78170],{"class":77},"(a)",[67,78172,78080],{"class":202},[67,78174,78175,78177,78179,78182],{"class":69,"line":149},[67,78176,78069],{"class":77},[67,78178,58784],{"class":112},[67,78180,78181],{"class":77},"(b)",[67,78183,78095],{"class":202},[67,78185,78186,78188,78190,78193],{"class":69,"line":155},[67,78187,78069],{"class":77},[67,78189,58784],{"class":112},[67,78191,78192],{"class":77},"(c)",[67,78194,78110],{"class":202},[57,78196,78198],{"className":78032,"code":78197,"language":78034,"meta":62,"style":62},"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",[64,78199,78200,78227,78237,78247,78257],{"__ignoreMap":62},[67,78201,78202,78204,78207,78209,78211,78213,78215,78217,78219,78221,78223,78225],{"class":69,"line":70},[67,78203,7511],{"class":73},[67,78205,78206],{"class":77}," [a, b, [c, d]] ",[67,78208,909],{"class":73},[67,78210,52763],{"class":77},[67,78212,1077],{"class":208},[67,78214,13153],{"class":77},[67,78216,939],{"class":208},[67,78218,78055],{"class":77},[67,78220,933],{"class":208},[67,78222,13153],{"class":77},[67,78224,1151],{"class":208},[67,78226,78064],{"class":77},[67,78228,78229,78231,78233,78235],{"class":69,"line":143},[67,78230,78069],{"class":77},[67,78232,58784],{"class":112},[67,78234,78170],{"class":77},[67,78236,78080],{"class":202},[67,78238,78239,78241,78243,78245],{"class":69,"line":149},[67,78240,78069],{"class":77},[67,78242,58784],{"class":112},[67,78244,78181],{"class":77},[67,78246,78095],{"class":202},[67,78248,78249,78251,78253,78255],{"class":69,"line":155},[67,78250,78069],{"class":77},[67,78252,58784],{"class":112},[67,78254,78192],{"class":77},[67,78256,78129],{"class":202},[67,78258,78259,78261,78263,78266],{"class":69,"line":161},[67,78260,78069],{"class":77},[67,78262,58784],{"class":112},[67,78264,78265],{"class":77},"(d)",[67,78267,78268],{"class":202},"  \u002F\u002F4\n",[14,78270,78272],{"id":78271},"_462-对象解构","4.6.2 对象解构",[19,78274,78275],{},"对象解构是将对象属性和方法快速批量赋值给一系列变量的简洁语法",[19,78277,78278],{},"用的非常非常多！！！！！！",[40,78280,78282],{"id":78281},"_4621-对象解构的基本用法","4.6.2.1 对象解构的基本用法",[19,78284,78285],{},"基本语法：",[815,78287,78288,78291,78294,78297],{},[818,78289,78290],{},"赋值运算符 = 左侧的 {} 用于批量声明变量，右侧对象的属性值将被赋值给左侧的变量",[818,78292,78293],{},"对象属性的值将被赋值给与属性名相同的变量",[818,78295,78296],{},"注意解构的变量名不要和外面的变量名冲突否则报错",[818,78298,78299],{},"对象中找不到与变量名一致的属性时变量值为 undefined",[57,78301,78303],{"className":51170,"code":78302,"language":51172,"meta":62,"style":62},"const obj = {\n   uname: 'pink老师',\n   age: 18,\n}\nconst { uname, age } = obj\n",[64,78304,78305,78310,78315,78320,78324],{"__ignoreMap":62},[67,78306,78307],{"class":69,"line":70},[67,78308,78309],{"class":77},"const obj = {\n",[67,78311,78312],{"class":69,"line":143},[67,78313,78314],{"class":77},"   uname: 'pink老师',\n",[67,78316,78317],{"class":69,"line":149},[67,78318,78319],{"class":77},"   age: 18,\n",[67,78321,78322],{"class":69,"line":155},[67,78323,2288],{"class":77},[67,78325,78326],{"class":69,"line":161},[67,78327,78328],{"class":77},"const { uname, age } = obj\n",[19,78330,78331],{},"上方代码这样写等价于：",[19,78333,78334],{},"const uname等价于obj.uname",[19,78336,78337],{},"变量名可以重新改名：",[19,78339,78340],{},"const uname='red老师'",[19,78342,78343],{},"const user={",[19,78345,78346],{},"  uname:'pink老师',",[19,78348,78349],{},"  age:18",[19,78351,1802],{},[19,78353,78354],{},"const {uname,age}=user",[19,78356,78357],{},"解构的变量名与全局变量名冲突，此时会报错，解决方案是改解构变量名，因为全局变量名可能有很多代码正在使用，不能改，一改就会影响其他部分，所以要改解构变量名",[19,78359,78360],{},"const {旧变量名：新变量名}=对象",[19,78362,78363],{},"const {uname:username,age}=user",[40,78365,78367],{"id":78366},"_4622-数组对象的解构","4.6.2.2 数组对象的解构",[19,78369,78370],{},[725,78371],{"alt":62,"src":78372},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-245.png",[40,78374,78376],{"id":78375},"_4623-多级对象解构","4.6.2.3 多级对象解构",[19,78378,78379],{},[725,78380],{"alt":62,"src":78381},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-246.png",[57,78383,78385],{"className":53604,"code":78384,"language":53606,"meta":62,"style":62},"  \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",[64,78386,78387,78395,78400,78405,78410,78415,78420,78425,78430,78435,78439,78444,78449],{"__ignoreMap":62},[67,78388,78389,78391,78393],{"class":69,"line":70},[67,78390,52681],{"class":77},[67,78392,52350],{"class":51837},[67,78394,51844],{"class":77},[67,78396,78397],{"class":69,"line":143},[67,78398,78399],{"class":77},"    const pig = {\n",[67,78401,78402],{"class":69,"line":149},[67,78403,78404],{"class":77},"      name: '佩奇',\n",[67,78406,78407],{"class":69,"line":155},[67,78408,78409],{"class":77},"      family: {\n",[67,78411,78412],{"class":69,"line":161},[67,78413,78414],{"class":77},"        mother: '猪妈妈',\n",[67,78416,78417],{"class":69,"line":167},[67,78418,78419],{"class":77},"        father: '猪爸爸',\n",[67,78421,78422],{"class":69,"line":173},[67,78423,78424],{"class":77},"        sister: '乔治'\n",[67,78426,78427],{"class":69,"line":180},[67,78428,78429],{"class":77},"      },\n",[67,78431,78432],{"class":69,"line":186},[67,78433,78434],{"class":77},"      age: 6\n",[67,78436,78437],{"class":69,"line":444},[67,78438,2909],{"class":77},[67,78440,78441],{"class":69,"line":2335},[67,78442,78443],{"class":77},"    \u002F\u002F 多级对象解构\n",[67,78445,78446],{"class":69,"line":2340},[67,78447,78448],{"class":77},"    const { name, family: { mother, father, sister }, age } = pig\n",[67,78450,78451,78453,78455],{"class":69,"line":2346},[67,78452,52954],{"class":77},[67,78454,52350],{"class":51837},[67,78456,51844],{"class":77},[19,78458,78459],{},"多级对象跟多维数组不同的是，需要指定是哪个对象",[57,78461,78464],{"className":78462,"code":78463,"language":76984,"meta":62,"style":62},"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",[64,78465,78466,78471,78482,78494,78506,78515,78519,78530,78542,78552,78557,78561,78571,78582,78591,78595,78599,78610,78621,78630,78634,78639],{"__ignoreMap":62},[67,78467,78468],{"class":69,"line":70},[67,78469,78470],{"class":202},"    \u002F\u002F 这是后台传递过来的数据\n",[67,78472,78473,78475,78478,78480],{"class":69,"line":143},[67,78474,11939],{"class":73},[67,78476,78477],{"class":77}," msg ",[67,78479,909],{"class":73},[67,78481,16289],{"class":77},[67,78483,78484,78487,78489,78492],{"class":69,"line":149},[67,78485,78486],{"class":84},"      \"code\"",[67,78488,1715],{"class":73},[67,78490,78491],{"class":208}," 200",[67,78493,32003],{"class":77},[67,78495,78496,78499,78501,78504],{"class":69,"line":155},[67,78497,78498],{"class":84},"      \"msg\"",[67,78500,1715],{"class":73},[67,78502,78503],{"class":84}," \"获取新闻列表成功\"",[67,78505,32003],{"class":77},[67,78507,78508,78511,78513],{"class":69,"line":161},[67,78509,78510],{"class":84},"      \"data\"",[67,78512,1715],{"class":73},[67,78514,55984],{"class":77},[67,78516,78517],{"class":69,"line":167},[67,78518,3231],{"class":77},[67,78520,78521,78524,78526,78528],{"class":69,"line":173},[67,78522,78523],{"class":84},"          \"id\"",[67,78525,1715],{"class":73},[67,78527,25828],{"class":208},[67,78529,32003],{"class":77},[67,78531,78532,78535,78537,78540],{"class":69,"line":180},[67,78533,78534],{"class":84},"          \"title\"",[67,78536,1715],{"class":73},[67,78538,78539],{"class":84}," \"5G商用自己，三大运用商收入下降\"",[67,78541,32003],{"class":77},[67,78543,78544,78547,78549],{"class":69,"line":186},[67,78545,78546],{"class":84},"          \"count\"",[67,78548,1715],{"class":73},[67,78550,78551],{"class":208}," 58\n",[67,78553,78554],{"class":69,"line":444},[67,78555,78556],{"class":77},"        },\n",[67,78558,78559],{"class":69,"line":2335},[67,78560,3231],{"class":77},[67,78562,78563,78565,78567,78569],{"class":69,"line":2340},[67,78564,78523],{"class":84},[67,78566,1715],{"class":73},[67,78568,15472],{"class":208},[67,78570,32003],{"class":77},[67,78572,78573,78575,78577,78580],{"class":69,"line":2346},[67,78574,78534],{"class":84},[67,78576,1715],{"class":73},[67,78578,78579],{"class":84}," \"国际媒体头条速览\"",[67,78581,32003],{"class":77},[67,78583,78584,78586,78588],{"class":69,"line":2351},[67,78585,78546],{"class":84},[67,78587,1715],{"class":73},[67,78589,78590],{"class":208}," 56\n",[67,78592,78593],{"class":69,"line":2365},[67,78594,78556],{"class":77},[67,78596,78597],{"class":69,"line":2370},[67,78598,3231],{"class":77},[67,78600,78601,78603,78605,78608],{"class":69,"line":2376},[67,78602,78523],{"class":84},[67,78604,1715],{"class":73},[67,78606,78607],{"class":208}," 3",[67,78609,32003],{"class":77},[67,78611,78612,78614,78616,78619],{"class":69,"line":2397},[67,78613,78534],{"class":84},[67,78615,1715],{"class":73},[67,78617,78618],{"class":84}," \"乌克兰和俄罗斯持续冲突\"",[67,78620,32003],{"class":77},[67,78622,78623,78625,78627],{"class":69,"line":2402},[67,78624,78546],{"class":84},[67,78626,1715],{"class":73},[67,78628,78629],{"class":208}," 1669\n",[67,78631,78632],{"class":69,"line":2416},[67,78633,78556],{"class":77},[67,78635,78636],{"class":69,"line":2421},[67,78637,78638],{"class":77},"      ]\n",[67,78640,78641],{"class":69,"line":2450},[67,78642,2909],{"class":77},[19,78644,78645],{},"1.针对后台的数据，如果我只要data的话，只需要： const {data}=msg",[19,78647,78648],{},"对象里边的属性和方法是无序的，我们只要里边的其中一个值的话，只需要：const{要的那个属性}=对象",[19,78650,78651],{},"\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,78653,78654],{},"function({data}) {",[19,78656,78657],{},"console.log(data)",[19,78659,1802],{},[19,78661,78662],{},"render(msg)",[19,78664,78665],{},"实参传递给形参的时候解构了",[19,78667,78668],{},"这样可以节省空间，放在函数里解构，只有函数调用的时候才会用到，放在外面的话内存就要存好几遍这些数据",[19,78670,78671],{},"2.为了防止msg里面的data名字混淆，要求渲染函数里面的数据名改为 myData",[19,78673,78674],{},"function render({data:mydata}) {",[19,78676,78677],{},"  console.log(data)",[19,78679,1802],{},[14,78681,78683],{"id":78682},"_463-总结代码加分号的情况","4.6.3 总结代码加分号的情况",[19,78685,78686],{},"有两种情况：一个是数组结构，一个是立即执行函数",[815,78688,78689],{},[818,78690,78691],{},"如果对一个数组进行遍历，有两种方式：",[19,78693,78694],{},"①法1",[19,78696,78697],{},"const arr=[1,2,3]",[19,78699,78700],{},"arr.map(function(item,index) {",[19,78702,78703],{},"  console.log(item)",[19,78705,53001],{},[19,78707,78708],{},[725,78709],{"alt":62,"src":78710},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-247.png",[19,78712,78713],{},"②法2",[19,78715,78716],{},"const str='pink'",[19,78718,78719],{},"[1,2,3].map(function(item,index) {",[19,78721,78722],{},"console.log(item)",[19,78724,53001],{},[19,78726,78727],{},[725,78728],{"alt":62,"src":78729},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-248.png",[19,78731,78732],{},"此时会报错",[19,78734,78735],{},"他会认为是const str='pink' [1,2,3].map(function(item,index) {",[19,78737,78722],{},[19,78739,53001],{},[19,78741,78742],{},"内部会当成这样处理，所以我们用分号进行隔开",[803,78744,78746],{"id":78745},"_47-遍历数组foreach方法","4.7 遍历数组forEach方法",[19,78748,78749],{},"forEach多和字符串来进行联合使用，使用forEach遍历后加到小盒子中，字符串str+=小盒子，然后将字符串加到大盒子中，大盒子使用innerHTML",[19,78751,78752],{},"可以理解为加强版的for循环",[19,78754,78755],{},[725,78756],{"alt":62,"src":78757},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-249.png",[19,78759,78760],{},"里边不写return，不返回数组，只遍历不返回",[19,78762,78763],{},"map是返回数组",[19,78765,78766],{},"forEach主要用于遍历数组对象",[57,78768,78770],{"className":53604,"code":78769,"language":53606,"meta":62,"style":62},"  \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",[64,78771,78772,78780,78785,78790,78795,78800,78804,78809],{"__ignoreMap":62},[67,78773,78774,78776,78778],{"class":69,"line":70},[67,78775,52681],{"class":77},[67,78777,52350],{"class":51837},[67,78779,51844],{"class":77},[67,78781,78782],{"class":69,"line":143},[67,78783,78784],{"class":77},"    const arr = ['red', 'green', 'pink']\n",[67,78786,78787],{"class":69,"line":149},[67,78788,78789],{"class":77},"    const result = arr.forEach(function (item, index) {\n",[67,78791,78792],{"class":69,"line":155},[67,78793,78794],{"class":77},"      console.log(item)\n",[67,78796,78797],{"class":69,"line":161},[67,78798,78799],{"class":77},"      console.log(index)\n",[67,78801,78802],{"class":69,"line":167},[67,78803,33998],{"class":77},[67,78805,78806],{"class":69,"line":173},[67,78807,78808],{"class":77},"    console.log(result)\n",[67,78810,78811,78813,78815],{"class":69,"line":180},[67,78812,52954],{"class":77},[67,78814,52350],{"class":51837},[67,78816,51844],{"class":77},[19,78818,78819],{},[725,78820],{"alt":62,"src":78821},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-250.png",[803,78823,78825],{"id":78824},"_48-筛选数组-filter方法","4.8 筛选数组 filter方法",[19,78827,78828],{},[725,78829],{"alt":62,"src":78830},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-251.png",[19,78832,78833],{},"只能写比较符，写加号不写任何作用，map中写比较符也不起任何作用，每种方法都有其各自的作用，但是有一点他们两个方法返回的都是新数组",[57,78835,78837],{"className":53604,"code":78836,"language":53606,"meta":62,"style":62},"\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",[64,78838,78839,78847,78855,78860,78865,78869,78873,78878,78882,78887,78895],{"__ignoreMap":62},[67,78840,78841,78843,78845],{"class":69,"line":70},[67,78842,1766],{"class":77},[67,78844,52337],{"class":51837},[67,78846,51844],{"class":77},[67,78848,78849,78851,78853],{"class":69,"line":143},[67,78850,52681],{"class":77},[67,78852,52350],{"class":51837},[67,78854,51844],{"class":77},[67,78856,78857],{"class":69,"line":149},[67,78858,78859],{"class":77},"    const arr = [10, 20, 30]\n",[67,78861,78862],{"class":69,"line":155},[67,78863,78864],{"class":77},"    const newArr = arr.filter(function (item, index) {\n",[67,78866,78867],{"class":69,"line":161},[67,78868,78794],{"class":77},[67,78870,78871],{"class":69,"line":167},[67,78872,78799],{"class":77},[67,78874,78875],{"class":69,"line":173},[67,78876,78877],{"class":77},"      return item >= 20\n",[67,78879,78880],{"class":69,"line":180},[67,78881,33998],{"class":77},[67,78883,78884],{"class":69,"line":186},[67,78885,78886],{"class":77},"    console.log(newArr)\n",[67,78888,78889,78891,78893],{"class":69,"line":444},[67,78890,52954],{"class":77},[67,78892,52350],{"class":51837},[67,78894,51844],{"class":77},[67,78896,78897,78899,78901],{"class":69,"line":2335},[67,78898,52322],{"class":77},[67,78900,52337],{"class":51837},[67,78902,51844],{"class":77},[19,78904,78905],{},"这个也可以写成箭头函数：",[57,78907,78909],{"className":51170,"code":78908,"language":51172,"meta":62,"style":62},"const newArr = arr.filter(item => item >= 20)\n",[64,78910,78911],{"__ignoreMap":62},[67,78912,78913],{"class":69,"line":70},[67,78914,78908],{"class":77},[803,78916,78918],{"id":78917},"_49-商品列表价格筛选","4.9 商品列表价格筛选",[19,78920,78921],{},[725,78922],{"alt":62,"src":78923},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-252.png",[19,78925,78926],{},"步骤：",[19,78928,78929],{},"①：渲染页面模块",[1863,78931,78932,78935],{},[818,78933,78934],{},"初始化需要渲染页面，同时，点击不同的需求，还会重新渲染页面，所以渲染做成一个函数",[818,78936,78937],{},"用forEach+字符串的形式",[19,78939,78940],{},"②：点击不同需求，显示不同页面内容",[1863,78942,78943,78946,78949,78952,78955],{},[818,78944,78945],{},"点击采取事件委托方式 .filter",[818,78947,78948],{},"利用过滤函数 filter 筛选出符合条件的数据，因为生成的是一个数组，传递给渲染函数即可",[818,78950,78951],{},"筛选条件是根据点击的 data-index 来判断",[818,78953,78954],{},"可以使用对象解构，把事件对象解构",[818,78956,78957],{},"因为全部区间不需要筛选，直接把goodList渲染即可",[57,78959,78961],{"className":51170,"code":78960,"language":51172,"meta":62,"style":62},"\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",[64,78962,78963,78973,78987,78991,78999,79013,79033,79045,79053,79059,79069,79079,79089,79093,79097,79103,79116,79128,79138,79150,79154,79158,79165,79178,79190,79207,79225,79238,79242,79246,79258,79268,79272,79276,79283,79324,79351,79361,79365,79369,79377,79389,79393,79397,79405,79417,79429,79440,79444,79448,79457,79469,79480,79484,79488,79497,79509,79521,79525,79529,79536,79546,79558,79570,79585,79589,79593,79601,79617,79627,79637,79647,79659,79663,79667,79677,79688,79698,79702,79710,79718,79722,79730,79745,79771,79796,79821,79840,79848,79862,79867,79872,79877,79882,79887,79895,79903,79908,79919,79924,79934,79944,79954,79964,79968,79972,79981,79990,79999,80008,80012,80016,80025,80034,80043,80052,80056,80060,80069,80078,80087,80096,80100,80104,80113,80122,80131,80140,80144,80148,80157,80166,80175,80184,80188,80192,80201,80210,80219,80228,80232,80236,80245,80254,80262,80271,80275,80279,80283,80288,80300,80305,80317,80321,80338,80366,80375,80380,80390,80400,80409,80414,80419,80423,80428,80445,80449,80454,80462,80467,80494,80499,80519,80524,80536,80541,80546,80551,80562,80576,80613,80631,80664,80681,80705,80709,80714,80720,80724,80728,80732,80740,80748,80752],{"__ignoreMap":62},[67,78964,78965,78967,78969,78971],{"class":69,"line":70},[67,78966,51834],{"class":77},[67,78968,51838],{"class":51837},[67,78970,51841],{"class":112},[67,78972,51844],{"class":77},[67,78974,78975,78977,78979,78981,78983,78985],{"class":69,"line":143},[67,78976,1766],{"class":77},[67,78978,51172],{"class":51837},[67,78980,51853],{"class":112},[67,78982,909],{"class":77},[67,78984,51858],{"class":84},[67,78986,51844],{"class":77},[67,78988,78989],{"class":69,"line":149},[67,78990,177],{"emptyLinePlaceholder":176},[67,78992,78993,78995,78997],{"class":69,"line":155},[67,78994,1766],{"class":77},[67,78996,51871],{"class":51837},[67,78998,51844],{"class":77},[67,79000,79001,79003,79005,79007,79009,79011],{"class":69,"line":161},[67,79002,52681],{"class":77},[67,79004,51881],{"class":51837},[67,79006,51884],{"class":112},[67,79008,909],{"class":77},[67,79010,51889],{"class":84},[67,79012,51844],{"class":77},[67,79014,79015,79017,79019,79021,79023,79025,79027,79029,79031],{"class":69,"line":167},[67,79016,52681],{"class":77},[67,79018,51881],{"class":51837},[67,79020,15637],{"class":112},[67,79022,909],{"class":77},[67,79024,51928],{"class":84},[67,79026,51908],{"class":112},[67,79028,909],{"class":77},[67,79030,51935],{"class":84},[67,79032,51844],{"class":77},[67,79034,79035,79037,79039,79041,79043],{"class":69,"line":173},[67,79036,52681],{"class":77},[67,79038,51944],{"class":51837},[67,79040,51947],{"class":77},[67,79042,51944],{"class":51837},[67,79044,51844],{"class":77},[67,79046,79047,79049,79051],{"class":69,"line":180},[67,79048,52681],{"class":77},[67,79050,779],{"class":51837},[67,79052,51844],{"class":77},[67,79054,79055,79057],{"class":69,"line":186},[67,79056,7122],{"class":51837},[67,79058,16289],{"class":77},[67,79060,79061,79063,79065,79067],{"class":69,"line":444},[67,79062,55232],{"class":208},[67,79064,51974],{"class":77},[67,79066,1051],{"class":208},[67,79068,2017],{"class":77},[67,79070,79071,79073,79075,79077],{"class":69,"line":2335},[67,79072,55243],{"class":208},[67,79074,51974],{"class":77},[67,79076,1051],{"class":208},[67,79078,2017],{"class":77},[67,79080,79081,79083,79085,79087],{"class":69,"line":2340},[67,79082,73133],{"class":208},[67,79084,51974],{"class":77},[67,79086,61042],{"class":208},[67,79088,2017],{"class":77},[67,79090,79091],{"class":69,"line":2346},[67,79092,2909],{"class":77},[67,79094,79095],{"class":69,"line":2351},[67,79096,177],{"emptyLinePlaceholder":176},[67,79098,79099,79101],{"class":69,"line":2365},[67,79100,62660],{"class":112},[67,79102,16289],{"class":77},[67,79104,79105,79107,79109,79112,79114],{"class":69,"line":2370},[67,79106,55308],{"class":208},[67,79108,51974],{"class":77},[67,79110,79111],{"class":208},"990",[67,79113,52029],{"class":73},[67,79115,2017],{"class":77},[67,79117,79118,79120,79122,79124,79126],{"class":69,"line":2376},[67,79119,55243],{"class":208},[67,79121,51974],{"class":77},[67,79123,1051],{"class":208},[67,79125,52093],{"class":208},[67,79127,2017],{"class":77},[67,79129,79130,79132,79134,79136],{"class":69,"line":2397},[67,79131,55546],{"class":208},[67,79133,51974],{"class":77},[67,79135,52014],{"class":208},[67,79137,2017],{"class":77},[67,79139,79140,79143,79145,79148],{"class":69,"line":2402},[67,79141,79142],{"class":208},"      flex-wrap",[67,79144,51974],{"class":77},[67,79146,79147],{"class":208},"wrap",[67,79149,2017],{"class":77},[67,79151,79152],{"class":69,"line":2416},[67,79153,2909],{"class":77},[67,79155,79156],{"class":69,"line":2421},[67,79157,177],{"emptyLinePlaceholder":176},[67,79159,79160,79163],{"class":69,"line":2450},[67,79161,79162],{"class":112},"    .item",[67,79164,16289],{"class":77},[67,79166,79167,79169,79171,79174,79176],{"class":69,"line":2455},[67,79168,55308],{"class":208},[67,79170,51974],{"class":77},[67,79172,79173],{"class":208},"240",[67,79175,52029],{"class":73},[67,79177,2017],{"class":77},[67,79179,79180,79182,79184,79186,79188],{"class":69,"line":2472},[67,79181,62537],{"class":208},[67,79183,51974],{"class":77},[67,79185,1303],{"class":208},[67,79187,52029],{"class":73},[67,79189,2017],{"class":77},[67,79191,79192,79194,79196,79198,79200,79203,79205],{"class":69,"line":2477},[67,79193,55232],{"class":208},[67,79195,51974],{"class":77},[67,79197,1556],{"class":208},[67,79199,52029],{"class":73},[67,79201,79202],{"class":208}," 30",[67,79204,52029],{"class":73},[67,79206,2017],{"class":77},[67,79208,79209,79211,79213,79215,79218,79221,79223],{"class":69,"line":2482},[67,79210,62397],{"class":208},[67,79212,51974],{"class":77},[67,79214,28658],{"class":208},[67,79216,79217],{"class":208}," ease",[67,79219,79220],{"class":208}," .5",[67,79222,1551],{"class":73},[67,79224,2017],{"class":77},[67,79226,79227,79230,79232,79234,79236],{"class":69,"line":2487},[67,79228,79229],{"class":208},"      margin-bottom",[67,79231,51974],{"class":77},[67,79233,1556],{"class":208},[67,79235,52029],{"class":73},[67,79237,2017],{"class":77},[67,79239,79240],{"class":69,"line":2501},[67,79241,2909],{"class":77},[67,79243,79244],{"class":69,"line":2506},[67,79245,177],{"emptyLinePlaceholder":176},[67,79247,79248,79251,79253,79256],{"class":69,"line":3298},[67,79249,79250],{"class":112},"    .item:nth-child",[67,79252,864],{"class":77},[67,79254,79255],{"class":208},"4n",[67,79257,13160],{"class":77},[67,79259,79260,79262,79264,79266],{"class":69,"line":3312},[67,79261,62537],{"class":208},[67,79263,51974],{"class":77},[67,79265,1051],{"class":208},[67,79267,2017],{"class":77},[67,79269,79270],{"class":69,"line":3320},[67,79271,2909],{"class":77},[67,79273,79274],{"class":69,"line":3325},[67,79275,177],{"emptyLinePlaceholder":176},[67,79277,79278,79281],{"class":69,"line":3331},[67,79279,79280],{"class":112},"    .item:hover",[67,79282,16289],{"class":77},[67,79284,79285,79288,79290,79292,79294,79296,79298,79300,79302,79305,79307,79309,79311,79313,79315,79317,79319,79322],{"class":69,"line":3337},[67,79286,79287],{"class":208},"      box-shadow",[67,79289,51974],{"class":77},[67,79291,1051],{"class":208},[67,79293,52029],{"class":73},[67,79295,4813],{"class":208},[67,79297,52029],{"class":73},[67,79299,2870],{"class":208},[67,79301,52029],{"class":73},[67,79303,79304],{"class":208}," rgba",[67,79306,864],{"class":77},[67,79308,1051],{"class":208},[67,79310,13153],{"class":77},[67,79312,1051],{"class":208},[67,79314,13153],{"class":77},[67,79316,1051],{"class":208},[67,79318,13153],{"class":77},[67,79320,79321],{"class":208},".2",[67,79323,3440],{"class":77},[67,79325,79326,79329,79331,79334,79336,79338,79340,79343,79345,79347,79349],{"class":69,"line":3342},[67,79327,79328],{"class":208},"      transform",[67,79330,51974],{"class":77},[67,79332,79333],{"class":208},"translate3d",[67,79335,864],{"class":77},[67,79337,1051],{"class":208},[67,79339,13153],{"class":77},[67,79341,79342],{"class":208},"-4",[67,79344,52029],{"class":73},[67,79346,13153],{"class":77},[67,79348,1051],{"class":208},[67,79350,3440],{"class":77},[67,79352,79353,79355,79357,79359],{"class":69,"line":8667},[67,79354,62562],{"class":208},[67,79356,51974],{"class":77},[67,79358,62567],{"class":208},[67,79360,2017],{"class":77},[67,79362,79363],{"class":69,"line":8691},[67,79364,2909],{"class":77},[67,79366,79367],{"class":69,"line":8696},[67,79368,177],{"emptyLinePlaceholder":176},[67,79370,79371,79373,79375],{"class":69,"line":8702},[67,79372,79162],{"class":112},[67,79374,56152],{"class":51837},[67,79376,16289],{"class":77},[67,79378,79379,79381,79383,79385,79387],{"class":69,"line":8729},[67,79380,55308],{"class":208},[67,79382,51974],{"class":77},[67,79384,1169],{"class":208},[67,79386,1186],{"class":73},[67,79388,2017],{"class":77},[67,79390,79391],{"class":69,"line":8734},[67,79392,2909],{"class":77},[67,79394,79395],{"class":69,"line":8740},[67,79396,177],{"emptyLinePlaceholder":176},[67,79398,79399,79401,79403],{"class":69,"line":8752},[67,79400,79162],{"class":112},[67,79402,62841],{"class":112},[67,79404,16289],{"class":77},[67,79406,79407,79409,79411,79413,79415],{"class":69,"line":8764},[67,79408,55459],{"class":208},[67,79410,51974],{"class":77},[67,79412,1506],{"class":208},[67,79414,52029],{"class":73},[67,79416,2017],{"class":77},[67,79418,79419,79421,79423,79425,79427],{"class":69,"line":8776},[67,79420,79229],{"class":208},[67,79422,51974],{"class":77},[67,79424,1303],{"class":208},[67,79426,52029],{"class":73},[67,79428,2017],{"class":77},[67,79430,79431,79433,79435,79438],{"class":69,"line":10435},[67,79432,57953],{"class":208},[67,79434,51974],{"class":77},[67,79436,79437],{"class":208},"#666",[67,79439,2017],{"class":77},[67,79441,79442],{"class":69,"line":10459},[67,79443,2909],{"class":77},[67,79445,79446],{"class":69,"line":10482},[67,79447,177],{"emptyLinePlaceholder":176},[67,79449,79450,79452,79455],{"class":69,"line":10506},[67,79451,79162],{"class":112},[67,79453,79454],{"class":112}," .price",[67,79456,16289],{"class":77},[67,79458,79459,79461,79463,79465,79467],{"class":69,"line":10511},[67,79460,55459],{"class":208},[67,79462,51974],{"class":77},[67,79464,1606],{"class":208},[67,79466,52029],{"class":73},[67,79468,2017],{"class":77},[67,79470,79471,79473,79475,79478],{"class":69,"line":10516},[67,79472,57953],{"class":208},[67,79474,51974],{"class":77},[67,79476,79477],{"class":208},"firebrick",[67,79479,2017],{"class":77},[67,79481,79482],{"class":69,"line":10521},[67,79483,2909],{"class":77},[67,79485,79486],{"class":69,"line":10530},[67,79487,177],{"emptyLinePlaceholder":176},[67,79489,79490,79492,79495],{"class":69,"line":10535},[67,79491,79162],{"class":112},[67,79493,79494],{"class":112}," .price::before",[67,79496,16289],{"class":77},[67,79498,79499,79502,79504,79507],{"class":69,"line":10541},[67,79500,79501],{"class":208},"      content",[67,79503,51974],{"class":77},[67,79505,79506],{"class":84},"'￥'",[67,79508,2017],{"class":77},[67,79510,79511,79513,79515,79517,79519],{"class":69,"line":10562},[67,79512,55459],{"class":208},[67,79514,51974],{"class":77},[67,79516,1406],{"class":208},[67,79518,52029],{"class":73},[67,79520,2017],{"class":77},[67,79522,79523],{"class":69,"line":10568},[67,79524,2909],{"class":77},[67,79526,79527],{"class":69,"line":10582},[67,79528,177],{"emptyLinePlaceholder":176},[67,79530,79531,79534],{"class":69,"line":10588},[67,79532,79533],{"class":112},"    .filter",[67,79535,16289],{"class":77},[67,79537,79538,79540,79542,79544],{"class":69,"line":10615},[67,79539,55546],{"class":208},[67,79541,51974],{"class":77},[67,79543,52014],{"class":208},[67,79545,2017],{"class":77},[67,79547,79548,79550,79552,79554,79556],{"class":69,"line":10624},[67,79549,55308],{"class":208},[67,79551,51974],{"class":77},[67,79553,79111],{"class":208},[67,79555,52029],{"class":73},[67,79557,2017],{"class":77},[67,79559,79560,79562,79564,79566,79568],{"class":69,"line":10630},[67,79561,55243],{"class":208},[67,79563,51974],{"class":77},[67,79565,1051],{"class":208},[67,79567,52093],{"class":208},[67,79569,2017],{"class":77},[67,79571,79572,79574,79576,79578,79580,79582],{"class":69,"line":10638},[67,79573,55232],{"class":208},[67,79575,51974],{"class":77},[67,79577,1512],{"class":208},[67,79579,52029],{"class":73},[67,79581,79202],{"class":208},[67,79583,79584],{"class":73},"px\n",[67,79586,79587],{"class":69,"line":10643},[67,79588,2909],{"class":77},[67,79590,79591],{"class":69,"line":17321},[67,79592,177],{"emptyLinePlaceholder":176},[67,79594,79595,79597,79599],{"class":69,"line":17327},[67,79596,79533],{"class":112},[67,79598,2122],{"class":51837},[67,79600,16289],{"class":77},[67,79602,79603,79605,79607,79609,79611,79613,79615],{"class":69,"line":17350},[67,79604,55232],{"class":208},[67,79606,51974],{"class":77},[67,79608,1303],{"class":208},[67,79610,52029],{"class":73},[67,79612,9669],{"class":208},[67,79614,52029],{"class":73},[67,79616,2017],{"class":77},[67,79618,79619,79621,79623,79625],{"class":69,"line":17356},[67,79620,62258],{"class":208},[67,79622,51974],{"class":77},[67,79624,62355],{"class":208},[67,79626,2017],{"class":77},[67,79628,79629,79631,79633,79635],{"class":69,"line":17379},[67,79630,57953],{"class":208},[67,79632,51974],{"class":77},[67,79634,79437],{"class":208},[67,79636,2017],{"class":77},[67,79638,79639,79641,79643,79645],{"class":69,"line":17393},[67,79640,64507],{"class":208},[67,79642,51974],{"class":77},[67,79644,55274],{"class":208},[67,79646,2017],{"class":77},[67,79648,79649,79651,79653,79655,79657],{"class":69,"line":17413},[67,79650,62287],{"class":208},[67,79652,51974],{"class":77},[67,79654,1556],{"class":208},[67,79656,52029],{"class":73},[67,79658,2017],{"class":77},[67,79660,79661],{"class":69,"line":17419},[67,79662,2909],{"class":77},[67,79664,79665],{"class":69,"line":17430},[67,79666,177],{"emptyLinePlaceholder":176},[67,79668,79669,79671,79673,79675],{"class":69,"line":17453},[67,79670,79533],{"class":112},[67,79672,2122],{"class":51837},[67,79674,62437],{"class":112},[67,79676,16289],{"class":77},[67,79678,79679,79681,79683,79686],{"class":69,"line":17475},[67,79680,55421],{"class":208},[67,79682,51974],{"class":77},[67,79684,79685],{"class":208},"#05943c",[67,79687,2017],{"class":77},[67,79689,79690,79692,79694,79696],{"class":69,"line":17480},[67,79691,57953],{"class":208},[67,79693,51974],{"class":77},[67,79695,61379],{"class":208},[67,79697,2017],{"class":77},[67,79699,79700],{"class":69,"line":17486},[67,79701,2909],{"class":77},[67,79703,79704,79706,79708],{"class":69,"line":17500},[67,79705,52954],{"class":77},[67,79707,779],{"class":51837},[67,79709,51844],{"class":77},[67,79711,79712,79714,79716],{"class":69,"line":17513},[67,79713,52322],{"class":77},[67,79715,51871],{"class":51837},[67,79717,51844],{"class":77},[67,79719,79720],{"class":69,"line":17518},[67,79721,177],{"emptyLinePlaceholder":176},[67,79723,79724,79726,79728],{"class":69,"line":17532},[67,79725,1766],{"class":77},[67,79727,52337],{"class":51837},[67,79729,51844],{"class":77},[67,79731,79732,79734,79736,79738,79740,79743],{"class":69,"line":17537},[67,79733,52681],{"class":77},[67,79735,52148],{"class":51837},[67,79737,54023],{"class":112},[67,79739,909],{"class":77},[67,79741,79742],{"class":84},"\"filter\"",[67,79744,51844],{"class":77},[67,79746,79747,79749,79751,79753,79755,79757,79760,79762,79764,79767,79769],{"class":69,"line":17543},[67,79748,51878],{"class":77},[67,79750,28],{"class":51837},[67,79752,61594],{"class":112},[67,79754,909],{"class":77},[67,79756,61599],{"class":84},[67,79758,79759],{"class":112}," data-index",[67,79761,909],{"class":77},[67,79763,4398],{"class":84},[67,79765,79766],{"class":77},">0-100元\u003C\u002F",[67,79768,28],{"class":51837},[67,79770,51844],{"class":77},[67,79772,79773,79775,79777,79779,79781,79783,79785,79787,79789,79792,79794],{"class":69,"line":17548},[67,79774,51878],{"class":77},[67,79776,28],{"class":51837},[67,79778,61594],{"class":112},[67,79780,909],{"class":77},[67,79782,61599],{"class":84},[67,79784,79759],{"class":112},[67,79786,909],{"class":77},[67,79788,4421],{"class":84},[67,79790,79791],{"class":77},">100-300元\u003C\u002F",[67,79793,28],{"class":51837},[67,79795,51844],{"class":77},[67,79797,79798,79800,79802,79804,79806,79808,79810,79812,79814,79817,79819],{"class":69,"line":17562},[67,79799,51878],{"class":77},[67,79801,28],{"class":51837},[67,79803,61594],{"class":112},[67,79805,909],{"class":77},[67,79807,61599],{"class":84},[67,79809,79759],{"class":112},[67,79811,909],{"class":77},[67,79813,4434],{"class":84},[67,79815,79816],{"class":77},">300元以上\u003C\u002F",[67,79818,28],{"class":51837},[67,79820,51844],{"class":77},[67,79822,79823,79825,79827,79829,79831,79833,79836,79838],{"class":69,"line":17567},[67,79824,51878],{"class":77},[67,79826,28],{"class":51837},[67,79828,61594],{"class":112},[67,79830,909],{"class":77},[67,79832,61599],{"class":84},[67,79834,79835],{"class":77},">全部区间\u003C\u002F",[67,79837,28],{"class":51837},[67,79839,51844],{"class":77},[67,79841,79842,79844,79846],{"class":69,"line":17572},[67,79843,52954],{"class":77},[67,79845,52148],{"class":51837},[67,79847,51844],{"class":77},[67,79849,79850,79852,79854,79856,79858,79860],{"class":69,"line":17586},[67,79851,52681],{"class":77},[67,79853,52148],{"class":51837},[67,79855,54023],{"class":112},[67,79857,909],{"class":77},[67,79859,63145],{"class":84},[67,79861,51844],{"class":77},[67,79863,79864],{"class":69,"line":17598},[67,79865,79866],{"class":202},"    \u003C!-- \u003Cdiv class=\"item\">\n",[67,79868,79869],{"class":69,"line":17603},[67,79870,79871],{"class":202},"      \u003Cimg src=\"\" alt=\"\">\n",[67,79873,79874],{"class":69,"line":17616},[67,79875,79876],{"class":202},"      \u003Cp class=\"name\">\u003C\u002Fp>\n",[67,79878,79879],{"class":69,"line":17621},[67,79880,79881],{"class":202},"      \u003Cp class=\"price\">\u003C\u002Fp>\n",[67,79883,79884],{"class":69,"line":17626},[67,79885,79886],{"class":202},"    \u003C\u002Fdiv> -->\n",[67,79888,79889,79891,79893],{"class":69,"line":17631},[67,79890,52954],{"class":77},[67,79892,52148],{"class":51837},[67,79894,51844],{"class":77},[67,79896,79897,79899,79901],{"class":69,"line":17644},[67,79898,52681],{"class":77},[67,79900,52350],{"class":51837},[67,79902,51844],{"class":77},[67,79904,79905],{"class":69,"line":17649},[67,79906,79907],{"class":202},"    \u002F\u002F 2. 初始化数据\n",[67,79909,79910,79912,79915,79917],{"class":69,"line":33170},[67,79911,11939],{"class":73},[67,79913,79914],{"class":208}," goodsList",[67,79916,14282],{"class":73},[67,79918,55984],{"class":77},[67,79920,79921],{"class":69,"line":33176},[67,79922,79923],{"class":77},"      {\n",[67,79925,79926,79929,79932],{"class":69,"line":33182},[67,79927,79928],{"class":77},"        id: ",[67,79930,79931],{"class":84},"'4001172'",[67,79933,32003],{"class":77},[67,79935,79936,79939,79942],{"class":69,"line":33188},[67,79937,79938],{"class":77},"        name: ",[67,79940,79941],{"class":84},"'称心如意手摇咖啡磨豆机咖啡豆研磨机'",[67,79943,32003],{"class":77},[67,79945,79946,79949,79952],{"class":69,"line":33194},[67,79947,79948],{"class":77},"        price: ",[67,79950,79951],{"class":84},"'289.00'",[67,79953,32003],{"class":77},[67,79955,79956,79959,79962],{"class":69,"line":33205},[67,79957,79958],{"class":77},"        picture: ",[67,79960,79961],{"class":84},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F84a59ff9c58a77032564e61f716846d6.jpg'",[67,79963,32003],{"class":77},[67,79965,79966],{"class":69,"line":33211},[67,79967,78429],{"class":77},[67,79969,79970],{"class":69,"line":33231},[67,79971,79923],{"class":77},[67,79973,79974,79976,79979],{"class":69,"line":33237},[67,79975,79928],{"class":77},[67,79977,79978],{"class":84},"'4001594'",[67,79980,32003],{"class":77},[67,79982,79983,79985,79988],{"class":69,"line":33248},[67,79984,79938],{"class":77},[67,79986,79987],{"class":84},"'日式黑陶功夫茶组双侧把茶具礼盒装'",[67,79989,32003],{"class":77},[67,79991,79992,79994,79997],{"class":69,"line":33254},[67,79993,79948],{"class":77},[67,79995,79996],{"class":84},"'288.00'",[67,79998,32003],{"class":77},[67,80000,80001,80003,80006],{"class":69,"line":33260},[67,80002,79958],{"class":77},[67,80004,80005],{"class":84},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F3346b7b92f9563c7a7e24c7ead883f18.jpg'",[67,80007,32003],{"class":77},[67,80009,80010],{"class":69,"line":33266},[67,80011,78429],{"class":77},[67,80013,80014],{"class":69,"line":33272},[67,80015,79923],{"class":77},[67,80017,80018,80020,80023],{"class":69,"line":33278},[67,80019,79928],{"class":77},[67,80021,80022],{"class":84},"'4001009'",[67,80024,32003],{"class":77},[67,80026,80027,80029,80032],{"class":69,"line":33284},[67,80028,79938],{"class":77},[67,80030,80031],{"class":84},"'竹制干泡茶盘正方形沥水茶台品茶盘'",[67,80033,32003],{"class":77},[67,80035,80036,80038,80041],{"class":69,"line":33290},[67,80037,79948],{"class":77},[67,80039,80040],{"class":84},"'109.00'",[67,80042,32003],{"class":77},[67,80044,80045,80047,80050],{"class":69,"line":33310},[67,80046,79958],{"class":77},[67,80048,80049],{"class":84},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F2d942d6bc94f1e230763e1a5a3b379e1.png'",[67,80051,32003],{"class":77},[67,80053,80054],{"class":69,"line":33316},[67,80055,78429],{"class":77},[67,80057,80058],{"class":69,"line":33332},[67,80059,79923],{"class":77},[67,80061,80062,80064,80067],{"class":69,"line":33338},[67,80063,79928],{"class":77},[67,80065,80066],{"class":84},"'4001874'",[67,80068,32003],{"class":77},[67,80070,80071,80073,80076],{"class":69,"line":33352},[67,80072,79938],{"class":77},[67,80074,80075],{"class":84},"'古法温酒汝瓷酒具套装白酒杯莲花温酒器'",[67,80077,32003],{"class":77},[67,80079,80080,80082,80085],{"class":69,"line":33358},[67,80081,79948],{"class":77},[67,80083,80084],{"class":84},"'488.00'",[67,80086,32003],{"class":77},[67,80088,80089,80091,80094],{"class":69,"line":33373},[67,80090,79958],{"class":77},[67,80092,80093],{"class":84},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F44e51622800e4fceb6bee8e616da85fd.png'",[67,80095,32003],{"class":77},[67,80097,80098],{"class":69,"line":33379},[67,80099,78429],{"class":77},[67,80101,80102],{"class":69,"line":33388},[67,80103,79923],{"class":77},[67,80105,80106,80108,80111],{"class":69,"line":33394},[67,80107,79928],{"class":77},[67,80109,80110],{"class":84},"'4001649'",[67,80112,32003],{"class":77},[67,80114,80115,80117,80120],{"class":69,"line":33403},[67,80116,79938],{"class":77},[67,80118,80119],{"class":84},"'大师监制龙泉青瓷茶叶罐'",[67,80121,32003],{"class":77},[67,80123,80124,80126,80129],{"class":69,"line":33409},[67,80125,79948],{"class":77},[67,80127,80128],{"class":84},"'139.00'",[67,80130,32003],{"class":77},[67,80132,80133,80135,80138],{"class":69,"line":33415},[67,80134,79958],{"class":77},[67,80136,80137],{"class":84},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F4356c9fc150753775fe56b465314f1eb.png'",[67,80139,32003],{"class":77},[67,80141,80142],{"class":69,"line":33424},[67,80143,78429],{"class":77},[67,80145,80146],{"class":69,"line":33430},[67,80147,79923],{"class":77},[67,80149,80150,80152,80155],{"class":69,"line":33441},[67,80151,79928],{"class":77},[67,80153,80154],{"class":84},"'3997185'",[67,80156,32003],{"class":77},[67,80158,80159,80161,80164],{"class":69,"line":33447},[67,80160,79938],{"class":77},[67,80162,80163],{"class":84},"'与众不同的口感汝瓷白酒杯套组1壶4杯'",[67,80165,32003],{"class":77},[67,80167,80168,80170,80173],{"class":69,"line":33466},[67,80169,79948],{"class":77},[67,80171,80172],{"class":84},"'108.00'",[67,80174,32003],{"class":77},[67,80176,80177,80179,80182],{"class":69,"line":33472},[67,80178,79958],{"class":77},[67,80180,80181],{"class":84},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8e21c794dfd3a4e8573273ddae50bce2.jpg'",[67,80183,32003],{"class":77},[67,80185,80186],{"class":69,"line":33483},[67,80187,78429],{"class":77},[67,80189,80190],{"class":69,"line":33489},[67,80191,79923],{"class":77},[67,80193,80194,80196,80199],{"class":69,"line":33509},[67,80195,79928],{"class":77},[67,80197,80198],{"class":84},"'3997403'",[67,80200,32003],{"class":77},[67,80202,80203,80205,80208],{"class":69,"line":33525},[67,80204,79938],{"class":77},[67,80206,80207],{"class":84},"'手工吹制更厚实白酒杯壶套装6壶6杯'",[67,80209,32003],{"class":77},[67,80211,80212,80214,80217],{"class":69,"line":33531},[67,80213,79948],{"class":77},[67,80215,80216],{"class":84},"'100.00'",[67,80218,32003],{"class":77},[67,80220,80221,80223,80226],{"class":69,"line":33545},[67,80222,79958],{"class":77},[67,80224,80225],{"class":84},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002Faf2371a65f60bce152a61fc22745ff3f.jpg'",[67,80227,32003],{"class":77},[67,80229,80230],{"class":69,"line":33551},[67,80231,78429],{"class":77},[67,80233,80234],{"class":69,"line":33557},[67,80235,79923],{"class":77},[67,80237,80238,80240,80243],{"class":69,"line":33568},[67,80239,79928],{"class":77},[67,80241,80242],{"class":84},"'3998274'",[67,80244,32003],{"class":77},[67,80246,80247,80249,80252],{"class":69,"line":33574},[67,80248,79938],{"class":77},[67,80250,80251],{"class":84},"'德国百年工艺高端水晶玻璃红酒杯2支装'",[67,80253,32003],{"class":77},[67,80255,80256,80258,80260],{"class":69,"line":33580},[67,80257,79948],{"class":77},[67,80259,80128],{"class":84},[67,80261,32003],{"class":77},[67,80263,80264,80266,80269],{"class":69,"line":33590},[67,80265,79958],{"class":77},[67,80267,80268],{"class":84},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8896b897b3ec6639bbd1134d66b9715c.jpg'",[67,80270,32003],{"class":77},[67,80272,80273],{"class":69,"line":33596},[67,80274,78429],{"class":77},[67,80276,80277],{"class":69,"line":33607},[67,80278,53646],{"class":77},[67,80280,80281],{"class":69,"line":33613},[67,80282,177],{"emptyLinePlaceholder":176},[67,80284,80285],{"class":69,"line":33623},[67,80286,80287],{"class":202},"    \u002F\u002F 1.渲染函数\n",[67,80289,80290,80292,80294,80296,80298],{"class":69,"line":33628},[67,80291,70621],{"class":73},[67,80293,70624],{"class":112},[67,80295,864],{"class":77},[67,80297,4600],{"class":5935},[67,80299,13160],{"class":77},[67,80301,80302],{"class":69,"line":33634},[67,80303,80304],{"class":202},"      \u002F\u002F 声明空字符串\n",[67,80306,80307,80310,80313,80315],{"class":69,"line":33683},[67,80308,80309],{"class":73},"      let",[67,80311,80312],{"class":77}," str ",[67,80314,909],{"class":73},[67,80316,70641],{"class":84},[67,80318,80319],{"class":69,"line":33730},[67,80320,70646],{"class":202},[67,80322,80323,80325,80328,80330,80333,80336],{"class":69,"line":33735},[67,80324,58544],{"class":77},[67,80326,80327],{"class":112},"forEach",[67,80329,864],{"class":77},[67,80331,80332],{"class":5935},"item",[67,80334,80335],{"class":73}," =>",[67,80337,16289],{"class":77},[67,80339,80340,80342,80345,80348,80350,80353,80355,80358,80361,80363],{"class":69,"line":33741},[67,80341,61807],{"class":73},[67,80343,80344],{"class":77}," { ",[67,80346,80347],{"class":208},"name",[67,80349,13153],{"class":77},[67,80351,80352],{"class":208},"price",[67,80354,13153],{"class":77},[67,80356,80357],{"class":208},"picture",[67,80359,80360],{"class":77}," } ",[67,80362,909],{"class":73},[67,80364,80365],{"class":77}," item\n",[67,80367,80368,80371,80373],{"class":69,"line":33760},[67,80369,80370],{"class":77},"        str ",[67,80372,10196],{"class":73},[67,80374,70705],{"class":84},[67,80376,80377],{"class":69,"line":33766},[67,80378,80379],{"class":84},"          \u003Cdiv class=\"item\">\n",[67,80381,80382,80385,80387],{"class":69,"line":33786},[67,80383,80384],{"class":84},"            \u003Cimg src=\"${",[67,80386,80357],{"class":77},[67,80388,80389],{"class":84},"}\" alt=\"\">\n",[67,80391,80392,80395,80397],{"class":69,"line":33792},[67,80393,80394],{"class":84},"            \u003Cp class=\"name\">${",[67,80396,80347],{"class":77},[67,80398,80399],{"class":84},"}\u003C\u002Fp>\n",[67,80401,80402,80405,80407],{"class":69,"line":33798},[67,80403,80404],{"class":84},"            \u003Cp class=\"price\">${",[67,80406,80352],{"class":77},[67,80408,80399],{"class":84},[67,80410,80411],{"class":69,"line":33808},[67,80412,80413],{"class":84},"          \u003C\u002Fdiv>\n",[67,80415,80416],{"class":69,"line":33813},[67,80417,80418],{"class":84},"        `\n",[67,80420,80421],{"class":69,"line":33819},[67,80422,65352],{"class":77},[67,80424,80425],{"class":69,"line":33835},[67,80426,80427],{"class":202},"      \u002F\u002F 追加给List\n",[67,80429,80430,80432,80434,80436,80439,80441,80443],{"class":69,"line":33880},[67,80431,56308],{"class":77},[67,80433,54936],{"class":112},[67,80435,864],{"class":77},[67,80437,80438],{"class":84},"'.list'",[67,80440,74786],{"class":77},[67,80442,909],{"class":73},[67,80444,74522],{"class":77},[67,80446,80447],{"class":69,"line":33886},[67,80448,2909],{"class":77},[67,80450,80451],{"class":69,"line":33892},[67,80452,80453],{"class":202},"    \u002F\u002F 页面一打开就需要渲染\n",[67,80455,80456,80459],{"class":69,"line":33898},[67,80457,80458],{"class":112},"    render",[67,80460,80461],{"class":77},"(goodsList)\n",[67,80463,80464],{"class":69,"line":33909},[67,80465,80466],{"class":202},"    \u002F\u002F 2.过滤筛选\n",[67,80468,80469,80471,80473,80475,80478,80480,80482,80484,80486,80488,80490,80492],{"class":69,"line":33915},[67,80470,52944],{"class":77},[67,80472,54936],{"class":112},[67,80474,864],{"class":77},[67,80476,80477],{"class":84},"'.filter'",[67,80479,31363],{"class":77},[67,80481,58350],{"class":112},[67,80483,864],{"class":77},[67,80485,58355],{"class":84},[67,80487,13153],{"class":77},[67,80489,936],{"class":5935},[67,80491,80335],{"class":73},[67,80493,16289],{"class":77},[67,80495,80496],{"class":69,"line":33921},[67,80497,80498],{"class":202},"      \u002F\u002F 我们需要根据自定属性值来判断点击的哪个小盒子a,即需要获取e.target.dataset.index\n",[67,80500,80501,80503,80505,80508,80510,80512,80514,80516],{"class":69,"line":33927},[67,80502,58765],{"class":73},[67,80504,80344],{"class":77},[67,80506,80507],{"class":208},"tagName",[67,80509,13153],{"class":77},[67,80511,32074],{"class":208},[67,80513,80360],{"class":77},[67,80515,909],{"class":73},[67,80517,80518],{"class":77}," e.target\n",[67,80520,80521],{"class":69,"line":33945},[67,80522,80523],{"class":202},"      \u002F\u002F 判断\n",[67,80525,80526,80528,80530,80532,80534],{"class":69,"line":33959},[67,80527,55017],{"class":73},[67,80529,67571],{"class":77},[67,80531,55023],{"class":73},[67,80533,68793],{"class":84},[67,80535,13160],{"class":77},[67,80537,80538],{"class":69,"line":33968},[67,80539,80540],{"class":202},"        \u002F\u002F console.log(11)\n",[67,80542,80543],{"class":69,"line":33977},[67,80544,80545],{"class":202},"        \u002F\u002F 创建用于接收新对象的数组，这个新数组直接覆盖掉它就行，或者这边let arr=[]也可以\n",[67,80547,80548],{"class":69,"line":33986},[67,80549,80550],{"class":202},"        \u002F\u002F 这里就给goodslist就行，因为如果下边的if不执行的话，我点击全部区间就会生效，因为渲染了个空数组\n",[67,80552,80553,80555,80557,80559],{"class":69,"line":33995},[67,80554,52367],{"class":73},[67,80556,52370],{"class":77},[67,80558,909],{"class":73},[67,80560,80561],{"class":77}," goodsList\n",[67,80563,80564,80566,80569,80571,80574],{"class":69,"line":34001},[67,80565,3218],{"class":73},[67,80567,80568],{"class":77}," (dataset.index ",[67,80570,55023],{"class":73},[67,80572,80573],{"class":84}," '1'",[67,80575,13160],{"class":77},[67,80577,80578,80581,80583,80586,80589,80591,80593,80595,80598,80600,80602,80605,80607,80609,80611],{"class":69,"line":34007},[67,80579,80580],{"class":77},"          arr ",[67,80582,909],{"class":73},[67,80584,80585],{"class":77}," goodsList.",[67,80587,80588],{"class":112},"filter",[67,80590,864],{"class":77},[67,80592,80332],{"class":5935},[67,80594,80335],{"class":73},[67,80596,80597],{"class":77}," item.price ",[67,80599,2433],{"class":73},[67,80601,4813],{"class":208},[67,80603,80604],{"class":73}," &&",[67,80606,80597],{"class":77},[67,80608,2311],{"class":73},[67,80610,6473],{"class":208},[67,80612,870],{"class":77},[67,80614,80615,80618,80620,80622,80624,80626,80629],{"class":69,"line":34015},[67,80616,80617],{"class":77},"        } ",[67,80619,2424],{"class":73},[67,80621,2427],{"class":73},[67,80623,80568],{"class":77},[67,80625,55023],{"class":73},[67,80627,80628],{"class":84}," '2'",[67,80630,13160],{"class":77},[67,80632,80633,80635,80637,80639,80641,80643,80645,80647,80649,80651,80653,80655,80657,80659,80662],{"class":69,"line":34020},[67,80634,80580],{"class":77},[67,80636,909],{"class":73},[67,80638,80585],{"class":77},[67,80640,80588],{"class":112},[67,80642,864],{"class":77},[67,80644,80332],{"class":5935},[67,80646,80335],{"class":73},[67,80648,80597],{"class":77},[67,80650,2433],{"class":73},[67,80652,6473],{"class":208},[67,80654,80604],{"class":73},[67,80656,80597],{"class":77},[67,80658,2311],{"class":73},[67,80660,80661],{"class":208}," 300",[67,80663,870],{"class":77},[67,80665,80666,80668,80670,80672,80674,80676,80679],{"class":69,"line":34026},[67,80667,80617],{"class":77},[67,80669,2424],{"class":73},[67,80671,2427],{"class":73},[67,80673,80568],{"class":77},[67,80675,55023],{"class":73},[67,80677,80678],{"class":84}," '3'",[67,80680,13160],{"class":77},[67,80682,80683,80685,80687,80689,80691,80693,80695,80697,80699,80701,80703],{"class":69,"line":34037},[67,80684,80580],{"class":77},[67,80686,909],{"class":73},[67,80688,80585],{"class":77},[67,80690,80588],{"class":112},[67,80692,864],{"class":77},[67,80694,80332],{"class":5935},[67,80696,80335],{"class":73},[67,80698,80597],{"class":77},[67,80700,2433],{"class":73},[67,80702,80661],{"class":208},[67,80704,870],{"class":77},[67,80706,80707],{"class":69,"line":34043},[67,80708,3250],{"class":77},[67,80710,80711],{"class":69,"line":34063},[67,80712,80713],{"class":202},"        \u002F\u002F 渲染函数\n",[67,80715,80716,80718],{"class":69,"line":34069},[67,80717,70945],{"class":112},[67,80719,52949],{"class":77},[67,80721,80722],{"class":69,"line":34075},[67,80723,52935],{"class":77},[67,80725,80726],{"class":69,"line":34081},[67,80727,177],{"emptyLinePlaceholder":176},[67,80729,80730],{"class":69,"line":34098},[67,80731,33998],{"class":77},[67,80733,80734,80736,80738],{"class":69,"line":34104},[67,80735,52954],{"class":77},[67,80737,52350],{"class":51837},[67,80739,51844],{"class":77},[67,80741,80742,80744,80746],{"class":69,"line":34110},[67,80743,52322],{"class":77},[67,80745,52337],{"class":51837},[67,80747,51844],{"class":77},[67,80749,80750],{"class":69,"line":34116},[67,80751,177],{"emptyLinePlaceholder":176},[67,80753,80754,80756,80758],{"class":69,"line":34122},[67,80755,52322],{"class":77},[67,80757,51172],{"class":51837},[67,80759,51844],{"class":77},[803,80761,80763],{"id":80762},"_410-深入了解对象","4.10 深入了解对象",[14,80765,80767],{"id":80766},"_4101-创建对象","4.10.1 创建对象",[19,80769,80770],{},[725,80771],{"alt":62,"src":80772},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-253.png",[19,80774,80775],{},"这个new Object方法创建对象也是一种函数的形式进行创建的，但是这个写法是写死的，只能这样写，它是系统给我们的创造函数",[14,80777,80779],{"id":80778},"_4102-构造函数","4.10.2 构造函数",[19,80781,80782,80785],{},[336,80783,80784],{},"构造函数 ："," 是一种特殊的函数，主要用来初始化对象",[19,80787,80788,80791],{},[336,80789,80790],{},"使用场景："," 常规的 {...} 语法允许创建一个对象。比如我们创建了佩奇的对象，继续创建乔治的对象还需要重新写一 遍，此时可以通过构造函数来快速创建多个类似的对象",[57,80793,80795],{"className":51170,"code":80794,"language":51172,"meta":62,"style":62},"\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",[64,80796,80797,80805,80810,80831,80844,80856,80868,80872,80877,80904,80909,80936],{"__ignoreMap":62},[67,80798,80799,80801,80803],{"class":69,"line":70},[67,80800,1766],{"class":77},[67,80802,52350],{"class":51837},[67,80804,51844],{"class":77},[67,80806,80807],{"class":69,"line":143},[67,80808,80809],{"class":202},"\u002F\u002F例：\n",[67,80811,80812,80814,80817,80819,80821,80823,80825,80827,80829],{"class":69,"line":149},[67,80813,54986],{"class":73},[67,80815,80816],{"class":112}," Pig",[67,80818,864],{"class":77},[67,80820,80347],{"class":5935},[67,80822,1236],{"class":77},[67,80824,70758],{"class":5935},[67,80826,1236],{"class":77},[67,80828,70775],{"class":5935},[67,80830,13160],{"class":77},[67,80832,80833,80836,80839,80841],{"class":69,"line":155},[67,80834,80835],{"class":208},"    this",[67,80837,80838],{"class":77},".name",[67,80840,909],{"class":73},[67,80842,80843],{"class":77},"name\n",[67,80845,80846,80848,80851,80853],{"class":69,"line":161},[67,80847,80835],{"class":208},[67,80849,80850],{"class":77},".age",[67,80852,909],{"class":73},[67,80854,80855],{"class":77},"age\n",[67,80857,80858,80860,80863,80865],{"class":69,"line":167},[67,80859,80835],{"class":208},[67,80861,80862],{"class":77},".gender",[67,80864,909],{"class":73},[67,80866,80867],{"class":77},"gender    \n",[67,80869,80870],{"class":69,"line":173},[67,80871,2288],{"class":77},[67,80873,80874],{"class":69,"line":180},[67,80875,80876],{"class":202},"\u002F\u002F创建佩奇对象\n",[67,80878,80879,80881,80884,80886,80888,80890,80893,80895,80897,80899,80902],{"class":69,"line":186},[67,80880,7511],{"class":73},[67,80882,80883],{"class":208}," Peppa",[67,80885,12435],{"class":73},[67,80887,80816],{"class":112},[67,80889,864],{"class":77},[67,80891,80892],{"class":84},"'佩奇'",[67,80894,1236],{"class":77},[67,80896,1202],{"class":208},[67,80898,1236],{"class":77},[67,80900,80901],{"class":84},"'女'",[67,80903,870],{"class":77},[67,80905,80906],{"class":69,"line":444},[67,80907,80908],{"class":202},"\u002F\u002F创建乔治对象\n",[67,80910,80911,80913,80916,80918,80920,80922,80925,80927,80929,80931,80934],{"class":69,"line":2335},[67,80912,7511],{"class":73},[67,80914,80915],{"class":208}," George",[67,80917,12435],{"class":73},[67,80919,80816],{"class":112},[67,80921,864],{"class":77},[67,80923,80924],{"class":84},"'乔治'",[67,80926,1236],{"class":77},[67,80928,933],{"class":208},[67,80930,1236],{"class":77},[67,80932,80933],{"class":84},"'男'",[67,80935,870],{"class":77},[67,80937,80938,80940,80942],{"class":69,"line":2340},[67,80939,52322],{"class":77},[67,80941,52350],{"class":51837},[67,80943,51844],{"class":77},[19,80945,80946],{},[725,80947],{"alt":62,"src":80948},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-254.png",[19,80950,80951],{},[725,80952],{"alt":62,"src":80953},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-255.png",[19,80955,80956],{},"这里非常重要的点：这里是构造函数来初始化对象， 过一会回来调用Pig，一会要new它，所以this指向的是对象，不是window，this指向的就是对象",[19,80958,80959],{},"无new就是纯函数了，有new说明这个函数是专门用于创建对象的",[19,80961,80962],{},"this.uname=uname 这里的第一uname是属性，第二个uname是形参",[19,80964,80965],{},"在利用对象字面量创建对象和new Object创建对象中都是用的是：不是=",[19,80967,80968],{},"这里用等号是因为：对象.属性=值",[19,80970,80971],{},"①利用对象字面量创建对象",[19,80973,80974],{},"const o={",[19,80976,80977],{},"name:'pink'",[19,80979,80980],{},"} ②利用new Object创建对象",[19,80982,80983],{},"const o=new Object({name:'pink'})",[19,80985,80986],{},"构造函数内部不需要写return，构造函数自动返回创建的新的对象",[19,80988,80989],{},"构造函数创建对象的执行过程：",[19,80991,80992],{},[725,80993],{"alt":62,"src":80994},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-256.png",[14,80996,80998],{"id":80997},"_4103-实例成员","4.10.3 实例成员",[19,81000,81001],{},"通过构造函数创建的对象称为实例对象，实例对象中的属性和方法称为实例成员",[815,81003,81004,81007,81010],{},[818,81005,81006],{},"实例对象的属性和方法即为实例成员",[818,81008,81009],{},"为构造函数传入参数，动态创建结构相同但值不同的对象",[818,81011,81012],{},"构造函数创建的实例对象彼此独立互不影响",[14,81014,81016],{"id":81015},"_4104-静态成员","4.10.4 静态成员",[19,81018,81019],{},[725,81020],{"alt":62,"src":81021},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-257.png",[19,81023,81024],{},"静态成员有Date.now() Math.PI Math.random()",[19,81026,81027],{},"构造函数理解为一个特殊的对象，给这个对象添加的属性和方法就是静态成员",[19,81029,81030],{},"对象的属性和方法只能该对象使用，该对象方法中的this指向的就是该对象（构造函数）",[19,81032,81033],{},"function Pig(name) n {",[19,81035,81036],{},"this.name=name",[19,81038,1802],{},[19,81040,81041],{},"Pig.eyes=2",[19,81043,81044],{},"Pig.sayHai=function () { console.log(this) }",[19,81046,81047],{},"Pig.sayHai() \u002F\u002F指向就是构造函数",[19,81049,81050],{},"console.log(Pig.eyes) \u002F\u002F2",[19,81052,12050],{},[815,81054,81055,81058,81061,81064,81067],{},[818,81056,81057],{},"实例对象的属性和方法即为实例成员；实例对象相互独立，实例成员当前实例对象使用",[818,81059,81060],{},"静态成员是写在构造函数身上的，构造函数的属性和方法被称为静态成员；静态成员只能函数访问",[818,81062,81063],{},"构造函数内部的属性不是静态成员，内部是通过this.属性名=值，它是给实例对象创建的",[818,81065,81066],{},"构造函数外部创建的，构造函数名.属性名=值 是静态成员",[818,81068,81069],{},"实例对象无法访问静态成员，静态成员只依附在这个构造函数上",[19,81071,81072],{},"自己的理解：构造函数可以认为是一个升级版的函数，它就是一个对象",[14,81074,81076],{"id":81075},"_4105-内置构造函数","4.10.5 内置构造函数",[19,81078,81079],{},"内置构造函数包含：",[19,81081,81082],{},[725,81083],{"alt":62,"src":81084},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-258.png",[19,81086,81087],{},[725,81088],{"alt":62,"src":81089},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-259.png",[19,81091,81092],{},"这些基本数据类型，js对他们进行了包装",[52350,81094,81095],{},"\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",[40,81097,81099],{"id":81098},"_41051-object","4.10.5.1 Object",[19,81101,81102],{},"Object 是内置的构造函数，用于创建普通对象",[19,81104,81105],{},"平时最好还是使用字面量的形式声明对象，而不是使用Object这个这个内置函数",[57,81107,81109],{"className":51170,"code":81108,"language":51172,"meta":62,"style":62},"const user=new Object({name:'小明',age:15})\n",[64,81110,81111],{"__ignoreMap":62},[67,81112,81113],{"class":69,"line":70},[67,81114,81108],{"class":77},[19,81116,81117],{},"三个常用的静态方法：",[23626,81119,81121],{"id":81120},"_410511-objectkeys和objectvalues","4.10.5.1.1 Object.keys和Object.values",[19,81123,81124],{},"它是创建对象那个构造函数里边的静态方法，是一个静态成员，使用的时候是函数名.方法（）",[19,81126,81127],{},[725,81128],{"alt":62,"src":81129},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-260.png",[19,81131,81132],{},[725,81133],{"alt":62,"src":81134},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-261.png",[57,81136,81138],{"className":53604,"code":81137,"language":53606,"meta":62,"style":62},"\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",[64,81139,81140,81148,81156,81161,81166,81171,81176,81181,81186,81194],{"__ignoreMap":62},[67,81141,81142,81144,81146],{"class":69,"line":70},[67,81143,1766],{"class":77},[67,81145,52337],{"class":51837},[67,81147,51844],{"class":77},[67,81149,81150,81152,81154],{"class":69,"line":143},[67,81151,52681],{"class":77},[67,81153,52350],{"class":51837},[67,81155,51844],{"class":77},[67,81157,81158],{"class":69,"line":149},[67,81159,81160],{"class":77},"    const o = { name: 'pink', age: 6 }\n",[67,81162,81163],{"class":69,"line":155},[67,81164,81165],{"class":77},"    \u002F\u002F 获得所有属性名\n",[67,81167,81168],{"class":69,"line":161},[67,81169,81170],{"class":77},"    const arr = Object.keys(o)\n",[67,81172,81173],{"class":69,"line":167},[67,81174,81175],{"class":77},"    console.log(arr)\n",[67,81177,81178],{"class":69,"line":173},[67,81179,81180],{"class":77},"    \u002F\u002F 获得所有属性值\n",[67,81182,81183],{"class":69,"line":180},[67,81184,81185],{"class":77},"    console.log(Object.values(o))\n",[67,81187,81188,81190,81192],{"class":69,"line":186},[67,81189,52954],{"class":77},[67,81191,52350],{"class":51837},[67,81193,51844],{"class":77},[67,81195,81196,81198,81200],{"class":69,"line":444},[67,81197,52322],{"class":77},[67,81199,52337],{"class":51837},[67,81201,51844],{"class":77},[23626,81203,81205],{"id":81204},"_410512-object-assign","4.10.5.1.2 Object. assign",[19,81207,81208],{},"Object.assign(oo,o)",[19,81210,81211],{},"后的东西添加给前 是追加",[19,81213,81214],{},[725,81215],{"alt":62,"src":81216},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-262.png",[19,81218,81219],{},[725,81220],{"alt":62,"src":81221},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-263.png",[57,81223,81225],{"className":53604,"code":81224,"language":53606,"meta":62,"style":62},"\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",[64,81226,81227,81235,81243,81247,81251,81255,81259,81263,81267,81272,81277,81282,81287,81292,81300],{"__ignoreMap":62},[67,81228,81229,81231,81233],{"class":69,"line":70},[67,81230,1766],{"class":77},[67,81232,52337],{"class":51837},[67,81234,51844],{"class":77},[67,81236,81237,81239,81241],{"class":69,"line":143},[67,81238,52681],{"class":77},[67,81240,52350],{"class":51837},[67,81242,51844],{"class":77},[67,81244,81245],{"class":69,"line":149},[67,81246,81160],{"class":77},[67,81248,81249],{"class":69,"line":155},[67,81250,81165],{"class":77},[67,81252,81253],{"class":69,"line":161},[67,81254,81170],{"class":77},[67,81256,81257],{"class":69,"line":167},[67,81258,81175],{"class":77},[67,81260,81261],{"class":69,"line":173},[67,81262,81180],{"class":77},[67,81264,81265],{"class":69,"line":180},[67,81266,81185],{"class":77},[67,81268,81269],{"class":69,"line":186},[67,81270,81271],{"class":77},"    const oo = {}\n",[67,81273,81274],{"class":69,"line":444},[67,81275,81276],{"class":77},"    Object.assign(oo, o)\n",[67,81278,81279],{"class":69,"line":2335},[67,81280,81281],{"class":77},"    console.log(oo)\n",[67,81283,81284],{"class":69,"line":2340},[67,81285,81286],{"class":77},"    Object.assign(o, { gender: '女' })\n",[67,81288,81289],{"class":69,"line":2346},[67,81290,81291],{"class":77},"    console.log(o)\n",[67,81293,81294,81296,81298],{"class":69,"line":2351},[67,81295,52954],{"class":77},[67,81297,52350],{"class":51837},[67,81299,51844],{"class":77},[67,81301,81302,81304,81306],{"class":69,"line":2365},[67,81303,52322],{"class":77},[67,81305,52337],{"class":51837},[67,81307,51844],{"class":77},[19,81309,81310],{},[725,81311],{"alt":62,"src":81312},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-264.png",[40,81314,81316],{"id":81315},"_41052-array","4.10.5.2 Array",[19,81318,81319],{},"Array 是内置的构造函数，用于创建数组",[19,81321,81322],{},"这个也是平时最好使用字面量的方式创建数组，而不是使用Array构造函数创建",[57,81324,81326],{"className":51170,"code":81325,"language":51172,"meta":62,"style":62},"const arr=new Array(3,5)\nconsole.log(arr)  \u002F\u002F[3,5]\n",[64,81327,81328,81333],{"__ignoreMap":62},[67,81329,81330],{"class":69,"line":70},[67,81331,81332],{"class":77},"const arr=new Array(3,5)\n",[67,81334,81335],{"class":69,"line":143},[67,81336,81337],{"class":77},"console.log(arr)  \u002F\u002F[3,5]\n",[19,81339,81340],{},"Array的实例方法，这个方法是实例成员",[19,81342,81343],{},[725,81344],{"alt":62,"src":81345},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-265.png",[23626,81347,81349],{"id":81348},"_410521-reduce","4.10.5.2.1 reduce",[19,81351,81352],{},[725,81353],{"alt":62,"src":81354},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-266.png",[57,81356,81358],{"className":53604,"code":81357,"language":53606,"meta":62,"style":62},"\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",[64,81359,81360,81368,81376,81381,81386,81391,81396,81400,81405,81410,81415,81419,81424,81429,81433,81438,81443,81448,81456],{"__ignoreMap":62},[67,81361,81362,81364,81366],{"class":69,"line":70},[67,81363,1766],{"class":77},[67,81365,52337],{"class":51837},[67,81367,51844],{"class":77},[67,81369,81370,81372,81374],{"class":69,"line":143},[67,81371,52681],{"class":77},[67,81373,52350],{"class":51837},[67,81375,51844],{"class":77},[67,81377,81378],{"class":69,"line":149},[67,81379,81380],{"class":77},"    const arr = [1, 5, 8]\n",[67,81382,81383],{"class":69,"line":155},[67,81384,81385],{"class":77},"    \u002F\u002F 1.没有初始值\n",[67,81387,81388],{"class":69,"line":161},[67,81389,81390],{"class":77},"    const total = arr.reduce(function (prev, current) {\n",[67,81392,81393],{"class":69,"line":167},[67,81394,81395],{"class":77},"      return prev + current\n",[67,81397,81398],{"class":69,"line":173},[67,81399,33998],{"class":77},[67,81401,81402],{"class":69,"line":180},[67,81403,81404],{"class":77},"    console.log(total)   \u002F\u002F14\n",[67,81406,81407],{"class":69,"line":186},[67,81408,81409],{"class":77},"    \u002F\u002F 2.有初始值\n",[67,81411,81412],{"class":69,"line":444},[67,81413,81414],{"class":77},"    const total1 = arr.reduce(function (prev, current) {\n",[67,81416,81417],{"class":69,"line":2335},[67,81418,81395],{"class":77},[67,81420,81421],{"class":69,"line":2340},[67,81422,81423],{"class":77},"    }, 10)\n",[67,81425,81426],{"class":69,"line":2346},[67,81427,81428],{"class":77},"    console.log(total1)  \u002F\u002F14+10=24 最后结果为24\n",[67,81430,81431],{"class":69,"line":2351},[67,81432,177],{"emptyLinePlaceholder":176},[67,81434,81435],{"class":69,"line":2365},[67,81436,81437],{"class":77},"    \u002F\u002F 3.箭头函数写法\n",[67,81439,81440],{"class":69,"line":2370},[67,81441,81442],{"class":77},"    const total2 = arr.reduce((prev, current) => prev + current, 10)\n",[67,81444,81445],{"class":69,"line":2376},[67,81446,81447],{"class":77},"    console.log(total2)   \u002F\u002F24\n",[67,81449,81450,81452,81454],{"class":69,"line":2397},[67,81451,52954],{"class":77},[67,81453,52350],{"class":51837},[67,81455,51844],{"class":77},[67,81457,81458,81460,81462],{"class":69,"line":2402},[67,81459,52322],{"class":77},[67,81461,52337],{"class":51837},[67,81463,51844],{"class":77},[19,81465,81466],{},"执行过程：",[815,81468,81469,81472,81475],{},[818,81470,81471],{},"如果没有起始值，则上一次值以数组的第一个数组元素的值",[818,81473,81474],{},"每一次循环，把返回值给作为下一次循环的上一次值",[818,81476,81477],{},"如果有起始值，则起始值作为上一次值",[57,81479,81481],{"className":53604,"code":81480,"language":53606,"meta":62,"style":62},"\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",[64,81482,81483,81491,81499,81503,81507,81511,81515,81519,81523,81528,81533,81538,81543,81548,81552,81556,81560,81564,81568,81572,81577,81581,81586,81590,81595,81600,81604,81608,81612,81620],{"__ignoreMap":62},[67,81484,81485,81487,81489],{"class":69,"line":70},[67,81486,1766],{"class":77},[67,81488,52337],{"class":51837},[67,81490,51844],{"class":77},[67,81492,81493,81495,81497],{"class":69,"line":143},[67,81494,52681],{"class":77},[67,81496,52350],{"class":51837},[67,81498,51844],{"class":77},[67,81500,81501],{"class":69,"line":149},[67,81502,81380],{"class":77},[67,81504,81505],{"class":69,"line":155},[67,81506,81385],{"class":77},[67,81508,81509],{"class":69,"line":161},[67,81510,81390],{"class":77},[67,81512,81513],{"class":69,"line":167},[67,81514,81395],{"class":77},[67,81516,81517],{"class":69,"line":173},[67,81518,33998],{"class":77},[67,81520,81521],{"class":69,"line":180},[67,81522,81404],{"class":77},[67,81524,81525],{"class":69,"line":186},[67,81526,81527],{"class":77},"    \u002F\u002F 上一次值         当前值           返回值（第一次循环）\n",[67,81529,81530],{"class":69,"line":444},[67,81531,81532],{"class":77},"    \u002F\u002F     1              5                    6\n",[67,81534,81535],{"class":69,"line":2335},[67,81536,81537],{"class":77},"    \u002F\u002F 上一次值         当前值           返回值（第二次循环）\n",[67,81539,81540],{"class":69,"line":2340},[67,81541,81542],{"class":77},"    \u002F\u002F     6              8                    14\n",[67,81544,81545],{"class":69,"line":2346},[67,81546,81547],{"class":77},"    \u002F\u002F 无初始值时，循环次数是比数组长度小一的\n",[67,81549,81550],{"class":69,"line":2351},[67,81551,81409],{"class":77},[67,81553,81554],{"class":69,"line":2365},[67,81555,81414],{"class":77},[67,81557,81558],{"class":69,"line":2370},[67,81559,81395],{"class":77},[67,81561,81562],{"class":69,"line":2376},[67,81563,81423],{"class":77},[67,81565,81566],{"class":69,"line":2397},[67,81567,81428],{"class":77},[67,81569,81570],{"class":69,"line":2402},[67,81571,81527],{"class":77},[67,81573,81574],{"class":69,"line":2416},[67,81575,81576],{"class":77},"    \u002F\u002F     10             1                     11\n",[67,81578,81579],{"class":69,"line":2421},[67,81580,81537],{"class":77},[67,81582,81583],{"class":69,"line":2450},[67,81584,81585],{"class":77},"    \u002F\u002F     11             5                    16\n",[67,81587,81588],{"class":69,"line":2455},[67,81589,81537],{"class":77},[67,81591,81592],{"class":69,"line":2472},[67,81593,81594],{"class":77},"    \u002F\u002F     16             8                    24\n",[67,81596,81597],{"class":69,"line":2477},[67,81598,81599],{"class":77},"    \u002F\u002F 有初始值时循环次数就是数组的长度\n",[67,81601,81602],{"class":69,"line":2482},[67,81603,81437],{"class":77},[67,81605,81606],{"class":69,"line":2487},[67,81607,81442],{"class":77},[67,81609,81610],{"class":69,"line":2501},[67,81611,81447],{"class":77},[67,81613,81614,81616,81618],{"class":69,"line":2506},[67,81615,52954],{"class":77},[67,81617,52350],{"class":51837},[67,81619,51844],{"class":77},[67,81621,81622,81624,81626],{"class":69,"line":3298},[67,81623,52322],{"class":77},[67,81625,52337],{"class":51837},[67,81627,51844],{"class":77},[23626,81629,81631],{"id":81630},"_410522-员工涨薪案例","4.10.5.2.2 员工涨薪案例",[19,81633,81634],{},[725,81635],{"alt":62,"src":81636},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-267.png",[57,81638,81640],{"className":53604,"code":81639,"language":53606,"meta":62,"style":62},"\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",[64,81641,81642,81650,81658,81663,81668,81673,81678,81682,81687,81692,81697,81702,81707,81712,81716,81721,81725,81730,81738],{"__ignoreMap":62},[67,81643,81644,81646,81648],{"class":69,"line":70},[67,81645,1766],{"class":77},[67,81647,52337],{"class":51837},[67,81649,51844],{"class":77},[67,81651,81652,81654,81656],{"class":69,"line":143},[67,81653,52681],{"class":77},[67,81655,52350],{"class":51837},[67,81657,51844],{"class":77},[67,81659,81660],{"class":69,"line":149},[67,81661,81662],{"class":77},"    const arr = [\n",[67,81664,81665],{"class":69,"line":155},[67,81666,81667],{"class":77},"      { name: '张三', salary: 10000 },\n",[67,81669,81670],{"class":69,"line":161},[67,81671,81672],{"class":77},"      { name: '李四', salary: 10000 },\n",[67,81674,81675],{"class":69,"line":167},[67,81676,81677],{"class":77},"      { name: '王五', salary: 10000 }\n",[67,81679,81680],{"class":69,"line":173},[67,81681,53646],{"class":77},[67,81683,81684],{"class":69,"line":180},[67,81685,81686],{"class":77},"    \u002F\u002F 如果是个数组对象的话从0开始，起始值设为0，不然从数组第一个开始的话，就是加一个对象了\n",[67,81688,81689],{"class":69,"line":186},[67,81690,81691],{"class":77},"    \u002F\u002F prev是累计值\n",[67,81693,81694],{"class":69,"line":444},[67,81695,81696],{"class":77},"    const total = arr.reduce((prev, current) => prev + current.salary * 1.3, 0)\n",[67,81698,81699],{"class":69,"line":2335},[67,81700,81701],{"class":77},"    console.log(total)\n",[67,81703,81704],{"class":69,"line":2340},[67,81705,81706],{"class":77},"    \u002F\u002F 上一次值        当前值       返回值（第一次遍历）\n",[67,81708,81709],{"class":69,"line":2346},[67,81710,81711],{"class":77},"    \u002F\u002F    0       10000*1.3=13000       13000\n",[67,81713,81714],{"class":69,"line":2351},[67,81715,81706],{"class":77},[67,81717,81718],{"class":69,"line":2365},[67,81719,81720],{"class":77},"    \u002F\u002F  13000     10000*1.3=13000       26000\n",[67,81722,81723],{"class":69,"line":2370},[67,81724,81706],{"class":77},[67,81726,81727],{"class":69,"line":2376},[67,81728,81729],{"class":77},"    \u002F\u002F  26000     10000*1.3=13000       39000\n",[67,81731,81732,81734,81736],{"class":69,"line":2397},[67,81733,52954],{"class":77},[67,81735,52350],{"class":51837},[67,81737,51844],{"class":77},[67,81739,81740,81742,81744],{"class":69,"line":2402},[67,81741,52322],{"class":77},[67,81743,52337],{"class":51837},[67,81745,51844],{"class":77},[23626,81747,81749],{"id":81748},"_410523-array的其他方法","4.10.5.2.3 Array的其他方法",[19,81751,81752],{},[725,81753],{"alt":62,"src":81754},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-268.png",[19,81756,81757],{},[725,81758],{"alt":62,"src":81759},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-269.png",[815,81761,81762],{},[818,81763,81764],{},"find()",[19,81766,81767],{},"循环查找，找到第一个就ok",[19,81769,81770],{},[28,81771,81774],{"href":81772,"rel":81773},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Ffind",[32],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Ffind",[57,81776,81778],{"className":51170,"code":81777,"language":51172,"meta":62,"style":62},"const array1 = [5, 12, 8, 130, 44]\nconst found = array1.find((element) => element > 10)\nconsole.log(found)  \u002F\u002F12\n",[64,81779,81780,81785,81790],{"__ignoreMap":62},[67,81781,81782],{"class":69,"line":70},[67,81783,81784],{"class":77},"const array1 = [5, 12, 8, 130, 44]\n",[67,81786,81787],{"class":69,"line":143},[67,81788,81789],{"class":77},"const found = array1.find((element) => element > 10)\n",[67,81791,81792],{"class":69,"line":149},[67,81793,81794],{"class":77},"console.log(found)  \u002F\u002F12\n",[19,81796,81797,81799,81800,81805,81806,81809,81810,81812,81813,81818,81819,81821,81822,81824,81825,81827,81828],{},[64,81798,81764],{}," 方法是一个",[28,81801,81804],{"href":81802,"rel":81803},"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",[32],"迭代方法","。它按索引升序顺序为数组中的每个元素调用提供的 ",[64,81807,81808],{},"callbackFn"," 函数，直到 ",[64,81811,81808],{}," 返回一个",[28,81814,81817],{"href":81815,"rel":81816},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FGlossary\u002FTruthy",[32],"真值","。然后 ",[64,81820,81764],{}," 返回该元素并停止迭代数组。如果 ",[64,81823,81808],{}," 从未返回真值，则 ",[64,81826,81764],{}," 返回 ",[64,81829,81830],{},"[undefined](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002Fundefined)",[57,81832,81834],{"className":53604,"code":81833,"language":53606,"meta":62,"style":62},"\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",[64,81835,81836,81844,81852,81857,81862,81867,81871,81876,81881,81885,81890,81895,81899,81903,81908,81913,81917,81921,81926,81931,81936,81941,81946,81950,81955,81960,81965,81970,81974,81979,81987],{"__ignoreMap":62},[67,81837,81838,81840,81842],{"class":69,"line":70},[67,81839,1766],{"class":77},[67,81841,52337],{"class":51837},[67,81843,51844],{"class":77},[67,81845,81846,81848,81850],{"class":69,"line":143},[67,81847,52681],{"class":77},[67,81849,52350],{"class":51837},[67,81851,51844],{"class":77},[67,81853,81854],{"class":69,"line":149},[67,81855,81856],{"class":77},"    const arr = ['red', 'blue', 'green']\n",[67,81858,81859],{"class":69,"line":155},[67,81860,81861],{"class":77},"    const found = arr.find(item => item === 'pink')\n",[67,81863,81864],{"class":69,"line":161},[67,81865,81866],{"class":77},"    console.log(found)   \u002F\u002F没有，输出undefined\n",[67,81868,81869],{"class":69,"line":167},[67,81870,177],{"emptyLinePlaceholder":176},[67,81872,81873],{"class":69,"line":173},[67,81874,81875],{"class":77},"    \u002F\u002F 使用场景，用于查找数据\n",[67,81877,81878],{"class":69,"line":180},[67,81879,81880],{"class":77},"    const arr1 = [\n",[67,81882,81883],{"class":69,"line":186},[67,81884,79923],{"class":77},[67,81886,81887],{"class":69,"line":444},[67,81888,81889],{"class":77},"        name: '小米',\n",[67,81891,81892],{"class":69,"line":2335},[67,81893,81894],{"class":77},"        price: 1999\n",[67,81896,81897],{"class":69,"line":2340},[67,81898,78429],{"class":77},[67,81900,81901],{"class":69,"line":2346},[67,81902,79923],{"class":77},[67,81904,81905],{"class":69,"line":2351},[67,81906,81907],{"class":77},"        name: '华为',\n",[67,81909,81910],{"class":69,"line":2365},[67,81911,81912],{"class":77},"        price: 3999\n",[67,81914,81915],{"class":69,"line":2370},[67,81916,52935],{"class":77},[67,81918,81919],{"class":69,"line":2376},[67,81920,53646],{"class":77},[67,81922,81923],{"class":69,"line":2397},[67,81924,81925],{"class":77},"    \u002F\u002F 这小米这个对象，并且返回这个对象\n",[67,81927,81928],{"class":69,"line":2402},[67,81929,81930],{"class":77},"    \u002F\u002F const found1 = arr1.find(item => {\n",[67,81932,81933],{"class":69,"line":2416},[67,81934,81935],{"class":77},"    \u002F\u002F   if (item.name === '小米') {\n",[67,81937,81938],{"class":69,"line":2421},[67,81939,81940],{"class":77},"    \u002F\u002F     return item\n",[67,81942,81943],{"class":69,"line":2450},[67,81944,81945],{"class":77},"    \u002F\u002F   }\n",[67,81947,81948],{"class":69,"line":2455},[67,81949,63827],{"class":77},[67,81951,81952],{"class":69,"line":2472},[67,81953,81954],{"class":77},"    \u002F\u002F 另一种写法\n",[67,81956,81957],{"class":69,"line":2477},[67,81958,81959],{"class":77},"    const found1 = arr1.find(item => {\n",[67,81961,81962],{"class":69,"line":2482},[67,81963,81964],{"class":77},"      \u002F\u002F 这个return是为了在找到小米之后退出函数，但是这个函数返回的是包含小米的这个对象\n",[67,81966,81967],{"class":69,"line":2487},[67,81968,81969],{"class":77},"      return item.name = '小米'\n",[67,81971,81972],{"class":69,"line":2501},[67,81973,33998],{"class":77},[67,81975,81976],{"class":69,"line":2506},[67,81977,81978],{"class":77},"    console.log(found1)\n",[67,81980,81981,81983,81985],{"class":69,"line":3298},[67,81982,52954],{"class":77},[67,81984,52350],{"class":51837},[67,81986,51844],{"class":77},[67,81988,81989,81991,81993],{"class":69,"line":3312},[67,81990,52322],{"class":77},[67,81992,52337],{"class":51837},[67,81994,51844],{"class":77},[19,81996,81997],{},[725,81998],{"alt":62,"src":81999},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-270.png",[19,82001,82002],{},"上面还可以进一步的省略，写为：const found1 = arr1.find(item => item.name === '小米')",[815,82004,82005],{"start":143},[818,82006,82007],{},"every()返回的是布尔值",[19,82009,82010],{},[28,82011,82014],{"href":82012,"rel":82013},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Fevery",[32],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Fevery",[19,82016,82017],{},"filter是筛选之后返回的是数组，every()返回的是筛选后的布尔值",[19,82019,82020],{},"some是只有有一个就没问题",[19,82022,82023],{},"every是必须全是才行",[57,82025,82029],{"className":82026,"code":82027,"language":82028,"meta":62,"style":62},"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",[64,82030,82031,82047,82061,82065,82074],{"__ignoreMap":62},[67,82032,82033,82035,82038,82040,82042,82045],{"class":69,"line":70},[67,82034,54986],{"class":73},[67,82036,82037],{"class":77}," isBigEnough(element, ",[67,82039,74595],{"class":73},[67,82041,13153],{"class":77},[67,82043,82044],{"class":73},"array",[67,82046,13160],{"class":77},[67,82048,82049,82052,82055,82057,82059],{"class":69,"line":143},[67,82050,82051],{"class":73},"  return",[67,82053,82054],{"class":77}," element ",[67,82056,2433],{"class":73},[67,82058,2760],{"class":208},[67,82060,2017],{"class":77},[67,82062,82063],{"class":69,"line":149},[67,82064,2288],{"class":77},[67,82066,82067,82070,82072],{"class":69,"line":155},[67,82068,82069],{"class":77},"[12, 5, 8, 130, 44].every(isBigEnough); ",[67,82071,33866],{"class":73},[67,82073,55053],{"class":77},[67,82075,82076,82079,82081],{"class":69,"line":161},[67,82077,82078],{"class":77},"[12, 54, 18, 130, 44].every(isBigEnough); ",[67,82080,33866],{"class":73},[67,82082,58477],{"class":77},[57,82084,82086],{"className":53604,"code":82085,"language":53606,"meta":62,"style":62},"\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",[64,82087,82088,82096,82104,82109,82113,82118,82123,82131],{"__ignoreMap":62},[67,82089,82090,82092,82094],{"class":69,"line":70},[67,82091,1766],{"class":77},[67,82093,52337],{"class":51837},[67,82095,51844],{"class":77},[67,82097,82098,82100,82102],{"class":69,"line":143},[67,82099,52681],{"class":77},[67,82101,52350],{"class":51837},[67,82103,51844],{"class":77},[67,82105,82106],{"class":69,"line":149},[67,82107,82108],{"class":77},"    \u002F\u002F every 每个是否都符合条件，如果都符合返回true，否则返回false\n",[67,82110,82111],{"class":69,"line":155},[67,82112,78859],{"class":77},[67,82114,82115],{"class":69,"line":161},[67,82116,82117],{"class":77},"    const flag = arr.every(item => item >= 10)\n",[67,82119,82120],{"class":69,"line":167},[67,82121,82122],{"class":77},"    console.log(flag)    \u002F\u002Ftrue\n",[67,82124,82125,82127,82129],{"class":69,"line":173},[67,82126,52954],{"class":77},[67,82128,52350],{"class":51837},[67,82130,51844],{"class":77},[67,82132,82133,82135,82137],{"class":69,"line":180},[67,82134,52322],{"class":77},[67,82136,52337],{"class":51837},[67,82138,51844],{"class":77},[57,82140,82142],{"className":53604,"code":82141,"language":53606,"meta":62,"style":62},"\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",[64,82143,82144,82152,82160,82164,82169,82174,82179,82187],{"__ignoreMap":62},[67,82145,82146,82148,82150],{"class":69,"line":70},[67,82147,1766],{"class":77},[67,82149,52337],{"class":51837},[67,82151,51844],{"class":77},[67,82153,82154,82156,82158],{"class":69,"line":143},[67,82155,52681],{"class":77},[67,82157,52350],{"class":51837},[67,82159,51844],{"class":77},[67,82161,82162],{"class":69,"line":149},[67,82163,82108],{"class":77},[67,82165,82166],{"class":69,"line":155},[67,82167,82168],{"class":77},"    const arr = [10, 0, 5]\n",[67,82170,82171],{"class":69,"line":161},[67,82172,82173],{"class":77},"    const flag = arr.some(item => item >= 10)\n",[67,82175,82176],{"class":69,"line":167},[67,82177,82178],{"class":77},"    console.log(flag)   \u002F\u002Ftrue\n",[67,82180,82181,82183,82185],{"class":69,"line":173},[67,82182,52954],{"class":77},[67,82184,52350],{"class":51837},[67,82186,51844],{"class":77},[67,82188,82189,82191,82193],{"class":69,"line":180},[67,82190,52322],{"class":77},[67,82192,52337],{"class":51837},[67,82194,51844],{"class":77},[23626,82196,82198],{"id":82197},"_410524-处理数据案例","4.10.5.2.4 处理数据案例",[19,82200,82201],{},[725,82202],{"alt":62,"src":82203},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-271.png",[57,82205,82207],{"className":51170,"code":82206,"language":51172,"meta":62,"style":62},"\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",[64,82208,82209,82219,82233,82237,82245,82259,82279,82291,82299,82306,82318,82330,82342,82354,82364,82374,82378,82386,82394,82398,82406,82418,82426,82448,82453,82458,82491,82499,82507,82511],{"__ignoreMap":62},[67,82210,82211,82213,82215,82217],{"class":69,"line":70},[67,82212,51834],{"class":77},[67,82214,51838],{"class":51837},[67,82216,51841],{"class":112},[67,82218,51844],{"class":77},[67,82220,82221,82223,82225,82227,82229,82231],{"class":69,"line":143},[67,82222,1766],{"class":77},[67,82224,51172],{"class":51837},[67,82226,51853],{"class":112},[67,82228,909],{"class":77},[67,82230,51858],{"class":84},[67,82232,51844],{"class":77},[67,82234,82235],{"class":69,"line":149},[67,82236,177],{"emptyLinePlaceholder":176},[67,82238,82239,82241,82243],{"class":69,"line":155},[67,82240,1766],{"class":77},[67,82242,51871],{"class":51837},[67,82244,51844],{"class":77},[67,82246,82247,82249,82251,82253,82255,82257],{"class":69,"line":161},[67,82248,52681],{"class":77},[67,82250,51881],{"class":51837},[67,82252,51884],{"class":112},[67,82254,909],{"class":77},[67,82256,51889],{"class":84},[67,82258,51844],{"class":77},[67,82260,82261,82263,82265,82267,82269,82271,82273,82275,82277],{"class":69,"line":167},[67,82262,52681],{"class":77},[67,82264,51881],{"class":51837},[67,82266,15637],{"class":112},[67,82268,909],{"class":77},[67,82270,51928],{"class":84},[67,82272,51908],{"class":112},[67,82274,909],{"class":77},[67,82276,51935],{"class":84},[67,82278,51844],{"class":77},[67,82280,82281,82283,82285,82287,82289],{"class":69,"line":173},[67,82282,52681],{"class":77},[67,82284,51944],{"class":51837},[67,82286,51947],{"class":77},[67,82288,51944],{"class":51837},[67,82290,51844],{"class":77},[67,82292,82293,82295,82297],{"class":69,"line":180},[67,82294,52681],{"class":77},[67,82296,779],{"class":51837},[67,82298,51844],{"class":77},[67,82300,82301,82304],{"class":69,"line":186},[67,82302,82303],{"class":51837},"    div",[67,82305,16289],{"class":77},[67,82307,82308,82310,82312,82314,82316],{"class":69,"line":444},[67,82309,55308],{"class":208},[67,82311,51974],{"class":77},[67,82313,2445],{"class":208},[67,82315,52029],{"class":73},[67,82317,2017],{"class":77},[67,82319,82320,82322,82324,82326,82328],{"class":69,"line":2335},[67,82321,55322],{"class":208},[67,82323,51974],{"class":77},[67,82325,1259],{"class":208},[67,82327,52029],{"class":73},[67,82329,2017],{"class":77},[67,82331,82332,82334,82336,82338,82340],{"class":69,"line":2340},[67,82333,57896],{"class":208},[67,82335,51974],{"class":77},[67,82337,1259],{"class":208},[67,82339,52029],{"class":73},[67,82341,2017],{"class":77},[67,82343,82344,82346,82348,82350,82352],{"class":69,"line":2346},[67,82345,65670],{"class":208},[67,82347,51974],{"class":77},[67,82349,1355],{"class":208},[67,82351,52029],{"class":73},[67,82353,2017],{"class":77},[67,82355,82356,82358,82360,82362],{"class":69,"line":2351},[67,82357,57823],{"class":208},[67,82359,51974],{"class":77},[67,82361,52129],{"class":208},[67,82363,2017],{"class":77},[67,82365,82366,82368,82370,82372],{"class":69,"line":2365},[67,82367,55421],{"class":208},[67,82369,51974],{"class":77},[67,82371,52182],{"class":208},[67,82373,2017],{"class":77},[67,82375,82376],{"class":69,"line":2370},[67,82377,2909],{"class":77},[67,82379,82380,82382,82384],{"class":69,"line":2376},[67,82381,52954],{"class":77},[67,82383,779],{"class":51837},[67,82385,51844],{"class":77},[67,82387,82388,82390,82392],{"class":69,"line":2397},[67,82389,52322],{"class":77},[67,82391,51871],{"class":51837},[67,82393,51844],{"class":77},[67,82395,82396],{"class":69,"line":2402},[67,82397,177],{"emptyLinePlaceholder":176},[67,82399,82400,82402,82404],{"class":69,"line":2416},[67,82401,1766],{"class":77},[67,82403,52337],{"class":51837},[67,82405,51844],{"class":77},[67,82407,82408,82410,82412,82414,82416],{"class":69,"line":2421},[67,82409,52681],{"class":77},[67,82411,52148],{"class":51837},[67,82413,55851],{"class":77},[67,82415,52148],{"class":51837},[67,82417,51844],{"class":77},[67,82419,82420,82422,82424],{"class":69,"line":2450},[67,82421,52681],{"class":77},[67,82423,52350],{"class":51837},[67,82425,51844],{"class":77},[67,82427,82428,82430,82433,82435,82438,82441,82443,82446],{"class":69,"line":2455},[67,82429,11939],{"class":73},[67,82431,82432],{"class":208}," spec",[67,82434,14282],{"class":73},[67,82436,82437],{"class":77}," { size: ",[67,82439,82440],{"class":84},"'40cm*40cm'",[67,82442,56001],{"class":77},[67,82444,82445],{"class":84},"'黑色'",[67,82447,56141],{"class":77},[67,82449,82450],{"class":69,"line":2472},[67,82451,82452],{"class":202},"    \u002F\u002F const arr = Object.values(spec)\n",[67,82454,82455],{"class":69,"line":2477},[67,82456,82457],{"class":202},"    \u002F\u002F document.querySelector('div').innerHTML = arr.join('\u002F')\n",[67,82459,82460,82462,82464,82466,82469,82471,82473,82476,82479,82482,82484,82486,82489],{"class":69,"line":2482},[67,82461,52944],{"class":77},[67,82463,54936],{"class":112},[67,82465,864],{"class":77},[67,82467,82468],{"class":84},"'div'",[67,82470,74786],{"class":77},[67,82472,909],{"class":73},[67,82474,82475],{"class":77}," Object.",[67,82477,82478],{"class":112},"values",[67,82480,82481],{"class":77},"(spec).",[67,82483,74760],{"class":112},[67,82485,864],{"class":77},[67,82487,82488],{"class":84},"'\u002F'",[67,82490,870],{"class":77},[67,82492,82493,82495,82497],{"class":69,"line":2487},[67,82494,52954],{"class":77},[67,82496,52350],{"class":51837},[67,82498,51844],{"class":77},[67,82500,82501,82503,82505],{"class":69,"line":2501},[67,82502,52322],{"class":77},[67,82504,52337],{"class":51837},[67,82506,51844],{"class":77},[67,82508,82509],{"class":69,"line":2506},[67,82510,177],{"emptyLinePlaceholder":176},[67,82512,82513,82515,82517],{"class":69,"line":3298},[67,82514,52322],{"class":77},[67,82516,51172],{"class":51837},[67,82518,51844],{"class":77},[19,82520,82521],{},"一定要记住Object是内置构造函数，他的那三个方法都是静态方法",[23626,82523,82525],{"id":82524},"_410525-arrayfrom方法","4.10.5.2.5 Array.from()方法",[19,82527,82528],{},"静态方法，将伪数组转换为真数组",[19,82530,82531],{},[725,82532],{"alt":62,"src":82533},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-272.png",[57,82535,82537],{"className":53604,"code":82536,"language":53606,"meta":62,"style":62},"\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",[64,82538,82539,82547,82555,82567,82579,82591,82599,82607,82612,82617,82622,82627,82635],{"__ignoreMap":62},[67,82540,82541,82543,82545],{"class":69,"line":70},[67,82542,1766],{"class":77},[67,82544,52337],{"class":51837},[67,82546,51844],{"class":77},[67,82548,82549,82551,82553],{"class":69,"line":143},[67,82550,52681],{"class":77},[67,82552,1863],{"class":51837},[67,82554,51844],{"class":77},[67,82556,82557,82559,82561,82563,82565],{"class":69,"line":149},[67,82558,51878],{"class":77},[67,82560,818],{"class":51837},[67,82562,55851],{"class":77},[67,82564,818],{"class":51837},[67,82566,51844],{"class":77},[67,82568,82569,82571,82573,82575,82577],{"class":69,"line":155},[67,82570,51878],{"class":77},[67,82572,818],{"class":51837},[67,82574,55851],{"class":77},[67,82576,818],{"class":51837},[67,82578,51844],{"class":77},[67,82580,82581,82583,82585,82587,82589],{"class":69,"line":161},[67,82582,51878],{"class":77},[67,82584,818],{"class":51837},[67,82586,55851],{"class":77},[67,82588,818],{"class":51837},[67,82590,51844],{"class":77},[67,82592,82593,82595,82597],{"class":69,"line":167},[67,82594,52954],{"class":77},[67,82596,1863],{"class":51837},[67,82598,51844],{"class":77},[67,82600,82601,82603,82605],{"class":69,"line":173},[67,82602,52681],{"class":77},[67,82604,52350],{"class":51837},[67,82606,51844],{"class":77},[67,82608,82609],{"class":69,"line":180},[67,82610,82611],{"class":77},"    const lis = document.querySelectorAll('li')\n",[67,82613,82614],{"class":69,"line":186},[67,82615,82616],{"class":77},"    const liss = Array.from(lis)\n",[67,82618,82619],{"class":69,"line":444},[67,82620,82621],{"class":77},"    liss.pop()\n",[67,82623,82624],{"class":69,"line":2335},[67,82625,82626],{"class":77},"    console.log(liss)\n",[67,82628,82629,82631,82633],{"class":69,"line":2340},[67,82630,52954],{"class":77},[67,82632,52350],{"class":51837},[67,82634,51844],{"class":77},[67,82636,82637,82639,82641],{"class":69,"line":2346},[67,82638,52322],{"class":77},[67,82640,52337],{"class":51837},[67,82642,51844],{"class":77},[19,82644,82645],{},[725,82646],{"alt":62,"src":82647},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-273.png",[40,82649,82651],{"id":82650},"_41053-string","4.10.5.3 String",[19,82653,82654],{},[725,82655],{"alt":62,"src":82656},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-274.png",[23626,82658,82660],{"id":82659},"_410531-split字符串变数组","4.10.5.3.1 split()字符串变数组",[57,82662,82664],{"className":53604,"code":82663,"language":53606,"meta":62,"style":62},"\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",[64,82665,82666,82674,82682,82687,82692,82697,82701,82706,82711,82716,82724],{"__ignoreMap":62},[67,82667,82668,82670,82672],{"class":69,"line":70},[67,82669,1766],{"class":77},[67,82671,52337],{"class":51837},[67,82673,51844],{"class":77},[67,82675,82676,82678,82680],{"class":69,"line":143},[67,82677,52681],{"class":77},[67,82679,52350],{"class":51837},[67,82681,51844],{"class":77},[67,82683,82684],{"class":69,"line":149},[67,82685,82686],{"class":77},"    \u002F\u002F 把字符串转化为数组\n",[67,82688,82689],{"class":69,"line":155},[67,82690,82691],{"class":77},"    const str = 'pink,red'\n",[67,82693,82694],{"class":69,"line":161},[67,82695,82696],{"class":77},"    const arr = str.split(',')\n",[67,82698,82699],{"class":69,"line":167},[67,82700,81175],{"class":77},[67,82702,82703],{"class":69,"line":173},[67,82704,82705],{"class":77},"    const str1 = '2025-8-25'\n",[67,82707,82708],{"class":69,"line":180},[67,82709,82710],{"class":77},"    const arr1 = str1.split('-')\n",[67,82712,82713],{"class":69,"line":186},[67,82714,82715],{"class":77},"    console.log(arr1)\n",[67,82717,82718,82720,82722],{"class":69,"line":444},[67,82719,52954],{"class":77},[67,82721,52350],{"class":51837},[67,82723,51844],{"class":77},[67,82725,82726,82728,82730],{"class":69,"line":2335},[67,82727,52322],{"class":77},[67,82729,52337],{"class":51837},[67,82731,51844],{"class":77},[23626,82733,82735],{"id":82734},"_410532-字符串的截取","4.10.5.3.2 字符串的截取",[19,82737,5900],{},[19,82739,82740],{},"substring(indexStart)",[19,82742,82743],{},"substring(indexStart, indexEnd)",[1863,82745,82746,82757,82769,82779],{},[818,82747,82748,82749,82752,82753,82756],{},"如果省略了 ",[64,82750,82751],{},"indexEnd","，则 ",[64,82754,82755],{},"substring()"," 提取字符直到字符串的末尾",[818,82758,82759,82760,82763,82764,82752,82766,82768],{},"如果 ",[64,82761,82762],{},"indexStart"," 等于 ",[64,82765,82751],{},[64,82767,82755],{}," 返回一个空字符串",[818,82770,82759,82771,82773,82774,82752,82776,82778],{},[64,82772,82762],{}," 大于 ",[64,82775,82751],{},[64,82777,82755],{}," 的效果就像交换了这两个参数一样",[818,82780,82781],{},"结束的索引号不包含想要截取的部分",[57,82783,82785],{"className":82026,"code":82784,"language":82028,"meta":62,"style":62},"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",[64,82786,82787,82799,82803,82837,82867,82871,82902,82906,82933,82963,82993,82997,83028],{"__ignoreMap":62},[67,82788,82789,82792,82794,82797],{"class":69,"line":70},[67,82790,82791],{"class":77},"const anyString ",[67,82793,909],{"class":73},[67,82795,82796],{"class":84}," \"Mozilla\"",[67,82798,2017],{"class":77},[67,82800,82801],{"class":69,"line":143},[67,82802,177],{"emptyLinePlaceholder":176},[67,82804,82805,82808,82810,82812,82814,82817,82819,82822,82824,82826,82828,82830,82832,82834],{"class":69,"line":149},[67,82806,82807],{"class":208},"console",[67,82809,240],{"class":77},[67,82811,58784],{"class":208},[67,82813,864],{"class":77},[67,82815,82816],{"class":208},"anyString",[67,82818,240],{"class":77},[67,82820,82821],{"class":208},"substring",[67,82823,864],{"class":77},[67,82825,1051],{"class":208},[67,82827,13153],{"class":77},[67,82829,1077],{"class":208},[67,82831,75790],{"class":77},[67,82833,33866],{"class":73},[67,82835,82836],{"class":84}," 'M'\n",[67,82838,82839,82841,82843,82845,82847,82849,82851,82853,82855,82857,82859,82861,82863,82865],{"class":69,"line":155},[67,82840,82807],{"class":208},[67,82842,240],{"class":77},[67,82844,58784],{"class":208},[67,82846,864],{"class":77},[67,82848,82816],{"class":208},[67,82850,240],{"class":77},[67,82852,82821],{"class":208},[67,82854,864],{"class":77},[67,82856,1077],{"class":208},[67,82858,13153],{"class":77},[67,82860,1051],{"class":208},[67,82862,75790],{"class":77},[67,82864,33866],{"class":73},[67,82866,82836],{"class":84},[67,82868,82869],{"class":69,"line":161},[67,82870,177],{"emptyLinePlaceholder":176},[67,82872,82873,82875,82877,82879,82881,82883,82885,82887,82889,82891,82893,82895,82897,82899],{"class":69,"line":167},[67,82874,82807],{"class":208},[67,82876,240],{"class":77},[67,82878,58784],{"class":208},[67,82880,864],{"class":77},[67,82882,82816],{"class":208},[67,82884,240],{"class":77},[67,82886,82821],{"class":208},[67,82888,864],{"class":77},[67,82890,1051],{"class":208},[67,82892,13153],{"class":77},[67,82894,1202],{"class":208},[67,82896,75790],{"class":77},[67,82898,33866],{"class":73},[67,82900,82901],{"class":84}," 'Mozill'\n",[67,82903,82904],{"class":69,"line":173},[67,82905,177],{"emptyLinePlaceholder":176},[67,82907,82908,82910,82912,82914,82916,82918,82920,82922,82924,82926,82928,82930],{"class":69,"line":180},[67,82909,82807],{"class":208},[67,82911,240],{"class":77},[67,82913,58784],{"class":208},[67,82915,864],{"class":77},[67,82917,82816],{"class":208},[67,82919,240],{"class":77},[67,82921,82821],{"class":208},[67,82923,864],{"class":77},[67,82925,1151],{"class":208},[67,82927,75790],{"class":77},[67,82929,33866],{"class":73},[67,82931,82932],{"class":84}," 'lla'\n",[67,82934,82935,82937,82939,82941,82943,82945,82947,82949,82951,82953,82955,82957,82959,82961],{"class":69,"line":186},[67,82936,82807],{"class":208},[67,82938,240],{"class":77},[67,82940,58784],{"class":208},[67,82942,864],{"class":77},[67,82944,82816],{"class":208},[67,82946,240],{"class":77},[67,82948,82821],{"class":208},[67,82950,864],{"class":77},[67,82952,1151],{"class":208},[67,82954,13153],{"class":77},[67,82956,1227],{"class":208},[67,82958,75846],{"class":77},[67,82960,33866],{"class":73},[67,82962,82932],{"class":84},[67,82964,82965,82967,82969,82971,82973,82975,82977,82979,82981,82983,82985,82987,82989,82991],{"class":69,"line":444},[67,82966,82807],{"class":208},[67,82968,240],{"class":77},[67,82970,58784],{"class":208},[67,82972,864],{"class":77},[67,82974,82816],{"class":208},[67,82976,240],{"class":77},[67,82978,82821],{"class":208},[67,82980,864],{"class":77},[67,82982,1227],{"class":208},[67,82984,13153],{"class":77},[67,82986,1151],{"class":208},[67,82988,75790],{"class":77},[67,82990,33866],{"class":73},[67,82992,82932],{"class":84},[67,82994,82995],{"class":69,"line":2335},[67,82996,177],{"emptyLinePlaceholder":176},[67,82998,82999,83001,83003,83005,83007,83009,83011,83013,83015,83017,83019,83021,83023,83025],{"class":69,"line":2340},[67,83000,82807],{"class":208},[67,83002,240],{"class":77},[67,83004,58784],{"class":208},[67,83006,864],{"class":77},[67,83008,82816],{"class":208},[67,83010,240],{"class":77},[67,83012,82821],{"class":208},[67,83014,864],{"class":77},[67,83016,1051],{"class":208},[67,83018,13153],{"class":77},[67,83020,1227],{"class":208},[67,83022,75790],{"class":77},[67,83024,33866],{"class":73},[67,83026,83027],{"class":84}," 'Mozilla'\n",[67,83029,83030,83032,83034,83036,83038,83040,83042,83044,83046,83048,83050,83052,83054,83056],{"class":69,"line":2346},[67,83031,82807],{"class":208},[67,83033,240],{"class":77},[67,83035,58784],{"class":208},[67,83037,864],{"class":77},[67,83039,82816],{"class":208},[67,83041,240],{"class":77},[67,83043,82821],{"class":208},[67,83045,864],{"class":77},[67,83047,1051],{"class":208},[67,83049,13153],{"class":77},[67,83051,1303],{"class":208},[67,83053,75790],{"class":77},[67,83055,33866],{"class":73},[67,83057,83027],{"class":84},[23626,83059,83061],{"id":83060},"_410533-startswith","4.10.5.3.3 startsWith",[19,83063,83064,83067,83068,83073,83074,83076,83077],{},[64,83065,83066],{},"[String](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString)"," 的 ",[336,83069,83070],{},[64,83071,83072],{},"startsWith()"," 方法用来判断当前字符串是否以另外一个给定的子字符串开头，并根据判断结果返回 ",[64,83075,2086],{}," 或 ",[64,83078,66557],{},[57,83080,83082],{"className":78032,"code":83081,"language":78034,"meta":62,"style":62},"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",[64,83083,83084,83096,83115,83120,83140],{"__ignoreMap":62},[67,83085,83086,83088,83091,83093],{"class":69,"line":70},[67,83087,7511],{"class":73},[67,83089,83090],{"class":77}," str1 ",[67,83092,909],{"class":73},[67,83094,83095],{"class":84}," \"Saturday night plans\"\n",[67,83097,83098,83100,83102,83105,83108,83110,83113],{"class":69,"line":143},[67,83099,78069],{"class":77},[67,83101,58784],{"class":112},[67,83103,83104],{"class":77},"(str1.",[67,83106,83107],{"class":112},"startsWith",[67,83109,864],{"class":77},[67,83111,83112],{"class":84},"\"Sat\"",[67,83114,31034],{"class":77},[67,83116,83117],{"class":69,"line":149},[67,83118,83119],{"class":202},"\u002F\u002F Expected output: true\n",[67,83121,83122,83124,83126,83128,83130,83132,83134,83136,83138],{"class":69,"line":155},[67,83123,78069],{"class":77},[67,83125,58784],{"class":112},[67,83127,83104],{"class":77},[67,83129,83107],{"class":112},[67,83131,864],{"class":77},[67,83133,83112],{"class":84},[67,83135,13153],{"class":77},[67,83137,933],{"class":208},[67,83139,31034],{"class":77},[67,83141,83142],{"class":69,"line":161},[67,83143,83144],{"class":202},"\u002F\u002F Expected output: false\n",[57,83146,83148],{"className":51170,"code":83147,"language":51172,"meta":62,"style":62},"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",[64,83149,83150,83155,83160,83164,83169,83174],{"__ignoreMap":62},[67,83151,83152],{"class":69,"line":70},[67,83153,83154],{"class":77},"startsWith(searchString)\n",[67,83156,83157],{"class":69,"line":143},[67,83158,83159],{"class":77},"startsWith(searchString, position)       position指的是第一个字符的索引，默认为0\n",[67,83161,83162],{"class":69,"line":149},[67,83163,177],{"emptyLinePlaceholder":176},[67,83165,83166],{"class":69,"line":155},[67,83167,83168],{"class":77},"const str3 = 'pink老师上课中'\n",[67,83170,83171],{"class":69,"line":161},[67,83172,83173],{"class":77},"console.log(str3.startsWith('pink'))   \u002F\u002Ftrue\n",[67,83175,83176],{"class":69,"line":167},[67,83177,83178],{"class":77},"console.log(str3.startsWith('p'))   \u002F\u002Ftrue\n",[23626,83180,83182],{"id":83181},"_410534-includes","4.10.5.3.4 includes",[19,83184,83185],{},"includes(searchString) includes(searchString, position)",[815,83187,83188],{},[818,83189,83190],{},"searchString:",[19,83192,83193,83194,83196,83197,83202,83203,83208,83209,22217,83212,83215,83216,83219],{},"一个要在 ",[64,83195,2026],{}," 中查找的字符串。",[28,83198,83201],{"href":83199,"rel":83200},"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",[32],"不能是正则表达式","。所有非正则表达式的值都会被",[28,83204,83207],{"href":83205,"rel":83206},"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",[32],"强制转换为字符串","，因此如果该参数被省略或传入 ",[64,83210,83211],{},"undefined",[64,83213,83214],{},"includes()"," 方法会在字符串中搜索 ",[64,83217,83218],{},"\"undefined\"","，这通常不是你想要的",[815,83221,83222],{"start":143},[818,83223,83224,1715],{},[64,83225,83226],{},"[position 可选](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString\u002Fincludes#position)",[19,83228,83229,83230,83233,83234],{},"在字符串中开始搜索 ",[64,83231,83232],{},"searchString"," 的位置。默认值为 ",[64,83235,1051],{},[815,83237,83238],{"start":149},[818,83239,83240],{},"返回值：",[19,83242,83243,83244,83246,83247,83251,83252],{},"如果在给定的字符串中找到了要搜索的字符串（包括 ",[64,83245,83232],{}," 为空字符串的情况），则返回 ",[336,83248,83249],{},[64,83250,2086],{}," ，否则返回 ",[336,83253,83254],{},[64,83255,66557],{},[815,83257,83258],{"start":155},[818,83259,83260],{},"异常：",[19,83262,82759,83263,614,83265,83269],{},[64,83264,83232],{},[28,83266,83268],{"href":83199,"rel":83267},[32],"是一个正则表达式","，则会抛出",[19,83271,83272],{},"只要是有就是true，不需要非得以谁开头结尾",[57,83274,83276],{"className":78032,"code":83275,"language":78034,"meta":62,"style":62},"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",[64,83277,83278,83289,83312,83331,83351,83373,83392],{"__ignoreMap":62},[67,83279,83280,83282,83284,83286],{"class":69,"line":70},[67,83281,7511],{"class":73},[67,83283,80312],{"class":77},[67,83285,909],{"class":73},[67,83287,83288],{"class":84}," \"To be, or not to be, that is the question.\"\n",[67,83290,83291,83293,83295,83298,83301,83303,83306,83309],{"class":69,"line":143},[67,83292,78069],{"class":77},[67,83294,58784],{"class":112},[67,83296,83297],{"class":77},"(str.",[67,83299,83300],{"class":112},"includes",[67,83302,864],{"class":77},[67,83304,83305],{"class":84},"\"To be\"",[67,83307,83308],{"class":77},"))",[67,83310,83311],{"class":202},"  \u002F\u002F true\n",[67,83313,83314,83316,83318,83320,83322,83324,83327,83329],{"class":69,"line":149},[67,83315,78069],{"class":77},[67,83317,58784],{"class":112},[67,83319,83297],{"class":77},[67,83321,83300],{"class":112},[67,83323,864],{"class":77},[67,83325,83326],{"class":84},"\"question\"",[67,83328,83308],{"class":77},[67,83330,83311],{"class":202},[67,83332,83333,83335,83337,83339,83341,83343,83346,83348],{"class":69,"line":155},[67,83334,78069],{"class":77},[67,83336,58784],{"class":112},[67,83338,83297],{"class":77},[67,83340,83300],{"class":112},[67,83342,864],{"class":77},[67,83344,83345],{"class":84},"\"nonexistent\"",[67,83347,83308],{"class":77},[67,83349,83350],{"class":202},"  \u002F\u002F false\n",[67,83352,83353,83355,83357,83359,83361,83363,83365,83367,83369,83371],{"class":69,"line":161},[67,83354,78069],{"class":77},[67,83356,58784],{"class":112},[67,83358,83297],{"class":77},[67,83360,83300],{"class":112},[67,83362,864],{"class":77},[67,83364,83305],{"class":84},[67,83366,13153],{"class":77},[67,83368,1077],{"class":208},[67,83370,83308],{"class":77},[67,83372,83350],{"class":202},[67,83374,83375,83377,83379,83381,83383,83385,83388,83390],{"class":69,"line":167},[67,83376,78069],{"class":77},[67,83378,58784],{"class":112},[67,83380,83297],{"class":77},[67,83382,83300],{"class":112},[67,83384,864],{"class":77},[67,83386,83387],{"class":84},"\"TO BE\"",[67,83389,83308],{"class":77},[67,83391,83350],{"class":202},[67,83393,83394,83396,83398,83400,83402,83404,83406,83408],{"class":69,"line":173},[67,83395,78069],{"class":77},[67,83397,58784],{"class":112},[67,83399,83297],{"class":77},[67,83401,83300],{"class":112},[67,83403,864],{"class":77},[67,83405,8371],{"class":84},[67,83407,83308],{"class":77},[67,83409,83311],{"class":202},[23626,83411,83413],{"id":83412},"_410535-转换为字符串","4.10.5.3.5 转换为字符串",[57,83415,83417],{"className":53604,"code":83416,"language":53606,"meta":62,"style":62},"\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",[64,83418,83419,83427,83435,83440,83445,83450,83455,83460,83468],{"__ignoreMap":62},[67,83420,83421,83423,83425],{"class":69,"line":70},[67,83422,1766],{"class":77},[67,83424,52337],{"class":51837},[67,83426,51844],{"class":77},[67,83428,83429,83431,83433],{"class":69,"line":143},[67,83430,52681],{"class":77},[67,83432,52350],{"class":51837},[67,83434,51844],{"class":77},[67,83436,83437],{"class":69,"line":149},[67,83438,83439],{"class":77},"    const num = 10\n",[67,83441,83442],{"class":69,"line":155},[67,83443,83444],{"class":77},"    \u002F\u002F 强制转换\n",[67,83446,83447],{"class":69,"line":161},[67,83448,83449],{"class":77},"    console.log(String(num))\n",[67,83451,83452],{"class":69,"line":167},[67,83453,83454],{"class":77},"    \u002F\u002F toString()方法转换\n",[67,83456,83457],{"class":69,"line":173},[67,83458,83459],{"class":77},"    console.log(num.toString())\n",[67,83461,83462,83464,83466],{"class":69,"line":180},[67,83463,52954],{"class":77},[67,83465,52350],{"class":51837},[67,83467,51844],{"class":77},[67,83469,83470,83472,83474],{"class":69,"line":186},[67,83471,52322],{"class":77},[67,83473,52337],{"class":51837},[67,83475,51844],{"class":77},[23626,83477,83479],{"id":83478},"_410536-显示赠品练习","4.10.5.3.6 显示赠品练习",[19,83481,83482],{},[725,83483],{"alt":62,"src":83484},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-275.png",[57,83486,83488],{"className":51170,"code":83487,"language":51172,"meta":62,"style":62},"\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",[64,83489,83490,83500,83514,83518,83526,83540,83560,83572,83580,83584,83592,83604,83612,83624,83629,83634,83639,83686,83702,83710,83718,83722],{"__ignoreMap":62},[67,83491,83492,83494,83496,83498],{"class":69,"line":70},[67,83493,51834],{"class":77},[67,83495,51838],{"class":51837},[67,83497,51841],{"class":112},[67,83499,51844],{"class":77},[67,83501,83502,83504,83506,83508,83510,83512],{"class":69,"line":143},[67,83503,1766],{"class":77},[67,83505,51172],{"class":51837},[67,83507,51853],{"class":112},[67,83509,909],{"class":77},[67,83511,51858],{"class":84},[67,83513,51844],{"class":77},[67,83515,83516],{"class":69,"line":149},[67,83517,177],{"emptyLinePlaceholder":176},[67,83519,83520,83522,83524],{"class":69,"line":155},[67,83521,1766],{"class":77},[67,83523,51871],{"class":51837},[67,83525,51844],{"class":77},[67,83527,83528,83530,83532,83534,83536,83538],{"class":69,"line":161},[67,83529,52681],{"class":77},[67,83531,51881],{"class":51837},[67,83533,51884],{"class":112},[67,83535,909],{"class":77},[67,83537,51889],{"class":84},[67,83539,51844],{"class":77},[67,83541,83542,83544,83546,83548,83550,83552,83554,83556,83558],{"class":69,"line":167},[67,83543,52681],{"class":77},[67,83545,51881],{"class":51837},[67,83547,15637],{"class":112},[67,83549,909],{"class":77},[67,83551,51928],{"class":84},[67,83553,51908],{"class":112},[67,83555,909],{"class":77},[67,83557,51935],{"class":84},[67,83559,51844],{"class":77},[67,83561,83562,83564,83566,83568,83570],{"class":69,"line":173},[67,83563,52681],{"class":77},[67,83565,51944],{"class":51837},[67,83567,51947],{"class":77},[67,83569,51944],{"class":51837},[67,83571,51844],{"class":77},[67,83573,83574,83576,83578],{"class":69,"line":180},[67,83575,52322],{"class":77},[67,83577,51871],{"class":51837},[67,83579,51844],{"class":77},[67,83581,83582],{"class":69,"line":186},[67,83583,177],{"emptyLinePlaceholder":176},[67,83585,83586,83588,83590],{"class":69,"line":444},[67,83587,1766],{"class":77},[67,83589,52337],{"class":51837},[67,83591,51844],{"class":77},[67,83593,83594,83596,83598,83600,83602],{"class":69,"line":2335},[67,83595,52681],{"class":77},[67,83597,52148],{"class":51837},[67,83599,55851],{"class":77},[67,83601,52148],{"class":51837},[67,83603,51844],{"class":77},[67,83605,83606,83608,83610],{"class":69,"line":2340},[67,83607,52681],{"class":77},[67,83609,52350],{"class":51837},[67,83611,51844],{"class":77},[67,83613,83614,83616,83619,83621],{"class":69,"line":2346},[67,83615,11939],{"class":73},[67,83617,83618],{"class":208}," gift",[67,83620,14282],{"class":73},[67,83622,83623],{"class":84}," '50g的茶叶，清洗球'\n",[67,83625,83626],{"class":69,"line":2351},[67,83627,83628],{"class":202},"    \u002F\u002F 1.把字符串拆分为数组\n",[67,83630,83631],{"class":69,"line":2365},[67,83632,83633],{"class":202},"    \u002F\u002F console.log(gift.split(','))\n",[67,83635,83636],{"class":69,"line":2370},[67,83637,83638],{"class":202},"    \u002F\u002F 2.根据数组元素的个数生成对应的标签\n",[67,83640,83641,83643,83645,83647,83650,83653,83655,83658,83660,83662,83664,83666,83668,83671,83673,83676,83678,83680,83682,83684],{"class":69,"line":2376},[67,83642,11939],{"class":73},[67,83644,74456],{"class":208},[67,83646,14282],{"class":73},[67,83648,83649],{"class":77}," gift.",[67,83651,83652],{"class":112},"split",[67,83654,864],{"class":77},[67,83656,83657],{"class":84},"'，'",[67,83659,31363],{"class":77},[67,83661,74581],{"class":112},[67,83663,864],{"class":77},[67,83665,80332],{"class":5935},[67,83667,80335],{"class":73},[67,83669,83670],{"class":84}," `\u003Cspan>【赠品】${",[67,83672,80332],{"class":77},[67,83674,83675],{"class":84},"}\u003C\u002Fspan>\u003Cbr>`",[67,83677,31363],{"class":77},[67,83679,74760],{"class":112},[67,83681,864],{"class":77},[67,83683,74765],{"class":84},[67,83685,870],{"class":77},[67,83687,83688,83690,83692,83694,83696,83698,83700],{"class":69,"line":2397},[67,83689,52944],{"class":77},[67,83691,54936],{"class":112},[67,83693,864],{"class":77},[67,83695,82468],{"class":84},[67,83697,74786],{"class":77},[67,83699,909],{"class":73},[67,83701,74522],{"class":77},[67,83703,83704,83706,83708],{"class":69,"line":2402},[67,83705,52954],{"class":77},[67,83707,52350],{"class":51837},[67,83709,51844],{"class":77},[67,83711,83712,83714,83716],{"class":69,"line":2416},[67,83713,52322],{"class":77},[67,83715,52337],{"class":51837},[67,83717,51844],{"class":77},[67,83719,83720],{"class":69,"line":2421},[67,83721,177],{"emptyLinePlaceholder":176},[67,83723,83724,83726,83728],{"class":69,"line":2450},[67,83725,52322],{"class":77},[67,83727,51172],{"class":51837},[67,83729,51844],{"class":77},[40,83731,83733],{"id":83732},"_41054-number","4.10.5.4 Number",[19,83735,83736],{},[725,83737],{"alt":62,"src":83738},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-276.png",[19,83740,83741],{},"整数也可以进行toFixed来保留小数",[19,83743,83744],{},"比如：",[19,83746,83747],{},"const price=10",[19,83749,83750],{},"console.log(price.tofixed(2)) \u002F\u002F输出：10.00",[40,83752,83754],{"id":83753},"_41055-购物车展示","4.10.5.5 购物车展示",[19,83756,83757],{},[725,83758],{"alt":62,"src":83759},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-277.png",[57,83761,83763],{"className":51170,"code":83762,"language":51172,"meta":62,"style":62},"\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",[64,83764,83765,83775,83789,83793,83801,83815,83835,83847,83855,83861,83871,83881,83891,83895,83899,83905,83917,83931,83935,83939,83945,83957,83973,83983,83999,84003,84007,84013,84023,84033,84037,84041,84049,84061,84073,84085,84089,84093,84101,84113,84117,84121,84132,84142,84154,84166,84176,84180,84184,84192,84201,84213,84223,84233,84237,84241,84249,84258,84265,84275,84287,84291,84295,84304,84314,84325,84337,84349,84353,84357,84366,84376,84387,84391,84395,84401,84413,84425,84435,84445,84463,84475,84479,84483,84492,84504,84514,84524,84536,84540,84548,84556,84560,84568,84582,84590,84604,84632,84640,84648,84658,84662,84670,84678,84687,84695,84704,84714,84718,84722,84730,84738,84747,84755,84763,84776,84780,84784,84792,84800,84809,84817,84825,84840,84844,84848,84856,84864,84873,84881,84889,84903,84911,84915,84919,84924,84950,84955,84992,84997,85020,85025,85079,85084,85120,85124,85130,85135,85144,85158,85167,85186,85195,85205,85210,85215,85228,85233,85287,85313,85321,85329,85333],{"__ignoreMap":62},[67,83766,83767,83769,83771,83773],{"class":69,"line":70},[67,83768,51834],{"class":77},[67,83770,51838],{"class":51837},[67,83772,51841],{"class":112},[67,83774,51844],{"class":77},[67,83776,83777,83779,83781,83783,83785,83787],{"class":69,"line":143},[67,83778,1766],{"class":77},[67,83780,51172],{"class":51837},[67,83782,51853],{"class":112},[67,83784,909],{"class":77},[67,83786,51858],{"class":84},[67,83788,51844],{"class":77},[67,83790,83791],{"class":69,"line":149},[67,83792,177],{"emptyLinePlaceholder":176},[67,83794,83795,83797,83799],{"class":69,"line":155},[67,83796,1766],{"class":77},[67,83798,51871],{"class":51837},[67,83800,51844],{"class":77},[67,83802,83803,83805,83807,83809,83811,83813],{"class":69,"line":161},[67,83804,52681],{"class":77},[67,83806,51881],{"class":51837},[67,83808,51884],{"class":112},[67,83810,909],{"class":77},[67,83812,51889],{"class":84},[67,83814,51844],{"class":77},[67,83816,83817,83819,83821,83823,83825,83827,83829,83831,83833],{"class":69,"line":167},[67,83818,52681],{"class":77},[67,83820,51881],{"class":51837},[67,83822,15637],{"class":112},[67,83824,909],{"class":77},[67,83826,51928],{"class":84},[67,83828,51908],{"class":112},[67,83830,909],{"class":77},[67,83832,51935],{"class":84},[67,83834,51844],{"class":77},[67,83836,83837,83839,83841,83843,83845],{"class":69,"line":173},[67,83838,52681],{"class":77},[67,83840,51944],{"class":51837},[67,83842,51947],{"class":77},[67,83844,51944],{"class":51837},[67,83846,51844],{"class":77},[67,83848,83849,83851,83853],{"class":69,"line":180},[67,83850,52681],{"class":77},[67,83852,779],{"class":51837},[67,83854,51844],{"class":77},[67,83856,83857,83859],{"class":69,"line":186},[67,83858,7122],{"class":51837},[67,83860,16289],{"class":77},[67,83862,83863,83865,83867,83869],{"class":69,"line":444},[67,83864,55232],{"class":208},[67,83866,51974],{"class":77},[67,83868,1051],{"class":208},[67,83870,2017],{"class":77},[67,83872,83873,83875,83877,83879],{"class":69,"line":2335},[67,83874,55243],{"class":208},[67,83876,51974],{"class":77},[67,83878,1051],{"class":208},[67,83880,2017],{"class":77},[67,83882,83883,83885,83887,83889],{"class":69,"line":2340},[67,83884,73133],{"class":208},[67,83886,51974],{"class":77},[67,83888,61042],{"class":208},[67,83890,2017],{"class":77},[67,83892,83893],{"class":69,"line":2346},[67,83894,2909],{"class":77},[67,83896,83897],{"class":69,"line":2351},[67,83898,177],{"emptyLinePlaceholder":176},[67,83900,83901,83903],{"class":69,"line":2365},[67,83902,62660],{"class":112},[67,83904,16289],{"class":77},[67,83906,83907,83909,83911,83913,83915],{"class":69,"line":2370},[67,83908,55308],{"class":208},[67,83910,51974],{"class":77},[67,83912,79111],{"class":208},[67,83914,52029],{"class":73},[67,83916,2017],{"class":77},[67,83918,83919,83921,83923,83925,83927,83929],{"class":69,"line":2376},[67,83920,55243],{"class":208},[67,83922,51974],{"class":77},[67,83924,1169],{"class":208},[67,83926,52029],{"class":73},[67,83928,52093],{"class":208},[67,83930,2017],{"class":77},[67,83932,83933],{"class":69,"line":2397},[67,83934,2909],{"class":77},[67,83936,83937],{"class":69,"line":2402},[67,83938,177],{"emptyLinePlaceholder":176},[67,83940,83941,83943],{"class":69,"line":2416},[67,83942,79162],{"class":112},[67,83944,16289],{"class":77},[67,83946,83947,83949,83951,83953,83955],{"class":69,"line":2421},[67,83948,55232],{"class":208},[67,83950,51974],{"class":77},[67,83952,1431],{"class":208},[67,83954,52029],{"class":73},[67,83956,2017],{"class":77},[67,83958,83959,83961,83963,83965,83967,83969,83971],{"class":69,"line":2450},[67,83960,62397],{"class":208},[67,83962,51974],{"class":77},[67,83964,28658],{"class":208},[67,83966,79217],{"class":208},[67,83968,79220],{"class":208},[67,83970,1551],{"class":73},[67,83972,2017],{"class":77},[67,83974,83975,83977,83979,83981],{"class":69,"line":2455},[67,83976,55546],{"class":208},[67,83978,51974],{"class":77},[67,83980,52014],{"class":208},[67,83982,2017],{"class":77},[67,83984,83985,83987,83989,83991,83993,83995,83997],{"class":69,"line":2472},[67,83986,62514],{"class":208},[67,83988,51974],{"class":77},[67,83990,1077],{"class":208},[67,83992,52029],{"class":73},[67,83994,52058],{"class":208},[67,83996,62781],{"class":208},[67,83998,2017],{"class":77},[67,84000,84001],{"class":69,"line":2477},[67,84002,2909],{"class":77},[67,84004,84005],{"class":69,"line":2482},[67,84006,177],{"emptyLinePlaceholder":176},[67,84008,84009,84011],{"class":69,"line":2487},[67,84010,79280],{"class":112},[67,84012,16289],{"class":77},[67,84014,84015,84017,84019,84021],{"class":69,"line":2501},[67,84016,62562],{"class":208},[67,84018,51974],{"class":77},[67,84020,62567],{"class":208},[67,84022,2017],{"class":77},[67,84024,84025,84027,84029,84031],{"class":69,"line":2506},[67,84026,55421],{"class":208},[67,84028,51974],{"class":77},[67,84030,62355],{"class":208},[67,84032,2017],{"class":77},[67,84034,84035],{"class":69,"line":3298},[67,84036,2909],{"class":77},[67,84038,84039],{"class":69,"line":3312},[67,84040,177],{"emptyLinePlaceholder":176},[67,84042,84043,84045,84047],{"class":69,"line":3320},[67,84044,79162],{"class":112},[67,84046,56152],{"class":51837},[67,84048,16289],{"class":77},[67,84050,84051,84053,84055,84057,84059],{"class":69,"line":3325},[67,84052,55308],{"class":208},[67,84054,51974],{"class":77},[67,84056,1468],{"class":208},[67,84058,52029],{"class":73},[67,84060,2017],{"class":77},[67,84062,84063,84065,84067,84069,84071],{"class":69,"line":3331},[67,84064,55322],{"class":208},[67,84066,51974],{"class":77},[67,84068,1468],{"class":208},[67,84070,52029],{"class":73},[67,84072,2017],{"class":77},[67,84074,84075,84077,84079,84081,84083],{"class":69,"line":3337},[67,84076,62287],{"class":208},[67,84078,51974],{"class":77},[67,84080,1177],{"class":208},[67,84082,52029],{"class":73},[67,84084,2017],{"class":77},[67,84086,84087],{"class":69,"line":3342},[67,84088,2909],{"class":77},[67,84090,84091],{"class":69,"line":8667},[67,84092,177],{"emptyLinePlaceholder":176},[67,84094,84095,84097,84099],{"class":69,"line":8691},[67,84096,79162],{"class":112},[67,84098,62841],{"class":112},[67,84100,16289],{"class":77},[67,84102,84103,84105,84107,84109,84111],{"class":69,"line":8696},[67,84104,55308],{"class":208},[67,84106,51974],{"class":77},[67,84108,2445],{"class":208},[67,84110,52029],{"class":73},[67,84112,2017],{"class":77},[67,84114,84115],{"class":69,"line":8702},[67,84116,2909],{"class":77},[67,84118,84119],{"class":69,"line":8729},[67,84120,177],{"emptyLinePlaceholder":176},[67,84122,84123,84125,84127,84130],{"class":69,"line":8734},[67,84124,79162],{"class":112},[67,84126,62841],{"class":112},[67,84128,84129],{"class":112}," .tag",[67,84131,16289],{"class":77},[67,84133,84134,84136,84138,84140],{"class":69,"line":8740},[67,84135,55546],{"class":208},[67,84137,51974],{"class":77},[67,84139,61406],{"class":208},[67,84141,2017],{"class":77},[67,84143,84144,84146,84148,84150,84152],{"class":69,"line":8752},[67,84145,55232],{"class":208},[67,84147,51974],{"class":77},[67,84149,939],{"class":208},[67,84151,52029],{"class":73},[67,84153,2017],{"class":77},[67,84155,84156,84158,84160,84162,84164],{"class":69,"line":8764},[67,84157,55459],{"class":208},[67,84159,51974],{"class":77},[67,84161,1355],{"class":208},[67,84163,52029],{"class":73},[67,84165,2017],{"class":77},[67,84167,84168,84170,84172,84174],{"class":69,"line":8776},[67,84169,57953],{"class":208},[67,84171,51974],{"class":77},[67,84173,62607],{"class":208},[67,84175,2017],{"class":77},[67,84177,84178],{"class":69,"line":10435},[67,84179,2909],{"class":77},[67,84181,84182],{"class":69,"line":10459},[67,84183,177],{"emptyLinePlaceholder":176},[67,84185,84186,84188,84190],{"class":69,"line":10482},[67,84187,79162],{"class":112},[67,84189,79454],{"class":112},[67,84191,32003],{"class":77},[67,84193,84194,84196,84199],{"class":69,"line":10506},[67,84195,79162],{"class":112},[67,84197,84198],{"class":112}," .sub-total",[67,84200,16289],{"class":77},[67,84202,84203,84205,84207,84209,84211],{"class":69,"line":10511},[67,84204,55459],{"class":208},[67,84206,51974],{"class":77},[67,84208,1506],{"class":208},[67,84210,52029],{"class":73},[67,84212,2017],{"class":77},[67,84214,84215,84217,84219,84221],{"class":69,"line":10516},[67,84216,57953],{"class":208},[67,84218,51974],{"class":77},[67,84220,79477],{"class":208},[67,84222,2017],{"class":77},[67,84224,84225,84227,84229,84231],{"class":69,"line":10521},[67,84226,62374],{"class":208},[67,84228,51974],{"class":77},[67,84230,1077],{"class":208},[67,84232,2017],{"class":77},[67,84234,84235],{"class":69,"line":10530},[67,84236,2909],{"class":77},[67,84238,84239],{"class":69,"line":10535},[67,84240,177],{"emptyLinePlaceholder":176},[67,84242,84243,84245,84247],{"class":69,"line":10541},[67,84244,79162],{"class":112},[67,84246,79494],{"class":112},[67,84248,32003],{"class":77},[67,84250,84251,84253,84256],{"class":69,"line":10562},[67,84252,79162],{"class":112},[67,84254,84255],{"class":112}," .sub-total::before",[67,84257,32003],{"class":77},[67,84259,84260,84263],{"class":69,"line":10568},[67,84261,84262],{"class":112},"    .amount::before",[67,84264,16289],{"class":77},[67,84266,84267,84269,84271,84273],{"class":69,"line":10582},[67,84268,79501],{"class":208},[67,84270,51974],{"class":77},[67,84272,79506],{"class":84},[67,84274,2017],{"class":77},[67,84276,84277,84279,84281,84283,84285],{"class":69,"line":10588},[67,84278,55459],{"class":208},[67,84280,51974],{"class":77},[67,84282,1355],{"class":208},[67,84284,52029],{"class":73},[67,84286,2017],{"class":77},[67,84288,84289],{"class":69,"line":10615},[67,84290,2909],{"class":77},[67,84292,84293],{"class":69,"line":10624},[67,84294,177],{"emptyLinePlaceholder":176},[67,84296,84297,84299,84302],{"class":69,"line":10630},[67,84298,79162],{"class":112},[67,84300,84301],{"class":112}," .spec",[67,84303,16289],{"class":77},[67,84305,84306,84308,84310,84312],{"class":69,"line":10638},[67,84307,62374],{"class":208},[67,84309,51974],{"class":77},[67,84311,939],{"class":208},[67,84313,2017],{"class":77},[67,84315,84316,84318,84320,84323],{"class":69,"line":10643},[67,84317,57953],{"class":208},[67,84319,51974],{"class":77},[67,84321,84322],{"class":208},"#888",[67,84324,2017],{"class":77},[67,84326,84327,84329,84331,84333,84335],{"class":69,"line":17321},[67,84328,55459],{"class":208},[67,84330,51974],{"class":77},[67,84332,1406],{"class":208},[67,84334,52029],{"class":73},[67,84336,2017],{"class":77},[67,84338,84339,84341,84343,84345,84347],{"class":69,"line":17327},[67,84340,62537],{"class":208},[67,84342,51974],{"class":77},[67,84344,1556],{"class":208},[67,84346,52029],{"class":73},[67,84348,2017],{"class":77},[67,84350,84351],{"class":69,"line":17350},[67,84352,2909],{"class":77},[67,84354,84355],{"class":69,"line":17356},[67,84356,177],{"emptyLinePlaceholder":176},[67,84358,84359,84361,84364],{"class":69,"line":17379},[67,84360,79162],{"class":112},[67,84362,84363],{"class":112}," .count",[67,84365,16289],{"class":77},[67,84367,84368,84370,84372,84374],{"class":69,"line":17393},[67,84369,62374],{"class":208},[67,84371,51974],{"class":77},[67,84373,1077],{"class":208},[67,84375,2017],{"class":77},[67,84377,84378,84380,84382,84385],{"class":69,"line":17413},[67,84379,57953],{"class":208},[67,84381,51974],{"class":77},[67,84383,84384],{"class":208},"#aaa",[67,84386,2017],{"class":77},[67,84388,84389],{"class":69,"line":17419},[67,84390,2909],{"class":77},[67,84392,84393],{"class":69,"line":17430},[67,84394,177],{"emptyLinePlaceholder":176},[67,84396,84397,84399],{"class":69,"line":17453},[67,84398,73012],{"class":112},[67,84400,16289],{"class":77},[67,84402,84403,84405,84407,84409,84411],{"class":69,"line":17475},[67,84404,55308],{"class":208},[67,84406,51974],{"class":77},[67,84408,79111],{"class":208},[67,84410,52029],{"class":73},[67,84412,2017],{"class":77},[67,84414,84415,84417,84419,84421,84423],{"class":69,"line":17480},[67,84416,55243],{"class":208},[67,84418,51974],{"class":77},[67,84420,1051],{"class":208},[67,84422,52093],{"class":208},[67,84424,2017],{"class":77},[67,84426,84427,84429,84431,84433],{"class":69,"line":17486},[67,84428,55546],{"class":208},[67,84430,51974],{"class":77},[67,84432,52014],{"class":208},[67,84434,2017],{"class":77},[67,84436,84437,84439,84441,84443],{"class":69,"line":17500},[67,84438,55557],{"class":208},[67,84440,51974],{"class":77},[67,84442,52117],{"class":208},[67,84444,2017],{"class":77},[67,84446,84447,84450,84452,84454,84456,84458,84461],{"class":69,"line":17513},[67,84448,84449],{"class":208},"      border-top",[67,84451,51974],{"class":77},[67,84453,1077],{"class":208},[67,84455,52029],{"class":73},[67,84457,52058],{"class":208},[67,84459,84460],{"class":208}," #4e4e4e",[67,84462,2017],{"class":77},[67,84464,84465,84467,84469,84471,84473],{"class":69,"line":17518},[67,84466,55232],{"class":208},[67,84468,51974],{"class":77},[67,84470,1556],{"class":208},[67,84472,52029],{"class":73},[67,84474,2017],{"class":77},[67,84476,84477],{"class":69,"line":17532},[67,84478,2909],{"class":77},[67,84480,84481],{"class":69,"line":17537},[67,84482,177],{"emptyLinePlaceholder":176},[67,84484,84485,84487,84490],{"class":69,"line":17543},[67,84486,73012],{"class":112},[67,84488,84489],{"class":112}," .amount",[67,84491,16289],{"class":77},[67,84493,84494,84496,84498,84500,84502],{"class":69,"line":17548},[67,84495,55459],{"class":208},[67,84497,51974],{"class":77},[67,84499,1506],{"class":208},[67,84501,52029],{"class":73},[67,84503,2017],{"class":77},[67,84505,84506,84508,84510,84512],{"class":69,"line":17562},[67,84507,57953],{"class":208},[67,84509,51974],{"class":77},[67,84511,79477],{"class":208},[67,84513,2017],{"class":77},[67,84515,84516,84518,84520,84522],{"class":69,"line":17567},[67,84517,62871],{"class":208},[67,84519,51974],{"class":77},[67,84521,52026],{"class":208},[67,84523,2017],{"class":77},[67,84525,84526,84528,84530,84532,84534],{"class":69,"line":17572},[67,84527,62287],{"class":208},[67,84529,51974],{"class":77},[67,84531,1512],{"class":208},[67,84533,52029],{"class":73},[67,84535,2017],{"class":77},[67,84537,84538],{"class":69,"line":17586},[67,84539,2909],{"class":77},[67,84541,84542,84544,84546],{"class":69,"line":17598},[67,84543,52954],{"class":77},[67,84545,779],{"class":51837},[67,84547,51844],{"class":77},[67,84549,84550,84552,84554],{"class":69,"line":17603},[67,84551,52322],{"class":77},[67,84553,51871],{"class":51837},[67,84555,51844],{"class":77},[67,84557,84558],{"class":69,"line":17616},[67,84559,177],{"emptyLinePlaceholder":176},[67,84561,84562,84564,84566],{"class":69,"line":17621},[67,84563,1766],{"class":77},[67,84565,52337],{"class":51837},[67,84567,51844],{"class":77},[67,84569,84570,84572,84574,84576,84578,84580],{"class":69,"line":17626},[67,84571,52681],{"class":77},[67,84573,52148],{"class":51837},[67,84575,54023],{"class":112},[67,84577,909],{"class":77},[67,84579,63145],{"class":84},[67,84581,51844],{"class":77},[67,84583,84584,84586,84588],{"class":69,"line":17631},[67,84585,52954],{"class":77},[67,84587,52148],{"class":51837},[67,84589,51844],{"class":77},[67,84591,84592,84594,84596,84598,84600,84602],{"class":69,"line":17644},[67,84593,52681],{"class":77},[67,84595,52148],{"class":51837},[67,84597,54023],{"class":112},[67,84599,909],{"class":77},[67,84601,63117],{"class":84},[67,84603,51844],{"class":77},[67,84605,84606,84608,84610,84613,84615,84617,84619,84622,84624,84626,84628,84630],{"class":69,"line":17649},[67,84607,51878],{"class":77},[67,84609,52148],{"class":51837},[67,84611,84612],{"class":77},">合计：\u003C",[67,84614,67],{"class":51837},[67,84616,54023],{"class":112},[67,84618,909],{"class":77},[67,84620,84621],{"class":84},"\"amount\"",[67,84623,55851],{"class":77},[67,84625,67],{"class":51837},[67,84627,55851],{"class":77},[67,84629,52148],{"class":51837},[67,84631,51844],{"class":77},[67,84633,84634,84636,84638],{"class":69,"line":33170},[67,84635,52954],{"class":77},[67,84637,52148],{"class":51837},[67,84639,51844],{"class":77},[67,84641,84642,84644,84646],{"class":69,"line":33176},[67,84643,52681],{"class":77},[67,84645,52350],{"class":51837},[67,84647,51844],{"class":77},[67,84649,84650,84652,84654,84656],{"class":69,"line":33182},[67,84651,11939],{"class":73},[67,84653,79914],{"class":208},[67,84655,14282],{"class":73},[67,84657,55984],{"class":77},[67,84659,84660],{"class":69,"line":33188},[67,84661,79923],{"class":77},[67,84663,84664,84666,84668],{"class":69,"line":33194},[67,84665,79928],{"class":77},[67,84667,79931],{"class":84},[67,84669,32003],{"class":77},[67,84671,84672,84674,84676],{"class":69,"line":33205},[67,84673,79938],{"class":77},[67,84675,79941],{"class":84},[67,84677,32003],{"class":77},[67,84679,84680,84682,84685],{"class":69,"line":33211},[67,84681,79948],{"class":77},[67,84683,84684],{"class":208},"289.9",[67,84686,32003],{"class":77},[67,84688,84689,84691,84693],{"class":69,"line":33231},[67,84690,79958],{"class":77},[67,84692,79961],{"class":84},[67,84694,32003],{"class":77},[67,84696,84697,84700,84702],{"class":69,"line":33237},[67,84698,84699],{"class":77},"        count: ",[67,84701,939],{"class":208},[67,84703,32003],{"class":77},[67,84705,84706,84709,84712],{"class":69,"line":33248},[67,84707,84708],{"class":77},"        spec: { color: ",[67,84710,84711],{"class":84},"'白色'",[67,84713,56141],{"class":77},[67,84715,84716],{"class":69,"line":33254},[67,84717,78429],{"class":77},[67,84719,84720],{"class":69,"line":33260},[67,84721,79923],{"class":77},[67,84723,84724,84726,84728],{"class":69,"line":33266},[67,84725,79928],{"class":77},[67,84727,80022],{"class":84},[67,84729,32003],{"class":77},[67,84731,84732,84734,84736],{"class":69,"line":33272},[67,84733,79938],{"class":77},[67,84735,80031],{"class":84},[67,84737,32003],{"class":77},[67,84739,84740,84742,84745],{"class":69,"line":33278},[67,84741,79948],{"class":77},[67,84743,84744],{"class":208},"109.8",[67,84746,32003],{"class":77},[67,84748,84749,84751,84753],{"class":69,"line":33284},[67,84750,79958],{"class":77},[67,84752,80049],{"class":84},[67,84754,32003],{"class":77},[67,84756,84757,84759,84761],{"class":69,"line":33290},[67,84758,84699],{"class":77},[67,84760,933],{"class":208},[67,84762,32003],{"class":77},[67,84764,84765,84768,84770,84772,84774],{"class":69,"line":33310},[67,84766,84767],{"class":77},"        spec: { size: ",[67,84769,82440],{"class":84},[67,84771,56001],{"class":77},[67,84773,82445],{"class":84},[67,84775,56141],{"class":77},[67,84777,84778],{"class":69,"line":33316},[67,84779,78429],{"class":77},[67,84781,84782],{"class":69,"line":33332},[67,84783,79923],{"class":77},[67,84785,84786,84788,84790],{"class":69,"line":33338},[67,84787,79928],{"class":77},[67,84789,80066],{"class":84},[67,84791,32003],{"class":77},[67,84793,84794,84796,84798],{"class":69,"line":33352},[67,84795,79938],{"class":77},[67,84797,80075],{"class":84},[67,84799,32003],{"class":77},[67,84801,84802,84804,84807],{"class":69,"line":33358},[67,84803,79948],{"class":77},[67,84805,84806],{"class":208},"488",[67,84808,32003],{"class":77},[67,84810,84811,84813,84815],{"class":69,"line":33373},[67,84812,79958],{"class":77},[67,84814,80093],{"class":84},[67,84816,32003],{"class":77},[67,84818,84819,84821,84823],{"class":69,"line":33379},[67,84820,84699],{"class":77},[67,84822,1077],{"class":208},[67,84824,32003],{"class":77},[67,84826,84827,84829,84832,84835,84838],{"class":69,"line":33388},[67,84828,84708],{"class":77},[67,84830,84831],{"class":84},"'青色'",[67,84833,84834],{"class":77},", sum: ",[67,84836,84837],{"class":84},"'一大四小'",[67,84839,56141],{"class":77},[67,84841,84842],{"class":69,"line":33394},[67,84843,78429],{"class":77},[67,84845,84846],{"class":69,"line":33403},[67,84847,79923],{"class":77},[67,84849,84850,84852,84854],{"class":69,"line":33409},[67,84851,79928],{"class":77},[67,84853,80110],{"class":84},[67,84855,32003],{"class":77},[67,84857,84858,84860,84862],{"class":69,"line":33415},[67,84859,79938],{"class":77},[67,84861,80119],{"class":84},[67,84863,32003],{"class":77},[67,84865,84866,84868,84871],{"class":69,"line":33424},[67,84867,79948],{"class":77},[67,84869,84870],{"class":208},"139",[67,84872,32003],{"class":77},[67,84874,84875,84877,84879],{"class":69,"line":33430},[67,84876,79958],{"class":77},[67,84878,80137],{"class":84},[67,84880,32003],{"class":77},[67,84882,84883,84885,84887],{"class":69,"line":33441},[67,84884,84699],{"class":77},[67,84886,1077],{"class":208},[67,84888,32003],{"class":77},[67,84890,84891,84893,84896,84898,84901],{"class":69,"line":33447},[67,84892,84767],{"class":77},[67,84894,84895],{"class":84},"'小号'",[67,84897,56001],{"class":77},[67,84899,84900],{"class":84},"'紫色'",[67,84902,56007],{"class":77},[67,84904,84905,84908],{"class":69,"line":33466},[67,84906,84907],{"class":77},"        gift: ",[67,84909,84910],{"class":84},"'50g茶叶,清洗球'\n",[67,84912,84913],{"class":69,"line":33472},[67,84914,52935],{"class":77},[67,84916,84917],{"class":69,"line":33483},[67,84918,53646],{"class":77},[67,84920,84921],{"class":69,"line":33489},[67,84922,84923],{"class":202},"    \u002F\u002F  1.根据数据渲染页面\n",[67,84925,84926,84928,84930,84932,84934,84936,84938,84940,84942,84944,84946,84948],{"class":69,"line":33509},[67,84927,52944],{"class":77},[67,84929,54936],{"class":112},[67,84931,864],{"class":77},[67,84933,80438],{"class":84},[67,84935,74786],{"class":77},[67,84937,909],{"class":73},[67,84939,80585],{"class":77},[67,84941,74581],{"class":112},[67,84943,864],{"class":77},[67,84945,80332],{"class":5935},[67,84947,80335],{"class":73},[67,84949,16289],{"class":77},[67,84951,84952],{"class":69,"line":33525},[67,84953,84954],{"class":202},"      \u002F\u002F 对象解构\n",[67,84956,84957,84959,84961,84963,84965,84967,84969,84972,84974,84976,84978,84981,84983,84986,84988,84990],{"class":69,"line":33531},[67,84958,58765],{"class":73},[67,84960,80344],{"class":77},[67,84962,80357],{"class":208},[67,84964,13153],{"class":77},[67,84966,80347],{"class":208},[67,84968,13153],{"class":77},[67,84970,84971],{"class":208},"count",[67,84973,13153],{"class":77},[67,84975,80352],{"class":208},[67,84977,13153],{"class":77},[67,84979,84980],{"class":208},"spec",[67,84982,13153],{"class":77},[67,84984,84985],{"class":208},"gift",[67,84987,80360],{"class":77},[67,84989,909],{"class":73},[67,84991,80365],{"class":77},[67,84993,84994],{"class":69,"line":33545},[67,84995,84996],{"class":202},"      \u002F\u002F 规格文字模块处理\n",[67,84998,84999,85001,85004,85006,85008,85010,85012,85014,85016,85018],{"class":69,"line":33551},[67,85000,58765],{"class":73},[67,85002,85003],{"class":208}," text",[67,85005,14282],{"class":73},[67,85007,82475],{"class":77},[67,85009,82478],{"class":112},[67,85011,82481],{"class":77},[67,85013,74760],{"class":112},[67,85015,864],{"class":77},[67,85017,82488],{"class":84},[67,85019,870],{"class":77},[67,85021,85022],{"class":69,"line":33557},[67,85023,85024],{"class":202},"      \u002F\u002F 处理赠品模块\n",[67,85026,85027,85029,85031,85033,85036,85038,85040,85042,85044,85047,85049,85051,85053,85055,85057,85060,85062,85065,85067,85069,85071,85073,85075,85077],{"class":69,"line":33568},[67,85028,58765],{"class":73},[67,85030,74456],{"class":208},[67,85032,14282],{"class":73},[67,85034,85035],{"class":77}," gift ",[67,85037,1842],{"class":73},[67,85039,83649],{"class":77},[67,85041,83652],{"class":112},[67,85043,864],{"class":77},[67,85045,85046],{"class":84},"','",[67,85048,31363],{"class":77},[67,85050,74581],{"class":112},[67,85052,864],{"class":77},[67,85054,80332],{"class":5935},[67,85056,80335],{"class":73},[67,85058,85059],{"class":84}," `\u003Cspan class=\"tag\">【赠品】${",[67,85061,80332],{"class":77},[67,85063,85064],{"class":84},"}\u003C\u002Fspan>`",[67,85066,31363],{"class":77},[67,85068,74760],{"class":112},[67,85070,864],{"class":77},[67,85072,74765],{"class":84},[67,85074,14432],{"class":77},[67,85076,1715],{"class":73},[67,85078,70641],{"class":84},[67,85080,85081],{"class":69,"line":33574},[67,85082,85083],{"class":202},"      \u002F\u002F 计算小计模块，保留两位小数,在计算有关小数的问题时，我们要将其转化为整数，然后再除回去，就可以避免小数计算时精度的问题\n",[67,85085,85086,85088,85091,85093,85096,85098,85100,85102,85105,85107,85109,85111,85114,85116,85118],{"class":69,"line":33580},[67,85087,58765],{"class":73},[67,85089,85090],{"class":208}," subtotal",[67,85092,14282],{"class":73},[67,85094,85095],{"class":77}," ((price ",[67,85097,1312],{"class":73},[67,85099,6473],{"class":208},[67,85101,7237],{"class":73},[67,85103,85104],{"class":77}," count) ",[67,85106,1440],{"class":73},[67,85108,6473],{"class":208},[67,85110,31363],{"class":77},[67,85112,85113],{"class":112},"toFixed",[67,85115,864],{"class":77},[67,85117,939],{"class":208},[67,85119,870],{"class":77},[67,85121,85122],{"class":69,"line":33590},[67,85123,177],{"emptyLinePlaceholder":176},[67,85125,85126,85128],{"class":69,"line":33596},[67,85127,74519],{"class":73},[67,85129,70705],{"class":84},[67,85131,85132],{"class":69,"line":33607},[67,85133,85134],{"class":84},"        \u003Cdiv class=\"item\">\n",[67,85136,85137,85140,85142],{"class":69,"line":33613},[67,85138,85139],{"class":84},"          \u003Cimg src=\"${",[67,85141,80357],{"class":77},[67,85143,80389],{"class":84},[67,85145,85146,85149,85151,85154,85156],{"class":69,"line":33623},[67,85147,85148],{"class":84},"          \u003Cp class=\"name\">${",[67,85150,80347],{"class":77},[67,85152,85153],{"class":84},"}${",[67,85155,2026],{"class":77},[67,85157,80399],{"class":84},[67,85159,85160,85163,85165],{"class":69,"line":33628},[67,85161,85162],{"class":84},"          \u003Cp class=\"spec\">${",[67,85164,5906],{"class":77},[67,85166,80399],{"class":84},[67,85168,85169,85172,85174,85176,85178,85180,85182,85184],{"class":69,"line":33634},[67,85170,85171],{"class":84},"          \u003Cp class=\"price\">${",[67,85173,80352],{"class":77},[67,85175,240],{"class":84},[67,85177,85113],{"class":112},[67,85179,864],{"class":84},[67,85181,939],{"class":208},[67,85183,260],{"class":84},[67,85185,80399],{"class":84},[67,85187,85188,85191,85193],{"class":69,"line":33683},[67,85189,85190],{"class":84},"          \u003Cp class=\"count\">x${",[67,85192,84971],{"class":77},[67,85194,80399],{"class":84},[67,85196,85197,85200,85203],{"class":69,"line":33730},[67,85198,85199],{"class":84},"          \u003Cp class=\"sub-total\">${",[67,85201,85202],{"class":77},"subtotal",[67,85204,80399],{"class":84},[67,85206,85207],{"class":69,"line":33735},[67,85208,85209],{"class":84},"        \u003C\u002Fdiv> \n",[67,85211,85212],{"class":69,"line":33741},[67,85213,85214],{"class":84},"             `\n",[67,85216,85217,85220,85222,85224,85226],{"class":69,"line":33760},[67,85218,85219],{"class":77},"    }).",[67,85221,74760],{"class":112},[67,85223,864],{"class":77},[67,85225,74765],{"class":84},[67,85227,870],{"class":77},[67,85229,85230],{"class":69,"line":33766},[67,85231,85232],{"class":202},"    \u002F\u002F 合计模块   prev为累计值   item为当前元素   为了保证精度也先把它转化为整数计算完再变回去\n",[67,85234,85235,85237,85239,85241,85243,85246,85248,85251,85253,85255,85257,85260,85263,85265,85268,85270,85272,85274,85277,85279,85281,85283,85285],{"class":69,"line":33786},[67,85236,11939],{"class":73},[67,85238,63322],{"class":208},[67,85240,14282],{"class":73},[67,85242,80585],{"class":77},[67,85244,85245],{"class":112},"reduce",[67,85247,3098],{"class":77},[67,85249,85250],{"class":5935},"prev",[67,85252,13153],{"class":77},[67,85254,80332],{"class":5935},[67,85256,14432],{"class":77},[67,85258,85259],{"class":73},"=>",[67,85261,85262],{"class":77}," prev ",[67,85264,1338],{"class":73},[67,85266,85267],{"class":77}," (item.price ",[67,85269,1312],{"class":73},[67,85271,6473],{"class":208},[67,85273,7237],{"class":73},[67,85275,85276],{"class":77}," item.count) ",[67,85278,1440],{"class":73},[67,85280,6473],{"class":208},[67,85282,13153],{"class":77},[67,85284,1051],{"class":208},[67,85286,870],{"class":77},[67,85288,85289,85291,85293,85295,85298,85300,85302,85305,85307,85309,85311],{"class":69,"line":33792},[67,85290,52944],{"class":77},[67,85292,54936],{"class":112},[67,85294,864],{"class":77},[67,85296,85297],{"class":84},"'.amount'",[67,85299,74786],{"class":77},[67,85301,909],{"class":73},[67,85303,85304],{"class":77}," total.",[67,85306,85113],{"class":112},[67,85308,864],{"class":77},[67,85310,939],{"class":208},[67,85312,870],{"class":77},[67,85314,85315,85317,85319],{"class":69,"line":33798},[67,85316,52954],{"class":77},[67,85318,52350],{"class":51837},[67,85320,51844],{"class":77},[67,85322,85323,85325,85327],{"class":69,"line":33808},[67,85324,52322],{"class":77},[67,85326,52337],{"class":51837},[67,85328,51844],{"class":77},[67,85330,85331],{"class":69,"line":33813},[67,85332,177],{"emptyLinePlaceholder":176},[67,85334,85335,85337,85339],{"class":69,"line":33819},[67,85336,52322],{"class":77},[67,85338,51172],{"class":51837},[67,85340,51844],{"class":77},[803,85342,85344],{"id":85343},"_411-编程思想","4.11 编程思想",[14,85346,85348],{"id":85347},"_4111-面向过程介绍","4.11.1 面向过程介绍",[19,85350,85351,85354],{},[336,85352,85353],{},"面向过程"," 就是分析出解决问题所需要的步骤，然后用函数把这些步骤一步一步实现，使用的时候再一个一个的依次",[19,85356,85357],{},"调用就可以了",[19,85359,85360],{},[725,85361],{"alt":62,"src":85362},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-278.png",[14,85364,85366],{"id":85365},"_4112-面向对象","4.11.2 面向对象",[19,85368,85369],{},"面向对象编程具有灵活、代码可复用、容易维护和开发的优点，更适合多人合作的大型软件项目",[19,85371,85372],{},[725,85373],{"alt":62,"src":85374},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-279.png",[19,85376,85377],{},"面向对象的特性：",[1863,85379,85380,85383,85386],{},[818,85381,85382],{},"封装性",[818,85384,85385],{},"继承性",[818,85387,85388],{},"多态性",[14,85390,85392],{"id":85391},"_4113-两者比较","4.11.3 两者比较",[19,85394,85395],{},[725,85396],{"alt":62,"src":85397},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-280.png",[803,85399,85401],{"id":85400},"_412-构造函数回顾","4.12 构造函数回顾",[19,85403,85404],{},[725,85405],{"alt":62,"src":85406},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-281.png",[19,85408,85409],{},[725,85410],{"alt":62,"src":85411},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-282.png",[19,85413,85414],{},"构造函数在进行实例化创建对象的时候，会先创建一个空的对象，这个空的对象，属性和方法存在堆里，栈里存放存放堆里内容的地址，然后构造函数的this指向新对象；执行构造函数代码，修改this，添加新的属性；返回新对象，这样导致了一个问题，相同的方法在各自的堆里都存了一下，导致了内存的浪费问题",[19,85416,85417],{},[725,85418],{"alt":62,"src":85419},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-283.png",[803,85421,85423],{"id":85422},"_413-原型","4.13 原型",[14,85425,85427],{"id":85426},"_4131-原型对象的认识","4.13.1 原型对象的认识",[19,85429,85430],{},"可以解决构造函数有时导致内存浪费问题，实现方法共享",[19,85432,85433],{},[725,85434],{"alt":62,"src":85435},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-284.png",[19,85437,85438],{},[725,85439],{"alt":62,"src":85440},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-285.png",[19,85442,85443],{},"原型是构造函数的属性，它也是一个对象",[19,85445,85446],{},"公共的属性写在构造函数里边，因为这个属性一会在实例化的时候会赋值",[19,85448,85449],{},"公共的方法写在原型对象身上，这样就可以一起使用了",[57,85451,85453],{"className":53604,"code":85452,"language":53606,"meta":62,"style":62},"\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",[64,85454,85455,85463,85468,85476,85481,85486,85491,85496,85501,85505,85509,85513,85518,85523,85527,85532,85537,85542,85547,85552,85556,85564],{"__ignoreMap":62},[67,85456,85457,85459,85461],{"class":69,"line":70},[67,85458,1766],{"class":77},[67,85460,52337],{"class":51837},[67,85462,51844],{"class":77},[67,85464,85465],{"class":69,"line":143},[67,85466,85467],{"class":202},"  \u003C!-- 构造函数  公共的属性和方法  封装到构造函数里面了 -->\n",[67,85469,85470,85472,85474],{"class":69,"line":149},[67,85471,52681],{"class":77},[67,85473,52350],{"class":51837},[67,85475,51844],{"class":77},[67,85477,85478],{"class":69,"line":155},[67,85479,85480],{"class":77},"    function Star(uname, age) {\n",[67,85482,85483],{"class":69,"line":161},[67,85484,85485],{"class":77},"      this.uname = uname,\n",[67,85487,85488],{"class":69,"line":167},[67,85489,85490],{"class":77},"        this.age = age\n",[67,85492,85493],{"class":69,"line":173},[67,85494,85495],{"class":77},"      \u002F\u002F this.sing = function () {\n",[67,85497,85498],{"class":69,"line":180},[67,85499,85500],{"class":77},"      \u002F\u002F   console.log('唱歌')\n",[67,85502,85503],{"class":69,"line":186},[67,85504,177],{"emptyLinePlaceholder":176},[67,85506,85507],{"class":69,"line":444},[67,85508,60574],{"class":77},[67,85510,85511],{"class":69,"line":2335},[67,85512,2909],{"class":77},[67,85514,85515],{"class":69,"line":2340},[67,85516,85517],{"class":77},"    Star.prototype.sing = function () {\n",[67,85519,85520],{"class":69,"line":2346},[67,85521,85522],{"class":77},"      console.log('唱歌')\n",[67,85524,85525],{"class":69,"line":2351},[67,85526,2909],{"class":77},[67,85528,85529],{"class":69,"line":2365},[67,85530,85531],{"class":77},"    \u002F\u002F console.dir(Star.prototype)\n",[67,85533,85534],{"class":69,"line":2370},[67,85535,85536],{"class":77},"    const pink = new Star('pink', 18)\n",[67,85538,85539],{"class":69,"line":2376},[67,85540,85541],{"class":77},"    const red = new Star('red', 20)\n",[67,85543,85544],{"class":69,"line":2397},[67,85545,85546],{"class":77},"    pink.sing()\n",[67,85548,85549],{"class":69,"line":2402},[67,85550,85551],{"class":77},"    console.log(pink.sing = red.sing)   \u002F\u002F如果不使用圆型对象就是false，使用之后就是true,现在是true\n",[67,85553,85554],{"class":69,"line":2416},[67,85555,177],{"emptyLinePlaceholder":176},[67,85557,85558,85560,85562],{"class":69,"line":2421},[67,85559,52954],{"class":77},[67,85561,52350],{"class":51837},[67,85563,51844],{"class":77},[67,85565,85566,85568,85570],{"class":69,"line":2450},[67,85567,52322],{"class":77},[67,85569,52337],{"class":51837},[67,85571,51844],{"class":77},[19,85573,85574],{},[725,85575],{"alt":62,"src":85576},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-286.png",[57,85578,85580],{"className":53604,"code":85579,"language":53606,"meta":62,"style":62},"\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",[64,85581,85582,85590,85598,85603,85608,85613,85618,85622,85627,85632,85637,85641,85646,85650,85654,85659,85663,85671],{"__ignoreMap":62},[67,85583,85584,85586,85588],{"class":69,"line":70},[67,85585,1766],{"class":77},[67,85587,52337],{"class":51837},[67,85589,51844],{"class":77},[67,85591,85592,85594,85596],{"class":69,"line":143},[67,85593,52681],{"class":77},[67,85595,52350],{"class":51837},[67,85597,51844],{"class":77},[67,85599,85600],{"class":69,"line":149},[67,85601,85602],{"class":77},"    let that\n",[67,85604,85605],{"class":69,"line":155},[67,85606,85607],{"class":77},"    function Star(uname) {\n",[67,85609,85610],{"class":69,"line":161},[67,85611,85612],{"class":77},"      this.uname = uname\n",[67,85614,85615],{"class":69,"line":167},[67,85616,85617],{"class":77},"      that = this\n",[67,85619,85620],{"class":69,"line":173},[67,85621,2909],{"class":77},[67,85623,85624],{"class":69,"line":180},[67,85625,85626],{"class":77},"    \u002F\u002F 实例对象是 ldh\n",[67,85628,85629],{"class":69,"line":186},[67,85630,85631],{"class":77},"    const ldh = new Star('刘德华')\n",[67,85633,85634],{"class":69,"line":444},[67,85635,85636],{"class":77},"    console.log(that === ldh)    \u002F\u002Ftrue   说明构造函数里的this就是实例对象\n",[67,85638,85639],{"class":69,"line":2335},[67,85640,177],{"emptyLinePlaceholder":176},[67,85642,85643],{"class":69,"line":2340},[67,85644,85645],{"class":77},"    Star.sing = function () {\n",[67,85647,85648],{"class":69,"line":2346},[67,85649,85522],{"class":77},[67,85651,85652],{"class":69,"line":2351},[67,85653,2909],{"class":77},[67,85655,85656],{"class":69,"line":2365},[67,85657,85658],{"class":77},"    ldh.sing()    \u002F\u002F原型对象里的函数this指向的也是实例对象\n",[67,85660,85661],{"class":69,"line":2370},[67,85662,177],{"emptyLinePlaceholder":176},[67,85664,85665,85667,85669],{"class":69,"line":2376},[67,85666,52954],{"class":77},[67,85668,52350],{"class":51837},[67,85670,51844],{"class":77},[67,85672,85673,85675,85677],{"class":69,"line":2397},[67,85674,52322],{"class":77},[67,85676,52337],{"class":51837},[67,85678,51844],{"class":77},[19,85680,85681],{},"构造函数的this指向的是实例对象；",[19,85683,85684],{},"原型对象的this指向的也是实例对象（因为是实例对象去调用这个方法）",[14,85686,85688],{"id":85687},"_4132-数组扩展方法","4.13.2 数组扩展方法",[19,85690,85691],{},[725,85692],{"alt":62,"src":85693},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-287.png",[57,85695,85697],{"className":53604,"code":85696,"language":53606,"meta":62,"style":62},"\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",[64,85698,85699,85707,85715,85720,85725,85730,85735,85740,85745,85750,85755,85760,85765,85769,85774,85779,85784,85789,85793,85798,85803,85808,85813,85817,85822,85827,85832,85837,85841,85846,85850,85858],{"__ignoreMap":62},[67,85700,85701,85703,85705],{"class":69,"line":70},[67,85702,1766],{"class":77},[67,85704,52337],{"class":51837},[67,85706,51844],{"class":77},[67,85708,85709,85711,85713],{"class":69,"line":143},[67,85710,52681],{"class":77},[67,85712,52350],{"class":51837},[67,85714,51844],{"class":77},[67,85716,85717],{"class":69,"line":149},[67,85718,85719],{"class":77},"    \u002F\u002F 注意数组不可以直接用min和max求最值\n",[67,85721,85722],{"class":69,"line":155},[67,85723,85724],{"class":77},"    const arr = [1, 2, 3]\n",[67,85726,85727],{"class":69,"line":161},[67,85728,85729],{"class":77},"    \u002F\u002F 自己定义数组的扩展方法\n",[67,85731,85732],{"class":69,"line":167},[67,85733,85734],{"class":77},"    \u002F\u002F 1.我们定义的这个方法，任何一个数组实例对象都可以使用\n",[67,85736,85737],{"class":69,"line":173},[67,85738,85739],{"class":77},"    \u002F\u002F 2.自定义的方法写到prototype身上\n",[67,85741,85742],{"class":69,"line":180},[67,85743,85744],{"class":77},"    \u002F\u002F ①.最大值\n",[67,85746,85747],{"class":69,"line":186},[67,85748,85749],{"class":77},"    Array.prototype.max = function () {\n",[67,85751,85752],{"class":69,"line":444},[67,85753,85754],{"class":77},"      \u002F\u002F 使用展开运算符,这里不是剩余运算符   ...为展开运算符\n",[67,85756,85757],{"class":69,"line":2335},[67,85758,85759],{"class":77},"      return Math.max(...this)\n",[67,85761,85762],{"class":69,"line":2340},[67,85763,85764],{"class":77},"      \u002F\u002F 原型对象中函数的this指向的是实例对象   这里指向的是arr\n",[67,85766,85767],{"class":69,"line":2346},[67,85768,2909],{"class":77},[67,85770,85771],{"class":69,"line":2351},[67,85772,85773],{"class":77},"    console.log(arr.max())\n",[67,85775,85776],{"class":69,"line":2365},[67,85777,85778],{"class":77},"    \u002F\u002F ②最小值\n",[67,85780,85781],{"class":69,"line":2370},[67,85782,85783],{"class":77},"    Array.prototype.min = function () {\n",[67,85785,85786],{"class":69,"line":2376},[67,85787,85788],{"class":77},"      return Math.min(...this)\n",[67,85790,85791],{"class":69,"line":2397},[67,85792,2909],{"class":77},[67,85794,85795],{"class":69,"line":2402},[67,85796,85797],{"class":77},"    console.log(arr.min())\n",[67,85799,85800],{"class":69,"line":2416},[67,85801,85802],{"class":77},"    \u002F\u002F③求和\n",[67,85804,85805],{"class":69,"line":2421},[67,85806,85807],{"class":77},"    Array.prototype.sum = function () {\n",[67,85809,85810],{"class":69,"line":2450},[67,85811,85812],{"class":77},"      return this.reduce((prev, current) => prev + current, 0)\n",[67,85814,85815],{"class":69,"line":2455},[67,85816,2909],{"class":77},[67,85818,85819],{"class":69,"line":2472},[67,85820,85821],{"class":77},"    console.log(arr.sum())\n",[67,85823,85824],{"class":69,"line":2477},[67,85825,85826],{"class":77},"    \u002F\u002F ③排序\n",[67,85828,85829],{"class":69,"line":2482},[67,85830,85831],{"class":77},"    Array.prototype.rever = function () {\n",[67,85833,85834],{"class":69,"line":2487},[67,85835,85836],{"class":77},"      return this.reverse()\n",[67,85838,85839],{"class":69,"line":2501},[67,85840,2909],{"class":77},[67,85842,85843],{"class":69,"line":2506},[67,85844,85845],{"class":77},"    console.log(arr.rever())\n",[67,85847,85848],{"class":69,"line":3298},[67,85849,177],{"emptyLinePlaceholder":176},[67,85851,85852,85854,85856],{"class":69,"line":3312},[67,85853,52954],{"class":77},[67,85855,52350],{"class":51837},[67,85857,51844],{"class":77},[67,85859,85860,85862,85864],{"class":69,"line":3320},[67,85861,52322],{"class":77},[67,85863,52337],{"class":51837},[67,85865,51844],{"class":77},[19,85867,85868],{},[725,85869],{"alt":62,"src":85870},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-288.png",[14,85872,85874],{"id":85873},"_4133-constructor-属性","4.13.3 constructor 属性",[19,85876,85877],{},"每个原型对象里面都有个constructor 属性（constructor 构造函数）",[19,85879,85880],{},[725,85881],{"alt":62,"src":85882},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-289.png",[57,85884,85886],{"className":53604,"code":85885,"language":53606,"meta":62,"style":62},"\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",[64,85887,85888,85896,85904,85909,85914,85918,85923,85928,85933,85941],{"__ignoreMap":62},[67,85889,85890,85892,85894],{"class":69,"line":70},[67,85891,1766],{"class":77},[67,85893,52337],{"class":51837},[67,85895,51844],{"class":77},[67,85897,85898,85900,85902],{"class":69,"line":143},[67,85899,52681],{"class":77},[67,85901,52350],{"class":51837},[67,85903,51844],{"class":77},[67,85905,85906],{"class":69,"line":149},[67,85907,85908],{"class":77},"    \u002F\u002Fconstructor   单词是构造函数的意思\n",[67,85910,85911],{"class":69,"line":155},[67,85912,85913],{"class":77},"    function Star() {\n",[67,85915,85916],{"class":69,"line":161},[67,85917,2909],{"class":77},[67,85919,85920],{"class":69,"line":167},[67,85921,85922],{"class":77},"    const ldh = new Star()\n",[67,85924,85925],{"class":69,"line":173},[67,85926,85927],{"class":77},"    console.log(Star.prototype)\n",[67,85929,85930],{"class":69,"line":180},[67,85931,85932],{"class":77},"    console.log(Star.prototype.constructor === Star)\n",[67,85934,85935,85937,85939],{"class":69,"line":186},[67,85936,52954],{"class":77},[67,85938,52350],{"class":51837},[67,85940,51844],{"class":77},[67,85942,85943,85945,85947],{"class":69,"line":444},[67,85944,52322],{"class":77},[67,85946,52337],{"class":51837},[67,85948,51844],{"class":77},[19,85950,85951],{},[725,85952],{"alt":62,"src":85953},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-290.png",[19,85955,85956],{},"问题：如果很多的公共方法的话,那么要写太多了,较为繁琐,所以我们考虑将这些方法塞一个对象中，例：",[57,85958,85960],{"className":53604,"code":85959,"language":53606,"meta":62,"style":62},"  \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",[64,85961,85962,85970,85974,85978,85982,85987,85992,85997,86001,86006,86011,86016,86021,86026,86031,86035,86039,86044,86049,86054,86058,86063,86068,86072,86076,86080],{"__ignoreMap":62},[67,85963,85964,85966,85968],{"class":69,"line":70},[67,85965,52681],{"class":77},[67,85967,52350],{"class":51837},[67,85969,51844],{"class":77},[67,85971,85972],{"class":69,"line":143},[67,85973,85908],{"class":77},[67,85975,85976],{"class":69,"line":149},[67,85977,85913],{"class":77},[67,85979,85980],{"class":69,"line":155},[67,85981,2909],{"class":77},[67,85983,85984],{"class":69,"line":161},[67,85985,85986],{"class":77},"    \u002F\u002F const ldh = new Star()\n",[67,85988,85989],{"class":69,"line":167},[67,85990,85991],{"class":77},"    \u002F\u002F console.log(Star.prototype)\n",[67,85993,85994],{"class":69,"line":173},[67,85995,85996],{"class":77},"    \u002F\u002F console.log(Star.prototype.constructor === Star)\n",[67,85998,85999],{"class":69,"line":180},[67,86000,177],{"emptyLinePlaceholder":176},[67,86002,86003],{"class":69,"line":186},[67,86004,86005],{"class":77},"    \u002F\u002F 如果很多的公共方法的话,那么要写太多了,较为繁琐\n",[67,86007,86008],{"class":69,"line":444},[67,86009,86010],{"class":77},"    \u002F\u002F Star.prototype.sing = function () {\n",[67,86012,86013],{"class":69,"line":2335},[67,86014,86015],{"class":77},"    \u002F\u002F   console.log('唱歌')\n",[67,86017,86018],{"class":69,"line":2340},[67,86019,86020],{"class":77},"    \u002F\u002F }\n",[67,86022,86023],{"class":69,"line":2346},[67,86024,86025],{"class":77},"    \u002F\u002F Star.prototype.dance = function () {\n",[67,86027,86028],{"class":69,"line":2351},[67,86029,86030],{"class":77},"    \u002F\u002F   console.log('跳舞')\n",[67,86032,86033],{"class":69,"line":2365},[67,86034,86020],{"class":77},[67,86036,86037],{"class":69,"line":2370},[67,86038,85927],{"class":77},[67,86040,86041],{"class":69,"line":2376},[67,86042,86043],{"class":77},"    Star.prototype = {\n",[67,86045,86046],{"class":69,"line":2397},[67,86047,86048],{"class":77},"      sing: function () {\n",[67,86050,86051],{"class":69,"line":2402},[67,86052,86053],{"class":77},"        console.log('唱歌')\n",[67,86055,86056],{"class":69,"line":2416},[67,86057,78429],{"class":77},[67,86059,86060],{"class":69,"line":2421},[67,86061,86062],{"class":77},"      dance: function () {\n",[67,86064,86065],{"class":69,"line":2450},[67,86066,86067],{"class":77},"        console.log('跳舞')\n",[67,86069,86070],{"class":69,"line":2455},[67,86071,52935],{"class":77},[67,86073,86074],{"class":69,"line":2472},[67,86075,2909],{"class":77},[67,86077,86078],{"class":69,"line":2477},[67,86079,85927],{"class":77},[67,86081,86082,86084,86086],{"class":69,"line":2482},[67,86083,52954],{"class":77},[67,86085,52350],{"class":51837},[67,86087,51844],{"class":77},[19,86089,86090],{},"进行输出结果后会发现：",[19,86092,86093],{},[725,86094],{"alt":62,"src":86095},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-291.png",[19,86097,86098],{},"将方法塞进这个原型对象中，打印后没有constructor，也就是说这个原型对象是谁的不知道了，因为这里进行了赋值操作，把以前的内容直接给覆盖了，赋值把以前的原型对象给覆盖了，指向了现在自己创建的这个对象了",[19,86100,86101],{},"所以，要重新指回创造这个原型对象的构造函数",[57,86103,86105],{"className":71750,"code":86104,"language":71752,"meta":62,"style":62},"Star.prototype = {\n\u002F\u002F 要重新指回创造这个原型对象的构造函数\n  constructor: Star,\n  sing: function () {\n    console.log('唱歌')\n   },\n   dance: function () {\n     console.log('跳舞')\n   }\n}\n",[64,86106,86107,86121,86126,86131,86142,86155,86160,86171,86185,86189],{"__ignoreMap":62},[67,86108,86109,86112,86114,86117,86119],{"class":69,"line":70},[67,86110,86111],{"class":208},"Star",[67,86113,240],{"class":77},[67,86115,86116],{"class":208},"prototype",[67,86118,14282],{"class":73},[67,86120,16289],{"class":77},[67,86122,86123],{"class":69,"line":143},[67,86124,86125],{"class":202},"\u002F\u002F 要重新指回创造这个原型对象的构造函数\n",[67,86127,86128],{"class":69,"line":149},[67,86129,86130],{"class":77},"  constructor: Star,\n",[67,86132,86133,86136,86138,86140],{"class":69,"line":155},[67,86134,86135],{"class":112},"  sing",[67,86137,51974],{"class":77},[67,86139,54986],{"class":73},[67,86141,54989],{"class":77},[67,86143,86144,86146,86148,86150,86153],{"class":69,"line":161},[67,86145,74290],{"class":77},[67,86147,58784],{"class":112},[67,86149,864],{"class":77},[67,86151,86152],{"class":84},"'唱歌'",[67,86154,870],{"class":77},[67,86156,86157],{"class":69,"line":167},[67,86158,86159],{"class":77},"   },\n",[67,86161,86162,86165,86167,86169],{"class":69,"line":173},[67,86163,86164],{"class":112},"   dance",[67,86166,51974],{"class":77},[67,86168,54986],{"class":73},[67,86170,54989],{"class":77},[67,86172,86173,86176,86178,86180,86183],{"class":69,"line":180},[67,86174,86175],{"class":77},"     console.",[67,86177,58784],{"class":112},[67,86179,864],{"class":77},[67,86181,86182],{"class":84},"'跳舞'",[67,86184,870],{"class":77},[67,86186,86187],{"class":69,"line":186},[67,86188,5028],{"class":77},[67,86190,86191],{"class":69,"line":444},[67,86192,2288],{"class":77},[19,86194,86195],{},[725,86196],{"alt":62,"src":86197},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-292.png",[19,86199,86200],{},"总结1：",[19,86202,86203],{},"如果有多个对象的方法，我们可以给原型对象采取对象形式赋值，但是这样就会覆盖构造函数原型对象原来的内容，这样修改后的原型对象 constructor 就不再指向当前构造函数了",[19,86205,86206],{},"此时，我们可以在修改后的原型对象中，添加一个 constructor 指向原来的构造函数",[19,86208,86209],{},"constructor指的是他的来源",[19,86211,86212],{},[725,86213],{"alt":62,"src":86214},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-293.png",[19,86216,86217],{},[725,86218],{"alt":62,"src":86219},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-294.png",[19,86221,86222],{},"总结2：",[19,86224,86225],{},[725,86226],{"alt":62,"src":86227},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-295.png",[19,86229,86230],{},[725,86231],{"alt":62,"src":86232},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-296.png",[19,86234,86235],{},[725,86236],{"alt":62,"src":86237},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-297.png",[14,86239,86241],{"id":86240},"_4134-对象原型","4.13.4 对象原型",[19,86243,86244],{},"解释实例对象可以访问原型对象里边的方法的问题（解释实例对象如何拿到方法的问题）",[19,86246,86247],{},"对象原型就是__proto__这个属性",[19,86249,86250],{},[725,86251],{"alt":62,"src":86252},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-298.png",[19,86254,86255],{},[725,86256],{"alt":62,"src":86257},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-299.png",[19,86259,86260],{},[725,86261],{"alt":62,"src":86262},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-300.png",[19,86264,86265],{},[725,86266],{"alt":62,"src":86267},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-301.png",[57,86269,86271],{"className":53604,"code":86270,"language":53606,"meta":62,"style":62},"\u003Cbody>\n  \u003Cscript>\n    function Star() {\n    }\n    const ldh = new Star()\n    console.log(ldh)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[64,86272,86273,86281,86289,86293,86297,86301,86306,86314],{"__ignoreMap":62},[67,86274,86275,86277,86279],{"class":69,"line":70},[67,86276,1766],{"class":77},[67,86278,52337],{"class":51837},[67,86280,51844],{"class":77},[67,86282,86283,86285,86287],{"class":69,"line":143},[67,86284,52681],{"class":77},[67,86286,52350],{"class":51837},[67,86288,51844],{"class":77},[67,86290,86291],{"class":69,"line":149},[67,86292,85913],{"class":77},[67,86294,86295],{"class":69,"line":155},[67,86296,2909],{"class":77},[67,86298,86299],{"class":69,"line":161},[67,86300,85922],{"class":77},[67,86302,86303],{"class":69,"line":167},[67,86304,86305],{"class":77},"    console.log(ldh)\n",[67,86307,86308,86310,86312],{"class":69,"line":173},[67,86309,52954],{"class":77},[67,86311,52350],{"class":51837},[67,86313,51844],{"class":77},[67,86315,86316,86318,86320],{"class":69,"line":180},[67,86317,52322],{"class":77},[67,86319,52337],{"class":51837},[67,86321,51844],{"class":77},[19,86323,86324],{},"__proto__是非标准属性，在浏览器中的写法可能不同，下面是谷歌浏览器的表示方法，最新的浏览器基本上都是使用的下面这种方式，就理解为两个是相同的就可以，这个是只读的，不可以进行修改",[19,86326,86327],{},"原型对象中[[Prototype]]只是现在大部分浏览器对对象原型的展示，以前浏览器使用的是__proto__，但是要访问这个原型对象的话，还是得使用__proto__",[19,86329,86330],{},[725,86331],{"alt":62,"src":86332},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-302.png",[19,86334,86335],{},"理解总结: 对象原型__proto__指向该构造函数的原型对象",[19,86337,86338],{},"对象原型指向原型对象",[19,86340,86341],{},[725,86342],{"alt":62,"src":86343},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-303.png",[19,86345,86346],{},[725,86347],{"alt":62,"src":86348},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-304.png",[19,86350,86351],{},[725,86352],{"alt":62,"src":86353},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-305.png",[14,86355,86357],{"id":86356},"_4135-构造函数对象原型和原型对象总结","4.13.5 构造函数，对象原型和原型对象总结",[19,86359,86360],{},[725,86361],{"alt":62,"src":86362},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-306.png",[815,86364,86365,86368,86371,86374],{},[818,86366,86367],{},"构造函数通过new的形式实例化得到实例对象",[818,86369,86370],{},"每一个实例对象中都有一个__proto__属性，这个属性中有constructor属性，指向构造函数",[818,86372,86373],{},"构造函数公共的属性和方法放在原型对象中，这个原型对象（prototype）是构造函数本身的一个属性，它指向的是一个对象。只要创建一个构造函数就会自动产生一个原型对象。原型对象属于构造函数，构造函数通过prototype引用它，原型对象有一个constructor属性，指回构造函数",[818,86375,86376],{},"每个实例对象的__proto__属性都会指向原型对象（prototype）",[19,86378,86379],{},[725,86380],{"alt":62,"src":86381},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-307.png",[19,86383,86384],{},"题目梳理：",[19,86386,86387],{},[725,86388],{"alt":62,"src":86389},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-308.png",[14,86391,86393],{"id":86392},"_4136-原型继承","4.13.6 原型继承",[19,86395,86396],{},[725,86397],{"alt":62,"src":86398},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-309.png",[19,86400,86401],{},[725,86402],{"alt":62,"src":86403},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-310.png",[19,86405,86406],{},[725,86407],{"alt":62,"src":86408},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-311.png",[19,86410,86411],{},[725,86412],{"alt":62,"src":86413},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-312.png",[19,86415,86416],{},[725,86417],{"alt":62,"src":86418},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-313.png",[19,86420,86421],{},[725,86422],{"alt":62,"src":86423},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-314.png",[19,86425,86426],{},[725,86427],{"alt":62,"src":86428},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-315.png",[19,86430,86431],{},[725,86432],{"alt":62,"src":86433},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-316.png",[19,86435,86436],{},"回顾：构造函数每次new得到对象都是不同的",[14,86438,86440],{"id":86439},"_4137-原型链","4.13.7 原型链",[19,86442,86443],{},[725,86444],{"alt":62,"src":86445},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-317.png",[19,86447,86448],{},"只要是对象就有对象原型，它可以通过__proto__属性来访问原型对象，获取公共的属性和方法，然后每个原型对象都会有一个[[prototype]]，它是个指针，用来查看它自己的原型对象的信息，然后会提供一个__proto__的属性以供对象原型来访问，__proto__这个属性就理解为是对象原型，这个对象原型就在对象实例中。其实__proto__就是浏览器给开发者的接口，用来访问[[prototype]]",[19,86450,86451],{},"对象原型指向原型对象，这个原型对象本身就含有对象原型，因为所有对象都有一个对象原型__proto__，所以这个原型对象可以通过它内部的对象原型__proto__指向他自己的原型对象",[19,86453,86454],{},"大哥是Object",[19,86456,86457],{},[725,86458],{"alt":62,"src":86459},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-318.png",[19,86461,86462],{},[725,86463],{"alt":62,"src":86464},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-319.png",[19,86466,86467],{},"ldh属于构造函数的，由这个构造函数构成的，只要是在这个链上就是true",[19,86469,86470],{},"万物皆对象",[14,86472,86474],{"id":86473},"_4138-消息提示对象封装","4.13.8 消息提示对象封装",[19,86476,86477],{},"模态框",[19,86479,86480],{},"以后遇见这个效果直接使用这个就行",[19,86482,86483],{},[725,86484],{"alt":62,"src":86485},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-320.png",[19,86487,86488],{},[725,86489],{"alt":62,"src":86490},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-321.png",[19,86492,86493],{},[725,86494],{"alt":62,"src":86495},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-322.png",[19,86497,86498],{},[725,86499],{"alt":62,"src":86500},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-323.png",[19,86502,86503],{},"补充知识点：",[815,86505,86506],{},[818,86507,86508],{},"append()",[19,86510,86511],{},[725,86512],{"alt":62,"src":86513},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-324.png",[57,86515,86517],{"className":51170,"code":86516,"language":51172,"meta":62,"style":62},"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",[64,86518,86519,86524,86529,86534,86538,86542,86546,86551,86556,86561,86565],{"__ignoreMap":62},[67,86520,86521],{"class":69,"line":70},[67,86522,86523],{"class":77},"append(param1)\n",[67,86525,86526],{"class":69,"line":143},[67,86527,86528],{"class":77},"append(param1, param2)\n",[67,86530,86531],{"class":69,"line":149},[67,86532,86533],{"class":77},"append(param1, param2, \u002F* …, *\u002F paramN)\n",[67,86535,86536],{"class":69,"line":155},[67,86537,177],{"emptyLinePlaceholder":176},[67,86539,86540],{"class":69,"line":161},[67,86541,177],{"emptyLinePlaceholder":176},[67,86543,86544],{"class":69,"line":167},[67,86545,177],{"emptyLinePlaceholder":176},[67,86547,86548],{"class":69,"line":173},[67,86549,86550],{"class":77},"let div = document.createElement(\"div\");\n",[67,86552,86553],{"class":69,"line":180},[67,86554,86555],{"class":77},"let p = document.createElement(\"p\");\n",[67,86557,86558],{"class":69,"line":186},[67,86559,86560],{"class":77},"div.append(p);\n",[67,86562,86563],{"class":69,"line":444},[67,86564,177],{"emptyLinePlaceholder":176},[67,86566,86567,86570,86572],{"class":69,"line":2335},[67,86568,86569],{"class":77},"console.log(div.childNodes); \u002F\u002F NodeList [ \u003C",[67,86571,19],{"class":51837},[67,86573,86574],{"class":77},"> ]\n",[815,86576,86577],{"start":143},[818,86578,86579],{},"remove()",[19,86581,86582],{},"自己删自己",[19,86584,86585],{},[725,86586],{"alt":62,"src":86587},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-325.png",[57,86589,86591],{"className":51170,"code":86590,"language":51172,"meta":62,"style":62},"\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",[64,86592,86593,86603,86617,86621,86629,86643,86663,86675,86683,86690,86702,86715,86750,86762,86773,86785,86797,86809,86836,86846,86850,86854,86863,86875,86889,86899,86911,86915,86919,86929,86940,86950,86960,86973,86986,86996,87000,87004,87013,87023,87035,87039,87043,87052,87062,87072,87084,87088,87092,87102,87118,87129,87139,87149,87161,87173,87185,87189,87193,87206,87217,87221,87229,87237,87241,87249,87269,87289,87297,87302,87328,87333,87338,87357,87362,87374,87379,87390,87400,87410,87415,87420,87424,87429,87434,87439,87459,87464,87484,87489,87503,87508,87513,87518,87534,87538,87543,87572,87577,87582,87587,87598,87602,87606,87610,87615,87640,87645,87670,87675,87684,87688,87693,87718,87722,87747,87751,87760,87764,87769,87787,87797,87801,87809,87817,87821],{"__ignoreMap":62},[67,86594,86595,86597,86599,86601],{"class":69,"line":70},[67,86596,51834],{"class":77},[67,86598,51838],{"class":51837},[67,86600,51841],{"class":112},[67,86602,51844],{"class":77},[67,86604,86605,86607,86609,86611,86613,86615],{"class":69,"line":143},[67,86606,1766],{"class":77},[67,86608,51172],{"class":51837},[67,86610,51853],{"class":112},[67,86612,909],{"class":77},[67,86614,51858],{"class":84},[67,86616,51844],{"class":77},[67,86618,86619],{"class":69,"line":149},[67,86620,177],{"emptyLinePlaceholder":176},[67,86622,86623,86625,86627],{"class":69,"line":155},[67,86624,1766],{"class":77},[67,86626,51871],{"class":51837},[67,86628,51844],{"class":77},[67,86630,86631,86633,86635,86637,86639,86641],{"class":69,"line":161},[67,86632,52681],{"class":77},[67,86634,51881],{"class":51837},[67,86636,51884],{"class":112},[67,86638,909],{"class":77},[67,86640,51889],{"class":84},[67,86642,51844],{"class":77},[67,86644,86645,86647,86649,86651,86653,86655,86657,86659,86661],{"class":69,"line":167},[67,86646,52681],{"class":77},[67,86648,51881],{"class":51837},[67,86650,15637],{"class":112},[67,86652,909],{"class":77},[67,86654,51928],{"class":84},[67,86656,51908],{"class":112},[67,86658,909],{"class":77},[67,86660,51935],{"class":84},[67,86662,51844],{"class":77},[67,86664,86665,86667,86669,86671,86673],{"class":69,"line":173},[67,86666,52681],{"class":77},[67,86668,51944],{"class":51837},[67,86670,51947],{"class":77},[67,86672,51944],{"class":51837},[67,86674,51844],{"class":77},[67,86676,86677,86679,86681],{"class":69,"line":180},[67,86678,52681],{"class":77},[67,86680,779],{"class":51837},[67,86682,51844],{"class":77},[67,86684,86685,86688],{"class":69,"line":186},[67,86686,86687],{"class":112},"    .modal",[67,86689,16289],{"class":77},[67,86691,86692,86694,86696,86698,86700],{"class":69,"line":444},[67,86693,55308],{"class":208},[67,86695,51974],{"class":77},[67,86697,4693],{"class":208},[67,86699,52029],{"class":73},[67,86701,2017],{"class":77},[67,86703,86704,86707,86709,86711,86713],{"class":69,"line":2335},[67,86705,86706],{"class":208},"      min-height",[67,86708,51974],{"class":77},[67,86710,1169],{"class":208},[67,86712,52029],{"class":73},[67,86714,2017],{"class":77},[67,86716,86717,86719,86721,86723,86725,86727,86729,86731,86733,86735,86737,86739,86741,86743,86745,86748],{"class":69,"line":2340},[67,86718,79287],{"class":208},[67,86720,51974],{"class":77},[67,86722,1051],{"class":208},[67,86724,4813],{"class":208},[67,86726,2760],{"class":208},[67,86728,52029],{"class":73},[67,86730,79304],{"class":208},[67,86732,864],{"class":77},[67,86734,1051],{"class":208},[67,86736,13153],{"class":77},[67,86738,1051],{"class":208},[67,86740,13153],{"class":77},[67,86742,1051],{"class":208},[67,86744,13153],{"class":77},[67,86746,86747],{"class":208},"0.1",[67,86749,3440],{"class":77},[67,86751,86752,86754,86756,86758,86760],{"class":69,"line":2346},[67,86753,55671],{"class":208},[67,86755,51974],{"class":77},[67,86757,1151],{"class":208},[67,86759,52029],{"class":73},[67,86761,2017],{"class":77},[67,86763,86764,86766,86768,86771],{"class":69,"line":2351},[67,86765,55296],{"class":208},[67,86767,51974],{"class":77},[67,86769,86770],{"class":208},"fixed",[67,86772,2017],{"class":77},[67,86774,86775,86778,86780,86783],{"class":69,"line":2365},[67,86776,86777],{"class":208},"      z-index",[67,86779,51974],{"class":77},[67,86781,86782],{"class":208},"999",[67,86784,2017],{"class":77},[67,86786,86787,86789,86791,86793,86795],{"class":69,"line":2370},[67,86788,55375],{"class":208},[67,86790,51974],{"class":77},[67,86792,1512],{"class":208},[67,86794,1186],{"class":73},[67,86796,2017],{"class":77},[67,86798,86799,86801,86803,86805,86807],{"class":69,"line":2376},[67,86800,55484],{"class":208},[67,86802,51974],{"class":77},[67,86804,1512],{"class":208},[67,86806,1186],{"class":73},[67,86808,2017],{"class":77},[67,86810,86811,86813,86815,86817,86819,86822,86824,86826,86828,86830,86832,86834],{"class":69,"line":2397},[67,86812,79328],{"class":208},[67,86814,51974],{"class":77},[67,86816,79333],{"class":208},[67,86818,864],{"class":77},[67,86820,86821],{"class":208},"-50",[67,86823,1186],{"class":73},[67,86825,13153],{"class":77},[67,86827,86821],{"class":208},[67,86829,1186],{"class":73},[67,86831,13153],{"class":77},[67,86833,1051],{"class":208},[67,86835,3440],{"class":77},[67,86837,86838,86840,86842,86844],{"class":69,"line":2402},[67,86839,55421],{"class":208},[67,86841,51974],{"class":77},[67,86843,61379],{"class":208},[67,86845,2017],{"class":77},[67,86847,86848],{"class":69,"line":2416},[67,86849,2909],{"class":77},[67,86851,86852],{"class":69,"line":2421},[67,86853,177],{"emptyLinePlaceholder":176},[67,86855,86856,86858,86861],{"class":69,"line":2450},[67,86857,86687],{"class":112},[67,86859,86860],{"class":112}," .header",[67,86862,16289],{"class":77},[67,86864,86865,86867,86869,86871,86873],{"class":69,"line":2455},[67,86866,57896],{"class":208},[67,86868,51974],{"class":77},[67,86870,1259],{"class":208},[67,86872,52029],{"class":73},[67,86874,2017],{"class":77},[67,86876,86877,86879,86881,86883,86885,86887],{"class":69,"line":2472},[67,86878,55232],{"class":208},[67,86880,51974],{"class":77},[67,86882,1051],{"class":208},[67,86884,2760],{"class":208},[67,86886,52029],{"class":73},[67,86888,2017],{"class":77},[67,86890,86891,86893,86895,86897],{"class":69,"line":2477},[67,86892,55296],{"class":208},[67,86894,51974],{"class":77},[67,86896,55301],{"class":208},[67,86898,2017],{"class":77},[67,86900,86901,86903,86905,86907,86909],{"class":69,"line":2482},[67,86902,55459],{"class":208},[67,86904,51974],{"class":77},[67,86906,1556],{"class":208},[67,86908,52029],{"class":73},[67,86910,2017],{"class":77},[67,86912,86913],{"class":69,"line":2487},[67,86914,2909],{"class":77},[67,86916,86917],{"class":69,"line":2501},[67,86918,177],{"emptyLinePlaceholder":176},[67,86920,86921,86923,86925,86927],{"class":69,"line":2506},[67,86922,86687],{"class":112},[67,86924,86860],{"class":112},[67,86926,3752],{"class":51837},[67,86928,16289],{"class":77},[67,86930,86931,86934,86936,86938],{"class":69,"line":3298},[67,86932,86933],{"class":208},"      font-style",[67,86935,51974],{"class":77},[67,86937,64378],{"class":208},[67,86939,2017],{"class":77},[67,86941,86942,86944,86946,86948],{"class":69,"line":3312},[67,86943,57953],{"class":208},[67,86945,51974],{"class":77},[67,86947,62607],{"class":208},[67,86949,2017],{"class":77},[67,86951,86952,86954,86956,86958],{"class":69,"line":3320},[67,86953,55296],{"class":208},[67,86955,51974],{"class":77},[67,86957,55368],{"class":208},[67,86959,2017],{"class":77},[67,86961,86962,86965,86967,86969,86971],{"class":69,"line":3325},[67,86963,86964],{"class":208},"      right",[67,86966,51974],{"class":77},[67,86968,1431],{"class":208},[67,86970,52029],{"class":73},[67,86972,2017],{"class":77},[67,86974,86975,86977,86979,86982,86984],{"class":69,"line":3331},[67,86976,55484],{"class":208},[67,86978,51974],{"class":77},[67,86980,86981],{"class":208},"-2",[67,86983,52029],{"class":73},[67,86985,2017],{"class":77},[67,86987,86988,86990,86992,86994],{"class":69,"line":3337},[67,86989,62562],{"class":208},[67,86991,51974],{"class":77},[67,86993,62567],{"class":208},[67,86995,2017],{"class":77},[67,86997,86998],{"class":69,"line":3342},[67,86999,2909],{"class":77},[67,87001,87002],{"class":69,"line":8667},[67,87003,177],{"emptyLinePlaceholder":176},[67,87005,87006,87008,87011],{"class":69,"line":8691},[67,87007,86687],{"class":112},[67,87009,87010],{"class":112}," .body",[67,87012,16289],{"class":77},[67,87014,87015,87017,87019,87021],{"class":69,"line":8696},[67,87016,57823],{"class":208},[67,87018,51974],{"class":77},[67,87020,52129],{"class":208},[67,87022,2017],{"class":77},[67,87024,87025,87027,87029,87031,87033],{"class":69,"line":8702},[67,87026,55232],{"class":208},[67,87028,51974],{"class":77},[67,87030,1303],{"class":208},[67,87032,52029],{"class":73},[67,87034,2017],{"class":77},[67,87036,87037],{"class":69,"line":8729},[67,87038,2909],{"class":77},[67,87040,87041],{"class":69,"line":8734},[67,87042,177],{"emptyLinePlaceholder":176},[67,87044,87045,87047,87050],{"class":69,"line":8740},[67,87046,86687],{"class":112},[67,87048,87049],{"class":112}," .footer",[67,87051,16289],{"class":77},[67,87053,87054,87056,87058,87060],{"class":69,"line":8752},[67,87055,55546],{"class":208},[67,87057,51974],{"class":77},[67,87059,52014],{"class":208},[67,87061,2017],{"class":77},[67,87063,87064,87066,87068,87070],{"class":69,"line":8764},[67,87065,55557],{"class":208},[67,87067,51974],{"class":77},[67,87069,52117],{"class":208},[67,87071,2017],{"class":77},[67,87073,87074,87076,87078,87080,87082],{"class":69,"line":8776},[67,87075,55232],{"class":208},[67,87077,51974],{"class":77},[67,87079,1303],{"class":208},[67,87081,52029],{"class":73},[67,87083,2017],{"class":77},[67,87085,87086],{"class":69,"line":10435},[67,87087,2909],{"class":77},[67,87089,87090],{"class":69,"line":10459},[67,87091,177],{"emptyLinePlaceholder":176},[67,87093,87094,87096,87098,87100],{"class":69,"line":10482},[67,87095,86687],{"class":112},[67,87097,87049],{"class":112},[67,87099,2122],{"class":51837},[67,87101,16289],{"class":77},[67,87103,87104,87106,87108,87110,87112,87114,87116],{"class":69,"line":10506},[67,87105,55232],{"class":208},[67,87107,51974],{"class":77},[67,87109,933],{"class":208},[67,87111,52029],{"class":73},[67,87113,2805],{"class":208},[67,87115,52029],{"class":73},[67,87117,2017],{"class":77},[67,87119,87120,87122,87124,87127],{"class":69,"line":10511},[67,87121,62258],{"class":208},[67,87123,51974],{"class":77},[67,87125,87126],{"class":208},"#ccc",[67,87128,2017],{"class":77},[67,87130,87131,87133,87135,87137],{"class":69,"line":10516},[67,87132,64507],{"class":208},[67,87134,51974],{"class":77},[67,87136,55274],{"class":208},[67,87138,2017],{"class":77},[67,87140,87141,87143,87145,87147],{"class":69,"line":10521},[67,87142,57953],{"class":208},[67,87144,51974],{"class":77},[67,87146,61379],{"class":208},[67,87148,2017],{"class":77},[67,87150,87151,87153,87155,87157,87159],{"class":69,"line":10530},[67,87152,55671],{"class":208},[67,87154,51974],{"class":77},[67,87156,939],{"class":208},[67,87158,52029],{"class":73},[67,87160,2017],{"class":77},[67,87162,87163,87165,87167,87169,87171],{"class":69,"line":10535},[67,87164,62287],{"class":208},[67,87166,51974],{"class":77},[67,87168,1303],{"class":208},[67,87170,52029],{"class":73},[67,87172,2017],{"class":77},[67,87174,87175,87177,87179,87181,87183],{"class":69,"line":10541},[67,87176,55459],{"class":208},[67,87178,51974],{"class":77},[67,87180,1406],{"class":208},[67,87182,52029],{"class":73},[67,87184,2017],{"class":77},[67,87186,87187],{"class":69,"line":10562},[67,87188,2909],{"class":77},[67,87190,87191],{"class":69,"line":10568},[67,87192,177],{"emptyLinePlaceholder":176},[67,87194,87195,87197,87199,87201,87204],{"class":69,"line":10582},[67,87196,86687],{"class":112},[67,87198,87049],{"class":112},[67,87200,2122],{"class":51837},[67,87202,87203],{"class":112},".submit",[67,87205,16289],{"class":77},[67,87207,87208,87210,87212,87215],{"class":69,"line":10588},[67,87209,55421],{"class":208},[67,87211,51974],{"class":77},[67,87213,87214],{"class":208},"#369",[67,87216,2017],{"class":77},[67,87218,87219],{"class":69,"line":10615},[67,87220,2909],{"class":77},[67,87222,87223,87225,87227],{"class":69,"line":10624},[67,87224,52954],{"class":77},[67,87226,779],{"class":51837},[67,87228,51844],{"class":77},[67,87230,87231,87233,87235],{"class":69,"line":10630},[67,87232,52322],{"class":77},[67,87234,51871],{"class":51837},[67,87236,51844],{"class":77},[67,87238,87239],{"class":69,"line":10638},[67,87240,177],{"emptyLinePlaceholder":176},[67,87242,87243,87245,87247],{"class":69,"line":10643},[67,87244,1766],{"class":77},[67,87246,52337],{"class":51837},[67,87248,51844],{"class":77},[67,87250,87251,87253,87255,87257,87259,87262,87265,87267],{"class":69,"line":17321},[67,87252,52681],{"class":77},[67,87254,54424],{"class":51837},[67,87256,15676],{"class":112},[67,87258,909],{"class":77},[67,87260,87261],{"class":84},"\"delete\"",[67,87263,87264],{"class":77},">删除\u003C\u002F",[67,87266,54424],{"class":51837},[67,87268,51844],{"class":77},[67,87270,87271,87273,87275,87277,87279,87282,87285,87287],{"class":69,"line":17327},[67,87272,52681],{"class":77},[67,87274,54424],{"class":51837},[67,87276,15676],{"class":112},[67,87278,909],{"class":77},[67,87280,87281],{"class":84},"\"login\"",[67,87283,87284],{"class":77},">登录\u003C\u002F",[67,87286,54424],{"class":51837},[67,87288,51844],{"class":77},[67,87290,87291,87293,87295],{"class":69,"line":17350},[67,87292,52681],{"class":77},[67,87294,52350],{"class":51837},[67,87296,51844],{"class":77},[67,87298,87299],{"class":69,"line":17356},[67,87300,87301],{"class":202},"    \u002F\u002F 1.Model 构造函数的封装  模态框\n",[67,87303,87304,87306,87309,87311,87313,87315,87317,87319,87322,87324,87326],{"class":69,"line":17379},[67,87305,70621],{"class":73},[67,87307,87308],{"class":112}," Modal",[67,87310,864],{"class":77},[67,87312,51944],{"class":5935},[67,87314,14282],{"class":73},[67,87316,70467],{"class":84},[67,87318,13153],{"class":77},[67,87320,87321],{"class":5935},"message",[67,87323,14282],{"class":73},[67,87325,70467],{"class":84},[67,87327,13160],{"class":77},[67,87329,87330],{"class":69,"line":17393},[67,87331,87332],{"class":202},"      \u002F\u002F 创建Model 模态框盒子\n",[67,87334,87335],{"class":69,"line":17413},[67,87336,87337],{"class":202},"      \u002F\u002F 1.1 创建div标签\n",[67,87339,87340,87342,87345,87347,87349,87351,87353,87355],{"class":69,"line":17419},[67,87341,70588],{"class":208},[67,87343,87344],{"class":77},".modalBox ",[67,87346,909],{"class":73},[67,87348,54933],{"class":77},[67,87350,70688],{"class":112},[67,87352,864],{"class":77},[67,87354,82468],{"class":84},[67,87356,870],{"class":77},[67,87358,87359],{"class":69,"line":17430},[67,87360,87361],{"class":202},"      \u002F\u002F 1.2 给div 添加类名为model\n",[67,87363,87364,87366,87369,87371],{"class":69,"line":17453},[67,87365,70588],{"class":208},[67,87367,87368],{"class":77},".modalBox.className ",[67,87370,909],{"class":73},[67,87372,87373],{"class":84}," 'modal'\n",[67,87375,87376],{"class":69,"line":17475},[67,87377,87378],{"class":202},"      \u002F\u002F 1.3 model盒子内部填充2个div标签并且修改文字内容 \n",[67,87380,87381,87383,87386,87388],{"class":69,"line":17480},[67,87382,70588],{"class":208},[67,87384,87385],{"class":77},".modalBox.innerHTML ",[67,87387,909],{"class":73},[67,87389,70705],{"class":84},[67,87391,87392,87395,87397],{"class":69,"line":17486},[67,87393,87394],{"class":84},"        \u003Cdiv class=\"header\">${",[67,87396,51944],{"class":77},[67,87398,87399],{"class":84},"}\u003Ci>x\u003C\u002Fi>\u003C\u002Fdiv>\n",[67,87401,87402,87405,87407],{"class":69,"line":17500},[67,87403,87404],{"class":84},"        \u003Cdiv class=\"body\">${",[67,87406,87321],{"class":77},[67,87408,87409],{"class":84},"}\u003C\u002Fdiv>\n",[67,87411,87412],{"class":69,"line":17513},[67,87413,87414],{"class":84},"      `\n",[67,87416,87417],{"class":69,"line":17518},[67,87418,87419],{"class":202},"      \u002F\u002F console.log(this.modalBox)\n",[67,87421,87422],{"class":69,"line":17532},[67,87423,2909],{"class":77},[67,87425,87426],{"class":69,"line":17537},[67,87427,87428],{"class":202},"    \u002F\u002F new Model('温馨提示', '您没有删除权限操作')\n",[67,87430,87431],{"class":69,"line":17543},[67,87432,87433],{"class":202},"    \u002F\u002F new Model('友情提示', '您还没有登录呢')\n",[67,87435,87436],{"class":69,"line":17548},[67,87437,87438],{"class":202},"    \u002F\u002F 2.给构造函数原型对象挂载open方法\n",[67,87440,87441,87444,87446,87448,87450,87453,87455,87457],{"class":69,"line":17562},[67,87442,87443],{"class":208},"    Modal",[67,87445,240],{"class":77},[67,87447,86116],{"class":208},[67,87449,240],{"class":77},[67,87451,87452],{"class":112},"open",[67,87454,14282],{"class":73},[67,87456,59455],{"class":73},[67,87458,54989],{"class":77},[67,87460,87461],{"class":69,"line":17567},[67,87462,87463],{"class":202},"      \u002F\u002F 准备open显示的时候，先判断页面中有没有modal盒子，有就移除，没有加添加\n",[67,87465,87466,87468,87471,87473,87475,87477,87479,87482],{"class":69,"line":17572},[67,87467,58765],{"class":73},[67,87469,87470],{"class":208}," box",[67,87472,14282],{"class":73},[67,87474,54933],{"class":77},[67,87476,54936],{"class":112},[67,87478,864],{"class":77},[67,87480,87481],{"class":84},"'.modal'",[67,87483,870],{"class":77},[67,87485,87486],{"class":69,"line":17586},[67,87487,87488],{"class":202},"      \u002F\u002F 使用逻辑中断来判断   若前边为假则中断，box.remove()就不执行了，就接着执行后边的代码；如果box为真，则执行box.remove()，再接着执行后边的代码\n",[67,87490,87491,87494,87496,87499,87501],{"class":69,"line":17598},[67,87492,87493],{"class":77},"      box ",[67,87495,2438],{"class":73},[67,87497,87498],{"class":77}," box.",[67,87500,57543],{"class":112},[67,87502,2698],{"class":77},[67,87504,87505],{"class":69,"line":17603},[67,87506,87507],{"class":202},"      \u002F\u002F 主要这个方法不要用箭头函数\n",[67,87509,87510],{"class":69,"line":17616},[67,87511,87512],{"class":202},"      \u002F\u002F 把刚才创建的modelBox 显示到页面body中\n",[67,87514,87515],{"class":69,"line":17621},[67,87516,87517],{"class":202},"      \u002F\u002F append可以增加对象\n",[67,87519,87520,87523,87526,87528,87531],{"class":69,"line":17626},[67,87521,87522],{"class":77},"      document.body.",[67,87524,87525],{"class":112},"append",[67,87527,864],{"class":77},[67,87529,87530],{"class":208},"this",[67,87532,87533],{"class":77},".modalBox)\n",[67,87535,87536],{"class":69,"line":17631},[67,87537,177],{"emptyLinePlaceholder":176},[67,87539,87540],{"class":69,"line":17644},[67,87541,87542],{"class":202},"      \u002F\u002F要等到盒子显示出来，就可以绑定点击事件了\n",[67,87544,87545,87547,87550,87552,87554,87557,87559,87561,87563,87565,87568,87570],{"class":69,"line":17649},[67,87546,70588],{"class":208},[67,87548,87549],{"class":77},".modalBox.",[67,87551,54936],{"class":112},[67,87553,864],{"class":77},[67,87555,87556],{"class":84},"'i'",[67,87558,31363],{"class":77},[67,87560,58350],{"class":112},[67,87562,864],{"class":77},[67,87564,58355],{"class":84},[67,87566,87567],{"class":77},", () ",[67,87569,85259],{"class":73},[67,87571,16289],{"class":77},[67,87573,87574],{"class":69,"line":33170},[67,87575,87576],{"class":202},"        \u002F\u002F 这个地方需要用到箭头函数\n",[67,87578,87579],{"class":69,"line":33176},[67,87580,87581],{"class":202},"        \u002F\u002F 这个this是指向的是上上级 是实例对象\n",[67,87583,87584],{"class":69,"line":33182},[67,87585,87586],{"class":202},"        \u002F\u002F 如果不用箭头函数的话，就指向的是i这个DOM对象了\n",[67,87588,87589,87591,87593,87596],{"class":69,"line":33188},[67,87590,65263],{"class":208},[67,87592,240],{"class":77},[67,87594,87595],{"class":112},"close",[67,87597,2698],{"class":77},[67,87599,87600],{"class":69,"line":33194},[67,87601,65352],{"class":77},[67,87603,87604],{"class":69,"line":33205},[67,87605,2909],{"class":77},[67,87607,87608],{"class":69,"line":33211},[67,87609,177],{"emptyLinePlaceholder":176},[67,87611,87612],{"class":69,"line":33231},[67,87613,87614],{"class":202},"    \u002F\u002F 测试一下 点击 删除按钮\n",[67,87616,87617,87619,87621,87623,87626,87628,87630,87632,87634,87636,87638],{"class":69,"line":33237},[67,87618,52944],{"class":77},[67,87620,54936],{"class":112},[67,87622,864],{"class":77},[67,87624,87625],{"class":84},"'#delete'",[67,87627,31363],{"class":77},[67,87629,58350],{"class":112},[67,87631,864],{"class":77},[67,87633,58355],{"class":84},[67,87635,87567],{"class":77},[67,87637,85259],{"class":73},[67,87639,16289],{"class":77},[67,87641,87642],{"class":69,"line":33248},[67,87643,87644],{"class":202},"      \u002F\u002F 先调用Model构造函数\n",[67,87646,87647,87649,87652,87654,87656,87658,87660,87663,87665,87668],{"class":69,"line":33254},[67,87648,58765],{"class":73},[67,87650,87651],{"class":208}," del",[67,87653,14282],{"class":73},[67,87655,12296],{"class":73},[67,87657,87308],{"class":112},[67,87659,864],{"class":77},[67,87661,87662],{"class":84},"'温馨的提示'",[67,87664,13153],{"class":77},[67,87666,87667],{"class":84},"'您没有删除权限操作'",[67,87669,870],{"class":77},[67,87671,87672],{"class":69,"line":33260},[67,87673,87674],{"class":202},"      \u002F\u002F 实例对象调用open方法\n",[67,87676,87677,87680,87682],{"class":69,"line":33266},[67,87678,87679],{"class":77},"      del.",[67,87681,87452],{"class":112},[67,87683,2698],{"class":77},[67,87685,87686],{"class":69,"line":33272},[67,87687,33998],{"class":77},[67,87689,87690],{"class":69,"line":33278},[67,87691,87692],{"class":202},"    \u002F\u002F 测试一下 点击 登录按钮\n",[67,87694,87695,87697,87699,87701,87704,87706,87708,87710,87712,87714,87716],{"class":69,"line":33284},[67,87696,52944],{"class":77},[67,87698,54936],{"class":112},[67,87700,864],{"class":77},[67,87702,87703],{"class":84},"'#login'",[67,87705,31363],{"class":77},[67,87707,58350],{"class":112},[67,87709,864],{"class":77},[67,87711,58355],{"class":84},[67,87713,87567],{"class":77},[67,87715,85259],{"class":73},[67,87717,16289],{"class":77},[67,87719,87720],{"class":69,"line":33290},[67,87721,87644],{"class":202},[67,87723,87724,87726,87729,87731,87733,87735,87737,87740,87742,87745],{"class":69,"line":33310},[67,87725,58765],{"class":73},[67,87727,87728],{"class":208}," log",[67,87730,14282],{"class":73},[67,87732,12296],{"class":73},[67,87734,87308],{"class":112},[67,87736,864],{"class":77},[67,87738,87739],{"class":84},"'友情提示'",[67,87741,13153],{"class":77},[67,87743,87744],{"class":84},"'您还没有登录呢'",[67,87746,870],{"class":77},[67,87748,87749],{"class":69,"line":33316},[67,87750,87674],{"class":202},[67,87752,87753,87756,87758],{"class":69,"line":33332},[67,87754,87755],{"class":77},"      log.",[67,87757,87452],{"class":112},[67,87759,2698],{"class":77},[67,87761,87762],{"class":69,"line":33338},[67,87763,33998],{"class":77},[67,87765,87766],{"class":69,"line":33352},[67,87767,87768],{"class":202},"    \u002F\u002F 3.给构造函数原型对象挂载close方法\n",[67,87770,87771,87773,87775,87777,87779,87781,87783,87785],{"class":69,"line":33358},[67,87772,87443],{"class":208},[67,87774,240],{"class":77},[67,87776,86116],{"class":208},[67,87778,240],{"class":77},[67,87780,87595],{"class":112},[67,87782,14282],{"class":73},[67,87784,59455],{"class":73},[67,87786,54989],{"class":77},[67,87788,87789,87791,87793,87795],{"class":69,"line":33373},[67,87790,70588],{"class":208},[67,87792,87549],{"class":77},[67,87794,57543],{"class":112},[67,87796,2698],{"class":77},[67,87798,87799],{"class":69,"line":33379},[67,87800,2909],{"class":77},[67,87802,87803,87805,87807],{"class":69,"line":33388},[67,87804,52954],{"class":77},[67,87806,52350],{"class":51837},[67,87808,51844],{"class":77},[67,87810,87811,87813,87815],{"class":69,"line":33394},[67,87812,52322],{"class":77},[67,87814,52337],{"class":51837},[67,87816,51844],{"class":77},[67,87818,87819],{"class":69,"line":33403},[67,87820,177],{"emptyLinePlaceholder":176},[67,87822,87823,87825,87827],{"class":69,"line":33409},[67,87824,52322],{"class":77},[67,87826,51172],{"class":51837},[67,87828,51844],{"class":77},[19,87830,87831],{},[725,87832],{"alt":62,"src":87833},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-326.png",[803,87835,87837],{"id":87836},"_414-深浅拷贝","4.14 深浅拷贝",[14,87839,87841],{"id":87840},"_4141-浅拷贝","4.14.1 浅拷贝",[19,87843,87844],{},[725,87845],{"alt":62,"src":87846},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-327.png",[19,87848,87849],{},"展开运算符也可以对对象使用，将对象的键值取出放到新对象中",[19,87851,87852],{},[725,87853],{"alt":62,"src":87854},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-328.png",[19,87856,87857],{},[725,87858],{"alt":62,"src":87859},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-329.png",[19,87861,87862],{},"下边这个情况的时候，浅拷贝只拷贝外面这一层，外面这一层是把值给了这个新对象，里层的这个对象在拷贝的时候还是拷贝的地址，所以一改里层对象的值，原来的对象和拷贝的对象的值就都变了，这样拷贝就会有问题",[19,87864,87865],{},[725,87866],{"alt":62,"src":87867},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-330.png",[19,87869,12050],{},[19,87871,87872],{},[725,87873],{"alt":62,"src":87874},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-331.png",[14,87876,87878],{"id":87877},"_4142-深拷贝","4.14.2 深拷贝",[19,87880,87881],{},"深拷贝：拷贝的是对象，不是地址",[19,87883,87884],{},"常用的三种方法：",[815,87886,87887,87890,87893],{},[818,87888,87889],{},"通过递归实现深拷贝",[818,87891,87892],{},"lodash\u002FcloneDeep",[818,87894,87895],{},"通过JSON.stringify()实现",[40,87897,87899],{"id":87898},"_41421-递归函数","4.14.2.1 递归函数",[19,87901,87902],{},[725,87903],{"alt":62,"src":87904},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-332.png",[815,87906,87907],{},[818,87908,87909],{},"死递归占溢出：",[57,87911,87913],{"className":53604,"code":87912,"language":53606,"meta":62,"style":62},"\u003Cbody>\n  \u003Cscript>\n    function fn() {\n      fn()\n    }\n    fn()\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[64,87914,87915,87923,87931,87935,87940,87944,87949,87957],{"__ignoreMap":62},[67,87916,87917,87919,87921],{"class":69,"line":70},[67,87918,1766],{"class":77},[67,87920,52337],{"class":51837},[67,87922,51844],{"class":77},[67,87924,87925,87927,87929],{"class":69,"line":143},[67,87926,52681],{"class":77},[67,87928,52350],{"class":51837},[67,87930,51844],{"class":77},[67,87932,87933],{"class":69,"line":149},[67,87934,77680],{"class":77},[67,87936,87937],{"class":69,"line":155},[67,87938,87939],{"class":77},"      fn()\n",[67,87941,87942],{"class":69,"line":161},[67,87943,2909],{"class":77},[67,87945,87946],{"class":69,"line":167},[67,87947,87948],{"class":77},"    fn()\n",[67,87950,87951,87953,87955],{"class":69,"line":173},[67,87952,52954],{"class":77},[67,87954,52350],{"class":51837},[67,87956,51844],{"class":77},[67,87958,87959,87961,87963],{"class":69,"line":180},[67,87960,52322],{"class":77},[67,87962,52337],{"class":51837},[67,87964,51844],{"class":77},[815,87966,87967],{"start":143},[818,87968,87969],{},"递归函数要加判断条件：",[19,87971,87972],{},[725,87973],{"alt":62,"src":87974},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-333.png",[815,87976,87977],{"start":149},[818,87978,87979],{},"应用：利用递归函数实现setTimeout模拟setInterval效果",[57,87981,87983],{"className":51170,"code":87982,"language":51172,"meta":62,"style":62},"\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",[64,87984,87985,87995,88009,88013,88021,88035,88055,88067,88075,88079,88087,88099,88107,88115,88140,88152,88156,88163,88171,88179,88183],{"__ignoreMap":62},[67,87986,87987,87989,87991,87993],{"class":69,"line":70},[67,87988,51834],{"class":77},[67,87990,51838],{"class":51837},[67,87992,51841],{"class":112},[67,87994,51844],{"class":77},[67,87996,87997,87999,88001,88003,88005,88007],{"class":69,"line":143},[67,87998,1766],{"class":77},[67,88000,51172],{"class":51837},[67,88002,51853],{"class":112},[67,88004,909],{"class":77},[67,88006,51858],{"class":84},[67,88008,51844],{"class":77},[67,88010,88011],{"class":69,"line":149},[67,88012,177],{"emptyLinePlaceholder":176},[67,88014,88015,88017,88019],{"class":69,"line":155},[67,88016,1766],{"class":77},[67,88018,51871],{"class":51837},[67,88020,51844],{"class":77},[67,88022,88023,88025,88027,88029,88031,88033],{"class":69,"line":161},[67,88024,52681],{"class":77},[67,88026,51881],{"class":51837},[67,88028,51884],{"class":112},[67,88030,909],{"class":77},[67,88032,51889],{"class":84},[67,88034,51844],{"class":77},[67,88036,88037,88039,88041,88043,88045,88047,88049,88051,88053],{"class":69,"line":167},[67,88038,52681],{"class":77},[67,88040,51881],{"class":51837},[67,88042,15637],{"class":112},[67,88044,909],{"class":77},[67,88046,51928],{"class":84},[67,88048,51908],{"class":112},[67,88050,909],{"class":77},[67,88052,51935],{"class":84},[67,88054,51844],{"class":77},[67,88056,88057,88059,88061,88063,88065],{"class":69,"line":173},[67,88058,52681],{"class":77},[67,88060,51944],{"class":51837},[67,88062,51947],{"class":77},[67,88064,51944],{"class":51837},[67,88066,51844],{"class":77},[67,88068,88069,88071,88073],{"class":69,"line":180},[67,88070,52322],{"class":77},[67,88072,51871],{"class":51837},[67,88074,51844],{"class":77},[67,88076,88077],{"class":69,"line":186},[67,88078,177],{"emptyLinePlaceholder":176},[67,88080,88081,88083,88085],{"class":69,"line":444},[67,88082,1766],{"class":77},[67,88084,52337],{"class":51837},[67,88086,51844],{"class":77},[67,88088,88089,88091,88093,88095,88097],{"class":69,"line":2335},[67,88090,52681],{"class":77},[67,88092,52148],{"class":51837},[67,88094,55851],{"class":77},[67,88096,52148],{"class":51837},[67,88098,51844],{"class":77},[67,88100,88101,88103,88105],{"class":69,"line":2340},[67,88102,52681],{"class":77},[67,88104,52350],{"class":51837},[67,88106,51844],{"class":77},[67,88108,88109,88111,88113],{"class":69,"line":2346},[67,88110,70621],{"class":73},[67,88112,74310],{"class":112},[67,88114,11571],{"class":77},[67,88116,88117,88119,88121,88123,88125,88127,88129,88131,88133,88135,88138],{"class":69,"line":2351},[67,88118,56308],{"class":77},[67,88120,54936],{"class":112},[67,88122,864],{"class":77},[67,88124,82468],{"class":84},[67,88126,74786],{"class":77},[67,88128,909],{"class":73},[67,88130,12296],{"class":73},[67,88132,74326],{"class":112},[67,88134,17978],{"class":77},[67,88136,88137],{"class":112},"toLocaleString",[67,88139,2698],{"class":77},[67,88141,88142,88145,88148,88150],{"class":69,"line":2365},[67,88143,88144],{"class":112},"      setTimeout",[67,88146,88147],{"class":77},"(getTime, ",[67,88149,7129],{"class":208},[67,88151,870],{"class":77},[67,88153,88154],{"class":69,"line":2370},[67,88155,2909],{"class":77},[67,88157,88158,88161],{"class":69,"line":2376},[67,88159,88160],{"class":112},"    getTime",[67,88162,2698],{"class":77},[67,88164,88165,88167,88169],{"class":69,"line":2397},[67,88166,52954],{"class":77},[67,88168,52350],{"class":51837},[67,88170,51844],{"class":77},[67,88172,88173,88175,88177],{"class":69,"line":2402},[67,88174,52322],{"class":77},[67,88176,52337],{"class":51837},[67,88178,51844],{"class":77},[67,88180,88181],{"class":69,"line":2416},[67,88182,177],{"emptyLinePlaceholder":176},[67,88184,88185,88187,88189],{"class":69,"line":2421},[67,88186,52322],{"class":77},[67,88188,51172],{"class":51837},[67,88190,51844],{"class":77},[19,88192,88193],{},[725,88194],{"alt":62,"src":88195},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-334.png",[815,88197,88198],{"start":155},[818,88199,87889],{},[19,88201,88202],{},[725,88203],{"alt":62,"src":88204},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-335.png",[19,88206,88207],{},"现在的这个递归函数还是一个浅拷贝的函数，通过将旧值给新值的方式进行，简单数据直接就是把值给他了，但是复杂数据是把他的地址给他",[19,88209,39726],{},[19,88211,88212],{},"这个是简易版的递归函数深拷贝",[19,88214,88215],{},"一定要注意先数组再对象，因为万物皆可对象",[57,88217,88219],{"className":51170,"code":88218,"language":51172,"meta":62,"style":62},"\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",[64,88220,88221,88231,88245,88249,88257,88271,88291,88303,88311,88315,88323,88331,88341,88350,88358,88374,88378,88386,88390,88394,88406,88411,88430,88446,88451,88456,88461,88476,88481,88486,88495,88503,88520,88528,88534,88542,88547,88552,88561,88565,88569,88573,88584,88593,88603,88617,88627,88635,88643,88651,88655],{"__ignoreMap":62},[67,88222,88223,88225,88227,88229],{"class":69,"line":70},[67,88224,51834],{"class":77},[67,88226,51838],{"class":51837},[67,88228,51841],{"class":112},[67,88230,51844],{"class":77},[67,88232,88233,88235,88237,88239,88241,88243],{"class":69,"line":143},[67,88234,1766],{"class":77},[67,88236,51172],{"class":51837},[67,88238,51853],{"class":112},[67,88240,909],{"class":77},[67,88242,51858],{"class":84},[67,88244,51844],{"class":77},[67,88246,88247],{"class":69,"line":149},[67,88248,177],{"emptyLinePlaceholder":176},[67,88250,88251,88253,88255],{"class":69,"line":155},[67,88252,1766],{"class":77},[67,88254,51871],{"class":51837},[67,88256,51844],{"class":77},[67,88258,88259,88261,88263,88265,88267,88269],{"class":69,"line":161},[67,88260,52681],{"class":77},[67,88262,51881],{"class":51837},[67,88264,51884],{"class":112},[67,88266,909],{"class":77},[67,88268,51889],{"class":84},[67,88270,51844],{"class":77},[67,88272,88273,88275,88277,88279,88281,88283,88285,88287,88289],{"class":69,"line":167},[67,88274,52681],{"class":77},[67,88276,51881],{"class":51837},[67,88278,15637],{"class":112},[67,88280,909],{"class":77},[67,88282,51928],{"class":84},[67,88284,51908],{"class":112},[67,88286,909],{"class":77},[67,88288,51935],{"class":84},[67,88290,51844],{"class":77},[67,88292,88293,88295,88297,88299,88301],{"class":69,"line":173},[67,88294,52681],{"class":77},[67,88296,51944],{"class":51837},[67,88298,51947],{"class":77},[67,88300,51944],{"class":51837},[67,88302,51844],{"class":77},[67,88304,88305,88307,88309],{"class":69,"line":180},[67,88306,52322],{"class":77},[67,88308,51871],{"class":51837},[67,88310,51844],{"class":77},[67,88312,88313],{"class":69,"line":186},[67,88314,177],{"emptyLinePlaceholder":176},[67,88316,88317,88319,88321],{"class":69,"line":444},[67,88318,1766],{"class":77},[67,88320,52337],{"class":51837},[67,88322,51844],{"class":77},[67,88324,88325,88327,88329],{"class":69,"line":2335},[67,88326,52681],{"class":77},[67,88328,52350],{"class":51837},[67,88330,51844],{"class":77},[67,88332,88333,88335,88337,88339],{"class":69,"line":2340},[67,88334,11939],{"class":73},[67,88336,70508],{"class":208},[67,88338,14282],{"class":73},[67,88340,16289],{"class":77},[67,88342,88343,88345,88348],{"class":69,"line":2346},[67,88344,72153],{"class":77},[67,88346,88347],{"class":84},"'pink'",[67,88349,32003],{"class":77},[67,88351,88352,88354,88356],{"class":69,"line":2351},[67,88353,72163],{"class":77},[67,88355,1506],{"class":208},[67,88357,32003],{"class":77},[67,88359,88360,88363,88366,88368,88371],{"class":69,"line":2365},[67,88361,88362],{"class":77},"      hobby: [",[67,88364,88365],{"class":84},"'乒乓球'",[67,88367,13153],{"class":77},[67,88369,88370],{"class":84},"'足球'",[67,88372,88373],{"class":77},"],\n",[67,88375,88376],{"class":69,"line":2370},[67,88377,78409],{"class":77},[67,88379,88380,88383],{"class":69,"line":2376},[67,88381,88382],{"class":77},"        baby: ",[67,88384,88385],{"class":84},"'小pink'\n",[67,88387,88388],{"class":69,"line":2397},[67,88389,52935],{"class":77},[67,88391,88392],{"class":69,"line":2402},[67,88393,2909],{"class":77},[67,88395,88396,88398,88401,88403],{"class":69,"line":2416},[67,88397,11939],{"class":73},[67,88399,88400],{"class":208}," o",[67,88402,14282],{"class":73},[67,88404,88405],{"class":77}," {}\n",[67,88407,88408],{"class":69,"line":2421},[67,88409,88410],{"class":202},"    \u002F\u002F 拷贝函数\n",[67,88412,88413,88415,88418,88420,88423,88425,88428],{"class":69,"line":2450},[67,88414,70621],{"class":73},[67,88416,88417],{"class":112}," deepCopy",[67,88419,864],{"class":77},[67,88421,88422],{"class":5935},"newObj",[67,88424,13153],{"class":77},[67,88426,88427],{"class":5935},"oldObj",[67,88429,13160],{"class":77},[67,88431,88432,88434,88436,88438,88441,88443],{"class":69,"line":2455},[67,88433,52821],{"class":73},[67,88435,2381],{"class":77},[67,88437,52384],{"class":73},[67,88439,88440],{"class":77}," k ",[67,88442,81],{"class":73},[67,88444,88445],{"class":77}," oldObj) {\n",[67,88447,88448],{"class":69,"line":2472},[67,88449,88450],{"class":202},"        \u002F\u002F 处理数组的问题\n",[67,88452,88453],{"class":69,"line":2477},[67,88454,88455],{"class":202},"        \u002F\u002F 判断是否属于数组\n",[67,88457,88458],{"class":69,"line":2482},[67,88459,88460],{"class":202},"        \u002F\u002F 一定先写数组，因为万物皆对象，数组也属于对象，把对象写前边的话，数组就执行对象的操作了，就无法正常运行了\n",[67,88462,88463,88465,88468,88471,88474],{"class":69,"line":2487},[67,88464,3218],{"class":73},[67,88466,88467],{"class":77}," (oldObj[k] ",[67,88469,88470],{"class":73},"instanceof",[67,88472,88473],{"class":112}," Array",[67,88475,13160],{"class":77},[67,88477,88478],{"class":69,"line":2501},[67,88479,88480],{"class":202},"          \u002F\u002F newObj[k]  接收的内容放到[]\n",[67,88482,88483],{"class":69,"line":2506},[67,88484,88485],{"class":202},"          \u002F\u002F oldObj[k]  就是['乒乓球','足球']\n",[67,88487,88488,88491,88493],{"class":69,"line":3298},[67,88489,88490],{"class":77},"          newObj[k] ",[67,88492,909],{"class":73},[67,88494,52375],{"class":77},[67,88496,88497,88500],{"class":69,"line":3312},[67,88498,88499],{"class":112},"          deepCopy",[67,88501,88502],{"class":77},"(newObj[k], oldObj[k])\n",[67,88504,88505,88507,88509,88511,88513,88515,88518],{"class":69,"line":3320},[67,88506,80617],{"class":77},[67,88508,2424],{"class":73},[67,88510,2427],{"class":73},[67,88512,88467],{"class":77},[67,88514,88470],{"class":73},[67,88516,88517],{"class":112}," Object",[67,88519,13160],{"class":77},[67,88521,88522,88524,88526],{"class":69,"line":3325},[67,88523,88490],{"class":77},[67,88525,909],{"class":73},[67,88527,88405],{"class":77},[67,88529,88530,88532],{"class":69,"line":3331},[67,88531,88499],{"class":112},[67,88533,88502],{"class":77},[67,88535,88536,88538,88540],{"class":69,"line":3337},[67,88537,80617],{"class":77},[67,88539,2424],{"class":73},[67,88541,16289],{"class":77},[67,88543,88544],{"class":69,"line":3342},[67,88545,88546],{"class":202},"          \u002F\u002F  k 是属性名  属性值为oldObj[k]\n",[67,88548,88549],{"class":69,"line":8667},[67,88550,88551],{"class":202},"          \u002F\u002F newObj[k]与newObj写法是等价的\n",[67,88553,88554,88556,88558],{"class":69,"line":8691},[67,88555,88490],{"class":77},[67,88557,909],{"class":73},[67,88559,88560],{"class":77}," oldObj[k]\n",[67,88562,88563],{"class":69,"line":8696},[67,88564,3250],{"class":77},[67,88566,88567],{"class":69,"line":8702},[67,88568,52935],{"class":77},[67,88570,88571],{"class":69,"line":8729},[67,88572,2909],{"class":77},[67,88574,88575,88578,88581],{"class":69,"line":8734},[67,88576,88577],{"class":112},"    deepCopy",[67,88579,88580],{"class":77},"(o, obj) ",[67,88582,88583],{"class":202},"\u002F\u002F函数调用 两个参数 o是新对象，obj是旧对象\n",[67,88585,88586,88588,88590],{"class":69,"line":8740},[67,88587,74290],{"class":77},[67,88589,58784],{"class":112},[67,88591,88592],{"class":77},"(o)\n",[67,88594,88595,88598,88600],{"class":69,"line":8752},[67,88596,88597],{"class":77},"    o.age ",[67,88599,909],{"class":73},[67,88601,88602],{"class":208}," 20\n",[67,88604,88605,88608,88610,88612,88614],{"class":69,"line":8764},[67,88606,88607],{"class":77},"    o.hobby[",[67,88609,1051],{"class":208},[67,88611,5162],{"class":77},[67,88613,909],{"class":73},[67,88615,88616],{"class":84}," '篮球'\n",[67,88618,88619,88622,88624],{"class":69,"line":8776},[67,88620,88621],{"class":77},"    o.family ",[67,88623,909],{"class":73},[67,88625,88626],{"class":84}," '老pink'\n",[67,88628,88629,88631,88633],{"class":69,"line":10435},[67,88630,74290],{"class":77},[67,88632,58784],{"class":112},[67,88634,70573],{"class":77},[67,88636,88637,88639,88641],{"class":69,"line":10459},[67,88638,52954],{"class":77},[67,88640,52350],{"class":51837},[67,88642,51844],{"class":77},[67,88644,88645,88647,88649],{"class":69,"line":10482},[67,88646,52322],{"class":77},[67,88648,52337],{"class":51837},[67,88650,51844],{"class":77},[67,88652,88653],{"class":69,"line":10506},[67,88654,177],{"emptyLinePlaceholder":176},[67,88656,88657,88659,88661],{"class":69,"line":10511},[67,88658,52322],{"class":77},[67,88660,51172],{"class":51837},[67,88662,51844],{"class":77},[19,88664,88665],{},[725,88666],{"alt":62,"src":88667},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-336.png",[40,88669,88671,88672],{"id":88670},"_41422-js库lodash里面clonedeep内部实现了深拷贝","4.14.2.2 ",[336,88673,88674],{},"js库lodash里面cloneDeep内部实现了深拷贝",[19,88676,88677],{},[28,88678,88679],{"href":88679,"rel":88680},"https:\u002F\u002Fwww.lodashjs.com\u002F",[32],[19,88682,88683],{},"lodash里边的方法都要加上一个下划线_",[19,88685,88686],{},"_.cloneDeep()",[57,88688,88690],{"className":51170,"code":88689,"language":51172,"meta":62,"style":62},"\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",[64,88691,88692,88702,88716,88720,88728,88742,88762,88774,88782,88786,88794,88799,88818,88826,88836,88844,88852,88864,88868,88874,88878,88882,88898,88906,88915,88923,88931,88939,88943],{"__ignoreMap":62},[67,88693,88694,88696,88698,88700],{"class":69,"line":70},[67,88695,51834],{"class":77},[67,88697,51838],{"class":51837},[67,88699,51841],{"class":112},[67,88701,51844],{"class":77},[67,88703,88704,88706,88708,88710,88712,88714],{"class":69,"line":143},[67,88705,1766],{"class":77},[67,88707,51172],{"class":51837},[67,88709,51853],{"class":112},[67,88711,909],{"class":77},[67,88713,51858],{"class":84},[67,88715,51844],{"class":77},[67,88717,88718],{"class":69,"line":149},[67,88719,177],{"emptyLinePlaceholder":176},[67,88721,88722,88724,88726],{"class":69,"line":155},[67,88723,1766],{"class":77},[67,88725,51871],{"class":51837},[67,88727,51844],{"class":77},[67,88729,88730,88732,88734,88736,88738,88740],{"class":69,"line":161},[67,88731,52681],{"class":77},[67,88733,51881],{"class":51837},[67,88735,51884],{"class":112},[67,88737,909],{"class":77},[67,88739,51889],{"class":84},[67,88741,51844],{"class":77},[67,88743,88744,88746,88748,88750,88752,88754,88756,88758,88760],{"class":69,"line":167},[67,88745,52681],{"class":77},[67,88747,51881],{"class":51837},[67,88749,15637],{"class":112},[67,88751,909],{"class":77},[67,88753,51928],{"class":84},[67,88755,51908],{"class":112},[67,88757,909],{"class":77},[67,88759,51935],{"class":84},[67,88761,51844],{"class":77},[67,88763,88764,88766,88768,88770,88772],{"class":69,"line":173},[67,88765,52681],{"class":77},[67,88767,51944],{"class":51837},[67,88769,51947],{"class":77},[67,88771,51944],{"class":51837},[67,88773,51844],{"class":77},[67,88775,88776,88778,88780],{"class":69,"line":180},[67,88777,52322],{"class":77},[67,88779,51871],{"class":51837},[67,88781,51844],{"class":77},[67,88783,88784],{"class":69,"line":186},[67,88785,177],{"emptyLinePlaceholder":176},[67,88787,88788,88790,88792],{"class":69,"line":444},[67,88789,1766],{"class":77},[67,88791,52337],{"class":51837},[67,88793,51844],{"class":77},[67,88795,88796],{"class":69,"line":2335},[67,88797,88798],{"class":202},"  \u003C!-- 先引用这个库 -->\n",[67,88800,88801,88803,88805,88807,88809,88812,88814,88816],{"class":69,"line":2340},[67,88802,52681],{"class":77},[67,88804,52350],{"class":51837},[67,88806,55776],{"class":112},[67,88808,909],{"class":77},[67,88810,88811],{"class":84},"\"lodash.min.js\"",[67,88813,55851],{"class":77},[67,88815,52350],{"class":51837},[67,88817,51844],{"class":77},[67,88819,88820,88822,88824],{"class":69,"line":2346},[67,88821,52681],{"class":77},[67,88823,52350],{"class":51837},[67,88825,51844],{"class":77},[67,88827,88828,88830,88832,88834],{"class":69,"line":2351},[67,88829,11939],{"class":73},[67,88831,70508],{"class":208},[67,88833,14282],{"class":73},[67,88835,16289],{"class":77},[67,88837,88838,88840,88842],{"class":69,"line":2365},[67,88839,72153],{"class":77},[67,88841,88347],{"class":84},[67,88843,32003],{"class":77},[67,88845,88846,88848,88850],{"class":69,"line":2370},[67,88847,72163],{"class":77},[67,88849,1506],{"class":208},[67,88851,32003],{"class":77},[67,88853,88854,88856,88858,88860,88862],{"class":69,"line":2376},[67,88855,88362],{"class":77},[67,88857,88365],{"class":84},[67,88859,13153],{"class":77},[67,88861,88370],{"class":84},[67,88863,88373],{"class":77},[67,88865,88866],{"class":69,"line":2397},[67,88867,78409],{"class":77},[67,88869,88870,88872],{"class":69,"line":2402},[67,88871,88382],{"class":77},[67,88873,88385],{"class":84},[67,88875,88876],{"class":69,"line":2416},[67,88877,52935],{"class":77},[67,88879,88880],{"class":69,"line":2421},[67,88881,2909],{"class":77},[67,88883,88884,88886,88888,88890,88893,88896],{"class":69,"line":2450},[67,88885,11939],{"class":73},[67,88887,88400],{"class":208},[67,88889,14282],{"class":73},[67,88891,88892],{"class":77}," _.",[67,88894,88895],{"class":112},"cloneDeep",[67,88897,70573],{"class":77},[67,88899,88900,88902,88904],{"class":69,"line":2455},[67,88901,74290],{"class":77},[67,88903,58784],{"class":112},[67,88905,88592],{"class":77},[67,88907,88908,88911,88913],{"class":69,"line":2472},[67,88909,88910],{"class":77},"    o.family.baby ",[67,88912,909],{"class":73},[67,88914,88626],{"class":84},[67,88916,88917,88919,88921],{"class":69,"line":2477},[67,88918,74290],{"class":77},[67,88920,58784],{"class":112},[67,88922,70573],{"class":77},[67,88924,88925,88927,88929],{"class":69,"line":2482},[67,88926,52954],{"class":77},[67,88928,52350],{"class":51837},[67,88930,51844],{"class":77},[67,88932,88933,88935,88937],{"class":69,"line":2487},[67,88934,52322],{"class":77},[67,88936,52337],{"class":51837},[67,88938,51844],{"class":77},[67,88940,88941],{"class":69,"line":2501},[67,88942,177],{"emptyLinePlaceholder":176},[67,88944,88945,88947,88949],{"class":69,"line":2506},[67,88946,52322],{"class":77},[67,88948,51172],{"class":51837},[67,88950,51844],{"class":77},[19,88952,88953],{},[725,88954],{"alt":62,"src":88955},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-337.png",[40,88957,88959],{"id":88958},"_41423-利用json实现深拷贝","4.14.2.3 利用JSON实现深拷贝",[57,88961,88963],{"className":51170,"code":88962,"language":51172,"meta":62,"style":62},"\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",[64,88964,88965,88975,88989,88993,89001,89015,89035,89047,89055,89059,89067,89075,89085,89093,89101,89113,89117,89123,89127,89131,89136,89141,89146,89172,89180,89189,89197,89205,89213,89217],{"__ignoreMap":62},[67,88966,88967,88969,88971,88973],{"class":69,"line":70},[67,88968,51834],{"class":77},[67,88970,51838],{"class":51837},[67,88972,51841],{"class":112},[67,88974,51844],{"class":77},[67,88976,88977,88979,88981,88983,88985,88987],{"class":69,"line":143},[67,88978,1766],{"class":77},[67,88980,51172],{"class":51837},[67,88982,51853],{"class":112},[67,88984,909],{"class":77},[67,88986,51858],{"class":84},[67,88988,51844],{"class":77},[67,88990,88991],{"class":69,"line":149},[67,88992,177],{"emptyLinePlaceholder":176},[67,88994,88995,88997,88999],{"class":69,"line":155},[67,88996,1766],{"class":77},[67,88998,51871],{"class":51837},[67,89000,51844],{"class":77},[67,89002,89003,89005,89007,89009,89011,89013],{"class":69,"line":161},[67,89004,52681],{"class":77},[67,89006,51881],{"class":51837},[67,89008,51884],{"class":112},[67,89010,909],{"class":77},[67,89012,51889],{"class":84},[67,89014,51844],{"class":77},[67,89016,89017,89019,89021,89023,89025,89027,89029,89031,89033],{"class":69,"line":167},[67,89018,52681],{"class":77},[67,89020,51881],{"class":51837},[67,89022,15637],{"class":112},[67,89024,909],{"class":77},[67,89026,51928],{"class":84},[67,89028,51908],{"class":112},[67,89030,909],{"class":77},[67,89032,51935],{"class":84},[67,89034,51844],{"class":77},[67,89036,89037,89039,89041,89043,89045],{"class":69,"line":173},[67,89038,52681],{"class":77},[67,89040,51944],{"class":51837},[67,89042,51947],{"class":77},[67,89044,51944],{"class":51837},[67,89046,51844],{"class":77},[67,89048,89049,89051,89053],{"class":69,"line":180},[67,89050,52322],{"class":77},[67,89052,51871],{"class":51837},[67,89054,51844],{"class":77},[67,89056,89057],{"class":69,"line":186},[67,89058,177],{"emptyLinePlaceholder":176},[67,89060,89061,89063,89065],{"class":69,"line":444},[67,89062,1766],{"class":77},[67,89064,52337],{"class":51837},[67,89066,51844],{"class":77},[67,89068,89069,89071,89073],{"class":69,"line":2335},[67,89070,52681],{"class":77},[67,89072,52350],{"class":51837},[67,89074,51844],{"class":77},[67,89076,89077,89079,89081,89083],{"class":69,"line":2340},[67,89078,11939],{"class":73},[67,89080,70508],{"class":208},[67,89082,14282],{"class":73},[67,89084,16289],{"class":77},[67,89086,89087,89089,89091],{"class":69,"line":2346},[67,89088,72153],{"class":77},[67,89090,88347],{"class":84},[67,89092,32003],{"class":77},[67,89094,89095,89097,89099],{"class":69,"line":2351},[67,89096,72163],{"class":77},[67,89098,1506],{"class":208},[67,89100,32003],{"class":77},[67,89102,89103,89105,89107,89109,89111],{"class":69,"line":2365},[67,89104,88362],{"class":77},[67,89106,88365],{"class":84},[67,89108,13153],{"class":77},[67,89110,88370],{"class":84},[67,89112,88373],{"class":77},[67,89114,89115],{"class":69,"line":2370},[67,89116,78409],{"class":77},[67,89118,89119,89121],{"class":69,"line":2376},[67,89120,88382],{"class":77},[67,89122,88385],{"class":84},[67,89124,89125],{"class":69,"line":2397},[67,89126,52935],{"class":77},[67,89128,89129],{"class":69,"line":2402},[67,89130,2909],{"class":77},[67,89132,89133],{"class":69,"line":2416},[67,89134,89135],{"class":202},"    \u002F\u002F stringify 把对象转换为 JOSN 字符串; parse 把字符串转换为对象\n",[67,89137,89138],{"class":69,"line":2421},[67,89139,89140],{"class":202},"    \u002F\u002F 字符串就是简单数据类型了，就直接存值了，然后再转化为对象，然后就在堆里存值了，栈里存地址\n",[67,89142,89143],{"class":69,"line":2450},[67,89144,89145],{"class":202},"    \u002F\u002F 但是与原来对象没有联系了，独立了，修改值不会改变原对象了，中间经过了转化为字符串\n",[67,89147,89148,89150,89152,89154,89157,89159,89162,89164,89166,89168,89170],{"class":69,"line":2455},[67,89149,11939],{"class":73},[67,89151,88400],{"class":208},[67,89153,14282],{"class":73},[67,89155,89156],{"class":208}," JSON",[67,89158,240],{"class":77},[67,89160,89161],{"class":112},"parse",[67,89163,864],{"class":77},[67,89165,72201],{"class":208},[67,89167,240],{"class":77},[67,89169,72206],{"class":112},[67,89171,72209],{"class":77},[67,89173,89174,89176,89178],{"class":69,"line":2472},[67,89175,74290],{"class":77},[67,89177,58784],{"class":112},[67,89179,88592],{"class":77},[67,89181,89182,89184,89186],{"class":69,"line":2477},[67,89183,88910],{"class":77},[67,89185,909],{"class":73},[67,89187,89188],{"class":84}," '123'\n",[67,89190,89191,89193,89195],{"class":69,"line":2482},[67,89192,74290],{"class":77},[67,89194,58784],{"class":112},[67,89196,70573],{"class":77},[67,89198,89199,89201,89203],{"class":69,"line":2487},[67,89200,52954],{"class":77},[67,89202,52350],{"class":51837},[67,89204,51844],{"class":77},[67,89206,89207,89209,89211],{"class":69,"line":2501},[67,89208,52322],{"class":77},[67,89210,52337],{"class":51837},[67,89212,51844],{"class":77},[67,89214,89215],{"class":69,"line":2506},[67,89216,177],{"emptyLinePlaceholder":176},[67,89218,89219,89221,89223],{"class":69,"line":3298},[67,89220,52322],{"class":77},[67,89222,51172],{"class":51837},[67,89224,51844],{"class":77},[19,89226,89227],{},[725,89228],{"alt":62,"src":89229},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-338.png",[803,89231,89233],{"id":89232},"_415-异常处理","4.15 异常处理",[815,89235,89236],{},[818,89237,89238],{},"throw抛异常",[19,89240,89241],{},[725,89242],{"alt":62,"src":89243},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-339.png",[815,89245,89246],{"start":143},[818,89247,89248],{},"try\u002Fcatch 捕获错误信息",[19,89250,89251],{},[725,89252],{"alt":62,"src":89253},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-340.png",[57,89255,89257],{"className":51170,"code":89256,"language":51172,"meta":62,"style":62},"\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",[64,89258,89259,89269,89283,89287,89295,89309,89329,89341,89349,89353,89361,89373,89381,89390,89397,89402,89421,89430,89441,89446,89456,89461,89466,89471,89488,89492,89497,89504,89516,89520,89532,89536,89540,89545,89550,89557,89565,89573,89577],{"__ignoreMap":62},[67,89260,89261,89263,89265,89267],{"class":69,"line":70},[67,89262,51834],{"class":77},[67,89264,51838],{"class":51837},[67,89266,51841],{"class":112},[67,89268,51844],{"class":77},[67,89270,89271,89273,89275,89277,89279,89281],{"class":69,"line":143},[67,89272,1766],{"class":77},[67,89274,51172],{"class":51837},[67,89276,51853],{"class":112},[67,89278,909],{"class":77},[67,89280,51858],{"class":84},[67,89282,51844],{"class":77},[67,89284,89285],{"class":69,"line":149},[67,89286,177],{"emptyLinePlaceholder":176},[67,89288,89289,89291,89293],{"class":69,"line":155},[67,89290,1766],{"class":77},[67,89292,51871],{"class":51837},[67,89294,51844],{"class":77},[67,89296,89297,89299,89301,89303,89305,89307],{"class":69,"line":161},[67,89298,52681],{"class":77},[67,89300,51881],{"class":51837},[67,89302,51884],{"class":112},[67,89304,909],{"class":77},[67,89306,51889],{"class":84},[67,89308,51844],{"class":77},[67,89310,89311,89313,89315,89317,89319,89321,89323,89325,89327],{"class":69,"line":167},[67,89312,52681],{"class":77},[67,89314,51881],{"class":51837},[67,89316,15637],{"class":112},[67,89318,909],{"class":77},[67,89320,51928],{"class":84},[67,89322,51908],{"class":112},[67,89324,909],{"class":77},[67,89326,51935],{"class":84},[67,89328,51844],{"class":77},[67,89330,89331,89333,89335,89337,89339],{"class":69,"line":173},[67,89332,52681],{"class":77},[67,89334,51944],{"class":51837},[67,89336,51947],{"class":77},[67,89338,51944],{"class":51837},[67,89340,51844],{"class":77},[67,89342,89343,89345,89347],{"class":69,"line":180},[67,89344,52322],{"class":77},[67,89346,51871],{"class":51837},[67,89348,51844],{"class":77},[67,89350,89351],{"class":69,"line":186},[67,89352,177],{"emptyLinePlaceholder":176},[67,89354,89355,89357,89359],{"class":69,"line":444},[67,89356,1766],{"class":77},[67,89358,52337],{"class":51837},[67,89360,51844],{"class":77},[67,89362,89363,89365,89367,89369,89371],{"class":69,"line":2335},[67,89364,52681],{"class":77},[67,89366,19],{"class":51837},[67,89368,54031],{"class":77},[67,89370,19],{"class":51837},[67,89372,51844],{"class":77},[67,89374,89375,89377,89379],{"class":69,"line":2340},[67,89376,52681],{"class":77},[67,89378,52350],{"class":51837},[67,89380,51844],{"class":77},[67,89382,89383,89385,89388],{"class":69,"line":2346},[67,89384,70621],{"class":73},[67,89386,89387],{"class":112}," fn",[67,89389,11571],{"class":77},[67,89391,89392,89395],{"class":69,"line":2351},[67,89393,89394],{"class":73},"      try",[67,89396,16289],{"class":77},[67,89398,89399],{"class":69,"line":2365},[67,89400,89401],{"class":202},"        \u002F\u002F 可能发生错误的代码  要写到try中\n",[67,89403,89404,89406,89408,89410,89412,89414,89416,89419],{"class":69,"line":2370},[67,89405,61807],{"class":73},[67,89407,7544],{"class":208},[67,89409,14282],{"class":73},[67,89411,54933],{"class":77},[67,89413,54936],{"class":112},[67,89415,864],{"class":77},[67,89417,89418],{"class":84},"'.p'",[67,89420,870],{"class":77},[67,89422,89423,89426,89428],{"class":69,"line":2376},[67,89424,89425],{"class":77},"        p.style.color ",[67,89427,909],{"class":73},[67,89429,67588],{"class":84},[67,89431,89432,89435,89438],{"class":69,"line":2397},[67,89433,89434],{"class":77},"      } ",[67,89436,89437],{"class":73},"catch",[67,89439,89440],{"class":77}," (err) {\n",[67,89442,89443],{"class":69,"line":2402},[67,89444,89445],{"class":202},"        \u002F\u002F 拦截错误，提示浏览器提供的错误信息，但是不中断程序的执行\n",[67,89447,89448,89451,89453],{"class":69,"line":2416},[67,89449,89450],{"class":77},"        console.",[67,89452,58784],{"class":112},[67,89454,89455],{"class":77},"(err.message)\n",[67,89457,89458],{"class":69,"line":2421},[67,89459,89460],{"class":202},"        \u002F\u002F 想要中断程序，需要加return\n",[67,89462,89463],{"class":69,"line":2450},[67,89464,89465],{"class":202},"        \u002F\u002F return\n",[67,89467,89468],{"class":69,"line":2455},[67,89469,89470],{"class":202},"        \u002F\u002F 或者不用return，搭配throw来使用，因为throw可以中断程序\n",[67,89472,89473,89476,89478,89481,89483,89486],{"class":69,"line":2472},[67,89474,89475],{"class":73},"        throw",[67,89477,12296],{"class":73},[67,89479,89480],{"class":112}," Error",[67,89482,864],{"class":77},[67,89484,89485],{"class":84},"'你看看，选择器错误了吧'",[67,89487,870],{"class":77},[67,89489,89490],{"class":69,"line":2477},[67,89491,52935],{"class":77},[67,89493,89494],{"class":69,"line":2482},[67,89495,89496],{"class":202},"      \u002F\u002F finally时不管程序对不对，都要去执行的代码\n",[67,89498,89499,89502],{"class":69,"line":2487},[67,89500,89501],{"class":73},"      finally",[67,89503,16289],{"class":77},[67,89505,89506,89509,89511,89514],{"class":69,"line":2501},[67,89507,89508],{"class":112},"        alert",[67,89510,864],{"class":77},[67,89512,89513],{"class":84},"'弹出对话框'",[67,89515,870],{"class":77},[67,89517,89518],{"class":69,"line":2506},[67,89519,52935],{"class":77},[67,89521,89522,89524,89526,89528,89530],{"class":69,"line":3298},[67,89523,58781],{"class":77},[67,89525,58784],{"class":112},[67,89527,864],{"class":77},[67,89529,1329],{"class":208},[67,89531,870],{"class":77},[67,89533,89534],{"class":69,"line":3312},[67,89535,177],{"emptyLinePlaceholder":176},[67,89537,89538],{"class":69,"line":3320},[67,89539,2909],{"class":77},[67,89541,89542],{"class":69,"line":3325},[67,89543,89544],{"class":202},"    \u002F\u002F catch后边括号的是形参，写啥内容都行，保存了浏览器提供的错误信息\n",[67,89546,89547],{"class":69,"line":3331},[67,89548,89549],{"class":202},"    \u002F\u002F message是一个属性，没有错误信息时，catch就不会执行\n",[67,89551,89552,89555],{"class":69,"line":3337},[67,89553,89554],{"class":112},"    fn",[67,89556,2698],{"class":77},[67,89558,89559,89561,89563],{"class":69,"line":3342},[67,89560,52954],{"class":77},[67,89562,52350],{"class":51837},[67,89564,51844],{"class":77},[67,89566,89567,89569,89571],{"class":69,"line":8667},[67,89568,52322],{"class":77},[67,89570,52337],{"class":51837},[67,89572,51844],{"class":77},[67,89574,89575],{"class":69,"line":8691},[67,89576,177],{"emptyLinePlaceholder":176},[67,89578,89579,89581,89583],{"class":69,"line":8696},[67,89580,52322],{"class":77},[67,89582,51172],{"class":51837},[67,89584,51844],{"class":77},[19,89586,89587],{},"try和catch去处理可能有错误的代码，finally去处理不管有没有错误一定会执行的代码",[815,89589,89590],{"start":149},[818,89591,89592],{},"debugger",[19,89594,89595],{},[725,89596],{"alt":62,"src":89597},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-341.png",[19,89599,89600],{},"在代码比较长的情况用比较方便，在检查代码的时候输上debugger，浏览器f12，直接就跳转断点位置，剩下的调式与之前在浏览器手动打断点方式相同",[803,89602,89604],{"id":89603},"_416-处理this","4.16 处理this",[14,89606,89608],{"id":89607},"_4161-this的指向","4.16.1 this的指向",[815,89610,89611],{},[818,89612,89613],{},"普通函数的this",[19,89615,89616],{},[725,89617],{"alt":62,"src":89618},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-342.png",[815,89620,89621],{"start":143},[818,89622,89623],{},"箭头函数的this",[19,89625,89626],{},[725,89627],{"alt":62,"src":89628},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-343.png",[19,89630,89631],{},[725,89632],{"alt":62,"src":89633},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-344.png",[19,89635,89636],{},[725,89637],{"alt":62,"src":89638},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-345.png",[14,89640,89642],{"id":89641},"_4162-this的改变","4.16.2 this的改变",[19,89644,89645],{},"call() apply() bind()",[815,89647,89648],{},[818,89649,89650],{},"call()",[19,89652,89653],{},[725,89654],{"alt":62,"src":89655},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-346.png",[19,89657,89658],{},"两个作用：①调用函数；②改变this指向",[57,89660,89662],{"className":53604,"code":89661,"language":53606,"meta":62,"style":62},"\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",[64,89663,89664,89672,89680,89684,89689,89693,89698,89703,89708,89712,89717,89725],{"__ignoreMap":62},[67,89665,89666,89668,89670],{"class":69,"line":70},[67,89667,1766],{"class":77},[67,89669,52337],{"class":51837},[67,89671,51844],{"class":77},[67,89673,89674,89676,89678],{"class":69,"line":143},[67,89675,52681],{"class":77},[67,89677,52350],{"class":51837},[67,89679,51844],{"class":77},[67,89681,89682],{"class":69,"line":149},[67,89683,72060],{"class":77},[67,89685,89686],{"class":69,"line":155},[67,89687,89688],{"class":77},"      uname: 'pink'\n",[67,89690,89691],{"class":69,"line":161},[67,89692,2909],{"class":77},[67,89694,89695],{"class":69,"line":167},[67,89696,89697],{"class":77},"    function fn(x, y) {\n",[67,89699,89700],{"class":69,"line":173},[67,89701,89702],{"class":77},"      console.log(this)  \u002F\u002Fwindow\n",[67,89704,89705],{"class":69,"line":180},[67,89706,89707],{"class":77},"      console.log(x + y)\n",[67,89709,89710],{"class":69,"line":186},[67,89711,2909],{"class":77},[67,89713,89714],{"class":69,"line":444},[67,89715,89716],{"class":77},"    fn.call(obj, 1, 2)\n",[67,89718,89719,89721,89723],{"class":69,"line":2335},[67,89720,52954],{"class":77},[67,89722,52350],{"class":51837},[67,89724,51844],{"class":77},[67,89726,89727,89729,89731],{"class":69,"line":2340},[67,89728,52322],{"class":77},[67,89730,52337],{"class":51837},[67,89732,51844],{"class":77},[19,89734,89735],{},[725,89736],{"alt":62,"src":89737},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-347.png",[815,89739,89740],{"start":143},[818,89741,89742],{},"apply()",[19,89744,89745],{},[725,89746],{"alt":62,"src":89747},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-348.png",[19,89749,89658],{},[19,89751,89752],{},"call传递的是普通参数，而apply必须传递的是数组",[57,89754,89756],{"className":51170,"code":89755,"language":51172,"meta":62,"style":62},"\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",[64,89757,89758,89768,89782,89786,89794,89808,89828,89840,89848,89852,89860,89868,89878,89885,89889,89894,89910,89922,89936,89940,89945,89964,89969,89973,89978,89983,89991,89996,90018,90023,90039,90055,90067,90071,90076,90095,90103,90111,90115],{"__ignoreMap":62},[67,89759,89760,89762,89764,89766],{"class":69,"line":70},[67,89761,51834],{"class":77},[67,89763,51838],{"class":51837},[67,89765,51841],{"class":112},[67,89767,51844],{"class":77},[67,89769,89770,89772,89774,89776,89778,89780],{"class":69,"line":143},[67,89771,1766],{"class":77},[67,89773,51172],{"class":51837},[67,89775,51853],{"class":112},[67,89777,909],{"class":77},[67,89779,51858],{"class":84},[67,89781,51844],{"class":77},[67,89783,89784],{"class":69,"line":149},[67,89785,177],{"emptyLinePlaceholder":176},[67,89787,89788,89790,89792],{"class":69,"line":155},[67,89789,1766],{"class":77},[67,89791,51871],{"class":51837},[67,89793,51844],{"class":77},[67,89795,89796,89798,89800,89802,89804,89806],{"class":69,"line":161},[67,89797,52681],{"class":77},[67,89799,51881],{"class":51837},[67,89801,51884],{"class":112},[67,89803,909],{"class":77},[67,89805,51889],{"class":84},[67,89807,51844],{"class":77},[67,89809,89810,89812,89814,89816,89818,89820,89822,89824,89826],{"class":69,"line":167},[67,89811,52681],{"class":77},[67,89813,51881],{"class":51837},[67,89815,15637],{"class":112},[67,89817,909],{"class":77},[67,89819,51928],{"class":84},[67,89821,51908],{"class":112},[67,89823,909],{"class":77},[67,89825,51935],{"class":84},[67,89827,51844],{"class":77},[67,89829,89830,89832,89834,89836,89838],{"class":69,"line":173},[67,89831,52681],{"class":77},[67,89833,51944],{"class":51837},[67,89835,51947],{"class":77},[67,89837,51944],{"class":51837},[67,89839,51844],{"class":77},[67,89841,89842,89844,89846],{"class":69,"line":180},[67,89843,52322],{"class":77},[67,89845,51871],{"class":51837},[67,89847,51844],{"class":77},[67,89849,89850],{"class":69,"line":186},[67,89851,177],{"emptyLinePlaceholder":176},[67,89853,89854,89856,89858],{"class":69,"line":444},[67,89855,1766],{"class":77},[67,89857,52337],{"class":51837},[67,89859,51844],{"class":77},[67,89861,89862,89864,89866],{"class":69,"line":2335},[67,89863,52681],{"class":77},[67,89865,52350],{"class":51837},[67,89867,51844],{"class":77},[67,89869,89870,89872,89874,89876],{"class":69,"line":2340},[67,89871,11939],{"class":73},[67,89873,70508],{"class":208},[67,89875,14282],{"class":73},[67,89877,16289],{"class":77},[67,89879,89880,89882],{"class":69,"line":2346},[67,89881,72163],{"class":77},[67,89883,89884],{"class":208},"18\n",[67,89886,89887],{"class":69,"line":2351},[67,89888,2909],{"class":77},[67,89890,89891],{"class":69,"line":2365},[67,89892,89893],{"class":202},"    \u002F\u002F 形参接收的不是数组，是数组里的值，但实参必须是数组\n",[67,89895,89896,89898,89900,89902,89904,89906,89908],{"class":69,"line":2370},[67,89897,70621],{"class":73},[67,89899,89387],{"class":112},[67,89901,864],{"class":77},[67,89903,1676],{"class":5935},[67,89905,13153],{"class":77},[67,89907,1701],{"class":5935},[67,89909,13160],{"class":77},[67,89911,89912,89914,89916,89918,89920],{"class":69,"line":2376},[67,89913,58781],{"class":77},[67,89915,58784],{"class":112},[67,89917,864],{"class":77},[67,89919,87530],{"class":208},[67,89921,870],{"class":77},[67,89923,89924,89926,89928,89931,89933],{"class":69,"line":2397},[67,89925,58781],{"class":77},[67,89927,58784],{"class":112},[67,89929,89930],{"class":77},"(x ",[67,89932,1338],{"class":73},[67,89934,89935],{"class":77}," y)\n",[67,89937,89938],{"class":69,"line":2402},[67,89939,2909],{"class":77},[67,89941,89942],{"class":69,"line":2416},[67,89943,89944],{"class":202},"    \u002F\u002F fn.apply(this指向谁, 数组参数)\n",[67,89946,89947,89950,89953,89956,89958,89960,89962],{"class":69,"line":2421},[67,89948,89949],{"class":77},"    fn.",[67,89951,89952],{"class":112},"apply",[67,89954,89955],{"class":77},"(obj, [",[67,89957,1077],{"class":208},[67,89959,13153],{"class":77},[67,89961,939],{"class":208},[67,89963,5376],{"class":77},[67,89965,89966],{"class":69,"line":2450},[67,89967,89968],{"class":202},"    \u002F\u002F 和call一样，返回值就是函数的返回值，因为他就是在调用函数\n",[67,89970,89971],{"class":69,"line":2455},[67,89972,177],{"emptyLinePlaceholder":176},[67,89974,89975],{"class":69,"line":2472},[67,89976,89977],{"class":202},"    \u002F\u002F 使用场景：求数组最大值\n",[67,89979,89980],{"class":69,"line":2477},[67,89981,89982],{"class":202},"    \u002F\u002F const max = Math.max(1, 2, 3)\n",[67,89984,89985,89988],{"class":69,"line":2482},[67,89986,89987],{"class":202},"    \u002F\u002F console.log(max)",[67,89989,89990],{"class":202},"   \u002F\u002F3\n",[67,89992,89993],{"class":69,"line":2487},[67,89994,89995],{"class":202},"    \u002F\u002F 指向空或者Math都是可以的\n",[67,89997,89998,90000,90002,90004,90006,90008,90010,90012,90014,90016],{"class":69,"line":2501},[67,89999,11939],{"class":73},[67,90001,58232],{"class":208},[67,90003,14282],{"class":73},[67,90005,52763],{"class":77},[67,90007,1169],{"class":208},[67,90009,13153],{"class":77},[67,90011,1361],{"class":208},[67,90013,13153],{"class":77},[67,90015,1392],{"class":208},[67,90017,33783],{"class":77},[67,90019,90020],{"class":69,"line":2506},[67,90021,90022],{"class":202},"    \u002F\u002F apply这个方法实参必须是数组，形参是接收的是数组中的每一个值\n",[67,90024,90025,90027,90029,90031,90034,90036],{"class":69,"line":3298},[67,90026,11939],{"class":73},[67,90028,6670],{"class":208},[67,90030,14282],{"class":73},[67,90032,90033],{"class":77}," Math.max.",[67,90035,89952],{"class":112},[67,90037,90038],{"class":77},"(Math, arr)\n",[67,90040,90041,90043,90046,90048,90051,90053],{"class":69,"line":3312},[67,90042,11939],{"class":73},[67,90044,90045],{"class":208}," min",[67,90047,14282],{"class":73},[67,90049,90050],{"class":77}," Math.min.",[67,90052,89952],{"class":112},[67,90054,90038],{"class":77},[67,90056,90057,90059,90061,90064],{"class":69,"line":3320},[67,90058,74290],{"class":77},[67,90060,58784],{"class":112},[67,90062,90063],{"class":77},"(max, min)     ",[67,90065,90066],{"class":202},"\u002F\u002F100,4\n",[67,90068,90069],{"class":69,"line":3325},[67,90070,177],{"emptyLinePlaceholder":176},[67,90072,90073],{"class":69,"line":3331},[67,90074,90075],{"class":202},"    \u002F\u002F 求最大值的另一种方式:展开运算符\n",[67,90077,90078,90080,90082,90085,90087,90089,90092],{"class":69,"line":3337},[67,90079,74290],{"class":77},[67,90081,58784],{"class":112},[67,90083,90084],{"class":77},"(Max.",[67,90086,6734],{"class":112},[67,90088,864],{"class":77},[67,90090,90091],{"class":73},"...",[67,90093,90094],{"class":77},"arr))\n",[67,90096,90097,90099,90101],{"class":69,"line":3342},[67,90098,52954],{"class":77},[67,90100,52350],{"class":51837},[67,90102,51844],{"class":77},[67,90104,90105,90107,90109],{"class":69,"line":8667},[67,90106,52322],{"class":77},[67,90108,52337],{"class":51837},[67,90110,51844],{"class":77},[67,90112,90113],{"class":69,"line":8691},[67,90114,177],{"emptyLinePlaceholder":176},[67,90116,90117,90119,90121],{"class":69,"line":8696},[67,90118,52322],{"class":77},[67,90120,51172],{"class":51837},[67,90122,51844],{"class":77},[19,90124,90125],{},[725,90126],{"alt":62,"src":90127},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-349.png",[815,90129,90130],{"start":149},[818,90131,90132],{},"bind()",[19,90134,90135],{},[725,90136],{"alt":62,"src":90137},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-350.png",[19,90139,90140],{},"bind()相比于call和apply来说不会调用函数，call和apply只要一写就直接调用函数",[19,90142,90143],{},"bind的语法跟call很相似",[57,90145,90147],{"className":53604,"code":90146,"language":53606,"meta":62,"style":62},"\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",[64,90148,90149,90157,90165,90169,90174,90178,90182,90187,90191,90196,90201,90206,90211,90216,90221,90226,90230,90238],{"__ignoreMap":62},[67,90150,90151,90153,90155],{"class":69,"line":70},[67,90152,1766],{"class":77},[67,90154,52337],{"class":51837},[67,90156,51844],{"class":77},[67,90158,90159,90161,90163],{"class":69,"line":143},[67,90160,52681],{"class":77},[67,90162,52350],{"class":51837},[67,90164,51844],{"class":77},[67,90166,90167],{"class":69,"line":149},[67,90168,72060],{"class":77},[67,90170,90171],{"class":69,"line":155},[67,90172,90173],{"class":77},"      age: 18\n",[67,90175,90176],{"class":69,"line":161},[67,90177,2909],{"class":77},[67,90179,90180],{"class":69,"line":167},[67,90181,77680],{"class":77},[67,90183,90184],{"class":69,"line":173},[67,90185,90186],{"class":77},"      console.log(this)\n",[67,90188,90189],{"class":69,"line":180},[67,90190,2909],{"class":77},[67,90192,90193],{"class":69,"line":186},[67,90194,90195],{"class":77},"    \u002F\u002F 1.bind 不会调用函数\n",[67,90197,90198],{"class":69,"line":444},[67,90199,90200],{"class":77},"    \u002F\u002F 2.bind能改变this的指向\n",[67,90202,90203],{"class":69,"line":2335},[67,90204,90205],{"class":77},"    fn.bind()\n",[67,90207,90208],{"class":69,"line":2340},[67,90209,90210],{"class":77},"    \u002F\u002F 3.返回值是一个函数,他相当于进行的是对原函数拷贝,然后新函数的这个this指向我们设定的那个指定值\n",[67,90212,90213],{"class":69,"line":2346},[67,90214,90215],{"class":77},"    const fun = fn.bind(obj)\n",[67,90217,90218],{"class":69,"line":2351},[67,90219,90220],{"class":77},"    \u002F\u002F console.log(fun)\n",[67,90222,90223],{"class":69,"line":2365},[67,90224,90225],{"class":77},"    \u002F\u002F 调用,查看this的指向\n",[67,90227,90228],{"class":69,"line":2370},[67,90229,53188],{"class":77},[67,90231,90232,90234,90236],{"class":69,"line":2376},[67,90233,52954],{"class":77},[67,90235,52350],{"class":51837},[67,90237,51844],{"class":77},[67,90239,90240,90242,90244],{"class":69,"line":2397},[67,90241,52322],{"class":77},[67,90243,52337],{"class":51837},[67,90245,51844],{"class":77},[19,90247,90248],{},[725,90249],{"alt":62,"src":90250},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-351.png",[815,90252,90253],{"start":155},[818,90254,90255],{},"按钮案例：按钮点击之后被禁用，两秒之后自动变为不禁用状态，要求尽可能多的用this",[57,90257,90259],{"className":53604,"code":90258,"language":53606,"meta":62,"style":62},"\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",[64,90260,90261,90269,90282,90290,90295,90299,90304,90309,90314,90319,90324,90329,90334,90339,90343,90351],{"__ignoreMap":62},[67,90262,90263,90265,90267],{"class":69,"line":70},[67,90264,1766],{"class":77},[67,90266,52337],{"class":51837},[67,90268,51844],{"class":77},[67,90270,90271,90273,90275,90278,90280],{"class":69,"line":143},[67,90272,52681],{"class":77},[67,90274,54424],{"class":51837},[67,90276,90277],{"class":77},">禁用\u003C\u002F",[67,90279,54424],{"class":51837},[67,90281,51844],{"class":77},[67,90283,90284,90286,90288],{"class":69,"line":149},[67,90285,52681],{"class":77},[67,90287,52350],{"class":51837},[67,90289,51844],{"class":77},[67,90291,90292],{"class":69,"line":155},[67,90293,90294],{"class":77},"    const btn = document.querySelector('button')\n",[67,90296,90297],{"class":69,"line":161},[67,90298,59553],{"class":77},[67,90300,90301],{"class":69,"line":167},[67,90302,90303],{"class":77},"      this.disabled = true\n",[67,90305,90306],{"class":69,"line":173},[67,90307,90308],{"class":77},"      \u002F\u002F 定时器是window进行调用的\n",[67,90310,90311],{"class":69,"line":180},[67,90312,90313],{"class":77},"      setTimeout(function () {\n",[67,90315,90316],{"class":69,"line":186},[67,90317,90318],{"class":77},"        \u002F\u002F 在这个普通函数里面，我们要this由原来的window 改为 btn\n",[67,90320,90321],{"class":69,"line":444},[67,90322,90323],{"class":77},"        this.disabled = false\n",[67,90325,90326],{"class":69,"line":2335},[67,90327,90328],{"class":77},"      }.bind(this), 2000)\n",[67,90330,90331],{"class":69,"line":2340},[67,90332,90333],{"class":77},"      \u002F\u002F 上边的这个this是在延时函数外面的，所以这个this跟上边的那个this是相同的，就是指的是btn\n",[67,90335,90336],{"class":69,"line":2346},[67,90337,90338],{"class":77},"      \u002F\u002F .bind(this)之后就已经拷贝完之前对象了，就可以等两秒之后延时函数来调用它就可以了\n",[67,90340,90341],{"class":69,"line":2351},[67,90342,33998],{"class":77},[67,90344,90345,90347,90349],{"class":69,"line":2365},[67,90346,52954],{"class":77},[67,90348,52350],{"class":51837},[67,90350,51844],{"class":77},[67,90352,90353,90355,90357],{"class":69,"line":2370},[67,90354,52322],{"class":77},[67,90356,52337],{"class":51837},[67,90358,51844],{"class":77},[815,90360,90361],{"start":161},[818,90362,22670],{},[19,90364,90365],{},[725,90366],{"alt":62,"src":90367},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-352.png",[803,90369,90371],{"id":90370},"_417-性能优化","4.17 性能优化",[14,90373,90375],{"id":90374},"_4171-防抖","4.17.1 防抖",[19,90377,90378],{},[725,90379],{"alt":62,"src":90380},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-353.png",[19,90382,90383],{},[336,90384,90385],{},"案例：利用防抖来处理-鼠标经过盒子显示文字（要求:鼠标在盒子上移动，里面的数字就会变化+1）",[19,90387,90388],{},"防抖实现方式：",[1863,90390,90391],{},[818,90392,90393],{},"lodash 提供了防抖处理",[19,90395,90396],{},"_.debounce(func,[wait=0],[options={}])",[19,90398,90399],{},"创建一个debounced（防抖函数），该函数会从上一次被调用后，延迟wait毫秒后调用func方法。",[57,90401,90403],{"className":51170,"code":90402,"language":51172,"meta":62,"style":62},"\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",[64,90404,90405,90415,90429,90433,90441,90455,90475,90487,90495,90501,90511,90523,90535,90546,90558,90568,90578,90591,90595,90603,90611,90615,90623,90641,90659,90667,90686,90696,90705,90716,90721,90725,90730,90735,90740,90765,90773,90781,90785],{"__ignoreMap":62},[67,90406,90407,90409,90411,90413],{"class":69,"line":70},[67,90408,51834],{"class":77},[67,90410,51838],{"class":51837},[67,90412,51841],{"class":112},[67,90414,51844],{"class":77},[67,90416,90417,90419,90421,90423,90425,90427],{"class":69,"line":143},[67,90418,1766],{"class":77},[67,90420,51172],{"class":51837},[67,90422,51853],{"class":112},[67,90424,909],{"class":77},[67,90426,51858],{"class":84},[67,90428,51844],{"class":77},[67,90430,90431],{"class":69,"line":149},[67,90432,177],{"emptyLinePlaceholder":176},[67,90434,90435,90437,90439],{"class":69,"line":155},[67,90436,1766],{"class":77},[67,90438,51871],{"class":51837},[67,90440,51844],{"class":77},[67,90442,90443,90445,90447,90449,90451,90453],{"class":69,"line":161},[67,90444,52681],{"class":77},[67,90446,51881],{"class":51837},[67,90448,51884],{"class":112},[67,90450,909],{"class":77},[67,90452,51889],{"class":84},[67,90454,51844],{"class":77},[67,90456,90457,90459,90461,90463,90465,90467,90469,90471,90473],{"class":69,"line":167},[67,90458,52681],{"class":77},[67,90460,51881],{"class":51837},[67,90462,15637],{"class":112},[67,90464,909],{"class":77},[67,90466,51928],{"class":84},[67,90468,51908],{"class":112},[67,90470,909],{"class":77},[67,90472,51935],{"class":84},[67,90474,51844],{"class":77},[67,90476,90477,90479,90481,90483,90485],{"class":69,"line":173},[67,90478,52681],{"class":77},[67,90480,51944],{"class":51837},[67,90482,51947],{"class":77},[67,90484,51944],{"class":51837},[67,90486,51844],{"class":77},[67,90488,90489,90491,90493],{"class":69,"line":180},[67,90490,52681],{"class":77},[67,90492,779],{"class":51837},[67,90494,51844],{"class":77},[67,90496,90497,90499],{"class":69,"line":186},[67,90498,55289],{"class":112},[67,90500,16289],{"class":77},[67,90502,90503,90505,90507,90509],{"class":69,"line":444},[67,90504,73133],{"class":208},[67,90506,51974],{"class":77},[67,90508,61042],{"class":208},[67,90510,2017],{"class":77},[67,90512,90513,90515,90517,90519,90521],{"class":69,"line":2335},[67,90514,55308],{"class":208},[67,90516,51974],{"class":77},[67,90518,2445],{"class":208},[67,90520,52029],{"class":73},[67,90522,2017],{"class":77},[67,90524,90525,90527,90529,90531,90533],{"class":69,"line":2340},[67,90526,55322],{"class":208},[67,90528,51974],{"class":77},[67,90530,2445],{"class":208},[67,90532,52029],{"class":73},[67,90534,2017],{"class":77},[67,90536,90537,90539,90541,90544],{"class":69,"line":2346},[67,90538,55421],{"class":208},[67,90540,51974],{"class":77},[67,90542,90543],{"class":208},"gray",[67,90545,2017],{"class":77},[67,90547,90548,90550,90552,90554,90556],{"class":69,"line":2351},[67,90549,55459],{"class":208},[67,90551,51974],{"class":77},[67,90553,1681],{"class":208},[67,90555,52029],{"class":73},[67,90557,2017],{"class":77},[67,90559,90560,90562,90564,90566],{"class":69,"line":2365},[67,90561,57953],{"class":208},[67,90563,51974],{"class":77},[67,90565,61379],{"class":208},[67,90567,2017],{"class":77},[67,90569,90570,90572,90574,90576],{"class":69,"line":2370},[67,90571,57823],{"class":208},[67,90573,51974],{"class":77},[67,90575,52129],{"class":208},[67,90577,2017],{"class":77},[67,90579,90580,90583,90585,90587,90589],{"class":69,"line":2376},[67,90581,90582],{"class":208},"      padding-top",[67,90584,51974],{"class":77},[67,90586,1177],{"class":208},[67,90588,52029],{"class":73},[67,90590,2017],{"class":77},[67,90592,90593],{"class":69,"line":2397},[67,90594,2909],{"class":77},[67,90596,90597,90599,90601],{"class":69,"line":2402},[67,90598,52954],{"class":77},[67,90600,779],{"class":51837},[67,90602,51844],{"class":77},[67,90604,90605,90607,90609],{"class":69,"line":2416},[67,90606,52322],{"class":77},[67,90608,51871],{"class":51837},[67,90610,51844],{"class":77},[67,90612,90613],{"class":69,"line":2421},[67,90614,177],{"emptyLinePlaceholder":176},[67,90616,90617,90619,90621],{"class":69,"line":2450},[67,90618,1766],{"class":77},[67,90620,52337],{"class":51837},[67,90622,51844],{"class":77},[67,90624,90625,90627,90629,90631,90633,90635,90637,90639],{"class":69,"line":2455},[67,90626,52681],{"class":77},[67,90628,52148],{"class":51837},[67,90630,54023],{"class":112},[67,90632,909],{"class":77},[67,90634,54028],{"class":84},[67,90636,55851],{"class":77},[67,90638,52148],{"class":51837},[67,90640,51844],{"class":77},[67,90642,90643,90645,90647,90649,90651,90653,90655,90657],{"class":69,"line":2472},[67,90644,52681],{"class":77},[67,90646,52350],{"class":51837},[67,90648,55776],{"class":112},[67,90650,909],{"class":77},[67,90652,88811],{"class":84},[67,90654,55851],{"class":77},[67,90656,52350],{"class":51837},[67,90658,51844],{"class":77},[67,90660,90661,90663,90665],{"class":69,"line":2477},[67,90662,52681],{"class":77},[67,90664,52350],{"class":51837},[67,90666,51844],{"class":77},[67,90668,90669,90671,90673,90675,90677,90679,90681,90684],{"class":69,"line":2482},[67,90670,11939],{"class":73},[67,90672,87470],{"class":208},[67,90674,14282],{"class":73},[67,90676,54933],{"class":77},[67,90678,54936],{"class":112},[67,90680,864],{"class":77},[67,90682,90683],{"class":84},"'.box'",[67,90685,870],{"class":77},[67,90687,90688,90690,90692,90694],{"class":69,"line":2487},[67,90689,52756],{"class":73},[67,90691,10157],{"class":77},[67,90693,909],{"class":73},[67,90695,47870],{"class":208},[67,90697,90698,90700,90703],{"class":69,"line":2501},[67,90699,70621],{"class":73},[67,90701,90702],{"class":112}," mouseMove",[67,90704,11571],{"class":77},[67,90706,90707,90710,90712,90714],{"class":69,"line":2506},[67,90708,90709],{"class":77},"      box.innerHTML ",[67,90711,909],{"class":73},[67,90713,3752],{"class":77},[67,90715,3423],{"class":73},[67,90717,90718],{"class":69,"line":3298},[67,90719,90720],{"class":202},"      \u002F\u002F 如果里面存在大量消耗性能的代码，比如dom操作，比如数据处理，可能会造成卡顿\n",[67,90722,90723],{"class":69,"line":3312},[67,90724,2909],{"class":77},[67,90726,90727],{"class":69,"line":3320},[67,90728,90729],{"class":202},"    \u002F\u002F box.addEventListener('mousemove', mouseMove)\n",[67,90731,90732],{"class":69,"line":3325},[67,90733,90734],{"class":202},"    \u002F\u002F 利用lodash库实现防抖 -500毫秒之后才去+1\n",[67,90736,90737],{"class":69,"line":3331},[67,90738,90739],{"class":202},"    \u002F\u002F 以前在事件监听中的执行函数是不可以加括号的，加括号就成调用了，但是现在是需要传递参数的，所以必须加\n",[67,90741,90742,90745,90747,90749,90752,90755,90758,90761,90763],{"class":69,"line":3337},[67,90743,90744],{"class":77},"    box.",[67,90746,58350],{"class":112},[67,90748,864],{"class":77},[67,90750,90751],{"class":84},"'mousemove'",[67,90753,90754],{"class":77},", _.",[67,90756,90757],{"class":112},"debounce",[67,90759,90760],{"class":77},"(mouseMove, ",[67,90762,65611],{"class":208},[67,90764,31034],{"class":77},[67,90766,90767,90769,90771],{"class":69,"line":3342},[67,90768,52954],{"class":77},[67,90770,52350],{"class":51837},[67,90772,51844],{"class":77},[67,90774,90775,90777,90779],{"class":69,"line":8667},[67,90776,52322],{"class":77},[67,90778,52337],{"class":51837},[67,90780,51844],{"class":77},[67,90782,90783],{"class":69,"line":8691},[67,90784,177],{"emptyLinePlaceholder":176},[67,90786,90787,90789,90791],{"class":69,"line":8696},[67,90788,52322],{"class":77},[67,90790,51172],{"class":51837},[67,90792,51844],{"class":77},[1863,90794,90795],{},[818,90796,90797],{},"手写一个防抖函数来处理",[19,90799,90800],{},"防抖的核心就是利用定时器来实现的：",[19,90802,90803],{},"①声明一个定时器变量",[19,90805,90806],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器先清除以前的定时器",[19,90808,90809],{},"③如果没有定时器则开启定时器，记得存到变量里面",[57,90811,90813],{"className":51170,"code":90812,"language":51172,"meta":62,"style":62},"\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",[64,90814,90815,90825,90839,90843,90851,90865,90885,90897,90905,90911,90921,90933,90945,90955,90967,90977,90987,90999,91003,91011,91019,91023,91031,91049,91067,91075,91093,91103,91111,91121,91125,91129,91133,91138,91143,91148,91153,91158,91163,91181,91188,91193,91201,91206,91219,91235,91245,91250,91254,91258,91278,91282,91287,91292,91297,91302,91310,91318,91322],{"__ignoreMap":62},[67,90816,90817,90819,90821,90823],{"class":69,"line":70},[67,90818,51834],{"class":77},[67,90820,51838],{"class":51837},[67,90822,51841],{"class":112},[67,90824,51844],{"class":77},[67,90826,90827,90829,90831,90833,90835,90837],{"class":69,"line":143},[67,90828,1766],{"class":77},[67,90830,51172],{"class":51837},[67,90832,51853],{"class":112},[67,90834,909],{"class":77},[67,90836,51858],{"class":84},[67,90838,51844],{"class":77},[67,90840,90841],{"class":69,"line":149},[67,90842,177],{"emptyLinePlaceholder":176},[67,90844,90845,90847,90849],{"class":69,"line":155},[67,90846,1766],{"class":77},[67,90848,51871],{"class":51837},[67,90850,51844],{"class":77},[67,90852,90853,90855,90857,90859,90861,90863],{"class":69,"line":161},[67,90854,52681],{"class":77},[67,90856,51881],{"class":51837},[67,90858,51884],{"class":112},[67,90860,909],{"class":77},[67,90862,51889],{"class":84},[67,90864,51844],{"class":77},[67,90866,90867,90869,90871,90873,90875,90877,90879,90881,90883],{"class":69,"line":167},[67,90868,52681],{"class":77},[67,90870,51881],{"class":51837},[67,90872,15637],{"class":112},[67,90874,909],{"class":77},[67,90876,51928],{"class":84},[67,90878,51908],{"class":112},[67,90880,909],{"class":77},[67,90882,51935],{"class":84},[67,90884,51844],{"class":77},[67,90886,90887,90889,90891,90893,90895],{"class":69,"line":173},[67,90888,52681],{"class":77},[67,90890,51944],{"class":51837},[67,90892,51947],{"class":77},[67,90894,51944],{"class":51837},[67,90896,51844],{"class":77},[67,90898,90899,90901,90903],{"class":69,"line":180},[67,90900,52681],{"class":77},[67,90902,779],{"class":51837},[67,90904,51844],{"class":77},[67,90906,90907,90909],{"class":69,"line":186},[67,90908,55289],{"class":112},[67,90910,16289],{"class":77},[67,90912,90913,90915,90917,90919],{"class":69,"line":444},[67,90914,73133],{"class":208},[67,90916,51974],{"class":77},[67,90918,61042],{"class":208},[67,90920,2017],{"class":77},[67,90922,90923,90925,90927,90929,90931],{"class":69,"line":2335},[67,90924,55308],{"class":208},[67,90926,51974],{"class":77},[67,90928,2445],{"class":208},[67,90930,52029],{"class":73},[67,90932,2017],{"class":77},[67,90934,90935,90937,90939,90941,90943],{"class":69,"line":2340},[67,90936,55322],{"class":208},[67,90938,51974],{"class":77},[67,90940,2445],{"class":208},[67,90942,52029],{"class":73},[67,90944,2017],{"class":77},[67,90946,90947,90949,90951,90953],{"class":69,"line":2346},[67,90948,55421],{"class":208},[67,90950,51974],{"class":77},[67,90952,90543],{"class":208},[67,90954,2017],{"class":77},[67,90956,90957,90959,90961,90963,90965],{"class":69,"line":2351},[67,90958,55459],{"class":208},[67,90960,51974],{"class":77},[67,90962,1681],{"class":208},[67,90964,52029],{"class":73},[67,90966,2017],{"class":77},[67,90968,90969,90971,90973,90975],{"class":69,"line":2365},[67,90970,57953],{"class":208},[67,90972,51974],{"class":77},[67,90974,61379],{"class":208},[67,90976,2017],{"class":77},[67,90978,90979,90981,90983,90985],{"class":69,"line":2370},[67,90980,57823],{"class":208},[67,90982,51974],{"class":77},[67,90984,52129],{"class":208},[67,90986,2017],{"class":77},[67,90988,90989,90991,90993,90995,90997],{"class":69,"line":2376},[67,90990,90582],{"class":208},[67,90992,51974],{"class":77},[67,90994,1177],{"class":208},[67,90996,52029],{"class":73},[67,90998,2017],{"class":77},[67,91000,91001],{"class":69,"line":2397},[67,91002,2909],{"class":77},[67,91004,91005,91007,91009],{"class":69,"line":2402},[67,91006,52954],{"class":77},[67,91008,779],{"class":51837},[67,91010,51844],{"class":77},[67,91012,91013,91015,91017],{"class":69,"line":2416},[67,91014,52322],{"class":77},[67,91016,51871],{"class":51837},[67,91018,51844],{"class":77},[67,91020,91021],{"class":69,"line":2421},[67,91022,177],{"emptyLinePlaceholder":176},[67,91024,91025,91027,91029],{"class":69,"line":2450},[67,91026,1766],{"class":77},[67,91028,52337],{"class":51837},[67,91030,51844],{"class":77},[67,91032,91033,91035,91037,91039,91041,91043,91045,91047],{"class":69,"line":2455},[67,91034,52681],{"class":77},[67,91036,52148],{"class":51837},[67,91038,54023],{"class":112},[67,91040,909],{"class":77},[67,91042,54028],{"class":84},[67,91044,55851],{"class":77},[67,91046,52148],{"class":51837},[67,91048,51844],{"class":77},[67,91050,91051,91053,91055,91057,91059,91061,91063,91065],{"class":69,"line":2472},[67,91052,52681],{"class":77},[67,91054,52350],{"class":51837},[67,91056,55776],{"class":112},[67,91058,909],{"class":77},[67,91060,88811],{"class":84},[67,91062,55851],{"class":77},[67,91064,52350],{"class":51837},[67,91066,51844],{"class":77},[67,91068,91069,91071,91073],{"class":69,"line":2477},[67,91070,52681],{"class":77},[67,91072,52350],{"class":51837},[67,91074,51844],{"class":77},[67,91076,91077,91079,91081,91083,91085,91087,91089,91091],{"class":69,"line":2482},[67,91078,11939],{"class":73},[67,91080,87470],{"class":208},[67,91082,14282],{"class":73},[67,91084,54933],{"class":77},[67,91086,54936],{"class":112},[67,91088,864],{"class":77},[67,91090,90683],{"class":84},[67,91092,870],{"class":77},[67,91094,91095,91097,91099,91101],{"class":69,"line":2487},[67,91096,52756],{"class":73},[67,91098,10157],{"class":77},[67,91100,909],{"class":73},[67,91102,47870],{"class":208},[67,91104,91105,91107,91109],{"class":69,"line":2501},[67,91106,70621],{"class":73},[67,91108,90702],{"class":112},[67,91110,11571],{"class":77},[67,91112,91113,91115,91117,91119],{"class":69,"line":2506},[67,91114,90709],{"class":77},[67,91116,909],{"class":73},[67,91118,3752],{"class":77},[67,91120,3423],{"class":73},[67,91122,91123],{"class":69,"line":3298},[67,91124,90720],{"class":202},[67,91126,91127],{"class":69,"line":3312},[67,91128,2909],{"class":77},[67,91130,91131],{"class":69,"line":3320},[67,91132,90729],{"class":202},[67,91134,91135],{"class":69,"line":3325},[67,91136,91137],{"class":202},"    \u002F\u002F 手写防抖函数\n",[67,91139,91140],{"class":69,"line":3331},[67,91141,91142],{"class":202},"    \u002F\u002F 核心是利用延时器setTimeout来实现的\n",[67,91144,91145],{"class":69,"line":3337},[67,91146,91147],{"class":202},"    \u002F\u002F 1.声明定时器变量\n",[67,91149,91150],{"class":69,"line":3342},[67,91151,91152],{"class":202},"    \u002F\u002F 2.每次鼠标移动(事件触发)的时候都要先判断是否有定时器,如果有先清除以前的定时器\n",[67,91154,91155],{"class":69,"line":8667},[67,91156,91157],{"class":202},"    \u002F\u002F 3.如果没有定时器,则开启定时器,存入到定时器变量里面\n",[67,91159,91160],{"class":69,"line":8691},[67,91161,91162],{"class":202},"    \u002F\u002F 4.定时器里面写函数调用\n",[67,91164,91165,91167,91170,91172,91175,91177,91179],{"class":69,"line":8696},[67,91166,70621],{"class":73},[67,91168,91169],{"class":112}," debounce",[67,91171,864],{"class":77},[67,91173,91174],{"class":5935},"fn",[67,91176,13153],{"class":77},[67,91178,1576],{"class":5935},[67,91180,13160],{"class":77},[67,91182,91183,91185],{"class":69,"line":8702},[67,91184,80309],{"class":73},[67,91186,91187],{"class":77}," timer\n",[67,91189,91190],{"class":69,"line":8729},[67,91191,91192],{"class":202},"      \u002F\u002F return 返回一个匿名函数\n",[67,91194,91195,91197,91199],{"class":69,"line":8734},[67,91196,74519],{"class":73},[67,91198,59455],{"class":73},[67,91200,54989],{"class":77},[67,91202,91203],{"class":69,"line":8740},[67,91204,91205],{"class":202},"        \u002F\u002F 这里边写第二三四步\n",[67,91207,91208,91210,91213,91216],{"class":69,"line":8752},[67,91209,3218],{"class":73},[67,91211,91212],{"class":77}," (timer) ",[67,91214,91215],{"class":112},"clearTimeout",[67,91217,91218],{"class":77},"(timer)\n",[67,91220,91221,91224,91226,91229,91231,91233],{"class":69,"line":8764},[67,91222,91223],{"class":77},"        timer ",[67,91225,909],{"class":73},[67,91227,91228],{"class":112}," setTimeout",[67,91230,864],{"class":77},[67,91232,54986],{"class":73},[67,91234,54989],{"class":77},[67,91236,91237,91240,91242],{"class":69,"line":8776},[67,91238,91239],{"class":112},"          fn",[67,91241,13768],{"class":77},[67,91243,91244],{"class":202},"\u002F\u002F加小括号调用fn }, t)\n",[67,91246,91247],{"class":69,"line":10435},[67,91248,91249],{"class":77},"        }, t)\n",[67,91251,91252],{"class":69,"line":10459},[67,91253,52935],{"class":77},[67,91255,91256],{"class":69,"line":10482},[67,91257,2909],{"class":77},[67,91259,91260,91262,91264,91266,91268,91270,91272,91274,91276],{"class":69,"line":10506},[67,91261,90744],{"class":77},[67,91263,58350],{"class":112},[67,91265,864],{"class":77},[67,91267,90751],{"class":84},[67,91269,13153],{"class":77},[67,91271,90757],{"class":112},[67,91273,90760],{"class":77},[67,91275,65611],{"class":208},[67,91277,31034],{"class":77},[67,91279,91280],{"class":69,"line":10511},[67,91281,177],{"emptyLinePlaceholder":176},[67,91283,91284],{"class":69,"line":10516},[67,91285,91286],{"class":202},"    \u002F\u002F debounce(mouseMove, 500)是在调用函数,一调用就会拿到return后边的内容\n",[67,91288,91289],{"class":69,"line":10521},[67,91290,91291],{"class":202},"    \u002F\u002F 相当于debounce(mouseMove, 500) = function () {\u002F\u002F 这里边写第二三四步}\n",[67,91293,91294],{"class":69,"line":10530},[67,91295,91296],{"class":202},"    \u002F\u002F 我们移动鼠标时想要实现的是这个匿名函数\n",[67,91298,91299],{"class":69,"line":10535},[67,91300,91301],{"class":202},"    \u002F\u002F 要的其实是这个函数名,事件中的执行函数不能写括号,写括号就是函数调用\n",[67,91303,91304,91306,91308],{"class":69,"line":10541},[67,91305,52954],{"class":77},[67,91307,52350],{"class":51837},[67,91309,51844],{"class":77},[67,91311,91312,91314,91316],{"class":69,"line":10562},[67,91313,52322],{"class":77},[67,91315,52337],{"class":51837},[67,91317,51844],{"class":77},[67,91319,91320],{"class":69,"line":10568},[67,91321,177],{"emptyLinePlaceholder":176},[67,91323,91324,91326,91328],{"class":69,"line":10582},[67,91325,52322],{"class":77},[67,91327,51172],{"class":51837},[67,91329,51844],{"class":77},[14,91331,91333],{"id":91332},"_4172-节流","4.17.2 节流",[19,91335,91336],{},[725,91337],{"alt":62,"src":91338},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-354.png",[19,91340,91341],{},[725,91342],{"alt":62,"src":91343},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-355.png",[19,91345,91346],{},[336,91347,91348],{},"案例：利用节流来处理-鼠标滑过盒子显示文字（要求：鼠标在盒子上移动，不管移动多少次，每隔500ms才+1）",[19,91350,91351],{},"实现方式：",[1863,91353,91354],{},[818,91355,91356],{},"lodash 提供的节流函数来处理",[19,91358,91359],{},"_.throttle(func,[wait=0],[options=])",[19,91361,91362],{},"创建一个节流函数，在wait秒内最多执行func一次的函数",[57,91364,91366],{"className":51170,"code":91365,"language":51172,"meta":62,"style":62},"\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",[64,91367,91368,91378,91392,91396,91404,91418,91438,91450,91458,91464,91474,91486,91498,91508,91520,91530,91540,91552,91556,91564,91572,91576,91584,91602,91620,91628,91646,91656,91664,91674,91678,91682,91686,91691,91696,91717,91725,91733,91737],{"__ignoreMap":62},[67,91369,91370,91372,91374,91376],{"class":69,"line":70},[67,91371,51834],{"class":77},[67,91373,51838],{"class":51837},[67,91375,51841],{"class":112},[67,91377,51844],{"class":77},[67,91379,91380,91382,91384,91386,91388,91390],{"class":69,"line":143},[67,91381,1766],{"class":77},[67,91383,51172],{"class":51837},[67,91385,51853],{"class":112},[67,91387,909],{"class":77},[67,91389,51858],{"class":84},[67,91391,51844],{"class":77},[67,91393,91394],{"class":69,"line":149},[67,91395,177],{"emptyLinePlaceholder":176},[67,91397,91398,91400,91402],{"class":69,"line":155},[67,91399,1766],{"class":77},[67,91401,51871],{"class":51837},[67,91403,51844],{"class":77},[67,91405,91406,91408,91410,91412,91414,91416],{"class":69,"line":161},[67,91407,52681],{"class":77},[67,91409,51881],{"class":51837},[67,91411,51884],{"class":112},[67,91413,909],{"class":77},[67,91415,51889],{"class":84},[67,91417,51844],{"class":77},[67,91419,91420,91422,91424,91426,91428,91430,91432,91434,91436],{"class":69,"line":167},[67,91421,52681],{"class":77},[67,91423,51881],{"class":51837},[67,91425,15637],{"class":112},[67,91427,909],{"class":77},[67,91429,51928],{"class":84},[67,91431,51908],{"class":112},[67,91433,909],{"class":77},[67,91435,51935],{"class":84},[67,91437,51844],{"class":77},[67,91439,91440,91442,91444,91446,91448],{"class":69,"line":173},[67,91441,52681],{"class":77},[67,91443,51944],{"class":51837},[67,91445,51947],{"class":77},[67,91447,51944],{"class":51837},[67,91449,51844],{"class":77},[67,91451,91452,91454,91456],{"class":69,"line":180},[67,91453,52681],{"class":77},[67,91455,779],{"class":51837},[67,91457,51844],{"class":77},[67,91459,91460,91462],{"class":69,"line":186},[67,91461,55289],{"class":112},[67,91463,16289],{"class":77},[67,91465,91466,91468,91470,91472],{"class":69,"line":444},[67,91467,73133],{"class":208},[67,91469,51974],{"class":77},[67,91471,61042],{"class":208},[67,91473,2017],{"class":77},[67,91475,91476,91478,91480,91482,91484],{"class":69,"line":2335},[67,91477,55308],{"class":208},[67,91479,51974],{"class":77},[67,91481,2445],{"class":208},[67,91483,52029],{"class":73},[67,91485,2017],{"class":77},[67,91487,91488,91490,91492,91494,91496],{"class":69,"line":2340},[67,91489,55322],{"class":208},[67,91491,51974],{"class":77},[67,91493,2445],{"class":208},[67,91495,52029],{"class":73},[67,91497,2017],{"class":77},[67,91499,91500,91502,91504,91506],{"class":69,"line":2346},[67,91501,55421],{"class":208},[67,91503,51974],{"class":77},[67,91505,90543],{"class":208},[67,91507,2017],{"class":77},[67,91509,91510,91512,91514,91516,91518],{"class":69,"line":2351},[67,91511,55459],{"class":208},[67,91513,51974],{"class":77},[67,91515,1681],{"class":208},[67,91517,52029],{"class":73},[67,91519,2017],{"class":77},[67,91521,91522,91524,91526,91528],{"class":69,"line":2365},[67,91523,57953],{"class":208},[67,91525,51974],{"class":77},[67,91527,61379],{"class":208},[67,91529,2017],{"class":77},[67,91531,91532,91534,91536,91538],{"class":69,"line":2370},[67,91533,57823],{"class":208},[67,91535,51974],{"class":77},[67,91537,52129],{"class":208},[67,91539,2017],{"class":77},[67,91541,91542,91544,91546,91548,91550],{"class":69,"line":2376},[67,91543,90582],{"class":208},[67,91545,51974],{"class":77},[67,91547,1177],{"class":208},[67,91549,52029],{"class":73},[67,91551,2017],{"class":77},[67,91553,91554],{"class":69,"line":2397},[67,91555,2909],{"class":77},[67,91557,91558,91560,91562],{"class":69,"line":2402},[67,91559,52954],{"class":77},[67,91561,779],{"class":51837},[67,91563,51844],{"class":77},[67,91565,91566,91568,91570],{"class":69,"line":2416},[67,91567,52322],{"class":77},[67,91569,51871],{"class":51837},[67,91571,51844],{"class":77},[67,91573,91574],{"class":69,"line":2421},[67,91575,177],{"emptyLinePlaceholder":176},[67,91577,91578,91580,91582],{"class":69,"line":2450},[67,91579,1766],{"class":77},[67,91581,52337],{"class":51837},[67,91583,51844],{"class":77},[67,91585,91586,91588,91590,91592,91594,91596,91598,91600],{"class":69,"line":2455},[67,91587,52681],{"class":77},[67,91589,52148],{"class":51837},[67,91591,54023],{"class":112},[67,91593,909],{"class":77},[67,91595,54028],{"class":84},[67,91597,55851],{"class":77},[67,91599,52148],{"class":51837},[67,91601,51844],{"class":77},[67,91603,91604,91606,91608,91610,91612,91614,91616,91618],{"class":69,"line":2472},[67,91605,52681],{"class":77},[67,91607,52350],{"class":51837},[67,91609,55776],{"class":112},[67,91611,909],{"class":77},[67,91613,88811],{"class":84},[67,91615,55851],{"class":77},[67,91617,52350],{"class":51837},[67,91619,51844],{"class":77},[67,91621,91622,91624,91626],{"class":69,"line":2477},[67,91623,52681],{"class":77},[67,91625,52350],{"class":51837},[67,91627,51844],{"class":77},[67,91629,91630,91632,91634,91636,91638,91640,91642,91644],{"class":69,"line":2482},[67,91631,11939],{"class":73},[67,91633,87470],{"class":208},[67,91635,14282],{"class":73},[67,91637,54933],{"class":77},[67,91639,54936],{"class":112},[67,91641,864],{"class":77},[67,91643,90683],{"class":84},[67,91645,870],{"class":77},[67,91647,91648,91650,91652,91654],{"class":69,"line":2487},[67,91649,52756],{"class":73},[67,91651,10157],{"class":77},[67,91653,909],{"class":73},[67,91655,47870],{"class":208},[67,91657,91658,91660,91662],{"class":69,"line":2501},[67,91659,70621],{"class":73},[67,91661,90702],{"class":112},[67,91663,11571],{"class":77},[67,91665,91666,91668,91670,91672],{"class":69,"line":2506},[67,91667,90709],{"class":77},[67,91669,909],{"class":73},[67,91671,3752],{"class":77},[67,91673,3423],{"class":73},[67,91675,91676],{"class":69,"line":3298},[67,91677,90720],{"class":202},[67,91679,91680],{"class":69,"line":3312},[67,91681,2909],{"class":77},[67,91683,91684],{"class":69,"line":3320},[67,91685,90729],{"class":202},[67,91687,91688],{"class":69,"line":3325},[67,91689,91690],{"class":202},"    \u002F\u002F 利用lodash库实现节流 -500毫秒之后才去加1\n",[67,91692,91693],{"class":69,"line":3331},[67,91694,91695],{"class":202},"    \u002F\u002F 语法:_.throttle(fun,时间)\n",[67,91697,91698,91700,91702,91704,91706,91708,91711,91713,91715],{"class":69,"line":3337},[67,91699,90744],{"class":77},[67,91701,58350],{"class":112},[67,91703,864],{"class":77},[67,91705,90751],{"class":84},[67,91707,90754],{"class":77},[67,91709,91710],{"class":112},"throttle",[67,91712,90760],{"class":77},[67,91714,65611],{"class":208},[67,91716,31034],{"class":77},[67,91718,91719,91721,91723],{"class":69,"line":3342},[67,91720,52954],{"class":77},[67,91722,52350],{"class":51837},[67,91724,51844],{"class":77},[67,91726,91727,91729,91731],{"class":69,"line":8667},[67,91728,52322],{"class":77},[67,91730,52337],{"class":51837},[67,91732,51844],{"class":77},[67,91734,91735],{"class":69,"line":8691},[67,91736,177],{"emptyLinePlaceholder":176},[67,91738,91739,91741,91743],{"class":69,"line":8696},[67,91740,52322],{"class":77},[67,91742,51172],{"class":51837},[67,91744,51844],{"class":77},[1863,91746,91747],{},[818,91748,91749],{},"手写一个节流函数来处理",[19,91751,71489],{},[19,91753,90803],{},[19,91755,91756],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器则不开启新定时器",[19,91758,91759],{},"③如果没有定时器则开启定时器，记得存放到变量里面:定时器里面调用执行的函数；定时器里面要把定时器清空",[57,91761,91763],{"className":51170,"code":91762,"language":51172,"meta":62,"style":62},"\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",[64,91764,91765,91775,91789,91793,91801,91815,91835,91847,91855,91861,91871,91883,91895,91905,91917,91927,91937,91949,91953,91961,91969,91973,91981,91999,92017,92025,92043,92053,92061,92071,92075,92079,92083,92088,92093,92098,92103,92108,92113,92130,92136,92144,92155,92170,92177,92182,92187,92197,92202,92207,92212,92216,92220,92224,92244,92252,92260,92264],{"__ignoreMap":62},[67,91766,91767,91769,91771,91773],{"class":69,"line":70},[67,91768,51834],{"class":77},[67,91770,51838],{"class":51837},[67,91772,51841],{"class":112},[67,91774,51844],{"class":77},[67,91776,91777,91779,91781,91783,91785,91787],{"class":69,"line":143},[67,91778,1766],{"class":77},[67,91780,51172],{"class":51837},[67,91782,51853],{"class":112},[67,91784,909],{"class":77},[67,91786,51858],{"class":84},[67,91788,51844],{"class":77},[67,91790,91791],{"class":69,"line":149},[67,91792,177],{"emptyLinePlaceholder":176},[67,91794,91795,91797,91799],{"class":69,"line":155},[67,91796,1766],{"class":77},[67,91798,51871],{"class":51837},[67,91800,51844],{"class":77},[67,91802,91803,91805,91807,91809,91811,91813],{"class":69,"line":161},[67,91804,52681],{"class":77},[67,91806,51881],{"class":51837},[67,91808,51884],{"class":112},[67,91810,909],{"class":77},[67,91812,51889],{"class":84},[67,91814,51844],{"class":77},[67,91816,91817,91819,91821,91823,91825,91827,91829,91831,91833],{"class":69,"line":167},[67,91818,52681],{"class":77},[67,91820,51881],{"class":51837},[67,91822,15637],{"class":112},[67,91824,909],{"class":77},[67,91826,51928],{"class":84},[67,91828,51908],{"class":112},[67,91830,909],{"class":77},[67,91832,51935],{"class":84},[67,91834,51844],{"class":77},[67,91836,91837,91839,91841,91843,91845],{"class":69,"line":173},[67,91838,52681],{"class":77},[67,91840,51944],{"class":51837},[67,91842,51947],{"class":77},[67,91844,51944],{"class":51837},[67,91846,51844],{"class":77},[67,91848,91849,91851,91853],{"class":69,"line":180},[67,91850,52681],{"class":77},[67,91852,779],{"class":51837},[67,91854,51844],{"class":77},[67,91856,91857,91859],{"class":69,"line":186},[67,91858,55289],{"class":112},[67,91860,16289],{"class":77},[67,91862,91863,91865,91867,91869],{"class":69,"line":444},[67,91864,73133],{"class":208},[67,91866,51974],{"class":77},[67,91868,61042],{"class":208},[67,91870,2017],{"class":77},[67,91872,91873,91875,91877,91879,91881],{"class":69,"line":2335},[67,91874,55308],{"class":208},[67,91876,51974],{"class":77},[67,91878,2445],{"class":208},[67,91880,52029],{"class":73},[67,91882,2017],{"class":77},[67,91884,91885,91887,91889,91891,91893],{"class":69,"line":2340},[67,91886,55322],{"class":208},[67,91888,51974],{"class":77},[67,91890,2445],{"class":208},[67,91892,52029],{"class":73},[67,91894,2017],{"class":77},[67,91896,91897,91899,91901,91903],{"class":69,"line":2346},[67,91898,55421],{"class":208},[67,91900,51974],{"class":77},[67,91902,90543],{"class":208},[67,91904,2017],{"class":77},[67,91906,91907,91909,91911,91913,91915],{"class":69,"line":2351},[67,91908,55459],{"class":208},[67,91910,51974],{"class":77},[67,91912,1681],{"class":208},[67,91914,52029],{"class":73},[67,91916,2017],{"class":77},[67,91918,91919,91921,91923,91925],{"class":69,"line":2365},[67,91920,57953],{"class":208},[67,91922,51974],{"class":77},[67,91924,61379],{"class":208},[67,91926,2017],{"class":77},[67,91928,91929,91931,91933,91935],{"class":69,"line":2370},[67,91930,57823],{"class":208},[67,91932,51974],{"class":77},[67,91934,52129],{"class":208},[67,91936,2017],{"class":77},[67,91938,91939,91941,91943,91945,91947],{"class":69,"line":2376},[67,91940,90582],{"class":208},[67,91942,51974],{"class":77},[67,91944,1177],{"class":208},[67,91946,52029],{"class":73},[67,91948,2017],{"class":77},[67,91950,91951],{"class":69,"line":2397},[67,91952,2909],{"class":77},[67,91954,91955,91957,91959],{"class":69,"line":2402},[67,91956,52954],{"class":77},[67,91958,779],{"class":51837},[67,91960,51844],{"class":77},[67,91962,91963,91965,91967],{"class":69,"line":2416},[67,91964,52322],{"class":77},[67,91966,51871],{"class":51837},[67,91968,51844],{"class":77},[67,91970,91971],{"class":69,"line":2421},[67,91972,177],{"emptyLinePlaceholder":176},[67,91974,91975,91977,91979],{"class":69,"line":2450},[67,91976,1766],{"class":77},[67,91978,52337],{"class":51837},[67,91980,51844],{"class":77},[67,91982,91983,91985,91987,91989,91991,91993,91995,91997],{"class":69,"line":2455},[67,91984,52681],{"class":77},[67,91986,52148],{"class":51837},[67,91988,54023],{"class":112},[67,91990,909],{"class":77},[67,91992,54028],{"class":84},[67,91994,55851],{"class":77},[67,91996,52148],{"class":51837},[67,91998,51844],{"class":77},[67,92000,92001,92003,92005,92007,92009,92011,92013,92015],{"class":69,"line":2472},[67,92002,52681],{"class":77},[67,92004,52350],{"class":51837},[67,92006,55776],{"class":112},[67,92008,909],{"class":77},[67,92010,88811],{"class":84},[67,92012,55851],{"class":77},[67,92014,52350],{"class":51837},[67,92016,51844],{"class":77},[67,92018,92019,92021,92023],{"class":69,"line":2477},[67,92020,52681],{"class":77},[67,92022,52350],{"class":51837},[67,92024,51844],{"class":77},[67,92026,92027,92029,92031,92033,92035,92037,92039,92041],{"class":69,"line":2482},[67,92028,11939],{"class":73},[67,92030,87470],{"class":208},[67,92032,14282],{"class":73},[67,92034,54933],{"class":77},[67,92036,54936],{"class":112},[67,92038,864],{"class":77},[67,92040,90683],{"class":84},[67,92042,870],{"class":77},[67,92044,92045,92047,92049,92051],{"class":69,"line":2487},[67,92046,52756],{"class":73},[67,92048,10157],{"class":77},[67,92050,909],{"class":73},[67,92052,47870],{"class":208},[67,92054,92055,92057,92059],{"class":69,"line":2501},[67,92056,70621],{"class":73},[67,92058,90702],{"class":112},[67,92060,11571],{"class":77},[67,92062,92063,92065,92067,92069],{"class":69,"line":2506},[67,92064,90709],{"class":77},[67,92066,909],{"class":73},[67,92068,3752],{"class":77},[67,92070,3423],{"class":73},[67,92072,92073],{"class":69,"line":3298},[67,92074,90720],{"class":202},[67,92076,92077],{"class":69,"line":3312},[67,92078,2909],{"class":77},[67,92080,92081],{"class":69,"line":3320},[67,92082,90729],{"class":202},[67,92084,92085],{"class":69,"line":3325},[67,92086,92087],{"class":202},"    \u002F\u002F 手写节流函数  每隔500ms+1\n",[67,92089,92090],{"class":69,"line":3331},[67,92091,92092],{"class":202},"    \u002F\u002F 1.声明一个定时器变量\n",[67,92094,92095],{"class":69,"line":3337},[67,92096,92097],{"class":202},"    \u002F\u002F 2.当鼠标每次滑动都先判断是否有定时器,如果有定时器则不开启新定时器\n",[67,92099,92100],{"class":69,"line":3342},[67,92101,92102],{"class":202},"    \u002F\u002F 3.如果没有定时器则开启定时器,记得存到变量里面\n",[67,92104,92105],{"class":69,"line":8667},[67,92106,92107],{"class":202},"    \u002F\u002F 3.1定时器里面调用执行函数\n",[67,92109,92110],{"class":69,"line":8691},[67,92111,92112],{"class":202},"    \u002F\u002F 3.2定时器里面要把定时器清空\n",[67,92114,92115,92117,92120,92122,92124,92126,92128],{"class":69,"line":8696},[67,92116,70621],{"class":73},[67,92118,92119],{"class":112}," throttle",[67,92121,864],{"class":77},[67,92123,91174],{"class":5935},[67,92125,13153],{"class":77},[67,92127,1576],{"class":5935},[67,92129,13160],{"class":77},[67,92131,92132,92134],{"class":69,"line":8702},[67,92133,80309],{"class":73},[67,92135,91187],{"class":77},[67,92137,92138,92140,92142],{"class":69,"line":8729},[67,92139,74519],{"class":73},[67,92141,59455],{"class":73},[67,92143,54989],{"class":77},[67,92145,92146,92148,92150,92152],{"class":69,"line":8734},[67,92147,3218],{"class":73},[67,92149,2381],{"class":77},[67,92151,1086],{"class":73},[67,92153,92154],{"class":77},"timer) {\n",[67,92156,92157,92160,92162,92164,92166,92168],{"class":69,"line":8740},[67,92158,92159],{"class":77},"          timer ",[67,92161,909],{"class":73},[67,92163,91228],{"class":112},[67,92165,864],{"class":77},[67,92167,54986],{"class":73},[67,92169,54989],{"class":77},[67,92171,92172,92175],{"class":69,"line":8752},[67,92173,92174],{"class":112},"            fn",[67,92176,2698],{"class":77},[67,92178,92179],{"class":69,"line":8764},[67,92180,92181],{"class":202},"            \u002F\u002F 清空定时器,当时间到了,定时器就停止了,但原来那个timer还有,\n",[67,92183,92184],{"class":69,"line":8776},[67,92185,92186],{"class":202},"            \u002F\u002F 所以需要清除定时器,这样timer就是空的了,然后就又重复执行了\n",[67,92188,92189,92192,92194],{"class":69,"line":10435},[67,92190,92191],{"class":77},"            timer ",[67,92193,909],{"class":73},[67,92195,92196],{"class":208}," null\n",[67,92198,92199],{"class":69,"line":10459},[67,92200,92201],{"class":202},"            \u002F\u002F 不能用clearTimeout(timer)\n",[67,92203,92204],{"class":69,"line":10482},[67,92205,92206],{"class":202},"            \u002F\u002F 在开启的定时器里边是无法清除定时器的\n",[67,92208,92209],{"class":69,"line":10506},[67,92210,92211],{"class":77},"          }, t)\n",[67,92213,92214],{"class":69,"line":10511},[67,92215,3250],{"class":77},[67,92217,92218],{"class":69,"line":10516},[67,92219,52935],{"class":77},[67,92221,92222],{"class":69,"line":10521},[67,92223,2909],{"class":77},[67,92225,92226,92228,92230,92232,92234,92236,92238,92240,92242],{"class":69,"line":10530},[67,92227,90744],{"class":77},[67,92229,58350],{"class":112},[67,92231,864],{"class":77},[67,92233,90751],{"class":84},[67,92235,13153],{"class":77},[67,92237,91710],{"class":112},[67,92239,90760],{"class":77},[67,92241,65611],{"class":208},[67,92243,31034],{"class":77},[67,92245,92246,92248,92250],{"class":69,"line":10535},[67,92247,52954],{"class":77},[67,92249,52350],{"class":51837},[67,92251,51844],{"class":77},[67,92253,92254,92256,92258],{"class":69,"line":10541},[67,92255,52322],{"class":77},[67,92257,52337],{"class":51837},[67,92259,51844],{"class":77},[67,92261,92262],{"class":69,"line":10562},[67,92263,177],{"emptyLinePlaceholder":176},[67,92265,92266,92268,92270],{"class":69,"line":10568},[67,92267,52322],{"class":77},[67,92269,51172],{"class":51837},[67,92271,51844],{"class":77},[14,92273,92275],{"id":92274},"_4173-清除定时器遇到的问题","4.17.3 清除定时器遇到的问题",[57,92277,92279],{"className":53604,"code":92278,"language":53606,"meta":62,"style":62},"\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",[64,92280,92281,92289,92297,92302,92307,92312,92317,92321,92329],{"__ignoreMap":62},[67,92282,92283,92285,92287],{"class":69,"line":70},[67,92284,1766],{"class":77},[67,92286,52337],{"class":51837},[67,92288,51844],{"class":77},[67,92290,92291,92293,92295],{"class":69,"line":143},[67,92292,52681],{"class":77},[67,92294,52350],{"class":51837},[67,92296,51844],{"class":77},[67,92298,92299],{"class":69,"line":149},[67,92300,92301],{"class":77},"    let timer = null\n",[67,92303,92304],{"class":69,"line":155},[67,92305,92306],{"class":77},"    timer = setTimeout(() => {\n",[67,92308,92309],{"class":69,"line":161},[67,92310,92311],{"class":77},"      clearTimeout(timer)\n",[67,92313,92314],{"class":69,"line":167},[67,92315,92316],{"class":77},"      console.log(timer)\n",[67,92318,92319],{"class":69,"line":173},[67,92320,60762],{"class":77},[67,92322,92323,92325,92327],{"class":69,"line":180},[67,92324,52954],{"class":77},[67,92326,52350],{"class":51837},[67,92328,51844],{"class":77},[67,92330,92331,92333,92335],{"class":69,"line":186},[67,92332,52322],{"class":77},[67,92334,52337],{"class":51837},[67,92336,51844],{"class":77},[19,92338,92339],{},"输出为1",[19,92341,92342],{},"在开启的定时器里边写清除定时器",[19,92344,92345],{},"总结：在setTimeout中是无法删除定时器的，因为定时器还在运作，所以使用timer=null 而不是clearTimeout(timer)",[14,92347,92349],{"id":92348},"_4174-节流综合案例","4.17.4 节流综合案例",[19,92351,92352],{},"页面打开，可以记录上一次的视频播放位置",[19,92354,92355],{},[725,92356],{"alt":62,"src":92357},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-356.png",[19,92359,92360],{},[725,92361],{"alt":62,"src":92362},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-357.png",[57,92364,92366],{"className":51170,"code":92365,"language":51172,"meta":62,"style":62},"\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",[64,92367,92368,92378,92392,92396,92404,92418,92438,92458,92480,92493,92501,92507,92517,92527,92537,92541,92545,92552,92565,92577,92581,92585,92595,92607,92621,92625,92629,92636,92646,92659,92671,92681,92691,92707,92719,92723,92727,92735,92745,92757,92767,92777,92787,92791,92795,92805,92816,92820,92828,92836,92840,92848,92863,92878,92893,92914,92922,92930,92945,92967,92975,92990,93016,93042,93068,93076,93084,93103,93111,93116,93135,93140,93158,93163,93168,93176,93181,93195,93203,93208,93225,93229,93234,93256,93260,93268,93276,93280],{"__ignoreMap":62},[67,92369,92370,92372,92374,92376],{"class":69,"line":70},[67,92371,51834],{"class":77},[67,92373,51838],{"class":51837},[67,92375,51841],{"class":112},[67,92377,51844],{"class":77},[67,92379,92380,92382,92384,92386,92388,92390],{"class":69,"line":143},[67,92381,1766],{"class":77},[67,92383,51172],{"class":51837},[67,92385,51853],{"class":112},[67,92387,909],{"class":77},[67,92389,51858],{"class":84},[67,92391,51844],{"class":77},[67,92393,92394],{"class":69,"line":149},[67,92395,177],{"emptyLinePlaceholder":176},[67,92397,92398,92400,92402],{"class":69,"line":155},[67,92399,1766],{"class":77},[67,92401,51871],{"class":51837},[67,92403,51844],{"class":77},[67,92405,92406,92408,92410,92412,92414,92416],{"class":69,"line":161},[67,92407,52681],{"class":77},[67,92409,51881],{"class":51837},[67,92411,51884],{"class":112},[67,92413,909],{"class":77},[67,92415,51889],{"class":84},[67,92417,59664],{"class":77},[67,92419,92420,92422,92424,92426,92428,92430,92432,92434,92436],{"class":69,"line":167},[67,92421,52681],{"class":77},[67,92423,51881],{"class":51837},[67,92425,51900],{"class":112},[67,92427,909],{"class":77},[67,92429,51905],{"class":84},[67,92431,51908],{"class":112},[67,92433,909],{"class":77},[67,92435,51913],{"class":84},[67,92437,59664],{"class":77},[67,92439,92440,92442,92444,92446,92448,92450,92452,92454,92456],{"class":69,"line":173},[67,92441,52681],{"class":77},[67,92443,51881],{"class":51837},[67,92445,15637],{"class":112},[67,92447,909],{"class":77},[67,92449,51928],{"class":84},[67,92451,51908],{"class":112},[67,92453,909],{"class":77},[67,92455,51935],{"class":84},[67,92457,59664],{"class":77},[67,92459,92460,92462,92464,92466,92468,92471,92473,92475,92478],{"class":69,"line":180},[67,92461,52681],{"class":77},[67,92463,51881],{"class":51837},[67,92465,15637],{"class":112},[67,92467,909],{"class":77},[67,92469,92470],{"class":84},"\"referrer\"",[67,92472,51908],{"class":112},[67,92474,909],{"class":77},[67,92476,92477],{"class":84},"\"never\"",[67,92479,59664],{"class":77},[67,92481,92482,92484,92486,92489,92491],{"class":69,"line":186},[67,92483,52681],{"class":77},[67,92485,51944],{"class":51837},[67,92487,92488],{"class":77},">综合案例\u003C\u002F",[67,92490,51944],{"class":51837},[67,92492,51844],{"class":77},[67,92494,92495,92497,92499],{"class":69,"line":444},[67,92496,52681],{"class":77},[67,92498,779],{"class":51837},[67,92500,51844],{"class":77},[67,92502,92503,92505],{"class":69,"line":2335},[67,92504,7122],{"class":51837},[67,92506,16289],{"class":77},[67,92508,92509,92511,92513,92515],{"class":69,"line":2340},[67,92510,55232],{"class":208},[67,92512,51974],{"class":77},[67,92514,1051],{"class":208},[67,92516,2017],{"class":77},[67,92518,92519,92521,92523,92525],{"class":69,"line":2346},[67,92520,55243],{"class":208},[67,92522,51974],{"class":77},[67,92524,1051],{"class":208},[67,92526,2017],{"class":77},[67,92528,92529,92531,92533,92535],{"class":69,"line":2351},[67,92530,73133],{"class":208},[67,92532,51974],{"class":77},[67,92534,61042],{"class":208},[67,92536,2017],{"class":77},[67,92538,92539],{"class":69,"line":2365},[67,92540,2909],{"class":77},[67,92542,92543],{"class":69,"line":2370},[67,92544,177],{"emptyLinePlaceholder":176},[67,92546,92547,92550],{"class":69,"line":2376},[67,92548,92549],{"class":112},"    .container",[67,92551,16289],{"class":77},[67,92553,92554,92556,92558,92561,92563],{"class":69,"line":2397},[67,92555,55308],{"class":208},[67,92557,51974],{"class":77},[67,92559,92560],{"class":208},"1200",[67,92562,52029],{"class":73},[67,92564,2017],{"class":77},[67,92566,92567,92569,92571,92573,92575],{"class":69,"line":2402},[67,92568,55243],{"class":208},[67,92570,51974],{"class":77},[67,92572,1051],{"class":208},[67,92574,52093],{"class":208},[67,92576,2017],{"class":77},[67,92578,92579],{"class":69,"line":2416},[67,92580,2909],{"class":77},[67,92582,92583],{"class":69,"line":2421},[67,92584,177],{"emptyLinePlaceholder":176},[67,92586,92587,92590,92593],{"class":69,"line":2450},[67,92588,92589],{"class":112},"    .video",[67,92591,92592],{"class":51837}," video",[67,92594,16289],{"class":77},[67,92596,92597,92599,92601,92603,92605],{"class":69,"line":2455},[67,92598,55308],{"class":208},[67,92600,51974],{"class":77},[67,92602,1169],{"class":208},[67,92604,1186],{"class":73},[67,92606,2017],{"class":77},[67,92608,92609,92611,92613,92615,92617,92619],{"class":69,"line":2472},[67,92610,55232],{"class":208},[67,92612,51974],{"class":77},[67,92614,1556],{"class":208},[67,92616,52029],{"class":73},[67,92618,4813],{"class":208},[67,92620,2017],{"class":77},[67,92622,92623],{"class":69,"line":2477},[67,92624,2909],{"class":77},[67,92626,92627],{"class":69,"line":2482},[67,92628,177],{"emptyLinePlaceholder":176},[67,92630,92631,92634],{"class":69,"line":2487},[67,92632,92633],{"class":112},"    .elevator",[67,92635,16289],{"class":77},[67,92637,92638,92640,92642,92644],{"class":69,"line":2501},[67,92639,55296],{"class":208},[67,92641,51974],{"class":77},[67,92643,86770],{"class":208},[67,92645,2017],{"class":77},[67,92647,92648,92650,92652,92655,92657],{"class":69,"line":2506},[67,92649,55484],{"class":208},[67,92651,51974],{"class":77},[67,92653,92654],{"class":208},"280",[67,92656,52029],{"class":73},[67,92658,2017],{"class":77},[67,92660,92661,92663,92665,92667,92669],{"class":69,"line":3298},[67,92662,86964],{"class":208},[67,92664,51974],{"class":77},[67,92666,1556],{"class":208},[67,92668,52029],{"class":73},[67,92670,2017],{"class":77},[67,92672,92673,92675,92677,92679],{"class":69,"line":3312},[67,92674,86777],{"class":208},[67,92676,51974],{"class":77},[67,92678,86782],{"class":208},[67,92680,2017],{"class":77},[67,92682,92683,92685,92687,92689],{"class":69,"line":3320},[67,92684,62258],{"class":208},[67,92686,51974],{"class":77},[67,92688,61379],{"class":208},[67,92690,2017],{"class":77},[67,92692,92693,92695,92697,92699,92701,92703,92705],{"class":69,"line":3325},[67,92694,62514],{"class":208},[67,92696,51974],{"class":77},[67,92698,1077],{"class":208},[67,92700,52029],{"class":73},[67,92702,52058],{"class":208},[67,92704,62781],{"class":208},[67,92706,2017],{"class":77},[67,92708,92709,92711,92713,92715,92717],{"class":69,"line":3331},[67,92710,55308],{"class":208},[67,92712,51974],{"class":77},[67,92714,1763],{"class":208},[67,92716,52029],{"class":73},[67,92718,2017],{"class":77},[67,92720,92721],{"class":69,"line":3337},[67,92722,2909],{"class":77},[67,92724,92725],{"class":69,"line":3342},[67,92726,177],{"emptyLinePlaceholder":176},[67,92728,92729,92731,92733],{"class":69,"line":8667},[67,92730,92633],{"class":112},[67,92732,2122],{"class":51837},[67,92734,16289],{"class":77},[67,92736,92737,92739,92741,92743],{"class":69,"line":8691},[67,92738,55546],{"class":208},[67,92740,51974],{"class":77},[67,92742,61406],{"class":208},[67,92744,2017],{"class":77},[67,92746,92747,92749,92751,92753,92755],{"class":69,"line":8696},[67,92748,55232],{"class":208},[67,92750,51974],{"class":77},[67,92752,1303],{"class":208},[67,92754,52029],{"class":73},[67,92756,2017],{"class":77},[67,92758,92759,92761,92763,92765],{"class":69,"line":8702},[67,92760,64507],{"class":208},[67,92762,51974],{"class":77},[67,92764,55274],{"class":208},[67,92766,2017],{"class":77},[67,92768,92769,92771,92773,92775],{"class":69,"line":8729},[67,92770,57823],{"class":208},[67,92772,51974],{"class":77},[67,92774,52129],{"class":208},[67,92776,2017],{"class":77},[67,92778,92779,92781,92783,92785],{"class":69,"line":8734},[67,92780,57953],{"class":208},[67,92782,51974],{"class":77},[67,92784,62607],{"class":208},[67,92786,2017],{"class":77},[67,92788,92789],{"class":69,"line":8740},[67,92790,2909],{"class":77},[67,92792,92793],{"class":69,"line":8752},[67,92794,177],{"emptyLinePlaceholder":176},[67,92796,92797,92799,92801,92803],{"class":69,"line":8764},[67,92798,92633],{"class":112},[67,92800,2122],{"class":51837},[67,92802,64561],{"class":112},[67,92804,16289],{"class":77},[67,92806,92807,92809,92811,92814],{"class":69,"line":8776},[67,92808,57953],{"class":208},[67,92810,51974],{"class":77},[67,92812,92813],{"class":208},"#1286ff",[67,92815,2017],{"class":77},[67,92817,92818],{"class":69,"line":10435},[67,92819,2909],{"class":77},[67,92821,92822,92824,92826],{"class":69,"line":10459},[67,92823,52954],{"class":77},[67,92825,779],{"class":51837},[67,92827,51844],{"class":77},[67,92829,92830,92832,92834],{"class":69,"line":10482},[67,92831,52322],{"class":77},[67,92833,51871],{"class":51837},[67,92835,51844],{"class":77},[67,92837,92838],{"class":69,"line":10506},[67,92839,177],{"emptyLinePlaceholder":176},[67,92841,92842,92844,92846],{"class":69,"line":10511},[67,92843,1766],{"class":77},[67,92845,52337],{"class":51837},[67,92847,51844],{"class":77},[67,92849,92850,92852,92854,92856,92858,92861],{"class":69,"line":10516},[67,92851,52681],{"class":77},[67,92853,52148],{"class":51837},[67,92855,54023],{"class":112},[67,92857,909],{"class":77},[67,92859,92860],{"class":84},"\"container\"",[67,92862,51844],{"class":77},[67,92864,92865,92867,92869,92871,92873,92876],{"class":69,"line":10521},[67,92866,51878],{"class":77},[67,92868,52148],{"class":51837},[67,92870,54023],{"class":112},[67,92872,909],{"class":77},[67,92874,92875],{"class":84},"\"header\"",[67,92877,51844],{"class":77},[67,92879,92880,92882,92884,92886,92888,92891],{"class":69,"line":10530},[67,92881,55771],{"class":77},[67,92883,28],{"class":51837},[67,92885,61594],{"class":112},[67,92887,909],{"class":77},[67,92889,92890],{"class":84},"\"http:\u002F\u002Fpip.itcast.cn\"",[67,92892,51844],{"class":77},[67,92894,92895,92897,92899,92901,92903,92906,92908,92910,92912],{"class":69,"line":10535},[67,92896,55839],{"class":77},[67,92898,725],{"class":51837},[67,92900,55776],{"class":112},[67,92902,909],{"class":77},[67,92904,92905],{"class":84},"\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS学习-367.png\"",[67,92907,55784],{"class":112},[67,92909,909],{"class":77},[67,92911,8371],{"class":84},[67,92913,59664],{"class":77},[67,92915,92916,92918,92920],{"class":69,"line":10541},[67,92917,55944],{"class":77},[67,92919,28],{"class":51837},[67,92921,51844],{"class":77},[67,92923,92924,92926,92928],{"class":69,"line":10562},[67,92925,52313],{"class":77},[67,92927,52148],{"class":51837},[67,92929,51844],{"class":77},[67,92931,92932,92934,92936,92938,92940,92943],{"class":69,"line":10568},[67,92933,51878],{"class":77},[67,92935,52148],{"class":51837},[67,92937,54023],{"class":112},[67,92939,909],{"class":77},[67,92941,92942],{"class":84},"\"video\"",[67,92944,51844],{"class":77},[67,92946,92947,92949,92951,92953,92955,92958,92961,92963,92965],{"class":69,"line":10582},[67,92948,55771],{"class":77},[67,92950,28720],{"class":51837},[67,92952,55776],{"class":112},[67,92954,909],{"class":77},[67,92956,92957],{"class":84},"\"https:\u002F\u002Fv.itheima.net\u002FLapADhV6.mp4\"",[67,92959,92960],{"class":112}," controls",[67,92962,55851],{"class":77},[67,92964,28720],{"class":51837},[67,92966,51844],{"class":77},[67,92968,92969,92971,92973],{"class":69,"line":10588},[67,92970,52313],{"class":77},[67,92972,52148],{"class":51837},[67,92974,51844],{"class":77},[67,92976,92977,92979,92981,92983,92985,92988],{"class":69,"line":10615},[67,92978,51878],{"class":77},[67,92980,52148],{"class":51837},[67,92982,54023],{"class":112},[67,92984,909],{"class":77},[67,92986,92987],{"class":84},"\"elevator\"",[67,92989,51844],{"class":77},[67,92991,92992,92994,92996,92998,93000,93002,93005,93007,93009,93012,93014],{"class":69,"line":10624},[67,92993,55771],{"class":77},[67,92995,28],{"class":51837},[67,92997,61594],{"class":112},[67,92999,909],{"class":77},[67,93001,64773],{"class":84},[67,93003,93004],{"class":112}," data-ref",[67,93006,909],{"class":77},[67,93008,92942],{"class":84},[67,93010,93011],{"class":77},">视频介绍\u003C\u002F",[67,93013,28],{"class":51837},[67,93015,51844],{"class":77},[67,93017,93018,93020,93022,93024,93026,93028,93030,93032,93035,93038,93040],{"class":69,"line":10630},[67,93019,55771],{"class":77},[67,93021,28],{"class":51837},[67,93023,61594],{"class":112},[67,93025,909],{"class":77},[67,93027,64773],{"class":84},[67,93029,93004],{"class":112},[67,93031,909],{"class":77},[67,93033,93034],{"class":84},"\"intro\"",[67,93036,93037],{"class":77},">课程简介\u003C\u002F",[67,93039,28],{"class":51837},[67,93041,51844],{"class":77},[67,93043,93044,93046,93048,93050,93052,93054,93056,93058,93061,93064,93066],{"class":69,"line":10638},[67,93045,55771],{"class":77},[67,93047,28],{"class":51837},[67,93049,61594],{"class":112},[67,93051,909],{"class":77},[67,93053,64773],{"class":84},[67,93055,93004],{"class":112},[67,93057,909],{"class":77},[67,93059,93060],{"class":84},"\"outline\"",[67,93062,93063],{"class":77},">评论列表\u003C\u002F",[67,93065,28],{"class":51837},[67,93067,51844],{"class":77},[67,93069,93070,93072,93074],{"class":69,"line":10643},[67,93071,52313],{"class":77},[67,93073,52148],{"class":51837},[67,93075,51844],{"class":77},[67,93077,93078,93080,93082],{"class":69,"line":17321},[67,93079,52954],{"class":77},[67,93081,52148],{"class":51837},[67,93083,51844],{"class":77},[67,93085,93086,93088,93090,93092,93094,93097,93099,93101],{"class":69,"line":17327},[67,93087,52681],{"class":77},[67,93089,52350],{"class":51837},[67,93091,55776],{"class":112},[67,93093,909],{"class":77},[67,93095,93096],{"class":84},"\"https:\u002F\u002Fcdn.jsdelivr.net\u002Fnpm\u002Flodash@4.17.21\u002Flodash.min.js\"",[67,93098,55851],{"class":77},[67,93100,52350],{"class":51837},[67,93102,51844],{"class":77},[67,93104,93105,93107,93109],{"class":69,"line":17350},[67,93106,52681],{"class":77},[67,93108,52350],{"class":51837},[67,93110,51844],{"class":77},[67,93112,93113],{"class":69,"line":17356},[67,93114,93115],{"class":202},"    \u002F\u002F 1.获取元素 要对视频进行操作\n",[67,93117,93118,93120,93122,93124,93126,93128,93130,93133],{"class":69,"line":17379},[67,93119,11939],{"class":73},[67,93121,92592],{"class":208},[67,93123,14282],{"class":73},[67,93125,54933],{"class":77},[67,93127,54936],{"class":112},[67,93129,864],{"class":77},[67,93131,93132],{"class":84},"'video'",[67,93134,870],{"class":77},[67,93136,93137],{"class":69,"line":17393},[67,93138,93139],{"class":202},"    \u002F\u002F 这个事件类似于点击事件的另外一个写法.onclick\n",[67,93141,93142,93145,93147,93149,93151,93154,93156],{"class":69,"line":17413},[67,93143,93144],{"class":77},"    video.ontimeupdate ",[67,93146,909],{"class":73},[67,93148,88892],{"class":77},[67,93150,91710],{"class":112},[67,93152,93153],{"class":77},"(() ",[67,93155,85259],{"class":73},[67,93157,16289],{"class":77},[67,93159,93160],{"class":69,"line":17419},[67,93161,93162],{"class":202},"      \u002F\u002F 要进行本地存储,存当前播放的时间\n",[67,93164,93165],{"class":69,"line":17430},[67,93166,93167],{"class":202},"      \u002F\u002F 控制台输出当前的时间\n",[67,93169,93170,93173],{"class":69,"line":17453},[67,93171,93172],{"class":202},"      \u002F\u002F console.log(video.currentTime)",[67,93174,93175],{"class":202},"  \u002F\u002F获得当前的视频时间\n",[67,93177,93178],{"class":69,"line":17475},[67,93179,93180],{"class":202},"      \u002F\u002F 简单数据类型本地存储直接存储就可以,把当前的时间存储到本地存储\n",[67,93182,93183,93185,93187,93189,93192],{"class":69,"line":17480},[67,93184,75220],{"class":77},[67,93186,72191],{"class":112},[67,93188,864],{"class":77},[67,93190,93191],{"class":84},"'currentTime'",[67,93193,93194],{"class":77},", video.currentTime)\n",[67,93196,93197,93199,93201],{"class":69,"line":17486},[67,93198,55072],{"class":77},[67,93200,7129],{"class":208},[67,93202,870],{"class":77},[67,93204,93205],{"class":69,"line":17500},[67,93206,93207],{"class":202},"    \u002F\u002F 打开页面触发事件,就从本地存储里面取出事件,赋值给 video.currentTime\n",[67,93209,93210,93213,93216,93218,93221,93223],{"class":69,"line":17513},[67,93211,93212],{"class":77},"    video.",[67,93214,93215],{"class":112},"onloadeddata",[67,93217,14282],{"class":73},[67,93219,93220],{"class":77}," () ",[67,93222,85259],{"class":73},[67,93224,16289],{"class":77},[67,93226,93227],{"class":69,"line":17518},[67,93228,60549],{"class":202},[67,93230,93231],{"class":69,"line":17532},[67,93232,93233],{"class":202},"      \u002F\u002F 第一次打开的话,若本地存储无数据的话,就从0开始,从视频的开头开始,使用逻辑中断\n",[67,93235,93236,93239,93241,93244,93246,93248,93250,93252,93254],{"class":69,"line":17537},[67,93237,93238],{"class":77},"      video.currentTime ",[67,93240,909],{"class":73},[67,93242,93243],{"class":77}," localStorage.",[67,93245,72222],{"class":112},[67,93247,864],{"class":77},[67,93249,93191],{"class":84},[67,93251,14432],{"class":77},[67,93253,71894],{"class":73},[67,93255,47870],{"class":208},[67,93257,93258],{"class":69,"line":17543},[67,93259,2909],{"class":77},[67,93261,93262,93264,93266],{"class":69,"line":17548},[67,93263,52954],{"class":77},[67,93265,52350],{"class":51837},[67,93267,51844],{"class":77},[67,93269,93270,93272,93274],{"class":69,"line":17562},[67,93271,52322],{"class":77},[67,93273,52337],{"class":51837},[67,93275,51844],{"class":77},[67,93277,93278],{"class":69,"line":17567},[67,93279,177],{"emptyLinePlaceholder":176},[67,93281,93282,93284,93286],{"class":69,"line":17572},[67,93283,52322],{"class":77},[67,93285,51172],{"class":51837},[67,93287,51844],{"class":77},[779,93289,93290],{},"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":62,"searchDepth":143,"depth":143,"links":93292},[93293,93298,93302,93303,93304,93309,93314,93315,93316,93317,93324,93329,93330,93340,93344,93345,93349],{"id":77228,"depth":143,"text":77229,"children":93294},[93295,93296,93297],{"id":77232,"depth":149,"text":77233},{"id":77257,"depth":149,"text":77258},{"id":77269,"depth":149,"text":77270},{"id":77281,"depth":143,"text":77282,"children":93299},[93300,93301],{"id":77285,"depth":149,"text":77286},{"id":77300,"depth":149,"text":77301},{"id":77352,"depth":143,"text":77353},{"id":77396,"depth":143,"text":77397},{"id":77413,"depth":143,"text":77414,"children":93305},[93306,93307,93308],{"id":77417,"depth":149,"text":77418},{"id":77430,"depth":149,"text":77431},{"id":77535,"depth":149,"text":77536},{"id":77824,"depth":143,"text":77825,"children":93310},[93311,93312,93313],{"id":77828,"depth":149,"text":77829},{"id":78271,"depth":149,"text":78272},{"id":78682,"depth":149,"text":78683},{"id":78745,"depth":143,"text":78746},{"id":78824,"depth":143,"text":78825},{"id":78917,"depth":143,"text":78918},{"id":80762,"depth":143,"text":80763,"children":93318},[93319,93320,93321,93322,93323],{"id":80766,"depth":149,"text":80767},{"id":80778,"depth":149,"text":80779},{"id":80997,"depth":149,"text":80998},{"id":81015,"depth":149,"text":81016},{"id":81075,"depth":149,"text":81076},{"id":85343,"depth":143,"text":85344,"children":93325},[93326,93327,93328],{"id":85347,"depth":149,"text":85348},{"id":85365,"depth":149,"text":85366},{"id":85391,"depth":149,"text":85392},{"id":85400,"depth":143,"text":85401},{"id":85422,"depth":143,"text":85423,"children":93331},[93332,93333,93334,93335,93336,93337,93338,93339],{"id":85426,"depth":149,"text":85427},{"id":85687,"depth":149,"text":85688},{"id":85873,"depth":149,"text":85874},{"id":86240,"depth":149,"text":86241},{"id":86356,"depth":149,"text":86357},{"id":86392,"depth":149,"text":86393},{"id":86439,"depth":149,"text":86440},{"id":86473,"depth":149,"text":86474},{"id":87836,"depth":143,"text":87837,"children":93341},[93342,93343],{"id":87840,"depth":149,"text":87841},{"id":87877,"depth":149,"text":87878},{"id":89232,"depth":143,"text":89233},{"id":89603,"depth":143,"text":89604,"children":93346},[93347,93348],{"id":89607,"depth":149,"text":89608},{"id":89641,"depth":149,"text":89642},{"id":90370,"depth":143,"text":90371,"children":93350},[93351,93352,93353,93354],{"id":90374,"depth":149,"text":90375},{"id":91332,"depth":149,"text":91333},{"id":92274,"depth":149,"text":92275},{"id":92348,"depth":149,"text":92349},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch4-js",{"title":77217,"description":24093},"wiki\u002F2025-09-02-JS学习\u002Fch4-js进阶","1dCbxNw1t9V3NJEB9OsdCj0OlTGnowDQ4ULzKgRbbCM",{"id":93361,"title":93362,"body":93363,"description":93374,"extension":787,"meta":93375,"navigation":176,"path":93377,"seo":93378,"stem":93379,"__hash__":93380},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Findex.md","JS学习",{"type":7,"value":93364,"toc":93372},[93365],[19,93366,93367,93368],{},"这部分学完，学vue之前先通一下框架前置知识，参考下面文档，后续整理这部分和vue\n",[28,93369,93370],{"href":93370,"rel":93371},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FENYhd6upDopC2Kxl5NicDeIEnkh?from=from_copylink",[32],{"title":62,"searchDepth":143,"depth":143,"links":93373},[],"三件套第三套学习",{"category":93376},"前端","\u002Fwiki\u002F2025-09-02-js",{"title":93362,"description":93374},"wiki\u002F2025-09-02-JS学习\u002Findex","lIV547GozsMOKKj0rXMMspVZbD8AexWpLGp2d1VgrPo",{"id":93382,"title":93383,"body":93384,"description":24093,"extension":787,"meta":93489,"navigation":176,"path":93490,"seo":93491,"stem":93492,"__hash__":93493},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch1-安装.md","1.安装",{"type":7,"value":93385,"toc":93484},[93386,93393,93396,93399,93402,93406,93415,93418,93421,93425,93434,93437,93441,93444,93464,93467,93481],[19,93387,93388],{},[28,93389,93392],{"href":93390,"rel":93391},"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html%E8%8F%9C%E9%B8%9F%E6%95%99%E7%A8%8B",[32],"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html菜鸟教程",[10,93394,93383],{"id":93395},"_1安装",[19,93397,93398],{},"numpy是科学计算基础库,底层是C语言",[19,93400,93401],{},"三种方式：",[803,93403,93405],{"id":93404},"_11-通过pip安装","1.1 通过pip安装",[57,93407,93409],{"className":30915,"code":93408,"language":30917,"meta":62,"style":62},"pip install numpy\n",[64,93410,93411],{"__ignoreMap":62},[67,93412,93413],{"class":69,"line":70},[67,93414,93408],{"class":77},[19,93416,93417],{},"首选方式，自动处理依赖项",[19,93419,93420],{},"在提示系统命令符中使用cmd",[803,93422,93424],{"id":93423},"_12-通过anaconda安装","1.2 通过Anaconda安装",[57,93426,93428],{"className":30915,"code":93427,"language":30917,"meta":62,"style":62},"conda install numpy\n",[64,93429,93430],{"__ignoreMap":62},[67,93431,93432],{"class":69,"line":70},[67,93433,93427],{"class":77},[19,93435,93436],{},"自动解决环境依赖",[803,93438,93440],{"id":93439},"_13-通过系统包管理器linuxmacos","1.3 通过系统包管理器（linux\u002Fmacos）",[19,93442,93443],{},"对于Debian\u002FUbuntu",[57,93445,93447],{"className":30915,"code":93446,"language":30917,"meta":62,"style":62},"sudo apt-get install python3-numpy\n",[64,93448,93449],{"__ignoreMap":62},[67,93450,93451,93454,93456,93459,93461],{"class":69,"line":70},[67,93452,93453],{"class":77},"sudo apt",[67,93455,1389],{"class":73},[67,93457,93458],{"class":77},"get install python3",[67,93460,1389],{"class":73},[67,93462,93463],{"class":77},"numpy\n",[19,93465,93466],{},"对于Fedora:",[57,93468,93470],{"className":30915,"code":93469,"language":30917,"meta":62,"style":62},"sudo dnf install python3-numpy\n",[64,93471,93472],{"__ignoreMap":62},[67,93473,93474,93477,93479],{"class":69,"line":70},[67,93475,93476],{"class":77},"sudo dnf install python3",[67,93478,1389],{"class":73},[67,93480,93463],{"class":77},[779,93482,93483],{},"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":62,"searchDepth":143,"depth":143,"links":93485},[93486,93487,93488],{"id":93404,"depth":143,"text":93405},{"id":93423,"depth":143,"text":93424},{"id":93439,"depth":143,"text":93440},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch1",{"title":93383,"description":24093},"wiki\u002F2025-08-14-numpy\u002Fch1-安装","_ZuIZAeV_nnjZGVbsLzTQoAT37M5Q_lcOQxAgl9-cB4",{"id":93495,"title":93496,"body":93497,"description":24093,"extension":787,"meta":93610,"navigation":176,"path":93611,"seo":93612,"stem":93613,"__hash__":93614},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch10-算数函数.md","10.算数函数",{"type":7,"value":93498,"toc":93608},[93499,93502,93505,93508,93511,93514,93517,93520,93523,93526,93602,93605],[10,93500,93496],{"id":93501},"_10算数函数",[19,93503,93504],{},"加减乘除运算跟python基础语法没区别",[19,93506,93507],{},"除了python那种方法外还可以使用函数",[19,93509,93510],{},"加：np.add(a,b)",[19,93512,93513],{},"减：np.subtract(a,b)",[19,93515,93516],{},"乘：np.multiply(a,b)",[19,93518,93519],{},"除：np.divide(a,b) == a\u002Fb",[19,93521,93522],{},"取余：np.mod(a,b) == a%b",[19,93524,93525],{},"必须会的用法：",[57,93527,93529],{"className":30915,"code":93528,"language":30917,"meta":62,"style":62},"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",[64,93530,93531,93553,93574,93584,93597],{"__ignoreMap":62},[67,93532,93533,93535,93537,93540,93542,93545,93547,93549,93551],{"class":69,"line":70},[67,93534,28],{"class":77},[67,93536,909],{"class":73},[67,93538,93539],{"class":77},"np.arange(",[67,93541,1278],{"class":208},[67,93543,93544],{"class":77},").reshape(",[67,93546,933],{"class":208},[67,93548,1236],{"class":77},[67,93550,933],{"class":208},[67,93552,870],{"class":77},[67,93554,93555,93557,93559,93562,93564,93566,93568,93570,93572],{"class":69,"line":143},[67,93556,1121],{"class":77},[67,93558,909],{"class":73},[67,93560,93561],{"class":77},"np.array([",[67,93563,1303],{"class":208},[67,93565,1236],{"class":77},[67,93567,1303],{"class":208},[67,93569,1236],{"class":77},[67,93571,1303],{"class":208},[67,93573,5376],{"class":77},[67,93575,93576,93579,93581],{"class":69,"line":149},[67,93577,93578],{"class":77},"result",[67,93580,909],{"class":73},[67,93582,93583],{"class":77},"np.empty_like(a)\n",[67,93585,93586,93589,93592,93594],{"class":69,"line":155},[67,93587,93588],{"class":77},"np.add(a,b,",[67,93590,93591],{"class":5935},"out",[67,93593,909],{"class":73},[67,93595,93596],{"class":77},"result)\n",[67,93598,93599],{"class":69,"line":161},[67,93600,93601],{"class":77},"result\n",[19,93603,93604],{},"总结：使用函数可以使用out参数将结果放到具体的位置，在进行运算时，两个数组形状不同时，会进行广播操作，变成一样的",[779,93606,93607],{},"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":62,"searchDepth":143,"depth":143,"links":93609},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch10",{"title":93496,"description":24093},"wiki\u002F2025-08-14-numpy\u002Fch10-算数函数","MRir4Wr30-SYAykqeiub6_1Xao5nccQZ6Li54ohb_SQ",{"id":93616,"title":93617,"body":93618,"description":24093,"extension":787,"meta":94380,"navigation":176,"path":94381,"seo":94382,"stem":94383,"__hash__":94384},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch11-统计函数.md","11.统计函数",{"type":7,"value":93619,"toc":94367},[93620,93623,93626,93629,93633,93672,93676,93720,93780,93784,93787,93826,93829,93874,93878,93914,93918,93987,93991,94055,94059,94062,94065,94068,94071,94107,94111,94151,94155,94227,94230,94234,94297,94301,94364],[10,93621,93617],{"id":93622},"_11统计函数",[19,93624,93625],{},"sum max min mean",[19,93627,93628],{},"这些有axis参数，可以指定方向",[803,93630,93632],{"id":93631},"_111-sum求和函数","11.1 sum()求和函数",[57,93634,93636],{"className":30915,"code":93635,"language":30917,"meta":62,"style":62},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.sum(a)#求和\n",[64,93637,93638,93643,93664],{"__ignoreMap":62},[67,93639,93640],{"class":69,"line":70},[67,93641,93642],{"class":202},"#创建一维数组\n",[67,93644,93645,93647,93649,93652,93654,93656,93658,93660,93662],{"class":69,"line":143},[67,93646,28],{"class":77},[67,93648,909],{"class":73},[67,93650,93651],{"class":77},"np.random.randint(",[67,93653,1077],{"class":208},[67,93655,1236],{"class":77},[67,93657,1169],{"class":208},[67,93659,1236],{"class":77},[67,93661,1556],{"class":208},[67,93663,870],{"class":77},[67,93665,93666,93669],{"class":69,"line":149},[67,93667,93668],{"class":77},"np.sum(a)",[67,93670,93671],{"class":202},"#求和\n",[803,93673,93675],{"id":93674},"_112-max求最大值函数","11.2 max()求最大值函数",[57,93677,93679],{"className":30915,"code":93678,"language":30917,"meta":62,"style":62},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.max(a)\n#最大索引(求最大元素的索引)arg\nnp.argmax(a)\n",[64,93680,93681,93685,93705,93710,93715],{"__ignoreMap":62},[67,93682,93683],{"class":69,"line":70},[67,93684,93642],{"class":202},[67,93686,93687,93689,93691,93693,93695,93697,93699,93701,93703],{"class":69,"line":143},[67,93688,28],{"class":77},[67,93690,909],{"class":73},[67,93692,93651],{"class":77},[67,93694,1077],{"class":208},[67,93696,1236],{"class":77},[67,93698,1169],{"class":208},[67,93700,1236],{"class":77},[67,93702,1556],{"class":208},[67,93704,870],{"class":77},[67,93706,93707],{"class":69,"line":149},[67,93708,93709],{"class":77},"np.max(a)\n",[67,93711,93712],{"class":69,"line":155},[67,93713,93714],{"class":202},"#最大索引(求最大元素的索引)arg\n",[67,93716,93717],{"class":69,"line":161},[67,93718,93719],{"class":77},"np.argmax(a)\n",[57,93721,93723],{"className":30915,"code":93722,"language":30917,"meta":62,"style":62},"a = np.array([1, 5, 3])\nb = np.array([3, 2, 4])\n\nprint(np.maximum(a, b))   # [3 5 4]，每个位置上取较大值\n",[64,93724,93725,93746,93766,93770],{"__ignoreMap":62},[67,93726,93727,93729,93731,93734,93736,93738,93740,93742,93744],{"class":69,"line":70},[67,93728,11637],{"class":77},[67,93730,909],{"class":73},[67,93732,93733],{"class":77}," np.array([",[67,93735,1077],{"class":208},[67,93737,13153],{"class":77},[67,93739,1177],{"class":208},[67,93741,13153],{"class":77},[67,93743,933],{"class":208},[67,93745,5376],{"class":77},[67,93747,93748,93750,93752,93754,93756,93758,93760,93762,93764],{"class":69,"line":143},[67,93749,11663],{"class":77},[67,93751,909],{"class":73},[67,93753,93733],{"class":77},[67,93755,933],{"class":208},[67,93757,13153],{"class":77},[67,93759,939],{"class":208},[67,93761,13153],{"class":77},[67,93763,1151],{"class":208},[67,93765,5376],{"class":77},[67,93767,93768],{"class":69,"line":149},[67,93769,177],{"emptyLinePlaceholder":176},[67,93771,93772,93774,93777],{"class":69,"line":155},[67,93773,30952],{"class":208},[67,93775,93776],{"class":77},"(np.maximum(a, b))   ",[67,93778,93779],{"class":202},"# [3 5 4]，每个位置上取较大值\n",[803,93781,93783],{"id":93782},"_113-mean求平均值函数","11.3 mean()求平均值函数",[19,93785,93786],{},"①一维数组：",[57,93788,93790],{"className":30915,"code":93789,"language":30917,"meta":62,"style":62},"#创建一维数组\na=np.random.randint(1,100,20)\n#求平均值\nnp.mean(a)\n",[64,93791,93792,93796,93816,93821],{"__ignoreMap":62},[67,93793,93794],{"class":69,"line":70},[67,93795,93642],{"class":202},[67,93797,93798,93800,93802,93804,93806,93808,93810,93812,93814],{"class":69,"line":143},[67,93799,28],{"class":77},[67,93801,909],{"class":73},[67,93803,93651],{"class":77},[67,93805,1077],{"class":208},[67,93807,1236],{"class":77},[67,93809,1169],{"class":208},[67,93811,1236],{"class":77},[67,93813,1556],{"class":208},[67,93815,870],{"class":77},[67,93817,93818],{"class":69,"line":149},[67,93819,93820],{"class":202},"#求平均值\n",[67,93822,93823],{"class":69,"line":155},[67,93824,93825],{"class":77},"np.mean(a)\n",[19,93827,93828],{},"②二维数组",[57,93830,93832],{"className":30915,"code":93831,"language":30917,"meta":62,"style":62},"#二维数组\naa=np.arange(1,13).reshape(3,4)\n#对数组中的所有数求平均\nnp.mean(aa)\n",[64,93833,93834,93839,93864,93869],{"__ignoreMap":62},[67,93835,93836],{"class":69,"line":70},[67,93837,93838],{"class":202},"#二维数组\n",[67,93840,93841,93844,93846,93848,93850,93852,93854,93856,93858,93860,93862],{"class":69,"line":143},[67,93842,93843],{"class":77},"aa",[67,93845,909],{"class":73},[67,93847,93539],{"class":77},[67,93849,1077],{"class":208},[67,93851,1236],{"class":77},[67,93853,1380],{"class":208},[67,93855,93544],{"class":77},[67,93857,933],{"class":208},[67,93859,1236],{"class":77},[67,93861,1151],{"class":208},[67,93863,870],{"class":77},[67,93865,93866],{"class":69,"line":149},[67,93867,93868],{"class":202},"#对数组中的所有数求平均\n",[67,93870,93871],{"class":69,"line":155},[67,93872,93873],{"class":77},"np.mean(aa)\n",[803,93875,93877],{"id":93876},"_114-median求中位数函数","11.4 median()求中位数函数",[57,93879,93881],{"className":30915,"code":93880,"language":30917,"meta":62,"style":62},"#求中位数\nb=np.arange(1,10)\nnp.median(b)\n#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[64,93882,93883,93888,93904,93909],{"__ignoreMap":62},[67,93884,93885],{"class":69,"line":70},[67,93886,93887],{"class":202},"#求中位数\n",[67,93889,93890,93892,93894,93896,93898,93900,93902],{"class":69,"line":143},[67,93891,1121],{"class":77},[67,93893,909],{"class":73},[67,93895,93539],{"class":77},[67,93897,1077],{"class":208},[67,93899,1236],{"class":77},[67,93901,1303],{"class":208},[67,93903,870],{"class":77},[67,93905,93906],{"class":69,"line":149},[67,93907,93908],{"class":77},"np.median(b)\n",[67,93910,93911],{"class":69,"line":155},[67,93912,93913],{"class":202},"#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[803,93915,93917],{"id":93916},"_115-power求幂运算函数","11.5 power()求幂运算函数",[57,93919,93921],{"className":30915,"code":93920,"language":30917,"meta":62,"style":62},"b=np.arange(1,10)\n#幂运算\n#第一个参数是要进行幂运算的数列，第二个参数是为方\nnp.power(b,2)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b)\nnp.power(b,2,out=y)\n",[64,93922,93923,93939,93944,93949,93958,93963,93972],{"__ignoreMap":62},[67,93924,93925,93927,93929,93931,93933,93935,93937],{"class":69,"line":70},[67,93926,1121],{"class":77},[67,93928,909],{"class":73},[67,93930,93539],{"class":77},[67,93932,1077],{"class":208},[67,93934,1236],{"class":77},[67,93936,1303],{"class":208},[67,93938,870],{"class":77},[67,93940,93941],{"class":69,"line":143},[67,93942,93943],{"class":202},"#幂运算\n",[67,93945,93946],{"class":69,"line":149},[67,93947,93948],{"class":202},"#第一个参数是要进行幂运算的数列，第二个参数是为方\n",[67,93950,93951,93954,93956],{"class":69,"line":155},[67,93952,93953],{"class":77},"np.power(b,",[67,93955,939],{"class":208},[67,93957,870],{"class":77},[67,93959,93960],{"class":69,"line":161},[67,93961,93962],{"class":202},"#或者以下代码，将数据存储起来\n",[67,93964,93965,93967,93969],{"class":69,"line":167},[67,93966,1701],{"class":77},[67,93968,909],{"class":73},[67,93970,93971],{"class":77},"np.empty_like(b)\n",[67,93973,93974,93976,93978,93980,93982,93984],{"class":69,"line":173},[67,93975,93953],{"class":77},[67,93977,939],{"class":208},[67,93979,1236],{"class":77},[67,93981,93591],{"class":5935},[67,93983,909],{"class":73},[67,93985,93986],{"class":77},"y)\n",[803,93988,93990],{"id":93989},"_116-sqrt求开方函数","11.6 sqrt()求开方函数",[57,93992,93994],{"className":30915,"code":93993,"language":30917,"meta":62,"style":62},"b=np.arange(1,10)\n#开方\nnp.sqrt(b)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b,dtype=float)\nnp.sqrt(b,out=y)\n",[64,93995,93996,94012,94017,94022,94026,94044],{"__ignoreMap":62},[67,93997,93998,94000,94002,94004,94006,94008,94010],{"class":69,"line":70},[67,93999,1121],{"class":77},[67,94001,909],{"class":73},[67,94003,93539],{"class":77},[67,94005,1077],{"class":208},[67,94007,1236],{"class":77},[67,94009,1303],{"class":208},[67,94011,870],{"class":77},[67,94013,94014],{"class":69,"line":143},[67,94015,94016],{"class":202},"#开方\n",[67,94018,94019],{"class":69,"line":149},[67,94020,94021],{"class":77},"np.sqrt(b)\n",[67,94023,94024],{"class":69,"line":155},[67,94025,93962],{"class":202},[67,94027,94028,94030,94032,94035,94038,94040,94042],{"class":69,"line":161},[67,94029,1701],{"class":77},[67,94031,909],{"class":73},[67,94033,94034],{"class":77},"np.empty_like(b,",[67,94036,94037],{"class":5935},"dtype",[67,94039,909],{"class":73},[67,94041,903],{"class":208},[67,94043,870],{"class":77},[67,94045,94046,94049,94051,94053],{"class":69,"line":167},[67,94047,94048],{"class":77},"np.sqrt(b,",[67,94050,93591],{"class":5935},[67,94052,909],{"class":73},[67,94054,93986],{"class":77},[803,94056,94058],{"id":94057},"_117-cumsum累计求和函数","11.7 cumsum()累计求和函数",[19,94060,94061],{},"对数组中的元素累计求和，可指定轴",[19,94063,94064],{},"#累计求和的意思是：",[19,94066,94067],{},"a = np.array([1, 2, 3, 4])",[19,94069,94070],{},"[1, 1+2, 1+2+3, 1+2+3+4] → [1, 3, 6, 10]",[57,94072,94074],{"className":30915,"code":94073,"language":30917,"meta":62,"style":62},"b=np.arange(1,10)\nnp.cumsum(b)\n#结果：\n#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[64,94075,94076,94092,94097,94102],{"__ignoreMap":62},[67,94077,94078,94080,94082,94084,94086,94088,94090],{"class":69,"line":70},[67,94079,1121],{"class":77},[67,94081,909],{"class":73},[67,94083,93539],{"class":77},[67,94085,1077],{"class":208},[67,94087,1236],{"class":77},[67,94089,1303],{"class":208},[67,94091,870],{"class":77},[67,94093,94094],{"class":69,"line":143},[67,94095,94096],{"class":77},"np.cumsum(b)\n",[67,94098,94099],{"class":69,"line":149},[67,94100,94101],{"class":202},"#结果：\n",[67,94103,94104],{"class":69,"line":155},[67,94105,94106],{"class":202},"#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[803,94108,94110],{"id":94109},"_118-cumprod累计求积函数","11.8 cumprod()累计求积函数",[57,94112,94114],{"className":30915,"code":94113,"language":30917,"meta":62,"style":62},"b=np.arange(1,10)\n#对数组中的元素累计求积，可指定轴\nnp.cumprod(b)\n#结果：\n#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[64,94115,94116,94132,94137,94142,94146],{"__ignoreMap":62},[67,94117,94118,94120,94122,94124,94126,94128,94130],{"class":69,"line":70},[67,94119,1121],{"class":77},[67,94121,909],{"class":73},[67,94123,93539],{"class":77},[67,94125,1077],{"class":208},[67,94127,1236],{"class":77},[67,94129,1303],{"class":208},[67,94131,870],{"class":77},[67,94133,94134],{"class":69,"line":143},[67,94135,94136],{"class":202},"#对数组中的元素累计求积，可指定轴\n",[67,94138,94139],{"class":69,"line":149},[67,94140,94141],{"class":77},"np.cumprod(b)\n",[67,94143,94144],{"class":69,"line":155},[67,94145,94101],{"class":202},[67,94147,94148],{"class":69,"line":161},[67,94149,94150],{"class":202},"#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[803,94152,94154],{"id":94153},"_119-uniqu删除重复元素排序","11.9 uniqu()删除重复元素+排序",[57,94156,94158],{"className":30915,"code":94157,"language":30917,"meta":62,"style":62},"#删除数组中的重复数据，并对数据进行排序\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",[64,94159,94160,94165,94213,94218,94222],{"__ignoreMap":62},[67,94161,94162],{"class":69,"line":70},[67,94163,94164],{"class":202},"#删除数组中的重复数据，并对数据进行排序\n",[67,94166,94167,94169,94171,94173,94175,94177,94179,94181,94183,94185,94187,94189,94191,94193,94195,94197,94199,94201,94203,94205,94207,94209,94211],{"class":69,"line":143},[67,94168,28],{"class":77},[67,94170,909],{"class":73},[67,94172,93561],{"class":77},[67,94174,1077],{"class":208},[67,94176,1236],{"class":77},[67,94178,939],{"class":208},[67,94180,1236],{"class":77},[67,94182,933],{"class":208},[67,94184,1236],{"class":77},[67,94186,1355],{"class":208},[67,94188,1236],{"class":77},[67,94190,933],{"class":208},[67,94192,1236],{"class":77},[67,94194,1303],{"class":208},[67,94196,1236],{"class":77},[67,94198,1057],{"class":208},[67,94200,1236],{"class":77},[67,94202,1051],{"class":208},[67,94204,1236],{"class":77},[67,94206,1631],{"class":208},[67,94208,1236],{"class":77},[67,94210,1151],{"class":208},[67,94212,5376],{"class":77},[67,94214,94215],{"class":69,"line":149},[67,94216,94217],{"class":77},"np.unique(a)\n",[67,94219,94220],{"class":69,"line":155},[67,94221,94101],{"class":202},[67,94223,94224],{"class":69,"line":161},[67,94225,94226],{"class":202},"#array([ 0,  1,  2,  3,  4, 10, 12, 23, 32])\n",[19,94228,94229],{},"升序形式排序",[803,94231,94233],{"id":94232},"_1110-nonzero返回非零元素索引","11.10 nonzero()返回非零元素索引",[57,94235,94237],{"className":30915,"code":94236,"language":30917,"meta":62,"style":62},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#返回数组中非零元素的索引\nnp.nonzero(a)\n",[64,94238,94239,94287,94292],{"__ignoreMap":62},[67,94240,94241,94243,94245,94247,94249,94251,94253,94255,94257,94259,94261,94263,94265,94267,94269,94271,94273,94275,94277,94279,94281,94283,94285],{"class":69,"line":70},[67,94242,28],{"class":77},[67,94244,909],{"class":73},[67,94246,93561],{"class":77},[67,94248,1077],{"class":208},[67,94250,1236],{"class":77},[67,94252,939],{"class":208},[67,94254,1236],{"class":77},[67,94256,933],{"class":208},[67,94258,1236],{"class":77},[67,94260,1355],{"class":208},[67,94262,1236],{"class":77},[67,94264,933],{"class":208},[67,94266,1236],{"class":77},[67,94268,1303],{"class":208},[67,94270,1236],{"class":77},[67,94272,1057],{"class":208},[67,94274,1236],{"class":77},[67,94276,1051],{"class":208},[67,94278,1236],{"class":77},[67,94280,1631],{"class":208},[67,94282,1236],{"class":77},[67,94284,1151],{"class":208},[67,94286,5376],{"class":77},[67,94288,94289],{"class":69,"line":143},[67,94290,94291],{"class":202},"#返回数组中非零元素的索引\n",[67,94293,94294],{"class":69,"line":149},[67,94295,94296],{"class":77},"np.nonzero(a)\n",[803,94298,94300],{"id":94299},"_1111-ptp计算最值之差","11.11 ptp()计算最值之差",[57,94302,94304],{"className":30915,"code":94303,"language":30917,"meta":62,"style":62},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#计算一组数中最大值与最小值的差，可指定轴\nnp.ptp(a)\n",[64,94305,94306,94354,94359],{"__ignoreMap":62},[67,94307,94308,94310,94312,94314,94316,94318,94320,94322,94324,94326,94328,94330,94332,94334,94336,94338,94340,94342,94344,94346,94348,94350,94352],{"class":69,"line":70},[67,94309,28],{"class":77},[67,94311,909],{"class":73},[67,94313,93561],{"class":77},[67,94315,1077],{"class":208},[67,94317,1236],{"class":77},[67,94319,939],{"class":208},[67,94321,1236],{"class":77},[67,94323,933],{"class":208},[67,94325,1236],{"class":77},[67,94327,1355],{"class":208},[67,94329,1236],{"class":77},[67,94331,933],{"class":208},[67,94333,1236],{"class":77},[67,94335,1303],{"class":208},[67,94337,1236],{"class":77},[67,94339,1057],{"class":208},[67,94341,1236],{"class":77},[67,94343,1051],{"class":208},[67,94345,1236],{"class":77},[67,94347,1631],{"class":208},[67,94349,1236],{"class":77},[67,94351,1151],{"class":208},[67,94353,5376],{"class":77},[67,94355,94356],{"class":69,"line":143},[67,94357,94358],{"class":202},"#计算一组数中最大值与最小值的差，可指定轴\n",[67,94360,94361],{"class":69,"line":149},[67,94362,94363],{"class":77},"np.ptp(a)\n",[779,94365,94366],{},"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":62,"searchDepth":143,"depth":143,"links":94368},[94369,94370,94371,94372,94373,94374,94375,94376,94377,94378,94379],{"id":93631,"depth":143,"text":93632},{"id":93674,"depth":143,"text":93675},{"id":93782,"depth":143,"text":93783},{"id":93876,"depth":143,"text":93877},{"id":93916,"depth":143,"text":93917},{"id":93989,"depth":143,"text":93990},{"id":94057,"depth":143,"text":94058},{"id":94109,"depth":143,"text":94110},{"id":94153,"depth":143,"text":94154},{"id":94232,"depth":143,"text":94233},{"id":94299,"depth":143,"text":94300},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch11",{"title":93617,"description":24093},"wiki\u002F2025-08-14-numpy\u002Fch11-统计函数","CTRvDo_rBDOrpNMU-fbOBmv8zkqxGfIkMB9rSWJBiro",{"id":94386,"title":94387,"body":94388,"description":24093,"extension":787,"meta":95043,"navigation":176,"path":95044,"seo":95045,"stem":95046,"__hash__":95047},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数.md","12.其他常用函数",{"type":7,"value":94389,"toc":95031},[94390,94393,94397,94400,94616,94620,94623,94832,94836,94902,94907,94911,94914,94917,94955,94959,94962,94967,94971,94974,94977,94982,94986,94989,94993,94996,94999,95004,95008,95011,95014,95019,95023,95028],[10,94391,94387],{"id":94392},"_12其他常用函数",[803,94394,94396],{"id":94395},"_121-tile元素按行列复制扩展","12.1 tile()元素按行列复制扩展",[19,94398,94399],{},"将数组的数据按照行列复制扩展",[57,94401,94403],{"className":30915,"code":94402,"language":30917,"meta":62,"style":62},"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",[64,94404,94405,94421,94430,94434,94439,94444,94457,94461,94466,94471,94476,94480,94485,94509,94521,94525,94529,94534,94539,94544,94549,94553,94566,94570,94574,94579,94584,94589,94594,94599,94603,94607,94612],{"__ignoreMap":62},[67,94406,94407,94409,94411,94413,94415,94417,94419],{"class":69,"line":70},[67,94408,28],{"class":77},[67,94410,909],{"class":73},[67,94412,93539],{"class":77},[67,94414,1077],{"class":208},[67,94416,1236],{"class":77},[67,94418,1177],{"class":208},[67,94420,870],{"class":77},[67,94422,94423,94426,94428],{"class":69,"line":143},[67,94424,94425],{"class":77},"np.tile(a,",[67,94427,939],{"class":208},[67,94429,870],{"class":77},[67,94431,94432],{"class":69,"line":149},[67,94433,94101],{"class":202},[67,94435,94436],{"class":69,"line":155},[67,94437,94438],{"class":202},"#array([1, 2, 3, 4, 1, 2, 3, 4])\n",[67,94440,94441],{"class":69,"line":161},[67,94442,94443],{"class":202},"#行复制两次，列复制三次\n",[67,94445,94446,94449,94451,94453,94455],{"class":69,"line":167},[67,94447,94448],{"class":77},"np.tile(a,(",[67,94450,939],{"class":208},[67,94452,1236],{"class":77},[67,94454,933],{"class":208},[67,94456,31034],{"class":77},[67,94458,94459],{"class":69,"line":173},[67,94460,94101],{"class":202},[67,94462,94463],{"class":69,"line":180},[67,94464,94465],{"class":84},"'''\n",[67,94467,94468],{"class":69,"line":186},[67,94469,94470],{"class":84},"array([[1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4],\n",[67,94472,94473],{"class":69,"line":444},[67,94474,94475],{"class":84},"       [1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4]])\n",[67,94477,94478],{"class":69,"line":2335},[67,94479,94465],{"class":84},[67,94481,94482],{"class":69,"line":2340},[67,94483,94484],{"class":202},"#创建二维数组\n",[67,94486,94487,94489,94491,94493,94495,94497,94499,94501,94503,94505,94507],{"class":69,"line":2346},[67,94488,93843],{"class":77},[67,94490,909],{"class":73},[67,94492,93539],{"class":77},[67,94494,1077],{"class":208},[67,94496,1236],{"class":77},[67,94498,1380],{"class":208},[67,94500,93544],{"class":77},[67,94502,1151],{"class":208},[67,94504,1236],{"class":77},[67,94506,933],{"class":208},[67,94508,870],{"class":77},[67,94510,94511,94514,94516,94518],{"class":69,"line":2351},[67,94512,94513],{"class":77},"np.tile(aa,",[67,94515,939],{"class":208},[67,94517,260],{"class":77},[67,94519,94520],{"class":202},"#一个数的时候就是行\n",[67,94522,94523],{"class":69,"line":2365},[67,94524,94101],{"class":202},[67,94526,94527],{"class":69,"line":2370},[67,94528,94465],{"class":84},[67,94530,94531],{"class":69,"line":2376},[67,94532,94533],{"class":84},"array([[ 1,  2,  3,  1,  2,  3],\n",[67,94535,94536],{"class":69,"line":2397},[67,94537,94538],{"class":84},"       [ 4,  5,  6,  4,  5,  6],\n",[67,94540,94541],{"class":69,"line":2402},[67,94542,94543],{"class":84},"       [ 7,  8,  9,  7,  8,  9],\n",[67,94545,94546],{"class":69,"line":2416},[67,94547,94548],{"class":84},"       [10, 11, 12, 10, 11, 12]])\n",[67,94550,94551],{"class":69,"line":2421},[67,94552,94465],{"class":84},[67,94554,94555,94558,94560,94562,94564],{"class":69,"line":2450},[67,94556,94557],{"class":77},"np.tile(aa,(",[67,94559,939],{"class":208},[67,94561,1236],{"class":77},[67,94563,933],{"class":208},[67,94565,31034],{"class":77},[67,94567,94568],{"class":69,"line":2455},[67,94569,94101],{"class":202},[67,94571,94572],{"class":69,"line":2472},[67,94573,94465],{"class":84},[67,94575,94576],{"class":69,"line":2477},[67,94577,94578],{"class":84},"array([[ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[67,94580,94581],{"class":69,"line":2482},[67,94582,94583],{"class":84},"       [ 4,  5,  6,  4,  5,  6,  4,  5,  6],\n",[67,94585,94586],{"class":69,"line":2487},[67,94587,94588],{"class":84},"       [ 7,  8,  9,  7,  8,  9,  7,  8,  9],\n",[67,94590,94591],{"class":69,"line":2501},[67,94592,94593],{"class":84},"       [10, 11, 12, 10, 11, 12, 10, 11, 12],\n",[67,94595,94596],{"class":69,"line":2506},[67,94597,94598],{"class":84},"       [ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[67,94600,94601],{"class":69,"line":3298},[67,94602,94583],{"class":84},[67,94604,94605],{"class":69,"line":3312},[67,94606,94588],{"class":84},[67,94608,94609],{"class":69,"line":3320},[67,94610,94611],{"class":84},"       [10, 11, 12, 10, 11, 12, 10, 11, 12]])\n",[67,94613,94614],{"class":69,"line":3325},[67,94615,94465],{"class":84},[803,94617,94619],{"id":94618},"_122-repeat元素重复若干","12.2 repeat()元素重复若干",[19,94621,94622],{},"repeat()将数组中的每个元素重复若干次",[57,94624,94626],{"className":30915,"code":94625,"language":30917,"meta":62,"style":62},"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",[64,94627,94628,94644,94653,94657,94662,94686,94691,94700,94704,94709,94713,94718,94734,94738,94742,94747,94752,94757,94761,94766,94770,94775,94780,94784,94800,94804,94808,94813,94818,94823,94828],{"__ignoreMap":62},[67,94629,94630,94632,94634,94636,94638,94640,94642],{"class":69,"line":70},[67,94631,28],{"class":77},[67,94633,909],{"class":73},[67,94635,93539],{"class":77},[67,94637,1077],{"class":208},[67,94639,1236],{"class":77},[67,94641,1177],{"class":208},[67,94643,870],{"class":77},[67,94645,94646,94649,94651],{"class":69,"line":143},[67,94647,94648],{"class":77},"np.repeat(a,",[67,94650,933],{"class":208},[67,94652,870],{"class":77},[67,94654,94655],{"class":69,"line":149},[67,94656,94101],{"class":202},[67,94658,94659],{"class":69,"line":155},[67,94660,94661],{"class":202},"#array([1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4])\n",[67,94663,94664,94666,94668,94670,94672,94674,94676,94678,94680,94682,94684],{"class":69,"line":161},[67,94665,93843],{"class":77},[67,94667,909],{"class":73},[67,94669,93539],{"class":77},[67,94671,1077],{"class":208},[67,94673,1236],{"class":77},[67,94675,1380],{"class":208},[67,94677,93544],{"class":77},[67,94679,1151],{"class":208},[67,94681,1236],{"class":77},[67,94683,933],{"class":208},[67,94685,870],{"class":77},[67,94687,94688],{"class":69,"line":167},[67,94689,94690],{"class":202},"#这个重复之后二维变成一维\n",[67,94692,94693,94696,94698],{"class":69,"line":173},[67,94694,94695],{"class":77},"np.repeat(aa,",[67,94697,939],{"class":208},[67,94699,870],{"class":77},[67,94701,94702],{"class":69,"line":180},[67,94703,94465],{"class":84},[67,94705,94706],{"class":69,"line":186},[67,94707,94708],{"class":84},"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",[67,94710,94711],{"class":69,"line":444},[67,94712,94465],{"class":84},[67,94714,94715],{"class":69,"line":2335},[67,94716,94717],{"class":202},"#指定axis\n",[67,94719,94720,94722,94724,94726,94728,94730,94732],{"class":69,"line":2340},[67,94721,94695],{"class":77},[67,94723,939],{"class":208},[67,94725,1236],{"class":77},[67,94727,48051],{"class":5935},[67,94729,909],{"class":73},[67,94731,1051],{"class":208},[67,94733,870],{"class":77},[67,94735,94736],{"class":69,"line":2346},[67,94737,94101],{"class":202},[67,94739,94740],{"class":69,"line":2351},[67,94741,94465],{"class":84},[67,94743,94744],{"class":69,"line":2365},[67,94745,94746],{"class":84},"array([[ 1,  2,  3],\n",[67,94748,94749],{"class":69,"line":2370},[67,94750,94751],{"class":84},"       [ 1,  2,  3],\n",[67,94753,94754],{"class":69,"line":2376},[67,94755,94756],{"class":84},"       [ 4,  5,  6],\n",[67,94758,94759],{"class":69,"line":2397},[67,94760,94756],{"class":84},[67,94762,94763],{"class":69,"line":2402},[67,94764,94765],{"class":84},"       [ 7,  8,  9],\n",[67,94767,94768],{"class":69,"line":2416},[67,94769,94765],{"class":84},[67,94771,94772],{"class":69,"line":2421},[67,94773,94774],{"class":84},"       [10, 11, 12],\n",[67,94776,94777],{"class":69,"line":2450},[67,94778,94779],{"class":84},"       [10, 11, 12]])\n",[67,94781,94782],{"class":69,"line":2455},[67,94783,94465],{"class":84},[67,94785,94786,94788,94790,94792,94794,94796,94798],{"class":69,"line":2472},[67,94787,94695],{"class":77},[67,94789,939],{"class":208},[67,94791,1236],{"class":77},[67,94793,48051],{"class":5935},[67,94795,909],{"class":73},[67,94797,1077],{"class":208},[67,94799,870],{"class":77},[67,94801,94802],{"class":69,"line":2477},[67,94803,94101],{"class":202},[67,94805,94806],{"class":69,"line":2482},[67,94807,94465],{"class":84},[67,94809,94810],{"class":69,"line":2487},[67,94811,94812],{"class":84},"array([[ 1,  1,  2,  2,  3,  3],\n",[67,94814,94815],{"class":69,"line":2501},[67,94816,94817],{"class":84},"       [ 4,  4,  5,  5,  6,  6],\n",[67,94819,94820],{"class":69,"line":2506},[67,94821,94822],{"class":84},"       [ 7,  7,  8,  8,  9,  9],\n",[67,94824,94825],{"class":69,"line":3298},[67,94826,94827],{"class":84},"       [10, 10, 11, 11, 12, 12]])\n",[67,94829,94830],{"class":69,"line":3312},[67,94831,94465],{"class":84},[803,94833,94835],{"id":94834},"_123-roll沿指定轴对数组元素移位","12.3 roll()沿指定轴对数组元素移位",[57,94837,94839],{"className":30915,"code":94838,"language":30917,"meta":62,"style":62},"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",[64,94840,94841,94857,94862,94874,94878,94883,94893,94897],{"__ignoreMap":62},[67,94842,94843,94845,94847,94849,94851,94853,94855],{"class":69,"line":70},[67,94844,28],{"class":77},[67,94846,909],{"class":73},[67,94848,93539],{"class":77},[67,94850,1077],{"class":208},[67,94852,1236],{"class":77},[67,94854,1177],{"class":208},[67,94856,870],{"class":77},[67,94858,94859],{"class":69,"line":143},[67,94860,94861],{"class":202},"#array([，2，3，4])\n",[67,94863,94864,94867,94869,94871],{"class":69,"line":149},[67,94865,94866],{"class":77},"np.roll(a,",[67,94868,939],{"class":208},[67,94870,260],{"class":77},[67,94872,94873],{"class":202},"#传正数向后调多少位，传负数向前调多少位\n",[67,94875,94876],{"class":69,"line":155},[67,94877,94101],{"class":202},[67,94879,94880],{"class":69,"line":161},[67,94881,94882],{"class":202},"#array([3, 4, 1, 2])\n",[67,94884,94885,94887,94889,94891],{"class":69,"line":167},[67,94886,94866],{"class":77},[67,94888,1389],{"class":73},[67,94890,1077],{"class":208},[67,94892,870],{"class":77},[67,94894,94895],{"class":69,"line":173},[67,94896,94101],{"class":202},[67,94898,94899],{"class":69,"line":180},[67,94900,94901],{"class":202},"#array([2, 3, 4, 1])\n",[19,94903,94904],{},[725,94905],{"alt":62,"src":94906},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-032.png",[803,94908,94910],{"id":94909},"_124-resize重新调整数组大小","12.4 resize()重新调整数组大小",[19,94912,94913],{},"resize()重新调整数组的大小",[19,94915,94916],{},"reshape修改数组的维度，数组元素个数不能改变，要保持一致",[57,94918,94920],{"className":30915,"code":94919,"language":30917,"meta":62,"style":62},"#resize()重新调整 数组的大小，数组元素个数可以不相同\nnp.resize(aa,(2,6))\nnp.resize(aa,(2,9))#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[64,94921,94922,94927,94940],{"__ignoreMap":62},[67,94923,94924],{"class":69,"line":70},[67,94925,94926],{"class":202},"#resize()重新调整 数组的大小，数组元素个数可以不相同\n",[67,94928,94929,94932,94934,94936,94938],{"class":69,"line":143},[67,94930,94931],{"class":77},"np.resize(aa,(",[67,94933,939],{"class":208},[67,94935,1236],{"class":77},[67,94937,1202],{"class":208},[67,94939,31034],{"class":77},[67,94941,94942,94944,94946,94948,94950,94952],{"class":69,"line":149},[67,94943,94931],{"class":77},[67,94945,939],{"class":208},[67,94947,1236],{"class":77},[67,94949,1278],{"class":208},[67,94951,83308],{"class":77},[67,94953,94954],{"class":202},"#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[803,94956,94958],{"id":94957},"_125-placeput函数","12.5 place()\u002Fput()函数",[19,94960,94961],{},"将数组中满足条件的元素\u002F指定的元素替换为指定的值",[19,94963,94964],{},[725,94965],{"alt":62,"src":94966},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-033.png",[803,94968,94970],{"id":94969},"_126-保存加载文件","12.6 保存加载文件",[19,94972,94973],{},"savetxt():将数据保存到txt文件中",[19,94975,94976],{},"loadtxt():从文件加载数据",[19,94978,94979],{},[725,94980],{"alt":62,"src":94981},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-034.png",[803,94983,94985],{"id":94984},"_127-genfromtxt函数","12.7 genfromtxt()函数",[19,94987,94988],{},"根据文件内容中生成数据，可以指定缺失值的处理等",[803,94990,94992],{"id":94991},"_128-anyall函数","12.8 any()\u002Fall()函数",[19,94994,94995],{},"any():如果数组中存在一个True的元素（或者能转化为True的元素），则返回True",[19,94997,94998],{},"all():如果数组中所有的元素都为True（或者能转为True的元素），则返回True",[19,95000,95001],{},[725,95002],{"alt":62,"src":95003},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-035.png",[803,95005,95007],{"id":95006},"_129-where语句","12.9 where语句",[19,95009,95010],{},"np.where(条件,x,y)",[19,95012,95013],{},"如果条件为True,对应值为x,否则对应值为y",[19,95015,95016],{},[725,95017],{"alt":62,"src":95018},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-036.png",[803,95020,95022],{"id":95021},"_1210-dot矩阵","12.10 dot()矩阵",[19,95024,95025],{},[725,95026],{"alt":62,"src":95027},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-037.png",[779,95029,95030],{},"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":62,"searchDepth":143,"depth":143,"links":95032},[95033,95034,95035,95036,95037,95038,95039,95040,95041,95042],{"id":94395,"depth":143,"text":94396},{"id":94618,"depth":143,"text":94619},{"id":94834,"depth":143,"text":94835},{"id":94909,"depth":143,"text":94910},{"id":94957,"depth":143,"text":94958},{"id":94969,"depth":143,"text":94970},{"id":94984,"depth":143,"text":94985},{"id":94991,"depth":143,"text":94992},{"id":95006,"depth":143,"text":95007},{"id":95021,"depth":143,"text":95022},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch12",{"title":94387,"description":24093},"wiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数","76m9lUtNWFfwZSyqhRkq4vsOUuH9yUlcqSR0mAAIVZs",{"id":95049,"title":95050,"body":95051,"description":24093,"extension":787,"meta":95404,"navigation":176,"path":95405,"seo":95406,"stem":95407,"__hash__":95408},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch13-数组排序.md","13.数组排序",{"type":7,"value":95052,"toc":95402},[95053,95056,95059,95062,95065,95068,95133,95135,95399],[10,95054,95050],{"id":95055},"_13数组排序",[19,95057,95058],{},"排序主要用到的方法是np.sort和np.argsort",[19,95060,95061],{},"其中np.sort()对数组直接排序",[19,95063,95064],{},"而np.argsort()是返回排序后的原始索引",[19,95066,95067],{},"①一维数组",[57,95069,95071],{"className":30915,"code":95070,"language":30917,"meta":62,"style":62},"#创建一维数组\na=np.array([3,12,8,23,67,123,6,10])\nnp.sort(a)#升序排序\nnp.argsort(a)#按照元素大小来索引排序\n",[64,95072,95073,95077,95117,95125],{"__ignoreMap":62},[67,95074,95075],{"class":69,"line":70},[67,95076,93642],{"class":202},[67,95078,95079,95081,95083,95085,95087,95089,95091,95093,95095,95097,95099,95101,95103,95105,95107,95109,95111,95113,95115],{"class":69,"line":143},[67,95080,28],{"class":77},[67,95082,909],{"class":73},[67,95084,93561],{"class":77},[67,95086,933],{"class":208},[67,95088,1236],{"class":77},[67,95090,1355],{"class":208},[67,95092,1236],{"class":77},[67,95094,1253],{"class":208},[67,95096,1236],{"class":77},[67,95098,1631],{"class":208},[67,95100,1236],{"class":77},[67,95102,1137],{"class":208},[67,95104,1236],{"class":77},[67,95106,1749],{"class":208},[67,95108,1236],{"class":77},[67,95110,1202],{"class":208},[67,95112,1236],{"class":77},[67,95114,1303],{"class":208},[67,95116,5376],{"class":77},[67,95118,95119,95122],{"class":69,"line":149},[67,95120,95121],{"class":77},"np.sort(a)",[67,95123,95124],{"class":202},"#升序排序\n",[67,95126,95127,95130],{"class":69,"line":155},[67,95128,95129],{"class":77},"np.argsort(a)",[67,95131,95132],{"class":202},"#按照元素大小来索引排序\n",[19,95134,93828],{},[57,95136,95138],{"className":30915,"code":95137,"language":30917,"meta":62,"style":62},"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",[64,95139,95140,95152,95178,95183,95187,95192,95197,95202,95207,95211,95219,95223,95228,95233,95238,95243,95247,95252,95265,95269,95274,95279,95284,95289,95293,95298,95310,95314,95318,95322,95326,95330,95334,95339,95354,95359,95368,95373,95377,95381,95386,95390,95395],{"__ignoreMap":62},[67,95141,95142,95145,95147,95149],{"class":69,"line":70},[67,95143,95144],{"class":77},"np.random.seed(",[67,95146,1051],{"class":208},[67,95148,260],{"class":77},[67,95150,95151],{"class":202},"#保证每次值一样\n",[67,95153,95154,95156,95158,95160,95162,95164,95166,95168,95170,95172,95174,95176],{"class":69,"line":143},[67,95155,93843],{"class":77},[67,95157,909],{"class":73},[67,95159,93651],{"class":77},[67,95161,1169],{"class":208},[67,95163,1236],{"class":77},[67,95165,32033],{"class":5935},[67,95167,909],{"class":73},[67,95169,864],{"class":77},[67,95171,1151],{"class":208},[67,95173,1236],{"class":77},[67,95175,1202],{"class":208},[67,95177,31034],{"class":77},[67,95179,95180],{"class":69,"line":149},[67,95181,95182],{"class":202},"#原数组：\n",[67,95184,95185],{"class":69,"line":155},[67,95186,94465],{"class":84},[67,95188,95189],{"class":69,"line":161},[67,95190,95191],{"class":84},"array([[44, 47, 64, 67, 67,  9],\n",[67,95193,95194],{"class":69,"line":167},[67,95195,95196],{"class":84},"       [83, 21, 36, 87, 70, 88],\n",[67,95198,95199],{"class":69,"line":173},[67,95200,95201],{"class":84},"       [88, 12, 58, 65, 39, 87],\n",[67,95203,95204],{"class":69,"line":180},[67,95205,95206],{"class":84},"       [46, 88, 81, 37, 25, 77]], dtype=int32)\n",[67,95208,95209],{"class":69,"line":186},[67,95210,94465],{"class":84},[67,95212,95213,95216],{"class":69,"line":444},[67,95214,95215],{"class":77},"np.sort(aa)",[67,95217,95218],{"class":202},"#每行进行了排序\n",[67,95220,95221],{"class":69,"line":2335},[67,95222,94465],{"class":84},[67,95224,95225],{"class":69,"line":2340},[67,95226,95227],{"class":84},"array([[ 9, 44, 47, 64, 67, 67],\n",[67,95229,95230],{"class":69,"line":2346},[67,95231,95232],{"class":84},"       [21, 36, 70, 83, 87, 88],\n",[67,95234,95235],{"class":69,"line":2351},[67,95236,95237],{"class":84},"       [12, 39, 58, 65, 87, 88],\n",[67,95239,95240],{"class":69,"line":2365},[67,95241,95242],{"class":84},"       [25, 37, 46, 77, 81, 88]], dtype=int32)\n",[67,95244,95245],{"class":69,"line":2370},[67,95246,94465],{"class":84},[67,95248,95249],{"class":69,"line":2376},[67,95250,95251],{"class":202},"#axis=0时\n",[67,95253,95254,95257,95259,95261,95263],{"class":69,"line":2397},[67,95255,95256],{"class":77},"np.sort(aa,",[67,95258,48051],{"class":5935},[67,95260,909],{"class":73},[67,95262,1051],{"class":208},[67,95264,870],{"class":77},[67,95266,95267],{"class":69,"line":2402},[67,95268,94465],{"class":84},[67,95270,95271],{"class":69,"line":2416},[67,95272,95273],{"class":84},"array([[44, 12, 36, 37, 25,  9],\n",[67,95275,95276],{"class":69,"line":2421},[67,95277,95278],{"class":84},"       [46, 21, 58, 65, 39, 77],\n",[67,95280,95281],{"class":69,"line":2450},[67,95282,95283],{"class":84},"       [83, 47, 64, 67, 67, 87],\n",[67,95285,95286],{"class":69,"line":2455},[67,95287,95288],{"class":84},"       [88, 88, 81, 87, 70, 88]], dtype=int32)\n",[67,95290,95291],{"class":69,"line":2472},[67,95292,94465],{"class":84},[67,95294,95295],{"class":69,"line":2477},[67,95296,95297],{"class":202},"#axis=1时,为默认值\n",[67,95299,95300,95302,95304,95306,95308],{"class":69,"line":2482},[67,95301,95256],{"class":77},[67,95303,48051],{"class":5935},[67,95305,909],{"class":73},[67,95307,1077],{"class":208},[67,95309,870],{"class":77},[67,95311,95312],{"class":69,"line":2487},[67,95313,94465],{"class":84},[67,95315,95316],{"class":69,"line":2501},[67,95317,95227],{"class":84},[67,95319,95320],{"class":69,"line":2506},[67,95321,95232],{"class":84},[67,95323,95324],{"class":69,"line":3298},[67,95325,95237],{"class":84},[67,95327,95328],{"class":69,"line":3312},[67,95329,95242],{"class":84},[67,95331,95332],{"class":69,"line":3320},[67,95333,94465],{"class":84},[67,95335,95336],{"class":69,"line":3325},[67,95337,95338],{"class":202},"#按最后一列排序\n",[67,95340,95341,95343,95345,95348,95350,95352],{"class":69,"line":3331},[67,95342,1121],{"class":77},[67,95344,909],{"class":73},[67,95346,95347],{"class":77},"aa[:,",[67,95349,1389],{"class":73},[67,95351,1077],{"class":208},[67,95353,33783],{"class":77},[67,95355,95356],{"class":69,"line":3337},[67,95357,95358],{"class":202},"#获取最后一列排好序的索引\n",[67,95360,95361,95363,95365],{"class":69,"line":3342},[67,95362,74595],{"class":77},[67,95364,909],{"class":73},[67,95366,95367],{"class":77},"np.argsort(b)\n",[67,95369,95370],{"class":69,"line":8667},[67,95371,95372],{"class":77},"aa[index]\n",[67,95374,95375],{"class":69,"line":8691},[67,95376,94465],{"class":84},[67,95378,95379],{"class":69,"line":8696},[67,95380,95191],{"class":84},[67,95382,95383],{"class":69,"line":8702},[67,95384,95385],{"class":84},"       [46, 88, 81, 37, 25, 77],\n",[67,95387,95388],{"class":69,"line":8729},[67,95389,95201],{"class":84},[67,95391,95392],{"class":69,"line":8734},[67,95393,95394],{"class":84},"       [83, 21, 36, 87, 70, 88]], dtype=int32)\n",[67,95396,95397],{"class":69,"line":8740},[67,95398,94465],{"class":84},[779,95400,95401],{},"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":62,"searchDepth":143,"depth":143,"links":95403},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch13",{"title":95050,"description":24093},"wiki\u002F2025-08-14-numpy\u002Fch13-数组排序","YRMPYd2prDU8JgTg-B-BGwJLUAaNpeoVr1nYyQDLx-E",{"id":95410,"title":95411,"body":95412,"description":24093,"extension":787,"meta":95442,"navigation":176,"path":95443,"seo":95444,"stem":95445,"__hash__":95446},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch14-广播机制.md","14.广播机制",{"type":7,"value":95413,"toc":95440},[95414,95417,95420,95423,95426,95429,95432,95435],[10,95415,95411],{"id":95416},"_14广播机制",[19,95418,95419],{},"广播的规则：",[19,95421,95422],{},"1.如果两个数组维度个数不同，那么小维度的数组形状会在左边补1，",[19,95424,95425],{},"例如1和[1,2]这两个维度个数是不同的，一个是数，是个标量是0维的，另一个是一维的，第一个数形状往左补1，之后就可以进行广播了",[19,95427,95428],{},"2.如果两个数组形状在任何维度上都不匹配，数组的形状会沿着维度为1的维度扩展到匹配上另一个数组的形状",[19,95430,95431],{},"3.如果没有维度形状为1，则会引发异常",[19,95433,95434],{},"也就是只有维度或者个数为1才可以进行广播操作",[19,95436,95437],{},[725,95438],{"alt":62,"src":95439},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-038.png",{"title":62,"searchDepth":143,"depth":143,"links":95441},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch14",{"title":95411,"description":24093},"wiki\u002F2025-08-14-numpy\u002Fch14-广播机制","tBGxTdhgyt2-aB8OANfZ0iuefn4ogRK9zJPGTd5aepM",{"id":95448,"title":95449,"body":95450,"description":24093,"extension":787,"meta":95548,"navigation":176,"path":95549,"seo":95550,"stem":95551,"__hash__":95552},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch15-比较掩码.md","15.比较掩码",{"type":7,"value":95451,"toc":95546},[95452,95455,95458,95543],[10,95453,95449],{"id":95454},"_15比较掩码",[19,95456,95457],{},"比较操作，会返回与参与运算数组形状相同的数组，其中，满足条件的为True，不满足的为False",[57,95459,95461],{"className":30915,"code":95460,"language":30917,"meta":62,"style":62},"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",[64,95462,95463,95509,95520,95534,95538],{"__ignoreMap":62},[67,95464,95465,95467,95469,95472,95474,95476,95478,95480,95482,95484,95486,95488,95490,95492,95494,95496,95498,95500,95502,95504,95506],{"class":69,"line":70},[67,95466,28],{"class":77},[67,95468,909],{"class":73},[67,95470,95471],{"class":77},"np.array([[",[67,95473,1077],{"class":208},[67,95475,1236],{"class":77},[67,95477,939],{"class":208},[67,95479,1236],{"class":77},[67,95481,933],{"class":208},[67,95483,48567],{"class":77},[67,95485,1329],{"class":208},[67,95487,1236],{"class":77},[67,95489,1355],{"class":208},[67,95491,1236],{"class":77},[67,95493,1380],{"class":208},[67,95495,48567],{"class":77},[67,95497,1581],{"class":208},[67,95499,1236],{"class":77},[67,95501,1606],{"class":208},[67,95503,1236],{"class":77},[67,95505,1631],{"class":208},[67,95507,95508],{"class":77},"]])\n",[67,95510,95511,95513,95515,95517],{"class":69,"line":143},[67,95512,28],{"class":77},[67,95514,1766],{"class":73},[67,95516,1556],{"class":208},[67,95518,95519],{"class":202},"#结果是一个由True,False组成的数组\n",[67,95521,95522,95525,95527,95529,95531],{"class":69,"line":149},[67,95523,95524],{"class":77},"a[a",[67,95526,1766],{"class":73},[67,95528,1556],{"class":208},[67,95530,1796],{"class":77},[67,95532,95533],{"class":202},"#小于20的元素会存到这个数组中\n",[67,95535,95536],{"class":69,"line":155},[67,95537,94101],{"class":202},[67,95539,95540],{"class":69,"line":161},[67,95541,95542],{"class":202},"#array([ 1,  2,  3, 11, 12, 13])\n",[779,95544,95545],{},"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":62,"searchDepth":143,"depth":143,"links":95547},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch15",{"title":95449,"description":24093},"wiki\u002F2025-08-14-numpy\u002Fch15-比较掩码","V-_h5mng53PyRw-HZ8Pqcf_eugrdn6nQafLIp3MtxIQ",{"id":95554,"title":95555,"body":95556,"description":24093,"extension":787,"meta":95648,"navigation":176,"path":95649,"seo":95650,"stem":95651,"__hash__":95652},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time.md","16.魔法命令time",{"type":7,"value":95557,"toc":95646},[95558,95561,95564,95567,95570,95573,95638,95643],[10,95559,95555],{"id":95560},"_16魔法命令time",[19,95562,95563],{},"魔法命令是ipython提供特殊命令，能实现一些特殊功能，比如统计时间(time\u002Ftimeit)和占用内存(memit\u002Fmprun)等功能,魔法命令有种形式：",[19,95565,95566],{},"%:行模式",[19,95568,95569],{},"%%:单元格模式",[19,95571,95572],{},"IPython 是一个“更强大、更智能”的 Python 交互式命令行工具，比你平时在终端运行的 python 要聪明得多。",[57,95574,95576],{"className":30915,"code":95575,"language":30917,"meta":62,"style":62},"#程序执行时间\nimport time \n#获取时间\nstart=time.time()\ntime.sleep(0.4)#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n#获取时间\nend=time.time()\nend-start\n",[64,95577,95578,95583,95590,95595,95604,95617,95621,95629],{"__ignoreMap":62},[67,95579,95580],{"class":69,"line":70},[67,95581,95582],{"class":202},"#程序执行时间\n",[67,95584,95585,95587],{"class":69,"line":143},[67,95586,30929],{"class":73},[67,95588,95589],{"class":77}," time \n",[67,95591,95592],{"class":69,"line":149},[67,95593,95594],{"class":202},"#获取时间\n",[67,95596,95597,95600,95602],{"class":69,"line":155},[67,95598,95599],{"class":77},"start",[67,95601,909],{"class":73},[67,95603,32955],{"class":77},[67,95605,95606,95609,95612,95614],{"class":69,"line":161},[67,95607,95608],{"class":77},"time.sleep(",[67,95610,95611],{"class":208},"0.4",[67,95613,260],{"class":77},[67,95615,95616],{"class":202},"#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n",[67,95618,95619],{"class":69,"line":167},[67,95620,95594],{"class":202},[67,95622,95623,95625,95627],{"class":69,"line":173},[67,95624,46338],{"class":77},[67,95626,909],{"class":73},[67,95628,32955],{"class":77},[67,95630,95631,95633,95635],{"class":69,"line":180},[67,95632,46338],{"class":77},[67,95634,1389],{"class":73},[67,95636,95637],{"class":77},"start\n",[19,95639,95640],{},[725,95641],{"alt":62,"src":95642},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-039.png",[779,95644,95645],{},"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":62,"searchDepth":143,"depth":143,"links":95647},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-time",{"title":95555,"description":24093},"wiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time","sXkJphYISGOvSIO4DBYVj2ay2H8EAPXBtiKncmz3UYg",{"id":95654,"title":95655,"body":95656,"description":24093,"extension":787,"meta":95691,"navigation":176,"path":95692,"seo":95693,"stem":95694,"__hash__":95695},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit.md","17.魔法命令timeit",{"type":7,"value":95657,"toc":95689},[95658,95661,95664,95667,95670,95673,95676,95679,95684],[10,95659,95655],{"id":95660},"_17魔法命令timeit",[19,95662,95663],{},"timeit可以循环执行被统计语句，得到平均执行时间，支持行模式和单元格模式",[19,95665,95666],{},"timeit命令参数，-n指定每轮测试次数，-r指定测试轮数(默认为7)",[19,95668,95669],{},"单元格模式：",[19,95671,95672],{},"第一行语句(与timeit同一行语句)为初始化语句，作用为后续代码中变量提供初始化功能",[19,95674,95675],{},"初始化语句执行次数由轮数来决定",[19,95677,95678],{},"初始化语句每轮测试只执行一次，且不参与计时。第二行至整个单元格末尾语句会执行相应次数，并参与计时",[19,95680,95681],{},[725,95682],{"alt":62,"src":95683},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-040.png",[19,95685,95686],{},[725,95687],{"alt":62,"src":95688},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-041.png",{"title":62,"searchDepth":143,"depth":143,"links":95690},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-timeit",{"title":95655,"description":24093},"wiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit","pW8ECg15-MLllhus9EYlvtlq7IM7eh8dhh-Da8iot-E",{"id":95697,"title":95698,"body":95699,"description":24093,"extension":787,"meta":95717,"navigation":176,"path":95718,"seo":95719,"stem":95720,"__hash__":95721},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run.md","18.魔法命令writefile和run",{"type":7,"value":95700,"toc":95715},[95701,95704,95707,95710],[10,95702,95698],{"id":95703},"_18魔法命令writefile和run",[19,95705,95706],{},"writefile将单元格内容写入到文件中。如果文件不存在则创建，如果文件存在，则覆盖文件。如果指定-a参数，则追加内容，不覆盖",[19,95708,95709],{},"run运行外部python文件，运行结束后，外部文件中定义的变量得到保留",[19,95711,95712],{},[725,95713],{"alt":62,"src":95714},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-042.png",{"title":62,"searchDepth":143,"depth":143,"links":95716},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-writefilerun",{"title":95698,"description":24093},"wiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run","d1MzkGQ-Ew6zFK9h2luqGJC1C8knZuKt2r-JshvcU5w",{"id":95723,"title":95724,"body":95725,"description":24093,"extension":787,"meta":95778,"navigation":176,"path":95779,"seo":95780,"stem":95781,"__hash__":95782},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit.md","19.魔法命令memit",{"type":7,"value":95726,"toc":95776},[95727,95730,95733,95735,95738,95741,95746,95749,95752,95755,95758,95761,95764,95767,95770,95773],[10,95728,95724],{"id":95729},"_19魔法命令memit",[19,95731,95732],{},"memit：用于分析语句内存使用情况，memit支持行模式与单元格模式。单元格模式下，初始化语句不会参与计算内存。第二行至整个单元格末尾会参与计算内存",[19,95734,25312],{},[19,95736,95737],{},"memit不是Ipython的内置，需要安装memory_profiler模块(pip install memory_profiler)",[19,95739,95740],{},"安装后，需要通过%load_ext memory_profiler载入，才能使用",[19,95742,95743],{},[725,95744],{"alt":62,"src":95745},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-043.png",[19,95747,95748],{},"补充：",[19,95750,95751],{},"Python 3.12+ 版本已经完全移除了 distutils 模块，而许多工具链（包括 IPython 的旧版本）仍依赖它",[19,95753,95754],{},"在 Python 3.10+ 版本中，distutils 库已被弃用，并在 Python 3.12 中完全移除。在加载 memory_profiler 扩展时，因为 IPython 的旧版本依赖 distutils,当前python版本太高，所以如果不升级升级 IPython 和依赖库或者降python版本的话会报错",[19,95756,95757],{},"解决方法：",[19,95759,95760],{},"1.cmd",[19,95762,95763],{},"2.依次输入以下代码：",[19,95765,95766],{},"#升级 IPython 到兼容 Python 3.12+ 的版本",[19,95768,95769],{},"pip install --upgrade ipython",[19,95771,95772],{},"#升级 memory_profiler 和 setuptools",[19,95774,95775],{},"pip install --upgrade memory_profiler setuptools",{"title":62,"searchDepth":143,"depth":143,"links":95777},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-memit",{"title":95724,"description":24093},"wiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit","RR91kMGRr4TrWwPmp50vrP41mF4J7yHdo92EdcUVh2s",{"id":95784,"title":95785,"body":95786,"description":24093,"extension":787,"meta":97432,"navigation":176,"path":97433,"seo":97434,"stem":97435,"__hash__":97436},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch2-创建数组.md","2.创建数组",{"type":7,"value":95787,"toc":97402},[95788,95791,95795,95799,95860,95863,95868,95872,95877,95882,95887,95892,95895,95900,95904,95908,95941,95944,95947,95950,96002,96005,96041,96044,96086,96090,96111,96113,96150,96152,96157,96159,96164,96168,96171,96199,96203,96207,96260,96264,96356,96360,96364,96367,96372,96376,96401,96406,96410,96413,96416,96419,96422,96425,96428,96431,96443,96447,96451,96454,96486,96489,96512,96515,96541,96544,96570,96573,96607,96610,96672,96676,96679,96683,96686,96712,96715,96718,96723,96726,96795,96797,96802,96863,96866,96877,96883,96888,96892,96895,96908,96912,96927,96929,96952,96954,96980,96983,96986,96989,97037,97039,97044,97048,97052,97079,97083,97110,97113,97118,97123,97213,97217,97275,97280,97283,97286,97328,97332,97388,97393,97396,97399],[10,95789,95785],{"id":95790},"_2创建数组",[803,95792,95794],{"id":95793},"_21-array函数创建数组","2.1 array()函数创建数组",[14,95796,95798],{"id":95797},"_221-函数语句","2.2.1 函数语句",[57,95800,95802],{"className":30915,"code":95801,"language":30917,"meta":62,"style":62},"numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)\n",[64,95803,95804],{"__ignoreMap":62},[67,95805,95806,95809,95812,95814,95816,95818,95820,95822,95825,95827,95830,95832,95835,95837,95839,95841,95844,95846,95849,95851,95854,95856,95858],{"class":69,"line":70},[67,95807,95808],{"class":77},"numpy.array(",[67,95810,95811],{"class":208},"object",[67,95813,13153],{"class":77},[67,95815,94037],{"class":5935},[67,95817,14282],{"class":73},[67,95819,39470],{"class":208},[67,95821,13153],{"class":77},[67,95823,95824],{"class":5935},"copy",[67,95826,14282],{"class":73},[67,95828,95829],{"class":208}," True",[67,95831,13153],{"class":77},[67,95833,95834],{"class":5935},"order",[67,95836,14282],{"class":73},[67,95838,39470],{"class":208},[67,95840,13153],{"class":77},[67,95842,95843],{"class":5935},"subok",[67,95845,14282],{"class":73},[67,95847,95848],{"class":208}," False",[67,95850,13153],{"class":77},[67,95852,95853],{"class":5935},"ndmin",[67,95855,14282],{"class":73},[67,95857,4813],{"class":208},[67,95859,870],{"class":77},[19,95861,95862],{},"参数：",[19,95864,95865],{},[725,95866],{"alt":62,"src":95867},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-001.png",[14,95869,95871],{"id":95870},"_222-实例","2.2.2 实例",[19,95873,95874],{},[725,95875],{"alt":62,"src":95876},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-002.png",[19,95878,95879],{},[725,95880],{"alt":62,"src":95881},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-003.png",[19,95883,95884],{},[725,95885],{"alt":62,"src":95886},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-004.png",[19,95888,95889],{},[725,95890],{"alt":62,"src":95891},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-005.png",[19,95893,95894],{},"在使用admin属性指定维度时，如果是ndim=3，表示创建一个三维的数组；如果ndim=4，表示创建了一个四维的数组，上述结果就变为：",[19,95896,95897],{},[725,95898],{"alt":62,"src":95899},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-006.png",[803,95901,95903],{"id":95902},"_22-随机数创建数组","2.2 随机数创建数组",[14,95905,95907],{"id":95906},"_221-random语句","2.2.1 random语句",[57,95909,95911],{"className":30915,"code":95910,"language":30917,"meta":62,"style":62},"#random.random()\n#确定随机种子,就是每次运行结果是相同的\nnp.random.seed(0)\nnp.random.random()\n#生成一个随机的数目\n",[64,95912,95913,95918,95923,95931,95936],{"__ignoreMap":62},[67,95914,95915],{"class":69,"line":70},[67,95916,95917],{"class":202},"#random.random()\n",[67,95919,95920],{"class":69,"line":143},[67,95921,95922],{"class":202},"#确定随机种子,就是每次运行结果是相同的\n",[67,95924,95925,95927,95929],{"class":69,"line":149},[67,95926,95144],{"class":77},[67,95928,1051],{"class":208},[67,95930,870],{"class":77},[67,95932,95933],{"class":69,"line":155},[67,95934,95935],{"class":77},"np.random.random()\n",[67,95937,95938],{"class":69,"line":161},[67,95939,95940],{"class":202},"#生成一个随机的数目\n",[19,95942,95943],{},"使用seed()函数后就可以保证每次生成的随机数都是一样的，不会再变了",[19,95945,95946],{},"可以指定数组形状 size",[19,95948,95949],{},"①生成一维数组",[57,95951,95953],{"className":30915,"code":95952,"language":30917,"meta":62,"style":62},"#random.random(size())\nnp.random.random(size=5)\n#生成一位的五个元素\na=np.random.random(size=4)\na.shape #输出数组形状\n",[64,95954,95955,95960,95973,95978,95994],{"__ignoreMap":62},[67,95956,95957],{"class":69,"line":70},[67,95958,95959],{"class":202},"#random.random(size())\n",[67,95961,95962,95965,95967,95969,95971],{"class":69,"line":143},[67,95963,95964],{"class":77},"np.random.random(",[67,95966,32033],{"class":5935},[67,95968,909],{"class":73},[67,95970,1177],{"class":208},[67,95972,870],{"class":77},[67,95974,95975],{"class":69,"line":149},[67,95976,95977],{"class":202},"#生成一位的五个元素\n",[67,95979,95980,95982,95984,95986,95988,95990,95992],{"class":69,"line":155},[67,95981,28],{"class":77},[67,95983,909],{"class":73},[67,95985,95964],{"class":77},[67,95987,32033],{"class":5935},[67,95989,909],{"class":73},[67,95991,1151],{"class":208},[67,95993,870],{"class":77},[67,95995,95996,95999],{"class":69,"line":161},[67,95997,95998],{"class":77},"a.shape ",[67,96000,96001],{"class":202},"#输出数组形状\n",[19,96003,96004],{},"②生成二维数组",[57,96006,96008],{"className":30915,"code":96007,"language":30917,"meta":62,"style":62},"#二维数组\naa=np.random.random(size=(4,5))\n#生成四行五列的数组\n",[64,96009,96010,96014,96036],{"__ignoreMap":62},[67,96011,96012],{"class":69,"line":70},[67,96013,93838],{"class":202},[67,96015,96016,96018,96020,96022,96024,96026,96028,96030,96032,96034],{"class":69,"line":143},[67,96017,93843],{"class":77},[67,96019,909],{"class":73},[67,96021,95964],{"class":77},[67,96023,32033],{"class":5935},[67,96025,909],{"class":73},[67,96027,864],{"class":77},[67,96029,1151],{"class":208},[67,96031,1236],{"class":77},[67,96033,1177],{"class":208},[67,96035,31034],{"class":77},[67,96037,96038],{"class":69,"line":149},[67,96039,96040],{"class":202},"#生成四行五列的数组\n",[19,96042,96043],{},"③生成三维数组",[57,96045,96047],{"className":30915,"code":96046,"language":30917,"meta":62,"style":62},"#三维数组\naaa=np.random.random(size=(2,3,4))\naaa.shape\n",[64,96048,96049,96054,96081],{"__ignoreMap":62},[67,96050,96051],{"class":69,"line":70},[67,96052,96053],{"class":202},"#三维数组\n",[67,96055,96056,96059,96061,96063,96065,96067,96069,96071,96073,96075,96077,96079],{"class":69,"line":143},[67,96057,96058],{"class":77},"aaa",[67,96060,909],{"class":73},[67,96062,95964],{"class":77},[67,96064,32033],{"class":5935},[67,96066,909],{"class":73},[67,96068,864],{"class":77},[67,96070,939],{"class":208},[67,96072,1236],{"class":77},[67,96074,933],{"class":208},[67,96076,1236],{"class":77},[67,96078,1151],{"class":208},[67,96080,31034],{"class":77},[67,96082,96083],{"class":69,"line":149},[67,96084,96085],{"class":77},"aaa.shape\n",[14,96087,96089],{"id":96088},"_222-randint语句","2.2.2 randint语句",[57,96091,96093],{"className":30915,"code":96092,"language":30917,"meta":62,"style":62},"#生成随机的整数 random.randint(low,high,size)\nnp.random.randint(5) #0~5中的随机一个数\n",[64,96094,96095,96100],{"__ignoreMap":62},[67,96096,96097],{"class":69,"line":70},[67,96098,96099],{"class":202},"#生成随机的整数 random.randint(low,high,size)\n",[67,96101,96102,96104,96106,96108],{"class":69,"line":143},[67,96103,93651],{"class":77},[67,96105,1177],{"class":208},[67,96107,14432],{"class":77},[67,96109,96110],{"class":202},"#0~5中的随机一个数\n",[19,96112,95949],{},[57,96114,96116],{"className":30915,"code":96115,"language":30917,"meta":62,"style":62},"#一维\nnp.random.randint(1,11,size=(10))\n#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[64,96117,96118,96123,96145],{"__ignoreMap":62},[67,96119,96120],{"class":69,"line":70},[67,96121,96122],{"class":202},"#一维\n",[67,96124,96125,96127,96129,96131,96133,96135,96137,96139,96141,96143],{"class":69,"line":143},[67,96126,93651],{"class":77},[67,96128,1077],{"class":208},[67,96130,1236],{"class":77},[67,96132,1329],{"class":208},[67,96134,1236],{"class":77},[67,96136,32033],{"class":5935},[67,96138,909],{"class":73},[67,96140,864],{"class":77},[67,96142,1303],{"class":208},[67,96144,31034],{"class":77},[67,96146,96147],{"class":69,"line":149},[67,96148,96149],{"class":202},"#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[19,96151,96004],{},[19,96153,96154],{},[725,96155],{"alt":62,"src":96156},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-007.png",[19,96158,96043],{},[19,96160,96161],{},[725,96162],{"alt":62,"src":96163},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-008.png",[14,96165,96167],{"id":96166},"_222-rand语句","2.2.2 rand语句",[19,96169,96170],{},"Numpy 的函数，生成均匀分布的随机数（0-1）",[57,96172,96174],{"className":30915,"code":96173,"language":30917,"meta":62,"style":62},"np.random.rand(100,10)\n#第一个参数100：行数，表示有100个样本\n#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[64,96175,96176,96189,96194],{"__ignoreMap":62},[67,96177,96178,96181,96183,96185,96187],{"class":69,"line":70},[67,96179,96180],{"class":77},"np.random.rand(",[67,96182,1169],{"class":208},[67,96184,1236],{"class":77},[67,96186,1303],{"class":208},[67,96188,870],{"class":77},[67,96190,96191],{"class":69,"line":143},[67,96192,96193],{"class":202},"#第一个参数100：行数，表示有100个样本\n",[67,96195,96196],{"class":69,"line":149},[67,96197,96198],{"class":202},"#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[803,96200,96202],{"id":96201},"_23-arange创建数组","2.3 arange()创建数组",[14,96204,96206],{"id":96205},"_231-函数语句","2.3.1 函数语句",[57,96208,96210],{"className":30915,"code":96209,"language":30917,"meta":62,"style":62},"numpy.arange([start,] stop[, step], dtype=None)\n#参数\n\"\"\"\nstart:起始值，可选，默认从 0 开始。\nstop:结束值（不包含该值）。\nstep:步长，可选，默认是 1。可以为浮点数。\ndtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n\"\"\"\n",[64,96211,96212,96226,96231,96236,96241,96246,96251,96256],{"__ignoreMap":62},[67,96213,96214,96217,96219,96221,96224],{"class":69,"line":70},[67,96215,96216],{"class":77},"numpy.arange([start,] stop[, step], ",[67,96218,94037],{"class":5935},[67,96220,909],{"class":73},[67,96222,96223],{"class":208},"None",[67,96225,870],{"class":77},[67,96227,96228],{"class":69,"line":143},[67,96229,96230],{"class":202},"#参数\n",[67,96232,96233],{"class":69,"line":149},[67,96234,96235],{"class":84},"\"\"\"\n",[67,96237,96238],{"class":69,"line":155},[67,96239,96240],{"class":84},"start:起始值，可选，默认从 0 开始。\n",[67,96242,96243],{"class":69,"line":161},[67,96244,96245],{"class":84},"stop:结束值（不包含该值）。\n",[67,96247,96248],{"class":69,"line":167},[67,96249,96250],{"class":84},"step:步长，可选，默认是 1。可以为浮点数。\n",[67,96252,96253],{"class":69,"line":173},[67,96254,96255],{"class":84},"dtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n",[67,96257,96258],{"class":69,"line":180},[67,96259,96235],{"class":84},[14,96261,96263],{"id":96262},"_232-实例","2.3.2 实例",[57,96265,96267],{"className":30915,"code":96266,"language":30917,"meta":62,"style":62},"#创建一维数组\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",[64,96268,96269,96273,96297,96302,96307,96311,96334,96338,96342,96347,96352],{"__ignoreMap":62},[67,96270,96271],{"class":69,"line":70},[67,96272,93642],{"class":202},[67,96274,96275,96277,96279,96281,96283,96285,96287,96289,96291,96293,96295],{"class":69,"line":143},[67,96276,93539],{"class":77},[67,96278,1077],{"class":208},[67,96280,1236],{"class":77},[67,96282,1581],{"class":208},[67,96284,1236],{"class":77},[67,96286,1077],{"class":208},[67,96288,1236],{"class":77},[67,96290,94037],{"class":5935},[67,96292,909],{"class":73},[67,96294,867],{"class":208},[67,96296,870],{"class":77},[67,96298,96299],{"class":69,"line":149},[67,96300,96301],{"class":202},"#输出结果：\n",[67,96303,96304],{"class":69,"line":155},[67,96305,96306],{"class":202},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17,18, 19, 20])\n",[67,96308,96309],{"class":69,"line":161},[67,96310,94484],{"class":202},[67,96312,96313,96316,96318,96320,96322,96325,96327,96329,96331],{"class":69,"line":167},[67,96314,96315],{"class":77},"np.array([np.arange(",[67,96317,1077],{"class":208},[67,96319,1236],{"class":77},[67,96321,1151],{"class":208},[67,96323,96324],{"class":77},"),np.arange(",[67,96326,1151],{"class":208},[67,96328,1236],{"class":77},[67,96330,1227],{"class":208},[67,96332,96333],{"class":77},")])\n",[67,96335,96336],{"class":69,"line":173},[67,96337,94101],{"class":202},[67,96339,96340],{"class":69,"line":180},[67,96341,96235],{"class":84},[67,96343,96344],{"class":69,"line":186},[67,96345,96346],{"class":84},"array([[1, 2, 3],\n",[67,96348,96349],{"class":69,"line":444},[67,96350,96351],{"class":84},"       [4, 5, 6]])\n",[67,96353,96354],{"class":69,"line":2335},[67,96355,96235],{"class":84},[803,96357,96359],{"id":96358},"_24-生态分布","2.4 生态分布",[14,96361,96363],{"id":96362},"_241-标准正态分布","2.4.1 标准正态分布",[19,96365,96366],{},"randn()函数返回一个或一组数据，具有标准正态分布（期望为0，方差为1）",[19,96368,96369],{},[725,96370],{"alt":62,"src":96371},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-009.png",[14,96373,96375],{"id":96374},"_242-常规正态分布","2.4.2 常规正态分布",[57,96377,96379],{"className":30915,"code":96378,"language":30917,"meta":62,"style":62},"random.normal(loc,scale,size)也可以生成正态分布\n#loc:期望\n#scale:方差\n#size:用于确定是几维的数列\n",[64,96380,96381,96386,96391,96396],{"__ignoreMap":62},[67,96382,96383],{"class":69,"line":70},[67,96384,96385],{"class":77},"random.normal(loc,scale,size)也可以生成正态分布\n",[67,96387,96388],{"class":69,"line":143},[67,96389,96390],{"class":202},"#loc:期望\n",[67,96392,96393],{"class":69,"line":149},[67,96394,96395],{"class":202},"#scale:方差\n",[67,96397,96398],{"class":69,"line":155},[67,96399,96400],{"class":202},"#size:用于确定是几维的数列\n",[19,96402,96403],{},[725,96404],{"alt":62,"src":96405},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-010.png",[803,96407,96409],{"id":96408},"_25-ndarry属性数组属性","2.5 ndarry属性（数组属性）",[19,96411,96412],{},"ndim:秩，维度个数",[19,96414,96415],{},"size:数组元素的个数",[19,96417,96418],{},"shape:数组的形状",[19,96420,96421],{},"dtype:数组元素的类型",[19,96423,96424],{},"itemsize:每个元素的大小，以字节为单位，一个字节8位 (结果其实就是数组的元素类型结果除8)",[19,96426,96427],{},"他们都是属性，通过数组.属性的形式来确定",[19,96429,96430],{},"如果需要输出多个可以通过以下方式：",[57,96432,96434],{"className":30915,"code":96433,"language":30917,"meta":62,"style":62},"print(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[64,96435,96436],{"__ignoreMap":62},[67,96437,96438,96440],{"class":69,"line":70},[67,96439,30952],{"class":208},[67,96441,96442],{"class":77},"(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[803,96444,96446],{"id":96445},"_26-其他方式创建数组","2.6 其他方式创建数组",[14,96448,96450],{"id":96449},"_261-zeros创建数组","2.6.1 zeros()创建数组",[19,96452,96453],{},"①创建一维数组",[57,96455,96457],{"className":30915,"code":96456,"language":30917,"meta":62,"style":62},"np.zeros(10)\n\"\"\"\n输出结果：\narray([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n\"\"\"\n",[64,96458,96459,96468,96472,96477,96482],{"__ignoreMap":62},[67,96460,96461,96464,96466],{"class":69,"line":70},[67,96462,96463],{"class":77},"np.zeros(",[67,96465,1303],{"class":208},[67,96467,870],{"class":77},[67,96469,96470],{"class":69,"line":143},[67,96471,96235],{"class":84},[67,96473,96474],{"class":69,"line":149},[67,96475,96476],{"class":84},"输出结果：\n",[67,96478,96479],{"class":69,"line":155},[67,96480,96481],{"class":84},"array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n",[67,96483,96484],{"class":69,"line":161},[67,96485,96235],{"class":84},[19,96487,96488],{},"上方代码等价于：",[57,96490,96492],{"className":30915,"code":96491,"language":30917,"meta":62,"style":62},"np.zeros(shape=(10))#创建10个元素的0数组\n",[64,96493,96494],{"__ignoreMap":62},[67,96495,96496,96498,96501,96503,96505,96507,96509],{"class":69,"line":70},[67,96497,96463],{"class":77},[67,96499,96500],{"class":5935},"shape",[67,96502,909],{"class":73},[67,96504,864],{"class":77},[67,96506,1303],{"class":208},[67,96508,83308],{"class":77},[67,96510,96511],{"class":202},"#创建10个元素的0数组\n",[19,96513,96514],{},"也可以指定类型",[57,96516,96518],{"className":30915,"code":96517,"language":30917,"meta":62,"style":62},"#指定类型\nnp.zeros(5,dtype=int)\n",[64,96519,96520,96525],{"__ignoreMap":62},[67,96521,96522],{"class":69,"line":70},[67,96523,96524],{"class":202},"#指定类型\n",[67,96526,96527,96529,96531,96533,96535,96537,96539],{"class":69,"line":143},[67,96528,96463],{"class":77},[67,96530,1177],{"class":208},[67,96532,1236],{"class":77},[67,96534,94037],{"class":5935},[67,96536,909],{"class":73},[67,96538,867],{"class":208},[67,96540,870],{"class":77},[19,96542,96543],{},"②创建二维数组",[57,96545,96547],{"className":30915,"code":96546,"language":30917,"meta":62,"style":62},"np.zeros((3,4),dtype=int)\n",[64,96548,96549],{"__ignoreMap":62},[67,96550,96551,96554,96556,96558,96560,96562,96564,96566,96568],{"class":69,"line":70},[67,96552,96553],{"class":77},"np.zeros((",[67,96555,933],{"class":208},[67,96557,1236],{"class":77},[67,96559,1151],{"class":208},[67,96561,42793],{"class":77},[67,96563,94037],{"class":5935},[67,96565,909],{"class":73},[67,96567,867],{"class":208},[67,96569,870],{"class":77},[19,96571,96572],{},"③创建三维数组",[57,96574,96576],{"className":30915,"code":96575,"language":30917,"meta":62,"style":62},"#创建三维数组\nnp.zeros((3,4,5),dtype=int)\n",[64,96577,96578,96583],{"__ignoreMap":62},[67,96579,96580],{"class":69,"line":70},[67,96581,96582],{"class":202},"#创建三维数组\n",[67,96584,96585,96587,96589,96591,96593,96595,96597,96599,96601,96603,96605],{"class":69,"line":143},[67,96586,96553],{"class":77},[67,96588,933],{"class":208},[67,96590,1236],{"class":77},[67,96592,1151],{"class":208},[67,96594,1236],{"class":77},[67,96596,1177],{"class":208},[67,96598,42793],{"class":77},[67,96600,94037],{"class":5935},[67,96602,909],{"class":73},[67,96604,867],{"class":208},[67,96606,870],{"class":77},[19,96608,96609],{},"④zeros_like:根据传入的数组形状创建全为0的数组",[57,96611,96613],{"className":30915,"code":96612,"language":30917,"meta":62,"style":62},"#使用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",[64,96614,96615,96620,96635,96640,96645,96667],{"__ignoreMap":62},[67,96616,96617],{"class":69,"line":70},[67,96618,96619],{"class":202},"#使用zeros_like将创建的一维数组变成全0的数组\n",[67,96621,96622,96624,96626,96628,96630,96632],{"class":69,"line":143},[67,96623,28],{"class":77},[67,96625,909],{"class":73},[67,96627,93539],{"class":77},[67,96629,1151],{"class":208},[67,96631,260],{"class":77},[67,96633,96634],{"class":202},"#这个得到的结果：一维数组0，1，2，3\n",[67,96636,96637],{"class":69,"line":149},[67,96638,96639],{"class":77},"np.zeros_like(a)\n",[67,96641,96642],{"class":69,"line":155},[67,96643,96644],{"class":202},"#使用zeros_like将创建的二维数组变成全0的数组\n",[67,96646,96647,96649,96651,96653,96655,96657,96659,96661,96663,96665],{"class":69,"line":161},[67,96648,93843],{"class":77},[67,96650,909],{"class":73},[67,96652,95964],{"class":77},[67,96654,32033],{"class":5935},[67,96656,909],{"class":73},[67,96658,864],{"class":77},[67,96660,1151],{"class":208},[67,96662,1236],{"class":77},[67,96664,1177],{"class":208},[67,96666,31034],{"class":77},[67,96668,96669],{"class":69,"line":167},[67,96670,96671],{"class":77},"np.zeros_like(aa)\n",[14,96673,96675],{"id":96674},"_262-ones创建数组","2.6.2 ones()创建数组",[19,96677,96678],{},"与zeros的用法一模一样，两者如果不指定元素类型的话，都默认为浮点型",[14,96680,96682],{"id":96681},"_263-empty创建数组","2.6.3 empty()创建数组",[19,96684,96685],{},"①empty()用法",[57,96687,96689],{"className":30915,"code":96688,"language":30917,"meta":62,"style":62},"numpy.empty(shape,dtype=float,order='c')\n",[64,96690,96691],{"__ignoreMap":62},[67,96692,96693,96696,96698,96700,96702,96704,96706,96708,96710],{"class":69,"line":70},[67,96694,96695],{"class":77},"numpy.empty(shape,",[67,96697,94037],{"class":5935},[67,96699,909],{"class":73},[67,96701,903],{"class":208},[67,96703,1236],{"class":77},[67,96705,95834],{"class":5935},[67,96707,909],{"class":73},[67,96709,76565],{"class":84},[67,96711,870],{"class":77},[19,96713,96714],{},"创建的一个指定形状(shape)、数据类型(dtype)且未初始化的数组，里边的元素的值是之前内存的值",[19,96716,96717],{},"order:有\"C\"和\"F\"两个选项,分别代表，行优先和列优先，在计算机内存中的存储元素的顺序。",[19,96719,96720],{},[725,96721],{"alt":62,"src":96722},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-011.png",[19,96724,96725],{},"②empty()用法",[57,96727,96729],{"className":30915,"code":96728,"language":30917,"meta":62,"style":62},"y=np.empty(10,dtype=int)\nx=np.arange(5)\nnp.add(2,x,out=y[:5])\n#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\ny\n",[64,96730,96731,96752,96764,96785,96790],{"__ignoreMap":62},[67,96732,96733,96735,96737,96740,96742,96744,96746,96748,96750],{"class":69,"line":70},[67,96734,1701],{"class":77},[67,96736,909],{"class":73},[67,96738,96739],{"class":77},"np.empty(",[67,96741,1303],{"class":208},[67,96743,1236],{"class":77},[67,96745,94037],{"class":5935},[67,96747,909],{"class":73},[67,96749,867],{"class":208},[67,96751,870],{"class":77},[67,96753,96754,96756,96758,96760,96762],{"class":69,"line":143},[67,96755,1676],{"class":77},[67,96757,909],{"class":73},[67,96759,93539],{"class":77},[67,96761,1177],{"class":208},[67,96763,870],{"class":77},[67,96765,96766,96769,96771,96774,96776,96778,96781,96783],{"class":69,"line":149},[67,96767,96768],{"class":77},"np.add(",[67,96770,939],{"class":208},[67,96772,96773],{"class":77},",x,",[67,96775,93591],{"class":5935},[67,96777,909],{"class":73},[67,96779,96780],{"class":77},"y[:",[67,96782,1177],{"class":208},[67,96784,5376],{"class":77},[67,96786,96787],{"class":69,"line":155},[67,96788,96789],{"class":202},"#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\n",[67,96791,96792],{"class":69,"line":161},[67,96793,96794],{"class":77},"y\n",[19,96796,12232],{},[19,96798,96799],{},[725,96800],{"alt":62,"src":96801},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-012.png",[57,96803,96805],{"className":30915,"code":96804,"language":30917,"meta":62,"style":62},"x=np.arange(1,6)\ny=np.empty(5,dtype=int)\nnp.add(x,2,out=y)\n#将数列x中的每个元素都加2，然后放到y数列中去\n",[64,96806,96807,96823,96843,96858],{"__ignoreMap":62},[67,96808,96809,96811,96813,96815,96817,96819,96821],{"class":69,"line":70},[67,96810,1676],{"class":77},[67,96812,909],{"class":73},[67,96814,93539],{"class":77},[67,96816,1077],{"class":208},[67,96818,1236],{"class":77},[67,96820,1202],{"class":208},[67,96822,870],{"class":77},[67,96824,96825,96827,96829,96831,96833,96835,96837,96839,96841],{"class":69,"line":143},[67,96826,1701],{"class":77},[67,96828,909],{"class":73},[67,96830,96739],{"class":77},[67,96832,1177],{"class":208},[67,96834,1236],{"class":77},[67,96836,94037],{"class":5935},[67,96838,909],{"class":73},[67,96840,867],{"class":208},[67,96842,870],{"class":77},[67,96844,96845,96848,96850,96852,96854,96856],{"class":69,"line":149},[67,96846,96847],{"class":77},"np.add(x,",[67,96849,939],{"class":208},[67,96851,1236],{"class":77},[67,96853,93591],{"class":5935},[67,96855,909],{"class":73},[67,96857,93986],{"class":77},[67,96859,96860],{"class":69,"line":155},[67,96861,96862],{"class":202},"#将数列x中的每个元素都加2，然后放到y数列中去\n",[19,96864,96865],{},"③empty_like()",[19,96867,96868],{},[336,96869,96870,96871,96876],{},"创建一个",[336,96872,96873],{},[336,96874,96875],{},"与给定数组形状和数据类型相同","，但内容未初始化的新数组。",[19,96878,96879,96882],{},[64,96880,96881],{},"np.empty_like()","不会清空内存中的原数据，它只是分配一块与原数组相同大小和类型的内存区域。",[19,96884,96885],{},[725,96886],{"alt":62,"src":96887},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-013.png",[14,96889,96891],{"id":96890},"_264-用法","2.6.4 ？？用法",[19,96893,96894],{},"当想查看一个函数的参数时，可以通过？？来实现",[57,96896,96898],{"className":30915,"code":96897,"language":30917,"meta":62,"style":62},"np.full??\n",[64,96899,96900],{"__ignoreMap":62},[67,96901,96902,96905],{"class":69,"line":70},[67,96903,96904],{"class":77},"np.full",[67,96906,96907],{"class":77940},"??\n",[14,96909,96911],{"id":96910},"_265-full创建数组","2.6.5 full()创建数组",[57,96913,96915],{"className":30915,"code":96914,"language":30917,"meta":62,"style":62},"full(shape,fill_value)\n创建全为某个指定值的数组\n",[64,96916,96917,96922],{"__ignoreMap":62},[67,96918,96919],{"class":69,"line":70},[67,96920,96921],{"class":77},"full(shape,fill_value)\n",[67,96923,96924],{"class":69,"line":143},[67,96925,96926],{"class":77},"创建全为某个指定值的数组\n",[19,96928,95067],{},[57,96930,96932],{"className":30915,"code":96931,"language":30917,"meta":62,"style":62},"#创建一个一维数组,以20进行填充\nnp.full(10,20)\n",[64,96933,96934,96939],{"__ignoreMap":62},[67,96935,96936],{"class":69,"line":70},[67,96937,96938],{"class":202},"#创建一个一维数组,以20进行填充\n",[67,96940,96941,96944,96946,96948,96950],{"class":69,"line":143},[67,96942,96943],{"class":77},"np.full(",[67,96945,1303],{"class":208},[67,96947,1236],{"class":77},[67,96949,1556],{"class":208},[67,96951,870],{"class":77},[19,96953,93828],{},[57,96955,96957],{"className":30915,"code":96956,"language":30917,"meta":62,"style":62},"#创建二维数组\nnp.full((3,5),11)\n",[64,96958,96959,96963],{"__ignoreMap":62},[67,96960,96961],{"class":69,"line":70},[67,96962,94484],{"class":202},[67,96964,96965,96968,96970,96972,96974,96976,96978],{"class":69,"line":143},[67,96966,96967],{"class":77},"np.full((",[67,96969,933],{"class":208},[67,96971,1236],{"class":77},[67,96973,1177],{"class":208},[67,96975,42793],{"class":77},[67,96977,1329],{"class":208},[67,96979,870],{"class":77},[19,96981,96982],{},"③full_like用法",[19,96984,96985],{},"跟上边的zeros_like()和ones_like()的用法一模一样",[19,96987,96988],{},"这里是指定填充而已",[57,96990,96992],{"className":30915,"code":96991,"language":30917,"meta":62,"style":62},"#创建一个指定形状数组\na=np.arange(1,37).reshape(4,9)\n#进行指定填充\nnp.full_like(a,10)\n",[64,96993,96994,96999,97023,97028],{"__ignoreMap":62},[67,96995,96996],{"class":69,"line":70},[67,96997,96998],{"class":202},"#创建一个指定形状数组\n",[67,97000,97001,97003,97005,97007,97009,97011,97013,97015,97017,97019,97021],{"class":69,"line":143},[67,97002,28],{"class":77},[67,97004,909],{"class":73},[67,97006,93539],{"class":77},[67,97008,1077],{"class":208},[67,97010,1236],{"class":77},[67,97012,1183],{"class":208},[67,97014,93544],{"class":77},[67,97016,1151],{"class":208},[67,97018,1236],{"class":77},[67,97020,1278],{"class":208},[67,97022,870],{"class":77},[67,97024,97025],{"class":69,"line":149},[67,97026,97027],{"class":202},"#进行指定填充\n",[67,97029,97030,97033,97035],{"class":69,"line":155},[67,97031,97032],{"class":77},"np.full_like(a,",[67,97034,1303],{"class":208},[67,97036,870],{"class":77},[19,97038,12232],{},[19,97040,97041],{},[725,97042],{"alt":62,"src":97043},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-014.png",[14,97045,97047],{"id":97046},"_266-创建单位矩阵","2.6.6 创建单位矩阵",[40,97049,97051],{"id":97050},"_2661-法1eye函数","2.6.6.1 法1：eye()函数",[57,97053,97055],{"className":30915,"code":97054,"language":30917,"meta":62,"style":62},"np.eye(4,dtype=int)\n#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[64,97056,97057,97074],{"__ignoreMap":62},[67,97058,97059,97062,97064,97066,97068,97070,97072],{"class":69,"line":70},[67,97060,97061],{"class":77},"np.eye(",[67,97063,1151],{"class":208},[67,97065,1236],{"class":77},[67,97067,94037],{"class":5935},[67,97069,909],{"class":73},[67,97071,867],{"class":208},[67,97073,870],{"class":77},[67,97075,97076],{"class":69,"line":143},[67,97077,97078],{"class":202},"#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[40,97080,97082],{"id":97081},"_2662-法2identity","2.6.6.2 法2：identity()",[57,97084,97086],{"className":30915,"code":97085,"language":30917,"meta":62,"style":62},"#identity()\nnp.identity(5,dtype=int)\n",[64,97087,97088,97093],{"__ignoreMap":62},[67,97089,97090],{"class":69,"line":70},[67,97091,97092],{"class":202},"#identity()\n",[67,97094,97095,97098,97100,97102,97104,97106,97108],{"class":69,"line":143},[67,97096,97097],{"class":77},"np.identity(",[67,97099,1177],{"class":208},[67,97101,1236],{"class":77},[67,97103,94037],{"class":5935},[67,97105,909],{"class":73},[67,97107,867],{"class":208},[67,97109,870],{"class":77},[19,97111,97112],{},"两个函数是有区别的",[19,97114,97115],{},[725,97116],{"alt":62,"src":97117},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-015.png",[19,97119,97120],{},[725,97121],{"alt":62,"src":97122},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-016.png",[57,97124,97126],{"className":30915,"code":97125,"language":30917,"meta":62,"style":62},"# 创建一个 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",[64,97127,97128,97133,97145,97150,97155,97160,97165,97169,97174,97194,97198,97203,97208],{"__ignoreMap":62},[67,97129,97130],{"class":69,"line":70},[67,97131,97132],{"class":202},"# 创建一个 3 行 4 列的矩阵，对角线在第 0 条（默认）\n",[67,97134,97135,97137,97139,97141,97143],{"class":69,"line":143},[67,97136,97061],{"class":77},[67,97138,933],{"class":208},[67,97140,13153],{"class":77},[67,97142,1151],{"class":208},[67,97144,870],{"class":77},[67,97146,97147],{"class":69,"line":149},[67,97148,97149],{"class":202},"# 输出:\n",[67,97151,97152],{"class":69,"line":155},[67,97153,97154],{"class":202},"# [[1. 0. 0. 0.]\n",[67,97156,97157],{"class":69,"line":161},[67,97158,97159],{"class":202},"#  [0. 1. 0. 0.]\n",[67,97161,97162],{"class":69,"line":167},[67,97163,97164],{"class":202},"#  [0. 0. 1. 0.]]\n",[67,97166,97167],{"class":69,"line":173},[67,97168,177],{"emptyLinePlaceholder":176},[67,97170,97171],{"class":69,"line":180},[67,97172,97173],{"class":202},"# 对角线向上偏移1\n",[67,97175,97176,97178,97180,97182,97184,97186,97188,97190,97192],{"class":69,"line":186},[67,97177,97061],{"class":77},[67,97179,933],{"class":208},[67,97181,13153],{"class":77},[67,97183,1151],{"class":208},[67,97185,13153],{"class":77},[67,97187,1350],{"class":5935},[67,97189,909],{"class":73},[67,97191,1077],{"class":208},[67,97193,870],{"class":77},[67,97195,97196],{"class":69,"line":444},[67,97197,97149],{"class":202},[67,97199,97200],{"class":69,"line":2335},[67,97201,97202],{"class":202},"# [[0. 1. 0. 0.]\n",[67,97204,97205],{"class":69,"line":2340},[67,97206,97207],{"class":202},"#  [0. 0. 1. 0.]\n",[67,97209,97210],{"class":69,"line":2346},[67,97211,97212],{"class":202},"#  [0. 0. 0. 1.]]\n",[14,97214,97216],{"id":97215},"_267-linspace创建等差数列","2.6.7 linspace创建等差数列",[57,97218,97220],{"className":30915,"code":97219,"language":30917,"meta":62,"style":62},"#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",[64,97221,97222,97227,97231,97236,97241,97246,97251,97256,97261,97266,97271],{"__ignoreMap":62},[67,97223,97224],{"class":69,"line":70},[67,97225,97226],{"class":202},"#linspace函数用于创建一个一维数组，数组是一个等差数列构成的，格式如下：\n",[67,97228,97229],{"class":69,"line":143},[67,97230,96235],{"class":84},[67,97232,97233],{"class":69,"line":149},[67,97234,97235],{"class":84},"np.linspace(start,|stop,num=50,endpoint=True,retstep=False,dtype=None)\n",[67,97237,97238],{"class":69,"line":155},[67,97239,97240],{"class":84},"参数介绍：\n",[67,97242,97243],{"class":69,"line":161},[67,97244,97245],{"class":84},"start：序列的起始值\n",[67,97247,97248],{"class":69,"line":167},[67,97249,97250],{"class":84},"stop:序列的终止值，如果endpoint为True，该值包含数列中\n",[67,97252,97253],{"class":69,"line":173},[67,97254,97255],{"class":84},"num：要生长的等步长的样本数量，默认为50\n",[67,97257,97258],{"class":69,"line":180},[67,97259,97260],{"class":84},"endpoint：该值为True时，数列中包含stop值，反之不包含，默认是True\n",[67,97262,97263],{"class":69,"line":186},[67,97264,97265],{"class":84},"retstep：如果为True时，生长的数组中会显示间距，反之不显示\n",[67,97267,97268],{"class":69,"line":444},[67,97269,97270],{"class":84},"dtype：ndarry的数据类型\n",[67,97272,97273],{"class":69,"line":2335},[67,97274,96235],{"class":84},[19,97276,97277],{},[725,97278],{"alt":62,"src":97279},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-017.png",[19,97281,97282],{},"这里num=是可以省略的",[19,97284,97285],{},"也就是下方两行代码结果是一模一样的",[57,97287,97289],{"className":30915,"code":97288,"language":30917,"meta":62,"style":62},"np.linspace(1,5,5)\nnp.linspace(1,5,num=5)\n",[64,97290,97291,97308],{"__ignoreMap":62},[67,97292,97293,97296,97298,97300,97302,97304,97306],{"class":69,"line":70},[67,97294,97295],{"class":77},"np.linspace(",[67,97297,1077],{"class":208},[67,97299,1236],{"class":77},[67,97301,1177],{"class":208},[67,97303,1236],{"class":77},[67,97305,1177],{"class":208},[67,97307,870],{"class":77},[67,97309,97310,97312,97314,97316,97318,97320,97322,97324,97326],{"class":69,"line":143},[67,97311,97295],{"class":77},[67,97313,1077],{"class":208},[67,97315,1236],{"class":77},[67,97317,1177],{"class":208},[67,97319,1236],{"class":77},[67,97321,2388],{"class":5935},[67,97323,909],{"class":73},[67,97325,1177],{"class":208},[67,97327,870],{"class":77},[14,97329,97331],{"id":97330},"_268-logspace创建等比数列","2.6.8 logspace创建等比数列",[57,97333,97335],{"className":30915,"code":97334,"language":30917,"meta":62,"style":62},"#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",[64,97336,97337,97342,97346,97351,97356,97361,97366,97370,97375,97380,97384],{"__ignoreMap":62},[67,97338,97339],{"class":69,"line":70},[67,97340,97341],{"class":202},"#logspace函数用于创建一个等比数列，格式如下：\n",[67,97343,97344],{"class":69,"line":143},[67,97345,96235],{"class":84},[67,97347,97348],{"class":69,"line":149},[67,97349,97350],{"class":84},"np.logspace(start,stop,num=50,endpoint=True,base=10.0,dtype=None)\n",[67,97352,97353],{"class":69,"line":155},[67,97354,97355],{"class":84},"参数为：\n",[67,97357,97358],{"class":69,"line":161},[67,97359,97360],{"class":84},"start:序列的起始位置为：base**start\n",[67,97362,97363],{"class":69,"line":167},[67,97364,97365],{"class":84},"stop：序列的终止值为：base**stop。如果endpoint为True，该值包含于数列\n",[67,97367,97368],{"class":69,"line":173},[67,97369,97255],{"class":84},[67,97371,97372],{"class":69,"line":180},[67,97373,97374],{"class":84},"endpoint：是否包含 stop 这个值，默认是 True\n",[67,97376,97377],{"class":69,"line":186},[67,97378,97379],{"class":84},"base：对数的底数，默认是 10（常见对数）\n",[67,97381,97382],{"class":69,"line":444},[67,97383,97270],{"class":84},[67,97385,97386],{"class":69,"line":2335},[67,97387,96235],{"class":84},[19,97389,97390],{},[725,97391],{"alt":62,"src":97392},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-018.png",[19,97394,97395],{},"logspace()函数中的num参数也是可以不写num=的",[19,97397,97398],{},"endpoint是不可以省略的",[779,97400,97401],{},"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":62,"searchDepth":143,"depth":143,"links":97403},[97404,97408,97413,97417,97421,97422],{"id":95793,"depth":143,"text":95794,"children":97405},[97406,97407],{"id":95797,"depth":149,"text":95798},{"id":95870,"depth":149,"text":95871},{"id":95902,"depth":143,"text":95903,"children":97409},[97410,97411,97412],{"id":95906,"depth":149,"text":95907},{"id":96088,"depth":149,"text":96089},{"id":96166,"depth":149,"text":96167},{"id":96201,"depth":143,"text":96202,"children":97414},[97415,97416],{"id":96205,"depth":149,"text":96206},{"id":96262,"depth":149,"text":96263},{"id":96358,"depth":143,"text":96359,"children":97418},[97419,97420],{"id":96362,"depth":149,"text":96363},{"id":96374,"depth":149,"text":96375},{"id":96408,"depth":143,"text":96409},{"id":96445,"depth":143,"text":96446,"children":97423},[97424,97425,97426,97427,97428,97429,97430,97431],{"id":96449,"depth":149,"text":96450},{"id":96674,"depth":149,"text":96675},{"id":96681,"depth":149,"text":96682},{"id":96890,"depth":149,"text":96891},{"id":96910,"depth":149,"text":96911},{"id":97046,"depth":149,"text":97047},{"id":97215,"depth":149,"text":97216},{"id":97330,"depth":149,"text":97331},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch2",{"title":95785,"description":24093},"wiki\u002F2025-08-14-numpy\u002Fch2-创建数组","SNWxvUgIzXm5wtETKP1GjU_wdSkG_XaKQiBCRZRvxfw",{"id":97438,"title":97439,"body":97440,"description":24093,"extension":787,"meta":97533,"navigation":176,"path":97534,"seo":97535,"stem":97536,"__hash__":97537},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun.md","20.魔法命令mprun",{"type":7,"value":97441,"toc":97531},[97442,97445,97448,97451,97454,97457,97460,97463,97466,97469,97472,97475,97477,97480,97483,97488,97491,97494,97528],[10,97443,97439],{"id":97444},"_20魔法命令mprun",[19,97446,97447],{},"逐行分析数据内存的使用情况",[19,97449,97450],{},"语法格式：",[19,97452,97453],{},"%mprun -f 模块名.函数名 模块名.函数名()",[19,97455,97456],{},"分析结果列如下：",[19,97458,97459],{},"Line行号",[19,97461,97462],{},"Mem usage内存使用大小",[19,97464,97465],{},"increment内存增量",[19,97467,97468],{},"Line content代码内容",[19,97470,97471],{},"补充说明：",[19,97473,97474],{},"mprun不是Ipython内置，需要安装memory_profiler模块",[19,97476,95740],{},[19,97478,97479],{},"mprun测试的函数必须定义在独立模块中，不能定义在交互式Ipython环境中,要把它写入文件当中",[19,97481,97482],{},"如果需要重新加载模块，可以调用importlib模块提供reload函数",[19,97484,97485],{},[725,97486],{"alt":62,"src":97487},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-044.png",[19,97489,97490],{},"这个时候如果将函数里边range()范围改了，则重新运行之后，结果increment的每一句代码是不变的",[19,97492,97493],{},"这时候需要重新加载模块",[57,97495,97497],{"className":30915,"code":97496,"language":30917,"meta":62,"style":62},"#重新加载模块\nimport importlib\nimportlib.reload(mprun_test)\n%mprun -f mprun_test.fun_test mprun_test.fun_test()\n",[64,97498,97499,97504,97511,97516],{"__ignoreMap":62},[67,97500,97501],{"class":69,"line":70},[67,97502,97503],{"class":202},"#重新加载模块\n",[67,97505,97506,97508],{"class":69,"line":143},[67,97507,30929],{"class":73},[67,97509,97510],{"class":77}," importlib\n",[67,97512,97513],{"class":69,"line":149},[67,97514,97515],{"class":77},"importlib.reload(mprun_test)\n",[67,97517,97518,97520,97523,97525],{"class":69,"line":155},[67,97519,1186],{"class":73},[67,97521,97522],{"class":77},"mprun ",[67,97524,1389],{"class":73},[67,97526,97527],{"class":77},"f mprun_test.fun_test mprun_test.fun_test()\n",[779,97529,97530],{},"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":62,"searchDepth":143,"depth":143,"links":97532},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-mprun",{"title":97439,"description":24093},"wiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun","IgHoOma_sVJYUvOa_nR1WsKoZkVZVARozypIz67Eesc",{"id":97539,"title":97540,"body":97541,"description":24093,"extension":787,"meta":97558,"navigation":176,"path":97559,"seo":97560,"stem":97561,"__hash__":97562},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片.md","3.一维数组的索引和切片",{"type":7,"value":97542,"toc":97556},[97543,97546,97551],[10,97544,97540],{"id":97545},"_3一维数组的索引和切片",[19,97547,97548],{},[725,97549],{"alt":62,"src":97550},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-019.png",[19,97552,97553],{},[725,97554],{"alt":62,"src":97555},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-020.png",{"title":62,"searchDepth":143,"depth":143,"links":97557},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch3",{"title":97540,"description":24093},"wiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片","HCjbAhTUAFlQa91QLrommm7yUYNAMWkOQ3-g6Ha153Q",{"id":97564,"title":97565,"body":97566,"description":24093,"extension":787,"meta":98049,"navigation":176,"path":98050,"seo":98051,"stem":98052,"__hash__":98053},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片.md","4.二维数组的索引与切片",{"type":7,"value":97567,"toc":98047},[97568,97571,97574,97579,97612,97615,97653,97656,97690,97693,97798,97801,97838,97841,97942,97945,97996,97999,98041,98044],[10,97569,97565],{"id":97570},"_4二维数组的索引与切片",[19,97572,97573],{},"①获取指定单个元素",[19,97575,97576],{},[725,97577],{"alt":62,"src":97578},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-021.png",[57,97580,97582],{"className":30915,"code":97581,"language":30917,"meta":62,"style":62},"#获取元素9\n#先获取所在行，再获取所在列\n#数组[行索引号，列索引号]\na[1,2]\n",[64,97583,97584,97589,97594,97599],{"__ignoreMap":62},[67,97585,97586],{"class":69,"line":70},[67,97587,97588],{"class":202},"#获取元素9\n",[67,97590,97591],{"class":69,"line":143},[67,97592,97593],{"class":202},"#先获取所在行，再获取所在列\n",[67,97595,97596],{"class":69,"line":149},[67,97597,97598],{"class":202},"#数组[行索引号，列索引号]\n",[67,97600,97601,97604,97606,97608,97610],{"class":69,"line":155},[67,97602,97603],{"class":77},"a[",[67,97605,1077],{"class":208},[67,97607,1236],{"class":77},[67,97609,939],{"class":208},[67,97611,33783],{"class":77},[19,97613,97614],{},"②获取整行元素",[57,97616,97618],{"className":30915,"code":97617,"language":30917,"meta":62,"style":62},"#获取整行 数组[行索引号]\n#这个的效果与   数组[行索引号，：]效果是一样的\na[2]\n#也可以负索引获取一行\na[-1]\n",[64,97619,97620,97625,97630,97638,97643],{"__ignoreMap":62},[67,97621,97622],{"class":69,"line":70},[67,97623,97624],{"class":202},"#获取整行 数组[行索引号]\n",[67,97626,97627],{"class":69,"line":143},[67,97628,97629],{"class":202},"#这个的效果与   数组[行索引号，：]效果是一样的\n",[67,97631,97632,97634,97636],{"class":69,"line":149},[67,97633,97603],{"class":77},[67,97635,939],{"class":208},[67,97637,33783],{"class":77},[67,97639,97640],{"class":69,"line":155},[67,97641,97642],{"class":202},"#也可以负索引获取一行\n",[67,97644,97645,97647,97649,97651],{"class":69,"line":161},[67,97646,97603],{"class":77},[67,97648,1389],{"class":73},[67,97650,1077],{"class":208},[67,97652,33783],{"class":77},[19,97654,97655],{},"③获取整列元素",[57,97657,97659],{"className":30915,"code":97658,"language":30917,"meta":62,"style":62},"#获取整列 数组名[:,列索引]\na[:,2]\n#也可以负索引获取一列\na[:,-1]\n",[64,97660,97661,97666,97675,97680],{"__ignoreMap":62},[67,97662,97663],{"class":69,"line":70},[67,97664,97665],{"class":202},"#获取整列 数组名[:,列索引]\n",[67,97667,97668,97671,97673],{"class":69,"line":143},[67,97669,97670],{"class":77},"a[:,",[67,97672,939],{"class":208},[67,97674,33783],{"class":77},[67,97676,97677],{"class":69,"line":149},[67,97678,97679],{"class":202},"#也可以负索引获取一列\n",[67,97681,97682,97684,97686,97688],{"class":69,"line":155},[67,97683,97670],{"class":77},[67,97685,1389],{"class":73},[67,97687,1077],{"class":208},[67,97689,33783],{"class":77},[19,97691,97692],{},"④部分行部分列的元素",[57,97694,97696],{"className":30915,"code":97695,"language":30917,"meta":62,"style":62},"#部分行部分列 数组名[行切片，列切片]\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",[64,97697,97698,97703,97713,97717,97721,97726,97731,97735,97747,97751,97755,97760,97765,97770,97775,97779,97784],{"__ignoreMap":62},[67,97699,97700],{"class":69,"line":70},[67,97701,97702],{"class":202},"#部分行部分列 数组名[行切片，列切片]\n",[67,97704,97705,97708,97710],{"class":69,"line":143},[67,97706,97707],{"class":77},"a[:",[67,97709,939],{"class":208},[67,97711,97712],{"class":77},",:]\n",[67,97714,97715],{"class":69,"line":149},[67,97716,94101],{"class":202},[67,97718,97719],{"class":69,"line":155},[67,97720,94465],{"class":84},[67,97722,97723],{"class":69,"line":161},[67,97724,97725],{"class":84},"array([[ 1,  2,  3,  4,  5,  6],\n",[67,97727,97728],{"class":69,"line":167},[67,97729,97730],{"class":84},"       [ 7,  8,  9, 10, 11, 12]])\n",[67,97732,97733],{"class":69,"line":173},[67,97734,94465],{"class":84},[67,97736,97737,97739,97741,97743,97745],{"class":69,"line":180},[67,97738,97670],{"class":77},[67,97740,1077],{"class":208},[67,97742,1715],{"class":77},[67,97744,1151],{"class":208},[67,97746,33783],{"class":77},[67,97748,97749],{"class":69,"line":186},[67,97750,94101],{"class":202},[67,97752,97753],{"class":69,"line":444},[67,97754,94465],{"class":84},[67,97756,97757],{"class":69,"line":2335},[67,97758,97759],{"class":84},"array([[ 2,  3,  4],\n",[67,97761,97762],{"class":69,"line":2340},[67,97763,97764],{"class":84},"       [ 8,  9, 10],\n",[67,97766,97767],{"class":69,"line":2346},[67,97768,97769],{"class":84},"       [14, 15, 16],\n",[67,97771,97772],{"class":69,"line":2351},[67,97773,97774],{"class":84},"       [20, 21, 22]])\n",[67,97776,97777],{"class":69,"line":2365},[67,97778,94465],{"class":84},[67,97780,97781],{"class":69,"line":2370},[67,97782,97783],{"class":202},"#对列行同时进行切片，使用了step参数\n",[67,97785,97786,97789,97791,97794,97796],{"class":69,"line":2376},[67,97787,97788],{"class":77},"a[::",[67,97790,939],{"class":208},[67,97792,97793],{"class":77},",::",[67,97795,939],{"class":208},[67,97797,33783],{"class":77},[19,97799,97800],{},"⑤同时获取两个元素",[57,97802,97804],{"className":30915,"code":97803,"language":30917,"meta":62,"style":62},"#同时获取第三行第二列，第四行第一列\n#逗号前边括号为行的所有索引，逗号后边为列的所有索引\na[(2,3),(1,0)]\n",[64,97805,97806,97811,97816],{"__ignoreMap":62},[67,97807,97808],{"class":69,"line":70},[67,97809,97810],{"class":202},"#同时获取第三行第二列，第四行第一列\n",[67,97812,97813],{"class":69,"line":143},[67,97814,97815],{"class":202},"#逗号前边括号为行的所有索引，逗号后边为列的所有索引\n",[67,97817,97818,97821,97823,97825,97827,97829,97831,97833,97835],{"class":69,"line":149},[67,97819,97820],{"class":77},"a[(",[67,97822,939],{"class":208},[67,97824,1236],{"class":77},[67,97826,933],{"class":208},[67,97828,42784],{"class":77},[67,97830,1077],{"class":208},[67,97832,1236],{"class":77},[67,97834,1051],{"class":208},[67,97836,97837],{"class":77},")]\n",[19,97839,97840],{},"⑥切片，对行进行反向获取",[57,97842,97844],{"className":30915,"code":97843,"language":30917,"meta":62,"style":62},"#切片 对所有行进行反向获取\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",[64,97845,97846,97851,97861,97865,97869,97874,97879,97884,97889,97893,97898,97914,97918,97923,97928,97933,97938],{"__ignoreMap":62},[67,97847,97848],{"class":69,"line":70},[67,97849,97850],{"class":202},"#切片 对所有行进行反向获取\n",[67,97852,97853,97855,97857,97859],{"class":69,"line":143},[67,97854,97788],{"class":77},[67,97856,1389],{"class":73},[67,97858,1077],{"class":208},[67,97860,33783],{"class":77},[67,97862,97863],{"class":69,"line":149},[67,97864,94101],{"class":202},[67,97866,97867],{"class":69,"line":155},[67,97868,94465],{"class":84},[67,97870,97871],{"class":69,"line":161},[67,97872,97873],{"class":84},"array([[19, 20, 21, 22, 23, 24],\n",[67,97875,97876],{"class":69,"line":167},[67,97877,97878],{"class":84},"       [13, 14, 15, 16, 17, 18],\n",[67,97880,97881],{"class":69,"line":173},[67,97882,97883],{"class":84},"       [ 7,  8,  9, 10, 11, 12],\n",[67,97885,97886],{"class":69,"line":180},[67,97887,97888],{"class":84},"       [ 1,  2,  3,  4,  5,  6]])\n",[67,97890,97891],{"class":69,"line":186},[67,97892,94465],{"class":84},[67,97894,97895],{"class":69,"line":444},[67,97896,97897],{"class":202},"#对行列都进行反向切片获取\n",[67,97899,97900,97902,97904,97906,97908,97910,97912],{"class":69,"line":2335},[67,97901,97788],{"class":77},[67,97903,1389],{"class":73},[67,97905,1077],{"class":208},[67,97907,97793],{"class":77},[67,97909,1389],{"class":73},[67,97911,1077],{"class":208},[67,97913,33783],{"class":77},[67,97915,97916],{"class":69,"line":2340},[67,97917,94465],{"class":84},[67,97919,97920],{"class":69,"line":2346},[67,97921,97922],{"class":84},"array([[24, 23, 22, 21, 20, 19],\n",[67,97924,97925],{"class":69,"line":2351},[67,97926,97927],{"class":84},"       [18, 17, 16, 15, 14, 13],\n",[67,97929,97930],{"class":69,"line":2365},[67,97931,97932],{"class":84},"       [12, 11, 10,  9,  8,  7],\n",[67,97934,97935],{"class":69,"line":2370},[67,97936,97937],{"class":84},"       [ 6,  5,  4,  3,  2,  1]])\n",[67,97939,97940],{"class":69,"line":2376},[67,97941,94465],{"class":84},[19,97943,97944],{},"⑦修改元素",[57,97946,97948],{"className":30915,"code":97947,"language":30917,"meta":62,"style":62},"#获取前两行和前两列\nsub_a=a[:2,:2]\n#修改sub_a第一个元素的值\nsub_a[0,0]=100\n",[64,97949,97950,97955,97973,97978],{"__ignoreMap":62},[67,97951,97952],{"class":69,"line":70},[67,97953,97954],{"class":202},"#获取前两行和前两列\n",[67,97956,97957,97960,97962,97964,97966,97969,97971],{"class":69,"line":143},[67,97958,97959],{"class":77},"sub_a",[67,97961,909],{"class":73},[67,97963,97707],{"class":77},[67,97965,939],{"class":208},[67,97967,97968],{"class":77},",:",[67,97970,939],{"class":208},[67,97972,33783],{"class":77},[67,97974,97975],{"class":69,"line":149},[67,97976,97977],{"class":202},"#修改sub_a第一个元素的值\n",[67,97979,97980,97983,97985,97987,97989,97991,97993],{"class":69,"line":155},[67,97981,97982],{"class":77},"sub_a[",[67,97984,1051],{"class":208},[67,97986,1236],{"class":77},[67,97988,1051],{"class":208},[67,97990,1796],{"class":77},[67,97992,909],{"class":73},[67,97994,97995],{"class":208},"100\n",[19,97997,97998],{},"⑧数组复制copy()",[57,98000,98002],{"className":30915,"code":98001,"language":30917,"meta":62,"style":62},"#数组复制\ncopy_a=np.copy(sub_a)\n#修改copy_a后不影响原数组\ncopy_a[0,0]=100\n",[64,98003,98004,98009,98019,98024],{"__ignoreMap":62},[67,98005,98006],{"class":69,"line":70},[67,98007,98008],{"class":202},"#数组复制\n",[67,98010,98011,98014,98016],{"class":69,"line":143},[67,98012,98013],{"class":77},"copy_a",[67,98015,909],{"class":73},[67,98017,98018],{"class":77},"np.copy(sub_a)\n",[67,98020,98021],{"class":69,"line":149},[67,98022,98023],{"class":202},"#修改copy_a后不影响原数组\n",[67,98025,98026,98029,98031,98033,98035,98037,98039],{"class":69,"line":155},[67,98027,98028],{"class":77},"copy_a[",[67,98030,1051],{"class":208},[67,98032,1236],{"class":77},[67,98034,1051],{"class":208},[67,98036,1796],{"class":77},[67,98038,909],{"class":73},[67,98040,97995],{"class":208},[19,98042,98043],{},"使用copy()指令后创建的数组，对这个新的数组的元素进行改变，原数组的元素值是不会发生改变的",[779,98045,98046],{},"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":62,"searchDepth":143,"depth":143,"links":98048},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch4",{"title":97565,"description":24093},"wiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片","FhYeIq3Ginq9ubG9YAvy-kWp6vFdXYGIbw8SBQgChuk",{"id":98055,"title":98056,"body":98057,"description":24093,"extension":787,"meta":98549,"navigation":176,"path":98550,"seo":98551,"stem":98552,"__hash__":98553},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度.md","5.改变数组的维度",{"type":7,"value":98058,"toc":98541},[98059,98062,98066,98069,98072,98125,98128,98153,98156,98175,98195,98198,98214,98218,98264,98268,98310,98314,98317,98320,98323,98326,98329,98391,98451,98455,98458,98515,98519,98524,98533,98538],[10,98060,98056],{"id":98061},"_5改变数组的维度",[803,98063,98065],{"id":98064},"_51-使用reshape","5.1 使用reshape()",[19,98067,98068],{},"通过reshape方法可以将一维数组变成二维数组、三维或者多维数组，也可以通过reshape方法将多维数组变成一维",[19,98070,98071],{},"①一维数组转换为二维数组",[57,98073,98075],{"className":30915,"code":98074,"language":30917,"meta":62,"style":62},"a=np.arange(1,13)\n#将一维数组进行转换\n#注意点：元素个数不可以变\n#转换维度要保持一致，不一致就异常！！！\naa=a.reshape(2,6)\n",[64,98076,98077,98093,98098,98103,98108],{"__ignoreMap":62},[67,98078,98079,98081,98083,98085,98087,98089,98091],{"class":69,"line":70},[67,98080,28],{"class":77},[67,98082,909],{"class":73},[67,98084,93539],{"class":77},[67,98086,1077],{"class":208},[67,98088,1236],{"class":77},[67,98090,1380],{"class":208},[67,98092,870],{"class":77},[67,98094,98095],{"class":69,"line":143},[67,98096,98097],{"class":202},"#将一维数组进行转换\n",[67,98099,98100],{"class":69,"line":149},[67,98101,98102],{"class":202},"#注意点：元素个数不可以变\n",[67,98104,98105],{"class":69,"line":155},[67,98106,98107],{"class":202},"#转换维度要保持一致，不一致就异常！！！\n",[67,98109,98110,98112,98114,98117,98119,98121,98123],{"class":69,"line":161},[67,98111,93843],{"class":77},[67,98113,909],{"class":73},[67,98115,98116],{"class":77},"a.reshape(",[67,98118,939],{"class":208},[67,98120,1236],{"class":77},[67,98122,1202],{"class":208},[67,98124,870],{"class":77},[19,98126,98127],{},"②一维数组转换为三维数组",[57,98129,98131],{"className":30915,"code":98130,"language":30917,"meta":62,"style":62},"aaa=a.reshape(2,3,2)\n",[64,98132,98133],{"__ignoreMap":62},[67,98134,98135,98137,98139,98141,98143,98145,98147,98149,98151],{"class":69,"line":70},[67,98136,96058],{"class":77},[67,98138,909],{"class":73},[67,98140,98116],{"class":77},[67,98142,939],{"class":208},[67,98144,1236],{"class":77},[67,98146,933],{"class":208},[67,98148,1236],{"class":77},[67,98150,939],{"class":208},[67,98152,870],{"class":77},[19,98154,98155],{},"③二维数组转化为一维数组",[57,98157,98159],{"className":30915,"code":98158,"language":30917,"meta":62,"style":62},"#知道元素个数：\naa.reshape(12)\n",[64,98160,98161,98166],{"__ignoreMap":62},[67,98162,98163],{"class":69,"line":70},[67,98164,98165],{"class":202},"#知道元素个数：\n",[67,98167,98168,98171,98173],{"class":69,"line":143},[67,98169,98170],{"class":77},"aa.reshape(",[67,98172,1355],{"class":208},[67,98174,870],{"class":77},[57,98176,98178],{"className":30915,"code":98177,"language":30917,"meta":62,"style":62},"#不知道元素个数，参数传递-1\naa.reshape(-1)\n",[64,98179,98180,98185],{"__ignoreMap":62},[67,98181,98182],{"class":69,"line":70},[67,98183,98184],{"class":202},"#不知道元素个数，参数传递-1\n",[67,98186,98187,98189,98191,98193],{"class":69,"line":143},[67,98188,98170],{"class":77},[67,98190,1389],{"class":73},[67,98192,1077],{"class":208},[67,98194,870],{"class":77},[19,98196,98197],{},"④三维数组转换为一维数组",[57,98199,98201],{"className":30915,"code":98200,"language":30917,"meta":62,"style":62},"aaa.reshape(-1)\n",[64,98202,98203],{"__ignoreMap":62},[67,98204,98205,98208,98210,98212],{"class":69,"line":70},[67,98206,98207],{"class":77},"aaa.reshape(",[67,98209,1389],{"class":73},[67,98211,1077],{"class":208},[67,98213,870],{"class":77},[803,98215,98217],{"id":98216},"_52-使用revel转换为一维数组","5.2 使用revel()转换为一维数组",[57,98219,98221],{"className":30915,"code":98220,"language":30917,"meta":62,"style":62},"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",[64,98222,98223,98250,98255,98259],{"__ignoreMap":62},[67,98224,98225,98227,98229,98231,98233,98235,98237,98239,98241,98243,98245,98247],{"class":69,"line":70},[67,98226,93843],{"class":77},[67,98228,909],{"class":73},[67,98230,93539],{"class":77},[67,98232,1077],{"class":208},[67,98234,1236],{"class":77},[67,98236,1380],{"class":208},[67,98238,93544],{"class":77},[67,98240,939],{"class":208},[67,98242,1236],{"class":77},[67,98244,1202],{"class":208},[67,98246,260],{"class":77},[67,98248,98249],{"class":202},"#转换为2行6列的数组\n",[67,98251,98252],{"class":69,"line":143},[67,98253,98254],{"class":77},"aa.revel()\n",[67,98256,98257],{"class":69,"line":149},[67,98258,94101],{"class":202},[67,98260,98261],{"class":69,"line":155},[67,98262,98263],{"class":202},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12])\n",[803,98265,98267],{"id":98266},"_53-使用flatten转换为一维数组","5.3 使用flatten()转换为一维数组",[57,98269,98271],{"className":30915,"code":98270,"language":30917,"meta":62,"style":62},"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",[64,98272,98273,98297,98302,98306],{"__ignoreMap":62},[67,98274,98275,98277,98279,98281,98283,98285,98287,98289,98291,98293,98295],{"class":69,"line":70},[67,98276,93843],{"class":77},[67,98278,909],{"class":73},[67,98280,93539],{"class":77},[67,98282,1077],{"class":208},[67,98284,1236],{"class":77},[67,98286,1380],{"class":208},[67,98288,93544],{"class":77},[67,98290,939],{"class":208},[67,98292,1236],{"class":77},[67,98294,1202],{"class":208},[67,98296,870],{"class":77},[67,98298,98299],{"class":69,"line":143},[67,98300,98301],{"class":77},"aa.flatten()\n",[67,98303,98304],{"class":69,"line":149},[67,98305,94101],{"class":202},[67,98307,98308],{"class":69,"line":155},[67,98309,98263],{"class":202},[803,98311,98313],{"id":98312},"_54-使用resize","5.4 使用resize()",[19,98315,98316],{},"改变数组的维度还可以直接设置numpy数组的shape属性（元组类型）",[19,98318,98319],{},"通过resize方法可以改变数组的维度",[19,98321,98322],{},"#resize修改数组维度",[19,98324,98325],{},"#以元组的形式指定形状",[19,98327,98328],{},"#改变的是原数组",[57,98330,98332],{"className":30915,"code":98331,"language":30917,"meta":62,"style":62},"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",[64,98333,98334,98350,98370,98383,98387],{"__ignoreMap":62},[67,98335,98336,98338,98340,98342,98344,98346,98348],{"class":69,"line":70},[67,98337,28],{"class":77},[67,98339,909],{"class":73},[67,98341,93539],{"class":77},[67,98343,1077],{"class":208},[67,98345,1236],{"class":77},[67,98347,1380],{"class":208},[67,98349,870],{"class":77},[67,98351,98352,98355,98357,98359,98361,98363,98365,98367],{"class":69,"line":143},[67,98353,98354],{"class":77},"a.shape",[67,98356,909],{"class":73},[67,98358,864],{"class":77},[67,98360,939],{"class":208},[67,98362,1236],{"class":77},[67,98364,1202],{"class":208},[67,98366,260],{"class":77},[67,98368,98369],{"class":202},"#改变了原数组\n",[67,98371,98372,98374,98376,98379,98381],{"class":69,"line":149},[67,98373,28],{"class":77},[67,98375,909],{"class":73},[67,98377,98378],{"class":77},"resize((",[67,98380,1355],{"class":208},[67,98382,31034],{"class":77},[67,98384,98385],{"class":69,"line":155},[67,98386,94101],{"class":202},[67,98388,98389],{"class":69,"line":161},[67,98390,98263],{"class":202},[57,98392,98394],{"className":30915,"code":98393,"language":30917,"meta":62,"style":62},"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",[64,98395,98396,98409,98413,98417,98422,98427,98432,98437,98442,98447],{"__ignoreMap":62},[67,98397,98398,98401,98403,98405,98407],{"class":69,"line":70},[67,98399,98400],{"class":77},"a.resize((",[67,98402,1202],{"class":208},[67,98404,1236],{"class":77},[67,98406,939],{"class":208},[67,98408,31034],{"class":77},[67,98410,98411],{"class":69,"line":143},[67,98412,94101],{"class":202},[67,98414,98415],{"class":69,"line":149},[67,98416,94465],{"class":84},[67,98418,98419],{"class":69,"line":155},[67,98420,98421],{"class":84},"array([[ 1,  2],\n",[67,98423,98424],{"class":69,"line":161},[67,98425,98426],{"class":84},"       [ 3,  4],\n",[67,98428,98429],{"class":69,"line":167},[67,98430,98431],{"class":84},"       [ 5,  6],\n",[67,98433,98434],{"class":69,"line":173},[67,98435,98436],{"class":84},"       [ 7,  8],\n",[67,98438,98439],{"class":69,"line":180},[67,98440,98441],{"class":84},"       [ 9, 10],\n",[67,98443,98444],{"class":69,"line":186},[67,98445,98446],{"class":84},"       [11, 12]])\n",[67,98448,98449],{"class":69,"line":444},[67,98450,94465],{"class":84},[803,98452,98454],{"id":98453},"_55-使用数组shape属性修改","5.5 使用数组shape属性修改",[19,98456,98457],{},"改变了原数组",[57,98459,98461],{"className":30915,"code":98460,"language":30917,"meta":62,"style":62},"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",[64,98462,98463,98479,98495,98499,98503,98507,98511],{"__ignoreMap":62},[67,98464,98465,98467,98469,98471,98473,98475,98477],{"class":69,"line":70},[67,98466,28],{"class":77},[67,98468,909],{"class":73},[67,98470,93539],{"class":77},[67,98472,1077],{"class":208},[67,98474,1236],{"class":77},[67,98476,1380],{"class":208},[67,98478,870],{"class":77},[67,98480,98481,98483,98485,98487,98489,98491,98493],{"class":69,"line":143},[67,98482,98354],{"class":77},[67,98484,909],{"class":73},[67,98486,864],{"class":77},[67,98488,939],{"class":208},[67,98490,1236],{"class":77},[67,98492,1202],{"class":208},[67,98494,870],{"class":77},[67,98496,98497],{"class":69,"line":149},[67,98498,94101],{"class":202},[67,98500,98501],{"class":69,"line":155},[67,98502,94465],{"class":84},[67,98504,98505],{"class":69,"line":161},[67,98506,97725],{"class":84},[67,98508,98509],{"class":69,"line":167},[67,98510,97730],{"class":84},[67,98512,98513],{"class":69,"line":173},[67,98514,94465],{"class":84},[803,98516,98518],{"id":98517},"_56-重要比较","5.6 重要比较：",[19,98520,98521],{},[725,98522],{"alt":62,"src":98523},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-022.png",[19,98525,98526,98527,98529,98530,98532],{},"口诀：NumPy 函数要么用 ",[64,98528,96500],{},"，要么用 ",[64,98531,32033],{},"，创建结构用 shape，造数据用 size",[19,98534,98535],{},[725,98536],{"alt":62,"src":98537},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-023.png",[779,98539,98540],{},"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":62,"searchDepth":143,"depth":143,"links":98542},[98543,98544,98545,98546,98547,98548],{"id":98064,"depth":143,"text":98065},{"id":98216,"depth":143,"text":98217},{"id":98266,"depth":143,"text":98267},{"id":98312,"depth":143,"text":98313},{"id":98453,"depth":143,"text":98454},{"id":98517,"depth":143,"text":98518},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch5",{"title":98056,"description":24093},"wiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度","L8Yh7Y4Z2Znl_Umc9cbqdOtHItjOa-jg0HqonMYnr74",{"id":98555,"title":98556,"body":98557,"description":24093,"extension":787,"meta":99629,"navigation":176,"path":99630,"seo":99631,"stem":99632,"__hash__":99633},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接.md","6.数组的拼接",{"type":7,"value":98558,"toc":99623},[98559,98562,98566,98569,98572,98575,98640,98643,98683,98686,98768,98771,98776,98798,98800,98805,98810,98813,98816,98971,98974,99176,99180,99183,99186,99254,99256,99261,99264,99267,99347,99351,99354,99356,99429,99431,99436,99438,99518,99522,99525,99528,99531,99534,99537,99540,99620],[10,98560,98556],{"id":98561},"_6数组的拼接",[803,98563,98565],{"id":98564},"_61-使用concatenate数组拼接","6.1 使用concatenate数组拼接",[19,98567,98568],{},"使用concatenate进行数组拼接连接沿现有轴的数组数列",[19,98570,98571],{},"函数内部传两个数列构成的数列或者元组",[19,98573,98574],{},"①一维数组的拼接",[57,98576,98578],{"className":30915,"code":98577,"language":30917,"meta":62,"style":62},"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",[64,98579,98580,98600,98620,98625,98630,98635],{"__ignoreMap":62},[67,98581,98582,98584,98586,98588,98590,98592,98594,98596,98598],{"class":69,"line":70},[67,98583,28],{"class":77},[67,98585,909],{"class":73},[67,98587,93561],{"class":77},[67,98589,1077],{"class":208},[67,98591,1236],{"class":77},[67,98593,939],{"class":208},[67,98595,1236],{"class":77},[67,98597,933],{"class":208},[67,98599,5376],{"class":77},[67,98601,98602,98604,98606,98608,98610,98612,98614,98616,98618],{"class":69,"line":143},[67,98603,1121],{"class":77},[67,98605,909],{"class":73},[67,98607,93561],{"class":77},[67,98609,1151],{"class":208},[67,98611,1236],{"class":77},[67,98613,1177],{"class":208},[67,98615,1236],{"class":77},[67,98617,1202],{"class":208},[67,98619,5376],{"class":77},[67,98621,98622],{"class":69,"line":149},[67,98623,98624],{"class":202},"#调用concatenate进行数组拼接\n",[67,98626,98627],{"class":69,"line":155},[67,98628,98629],{"class":77},"np.concatenate((a,b))\n",[67,98631,98632],{"class":69,"line":161},[67,98633,98634],{"class":202},"#这里函数内部是以数列或者元组的形式进行传递的，也可以使用数列\n",[67,98636,98637],{"class":69,"line":167},[67,98638,98639],{"class":202},"#np.concatenate([a,b])\n",[19,98641,98642],{},"②一维多个数组拼接",[57,98644,98646],{"className":30915,"code":98645,"language":30917,"meta":62,"style":62},"#也可以多个数组进行拼接\nc=np.array([10,11,13])\nc\nnp.concatenate((a,b,c))\n",[64,98647,98648,98653,98673,98678],{"__ignoreMap":62},[67,98649,98650],{"class":69,"line":70},[67,98651,98652],{"class":202},"#也可以多个数组进行拼接\n",[67,98654,98655,98657,98659,98661,98663,98665,98667,98669,98671],{"class":69,"line":143},[67,98656,1146],{"class":77},[67,98658,909],{"class":73},[67,98660,93561],{"class":77},[67,98662,1303],{"class":208},[67,98664,1236],{"class":77},[67,98666,1329],{"class":208},[67,98668,1236],{"class":77},[67,98670,1380],{"class":208},[67,98672,5376],{"class":77},[67,98674,98675],{"class":69,"line":149},[67,98676,98677],{"class":77},"c\n",[67,98679,98680],{"class":69,"line":155},[67,98681,98682],{"class":77},"np.concatenate((a,b,c))\n",[19,98684,98685],{},"③二维数组拼接",[57,98687,98689],{"className":30915,"code":98688,"language":30917,"meta":62,"style":62},"#二维数组使用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",[64,98690,98691,98696,98720,98745,98750,98755],{"__ignoreMap":62},[67,98692,98693],{"class":69,"line":70},[67,98694,98695],{"class":202},"#二维数组使用concatenate进行拼接\n",[67,98697,98698,98700,98702,98704,98706,98708,98710,98712,98714,98716,98718],{"class":69,"line":143},[67,98699,93843],{"class":77},[67,98701,909],{"class":73},[67,98703,93539],{"class":77},[67,98705,1077],{"class":208},[67,98707,1236],{"class":77},[67,98709,1380],{"class":208},[67,98711,93544],{"class":77},[67,98713,933],{"class":208},[67,98715,1236],{"class":77},[67,98717,1151],{"class":208},[67,98719,870],{"class":77},[67,98721,98722,98725,98727,98729,98731,98733,98735,98737,98739,98741,98743],{"class":69,"line":149},[67,98723,98724],{"class":77},"bb",[67,98726,909],{"class":73},[67,98728,93539],{"class":77},[67,98730,1195],{"class":208},[67,98732,1236],{"class":77},[67,98734,1498],{"class":208},[67,98736,93544],{"class":77},[67,98738,933],{"class":208},[67,98740,1236],{"class":77},[67,98742,1151],{"class":208},[67,98744,870],{"class":77},[67,98746,98747],{"class":69,"line":155},[67,98748,98749],{"class":202},"#调用concatenate进行拼接,axis默认值为0，按行;axis=1时按列\n",[67,98751,98752],{"class":69,"line":161},[67,98753,98754],{"class":202},"#concatenate是有两个参数的，一个是要拼接数组组成的数列或者元组，另一个是轴axis\n",[67,98756,98757,98760,98762,98764,98766],{"class":69,"line":167},[67,98758,98759],{"class":77},"np.concatenate((aa,bb),",[67,98761,48051],{"class":5935},[67,98763,909],{"class":73},[67,98765,1051],{"class":208},[67,98767,870],{"class":77},[19,98769,98770],{},"结果：",[19,98772,98773],{},[725,98774],{"alt":62,"src":98775},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-024.png",[57,98777,98779],{"className":30915,"code":98778,"language":30917,"meta":62,"style":62},"#指定axis为1进行拼接\nnp.concatenate((aa,bb),axis=1)\n",[64,98780,98781,98786],{"__ignoreMap":62},[67,98782,98783],{"class":69,"line":70},[67,98784,98785],{"class":202},"#指定axis为1进行拼接\n",[67,98787,98788,98790,98792,98794,98796],{"class":69,"line":143},[67,98789,98759],{"class":77},[67,98791,48051],{"class":5935},[67,98793,909],{"class":73},[67,98795,1077],{"class":208},[67,98797,870],{"class":77},[19,98799,98770],{},[19,98801,98802],{},[725,98803],{"alt":62,"src":98804},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-025.png",[19,98806,98807],{},[336,98808,98809],{},"二维数组总结：0竖着方向，1横着方向",[19,98811,98812],{},"④三维数组拼接",[19,98814,98815],{},"#concatenate()三维数组拼接，axis有三个维度0，1，2",[57,98817,98819],{"className":30915,"code":98818,"language":30917,"meta":62,"style":62},"#两个三行六列\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",[64,98820,98821,98826,98854,98884,98889,98906,98911,98916,98921,98938,98943,98948,98953,98966],{"__ignoreMap":62},[67,98822,98823],{"class":69,"line":70},[67,98824,98825],{"class":202},"#两个三行六列\n",[67,98827,98828,98830,98832,98834,98836,98838,98840,98842,98844,98846,98848,98850,98852],{"class":69,"line":143},[67,98829,96058],{"class":77},[67,98831,909],{"class":73},[67,98833,93539],{"class":77},[67,98835,1077],{"class":208},[67,98837,1236],{"class":77},[67,98839,1183],{"class":208},[67,98841,93544],{"class":77},[67,98843,939],{"class":208},[67,98845,1236],{"class":77},[67,98847,933],{"class":208},[67,98849,1236],{"class":77},[67,98851,1202],{"class":208},[67,98853,870],{"class":77},[67,98855,98856,98859,98861,98863,98865,98867,98870,98872,98874,98876,98878,98880,98882],{"class":69,"line":149},[67,98857,98858],{"class":77},"bbb",[67,98860,909],{"class":73},[67,98862,93539],{"class":77},[67,98864,1195],{"class":208},[67,98866,1236],{"class":77},[67,98868,98869],{"class":208},"137",[67,98871,93544],{"class":77},[67,98873,939],{"class":208},[67,98875,1236],{"class":77},[67,98877,933],{"class":208},[67,98879,1236],{"class":77},[67,98881,1202],{"class":208},[67,98883,870],{"class":77},[67,98885,98886],{"class":69,"line":155},[67,98887,98888],{"class":202},"#axis=0\n",[67,98890,98891,98893,98895,98898,98900,98902,98904],{"class":69,"line":161},[67,98892,1551],{"class":77},[67,98894,909],{"class":73},[67,98896,98897],{"class":77},"np.concatenate((aaa,bbb),",[67,98899,48051],{"class":5935},[67,98901,909],{"class":73},[67,98903,1051],{"class":208},[67,98905,870],{"class":77},[67,98907,98908],{"class":69,"line":167},[67,98909,98910],{"class":77},"s.shape\n",[67,98912,98913],{"class":69,"line":173},[67,98914,98915],{"class":202},"#输出：(4,3,6)\n",[67,98917,98918],{"class":69,"line":180},[67,98919,98920],{"class":202},"#axis=1\n",[67,98922,98923,98926,98928,98930,98932,98934,98936],{"class":69,"line":186},[67,98924,98925],{"class":77},"ss",[67,98927,909],{"class":73},[67,98929,98897],{"class":77},[67,98931,48051],{"class":5935},[67,98933,909],{"class":73},[67,98935,1077],{"class":208},[67,98937,870],{"class":77},[67,98939,98940],{"class":69,"line":444},[67,98941,98942],{"class":77},"ss.shape\n",[67,98944,98945],{"class":69,"line":2335},[67,98946,98947],{"class":202},"#输出：(2,6,6)\n",[67,98949,98950],{"class":69,"line":2340},[67,98951,98952],{"class":202},"#axis=2\n",[67,98954,98955,98957,98959,98961,98963],{"class":69,"line":2346},[67,98956,98897],{"class":77},[67,98958,48051],{"class":5935},[67,98960,909],{"class":73},[67,98962,939],{"class":208},[67,98964,98965],{"class":77},").shape\n",[67,98967,98968],{"class":69,"line":2351},[67,98969,98970],{"class":202},"#输出：（2，3，12）\n",[19,98972,98973],{},"⑤四维数组拼接",[57,98975,98977],{"className":30915,"code":98976,"language":30917,"meta":62,"style":62},"#两个三行六列\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",[64,98978,98979,98983,99011,99039,99064,99090,99094,99107,99112,99116,99128,99133,99137,99149,99154,99159,99171],{"__ignoreMap":62},[67,98980,98981],{"class":69,"line":70},[67,98982,98825],{"class":202},[67,98984,98985,98987,98989,98991,98993,98995,98997,98999,99001,99003,99005,99007,99009],{"class":69,"line":143},[67,98986,96058],{"class":77},[67,98988,909],{"class":73},[67,98990,93539],{"class":77},[67,98992,1077],{"class":208},[67,98994,1236],{"class":77},[67,98996,1183],{"class":208},[67,98998,93544],{"class":77},[67,99000,939],{"class":208},[67,99002,1236],{"class":77},[67,99004,933],{"class":208},[67,99006,1236],{"class":77},[67,99008,1202],{"class":208},[67,99010,870],{"class":77},[67,99012,99013,99015,99017,99019,99021,99023,99025,99027,99029,99031,99033,99035,99037],{"class":69,"line":149},[67,99014,98858],{"class":77},[67,99016,909],{"class":73},[67,99018,93539],{"class":77},[67,99020,1195],{"class":208},[67,99022,1236],{"class":77},[67,99024,98869],{"class":208},[67,99026,93544],{"class":77},[67,99028,939],{"class":208},[67,99030,1236],{"class":77},[67,99032,933],{"class":208},[67,99034,1236],{"class":77},[67,99036,1202],{"class":208},[67,99038,870],{"class":77},[67,99040,99041,99044,99046,99048,99050,99052,99054,99056,99058,99060,99062],{"class":69,"line":155},[67,99042,99043],{"class":77},"aaaa",[67,99045,909],{"class":73},[67,99047,98207],{"class":77},[67,99049,939],{"class":208},[67,99051,1236],{"class":77},[67,99053,933],{"class":208},[67,99055,1236],{"class":77},[67,99057,933],{"class":208},[67,99059,1236],{"class":77},[67,99061,939],{"class":208},[67,99063,870],{"class":77},[67,99065,99066,99069,99071,99074,99076,99078,99080,99082,99084,99086,99088],{"class":69,"line":161},[67,99067,99068],{"class":77},"bbbb",[67,99070,909],{"class":73},[67,99072,99073],{"class":77},"bbb.reshape(",[67,99075,939],{"class":208},[67,99077,1236],{"class":77},[67,99079,933],{"class":208},[67,99081,1236],{"class":77},[67,99083,933],{"class":208},[67,99085,1236],{"class":77},[67,99087,939],{"class":208},[67,99089,870],{"class":77},[67,99091,99092],{"class":69,"line":167},[67,99093,98888],{"class":202},[67,99095,99096,99099,99101,99103,99105],{"class":69,"line":173},[67,99097,99098],{"class":77},"np.concatenate((aaaa,bbbb),",[67,99100,48051],{"class":5935},[67,99102,909],{"class":73},[67,99104,1051],{"class":208},[67,99106,98965],{"class":77},[67,99108,99109],{"class":69,"line":180},[67,99110,99111],{"class":202},"#结果：（4，3，3，2）\n",[67,99113,99114],{"class":69,"line":186},[67,99115,98920],{"class":202},[67,99117,99118,99120,99122,99124,99126],{"class":69,"line":444},[67,99119,99098],{"class":77},[67,99121,48051],{"class":5935},[67,99123,909],{"class":73},[67,99125,1077],{"class":208},[67,99127,98965],{"class":77},[67,99129,99130],{"class":69,"line":2335},[67,99131,99132],{"class":202},"#结果：（2，6，3，2）\n",[67,99134,99135],{"class":69,"line":2340},[67,99136,98952],{"class":202},[67,99138,99139,99141,99143,99145,99147],{"class":69,"line":2346},[67,99140,99098],{"class":77},[67,99142,48051],{"class":5935},[67,99144,909],{"class":73},[67,99146,939],{"class":208},[67,99148,98965],{"class":77},[67,99150,99151],{"class":69,"line":2351},[67,99152,99153],{"class":202},"#结果：（2，3，6，2）\n",[67,99155,99156],{"class":69,"line":2365},[67,99157,99158],{"class":202},"#axis=3\n",[67,99160,99161,99163,99165,99167,99169],{"class":69,"line":2370},[67,99162,99098],{"class":77},[67,99164,48051],{"class":5935},[67,99166,909],{"class":73},[67,99168,933],{"class":208},[67,99170,98965],{"class":77},[67,99172,99173],{"class":69,"line":2376},[67,99174,99175],{"class":202},"#结果：（2，3，3，4）\n",[803,99177,99179],{"id":99178},"_62-使用hstack数组拼接","6.2 使用hstack数组拼接",[19,99181,99182],{},"使用hstack进行数组拼接，水平堆叠序列中的数组(列方向)",[19,99184,99185],{},"①二维数组",[57,99187,99189],{"className":30915,"code":99188,"language":30917,"meta":62,"style":62},"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",[64,99190,99191,99215,99239,99244,99249],{"__ignoreMap":62},[67,99192,99193,99195,99197,99199,99201,99203,99205,99207,99209,99211,99213],{"class":69,"line":70},[67,99194,93843],{"class":77},[67,99196,909],{"class":73},[67,99198,93539],{"class":77},[67,99200,1077],{"class":208},[67,99202,1236],{"class":77},[67,99204,1380],{"class":208},[67,99206,93544],{"class":77},[67,99208,933],{"class":208},[67,99210,1236],{"class":77},[67,99212,1151],{"class":208},[67,99214,870],{"class":77},[67,99216,99217,99219,99221,99223,99225,99227,99229,99231,99233,99235,99237],{"class":69,"line":143},[67,99218,98724],{"class":77},[67,99220,909],{"class":73},[67,99222,93539],{"class":77},[67,99224,1195],{"class":208},[67,99226,1236],{"class":77},[67,99228,1498],{"class":208},[67,99230,93544],{"class":77},[67,99232,933],{"class":208},[67,99234,1236],{"class":77},[67,99236,1151],{"class":208},[67,99238,870],{"class":77},[67,99240,99241],{"class":69,"line":149},[67,99242,99243],{"class":77},"np.hstack((aa,bb))\n",[67,99245,99246],{"class":69,"line":155},[67,99247,99248],{"class":202},"#跟concatenate函数方法一样，把要拼接的数组放到数列或者元组中去\n",[67,99250,99251],{"class":69,"line":161},[67,99252,99253],{"class":202},"#np.hstack([aa,bb])\n",[19,99255,98770],{},[19,99257,99258],{},[725,99259],{"alt":62,"src":99260},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-026.png",[19,99262,99263],{},"等效于concatenate()函数中axis=1时的情况",[19,99265,99266],{},"②三维数组",[57,99268,99270],{"className":30915,"code":99269,"language":30917,"meta":62,"style":62},"#两个三行六列\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",[64,99271,99272,99276,99304,99332,99337,99342],{"__ignoreMap":62},[67,99273,99274],{"class":69,"line":70},[67,99275,98825],{"class":202},[67,99277,99278,99280,99282,99284,99286,99288,99290,99292,99294,99296,99298,99300,99302],{"class":69,"line":143},[67,99279,96058],{"class":77},[67,99281,909],{"class":73},[67,99283,93539],{"class":77},[67,99285,1077],{"class":208},[67,99287,1236],{"class":77},[67,99289,1183],{"class":208},[67,99291,93544],{"class":77},[67,99293,939],{"class":208},[67,99295,1236],{"class":77},[67,99297,933],{"class":208},[67,99299,1236],{"class":77},[67,99301,1202],{"class":208},[67,99303,870],{"class":77},[67,99305,99306,99308,99310,99312,99314,99316,99318,99320,99322,99324,99326,99328,99330],{"class":69,"line":149},[67,99307,98858],{"class":77},[67,99309,909],{"class":73},[67,99311,93539],{"class":77},[67,99313,1195],{"class":208},[67,99315,1236],{"class":77},[67,99317,98869],{"class":208},[67,99319,93544],{"class":77},[67,99321,939],{"class":208},[67,99323,1236],{"class":77},[67,99325,933],{"class":208},[67,99327,1236],{"class":77},[67,99329,1202],{"class":208},[67,99331,870],{"class":77},[67,99333,99334],{"class":69,"line":155},[67,99335,99336],{"class":202},"#使用hstack\n",[67,99338,99339],{"class":69,"line":161},[67,99340,99341],{"class":77},"np.hstack((aaa,bbb)).shape\n",[67,99343,99344],{"class":69,"line":167},[67,99345,99346],{"class":202},"#输出：（2，6，6）\n",[803,99348,99350],{"id":99349},"_63-使用vstack数组拼接","6.3 使用vstack数组拼接",[19,99352,99353],{},"使用vstack进行数组拼接，竖直堆叠序列中的数组(行方向)",[19,99355,99185],{},[57,99357,99359],{"className":30915,"code":99358,"language":30917,"meta":62,"style":62},"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",[64,99360,99361,99385,99409,99414,99419,99424],{"__ignoreMap":62},[67,99362,99363,99365,99367,99369,99371,99373,99375,99377,99379,99381,99383],{"class":69,"line":70},[67,99364,93843],{"class":77},[67,99366,909],{"class":73},[67,99368,93539],{"class":77},[67,99370,1077],{"class":208},[67,99372,1236],{"class":77},[67,99374,1380],{"class":208},[67,99376,93544],{"class":77},[67,99378,933],{"class":208},[67,99380,1236],{"class":77},[67,99382,1151],{"class":208},[67,99384,870],{"class":77},[67,99386,99387,99389,99391,99393,99395,99397,99399,99401,99403,99405,99407],{"class":69,"line":143},[67,99388,98724],{"class":77},[67,99390,909],{"class":73},[67,99392,93539],{"class":77},[67,99394,1195],{"class":208},[67,99396,1236],{"class":77},[67,99398,1498],{"class":208},[67,99400,93544],{"class":77},[67,99402,933],{"class":208},[67,99404,1236],{"class":77},[67,99406,1151],{"class":208},[67,99408,870],{"class":77},[67,99410,99411],{"class":69,"line":149},[67,99412,99413],{"class":202},"#vstack 垂直方向进行堆叠\n",[67,99415,99416],{"class":69,"line":155},[67,99417,99418],{"class":77},"np.vstack((aa,bb))\n",[67,99420,99421],{"class":69,"line":161},[67,99422,99423],{"class":202},"#与hstack传的参数类似，等价于：\n",[67,99425,99426],{"class":69,"line":167},[67,99427,99428],{"class":77},"np.vstack([aa,bb])\n",[19,99430,98770],{},[19,99432,99433],{},[725,99434],{"alt":62,"src":99435},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-027.png",[19,99437,99266],{},[57,99439,99441],{"className":30915,"code":99440,"language":30917,"meta":62,"style":62},"#两个三行六列\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",[64,99442,99443,99447,99475,99503,99508,99513],{"__ignoreMap":62},[67,99444,99445],{"class":69,"line":70},[67,99446,98825],{"class":202},[67,99448,99449,99451,99453,99455,99457,99459,99461,99463,99465,99467,99469,99471,99473],{"class":69,"line":143},[67,99450,96058],{"class":77},[67,99452,909],{"class":73},[67,99454,93539],{"class":77},[67,99456,1077],{"class":208},[67,99458,1236],{"class":77},[67,99460,1183],{"class":208},[67,99462,93544],{"class":77},[67,99464,939],{"class":208},[67,99466,1236],{"class":77},[67,99468,933],{"class":208},[67,99470,1236],{"class":77},[67,99472,1202],{"class":208},[67,99474,870],{"class":77},[67,99476,99477,99479,99481,99483,99485,99487,99489,99491,99493,99495,99497,99499,99501],{"class":69,"line":149},[67,99478,98858],{"class":77},[67,99480,909],{"class":73},[67,99482,93539],{"class":77},[67,99484,1195],{"class":208},[67,99486,1236],{"class":77},[67,99488,98869],{"class":208},[67,99490,93544],{"class":77},[67,99492,939],{"class":208},[67,99494,1236],{"class":77},[67,99496,933],{"class":208},[67,99498,1236],{"class":77},[67,99500,1202],{"class":208},[67,99502,870],{"class":77},[67,99504,99505],{"class":69,"line":155},[67,99506,99507],{"class":202},"#使用vstack\n",[67,99509,99510],{"class":69,"line":161},[67,99511,99512],{"class":77},"np.vstack((aaa,bbb)).shape\n",[67,99514,99515],{"class":69,"line":167},[67,99516,99517],{"class":202},"#输出：（4，3，6）\n",[803,99519,99521],{"id":99520},"_64-使用dstack数组拼接","6.4 使用dstack数组拼接",[19,99523,99524],{},"该方法是三维数组特有的方法",[19,99526,99527],{},"也就是说",[19,99529,99530],{},"一维数组拼接方法用：concatenate()",[19,99532,99533],{},"二维数组拼接方法用: concatenate(),hstack(),vstack()",[19,99535,99536],{},"三维数组拼接方法用: concatenate(),hstack(),vstack(),dstack()",[19,99538,99539],{},"四维数组及多维数组只能用concatenate进行拼接",[57,99541,99543],{"className":30915,"code":99542,"language":30917,"meta":62,"style":62},"#两个三行六列\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",[64,99544,99545,99549,99577,99605,99610,99615],{"__ignoreMap":62},[67,99546,99547],{"class":69,"line":70},[67,99548,98825],{"class":202},[67,99550,99551,99553,99555,99557,99559,99561,99563,99565,99567,99569,99571,99573,99575],{"class":69,"line":143},[67,99552,96058],{"class":77},[67,99554,909],{"class":73},[67,99556,93539],{"class":77},[67,99558,1077],{"class":208},[67,99560,1236],{"class":77},[67,99562,1183],{"class":208},[67,99564,93544],{"class":77},[67,99566,939],{"class":208},[67,99568,1236],{"class":77},[67,99570,933],{"class":208},[67,99572,1236],{"class":77},[67,99574,1202],{"class":208},[67,99576,870],{"class":77},[67,99578,99579,99581,99583,99585,99587,99589,99591,99593,99595,99597,99599,99601,99603],{"class":69,"line":149},[67,99580,98858],{"class":77},[67,99582,909],{"class":73},[67,99584,93539],{"class":77},[67,99586,1195],{"class":208},[67,99588,1236],{"class":77},[67,99590,98869],{"class":208},[67,99592,93544],{"class":77},[67,99594,939],{"class":208},[67,99596,1236],{"class":77},[67,99598,933],{"class":208},[67,99600,1236],{"class":77},[67,99602,1202],{"class":208},[67,99604,870],{"class":77},[67,99606,99607],{"class":69,"line":155},[67,99608,99609],{"class":202},"#使用dstack\n",[67,99611,99612],{"class":69,"line":161},[67,99613,99614],{"class":77},"np.dstack((aaa,bbb)).shape\n",[67,99616,99617],{"class":69,"line":167},[67,99618,99619],{"class":202},"#结果：（2，3，12）\n",[779,99621,99622],{},"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":62,"searchDepth":143,"depth":143,"links":99624},[99625,99626,99627,99628],{"id":98564,"depth":143,"text":98565},{"id":99178,"depth":143,"text":99179},{"id":99349,"depth":143,"text":99350},{"id":99520,"depth":143,"text":99521},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch6",{"title":98556,"description":24093},"wiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接","0lcecFbbCD7708gTYIcl02jIknmUZ4PA0g3J__NnHUY",{"id":99635,"title":99636,"body":99637,"description":24093,"extension":787,"meta":99912,"navigation":176,"path":99913,"seo":99914,"stem":99915,"__hash__":99916},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch7-数组转置.md","7.数组转置",{"type":7,"value":99638,"toc":99910},[99639,99642,99645,99739,99742,99745,99748,99751,99754,99757,99760,99763,99907],[10,99640,99636],{"id":99641},"_7数组转置",[19,99643,99644],{},"使用transpose()函数",[57,99646,99648],{"className":30915,"code":99647,"language":30917,"meta":62,"style":62},"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",[64,99649,99650,99660,99684,99689,99694,99699,99704,99712,99716,99720,99725,99730,99735],{"__ignoreMap":62},[67,99651,99652,99654,99656,99658],{"class":69,"line":70},[67,99653,30929],{"class":73},[67,99655,31917],{"class":77},[67,99657,31920],{"class":73},[67,99659,31923],{"class":77},[67,99661,99662,99664,99666,99668,99670,99672,99674,99676,99678,99680,99682],{"class":69,"line":143},[67,99663,28],{"class":77},[67,99665,909],{"class":73},[67,99667,32254],{"class":77},[67,99669,1077],{"class":208},[67,99671,1236],{"class":77},[67,99673,1380],{"class":208},[67,99675,93544],{"class":77},[67,99677,1151],{"class":208},[67,99679,1236],{"class":77},[67,99681,933],{"class":208},[67,99683,870],{"class":77},[67,99685,99686],{"class":69,"line":149},[67,99687,99688],{"class":202},"#二维数组转置\n",[67,99690,99691],{"class":69,"line":155},[67,99692,99693],{"class":202},"#调用transpose()函数\n",[67,99695,99696],{"class":69,"line":161},[67,99697,99698],{"class":77},"a.transpose()\n",[67,99700,99701],{"class":69,"line":167},[67,99702,99703],{"class":202},"#对于二维数组也可以采用.T来实现\n",[67,99705,99706,99709],{"class":69,"line":173},[67,99707,99708],{"class":77},"a.T",[67,99710,99711],{"class":202},"#与上述代码一样\n",[67,99713,99714],{"class":69,"line":180},[67,99715,94101],{"class":202},[67,99717,99718],{"class":69,"line":186},[67,99719,94465],{"class":84},[67,99721,99722],{"class":69,"line":444},[67,99723,99724],{"class":84},"array([[ 1,  4,  7, 10],\n",[67,99726,99727],{"class":69,"line":2335},[67,99728,99729],{"class":84},"       [ 2,  5,  8, 11],\n",[67,99731,99732],{"class":69,"line":2340},[67,99733,99734],{"class":84},"       [ 3,  6,  9, 12]])\n",[67,99736,99737],{"class":69,"line":2346},[67,99738,94465],{"class":84},[19,99740,99741],{},"也可以使用np.transpose()的形式",[19,99743,99744],{},"#多维数组进行转置 np.transpose()",[19,99746,99747],{},"#对二维数组也可以使用np.transpose()进行转置",[19,99749,99750],{},"#这个有两个维度，第一个是数组，第二个是维度,可以是数列也可以是元组的形式传到这个函数中",[19,99752,99753],{},"第二个参数，维度可以理解为用axis中的数来理解",[19,99755,99756],{},"对于二维数组，axis是有两个值的0，1 进行转置就传（1,0）两者进行了替换",[19,99758,99759],{},"对于三维数组，axis是有三个值的0，1，2，进行转置，想换哪个就将默认的(0,1,2)进行改",[19,99761,99762],{},"四维及以上的数组也是一样的道理",[57,99764,99766],{"className":30915,"code":99765,"language":30917,"meta":62,"style":62},"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",[64,99767,99768,99796,99801,99806,99811,99829,99834,99866,99871,99876,99881,99902],{"__ignoreMap":62},[67,99769,99770,99772,99774,99776,99778,99780,99782,99784,99786,99788,99790,99792,99794],{"class":69,"line":70},[67,99771,1676],{"class":77},[67,99773,909],{"class":73},[67,99775,93539],{"class":77},[67,99777,1077],{"class":208},[67,99779,1236],{"class":77},[67,99781,1183],{"class":208},[67,99783,93544],{"class":77},[67,99785,933],{"class":208},[67,99787,1236],{"class":77},[67,99789,1202],{"class":208},[67,99791,1236],{"class":77},[67,99793,939],{"class":208},[67,99795,870],{"class":77},[67,99797,99798],{"class":69,"line":143},[67,99799,99800],{"class":77},"x.shape\n",[67,99802,99803],{"class":69,"line":149},[67,99804,99805],{"class":202},"#结果：（3,6,2）\n",[67,99807,99808],{"class":69,"line":155},[67,99809,99810],{"class":202},"#使用np.transpose()进行转置 变为(2,6,3)\n",[67,99812,99813,99816,99818,99820,99822,99824,99826],{"class":69,"line":161},[67,99814,99815],{"class":77},"np.transpose(x,(",[67,99817,939],{"class":208},[67,99819,1236],{"class":77},[67,99821,1077],{"class":208},[67,99823,1236],{"class":77},[67,99825,1051],{"class":208},[67,99827,99828],{"class":77},")).shape\n",[67,99830,99831],{"class":69,"line":167},[67,99832,99833],{"class":202},"#结果：(2,6,3)\n",[67,99835,99836,99838,99840,99842,99844,99846,99848,99850,99852,99854,99856,99858,99860,99862,99864],{"class":69,"line":173},[67,99837,99043],{"class":77},[67,99839,909],{"class":73},[67,99841,93539],{"class":77},[67,99843,1077],{"class":208},[67,99845,1236],{"class":77},[67,99847,1183],{"class":208},[67,99849,93544],{"class":77},[67,99851,933],{"class":208},[67,99853,1236],{"class":77},[67,99855,939],{"class":208},[67,99857,1236],{"class":77},[67,99859,1077],{"class":208},[67,99861,1236],{"class":77},[67,99863,1202],{"class":208},[67,99865,870],{"class":77},[67,99867,99868],{"class":69,"line":180},[67,99869,99870],{"class":77},"aaaa.shape\n",[67,99872,99873],{"class":69,"line":186},[67,99874,99875],{"class":202},"#结果：（3，2，1，6）\n",[67,99877,99878],{"class":69,"line":444},[67,99879,99880],{"class":202},"#使用np.transpose()进行转置 变为(2,1,3,6)\n",[67,99882,99883,99886,99888,99890,99892,99894,99896,99898,99900],{"class":69,"line":2335},[67,99884,99885],{"class":77},"np.transpose(aaaa,(",[67,99887,1077],{"class":208},[67,99889,1236],{"class":77},[67,99891,939],{"class":208},[67,99893,1236],{"class":77},[67,99895,1051],{"class":208},[67,99897,1236],{"class":77},[67,99899,933],{"class":208},[67,99901,99828],{"class":77},[67,99903,99904],{"class":69,"line":2340},[67,99905,99906],{"class":202},"#结果：(2,1,3,6)\n",[779,99908,99909],{},"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":62,"searchDepth":143,"depth":143,"links":99911},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch7",{"title":99636,"description":24093},"wiki\u002F2025-08-14-numpy\u002Fch7-数组转置","b8e_wXc-54BtMmzlK4i2-r72ortHX_8oUIL58EtJh-E",{"id":99918,"title":99919,"body":99920,"description":24093,"extension":787,"meta":100654,"navigation":176,"path":100655,"seo":100656,"stem":100657,"__hash__":100658},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch8-数组分割.md","8.数组分割",{"type":7,"value":99921,"toc":100652},[99922,99925,99928,99931,99934,99937,99940,99943,99946,100055,100058,100061,100649],[10,99923,99919],{"id":99924},"_8数组分割",[19,99926,99927],{},"split分割",[19,99929,99930],{},"numpy.split(ary,indics_or_sections,axis)",[19,99932,99933],{},"解释：",[19,99935,99936],{},"ary:被分割的数组",[19,99938,99939],{},"indics_or_sections:如果是一个整数，就用该数平均切分，如果是一个数组，为沿轴切分的位置(左开右闭)",[19,99941,99942],{},"axis:沿着哪个维度进行切向，默认为0，横向切分。为1时，纵向切分",[19,99944,99945],{},"①一维数组的分割",[57,99947,99949],{"className":30915,"code":99948,"language":30917,"meta":62,"style":62},"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",[64,99950,99951,99967,99972,99981,99985,99990,99998,100002,100007,100012,100025,100029,100034,100046,100050],{"__ignoreMap":62},[67,99952,99953,99955,99957,99959,99961,99963,99965],{"class":69,"line":70},[67,99954,28],{"class":77},[67,99956,909],{"class":73},[67,99958,93539],{"class":77},[67,99960,1077],{"class":208},[67,99962,1236],{"class":77},[67,99964,1278],{"class":208},[67,99966,870],{"class":77},[67,99968,99969],{"class":69,"line":143},[67,99970,99971],{"class":202},"#如果传入整数，必须能够平分，否则会报错\n",[67,99973,99974,99977,99979],{"class":69,"line":149},[67,99975,99976],{"class":77},"np.split(a,",[67,99978,939],{"class":208},[67,99980,870],{"class":77},[67,99982,99983],{"class":69,"line":155},[67,99984,94101],{"class":202},[67,99986,99987],{"class":69,"line":161},[67,99988,99989],{"class":202},"#[array([1, 2, 3, 4]), array([5, 6, 7, 8])]\n",[67,99991,99992,99994,99996],{"class":69,"line":167},[67,99993,99976],{"class":77},[67,99995,1151],{"class":208},[67,99997,870],{"class":77},[67,99999,100000],{"class":69,"line":173},[67,100001,94101],{"class":202},[67,100003,100004],{"class":69,"line":180},[67,100005,100006],{"class":202},"#[array([1, 2]), array([3, 4]), array([5, 6]), array([7, 8])]\n",[67,100008,100009],{"class":69,"line":186},[67,100010,100011],{"class":202},"#传入数组\n",[67,100013,100014,100017,100019,100021,100023],{"class":69,"line":444},[67,100015,100016],{"class":77},"np.split(a,[",[67,100018,933],{"class":208},[67,100020,1236],{"class":77},[67,100022,1177],{"class":208},[67,100024,5376],{"class":77},[67,100026,100027],{"class":69,"line":2335},[67,100028,94101],{"class":202},[67,100030,100031],{"class":69,"line":2340},[67,100032,100033],{"class":202},"#[array([1, 2, 3]), array([4, 5]), array([6, 7, 8])]\n",[67,100035,100036,100038,100040,100042,100044],{"class":69,"line":2346},[67,100037,100016],{"class":77},[67,100039,1177],{"class":208},[67,100041,1236],{"class":77},[67,100043,1227],{"class":208},[67,100045,5376],{"class":77},[67,100047,100048],{"class":69,"line":2351},[67,100049,94101],{"class":202},[67,100051,100052],{"class":69,"line":2365},[67,100053,100054],{"class":202},"#[array([1, 2, 3, 4, 5]), array([6, 7]), array([8])]\n",[19,100056,100057],{},"②二维数组的分割",[19,100059,100060],{},"使用split()",[57,100062,100064],{"className":30915,"code":100063,"language":30917,"meta":62,"style":62},"#二维数组分割\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",[64,100065,100066,100071,100095,100100,100109,100113,100117,100122,100127,100132,100137,100142,100147,100152,100156,100169,100173,100177,100181,100185,100189,100194,100199,100204,100208,100213,100229,100233,100237,100242,100247,100252,100257,100262,100267,100272,100277,100282,100287,100292,100297,100302,100307,100312,100317,100322,100327,100331,100335,100355,100359,100363,100368,100373,100378,100383,100388,100393,100398,100403,100408,100413,100418,100423,100428,100433,100438,100443,100448,100453,100457,100462,100471,100475,100479,100483,100487,100491,100495,100499,100503,100507,100516,100520,100524,100528,100532,100536,100540,100544,100548,100552,100556,100560,100564,100568,100572,100576,100580,100584,100588,100592,100596,100600,100613,100617,100621,100625,100629,100633,100637,100641,100645],{"__ignoreMap":62},[67,100067,100068],{"class":69,"line":70},[67,100069,100070],{"class":202},"#二维数组分割\n",[67,100072,100073,100075,100077,100079,100081,100083,100085,100087,100089,100091,100093],{"class":69,"line":143},[67,100074,93843],{"class":77},[67,100076,909],{"class":73},[67,100078,93539],{"class":77},[67,100080,1077],{"class":208},[67,100082,1236],{"class":77},[67,100084,1183],{"class":208},[67,100086,93544],{"class":77},[67,100088,1202],{"class":208},[67,100090,1236],{"class":77},[67,100092,1202],{"class":208},[67,100094,870],{"class":77},[67,100096,100097],{"class":69,"line":149},[67,100098,100099],{"class":202},"#默认axis=0  传入整数平均分,按行来的\n",[67,100101,100102,100105,100107],{"class":69,"line":155},[67,100103,100104],{"class":77},"np.split(aa,",[67,100106,933],{"class":208},[67,100108,870],{"class":77},[67,100110,100111],{"class":69,"line":161},[67,100112,96301],{"class":202},[67,100114,100115],{"class":69,"line":167},[67,100116,94465],{"class":84},[67,100118,100119],{"class":69,"line":173},[67,100120,100121],{"class":84},"[array([[ 1,  2,  3,  4,  5,  6],\n",[67,100123,100124],{"class":69,"line":180},[67,100125,100126],{"class":84},"        [ 7,  8,  9, 10, 11, 12]]),\n",[67,100128,100129],{"class":69,"line":186},[67,100130,100131],{"class":84}," array([[13, 14, 15, 16, 17, 18],\n",[67,100133,100134],{"class":69,"line":444},[67,100135,100136],{"class":84},"        [19, 20, 21, 22, 23, 24]]),\n",[67,100138,100139],{"class":69,"line":2335},[67,100140,100141],{"class":84}," array([[25, 26, 27, 28, 29, 30],\n",[67,100143,100144],{"class":69,"line":2340},[67,100145,100146],{"class":84},"        [31, 32, 33, 34, 35, 36]])]\n",[67,100148,100149],{"class":69,"line":2346},[67,100150,100151],{"class":84}," '''\n",[67,100153,100154],{"class":69,"line":2351},[67,100155,100011],{"class":202},[67,100157,100158,100161,100163,100165,100167],{"class":69,"line":2365},[67,100159,100160],{"class":77},"np.split(aa,[",[67,100162,939],{"class":208},[67,100164,1236],{"class":77},[67,100166,1177],{"class":208},[67,100168,5376],{"class":77},[67,100170,100171],{"class":69,"line":2370},[67,100172,96301],{"class":202},[67,100174,100175],{"class":69,"line":2376},[67,100176,94465],{"class":84},[67,100178,100179],{"class":69,"line":2397},[67,100180,100121],{"class":84},[67,100182,100183],{"class":69,"line":2402},[67,100184,100126],{"class":84},[67,100186,100187],{"class":69,"line":2416},[67,100188,100131],{"class":84},[67,100190,100191],{"class":69,"line":2421},[67,100192,100193],{"class":84},"        [19, 20, 21, 22, 23, 24],\n",[67,100195,100196],{"class":69,"line":2450},[67,100197,100198],{"class":84},"        [25, 26, 27, 28, 29, 30]]),\n",[67,100200,100201],{"class":69,"line":2455},[67,100202,100203],{"class":84}," array([[31, 32, 33, 34, 35, 36]])]\n",[67,100205,100206],{"class":69,"line":2472},[67,100207,94465],{"class":84},[67,100209,100210],{"class":69,"line":2477},[67,100211,100212],{"class":202},"#axis=1 按照列来分\n",[67,100214,100215,100217,100219,100221,100223,100225,100227],{"class":69,"line":2482},[67,100216,100104],{"class":77},[67,100218,933],{"class":208},[67,100220,1236],{"class":77},[67,100222,48051],{"class":5935},[67,100224,909],{"class":73},[67,100226,1077],{"class":208},[67,100228,870],{"class":77},[67,100230,100231],{"class":69,"line":2487},[67,100232,96301],{"class":202},[67,100234,100235],{"class":69,"line":2501},[67,100236,94465],{"class":84},[67,100238,100239],{"class":69,"line":2506},[67,100240,100241],{"class":84},"[array([[ 1,  2],\n",[67,100243,100244],{"class":69,"line":3298},[67,100245,100246],{"class":84},"        [ 7,  8],\n",[67,100248,100249],{"class":69,"line":3312},[67,100250,100251],{"class":84},"        [13, 14],\n",[67,100253,100254],{"class":69,"line":3320},[67,100255,100256],{"class":84},"        [19, 20],\n",[67,100258,100259],{"class":69,"line":3325},[67,100260,100261],{"class":84},"        [25, 26],\n",[67,100263,100264],{"class":69,"line":3331},[67,100265,100266],{"class":84},"        [31, 32]]),\n",[67,100268,100269],{"class":69,"line":3337},[67,100270,100271],{"class":84}," array([[ 3,  4],\n",[67,100273,100274],{"class":69,"line":3342},[67,100275,100276],{"class":84},"        [ 9, 10],\n",[67,100278,100279],{"class":69,"line":8667},[67,100280,100281],{"class":84},"        [15, 16],\n",[67,100283,100284],{"class":69,"line":8691},[67,100285,100286],{"class":84},"        [21, 22],\n",[67,100288,100289],{"class":69,"line":8696},[67,100290,100291],{"class":84},"        [27, 28],\n",[67,100293,100294],{"class":69,"line":8702},[67,100295,100296],{"class":84},"        [33, 34]]),\n",[67,100298,100299],{"class":69,"line":8729},[67,100300,100301],{"class":84}," array([[ 5,  6],\n",[67,100303,100304],{"class":69,"line":8734},[67,100305,100306],{"class":84},"        [11, 12],\n",[67,100308,100309],{"class":69,"line":8740},[67,100310,100311],{"class":84},"        [17, 18],\n",[67,100313,100314],{"class":69,"line":8752},[67,100315,100316],{"class":84},"        [23, 24],\n",[67,100318,100319],{"class":69,"line":8764},[67,100320,100321],{"class":84},"        [29, 30],\n",[67,100323,100324],{"class":69,"line":8776},[67,100325,100326],{"class":84},"        [35, 36]])]\n",[67,100328,100329],{"class":69,"line":10435},[67,100330,100151],{"class":84},[67,100332,100333],{"class":69,"line":10459},[67,100334,100011],{"class":202},[67,100336,100337,100339,100341,100343,100345,100347,100349,100351,100353],{"class":69,"line":10482},[67,100338,100160],{"class":77},[67,100340,1077],{"class":208},[67,100342,1236],{"class":77},[67,100344,939],{"class":208},[67,100346,42146],{"class":77},[67,100348,48051],{"class":5935},[67,100350,909],{"class":73},[67,100352,1077],{"class":208},[67,100354,870],{"class":77},[67,100356,100357],{"class":69,"line":10506},[67,100358,94101],{"class":202},[67,100360,100361],{"class":69,"line":10511},[67,100362,94465],{"class":84},[67,100364,100365],{"class":69,"line":10516},[67,100366,100367],{"class":84},"[array([[ 1],\n",[67,100369,100370],{"class":69,"line":10521},[67,100371,100372],{"class":84},"        [ 7],\n",[67,100374,100375],{"class":69,"line":10530},[67,100376,100377],{"class":84},"        [13],\n",[67,100379,100380],{"class":69,"line":10535},[67,100381,100382],{"class":84},"        [19],\n",[67,100384,100385],{"class":69,"line":10541},[67,100386,100387],{"class":84},"        [25],\n",[67,100389,100390],{"class":69,"line":10562},[67,100391,100392],{"class":84},"        [31]]),\n",[67,100394,100395],{"class":69,"line":10568},[67,100396,100397],{"class":84}," array([[ 2],\n",[67,100399,100400],{"class":69,"line":10582},[67,100401,100402],{"class":84},"        [ 8],\n",[67,100404,100405],{"class":69,"line":10588},[67,100406,100407],{"class":84},"        [14],\n",[67,100409,100410],{"class":69,"line":10615},[67,100411,100412],{"class":84},"        [20],\n",[67,100414,100415],{"class":69,"line":10624},[67,100416,100417],{"class":84},"        [26],\n",[67,100419,100420],{"class":69,"line":10630},[67,100421,100422],{"class":84},"        [32]]),\n",[67,100424,100425],{"class":69,"line":10638},[67,100426,100427],{"class":84}," array([[ 3,  4,  5,  6],\n",[67,100429,100430],{"class":69,"line":10643},[67,100431,100432],{"class":84},"        [ 9, 10, 11, 12],\n",[67,100434,100435],{"class":69,"line":17321},[67,100436,100437],{"class":84},"        [15, 16, 17, 18],\n",[67,100439,100440],{"class":69,"line":17327},[67,100441,100442],{"class":84},"        [21, 22, 23, 24],\n",[67,100444,100445],{"class":69,"line":17350},[67,100446,100447],{"class":84},"        [27, 28, 29, 30],\n",[67,100449,100450],{"class":69,"line":17356},[67,100451,100452],{"class":84},"        [33, 34, 35, 36]])]\n",[67,100454,100455],{"class":69,"line":17379},[67,100456,94465],{"class":84},[67,100458,100459],{"class":69,"line":17393},[67,100460,100461],{"class":202},"#在处理二维数组时也可以直接用vsplit()和hsplit()函数\n",[67,100463,100464,100467,100469],{"class":69,"line":17413},[67,100465,100466],{"class":77},"np.vsplit(aa,",[67,100468,933],{"class":208},[67,100470,870],{"class":77},[67,100472,100473],{"class":69,"line":17419},[67,100474,94101],{"class":202},[67,100476,100477],{"class":69,"line":17430},[67,100478,94465],{"class":84},[67,100480,100481],{"class":69,"line":17453},[67,100482,100121],{"class":84},[67,100484,100485],{"class":69,"line":17475},[67,100486,100126],{"class":84},[67,100488,100489],{"class":69,"line":17480},[67,100490,100131],{"class":84},[67,100492,100493],{"class":69,"line":17486},[67,100494,100136],{"class":84},[67,100496,100497],{"class":69,"line":17500},[67,100498,100141],{"class":84},[67,100500,100501],{"class":69,"line":17513},[67,100502,100146],{"class":84},[67,100504,100505],{"class":69,"line":17518},[67,100506,94465],{"class":84},[67,100508,100509,100512,100514],{"class":69,"line":17532},[67,100510,100511],{"class":77},"np.hsplit(aa,",[67,100513,933],{"class":208},[67,100515,870],{"class":77},[67,100517,100518],{"class":69,"line":17537},[67,100519,94101],{"class":202},[67,100521,100522],{"class":69,"line":17543},[67,100523,94465],{"class":84},[67,100525,100526],{"class":69,"line":17548},[67,100527,100241],{"class":84},[67,100529,100530],{"class":69,"line":17562},[67,100531,100246],{"class":84},[67,100533,100534],{"class":69,"line":17567},[67,100535,100251],{"class":84},[67,100537,100538],{"class":69,"line":17572},[67,100539,100256],{"class":84},[67,100541,100542],{"class":69,"line":17586},[67,100543,100261],{"class":84},[67,100545,100546],{"class":69,"line":17598},[67,100547,100266],{"class":84},[67,100549,100550],{"class":69,"line":17603},[67,100551,100271],{"class":84},[67,100553,100554],{"class":69,"line":17616},[67,100555,100276],{"class":84},[67,100557,100558],{"class":69,"line":17621},[67,100559,100281],{"class":84},[67,100561,100562],{"class":69,"line":17626},[67,100563,100286],{"class":84},[67,100565,100566],{"class":69,"line":17631},[67,100567,100291],{"class":84},[67,100569,100570],{"class":69,"line":17644},[67,100571,100296],{"class":84},[67,100573,100574],{"class":69,"line":17649},[67,100575,100301],{"class":84},[67,100577,100578],{"class":69,"line":33170},[67,100579,100306],{"class":84},[67,100581,100582],{"class":69,"line":33176},[67,100583,100311],{"class":84},[67,100585,100586],{"class":69,"line":33182},[67,100587,100316],{"class":84},[67,100589,100590],{"class":69,"line":33188},[67,100591,100321],{"class":84},[67,100593,100594],{"class":69,"line":33194},[67,100595,100326],{"class":84},[67,100597,100598],{"class":69,"line":33205},[67,100599,94465],{"class":84},[67,100601,100602,100605,100607,100609,100611],{"class":69,"line":33211},[67,100603,100604],{"class":77},"np.vsplit(aa,[",[67,100606,939],{"class":208},[67,100608,1236],{"class":77},[67,100610,1177],{"class":208},[67,100612,5376],{"class":77},[67,100614,100615],{"class":69,"line":33231},[67,100616,94101],{"class":202},[67,100618,100619],{"class":69,"line":33237},[67,100620,94465],{"class":84},[67,100622,100623],{"class":69,"line":33248},[67,100624,100121],{"class":84},[67,100626,100627],{"class":69,"line":33254},[67,100628,100126],{"class":84},[67,100630,100631],{"class":69,"line":33260},[67,100632,100131],{"class":84},[67,100634,100635],{"class":69,"line":33266},[67,100636,100193],{"class":84},[67,100638,100639],{"class":69,"line":33272},[67,100640,100198],{"class":84},[67,100642,100643],{"class":69,"line":33278},[67,100644,100203],{"class":84},[67,100646,100647],{"class":69,"line":33284},[67,100648,100151],{"class":84},[779,100650,100651],{},"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":62,"searchDepth":143,"depth":143,"links":100653},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch8",{"title":99919,"description":24093},"wiki\u002F2025-08-14-numpy\u002Fch8-数组分割","EtL2Bly4jiNepAsv1SVPdwecsVcwy45QHq2yubCBEUA",{"id":100660,"title":100661,"body":100662,"description":24093,"extension":787,"meta":101156,"navigation":176,"path":101157,"seo":101158,"stem":101159,"__hash__":101160},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch9-数学函数.md","9.数学函数",{"type":7,"value":100663,"toc":101147},[100664,100667,100670,100695,100699,100758,100810,100814,100816,100852,100906,100908,100946,101017,101021,101026,101030,101033,101066,101069,101073,101076,101079,101082,101085,101090,101094,101097,101100,101103,101106,101111,101115,101120,101123,101144],[10,100665,100661],{"id":100666},"_9数学函数",[19,100668,100669],{},"补充回顾：python的列表推导式",[57,100671,100673],{"className":30915,"code":100672,"language":30917,"meta":62,"style":62},"[1\u002Fi for i in a]\n",[64,100674,100675],{"__ignoreMap":62},[67,100676,100677,100679,100681,100683,100686,100688,100690,100692],{"class":69,"line":70},[67,100678,1746],{"class":77},[67,100680,1077],{"class":208},[67,100682,1440],{"class":73},[67,100684,100685],{"class":77},"i ",[67,100687,74],{"class":73},[67,100689,10157],{"class":77},[67,100691,81],{"class":73},[67,100693,100694],{"class":77}," a]\n",[803,100696,100698],{"id":100697},"_91-求倒数","9.1 求倒数",[57,100700,100702],{"className":30915,"code":100701,"language":30917,"meta":62,"style":62},"#数组求倒数\na=[1,2,3,4,5]\nb=np.array(a)#将列表转换为数组\n1\u002Fb\n",[64,100703,100704,100709,100737,100749],{"__ignoreMap":62},[67,100705,100706],{"class":69,"line":70},[67,100707,100708],{"class":202},"#数组求倒数\n",[67,100710,100711,100713,100715,100717,100719,100721,100723,100725,100727,100729,100731,100733,100735],{"class":69,"line":143},[67,100712,28],{"class":77},[67,100714,909],{"class":73},[67,100716,1746],{"class":77},[67,100718,1077],{"class":208},[67,100720,1236],{"class":77},[67,100722,939],{"class":208},[67,100724,1236],{"class":77},[67,100726,933],{"class":208},[67,100728,1236],{"class":77},[67,100730,1151],{"class":208},[67,100732,1236],{"class":77},[67,100734,1177],{"class":208},[67,100736,33783],{"class":77},[67,100738,100739,100741,100743,100746],{"class":69,"line":149},[67,100740,1121],{"class":77},[67,100742,909],{"class":73},[67,100744,100745],{"class":77},"np.array(a)",[67,100747,100748],{"class":202},"#将列表转换为数组\n",[67,100750,100751,100753,100755],{"class":69,"line":155},[67,100752,1077],{"class":208},[67,100754,1440],{"class":73},[67,100756,100757],{"class":77},"b\n",[57,100759,100761],{"className":30915,"code":100760,"language":30917,"meta":62,"style":62},"a=[1,2,3,4,5]\nb=np.array(a)\n#调用numpy中的函数reciprocal()\nnp.reciprocal(b)\n",[64,100762,100763,100791,100800,100805],{"__ignoreMap":62},[67,100764,100765,100767,100769,100771,100773,100775,100777,100779,100781,100783,100785,100787,100789],{"class":69,"line":70},[67,100766,28],{"class":77},[67,100768,909],{"class":73},[67,100770,1746],{"class":77},[67,100772,1077],{"class":208},[67,100774,1236],{"class":77},[67,100776,939],{"class":208},[67,100778,1236],{"class":77},[67,100780,933],{"class":208},[67,100782,1236],{"class":77},[67,100784,1151],{"class":208},[67,100786,1236],{"class":77},[67,100788,1177],{"class":208},[67,100790,33783],{"class":77},[67,100792,100793,100795,100797],{"class":69,"line":143},[67,100794,1121],{"class":77},[67,100796,909],{"class":73},[67,100798,100799],{"class":77},"np.array(a)\n",[67,100801,100802],{"class":69,"line":149},[67,100803,100804],{"class":202},"#调用numpy中的函数reciprocal()\n",[67,100806,100807],{"class":69,"line":155},[67,100808,100809],{"class":77},"np.reciprocal(b)\n",[803,100811,100813],{"id":100812},"_92-求平方","9.2 求平方",[19,100815,95067],{},[57,100817,100819],{"className":30915,"code":100818,"language":30917,"meta":62,"style":62},"#square()，求平方\n#一维数组\na=np.arange(1,10)\nnp.square(a)\n",[64,100820,100821,100826,100831,100847],{"__ignoreMap":62},[67,100822,100823],{"class":69,"line":70},[67,100824,100825],{"class":202},"#square()，求平方\n",[67,100827,100828],{"class":69,"line":143},[67,100829,100830],{"class":202},"#一维数组\n",[67,100832,100833,100835,100837,100839,100841,100843,100845],{"class":69,"line":149},[67,100834,28],{"class":77},[67,100836,909],{"class":73},[67,100838,93539],{"class":77},[67,100840,1077],{"class":208},[67,100842,1236],{"class":77},[67,100844,1303],{"class":208},[67,100846,870],{"class":77},[67,100848,100849],{"class":69,"line":155},[67,100850,100851],{"class":77},"np.square(a)\n",[57,100853,100855],{"className":30915,"code":100854,"language":30917,"meta":62,"style":62},"#或者通过循环遍历的形式来计算\n#这是一个列表\n[i*i for i in a]#这个求完之后在数列当中\nnp.array([i*i for i in a])\n",[64,100856,100857,100862,100867,100888],{"__ignoreMap":62},[67,100858,100859],{"class":69,"line":70},[67,100860,100861],{"class":202},"#或者通过循环遍历的形式来计算\n",[67,100863,100864],{"class":69,"line":143},[67,100865,100866],{"class":202},"#这是一个列表\n",[67,100868,100869,100872,100874,100876,100878,100880,100882,100885],{"class":69,"line":149},[67,100870,100871],{"class":77},"[i",[67,100873,1312],{"class":73},[67,100875,100685],{"class":77},[67,100877,74],{"class":73},[67,100879,10157],{"class":77},[67,100881,81],{"class":73},[67,100883,100884],{"class":77}," a]",[67,100886,100887],{"class":202},"#这个求完之后在数列当中\n",[67,100889,100890,100893,100895,100897,100899,100901,100903],{"class":69,"line":155},[67,100891,100892],{"class":77},"np.array([i",[67,100894,1312],{"class":73},[67,100896,100685],{"class":77},[67,100898,74],{"class":73},[67,100900,10157],{"class":77},[67,100902,81],{"class":73},[67,100904,100905],{"class":77}," a])\n",[19,100907,93828],{},[57,100909,100911],{"className":30915,"code":100910,"language":30917,"meta":62,"style":62},"#二维数组\naa=np.arange(1,13).reshape(4,3)\nnp.square(aa)\n",[64,100912,100913,100917,100941],{"__ignoreMap":62},[67,100914,100915],{"class":69,"line":70},[67,100916,93838],{"class":202},[67,100918,100919,100921,100923,100925,100927,100929,100931,100933,100935,100937,100939],{"class":69,"line":143},[67,100920,93843],{"class":77},[67,100922,909],{"class":73},[67,100924,93539],{"class":77},[67,100926,1077],{"class":208},[67,100928,1236],{"class":77},[67,100930,1380],{"class":208},[67,100932,93544],{"class":77},[67,100934,1151],{"class":208},[67,100936,1236],{"class":77},[67,100938,933],{"class":208},[67,100940,870],{"class":77},[67,100942,100943],{"class":69,"line":149},[67,100944,100945],{"class":77},"np.square(aa)\n",[57,100947,100949],{"className":30915,"code":100948,"language":30917,"meta":62,"style":62},"#传统的方式\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",[64,100950,100951,100956,100965,100981,100997,101012],{"__ignoreMap":62},[67,100952,100953],{"class":69,"line":70},[67,100954,100955],{"class":202},"#传统的方式\n",[67,100957,100958,100960,100962],{"class":69,"line":143},[67,100959,98724],{"class":77},[67,100961,909],{"class":73},[67,100963,100964],{"class":77},"np.empty_like(aa)\n",[67,100966,100967,100969,100971,100973,100975,100977,100979],{"class":69,"line":149},[67,100968,74],{"class":73},[67,100970,10157],{"class":77},[67,100972,81],{"class":73},[67,100974,32980],{"class":208},[67,100976,864],{"class":77},[67,100978,1151],{"class":208},[67,100980,31323],{"class":77},[67,100982,100983,100985,100987,100989,100991,100993,100995],{"class":69,"line":155},[67,100984,3921],{"class":73},[67,100986,10219],{"class":77},[67,100988,81],{"class":73},[67,100990,32980],{"class":208},[67,100992,864],{"class":77},[67,100994,933],{"class":208},[67,100996,31323],{"class":77},[67,100998,100999,101002,101004,101007,101009],{"class":69,"line":161},[67,101000,101001],{"class":77},"        bb[i,j]",[67,101003,909],{"class":73},[67,101005,101006],{"class":77},"aa[i,j]",[67,101008,1312],{"class":73},[67,101010,101011],{"class":77},"aa[i,j]\n",[67,101013,101014],{"class":69,"line":167},[67,101015,101016],{"class":77},"bb\n",[803,101018,101020],{"id":101019},"_93-求各元素的符号","9.3 求各元素的符号",[19,101022,101023],{},[725,101024],{"alt":62,"src":101025},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-028.png",[803,101027,101029],{"id":101028},"_94-modf函数","9.4 modf函数",[19,101031,101032],{},"计算各元素的小数部分和整数部分以两个独立的数组返回",[57,101034,101036],{"className":30915,"code":101035,"language":30917,"meta":62,"style":62},"a=np.arange(-10,10,0.3)\nnp.modf(a)\n",[64,101037,101038,101061],{"__ignoreMap":62},[67,101039,101040,101042,101044,101046,101048,101050,101052,101054,101056,101059],{"class":69,"line":70},[67,101041,28],{"class":77},[67,101043,909],{"class":73},[67,101045,93539],{"class":77},[67,101047,1389],{"class":73},[67,101049,1303],{"class":208},[67,101051,1236],{"class":77},[67,101053,1303],{"class":208},[67,101055,1236],{"class":77},[67,101057,101058],{"class":208},"0.3",[67,101060,870],{"class":77},[67,101062,101063],{"class":69,"line":143},[67,101064,101065],{"class":77},"np.modf(a)\n",[19,101067,101068],{},"总结：就是得到两个数组，一个是由小数部分组成，另一个数组是由整数部分组成",[803,101070,101072],{"id":101071},"_95-向上取整向下取整四舍五入","9.5 向上取整、向下取整、四舍五入",[19,101074,101075],{},"np.cell()",[19,101077,101078],{},"np.floor()",[19,101080,101081],{},"np.rint()",[19,101083,101084],{},"对各元素分别向上取整、向下取整、四舍五入",[19,101086,101087],{},[725,101088],{"alt":62,"src":101089},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-029.png",[803,101091,101093],{"id":101092},"_96-around函数","9.6 around()函数",[19,101095,101096],{},"around()函数也可以实现对数的小数位数进行操作",[19,101098,101099],{},"其中的参数：",[19,101101,101102],{},"1.要传的数组",[19,101104,101105],{},"2.decimals:舍入的小数位数。默认值为0。如果为负，整数将四舍五入到小数点左侧的位置",[19,101107,101108],{},[725,101109],{"alt":62,"src":101110},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-030.png",[803,101112,101114],{"id":101113},"_97-三角函数","9.7 三角函数",[19,101116,101117],{},[725,101118],{"alt":62,"src":101119},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-031.png",[19,101121,101122],{},"引入图像模块非常重要",[57,101124,101126],{"className":30915,"code":101125,"language":30917,"meta":62,"style":62},"from matplotlib import pyplot as plt\n",[64,101127,101128],{"__ignoreMap":62},[67,101129,101130,101132,101135,101137,101140,101142],{"class":69,"line":70},[67,101131,31274],{"class":73},[67,101133,101134],{"class":77}," matplotlib ",[67,101136,30929],{"class":73},[67,101138,101139],{"class":77}," pyplot ",[67,101141,31920],{"class":73},[67,101143,31974],{"class":77},[779,101145,101146],{},"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":62,"searchDepth":143,"depth":143,"links":101148},[101149,101150,101151,101152,101153,101154,101155],{"id":100697,"depth":143,"text":100698},{"id":100812,"depth":143,"text":100813},{"id":101019,"depth":143,"text":101020},{"id":101028,"depth":143,"text":101029},{"id":101071,"depth":143,"text":101072},{"id":101092,"depth":143,"text":101093},{"id":101113,"depth":143,"text":101114},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch9",{"title":100661,"description":24093},"wiki\u002F2025-08-14-numpy\u002Fch9-数学函数","1vxUPQoUv_FZuP3od2FOv2EdjAo9vkX9v0c_KhgwghE",{"id":101162,"title":101163,"body":101164,"description":24093,"extension":787,"meta":101168,"navigation":176,"path":101169,"seo":101170,"stem":101171,"__hash__":101172},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Findex.md","numpy",{"type":7,"value":101165,"toc":101166},[],{"title":62,"searchDepth":143,"depth":143,"links":101167},[],{"category":50957},"\u002Fwiki\u002F2025-08-14-numpy",{"title":101163,"description":24093},"wiki\u002F2025-08-14-numpy\u002Findex","LNFBKvmcgRD1D7XQFRHkBXoHVybQyN9jvfse3YyadCE",{"id":101174,"title":101175,"body":101176,"description":62,"extension":787,"meta":103184,"navigation":176,"path":103185,"seo":103186,"stem":103187,"__hash__":103188},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序.md","1.环境安装与第一个 MuJoCo 程序",{"type":7,"value":101177,"toc":103160},[101178,101181,101185,101188,101191,101197,101200,101223,101226,101260,101263,101304,101308,101311,101404,101407,101451,101454,101471,101474,101488,101491,101494,101539,101542,101579,101583,101586,101592,101597,101617,101621,101624,101690,101693,101711,101715,101718,101747,101757,101763,101767,101770,101776,101787,101791,101794,101824,101827,102107,102110,102113,102124,102127,102130,102152,102159,102162,102180,102183,102186,102200,102208,102211,102237,102243,102246,102249,102259,102271,102291,102300,102320,102330,102354,102367,102381,102386,102427,102444,102469,102481,102501,102507,102552,102571,102588,102601,102617,102624,102636,102645,102680,102701,102726,102739,102763,102778,102803,102806,102827,102836,102839,102850,102854,102857,102863,102875,102882,102886,102889,102901,102904,102918,102921,102931,102941,102944,102984,102987,102991,102997,103000,103014,103018,103021,103054,103058,103061,103084,103092,103095,103101,103107,103110,103113,103141,103145,103148,103154,103157],[10,101179,101175],{"id":101180},"_1环境安装与第一个-mujoco-程序",[803,101182,101184],{"id":101183},"_1目标说明","1.目标说明",[19,101186,101187],{},"本章完成 MuJoCo 官方 Python bindings 的安装，并运行第一个最小仿真程序。这个程序只做一件事：创建一个红色小方块，让它在重力作用下下落。",[19,101189,101190],{},"如果你是纯新手，本章最重要的目标不是记住所有安装命令，而是理解 MuJoCo 程序的最小闭环：",[57,101192,101195],{"className":101193,"code":101194,"language":5906,"meta":62},[5904],"写 XML\n→ 编译成 model\n→ 创建 data\n→ 调用 mj_step\n→ 读取仿真状态\n",[64,101196,101194],{"__ignoreMap":62},[19,101198,101199],{},"需要掌握:",[815,101201,101202,101205,101208,101213,101218],{},[818,101203,101204],{},"Fedora 44 下 MuJoCo 的系统依赖",[818,101206,101207],{},"Python 虚拟环境创建",[818,101209,101210],{},[64,101211,101212],{},"mujoco.MjModel",[818,101214,101215],{},[64,101216,101217],{},"mujoco.MjData",[818,101219,101220],{},[64,101221,101222],{},"mujoco.mj_step(model, data)",[19,101224,101225],{},"MuJoCo 中最重要的两个对象:",[998,101227,101228,101238],{},[1001,101229,101230],{},[1004,101231,101232,101235],{},[1007,101233,101234],{"align":24453},"对象",[1007,101236,101237],{"align":24453},"含义",[1044,101239,101240,101250],{},[1004,101241,101242,101247],{},[1049,101243,101244],{"align":24453},[64,101245,101246],{},"MjModel",[1049,101248,101249],{"align":24453},"模型结构，来自 XML，基本不随时间变化",[1004,101251,101252,101257],{},[1049,101253,101254],{"align":24453},[64,101255,101256],{},"MjData",[1049,101258,101259],{"align":24453},"仿真状态，包含位置、速度、力、时间等，会随仿真推进变化",[19,101261,101262],{},"可以先用一个类比理解：",[998,101264,101265,101275],{},[1001,101266,101267],{},[1004,101268,101269,101272],{},[1007,101270,101271],{"align":24453},"类比",[1007,101273,101274],{"align":24453},"MuJoCo 对象",[1044,101276,101277,101286,101295],{},[1004,101278,101279,101282],{},[1049,101280,101281],{"align":24453},"游戏地图和角色配置",[1049,101283,101284],{"align":24453},[64,101285,101246],{},[1004,101287,101288,101291],{},[1049,101289,101290],{"align":24453},"游戏运行到当前帧的状态",[1049,101292,101293],{"align":24453},[64,101294,101256],{},[1004,101296,101297,101300],{},[1049,101298,101299],{"align":24453},"前进一帧",[1049,101301,101302],{"align":24453},[64,101303,101222],{},[803,101305,101307],{"id":101306},"_2环境与依赖安装","2.环境与依赖安装",[19,101309,101310],{},"Fedora 44 系统依赖:",[57,101312,101314],{"className":59,"code":101313,"language":61,"meta":62,"style":62},"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",[64,101315,101316,101328,101341,101354,101364,101374,101393],{"__ignoreMap":62},[67,101317,101318,101320,101322,101324,101326],{"class":69,"line":70},[67,101319,298],{"class":112},[67,101321,378],{"class":84},[67,101323,312],{"class":84},[67,101325,464],{"class":208},[67,101327,212],{"class":208},[67,101329,101330,101333,101336,101339],{"class":69,"line":143},[67,101331,101332],{"class":84},"  python3",[67,101334,101335],{"class":84}," python3-pip",[67,101337,101338],{"class":84}," python3-virtualenv",[67,101340,212],{"class":208},[67,101342,101343,101346,101349,101352],{"class":69,"line":149},[67,101344,101345],{"class":84},"  mesa-libGL",[67,101347,101348],{"class":84}," mesa-libGLU",[67,101350,101351],{"class":84}," mesa-dri-drivers",[67,101353,212],{"class":208},[67,101355,101356,101359,101362],{"class":69,"line":155},[67,101357,101358],{"class":84},"  libglvnd-glx",[67,101360,101361],{"class":84}," libglvnd-opengl",[67,101363,212],{"class":208},[67,101365,101366,101369,101372],{"class":69,"line":161},[67,101367,101368],{"class":84},"  glfw",[67,101370,101371],{"class":84}," glfw-devel",[67,101373,212],{"class":208},[67,101375,101376,101379,101382,101385,101388,101391],{"class":69,"line":167},[67,101377,101378],{"class":84},"  libX11",[67,101380,101381],{"class":84}," libXcursor",[67,101383,101384],{"class":84}," libXi",[67,101386,101387],{"class":84}," libXinerama",[67,101389,101390],{"class":84}," libXrandr",[67,101392,212],{"class":208},[67,101394,101395,101398,101401],{"class":69,"line":173},[67,101396,101397],{"class":84},"  gcc",[67,101399,101400],{"class":84}," gcc-c++",[67,101402,101403],{"class":84}," make\n",[19,101405,101406],{},"创建 Python 环境:",[57,101408,101410],{"className":59,"code":101409,"language":61,"meta":62,"style":62},"python3 -m venv .venv\nsource .venv\u002Fbin\u002Factivate\npython -m pip install --upgrade pip\n",[64,101411,101412,101426,101434],{"__ignoreMap":62},[67,101413,101414,101417,101420,101423],{"class":69,"line":70},[67,101415,101416],{"class":112},"python3",[67,101418,101419],{"class":208}," -m",[67,101421,101422],{"class":84}," venv",[67,101424,101425],{"class":84}," .venv\n",[67,101427,101428,101431],{"class":69,"line":143},[67,101429,101430],{"class":208},"source",[67,101432,101433],{"class":84}," .venv\u002Fbin\u002Factivate\n",[67,101435,101436,101438,101440,101443,101445,101448],{"class":69,"line":149},[67,101437,30917],{"class":112},[67,101439,101419],{"class":208},[67,101441,101442],{"class":84}," pip",[67,101444,312],{"class":84},[67,101446,101447],{"class":208}," --upgrade",[67,101449,101450],{"class":84}," pip\n",[19,101452,101453],{},"pip 安装:",[57,101455,101457],{"className":59,"code":101456,"language":61,"meta":62,"style":62},"pip install \"mujoco>=2.3\" numpy\n",[64,101458,101459],{"__ignoreMap":62},[67,101460,101461,101463,101465,101468],{"class":69,"line":70},[67,101462,24546],{"class":112},[67,101464,312],{"class":84},[67,101466,101467],{"class":84}," \"mujoco>=2.3\"",[67,101469,101470],{"class":84}," numpy\n",[19,101472,101473],{},"安装完成后，先做最小检查：",[57,101475,101477],{"className":59,"code":101476,"language":61,"meta":62,"style":62},"python -c \"import mujoco; print(mujoco.__version__)\"\n",[64,101478,101479],{"__ignoreMap":62},[67,101480,101481,101483,101485],{"class":69,"line":70},[67,101482,30917],{"class":112},[67,101484,30895],{"class":208},[67,101486,101487],{"class":84}," \"import mujoco; print(mujoco.__version__)\"\n",[19,101489,101490],{},"只要能打印版本号，说明 Python 已经能找到 MuJoCo。",[19,101492,101493],{},"conda 安装:",[57,101495,101497],{"className":59,"code":101496,"language":61,"meta":62,"style":62},"conda create -n mujoco-study python=3.10 -y\nconda activate mujoco-study\npip install \"mujoco>=2.3\" numpy\n",[64,101498,101499,101519,101529],{"__ignoreMap":62},[67,101500,101501,101503,101505,101507,101510,101513,101516],{"class":69,"line":70},[67,101502,30867],{"class":112},[67,101504,29713],{"class":84},[67,101506,25825],{"class":208},[67,101508,101509],{"class":84}," mujoco-study",[67,101511,101512],{"class":84}," python=",[67,101514,101515],{"class":208},"3.10",[67,101517,101518],{"class":208}," -y\n",[67,101520,101521,101523,101526],{"class":69,"line":143},[67,101522,30867],{"class":112},[67,101524,101525],{"class":84}," activate",[67,101527,101528],{"class":84}," mujoco-study\n",[67,101530,101531,101533,101535,101537],{"class":69,"line":149},[67,101532,24546],{"class":112},[67,101534,312],{"class":84},[67,101536,101467],{"class":84},[67,101538,101470],{"class":84},[19,101540,101541],{},"版本冲突说明:",[815,101543,101544,101550,101560,101569],{},[818,101545,101546,101547,28922],{},"不要安装 ",[64,101548,101549],{},"mujoco-py",[818,101551,101552,101553,101555,101556,101559],{},"如果旧项目里同时安装了 ",[64,101554,101549],{}," 和 ",[64,101557,101558],{},"mujoco","，建议新建干净虚拟环境。",[818,101561,101562,101565,101566,28922],{},[64,101563,101564],{},"mujoco>=2.3"," 官方 Python bindings 已包含 MuJoCo 原生库，不需要手动下载旧版 ",[64,101567,101568],{},"~\u002F.mujoco\u002Fmujoco210",[818,101570,101571,101572,83076,101575,101578],{},"离屏渲染可能涉及 OpenGL 后端，",[64,101573,101574],{},"MUJOCO_GL=egl",[64,101576,101577],{},"MUJOCO_GL=osmesa"," 在不同机器上可能存在版本差异。",[803,101580,101582],{"id":101581},"_3核心概念解释","3.核心概念解释",[19,101584,101585],{},"MuJoCo 的基本执行流程:",[57,101587,101590],{"className":101588,"code":101589,"language":5906,"meta":62},[5904],"XML 字符串\u002F文件\n→ MjModel\n→ MjData\n→ mj_step\n→ 读取 data 中的状态\n",[64,101591,101589],{"__ignoreMap":62},[19,101593,101594,101596],{},[64,101595,101246],{}," 存放模型定义，例如关节数量、几何体数量、actuator 数量、timestep、body 层级结构。",[19,101598,101599,101601,101602,1072,101605,1072,101608,1072,101611,1072,101614,28922],{},[64,101600,101256],{}," 存放仿真运行时状态，例如 ",[64,101603,101604],{},"data.time",[64,101606,101607],{},"data.qpos",[64,101609,101610],{},"data.qvel",[64,101612,101613],{},"data.ctrl",[64,101615,101616],{},"data.xpos",[14,101618,101620],{"id":101619},"xml-是什么","XML 是什么",[19,101622,101623],{},"MuJoCo 默认使用 MJCF XML 描述模型。你暂时不用完整学习 XML，只要知道它是一种带层级结构的文本格式：",[57,101625,101627],{"className":53604,"code":101626,"language":53606,"meta":62,"style":62},"\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",[64,101628,101629,101651,101682],{"__ignoreMap":62},[67,101630,101631,101633,101635,101637,101639,101641,101644,101646,101649],{"class":69,"line":70},[67,101632,1766],{"class":77},[67,101634,52337],{"class":51837},[67,101636,15637],{"class":112},[67,101638,909],{"class":77},[67,101640,54028],{"class":84},[67,101642,101643],{"class":112}," pos",[67,101645,909],{"class":77},[67,101647,101648],{"class":84},"\"0 0 1\"",[67,101650,51844],{"class":77},[67,101652,101653,101655,101658,101660,101662,101665,101667,101669,101671,101674,101676,101679],{"class":69,"line":143},[67,101654,52681],{"class":77},[67,101656,101657],{"class":51837},"geom",[67,101659,15637],{"class":112},[67,101661,909],{"class":77},[67,101663,101664],{"class":84},"\"box_geom\"",[67,101666,54361],{"class":112},[67,101668,909],{"class":77},[67,101670,54028],{"class":84},[67,101672,101673],{"class":112}," size",[67,101675,909],{"class":77},[67,101677,101678],{"class":84},"\"0.1 0.1 0.1\"",[67,101680,101681],{"class":77},"\u002F>\n",[67,101683,101684,101686,101688],{"class":69,"line":149},[67,101685,52322],{"class":77},[67,101687,52337],{"class":51837},[67,101689,51844],{"class":77},[19,101691,101692],{},"这段意思是：",[815,101694,101695,101701,101708],{},[818,101696,101697,101698,101700],{},"创建一个叫 ",[64,101699,54251],{}," 的刚体。",[818,101702,101703,101704,101707],{},"它初始放在 ",[64,101705,101706],{},"(0, 0, 1)","，也就是 z 轴高度为 1。",[818,101709,101710],{},"它里面有一个盒子形状的几何体。",[14,101712,101714],{"id":101713},"timestep-是什么","timestep 是什么",[19,101716,101717],{},"XML 里的：",[57,101719,101721],{"className":53604,"code":101720,"language":53606,"meta":62,"style":62},"\u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[64,101722,101723],{"__ignoreMap":62},[67,101724,101725,101727,101729,101732,101734,101737,101740,101742,101745],{"class":69,"line":70},[67,101726,1766],{"class":77},[67,101728,69703],{"class":51837},[67,101730,101731],{"class":112}," timestep",[67,101733,909],{"class":77},[67,101735,101736],{"class":84},"\"0.01\"",[67,101738,101739],{"class":112}," gravity",[67,101741,909],{"class":77},[67,101743,101744],{"class":84},"\"0 0 -9.81\"",[67,101746,101681],{"class":77},[19,101748,101749,101750,101753,101754,101756],{},"表示每调用一次 ",[64,101751,101752],{},"mj_step","，仿真时间前进 ",[64,101755,39523],{}," 秒。循环 100 次，大约就是 1 秒：",[57,101758,101761],{"className":101759,"code":101760,"language":5906,"meta":62},[5904],"100 steps * 0.01 second\u002Fstep = 1.0 second\n",[64,101762,101760],{"__ignoreMap":62},[14,101764,101766],{"id":101765},"为什么-freejoint-的-qpos-是-7-维","为什么 freejoint 的 qpos 是 7 维",[19,101768,101769],{},"自由物体在三维空间里可以平移和旋转。MuJoCo 用：",[57,101771,101774],{"className":101772,"code":101773,"language":5906,"meta":62},[5904],"x y z qw qx qy qz\n",[64,101775,101773],{"__ignoreMap":62},[19,101777,101778,101779,101782,101783,101786],{},"表示一个自由刚体的位置和姿态。其中 ",[64,101780,101781],{},"x y z"," 是位置，",[64,101784,101785],{},"qw qx qy qz"," 是四元数，用来表示旋转。新手不需要马上掌握四元数，只要知道它是“姿态”的表示方法。",[803,101788,101790],{"id":101789},"_4最小可运行代码mre","4.最小可运行代码（MRE）",[19,101792,101793],{},"新建文件:",[57,101795,101797],{"className":59,"code":101796,"language":61,"meta":62,"style":62},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\ntouch ch1_first_sim.py\n",[64,101798,101799,101809,101816],{"__ignoreMap":62},[67,101800,101801,101804,101806],{"class":69,"line":70},[67,101802,101803],{"class":112},"mkdir",[67,101805,29753],{"class":208},[67,101807,101808],{"class":84}," mujoco_tutorial\n",[67,101810,101811,101814],{"class":69,"line":143},[67,101812,101813],{"class":208},"cd",[67,101815,101808],{"class":84},[67,101817,101818,101821],{"class":69,"line":149},[67,101819,101820],{"class":112},"touch",[67,101822,101823],{"class":84}," ch1_first_sim.py\n",[19,101825,101826],{},"写入:",[57,101828,101830],{"className":30915,"code":101829,"language":30917,"meta":62,"style":62},"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",[64,101831,101832,101839,101843,101847,101857,101862,101867,101871,101876,101881,101885,101890,101895,101900,101905,101910,101915,101919,101923,101927,101940,101954,101964,101968,101980,101992,102004,102016,102028,102032,102049,102054,102058,102069,102080,102084,102088,102102],{"__ignoreMap":62},[67,101833,101834,101836],{"class":69,"line":70},[67,101835,30929],{"class":73},[67,101837,101838],{"class":77}," mujoco\n",[67,101840,101841],{"class":69,"line":143},[67,101842,177],{"emptyLinePlaceholder":176},[67,101844,101845],{"class":69,"line":149},[67,101846,177],{"emptyLinePlaceholder":176},[67,101848,101849,101852,101854],{"class":69,"line":155},[67,101850,101851],{"class":208},"XML",[67,101853,14282],{"class":73},[67,101855,101856],{"class":84}," \"\"\"\n",[67,101858,101859],{"class":69,"line":161},[67,101860,101861],{"class":84},"\u003Cmujoco model=\"first_sim\">\n",[67,101863,101864],{"class":69,"line":167},[67,101865,101866],{"class":84},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[67,101868,101869],{"class":69,"line":173},[67,101870,177],{"emptyLinePlaceholder":176},[67,101872,101873],{"class":69,"line":180},[67,101874,101875],{"class":84},"  \u003Cworldbody>\n",[67,101877,101878],{"class":69,"line":186},[67,101879,101880],{"class":84},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[67,101882,101883],{"class":69,"line":444},[67,101884,177],{"emptyLinePlaceholder":176},[67,101886,101887],{"class":69,"line":2335},[67,101888,101889],{"class":84},"    \u003Cbody name=\"box\" pos=\"0 0 1\">\n",[67,101891,101892],{"class":69,"line":2340},[67,101893,101894],{"class":84},"      \u003Cfreejoint name=\"box_free\"\u002F>\n",[67,101896,101897],{"class":69,"line":2346},[67,101898,101899],{"class":84},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[67,101901,101902],{"class":69,"line":2351},[67,101903,101904],{"class":84},"    \u003C\u002Fbody>\n",[67,101906,101907],{"class":69,"line":2365},[67,101908,101909],{"class":84},"  \u003C\u002Fworldbody>\n",[67,101911,101912],{"class":69,"line":2370},[67,101913,101914],{"class":84},"\u003C\u002Fmujoco>\n",[67,101916,101917],{"class":69,"line":2376},[67,101918,96235],{"class":84},[67,101920,101921],{"class":69,"line":2397},[67,101922,177],{"emptyLinePlaceholder":176},[67,101924,101925],{"class":69,"line":2402},[67,101926,177],{"emptyLinePlaceholder":176},[67,101928,101929,101931,101933,101936,101938],{"class":69,"line":2416},[67,101930,32484],{"class":73},[67,101932,2695],{"class":112},[67,101934,101935],{"class":77},"() -> ",[67,101937,96223],{"class":208},[67,101939,4459],{"class":77},[67,101941,101942,101945,101947,101950,101952],{"class":69,"line":2421},[67,101943,101944],{"class":77},"    model ",[67,101946,909],{"class":73},[67,101948,101949],{"class":77}," mujoco.MjModel.from_xml_string(",[67,101951,101851],{"class":208},[67,101953,870],{"class":77},[67,101955,101956,101959,101961],{"class":69,"line":2450},[67,101957,101958],{"class":77},"    data ",[67,101960,909],{"class":73},[67,101962,101963],{"class":77}," mujoco.MjData(model)\n",[67,101965,101966],{"class":69,"line":2455},[67,101967,177],{"emptyLinePlaceholder":176},[67,101969,101970,101972,101974,101977],{"class":69,"line":2472},[67,101971,31836],{"class":208},[67,101973,864],{"class":77},[67,101975,101976],{"class":84},"\"nq:\"",[67,101978,101979],{"class":77},", model.nq)\n",[67,101981,101982,101984,101986,101989],{"class":69,"line":2477},[67,101983,31836],{"class":208},[67,101985,864],{"class":77},[67,101987,101988],{"class":84},"\"nv:\"",[67,101990,101991],{"class":77},", model.nv)\n",[67,101993,101994,101996,101998,102001],{"class":69,"line":2482},[67,101995,31836],{"class":208},[67,101997,864],{"class":77},[67,101999,102000],{"class":84},"\"nu:\"",[67,102002,102003],{"class":77},", model.nu)\n",[67,102005,102006,102008,102010,102013],{"class":69,"line":2487},[67,102007,31836],{"class":208},[67,102009,864],{"class":77},[67,102011,102012],{"class":84},"\"initial time:\"",[67,102014,102015],{"class":77},", data.time)\n",[67,102017,102018,102020,102022,102025],{"class":69,"line":2501},[67,102019,31836],{"class":208},[67,102021,864],{"class":77},[67,102023,102024],{"class":84},"\"initial qpos:\"",[67,102026,102027],{"class":77},", data.qpos.copy())\n",[67,102029,102030],{"class":69,"line":2506},[67,102031,177],{"emptyLinePlaceholder":176},[67,102033,102034,102036,102039,102041,102043,102045,102047],{"class":69,"line":3298},[67,102035,3921],{"class":73},[67,102037,102038],{"class":77}," _ ",[67,102040,81],{"class":73},[67,102042,32980],{"class":208},[67,102044,864],{"class":77},[67,102046,1169],{"class":208},[67,102048,31323],{"class":77},[67,102050,102051],{"class":69,"line":3312},[67,102052,102053],{"class":77},"        mujoco.mj_step(model, data)\n",[67,102055,102056],{"class":69,"line":3320},[67,102057,177],{"emptyLinePlaceholder":176},[67,102059,102060,102062,102064,102067],{"class":69,"line":3325},[67,102061,31836],{"class":208},[67,102063,864],{"class":77},[67,102065,102066],{"class":84},"\"final time:\"",[67,102068,102015],{"class":77},[67,102070,102071,102073,102075,102078],{"class":69,"line":3331},[67,102072,31836],{"class":208},[67,102074,864],{"class":77},[67,102076,102077],{"class":84},"\"final qpos:\"",[67,102079,102027],{"class":77},[67,102081,102082],{"class":69,"line":3337},[67,102083,177],{"emptyLinePlaceholder":176},[67,102085,102086],{"class":69,"line":3342},[67,102087,177],{"emptyLinePlaceholder":176},[67,102089,102090,102092,102094,102097,102100],{"class":69,"line":8667},[67,102091,2254],{"class":73},[67,102093,31757],{"class":208},[67,102095,102096],{"class":73}," ==",[67,102098,102099],{"class":84}," \"__main__\"",[67,102101,4459],{"class":77},[67,102103,102104],{"class":69,"line":8691},[67,102105,102106],{"class":77},"    main()\n",[14,102108,102109],{"id":102109},"代码逐段解释",[19,102111,102112],{},"导入库：",[57,102114,102116],{"className":30915,"code":102115,"language":30917,"meta":62,"style":62},"import mujoco\n",[64,102117,102118],{"__ignoreMap":62},[67,102119,102120,102122],{"class":69,"line":70},[67,102121,30929],{"class":73},[67,102123,101838],{"class":77},[19,102125,102126],{},"这里导入的是官方 Python bindings。后面所有 MuJoCo API 都从这个模块里调用。",[19,102128,102129],{},"定义 XML：",[57,102131,102133],{"className":30915,"code":102132,"language":30917,"meta":62,"style":62},"XML = \"\"\"\n...\n\"\"\"\n",[64,102134,102135,102143,102148],{"__ignoreMap":62},[67,102136,102137,102139,102141],{"class":69,"line":70},[67,102138,101851],{"class":208},[67,102140,14282],{"class":73},[67,102142,101856],{"class":84},[67,102144,102145],{"class":69,"line":143},[67,102146,102147],{"class":84},"...\n",[67,102149,102150],{"class":69,"line":149},[67,102151,96235],{"class":84},[19,102153,102154,102155,102158],{},"三引号字符串里放的是 MuJoCo 模型。这个模型包含地面和一个带 ",[64,102156,102157],{},"freejoint"," 的方块。",[19,102160,102161],{},"编译模型：",[57,102163,102165],{"className":30915,"code":102164,"language":30917,"meta":62,"style":62},"model = mujoco.MjModel.from_xml_string(XML)\n",[64,102166,102167],{"__ignoreMap":62},[67,102168,102169,102172,102174,102176,102178],{"class":69,"line":70},[67,102170,102171],{"class":77},"model ",[67,102173,909],{"class":73},[67,102175,101949],{"class":77},[67,102177,101851],{"class":208},[67,102179,870],{"class":77},[19,102181,102182],{},"这一步会检查 XML 是否合法，并把文本模型编译成 MuJoCo 内部可运行的物理模型。",[19,102184,102185],{},"创建数据：",[57,102187,102189],{"className":30915,"code":102188,"language":30917,"meta":62,"style":62},"data = mujoco.MjData(model)\n",[64,102190,102191],{"__ignoreMap":62},[67,102192,102193,102196,102198],{"class":69,"line":70},[67,102194,102195],{"class":77},"data ",[67,102197,909],{"class":73},[67,102199,101963],{"class":77},[19,102201,102202,102204,102205,102207],{},[64,102203,33938],{}," 会保存仿真当前状态。刚创建时，时间是 ",[64,102206,1051],{},"，方块还在初始位置。",[19,102209,102210],{},"推进仿真：",[57,102212,102214],{"className":30915,"code":102213,"language":30917,"meta":62,"style":62},"for _ in range(100):\n    mujoco.mj_step(model, data)\n",[64,102215,102216,102232],{"__ignoreMap":62},[67,102217,102218,102220,102222,102224,102226,102228,102230],{"class":69,"line":70},[67,102219,74],{"class":73},[67,102221,102038],{"class":77},[67,102223,81],{"class":73},[67,102225,32980],{"class":208},[67,102227,864],{"class":77},[67,102229,1169],{"class":208},[67,102231,31323],{"class":77},[67,102233,102234],{"class":69,"line":143},[67,102235,102236],{"class":77},"    mujoco.mj_step(model, data)\n",[19,102238,102239,102240,102242],{},"每次 ",[64,102241,101752],{}," 前进一步。这里循环 100 次，所以仿真大约运行 1 秒。",[14,102244,102245],{"id":102245},"代码逐行细讲",[19,102247,102248],{},"下面把完整代码按新手视角拆开讲。",[57,102250,102251],{"className":30915,"code":102115,"language":30917,"meta":62,"style":62},[64,102252,102253],{"__ignoreMap":62},[67,102254,102255,102257],{"class":69,"line":70},[67,102256,30929],{"class":73},[67,102258,101838],{"class":77},[19,102260,102261,102263,102264,1072,102266,1072,102268,28922],{},[64,102262,30929],{}," 是 Python 的导入语句。这里的意思是：把 MuJoCo 官方 Python 包导入进来，后面才能写 ",[64,102265,101212],{},[64,102267,101217],{},[64,102269,102270],{},"mujoco.mj_step",[57,102272,102273],{"className":30915,"code":102132,"language":30917,"meta":62,"style":62},[64,102274,102275,102283,102287],{"__ignoreMap":62},[67,102276,102277,102279,102281],{"class":69,"line":70},[67,102278,101851],{"class":208},[67,102280,14282],{"class":73},[67,102282,101856],{"class":84},[67,102284,102285],{"class":69,"line":143},[67,102286,102147],{"class":84},[67,102288,102289],{"class":69,"line":149},[67,102290,96235],{"class":84},[19,102292,102293,102295,102296,102299],{},[64,102294,101851],{}," 是一个变量名。右边的三引号 ",[64,102297,102298],{},"\"\"\""," 表示多行字符串。因为 MuJoCo 模型通常有很多行，所以用三引号保存 XML 文本最方便。",[57,102301,102302],{"className":53604,"code":101861,"language":53606,"meta":62,"style":62},[64,102303,102304],{"__ignoreMap":62},[67,102305,102306,102308,102310,102313,102315,102318],{"class":69,"line":70},[67,102307,1766],{"class":77},[67,102309,101558],{"class":51837},[67,102311,102312],{"class":112}," model",[67,102314,909],{"class":77},[67,102316,102317],{"class":84},"\"first_sim\"",[67,102319,51844],{"class":77},[19,102321,102322,102323,102326,102327,28922],{},"这是 XML 的根标签。",[64,102324,102325],{},"model=\"first_sim\""," 给这个模型起了一个名字，叫 ",[64,102328,102329],{},"first_sim",[57,102331,102332],{"className":53604,"code":101720,"language":53606,"meta":62,"style":62},[64,102333,102334],{"__ignoreMap":62},[67,102335,102336,102338,102340,102342,102344,102346,102348,102350,102352],{"class":69,"line":70},[67,102337,1766],{"class":77},[67,102339,69703],{"class":51837},[67,102341,101731],{"class":112},[67,102343,909],{"class":77},[67,102345,101736],{"class":84},[67,102347,101739],{"class":112},[67,102349,909],{"class":77},[67,102351,101744],{"class":84},[67,102353,101681],{"class":77},[19,102355,102356,102358,102359,102362,102363,102366],{},[64,102357,69703],{}," 用来设置仿真参数。",[64,102360,102361],{},"timestep=\"0.01\""," 表示每一步是 0.01 秒。",[64,102364,102365],{},"gravity=\"0 0 -9.81\""," 表示重力方向沿 z 轴向下，大小约为 9.81。",[57,102368,102370],{"className":53604,"code":102369,"language":53606,"meta":62,"style":62},"\u003Cworldbody>\n",[64,102371,102372],{"__ignoreMap":62},[67,102373,102374,102376,102379],{"class":69,"line":70},[67,102375,1766],{"class":77},[67,102377,102378],{"class":51837},"worldbody",[67,102380,51844],{"class":77},[19,102382,102383,102385],{},[64,102384,102378],{}," 表示世界里直接存在的物体都写在这里。你可以把它理解为“场景根节点”。",[57,102387,102389],{"className":53604,"code":102388,"language":53606,"meta":62,"style":62},"\u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[64,102390,102391],{"__ignoreMap":62},[67,102392,102393,102395,102397,102399,102401,102404,102406,102408,102411,102413,102415,102418,102420,102422,102425],{"class":69,"line":70},[67,102394,1766],{"class":77},[67,102396,101657],{"class":51837},[67,102398,15637],{"class":112},[67,102400,909],{"class":77},[67,102402,102403],{"class":84},"\"floor\"",[67,102405,54361],{"class":112},[67,102407,909],{"class":77},[67,102409,102410],{"class":84},"\"plane\"",[67,102412,101673],{"class":112},[67,102414,909],{"class":77},[67,102416,102417],{"class":84},"\"2 2 0.1\"",[67,102419,79304],{"class":112},[67,102421,909],{"class":77},[67,102423,102424],{"class":84},"\"0.8 0.8 0.8 1\"",[67,102426,101681],{"class":77},[19,102428,102429,102430,102432,102433,102436,102437,102440,102441,102443],{},"这行创建地面。",[64,102431,101657],{}," 是几何体。",[64,102434,102435],{},"name=\"floor\""," 是名字。",[64,102438,102439],{},"type=\"plane\""," 表示平面。",[64,102442,55647],{}," 是颜色，四个数字分别表示红、绿、蓝、透明度。",[57,102445,102447],{"className":53604,"code":102446,"language":53606,"meta":62,"style":62},"\u003Cbody name=\"box\" pos=\"0 0 1\">\n",[64,102448,102449],{"__ignoreMap":62},[67,102450,102451,102453,102455,102457,102459,102461,102463,102465,102467],{"class":69,"line":70},[67,102452,1766],{"class":77},[67,102454,52337],{"class":51837},[67,102456,15637],{"class":112},[67,102458,909],{"class":77},[67,102460,54028],{"class":84},[67,102462,101643],{"class":112},[67,102464,909],{"class":77},[67,102466,101648],{"class":84},[67,102468,51844],{"class":77},[19,102470,102471,102472,28922,102474,102477,102478,102480],{},"这行创建一个刚体，名字叫 ",[64,102473,54251],{},[64,102475,102476],{},"pos=\"0 0 1\""," 表示它一开始在世界坐标 ",[64,102479,101706],{},"，也就是离地面 1 米高。",[57,102482,102484],{"className":53604,"code":102483,"language":53606,"meta":62,"style":62},"\u003Cfreejoint name=\"box_free\"\u002F>\n",[64,102485,102486],{"__ignoreMap":62},[67,102487,102488,102490,102492,102494,102496,102499],{"class":69,"line":70},[67,102489,1766],{"class":77},[67,102491,102157],{"class":51837},[67,102493,15637],{"class":112},[67,102495,909],{"class":77},[67,102497,102498],{"class":84},"\"box_free\"",[67,102500,101681],{"class":77},[19,102502,102503,102504,102506],{},"这行很重要。",[64,102505,102157],{}," 表示这个刚体可以在三维空间自由移动和旋转。如果没有它，box 会被固定住，不会掉下来。",[57,102508,102510],{"className":53604,"code":102509,"language":53606,"meta":62,"style":62},"\u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[64,102511,102512],{"__ignoreMap":62},[67,102513,102514,102516,102518,102520,102522,102524,102526,102528,102530,102532,102534,102536,102539,102541,102543,102545,102547,102550],{"class":69,"line":70},[67,102515,1766],{"class":77},[67,102517,101657],{"class":51837},[67,102519,15637],{"class":112},[67,102521,909],{"class":77},[67,102523,101664],{"class":84},[67,102525,54361],{"class":112},[67,102527,909],{"class":77},[67,102529,54028],{"class":84},[67,102531,101673],{"class":112},[67,102533,909],{"class":77},[67,102535,101678],{"class":84},[67,102537,102538],{"class":112}," mass",[67,102540,909],{"class":77},[67,102542,4398],{"class":84},[67,102544,79304],{"class":112},[67,102546,909],{"class":77},[67,102548,102549],{"class":84},"\"1 0 0 1\"",[67,102551,101681],{"class":77},[19,102553,102554,102555,102558,102559,102562,102563,102566,102567,102570],{},"这行给 box body 添加一个盒子形状。",[64,102556,102557],{},"type=\"box\""," 表示形状是盒子。",[64,102560,102561],{},"size=\"0.1 0.1 0.1\""," 表示三个方向的半边长都是 0.1。",[64,102564,102565],{},"mass=\"1\""," 表示质量是 1。",[64,102568,102569],{},"rgba=\"1 0 0 1\""," 表示红色。",[57,102572,102574],{"className":30915,"code":102573,"language":30917,"meta":62,"style":62},"def main() -> None:\n",[64,102575,102576],{"__ignoreMap":62},[67,102577,102578,102580,102582,102584,102586],{"class":69,"line":70},[67,102579,32484],{"class":73},[67,102581,2695],{"class":112},[67,102583,101935],{"class":77},[67,102585,96223],{"class":208},[67,102587,4459],{"class":77},[19,102589,102590,102592,102593,102596,102597,102600],{},[64,102591,32484],{}," 用来定义函数。这里定义了一个叫 ",[64,102594,102595],{},"main"," 的函数。",[64,102598,102599],{},"-> None"," 是类型提示，表示这个函数不返回有意义的结果。初学时可以先把它理解成注释，不影响运行。",[57,102602,102603],{"className":30915,"code":102164,"language":30917,"meta":62,"style":62},[64,102604,102605],{"__ignoreMap":62},[67,102606,102607,102609,102611,102613,102615],{"class":69,"line":70},[67,102608,102171],{"class":77},[67,102610,909],{"class":73},[67,102612,101949],{"class":77},[67,102614,101851],{"class":208},[67,102616,870],{"class":77},[19,102618,102619,102620,102623],{},"这行把 XML 字符串编译成 MuJoCo 模型。",[64,102621,102622],{},"model"," 保存的是“静态结构”，比如有几个 body、有几个 joint、时间步长是多少。",[57,102625,102626],{"className":30915,"code":102188,"language":30917,"meta":62,"style":62},[64,102627,102628],{"__ignoreMap":62},[67,102629,102630,102632,102634],{"class":69,"line":70},[67,102631,102195],{"class":77},[67,102633,909],{"class":73},[67,102635,101963],{"class":77},[19,102637,102638,102639,102641,102642,102644],{},"这行创建仿真数据。",[64,102640,33938],{}," 保存的是“当前状态”，比如当前时间、位置、速度。仿真每前进一步，",[64,102643,33938],{}," 都会变化。",[57,102646,102648],{"className":30915,"code":102647,"language":30917,"meta":62,"style":62},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"nu:\", model.nu)\n",[64,102649,102650,102660,102670],{"__ignoreMap":62},[67,102651,102652,102654,102656,102658],{"class":69,"line":70},[67,102653,30952],{"class":208},[67,102655,864],{"class":77},[67,102657,101976],{"class":84},[67,102659,101979],{"class":77},[67,102661,102662,102664,102666,102668],{"class":69,"line":143},[67,102663,30952],{"class":208},[67,102665,864],{"class":77},[67,102667,101988],{"class":84},[67,102669,101991],{"class":77},[67,102671,102672,102674,102676,102678],{"class":69,"line":149},[67,102673,30952],{"class":208},[67,102675,864],{"class":77},[67,102677,102000],{"class":84},[67,102679,102003],{"class":77},[19,102681,102682,102684,102685,102688,102689,102692,102693,102696,102697,102700],{},[64,102683,30952],{}," 用来输出信息。",[64,102686,102687],{},"model.nq"," 是位置变量数量，",[64,102690,102691],{},"model.nv"," 是速度变量数量，",[64,102694,102695],{},"model.nu"," 是控制输入数量。这个例子没有电机，所以 ",[64,102698,102699],{},"nu"," 是 0。",[57,102702,102704],{"className":30915,"code":102703,"language":30917,"meta":62,"style":62},"print(\"initial time:\", data.time)\nprint(\"initial qpos:\", data.qpos.copy())\n",[64,102705,102706,102716],{"__ignoreMap":62},[67,102707,102708,102710,102712,102714],{"class":69,"line":70},[67,102709,30952],{"class":208},[67,102711,864],{"class":77},[67,102713,102012],{"class":84},[67,102715,102015],{"class":77},[67,102717,102718,102720,102722,102724],{"class":69,"line":143},[67,102719,30952],{"class":208},[67,102721,864],{"class":77},[67,102723,102024],{"class":84},[67,102725,102027],{"class":77},[19,102727,102728,102729,102731,102732,102734,102735,102738],{},"这里打印初始时间和初始位置。",[64,102730,101604],{}," 一开始是 0。",[64,102733,101607],{}," 是位置数组。",[64,102736,102737],{},".copy()"," 表示复制一份数组再打印，避免以后数组变化时影响你理解输出。",[57,102740,102741],{"className":30915,"code":102213,"language":30917,"meta":62,"style":62},[64,102742,102743,102759],{"__ignoreMap":62},[67,102744,102745,102747,102749,102751,102753,102755,102757],{"class":69,"line":70},[67,102746,74],{"class":73},[67,102748,102038],{"class":77},[67,102750,81],{"class":73},[67,102752,32980],{"class":208},[67,102754,864],{"class":77},[67,102756,1169],{"class":208},[67,102758,31323],{"class":77},[67,102760,102761],{"class":69,"line":143},[67,102762,102236],{"class":77},[19,102764,102765,102767,102768,102771,102772,102774,102775,102777],{},[64,102766,74],{}," 是循环。",[64,102769,102770],{},"range(100)"," 表示循环 100 次。",[64,102773,1848],{}," 是一个临时变量名，表示“我不关心当前是第几次”。每次循环都会调用一次 ",[64,102776,101752],{},"，仿真就前进一步。",[57,102779,102781],{"className":30915,"code":102780,"language":30917,"meta":62,"style":62},"print(\"final time:\", data.time)\nprint(\"final qpos:\", data.qpos.copy())\n",[64,102782,102783,102793],{"__ignoreMap":62},[67,102784,102785,102787,102789,102791],{"class":69,"line":70},[67,102786,30952],{"class":208},[67,102788,864],{"class":77},[67,102790,102066],{"class":84},[67,102792,102015],{"class":77},[67,102794,102795,102797,102799,102801],{"class":69,"line":143},[67,102796,30952],{"class":208},[67,102798,864],{"class":77},[67,102800,102077],{"class":84},[67,102802,102027],{"class":77},[19,102804,102805],{},"循环结束后，再打印最终时间和最终位置。你会看到时间从 0 变成约 1.0，方块的位置也变了。",[57,102807,102809],{"className":30915,"code":102808,"language":30917,"meta":62,"style":62},"if __name__ == \"__main__\":\n    main()\n",[64,102810,102811,102823],{"__ignoreMap":62},[67,102812,102813,102815,102817,102819,102821],{"class":69,"line":70},[67,102814,2254],{"class":73},[67,102816,31757],{"class":208},[67,102818,102096],{"class":73},[67,102820,102099],{"class":84},[67,102822,4459],{"class":77},[67,102824,102825],{"class":69,"line":143},[67,102826,102106],{"class":77},[19,102828,102829,102830,102833,102834,28922],{},"这是 Python 常见写法。意思是：如果你直接运行这个文件，就调用 ",[64,102831,102832],{},"main()"," 函数。如果这个文件被别的文件导入，就不会自动运行 ",[64,102835,102832],{},[19,102837,102838],{},"运行:",[57,102840,102842],{"className":59,"code":102841,"language":61,"meta":62,"style":62},"python ch1_first_sim.py\n",[64,102843,102844],{"__ignoreMap":62},[67,102845,102846,102848],{"class":69,"line":70},[67,102847,30917],{"class":112},[67,102849,101823],{"class":84},[803,102851,102853],{"id":102852},"_5运行结果说明","5.运行结果说明",[19,102855,102856],{},"你应该看到类似输出:",[57,102858,102861],{"className":102859,"code":102860,"language":5906,"meta":62},[5904],"nq: 7\nnv: 6\nnu: 0\ninitial time: 0.0\nfinal time: 1.0000000000000007\n",[64,102862,102860],{"__ignoreMap":62},[19,102864,102865,102867,102868,102871,102872,28922],{},[64,102866,102157],{}," 有 7 个位置变量: ",[64,102869,102870],{},"x y z qw qx qy qz","。自由刚体有 6 个速度变量: ",[64,102873,102874],{},"vx vy vz wx wy wz",[19,102876,102877,102878,102881],{},"你还会看到 ",[64,102879,102880],{},"final qpos"," 里的 z 坐标比初始时小。原因是方块受到重力作用向下掉落。如果方块撞到地面，MuJoCo 会计算碰撞，让它不会无限向下穿透。",[803,102883,102885],{"id":102884},"_6验证步骤","6.验证步骤",[19,102887,102888],{},"确认版本:",[57,102890,102891],{"className":59,"code":101476,"language":61,"meta":62,"style":62},[64,102892,102893],{"__ignoreMap":62},[67,102894,102895,102897,102899],{"class":69,"line":70},[67,102896,30917],{"class":112},[67,102898,30895],{"class":208},[67,102900,101487],{"class":84},[19,102902,102903],{},"确认导入的是官方 bindings:",[57,102905,102907],{"className":59,"code":102906,"language":61,"meta":62,"style":62},"python -c \"import mujoco; print(mujoco)\"\n",[64,102908,102909],{"__ignoreMap":62},[67,102910,102911,102913,102915],{"class":69,"line":70},[67,102912,30917],{"class":112},[67,102914,30895],{"class":208},[67,102916,102917],{"class":84}," \"import mujoco; print(mujoco)\"\n",[19,102919,102920],{},"运行程序:",[57,102922,102923],{"className":59,"code":102841,"language":61,"meta":62,"style":62},[64,102924,102925],{"__ignoreMap":62},[67,102926,102927,102929],{"class":69,"line":70},[67,102928,30917],{"class":112},[67,102930,101823],{"class":84},[19,102932,102933,102934,102937,102938,28922],{},"检查 ",[64,102935,102936],{},"final time"," 是否约等于 ",[64,102939,102940],{},"1.0",[19,102942,102943],{},"再做几个小实验：",[815,102945,102946,102956,102964,102977],{},[818,102947,102948,102949,102951,102952,102955],{},"把 ",[64,102950,102476],{}," 改成 ",[64,102953,102954],{},"pos=\"0 0 2\"","，观察初始高度变化。",[818,102957,102948,102958,102951,102960,102963],{},[64,102959,102365],{},[64,102961,102962],{},"gravity=\"0 0 -1\"","，观察下落是否变慢。",[818,102965,102948,102966,102951,102968,102971,102972,102974,102975,28922],{},[64,102967,102361],{},[64,102969,102970],{},"timestep=\"0.005\"","，观察 100 步后的 ",[64,102973,102936],{}," 是否变成约 ",[64,102976,35866],{},[818,102978,102979,102980,102983],{},"删除 ",[64,102981,102982],{},"\u003Cfreejoint name=\"box_free\"\u002F>","，观察方块是否还会下落。",[19,102985,102986],{},"第 4 个实验很关键：没有自由关节时，body 会被固定在父节点上，不能自由运动。",[803,102988,102990],{"id":102989},"_7常见错误与解决方案","7.常见错误与解决方案",[14,102992,102994],{"id":102993},"modulenotfounderror-no-module-named-mujoco",[64,102995,102996],{},"ModuleNotFoundError: No module named 'mujoco'",[19,102998,102999],{},"解决:",[57,103001,103003],{"className":59,"code":103002,"language":61,"meta":62,"style":62},"pip install \"mujoco>=2.3\"\n",[64,103004,103005],{"__ignoreMap":62},[67,103006,103007,103009,103011],{"class":69,"line":70},[67,103008,24546],{"class":112},[67,103010,312],{"class":84},[67,103012,103013],{"class":84}," \"mujoco>=2.3\"\n",[14,103015,103017],{"id":103016},"图形或-opengl-相关报错","图形或 OpenGL 相关报错",[19,103019,103020],{},"先安装系统依赖:",[57,103022,103024],{"className":59,"code":103023,"language":61,"meta":62,"style":62},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel libX11 libXi libXrandr\n",[64,103025,103026],{"__ignoreMap":62},[67,103027,103028,103030,103032,103034,103036,103039,103041,103044,103046,103049,103051],{"class":69,"line":70},[67,103029,298],{"class":112},[67,103031,378],{"class":84},[67,103033,312],{"class":84},[67,103035,464],{"class":208},[67,103037,103038],{"class":84}," mesa-libGL",[67,103040,101351],{"class":84},[67,103042,103043],{"class":84}," glfw",[67,103045,101371],{"class":84},[67,103047,103048],{"class":84}," libX11",[67,103050,101384],{"class":84},[67,103052,103053],{"class":84}," libXrandr\n",[14,103055,103057],{"id":103056},"xml-解析失败","XML 解析失败",[19,103059,103060],{},"检查:",[815,103062,103063,103066,103069,103075],{},[818,103064,103065],{},"标签是否闭合",[818,103067,103068],{},"属性是否带引号",[818,103070,103071,103072],{},"根节点是否是 ",[64,103073,103074],{},"\u003Cmujoco>",[818,103076,103077,103079,103080,103083],{},[64,103078,52337],{}," 是否放在 ",[64,103081,103082],{},"\u003Cworldbody>"," 内部",[14,103085,103087,103089,103090],{"id":103086},"final-time-不是严格等于-10",[64,103088,102936],{}," 不是严格等于 ",[64,103091,102940],{},[19,103093,103094],{},"这通常不是错误。浮点数计算可能得到：",[57,103096,103099],{"className":103097,"code":103098,"language":5906,"meta":62},[5904],"1.0000000000000007\n",[64,103100,103098],{"__ignoreMap":62},[19,103102,103103,103104,103106],{},"只要接近 ",[64,103105,102940],{}," 就正常。",[14,103108,103109],{"id":103109},"方块没有掉下来",[19,103111,103112],{},"检查：",[815,103114,103115,103121,103127,103132],{},[818,103116,103117,103118],{},"方块 body 里是否有 ",[64,103119,103120],{},"\u003Cfreejoint\u002F>",[818,103122,103123,103124],{},"重力是否是 ",[64,103125,103126],{},"0 0 -9.81",[818,103128,103129,103130],{},"是否真的调用了 ",[64,103131,101222],{},[818,103133,103134,103135,103137,103138],{},"你看的是否是 ",[64,103136,102880],{},"，不是 ",[64,103139,103140],{},"initial qpos",[803,103142,103144],{"id":103143},"_8本章小结","8.本章小结",[19,103146,103147],{},"本章你已经完成了 MuJoCo 的最小闭环：",[57,103149,103152],{"className":103150,"code":103151,"language":5906,"meta":62},[5904],"XML 模型 → MjModel → MjData → mj_step → 读取状态\n",[64,103153,103151],{"__ignoreMap":62},[19,103155,103156],{},"后面所有复杂任务，本质都是在这个闭环上继续增加内容：更多 body、更多 joint、更多 actuator、更复杂的控制逻辑和奖励函数。",[779,103158,103159],{},"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":62,"searchDepth":143,"depth":143,"links":103161},[103162,103163,103164,103169,103173,103174,103175,103183],{"id":101183,"depth":143,"text":101184},{"id":101306,"depth":143,"text":101307},{"id":101581,"depth":143,"text":101582,"children":103165},[103166,103167,103168],{"id":101619,"depth":149,"text":101620},{"id":101713,"depth":149,"text":101714},{"id":101765,"depth":149,"text":101766},{"id":101789,"depth":143,"text":101790,"children":103170},[103171,103172],{"id":102109,"depth":149,"text":102109},{"id":102245,"depth":149,"text":102245},{"id":102852,"depth":143,"text":102853},{"id":102884,"depth":143,"text":102885},{"id":102989,"depth":143,"text":102990,"children":103176},[103177,103178,103179,103180,103182],{"id":102993,"depth":149,"text":102996},{"id":103016,"depth":149,"text":103017},{"id":103056,"depth":149,"text":103057},{"id":103086,"depth":149,"text":103181},"final time 不是严格等于 1.0",{"id":103109,"depth":149,"text":103109},{"id":103143,"depth":143,"text":103144},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch1-mujoco",{"title":101175,"description":62},"wiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序","QXJQc687vjITkT3uIIPeKVan841uz4ykZnCT7hX2FiY",{"id":103190,"title":103191,"body":103192,"description":62,"extension":787,"meta":104848,"navigation":176,"path":104849,"seo":104850,"stem":104851,"__hash__":104852},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础.md","2.XML 与 MJCF 物理建模基础",{"type":7,"value":103193,"toc":104824},[103194,103197,103199,103202,103205,103222,103317,103320,103326,103328,103330,103354,103357,103371,103374,103415,103417,103430,103432,103435,103483,103495,103498,103501,103507,103520,103587,103590,103609,103612,103615,103621,103623,103632,103635,103639,103648,103730,103739,103743,103749,103763,103773,103775,104105,104108,104120,104122,104133,104135,104138,104156,104159,104162,104180,104191,104194,104209,104219,104221,104242,104259,104279,104285,104325,104341,104357,104363,104366,104390,104406,104411,104441,104458,104483,104486,104501,104510,104525,104534,104549,104556,104558,104568,104581,104588,104591,104630,104637,104639,104691,104693,104699,104702,104709,104716,104719,104721,104739,104742,104745,104779,104791,104793,104796,104818,104821],[10,103195,103191],{"id":103196},"_2xml-与-mjcf-物理建模基础",[803,103198,101184],{"id":101183},[19,103200,103201],{},"本章学习 MuJoCo 的 MJCF XML 基础。MJCF 是 MuJoCo 使用的模型描述格式。你不需要先完整学习 XML 语言，只需要掌握 MuJoCo 常用标签，以及它们之间的层级关系。",[19,103203,103204],{},"本章结束后，你应该能看懂一个简单模型里：",[815,103206,103207,103210,103213,103216,103219],{},[818,103208,103209],{},"地面在哪里。",[818,103211,103212],{},"物体初始位置在哪里。",[818,103214,103215],{},"几何体是什么形状。",[818,103217,103218],{},"哪些 body 可以自由运动。",[818,103220,103221],{},"如何用名字在 Python 里找到 XML 中的对象。",[998,103223,103224,103234],{},[1001,103225,103226],{},[1004,103227,103228,103231],{},[1007,103229,103230],{"align":24453},"标签",[1007,103232,103233],{"align":24453},"作用",[1044,103235,103236,103245,103255,103264,103274,103284,103297,103307],{},[1004,103237,103238,103242],{},[1049,103239,103240],{"align":24453},[64,103241,103074],{},[1049,103243,103244],{"align":24453},"根节点",[1004,103246,103247,103252],{},[1049,103248,103249],{"align":24453},[64,103250,103251],{},"\u003Coption>",[1049,103253,103254],{"align":24453},"仿真参数",[1004,103256,103257,103261],{},[1049,103258,103259],{"align":24453},[64,103260,103082],{},[1049,103262,103263],{"align":24453},"世界中的物体",[1004,103265,103266,103271],{},[1049,103267,103268],{"align":24453},[64,103269,103270],{},"\u003Cbody>",[1049,103272,103273],{"align":24453},"刚体",[1004,103275,103276,103281],{},[1049,103277,103278],{"align":24453},[64,103279,103280],{},"\u003Cgeom>",[1049,103282,103283],{"align":24453},"几何体、碰撞体、可视体",[1004,103285,103286,103294],{},[1049,103287,103288,25690,103291],{"align":24453},[64,103289,103290],{},"\u003Cjoint>",[64,103292,103293],{},"\u003Cfreejoint>",[1049,103295,103296],{"align":24453},"关节",[1004,103298,103299,103304],{},[1049,103300,103301],{"align":24453},[64,103302,103303],{},"\u003Csite>",[1049,103305,103306],{"align":24453},"标记点",[1004,103308,103309,103314],{},[1049,103310,103311],{"align":24453},[64,103312,103313],{},"\u003Cactuator>",[1049,103315,103316],{"align":24453},"控制器",[19,103318,103319],{},"初学时可以先记住：",[57,103321,103324],{"className":103322,"code":103323,"language":5906,"meta":62},[5904],"body 是刚体，geom 是形状，joint 是运动方式，site 是标记点。\n",[64,103325,103323],{"__ignoreMap":62},[803,103327,101307],{"id":101306},[19,103329,101310],{},[57,103331,103333],{"className":59,"code":103332,"language":61,"meta":62,"style":62},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel\n",[64,103334,103335],{"__ignoreMap":62},[67,103336,103337,103339,103341,103343,103345,103347,103349,103351],{"class":69,"line":70},[67,103338,298],{"class":112},[67,103340,378],{"class":84},[67,103342,312],{"class":84},[67,103344,464],{"class":208},[67,103346,103038],{"class":84},[67,103348,101351],{"class":84},[67,103350,103043],{"class":84},[67,103352,103353],{"class":84}," glfw-devel\n",[19,103355,103356],{},"pip:",[57,103358,103359],{"className":59,"code":101456,"language":61,"meta":62,"style":62},[64,103360,103361],{"__ignoreMap":62},[67,103362,103363,103365,103367,103369],{"class":69,"line":70},[67,103364,24546],{"class":112},[67,103366,312],{"class":84},[67,103368,101467],{"class":84},[67,103370,101470],{"class":84},[19,103372,103373],{},"conda:",[57,103375,103377],{"className":59,"code":103376,"language":61,"meta":62,"style":62},"conda create -n mujoco-xml python=3.10 -y\nconda activate mujoco-xml\npip install \"mujoco>=2.3\" numpy\n",[64,103378,103379,103396,103405],{"__ignoreMap":62},[67,103380,103381,103383,103385,103387,103390,103392,103394],{"class":69,"line":70},[67,103382,30867],{"class":112},[67,103384,29713],{"class":84},[67,103386,25825],{"class":208},[67,103388,103389],{"class":84}," mujoco-xml",[67,103391,101512],{"class":84},[67,103393,101515],{"class":208},[67,103395,101518],{"class":208},[67,103397,103398,103400,103402],{"class":69,"line":143},[67,103399,30867],{"class":112},[67,103401,101525],{"class":84},[67,103403,103404],{"class":84}," mujoco-xml\n",[67,103406,103407,103409,103411,103413],{"class":69,"line":149},[67,103408,24546],{"class":112},[67,103410,312],{"class":84},[67,103412,101467],{"class":84},[67,103414,101470],{"class":84},[19,103416,101541],{},[815,103418,103419,103422,103427],{},[818,103420,103421],{},"MJCF XML 标签随 MuJoCo 版本会持续扩展。",[818,103423,103424,103425,28922],{},"本章使用基础标签，适用于 ",[64,103426,101564],{},[818,103428,103429],{},"某些新 XML 属性可能存在版本差异，本文避免使用高版本专属属性。",[803,103431,101582],{"id":101581},[19,103433,103434],{},"MJCF 是 MuJoCo 的 XML 建模格式。最小结构:",[57,103436,103438],{"className":53604,"code":103437,"language":53606,"meta":62,"style":62},"\u003Cmujoco model=\"name\">\n  \u003Cworldbody>\n    ...\n  \u003C\u002Fworldbody>\n\u003C\u002Fmujoco>\n",[64,103439,103440,103454,103462,103467,103475],{"__ignoreMap":62},[67,103441,103442,103444,103446,103448,103450,103452],{"class":69,"line":70},[67,103443,1766],{"class":77},[67,103445,101558],{"class":51837},[67,103447,102312],{"class":112},[67,103449,909],{"class":77},[67,103451,63216],{"class":84},[67,103453,51844],{"class":77},[67,103455,103456,103458,103460],{"class":69,"line":143},[67,103457,52681],{"class":77},[67,103459,102378],{"class":51837},[67,103461,51844],{"class":77},[67,103463,103464],{"class":69,"line":149},[67,103465,103466],{"class":77},"    ...\n",[67,103468,103469,103471,103473],{"class":69,"line":155},[67,103470,52954],{"class":77},[67,103472,102378],{"class":51837},[67,103474,51844],{"class":77},[67,103476,103477,103479,103481],{"class":69,"line":161},[67,103478,52322],{"class":77},[67,103480,101558],{"class":51837},[67,103482,51844],{"class":77},[19,103484,103485,103487,103488,103490,103491,103494],{},[64,103486,52337],{}," 表示刚体。",[64,103489,101657],{}," 表示几何形状，可以用于碰撞、质量、渲染。",[64,103492,103493],{},"joint"," 表示刚体相对父刚体如何运动。",[14,103496,103497],{"id":103497},"层级结构非常重要",[19,103499,103500],{},"MuJoCo 模型不是一堆平铺的物体，而是一棵树：",[57,103502,103505],{"className":103503,"code":103504,"language":5906,"meta":62},[5904],"worldbody\n├── floor geom\n└── red_box body\n    ├── freejoint\n    ├── red_box_geom\n    └── box_center site\n",[64,103506,103504],{"__ignoreMap":62},[19,103508,103509,101555,103512,103515,103516,103519],{},[64,103510,103511],{},"red_box_geom",[64,103513,103514],{},"box_center"," 都属于 ",[64,103517,103518],{},"red_box"," 这个 body。body 移动时，它内部的 geom 和 site 也会跟着移动。",[57,103521,103523],{"className":53604,"code":103522,"language":53606,"meta":62,"style":62},"\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",[64,103524,103525,103545,103559,103579],{"__ignoreMap":62},[67,103526,103527,103529,103531,103533,103535,103537,103539,103541,103543],{"class":69,"line":70},[67,103528,1766],{"class":77},[67,103530,52337],{"class":51837},[67,103532,15637],{"class":112},[67,103534,909],{"class":77},[67,103536,54028],{"class":84},[67,103538,101643],{"class":112},[67,103540,909],{"class":77},[67,103542,101648],{"class":84},[67,103544,51844],{"class":77},[67,103546,103547,103549,103551,103553,103555,103557],{"class":69,"line":143},[67,103548,52681],{"class":77},[67,103550,102157],{"class":51837},[67,103552,15637],{"class":112},[67,103554,909],{"class":77},[67,103556,102498],{"class":84},[67,103558,101681],{"class":77},[67,103560,103561,103563,103565,103567,103569,103571,103573,103575,103577],{"class":69,"line":149},[67,103562,52681],{"class":77},[67,103564,101657],{"class":51837},[67,103566,54361],{"class":112},[67,103568,909],{"class":77},[67,103570,54028],{"class":84},[67,103572,101673],{"class":112},[67,103574,909],{"class":77},[67,103576,101678],{"class":84},[67,103578,101681],{"class":77},[67,103580,103581,103583,103585],{"class":69,"line":155},[67,103582,52322],{"class":77},[67,103584,52337],{"class":51837},[67,103586,51844],{"class":77},[19,103588,103589],{},"含义:",[815,103591,103592,103598,103603,103606],{},[818,103593,103594,103595,103597],{},"创建名为 ",[64,103596,54251],{}," 的刚体",[818,103599,103600,103601],{},"初始位置在世界坐标 ",[64,103602,101706],{},[818,103604,103605],{},"它有一个自由关节",[818,103607,103608],{},"它有一个盒子几何体",[14,103610,103611],{"id":103611},"坐标怎么理解",[19,103613,103614],{},"MuJoCo 默认使用三维坐标：",[57,103616,103619],{"className":103617,"code":103618,"language":5906,"meta":62},[5904],"x: 左右方向\ny: 前后方向\nz: 上下方向\n",[64,103620,103618],{"__ignoreMap":62},[19,103622,15350],{},[57,103624,103626],{"className":53604,"code":103625,"language":53606,"meta":62,"style":62},"pos=\"0 0 1\"\n",[64,103627,103628],{"__ignoreMap":62},[67,103629,103630],{"class":69,"line":70},[67,103631,103625],{"class":77},[19,103633,103634],{},"表示 x=0、y=0、z=1，也就是放在世界原点上方 1 米的位置。",[14,103636,103638],{"id":103637},"geom-的-size-怎么理解","geom 的 size 怎么理解",[19,103640,103641,103642,83067,103645,103647],{},"不同 ",[64,103643,103644],{},"type",[64,103646,32033],{}," 含义不同：",[998,103649,103650,103665],{},[1001,103651,103652],{},[1004,103653,103654,103658,103663],{},[1007,103655,103656],{"align":24453},[64,103657,103644],{},[1007,103659,103660,103662],{"align":24453},[64,103661,32033],{}," 示例",[1007,103664,101237],{"align":24453},[1044,103666,103667,103681,103696,103715],{},[1004,103668,103669,103673,103678],{},[1049,103670,103671],{"align":24453},[64,103672,54251],{},[1049,103674,103675],{"align":24453},[64,103676,103677],{},"size=\"0.1 0.2 0.3\"",[1049,103679,103680],{"align":24453},"x\u002Fy\u002Fz 半边长，不是完整长度",[1004,103682,103683,103688,103693],{},[1049,103684,103685],{"align":24453},[64,103686,103687],{},"sphere",[1049,103689,103690],{"align":24453},[64,103691,103692],{},"size=\"0.1\"",[1049,103694,103695],{"align":24453},"球半径",[1004,103697,103698,103703,103708],{},[1049,103699,103700],{"align":24453},[64,103701,103702],{},"capsule",[1049,103704,103705],{"align":24453},[64,103706,103707],{},"size=\"0.03\"",[1049,103709,103710,103711,103714],{"align":24453},"胶囊半径，长度常用 ",[64,103712,103713],{},"fromto"," 指定",[1004,103716,103717,103722,103727],{},[1049,103718,103719],{"align":24453},[64,103720,103721],{},"plane",[1049,103723,103724],{"align":24453},[64,103725,103726],{},"size=\"3 3 0.1\"",[1049,103728,103729],{"align":24453},"可视平面大小，通常当地面",[19,103731,103732,103733,103735,103736,103738],{},"最容易踩坑的是 box：",[64,103734,102561],{}," 表示边长大约是 ",[64,103737,32574],{},"，因为 MuJoCo 用的是半边长。",[14,103740,103742],{"id":103741},"site-是什么","site 是什么",[19,103744,103745,103748],{},[64,103746,103747],{},"site"," 是一个不参与碰撞的小标记点。它常用于：",[815,103750,103751,103754,103757,103760],{},[818,103752,103753],{},"标记机械臂末端。",[818,103755,103756],{},"标记目标位置。",[818,103758,103759],{},"放传感器或相机参考点。",[818,103761,103762],{},"在 Python 中读取某个关键点的世界坐标。",[19,103764,103765,103766,101555,103769,103772],{},"在后面的 Reacher 任务中，",[64,103767,103768],{},"tip",[64,103770,103771],{},"target"," 就会用 site 表示。",[803,103774,101790],{"id":101789},[57,103776,103778],{"className":30915,"code":103777,"language":30917,"meta":62,"style":62},"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",[64,103779,103780,103786,103796,103800,103804,103812,103817,103821,103825,103829,103834,103838,103843,103848,103853,103858,103862,103866,103870,103874,103878,103882,103894,103906,103914,103918,103933,103948,103952,103965,103980,103993,104006,104010,104026,104030,104034,104045,104057,104069,104081,104085,104089,104101],{"__ignoreMap":62},[67,103781,103782,103784],{"class":69,"line":70},[67,103783,30929],{"class":73},[67,103785,101838],{"class":77},[67,103787,103788,103790,103792,103794],{"class":69,"line":143},[67,103789,30929],{"class":73},[67,103791,31917],{"class":77},[67,103793,31920],{"class":73},[67,103795,31923],{"class":77},[67,103797,103798],{"class":69,"line":149},[67,103799,177],{"emptyLinePlaceholder":176},[67,103801,103802],{"class":69,"line":155},[67,103803,177],{"emptyLinePlaceholder":176},[67,103805,103806,103808,103810],{"class":69,"line":161},[67,103807,101851],{"class":208},[67,103809,14282],{"class":73},[67,103811,101856],{"class":84},[67,103813,103814],{"class":69,"line":167},[67,103815,103816],{"class":84},"\u003Cmujoco model=\"xml_basic\">\n",[67,103818,103819],{"class":69,"line":173},[67,103820,101866],{"class":84},[67,103822,103823],{"class":69,"line":180},[67,103824,177],{"emptyLinePlaceholder":176},[67,103826,103827],{"class":69,"line":186},[67,103828,101875],{"class":84},[67,103830,103831],{"class":69,"line":444},[67,103832,103833],{"class":84},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.7 0.7 0.7 1\"\u002F>\n",[67,103835,103836],{"class":69,"line":2335},[67,103837,177],{"emptyLinePlaceholder":176},[67,103839,103840],{"class":69,"line":2340},[67,103841,103842],{"class":84},"    \u003Cbody name=\"red_box\" pos=\"0 0 1\">\n",[67,103844,103845],{"class":69,"line":2346},[67,103846,103847],{"class":84},"      \u003Cfreejoint name=\"red_box_free\"\u002F>\n",[67,103849,103850],{"class":69,"line":2351},[67,103851,103852],{"class":84},"      \u003Cgeom name=\"red_box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[67,103854,103855],{"class":69,"line":2365},[67,103856,103857],{"class":84},"      \u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[67,103859,103860],{"class":69,"line":2370},[67,103861,101904],{"class":84},[67,103863,103864],{"class":69,"line":2376},[67,103865,101909],{"class":84},[67,103867,103868],{"class":69,"line":2397},[67,103869,101914],{"class":84},[67,103871,103872],{"class":69,"line":2402},[67,103873,96235],{"class":84},[67,103875,103876],{"class":69,"line":2416},[67,103877,177],{"emptyLinePlaceholder":176},[67,103879,103880],{"class":69,"line":2421},[67,103881,177],{"emptyLinePlaceholder":176},[67,103883,103884,103886,103888,103890,103892],{"class":69,"line":2450},[67,103885,32484],{"class":73},[67,103887,2695],{"class":112},[67,103889,101935],{"class":77},[67,103891,96223],{"class":208},[67,103893,4459],{"class":77},[67,103895,103896,103898,103900,103902,103904],{"class":69,"line":2455},[67,103897,101944],{"class":77},[67,103899,909],{"class":73},[67,103901,101949],{"class":77},[67,103903,101851],{"class":208},[67,103905,870],{"class":77},[67,103907,103908,103910,103912],{"class":69,"line":2472},[67,103909,101958],{"class":77},[67,103911,909],{"class":73},[67,103913,101963],{"class":77},[67,103915,103916],{"class":69,"line":2477},[67,103917,177],{"emptyLinePlaceholder":176},[67,103919,103920,103923,103925,103928,103931],{"class":69,"line":2482},[67,103921,103922],{"class":77},"    box_body_id ",[67,103924,909],{"class":73},[67,103926,103927],{"class":77}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, ",[67,103929,103930],{"class":84},"\"red_box\"",[67,103932,870],{"class":77},[67,103934,103935,103938,103940,103943,103946],{"class":69,"line":2487},[67,103936,103937],{"class":77},"    site_id ",[67,103939,909],{"class":73},[67,103941,103942],{"class":77}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, ",[67,103944,103945],{"class":84},"\"box_center\"",[67,103947,870],{"class":77},[67,103949,103950],{"class":69,"line":2501},[67,103951,177],{"emptyLinePlaceholder":176},[67,103953,103954,103956,103959,103961,103963],{"class":69,"line":2506},[67,103955,3821],{"class":73},[67,103957,103958],{"class":77}," box_body_id ",[67,103960,1766],{"class":73},[67,103962,4813],{"class":208},[67,103964,4459],{"class":77},[67,103966,103967,103970,103973,103975,103978],{"class":69,"line":3298},[67,103968,103969],{"class":73},"        raise",[67,103971,103972],{"class":208}," RuntimeError",[67,103974,864],{"class":77},[67,103976,103977],{"class":84},"\"body red_box not found\"",[67,103979,870],{"class":77},[67,103981,103982,103984,103987,103989,103991],{"class":69,"line":3312},[67,103983,3821],{"class":73},[67,103985,103986],{"class":77}," site_id ",[67,103988,1766],{"class":73},[67,103990,4813],{"class":208},[67,103992,4459],{"class":77},[67,103994,103995,103997,103999,104001,104004],{"class":69,"line":3320},[67,103996,103969],{"class":73},[67,103998,103972],{"class":208},[67,104000,864],{"class":77},[67,104002,104003],{"class":84},"\"site box_center not found\"",[67,104005,870],{"class":77},[67,104007,104008],{"class":69,"line":3325},[67,104009,177],{"emptyLinePlaceholder":176},[67,104011,104012,104014,104016,104018,104020,104022,104024],{"class":69,"line":3331},[67,104013,3921],{"class":73},[67,104015,102038],{"class":77},[67,104017,81],{"class":73},[67,104019,32980],{"class":208},[67,104021,864],{"class":77},[67,104023,2445],{"class":208},[67,104025,31323],{"class":77},[67,104027,104028],{"class":69,"line":3337},[67,104029,102053],{"class":77},[67,104031,104032],{"class":69,"line":3342},[67,104033,177],{"emptyLinePlaceholder":176},[67,104035,104036,104038,104040,104043],{"class":69,"line":8667},[67,104037,31836],{"class":208},[67,104039,864],{"class":77},[67,104041,104042],{"class":84},"\"simulation time:\"",[67,104044,102015],{"class":77},[67,104046,104047,104049,104051,104054],{"class":69,"line":8691},[67,104048,31836],{"class":208},[67,104050,864],{"class":77},[67,104052,104053],{"class":84},"\"box body position:\"",[67,104055,104056],{"class":77},", data.xpos[box_body_id].copy())\n",[67,104058,104059,104061,104063,104066],{"class":69,"line":8696},[67,104060,31836],{"class":208},[67,104062,864],{"class":77},[67,104064,104065],{"class":84},"\"site position:\"",[67,104067,104068],{"class":77},", data.site_xpos[site_id].copy())\n",[67,104070,104071,104073,104075,104078],{"class":69,"line":8702},[67,104072,31836],{"class":208},[67,104074,864],{"class":77},[67,104076,104077],{"class":84},"\"box qpos:\"",[67,104079,104080],{"class":77},", np.array(data.qpos))\n",[67,104082,104083],{"class":69,"line":8729},[67,104084,177],{"emptyLinePlaceholder":176},[67,104086,104087],{"class":69,"line":8734},[67,104088,177],{"emptyLinePlaceholder":176},[67,104090,104091,104093,104095,104097,104099],{"class":69,"line":8740},[67,104092,2254],{"class":73},[67,104094,31757],{"class":208},[67,104096,102096],{"class":73},[67,104098,102099],{"class":84},[67,104100,4459],{"class":77},[67,104102,104103],{"class":69,"line":8752},[67,104104,102106],{"class":77},[19,104106,104107],{},"保存为：",[57,104109,104111],{"className":59,"code":104110,"language":61,"meta":62,"style":62},"touch ch2_xml_basic.py\n",[64,104112,104113],{"__ignoreMap":62},[67,104114,104115,104117],{"class":69,"line":70},[67,104116,101820],{"class":112},[67,104118,104119],{"class":84}," ch2_xml_basic.py\n",[19,104121,102838],{},[57,104123,104125],{"className":59,"code":104124,"language":61,"meta":62,"style":62},"python ch2_xml_basic.py\n",[64,104126,104127],{"__ignoreMap":62},[67,104128,104129,104131],{"class":69,"line":70},[67,104130,30917],{"class":112},[67,104132,104119],{"class":84},[14,104134,102109],{"id":102109},[19,104136,104137],{},"用名字查找 body：",[57,104139,104141],{"className":30915,"code":104140,"language":30917,"meta":62,"style":62},"box_body_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, \"red_box\")\n",[64,104142,104143],{"__ignoreMap":62},[67,104144,104145,104148,104150,104152,104154],{"class":69,"line":70},[67,104146,104147],{"class":77},"box_body_id ",[67,104149,909],{"class":73},[67,104151,103927],{"class":77},[67,104153,103930],{"class":84},[67,104155,870],{"class":77},[19,104157,104158],{},"MuJoCo 内部主要用数字 ID 管理对象。你在 XML 里写的是名字，Python 读取数组时常常需要先把名字转成 ID。",[19,104160,104161],{},"用名字查找 site：",[57,104163,104165],{"className":30915,"code":104164,"language":30917,"meta":62,"style":62},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"box_center\")\n",[64,104166,104167],{"__ignoreMap":62},[67,104168,104169,104172,104174,104176,104178],{"class":69,"line":70},[67,104170,104171],{"class":77},"site_id ",[67,104173,909],{"class":73},[67,104175,103942],{"class":77},[67,104177,103945],{"class":84},[67,104179,870],{"class":77},[19,104181,104182,104183,104186,104187,104190],{},"注意第二个参数是对象类型。查 body 就用 ",[64,104184,104185],{},"mjOBJ_BODY","，查 site 就用 ",[64,104188,104189],{},"mjOBJ_SITE","。名字相同但类型不同，也不是同一个对象。",[19,104192,104193],{},"读取世界坐标：",[57,104195,104197],{"className":30915,"code":104196,"language":30917,"meta":62,"style":62},"data.xpos[box_body_id]\ndata.site_xpos[site_id]\n",[64,104198,104199,104204],{"__ignoreMap":62},[67,104200,104201],{"class":69,"line":70},[67,104202,104203],{"class":77},"data.xpos[box_body_id]\n",[67,104205,104206],{"class":69,"line":143},[67,104207,104208],{"class":77},"data.site_xpos[site_id]\n",[19,104210,104211,104214,104215,104218],{},[64,104212,104213],{},"xpos"," 是 body 的世界坐标，",[64,104216,104217],{},"site_xpos"," 是 site 的世界坐标。",[14,104220,102245],{"id":102245},[57,104222,104224],{"className":30915,"code":104223,"language":30917,"meta":62,"style":62},"import mujoco\nimport numpy as np\n",[64,104225,104226,104232],{"__ignoreMap":62},[67,104227,104228,104230],{"class":69,"line":70},[67,104229,30929],{"class":73},[67,104231,101838],{"class":77},[67,104233,104234,104236,104238,104240],{"class":69,"line":143},[67,104235,30929],{"class":73},[67,104237,31917],{"class":77},[67,104239,31920],{"class":73},[67,104241,31923],{"class":77},[19,104243,104244,104245,104248,104249,104252,104253,1072,104256,28922],{},"第一行导入 MuJoCo。第二行导入 NumPy，并给它起别名 ",[64,104246,104247],{},"np","。NumPy 是 Python 里处理数组和数值计算最常用的库。",[64,104250,104251],{},"as np"," 是习惯写法，后面就可以写 ",[64,104254,104255],{},"np.array(...)",[64,104257,104258],{},"np.round(...)",[57,104260,104261],{"className":30915,"code":102132,"language":30917,"meta":62,"style":62},[64,104262,104263,104271,104275],{"__ignoreMap":62},[67,104264,104265,104267,104269],{"class":69,"line":70},[67,104266,101851],{"class":208},[67,104268,14282],{"class":73},[67,104270,101856],{"class":84},[67,104272,104273],{"class":69,"line":143},[67,104274,102147],{"class":84},[67,104276,104277],{"class":69,"line":149},[67,104278,96235],{"class":84},[19,104280,104281,104282,28922],{},"这里把 MJCF 模型保存成字符串。Python 不会理解 XML 的物理含义，真正解析 XML 的是 ",[64,104283,104284],{},"mujoco.MjModel.from_xml_string(XML)",[57,104286,104288],{"className":53604,"code":104287,"language":53606,"meta":62,"style":62},"\u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[64,104289,104290],{"__ignoreMap":62},[67,104291,104292,104294,104296,104298,104300,104302,104304,104306,104309,104311,104313,104316,104318,104320,104323],{"class":69,"line":70},[67,104293,1766],{"class":77},[67,104295,103747],{"class":51837},[67,104297,15637],{"class":112},[67,104299,909],{"class":77},[67,104301,103945],{"class":84},[67,104303,101643],{"class":112},[67,104305,909],{"class":77},[67,104307,104308],{"class":84},"\"0 0 0\"",[67,104310,101673],{"class":112},[67,104312,909],{"class":77},[67,104314,104315],{"class":84},"\"0.03\"",[67,104317,79304],{"class":112},[67,104319,909],{"class":77},[67,104321,104322],{"class":84},"\"0 1 0 1\"",[67,104324,101681],{"class":77},[19,104326,104327,104329,104330,104333,104334,104336,104337,104340],{},[64,104328,103747],{}," 是标记点。",[64,104331,104332],{},"pos=\"0 0 0\""," 表示这个点在 red_box body 的局部原点。",[64,104335,103707],{}," 表示显示出来的小球大小。",[64,104338,104339],{},"rgba=\"0 1 0 1\""," 表示绿色。",[57,104342,104343],{"className":30915,"code":104140,"language":30917,"meta":62,"style":62},[64,104344,104345],{"__ignoreMap":62},[67,104346,104347,104349,104351,104353,104355],{"class":69,"line":70},[67,104348,104147],{"class":77},[67,104350,909],{"class":73},[67,104352,103927],{"class":77},[67,104354,103930],{"class":84},[67,104356,870],{"class":77},[19,104358,104359,104360,104362],{},"这行的作用是：根据名字 ",[64,104361,103930],{}," 找到对应 body 的数字 ID。MuJoCo 内部数组不用名字索引，而是用数字索引，所以要先把名字转换成 ID。",[19,104364,104365],{},"拆开看：",[815,104367,104368,104374,104379,104385],{},[818,104369,104370,104373],{},[64,104371,104372],{},"mujoco.mj_name2id"," 是 MuJoCo 提供的查找函数。",[818,104375,104376,104378],{},[64,104377,102622],{}," 是被查询的模型。",[818,104380,104381,104384],{},[64,104382,104383],{},"mujoco.mjtObj.mjOBJ_BODY"," 表示要找的是 body。",[818,104386,104387,104389],{},[64,104388,103930],{}," 是 XML 里写的名字。",[57,104391,104392],{"className":30915,"code":104164,"language":30917,"meta":62,"style":62},[64,104393,104394],{"__ignoreMap":62},[67,104395,104396,104398,104400,104402,104404],{"class":69,"line":70},[67,104397,104171],{"class":77},[67,104399,909],{"class":73},[67,104401,103942],{"class":77},[67,104403,103945],{"class":84},[67,104405,870],{"class":77},[19,104407,104408,104409,28922],{},"这行同理，只是查找对象类型换成了 site，名字换成了 ",[64,104410,103945],{},[57,104412,104414],{"className":30915,"code":104413,"language":30917,"meta":62,"style":62},"if box_body_id \u003C 0:\n    raise RuntimeError(\"body red_box not found\")\n",[64,104415,104416,104428],{"__ignoreMap":62},[67,104417,104418,104420,104422,104424,104426],{"class":69,"line":70},[67,104419,2254],{"class":73},[67,104421,103958],{"class":77},[67,104423,1766],{"class":73},[67,104425,4813],{"class":208},[67,104427,4459],{"class":77},[67,104429,104430,104433,104435,104437,104439],{"class":69,"line":143},[67,104431,104432],{"class":73},"    raise",[67,104434,103972],{"class":208},[67,104436,864],{"class":77},[67,104438,103977],{"class":84},[67,104440,870],{"class":77},[19,104442,104443,104445,104446,104449,104450,104453,104454,104457],{},[64,104444,2254],{}," 是条件判断。",[64,104447,104448],{},"mj_name2id"," 找不到对象时会返回 ",[64,104451,104452],{},"-1","。所以如果 ID 小于 0，就说明名字写错了。",[64,104455,104456],{},"raise RuntimeError(...)"," 表示主动抛出错误，让程序停下来并告诉你原因。",[57,104459,104461],{"className":30915,"code":104460,"language":30917,"meta":62,"style":62},"for _ in range(200):\n    mujoco.mj_step(model, data)\n",[64,104462,104463,104479],{"__ignoreMap":62},[67,104464,104465,104467,104469,104471,104473,104475,104477],{"class":69,"line":70},[67,104466,74],{"class":73},[67,104468,102038],{"class":77},[67,104470,81],{"class":73},[67,104472,32980],{"class":208},[67,104474,864],{"class":77},[67,104476,2445],{"class":208},[67,104478,31323],{"class":77},[67,104480,104481],{"class":69,"line":143},[67,104482,102236],{"class":77},[19,104484,104485],{},"这段让仿真运行 200 步。因为 timestep 是 0.01，所以仿真时间约为 2 秒。",[57,104487,104489],{"className":30915,"code":104488,"language":30917,"meta":62,"style":62},"print(\"box body position:\", data.xpos[box_body_id].copy())\n",[64,104490,104491],{"__ignoreMap":62},[67,104492,104493,104495,104497,104499],{"class":69,"line":70},[67,104494,30952],{"class":208},[67,104496,864],{"class":77},[67,104498,104053],{"class":84},[67,104500,104056],{"class":77},[19,104502,104503,104505,104506,104509],{},[64,104504,101616],{}," 保存所有 body 的世界坐标。",[64,104507,104508],{},"data.xpos[box_body_id]"," 表示取出 red_box 这个 body 的世界坐标。",[57,104511,104513],{"className":30915,"code":104512,"language":30917,"meta":62,"style":62},"print(\"site position:\", data.site_xpos[site_id].copy())\n",[64,104514,104515],{"__ignoreMap":62},[67,104516,104517,104519,104521,104523],{"class":69,"line":70},[67,104518,30952],{"class":208},[67,104520,864],{"class":77},[67,104522,104065],{"class":84},[67,104524,104068],{"class":77},[19,104526,104527,104530,104531,104533],{},[64,104528,104529],{},"data.site_xpos"," 保存所有 site 的世界坐标。因为 ",[64,104532,103514],{}," 放在 box 的中心，所以它的位置通常和 box body 的位置接近。",[57,104535,104537],{"className":30915,"code":104536,"language":30917,"meta":62,"style":62},"print(\"box qpos:\", np.array(data.qpos))\n",[64,104538,104539],{"__ignoreMap":62},[67,104540,104541,104543,104545,104547],{"class":69,"line":70},[67,104542,30952],{"class":208},[67,104544,864],{"class":77},[67,104546,104077],{"class":84},[67,104548,104080],{"class":77},[19,104550,104551,104552,104555],{},"这里打印广义位置数组。",[64,104553,104554],{},"np.array(data.qpos)"," 把 MuJoCo 内部数组转成 NumPy 数组，方便显示和后续计算。",[803,104557,102853],{"id":102852},[19,104559,104560,104561,104564,104565,28922],{},"程序会输出 ",[64,104562,104563],{},"simulation time","、box 的世界坐标、site 的世界坐标和 ",[64,104566,104567],{},"qpos",[19,104569,104570,104572,104573,104576,104577,104580],{},[64,104571,104508],{}," 是 body 的世界坐标位置。",[64,104574,104575],{},"data.site_xpos[site_id]"," 是 site 的世界坐标位置。",[64,104578,104579],{},"mujoco.mj_name2id(...)"," 用名字查找模型元素 ID。",[19,104582,82759,104583,83067,104585,104587],{},[64,104584,103514],{},[64,104586,104332],{},"，那么它位于 box body 的局部原点。由于这个例子里 site 放在 body 中心，所以 body position 和 site position 通常非常接近。",[19,104589,104590],{},"如果你把 site 改成：",[57,104592,104594],{"className":53604,"code":104593,"language":53606,"meta":62,"style":62},"\u003Csite name=\"box_top\" pos=\"0 0 0.15\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[64,104595,104596],{"__ignoreMap":62},[67,104597,104598,104600,104602,104604,104606,104609,104611,104613,104616,104618,104620,104622,104624,104626,104628],{"class":69,"line":70},[67,104599,1766],{"class":77},[67,104601,103747],{"class":51837},[67,104603,15637],{"class":112},[67,104605,909],{"class":77},[67,104607,104608],{"class":84},"\"box_top\"",[67,104610,101643],{"class":112},[67,104612,909],{"class":77},[67,104614,104615],{"class":84},"\"0 0 0.15\"",[67,104617,101673],{"class":112},[67,104619,909],{"class":77},[67,104621,104315],{"class":84},[67,104623,79304],{"class":112},[67,104625,909],{"class":77},[67,104627,104322],{"class":84},[67,104629,101681],{"class":77},[19,104631,104632,104633,104636],{},"那么 site 会在盒子局部坐标的上方，输出的 ",[64,104634,104635],{},"site position"," 就会比 body position 的 z 坐标更高。",[803,104638,102885],{"id":102884},[815,104640,104641,104650,104653,104660,104666,104677],{},[818,104642,102948,104643,104645,104646,102951,104648,28922],{},[64,104644,103518],{}," 的初始高度从 ",[64,104647,1077],{},[64,104649,939],{},[818,104651,104652],{},"重新运行程序。",[818,104654,104655,104656,104659],{},"观察 ",[64,104657,104658],{},"box qpos"," 和最终位置是否变化。",[818,104661,104662,104663,104665],{},"故意把 ",[64,104664,103747],{}," 名称改错，确认程序能报错。",[818,104667,102948,104668,104670,104671,102951,104673,104676],{},[64,104669,101657],{}," 的颜色 ",[64,104672,102569],{},[64,104674,104675],{},"rgba=\"0 0 1 1\"","，后面用 viewer 看颜色变化。",[818,104678,102948,104679,83067,104681,102951,104684,104687,104688,104690],{},[64,104680,103514],{},[64,104682,104683],{},"pos",[64,104685,104686],{},"0 0 0.2","，观察 ",[64,104689,104635],{}," 如何变化。",[803,104692,102990],{"id":102989},[14,104694,104696],{"id":104695},"xml-error-schema-violation",[64,104697,104698],{},"XML Error: Schema violation",[19,104700,104701],{},"说明 XML 标签或属性不合法。查官方 XML Reference，确认标签放在正确父标签下面，属性名拼写正确。",[14,104703,104705,81827,104707],{"id":104704},"mj_name2id-返回-1",[64,104706,104448],{},[64,104708,104452],{},[19,104710,104711,104712,104715],{},"说明名字没有找到。检查 XML 中 ",[64,104713,104714],{},"name=\"...\"","，并确认对象类型正确。",[14,104717,104718],{"id":104718},"物体不下落",[19,104720,103060],{},[815,104722,104723,104728,104733],{},[818,104724,104725,104726],{},"body 是否有 ",[64,104727,102157],{},[818,104729,104730,104731],{},"gravity 是否为 ",[64,104732,103126],{},[818,104734,104735,104736,104738],{},"body 是否被固定在 ",[64,104737,102378],{}," 中",[14,104740,104741],{"id":104741},"坐标看起来不符合预期",[19,104743,104744],{},"先区分两种坐标：",[998,104746,104747,104756],{},[1001,104748,104749],{},[1004,104750,104751,104754],{},[1007,104752,104753],{"align":24453},"坐标",[1007,104755,101237],{"align":24453},[1044,104757,104758,104768],{},[1004,104759,104760,104765],{},[1049,104761,104762,104763],{"align":24453},"XML 里的 ",[64,104764,104683],{},[1049,104766,104767],{"align":24453},"相对父 body 的局部坐标",[1004,104769,104770,104776],{},[1049,104771,104772,25690,104774],{"align":24453},[64,104773,101616],{},[64,104775,104529],{},[1049,104777,104778],{"align":24453},"仿真更新后的世界坐标",[19,104780,104781,104782,104784,104785,83076,104788,104790],{},"如果你修改了 ",[64,104783,101607],{},"，但还没调用 ",[64,104786,104787],{},"mj_forward",[64,104789,101752],{},"，世界坐标可能还没有更新。",[803,104792,103144],{"id":103143},[19,104794,104795],{},"MJCF 建模先掌握四件事：",[815,104797,104798,104803,104808,104813],{},[818,104799,104800,104802],{},[64,104801,52337],{}," 表示刚体层级。",[818,104804,104805,104807],{},[64,104806,101657],{}," 表示形状、碰撞和质量。",[818,104809,104810,104812],{},[64,104811,103493],{}," 决定 body 能不能动、怎么动。",[818,104814,104815,104817],{},[64,104816,103747],{}," 用来标记关键点，方便 Python 读取位置。",[19,104819,104820],{},"只要能看懂 body、geom、joint、site，后面搭建 Cartpole 和 Reacher 就不会迷路。",[779,104822,104823],{},"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":62,"searchDepth":143,"depth":143,"links":104825},[104826,104827,104828,104834,104838,104839,104840,104847],{"id":101183,"depth":143,"text":101184},{"id":101306,"depth":143,"text":101307},{"id":101581,"depth":143,"text":101582,"children":104829},[104830,104831,104832,104833],{"id":103497,"depth":149,"text":103497},{"id":103611,"depth":149,"text":103611},{"id":103637,"depth":149,"text":103638},{"id":103741,"depth":149,"text":103742},{"id":101789,"depth":143,"text":101790,"children":104835},[104836,104837],{"id":102109,"depth":149,"text":102109},{"id":102245,"depth":149,"text":102245},{"id":102852,"depth":143,"text":102853},{"id":102884,"depth":143,"text":102885},{"id":102989,"depth":143,"text":102990,"children":104841},[104842,104843,104845,104846],{"id":104695,"depth":149,"text":104698},{"id":104704,"depth":149,"text":104844},"mj_name2id 返回 -1",{"id":104718,"depth":149,"text":104718},{"id":104741,"depth":149,"text":104741},{"id":103143,"depth":143,"text":103144},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch2-xmlmjcf",{"title":103191,"description":62},"wiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础","Y8Y5A098PzvFI7G-_y7JK19FBEdoto95izJP4Ykw-IM",{"id":104854,"title":104855,"body":104856,"description":62,"extension":787,"meta":106351,"navigation":176,"path":106352,"seo":106353,"stem":106354,"__hash__":106355},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口.md","3.Python 控制接口：读取状态与推进仿真",{"type":7,"value":104857,"toc":106323},[104858,104861,104863,104866,104869,104907,104910,104916,104919,104921,104923,104950,104952,104966,104968,105009,105011,105035,105037,105040,105049,105058,105061,105070,105078,105087,105090,105100,105103,105155,105162,105168,105176,105224,105227,105246,105249,105257,105261,105270,105303,105305,105653,105655,105667,105669,105680,105682,105685,105706,105712,105715,105740,105750,105753,105761,105764,105767,105788,105799,105801,105821,105824,105845,105854,105873,105879,105904,105907,105921,105928,105952,105955,105963,105972,105988,106000,106008,106017,106019,106022,106046,106051,106054,106076,106078,106117,106119,106126,106128,106136,106139,106142,106154,106195,106202,106213,106220,106223,106272,106275,106278,106284,106286,106291,106317,106320],[10,104859,104855],{"id":104860},"_3python-控制接口读取状态与推进仿真",[803,104862,101184],{"id":101183},[19,104864,104865],{},"本章理解 Python 如何控制 MuJoCo 仿真。",[19,104867,104868],{},"你将学习:",[815,104870,104871,104876,104881,104885,104890,104901],{},[818,104872,104873],{},[64,104874,104875],{},"MjModel.from_xml_string",[818,104877,104878],{},[64,104879,104880],{},"MjData(model)",[818,104882,104883],{},[64,104884,101752],{},[818,104886,104887],{},[64,104888,104889],{},"mj_resetData",[818,104891,104892,104893,1072,104895,1072,104898],{},"读取 ",[64,104894,104567],{},[64,104896,104897],{},"qvel",[64,104899,104900],{},"ctrl",[818,104902,104903,104904],{},"使用 ",[64,104905,104906],{},"model.opt.timestep",[19,104908,104909],{},"从这一章开始，你要把 MuJoCo 当成一个“状态机”来看：",[57,104911,104914],{"className":104912,"code":104913,"language":5906,"meta":62},[5904],"当前状态 data\n    + 当前控制 data.ctrl\n    + 模型参数 model\n          ↓\n      mj_step\n          ↓\n新的状态 data\n",[64,104915,104913],{"__ignoreMap":62},[19,104917,104918],{},"后面写控制器、奖励函数、强化学习环境，都是围绕这个状态机展开。",[803,104920,101307],{"id":101306},[19,104922,101310],{},[57,104924,104926],{"className":59,"code":104925,"language":61,"meta":62,"style":62},"sudo dnf install -y python3 python3-pip mesa-libGL mesa-dri-drivers glfw\n",[64,104927,104928],{"__ignoreMap":62},[67,104929,104930,104932,104934,104936,104938,104941,104943,104945,104947],{"class":69,"line":70},[67,104931,298],{"class":112},[67,104933,378],{"class":84},[67,104935,312],{"class":84},[67,104937,464],{"class":208},[67,104939,104940],{"class":84}," python3",[67,104942,101335],{"class":84},[67,104944,103038],{"class":84},[67,104946,101351],{"class":84},[67,104948,104949],{"class":84}," glfw\n",[19,104951,103356],{},[57,104953,104954],{"className":59,"code":101456,"language":61,"meta":62,"style":62},[64,104955,104956],{"__ignoreMap":62},[67,104957,104958,104960,104962,104964],{"class":69,"line":70},[67,104959,24546],{"class":112},[67,104961,312],{"class":84},[67,104963,101467],{"class":84},[67,104965,101470],{"class":84},[19,104967,103373],{},[57,104969,104971],{"className":59,"code":104970,"language":61,"meta":62,"style":62},"conda create -n mujoco-python-api python=3.10 -y\nconda activate mujoco-python-api\npip install \"mujoco>=2.3\" numpy\n",[64,104972,104973,104990,104999],{"__ignoreMap":62},[67,104974,104975,104977,104979,104981,104984,104986,104988],{"class":69,"line":70},[67,104976,30867],{"class":112},[67,104978,29713],{"class":84},[67,104980,25825],{"class":208},[67,104982,104983],{"class":84}," mujoco-python-api",[67,104985,101512],{"class":84},[67,104987,101515],{"class":208},[67,104989,101518],{"class":208},[67,104991,104992,104994,104996],{"class":69,"line":143},[67,104993,30867],{"class":112},[67,104995,101525],{"class":84},[67,104997,104998],{"class":84}," mujoco-python-api\n",[67,105000,105001,105003,105005,105007],{"class":69,"line":149},[67,105002,24546],{"class":112},[67,105004,312],{"class":84},[67,105006,101467],{"class":84},[67,105008,101470],{"class":84},[19,105010,101541],{},[815,105012,105013,105020,105029],{},[818,105014,105015,101555,105017,105019],{},[64,105016,101212],{},[64,105018,101217],{}," 是官方 Python bindings 的类名。",[818,105021,105022,105023,105026,105027,28922],{},"官方 Python API 中结构体名称使用大写开头，例如 C API 的 ",[64,105024,105025],{},"mjModel"," 在 Python 中是 ",[64,105028,101246],{},[818,105030,105031,105032,28922],{},"不要使用 ",[64,105033,105034],{},"sim = mujoco_py.MjSim(...)",[803,105036,101582],{"id":101581},[19,105038,105039],{},"仿真推进核心代码:",[57,105041,105043],{"className":30915,"code":105042,"language":30917,"meta":62,"style":62},"mujoco.mj_step(model, data)\n",[64,105044,105045],{"__ignoreMap":62},[67,105046,105047],{"class":69,"line":70},[67,105048,105042],{"class":77},[19,105050,105051,105052,1072,105054,1072,105056,28922],{},"这一步会根据当前状态和控制量计算力，推进动力学，并更新 ",[64,105053,101607],{},[64,105055,101610],{},[64,105057,101604],{},[19,105059,105060],{},"重置仿真:",[57,105062,105064],{"className":30915,"code":105063,"language":30917,"meta":62,"style":62},"mujoco.mj_resetData(model, data)\n",[64,105065,105066],{"__ignoreMap":62},[67,105067,105068],{"class":69,"line":70},[67,105069,105063],{"class":77},[19,105071,105072,105073,83076,105075,105077],{},"如果手动修改了 ",[64,105074,101607],{},[64,105076,101610],{},"，通常应调用:",[57,105079,105081],{"className":30915,"code":105080,"language":30917,"meta":62,"style":62},"mujoco.mj_forward(model, data)\n",[64,105082,105083],{"__ignoreMap":62},[67,105084,105085],{"class":69,"line":70},[67,105086,105080],{"class":77},[19,105088,105089],{},"让 MuJoCo 根据新状态更新派生量，例如 body 世界坐标。",[14,105091,105093,1072,105095,1072,105097,105099],{"id":105092},"qposqvelctrl-是什么",[64,105094,104567],{},[64,105096,104897],{},[64,105098,104900],{}," 是什么",[19,105101,105102],{},"这三个数组是 MuJoCo Python 控制里最常见的数组：",[998,105104,105105,105117],{},[1001,105106,105107],{},[1004,105108,105109,105112,105114],{},[1007,105110,105111],{"align":24453},"字段",[1007,105113,101237],{"align":24453},[1007,105115,105116],{"align":24453},"谁来修改",[1044,105118,105119,105131,105143],{},[1004,105120,105121,105125,105128],{},[1049,105122,105123],{"align":24453},[64,105124,101607],{},[1049,105126,105127],{"align":24453},"广义位置，例如小车位置、关节角、自由物体位置姿态",[1049,105129,105130],{"align":24453},"MuJoCo 更新，也可以手动设置初始状态",[1004,105132,105133,105137,105140],{},[1049,105134,105135],{"align":24453},[64,105136,101610],{},[1049,105138,105139],{"align":24453},"广义速度，例如小车速度、关节角速度",[1049,105141,105142],{"align":24453},"MuJoCo 更新，也可以手动清零",[1004,105144,105145,105149,105152],{},[1049,105146,105147],{"align":24453},[64,105148,101613],{},[1049,105150,105151],{"align":24453},"actuator 的控制输入",[1049,105153,105154],{"align":24453},"主要由你的控制代码写入",[19,105156,9744,105157,101555,105159,105161],{},[64,105158,104567],{},[64,105160,104897],{}," 不一定同维。自由刚体就是典型例子：",[57,105163,105166],{"className":105164,"code":105165,"language":5906,"meta":62},[5904],"freejoint: qpos 7 维，qvel 6 维\n",[64,105167,105165],{"__ignoreMap":62},[14,105169,105171,101555,105173,105175],{"id":105170},"mj_step-和-mj_forward-的区别",[64,105172,101752],{},[64,105174,104787],{}," 的区别",[998,105177,105178,105191],{},[1001,105179,105180],{},[1004,105181,105182,105185,105188],{},[1007,105183,105184],{"align":24453},"函数",[1007,105186,105187],{"align":24453},"是否推进时间",[1007,105189,105190],{"align":24453},"什么时候用",[1044,105192,105193,105206],{},[1004,105194,105195,105200,105203],{},[1049,105196,105197],{"align":24453},[64,105198,105199],{},"mj_step(model, data)",[1049,105201,105202],{"align":24453},"是",[1049,105204,105205],{"align":24453},"正常仿真循环，每调用一次前进一步",[1004,105207,105208,105213,105216],{},[1049,105209,105210],{"align":24453},[64,105211,105212],{},"mj_forward(model, data)",[1049,105214,105215],{"align":24453},"否",[1049,105217,105218,105219,1072,105221,105223],{"align":24453},"手动改了 ",[64,105220,104567],{},[64,105222,104897],{}," 后，刷新派生量",[19,105225,105226],{},"例如你写：",[57,105228,105230],{"className":30915,"code":105229,"language":30917,"meta":62,"style":62},"data.qpos[2] = 2.0\n",[64,105231,105232],{"__ignoreMap":62},[67,105233,105234,105237,105239,105241,105243],{"class":69,"line":70},[67,105235,105236],{"class":77},"data.qpos[",[67,105238,939],{"class":208},[67,105240,5162],{"class":77},[67,105242,909],{"class":73},[67,105244,105245],{"class":208}," 2.0\n",[19,105247,105248],{},"这只是改了“原始状态数组”。MuJoCo 还没有重新计算 body 世界坐标、site 世界坐标等派生数据，所以要接着调用：",[57,105250,105251],{"className":30915,"code":105080,"language":30917,"meta":62,"style":62},[64,105252,105253],{"__ignoreMap":62},[67,105254,105255],{"class":69,"line":70},[67,105256,105080],{"class":77},[14,105258,105260],{"id":105259},"为什么-reset-后要重新设置状态","为什么 reset 后要重新设置状态",[19,105262,105263,105266,105267,105269],{},[64,105264,105265],{},"mujoco.mj_resetData(model, data)"," 会把 ",[64,105268,33938],{}," 重置回模型默认状态。如果你想每次 episode 从随机姿态开始，常见写法是：",[57,105271,105273],{"className":30915,"code":105272,"language":30917,"meta":62,"style":62},"mujoco.mj_resetData(model, data)\ndata.qpos[:] = random_qpos\ndata.qvel[:] = 0.0\nmujoco.mj_forward(model, data)\n",[64,105274,105275,105279,105289,105299],{"__ignoreMap":62},[67,105276,105277],{"class":69,"line":70},[67,105278,105063],{"class":77},[67,105280,105281,105284,105286],{"class":69,"line":143},[67,105282,105283],{"class":77},"data.qpos[:] ",[67,105285,909],{"class":73},[67,105287,105288],{"class":77}," random_qpos\n",[67,105290,105291,105294,105296],{"class":69,"line":149},[67,105292,105293],{"class":77},"data.qvel[:] ",[67,105295,909],{"class":73},[67,105297,105298],{"class":208}," 0.0\n",[67,105300,105301],{"class":69,"line":155},[67,105302,105080],{"class":77},[803,105304,101790],{"id":101789},[57,105306,105308],{"className":30915,"code":105307,"language":30917,"meta":62,"style":62},"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",[64,105309,105310,105316,105326,105330,105334,105342,105347,105351,105355,105359,105364,105368,105373,105378,105383,105387,105391,105395,105399,105403,105407,105426,105433,105445,105456,105472,105488,105492,105496,105508,105520,105528,105532,105543,105547,105563,105567,105571,105580,105584,105589,105598,105602,105615,105620,105629,105633,105637,105649],{"__ignoreMap":62},[67,105311,105312,105314],{"class":69,"line":70},[67,105313,30929],{"class":73},[67,105315,101838],{"class":77},[67,105317,105318,105320,105322,105324],{"class":69,"line":143},[67,105319,30929],{"class":73},[67,105321,31917],{"class":77},[67,105323,31920],{"class":73},[67,105325,31923],{"class":77},[67,105327,105328],{"class":69,"line":149},[67,105329,177],{"emptyLinePlaceholder":176},[67,105331,105332],{"class":69,"line":155},[67,105333,177],{"emptyLinePlaceholder":176},[67,105335,105336,105338,105340],{"class":69,"line":161},[67,105337,101851],{"class":208},[67,105339,14282],{"class":73},[67,105341,101856],{"class":84},[67,105343,105344],{"class":69,"line":167},[67,105345,105346],{"class":84},"\u003Cmujoco model=\"state_api\">\n",[67,105348,105349],{"class":69,"line":173},[67,105350,101866],{"class":84},[67,105352,105353],{"class":69,"line":180},[67,105354,177],{"emptyLinePlaceholder":176},[67,105356,105357],{"class":69,"line":186},[67,105358,101875],{"class":84},[67,105360,105361],{"class":69,"line":444},[67,105362,105363],{"class":84},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\"\u002F>\n",[67,105365,105366],{"class":69,"line":2335},[67,105367,177],{"emptyLinePlaceholder":176},[67,105369,105370],{"class":69,"line":2340},[67,105371,105372],{"class":84},"    \u003Cbody name=\"ball\" pos=\"0 0 1\">\n",[67,105374,105375],{"class":69,"line":2346},[67,105376,105377],{"class":84},"      \u003Cfreejoint name=\"ball_free\"\u002F>\n",[67,105379,105380],{"class":69,"line":2351},[67,105381,105382],{"class":84},"      \u003Cgeom name=\"ball_geom\" type=\"sphere\" size=\"0.1\" mass=\"1\" rgba=\"0 0.2 1 1\"\u002F>\n",[67,105384,105385],{"class":69,"line":2365},[67,105386,101904],{"class":84},[67,105388,105389],{"class":69,"line":2370},[67,105390,101909],{"class":84},[67,105392,105393],{"class":69,"line":2376},[67,105394,101914],{"class":84},[67,105396,105397],{"class":69,"line":2397},[67,105398,96235],{"class":84},[67,105400,105401],{"class":69,"line":2402},[67,105402,177],{"emptyLinePlaceholder":176},[67,105404,105405],{"class":69,"line":2416},[67,105406,177],{"emptyLinePlaceholder":176},[67,105408,105409,105411,105414,105417,105419,105422,105424],{"class":69,"line":2421},[67,105410,32484],{"class":73},[67,105412,105413],{"class":112}," print_state",[67,105415,105416],{"class":77},"(prefix: ",[67,105418,2026],{"class":208},[67,105420,105421],{"class":77},", model: mujoco.MjModel, data: mujoco.MjData) -> ",[67,105423,96223],{"class":208},[67,105425,4459],{"class":77},[67,105427,105428,105430],{"class":69,"line":2450},[67,105429,31836],{"class":208},[67,105431,105432],{"class":77},"(prefix)\n",[67,105434,105435,105437,105439,105442],{"class":69,"line":2455},[67,105436,31836],{"class":208},[67,105438,864],{"class":77},[67,105440,105441],{"class":84},"\"  timestep:\"",[67,105443,105444],{"class":77},", model.opt.timestep)\n",[67,105446,105447,105449,105451,105454],{"class":69,"line":2472},[67,105448,31836],{"class":208},[67,105450,864],{"class":77},[67,105452,105453],{"class":84},"\"  time:\"",[67,105455,102015],{"class":77},[67,105457,105458,105460,105462,105465,105468,105470],{"class":69,"line":2477},[67,105459,31836],{"class":208},[67,105461,864],{"class":77},[67,105463,105464],{"class":84},"\"  qpos:\"",[67,105466,105467],{"class":77},", np.round(data.qpos.copy(), ",[67,105469,1151],{"class":208},[67,105471,31034],{"class":77},[67,105473,105474,105476,105478,105481,105484,105486],{"class":69,"line":2482},[67,105475,31836],{"class":208},[67,105477,864],{"class":77},[67,105479,105480],{"class":84},"\"  qvel:\"",[67,105482,105483],{"class":77},", np.round(data.qvel.copy(), ",[67,105485,1151],{"class":208},[67,105487,31034],{"class":77},[67,105489,105490],{"class":69,"line":2487},[67,105491,177],{"emptyLinePlaceholder":176},[67,105493,105494],{"class":69,"line":2501},[67,105495,177],{"emptyLinePlaceholder":176},[67,105497,105498,105500,105502,105504,105506],{"class":69,"line":2506},[67,105499,32484],{"class":73},[67,105501,2695],{"class":112},[67,105503,101935],{"class":77},[67,105505,96223],{"class":208},[67,105507,4459],{"class":77},[67,105509,105510,105512,105514,105516,105518],{"class":69,"line":3298},[67,105511,101944],{"class":77},[67,105513,909],{"class":73},[67,105515,101949],{"class":77},[67,105517,101851],{"class":208},[67,105519,870],{"class":77},[67,105521,105522,105524,105526],{"class":69,"line":3312},[67,105523,101958],{"class":77},[67,105525,909],{"class":73},[67,105527,101963],{"class":77},[67,105529,105530],{"class":69,"line":3320},[67,105531,177],{"emptyLinePlaceholder":176},[67,105533,105534,105537,105540],{"class":69,"line":3325},[67,105535,105536],{"class":77},"    print_state(",[67,105538,105539],{"class":84},"\"initial\"",[67,105541,105542],{"class":77},", model, data)\n",[67,105544,105545],{"class":69,"line":3331},[67,105546,177],{"emptyLinePlaceholder":176},[67,105548,105549,105551,105553,105555,105557,105559,105561],{"class":69,"line":3337},[67,105550,3921],{"class":73},[67,105552,102038],{"class":77},[67,105554,81],{"class":73},[67,105556,32980],{"class":208},[67,105558,864],{"class":77},[67,105560,1512],{"class":208},[67,105562,31323],{"class":77},[67,105564,105565],{"class":69,"line":3342},[67,105566,102053],{"class":77},[67,105568,105569],{"class":69,"line":8667},[67,105570,177],{"emptyLinePlaceholder":176},[67,105572,105573,105575,105578],{"class":69,"line":8691},[67,105574,105536],{"class":77},[67,105576,105577],{"class":84},"\"after 50 steps\"",[67,105579,105542],{"class":77},[67,105581,105582],{"class":69,"line":8696},[67,105583,177],{"emptyLinePlaceholder":176},[67,105585,105586],{"class":69,"line":8702},[67,105587,105588],{"class":77},"    mujoco.mj_resetData(model, data)\n",[67,105590,105591,105593,105596],{"class":69,"line":8729},[67,105592,105536],{"class":77},[67,105594,105595],{"class":84},"\"after reset\"",[67,105597,105542],{"class":77},[67,105599,105600],{"class":69,"line":8734},[67,105601,177],{"emptyLinePlaceholder":176},[67,105603,105604,105607,105609,105611,105613],{"class":69,"line":8740},[67,105605,105606],{"class":77},"    data.qpos[",[67,105608,939],{"class":208},[67,105610,5162],{"class":77},[67,105612,909],{"class":73},[67,105614,105245],{"class":208},[67,105616,105617],{"class":69,"line":8752},[67,105618,105619],{"class":77},"    mujoco.mj_forward(model, data)\n",[67,105621,105622,105624,105627],{"class":69,"line":8764},[67,105623,105536],{"class":77},[67,105625,105626],{"class":84},"\"after manual qpos edit\"",[67,105628,105542],{"class":77},[67,105630,105631],{"class":69,"line":8776},[67,105632,177],{"emptyLinePlaceholder":176},[67,105634,105635],{"class":69,"line":10435},[67,105636,177],{"emptyLinePlaceholder":176},[67,105638,105639,105641,105643,105645,105647],{"class":69,"line":10459},[67,105640,2254],{"class":73},[67,105642,31757],{"class":208},[67,105644,102096],{"class":73},[67,105646,102099],{"class":84},[67,105648,4459],{"class":77},[67,105650,105651],{"class":69,"line":10482},[67,105652,102106],{"class":77},[19,105654,104107],{},[57,105656,105658],{"className":59,"code":105657,"language":61,"meta":62,"style":62},"touch ch3_python_state.py\n",[64,105659,105660],{"__ignoreMap":62},[67,105661,105662,105664],{"class":69,"line":70},[67,105663,101820],{"class":112},[67,105665,105666],{"class":84}," ch3_python_state.py\n",[19,105668,102838],{},[57,105670,105672],{"className":59,"code":105671,"language":61,"meta":62,"style":62},"python ch3_python_state.py\n",[64,105673,105674],{"__ignoreMap":62},[67,105675,105676,105678],{"class":69,"line":70},[67,105677,30917],{"class":112},[67,105679,105666],{"class":84},[14,105681,102109],{"id":102109},[19,105683,105684],{},"打印状态的函数：",[57,105686,105688],{"className":30915,"code":105687,"language":30917,"meta":62,"style":62},"def print_state(prefix: str, model: mujoco.MjModel, data: mujoco.MjData) -> None:\n",[64,105689,105690],{"__ignoreMap":62},[67,105691,105692,105694,105696,105698,105700,105702,105704],{"class":69,"line":70},[67,105693,32484],{"class":73},[67,105695,105413],{"class":112},[67,105697,105416],{"class":77},[67,105699,2026],{"class":208},[67,105701,105421],{"class":77},[67,105703,96223],{"class":208},[67,105705,4459],{"class":77},[19,105707,105708,105709,105711],{},"这个函数不是 MuJoCo 必需的，只是为了让你更清楚地看到每个阶段 ",[64,105710,33938],{}," 里发生了什么。",[19,105713,105714],{},"推进 50 步：",[57,105716,105718],{"className":30915,"code":105717,"language":30917,"meta":62,"style":62},"for _ in range(50):\n    mujoco.mj_step(model, data)\n",[64,105719,105720,105736],{"__ignoreMap":62},[67,105721,105722,105724,105726,105728,105730,105732,105734],{"class":69,"line":70},[67,105723,74],{"class":73},[67,105725,102038],{"class":77},[67,105727,81],{"class":73},[67,105729,32980],{"class":208},[67,105731,864],{"class":77},[67,105733,1512],{"class":208},[67,105735,31323],{"class":77},[67,105737,105738],{"class":69,"line":143},[67,105739,102236],{"class":77},[19,105741,105742,105743,105746,105747,105749],{},"由于 ",[64,105744,105745],{},"timestep=0.01","，所以 50 步后时间约为 ",[64,105748,35866],{}," 秒。",[19,105751,105752],{},"重置：",[57,105754,105755],{"className":30915,"code":105063,"language":30917,"meta":62,"style":62},[64,105756,105757],{"__ignoreMap":62},[67,105758,105759],{"class":69,"line":70},[67,105760,105063],{"class":77},[19,105762,105763],{},"这会把时间、位置、速度恢复到初始状态。",[19,105765,105766],{},"手动改高度：",[57,105768,105770],{"className":30915,"code":105769,"language":30917,"meta":62,"style":62},"data.qpos[2] = 2.0\nmujoco.mj_forward(model, data)\n",[64,105771,105772,105784],{"__ignoreMap":62},[67,105773,105774,105776,105778,105780,105782],{"class":69,"line":70},[67,105775,105236],{"class":77},[67,105777,939],{"class":208},[67,105779,5162],{"class":77},[67,105781,909],{"class":73},[67,105783,105245],{"class":208},[67,105785,105786],{"class":69,"line":143},[67,105787,105080],{"class":77},[19,105789,105790,105791,105794,105795,105798],{},"这个例子里 ",[64,105792,105793],{},"qpos[2]"," 是 freejoint 的 z 坐标。改成 ",[64,105796,105797],{},"2.0"," 表示把小球放到更高的位置。",[14,105800,102245],{"id":102245},[57,105802,105803],{"className":30915,"code":105687,"language":30917,"meta":62,"style":62},[64,105804,105805],{"__ignoreMap":62},[67,105806,105807,105809,105811,105813,105815,105817,105819],{"class":69,"line":70},[67,105808,32484],{"class":73},[67,105810,105413],{"class":112},[67,105812,105416],{"class":77},[67,105814,2026],{"class":208},[67,105816,105421],{"class":77},[67,105818,96223],{"class":208},[67,105820,4459],{"class":77},[19,105822,105823],{},"这里定义了一个辅助函数，用来打印状态。括号里的三个参数分别是：",[815,105825,105826,105835,105840],{},[818,105827,105828,105831,105832,105834],{},[64,105829,105830],{},"prefix","：一段文字，比如 ",[64,105833,105539],{},"，用来说明现在打印的是哪个阶段。",[818,105836,105837,105839],{},[64,105838,102622],{},"：MuJoCo 模型。",[818,105841,105842,105844],{},[64,105843,33938],{},"：MuJoCo 当前状态。",[19,105846,105847,1072,105850,105853],{},[64,105848,105849],{},"prefix: str",[64,105851,105852],{},"model: mujoco.MjModel"," 这些是类型提示。它们帮助人和编辑器理解变量类型，不会改变程序运行逻辑。",[57,105855,105857],{"className":30915,"code":105856,"language":30917,"meta":62,"style":62},"print(\"  qpos:\", np.round(data.qpos.copy(), 4))\n",[64,105858,105859],{"__ignoreMap":62},[67,105860,105861,105863,105865,105867,105869,105871],{"class":69,"line":70},[67,105862,30952],{"class":208},[67,105864,864],{"class":77},[67,105866,105464],{"class":84},[67,105868,105467],{"class":77},[67,105870,1151],{"class":208},[67,105872,31034],{"class":77},[19,105874,105875,105878],{},[64,105876,105877],{},"np.round(..., 4)"," 表示保留 4 位小数。仿真输出可能有很多小数，保留 4 位更容易看。",[57,105880,105882],{"className":30915,"code":105881,"language":30917,"meta":62,"style":62},"model = mujoco.MjModel.from_xml_string(XML)\ndata = mujoco.MjData(model)\n",[64,105883,105884,105896],{"__ignoreMap":62},[67,105885,105886,105888,105890,105892,105894],{"class":69,"line":70},[67,105887,102171],{"class":77},[67,105889,909],{"class":73},[67,105891,101949],{"class":77},[67,105893,101851],{"class":208},[67,105895,870],{"class":77},[67,105897,105898,105900,105902],{"class":69,"line":143},[67,105899,102195],{"class":77},[67,105901,909],{"class":73},[67,105903,101963],{"class":77},[19,105905,105906],{},"这两行是所有 MuJoCo 程序的常见开头：先编译模型，再创建运行数据。",[57,105908,105910],{"className":30915,"code":105909,"language":30917,"meta":62,"style":62},"print_state(\"initial\", model, data)\n",[64,105911,105912],{"__ignoreMap":62},[67,105913,105914,105917,105919],{"class":69,"line":70},[67,105915,105916],{"class":77},"print_state(",[67,105918,105539],{"class":84},[67,105920,105542],{"class":77},[19,105922,105923,105924,105927],{},"调用刚才定义的 ",[64,105925,105926],{},"print_state"," 函数，打印初始状态。",[57,105929,105930],{"className":30915,"code":105717,"language":30917,"meta":62,"style":62},[64,105931,105932,105948],{"__ignoreMap":62},[67,105933,105934,105936,105938,105940,105942,105944,105946],{"class":69,"line":70},[67,105935,74],{"class":73},[67,105937,102038],{"class":77},[67,105939,81],{"class":73},[67,105941,32980],{"class":208},[67,105943,864],{"class":77},[67,105945,1512],{"class":208},[67,105947,31323],{"class":77},[67,105949,105950],{"class":69,"line":143},[67,105951,102236],{"class":77},[19,105953,105954],{},"循环 50 次，每次推进 0.01 秒，所以最后时间约为 0.5 秒。",[57,105956,105957],{"className":30915,"code":105063,"language":30917,"meta":62,"style":62},[64,105958,105959],{"__ignoreMap":62},[67,105960,105961],{"class":69,"line":70},[67,105962,105063],{"class":77},[19,105964,105965,105966,105968,105969,105971],{},"重置 ",[64,105967,33938],{},"。注意它不会重新创建 ",[64,105970,102622],{},"，因为模型结构没有变，只是状态回到初始值。",[57,105973,105974],{"className":30915,"code":105229,"language":30917,"meta":62,"style":62},[64,105975,105976],{"__ignoreMap":62},[67,105977,105978,105980,105982,105984,105986],{"class":69,"line":70},[67,105979,105236],{"class":77},[67,105981,939],{"class":208},[67,105983,5162],{"class":77},[67,105985,909],{"class":73},[67,105987,105245],{"class":208},[19,105989,105990,105991,1072,105994,1072,105997,105999],{},"这行是“手动改状态”。在 freejoint 中，",[64,105992,105993],{},"qpos[0]",[64,105995,105996],{},"qpos[1]",[64,105998,105793],{}," 分别是 x、y、z 坐标，所以这里把小球高度改成 2.0。",[57,106001,106002],{"className":30915,"code":105080,"language":30917,"meta":62,"style":62},[64,106003,106004],{"__ignoreMap":62},[67,106005,106006],{"class":69,"line":70},[67,106007,105080],{"class":77},[19,106009,106010,106011,106013,106014,106016],{},"手动改完 ",[64,106012,104567],{}," 后，调用 ",[64,106015,104787],{}," 让 MuJoCo 重新计算派生状态。它不推进时间，只刷新当前状态对应的世界坐标、碰撞信息等。",[803,106018,102853],{"id":102852},[19,106020,106021],{},"你会看到:",[815,106023,106024,106029,106034,106037],{},[818,106025,106026,106027],{},"初始时间为 ",[64,106028,1051],{},[818,106030,106031,106032],{},"50 步后时间约为 ",[64,106033,35866],{},[818,106035,106036],{},"reset 后状态恢复",[818,106038,106039,106040,106043,106044],{},"手动修改 ",[64,106041,106042],{},"data.qpos[2]"," 后，小球高度变为 ",[64,106045,105797],{},[19,106047,106048,106050],{},[64,106049,105793],{}," 在这个例子中表示自由刚体的 z 坐标。",[19,106052,106053],{},"输出里可以重点看三件事：",[815,106055,106056,106064,106069],{},[818,106057,106058,106060,106061,106063],{},[64,106059,3109],{}," 是否随着 ",[64,106062,101752],{}," 增加。",[818,106065,106066,106068],{},[64,106067,104567],{}," 的 z 坐标是否因为下落而变化。",[818,106070,106071,106073,106074,28922],{},[64,106072,104889],{}," 后时间是否回到 ",[64,106075,1051],{},[803,106077,102885],{"id":102884},[815,106079,106080,106086,106092,106098,106101,106110],{},[818,106081,106082,106083,28922],{},"修改 timestep 为 ",[64,106084,106085],{},"0.005",[818,106087,106088,106089,28922],{},"重新运行，检查 50 步后时间是否约为 ",[64,106090,106091],{},"0.25",[818,106093,106094,106095,28922],{},"修改重力为 ",[64,106096,106097],{},"0 0 -1.0",[818,106099,106100],{},"观察小球下降速度是否变慢。",[818,106102,102948,106103,102951,106106,106109],{},[64,106104,106105],{},"data.qpos[2] = 2.0",[64,106107,106108],{},"data.qpos[0] = 1.0","，观察 x 坐标是否变化。",[818,106111,106112,106113,106116],{},"注释掉 ",[64,106114,106115],{},"mujoco.mj_forward(model, data)","，观察派生状态是否可能没有及时更新。",[803,106118,102990],{"id":102989},[14,106120,106122,106123,106125],{"id":106121},"修改-dataqpos-后位置没有更新","修改 ",[64,106124,101607],{}," 后位置没有更新",[19,106127,102999],{},[57,106129,106130],{"className":30915,"code":105080,"language":30917,"meta":62,"style":62},[64,106131,106132],{"__ignoreMap":62},[67,106133,106134],{"class":69,"line":70},[67,106135,105080],{"class":77},[14,106137,106138],{"id":106138},"数组维度看不懂",[19,106140,106141],{},"打印模型维度:",[57,106143,106145],{"className":30915,"code":106144,"language":30917,"meta":62,"style":62},"print(model.nq, model.nv, model.nu)\n",[64,106146,106147],{"__ignoreMap":62},[67,106148,106149,106151],{"class":69,"line":70},[67,106150,30952],{"class":208},[67,106152,106153],{"class":77},"(model.nq, model.nv, model.nu)\n",[998,106155,106156,106164],{},[1001,106157,106158],{},[1004,106159,106160,106162],{},[1007,106161,105111],{"align":24453},[1007,106163,101237],{"align":24453},[1044,106165,106166,106176,106186],{},[1004,106167,106168,106173],{},[1049,106169,106170],{"align":24453},[64,106171,106172],{},"nq",[1049,106174,106175],{"align":24453},"位置变量数量",[1004,106177,106178,106183],{},[1049,106179,106180],{"align":24453},[64,106181,106182],{},"nv",[1049,106184,106185],{"align":24453},"速度变量数量",[1004,106187,106188,106192],{},[1049,106189,106190],{"align":24453},[64,106191,102699],{},[1049,106193,106194],{"align":24453},"控制输入数量",[14,106196,106198,106199,106201],{"id":106197},"误以为-qpos-一定等于关节数","误以为 ",[64,106200,104567],{}," 一定等于关节数",[19,106203,106204,106205,83067,106207,106209,106210,106212],{},"不是。例如 ",[64,106206,102157],{},[64,106208,104567],{}," 是 7 维，但 ",[64,106211,104897],{}," 是 6 维。",[14,106214,106216,106217,106219],{"id":106215},"不知道某个元素在-qpos-的第几位","不知道某个元素在 ",[64,106218,104567],{}," 的第几位",[19,106221,106222],{},"初学时可以先打印：",[57,106224,106226],{"className":30915,"code":106225,"language":30917,"meta":62,"style":62},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"qpos:\", data.qpos)\nprint(\"qvel:\", data.qvel)\n",[64,106227,106228,106238,106248,106260],{"__ignoreMap":62},[67,106229,106230,106232,106234,106236],{"class":69,"line":70},[67,106231,30952],{"class":208},[67,106233,864],{"class":77},[67,106235,101976],{"class":84},[67,106237,101979],{"class":77},[67,106239,106240,106242,106244,106246],{"class":69,"line":143},[67,106241,30952],{"class":208},[67,106243,864],{"class":77},[67,106245,101988],{"class":84},[67,106247,101991],{"class":77},[67,106249,106250,106252,106254,106257],{"class":69,"line":149},[67,106251,30952],{"class":208},[67,106253,864],{"class":77},[67,106255,106256],{"class":84},"\"qpos:\"",[67,106258,106259],{"class":77},", data.qpos)\n",[67,106261,106262,106264,106266,106269],{"class":69,"line":155},[67,106263,30952],{"class":208},[67,106265,864],{"class":77},[67,106267,106268],{"class":84},"\"qvel:\"",[67,106270,106271],{"class":77},", data.qvel)\n",[19,106273,106274],{},"更复杂模型中，可以用 MuJoCo 的 joint 地址字段查询，不过本教程先保持简单。前几章的模型维度都很小，直接打印数组就能看懂。",[14,106276,106277],{"id":106277},"仿真结果每次都一样",[19,106279,106280,106281,106283],{},"这是正常的。MuJoCo 本身是确定性仿真，只要初始状态、模型参数、控制输入一样，结果通常就一样。想要每次不同，需要你自己在 reset 时随机化 ",[64,106282,104567],{},"、目标点或控制输入。",[803,106285,103144],{"id":103143},[19,106287,106288,106289,25331],{},"Python 控制 MuJoCo 的核心就是读写 ",[64,106290,33938],{},[815,106292,106293,106301,106306,106311],{},[818,106294,106295,106296,101555,106298,106300],{},"用 ",[64,106297,101607],{},[64,106299,101610],{}," 读取状态。",[818,106302,106295,106303,106305],{},[64,106304,101613],{}," 写入控制。",[818,106307,106295,106308,106310],{},[64,106309,101752],{}," 推进时间。",[818,106312,106313,106314,106316],{},"手动改状态后用 ",[64,106315,104787],{}," 刷新派生量。",[19,106318,106319],{},"理解这一章后，就可以进入关节和 actuator 控制。",[779,106321,106322],{},"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":62,"searchDepth":143,"depth":143,"links":106324},[106325,106326,106327,106334,106338,106339,106340,106350],{"id":101183,"depth":143,"text":101184},{"id":101306,"depth":143,"text":101307},{"id":101581,"depth":143,"text":101582,"children":106328},[106329,106331,106333],{"id":105092,"depth":149,"text":106330},"qpos、qvel、ctrl 是什么",{"id":105170,"depth":149,"text":106332},"mj_step 和 mj_forward 的区别",{"id":105259,"depth":149,"text":105260},{"id":101789,"depth":143,"text":101790,"children":106335},[106336,106337],{"id":102109,"depth":149,"text":102109},{"id":102245,"depth":149,"text":102245},{"id":102852,"depth":143,"text":102853},{"id":102884,"depth":143,"text":102885},{"id":102989,"depth":143,"text":102990,"children":106341},[106342,106344,106345,106347,106349],{"id":106121,"depth":149,"text":106343},"修改 data.qpos 后位置没有更新",{"id":106138,"depth":149,"text":106138},{"id":106197,"depth":149,"text":106346},"误以为 qpos 一定等于关节数",{"id":106215,"depth":149,"text":106348},"不知道某个元素在 qpos 的第几位",{"id":106277,"depth":149,"text":106277},{"id":103143,"depth":143,"text":103144},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch3-python",{"title":104855,"description":62},"wiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口","FAugzO4y0q2LsXaOuxDoqmSxVFhJdD5Lw49NR_xgjZI",{"id":106357,"title":106358,"body":106359,"description":62,"extension":787,"meta":108049,"navigation":176,"path":108050,"seo":108051,"stem":108052,"__hash__":108053},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制.md","4.关节、Actuator 与力控制",{"type":7,"value":106360,"toc":108025},[106361,106364,106366,106369,106371,106396,106399,106418,106421,106423,106425,106449,106451,106465,106467,106508,106510,106534,106536,106539,106573,106575,106588,106591,106659,106668,106672,106675,106709,106715,106718,106722,106761,106764,106784,106788,106831,106833,106862,106865,106871,106874,106876,107270,107272,107284,107286,107297,107299,107302,107331,107339,107342,107377,107380,107382,107390,107393,107395,107406,107416,107436,107439,107475,107487,107535,107554,107596,107609,107637,107642,107663,107673,107691,107694,107728,107731,107751,107754,107773,107779,107781,107784,107790,107796,107806,107809,107815,107824,107826,107872,107874,107880,107886,107889,107892,107912,107915,107921,107927,107929,107952,107955,107958,107967,107970,108008,108010,108013,108019,108022],[10,106362,106358],{"id":106363},"_4关节actuator-与力控制",[803,106365,101184],{"id":101183},[19,106367,106368],{},"本章用 MuJoCo 搭建一个单关节摆杆，并通过 actuator 控制它运动。",[19,106370,104868],{},[815,106372,106373,106379,106384,106388,106393],{},[818,106374,106375,106378],{},[64,106376,106377],{},"hinge"," 关节",[818,106380,106381],{},[64,106382,106383],{},"\u003Cactuator>\u003Cmotor ...\u002F>\u003C\u002Factuator>",[818,106385,106386],{},[64,106387,101613],{},[818,106389,106390],{},[64,106391,106392],{},"ctrlrange",[818,106394,106395],{},"读取关节角和角速度",[19,106397,106398],{},"这章是从“物体自己掉落”进入“我主动控制物体”的关键一步。你会第一次写：",[57,106400,106402],{"className":30915,"code":106401,"language":30917,"meta":62,"style":62},"data.ctrl[0] = ...\n",[64,106403,106404],{"__ignoreMap":62},[67,106405,106406,106409,106411,106413,106415],{"class":69,"line":70},[67,106407,106408],{"class":77},"data.ctrl[",[67,106410,1051],{"class":208},[67,106412,5162],{"class":77},[67,106414,909],{"class":73},[67,106416,106417],{"class":208}," ...\n",[19,106419,106420],{},"这行代码就是控制算法和 MuJoCo 物理世界之间的接口。",[803,106422,101307],{"id":101306},[19,106424,101310],{},[57,106426,106427],{"className":59,"code":104925,"language":61,"meta":62,"style":62},[64,106428,106429],{"__ignoreMap":62},[67,106430,106431,106433,106435,106437,106439,106441,106443,106445,106447],{"class":69,"line":70},[67,106432,298],{"class":112},[67,106434,378],{"class":84},[67,106436,312],{"class":84},[67,106438,464],{"class":208},[67,106440,104940],{"class":84},[67,106442,101335],{"class":84},[67,106444,103038],{"class":84},[67,106446,101351],{"class":84},[67,106448,104949],{"class":84},[19,106450,103356],{},[57,106452,106453],{"className":59,"code":101456,"language":61,"meta":62,"style":62},[64,106454,106455],{"__ignoreMap":62},[67,106456,106457,106459,106461,106463],{"class":69,"line":70},[67,106458,24546],{"class":112},[67,106460,312],{"class":84},[67,106462,101467],{"class":84},[67,106464,101470],{"class":84},[19,106466,103373],{},[57,106468,106470],{"className":59,"code":106469,"language":61,"meta":62,"style":62},"conda create -n mujoco-control python=3.10 -y\nconda activate mujoco-control\npip install \"mujoco>=2.3\" numpy\n",[64,106471,106472,106489,106498],{"__ignoreMap":62},[67,106473,106474,106476,106478,106480,106483,106485,106487],{"class":69,"line":70},[67,106475,30867],{"class":112},[67,106477,29713],{"class":84},[67,106479,25825],{"class":208},[67,106481,106482],{"class":84}," mujoco-control",[67,106484,101512],{"class":84},[67,106486,101515],{"class":208},[67,106488,101518],{"class":208},[67,106490,106491,106493,106495],{"class":69,"line":143},[67,106492,30867],{"class":112},[67,106494,101525],{"class":84},[67,106496,106497],{"class":84}," mujoco-control\n",[67,106499,106500,106502,106504,106506],{"class":69,"line":149},[67,106501,24546],{"class":112},[67,106503,312],{"class":84},[67,106505,101467],{"class":84},[67,106507,101470],{"class":84},[19,106509,101541],{},[815,106511,106512,106518,106525,106531],{},[818,106513,106514,106517],{},[64,106515,106516],{},"\u003Cmotor>"," 是 MuJoCo XML Reference 中的 actuator shortcut。",[818,106519,106520,106522,106523,28922],{},[64,106521,101613],{}," 长度等于 ",[64,106524,102695],{},[818,106526,82759,106527,106530],{},[64,106528,106529],{},"model.nu == 0","，说明 XML 没有定义 actuator。",[818,106532,106533],{},"actuator 细节在 MuJoCo 不同版本中有扩展，本文只使用基础 motor。",[803,106535,101582],{"id":101581},[19,106537,106538],{},"关节决定 body 如何运动:",[57,106540,106542],{"className":53604,"code":106541,"language":53606,"meta":62,"style":62},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[64,106543,106544],{"__ignoreMap":62},[67,106545,106546,106548,106550,106552,106554,106557,106559,106561,106563,106566,106568,106571],{"class":69,"line":70},[67,106547,1766],{"class":77},[67,106549,103493],{"class":51837},[67,106551,15637],{"class":112},[67,106553,909],{"class":77},[67,106555,106556],{"class":84},"\"hinge\"",[67,106558,54361],{"class":112},[67,106560,909],{"class":77},[67,106562,106556],{"class":84},[67,106564,106565],{"class":112}," axis",[67,106567,909],{"class":77},[67,106569,106570],{"class":84},"\"0 1 0\"",[67,106572,101681],{"class":77},[19,106574,103589],{},[815,106576,106577,106582,106585],{},[818,106578,106579,106580],{},"名字是 ",[64,106581,106377],{},[818,106583,106584],{},"类型是旋转关节",[818,106586,106587],{},"绕 y 轴旋转",[19,106589,106590],{},"actuator 决定如何施加控制:",[57,106592,106594],{"className":53604,"code":106593,"language":53606,"meta":62,"style":62},"\u003Cactuator>\n  \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n\u003C\u002Factuator>\n",[64,106595,106596,106605,106651],{"__ignoreMap":62},[67,106597,106598,106600,106603],{"class":69,"line":70},[67,106599,1766],{"class":77},[67,106601,106602],{"class":51837},"actuator",[67,106604,51844],{"class":77},[67,106606,106607,106609,106612,106614,106616,106619,106622,106624,106626,106629,106631,106633,106636,106638,106641,106644,106646,106649],{"class":69,"line":143},[67,106608,52681],{"class":77},[67,106610,106611],{"class":51837},"motor",[67,106613,15637],{"class":112},[67,106615,909],{"class":77},[67,106617,106618],{"class":84},"\"hinge_motor\"",[67,106620,106621],{"class":112}," joint",[67,106623,909],{"class":77},[67,106625,106556],{"class":84},[67,106627,106628],{"class":112}," gear",[67,106630,909],{"class":77},[67,106632,4398],{"class":84},[67,106634,106635],{"class":112}," ctrlrange",[67,106637,909],{"class":77},[67,106639,106640],{"class":84},"\"-2 2\"",[67,106642,106643],{"class":112}," ctrllimited",[67,106645,909],{"class":77},[67,106647,106648],{"class":84},"\"true\"",[67,106650,101681],{"class":77},[67,106652,106653,106655,106657],{"class":69,"line":149},[67,106654,52322],{"class":77},[67,106656,106602],{"class":51837},[67,106658,51844],{"class":77},[19,106660,106661,106664,106665,28922],{},[64,106662,106663],{},"data.ctrl[0]"," 会变成电机输入，控制输入限制在 ",[64,106666,106667],{},"[-2, 2]",[14,106669,106671],{"id":106670},"joint-和-actuator-的关系","joint 和 actuator 的关系",[19,106673,106674],{},"很多新手会把 joint 和 actuator 混在一起。它们不是一回事：",[998,106676,106677,106687],{},[1001,106678,106679],{},[1004,106680,106681,106683,106685],{},[1007,106682,26462],{"align":24453},[1007,106684,103233],{"align":24453},[1007,106686,101271],{"align":24453},[1044,106688,106689,106699],{},[1004,106690,106691,106693,106696],{},[1049,106692,103493],{"align":24453},[1049,106694,106695],{"align":24453},"定义能怎么动",[1049,106697,106698],{"align":24453},"门轴允许门旋转",[1004,106700,106701,106703,106706],{},[1049,106702,106602],{"align":24453},[1049,106704,106705],{"align":24453},"定义怎么施力或控制",[1049,106707,106708],{"align":24453},"人推门、马达带动门",[19,106710,106711,106712,106714],{},"只有 joint，没有 actuator，物体仍然可能因为重力、碰撞、初速度而动，但你不能通过 ",[64,106713,101613],{}," 主动控制它。",[19,106716,106717],{},"只有 actuator，没有正确引用 joint，模型会编译失败或没有控制效果。",[14,106719,106721],{"id":106720},"hinge-joint","hinge joint",[57,106723,106725],{"className":53604,"code":106724,"language":53606,"meta":62,"style":62},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[64,106726,106727],{"__ignoreMap":62},[67,106728,106729,106731,106733,106735,106737,106739,106741,106743,106745,106747,106749,106751,106754,106756,106759],{"class":69,"line":70},[67,106730,1766],{"class":77},[67,106732,103493],{"class":51837},[67,106734,15637],{"class":112},[67,106736,909],{"class":77},[67,106738,106556],{"class":84},[67,106740,54361],{"class":112},[67,106742,909],{"class":77},[67,106744,106556],{"class":84},[67,106746,106565],{"class":112},[67,106748,909],{"class":77},[67,106750,106570],{"class":84},[67,106752,106753],{"class":112}," damping",[67,106755,909],{"class":77},[67,106757,106758],{"class":84},"\"0.1\"",[67,106760,101681],{"class":77},[19,106762,106763],{},"含义：",[815,106765,106766,106772,106778],{},[818,106767,106768,106771],{},[64,106769,106770],{},"type=\"hinge\"","：只能绕一个轴旋转。",[818,106773,106774,106777],{},[64,106775,106776],{},"axis=\"0 1 0\"","：绕 y 轴旋转。",[818,106779,106780,106783],{},[64,106781,106782],{},"damping=\"0.1\"","：阻尼，类似摩擦，会让运动慢慢衰减。",[14,106785,106787],{"id":106786},"motor-actuator","motor actuator",[57,106789,106791],{"className":53604,"code":106790,"language":53606,"meta":62,"style":62},"\u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[64,106792,106793],{"__ignoreMap":62},[67,106794,106795,106797,106799,106801,106803,106805,106807,106809,106811,106813,106815,106817,106819,106821,106823,106825,106827,106829],{"class":69,"line":70},[67,106796,1766],{"class":77},[67,106798,106611],{"class":51837},[67,106800,15637],{"class":112},[67,106802,909],{"class":77},[67,106804,106618],{"class":84},[67,106806,106621],{"class":112},[67,106808,909],{"class":77},[67,106810,106556],{"class":84},[67,106812,106628],{"class":112},[67,106814,909],{"class":77},[67,106816,4398],{"class":84},[67,106818,106635],{"class":112},[67,106820,909],{"class":77},[67,106822,106640],{"class":84},[67,106824,106643],{"class":112},[67,106826,909],{"class":77},[67,106828,106648],{"class":84},[67,106830,101681],{"class":77},[19,106832,106763],{},[815,106834,106835,106844,106850,106856],{},[818,106836,106837,106840,106841,106843],{},[64,106838,106839],{},"joint=\"hinge\"","：这个电机作用在名为 ",[64,106842,106377],{}," 的关节上。",[818,106845,106846,106849],{},[64,106847,106848],{},"gear=\"1\"","：控制输入到力\u002F力矩的放大比例。",[818,106851,106852,106855],{},[64,106853,106854],{},"ctrlrange=\"-2 2\"","：允许的控制输入范围。",[818,106857,106858,106861],{},[64,106859,106860],{},"ctrllimited=\"true\"","：启用控制范围限制。",[19,106863,106864],{},"简单理解：",[57,106866,106869],{"className":106867,"code":106868,"language":5906,"meta":62},[5904],"实际施加效果 ≈ data.ctrl[0] * gear\n",[64,106870,106868],{"__ignoreMap":62},[19,106872,106873],{},"真实细节比这更复杂，但这个近似足够帮助入门。",[803,106875,101790],{"id":101789},[57,106877,106879],{"className":30915,"code":106878,"language":30917,"meta":62,"style":62},"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",[64,106880,106881,106888,106892,106898,106908,106912,106916,106924,106929,106934,106938,106942,106947,106952,106956,106961,106966,106971,106976,106980,106984,106988,106993,106998,107003,107007,107011,107015,107019,107031,107043,107051,107055,107065,107075,107085,107089,107102,107115,107119,107136,107150,107185,107189,107193,107204,107219,107234,107246,107250,107254,107266],{"__ignoreMap":62},[67,106882,106883,106885],{"class":69,"line":70},[67,106884,30929],{"class":73},[67,106886,106887],{"class":77}," math\n",[67,106889,106890],{"class":69,"line":143},[67,106891,177],{"emptyLinePlaceholder":176},[67,106893,106894,106896],{"class":69,"line":149},[67,106895,30929],{"class":73},[67,106897,101838],{"class":77},[67,106899,106900,106902,106904,106906],{"class":69,"line":155},[67,106901,30929],{"class":73},[67,106903,31917],{"class":77},[67,106905,31920],{"class":73},[67,106907,31923],{"class":77},[67,106909,106910],{"class":69,"line":161},[67,106911,177],{"emptyLinePlaceholder":176},[67,106913,106914],{"class":69,"line":167},[67,106915,177],{"emptyLinePlaceholder":176},[67,106917,106918,106920,106922],{"class":69,"line":173},[67,106919,101851],{"class":208},[67,106921,14282],{"class":73},[67,106923,101856],{"class":84},[67,106925,106926],{"class":69,"line":180},[67,106927,106928],{"class":84},"\u003Cmujoco model=\"one_link_motor\">\n",[67,106930,106931],{"class":69,"line":186},[67,106932,106933],{"class":84},"  \u003Coption timestep=\"0.002\" gravity=\"0 0 -9.81\"\u002F>\n",[67,106935,106936],{"class":69,"line":444},[67,106937,177],{"emptyLinePlaceholder":176},[67,106939,106940],{"class":69,"line":2335},[67,106941,101875],{"class":84},[67,106943,106944],{"class":69,"line":2340},[67,106945,106946],{"class":84},"    \u003Cbody name=\"base\" pos=\"0 0 0.5\">\n",[67,106948,106949],{"class":69,"line":2346},[67,106950,106951],{"class":84},"      \u003Cgeom name=\"base_geom\" type=\"sphere\" size=\"0.05\" rgba=\"0.2 0.2 0.2 1\"\u002F>\n",[67,106953,106954],{"class":69,"line":2351},[67,106955,177],{"emptyLinePlaceholder":176},[67,106957,106958],{"class":69,"line":2365},[67,106959,106960],{"class":84},"      \u003Cbody name=\"link\" pos=\"0 0 0\">\n",[67,106962,106963],{"class":69,"line":2370},[67,106964,106965],{"class":84},"        \u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[67,106967,106968],{"class":69,"line":2376},[67,106969,106970],{"class":84},"        \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",[67,106972,106973],{"class":69,"line":2397},[67,106974,106975],{"class":84},"      \u003C\u002Fbody>\n",[67,106977,106978],{"class":69,"line":2402},[67,106979,101904],{"class":84},[67,106981,106982],{"class":69,"line":2416},[67,106983,101909],{"class":84},[67,106985,106986],{"class":69,"line":2421},[67,106987,177],{"emptyLinePlaceholder":176},[67,106989,106990],{"class":69,"line":2450},[67,106991,106992],{"class":84},"  \u003Cactuator>\n",[67,106994,106995],{"class":69,"line":2455},[67,106996,106997],{"class":84},"    \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[67,106999,107000],{"class":69,"line":2472},[67,107001,107002],{"class":84},"  \u003C\u002Factuator>\n",[67,107004,107005],{"class":69,"line":2477},[67,107006,101914],{"class":84},[67,107008,107009],{"class":69,"line":2482},[67,107010,96235],{"class":84},[67,107012,107013],{"class":69,"line":2487},[67,107014,177],{"emptyLinePlaceholder":176},[67,107016,107017],{"class":69,"line":2501},[67,107018,177],{"emptyLinePlaceholder":176},[67,107020,107021,107023,107025,107027,107029],{"class":69,"line":2506},[67,107022,32484],{"class":73},[67,107024,2695],{"class":112},[67,107026,101935],{"class":77},[67,107028,96223],{"class":208},[67,107030,4459],{"class":77},[67,107032,107033,107035,107037,107039,107041],{"class":69,"line":3298},[67,107034,101944],{"class":77},[67,107036,909],{"class":73},[67,107038,101949],{"class":77},[67,107040,101851],{"class":208},[67,107042,870],{"class":77},[67,107044,107045,107047,107049],{"class":69,"line":3312},[67,107046,101958],{"class":77},[67,107048,909],{"class":73},[67,107050,101963],{"class":77},[67,107052,107053],{"class":69,"line":3320},[67,107054,177],{"emptyLinePlaceholder":176},[67,107056,107057,107059,107061,107063],{"class":69,"line":3325},[67,107058,31836],{"class":208},[67,107060,864],{"class":77},[67,107062,101976],{"class":84},[67,107064,101979],{"class":77},[67,107066,107067,107069,107071,107073],{"class":69,"line":3331},[67,107068,31836],{"class":208},[67,107070,864],{"class":77},[67,107072,101988],{"class":84},[67,107074,101991],{"class":77},[67,107076,107077,107079,107081,107083],{"class":69,"line":3337},[67,107078,31836],{"class":208},[67,107080,864],{"class":77},[67,107082,102000],{"class":84},[67,107084,102003],{"class":77},[67,107086,107087],{"class":69,"line":3342},[67,107088,177],{"emptyLinePlaceholder":176},[67,107090,107091,107093,107096,107098,107100],{"class":69,"line":8667},[67,107092,3821],{"class":73},[67,107094,107095],{"class":77}," model.nu ",[67,107097,21665],{"class":73},[67,107099,25828],{"class":208},[67,107101,4459],{"class":77},[67,107103,107104,107106,107108,107110,107113],{"class":69,"line":8691},[67,107105,103969],{"class":73},[67,107107,103972],{"class":208},[67,107109,864],{"class":77},[67,107111,107112],{"class":84},"\"expected exactly one actuator\"",[67,107114,870],{"class":77},[67,107116,107117],{"class":69,"line":8696},[67,107118,177],{"emptyLinePlaceholder":176},[67,107120,107121,107123,107125,107127,107129,107131,107134],{"class":69,"line":8702},[67,107122,3921],{"class":73},[67,107124,32153],{"class":77},[67,107126,81],{"class":73},[67,107128,32980],{"class":208},[67,107130,864],{"class":77},[67,107132,107133],{"class":208},"2000",[67,107135,31323],{"class":77},[67,107137,107138,107141,107143,107145,107147],{"class":69,"line":8729},[67,107139,107140],{"class":77},"        t ",[67,107142,909],{"class":73},[67,107144,32153],{"class":77},[67,107146,1312],{"class":73},[67,107148,107149],{"class":77}," model.opt.timestep\n",[67,107151,107152,107155,107157,107159,107161,107164,107166,107169,107171,107173,107176,107178,107180,107182],{"class":69,"line":8734},[67,107153,107154],{"class":77},"        data.ctrl[",[67,107156,1051],{"class":208},[67,107158,5162],{"class":77},[67,107160,909],{"class":73},[67,107162,107163],{"class":208}," 1.5",[67,107165,7237],{"class":73},[67,107167,107168],{"class":77}," math.sin(",[67,107170,105797],{"class":208},[67,107172,7237],{"class":73},[67,107174,107175],{"class":77}," math.pi ",[67,107177,1312],{"class":73},[67,107179,62404],{"class":208},[67,107181,7237],{"class":73},[67,107183,107184],{"class":77}," t)\n",[67,107186,107187],{"class":69,"line":8740},[67,107188,102053],{"class":77},[67,107190,107191],{"class":69,"line":8752},[67,107192,177],{"emptyLinePlaceholder":176},[67,107194,107195,107197,107199,107202],{"class":69,"line":8764},[67,107196,31836],{"class":208},[67,107198,864],{"class":77},[67,107200,107201],{"class":84},"\"time:\"",[67,107203,102015],{"class":77},[67,107205,107206,107208,107210,107213,107215,107217],{"class":69,"line":8776},[67,107207,31836],{"class":208},[67,107209,864],{"class":77},[67,107211,107212],{"class":84},"\"joint qpos:\"",[67,107214,105467],{"class":77},[67,107216,1151],{"class":208},[67,107218,31034],{"class":77},[67,107220,107221,107223,107225,107228,107230,107232],{"class":69,"line":10435},[67,107222,31836],{"class":208},[67,107224,864],{"class":77},[67,107226,107227],{"class":84},"\"joint qvel:\"",[67,107229,105483],{"class":77},[67,107231,1151],{"class":208},[67,107233,31034],{"class":77},[67,107235,107236,107238,107240,107243],{"class":69,"line":10459},[67,107237,31836],{"class":208},[67,107239,864],{"class":77},[67,107241,107242],{"class":84},"\"last ctrl:\"",[67,107244,107245],{"class":77},", data.ctrl.copy())\n",[67,107247,107248],{"class":69,"line":10482},[67,107249,177],{"emptyLinePlaceholder":176},[67,107251,107252],{"class":69,"line":10506},[67,107253,177],{"emptyLinePlaceholder":176},[67,107255,107256,107258,107260,107262,107264],{"class":69,"line":10511},[67,107257,2254],{"class":73},[67,107259,31757],{"class":208},[67,107261,102096],{"class":73},[67,107263,102099],{"class":84},[67,107265,4459],{"class":77},[67,107267,107268],{"class":69,"line":10516},[67,107269,102106],{"class":77},[19,107271,104107],{},[57,107273,107275],{"className":59,"code":107274,"language":61,"meta":62,"style":62},"touch ch4_joint_motor.py\n",[64,107276,107277],{"__ignoreMap":62},[67,107278,107279,107281],{"class":69,"line":70},[67,107280,101820],{"class":112},[67,107282,107283],{"class":84}," ch4_joint_motor.py\n",[19,107285,102838],{},[57,107287,107289],{"className":59,"code":107288,"language":61,"meta":62,"style":62},"python ch4_joint_motor.py\n",[64,107290,107291],{"__ignoreMap":62},[67,107292,107293,107295],{"class":69,"line":70},[67,107294,30917],{"class":112},[67,107296,107283],{"class":84},[14,107298,102109],{"id":102109},[19,107300,107301],{},"检查 actuator 数量：",[57,107303,107305],{"className":30915,"code":107304,"language":30917,"meta":62,"style":62},"if model.nu != 1:\n    raise RuntimeError(\"expected exactly one actuator\")\n",[64,107306,107307,107319],{"__ignoreMap":62},[67,107308,107309,107311,107313,107315,107317],{"class":69,"line":70},[67,107310,2254],{"class":73},[67,107312,107095],{"class":77},[67,107314,21665],{"class":73},[67,107316,25828],{"class":208},[67,107318,4459],{"class":77},[67,107320,107321,107323,107325,107327,107329],{"class":69,"line":143},[67,107322,104432],{"class":73},[67,107324,103972],{"class":208},[67,107326,864],{"class":77},[67,107328,107112],{"class":84},[67,107330,870],{"class":77},[19,107332,107333,107335,107336,107338],{},[64,107334,102695],{}," 是控制输入维度。这个模型只有一个 motor，所以 ",[64,107337,101613],{}," 长度应该是 1。",[19,107340,107341],{},"产生正弦控制信号：",[57,107343,107345],{"className":30915,"code":107344,"language":30917,"meta":62,"style":62},"data.ctrl[0] = 1.5 * math.sin(2.0 * math.pi * 0.5 * t)\n",[64,107346,107347],{"__ignoreMap":62},[67,107348,107349,107351,107353,107355,107357,107359,107361,107363,107365,107367,107369,107371,107373,107375],{"class":69,"line":70},[67,107350,106408],{"class":77},[67,107352,1051],{"class":208},[67,107354,5162],{"class":77},[67,107356,909],{"class":73},[67,107358,107163],{"class":208},[67,107360,7237],{"class":73},[67,107362,107168],{"class":77},[67,107364,105797],{"class":208},[67,107366,7237],{"class":73},[67,107368,107175],{"class":77},[67,107370,1312],{"class":73},[67,107372,62404],{"class":208},[67,107374,7237],{"class":73},[67,107376,107184],{"class":77},[19,107378,107379],{},"这表示电机输入会在正负之间周期变化。你可以把它理解成一会儿往一个方向推，一会儿往反方向推。",[19,107381,102210],{},[57,107383,107384],{"className":30915,"code":105042,"language":30917,"meta":62,"style":62},[64,107385,107386],{"__ignoreMap":62},[67,107387,107388],{"class":69,"line":70},[67,107389,105042],{"class":77},[19,107391,107392],{},"MuJoCo 根据当前电机输入、重力、阻尼、质量等参数计算下一步状态。",[14,107394,102245],{"id":102245},[57,107396,107398],{"className":30915,"code":107397,"language":30917,"meta":62,"style":62},"import math\n",[64,107399,107400],{"__ignoreMap":62},[67,107401,107402,107404],{"class":69,"line":70},[67,107403,30929],{"class":73},[67,107405,106887],{"class":77},[19,107407,107408,107409,101555,107412,107415],{},"导入 Python 标准库里的数学模块。后面要用 ",[64,107410,107411],{},"math.sin",[64,107413,107414],{},"math.pi"," 生成周期变化的控制信号。",[57,107417,107418],{"className":30915,"code":104223,"language":30917,"meta":62,"style":62},[64,107419,107420,107426],{"__ignoreMap":62},[67,107421,107422,107424],{"class":69,"line":70},[67,107423,30929],{"class":73},[67,107425,101838],{"class":77},[67,107427,107428,107430,107432,107434],{"class":69,"line":143},[67,107429,30929],{"class":73},[67,107431,31917],{"class":77},[67,107433,31920],{"class":73},[67,107435,31923],{"class":77},[19,107437,107438],{},"导入 MuJoCo 和 NumPy。MuJoCo 负责仿真，NumPy 负责数组显示和数值处理。",[57,107440,107441],{"className":53604,"code":106724,"language":53606,"meta":62,"style":62},[64,107442,107443],{"__ignoreMap":62},[67,107444,107445,107447,107449,107451,107453,107455,107457,107459,107461,107463,107465,107467,107469,107471,107473],{"class":69,"line":70},[67,107446,1766],{"class":77},[67,107448,103493],{"class":51837},[67,107450,15637],{"class":112},[67,107452,909],{"class":77},[67,107454,106556],{"class":84},[67,107456,54361],{"class":112},[67,107458,909],{"class":77},[67,107460,106556],{"class":84},[67,107462,106565],{"class":112},[67,107464,909],{"class":77},[67,107466,106570],{"class":84},[67,107468,106753],{"class":112},[67,107470,909],{"class":77},[67,107472,106758],{"class":84},[67,107474,101681],{"class":77},[19,107476,107477,107478,107480,107481,107483,107484,107486],{},"这行定义关节。",[64,107479,106377],{}," 表示旋转关节。",[64,107482,106776],{}," 表示绕 y 轴旋转。",[64,107485,106782],{}," 表示有一点阻尼，运动不会完全无损耗。",[57,107488,107490],{"className":53604,"code":107489,"language":53606,"meta":62,"style":62},"\u003Cgeom name=\"link_geom\" type=\"capsule\" fromto=\"0 0 0 0 0 0.5\" size=\"0.03\" mass=\"0.5\"\u002F>\n",[64,107491,107492],{"__ignoreMap":62},[67,107493,107494,107496,107498,107500,107502,107505,107507,107509,107512,107515,107517,107520,107522,107524,107526,107528,107530,107533],{"class":69,"line":70},[67,107495,1766],{"class":77},[67,107497,101657],{"class":51837},[67,107499,15637],{"class":112},[67,107501,909],{"class":77},[67,107503,107504],{"class":84},"\"link_geom\"",[67,107506,54361],{"class":112},[67,107508,909],{"class":77},[67,107510,107511],{"class":84},"\"capsule\"",[67,107513,107514],{"class":112}," fromto",[67,107516,909],{"class":77},[67,107518,107519],{"class":84},"\"0 0 0 0 0 0.5\"",[67,107521,101673],{"class":112},[67,107523,909],{"class":77},[67,107525,104315],{"class":84},[67,107527,102538],{"class":112},[67,107529,909],{"class":77},[67,107531,107532],{"class":84},"\"0.5\"",[67,107534,101681],{"class":77},[19,107536,107537,107538,107540,107541,107543,107544,107547,107548,28922,107551,107553],{},"这行定义摆杆的形状。",[64,107539,103702],{}," 是胶囊体，适合表示杆子。",[64,107542,103713],{}," 前三个数是起点，后三个数是终点，所以这根杆从 ",[64,107545,107546],{},"(0,0,0)"," 延伸到 ",[64,107549,107550],{},"(0,0,0.5)",[64,107552,103707],{}," 是半径。",[57,107555,107556],{"className":53604,"code":106790,"language":53606,"meta":62,"style":62},[64,107557,107558],{"__ignoreMap":62},[67,107559,107560,107562,107564,107566,107568,107570,107572,107574,107576,107578,107580,107582,107584,107586,107588,107590,107592,107594],{"class":69,"line":70},[67,107561,1766],{"class":77},[67,107563,106611],{"class":51837},[67,107565,15637],{"class":112},[67,107567,909],{"class":77},[67,107569,106618],{"class":84},[67,107571,106621],{"class":112},[67,107573,909],{"class":77},[67,107575,106556],{"class":84},[67,107577,106628],{"class":112},[67,107579,909],{"class":77},[67,107581,4398],{"class":84},[67,107583,106635],{"class":112},[67,107585,909],{"class":77},[67,107587,106640],{"class":84},[67,107589,106643],{"class":112},[67,107591,909],{"class":77},[67,107593,106648],{"class":84},[67,107595,101681],{"class":77},[19,107597,107598,107599,107601,107602,107605,107606,107608],{},"这行定义电机。它作用在 ",[64,107600,106377],{}," 关节上。",[64,107603,107604],{},"gear"," 可以理解成放大倍数。",[64,107607,106392],{}," 限制控制输入范围。",[57,107610,107611],{"className":30915,"code":107304,"language":30917,"meta":62,"style":62},[64,107612,107613,107625],{"__ignoreMap":62},[67,107614,107615,107617,107619,107621,107623],{"class":69,"line":70},[67,107616,2254],{"class":73},[67,107618,107095],{"class":77},[67,107620,21665],{"class":73},[67,107622,25828],{"class":208},[67,107624,4459],{"class":77},[67,107626,107627,107629,107631,107633,107635],{"class":69,"line":143},[67,107628,104432],{"class":73},[67,107630,103972],{"class":208},[67,107632,864],{"class":77},[67,107634,107112],{"class":84},[67,107636,870],{"class":77},[19,107638,107639,107641],{},[64,107640,102695],{}," 是控制输入数量。这个 XML 只定义了一个 motor，所以应该等于 1。如果不是 1，说明模型和预期不一致，继续运行可能会出错。",[57,107643,107645],{"className":30915,"code":107644,"language":30917,"meta":62,"style":62},"for step in range(2000):\n",[64,107646,107647],{"__ignoreMap":62},[67,107648,107649,107651,107653,107655,107657,107659,107661],{"class":69,"line":70},[67,107650,74],{"class":73},[67,107652,32153],{"class":77},[67,107654,81],{"class":73},[67,107656,32980],{"class":208},[67,107658,864],{"class":77},[67,107660,107133],{"class":208},[67,107662,31323],{"class":77},[19,107664,107665,107666,107668,107669,107672],{},"循环 2000 步。这里没有用 ",[64,107667,1848],{},"，而是用 ",[64,107670,107671],{},"step","，因为后面要用当前步数计算时间。",[57,107674,107676],{"className":30915,"code":107675,"language":30917,"meta":62,"style":62},"t = step * model.opt.timestep\n",[64,107677,107678],{"__ignoreMap":62},[67,107679,107680,107683,107685,107687,107689],{"class":69,"line":70},[67,107681,107682],{"class":77},"t ",[67,107684,909],{"class":73},[67,107686,32153],{"class":77},[67,107688,1312],{"class":73},[67,107690,107149],{"class":77},[19,107692,107693],{},"当前仿真时间可以用“步数乘以时间步长”估算。比如 step=100，timestep=0.002，那么 t=0.2 秒。",[57,107695,107696],{"className":30915,"code":107344,"language":30917,"meta":62,"style":62},[64,107697,107698],{"__ignoreMap":62},[67,107699,107700,107702,107704,107706,107708,107710,107712,107714,107716,107718,107720,107722,107724,107726],{"class":69,"line":70},[67,107701,106408],{"class":77},[67,107703,1051],{"class":208},[67,107705,5162],{"class":77},[67,107707,909],{"class":73},[67,107709,107163],{"class":208},[67,107711,7237],{"class":73},[67,107713,107168],{"class":77},[67,107715,105797],{"class":208},[67,107717,7237],{"class":73},[67,107719,107175],{"class":77},[67,107721,1312],{"class":73},[67,107723,62404],{"class":208},[67,107725,7237],{"class":73},[67,107727,107184],{"class":77},[19,107729,107730],{},"这行给电机输入一个正弦波。拆开看：",[815,107732,107733,107739,107745],{},[818,107734,107735,107738],{},[64,107736,107737],{},"math.sin(...)"," 产生 -1 到 1 之间周期变化的值。",[818,107740,107741,107744],{},[64,107742,107743],{},"1.5 *"," 把范围放大成 -1.5 到 1.5。",[818,107746,107747,107750],{},[64,107748,107749],{},"data.ctrl[0] = ..."," 把结果写入第 0 个 actuator。",[19,107752,107753],{},"因为正弦值一会儿正一会儿负，所以电机会来回推动关节。",[57,107755,107757],{"className":30915,"code":107756,"language":30917,"meta":62,"style":62},"print(\"joint qpos:\", np.round(data.qpos.copy(), 4))\n",[64,107758,107759],{"__ignoreMap":62},[67,107760,107761,107763,107765,107767,107769,107771],{"class":69,"line":70},[67,107762,30952],{"class":208},[67,107764,864],{"class":77},[67,107766,107212],{"class":84},[67,107768,105467],{"class":77},[67,107770,1151],{"class":208},[67,107772,31034],{"class":77},[19,107774,107775,107776,107778],{},"打印关节角度。这个模型只有一个 hinge joint，所以 ",[64,107777,101607],{}," 只有一个数。",[803,107780,102853],{"id":102852},[19,107782,107783],{},"输出类似:",[57,107785,107788],{"className":107786,"code":107787,"language":5906,"meta":62},[5904],"nq: 1\nnv: 1\nnu: 1\ntime: 4.0\njoint qpos: [...]\njoint qvel: [...]\nlast ctrl: [...]\n",[64,107789,107787],{"__ignoreMap":62},[19,107791,107792,107793,107795],{},"这里 ",[64,107794,106663],{}," 是电机输入。",[19,107797,107798,107801,107802,107805],{},[64,107799,107800],{},"joint qpos"," 是关节角度，单位通常是弧度。",[64,107803,107804],{},"joint qvel"," 是角速度，单位通常是弧度每秒。",[19,107807,107808],{},"角度单位提示：",[57,107810,107813],{"className":107811,"code":107812,"language":5906,"meta":62},[5904],"pi rad ≈ 180 degrees\n1 rad ≈ 57.3 degrees\n",[64,107814,107812],{"__ignoreMap":62},[19,107816,107817,107818,107820,107821,107823],{},"如果你看到 ",[64,107819,104567],{}," 是 ",[64,107822,35866],{},"，大约就是 28.6 度。",[803,107825,102885],{"id":102884},[815,107827,107828,107835,107838,107845,107848,107856,107864],{},[818,107829,102948,107830,102951,107832,28922],{},[64,107831,106848],{},[64,107833,107834],{},"gear=\"5\"",[818,107836,107837],{},"重新运行，观察关节运动是否更剧烈。",[818,107839,102948,107840,102951,107842,28922],{},[64,107841,106392],{},[64,107843,107844],{},"-0.2 0.2",[818,107846,107847],{},"重新运行，观察控制能力是否变弱。",[818,107849,107850,107851,107853,107854,28922],{},"去掉 actuator，确认 ",[64,107852,102695],{}," 变成 ",[64,107855,1051],{},[818,107857,102948,107858,102951,107860,107863],{},[64,107859,106782],{},[64,107861,107862],{},"damping=\"2.0\"","，观察运动是否更难被带动。",[818,107865,102948,107866,102951,107868,107871],{},[64,107867,106776],{},[64,107869,107870],{},"axis=\"1 0 0\"","，用 viewer 观察旋转方向变化。",[803,107873,102990],{"id":102989},[14,107875,107877],{"id":107876},"indexerror-index-0-is-out-of-bounds",[64,107878,107879],{},"IndexError: index 0 is out of bounds",[19,107881,107882,107883,107885],{},"原因是 ",[64,107884,106529],{},"，没有 actuator。",[14,107887,107888],{"id":107888},"关节几乎不动",[19,107890,107891],{},"可能原因:",[815,107893,107894,107899,107903,107909],{},[818,107895,107896,107898],{},[64,107897,107604],{}," 太小",[818,107900,107901,107898],{},[64,107902,106392],{},[818,107904,107905,107908],{},[64,107906,107907],{},"damping"," 太大",[818,107910,107911],{},"重力方向导致运动不明显",[14,107913,107914],{"id":107914},"模型编译失败",[19,107916,107917,107918,107920],{},"检查 actuator 引用的 ",[64,107919,106839],{}," 是否存在，joint 名称是否拼写一致。",[14,107922,107924,107926],{"id":107923},"datactrl0-写了但没有效果",[64,107925,106663],{}," 写了但没有效果",[19,107928,103112],{},[815,107930,107931,107936,107939,107944,107949],{},[818,107932,107933,107935],{},[64,107934,102695],{}," 是否大于 0。",[818,107937,107938],{},"motor 是否引用了正确 joint。",[818,107940,107941,107943],{},[64,107942,107604],{}," 是否太小。",[818,107945,107946,107948],{},[64,107947,106392],{}," 是否把输入限制得太小。",[818,107950,107951],{},"body 是否真的有可动 joint。",[14,107953,107954],{"id":107954},"控制输入超过范围会怎样",[19,107956,107957],{},"如果设置了：",[57,107959,107961],{"className":53604,"code":107960,"language":53606,"meta":62,"style":62},"ctrlrange=\"-2 2\" ctrllimited=\"true\"\n",[64,107962,107963],{"__ignoreMap":62},[67,107964,107965],{"class":69,"line":70},[67,107966,107960],{"class":77},[19,107968,107969],{},"MuJoCo 会把控制输入限制在这个范围附近。为了让代码更清晰，实际控制任务里仍建议在 Python 里自己写：",[57,107971,107973],{"className":30915,"code":107972,"language":30917,"meta":62,"style":62},"action = np.clip(action, -2.0, 2.0)\ndata.ctrl[0] = action\n",[64,107974,107975,107995],{"__ignoreMap":62},[67,107976,107977,107980,107982,107985,107987,107989,107991,107993],{"class":69,"line":70},[67,107978,107979],{"class":77},"action ",[67,107981,909],{"class":73},[67,107983,107984],{"class":77}," np.clip(action, ",[67,107986,1389],{"class":73},[67,107988,105797],{"class":208},[67,107990,13153],{"class":77},[67,107992,105797],{"class":208},[67,107994,870],{"class":77},[67,107996,107997,107999,108001,108003,108005],{"class":69,"line":143},[67,107998,106408],{"class":77},[67,108000,1051],{"class":208},[67,108002,5162],{"class":77},[67,108004,909],{"class":73},[67,108006,108007],{"class":77}," action\n",[803,108009,103144],{"id":103143},[19,108011,108012],{},"这一章建立了控制任务的基本形式：",[57,108014,108017],{"className":108015,"code":108016,"language":5906,"meta":62},[5904],"读取状态 qpos\u002Fqvel\n→ 计算控制 ctrl\n→ 写入 data.ctrl\n→ mj_step 推进仿真\n",[64,108018,108016],{"__ignoreMap":62},[19,108020,108021],{},"后面的 Cartpole 和 Reacher 只是把这个形式扩展到更多关节和更复杂的观测、奖励。",[779,108023,108024],{},"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":62,"searchDepth":143,"depth":143,"links":108026},[108027,108028,108029,108034,108038,108039,108040,108048],{"id":101183,"depth":143,"text":101184},{"id":101306,"depth":143,"text":101307},{"id":101581,"depth":143,"text":101582,"children":108030},[108031,108032,108033],{"id":106670,"depth":149,"text":106671},{"id":106720,"depth":149,"text":106721},{"id":106786,"depth":149,"text":106787},{"id":101789,"depth":143,"text":101790,"children":108035},[108036,108037],{"id":102109,"depth":149,"text":102109},{"id":102245,"depth":149,"text":102245},{"id":102852,"depth":143,"text":102853},{"id":102884,"depth":143,"text":102885},{"id":102989,"depth":143,"text":102990,"children":108041},[108042,108043,108044,108045,108047],{"id":107876,"depth":149,"text":107879},{"id":107888,"depth":149,"text":107888},{"id":107914,"depth":149,"text":107914},{"id":107923,"depth":149,"text":108046},"data.ctrl[0] 写了但没有效果",{"id":107954,"depth":149,"text":107954},{"id":103143,"depth":143,"text":103144},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch4-actuator",{"title":106358,"description":62},"wiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制","mt4nnL0lFlzEpGWxxST3l_nQ01XJuTf2fsJ_L9rP9Ag",{"id":108055,"title":108056,"body":108057,"description":62,"extension":787,"meta":109966,"navigation":176,"path":109967,"seo":109968,"stem":109969,"__hash__":109970},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer.md","5.Viewer 可视化与 Renderer 离屏渲染",{"type":7,"value":108058,"toc":109942},[108059,108062,108064,108067,108075,108078,108095,108098,108123,108126,108172,108174,108176,108231,108233,108252,108254,108297,108300,108317,108320,108336,108346,108353,108355,108358,108361,108395,108398,108446,108450,108453,108467,108476,108480,108483,108508,108511,108515,108528,108531,108537,108540,108555,108557,108560,108820,108822,108834,108837,109149,109151,109163,109165,109168,109183,109188,109191,109213,109216,109219,109253,109256,109260,109271,109274,109291,109294,109308,109315,109335,109342,109356,109359,109371,109386,109406,109409,109431,109434,109438,109453,109464,109479,109482,109512,109528,109557,109565,109589,109592,109610,109620,109632,109639,109648,109654,109663,109666,109668,109677,109680,109695,109697,109700,109711,109714,109725,109728,109746,109748,109765,109768,109796,109798,109802,109805,109835,109841,109844,109848,109856,109859,109861,109882,109885,109888,109904,109907,109923,109925,109928,109939],[10,108060,108056],{"id":108061},"_5viewer-可视化与-renderer-离屏渲染",[803,108063,101184],{"id":101183},[19,108065,108066],{},"本章掌握两类可视化方式:",[815,108068,108069,108072],{},[818,108070,108071],{},"交互式 viewer: 适合人工观察仿真",[818,108073,108074],{},"离屏 renderer: 适合生成图像观测、保存数据、训练视觉策略",[19,108076,108077],{},"使用官方接口:",[57,108079,108081],{"className":30915,"code":108080,"language":30917,"meta":62,"style":62},"import mujoco.viewer\nmujoco.viewer.launch_passive(model, data)\n",[64,108082,108083,108090],{"__ignoreMap":62},[67,108084,108085,108087],{"class":69,"line":70},[67,108086,30929],{"class":73},[67,108088,108089],{"class":77}," mujoco.viewer\n",[67,108091,108092],{"class":69,"line":143},[67,108093,108094],{"class":77},"mujoco.viewer.launch_passive(model, data)\n",[19,108096,108097],{},"以及:",[57,108099,108101],{"className":30915,"code":108100,"language":30917,"meta":62,"style":62},"renderer = mujoco.Renderer(model)\nimage = renderer.render()\n",[64,108102,108103,108113],{"__ignoreMap":62},[67,108104,108105,108108,108110],{"class":69,"line":70},[67,108106,108107],{"class":77},"renderer ",[67,108109,909],{"class":73},[67,108111,108112],{"class":77}," mujoco.Renderer(model)\n",[67,108114,108115,108118,108120],{"class":69,"line":143},[67,108116,108117],{"class":77},"image ",[67,108119,909],{"class":73},[67,108121,108122],{"class":77}," renderer.render()\n",[19,108124,108125],{},"新手建议先理解二者区别：",[998,108127,108128,108144],{},[1001,108129,108130],{},[1004,108131,108132,108135,108138,108141],{},[1007,108133,108134],{"align":24453},"工具",[1007,108136,108137],{"align":24453},"用途",[1007,108139,108140],{"align":24453},"是否打开窗口",[1007,108142,108143],{"align":24453},"常见场景",[1044,108145,108146,108159],{},[1004,108147,108148,108151,108154,108156],{},[1049,108149,108150],{"align":24453},"Viewer",[1049,108152,108153],{"align":24453},"人眼实时观察仿真",[1049,108155,105202],{"align":24453},[1049,108157,108158],{"align":24453},"调试模型、看控制效果",[1004,108160,108161,108164,108167,108169],{},[1049,108162,108163],{"align":24453},"Renderer",[1049,108165,108166],{"align":24453},"生成图像数组",[1049,108168,105215],{"align":24453},[1049,108170,108171],{"align":24453},"保存图片、训练视觉策略、服务器批量采集",[803,108173,101307],{"id":101306},[19,108175,101310],{},[57,108177,108179],{"className":59,"code":108178,"language":61,"meta":62,"style":62},"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",[64,108180,108181,108193,108203,108211,108219],{"__ignoreMap":62},[67,108182,108183,108185,108187,108189,108191],{"class":69,"line":70},[67,108184,298],{"class":112},[67,108186,378],{"class":84},[67,108188,312],{"class":84},[67,108190,464],{"class":208},[67,108192,212],{"class":208},[67,108194,108195,108197,108199,108201],{"class":69,"line":143},[67,108196,101345],{"class":84},[67,108198,101348],{"class":84},[67,108200,101351],{"class":84},[67,108202,212],{"class":208},[67,108204,108205,108207,108209],{"class":69,"line":149},[67,108206,101358],{"class":84},[67,108208,101361],{"class":84},[67,108210,212],{"class":208},[67,108212,108213,108215,108217],{"class":69,"line":155},[67,108214,101368],{"class":84},[67,108216,101371],{"class":84},[67,108218,212],{"class":208},[67,108220,108221,108223,108225,108227,108229],{"class":69,"line":161},[67,108222,101378],{"class":84},[67,108224,101381],{"class":84},[67,108226,101384],{"class":84},[67,108228,101387],{"class":84},[67,108230,103053],{"class":84},[19,108232,103356],{},[57,108234,108236],{"className":59,"code":108235,"language":61,"meta":62,"style":62},"pip install \"mujoco>=2.3\" numpy pillow\n",[64,108237,108238],{"__ignoreMap":62},[67,108239,108240,108242,108244,108246,108249],{"class":69,"line":70},[67,108241,24546],{"class":112},[67,108243,312],{"class":84},[67,108245,101467],{"class":84},[67,108247,108248],{"class":84}," numpy",[67,108250,108251],{"class":84}," pillow\n",[19,108253,103373],{},[57,108255,108257],{"className":59,"code":108256,"language":61,"meta":62,"style":62},"conda create -n mujoco-render python=3.10 -y\nconda activate mujoco-render\npip install \"mujoco>=2.3\" numpy pillow\n",[64,108258,108259,108276,108285],{"__ignoreMap":62},[67,108260,108261,108263,108265,108267,108270,108272,108274],{"class":69,"line":70},[67,108262,30867],{"class":112},[67,108264,29713],{"class":84},[67,108266,25825],{"class":208},[67,108268,108269],{"class":84}," mujoco-render",[67,108271,101512],{"class":84},[67,108273,101515],{"class":208},[67,108275,101518],{"class":208},[67,108277,108278,108280,108282],{"class":69,"line":143},[67,108279,30867],{"class":112},[67,108281,101525],{"class":84},[67,108283,108284],{"class":84}," mujoco-render\n",[67,108286,108287,108289,108291,108293,108295],{"class":69,"line":149},[67,108288,24546],{"class":112},[67,108290,312],{"class":84},[67,108292,101467],{"class":84},[67,108294,108248],{"class":84},[67,108296,108251],{"class":84},[19,108298,108299],{},"离屏渲染后端:",[57,108301,108303],{"className":59,"code":108302,"language":61,"meta":62,"style":62},"export MUJOCO_GL=egl\n",[64,108304,108305],{"__ignoreMap":62},[67,108306,108307,108309,108312,108314],{"class":69,"line":70},[67,108308,25754],{"class":73},[67,108310,108311],{"class":77}," MUJOCO_GL",[67,108313,909],{"class":73},[67,108315,108316],{"class":77},"egl\n",[19,108318,108319],{},"或:",[57,108321,108323],{"className":59,"code":108322,"language":61,"meta":62,"style":62},"export MUJOCO_GL=osmesa\n",[64,108324,108325],{"__ignoreMap":62},[67,108326,108327,108329,108331,108333],{"class":69,"line":70},[67,108328,25754],{"class":73},[67,108330,108311],{"class":77},[67,108332,909],{"class":73},[67,108334,108335],{"class":77},"osmesa\n",[19,108337,108338,108339,108342,108343,28922],{},"可能存在版本差异: 不同显卡驱动、Mesa、EGL 支持情况不同。如果 ",[64,108340,108341],{},"egl"," 失败，再尝试 ",[64,108344,108345],{},"osmesa",[19,108347,108348,108349,108352],{},"如果你在本机桌面环境运行，通常先不要设置 ",[64,108350,108351],{},"MUJOCO_GL","，直接运行 viewer。只有在远程服务器、无显示器环境或保存离屏图片时报 OpenGL 错误时，再尝试设置。",[803,108354,101582],{"id":101581},[19,108356,108357],{},"Viewer 是实时窗口。Renderer 是把仿真画面渲染成 NumPy 图像数组。",[19,108359,108360],{},"典型 viewer 流程:",[57,108362,108364],{"className":30915,"code":108363,"language":30917,"meta":62,"style":62},"with mujoco.viewer.launch_passive(model, data) as viewer:\n    while viewer.is_running():\n        mujoco.mj_step(model, data)\n        viewer.sync()\n",[64,108365,108366,108379,108386,108390],{"__ignoreMap":62},[67,108367,108368,108371,108374,108376],{"class":69,"line":70},[67,108369,108370],{"class":73},"with",[67,108372,108373],{"class":77}," mujoco.viewer.launch_passive(model, data) ",[67,108375,31920],{"class":73},[67,108377,108378],{"class":77}," viewer:\n",[67,108380,108381,108383],{"class":69,"line":143},[67,108382,2973],{"class":73},[67,108384,108385],{"class":77}," viewer.is_running():\n",[67,108387,108388],{"class":69,"line":149},[67,108389,102053],{"class":77},[67,108391,108392],{"class":69,"line":155},[67,108393,108394],{"class":77},"        viewer.sync()\n",[19,108396,108397],{},"典型 renderer 流程:",[57,108399,108401],{"className":30915,"code":108400,"language":30917,"meta":62,"style":62},"renderer = mujoco.Renderer(model, height=480, width=640)\nmujoco.mj_step(model, data)\nrenderer.update_scene(data)\nimage = renderer.render()\n",[64,108402,108403,108429,108433,108438],{"__ignoreMap":62},[67,108404,108405,108407,108409,108412,108414,108416,108418,108420,108422,108424,108427],{"class":69,"line":70},[67,108406,108107],{"class":77},[67,108408,909],{"class":73},[67,108410,108411],{"class":77}," mujoco.Renderer(model, ",[67,108413,25693],{"class":5935},[67,108415,909],{"class":73},[67,108417,42879],{"class":208},[67,108419,13153],{"class":77},[67,108421,25689],{"class":5935},[67,108423,909],{"class":73},[67,108425,108426],{"class":208},"640",[67,108428,870],{"class":77},[67,108430,108431],{"class":69,"line":143},[67,108432,105042],{"class":77},[67,108434,108435],{"class":69,"line":149},[67,108436,108437],{"class":77},"renderer.update_scene(data)\n",[67,108439,108440,108442,108444],{"class":69,"line":155},[67,108441,108117],{"class":77},[67,108443,909],{"class":73},[67,108445,108122],{"class":77},[14,108447,108449],{"id":108448},"viewer-的同步逻辑","viewer 的同步逻辑",[19,108451,108452],{},"viewer 只是显示窗口，不会自动帮你推进仿真。你仍然需要：",[57,108454,108456],{"className":30915,"code":108455,"language":30917,"meta":62,"style":62},"mujoco.mj_step(model, data)\nviewer.sync()\n",[64,108457,108458,108462],{"__ignoreMap":62},[67,108459,108460],{"class":69,"line":70},[67,108461,105042],{"class":77},[67,108463,108464],{"class":69,"line":143},[67,108465,108466],{"class":77},"viewer.sync()\n",[19,108468,108469,108471,108472,108475],{},[64,108470,101752],{}," 负责算物理，",[64,108473,108474],{},"viewer.sync()"," 负责把最新状态同步到窗口。",[14,108477,108479],{"id":108478},"为什么要-sleep","为什么要 sleep",[19,108481,108482],{},"如果不控制循环速度，仿真可能跑得非常快，窗口里一闪而过。示例代码用：",[57,108484,108486],{"className":30915,"code":108485,"language":30917,"meta":62,"style":62},"sleep_time = model.opt.timestep - (time.time() - step_start)\n",[64,108487,108488],{"__ignoreMap":62},[67,108489,108490,108493,108495,108498,108500,108503,108505],{"class":69,"line":70},[67,108491,108492],{"class":77},"sleep_time ",[67,108494,909],{"class":73},[67,108496,108497],{"class":77}," model.opt.timestep ",[67,108499,1389],{"class":73},[67,108501,108502],{"class":77}," (time.time() ",[67,108504,1389],{"class":73},[67,108506,108507],{"class":77}," step_start)\n",[19,108509,108510],{},"让真实时间尽量接近仿真时间。例如 timestep 是 0.01 秒，就尽量每 0.01 秒显示一步。",[14,108512,108514],{"id":108513},"renderer-输出是什么","renderer 输出是什么",[57,108516,108518],{"className":30915,"code":108517,"language":30917,"meta":62,"style":62},"image = renderer.render()\n",[64,108519,108520],{"__ignoreMap":62},[67,108521,108522,108524,108526],{"class":69,"line":70},[67,108523,108117],{"class":77},[67,108525,909],{"class":73},[67,108527,108122],{"class":77},[19,108529,108530],{},"得到的是 NumPy 数组，形状通常是：",[57,108532,108535],{"className":108533,"code":108534,"language":5906,"meta":62},[5904],"(height, width, 3)\n",[64,108536,108534],{"__ignoreMap":62},[19,108538,108539],{},"最后一维的 3 表示 RGB 三个颜色通道。保存图片时可以交给 Pillow：",[57,108541,108543],{"className":30915,"code":108542,"language":30917,"meta":62,"style":62},"Image.fromarray(image).save(\"render_output.png\")\n",[64,108544,108545],{"__ignoreMap":62},[67,108546,108547,108550,108553],{"class":69,"line":70},[67,108548,108549],{"class":77},"Image.fromarray(image).save(",[67,108551,108552],{"class":84},"\"render_output.png\"",[67,108554,870],{"class":77},[803,108556,101790],{"id":101789},[19,108558,108559],{},"交互式 Viewer:",[57,108561,108563],{"className":30915,"code":108562,"language":30917,"meta":62,"style":62},"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",[64,108564,108565,108571,108575,108581,108587,108591,108595,108603,108608,108612,108616,108620,108625,108630,108634,108638,108642,108647,108651,108655,108659,108663,108667,108671,108683,108695,108703,108707,108717,108737,108747,108752,108757,108761,108778,108791,108796,108800,108804,108816],{"__ignoreMap":62},[67,108566,108567,108569],{"class":69,"line":70},[67,108568,30929],{"class":73},[67,108570,32366],{"class":77},[67,108572,108573],{"class":69,"line":143},[67,108574,177],{"emptyLinePlaceholder":176},[67,108576,108577,108579],{"class":69,"line":149},[67,108578,30929],{"class":73},[67,108580,101838],{"class":77},[67,108582,108583,108585],{"class":69,"line":155},[67,108584,30929],{"class":73},[67,108586,108089],{"class":77},[67,108588,108589],{"class":69,"line":161},[67,108590,177],{"emptyLinePlaceholder":176},[67,108592,108593],{"class":69,"line":167},[67,108594,177],{"emptyLinePlaceholder":176},[67,108596,108597,108599,108601],{"class":69,"line":173},[67,108598,101851],{"class":208},[67,108600,14282],{"class":73},[67,108602,101856],{"class":84},[67,108604,108605],{"class":69,"line":180},[67,108606,108607],{"class":84},"\u003Cmujoco model=\"viewer_demo\">\n",[67,108609,108610],{"class":69,"line":186},[67,108611,101866],{"class":84},[67,108613,108614],{"class":69,"line":444},[67,108615,177],{"emptyLinePlaceholder":176},[67,108617,108618],{"class":69,"line":2335},[67,108619,101875],{"class":84},[67,108621,108622],{"class":69,"line":2340},[67,108623,108624],{"class":84},"    \u003Clight name=\"top_light\" pos=\"0 0 3\"\u002F>\n",[67,108626,108627],{"class":69,"line":2346},[67,108628,108629],{"class":84},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[67,108631,108632],{"class":69,"line":2351},[67,108633,177],{"emptyLinePlaceholder":176},[67,108635,108636],{"class":69,"line":2365},[67,108637,101889],{"class":84},[67,108639,108640],{"class":69,"line":2370},[67,108641,101894],{"class":84},[67,108643,108644],{"class":69,"line":2376},[67,108645,108646],{"class":84},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[67,108648,108649],{"class":69,"line":2397},[67,108650,101904],{"class":84},[67,108652,108653],{"class":69,"line":2402},[67,108654,101909],{"class":84},[67,108656,108657],{"class":69,"line":2416},[67,108658,101914],{"class":84},[67,108660,108661],{"class":69,"line":2421},[67,108662,96235],{"class":84},[67,108664,108665],{"class":69,"line":2450},[67,108666,177],{"emptyLinePlaceholder":176},[67,108668,108669],{"class":69,"line":2455},[67,108670,177],{"emptyLinePlaceholder":176},[67,108672,108673,108675,108677,108679,108681],{"class":69,"line":2472},[67,108674,32484],{"class":73},[67,108676,2695],{"class":112},[67,108678,101935],{"class":77},[67,108680,96223],{"class":208},[67,108682,4459],{"class":77},[67,108684,108685,108687,108689,108691,108693],{"class":69,"line":2477},[67,108686,101944],{"class":77},[67,108688,909],{"class":73},[67,108690,101949],{"class":77},[67,108692,101851],{"class":208},[67,108694,870],{"class":77},[67,108696,108697,108699,108701],{"class":69,"line":2482},[67,108698,101958],{"class":77},[67,108700,909],{"class":73},[67,108702,101963],{"class":77},[67,108704,108705],{"class":69,"line":2487},[67,108706,177],{"emptyLinePlaceholder":176},[67,108708,108709,108711,108713,108715],{"class":69,"line":2501},[67,108710,34715],{"class":73},[67,108712,108373],{"class":77},[67,108714,31920],{"class":73},[67,108716,108378],{"class":77},[67,108718,108719,108722,108725,108727,108730,108732,108735],{"class":69,"line":2506},[67,108720,108721],{"class":73},"        while",[67,108723,108724],{"class":77}," viewer.is_running() ",[67,108726,30999],{"class":73},[67,108728,108729],{"class":77}," data.time ",[67,108731,1766],{"class":73},[67,108733,108734],{"class":208}," 5.0",[67,108736,4459],{"class":77},[67,108738,108739,108742,108744],{"class":69,"line":3298},[67,108740,108741],{"class":77},"            step_start ",[67,108743,909],{"class":73},[67,108745,108746],{"class":77}," time.time()\n",[67,108748,108749],{"class":69,"line":3312},[67,108750,108751],{"class":77},"            mujoco.mj_step(model, data)\n",[67,108753,108754],{"class":69,"line":3320},[67,108755,108756],{"class":77},"            viewer.sync()\n",[67,108758,108759],{"class":69,"line":3325},[67,108760,177],{"emptyLinePlaceholder":176},[67,108762,108763,108766,108768,108770,108772,108774,108776],{"class":69,"line":3331},[67,108764,108765],{"class":77},"            sleep_time ",[67,108767,909],{"class":73},[67,108769,108497],{"class":77},[67,108771,1389],{"class":73},[67,108773,108502],{"class":77},[67,108775,1389],{"class":73},[67,108777,108507],{"class":77},[67,108779,108780,108782,108785,108787,108789],{"class":69,"line":3337},[67,108781,5361],{"class":73},[67,108783,108784],{"class":77}," sleep_time ",[67,108786,1816],{"class":73},[67,108788,4813],{"class":208},[67,108790,4459],{"class":77},[67,108792,108793],{"class":69,"line":3342},[67,108794,108795],{"class":77},"                time.sleep(sleep_time)\n",[67,108797,108798],{"class":69,"line":8667},[67,108799,177],{"emptyLinePlaceholder":176},[67,108801,108802],{"class":69,"line":8691},[67,108803,177],{"emptyLinePlaceholder":176},[67,108805,108806,108808,108810,108812,108814],{"class":69,"line":8696},[67,108807,2254],{"class":73},[67,108809,31757],{"class":208},[67,108811,102096],{"class":73},[67,108813,102099],{"class":84},[67,108815,4459],{"class":77},[67,108817,108818],{"class":69,"line":8702},[67,108819,102106],{"class":77},[19,108821,104107],{},[57,108823,108825],{"className":59,"code":108824,"language":61,"meta":62,"style":62},"touch ch5_viewer.py\n",[64,108826,108827],{"__ignoreMap":62},[67,108828,108829,108831],{"class":69,"line":70},[67,108830,101820],{"class":112},[67,108832,108833],{"class":84}," ch5_viewer.py\n",[19,108835,108836],{},"离屏 Renderer 保存图片:",[57,108838,108840],{"className":30915,"code":108839,"language":30917,"meta":62,"style":62},"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",[64,108841,108842,108854,108858,108864,108874,108878,108882,108890,108895,108899,108903,108907,108911,108916,108920,108924,108928,108932,108936,108940,108944,108948,108952,108956,108960,108972,108984,108992,109017,109021,109037,109041,109045,109060,109069,109073,109087,109092,109097,109101,109113,109125,109129,109133,109145],{"__ignoreMap":62},[67,108843,108844,108846,108849,108851],{"class":69,"line":70},[67,108845,31274],{"class":73},[67,108847,108848],{"class":77}," pathlib ",[67,108850,30929],{"class":73},[67,108852,108853],{"class":77}," Path\n",[67,108855,108856],{"class":69,"line":143},[67,108857,177],{"emptyLinePlaceholder":176},[67,108859,108860,108862],{"class":69,"line":149},[67,108861,30929],{"class":73},[67,108863,101838],{"class":77},[67,108865,108866,108868,108870,108872],{"class":69,"line":155},[67,108867,31274],{"class":73},[67,108869,47800],{"class":208},[67,108871,47803],{"class":73},[67,108873,47806],{"class":77},[67,108875,108876],{"class":69,"line":161},[67,108877,177],{"emptyLinePlaceholder":176},[67,108879,108880],{"class":69,"line":167},[67,108881,177],{"emptyLinePlaceholder":176},[67,108883,108884,108886,108888],{"class":69,"line":173},[67,108885,101851],{"class":208},[67,108887,14282],{"class":73},[67,108889,101856],{"class":84},[67,108891,108892],{"class":69,"line":180},[67,108893,108894],{"class":84},"\u003Cmujoco model=\"renderer_demo\">\n",[67,108896,108897],{"class":69,"line":186},[67,108898,101866],{"class":84},[67,108900,108901],{"class":69,"line":444},[67,108902,177],{"emptyLinePlaceholder":176},[67,108904,108905],{"class":69,"line":2335},[67,108906,101875],{"class":84},[67,108908,108909],{"class":69,"line":2340},[67,108910,108624],{"class":84},[67,108912,108913],{"class":69,"line":2346},[67,108914,108915],{"class":84},"    \u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[67,108917,108918],{"class":69,"line":2351},[67,108919,108629],{"class":84},[67,108921,108922],{"class":69,"line":2365},[67,108923,177],{"emptyLinePlaceholder":176},[67,108925,108926],{"class":69,"line":2370},[67,108927,101889],{"class":84},[67,108929,108930],{"class":69,"line":2376},[67,108931,101894],{"class":84},[67,108933,108934],{"class":69,"line":2397},[67,108935,108646],{"class":84},[67,108937,108938],{"class":69,"line":2402},[67,108939,101904],{"class":84},[67,108941,108942],{"class":69,"line":2416},[67,108943,101909],{"class":84},[67,108945,108946],{"class":69,"line":2421},[67,108947,101914],{"class":84},[67,108949,108950],{"class":69,"line":2450},[67,108951,96235],{"class":84},[67,108953,108954],{"class":69,"line":2455},[67,108955,177],{"emptyLinePlaceholder":176},[67,108957,108958],{"class":69,"line":2472},[67,108959,177],{"emptyLinePlaceholder":176},[67,108961,108962,108964,108966,108968,108970],{"class":69,"line":2477},[67,108963,32484],{"class":73},[67,108965,2695],{"class":112},[67,108967,101935],{"class":77},[67,108969,96223],{"class":208},[67,108971,4459],{"class":77},[67,108973,108974,108976,108978,108980,108982],{"class":69,"line":2482},[67,108975,101944],{"class":77},[67,108977,909],{"class":73},[67,108979,101949],{"class":77},[67,108981,101851],{"class":208},[67,108983,870],{"class":77},[67,108985,108986,108988,108990],{"class":69,"line":2487},[67,108987,101958],{"class":77},[67,108989,909],{"class":73},[67,108991,101963],{"class":77},[67,108993,108994,108997,108999,109001,109003,109005,109007,109009,109011,109013,109015],{"class":69,"line":2501},[67,108995,108996],{"class":77},"    renderer ",[67,108998,909],{"class":73},[67,109000,108411],{"class":77},[67,109002,25693],{"class":5935},[67,109004,909],{"class":73},[67,109006,42879],{"class":208},[67,109008,13153],{"class":77},[67,109010,25689],{"class":5935},[67,109012,909],{"class":73},[67,109014,108426],{"class":208},[67,109016,870],{"class":77},[67,109018,109019],{"class":69,"line":2506},[67,109020,177],{"emptyLinePlaceholder":176},[67,109022,109023,109025,109027,109029,109031,109033,109035],{"class":69,"line":3298},[67,109024,3921],{"class":73},[67,109026,102038],{"class":77},[67,109028,81],{"class":73},[67,109030,32980],{"class":208},[67,109032,864],{"class":77},[67,109034,1169],{"class":208},[67,109036,31323],{"class":77},[67,109038,109039],{"class":69,"line":3312},[67,109040,102053],{"class":77},[67,109042,109043],{"class":69,"line":3320},[67,109044,177],{"emptyLinePlaceholder":176},[67,109046,109047,109050,109053,109055,109058],{"class":69,"line":3325},[67,109048,109049],{"class":77},"    renderer.update_scene(data, ",[67,109051,109052],{"class":5935},"camera",[67,109054,909],{"class":73},[67,109056,109057],{"class":84},"\"fixed_camera\"",[67,109059,870],{"class":77},[67,109061,109062,109065,109067],{"class":69,"line":3331},[67,109063,109064],{"class":77},"    image ",[67,109066,909],{"class":73},[67,109068,108122],{"class":77},[67,109070,109071],{"class":69,"line":3337},[67,109072,177],{"emptyLinePlaceholder":176},[67,109074,109075,109078,109080,109083,109085],{"class":69,"line":3342},[67,109076,109077],{"class":77},"    output_path ",[67,109079,909],{"class":73},[67,109081,109082],{"class":77}," Path(",[67,109084,108552],{"class":84},[67,109086,870],{"class":77},[67,109088,109089],{"class":69,"line":8667},[67,109090,109091],{"class":77},"    Image.fromarray(image).save(output_path)\n",[67,109093,109094],{"class":69,"line":8691},[67,109095,109096],{"class":77},"    renderer.close()\n",[67,109098,109099],{"class":69,"line":8696},[67,109100,177],{"emptyLinePlaceholder":176},[67,109102,109103,109105,109107,109110],{"class":69,"line":8702},[67,109104,31836],{"class":208},[67,109106,864],{"class":77},[67,109108,109109],{"class":84},"\"saved:\"",[67,109111,109112],{"class":77},", output_path.resolve())\n",[67,109114,109115,109117,109119,109122],{"class":69,"line":8729},[67,109116,31836],{"class":208},[67,109118,864],{"class":77},[67,109120,109121],{"class":84},"\"image shape:\"",[67,109123,109124],{"class":77},", image.shape)\n",[67,109126,109127],{"class":69,"line":8734},[67,109128,177],{"emptyLinePlaceholder":176},[67,109130,109131],{"class":69,"line":8740},[67,109132,177],{"emptyLinePlaceholder":176},[67,109134,109135,109137,109139,109141,109143],{"class":69,"line":8752},[67,109136,2254],{"class":73},[67,109138,31757],{"class":208},[67,109140,102096],{"class":73},[67,109142,102099],{"class":84},[67,109144,4459],{"class":77},[67,109146,109147],{"class":69,"line":8764},[67,109148,102106],{"class":77},[19,109150,104107],{},[57,109152,109154],{"className":59,"code":109153,"language":61,"meta":62,"style":62},"touch ch5_renderer.py\n",[64,109155,109156],{"__ignoreMap":62},[67,109157,109158,109160],{"class":69,"line":70},[67,109159,101820],{"class":112},[67,109161,109162],{"class":84}," ch5_renderer.py\n",[14,109164,102109],{"id":102109},[19,109166,109167],{},"viewer 上下文：",[57,109169,109171],{"className":30915,"code":109170,"language":30917,"meta":62,"style":62},"with mujoco.viewer.launch_passive(model, data) as viewer:\n",[64,109172,109173],{"__ignoreMap":62},[67,109174,109175,109177,109179,109181],{"class":69,"line":70},[67,109176,108370],{"class":73},[67,109178,108373],{"class":77},[67,109180,31920],{"class":73},[67,109182,108378],{"class":77},[19,109184,109185,109187],{},[64,109186,108370],{}," 语句会创建窗口，并在退出时自动清理资源。",[19,109189,109190],{},"窗口循环：",[57,109192,109194],{"className":30915,"code":109193,"language":30917,"meta":62,"style":62},"while viewer.is_running() and data.time \u003C 5.0:\n",[64,109195,109196],{"__ignoreMap":62},[67,109197,109198,109201,109203,109205,109207,109209,109211],{"class":69,"line":70},[67,109199,109200],{"class":73},"while",[67,109202,108724],{"class":77},[67,109204,30999],{"class":73},[67,109206,108729],{"class":77},[67,109208,1766],{"class":73},[67,109210,108734],{"class":208},[67,109212,4459],{"class":77},[19,109214,109215],{},"只要窗口没有被关闭，并且仿真时间还没到 5 秒，就继续运行。",[19,109217,109218],{},"固定相机：",[57,109220,109222],{"className":53604,"code":109221,"language":53606,"meta":62,"style":62},"\u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[64,109223,109224],{"__ignoreMap":62},[67,109225,109226,109228,109230,109232,109234,109236,109238,109240,109243,109246,109248,109251],{"class":69,"line":70},[67,109227,1766],{"class":77},[67,109229,109052],{"class":51837},[67,109231,15637],{"class":112},[67,109233,909],{"class":77},[67,109235,109057],{"class":84},[67,109237,101643],{"class":112},[67,109239,909],{"class":77},[67,109241,109242],{"class":84},"\"1.5 -2.0 1.2\"",[67,109244,109245],{"class":112}," xyaxes",[67,109247,909],{"class":77},[67,109249,109250],{"class":84},"\"1 0.75 0 0 0 1\"",[67,109252,101681],{"class":77},[19,109254,109255],{},"Renderer 示例中定义了一个固定相机。这样每次保存的图片视角一致，适合做数据采集。",[14,109257,109259],{"id":109258},"viewer-代码逐行细讲","Viewer 代码逐行细讲",[57,109261,109263],{"className":30915,"code":109262,"language":30917,"meta":62,"style":62},"import time\n",[64,109264,109265],{"__ignoreMap":62},[67,109266,109267,109269],{"class":69,"line":70},[67,109268,30929],{"class":73},[67,109270,32366],{"class":77},[19,109272,109273],{},"导入时间模块。后面用它控制 viewer 循环速度，让画面不要跑得太快。",[57,109275,109277],{"className":30915,"code":109276,"language":30917,"meta":62,"style":62},"import mujoco\nimport mujoco.viewer\n",[64,109278,109279,109285],{"__ignoreMap":62},[67,109280,109281,109283],{"class":69,"line":70},[67,109282,30929],{"class":73},[67,109284,101838],{"class":77},[67,109286,109287,109289],{"class":69,"line":143},[67,109288,30929],{"class":73},[67,109290,108089],{"class":77},[19,109292,109293],{},"第一行导入 MuJoCo 基础功能。第二行导入 MuJoCo 的 viewer 模块，用来打开交互式窗口。",[57,109295,109296],{"className":30915,"code":109170,"language":30917,"meta":62,"style":62},[64,109297,109298],{"__ignoreMap":62},[67,109299,109300,109302,109304,109306],{"class":69,"line":70},[67,109301,108370],{"class":73},[67,109303,108373],{"class":77},[67,109305,31920],{"class":73},[67,109307,108378],{"class":77},[19,109309,109310,109311,109314],{},"打开一个 viewer 窗口。",[64,109312,109313],{},"launch_passive"," 的意思是“被动 viewer”：它负责显示，但仿真推进仍然由你的 Python 代码控制。",[57,109316,109317],{"className":30915,"code":109193,"language":30917,"meta":62,"style":62},[64,109318,109319],{"__ignoreMap":62},[67,109320,109321,109323,109325,109327,109329,109331,109333],{"class":69,"line":70},[67,109322,109200],{"class":73},[67,109324,108724],{"class":77},[67,109326,30999],{"class":73},[67,109328,108729],{"class":77},[67,109330,1766],{"class":73},[67,109332,108734],{"class":208},[67,109334,4459],{"class":77},[19,109336,109337,109338,109341],{},"只要窗口还开着，并且仿真时间小于 5 秒，就继续循环。如果你手动关闭窗口，",[64,109339,109340],{},"viewer.is_running()"," 会变成 false，循环结束。",[57,109343,109345],{"className":30915,"code":109344,"language":30917,"meta":62,"style":62},"step_start = time.time()\n",[64,109346,109347],{"__ignoreMap":62},[67,109348,109349,109352,109354],{"class":69,"line":70},[67,109350,109351],{"class":77},"step_start ",[67,109353,909],{"class":73},[67,109355,108746],{"class":77},[19,109357,109358],{},"记录当前真实时间。后面用它计算这一轮循环花了多久。",[57,109360,109361],{"className":30915,"code":108455,"language":30917,"meta":62,"style":62},[64,109362,109363,109367],{"__ignoreMap":62},[67,109364,109365],{"class":69,"line":70},[67,109366,105042],{"class":77},[67,109368,109369],{"class":69,"line":143},[67,109370,108466],{"class":77},[19,109372,109373,109375,109376,109378,109379,109381,109382,109385],{},[64,109374,101752],{}," 推进物理仿真。",[64,109377,108474],{}," 把最新的 ",[64,109380,33938],{}," 同步到窗口里显示。没有 ",[64,109383,109384],{},"sync()","，窗口可能看不到最新状态。",[57,109387,109388],{"className":30915,"code":108485,"language":30917,"meta":62,"style":62},[64,109389,109390],{"__ignoreMap":62},[67,109391,109392,109394,109396,109398,109400,109402,109404],{"class":69,"line":70},[67,109393,108492],{"class":77},[67,109395,909],{"class":73},[67,109397,108497],{"class":77},[67,109399,1389],{"class":73},[67,109401,108502],{"class":77},[67,109403,1389],{"class":73},[67,109405,108507],{"class":77},[19,109407,109408],{},"计算还需要等待多久。假设 timestep 是 0.01 秒，而这一轮计算只花了 0.003 秒，那就 sleep 约 0.007 秒。",[57,109410,109412],{"className":30915,"code":109411,"language":30917,"meta":62,"style":62},"if sleep_time > 0:\n    time.sleep(sleep_time)\n",[64,109413,109414,109426],{"__ignoreMap":62},[67,109415,109416,109418,109420,109422,109424],{"class":69,"line":70},[67,109417,2254],{"class":73},[67,109419,108784],{"class":77},[67,109421,1816],{"class":73},[67,109423,4813],{"class":208},[67,109425,4459],{"class":77},[67,109427,109428],{"class":69,"line":143},[67,109429,109430],{"class":77},"    time.sleep(sleep_time)\n",[19,109432,109433],{},"如果还有剩余时间，就暂停一会儿。这样 viewer 看起来更接近真实速度。",[14,109435,109437],{"id":109436},"renderer-代码逐行细讲","Renderer 代码逐行细讲",[57,109439,109441],{"className":30915,"code":109440,"language":30917,"meta":62,"style":62},"from pathlib import Path\n",[64,109442,109443],{"__ignoreMap":62},[67,109444,109445,109447,109449,109451],{"class":69,"line":70},[67,109446,31274],{"class":73},[67,109448,108848],{"class":77},[67,109450,30929],{"class":73},[67,109452,108853],{"class":77},[19,109454,109455,109456,109459,109460,109463],{},"导入 ",[64,109457,109458],{},"Path","，用来处理文件路径。相比直接写字符串，",[64,109461,109462],{},"Path(\"render_output.png\")"," 更清晰。",[57,109465,109467],{"className":30915,"code":109466,"language":30917,"meta":62,"style":62},"from PIL import Image\n",[64,109468,109469],{"__ignoreMap":62},[67,109470,109471,109473,109475,109477],{"class":69,"line":70},[67,109472,31274],{"class":73},[67,109474,47800],{"class":208},[67,109476,47803],{"class":73},[67,109478,47806],{"class":77},[19,109480,109481],{},"导入 Pillow 的图片工具。MuJoCo Renderer 输出的是数组，Pillow 可以把数组保存成 PNG 图片。",[57,109483,109484],{"className":53604,"code":109221,"language":53606,"meta":62,"style":62},[64,109485,109486],{"__ignoreMap":62},[67,109487,109488,109490,109492,109494,109496,109498,109500,109502,109504,109506,109508,109510],{"class":69,"line":70},[67,109489,1766],{"class":77},[67,109491,109052],{"class":51837},[67,109493,15637],{"class":112},[67,109495,909],{"class":77},[67,109497,109057],{"class":84},[67,109499,101643],{"class":112},[67,109501,909],{"class":77},[67,109503,109242],{"class":84},[67,109505,109245],{"class":112},[67,109507,909],{"class":77},[67,109509,109250],{"class":84},[67,109511,101681],{"class":77},[19,109513,109514,109515,109517,109518,109520,109521,109524,109525,109527],{},"定义一个相机。",[64,109516,80347],{}," 是相机名字。",[64,109519,104683],{}," 是相机在世界里的位置。",[64,109522,109523],{},"xyaxes"," 控制相机朝向，初学时可以先照抄，后面通过改 ",[64,109526,104683],{}," 来调视角。",[57,109529,109531],{"className":30915,"code":109530,"language":30917,"meta":62,"style":62},"renderer = mujoco.Renderer(model, height=480, width=640)\n",[64,109532,109533],{"__ignoreMap":62},[67,109534,109535,109537,109539,109541,109543,109545,109547,109549,109551,109553,109555],{"class":69,"line":70},[67,109536,108107],{"class":77},[67,109538,909],{"class":73},[67,109540,108411],{"class":77},[67,109542,25693],{"class":5935},[67,109544,909],{"class":73},[67,109546,42879],{"class":208},[67,109548,13153],{"class":77},[67,109550,25689],{"class":5935},[67,109552,909],{"class":73},[67,109554,108426],{"class":208},[67,109556,870],{"class":77},[19,109558,109559,109560,101555,109562,109564],{},"创建离屏渲染器。",[64,109561,25693],{},[64,109563,25689],{}," 决定输出图片大小。",[57,109566,109567],{"className":30915,"code":102213,"language":30917,"meta":62,"style":62},[64,109568,109569,109585],{"__ignoreMap":62},[67,109570,109571,109573,109575,109577,109579,109581,109583],{"class":69,"line":70},[67,109572,74],{"class":73},[67,109574,102038],{"class":77},[67,109576,81],{"class":73},[67,109578,32980],{"class":208},[67,109580,864],{"class":77},[67,109582,1169],{"class":208},[67,109584,31323],{"class":77},[67,109586,109587],{"class":69,"line":143},[67,109588,102236],{"class":77},[19,109590,109591],{},"先让仿真跑 100 步。这样保存图片时，方块已经下落了一段时间。",[57,109593,109595],{"className":30915,"code":109594,"language":30917,"meta":62,"style":62},"renderer.update_scene(data, camera=\"fixed_camera\")\n",[64,109596,109597],{"__ignoreMap":62},[67,109598,109599,109602,109604,109606,109608],{"class":69,"line":70},[67,109600,109601],{"class":77},"renderer.update_scene(data, ",[67,109603,109052],{"class":5935},[67,109605,909],{"class":73},[67,109607,109057],{"class":84},[67,109609,870],{"class":77},[19,109611,109612,109613,109615,109616,109619],{},"告诉 renderer：用当前 ",[64,109614,33938],{}," 的状态更新画面，并使用名为 ",[64,109617,109618],{},"fixed_camera"," 的相机视角。",[57,109621,109622],{"className":30915,"code":108517,"language":30917,"meta":62,"style":62},[64,109623,109624],{"__ignoreMap":62},[67,109625,109626,109628,109630],{"class":69,"line":70},[67,109627,108117],{"class":77},[67,109629,909],{"class":73},[67,109631,108122],{"class":77},[19,109633,109634,109635,109638],{},"真正渲染出图像。",[64,109636,109637],{},"image"," 是一个 NumPy 数组，不是文件。",[57,109640,109642],{"className":30915,"code":109641,"language":30917,"meta":62,"style":62},"Image.fromarray(image).save(output_path)\n",[64,109643,109644],{"__ignoreMap":62},[67,109645,109646],{"class":69,"line":70},[67,109647,109641],{"class":77},[19,109649,109650,109651,28922],{},"把数组转换成图片，并保存到 ",[64,109652,109653],{},"render_output.png",[57,109655,109657],{"className":30915,"code":109656,"language":30917,"meta":62,"style":62},"renderer.close()\n",[64,109658,109659],{"__ignoreMap":62},[67,109660,109661],{"class":69,"line":70},[67,109662,109656],{"class":77},[19,109664,109665],{},"关闭 renderer，释放图形资源。写小脚本时不一定马上出问题，但养成关闭资源的习惯更好。",[803,109667,102853],{"id":102852},[19,109669,109670,109671,109673,109674,28922],{},"Viewer 示例会打开窗口，显示红色方块下落。Renderer 示例会生成 ",[64,109672,109653],{},"，并输出图像数组形状，例如 ",[64,109675,109676],{},"(480, 640, 3)",[19,109678,109679],{},"如果图片里看不到方块，先检查：",[815,109681,109682,109685,109688],{},[818,109683,109684],{},"方块是否掉到相机视野外。",[818,109686,109687],{},"camera 位置是否合理。",[818,109689,109690,109691,109694],{},"是否在 ",[64,109692,109693],{},"renderer.update_scene(data, camera=\"fixed_camera\")"," 里指定了正确相机名。",[803,109696,102885],{"id":102884},[19,109698,109699],{},"运行 viewer:",[57,109701,109703],{"className":59,"code":109702,"language":61,"meta":62,"style":62},"python ch5_viewer.py\n",[64,109704,109705],{"__ignoreMap":62},[67,109706,109707,109709],{"class":69,"line":70},[67,109708,30917],{"class":112},[67,109710,108833],{"class":84},[19,109712,109713],{},"运行 renderer:",[57,109715,109717],{"className":59,"code":109716,"language":61,"meta":62,"style":62},"python ch5_renderer.py\n",[64,109718,109719],{"__ignoreMap":62},[67,109720,109721,109723],{"class":69,"line":70},[67,109722,30917],{"class":112},[67,109724,109162],{"class":84},[19,109726,109727],{},"如果在服务器上运行:",[57,109729,109731],{"className":59,"code":109730,"language":61,"meta":62,"style":62},"MUJOCO_GL=egl python ch5_renderer.py\n",[64,109732,109733],{"__ignoreMap":62},[67,109734,109735,109737,109739,109741,109744],{"class":69,"line":70},[67,109736,108351],{"class":77},[67,109738,909],{"class":73},[67,109740,108341],{"class":84},[67,109742,109743],{"class":112}," python",[67,109745,109162],{"class":84},[19,109747,108319],{},[57,109749,109751],{"className":59,"code":109750,"language":61,"meta":62,"style":62},"MUJOCO_GL=osmesa python ch5_renderer.py\n",[64,109752,109753],{"__ignoreMap":62},[67,109754,109755,109757,109759,109761,109763],{"class":69,"line":70},[67,109756,108351],{"class":77},[67,109758,909],{"class":73},[67,109760,108345],{"class":84},[67,109762,109743],{"class":112},[67,109764,109162],{"class":84},[19,109766,109767],{},"再做几个练习：",[815,109769,109770,109777,109780,109786],{},[818,109771,109772,109773,109776],{},"把 renderer 分辨率改成 ",[64,109774,109775],{},"height=240, width=320","，观察输出 shape。",[818,109778,109779],{},"把方块颜色改成蓝色，重新保存图片。",[818,109781,109782,109783,109785],{},"把相机 ",[64,109784,104683],{}," 改远一点，观察画面中物体是否变小。",[818,109787,109788,109789,102951,109792,109795],{},"把 viewer 示例中的 ",[64,109790,109791],{},"data.time \u003C 5.0",[64,109793,109794],{},"data.time \u003C 20.0","，观察更长时间。",[803,109797,102990],{"id":102989},[14,109799,109801],{"id":109800},"viewer-窗口打不开","viewer 窗口打不开",[19,109803,109804],{},"安装:",[57,109806,109808],{"className":59,"code":109807,"language":61,"meta":62,"style":62},"sudo dnf install -y glfw glfw-devel libX11 libXi libXrandr libXcursor libXinerama\n",[64,109809,109810],{"__ignoreMap":62},[67,109811,109812,109814,109816,109818,109820,109822,109824,109826,109828,109830,109832],{"class":69,"line":70},[67,109813,298],{"class":112},[67,109815,378],{"class":84},[67,109817,312],{"class":84},[67,109819,464],{"class":208},[67,109821,103043],{"class":84},[67,109823,101371],{"class":84},[67,109825,103048],{"class":84},[67,109827,101384],{"class":84},[67,109829,101390],{"class":84},[67,109831,101381],{"class":84},[67,109833,109834],{"class":84}," libXinerama\n",[14,109836,109838],{"id":109837},"glfwerror",[64,109839,109840],{},"GLFWError",[19,109842,109843],{},"可能是图形环境不可用。本机桌面优先测试 X11；远程服务器优先使用 Renderer 离屏渲染。",[14,109845,109847],{"id":109846},"renderer-报-opengl-后端错误","Renderer 报 OpenGL 后端错误",[19,109849,109850,109851,83076,109853,109855],{},"尝试 ",[64,109852,101574],{},[64,109854,101577],{},"。可能存在版本差异。",[14,109857,109858],{"id":109858},"保存图片是黑的",[19,109860,103112],{},[815,109862,109863,109866,109869,109879],{},[818,109864,109865],{},"XML 里是否有 light。",[818,109867,109868],{},"相机是否对着模型。",[818,109870,109871,109872,109875,109876,28922],{},"是否先 ",[64,109873,109874],{},"renderer.update_scene(data, camera=\"...\")"," 再 ",[64,109877,109878],{},"renderer.render()",[818,109880,109881],{},"物体是否已经掉出视野。",[14,109883,109884],{"id":109884},"远程服务器没有显示器",[19,109886,109887],{},"不要强行打开 viewer。优先使用 Renderer，并尝试：",[57,109889,109890],{"className":59,"code":109730,"language":61,"meta":62,"style":62},[64,109891,109892],{"__ignoreMap":62},[67,109893,109894,109896,109898,109900,109902],{"class":69,"line":70},[67,109895,108351],{"class":77},[67,109897,909],{"class":73},[67,109899,108341],{"class":84},[67,109901,109743],{"class":112},[67,109903,109162],{"class":84},[19,109905,109906],{},"如果 EGL 不可用，再尝试：",[57,109908,109909],{"className":59,"code":109750,"language":61,"meta":62,"style":62},[64,109910,109911],{"__ignoreMap":62},[67,109912,109913,109915,109917,109919,109921],{"class":69,"line":70},[67,109914,108351],{"class":77},[67,109916,909],{"class":73},[67,109918,108345],{"class":84},[67,109920,109743],{"class":112},[67,109922,109162],{"class":84},[803,109924,103144],{"id":103143},[19,109926,109927],{},"Viewer 用来调试，Renderer 用来生成图像。实际项目里常见流程是：",[815,109929,109930,109933,109936],{},[818,109931,109932],{},"先用 viewer 看模型和控制是否正常。",[818,109934,109935],{},"再用 renderer 保存图片或构造视觉观测。",[818,109937,109938],{},"最后把状态、动作、图像、奖励组织成训练数据。",[779,109940,109941],{},"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":62,"searchDepth":143,"depth":143,"links":109943},[109944,109945,109946,109951,109956,109957,109958,109965],{"id":101183,"depth":143,"text":101184},{"id":101306,"depth":143,"text":101307},{"id":101581,"depth":143,"text":101582,"children":109947},[109948,109949,109950],{"id":108448,"depth":149,"text":108449},{"id":108478,"depth":149,"text":108479},{"id":108513,"depth":149,"text":108514},{"id":101789,"depth":143,"text":101790,"children":109952},[109953,109954,109955],{"id":102109,"depth":149,"text":102109},{"id":109258,"depth":149,"text":109259},{"id":109436,"depth":149,"text":109437},{"id":102852,"depth":143,"text":102853},{"id":102884,"depth":143,"text":102885},{"id":102989,"depth":143,"text":102990,"children":109959},[109960,109961,109962,109963,109964],{"id":109800,"depth":149,"text":109801},{"id":109837,"depth":149,"text":109840},{"id":109846,"depth":149,"text":109847},{"id":109858,"depth":149,"text":109858},{"id":109884,"depth":149,"text":109884},{"id":103143,"depth":143,"text":103144},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch5-viewerrenderer",{"title":108056,"description":62},"wiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer","jkU4Bk_-8dFZQfBSHYyB6vru9sna8eICeXSnh5-FQI8",{"id":109972,"title":109973,"body":109974,"description":62,"extension":787,"meta":111885,"navigation":176,"path":111886,"seo":111887,"stem":111888,"__hash__":111889},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务.md","6.控制任务：Cartpole",{"type":7,"value":109975,"toc":111861},[109976,109979,109981,109984,109986,110005,110008,110014,110017,110019,110021,110045,110047,110061,110063,110104,110106,110117,110119,110122,110128,110131,110165,110168,110200,110203,110235,110239,110242,110282,110285,110291,110294,110300,110304,110307,110313,110316,110320,110323,110363,110365,110378,110381,110383,110965,110967,110979,110982,110993,110995,110998,111017,111029,111032,111053,111056,111059,111102,111105,111108,111128,111135,111137,111155,111170,111173,111179,111182,111188,111205,111212,111243,111254,111288,111299,111316,111325,111333,111338,111352,111355,111376,111382,111396,111401,111431,111441,111466,111474,111497,111500,111516,111519,111527,111533,111555,111568,111589,111598,111637,111648,111650,111653,111659,111662,111665,111671,111674,111694,111697,111699,111738,111740,111743,111751,111754,111757,111784,111787,111797,111803,111806,111812,111814,111820,111824,111827,111829,111832,111856,111859],[10,109977,109973],{"id":109978},"_6控制任务cartpole",[803,109980,101184],{"id":101183},[19,109982,109983],{},"本章搭建一个最小 Cartpole 控制任务。",[19,109985,104868],{},[815,109987,109988,109991,109993,109996,109999,110002],{},[818,109989,109990],{},"slide joint",[818,109992,106721],{},[818,109994,109995],{},"cart force actuator",[818,109997,109998],{},"状态观测",[818,110000,110001],{},"简单控制循环",[818,110003,110004],{},"reward 设计雏形",[19,110006,110007],{},"Cartpole 是强化学习里最经典的入门任务之一。它的目标很直观：",[57,110009,110012],{"className":110010,"code":110011,"language":5906,"meta":62},[5904],"小车可以左右移动\n杆子铰接在小车上\n控制小车左右施力\n尽量让杆子保持不倒\n",[64,110013,110011],{"__ignoreMap":62},[19,110015,110016],{},"这章不是为了做出最强控制器，而是为了让你看懂一个 MuJoCo 控制任务由哪些部分组成。",[803,110018,101307],{"id":101306},[19,110020,101310],{},[57,110022,110023],{"className":59,"code":104925,"language":61,"meta":62,"style":62},[64,110024,110025],{"__ignoreMap":62},[67,110026,110027,110029,110031,110033,110035,110037,110039,110041,110043],{"class":69,"line":70},[67,110028,298],{"class":112},[67,110030,378],{"class":84},[67,110032,312],{"class":84},[67,110034,464],{"class":208},[67,110036,104940],{"class":84},[67,110038,101335],{"class":84},[67,110040,103038],{"class":84},[67,110042,101351],{"class":84},[67,110044,104949],{"class":84},[19,110046,103356],{},[57,110048,110049],{"className":59,"code":101456,"language":61,"meta":62,"style":62},[64,110050,110051],{"__ignoreMap":62},[67,110052,110053,110055,110057,110059],{"class":69,"line":70},[67,110054,24546],{"class":112},[67,110056,312],{"class":84},[67,110058,101467],{"class":84},[67,110060,101470],{"class":84},[19,110062,103373],{},[57,110064,110066],{"className":59,"code":110065,"language":61,"meta":62,"style":62},"conda create -n mujoco-cartpole python=3.10 -y\nconda activate mujoco-cartpole\npip install \"mujoco>=2.3\" numpy\n",[64,110067,110068,110085,110094],{"__ignoreMap":62},[67,110069,110070,110072,110074,110076,110079,110081,110083],{"class":69,"line":70},[67,110071,30867],{"class":112},[67,110073,29713],{"class":84},[67,110075,25825],{"class":208},[67,110077,110078],{"class":84}," mujoco-cartpole",[67,110080,101512],{"class":84},[67,110082,101515],{"class":208},[67,110084,101518],{"class":208},[67,110086,110087,110089,110091],{"class":69,"line":143},[67,110088,30867],{"class":112},[67,110090,101525],{"class":84},[67,110092,110093],{"class":84}," mujoco-cartpole\n",[67,110095,110096,110098,110100,110102],{"class":69,"line":149},[67,110097,24546],{"class":112},[67,110099,312],{"class":84},[67,110101,101467],{"class":84},[67,110103,101470],{"class":84},[19,110105,101541],{},[815,110107,110108,110111,110114],{},[818,110109,110110],{},"本章不依赖 Gymnasium。",[818,110112,110113],{},"Cartpole XML 是简化教学模型，不等同于 Gymnasium 官方 CartPole 参数。",[818,110115,110116],{},"如果后续要对齐 Gymnasium，需要单独匹配质量、长度、奖励、终止条件。",[803,110118,101582],{"id":101581},[19,110120,110121],{},"Cartpole 的模型结构:",[57,110123,110126],{"className":110124,"code":110125,"language":5906,"meta":62},[5904],"world\n└── cart body\n    ├── slide joint: cart_x\n    └── pole body\n        └── hinge joint: pole_hinge\n",[64,110127,110125],{"__ignoreMap":62},[19,110129,110130],{},"小车通过 slide joint 左右移动:",[57,110132,110134],{"className":53604,"code":110133,"language":53606,"meta":62,"style":62},"\u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\"\u002F>\n",[64,110135,110136],{"__ignoreMap":62},[67,110137,110138,110140,110142,110144,110146,110149,110151,110153,110156,110158,110160,110163],{"class":69,"line":70},[67,110139,1766],{"class":77},[67,110141,103493],{"class":51837},[67,110143,15637],{"class":112},[67,110145,909],{"class":77},[67,110147,110148],{"class":84},"\"cart_x\"",[67,110150,54361],{"class":112},[67,110152,909],{"class":77},[67,110154,110155],{"class":84},"\"slide\"",[67,110157,106565],{"class":112},[67,110159,909],{"class":77},[67,110161,110162],{"class":84},"\"1 0 0\"",[67,110164,101681],{"class":77},[19,110166,110167],{},"杆子通过 hinge joint 旋转:",[57,110169,110171],{"className":53604,"code":110170,"language":53606,"meta":62,"style":62},"\u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[64,110172,110173],{"__ignoreMap":62},[67,110174,110175,110177,110179,110181,110183,110186,110188,110190,110192,110194,110196,110198],{"class":69,"line":70},[67,110176,1766],{"class":77},[67,110178,103493],{"class":51837},[67,110180,15637],{"class":112},[67,110182,909],{"class":77},[67,110184,110185],{"class":84},"\"pole_hinge\"",[67,110187,54361],{"class":112},[67,110189,909],{"class":77},[67,110191,106556],{"class":84},[67,110193,106565],{"class":112},[67,110195,909],{"class":77},[67,110197,106570],{"class":84},[67,110199,101681],{"class":77},[19,110201,110202],{},"控制力作用在小车 slide joint 上:",[57,110204,110206],{"className":53604,"code":110205,"language":53606,"meta":62,"style":62},"\u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\"\u002F>\n",[64,110207,110208],{"__ignoreMap":62},[67,110209,110210,110212,110214,110216,110218,110221,110223,110225,110227,110229,110231,110233],{"class":69,"line":70},[67,110211,1766],{"class":77},[67,110213,106611],{"class":51837},[67,110215,15637],{"class":112},[67,110217,909],{"class":77},[67,110219,110220],{"class":84},"\"cart_motor\"",[67,110222,106621],{"class":112},[67,110224,909],{"class":77},[67,110226,110148],{"class":84},[67,110228,106628],{"class":112},[67,110230,909],{"class":77},[67,110232,54853],{"class":84},[67,110234,101681],{"class":77},[14,110236,110238],{"id":110237},"cartpole-的状态是什么","Cartpole 的状态是什么",[19,110240,110241],{},"这个简化模型有两个关节：",[998,110243,110244,110255],{},[1001,110245,110246],{},[1004,110247,110248,110250,110252],{},[1007,110249,103296],{"align":24453},[1007,110251,24454],{"align":24453},[1007,110253,110254],{"align":24453},"对应状态",[1044,110256,110257,110270],{},[1004,110258,110259,110264,110267],{},[1049,110260,110261],{"align":24453},[64,110262,110263],{},"cart_x",[1049,110265,110266],{"align":24453},"slide",[1049,110268,110269],{"align":24453},"小车 x 位置",[1004,110271,110272,110277,110279],{},[1049,110273,110274],{"align":24453},[64,110275,110276],{},"pole_hinge",[1049,110278,106377],{"align":24453},[1049,110280,110281],{"align":24453},"杆子角度",[19,110283,110284],{},"所以：",[57,110286,110289],{"className":110287,"code":110288,"language":5906,"meta":62},[5904],"data.qpos = [cart_x, pole_angle]\ndata.qvel = [cart_x_velocity, pole_angular_velocity]\n",[64,110290,110288],{"__ignoreMap":62},[19,110292,110293],{},"把它们拼起来就是观测：",[57,110295,110298],{"className":110296,"code":110297,"language":5906,"meta":62},[5904],"obs = [cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[64,110299,110297],{"__ignoreMap":62},[14,110301,110303],{"id":110302},"action-是什么","action 是什么",[19,110305,110306],{},"本章只有一个 actuator：",[57,110308,110311],{"className":110309,"code":110310,"language":5906,"meta":62},[5904],"data.ctrl[0] = action\n",[64,110312,110310],{"__ignoreMap":62},[19,110314,110315],{},"这个 action 会通过 motor 作用在小车的 slide joint 上。action 为正，小车倾向于向 x 正方向运动；action 为负，小车倾向于向 x 负方向运动。",[14,110317,110319],{"id":110318},"reward-是什么","reward 是什么",[19,110321,110322],{},"奖励函数：",[57,110324,110326],{"className":30915,"code":110325,"language":30917,"meta":62,"style":62},"return float(1.0 - 0.1 * cart_x * cart_x - pole_angle * pole_angle)\n",[64,110327,110328],{"__ignoreMap":62},[67,110329,110330,110332,110335,110337,110339,110341,110344,110346,110349,110351,110353,110355,110358,110360],{"class":69,"line":70},[67,110331,17763],{"class":73},[67,110333,110334],{"class":208}," float",[67,110336,864],{"class":77},[67,110338,102940],{"class":208},[67,110340,52808],{"class":73},[67,110342,110343],{"class":208}," 0.1",[67,110345,7237],{"class":73},[67,110347,110348],{"class":77}," cart_x ",[67,110350,1312],{"class":73},[67,110352,110348],{"class":77},[67,110354,1389],{"class":73},[67,110356,110357],{"class":77}," pole_angle ",[67,110359,1312],{"class":73},[67,110361,110362],{"class":77}," pole_angle)\n",[19,110364,106763],{},[815,110366,110367,110372,110375],{},[818,110368,110369,110370,28922],{},"基础奖励是 ",[64,110371,102940],{},[818,110373,110374],{},"小车离中心越远，扣分越多。",[818,110376,110377],{},"杆子角度越大，扣分越多。",[19,110379,110380],{},"这只是教学用 reward。真实任务还可能加入终止条件、角速度惩罚、动作惩罚等。",[803,110382,101790],{"id":101789},[57,110384,110386],{"className":30915,"code":110385,"language":30917,"meta":62,"style":62},"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",[64,110387,110388,110394,110404,110408,110412,110420,110425,110429,110433,110437,110442,110446,110451,110456,110461,110465,110470,110475,110480,110484,110488,110492,110496,110500,110505,110509,110513,110517,110521,110525,110535,110542,110546,110550,110564,110578,110591,110621,110625,110629,110641,110653,110661,110665,110678,110682,110686,110695,110699,110715,110725,110738,110751,110755,110778,110796,110800,110812,110816,110820,110830,110840,110844,110860,110901,110905,110925,110941,110945,110949,110961],{"__ignoreMap":62},[67,110389,110390,110392],{"class":69,"line":70},[67,110391,30929],{"class":73},[67,110393,101838],{"class":77},[67,110395,110396,110398,110400,110402],{"class":69,"line":143},[67,110397,30929],{"class":73},[67,110399,31917],{"class":77},[67,110401,31920],{"class":73},[67,110403,31923],{"class":77},[67,110405,110406],{"class":69,"line":149},[67,110407,177],{"emptyLinePlaceholder":176},[67,110409,110410],{"class":69,"line":155},[67,110411,177],{"emptyLinePlaceholder":176},[67,110413,110414,110416,110418],{"class":69,"line":161},[67,110415,101851],{"class":208},[67,110417,14282],{"class":73},[67,110419,101856],{"class":84},[67,110421,110422],{"class":69,"line":167},[67,110423,110424],{"class":84},"\u003Cmujoco model=\"cartpole\">\n",[67,110426,110427],{"class":69,"line":173},[67,110428,101866],{"class":84},[67,110430,110431],{"class":69,"line":180},[67,110432,177],{"emptyLinePlaceholder":176},[67,110434,110435],{"class":69,"line":186},[67,110436,101875],{"class":84},[67,110438,110439],{"class":69,"line":444},[67,110440,110441],{"class":84},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"4 1 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[67,110443,110444],{"class":69,"line":2335},[67,110445,177],{"emptyLinePlaceholder":176},[67,110447,110448],{"class":69,"line":2340},[67,110449,110450],{"class":84},"    \u003Cbody name=\"cart\" pos=\"0 0 0.2\">\n",[67,110452,110453],{"class":69,"line":2346},[67,110454,110455],{"class":84},"      \u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\" damping=\"0.05\"\u002F>\n",[67,110457,110458],{"class":69,"line":2351},[67,110459,110460],{"class":84},"      \u003Cgeom name=\"cart_geom\" type=\"box\" size=\"0.2 0.1 0.1\" mass=\"1\" rgba=\"0.1 0.3 1 1\"\u002F>\n",[67,110462,110463],{"class":69,"line":2365},[67,110464,177],{"emptyLinePlaceholder":176},[67,110466,110467],{"class":69,"line":2370},[67,110468,110469],{"class":84},"      \u003Cbody name=\"pole\" pos=\"0 0 0.1\">\n",[67,110471,110472],{"class":69,"line":2376},[67,110473,110474],{"class":84},"        \u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.01\"\u002F>\n",[67,110476,110477],{"class":69,"line":2397},[67,110478,110479],{"class":84},"        \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",[67,110481,110482],{"class":69,"line":2402},[67,110483,106975],{"class":84},[67,110485,110486],{"class":69,"line":2416},[67,110487,101904],{"class":84},[67,110489,110490],{"class":69,"line":2421},[67,110491,101909],{"class":84},[67,110493,110494],{"class":69,"line":2450},[67,110495,177],{"emptyLinePlaceholder":176},[67,110497,110498],{"class":69,"line":2455},[67,110499,106992],{"class":84},[67,110501,110502],{"class":69,"line":2472},[67,110503,110504],{"class":84},"    \u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[67,110506,110507],{"class":69,"line":2477},[67,110508,107002],{"class":84},[67,110510,110511],{"class":69,"line":2482},[67,110512,101914],{"class":84},[67,110514,110515],{"class":69,"line":2487},[67,110516,96235],{"class":84},[67,110518,110519],{"class":69,"line":2501},[67,110520,177],{"emptyLinePlaceholder":176},[67,110522,110523],{"class":69,"line":2506},[67,110524,177],{"emptyLinePlaceholder":176},[67,110526,110527,110529,110532],{"class":69,"line":3298},[67,110528,32484],{"class":73},[67,110530,110531],{"class":112}," get_observation",[67,110533,110534],{"class":77},"(data: mujoco.MjData) -> np.ndarray:\n",[67,110536,110537,110539],{"class":69,"line":3312},[67,110538,4810],{"class":73},[67,110540,110541],{"class":77}," np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[67,110543,110544],{"class":69,"line":3320},[67,110545,177],{"emptyLinePlaceholder":176},[67,110547,110548],{"class":69,"line":3325},[67,110549,177],{"emptyLinePlaceholder":176},[67,110551,110552,110554,110557,110560,110562],{"class":69,"line":3331},[67,110553,32484],{"class":73},[67,110555,110556],{"class":112}," compute_reward",[67,110558,110559],{"class":77},"(obs: np.ndarray) -> ",[67,110561,903],{"class":208},[67,110563,4459],{"class":77},[67,110565,110566,110569,110571,110574,110576],{"class":69,"line":3337},[67,110567,110568],{"class":77},"    cart_x ",[67,110570,909],{"class":73},[67,110572,110573],{"class":77}," obs[",[67,110575,1051],{"class":208},[67,110577,33783],{"class":77},[67,110579,110580,110583,110585,110587,110589],{"class":69,"line":3342},[67,110581,110582],{"class":77},"    pole_angle ",[67,110584,909],{"class":73},[67,110586,110573],{"class":77},[67,110588,1077],{"class":208},[67,110590,33783],{"class":77},[67,110592,110593,110595,110597,110599,110601,110603,110605,110607,110609,110611,110613,110615,110617,110619],{"class":69,"line":8667},[67,110594,4810],{"class":73},[67,110596,110334],{"class":208},[67,110598,864],{"class":77},[67,110600,102940],{"class":208},[67,110602,52808],{"class":73},[67,110604,110343],{"class":208},[67,110606,7237],{"class":73},[67,110608,110348],{"class":77},[67,110610,1312],{"class":73},[67,110612,110348],{"class":77},[67,110614,1389],{"class":73},[67,110616,110357],{"class":77},[67,110618,1312],{"class":73},[67,110620,110362],{"class":77},[67,110622,110623],{"class":69,"line":8691},[67,110624,177],{"emptyLinePlaceholder":176},[67,110626,110627],{"class":69,"line":8696},[67,110628,177],{"emptyLinePlaceholder":176},[67,110630,110631,110633,110635,110637,110639],{"class":69,"line":8702},[67,110632,32484],{"class":73},[67,110634,2695],{"class":112},[67,110636,101935],{"class":77},[67,110638,96223],{"class":208},[67,110640,4459],{"class":77},[67,110642,110643,110645,110647,110649,110651],{"class":69,"line":8729},[67,110644,101944],{"class":77},[67,110646,909],{"class":73},[67,110648,101949],{"class":77},[67,110650,101851],{"class":208},[67,110652,870],{"class":77},[67,110654,110655,110657,110659],{"class":69,"line":8734},[67,110656,101958],{"class":77},[67,110658,909],{"class":73},[67,110660,101963],{"class":77},[67,110662,110663],{"class":69,"line":8740},[67,110664,177],{"emptyLinePlaceholder":176},[67,110666,110667,110669,110671,110673,110675],{"class":69,"line":8752},[67,110668,105606],{"class":77},[67,110670,1077],{"class":208},[67,110672,5162],{"class":77},[67,110674,909],{"class":73},[67,110676,110677],{"class":208}," 0.1\n",[67,110679,110680],{"class":69,"line":8764},[67,110681,105619],{"class":77},[67,110683,110684],{"class":69,"line":8776},[67,110685,177],{"emptyLinePlaceholder":176},[67,110687,110688,110691,110693],{"class":69,"line":10435},[67,110689,110690],{"class":77},"    total_reward ",[67,110692,909],{"class":73},[67,110694,105298],{"class":208},[67,110696,110697],{"class":69,"line":10459},[67,110698,177],{"emptyLinePlaceholder":176},[67,110700,110701,110703,110705,110707,110709,110711,110713],{"class":69,"line":10482},[67,110702,3921],{"class":73},[67,110704,32153],{"class":77},[67,110706,81],{"class":73},[67,110708,32980],{"class":208},[67,110710,864],{"class":77},[67,110712,7129],{"class":208},[67,110714,31323],{"class":77},[67,110716,110717,110720,110722],{"class":69,"line":10506},[67,110718,110719],{"class":77},"        obs ",[67,110721,909],{"class":73},[67,110723,110724],{"class":77}," get_observation(data)\n",[67,110726,110727,110730,110732,110734,110736],{"class":69,"line":10511},[67,110728,110729],{"class":77},"        pole_angle ",[67,110731,909],{"class":73},[67,110733,110573],{"class":77},[67,110735,1077],{"class":208},[67,110737,33783],{"class":77},[67,110739,110740,110743,110745,110747,110749],{"class":69,"line":10516},[67,110741,110742],{"class":77},"        pole_angular_velocity ",[67,110744,909],{"class":73},[67,110746,110573],{"class":77},[67,110748,933],{"class":208},[67,110750,33783],{"class":77},[67,110752,110753],{"class":69,"line":10521},[67,110754,177],{"emptyLinePlaceholder":176},[67,110756,110757,110760,110762,110765,110767,110769,110771,110773,110775],{"class":69,"line":10530},[67,110758,110759],{"class":77},"        action ",[67,110761,909],{"class":73},[67,110763,110764],{"class":208}," 2.0",[67,110766,7237],{"class":73},[67,110768,110357],{"class":77},[67,110770,1338],{"class":73},[67,110772,62404],{"class":208},[67,110774,7237],{"class":73},[67,110776,110777],{"class":77}," pole_angular_velocity\n",[67,110779,110780,110782,110784,110786,110788,110790,110792,110794],{"class":69,"line":10535},[67,110781,110759],{"class":77},[67,110783,909],{"class":73},[67,110785,107984],{"class":77},[67,110787,1389],{"class":73},[67,110789,102940],{"class":208},[67,110791,13153],{"class":77},[67,110793,102940],{"class":208},[67,110795,870],{"class":77},[67,110797,110798],{"class":69,"line":10541},[67,110799,177],{"emptyLinePlaceholder":176},[67,110801,110802,110804,110806,110808,110810],{"class":69,"line":10562},[67,110803,107154],{"class":77},[67,110805,1051],{"class":208},[67,110807,5162],{"class":77},[67,110809,909],{"class":73},[67,110811,108007],{"class":77},[67,110813,110814],{"class":69,"line":10568},[67,110815,102053],{"class":77},[67,110817,110818],{"class":69,"line":10582},[67,110819,177],{"emptyLinePlaceholder":176},[67,110821,110822,110825,110827],{"class":69,"line":10588},[67,110823,110824],{"class":77},"        reward ",[67,110826,909],{"class":73},[67,110828,110829],{"class":77}," compute_reward(get_observation(data))\n",[67,110831,110832,110835,110837],{"class":69,"line":10615},[67,110833,110834],{"class":77},"        total_reward ",[67,110836,10196],{"class":73},[67,110838,110839],{"class":77}," reward\n",[67,110841,110842],{"class":69,"line":10624},[67,110843,177],{"emptyLinePlaceholder":176},[67,110845,110846,110848,110850,110852,110854,110856,110858],{"class":69,"line":10630},[67,110847,3218],{"class":73},[67,110849,32153],{"class":77},[67,110851,1186],{"class":73},[67,110853,6473],{"class":208},[67,110855,102096],{"class":73},[67,110857,4813],{"class":208},[67,110859,4459],{"class":77},[67,110861,110862,110864,110866,110869,110872,110875,110878,110880,110883,110886,110888,110890,110892,110894,110897,110899],{"class":69,"line":10638},[67,110863,35187],{"class":208},[67,110865,864],{"class":77},[67,110867,110868],{"class":84},"\"step:\"",[67,110870,110871],{"class":77},", step, ",[67,110873,110874],{"class":84},"\"obs:\"",[67,110876,110877],{"class":77},", np.round(obs, ",[67,110879,933],{"class":208},[67,110881,110882],{"class":77},"), ",[67,110884,110885],{"class":84},"\"action:\"",[67,110887,13153],{"class":77},[67,110889,32555],{"class":208},[67,110891,864],{"class":77},[67,110893,903],{"class":208},[67,110895,110896],{"class":77},"(action), ",[67,110898,933],{"class":208},[67,110900,31034],{"class":77},[67,110902,110903],{"class":69,"line":10643},[67,110904,177],{"emptyLinePlaceholder":176},[67,110906,110907,110909,110911,110914,110916,110918,110921,110923],{"class":69,"line":17321},[67,110908,31836],{"class":208},[67,110910,864],{"class":77},[67,110912,110913],{"class":84},"\"total_reward:\"",[67,110915,13153],{"class":77},[67,110917,32555],{"class":208},[67,110919,110920],{"class":77},"(total_reward, ",[67,110922,933],{"class":208},[67,110924,31034],{"class":77},[67,110926,110927,110929,110931,110934,110937,110939],{"class":69,"line":17327},[67,110928,31836],{"class":208},[67,110930,864],{"class":77},[67,110932,110933],{"class":84},"\"final obs:\"",[67,110935,110936],{"class":77},", np.round(get_observation(data), ",[67,110938,933],{"class":208},[67,110940,31034],{"class":77},[67,110942,110943],{"class":69,"line":17350},[67,110944,177],{"emptyLinePlaceholder":176},[67,110946,110947],{"class":69,"line":17356},[67,110948,177],{"emptyLinePlaceholder":176},[67,110950,110951,110953,110955,110957,110959],{"class":69,"line":17379},[67,110952,2254],{"class":73},[67,110954,31757],{"class":208},[67,110956,102096],{"class":73},[67,110958,102099],{"class":84},[67,110960,4459],{"class":77},[67,110962,110963],{"class":69,"line":17393},[67,110964,102106],{"class":77},[19,110966,104107],{},[57,110968,110970],{"className":59,"code":110969,"language":61,"meta":62,"style":62},"touch ch6_cartpole.py\n",[64,110971,110972],{"__ignoreMap":62},[67,110973,110974,110976],{"class":69,"line":70},[67,110975,101820],{"class":112},[67,110977,110978],{"class":84}," ch6_cartpole.py\n",[19,110980,110981],{},"运行：",[57,110983,110985],{"className":59,"code":110984,"language":61,"meta":62,"style":62},"python ch6_cartpole.py\n",[64,110986,110987],{"__ignoreMap":62},[67,110988,110989,110991],{"class":69,"line":70},[67,110990,30917],{"class":112},[67,110992,110978],{"class":84},[14,110994,102109],{"id":102109},[19,110996,110997],{},"构造观测：",[57,110999,111001],{"className":30915,"code":111000,"language":30917,"meta":62,"style":62},"def get_observation(data: mujoco.MjData) -> np.ndarray:\n    return np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[64,111002,111003,111011],{"__ignoreMap":62},[67,111004,111005,111007,111009],{"class":69,"line":70},[67,111006,32484],{"class":73},[67,111008,110531],{"class":112},[67,111010,110534],{"class":77},[67,111012,111013,111015],{"class":69,"line":143},[67,111014,4810],{"class":73},[67,111016,110541],{"class":77},[19,111018,111019,111022,111023,111025,111026,111028],{},[64,111020,111021],{},"np.concatenate"," 把位置数组和速度数组拼成一个更长的数组。这里 ",[64,111024,104567],{}," 2 维，",[64,111027,104897],{}," 2 维，所以 obs 是 4 维。",[19,111030,111031],{},"设置初始角度：",[57,111033,111035],{"className":30915,"code":111034,"language":30917,"meta":62,"style":62},"data.qpos[1] = 0.1\nmujoco.mj_forward(model, data)\n",[64,111036,111037,111049],{"__ignoreMap":62},[67,111038,111039,111041,111043,111045,111047],{"class":69,"line":70},[67,111040,105236],{"class":77},[67,111042,1077],{"class":208},[67,111044,5162],{"class":77},[67,111046,909],{"class":73},[67,111048,110677],{"class":208},[67,111050,111051],{"class":69,"line":143},[67,111052,105080],{"class":77},[19,111054,111055],{},"这让杆子一开始有一点倾斜。如果完全竖直且没有扰动，系统可能太“安静”，不利于观察控制效果。",[19,111057,111058],{},"简单反馈控制：",[57,111060,111062],{"className":30915,"code":111061,"language":30917,"meta":62,"style":62},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\naction = np.clip(action, -1.0, 1.0)\n",[64,111063,111064,111084],{"__ignoreMap":62},[67,111065,111066,111068,111070,111072,111074,111076,111078,111080,111082],{"class":69,"line":70},[67,111067,107979],{"class":77},[67,111069,909],{"class":73},[67,111071,110764],{"class":208},[67,111073,7237],{"class":73},[67,111075,110357],{"class":77},[67,111077,1338],{"class":73},[67,111079,62404],{"class":208},[67,111081,7237],{"class":73},[67,111083,110777],{"class":77},[67,111085,111086,111088,111090,111092,111094,111096,111098,111100],{"class":69,"line":143},[67,111087,107979],{"class":77},[67,111089,909],{"class":73},[67,111091,107984],{"class":77},[67,111093,1389],{"class":73},[67,111095,102940],{"class":208},[67,111097,13153],{"class":77},[67,111099,102940],{"class":208},[67,111101,870],{"class":77},[19,111103,111104],{},"这不是严格推导出来的最优控制，只是一个教学例子：根据杆子的角度和角速度，决定给小车施加多大力。",[19,111106,111107],{},"限制动作：",[57,111109,111111],{"className":30915,"code":111110,"language":30917,"meta":62,"style":62},"np.clip(action, -1.0, 1.0)\n",[64,111112,111113],{"__ignoreMap":62},[67,111114,111115,111118,111120,111122,111124,111126],{"class":69,"line":70},[67,111116,111117],{"class":77},"np.clip(action, ",[67,111119,1389],{"class":73},[67,111121,102940],{"class":208},[67,111123,13153],{"class":77},[67,111125,102940],{"class":208},[67,111127,870],{"class":77},[19,111129,111130,111131,111134],{},"因为 XML 里 ",[64,111132,111133],{},"ctrlrange=\"-1 1\"","，所以 Python 里也把 action 限制在这个范围内。",[14,111136,102245],{"id":102245},[57,111138,111139],{"className":30915,"code":111000,"language":30917,"meta":62,"style":62},[64,111140,111141,111149],{"__ignoreMap":62},[67,111142,111143,111145,111147],{"class":69,"line":70},[67,111144,32484],{"class":73},[67,111146,110531],{"class":112},[67,111148,110534],{"class":77},[67,111150,111151,111153],{"class":69,"line":143},[67,111152,4810],{"class":73},[67,111154,110541],{"class":77},[19,111156,111157,111158,111161,111162,111165,111166,111169],{},"这段定义了一个函数，用来获取当前观测。",[64,111159,111160],{},"data.qpos.copy()"," 是位置数组副本，",[64,111163,111164],{},"data.qvel.copy()"," 是速度数组副本。",[64,111167,111168],{},"np.concatenate(...)"," 把两个数组首尾拼接起来。",[19,111171,111172],{},"在本章模型里：",[57,111174,111177],{"className":111175,"code":111176,"language":5906,"meta":62},[5904],"data.qpos = [小车位置, 杆子角度]\ndata.qvel = [小车速度, 杆子角速度]\n",[64,111178,111176],{"__ignoreMap":62},[19,111180,111181],{},"所以返回的 obs 是：",[57,111183,111186],{"className":111184,"code":111185,"language":5906,"meta":62},[5904],"[小车位置, 杆子角度, 小车速度, 杆子角速度]\n",[64,111187,111185],{"__ignoreMap":62},[57,111189,111191],{"className":30915,"code":111190,"language":30917,"meta":62,"style":62},"def compute_reward(obs: np.ndarray) -> float:\n",[64,111192,111193],{"__ignoreMap":62},[67,111194,111195,111197,111199,111201,111203],{"class":69,"line":70},[67,111196,32484],{"class":73},[67,111198,110556],{"class":112},[67,111200,110559],{"class":77},[67,111202,903],{"class":208},[67,111204,4459],{"class":77},[19,111206,111207,111208,111211],{},"这行定义奖励函数。输入是观测 ",[64,111209,111210],{},"obs","，输出是一个浮点数奖励。",[57,111213,111215],{"className":30915,"code":111214,"language":30917,"meta":62,"style":62},"cart_x = obs[0]\npole_angle = obs[1]\n",[64,111216,111217,111230],{"__ignoreMap":62},[67,111218,111219,111222,111224,111226,111228],{"class":69,"line":70},[67,111220,111221],{"class":77},"cart_x ",[67,111223,909],{"class":73},[67,111225,110573],{"class":77},[67,111227,1051],{"class":208},[67,111229,33783],{"class":77},[67,111231,111232,111235,111237,111239,111241],{"class":69,"line":143},[67,111233,111234],{"class":77},"pole_angle ",[67,111236,909],{"class":73},[67,111238,110573],{"class":77},[67,111240,1077],{"class":208},[67,111242,33783],{"class":77},[19,111244,111245,111246,111249,111250,111253],{},"数组索引从 0 开始。",[64,111247,111248],{},"obs[0]"," 是第一个元素，也就是小车位置。",[64,111251,111252],{},"obs[1]"," 是第二个元素，也就是杆子角度。",[57,111255,111256],{"className":30915,"code":110325,"language":30917,"meta":62,"style":62},[64,111257,111258],{"__ignoreMap":62},[67,111259,111260,111262,111264,111266,111268,111270,111272,111274,111276,111278,111280,111282,111284,111286],{"class":69,"line":70},[67,111261,17763],{"class":73},[67,111263,110334],{"class":208},[67,111265,864],{"class":77},[67,111267,102940],{"class":208},[67,111269,52808],{"class":73},[67,111271,110343],{"class":208},[67,111273,7237],{"class":73},[67,111275,110348],{"class":77},[67,111277,1312],{"class":73},[67,111279,110348],{"class":77},[67,111281,1389],{"class":73},[67,111283,110357],{"class":77},[67,111285,1312],{"class":73},[67,111287,110362],{"class":77},[19,111289,111290,111291,111294,111295,111298],{},"这行计算奖励。",[64,111292,111293],{},"cart_x * cart_x"," 是小车位置的平方，",[64,111296,111297],{},"pole_angle * pole_angle"," 是杆子角度的平方。平方的特点是无论正负都会变成正数，所以偏离中心和角度偏离都会扣分。",[57,111300,111302],{"className":30915,"code":111301,"language":30917,"meta":62,"style":62},"data.qpos[1] = 0.1\n",[64,111303,111304],{"__ignoreMap":62},[67,111305,111306,111308,111310,111312,111314],{"class":69,"line":70},[67,111307,105236],{"class":77},[67,111309,1077],{"class":208},[67,111311,5162],{"class":77},[67,111313,909],{"class":73},[67,111315,110677],{"class":208},[19,111317,111318,111319,111321,111322,111324],{},"手动设置杆子的初始角度。因为 ",[64,111320,105993],{}," 是小车位置，",[64,111323,105996],{}," 是杆子角度，所以这里改的是杆子。",[57,111326,111327],{"className":30915,"code":105080,"language":30917,"meta":62,"style":62},[64,111328,111329],{"__ignoreMap":62},[67,111330,111331],{"class":69,"line":70},[67,111332,105080],{"class":77},[19,111334,106039,111335,111337],{},[64,111336,104567],{}," 后，刷新 MuJoCo 内部派生状态。否则有些坐标、碰撞或可视化信息可能还停留在旧状态。",[57,111339,111341],{"className":30915,"code":111340,"language":30917,"meta":62,"style":62},"total_reward = 0.0\n",[64,111342,111343],{"__ignoreMap":62},[67,111344,111345,111348,111350],{"class":69,"line":70},[67,111346,111347],{"class":77},"total_reward ",[67,111349,909],{"class":73},[67,111351,105298],{"class":208},[19,111353,111354],{},"创建一个变量，用来累计整个 episode 的奖励。初始值是 0。",[57,111356,111358],{"className":30915,"code":111357,"language":30917,"meta":62,"style":62},"for step in range(1000):\n",[64,111359,111360],{"__ignoreMap":62},[67,111361,111362,111364,111366,111368,111370,111372,111374],{"class":69,"line":70},[67,111363,74],{"class":73},[67,111365,32153],{"class":77},[67,111367,81],{"class":73},[67,111369,32980],{"class":208},[67,111371,864],{"class":77},[67,111373,7129],{"class":208},[67,111375,31323],{"class":77},[19,111377,111378,111379,111381],{},"循环 1000 步。",[64,111380,107671],{}," 是当前步数，从 0 到 999。",[57,111383,111385],{"className":30915,"code":111384,"language":30917,"meta":62,"style":62},"obs = get_observation(data)\n",[64,111386,111387],{"__ignoreMap":62},[67,111388,111389,111392,111394],{"class":69,"line":70},[67,111390,111391],{"class":77},"obs ",[67,111393,909],{"class":73},[67,111395,110724],{"class":77},[19,111397,111398,111399,28922],{},"读取当前状态，保存到 ",[64,111400,111210],{},[57,111402,111404],{"className":30915,"code":111403,"language":30917,"meta":62,"style":62},"pole_angle = obs[1]\npole_angular_velocity = obs[3]\n",[64,111405,111406,111418],{"__ignoreMap":62},[67,111407,111408,111410,111412,111414,111416],{"class":69,"line":70},[67,111409,111234],{"class":77},[67,111411,909],{"class":73},[67,111413,110573],{"class":77},[67,111415,1077],{"class":208},[67,111417,33783],{"class":77},[67,111419,111420,111423,111425,111427,111429],{"class":69,"line":143},[67,111421,111422],{"class":77},"pole_angular_velocity ",[67,111424,909],{"class":73},[67,111426,110573],{"class":77},[67,111428,933],{"class":208},[67,111430,33783],{"class":77},[19,111432,111433,111434,111437,111438,28922],{},"取出杆子角度和杆子角速度。为什么角速度是 ",[64,111435,111436],{},"obs[3]","？因为 obs 的顺序是 ",[64,111439,111440],{},"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]",[57,111442,111444],{"className":30915,"code":111443,"language":30917,"meta":62,"style":62},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\n",[64,111445,111446],{"__ignoreMap":62},[67,111447,111448,111450,111452,111454,111456,111458,111460,111462,111464],{"class":69,"line":70},[67,111449,107979],{"class":77},[67,111451,909],{"class":73},[67,111453,110764],{"class":208},[67,111455,7237],{"class":73},[67,111457,110357],{"class":77},[67,111459,1338],{"class":73},[67,111461,62404],{"class":208},[67,111463,7237],{"class":73},[67,111465,110777],{"class":77},[19,111467,111468,111469,101555,111471,111473],{},"这是一个简单反馈控制器。它根据杆子当前角度和角速度算出动作。",[64,111470,105797],{},[64,111472,35866],{}," 是人为设置的系数，不是固定公式。",[57,111475,111477],{"className":30915,"code":111476,"language":30917,"meta":62,"style":62},"action = np.clip(action, -1.0, 1.0)\n",[64,111478,111479],{"__ignoreMap":62},[67,111480,111481,111483,111485,111487,111489,111491,111493,111495],{"class":69,"line":70},[67,111482,107979],{"class":77},[67,111484,909],{"class":73},[67,111486,107984],{"class":77},[67,111488,1389],{"class":73},[67,111490,102940],{"class":208},[67,111492,13153],{"class":77},[67,111494,102940],{"class":208},[67,111496,870],{"class":77},[19,111498,111499],{},"把 action 限制在 -1 到 1 之间。如果 action 算出来是 3，会变成 1；如果是 -4，会变成 -1。",[57,111501,111502],{"className":30915,"code":110310,"language":30917,"meta":62,"style":62},[64,111503,111504],{"__ignoreMap":62},[67,111505,111506,111508,111510,111512,111514],{"class":69,"line":70},[67,111507,106408],{"class":77},[67,111509,1051],{"class":208},[67,111511,5162],{"class":77},[67,111513,909],{"class":73},[67,111515,108007],{"class":77},[19,111517,111518],{},"把动作写入第 0 个 actuator，也就是小车电机。真正的“控制 MuJoCo”就是通过这行发生的。",[57,111520,111521],{"className":30915,"code":105042,"language":30917,"meta":62,"style":62},[64,111522,111523],{"__ignoreMap":62},[67,111524,111525],{"class":69,"line":70},[67,111526,105042],{"class":77},[19,111528,111529,111530,111532],{},"让仿真前进一步。MuJoCo 会根据刚刚写入的 ",[64,111531,106663],{}," 计算小车和杆子的下一刻状态。",[57,111534,111536],{"className":30915,"code":111535,"language":30917,"meta":62,"style":62},"reward = compute_reward(get_observation(data))\ntotal_reward += reward\n",[64,111537,111538,111547],{"__ignoreMap":62},[67,111539,111540,111543,111545],{"class":69,"line":70},[67,111541,111542],{"class":77},"reward ",[67,111544,909],{"class":73},[67,111546,110829],{"class":77},[67,111548,111549,111551,111553],{"class":69,"line":143},[67,111550,111347],{"class":77},[67,111552,10196],{"class":73},[67,111554,110839],{"class":77},[19,111556,111557,111558,111560,111561,111564,111565,28922],{},"先根据新状态计算奖励，再把它加到累计奖励中。",[64,111559,10196],{}," 是简写，",[64,111562,111563],{},"total_reward += reward"," 等价于 ",[64,111566,111567],{},"total_reward = total_reward + reward",[57,111569,111571],{"className":30915,"code":111570,"language":30917,"meta":62,"style":62},"if step % 100 == 0:\n",[64,111572,111573],{"__ignoreMap":62},[67,111574,111575,111577,111579,111581,111583,111585,111587],{"class":69,"line":70},[67,111576,2254],{"class":73},[67,111578,32153],{"class":77},[67,111580,1186],{"class":73},[67,111582,6473],{"class":208},[67,111584,102096],{"class":73},[67,111586,4813],{"class":208},[67,111588,4459],{"class":77},[19,111590,111591,111593,111594,111597],{},[64,111592,1186],{}," 是取余数。",[64,111595,111596],{},"step % 100 == 0"," 表示每 100 步打印一次，比如第 0、100、200 步。",[57,111599,111601],{"className":30915,"code":111600,"language":30917,"meta":62,"style":62},"print(\"step:\", step, \"obs:\", np.round(obs, 3), \"action:\", round(float(action), 3))\n",[64,111602,111603],{"__ignoreMap":62},[67,111604,111605,111607,111609,111611,111613,111615,111617,111619,111621,111623,111625,111627,111629,111631,111633,111635],{"class":69,"line":70},[67,111606,30952],{"class":208},[67,111608,864],{"class":77},[67,111610,110868],{"class":84},[67,111612,110871],{"class":77},[67,111614,110874],{"class":84},[67,111616,110877],{"class":77},[67,111618,933],{"class":208},[67,111620,110882],{"class":77},[67,111622,110885],{"class":84},[67,111624,13153],{"class":77},[67,111626,32555],{"class":208},[67,111628,864],{"class":77},[67,111630,903],{"class":208},[67,111632,110896],{"class":77},[67,111634,933],{"class":208},[67,111636,31034],{"class":77},[19,111638,111639,111640,111643,111644,111647],{},"打印当前步数、观测和动作。",[64,111641,111642],{},"np.round(obs, 3)"," 表示 obs 保留 3 位小数。",[64,111645,111646],{},"round(float(action), 3)"," 表示 action 保留 3 位小数。",[803,111649,102853],{"id":102852},[19,111651,111652],{},"观测向量:",[57,111654,111657],{"className":111655,"code":111656,"language":5906,"meta":62},[5904],"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[64,111658,111656],{"__ignoreMap":62},[19,111660,111661],{},"控制器是教学用的简单线性反馈，不保证最优。",[19,111663,111664],{},"每隔 100 步会打印一次：",[57,111666,111669],{"className":111667,"code":111668,"language":5906,"meta":62},[5904],"step: 当前步数\nobs: 当前观测\naction: 当前控制输入\n",[64,111670,111668],{"__ignoreMap":62},[19,111672,111673],{},"重点观察：",[815,111675,111676,111682,111687],{},[818,111677,111678,111681],{},[64,111679,111680],{},"pole_angle"," 是否越来越大。",[818,111683,111684,111686],{},[64,111685,110263],{}," 是否跑得太远。",[818,111688,111689,111690,83076,111692,28922],{},"action 是否经常被 clip 到 ",[64,111691,104452],{},[64,111693,1077],{},[19,111695,111696],{},"如果 action 长期贴着边界，说明控制器可能太激进，或者 actuator 力不够。",[803,111698,102885],{"id":102884},[815,111700,111701,111707,111710,111716,111726,111732,111735],{},[818,111702,111703,111704,28922],{},"把初始角度改为 ",[64,111705,111706],{},"data.qpos[1] = 0.3",[818,111708,111709],{},"重新运行，观察控制是否变差。",[818,111711,111712,111713,111715],{},"把 actuator ",[64,111714,107604],{}," 改小。",[818,111717,111718,111719,111722,111723,28922],{},"打印 ",[64,111720,111721],{},"model.nq, model.nv, model.nu","，应为 ",[64,111724,111725],{},"2 2 1",[818,111727,111728,111729,111731],{},"把 reward 里的 ",[64,111730,111297],{}," 系数改大，观察总奖励变化。",[818,111733,111734],{},"把控制器改成反号，观察杆子是否更容易倒。",[818,111736,111737],{},"用第 5 章 viewer 把这个 XML 放进去，可视化看小车和杆子的运动。",[803,111739,102990],{"id":102989},[14,111741,111742],{"id":111742},"杆子方向和预期不一致",[19,111744,102933,111745,111747,111748,111750],{},[64,111746,106776],{}," 和 capsule 的 ",[64,111749,103713],{},"，必要时用 viewer 可视化确认。",[14,111752,111753],{"id":111753},"控制器越控越倒",[19,111755,111756],{},"说明反馈符号可能反了，尝试:",[57,111758,111760],{"className":30915,"code":111759,"language":30917,"meta":62,"style":62},"action = -2.0 * pole_angle - 0.5 * pole_angular_velocity\n",[64,111761,111762],{"__ignoreMap":62},[67,111763,111764,111766,111768,111770,111772,111774,111776,111778,111780,111782],{"class":69,"line":70},[67,111765,107979],{"class":77},[67,111767,909],{"class":73},[67,111769,52808],{"class":73},[67,111771,105797],{"class":208},[67,111773,7237],{"class":73},[67,111775,110357],{"class":77},[67,111777,1389],{"class":73},[67,111779,62404],{"class":208},[67,111781,7237],{"class":73},[67,111783,110777],{"class":77},[14,111785,111786],{"id":111786},"小车飞走",[19,111788,111789,111790,111792,111793,111796],{},"降低 ",[64,111791,107604],{}," 或缩小 ",[64,111794,111795],{},"action"," 的 clip 范围。",[14,111798,111800,111802],{"id":111799},"obs3-为什么是杆子角速度",[64,111801,111436],{}," 为什么是杆子角速度",[19,111804,111805],{},"因为这个模型里：",[57,111807,111810],{"className":111808,"code":111809,"language":5906,"meta":62},[5904],"qpos = [cart_x, pole_angle]\nqvel = [cart_x_velocity, pole_angular_velocity]\nobs = qpos + qvel\n",[64,111811,111809],{"__ignoreMap":62},[19,111813,110284],{},[57,111815,111818],{"className":111816,"code":111817,"language":5906,"meta":62},[5904],"obs[0] = cart_x\nobs[1] = pole_angle\nobs[2] = cart_x_velocity\nobs[3] = pole_angular_velocity\n",[64,111819,111817],{"__ignoreMap":62},[14,111821,111823],{"id":111822},"reward-变成负数是否错误","reward 变成负数是否错误",[19,111825,111826],{},"不是。reward 可以是负数。它只是一个分数，强化学习算法关心的是“长期总奖励尽量大”。如果杆子角度很大或小车离中心很远，reward 变负是合理的。",[803,111828,103144],{"id":103143},[19,111830,111831],{},"一个控制任务通常包含：",[815,111833,111834,111837,111845,111850,111853],{},[818,111835,111836],{},"模型：Cartpole 的 body、joint、actuator。",[818,111838,111839,111840,1072,111842,111844],{},"观测：从 ",[64,111841,104567],{},[64,111843,104897],{}," 里取状态。",[818,111846,111847,111848,28922],{},"动作：写入 ",[64,111849,101613],{},[818,111851,111852],{},"奖励：根据任务目标打分。",[818,111854,111855],{},"循环：obs -> action -> step -> reward。",[19,111857,111858],{},"这就是后面 Gymnasium 环境的基本骨架。",[779,111860,104823],{},{"title":62,"searchDepth":143,"depth":143,"links":111862},[111863,111864,111865,111870,111874,111875,111876,111884],{"id":101183,"depth":143,"text":101184},{"id":101306,"depth":143,"text":101307},{"id":101581,"depth":143,"text":101582,"children":111866},[111867,111868,111869],{"id":110237,"depth":149,"text":110238},{"id":110302,"depth":149,"text":110303},{"id":110318,"depth":149,"text":110319},{"id":101789,"depth":143,"text":101790,"children":111871},[111872,111873],{"id":102109,"depth":149,"text":102109},{"id":102245,"depth":149,"text":102245},{"id":102852,"depth":143,"text":102853},{"id":102884,"depth":143,"text":102885},{"id":102989,"depth":143,"text":102990,"children":111877},[111878,111879,111880,111881,111883],{"id":111742,"depth":149,"text":111742},{"id":111753,"depth":149,"text":111753},{"id":111786,"depth":149,"text":111786},{"id":111799,"depth":149,"text":111882},"obs[3] 为什么是杆子角速度",{"id":111822,"depth":149,"text":111823},{"id":103143,"depth":143,"text":103144},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch6-cartpole",{"title":109973,"description":62},"wiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务","8dC1kTOiSwNp3zaPqtqpgrKIv_o7u33VnKDYsswth_E",{"id":111891,"title":111892,"body":111893,"description":62,"extension":787,"meta":113907,"navigation":176,"path":113908,"seo":113909,"stem":113910,"__hash__":113911},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务.md","7.控制任务：Reacher 机械臂到达目标",{"type":7,"value":111894,"toc":113883},[111895,111898,111900,111903,111905,111922,111925,111928,111934,111937,111939,111941,111965,111967,111981,111983,112024,112026,112044,112046,112049,112055,112058,112086,112090,112096,112121,112124,112155,112162,112165,112168,112174,112177,112183,112186,112192,112196,112199,112224,112227,112229,112989,112991,113003,113005,113016,113018,113021,113038,113041,113043,113054,113057,113059,113105,113108,113121,113124,113206,113209,113211,113227,113237,113250,113253,113292,113302,113313,113323,113336,113339,113368,113371,113381,113384,113390,113407,113418,113420,113426,113443,113454,113475,113478,113490,113493,113514,113517,113525,113533,113550,113553,113622,113629,113637,113640,113653,113660,113662,113665,113671,113674,113677,113683,113689,113691,113731,113733,113739,113748,113751,113753,113773,113776,113779,113785,113789,113791,113818,113821,113824,113851,113857,113860,113863,113865,113868,113871,113877,113880],[10,111896,111892],{"id":111897},"_7控制任务reacher-机械臂到达目标",[803,111899,101184],{"id":101183},[19,111901,111902],{},"本章搭建一个二维两关节 reacher 任务。",[19,111904,104868],{},[815,111906,111907,111910,111913,111916,111919],{},[818,111908,111909],{},"两个 hinge joint",[818,111911,111912],{},"两个 motor actuator",[818,111914,111915],{},"site 作为末端点和目标点",[818,111917,111918],{},"根据末端和目标距离设计 reward",[818,111920,111921],{},"构造机械臂任务的基本形式",[19,111923,111924],{},"这是后续机械臂模仿学习、VLA 任务的基础。",[19,111926,111927],{},"Reacher 任务可以理解为：",[57,111929,111932],{"className":111930,"code":111931,"language":5906,"meta":62},[5904],"一条两段机械臂\n末端有一个蓝色 tip\n空间里有一个红色 target\n控制两个关节转动\n让 tip 靠近 target\n",[64,111933,111931],{"__ignoreMap":62},[19,111935,111936],{},"相比 Cartpole，Reacher 更接近机械臂任务，因为它开始关注“末端位置”和“目标位置”。",[803,111938,101307],{"id":101306},[19,111940,101310],{},[57,111942,111943],{"className":59,"code":104925,"language":61,"meta":62,"style":62},[64,111944,111945],{"__ignoreMap":62},[67,111946,111947,111949,111951,111953,111955,111957,111959,111961,111963],{"class":69,"line":70},[67,111948,298],{"class":112},[67,111950,378],{"class":84},[67,111952,312],{"class":84},[67,111954,464],{"class":208},[67,111956,104940],{"class":84},[67,111958,101335],{"class":84},[67,111960,103038],{"class":84},[67,111962,101351],{"class":84},[67,111964,104949],{"class":84},[19,111966,103356],{},[57,111968,111969],{"className":59,"code":101456,"language":61,"meta":62,"style":62},[64,111970,111971],{"__ignoreMap":62},[67,111972,111973,111975,111977,111979],{"class":69,"line":70},[67,111974,24546],{"class":112},[67,111976,312],{"class":84},[67,111978,101467],{"class":84},[67,111980,101470],{"class":84},[19,111982,103373],{},[57,111984,111986],{"className":59,"code":111985,"language":61,"meta":62,"style":62},"conda create -n mujoco-reacher python=3.10 -y\nconda activate mujoco-reacher\npip install \"mujoco>=2.3\" numpy\n",[64,111987,111988,112005,112014],{"__ignoreMap":62},[67,111989,111990,111992,111994,111996,111999,112001,112003],{"class":69,"line":70},[67,111991,30867],{"class":112},[67,111993,29713],{"class":84},[67,111995,25825],{"class":208},[67,111997,111998],{"class":84}," mujoco-reacher",[67,112000,101512],{"class":84},[67,112002,101515],{"class":208},[67,112004,101518],{"class":208},[67,112006,112007,112009,112011],{"class":69,"line":143},[67,112008,30867],{"class":112},[67,112010,101525],{"class":84},[67,112012,112013],{"class":84}," mujoco-reacher\n",[67,112015,112016,112018,112020,112022],{"class":69,"line":149},[67,112017,24546],{"class":112},[67,112019,312],{"class":84},[67,112021,101467],{"class":84},[67,112023,101470],{"class":84},[19,112025,101541],{},[815,112027,112028,112031,112034],{},[818,112029,112030],{},"本章使用低维状态，不使用图像输入。",[818,112032,112033],{},"机械臂是教学模型，不是 Franka、UR5 等真实机器人模型。",[818,112035,112036,112037,1072,112039,1072,112041,112043],{},"如果后续使用 MuJoCo Menagerie，模型结构会更复杂，但读取 ",[64,112038,104567],{},[64,112040,104897],{},[64,112042,104217],{}," 的方法一致。",[803,112045,101582],{"id":101581},[19,112047,112048],{},"Reacher 任务核心:",[57,112050,112053],{"className":112051,"code":112052,"language":5906,"meta":62},[5904],"观测：关节角、关节速度、末端位置、目标位置\n动作：两个关节的 motor 输入\n奖励：末端到目标距离越小越好\n",[64,112054,112052],{"__ignoreMap":62},[19,112056,112057],{},"读取 site 世界坐标:",[57,112059,112061],{"className":30915,"code":112060,"language":30917,"meta":62,"style":62},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"tip\")\ntip_pos = data.site_xpos[site_id]\n",[64,112062,112063,112076],{"__ignoreMap":62},[67,112064,112065,112067,112069,112071,112074],{"class":69,"line":70},[67,112066,104171],{"class":77},[67,112068,909],{"class":73},[67,112070,103942],{"class":77},[67,112072,112073],{"class":84},"\"tip\"",[67,112075,870],{"class":77},[67,112077,112078,112081,112083],{"class":69,"line":143},[67,112079,112080],{"class":77},"tip_pos ",[67,112082,909],{"class":73},[67,112084,112085],{"class":77}," data.site_xpos[site_id]\n",[14,112087,112089],{"id":112088},"为什么用-site-表示-tip-和-target","为什么用 site 表示 tip 和 target",[19,112091,112092,112093,112095],{},"机械臂控制里经常关心“末端执行器在哪里”。如果只看关节角 ",[64,112094,104567],{},"，你还要自己做正运动学计算。MuJoCo 已经帮你算好了 site 的世界坐标，所以可以直接读：",[57,112097,112099],{"className":30915,"code":112098,"language":30917,"meta":62,"style":62},"tip = data.site_xpos[tip_site_id]\ntarget = data.site_xpos[target_site_id]\n",[64,112100,112101,112111],{"__ignoreMap":62},[67,112102,112103,112106,112108],{"class":69,"line":70},[67,112104,112105],{"class":77},"tip ",[67,112107,909],{"class":73},[67,112109,112110],{"class":77}," data.site_xpos[tip_site_id]\n",[67,112112,112113,112116,112118],{"class":69,"line":143},[67,112114,112115],{"class":77},"target ",[67,112117,909],{"class":73},[67,112119,112120],{"class":77}," data.site_xpos[target_site_id]\n",[19,112122,112123],{},"这样 reward 就很容易写：",[57,112125,112127],{"className":30915,"code":112126,"language":30917,"meta":62,"style":62},"dist = np.linalg.norm(tip - target)\nreward = -dist\n",[64,112128,112129,112144],{"__ignoreMap":62},[67,112130,112131,112134,112136,112139,112141],{"class":69,"line":70},[67,112132,112133],{"class":77},"dist ",[67,112135,909],{"class":73},[67,112137,112138],{"class":77}," np.linalg.norm(tip ",[67,112140,1389],{"class":73},[67,112142,112143],{"class":77}," target)\n",[67,112145,112146,112148,112150,112152],{"class":69,"line":143},[67,112147,111542],{"class":77},[67,112149,909],{"class":73},[67,112151,52808],{"class":73},[67,112153,112154],{"class":77},"dist\n",[19,112156,112157,112158,112161],{},"距离越小，",[64,112159,112160],{},"-dist"," 越接近 0，奖励越高。",[14,112163,112164],{"id":112164},"两关节机械臂的状态",[19,112166,112167],{},"这个模型有两个 hinge joint：",[57,112169,112172],{"className":112170,"code":112171,"language":5906,"meta":62},[5904],"data.qpos = [joint1_angle, joint2_angle]\ndata.qvel = [joint1_velocity, joint2_velocity]\n",[64,112173,112171],{"__ignoreMap":62},[19,112175,112176],{},"再加上末端和目标位置：",[57,112178,112181],{"className":112179,"code":112180,"language":5906,"meta":62},[5904],"obs = [qpos, qvel, tip_xyz, target_xyz]\n",[64,112182,112180],{"__ignoreMap":62},[19,112184,112185],{},"总维度：",[57,112187,112190],{"className":112188,"code":112189,"language":5906,"meta":62},[5904],"2 + 2 + 3 + 3 = 10\n",[64,112191,112189],{"__ignoreMap":62},[14,112193,112195],{"id":112194},"为什么-gravity-是-0","为什么 gravity 是 0",[19,112197,112198],{},"本章把重力设为：",[57,112200,112202],{"className":53604,"code":112201,"language":53606,"meta":62,"style":62},"\u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[64,112203,112204],{"__ignoreMap":62},[67,112205,112206,112208,112210,112212,112214,112216,112218,112220,112222],{"class":69,"line":70},[67,112207,1766],{"class":77},[67,112209,69703],{"class":51837},[67,112211,101731],{"class":112},[67,112213,909],{"class":77},[67,112215,101736],{"class":84},[67,112217,101739],{"class":112},[67,112219,909],{"class":77},[67,112221,104308],{"class":84},[67,112223,101681],{"class":77},[19,112225,112226],{},"这是为了让问题更简单。没有重力时，控制器只需要考虑让末端靠近目标，不需要额外对抗机械臂下垂。真实机器人任务通常会有重力，并需要更好的控制器或重力补偿。",[803,112228,101790],{"id":101789},[57,112230,112232],{"className":30915,"code":112231,"language":30917,"meta":62,"style":62},"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",[64,112233,112234,112240,112250,112254,112258,112266,112271,112276,112280,112284,112289,112294,112298,112303,112308,112313,112317,112322,112327,112332,112337,112341,112345,112349,112353,112357,112362,112367,112371,112375,112379,112383,112387,112402,112411,112423,112446,112453,112457,112461,112471,112485,112499,112506,112510,112514,112528,112540,112552,112565,112580,112597,112601,112605,112617,112629,112637,112645,112649,112665,112670,112683,112696,112711,112715,112750,112782,112786,112790,112799,112803,112819,112829,112840,112856,112872,112888,112904,112908,112926,112946,112965,112969,112973,112985],{"__ignoreMap":62},[67,112235,112236,112238],{"class":69,"line":70},[67,112237,30929],{"class":73},[67,112239,101838],{"class":77},[67,112241,112242,112244,112246,112248],{"class":69,"line":143},[67,112243,30929],{"class":73},[67,112245,31917],{"class":77},[67,112247,31920],{"class":73},[67,112249,31923],{"class":77},[67,112251,112252],{"class":69,"line":149},[67,112253,177],{"emptyLinePlaceholder":176},[67,112255,112256],{"class":69,"line":155},[67,112257,177],{"emptyLinePlaceholder":176},[67,112259,112260,112262,112264],{"class":69,"line":161},[67,112261,101851],{"class":208},[67,112263,14282],{"class":73},[67,112265,101856],{"class":84},[67,112267,112268],{"class":69,"line":167},[67,112269,112270],{"class":84},"\u003Cmujoco model=\"two_link_reacher\">\n",[67,112272,112273],{"class":69,"line":173},[67,112274,112275],{"class":84},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[67,112277,112278],{"class":69,"line":180},[67,112279,177],{"emptyLinePlaceholder":176},[67,112281,112282],{"class":69,"line":186},[67,112283,101875],{"class":84},[67,112285,112286],{"class":69,"line":444},[67,112287,112288],{"class":84},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.9 0.9 0.9 1\"\u002F>\n",[67,112290,112291],{"class":69,"line":2335},[67,112292,112293],{"class":84},"    \u003Csite name=\"target\" pos=\"0.5 0 0.4\" size=\"0.04\" rgba=\"1 0 0 1\"\u002F>\n",[67,112295,112296],{"class":69,"line":2340},[67,112297,177],{"emptyLinePlaceholder":176},[67,112299,112300],{"class":69,"line":2346},[67,112301,112302],{"class":84},"    \u003Cbody name=\"link1\" pos=\"0 0 0.4\">\n",[67,112304,112305],{"class":69,"line":2351},[67,112306,112307],{"class":84},"      \u003Cjoint name=\"joint1\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[67,112309,112310],{"class":69,"line":2365},[67,112311,112312],{"class":84},"      \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",[67,112314,112315],{"class":69,"line":2370},[67,112316,177],{"emptyLinePlaceholder":176},[67,112318,112319],{"class":69,"line":2376},[67,112320,112321],{"class":84},"      \u003Cbody name=\"link2\" pos=\"0.3 0 0\">\n",[67,112323,112324],{"class":69,"line":2397},[67,112325,112326],{"class":84},"        \u003Cjoint name=\"joint2\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[67,112328,112329],{"class":69,"line":2402},[67,112330,112331],{"class":84},"        \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",[67,112333,112334],{"class":69,"line":2416},[67,112335,112336],{"class":84},"        \u003Csite name=\"tip\" pos=\"0.3 0 0\" size=\"0.03\" rgba=\"0 0 1 1\"\u002F>\n",[67,112338,112339],{"class":69,"line":2421},[67,112340,106975],{"class":84},[67,112342,112343],{"class":69,"line":2450},[67,112344,101904],{"class":84},[67,112346,112347],{"class":69,"line":2455},[67,112348,101909],{"class":84},[67,112350,112351],{"class":69,"line":2472},[67,112352,177],{"emptyLinePlaceholder":176},[67,112354,112355],{"class":69,"line":2477},[67,112356,106992],{"class":84},[67,112358,112359],{"class":69,"line":2482},[67,112360,112361],{"class":84},"    \u003Cmotor name=\"motor1\" joint=\"joint1\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[67,112363,112364],{"class":69,"line":2487},[67,112365,112366],{"class":84},"    \u003Cmotor name=\"motor2\" joint=\"joint2\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[67,112368,112369],{"class":69,"line":2501},[67,112370,107002],{"class":84},[67,112372,112373],{"class":69,"line":2506},[67,112374,101914],{"class":84},[67,112376,112377],{"class":69,"line":3298},[67,112378,96235],{"class":84},[67,112380,112381],{"class":69,"line":3312},[67,112382,177],{"emptyLinePlaceholder":176},[67,112384,112385],{"class":69,"line":3320},[67,112386,177],{"emptyLinePlaceholder":176},[67,112388,112389,112391,112394,112397,112399],{"class":69,"line":3325},[67,112390,32484],{"class":73},[67,112392,112393],{"class":112}," site_position",[67,112395,112396],{"class":77},"(model: mujoco.MjModel, data: mujoco.MjData, name: ",[67,112398,2026],{"class":208},[67,112400,112401],{"class":77},") -> np.ndarray:\n",[67,112403,112404,112406,112408],{"class":69,"line":3331},[67,112405,103937],{"class":77},[67,112407,909],{"class":73},[67,112409,112410],{"class":77}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[67,112412,112413,112415,112417,112419,112421],{"class":69,"line":3337},[67,112414,3821],{"class":73},[67,112416,103986],{"class":77},[67,112418,1766],{"class":73},[67,112420,4813],{"class":208},[67,112422,4459],{"class":77},[67,112424,112425,112427,112429,112431,112433,112436,112438,112440,112442,112444],{"class":69,"line":3342},[67,112426,103969],{"class":73},[67,112428,103972],{"class":208},[67,112430,864],{"class":77},[67,112432,915],{"class":73},[67,112434,112435],{"class":84},"\"site not found: ",[67,112437,1752],{"class":208},[67,112439,80347],{"class":77},[67,112441,1802],{"class":208},[67,112443,257],{"class":84},[67,112445,870],{"class":77},[67,112447,112448,112450],{"class":69,"line":8667},[67,112449,4810],{"class":73},[67,112451,112452],{"class":77}," data.site_xpos[site_id].copy()\n",[67,112454,112455],{"class":69,"line":8691},[67,112456,177],{"emptyLinePlaceholder":176},[67,112458,112459],{"class":69,"line":8696},[67,112460,177],{"emptyLinePlaceholder":176},[67,112462,112463,112465,112468],{"class":69,"line":8702},[67,112464,32484],{"class":73},[67,112466,112467],{"class":112}," get_obs",[67,112469,112470],{"class":77},"(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[67,112472,112473,112476,112478,112481,112483],{"class":69,"line":8729},[67,112474,112475],{"class":77},"    tip ",[67,112477,909],{"class":73},[67,112479,112480],{"class":77}," site_position(model, data, ",[67,112482,112073],{"class":84},[67,112484,870],{"class":77},[67,112486,112487,112490,112492,112494,112497],{"class":69,"line":8734},[67,112488,112489],{"class":77},"    target ",[67,112491,909],{"class":73},[67,112493,112480],{"class":77},[67,112495,112496],{"class":84},"\"target\"",[67,112498,870],{"class":77},[67,112500,112501,112503],{"class":69,"line":8740},[67,112502,4810],{"class":73},[67,112504,112505],{"class":77}," np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[67,112507,112508],{"class":69,"line":8752},[67,112509,177],{"emptyLinePlaceholder":176},[67,112511,112512],{"class":69,"line":8764},[67,112513,177],{"emptyLinePlaceholder":176},[67,112515,112516,112518,112521,112524,112526],{"class":69,"line":8776},[67,112517,32484],{"class":73},[67,112519,112520],{"class":112}," reward",[67,112522,112523],{"class":77},"(model: mujoco.MjModel, data: mujoco.MjData) -> ",[67,112525,903],{"class":208},[67,112527,4459],{"class":77},[67,112529,112530,112532,112534,112536,112538],{"class":69,"line":10435},[67,112531,112475],{"class":77},[67,112533,909],{"class":73},[67,112535,112480],{"class":77},[67,112537,112073],{"class":84},[67,112539,870],{"class":77},[67,112541,112542,112544,112546,112548,112550],{"class":69,"line":10459},[67,112543,112489],{"class":77},[67,112545,909],{"class":73},[67,112547,112480],{"class":77},[67,112549,112496],{"class":84},[67,112551,870],{"class":77},[67,112553,112554,112557,112559,112561,112563],{"class":69,"line":10482},[67,112555,112556],{"class":77},"    dist ",[67,112558,909],{"class":73},[67,112560,112138],{"class":77},[67,112562,1389],{"class":73},[67,112564,112143],{"class":77},[67,112566,112567,112570,112572,112575,112577],{"class":69,"line":10506},[67,112568,112569],{"class":77},"    control_cost ",[67,112571,909],{"class":73},[67,112573,112574],{"class":208}," 0.01",[67,112576,7237],{"class":73},[67,112578,112579],{"class":77}," np.sum(np.square(data.ctrl))\n",[67,112581,112582,112584,112586,112588,112590,112592,112594],{"class":69,"line":10511},[67,112583,4810],{"class":73},[67,112585,110334],{"class":208},[67,112587,864],{"class":77},[67,112589,1389],{"class":73},[67,112591,112133],{"class":77},[67,112593,1389],{"class":73},[67,112595,112596],{"class":77}," control_cost)\n",[67,112598,112599],{"class":69,"line":10516},[67,112600,177],{"emptyLinePlaceholder":176},[67,112602,112603],{"class":69,"line":10521},[67,112604,177],{"emptyLinePlaceholder":176},[67,112606,112607,112609,112611,112613,112615],{"class":69,"line":10530},[67,112608,32484],{"class":73},[67,112610,2695],{"class":112},[67,112612,101935],{"class":77},[67,112614,96223],{"class":208},[67,112616,4459],{"class":77},[67,112618,112619,112621,112623,112625,112627],{"class":69,"line":10535},[67,112620,101944],{"class":77},[67,112622,909],{"class":73},[67,112624,101949],{"class":77},[67,112626,101851],{"class":208},[67,112628,870],{"class":77},[67,112630,112631,112633,112635],{"class":69,"line":10541},[67,112632,101958],{"class":77},[67,112634,909],{"class":73},[67,112636,101963],{"class":77},[67,112638,112639,112641,112643],{"class":69,"line":10562},[67,112640,110690],{"class":77},[67,112642,909],{"class":73},[67,112644,105298],{"class":208},[67,112646,112647],{"class":69,"line":10568},[67,112648,177],{"emptyLinePlaceholder":176},[67,112650,112651,112653,112655,112657,112659,112661,112663],{"class":69,"line":10582},[67,112652,3921],{"class":73},[67,112654,32153],{"class":77},[67,112656,81],{"class":73},[67,112658,32980],{"class":208},[67,112660,864],{"class":77},[67,112662,65611],{"class":208},[67,112664,31323],{"class":77},[67,112666,112667],{"class":69,"line":10588},[67,112668,112669],{"class":77},"        mujoco.mj_forward(model, data)\n",[67,112671,112672,112675,112677,112679,112681],{"class":69,"line":10615},[67,112673,112674],{"class":77},"        tip ",[67,112676,909],{"class":73},[67,112678,112480],{"class":77},[67,112680,112073],{"class":84},[67,112682,870],{"class":77},[67,112684,112685,112688,112690,112692,112694],{"class":69,"line":10624},[67,112686,112687],{"class":77},"        target ",[67,112689,909],{"class":73},[67,112691,112480],{"class":77},[67,112693,112496],{"class":84},[67,112695,870],{"class":77},[67,112697,112698,112701,112703,112706,112708],{"class":69,"line":10630},[67,112699,112700],{"class":77},"        error ",[67,112702,909],{"class":73},[67,112704,112705],{"class":77}," target ",[67,112707,1389],{"class":73},[67,112709,112710],{"class":77}," tip\n",[67,112712,112713],{"class":69,"line":10638},[67,112714,177],{"emptyLinePlaceholder":176},[67,112716,112717,112719,112721,112723,112725,112728,112730,112732,112735,112737,112740,112742,112744,112746,112748],{"class":69,"line":10643},[67,112718,107154],{"class":77},[67,112720,1051],{"class":208},[67,112722,5162],{"class":77},[67,112724,909],{"class":73},[67,112726,112727],{"class":77}," np.clip(",[67,112729,105797],{"class":208},[67,112731,7237],{"class":73},[67,112733,112734],{"class":77}," error[",[67,112736,939],{"class":208},[67,112738,112739],{"class":77},"], ",[67,112741,1389],{"class":73},[67,112743,102940],{"class":208},[67,112745,13153],{"class":77},[67,112747,102940],{"class":208},[67,112749,870],{"class":77},[67,112751,112752,112754,112756,112758,112760,112762,112764,112766,112768,112770,112772,112774,112776,112778,112780],{"class":69,"line":17321},[67,112753,107154],{"class":77},[67,112755,1077],{"class":208},[67,112757,5162],{"class":77},[67,112759,909],{"class":73},[67,112761,112727],{"class":77},[67,112763,105797],{"class":208},[67,112765,7237],{"class":73},[67,112767,112734],{"class":77},[67,112769,1051],{"class":208},[67,112771,112739],{"class":77},[67,112773,1389],{"class":73},[67,112775,102940],{"class":208},[67,112777,13153],{"class":77},[67,112779,102940],{"class":208},[67,112781,870],{"class":77},[67,112783,112784],{"class":69,"line":17327},[67,112785,177],{"emptyLinePlaceholder":176},[67,112787,112788],{"class":69,"line":17350},[67,112789,102053],{"class":77},[67,112791,112792,112794,112796],{"class":69,"line":17356},[67,112793,110834],{"class":77},[67,112795,10196],{"class":73},[67,112797,112798],{"class":77}," reward(model, data)\n",[67,112800,112801],{"class":69,"line":17379},[67,112802,177],{"emptyLinePlaceholder":176},[67,112804,112805,112807,112809,112811,112813,112815,112817],{"class":69,"line":17393},[67,112806,3218],{"class":73},[67,112808,32153],{"class":77},[67,112810,1186],{"class":73},[67,112812,6473],{"class":208},[67,112814,102096],{"class":73},[67,112816,4813],{"class":208},[67,112818,4459],{"class":77},[67,112820,112821,112824,112826],{"class":69,"line":17413},[67,112822,112823],{"class":77},"            obs ",[67,112825,909],{"class":73},[67,112827,112828],{"class":77}," get_obs(model, data)\n",[67,112830,112831,112833,112835,112837],{"class":69,"line":17419},[67,112832,35187],{"class":208},[67,112834,864],{"class":77},[67,112836,110868],{"class":84},[67,112838,112839],{"class":77},", step)\n",[67,112841,112842,112844,112846,112849,112852,112854],{"class":69,"line":17430},[67,112843,35187],{"class":208},[67,112845,864],{"class":77},[67,112847,112848],{"class":84},"\"  tip:\"",[67,112850,112851],{"class":77},", np.round(tip, ",[67,112853,933],{"class":208},[67,112855,31034],{"class":77},[67,112857,112858,112860,112862,112865,112868,112870],{"class":69,"line":17453},[67,112859,35187],{"class":208},[67,112861,864],{"class":77},[67,112863,112864],{"class":84},"\"  target:\"",[67,112866,112867],{"class":77},", np.round(target, ",[67,112869,933],{"class":208},[67,112871,31034],{"class":77},[67,112873,112874,112876,112878,112881,112884,112886],{"class":69,"line":17475},[67,112875,35187],{"class":208},[67,112877,864],{"class":77},[67,112879,112880],{"class":84},"\"  ctrl:\"",[67,112882,112883],{"class":77},", np.round(data.ctrl.copy(), ",[67,112885,933],{"class":208},[67,112887,31034],{"class":77},[67,112889,112890,112892,112894,112897,112900,112902],{"class":69,"line":17480},[67,112891,35187],{"class":208},[67,112893,864],{"class":77},[67,112895,112896],{"class":84},"\"  obs_dim:\"",[67,112898,112899],{"class":77},", obs.shape[",[67,112901,1051],{"class":208},[67,112903,5376],{"class":77},[67,112905,112906],{"class":69,"line":17486},[67,112907,177],{"emptyLinePlaceholder":176},[67,112909,112910,112912,112914,112916,112918,112920,112922,112924],{"class":69,"line":17500},[67,112911,31836],{"class":208},[67,112913,864],{"class":77},[67,112915,110913],{"class":84},[67,112917,13153],{"class":77},[67,112919,32555],{"class":208},[67,112921,110920],{"class":77},[67,112923,933],{"class":208},[67,112925,31034],{"class":77},[67,112927,112928,112930,112932,112935,112938,112940,112942,112944],{"class":69,"line":17513},[67,112929,31836],{"class":208},[67,112931,864],{"class":77},[67,112933,112934],{"class":84},"\"final tip:\"",[67,112936,112937],{"class":77},", np.round(site_position(model, data, ",[67,112939,112073],{"class":84},[67,112941,110882],{"class":77},[67,112943,933],{"class":208},[67,112945,31034],{"class":77},[67,112947,112948,112950,112952,112955,112957,112959,112961,112963],{"class":69,"line":17518},[67,112949,31836],{"class":208},[67,112951,864],{"class":77},[67,112953,112954],{"class":84},"\"target:\"",[67,112956,112937],{"class":77},[67,112958,112496],{"class":84},[67,112960,110882],{"class":77},[67,112962,933],{"class":208},[67,112964,31034],{"class":77},[67,112966,112967],{"class":69,"line":17532},[67,112968,177],{"emptyLinePlaceholder":176},[67,112970,112971],{"class":69,"line":17537},[67,112972,177],{"emptyLinePlaceholder":176},[67,112974,112975,112977,112979,112981,112983],{"class":69,"line":17543},[67,112976,2254],{"class":73},[67,112978,31757],{"class":208},[67,112980,102096],{"class":73},[67,112982,102099],{"class":84},[67,112984,4459],{"class":77},[67,112986,112987],{"class":69,"line":17548},[67,112988,102106],{"class":77},[19,112990,104107],{},[57,112992,112994],{"className":59,"code":112993,"language":61,"meta":62,"style":62},"touch ch7_reacher.py\n",[64,112995,112996],{"__ignoreMap":62},[67,112997,112998,113000],{"class":69,"line":70},[67,112999,101820],{"class":112},[67,113001,113002],{"class":84}," ch7_reacher.py\n",[19,113004,110981],{},[57,113006,113008],{"className":59,"code":113007,"language":61,"meta":62,"style":62},"python ch7_reacher.py\n",[64,113009,113010],{"__ignoreMap":62},[67,113011,113012,113014],{"class":69,"line":70},[67,113013,30917],{"class":112},[67,113015,113002],{"class":84},[14,113017,102109],{"id":102109},[19,113019,113020],{},"读取 site 坐标：",[57,113022,113024],{"className":30915,"code":113023,"language":30917,"meta":62,"style":62},"def site_position(model: mujoco.MjModel, data: mujoco.MjData, name: str) -> np.ndarray:\n",[64,113025,113026],{"__ignoreMap":62},[67,113027,113028,113030,113032,113034,113036],{"class":69,"line":70},[67,113029,32484],{"class":73},[67,113031,112393],{"class":112},[67,113033,112396],{"class":77},[67,113035,2026],{"class":208},[67,113037,112401],{"class":77},[19,113039,113040],{},"这个函数把“按名字查找 site ID”和“读取 site 世界坐标”封装到一起，避免重复写。",[19,113042,110997],{},[57,113044,113046],{"className":30915,"code":113045,"language":30917,"meta":62,"style":62},"return np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[64,113047,113048],{"__ignoreMap":62},[67,113049,113050,113052],{"class":69,"line":70},[67,113051,17763],{"class":73},[67,113053,112505],{"class":77},[19,113055,113056],{},"这让策略或控制器能同时看到关节状态、末端位置和目标位置。",[19,113058,110322],{},[57,113060,113062],{"className":30915,"code":113061,"language":30917,"meta":62,"style":62},"dist = np.linalg.norm(tip - target)\ncontrol_cost = 0.01 * np.sum(np.square(data.ctrl))\nreturn float(-dist - control_cost)\n",[64,113063,113064,113076,113089],{"__ignoreMap":62},[67,113065,113066,113068,113070,113072,113074],{"class":69,"line":70},[67,113067,112133],{"class":77},[67,113069,909],{"class":73},[67,113071,112138],{"class":77},[67,113073,1389],{"class":73},[67,113075,112143],{"class":77},[67,113077,113078,113081,113083,113085,113087],{"class":69,"line":143},[67,113079,113080],{"class":77},"control_cost ",[67,113082,909],{"class":73},[67,113084,112574],{"class":208},[67,113086,7237],{"class":73},[67,113088,112579],{"class":77},[67,113090,113091,113093,113095,113097,113099,113101,113103],{"class":69,"line":149},[67,113092,17763],{"class":73},[67,113094,110334],{"class":208},[67,113096,864],{"class":77},[67,113098,1389],{"class":73},[67,113100,112133],{"class":77},[67,113102,1389],{"class":73},[67,113104,112596],{"class":77},[19,113106,113107],{},"奖励由两部分组成：",[815,113109,113110,113115],{},[818,113111,113112,113114],{},[64,113113,112160],{},"：末端离目标越远，奖励越低。",[818,113116,113117,113120],{},[64,113118,113119],{},"control_cost","：动作越大，扣分越多，避免控制输入过于剧烈。",[19,113122,113123],{},"简单控制器：",[57,113125,113127],{"className":30915,"code":113126,"language":30917,"meta":62,"style":62},"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",[64,113128,113129,113142,113174],{"__ignoreMap":62},[67,113130,113131,113134,113136,113138,113140],{"class":69,"line":70},[67,113132,113133],{"class":77},"error ",[67,113135,909],{"class":73},[67,113137,112705],{"class":77},[67,113139,1389],{"class":73},[67,113141,112710],{"class":77},[67,113143,113144,113146,113148,113150,113152,113154,113156,113158,113160,113162,113164,113166,113168,113170,113172],{"class":69,"line":143},[67,113145,106408],{"class":77},[67,113147,1051],{"class":208},[67,113149,5162],{"class":77},[67,113151,909],{"class":73},[67,113153,112727],{"class":77},[67,113155,105797],{"class":208},[67,113157,7237],{"class":73},[67,113159,112734],{"class":77},[67,113161,939],{"class":208},[67,113163,112739],{"class":77},[67,113165,1389],{"class":73},[67,113167,102940],{"class":208},[67,113169,13153],{"class":77},[67,113171,102940],{"class":208},[67,113173,870],{"class":77},[67,113175,113176,113178,113180,113182,113184,113186,113188,113190,113192,113194,113196,113198,113200,113202,113204],{"class":69,"line":149},[67,113177,106408],{"class":77},[67,113179,1077],{"class":208},[67,113181,5162],{"class":77},[67,113183,909],{"class":73},[67,113185,112727],{"class":77},[67,113187,105797],{"class":208},[67,113189,7237],{"class":73},[67,113191,112734],{"class":77},[67,113193,1051],{"class":208},[67,113195,112739],{"class":77},[67,113197,1389],{"class":73},[67,113199,102940],{"class":208},[67,113201,13153],{"class":77},[67,113203,102940],{"class":208},[67,113205,870],{"class":77},[19,113207,113208],{},"这只是为了演示控制闭环，不是严格的逆运动学。真实 reacher 通常需要更系统的方法。",[14,113210,102245],{"id":102245},[57,113212,113213],{"className":30915,"code":113023,"language":30917,"meta":62,"style":62},[64,113214,113215],{"__ignoreMap":62},[67,113216,113217,113219,113221,113223,113225],{"class":69,"line":70},[67,113218,32484],{"class":73},[67,113220,112393],{"class":112},[67,113222,112396],{"class":77},[67,113224,2026],{"class":208},[67,113226,112401],{"class":77},[19,113228,113229,113230,113232,113233,83076,113235,28922],{},"定义一个函数，用名字读取 site 的世界坐标。参数 ",[64,113231,80347],{}," 是 site 的名字，比如 ",[64,113234,112073],{},[64,113236,112496],{},[57,113238,113240],{"className":30915,"code":113239,"language":30917,"meta":62,"style":62},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[64,113241,113242],{"__ignoreMap":62},[67,113243,113244,113246,113248],{"class":69,"line":70},[67,113245,104171],{"class":77},[67,113247,909],{"class":73},[67,113249,112410],{"class":77},[19,113251,113252],{},"根据 site 名字查找数字 ID。MuJoCo 内部数组需要用 ID 访问，不能直接用字符串名字访问。",[57,113254,113256],{"className":30915,"code":113255,"language":30917,"meta":62,"style":62},"if site_id \u003C 0:\n    raise RuntimeError(f\"site not found: {name}\")\n",[64,113257,113258,113270],{"__ignoreMap":62},[67,113259,113260,113262,113264,113266,113268],{"class":69,"line":70},[67,113261,2254],{"class":73},[67,113263,103986],{"class":77},[67,113265,1766],{"class":73},[67,113267,4813],{"class":208},[67,113269,4459],{"class":77},[67,113271,113272,113274,113276,113278,113280,113282,113284,113286,113288,113290],{"class":69,"line":143},[67,113273,104432],{"class":73},[67,113275,103972],{"class":208},[67,113277,864],{"class":77},[67,113279,915],{"class":73},[67,113281,112435],{"class":84},[67,113283,1752],{"class":208},[67,113285,80347],{"class":77},[67,113287,1802],{"class":208},[67,113289,257],{"class":84},[67,113291,870],{"class":77},[19,113293,113294,113295,113298,113299,113301],{},"如果 site 没找到，就主动报错。",[64,113296,113297],{},"f\"site not found: {name}\""," 是 Python 的 f-string，会把变量 ",[64,113300,80347],{}," 的值放进字符串里。",[57,113303,113305],{"className":30915,"code":113304,"language":30917,"meta":62,"style":62},"return data.site_xpos[site_id].copy()\n",[64,113306,113307],{"__ignoreMap":62},[67,113308,113309,113311],{"class":69,"line":70},[67,113310,17763],{"class":73},[67,113312,112452],{"class":77},[19,113314,113315,113316,113318,113319,113322],{},"返回这个 site 的世界坐标。",[64,113317,104217],{}," 里的每一行都是一个 site 的 ",[64,113320,113321],{},"(x, y, z)"," 坐标。",[57,113324,113326],{"className":30915,"code":113325,"language":30917,"meta":62,"style":62},"def get_obs(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[64,113327,113328],{"__ignoreMap":62},[67,113329,113330,113332,113334],{"class":69,"line":70},[67,113331,32484],{"class":73},[67,113333,112467],{"class":112},[67,113335,112470],{"class":77},[19,113337,113338],{},"定义获取观测的函数。Reacher 的观测不仅包含关节角和速度，还包含末端位置和目标位置。",[57,113340,113342],{"className":30915,"code":113341,"language":30917,"meta":62,"style":62},"tip = site_position(model, data, \"tip\")\ntarget = site_position(model, data, \"target\")\n",[64,113343,113344,113356],{"__ignoreMap":62},[67,113345,113346,113348,113350,113352,113354],{"class":69,"line":70},[67,113347,112105],{"class":77},[67,113349,909],{"class":73},[67,113351,112480],{"class":77},[67,113353,112073],{"class":84},[67,113355,870],{"class":77},[67,113357,113358,113360,113362,113364,113366],{"class":69,"line":143},[67,113359,112115],{"class":77},[67,113361,909],{"class":73},[67,113363,112480],{"class":77},[67,113365,112496],{"class":84},[67,113367,870],{"class":77},[19,113369,113370],{},"分别读取末端点和目标点的世界坐标。",[57,113372,113373],{"className":30915,"code":113045,"language":30917,"meta":62,"style":62},[64,113374,113375],{"__ignoreMap":62},[67,113376,113377,113379],{"class":69,"line":70},[67,113378,17763],{"class":73},[67,113380,112505],{"class":77},[19,113382,113383],{},"把四部分拼成一个观测数组：",[57,113385,113388],{"className":113386,"code":113387,"language":5906,"meta":62},[5904],"关节角 qpos\n关节速度 qvel\n末端坐标 tip\n目标坐标 target\n",[64,113389,113387],{"__ignoreMap":62},[57,113391,113393],{"className":30915,"code":113392,"language":30917,"meta":62,"style":62},"dist = np.linalg.norm(tip - target)\n",[64,113394,113395],{"__ignoreMap":62},[67,113396,113397,113399,113401,113403,113405],{"class":69,"line":70},[67,113398,112133],{"class":77},[67,113400,909],{"class":73},[67,113402,112138],{"class":77},[67,113404,1389],{"class":73},[67,113406,112143],{"class":77},[19,113408,113409,113410,113413,113414,113417],{},"计算 tip 到 target 的距离。",[64,113411,113412],{},"tip - target"," 得到一个三维向量，",[64,113415,113416],{},"np.linalg.norm(...)"," 计算这个向量的长度。",[19,113419,15350],{},[57,113421,113424],{"className":113422,"code":113423,"language":5906,"meta":62},[5904],"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",[64,113425,113423],{"__ignoreMap":62},[57,113427,113429],{"className":30915,"code":113428,"language":30917,"meta":62,"style":62},"control_cost = 0.01 * np.sum(np.square(data.ctrl))\n",[64,113430,113431],{"__ignoreMap":62},[67,113432,113433,113435,113437,113439,113441],{"class":69,"line":70},[67,113434,113080],{"class":77},[67,113436,909],{"class":73},[67,113438,112574],{"class":208},[67,113440,7237],{"class":73},[67,113442,112579],{"class":77},[19,113444,113445,113446,113449,113450,113453],{},"计算动作惩罚。",[64,113447,113448],{},"np.square(data.ctrl)"," 把每个控制输入平方，",[64,113451,113452],{},"np.sum(...)"," 把它们加起来。动作越大，惩罚越大。",[57,113455,113457],{"className":30915,"code":113456,"language":30917,"meta":62,"style":62},"return float(-dist - control_cost)\n",[64,113458,113459],{"__ignoreMap":62},[67,113460,113461,113463,113465,113467,113469,113471,113473],{"class":69,"line":70},[67,113462,17763],{"class":73},[67,113464,110334],{"class":208},[67,113466,864],{"class":77},[67,113468,1389],{"class":73},[67,113470,112133],{"class":77},[67,113472,1389],{"class":73},[67,113474,112596],{"class":77},[19,113476,113477],{},"奖励是负距离再减去动作惩罚。距离越小，奖励越接近 0；动作越大，奖励越低。",[57,113479,113480],{"className":30915,"code":111340,"language":30917,"meta":62,"style":62},[64,113481,113482],{"__ignoreMap":62},[67,113483,113484,113486,113488],{"class":69,"line":70},[67,113485,111347],{"class":77},[67,113487,909],{"class":73},[67,113489,105298],{"class":208},[19,113491,113492],{},"累计奖励变量，记录整个运行过程的总分。",[57,113494,113496],{"className":30915,"code":113495,"language":30917,"meta":62,"style":62},"for step in range(500):\n",[64,113497,113498],{"__ignoreMap":62},[67,113499,113500,113502,113504,113506,113508,113510,113512],{"class":69,"line":70},[67,113501,74],{"class":73},[67,113503,32153],{"class":77},[67,113505,81],{"class":73},[67,113507,32980],{"class":208},[67,113509,864],{"class":77},[67,113511,65611],{"class":208},[67,113513,31323],{"class":77},[19,113515,113516],{},"运行 500 个控制步。",[57,113518,113519],{"className":30915,"code":105080,"language":30917,"meta":62,"style":62},[64,113520,113521],{"__ignoreMap":62},[67,113522,113523],{"class":69,"line":70},[67,113524,105080],{"class":77},[19,113526,113527,113528,101555,113530,113532],{},"刷新当前状态对应的 site 坐标。这里每步开头调用一次，确保读取到的 ",[64,113529,103768],{},[64,113531,103771],{}," 是当前状态下的坐标。",[57,113534,113536],{"className":30915,"code":113535,"language":30917,"meta":62,"style":62},"error = target - tip\n",[64,113537,113538],{"__ignoreMap":62},[67,113539,113540,113542,113544,113546,113548],{"class":69,"line":70},[67,113541,113133],{"class":77},[67,113543,909],{"class":73},[67,113545,112705],{"class":77},[67,113547,1389],{"class":73},[67,113549,112710],{"class":77},[19,113551,113552],{},"计算目标点相对末端点的误差向量。它表示“从 tip 指向 target 还差多少”。",[57,113554,113556],{"className":30915,"code":113555,"language":30917,"meta":62,"style":62},"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",[64,113557,113558,113590],{"__ignoreMap":62},[67,113559,113560,113562,113564,113566,113568,113570,113572,113574,113576,113578,113580,113582,113584,113586,113588],{"class":69,"line":70},[67,113561,106408],{"class":77},[67,113563,1051],{"class":208},[67,113565,5162],{"class":77},[67,113567,909],{"class":73},[67,113569,112727],{"class":77},[67,113571,105797],{"class":208},[67,113573,7237],{"class":73},[67,113575,112734],{"class":77},[67,113577,939],{"class":208},[67,113579,112739],{"class":77},[67,113581,1389],{"class":73},[67,113583,102940],{"class":208},[67,113585,13153],{"class":77},[67,113587,102940],{"class":208},[67,113589,870],{"class":77},[67,113591,113592,113594,113596,113598,113600,113602,113604,113606,113608,113610,113612,113614,113616,113618,113620],{"class":69,"line":143},[67,113593,106408],{"class":77},[67,113595,1077],{"class":208},[67,113597,5162],{"class":77},[67,113599,909],{"class":73},[67,113601,112727],{"class":77},[67,113603,105797],{"class":208},[67,113605,7237],{"class":73},[67,113607,112734],{"class":77},[67,113609,1051],{"class":208},[67,113611,112739],{"class":77},[67,113613,1389],{"class":73},[67,113615,102940],{"class":208},[67,113617,13153],{"class":77},[67,113619,102940],{"class":208},[67,113621,870],{"class":77},[19,113623,113624,113625,113628],{},"给两个关节写控制输入。这里用 z 方向误差控制第一个关节，用 x 方向误差控制第二个关节。这是非常粗糙的教学控制器，只是为了展示 ",[64,113626,113627],{},"error -> ctrl -> step"," 的流程。",[57,113630,113631],{"className":30915,"code":105042,"language":30917,"meta":62,"style":62},[64,113632,113633],{"__ignoreMap":62},[67,113634,113635],{"class":69,"line":70},[67,113636,105042],{"class":77},[19,113638,113639],{},"推进仿真。机械臂会根据两个 motor 的输入改变姿态。",[57,113641,113643],{"className":30915,"code":113642,"language":30917,"meta":62,"style":62},"obs = get_obs(model, data)\n",[64,113644,113645],{"__ignoreMap":62},[67,113646,113647,113649,113651],{"class":69,"line":70},[67,113648,111391],{"class":77},[67,113650,909],{"class":73},[67,113652,112828],{"class":77},[19,113654,113655,113656,113659],{},"读取最新观测。后面打印 ",[64,113657,113658],{},"obs.shape[0]","，用来确认观测维度是 10。",[803,113661,102853],{"id":102852},[19,113663,113664],{},"观测维度为:",[57,113666,113669],{"className":113667,"code":113668,"language":5906,"meta":62},[5904],"2 个 qpos\n2 个 qvel\n3 个 tip position\n3 个 target position\n= 10\n",[64,113670,113668],{"__ignoreMap":62},[19,113672,113673],{},"控制器只是教学控制器。真实机械臂 reacher 通常会用逆运动学、Operational Space Control、RL policy 或模仿学习 policy。",[19,113675,113676],{},"程序每 100 步打印：",[57,113678,113681],{"className":113679,"code":113680,"language":5906,"meta":62},[5904],"tip: 末端点世界坐标\ntarget: 目标点世界坐标\nctrl: 两个关节的控制输入\nobs_dim: 观测维度\n",[64,113682,113680],{"__ignoreMap":62},[19,113684,113685,113686,113688],{},"如果控制有效，你应该看到最终 ",[64,113687,103768],{}," 的位置相对初始位置发生变化。它不一定能精准到达目标，因为这个控制器很粗糙。",[803,113690,102885],{"id":102884},[815,113692,113693,113696,113699,113705,113711,113718,113728],{},[818,113694,113695],{},"修改目标点位置。",[818,113697,113698],{},"重新运行，观察最终 tip 是否变化。",[818,113700,113701,113702,113704],{},"把 gravity 改成 ",[64,113703,103126],{},"，观察控制是否变差。",[818,113706,111718,113707,111722,113709,28922],{},[64,113708,102695],{},[64,113710,939],{},[818,113712,102948,113713,102951,113715,113717],{},[64,113714,111133],{},[64,113716,107844],{},"，观察机械臂是否更难移动。",[818,113719,102948,113720,83067,113722,102951,113724,113727],{},[64,113721,103771],{},[64,113723,104683],{},[64,113725,113726],{},"0.2 0 0.6","，观察 reward 和 final tip。",[818,113729,113730],{},"用 viewer 可视化，确认 link1、link2 和 target 的位置符合预期。",[803,113732,102990],{"id":102989},[14,113734,113736],{"id":113735},"site-not-found",[64,113737,113738],{},"site not found",[19,113740,113741,113742,101555,113745,28922],{},"检查 XML 中是否有 ",[64,113743,113744],{},"site name=\"tip\"",[64,113746,113747],{},"site name=\"target\"",[14,113749,113750],{"id":113750},"机械臂完全不动",[19,113752,103060],{},[815,113754,113755,113760,113763,113768],{},[818,113756,113757,113759],{},[64,113758,102695],{}," 是否为 2",[818,113761,113762],{},"actuator 是否引用正确 joint",[818,113764,113765,113767],{},[64,113766,101613],{}," 是否被赋值",[818,113769,113770,113771],{},"是否执行了 ",[64,113772,101222],{},[14,113774,113775],{"id":113775},"控制效果不好",[19,113777,113778],{},"正常。本章重点不是控制器最优，而是任务结构:",[57,113780,113783],{"className":113781,"code":113782,"language":5906,"meta":62},[5904],"obs → action → mj_step → reward → next_obs\n",[64,113784,113782],{"__ignoreMap":62},[14,113786,113788],{"id":113787},"tip-坐标不变化","tip 坐标不变化",[19,113790,103112],{},[815,113792,113793,113798,113806,113815],{},[818,113794,113795,113796,28922],{},"是否每步调用了 ",[64,113797,101222],{},[818,113799,113800,113801,101555,113803,28922],{},"是否写入了 ",[64,113802,106663],{},[64,113804,113805],{},"data.ctrl[1]",[818,113807,113808,113809,1072,113812,28922],{},"actuator 是否正确引用 ",[64,113810,113811],{},"joint1",[64,113813,113814],{},"joint2",[818,113816,113817],{},"控制输入是否太小。",[14,113819,113820],{"id":113820},"目标点不会动",[19,113822,113823],{},"本章的 target 是固定 site：",[57,113825,113827],{"className":53604,"code":113826,"language":53606,"meta":62,"style":62},"\u003Csite name=\"target\" pos=\"0.5 0 0.4\" ...\u002F>\n",[64,113828,113829],{"__ignoreMap":62},[67,113830,113831,113833,113835,113837,113839,113841,113843,113845,113848],{"class":69,"line":70},[67,113832,1766],{"class":77},[67,113834,103747],{"class":51837},[67,113836,15637],{"class":112},[67,113838,909],{"class":77},[67,113840,112496],{"class":84},[67,113842,101643],{"class":112},[67,113844,909],{"class":77},[67,113846,113847],{"class":84},"\"0.5 0 0.4\"",[67,113849,113850],{"class":77}," ...\u002F>\n",[19,113852,113853,113854,113856],{},"它直接挂在 ",[64,113855,102378],{}," 下，所以不会随机械臂运动。如果你想每次 reset 随机目标，后续可以把目标放在 mocap body 或通过修改模型\u002F数据实现，本章先不展开。",[14,113858,113859],{"id":113859},"机械臂不像真实机械臂",[19,113861,113862],{},"正常。本章模型是教学用二维两连杆，没有电机真实参数、关节限位、摩擦、真实机器人 URDF\u002FMJCF 结构。它的价值是帮你理解任务结构，而不是模拟某台真实机器人。",[803,113864,103144],{"id":103143},[19,113866,113867],{},"Reacher 比 Cartpole 多了一个关键概念：任务目标往往不是直接由关节角定义，而是由末端点和目标点的空间关系定义。",[19,113869,113870],{},"核心公式：",[57,113872,113875],{"className":113873,"code":113874,"language":5906,"meta":62},[5904],"distance = ||tip - target||\nreward = -distance - action_cost\n",[64,113876,113874],{"__ignoreMap":62},[19,113878,113879],{},"掌握这个模式后，就能理解很多机械臂 reach、push、pick、place 任务的基本奖励设计。",[779,113881,113882],{},"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":62,"searchDepth":143,"depth":143,"links":113884},[113885,113886,113887,113892,113896,113897,113898,113906],{"id":101183,"depth":143,"text":101184},{"id":101306,"depth":143,"text":101307},{"id":101581,"depth":143,"text":101582,"children":113888},[113889,113890,113891],{"id":112088,"depth":149,"text":112089},{"id":112164,"depth":149,"text":112164},{"id":112194,"depth":149,"text":112195},{"id":101789,"depth":143,"text":101790,"children":113893},[113894,113895],{"id":102109,"depth":149,"text":102109},{"id":102245,"depth":149,"text":102245},{"id":102852,"depth":143,"text":102853},{"id":102884,"depth":143,"text":102885},{"id":102989,"depth":143,"text":102990,"children":113899},[113900,113901,113902,113903,113904,113905],{"id":113735,"depth":149,"text":113738},{"id":113750,"depth":149,"text":113750},{"id":113775,"depth":149,"text":113775},{"id":113787,"depth":149,"text":113788},{"id":113820,"depth":149,"text":113820},{"id":113859,"depth":149,"text":113859},{"id":103143,"depth":143,"text":103144},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch7-reacher",{"title":111892,"description":62},"wiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务","7afYiYudLCszldKNM9vonhx27bDG_0sI4vgwQYeRqd4",{"id":113913,"title":113914,"body":113915,"description":62,"extension":787,"meta":117377,"navigation":176,"path":117378,"seo":117379,"stem":117380,"__hash__":117381},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础.md","8.Gymnasium 风格强化学习接口基础",{"type":7,"value":113916,"toc":117348},[113917,113920,113922,113925,113928,113953,113956,113962,113965,113971,113973,113975,113999,114001,114019,114021,114064,114066,114093,114095,114098,114150,114153,114159,114168,114171,114209,114212,114251,114254,114262,114269,114272,114278,114280,114334,114341,114386,114389,114393,114409,114419,114421,115682,115684,115696,115698,115709,115711,115714,115735,115738,115741,115774,115780,115783,115816,115819,115822,115863,115868,115882,115885,115898,115903,115926,115928,115943,115953,115968,115975,115995,116010,116028,116031,116048,116056,116072,116078,116110,116123,116155,116165,116200,116214,116260,116274,116316,116327,116340,116346,116379,116382,116409,116419,116459,116469,116486,116493,116511,116514,116555,116568,116583,116586,116609,116612,116624,116627,116646,116651,116672,116675,116690,116693,116727,116739,116754,116757,116782,116785,116804,116807,116839,116842,116866,116872,116902,116909,116922,116925,116927,116929,116935,116938,116941,116953,116956,116958,117012,117014,117018,117024,117033,117036,117043,117045,117068,117071,117075,117077,117095,117101,117103,117136,117139,117145,117149,117152,117172,117177,117181,117188,117208,117213,117217,117220,117240,117243,117329,117333,117336,117342,117345],[10,113918,113914],{"id":113919},"_8gymnasium-风格强化学习接口基础",[803,113921,101184],{"id":101183},[19,113923,113924],{},"本章把 MuJoCo 任务封装成类似 Gymnasium 的接口。",[19,113926,113927],{},"你将实现:",[57,113929,113931],{"className":30915,"code":113930,"language":30917,"meta":62,"style":62},"obs, info = env.reset()\nobs, reward, terminated, truncated, info = env.step(action)\n",[64,113932,113933,113943],{"__ignoreMap":62},[67,113934,113935,113938,113940],{"class":69,"line":70},[67,113936,113937],{"class":77},"obs, info ",[67,113939,909],{"class":73},[67,113941,113942],{"class":77}," env.reset()\n",[67,113944,113945,113948,113950],{"class":69,"line":143},[67,113946,113947],{"class":77},"obs, reward, terminated, truncated, info ",[67,113949,909],{"class":73},[67,113951,113952],{"class":77}," env.step(action)\n",[19,113954,113955],{},"这为后续强化学习、模仿学习、VLA 数据采集打基础。",[19,113957,113958,113959,113961],{},"前面章节的代码都是“脚本式”的：在 ",[64,113960,102832],{}," 里写循环。本章要把同样的逻辑封装成环境类。这样强化学习算法就可以用统一方式调用你的 MuJoCo 任务。",[19,113963,113964],{},"可以先记住 Gymnasium 环境的核心交互：",[57,113966,113969],{"className":113967,"code":113968,"language":5906,"meta":62},[5904],"reset 得到初始 obs\n循环：\n  policy 根据 obs 产生 action\n  env.step(action) 返回 next_obs、reward、done 信息\n",[64,113970,113968],{"__ignoreMap":62},[803,113972,101307],{"id":101306},[19,113974,101310],{},[57,113976,113977],{"className":59,"code":104925,"language":61,"meta":62,"style":62},[64,113978,113979],{"__ignoreMap":62},[67,113980,113981,113983,113985,113987,113989,113991,113993,113995,113997],{"class":69,"line":70},[67,113982,298],{"class":112},[67,113984,378],{"class":84},[67,113986,312],{"class":84},[67,113988,464],{"class":208},[67,113990,104940],{"class":84},[67,113992,101335],{"class":84},[67,113994,103038],{"class":84},[67,113996,101351],{"class":84},[67,113998,104949],{"class":84},[19,114000,103356],{},[57,114002,114004],{"className":59,"code":114003,"language":61,"meta":62,"style":62},"pip install \"mujoco>=2.3\" numpy gymnasium\n",[64,114005,114006],{"__ignoreMap":62},[67,114007,114008,114010,114012,114014,114016],{"class":69,"line":70},[67,114009,24546],{"class":112},[67,114011,312],{"class":84},[67,114013,101467],{"class":84},[67,114015,108248],{"class":84},[67,114017,114018],{"class":84}," gymnasium\n",[19,114020,103373],{},[57,114022,114024],{"className":59,"code":114023,"language":61,"meta":62,"style":62},"conda create -n mujoco-gym-api python=3.10 -y\nconda activate mujoco-gym-api\npip install \"mujoco>=2.3\" numpy gymnasium\n",[64,114025,114026,114043,114052],{"__ignoreMap":62},[67,114027,114028,114030,114032,114034,114037,114039,114041],{"class":69,"line":70},[67,114029,30867],{"class":112},[67,114031,29713],{"class":84},[67,114033,25825],{"class":208},[67,114035,114036],{"class":84}," mujoco-gym-api",[67,114038,101512],{"class":84},[67,114040,101515],{"class":208},[67,114042,101518],{"class":208},[67,114044,114045,114047,114049],{"class":69,"line":143},[67,114046,30867],{"class":112},[67,114048,101525],{"class":84},[67,114050,114051],{"class":84}," mujoco-gym-api\n",[67,114053,114054,114056,114058,114060,114062],{"class":69,"line":149},[67,114055,24546],{"class":112},[67,114057,312],{"class":84},[67,114059,101467],{"class":84},[67,114061,108248],{"class":84},[67,114063,114018],{"class":84},[19,114065,101541],{},[815,114067,114068,114078,114081,114087],{},[818,114069,114070,114071,114074,114075,28922],{},"本章使用 ",[64,114072,114073],{},"gymnasium","，不是旧版 ",[64,114076,114077],{},"gym",[818,114079,114080],{},"Gymnasium API 与旧 Gym API 有差异。",[818,114082,114083,114084,28922],{},"旧 Gym 常见返回值是 4 个: ",[64,114085,114086],{},"obs, reward, done, info",[818,114088,114089,114090,28922],{},"Gymnasium 返回值是 5 个: ",[64,114091,114092],{},"obs, reward, terminated, truncated, info",[803,114094,101582],{"id":101581},[19,114096,114097],{},"强化学习环境接口包含:",[998,114099,114100,114109],{},[1001,114101,114102],{},[1004,114103,114104,114107],{},[1007,114105,114106],{"align":24453},"方法",[1007,114108,103233],{"align":24453},[1044,114110,114111,114121,114131,114141],{},[1004,114112,114113,114118],{},[1049,114114,114115],{"align":24453},[64,114116,114117],{},"reset()",[1049,114119,114120],{"align":24453},"重置环境",[1004,114122,114123,114128],{},[1049,114124,114125],{"align":24453},[64,114126,114127],{},"step(action)",[1049,114129,114130],{"align":24453},"执行动作",[1004,114132,114133,114138],{},[1049,114134,114135],{"align":24453},[64,114136,114137],{},"observation_space",[1049,114139,114140],{"align":24453},"观测空间",[1004,114142,114143,114148],{},[1049,114144,114145],{"align":24453},[64,114146,114147],{},"action_space",[1049,114149,24371],{"align":24453},[19,114151,114152],{},"一个最小环境需要完成:",[57,114154,114157],{"className":114155,"code":114156,"language":5906,"meta":62},[5904],"reset 初始化状态\nstep 写入 data.ctrl\nmj_step 推进仿真\n计算 obs\u002Freward\u002Fdone\n返回结果\n",[64,114158,114156],{"__ignoreMap":62},[14,114160,114162,101555,114165,105175],{"id":114161},"terminated-和-truncated-的区别",[64,114163,114164],{},"terminated",[64,114166,114167],{},"truncated",[19,114169,114170],{},"Gymnasium 把“结束”拆成两个概念：",[998,114172,114173,114183],{},[1001,114174,114175],{},[1004,114176,114177,114179,114181],{},[1007,114178,105111],{"align":24453},[1007,114180,101237],{"align":24453},[1007,114182,21904],{"align":24453},[1044,114184,114185,114197],{},[1004,114186,114187,114191,114194],{},[1049,114188,114189],{"align":24453},[64,114190,114164],{},[1049,114192,114193],{"align":24453},"任务自然结束",[1049,114195,114196],{"align":24453},"机械臂到达目标、机器人摔倒",[1004,114198,114199,114203,114206],{},[1049,114200,114201],{"align":24453},[64,114202,114167],{},[1049,114204,114205],{"align":24453},"因外部限制截断",[1049,114207,114208],{"align":24453},"达到最大步数、时间限制",[19,114210,114211],{},"本章中：",[57,114213,114215],{"className":30915,"code":114214,"language":30917,"meta":62,"style":62},"terminated = dist \u003C 0.05\ntruncated = self.steps >= self.max_steps\n",[64,114216,114217,114232],{"__ignoreMap":62},[67,114218,114219,114222,114224,114227,114229],{"class":69,"line":70},[67,114220,114221],{"class":77},"terminated ",[67,114223,909],{"class":73},[67,114225,114226],{"class":77}," dist ",[67,114228,1766],{"class":73},[67,114230,114231],{"class":208}," 0.05\n",[67,114233,114234,114237,114239,114241,114244,114246,114248],{"class":69,"line":143},[67,114235,114236],{"class":77},"truncated ",[67,114238,909],{"class":73},[67,114240,39410],{"class":208},[67,114242,114243],{"class":77},".steps ",[67,114245,2433],{"class":73},[67,114247,39410],{"class":208},[67,114249,114250],{"class":77},".max_steps\n",[19,114252,114253],{},"也就是：",[815,114255,114256,114259],{},[818,114257,114258],{},"末端距离目标小于 0.05，任务成功结束。",[818,114260,114261],{},"步数超过上限，episode 被截断。",[14,114263,114265,101555,114267],{"id":114264},"observation_space-和-action_space",[64,114266,114137],{},[64,114268,114147],{},[19,114270,114271],{},"这两个对象告诉算法：",[57,114273,114276],{"className":114274,"code":114275,"language":5906,"meta":62},[5904],"观测长什么样\n动作允许多大\n",[64,114277,114275],{"__ignoreMap":62},[19,114279,15350],{},[57,114281,114283],{"className":30915,"code":114282,"language":30917,"meta":62,"style":62},"self.action_space = spaces.Box(low=-1.0, high=1.0, shape=(2,), dtype=np.float32)\n",[64,114284,114285],{"__ignoreMap":62},[67,114286,114287,114289,114292,114294,114297,114300,114303,114305,114307,114310,114312,114314,114316,114318,114320,114322,114324,114327,114329,114331],{"class":69,"line":70},[67,114288,31360],{"class":208},[67,114290,114291],{"class":77},".action_space ",[67,114293,909],{"class":73},[67,114295,114296],{"class":77}," spaces.Box(",[67,114298,114299],{"class":5935},"low",[67,114301,114302],{"class":73},"=-",[67,114304,102940],{"class":208},[67,114306,13153],{"class":77},[67,114308,114309],{"class":5935},"high",[67,114311,909],{"class":73},[67,114313,102940],{"class":208},[67,114315,13153],{"class":77},[67,114317,96500],{"class":5935},[67,114319,909],{"class":73},[67,114321,864],{"class":77},[67,114323,939],{"class":208},[67,114325,114326],{"class":77},",), ",[67,114328,94037],{"class":5935},[67,114330,909],{"class":73},[67,114332,114333],{"class":77},"np.float32)\n",[19,114335,114336,114337,114340],{},"表示动作是 2 维数组，每个值都在 ",[64,114338,114339],{},"[-1, 1]"," 范围内。",[57,114342,114344],{"className":30915,"code":114343,"language":30917,"meta":62,"style":62},"self.observation_space = spaces.Box(low=-np.inf, high=np.inf, shape=(10,), dtype=np.float32)\n",[64,114345,114346],{"__ignoreMap":62},[67,114347,114348,114350,114353,114355,114357,114359,114361,114364,114366,114368,114370,114372,114374,114376,114378,114380,114382,114384],{"class":69,"line":70},[67,114349,31360],{"class":208},[67,114351,114352],{"class":77},".observation_space ",[67,114354,909],{"class":73},[67,114356,114296],{"class":77},[67,114358,114299],{"class":5935},[67,114360,114302],{"class":73},[67,114362,114363],{"class":77},"np.inf, ",[67,114365,114309],{"class":5935},[67,114367,909],{"class":73},[67,114369,114363],{"class":77},[67,114371,96500],{"class":5935},[67,114373,909],{"class":73},[67,114375,864],{"class":77},[67,114377,1303],{"class":208},[67,114379,114326],{"class":77},[67,114381,94037],{"class":5935},[67,114383,909],{"class":73},[67,114385,114333],{"class":77},[19,114387,114388],{},"表示观测是 10 维浮点数组，数值范围不强行限制。",[14,114390,114392],{"id":114391},"frame_skip-是什么","frame_skip 是什么",[57,114394,114396],{"className":30915,"code":114395,"language":30917,"meta":62,"style":62},"self.frame_skip = 5\n",[64,114397,114398],{"__ignoreMap":62},[67,114399,114400,114402,114405,114407],{"class":69,"line":70},[67,114401,31360],{"class":208},[67,114403,114404],{"class":77},".frame_skip ",[67,114406,909],{"class":73},[67,114408,54964],{"class":208},[19,114410,114411,114412,114415,114416,114418],{},"表示外部调用一次 ",[64,114413,114414],{},"env.step(action)","，内部连续执行 5 次 MuJoCo ",[64,114417,101752],{},"。这样做很常见，因为控制策略不一定需要每个物理时间步都重新给动作。",[803,114420,101790],{"id":101789},[57,114422,114424],{"className":30915,"code":114423,"language":30917,"meta":62,"style":62},"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",[64,114425,114426,114438,114444,114454,114465,114469,114473,114481,114486,114490,114494,114498,114502,114506,114510,114514,114519,114523,114527,114531,114536,114540,114544,114548,114552,114556,114560,114564,114568,114572,114576,114580,114584,114588,114606,114621,114625,114638,114648,114663,114680,114684,114705,114724,114749,114763,114767,114777,114789,114799,114803,114845,114883,114887,114897,114913,114928,114947,114954,114958,114971,114986,115001,115014,115033,115049,115053,115094,115109,115124,115128,115167,115178,115191,115195,115205,115214,115218,115228,115243,115261,115265,115276,115293,115306,115310,115320,115324,115335,115346,115350,115364,115378,115394,115398,115411,115428,115443,115450,115454,115458,115470,115480,115498,115510,115522,115526,115534,115550,115559,115568,115576,115618,115631,115636,115640,115658,115662,115666,115678],{"__ignoreMap":62},[67,114427,114428,114430,114433,114435],{"class":69,"line":70},[67,114429,30929],{"class":73},[67,114431,114432],{"class":77}," gymnasium ",[67,114434,31920],{"class":73},[67,114436,114437],{"class":77}," gym\n",[67,114439,114440,114442],{"class":69,"line":143},[67,114441,30929],{"class":73},[67,114443,101838],{"class":77},[67,114445,114446,114448,114450,114452],{"class":69,"line":149},[67,114447,30929],{"class":73},[67,114449,31917],{"class":77},[67,114451,31920],{"class":73},[67,114453,31923],{"class":77},[67,114455,114456,114458,114460,114462],{"class":69,"line":155},[67,114457,31274],{"class":73},[67,114459,114432],{"class":77},[67,114461,30929],{"class":73},[67,114463,114464],{"class":77}," spaces\n",[67,114466,114467],{"class":69,"line":161},[67,114468,177],{"emptyLinePlaceholder":176},[67,114470,114471],{"class":69,"line":167},[67,114472,177],{"emptyLinePlaceholder":176},[67,114474,114475,114477,114479],{"class":69,"line":173},[67,114476,101851],{"class":208},[67,114478,14282],{"class":73},[67,114480,101856],{"class":84},[67,114482,114483],{"class":69,"line":180},[67,114484,114485],{"class":84},"\u003Cmujoco model=\"gym_reacher\">\n",[67,114487,114488],{"class":69,"line":186},[67,114489,112275],{"class":84},[67,114491,114492],{"class":69,"line":444},[67,114493,177],{"emptyLinePlaceholder":176},[67,114495,114496],{"class":69,"line":2335},[67,114497,101875],{"class":84},[67,114499,114500],{"class":69,"line":2340},[67,114501,112293],{"class":84},[67,114503,114504],{"class":69,"line":2346},[67,114505,177],{"emptyLinePlaceholder":176},[67,114507,114508],{"class":69,"line":2351},[67,114509,112302],{"class":84},[67,114511,114512],{"class":69,"line":2365},[67,114513,112307],{"class":84},[67,114515,114516],{"class":69,"line":2370},[67,114517,114518],{"class":84},"      \u003Cgeom name=\"link1_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[67,114520,114521],{"class":69,"line":2376},[67,114522,177],{"emptyLinePlaceholder":176},[67,114524,114525],{"class":69,"line":2397},[67,114526,112321],{"class":84},[67,114528,114529],{"class":69,"line":2402},[67,114530,112326],{"class":84},[67,114532,114533],{"class":69,"line":2416},[67,114534,114535],{"class":84},"        \u003Cgeom name=\"link2_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[67,114537,114538],{"class":69,"line":2421},[67,114539,112336],{"class":84},[67,114541,114542],{"class":69,"line":2450},[67,114543,106975],{"class":84},[67,114545,114546],{"class":69,"line":2455},[67,114547,101904],{"class":84},[67,114549,114550],{"class":69,"line":2472},[67,114551,101909],{"class":84},[67,114553,114554],{"class":69,"line":2477},[67,114555,177],{"emptyLinePlaceholder":176},[67,114557,114558],{"class":69,"line":2482},[67,114559,106992],{"class":84},[67,114561,114562],{"class":69,"line":2487},[67,114563,112361],{"class":84},[67,114565,114566],{"class":69,"line":2501},[67,114567,112366],{"class":84},[67,114569,114570],{"class":69,"line":2506},[67,114571,107002],{"class":84},[67,114573,114574],{"class":69,"line":3298},[67,114575,101914],{"class":84},[67,114577,114578],{"class":69,"line":3312},[67,114579,96235],{"class":84},[67,114581,114582],{"class":69,"line":3320},[67,114583,177],{"emptyLinePlaceholder":176},[67,114585,114586],{"class":69,"line":3325},[67,114587,177],{"emptyLinePlaceholder":176},[67,114589,114590,114592,114595,114597,114599,114601,114604],{"class":69,"line":3331},[67,114591,15411],{"class":73},[67,114593,114594],{"class":112}," ReacherEnv",[67,114596,864],{"class":77},[67,114598,114077],{"class":112},[67,114600,240],{"class":77},[67,114602,114603],{"class":112},"Env",[67,114605,31323],{"class":77},[67,114607,114608,114611,114613,114615,114618],{"class":69,"line":3337},[67,114609,114610],{"class":77},"    metadata ",[67,114612,909],{"class":73},[67,114614,5167],{"class":77},[67,114616,114617],{"class":84},"\"render_modes\"",[67,114619,114620],{"class":77},": []}\n",[67,114622,114623],{"class":69,"line":3342},[67,114624,177],{"emptyLinePlaceholder":176},[67,114626,114627,114629,114631,114634,114636],{"class":69,"line":8667},[67,114628,31338],{"class":73},[67,114630,31341],{"class":208},[67,114632,114633],{"class":77},"(self) -> ",[67,114635,96223],{"class":208},[67,114637,4459],{"class":77},[67,114639,114640,114642,114644,114646],{"class":69,"line":8691},[67,114641,31354],{"class":208},[67,114643,17978],{"class":77},[67,114645,31366],{"class":208},[67,114647,2698],{"class":77},[67,114649,114650,114652,114655,114657,114659,114661],{"class":69,"line":8696},[67,114651,31382],{"class":208},[67,114653,114654],{"class":77},".model ",[67,114656,909],{"class":73},[67,114658,101949],{"class":77},[67,114660,101851],{"class":208},[67,114662,870],{"class":77},[67,114664,114665,114667,114670,114672,114675,114677],{"class":69,"line":8702},[67,114666,31382],{"class":208},[67,114668,114669],{"class":77},".data ",[67,114671,909],{"class":73},[67,114673,114674],{"class":77}," mujoco.MjData(",[67,114676,31360],{"class":208},[67,114678,114679],{"class":77},".model)\n",[67,114681,114682],{"class":69,"line":8729},[67,114683,177],{"emptyLinePlaceholder":176},[67,114685,114686,114688,114691,114693,114696,114698,114701,114703],{"class":69,"line":8734},[67,114687,31382],{"class":208},[67,114689,114690],{"class":77},".tip_site_id ",[67,114692,909],{"class":73},[67,114694,114695],{"class":77}," mujoco.mj_name2id(",[67,114697,31360],{"class":208},[67,114699,114700],{"class":77},".model, mujoco.mjtObj.mjOBJ_SITE, ",[67,114702,112073],{"class":84},[67,114704,870],{"class":77},[67,114706,114707,114709,114712,114714,114716,114718,114720,114722],{"class":69,"line":8740},[67,114708,31382],{"class":208},[67,114710,114711],{"class":77},".target_site_id ",[67,114713,909],{"class":73},[67,114715,114695],{"class":77},[67,114717,31360],{"class":208},[67,114719,114700],{"class":77},[67,114721,112496],{"class":84},[67,114723,870],{"class":77},[67,114725,114726,114728,114730,114732,114734,114736,114739,114741,114743,114745,114747],{"class":69,"line":8752},[67,114727,3218],{"class":73},[67,114729,39410],{"class":208},[67,114731,114690],{"class":77},[67,114733,1766],{"class":73},[67,114735,4813],{"class":208},[67,114737,114738],{"class":73}," or",[67,114740,39410],{"class":208},[67,114742,114711],{"class":77},[67,114744,1766],{"class":73},[67,114746,4813],{"class":208},[67,114748,4459],{"class":77},[67,114750,114751,114754,114756,114758,114761],{"class":69,"line":8764},[67,114752,114753],{"class":73},"            raise",[67,114755,103972],{"class":208},[67,114757,864],{"class":77},[67,114759,114760],{"class":84},"\"required sites not found\"",[67,114762,870],{"class":77},[67,114764,114765],{"class":69,"line":8776},[67,114766,177],{"emptyLinePlaceholder":176},[67,114768,114769,114771,114773,114775],{"class":69,"line":10435},[67,114770,31382],{"class":208},[67,114772,114404],{"class":77},[67,114774,909],{"class":73},[67,114776,54964],{"class":208},[67,114778,114779,114781,114784,114786],{"class":69,"line":10459},[67,114780,31382],{"class":208},[67,114782,114783],{"class":77},".max_steps ",[67,114785,909],{"class":73},[67,114787,114788],{"class":208}," 200\n",[67,114790,114791,114793,114795,114797],{"class":69,"line":10482},[67,114792,31382],{"class":208},[67,114794,114243],{"class":77},[67,114796,909],{"class":73},[67,114798,47870],{"class":208},[67,114800,114801],{"class":69,"line":10506},[67,114802,177],{"emptyLinePlaceholder":176},[67,114804,114805,114807,114809,114811,114813,114815,114817,114819,114821,114823,114825,114827,114829,114831,114833,114835,114837,114839,114841,114843],{"class":69,"line":10511},[67,114806,31382],{"class":208},[67,114808,114291],{"class":77},[67,114810,909],{"class":73},[67,114812,114296],{"class":77},[67,114814,114299],{"class":5935},[67,114816,114302],{"class":73},[67,114818,102940],{"class":208},[67,114820,13153],{"class":77},[67,114822,114309],{"class":5935},[67,114824,909],{"class":73},[67,114826,102940],{"class":208},[67,114828,13153],{"class":77},[67,114830,96500],{"class":5935},[67,114832,909],{"class":73},[67,114834,864],{"class":77},[67,114836,939],{"class":208},[67,114838,114326],{"class":77},[67,114840,94037],{"class":5935},[67,114842,909],{"class":73},[67,114844,114333],{"class":77},[67,114846,114847,114849,114851,114853,114855,114857,114859,114861,114863,114865,114867,114869,114871,114873,114875,114877,114879,114881],{"class":69,"line":10516},[67,114848,31382],{"class":208},[67,114850,114352],{"class":77},[67,114852,909],{"class":73},[67,114854,114296],{"class":77},[67,114856,114299],{"class":5935},[67,114858,114302],{"class":73},[67,114860,114363],{"class":77},[67,114862,114309],{"class":5935},[67,114864,909],{"class":73},[67,114866,114363],{"class":77},[67,114868,96500],{"class":5935},[67,114870,909],{"class":73},[67,114872,864],{"class":77},[67,114874,1303],{"class":208},[67,114876,114326],{"class":77},[67,114878,94037],{"class":5935},[67,114880,909],{"class":73},[67,114882,114333],{"class":77},[67,114884,114885],{"class":69,"line":10521},[67,114886,177],{"emptyLinePlaceholder":176},[67,114888,114889,114891,114894],{"class":69,"line":10530},[67,114890,31338],{"class":73},[67,114892,114893],{"class":112}," _get_obs",[67,114895,114896],{"class":77},"(self) -> np.ndarray:\n",[67,114898,114899,114901,114903,114905,114908,114910],{"class":69,"line":10535},[67,114900,112674],{"class":77},[67,114902,909],{"class":73},[67,114904,39410],{"class":208},[67,114906,114907],{"class":77},".data.site_xpos[",[67,114909,31360],{"class":208},[67,114911,114912],{"class":77},".tip_site_id].copy()\n",[67,114914,114915,114917,114919,114921,114923,114925],{"class":69,"line":10541},[67,114916,112687],{"class":77},[67,114918,909],{"class":73},[67,114920,39410],{"class":208},[67,114922,114907],{"class":77},[67,114924,31360],{"class":208},[67,114926,114927],{"class":77},".target_site_id].copy()\n",[67,114929,114930,114932,114934,114937,114939,114942,114944],{"class":69,"line":10562},[67,114931,110719],{"class":77},[67,114933,909],{"class":73},[67,114935,114936],{"class":77}," np.concatenate([",[67,114938,31360],{"class":208},[67,114940,114941],{"class":77},".data.qpos.copy(), ",[67,114943,31360],{"class":208},[67,114945,114946],{"class":77},".data.qvel.copy(), tip, target])\n",[67,114948,114949,114951],{"class":69,"line":10568},[67,114950,15469],{"class":73},[67,114952,114953],{"class":77}," obs.astype(np.float32)\n",[67,114955,114956],{"class":69,"line":10582},[67,114957,177],{"emptyLinePlaceholder":176},[67,114959,114960,114962,114965,114967,114969],{"class":69,"line":10588},[67,114961,31338],{"class":73},[67,114963,114964],{"class":112}," _get_reward",[67,114966,114633],{"class":77},[67,114968,903],{"class":208},[67,114970,4459],{"class":77},[67,114972,114973,114975,114977,114979,114981,114983],{"class":69,"line":10615},[67,114974,112674],{"class":77},[67,114976,909],{"class":73},[67,114978,39410],{"class":208},[67,114980,114907],{"class":77},[67,114982,31360],{"class":208},[67,114984,114985],{"class":77},".tip_site_id]\n",[67,114987,114988,114990,114992,114994,114996,114998],{"class":69,"line":10624},[67,114989,112687],{"class":77},[67,114991,909],{"class":73},[67,114993,39410],{"class":208},[67,114995,114907],{"class":77},[67,114997,31360],{"class":208},[67,114999,115000],{"class":77},".target_site_id]\n",[67,115002,115003,115006,115008,115010,115012],{"class":69,"line":10630},[67,115004,115005],{"class":77},"        dist ",[67,115007,909],{"class":73},[67,115009,112138],{"class":77},[67,115011,1389],{"class":73},[67,115013,112143],{"class":77},[67,115015,115016,115019,115021,115023,115025,115028,115030],{"class":69,"line":10638},[67,115017,115018],{"class":77},"        control_cost ",[67,115020,909],{"class":73},[67,115022,112574],{"class":208},[67,115024,7237],{"class":73},[67,115026,115027],{"class":77}," np.sum(np.square(",[67,115029,31360],{"class":208},[67,115031,115032],{"class":77},".data.ctrl))\n",[67,115034,115035,115037,115039,115041,115043,115045,115047],{"class":69,"line":10643},[67,115036,15469],{"class":73},[67,115038,110334],{"class":208},[67,115040,864],{"class":77},[67,115042,1389],{"class":73},[67,115044,112133],{"class":77},[67,115046,1389],{"class":73},[67,115048,112596],{"class":77},[67,115050,115051],{"class":69,"line":17321},[67,115052,177],{"emptyLinePlaceholder":176},[67,115054,115055,115057,115060,115063,115065,115068,115070,115072,115074,115076,115078,115081,115084,115086,115088,115090,115092],{"class":69,"line":17327},[67,115056,31338],{"class":73},[67,115058,115059],{"class":112}," reset",[67,115061,115062],{"class":77},"(self, ",[67,115064,1312],{"class":73},[67,115066,115067],{"class":77},", seed: ",[67,115069,867],{"class":208},[67,115071,266],{"class":73},[67,115073,39470],{"class":208},[67,115075,14282],{"class":73},[67,115077,39470],{"class":208},[67,115079,115080],{"class":77},", options: ",[67,115082,115083],{"class":208},"dict",[67,115085,266],{"class":73},[67,115087,39470],{"class":208},[67,115089,14282],{"class":73},[67,115091,39470],{"class":208},[67,115093,31323],{"class":77},[67,115095,115096,115098,115101,115104,115106],{"class":69,"line":17350},[67,115097,31354],{"class":208},[67,115099,115100],{"class":77},"().reset(",[67,115102,115103],{"class":5935},"seed",[67,115105,909],{"class":73},[67,115107,115108],{"class":77},"seed)\n",[67,115110,115111,115114,115116,115119,115121],{"class":69,"line":17356},[67,115112,115113],{"class":77},"        mujoco.mj_resetData(",[67,115115,31360],{"class":208},[67,115117,115118],{"class":77},".model, ",[67,115120,31360],{"class":208},[67,115122,115123],{"class":77},".data)\n",[67,115125,115126],{"class":69,"line":17379},[67,115127,177],{"emptyLinePlaceholder":176},[67,115129,115130,115132,115135,115137,115139,115142,115144,115146,115148,115150,115152,115154,115156,115158,115160,115162,115164],{"class":69,"line":17393},[67,115131,31382],{"class":208},[67,115133,115134],{"class":77},".data.qpos[:] ",[67,115136,909],{"class":73},[67,115138,39410],{"class":208},[67,115140,115141],{"class":77},".np_random.uniform(",[67,115143,114299],{"class":5935},[67,115145,114302],{"class":73},[67,115147,86747],{"class":208},[67,115149,13153],{"class":77},[67,115151,114309],{"class":5935},[67,115153,909],{"class":73},[67,115155,86747],{"class":208},[67,115157,13153],{"class":77},[67,115159,32033],{"class":5935},[67,115161,909],{"class":73},[67,115163,31360],{"class":208},[67,115165,115166],{"class":77},".model.nq)\n",[67,115168,115169,115171,115174,115176],{"class":69,"line":17413},[67,115170,31382],{"class":208},[67,115172,115173],{"class":77},".data.qvel[:] ",[67,115175,909],{"class":73},[67,115177,105298],{"class":208},[67,115179,115180,115183,115185,115187,115189],{"class":69,"line":17419},[67,115181,115182],{"class":77},"        mujoco.mj_forward(",[67,115184,31360],{"class":208},[67,115186,115118],{"class":77},[67,115188,31360],{"class":208},[67,115190,115123],{"class":77},[67,115192,115193],{"class":69,"line":17430},[67,115194,177],{"emptyLinePlaceholder":176},[67,115196,115197,115199,115201,115203],{"class":69,"line":17453},[67,115198,31382],{"class":208},[67,115200,114243],{"class":77},[67,115202,909],{"class":73},[67,115204,47870],{"class":208},[67,115206,115207,115209,115211],{"class":69,"line":17475},[67,115208,15469],{"class":73},[67,115210,39410],{"class":208},[67,115212,115213],{"class":77},"._get_obs(), {}\n",[67,115215,115216],{"class":69,"line":17480},[67,115217,177],{"emptyLinePlaceholder":176},[67,115219,115220,115222,115225],{"class":69,"line":17486},[67,115221,31338],{"class":73},[67,115223,115224],{"class":112}," step",[67,115226,115227],{"class":77},"(self, action):\n",[67,115229,115230,115232,115234,115237,115239,115241],{"class":69,"line":17500},[67,115231,110759],{"class":77},[67,115233,909],{"class":73},[67,115235,115236],{"class":77}," np.asarray(action, ",[67,115238,94037],{"class":5935},[67,115240,909],{"class":73},[67,115242,114333],{"class":77},[67,115244,115245,115247,115249,115251,115253,115256,115258],{"class":69,"line":17513},[67,115246,110759],{"class":77},[67,115248,909],{"class":73},[67,115250,107984],{"class":77},[67,115252,31360],{"class":208},[67,115254,115255],{"class":77},".action_space.low, ",[67,115257,31360],{"class":208},[67,115259,115260],{"class":77},".action_space.high)\n",[67,115262,115263],{"class":69,"line":17518},[67,115264,177],{"emptyLinePlaceholder":176},[67,115266,115267,115269,115272,115274],{"class":69,"line":17532},[67,115268,31382],{"class":208},[67,115270,115271],{"class":77},".data.ctrl[:] ",[67,115273,909],{"class":73},[67,115275,108007],{"class":77},[67,115277,115278,115280,115282,115284,115286,115288,115290],{"class":69,"line":17537},[67,115279,4123],{"class":73},[67,115281,102038],{"class":77},[67,115283,81],{"class":73},[67,115285,32980],{"class":208},[67,115287,864],{"class":77},[67,115289,31360],{"class":208},[67,115291,115292],{"class":77},".frame_skip):\n",[67,115294,115295,115298,115300,115302,115304],{"class":69,"line":17543},[67,115296,115297],{"class":77},"            mujoco.mj_step(",[67,115299,31360],{"class":208},[67,115301,115118],{"class":77},[67,115303,31360],{"class":208},[67,115305,115123],{"class":77},[67,115307,115308],{"class":69,"line":17548},[67,115309,177],{"emptyLinePlaceholder":176},[67,115311,115312,115314,115316,115318],{"class":69,"line":17562},[67,115313,31382],{"class":208},[67,115315,114243],{"class":77},[67,115317,10196],{"class":73},[67,115319,56236],{"class":208},[67,115321,115322],{"class":69,"line":17567},[67,115323,177],{"emptyLinePlaceholder":176},[67,115325,115326,115328,115330,115332],{"class":69,"line":17572},[67,115327,110719],{"class":77},[67,115329,909],{"class":73},[67,115331,39410],{"class":208},[67,115333,115334],{"class":77},"._get_obs()\n",[67,115336,115337,115339,115341,115343],{"class":69,"line":17586},[67,115338,110824],{"class":77},[67,115340,909],{"class":73},[67,115342,39410],{"class":208},[67,115344,115345],{"class":77},"._get_reward()\n",[67,115347,115348],{"class":69,"line":17598},[67,115349,177],{"emptyLinePlaceholder":176},[67,115351,115352,115354,115356,115358,115360,115362],{"class":69,"line":17603},[67,115353,112674],{"class":77},[67,115355,909],{"class":73},[67,115357,39410],{"class":208},[67,115359,114907],{"class":77},[67,115361,31360],{"class":208},[67,115363,114985],{"class":77},[67,115365,115366,115368,115370,115372,115374,115376],{"class":69,"line":17616},[67,115367,112687],{"class":77},[67,115369,909],{"class":73},[67,115371,39410],{"class":208},[67,115373,114907],{"class":77},[67,115375,31360],{"class":208},[67,115377,115000],{"class":77},[67,115379,115380,115382,115384,115386,115389,115391],{"class":69,"line":17621},[67,115381,115005],{"class":77},[67,115383,909],{"class":73},[67,115385,110334],{"class":208},[67,115387,115388],{"class":77},"(np.linalg.norm(tip ",[67,115390,1389],{"class":73},[67,115392,115393],{"class":77}," target))\n",[67,115395,115396],{"class":69,"line":17626},[67,115397,177],{"emptyLinePlaceholder":176},[67,115399,115400,115403,115405,115407,115409],{"class":69,"line":17631},[67,115401,115402],{"class":77},"        terminated ",[67,115404,909],{"class":73},[67,115406,114226],{"class":77},[67,115408,1766],{"class":73},[67,115410,114231],{"class":208},[67,115412,115413,115416,115418,115420,115422,115424,115426],{"class":69,"line":17644},[67,115414,115415],{"class":77},"        truncated ",[67,115417,909],{"class":73},[67,115419,39410],{"class":208},[67,115421,114243],{"class":77},[67,115423,2433],{"class":73},[67,115425,39410],{"class":208},[67,115427,114250],{"class":77},[67,115429,115430,115433,115435,115437,115440],{"class":69,"line":17649},[67,115431,115432],{"class":77},"        info ",[67,115434,909],{"class":73},[67,115436,5167],{"class":77},[67,115438,115439],{"class":84},"\"distance\"",[67,115441,115442],{"class":77},": dist}\n",[67,115444,115445,115447],{"class":69,"line":33170},[67,115446,15469],{"class":73},[67,115448,115449],{"class":77}," obs, reward, terminated, truncated, info\n",[67,115451,115452],{"class":69,"line":33176},[67,115453,177],{"emptyLinePlaceholder":176},[67,115455,115456],{"class":69,"line":33182},[67,115457,177],{"emptyLinePlaceholder":176},[67,115459,115460,115462,115464,115466,115468],{"class":69,"line":33188},[67,115461,32484],{"class":73},[67,115463,2695],{"class":112},[67,115465,101935],{"class":77},[67,115467,96223],{"class":208},[67,115469,4459],{"class":77},[67,115471,115472,115475,115477],{"class":69,"line":33194},[67,115473,115474],{"class":77},"    env ",[67,115476,909],{"class":73},[67,115478,115479],{"class":77}," ReacherEnv()\n",[67,115481,115482,115485,115487,115490,115492,115494,115496],{"class":69,"line":33205},[67,115483,115484],{"class":77},"    obs, info ",[67,115486,909],{"class":73},[67,115488,115489],{"class":77}," env.reset(",[67,115491,115103],{"class":5935},[67,115493,909],{"class":73},[67,115495,1051],{"class":208},[67,115497,870],{"class":77},[67,115499,115500,115502,115504,115507],{"class":69,"line":33211},[67,115501,31836],{"class":208},[67,115503,864],{"class":77},[67,115505,115506],{"class":84},"\"initial obs shape:\"",[67,115508,115509],{"class":77},", obs.shape)\n",[67,115511,115512,115514,115516,115519],{"class":69,"line":33231},[67,115513,31836],{"class":208},[67,115515,864],{"class":77},[67,115517,115518],{"class":84},"\"initial info:\"",[67,115520,115521],{"class":77},", info)\n",[67,115523,115524],{"class":69,"line":33237},[67,115525,177],{"emptyLinePlaceholder":176},[67,115527,115528,115530,115532],{"class":69,"line":33248},[67,115529,110690],{"class":77},[67,115531,909],{"class":73},[67,115533,105298],{"class":208},[67,115535,115536,115538,115540,115542,115544,115546,115548],{"class":69,"line":33254},[67,115537,3921],{"class":73},[67,115539,32153],{"class":77},[67,115541,81],{"class":73},[67,115543,32980],{"class":208},[67,115545,864],{"class":77},[67,115547,1556],{"class":208},[67,115549,31323],{"class":77},[67,115551,115552,115554,115556],{"class":69,"line":33260},[67,115553,110759],{"class":77},[67,115555,909],{"class":73},[67,115557,115558],{"class":77}," env.action_space.sample()\n",[67,115560,115561,115564,115566],{"class":69,"line":33266},[67,115562,115563],{"class":77},"        obs, reward, terminated, truncated, info ",[67,115565,909],{"class":73},[67,115567,113952],{"class":77},[67,115569,115570,115572,115574],{"class":69,"line":33272},[67,115571,110834],{"class":77},[67,115573,10196],{"class":73},[67,115575,110839],{"class":77},[67,115577,115578,115580,115582,115584,115586,115589,115591,115593,115596,115598,115600,115603,115605,115607,115610,115612,115614,115616],{"class":69,"line":33278},[67,115579,32988],{"class":208},[67,115581,864],{"class":77},[67,115583,110868],{"class":84},[67,115585,110871],{"class":77},[67,115587,115588],{"class":84},"\"reward:\"",[67,115590,13153],{"class":77},[67,115592,32555],{"class":208},[67,115594,115595],{"class":77},"(reward, ",[67,115597,933],{"class":208},[67,115599,110882],{"class":77},[67,115601,115602],{"class":84},"\"distance:\"",[67,115604,13153],{"class":77},[67,115606,32555],{"class":208},[67,115608,115609],{"class":77},"(info[",[67,115611,115439],{"class":84},[67,115613,112739],{"class":77},[67,115615,933],{"class":208},[67,115617,31034],{"class":77},[67,115619,115620,115622,115625,115628],{"class":69,"line":33284},[67,115621,3218],{"class":73},[67,115623,115624],{"class":77}," terminated ",[67,115626,115627],{"class":73},"or",[67,115629,115630],{"class":77}," truncated:\n",[67,115632,115633],{"class":69,"line":33290},[67,115634,115635],{"class":73},"            break\n",[67,115637,115638],{"class":69,"line":33310},[67,115639,177],{"emptyLinePlaceholder":176},[67,115641,115642,115644,115646,115648,115650,115652,115654,115656],{"class":69,"line":33316},[67,115643,31836],{"class":208},[67,115645,864],{"class":77},[67,115647,110913],{"class":84},[67,115649,13153],{"class":77},[67,115651,32555],{"class":208},[67,115653,110920],{"class":77},[67,115655,933],{"class":208},[67,115657,31034],{"class":77},[67,115659,115660],{"class":69,"line":33332},[67,115661,177],{"emptyLinePlaceholder":176},[67,115663,115664],{"class":69,"line":33338},[67,115665,177],{"emptyLinePlaceholder":176},[67,115667,115668,115670,115672,115674,115676],{"class":69,"line":33352},[67,115669,2254],{"class":73},[67,115671,31757],{"class":208},[67,115673,102096],{"class":73},[67,115675,102099],{"class":84},[67,115677,4459],{"class":77},[67,115679,115680],{"class":69,"line":33358},[67,115681,102106],{"class":77},[19,115683,104107],{},[57,115685,115687],{"className":59,"code":115686,"language":61,"meta":62,"style":62},"touch ch8_gym_env.py\n",[64,115688,115689],{"__ignoreMap":62},[67,115690,115691,115693],{"class":69,"line":70},[67,115692,101820],{"class":112},[67,115694,115695],{"class":84}," ch8_gym_env.py\n",[19,115697,110981],{},[57,115699,115701],{"className":59,"code":115700,"language":61,"meta":62,"style":62},"python ch8_gym_env.py\n",[64,115702,115703],{"__ignoreMap":62},[67,115704,115705,115707],{"class":69,"line":70},[67,115706,30917],{"class":112},[67,115708,115695],{"class":84},[14,115710,102109],{"id":102109},[19,115712,115713],{},"继承 Gymnasium 环境：",[57,115715,115717],{"className":30915,"code":115716,"language":30917,"meta":62,"style":62},"class ReacherEnv(gym.Env):\n",[64,115718,115719],{"__ignoreMap":62},[67,115720,115721,115723,115725,115727,115729,115731,115733],{"class":69,"line":70},[67,115722,15411],{"class":73},[67,115724,114594],{"class":112},[67,115726,864],{"class":77},[67,115728,114077],{"class":112},[67,115730,240],{"class":77},[67,115732,114603],{"class":112},[67,115734,31323],{"class":77},[19,115736,115737],{},"这表示你在定义一个符合 Gymnasium 规范的环境。",[19,115739,115740],{},"初始化模型：",[57,115742,115744],{"className":30915,"code":115743,"language":30917,"meta":62,"style":62},"self.model = mujoco.MjModel.from_xml_string(XML)\nself.data = mujoco.MjData(self.model)\n",[64,115745,115746,115760],{"__ignoreMap":62},[67,115747,115748,115750,115752,115754,115756,115758],{"class":69,"line":70},[67,115749,31360],{"class":208},[67,115751,114654],{"class":77},[67,115753,909],{"class":73},[67,115755,101949],{"class":77},[67,115757,101851],{"class":208},[67,115759,870],{"class":77},[67,115761,115762,115764,115766,115768,115770,115772],{"class":69,"line":143},[67,115763,31360],{"class":208},[67,115765,114669],{"class":77},[67,115767,909],{"class":73},[67,115769,114674],{"class":77},[67,115771,31360],{"class":208},[67,115773,114679],{"class":77},[19,115775,115776,115777,115779],{},"这和前面章节一样，只是现在放到了类的 ",[64,115778,31366],{}," 里。",[19,115781,115782],{},"缓存 site ID：",[57,115784,115786],{"className":30915,"code":115785,"language":30917,"meta":62,"style":62},"self.tip_site_id = mujoco.mj_name2id(...)\nself.target_site_id = mujoco.mj_name2id(...)\n",[64,115787,115788,115802],{"__ignoreMap":62},[67,115789,115790,115792,115794,115796,115798,115800],{"class":69,"line":70},[67,115791,31360],{"class":208},[67,115793,114690],{"class":77},[67,115795,909],{"class":73},[67,115797,114695],{"class":77},[67,115799,90091],{"class":208},[67,115801,870],{"class":77},[67,115803,115804,115806,115808,115810,115812,115814],{"class":69,"line":143},[67,115805,31360],{"class":208},[67,115807,114711],{"class":77},[67,115809,909],{"class":73},[67,115811,114695],{"class":77},[67,115813,90091],{"class":208},[67,115815,870],{"class":77},[19,115817,115818],{},"不要每次 step 都重复查名字。初始化时查一次 ID，后面直接用 ID 读取数组更清晰。",[19,115820,115821],{},"reset：",[57,115823,115825],{"className":30915,"code":115824,"language":30917,"meta":62,"style":62},"def reset(self, *, seed: int | None = None, options: dict | None = None):\n",[64,115826,115827],{"__ignoreMap":62},[67,115828,115829,115831,115833,115835,115837,115839,115841,115843,115845,115847,115849,115851,115853,115855,115857,115859,115861],{"class":69,"line":70},[67,115830,32484],{"class":73},[67,115832,115059],{"class":112},[67,115834,115062],{"class":77},[67,115836,1312],{"class":73},[67,115838,115067],{"class":77},[67,115840,867],{"class":208},[67,115842,266],{"class":73},[67,115844,39470],{"class":208},[67,115846,14282],{"class":73},[67,115848,39470],{"class":208},[67,115850,115080],{"class":77},[67,115852,115083],{"class":208},[67,115854,266],{"class":73},[67,115856,39470],{"class":208},[67,115858,14282],{"class":73},[67,115860,39470],{"class":208},[67,115862,31323],{"class":77},[19,115864,115865,115867],{},[64,115866,70593],{}," 做四件事：",[815,115869,115870,115873,115876,115879],{},[818,115871,115872],{},"设置随机种子。",[818,115874,115875],{},"重置 MuJoCo data。",[818,115877,115878],{},"随机初始化关节角。",[818,115880,115881],{},"返回初始观测和 info。",[19,115883,115884],{},"step：",[57,115886,115888],{"className":30915,"code":115887,"language":30917,"meta":62,"style":62},"def step(self, action):\n",[64,115889,115890],{"__ignoreMap":62},[67,115891,115892,115894,115896],{"class":69,"line":70},[67,115893,32484],{"class":73},[67,115895,115224],{"class":112},[67,115897,115227],{"class":77},[19,115899,115900,115902],{},[64,115901,107671],{}," 做六件事：",[815,115904,115905,115908,115914,115917,115920,115923],{},[818,115906,115907],{},"检查并裁剪 action。",[818,115909,115910,115911,28922],{},"写入 ",[64,115912,115913],{},"self.data.ctrl",[818,115915,115916],{},"连续推进若干个 MuJoCo 物理步。",[818,115918,115919],{},"计算新观测。",[818,115921,115922],{},"计算奖励和结束条件。",[818,115924,115925],{},"返回 Gymnasium 标准五元组。",[14,115927,102245],{"id":102245},[57,115929,115931],{"className":30915,"code":115930,"language":30917,"meta":62,"style":62},"import gymnasium as gym\n",[64,115932,115933],{"__ignoreMap":62},[67,115934,115935,115937,115939,115941],{"class":69,"line":70},[67,115936,30929],{"class":73},[67,115938,114432],{"class":77},[67,115940,31920],{"class":73},[67,115942,114437],{"class":77},[19,115944,115945,115946,115948,115949,115952],{},"导入 Gymnasium，并起别名 ",[64,115947,114077],{},"。后面写 ",[64,115950,115951],{},"gym.Env"," 就表示 Gymnasium 的环境基类。",[57,115954,115956],{"className":30915,"code":115955,"language":30917,"meta":62,"style":62},"from gymnasium import spaces\n",[64,115957,115958],{"__ignoreMap":62},[67,115959,115960,115962,115964,115966],{"class":69,"line":70},[67,115961,31274],{"class":73},[67,115963,114432],{"class":77},[67,115965,30929],{"class":73},[67,115967,114464],{"class":77},[19,115969,115970,115971,115974],{},"导入空间定义工具。",[64,115972,115973],{},"spaces.Box"," 用来描述连续动作空间和连续观测空间。",[57,115976,115977],{"className":30915,"code":115716,"language":30917,"meta":62,"style":62},[64,115978,115979],{"__ignoreMap":62},[67,115980,115981,115983,115985,115987,115989,115991,115993],{"class":69,"line":70},[67,115982,15411],{"class":73},[67,115984,114594],{"class":112},[67,115986,864],{"class":77},[67,115988,114077],{"class":112},[67,115990,240],{"class":77},[67,115992,114603],{"class":112},[67,115994,31323],{"class":77},[19,115996,115997,115998,116001,116002,116004,116005,101555,116007,116009],{},"定义一个类，名字叫 ",[64,115999,116000],{},"ReacherEnv","。括号里的 ",[64,116003,115951],{}," 表示它继承 Gymnasium 环境基类。继承后，你需要实现 ",[64,116006,70593],{},[64,116008,107671],{}," 这两个核心方法。",[57,116011,116013],{"className":30915,"code":116012,"language":30917,"meta":62,"style":62},"metadata = {\"render_modes\": []}\n",[64,116014,116015],{"__ignoreMap":62},[67,116016,116017,116020,116022,116024,116026],{"class":69,"line":70},[67,116018,116019],{"class":77},"metadata ",[67,116021,909],{"class":73},[67,116023,5167],{"class":77},[67,116025,114617],{"class":84},[67,116027,114620],{"class":77},[19,116029,116030],{},"Gymnasium 环境可以声明支持哪些渲染模式。这里暂时不实现 render，所以写空列表。",[57,116032,116034],{"className":30915,"code":116033,"language":30917,"meta":62,"style":62},"def __init__(self) -> None:\n",[64,116035,116036],{"__ignoreMap":62},[67,116037,116038,116040,116042,116044,116046],{"class":69,"line":70},[67,116039,32484],{"class":73},[67,116041,31341],{"class":208},[67,116043,114633],{"class":77},[67,116045,96223],{"class":208},[67,116047,4459],{"class":77},[19,116049,116050,116052,116053,28922],{},[64,116051,31366],{}," 是类的初始化函数。创建环境时会自动调用，比如 ",[64,116054,116055],{},"env = ReacherEnv()",[57,116057,116059],{"className":30915,"code":116058,"language":30917,"meta":62,"style":62},"super().__init__()\n",[64,116060,116061],{"__ignoreMap":62},[67,116062,116063,116066,116068,116070],{"class":69,"line":70},[67,116064,116065],{"class":208},"super",[67,116067,17978],{"class":77},[67,116069,31366],{"class":208},[67,116071,2698],{"class":77},[19,116073,116074,116075,116077],{},"调用父类 ",[64,116076,115951],{}," 的初始化逻辑。写自定义 Gymnasium 环境时通常保留这行。",[57,116079,116080],{"className":30915,"code":115743,"language":30917,"meta":62,"style":62},[64,116081,116082,116096],{"__ignoreMap":62},[67,116083,116084,116086,116088,116090,116092,116094],{"class":69,"line":70},[67,116085,31360],{"class":208},[67,116087,114654],{"class":77},[67,116089,909],{"class":73},[67,116091,101949],{"class":77},[67,116093,101851],{"class":208},[67,116095,870],{"class":77},[67,116097,116098,116100,116102,116104,116106,116108],{"class":69,"line":143},[67,116099,31360],{"class":208},[67,116101,114669],{"class":77},[67,116103,909],{"class":73},[67,116105,114674],{"class":77},[67,116107,31360],{"class":208},[67,116109,114679],{"class":77},[19,116111,116112,116113,116115,116116,101555,116119,116122],{},"把 MuJoCo 模型和状态保存到 ",[64,116114,31360],{}," 上。",[64,116117,116118],{},"self.model",[64,116120,116121],{},"self.data"," 表示这个环境对象自己的模型和状态。",[57,116124,116125],{"className":30915,"code":115785,"language":30917,"meta":62,"style":62},[64,116126,116127,116141],{"__ignoreMap":62},[67,116128,116129,116131,116133,116135,116137,116139],{"class":69,"line":70},[67,116130,31360],{"class":208},[67,116132,114690],{"class":77},[67,116134,909],{"class":73},[67,116136,114695],{"class":77},[67,116138,90091],{"class":208},[67,116140,870],{"class":77},[67,116142,116143,116145,116147,116149,116151,116153],{"class":69,"line":143},[67,116144,31360],{"class":208},[67,116146,114711],{"class":77},[67,116148,909],{"class":73},[67,116150,114695],{"class":77},[67,116152,90091],{"class":208},[67,116154,870],{"class":77},[19,116156,116157,116158,101555,116161,116164],{},"提前查好 tip 和 target 的 site ID。这样 ",[64,116159,116160],{},"_get_obs",[64,116162,116163],{},"_get_reward"," 里就不用每次按名字查找。",[57,116166,116168],{"className":30915,"code":116167,"language":30917,"meta":62,"style":62},"self.frame_skip = 5\nself.max_steps = 200\nself.steps = 0\n",[64,116169,116170,116180,116190],{"__ignoreMap":62},[67,116171,116172,116174,116176,116178],{"class":69,"line":70},[67,116173,31360],{"class":208},[67,116175,114404],{"class":77},[67,116177,909],{"class":73},[67,116179,54964],{"class":208},[67,116181,116182,116184,116186,116188],{"class":69,"line":143},[67,116183,31360],{"class":208},[67,116185,114783],{"class":77},[67,116187,909],{"class":73},[67,116189,114788],{"class":208},[67,116191,116192,116194,116196,116198],{"class":69,"line":149},[67,116193,31360],{"class":208},[67,116195,114243],{"class":77},[67,116197,909],{"class":73},[67,116199,47870],{"class":208},[19,116201,116202,116205,116206,116209,116210,116213],{},[64,116203,116204],{},"frame_skip"," 表示一次环境 step 内部跑几个 MuJoCo 物理步。",[64,116207,116208],{},"max_steps"," 是一个 episode 最多运行多少步。",[64,116211,116212],{},"steps"," 记录当前 episode 已经走了多少步。",[57,116215,116216],{"className":30915,"code":114282,"language":30917,"meta":62,"style":62},[64,116217,116218],{"__ignoreMap":62},[67,116219,116220,116222,116224,116226,116228,116230,116232,116234,116236,116238,116240,116242,116244,116246,116248,116250,116252,116254,116256,116258],{"class":69,"line":70},[67,116221,31360],{"class":208},[67,116223,114291],{"class":77},[67,116225,909],{"class":73},[67,116227,114296],{"class":77},[67,116229,114299],{"class":5935},[67,116231,114302],{"class":73},[67,116233,102940],{"class":208},[67,116235,13153],{"class":77},[67,116237,114309],{"class":5935},[67,116239,909],{"class":73},[67,116241,102940],{"class":208},[67,116243,13153],{"class":77},[67,116245,96500],{"class":5935},[67,116247,909],{"class":73},[67,116249,864],{"class":77},[67,116251,939],{"class":208},[67,116253,114326],{"class":77},[67,116255,94037],{"class":5935},[67,116257,909],{"class":73},[67,116259,114333],{"class":77},[19,116261,116262,116263,116266,116267,101555,116270,116273],{},"定义动作空间。",[64,116264,116265],{},"shape=(2,)"," 表示动作是两个数，因为有两个 motor。",[64,116268,116269],{},"low=-1.0",[64,116271,116272],{},"high=1.0"," 表示每个动作值都限制在 -1 到 1。",[57,116275,116276],{"className":30915,"code":114343,"language":30917,"meta":62,"style":62},[64,116277,116278],{"__ignoreMap":62},[67,116279,116280,116282,116284,116286,116288,116290,116292,116294,116296,116298,116300,116302,116304,116306,116308,116310,116312,116314],{"class":69,"line":70},[67,116281,31360],{"class":208},[67,116283,114352],{"class":77},[67,116285,909],{"class":73},[67,116287,114296],{"class":77},[67,116289,114299],{"class":5935},[67,116291,114302],{"class":73},[67,116293,114363],{"class":77},[67,116295,114309],{"class":5935},[67,116297,909],{"class":73},[67,116299,114363],{"class":77},[67,116301,96500],{"class":5935},[67,116303,909],{"class":73},[67,116305,864],{"class":77},[67,116307,1303],{"class":208},[67,116309,114326],{"class":77},[67,116311,94037],{"class":5935},[67,116313,909],{"class":73},[67,116315,114333],{"class":77},[19,116317,116318,116319,116322,116323,116326],{},"定义观测空间。",[64,116320,116321],{},"shape=(10,)"," 表示观测是 10 个数。",[64,116324,116325],{},"np.inf"," 表示无穷大，这里表示不限制观测数值范围。",[57,116328,116330],{"className":30915,"code":116329,"language":30917,"meta":62,"style":62},"def _get_obs(self) -> np.ndarray:\n",[64,116331,116332],{"__ignoreMap":62},[67,116333,116334,116336,116338],{"class":69,"line":70},[67,116335,32484],{"class":73},[67,116337,114893],{"class":112},[67,116339,114896],{"class":77},[19,116341,116342,116343,116345],{},"定义内部函数，用来生成观测。函数名前面的 ",[64,116344,1848],{}," 是习惯写法，表示这是类内部使用的辅助函数。",[57,116347,116349],{"className":30915,"code":116348,"language":30917,"meta":62,"style":62},"tip = self.data.site_xpos[self.tip_site_id].copy()\ntarget = self.data.site_xpos[self.target_site_id].copy()\n",[64,116350,116351,116365],{"__ignoreMap":62},[67,116352,116353,116355,116357,116359,116361,116363],{"class":69,"line":70},[67,116354,112105],{"class":77},[67,116356,909],{"class":73},[67,116358,39410],{"class":208},[67,116360,114907],{"class":77},[67,116362,31360],{"class":208},[67,116364,114912],{"class":77},[67,116366,116367,116369,116371,116373,116375,116377],{"class":69,"line":143},[67,116368,112115],{"class":77},[67,116370,909],{"class":73},[67,116372,39410],{"class":208},[67,116374,114907],{"class":77},[67,116376,31360],{"class":208},[67,116378,114927],{"class":77},[19,116380,116381],{},"从 MuJoCo data 中读取末端点和目标点坐标。",[57,116383,116385],{"className":30915,"code":116384,"language":30917,"meta":62,"style":62},"obs = np.concatenate([self.data.qpos.copy(), self.data.qvel.copy(), tip, target])\nreturn obs.astype(np.float32)\n",[64,116386,116387,116403],{"__ignoreMap":62},[67,116388,116389,116391,116393,116395,116397,116399,116401],{"class":69,"line":70},[67,116390,111391],{"class":77},[67,116392,909],{"class":73},[67,116394,114936],{"class":77},[67,116396,31360],{"class":208},[67,116398,114941],{"class":77},[67,116400,31360],{"class":208},[67,116402,114946],{"class":77},[67,116404,116405,116407],{"class":69,"line":143},[67,116406,17763],{"class":73},[67,116408,114953],{"class":77},[19,116410,116411,116412,116415,116416,116418],{},"拼接观测，并转换成 ",[64,116413,116414],{},"float32","。很多强化学习库默认使用 ",[64,116417,116414],{},"，所以这里主动转换。",[57,116420,116421],{"className":30915,"code":115824,"language":30917,"meta":62,"style":62},[64,116422,116423],{"__ignoreMap":62},[67,116424,116425,116427,116429,116431,116433,116435,116437,116439,116441,116443,116445,116447,116449,116451,116453,116455,116457],{"class":69,"line":70},[67,116426,32484],{"class":73},[67,116428,115059],{"class":112},[67,116430,115062],{"class":77},[67,116432,1312],{"class":73},[67,116434,115067],{"class":77},[67,116436,867],{"class":208},[67,116438,266],{"class":73},[67,116440,39470],{"class":208},[67,116442,14282],{"class":73},[67,116444,39470],{"class":208},[67,116446,115080],{"class":77},[67,116448,115083],{"class":208},[67,116450,266],{"class":73},[67,116452,39470],{"class":208},[67,116454,14282],{"class":73},[67,116456,39470],{"class":208},[67,116458,31323],{"class":77},[19,116460,116461,116462,116464,116465,116468],{},"定义 reset。",[64,116463,115103],{}," 用来控制随机数，保证实验可以复现。",[64,116466,116467],{},"options"," 用来接收额外配置，本章暂时不用。",[57,116470,116472],{"className":30915,"code":116471,"language":30917,"meta":62,"style":62},"super().reset(seed=seed)\n",[64,116473,116474],{"__ignoreMap":62},[67,116475,116476,116478,116480,116482,116484],{"class":69,"line":70},[67,116477,116065],{"class":208},[67,116479,115100],{"class":77},[67,116481,115103],{"class":5935},[67,116483,909],{"class":73},[67,116485,115108],{"class":77},[19,116487,116488,116489,116492],{},"把随机种子交给 Gymnasium 父类处理。之后可以使用 ",[64,116490,116491],{},"self.np_random"," 生成可复现的随机数。",[57,116494,116496],{"className":30915,"code":116495,"language":30917,"meta":62,"style":62},"mujoco.mj_resetData(self.model, self.data)\n",[64,116497,116498],{"__ignoreMap":62},[67,116499,116500,116503,116505,116507,116509],{"class":69,"line":70},[67,116501,116502],{"class":77},"mujoco.mj_resetData(",[67,116504,31360],{"class":208},[67,116506,115118],{"class":77},[67,116508,31360],{"class":208},[67,116510,115123],{"class":77},[19,116512,116513],{},"把 MuJoCo 状态重置到默认状态。",[57,116515,116517],{"className":30915,"code":116516,"language":30917,"meta":62,"style":62},"self.data.qpos[:] = self.np_random.uniform(low=-0.1, high=0.1, size=self.model.nq)\n",[64,116518,116519],{"__ignoreMap":62},[67,116520,116521,116523,116525,116527,116529,116531,116533,116535,116537,116539,116541,116543,116545,116547,116549,116551,116553],{"class":69,"line":70},[67,116522,31360],{"class":208},[67,116524,115134],{"class":77},[67,116526,909],{"class":73},[67,116528,39410],{"class":208},[67,116530,115141],{"class":77},[67,116532,114299],{"class":5935},[67,116534,114302],{"class":73},[67,116536,86747],{"class":208},[67,116538,13153],{"class":77},[67,116540,114309],{"class":5935},[67,116542,909],{"class":73},[67,116544,86747],{"class":208},[67,116546,13153],{"class":77},[67,116548,32033],{"class":5935},[67,116550,909],{"class":73},[67,116552,31360],{"class":208},[67,116554,115166],{"class":77},[19,116556,115878,116557,116560,116561,116564,116565,116567],{},[64,116558,116559],{},"[:]"," 表示修改整个数组。",[64,116562,116563],{},"uniform(low=-0.1, high=0.1, size=self.model.nq)"," 表示生成 ",[64,116566,102687],{}," 个随机数，每个数在 -0.1 到 0.1 之间。",[57,116569,116571],{"className":30915,"code":116570,"language":30917,"meta":62,"style":62},"self.data.qvel[:] = 0.0\n",[64,116572,116573],{"__ignoreMap":62},[67,116574,116575,116577,116579,116581],{"class":69,"line":70},[67,116576,31360],{"class":208},[67,116578,115173],{"class":77},[67,116580,909],{"class":73},[67,116582,105298],{"class":208},[19,116584,116585],{},"把所有速度清零。也就是每次 reset 时，机械臂从静止开始。",[57,116587,116589],{"className":30915,"code":116588,"language":30917,"meta":62,"style":62},"self.steps = 0\nreturn self._get_obs(), {}\n",[64,116590,116591,116601],{"__ignoreMap":62},[67,116592,116593,116595,116597,116599],{"class":69,"line":70},[67,116594,31360],{"class":208},[67,116596,114243],{"class":77},[67,116598,909],{"class":73},[67,116600,47870],{"class":208},[67,116602,116603,116605,116607],{"class":69,"line":143},[67,116604,17763],{"class":73},[67,116606,39410],{"class":208},[67,116608,115213],{"class":77},[19,116610,116611],{},"步数清零，并返回初始观测和空 info。Gymnasium 要求 reset 返回两个值。",[57,116613,116614],{"className":30915,"code":115887,"language":30917,"meta":62,"style":62},[64,116615,116616],{"__ignoreMap":62},[67,116617,116618,116620,116622],{"class":69,"line":70},[67,116619,32484],{"class":73},[67,116621,115224],{"class":112},[67,116623,115227],{"class":77},[19,116625,116626],{},"定义 step。外部算法传入动作，环境返回下一步结果。",[57,116628,116630],{"className":30915,"code":116629,"language":30917,"meta":62,"style":62},"action = np.asarray(action, dtype=np.float32)\n",[64,116631,116632],{"__ignoreMap":62},[67,116633,116634,116636,116638,116640,116642,116644],{"class":69,"line":70},[67,116635,107979],{"class":77},[67,116637,909],{"class":73},[67,116639,115236],{"class":77},[67,116641,94037],{"class":5935},[67,116643,909],{"class":73},[67,116645,114333],{"class":77},[19,116647,116648,116649,28922],{},"把传入的 action 转成 NumPy 数组，并指定类型为 ",[64,116650,116414],{},[57,116652,116654],{"className":30915,"code":116653,"language":30917,"meta":62,"style":62},"action = np.clip(action, self.action_space.low, self.action_space.high)\n",[64,116655,116656],{"__ignoreMap":62},[67,116657,116658,116660,116662,116664,116666,116668,116670],{"class":69,"line":70},[67,116659,107979],{"class":77},[67,116661,909],{"class":73},[67,116663,107984],{"class":77},[67,116665,31360],{"class":208},[67,116667,115255],{"class":77},[67,116669,31360],{"class":208},[67,116671,115260],{"class":77},[19,116673,116674],{},"把动作裁剪到动作空间允许范围内，避免传入过大控制值。",[57,116676,116678],{"className":30915,"code":116677,"language":30917,"meta":62,"style":62},"self.data.ctrl[:] = action\n",[64,116679,116680],{"__ignoreMap":62},[67,116681,116682,116684,116686,116688],{"class":69,"line":70},[67,116683,31360],{"class":208},[67,116685,115271],{"class":77},[67,116687,909],{"class":73},[67,116689,108007],{"class":77},[19,116691,116692],{},"把动作写入 MuJoCo 控制数组。因为这个环境有两个 actuator，所以 action 也必须是两个数。",[57,116694,116696],{"className":30915,"code":116695,"language":30917,"meta":62,"style":62},"for _ in range(self.frame_skip):\n    mujoco.mj_step(self.model, self.data)\n",[64,116697,116698,116714],{"__ignoreMap":62},[67,116699,116700,116702,116704,116706,116708,116710,116712],{"class":69,"line":70},[67,116701,74],{"class":73},[67,116703,102038],{"class":77},[67,116705,81],{"class":73},[67,116707,32980],{"class":208},[67,116709,864],{"class":77},[67,116711,31360],{"class":208},[67,116713,115292],{"class":77},[67,116715,116716,116719,116721,116723,116725],{"class":69,"line":143},[67,116717,116718],{"class":77},"    mujoco.mj_step(",[67,116720,31360],{"class":208},[67,116722,115118],{"class":77},[67,116724,31360],{"class":208},[67,116726,115123],{"class":77},[19,116728,116729,116730,116733,116734,116736,116737,28922],{},"一次环境 step 内部推进多个 MuJoCo 物理步。这里 ",[64,116731,116732],{},"frame_skip=5","，所以外部调用一次 ",[64,116735,114414],{},"，内部实际执行 5 次 ",[64,116738,101752],{},[57,116740,116742],{"className":30915,"code":116741,"language":30917,"meta":62,"style":62},"self.steps += 1\n",[64,116743,116744],{"__ignoreMap":62},[67,116745,116746,116748,116750,116752],{"class":69,"line":70},[67,116747,31360],{"class":208},[67,116749,114243],{"class":77},[67,116751,10196],{"class":73},[67,116753,56236],{"class":208},[19,116755,116756],{},"环境步数加 1。注意这里加的是环境 step，不是 MuJoCo 物理步。",[57,116758,116760],{"className":30915,"code":116759,"language":30917,"meta":62,"style":62},"obs = self._get_obs()\nreward = self._get_reward()\n",[64,116761,116762,116772],{"__ignoreMap":62},[67,116763,116764,116766,116768,116770],{"class":69,"line":70},[67,116765,111391],{"class":77},[67,116767,909],{"class":73},[67,116769,39410],{"class":208},[67,116771,115334],{"class":77},[67,116773,116774,116776,116778,116780],{"class":69,"line":143},[67,116775,111542],{"class":77},[67,116777,909],{"class":73},[67,116779,39410],{"class":208},[67,116781,115345],{"class":77},[19,116783,116784],{},"计算新的观测和奖励。",[57,116786,116788],{"className":30915,"code":116787,"language":30917,"meta":62,"style":62},"dist = float(np.linalg.norm(tip - target))\n",[64,116789,116790],{"__ignoreMap":62},[67,116791,116792,116794,116796,116798,116800,116802],{"class":69,"line":70},[67,116793,112133],{"class":77},[67,116795,909],{"class":73},[67,116797,110334],{"class":208},[67,116799,115388],{"class":77},[67,116801,1389],{"class":73},[67,116803,115393],{"class":77},[19,116805,116806],{},"计算末端到目标的距离，并转换成 Python float。",[57,116808,116809],{"className":30915,"code":114214,"language":30917,"meta":62,"style":62},[64,116810,116811,116823],{"__ignoreMap":62},[67,116812,116813,116815,116817,116819,116821],{"class":69,"line":70},[67,116814,114221],{"class":77},[67,116816,909],{"class":73},[67,116818,114226],{"class":77},[67,116820,1766],{"class":73},[67,116822,114231],{"class":208},[67,116824,116825,116827,116829,116831,116833,116835,116837],{"class":69,"line":143},[67,116826,114236],{"class":77},[67,116828,909],{"class":73},[67,116830,39410],{"class":208},[67,116832,114243],{"class":77},[67,116834,2433],{"class":73},[67,116836,39410],{"class":208},[67,116838,114250],{"class":77},[19,116840,116841],{},"如果距离小于 0.05，任务成功结束。若步数达到上限，episode 被截断。",[57,116843,116845],{"className":30915,"code":116844,"language":30917,"meta":62,"style":62},"info = {\"distance\": dist}\nreturn obs, reward, terminated, truncated, info\n",[64,116846,116847,116860],{"__ignoreMap":62},[67,116848,116849,116852,116854,116856,116858],{"class":69,"line":70},[67,116850,116851],{"class":77},"info ",[67,116853,909],{"class":73},[67,116855,5167],{"class":77},[67,116857,115439],{"class":84},[67,116859,115442],{"class":77},[67,116861,116862,116864],{"class":69,"line":143},[67,116863,17763],{"class":73},[67,116865,115449],{"class":77},[19,116867,116868,116871],{},[64,116869,116870],{},"info"," 用来放调试信息。最后返回 Gymnasium 标准五元组。",[57,116873,116875],{"className":30915,"code":116874,"language":30917,"meta":62,"style":62},"env = ReacherEnv()\nobs, info = env.reset(seed=0)\n",[64,116876,116877,116886],{"__ignoreMap":62},[67,116878,116879,116882,116884],{"class":69,"line":70},[67,116880,116881],{"class":77},"env ",[67,116883,909],{"class":73},[67,116885,115479],{"class":77},[67,116887,116888,116890,116892,116894,116896,116898,116900],{"class":69,"line":143},[67,116889,113937],{"class":77},[67,116891,909],{"class":73},[67,116893,115489],{"class":77},[67,116895,115103],{"class":5935},[67,116897,909],{"class":73},[67,116899,1051],{"class":208},[67,116901,870],{"class":77},[19,116903,116904,116905,116908],{},"创建环境并重置。",[64,116906,116907],{},"seed=0"," 表示使用固定随机种子，方便复现实验。",[57,116910,116912],{"className":30915,"code":116911,"language":30917,"meta":62,"style":62},"action = env.action_space.sample()\n",[64,116913,116914],{"__ignoreMap":62},[67,116915,116916,116918,116920],{"class":69,"line":70},[67,116917,107979],{"class":77},[67,116919,909],{"class":73},[67,116921,115558],{"class":77},[19,116923,116924],{},"从动作空间里随机采样一个动作。这里还没有训练策略，所以用随机动作测试环境是否能跑。",[803,116926,102853],{"id":102852},[19,116928,106021],{},[57,116930,116933],{"className":116931,"code":116932,"language":5906,"meta":62},[5904],"initial obs shape: (10,)\ninitial info: {}\nstep: 0 reward: ...\n...\ntotal_reward: ...\n",[64,116934,116932],{"__ignoreMap":62},[19,116936,116937],{},"这个环境已经具备强化学习环境的基本结构。",[19,116939,116940],{},"主函数里使用随机动作：",[57,116942,116943],{"className":30915,"code":116911,"language":30917,"meta":62,"style":62},[64,116944,116945],{"__ignoreMap":62},[67,116946,116947,116949,116951],{"class":69,"line":70},[67,116948,107979],{"class":77},[67,116950,909],{"class":73},[67,116952,115558],{"class":77},[19,116954,116955],{},"所以每次运行的 reward 可能不同。这里的目标不是训练成功，而是验证环境接口能正常工作。",[803,116957,102885],{"id":102884},[815,116959,116960,116963,116969,116978,116987,116996,117002],{},[818,116961,116962],{},"运行程序。",[818,116964,116965,116966,28922],{},"确认 ",[64,116967,116968],{},"obs.shape == (10,)",[818,116970,111718,116971,116974,116975,28922],{},[64,116972,116973],{},"env.action_space","，应类似 ",[64,116976,116977],{},"Box(-1.0, 1.0, (2,), float32)",[818,116979,106122,116980,116983,116984,28922],{},[64,116981,116982],{},"self.max_steps = 10","，确认环境会更快 ",[64,116985,116986],{},"truncated=True",[818,116988,102948,116989,102951,116992,116995],{},[64,116990,116991],{},"terminated = dist \u003C 0.05",[64,116993,116994],{},"dist \u003C 0.2","，观察是否更容易结束。",[818,116997,102948,116998,117001],{},[64,116999,117000],{},"self.frame_skip = 1","，观察每次 step 的物理推进变少。",[818,117003,117004,117005,117007,117008,117011],{},"在 ",[64,117006,116870],{}," 里加入 ",[64,117009,117010],{},"\"is_success\": dist \u003C 0.05","，模拟常见机器人环境输出。",[803,117013,102990],{"id":102989},[14,117015,117017],{"id":117016},"gymnasium-返回值数量不匹配","Gymnasium 返回值数量不匹配",[19,117019,117020,117021,117023],{},"Gymnasium 的 ",[64,117022,107671],{}," 返回 5 个值:",[57,117025,117027],{"className":30915,"code":117026,"language":30917,"meta":62,"style":62},"obs, reward, terminated, truncated, info\n",[64,117028,117029],{"__ignoreMap":62},[67,117030,117031],{"class":69,"line":70},[67,117032,117026],{"class":77},[19,117034,117035],{},"不是旧 Gym 的 4 个值。",[14,117037,117039,117042],{"id":117038},"datactrl-action-维度错误",[64,117040,117041],{},"data.ctrl[:] = action"," 维度错误",[19,117044,103060],{},[57,117046,117048],{"className":30915,"code":117047,"language":30917,"meta":62,"style":62},"print(self.model.nu)\nprint(action.shape)\n",[64,117049,117050,117061],{"__ignoreMap":62},[67,117051,117052,117054,117056,117058],{"class":69,"line":70},[67,117053,30952],{"class":208},[67,117055,864],{"class":77},[67,117057,31360],{"class":208},[67,117059,117060],{"class":77},".model.nu)\n",[67,117062,117063,117065],{"class":69,"line":143},[67,117064,30952],{"class":208},[67,117066,117067],{"class":77},"(action.shape)\n",[19,117069,117070],{},"两者必须匹配。",[14,117072,117074],{"id":117073},"reset-后-site-坐标不更新","reset 后 site 坐标不更新",[19,117076,102999],{},[57,117078,117080],{"className":30915,"code":117079,"language":30917,"meta":62,"style":62},"mujoco.mj_forward(self.model, self.data)\n",[64,117081,117082],{"__ignoreMap":62},[67,117083,117084,117087,117089,117091,117093],{"class":69,"line":70},[67,117085,117086],{"class":77},"mujoco.mj_forward(",[67,117088,31360],{"class":208},[67,117090,115118],{"class":77},[67,117092,31360],{"class":208},[67,117094,115123],{"class":77},[14,117096,117098,117100],{"id":117097},"observation_space-维度和-obs-不一致",[64,117099,114137],{}," 维度和 obs 不一致",[19,117102,103112],{},[57,117104,117106],{"className":30915,"code":117105,"language":30917,"meta":62,"style":62},"obs = self._get_obs()\nprint(obs.shape)\nprint(self.observation_space.shape)\n",[64,117107,117108,117118,117125],{"__ignoreMap":62},[67,117109,117110,117112,117114,117116],{"class":69,"line":70},[67,117111,111391],{"class":77},[67,117113,909],{"class":73},[67,117115,39410],{"class":208},[67,117117,115334],{"class":77},[67,117119,117120,117122],{"class":69,"line":143},[67,117121,30952],{"class":208},[67,117123,117124],{"class":77},"(obs.shape)\n",[67,117126,117127,117129,117131,117133],{"class":69,"line":149},[67,117128,30952],{"class":208},[67,117130,864],{"class":77},[67,117132,31360],{"class":208},[67,117134,117135],{"class":77},".observation_space.shape)\n",[19,117137,117138],{},"两者必须一致。本章观测是：",[57,117140,117143],{"className":117141,"code":117142,"language":5906,"meta":62},[5904],"qpos 2 + qvel 2 + tip 3 + target 3 = 10\n",[64,117144,117142],{"__ignoreMap":62},[14,117146,117148],{"id":117147},"action-超过范围","action 超过范围",[19,117150,117151],{},"外部算法可能传入超过 action space 的值，所以 step 里要写：",[57,117153,117154],{"className":30915,"code":116653,"language":30917,"meta":62,"style":62},[64,117155,117156],{"__ignoreMap":62},[67,117157,117158,117160,117162,117164,117166,117168,117170],{"class":69,"line":70},[67,117159,107979],{"class":77},[67,117161,909],{"class":73},[67,117163,107984],{"class":77},[67,117165,31360],{"class":208},[67,117167,115255],{"class":77},[67,117169,31360],{"class":208},[67,117171,115260],{"class":77},[19,117173,117174,117175,28922],{},"这能避免无效动作直接写入 ",[64,117176,101613],{},[14,117178,117180],{"id":117179},"忘记返回-info","忘记返回 info",[19,117182,117020,117183,101555,117185,117187],{},[64,117184,70593],{},[64,117186,107671],{}," 都会返回 info：",[57,117189,117190],{"className":30915,"code":113930,"language":30917,"meta":62,"style":62},[64,117191,117192,117200],{"__ignoreMap":62},[67,117193,117194,117196,117198],{"class":69,"line":70},[67,117195,113937],{"class":77},[67,117197,909],{"class":73},[67,117199,113942],{"class":77},[67,117201,117202,117204,117206],{"class":69,"line":143},[67,117203,113947],{"class":77},[67,117205,909],{"class":73},[67,117207,113952],{"class":77},[19,117209,117210,117211,28922],{},"即使暂时没有额外信息，也返回 ",[64,117212,32996],{},[803,117214,117216],{"id":117215},"_8下一步怎么接强化学习","8.下一步怎么接强化学习",[19,117218,117219],{},"这个环境已经可以被很多强化学习库包装，但正式训练前还应补充：",[815,117221,117222,117225,117228,117231,117234,117237],{},[818,117223,117224],{},"更稳定的 reward。",[818,117226,117227],{},"合理的 episode 长度。",[818,117229,117230],{},"可重复的随机目标采样。",[818,117232,117233],{},"render 接口。",[818,117235,117236],{},"环境注册代码。",[818,117238,117239],{},"单元测试，检查 reset\u002Fstep 返回值维度和 dtype。",[19,117241,117242],{},"如果只是自己写训练循环，最小形式是：",[57,117244,117246],{"className":30915,"code":117245,"language":30917,"meta":62,"style":62},"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",[64,117247,117248,117256,117272,117276,117292,117301,117310,117320],{"__ignoreMap":62},[67,117249,117250,117252,117254],{"class":69,"line":70},[67,117251,116881],{"class":77},[67,117253,909],{"class":73},[67,117255,115479],{"class":77},[67,117257,117258,117260,117262,117264,117266,117268,117270],{"class":69,"line":143},[67,117259,113937],{"class":77},[67,117261,909],{"class":73},[67,117263,115489],{"class":77},[67,117265,115103],{"class":5935},[67,117267,909],{"class":73},[67,117269,1051],{"class":208},[67,117271,870],{"class":77},[67,117273,117274],{"class":69,"line":149},[67,117275,177],{"emptyLinePlaceholder":176},[67,117277,117278,117280,117282,117284,117286,117288,117290],{"class":69,"line":155},[67,117279,74],{"class":73},[67,117281,102038],{"class":77},[67,117283,81],{"class":73},[67,117285,32980],{"class":208},[67,117287,864],{"class":77},[67,117289,7129],{"class":208},[67,117291,31323],{"class":77},[67,117293,117294,117297,117299],{"class":69,"line":161},[67,117295,117296],{"class":77},"    action ",[67,117298,909],{"class":73},[67,117300,115558],{"class":77},[67,117302,117303,117306,117308],{"class":69,"line":167},[67,117304,117305],{"class":77},"    obs, reward, terminated, truncated, info ",[67,117307,909],{"class":73},[67,117309,113952],{"class":77},[67,117311,117312,117314,117316,117318],{"class":69,"line":173},[67,117313,3821],{"class":73},[67,117315,115624],{"class":77},[67,117317,115627],{"class":73},[67,117319,115630],{"class":77},[67,117321,117322,117325,117327],{"class":69,"line":180},[67,117323,117324],{"class":77},"        obs, info ",[67,117326,909],{"class":73},[67,117328,113942],{"class":77},[803,117330,117332],{"id":117331},"_9本章小结","9.本章小结",[19,117334,117335],{},"Gymnasium 封装并没有改变 MuJoCo 的本质。它只是把前面章节的流程整理成标准接口：",[57,117337,117340],{"className":117338,"code":117339,"language":5906,"meta":62},[5904],"reset:\n  mj_resetData → 设置初始状态 → mj_forward → obs\n\nstep:\n  action → data.ctrl → mj_step → obs\u002Freward\u002Fterminated\u002Ftruncated\u002Finfo\n",[64,117341,117339],{"__ignoreMap":62},[19,117343,117344],{},"掌握这个接口后，你就可以把 MuJoCo 模型接入强化学习、模仿学习和数据采集流程。",[779,117346,117347],{},"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":62,"searchDepth":143,"depth":143,"links":117349},[117350,117351,117352,117359,117363,117364,117365,117375,117376],{"id":101183,"depth":143,"text":101184},{"id":101306,"depth":143,"text":101307},{"id":101581,"depth":143,"text":101582,"children":117353},[117354,117356,117358],{"id":114161,"depth":149,"text":117355},"terminated 和 truncated 的区别",{"id":114264,"depth":149,"text":117357},"observation_space 和 action_space",{"id":114391,"depth":149,"text":114392},{"id":101789,"depth":143,"text":101790,"children":117360},[117361,117362],{"id":102109,"depth":149,"text":102109},{"id":102245,"depth":149,"text":102245},{"id":102852,"depth":143,"text":102853},{"id":102884,"depth":143,"text":102885},{"id":102989,"depth":143,"text":102990,"children":117366},[117367,117368,117370,117371,117373,117374],{"id":117016,"depth":149,"text":117017},{"id":117038,"depth":149,"text":117369},"data.ctrl[:] = action 维度错误",{"id":117073,"depth":149,"text":117074},{"id":117097,"depth":149,"text":117372},"observation_space 维度和 obs 不一致",{"id":117147,"depth":149,"text":117148},{"id":117179,"depth":149,"text":117180},{"id":117215,"depth":143,"text":117216},{"id":117331,"depth":143,"text":117332},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch8-gymnasium",{"title":113914,"description":62},"wiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础","KSF1Xw_aHmvJI12WCxfcd5RyipozYaMsgXOORoNp9lo",{"id":117383,"title":117384,"body":117385,"description":117808,"extension":787,"meta":117809,"navigation":176,"path":117810,"seo":117811,"stem":117812,"__hash__":117813},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Findex.md","mujoco学习",{"type":7,"value":117386,"toc":117798},[117387,117391,117394,117397,117417,117423,117429,117439,117442,117445,117465,117468,117472,117475,117481,117484,117498,117501,117504,117578,117581,117587,117590,117613,117616,117666,117669,117675,117678,117681,117684,117703,117706,117712,117715,117718,117721,117741,117744,117747,117750,117795],[10,117388,117390],{"id":117389},"mujoco-学习","MuJoCo 学习",[19,117392,117393],{},"初版",[19,117395,117396],{},"这套笔记面向从零开始学习 MuJoCo 的工程复现路线。目标不是只让你复制代码跑通，而是让你看懂：",[815,117398,117399,117402,117405,117414],{},[818,117400,117401],{},"MuJoCo 模型文件在描述什么。",[818,117403,117404],{},"Python 代码怎样读取和推进仿真。",[818,117406,117407,1072,117409,1072,117411,117413],{},[64,117408,104567],{},[64,117410,104897],{},[64,117412,104900],{}," 这些数组为什么重要。",[818,117415,117416],{},"如何从一个会掉落的小方块，逐步搭出 Cartpole、Reacher 和 Gymnasium 风格环境。",[19,117418,117419,117420,117422],{},"默认环境为 Fedora 44、Python >= 3.10、",[64,117421,101564],{}," 官方 Python bindings。",[19,117424,117425,117426,117428],{},"注意：本文禁止使用 ",[64,117427,101549],{},"。所有示例均使用：",[57,117430,117431],{"className":30915,"code":102115,"language":30917,"meta":62,"style":62},[64,117432,117433],{"__ignoreMap":62},[67,117434,117435,117437],{"class":69,"line":70},[67,117436,30929],{"class":73},[67,117438,101838],{"class":77},[803,117440,117441],{"id":117441},"适合谁阅读",[19,117443,117444],{},"如果你符合下面任意一种情况，可以从第 1 章开始按顺序学：",[815,117446,117447,117450,117453,117456],{},[818,117448,117449],{},"没学过 MuJoCo，只会一点 Python。",[818,117451,117452],{},"看过强化学习环境，但不知道 MuJoCo 环境是怎么写出来的。",[818,117454,117455],{},"想复现机器人控制、模仿学习、VLA 数据采集，但对仿真模型没有概念。",[818,117457,117458,117459,117461,117462,117464],{},"以前接触过 ",[64,117460,101549],{},"，现在想迁移到官方 ",[64,117463,101558],{}," Python bindings。",[19,117466,117467],{},"阅读前只需要知道 Python 的变量、函数、列表或数组大概是什么。NumPy 不熟也没关系，教程会尽量解释每个数组的含义。",[803,117469,117471],{"id":117470},"mujoco-到底是什么","MuJoCo 到底是什么",[19,117473,117474],{},"MuJoCo 是一个物理仿真引擎。你可以把它理解成一个“机器人和物体的虚拟实验室”：",[57,117476,117479],{"className":117477,"code":117478,"language":5906,"meta":62},[5904],"你写 XML 描述世界里有什么\n          ↓\nMuJoCo 编译成物理模型\n          ↓\nPython 程序给关节或电机输入控制量\n          ↓\nMuJoCo 按物理规律更新位置、速度、碰撞、力\n          ↓\n你读取状态、计算奖励、保存数据或训练策略\n",[64,117480,117478],{"__ignoreMap":62},[19,117482,117483],{},"在机器人、强化学习和具身智能里，MuJoCo 常用于：",[815,117485,117486,117489,117492,117495],{},[818,117487,117488],{},"搭建机械臂、小车、摆杆、多足机器人等模型。",[818,117490,117491],{},"快速测试控制算法，不必一开始就上真实机器人。",[818,117493,117494],{},"生成强化学习环境。",[818,117496,117497],{},"采集状态、动作、图像、奖励等训练数据。",[803,117499,117500],{"id":117500},"学习前的心智模型",[19,117502,117503],{},"新手最容易卡在“XML 和 Python 代码到底谁负责什么”。可以先记住这个分工：",[998,117505,117506,117518],{},[1001,117507,117508],{},[1004,117509,117510,117513,117516],{},[1007,117511,117512],{"align":24453},"部分",[1007,117514,117515],{"align":24453},"负责什么",[1007,117517,21904],{"align":24453},[1044,117519,117520,117531,117543,117555,117567],{},[1004,117521,117522,117525,117528],{},[1049,117523,117524],{"align":24453},"MJCF XML",[1049,117526,117527],{"align":24453},"定义世界和机器人结构",[1049,117529,117530],{"align":24453},"地面、盒子、关节、电机、摄像头",[1004,117532,117533,117537,117540],{},[1049,117534,117535],{"align":24453},[64,117536,101246],{},[1049,117538,117539],{"align":24453},"编译后的静态模型",[1049,117541,117542],{"align":24453},"有几个关节、有几个电机、时间步长是多少",[1004,117544,117545,117549,117552],{},[1049,117546,117547],{"align":24453},[64,117548,101256],{},[1049,117550,117551],{"align":24453},"运行中的动态状态",[1049,117553,117554],{"align":24453},"当前时间、位置、速度、电机输入",[1004,117556,117557,117561,117564],{},[1049,117558,117559],{"align":24453},[64,117560,101752],{},[1049,117562,117563],{"align":24453},"推进一步物理仿真",[1049,117565,117566],{"align":24453},"根据重力、力、碰撞更新状态",[1004,117568,117569,117572,117575],{},[1049,117570,117571],{"align":24453},"Viewer \u002F Renderer",[1049,117573,117574],{"align":24453},"把仿真显示出来",[1049,117576,117577],{"align":24453},"打开窗口或保存图片",[19,117579,117580],{},"一句话总结：",[57,117582,117585],{"className":117583,"code":117584,"language":5906,"meta":62},[5904],"XML 决定“有什么”，MjModel 记住“结构”，MjData 记录“现在怎样”，mj_step 让时间往前走。\n",[64,117586,117584],{"__ignoreMap":62},[19,117588,117589],{},"参考来源：",[1863,117591,117592,117599,117606],{},[818,117593,117594,117595],{},"MuJoCo Python 官方文档：",[28,117596,117597],{"href":117597,"rel":117598},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Fpython.html",[32],[818,117600,117601,117602],{},"MuJoCo XML Reference：",[28,117603,117604],{"href":117604,"rel":117605},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002FXMLreference.html",[32],[818,117607,117608,117609],{},"MuJoCo Overview：",[28,117610,117611],{"href":117611,"rel":117612},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Foverview.html",[32],[803,117614,117615],{"id":117615},"章节目录",[815,117617,117618,117624,117630,117636,117642,117648,117654,117660],{},[818,117619,117620],{},[28,117621,117623],{"href":117622},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch1-huan-jing-an-zhuang-yu-di-yi-ge-mujoco-cheng-xu","环境安装与第一个 MuJoCo 程序",[818,117625,117626],{},[28,117627,117629],{"href":117628},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch2-xml-yu-mjcf-wu-li-jian-mo-ji-chu","XML 与 MJCF 物理建模基础",[818,117631,117632],{},[28,117633,117635],{"href":117634},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch3-python-kong-zhi-jie-kou","Python 控制接口：读取状态与推进仿真",[818,117637,117638],{},[28,117639,117641],{"href":117640},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch4-guan-jie-actuator-yu-li-kong-zhi","关节、Actuator 与力控制",[818,117643,117644],{},[28,117645,117647],{"href":117646},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch5-viewer-yu-renderer","Viewer 可视化与 Renderer 离屏渲染",[818,117649,117650],{},[28,117651,117653],{"href":117652},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch6-cartpole-kong-zhi-ren-wu","控制任务：Cartpole",[818,117655,117656],{},[28,117657,117659],{"href":117658},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch7-reacher-kong-zhi-ren-wu","控制任务：Reacher 机械臂到达目标",[818,117661,117662],{},[28,117663,117665],{"href":117664},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch8-gymnasium-jie-kou-ji-chu","Gymnasium 风格强化学习接口基础",[803,117667,117668],{"id":117668},"推荐学习路线",[57,117670,117673],{"className":117671,"code":117672,"language":5906,"meta":62},[5904],"环境安装\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",[64,117674,117672],{"__ignoreMap":62},[19,117676,117677],{},"不要跳过第 1 到第 4 章。后面的 Cartpole、Reacher 和 Gymnasium 环境，本质上都是在反复使用前面这几个核心概念。",[803,117679,117680],{"id":117680},"建议的目录结构",[19,117682,117683],{},"为了避免代码散落，建议你在任意工作目录下新建一个学习文件夹：",[57,117685,117687],{"className":59,"code":117686,"language":61,"meta":62,"style":62},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\n",[64,117688,117689,117697],{"__ignoreMap":62},[67,117690,117691,117693,117695],{"class":69,"line":70},[67,117692,101803],{"class":112},[67,117694,29753],{"class":208},[67,117696,101808],{"class":84},[67,117698,117699,117701],{"class":69,"line":143},[67,117700,101813],{"class":208},[67,117702,101808],{"class":84},[19,117704,117705],{},"每一章的代码都单独保存：",[57,117707,117710],{"className":117708,"code":117709,"language":5906,"meta":62},[5904],"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",[64,117711,117709],{"__ignoreMap":62},[19,117713,117714],{},"这样出错时，你可以确认到底是哪一章的代码有问题。",[803,117716,117717],{"id":117717},"学习方法",[19,117719,117720],{},"每章建议按这个顺序操作：",[815,117722,117723,117726,117729,117732,117735,117738],{},[818,117724,117725],{},"先读“核心概念解释”，不用追求一次看懂所有细节。",[818,117727,117728],{},"复制最小可运行代码，保存成指定文件。",[818,117730,117731],{},"运行代码，确认没有报错。",[818,117733,117734],{},"对照“运行结果说明”理解输出。",[818,117736,117737],{},"做“验证步骤”，主动改一两个参数。",[818,117739,117740],{},"遇到报错先看“常见错误与解决方案”。",[19,117742,117743],{},"不要只看不跑。MuJoCo 的学习重点是“改参数以后观察物理结果”，比如把重力变小、把电机力变大、把初始高度变高。只要你能预测并解释这些变化，就说明你真正理解了。",[803,117745,117746],{"id":117746},"全局排错顺序",[19,117748,117749],{},"遇到问题时，按下面顺序查：",[815,117751,117752,117758,117764,117769,117772,117775,117782,117792],{},[818,117753,117754,117755],{},"Python 环境是否激活：",[64,117756,117757],{},"which python",[818,117759,117760,117761],{},"MuJoCo 是否能导入：",[64,117762,117763],{},"python -c \"import mujoco; print(mujoco.__version__)\"",[818,117765,117766,117767],{},"是否误装了 ",[64,117768,101549],{},[818,117770,117771],{},"XML 标签是否闭合、属性是否拼写正确",[818,117773,117774],{},"actuator 引用的 joint 名字是否存在",[818,117776,117777,117779,117780],{},[64,117778,101613],{}," 的长度是否等于 ",[64,117781,102695],{},[818,117783,106122,117784,83076,117786,117788,117789],{},[64,117785,104567],{},[64,117787,104897],{}," 后是否调用了 ",[64,117790,117791],{},"mujoco.mj_forward",[818,117793,117794],{},"图形显示问题是否和 OpenGL、GLFW、远程服务器有关",[779,117796,117797],{},"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":62,"searchDepth":143,"depth":143,"links":117799},[117800,117801,117802,117803,117804,117805,117806,117807],{"id":117441,"depth":143,"text":117441},{"id":117470,"depth":143,"text":117471},{"id":117500,"depth":143,"text":117500},{"id":117615,"depth":143,"text":117615},{"id":117668,"depth":143,"text":117668},{"id":117680,"depth":143,"text":117680},{"id":117717,"depth":143,"text":117717},{"id":117746,"depth":143,"text":117746},"仿真搭建。",{"category":24095},"\u002Fwiki\u002F2025-05-17-mujoco",{"title":117384,"description":117808},"wiki\u002F2025-05-17-mujoco学习\u002Findex","Y9Rv9JgXjVCbeZHS_U4izJnnZcIId184s39EpFx-Co4",{"id":117815,"title":117816,"body":117817,"description":24093,"extension":787,"meta":118272,"navigation":176,"path":118273,"seo":118274,"stem":118275,"__hash__":118276},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）.md","1. 最常用的基本操作（更新）",{"type":7,"value":117818,"toc":118270},[117819,117822,117825,117831,118267],[10,117820,117816],{"id":117821},"_1-最常用的基本操作更新",[19,117823,117824],{},"装linux系统教程：",[19,117826,117827],{},[28,117828,117829],{"href":117829,"rel":117830},"https:\u002F\u002Fme.tungchiahui.cn\u002Fblog\u002Flinux-tutorial\u002F",[32],[57,117832,117836],{"className":117833,"code":117834,"language":117835,"meta":62,"style":62},"language-Bash shiki shiki-themes github-light github-dark","#更新相关的知识\n# 更新软件包列表（从服务器获取最新软件信息）\nsudo apt update\n# 升级所有可更新的软件包（不删除旧包）\nsudo apt upgrade\n#更新和升级软件包\nsudo apt update && sudo apt upgrade -y\n#列出可更新的软件包及版本信息\napt list --upgradable\n#彻底升级（处理依赖关系，可能删除旧包）\nsudo apt full-upgrade\n#设置指定版本\nsudo apt install \u003Cpackage_name>=\u003Cversion_number>\n#只安装软件包不升级\nsudo apt install \u003Cpackage_name> --no-upgrade\n#只升级，不存在就不安装\nsudo apt install \u003Cpackage_name> --only-upgrade\n\n#安装指定的软件命令\nsudo apt install \u003Cpackage_name>\n\n#安装多个软件包\nsudo apt install \u003Cpackage_1> \u003Cpackage_2> \u003Cpackage_3>\n\n#更新指定的软件命令\nsudo apt update \u003Cpackage_name>\n\n#显示软件包具体信息,例如：版本号，安装大小，依赖关系等等\napt show \u003Cpackage_name>\n\n#删除软件包命令\nsudo apt remove \u003Cpackage_name>\n\n# 清理旧版本和缓存（释放磁盘空间）\nsudo apt autoremove  # 删除不再需要的依赖和库文件\nsudo apt clean       # 清理下载的缓存包\n\n#移除软件包及配置文件\nsudo apt purge \u003Cpackage_name>\n\n#查找软件包命令\nsudo apt search \u003Ckeyword>\n\n#列出所有已安装的包\napt list --installed\n\n#列出所有已安装的包的版本信息\napt list --all-versions\n","Bash",[64,117837,117838,117843,117848,117857,117862,117871,117876,117896,117901,117912,117917,117926,117931,117959,117964,117983,117988,118007,118011,118016,118032,118036,118041,118071,118075,118080,118096,118100,118105,118120,118124,118129,118145,118149,118154,118166,118178,118182,118187,118204,118208,118213,118231,118235,118240,118249,118253,118258],{"__ignoreMap":62},[67,117839,117840],{"class":69,"line":70},[67,117841,117842],{"class":202},"#更新相关的知识\n",[67,117844,117845],{"class":69,"line":143},[67,117846,117847],{"class":202},"# 更新软件包列表（从服务器获取最新软件信息）\n",[67,117849,117850,117852,117855],{"class":69,"line":149},[67,117851,298],{"class":112},[67,117853,117854],{"class":84}," apt",[67,117856,303],{"class":84},[67,117858,117859],{"class":69,"line":155},[67,117860,117861],{"class":202},"# 升级所有可更新的软件包（不删除旧包）\n",[67,117863,117864,117866,117868],{"class":69,"line":161},[67,117865,298],{"class":112},[67,117867,117854],{"class":84},[67,117869,117870],{"class":84}," upgrade\n",[67,117872,117873],{"class":69,"line":167},[67,117874,117875],{"class":202},"#更新和升级软件包\n",[67,117877,117878,117880,117882,117885,117887,117889,117891,117894],{"class":69,"line":173},[67,117879,298],{"class":112},[67,117881,117854],{"class":84},[67,117883,117884],{"class":84}," update",[67,117886,246],{"class":77},[67,117888,298],{"class":112},[67,117890,117854],{"class":84},[67,117892,117893],{"class":84}," upgrade",[67,117895,101518],{"class":208},[67,117897,117898],{"class":69,"line":180},[67,117899,117900],{"class":202},"#列出可更新的软件包及版本信息\n",[67,117902,117903,117906,117909],{"class":69,"line":186},[67,117904,117905],{"class":112},"apt",[67,117907,117908],{"class":84}," list",[67,117910,117911],{"class":208}," --upgradable\n",[67,117913,117914],{"class":69,"line":444},[67,117915,117916],{"class":202},"#彻底升级（处理依赖关系，可能删除旧包）\n",[67,117918,117919,117921,117923],{"class":69,"line":2335},[67,117920,298],{"class":112},[67,117922,117854],{"class":84},[67,117924,117925],{"class":84}," full-upgrade\n",[67,117927,117928],{"class":69,"line":2340},[67,117929,117930],{"class":202},"#设置指定版本\n",[67,117932,117933,117935,117937,117939,117941,117944,117946,117948,117950,117952,117955,117957],{"class":69,"line":2346},[67,117934,298],{"class":112},[67,117936,117854],{"class":84},[67,117938,312],{"class":84},[67,117940,29439],{"class":73},[67,117942,117943],{"class":84},"package_nam",[67,117945,936],{"class":77},[67,117947,1816],{"class":73},[67,117949,909],{"class":84},[67,117951,1766],{"class":73},[67,117953,117954],{"class":84},"version_numbe",[67,117956,1526],{"class":77},[67,117958,51844],{"class":73},[67,117960,117961],{"class":69,"line":2351},[67,117962,117963],{"class":202},"#只安装软件包不升级\n",[67,117965,117966,117968,117970,117972,117974,117976,117978,117980],{"class":69,"line":2365},[67,117967,298],{"class":112},[67,117969,117854],{"class":84},[67,117971,312],{"class":84},[67,117973,29439],{"class":73},[67,117975,117943],{"class":84},[67,117977,936],{"class":77},[67,117979,1816],{"class":73},[67,117981,117982],{"class":208}," --no-upgrade\n",[67,117984,117985],{"class":69,"line":2370},[67,117986,117987],{"class":202},"#只升级，不存在就不安装\n",[67,117989,117990,117992,117994,117996,117998,118000,118002,118004],{"class":69,"line":2376},[67,117991,298],{"class":112},[67,117993,117854],{"class":84},[67,117995,312],{"class":84},[67,117997,29439],{"class":73},[67,117999,117943],{"class":84},[67,118001,936],{"class":77},[67,118003,1816],{"class":73},[67,118005,118006],{"class":208}," --only-upgrade\n",[67,118008,118009],{"class":69,"line":2397},[67,118010,177],{"emptyLinePlaceholder":176},[67,118012,118013],{"class":69,"line":2402},[67,118014,118015],{"class":202},"#安装指定的软件命令\n",[67,118017,118018,118020,118022,118024,118026,118028,118030],{"class":69,"line":2416},[67,118019,298],{"class":112},[67,118021,117854],{"class":84},[67,118023,312],{"class":84},[67,118025,29439],{"class":73},[67,118027,117943],{"class":84},[67,118029,936],{"class":77},[67,118031,51844],{"class":73},[67,118033,118034],{"class":69,"line":2421},[67,118035,177],{"emptyLinePlaceholder":176},[67,118037,118038],{"class":69,"line":2450},[67,118039,118040],{"class":202},"#安装多个软件包\n",[67,118042,118043,118045,118047,118049,118051,118054,118057,118059,118061,118064,118066,118068],{"class":69,"line":2455},[67,118044,298],{"class":112},[67,118046,117854],{"class":84},[67,118048,312],{"class":84},[67,118050,29439],{"class":73},[67,118052,118053],{"class":84},"package_",[67,118055,118056],{"class":73},"1>",[67,118058,29439],{"class":73},[67,118060,118053],{"class":84},[67,118062,118063],{"class":73},"2>",[67,118065,29439],{"class":73},[67,118067,118053],{"class":84},[67,118069,118070],{"class":73},"3>\n",[67,118072,118073],{"class":69,"line":2472},[67,118074,177],{"emptyLinePlaceholder":176},[67,118076,118077],{"class":69,"line":2477},[67,118078,118079],{"class":202},"#更新指定的软件命令\n",[67,118081,118082,118084,118086,118088,118090,118092,118094],{"class":69,"line":2482},[67,118083,298],{"class":112},[67,118085,117854],{"class":84},[67,118087,117884],{"class":84},[67,118089,29439],{"class":73},[67,118091,117943],{"class":84},[67,118093,936],{"class":77},[67,118095,51844],{"class":73},[67,118097,118098],{"class":69,"line":2487},[67,118099,177],{"emptyLinePlaceholder":176},[67,118101,118102],{"class":69,"line":2501},[67,118103,118104],{"class":202},"#显示软件包具体信息,例如：版本号，安装大小，依赖关系等等\n",[67,118106,118107,118109,118112,118114,118116,118118],{"class":69,"line":2506},[67,118108,117905],{"class":112},[67,118110,118111],{"class":84}," show",[67,118113,29439],{"class":73},[67,118115,117943],{"class":84},[67,118117,936],{"class":77},[67,118119,51844],{"class":73},[67,118121,118122],{"class":69,"line":3298},[67,118123,177],{"emptyLinePlaceholder":176},[67,118125,118126],{"class":69,"line":3312},[67,118127,118128],{"class":202},"#删除软件包命令\n",[67,118130,118131,118133,118135,118137,118139,118141,118143],{"class":69,"line":3320},[67,118132,298],{"class":112},[67,118134,117854],{"class":84},[67,118136,119],{"class":84},[67,118138,29439],{"class":73},[67,118140,117943],{"class":84},[67,118142,936],{"class":77},[67,118144,51844],{"class":73},[67,118146,118147],{"class":69,"line":3325},[67,118148,177],{"emptyLinePlaceholder":176},[67,118150,118151],{"class":69,"line":3331},[67,118152,118153],{"class":202},"# 清理旧版本和缓存（释放磁盘空间）\n",[67,118155,118156,118158,118160,118163],{"class":69,"line":3337},[67,118157,298],{"class":112},[67,118159,117854],{"class":84},[67,118161,118162],{"class":84}," autoremove",[67,118164,118165],{"class":202},"  # 删除不再需要的依赖和库文件\n",[67,118167,118168,118170,118172,118175],{"class":69,"line":3342},[67,118169,298],{"class":112},[67,118171,117854],{"class":84},[67,118173,118174],{"class":84}," clean",[67,118176,118177],{"class":202},"       # 清理下载的缓存包\n",[67,118179,118180],{"class":69,"line":8667},[67,118181,177],{"emptyLinePlaceholder":176},[67,118183,118184],{"class":69,"line":8691},[67,118185,118186],{"class":202},"#移除软件包及配置文件\n",[67,118188,118189,118191,118193,118196,118198,118200,118202],{"class":69,"line":8696},[67,118190,298],{"class":112},[67,118192,117854],{"class":84},[67,118194,118195],{"class":84}," purge",[67,118197,29439],{"class":73},[67,118199,117943],{"class":84},[67,118201,936],{"class":77},[67,118203,51844],{"class":73},[67,118205,118206],{"class":69,"line":8702},[67,118207,177],{"emptyLinePlaceholder":176},[67,118209,118210],{"class":69,"line":8729},[67,118211,118212],{"class":202},"#查找软件包命令\n",[67,118214,118215,118217,118219,118222,118224,118227,118229],{"class":69,"line":8734},[67,118216,298],{"class":112},[67,118218,117854],{"class":84},[67,118220,118221],{"class":84}," search",[67,118223,29439],{"class":73},[67,118225,118226],{"class":84},"keywor",[67,118228,1172],{"class":77},[67,118230,51844],{"class":73},[67,118232,118233],{"class":69,"line":8740},[67,118234,177],{"emptyLinePlaceholder":176},[67,118236,118237],{"class":69,"line":8752},[67,118238,118239],{"class":202},"#列出所有已安装的包\n",[67,118241,118242,118244,118246],{"class":69,"line":8764},[67,118243,117905],{"class":112},[67,118245,117908],{"class":84},[67,118247,118248],{"class":208}," --installed\n",[67,118250,118251],{"class":69,"line":8776},[67,118252,177],{"emptyLinePlaceholder":176},[67,118254,118255],{"class":69,"line":10435},[67,118256,118257],{"class":202},"#列出所有已安装的包的版本信息\n",[67,118259,118260,118262,118264],{"class":69,"line":10459},[67,118261,117905],{"class":112},[67,118263,117908],{"class":84},[67,118265,118266],{"class":208}," --all-versions\n",[779,118268,118269],{},"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":62,"searchDepth":143,"depth":143,"links":118271},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch1",{"title":117816,"description":24093},"wiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）","0qHSF2CcfIvVp9KNbVlIRaabWQyFrf-TGaOhET23zi8",{"id":118278,"title":118279,"body":118280,"description":24093,"extension":787,"meta":119021,"navigation":176,"path":119022,"seo":119023,"stem":119024,"__hash__":119025},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程.md","2. Linux装机教程",{"type":7,"value":118281,"toc":119008},[118282,118285,118289,118292,118298,118302,118306,118312,118317,118322,118327,118332,118337,118340,118343,118346,118349,118353,118356,118361,118364,118369,118372,118377,118384,118387,118390,118393,118396,118399,118410,118414,118418,118423,118428,118432,118437,118441,118446,118450,118454,118459,118462,118507,118512,118516,118520,118525,118531,118536,118546,118551,118561,118566,118571,118598,118602,118605,118610,118613,118638,118642,118647,118650,118655,118660,118680,118685,118688,118703,118707,118760,118763,118768,118772,118775,118790,118793,118796,118801,118805,118809,118812,118816,118820,118823,118828,118833,118837,118844,118852,118855,118862,118867,118872,118875,118880,118887,118892,118899,118903,118905,118910,118914,118917,118920,118925,118928,118933,118936,118941,118946,118951,118955,118960,118964,119005],[10,118283,118279],{"id":118284},"_2-linux装机教程",[803,118286,118288],{"id":118287},"_21-实体机","2.1 实体机",[19,118290,118291],{},"使用清华源：（Ubuntu24.04）",[19,118293,118294],{},[28,118295,118296],{"href":118296,"rel":118297},"https:\u002F\u002Fmirrors.tuna.tsinghua.edu.cn\u002Fubuntu-releases\u002F24.04\u002F",[32],[803,118299,118301],{"id":118300},"_22-普通虚拟机","2.2 普通虚拟机",[14,118303,118305],{"id":118304},"_221-下载virtualbox虚拟机","2.2.1 下载VirtualBox虚拟机",[19,118307,118308],{},[28,118309,118310],{"href":118310,"rel":118311},"https:\u002F\u002Fwww.virtualbox.org\u002Fwiki\u002FDownload_Old_Builds_7_0",[32],[19,118313,118314],{},[725,118315],{"alt":62,"src":118316},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-001.png",[19,118318,118319],{},[725,118320],{"alt":62,"src":118321},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-002.png",[19,118323,118324],{},[725,118325],{"alt":62,"src":118326},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-003.png",[19,118328,118329],{},[725,118330],{"alt":62,"src":118331},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-004.png",[19,118333,118334],{},[725,118335],{"alt":62,"src":118336},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-005.png",[19,118338,118339],{},"内存4G（4096MB）；",[19,118341,118342],{},"CPU给4个核；",[19,118344,118345],{},"硬盘动态分配60G；",[19,118347,118348],{},"除了上面这三项，其它的默认即可，最后点击“Finish”。",[14,118350,118352],{"id":118351},"_222-安装ubuntu","2.2.2 安装Ubuntu",[19,118354,118355],{},"按照1.1的步骤下载Ubuntu",[19,118357,118358],{},[725,118359],{"alt":62,"src":118360},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-006.png",[19,118362,118363],{},"点击启动(绿色大箭头)，过一段时间出现下图中的小界面，往下拉选择中文简体，然后点击“安装Ubuntu”",[19,118365,118366],{},[725,118367],{"alt":62,"src":118368},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-007.png",[19,118370,118371],{},"键盘布局默认“Chinese”并点击“继续”，如果找不到“继续”就用Alt+F7，然后往上拖鼠标即可看到（注意拖鼠标的过程中不要点击鼠标，拖到目标位置后再点击鼠标）。",[19,118373,118374],{},[725,118375],{"alt":62,"src":118376},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-008.png",[19,118378,118379,118380,118383],{},"选择“正常安装”(找不到都用Alt+F7)， ",[336,118381,118382],{},"不选"," “安装Ubuntu时下载更新”，其余都默认并继续",[19,118385,118386],{},"清除整个磁盘并安装Ubuntu，现在安装。(不会清除windows的磁盘，放心安装)",[19,118388,118389],{},"将改动写入磁盘吗 继续",[19,118391,118392],{},"选择东八区（shanghai，大致在地图上点一下），继续",[19,118394,118395],{},"姓名、计算机名、用户名、密码都自己设置，越简单越好(密码需牢记)。 自动登录 继续",[19,118397,118398],{},"就开始安装了,比较耗时，只要Skip高亮了就点击之（这样省时，光标是圆圈也能点击）",[19,118400,118401,118402,118405,118406,118409],{},"安装完成后，现在重启，重启过程中根据提示按回车键。 进入系统后不要升级，且第一次进系统需设置一些信息，根据提示 ",[336,118403,118404],{},"除了"," 选不发送系统信息与不升级之外， ",[336,118407,118408],{},"其它"," 都跳过或前进）",[14,118411,118413],{"id":118412},"_223-增强虚拟机体验感","2.2.3 增强虚拟机体验感",[40,118415,118417],{"id":118416},"_2231-全屏","2.2.3.1 全屏",[19,118419,118420],{},[725,118421],{"alt":62,"src":118422},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-009.png",[19,118424,118425],{},[725,118426],{"alt":62,"src":118427},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-010.png",[40,118429,118431],{"id":118430},"_2232-文件交换","2.2.3.2 文件交换",[19,118433,118434],{},[725,118435],{"alt":62,"src":118436},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-011.png",[40,118438,118440],{"id":118439},"_2233-新建文本文档","2.2.3.3 新建文本文档",[19,118442,118443],{},[725,118444],{"alt":62,"src":118445},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-012.png",[803,118447,118449],{"id":118448},"_23-windows-subsystem-for-linux-2windows的linux子系统2","2.3 Windows Subsystem For Linux 2(Windows的Linux子系统2)",[14,118451,118453],{"id":118452},"_231-简介与优缺点","2.3.1 简介与优缺点",[815,118455,118456],{},[818,118457,118458],{},"什么情况下推荐？",[19,118460,118461],{},"无多余硬盘，没法实体装Linux。此时最优选择就是WSL2。而非VMware等虚拟机。",[815,118463,118464],{"start":143},[818,118465,118466,118467],{},"优缺点：",[815,118468,118469,118499],{},[818,118470,118471,118472],{},"优点：",[815,118473,118474,118477,118484,118487,118490,118493,118496],{},[818,118475,118476],{},"WSL2是最好的Linux发行版;(bushi)",[818,118478,118479,118480,118483],{},"性能损耗极低。且比在Windows上跑深度性能 ",[336,118481,118482],{},"强非常非常多;"," （如下图，时间的数值越低证明性能越高）",[818,118485,118486],{},"非常方便调用USB设备，可以USB直通;",[818,118488,118489],{},"非常方便使用英伟达显卡的CUDA与cuDNN;",[818,118491,118492],{},"非常方便Win与WSL2互相传文件等协同操作;",[818,118494,118495],{},"WSL2中甚至可以在Linux的终端中使用Windows软件;",[818,118497,118498],{},"非常方便使用Windows的VScode远程开发;",[818,118500,118501,118502],{},"缺点：",[815,118503,118504],{},[818,118505,118506],{},"无法调用本机摄像头，或说调用本机摄像头会巨麻烦。（虽无法调用本机摄像头，但是可以使用USB的摄像头）",[19,118508,118509],{},[725,118510],{"alt":62,"src":118511},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-013.png",[14,118513,118515],{"id":118514},"_232-安装教程","2.3.2 安装教程",[40,118517,118519],{"id":118518},"_2321-启动wsl2子系统和虚拟平台","2.3.2.1 启动WSL2子系统和虚拟平台",[815,118521,118522],{},[818,118523,118524],{},"方法一(图形界面)",[19,118526,118527,118528,25331],{},"用Win+R输入",[64,118529,118530],{},"appwiz.cpl",[19,118532,118533],{},[725,118534],{"alt":62,"src":118535},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-014.png",[19,118537,118538,118539,118542,118543,537],{},"点击OK进入 ",[336,118540,118541],{},"程序和功能\u002FPrograms and Features"," 界面，点击 ",[336,118544,118545],{},"启用或关闭Windows功能\u002FTurn Windows features on or off",[19,118547,118548],{},[725,118549],{"alt":62,"src":118550},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-015.png",[19,118552,118553,118554,101555,118557,118560],{},"选择 ",[336,118555,118556],{},"适用于Linux的Windows子系统\u002FWindows Subsystem for Linux",[336,118558,118559],{},"虚拟机平台\u002FVirtual Machine Platform"," 功能：",[19,118562,118563],{},[725,118564],{"alt":62,"src":118565},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-016.png",[815,118567,118568],{"start":143},[818,118569,118570],{},"方法二(命令行)",[57,118572,118576],{"className":118573,"code":118574,"language":118575,"meta":62,"style":62},"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",[64,118577,118578,118583,118588,118593],{"__ignoreMap":62},[67,118579,118580],{"class":69,"line":70},[67,118581,118582],{},"# 开启 Linux 子系统\n",[67,118584,118585],{"class":69,"line":143},[67,118586,118587],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:Microsoft-Windows-Subsystem-Linux \u002Fall \u002Fnorestart\n",[67,118589,118590],{"class":69,"line":149},[67,118591,118592],{},"# 开启虚拟机平台\n",[67,118594,118595],{"class":69,"line":155},[67,118596,118597],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:VirtualMachinePlatform \u002Fall \u002Fnorestart\n",[40,118599,118601],{"id":118600},"_2322-将wsl2设置为默认版本","2.3.2.2 将WSL2设置为默认版本",[19,118603,118604],{},"用管理员权限打开powershell",[19,118606,118607],{},[725,118608],{"alt":62,"src":118609},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-017.png",[19,118611,118612],{},"升级WSL并设置默认版本为WSL2",[57,118614,118616],{"className":118573,"code":118615,"language":118575,"meta":62,"style":62},"# 更新 wsl\nwsl --update\n# 将 wsl 版本设置为 wsl2\nwsl --set-default-version 2\n",[64,118617,118618,118623,118628,118633],{"__ignoreMap":62},[67,118619,118620],{"class":69,"line":70},[67,118621,118622],{},"# 更新 wsl\n",[67,118624,118625],{"class":69,"line":143},[67,118626,118627],{},"wsl --update\n",[67,118629,118630],{"class":69,"line":149},[67,118631,118632],{},"# 将 wsl 版本设置为 wsl2\n",[67,118634,118635],{"class":69,"line":155},[67,118636,118637],{},"wsl --set-default-version 2\n",[40,118639,118641],{"id":118640},"_2323-安装linux发行版","2.3.2.3 安装Linux发行版",[815,118643,118644],{},[818,118645,118646],{},"方式一(商店下载)",[19,118648,118649],{},"直接打开Microsoft Store搜索对应的发行版下载即可(比如Ubuntu 24.04 LTS)",[19,118651,118652],{},[725,118653],{"alt":62,"src":118654},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-018.png",[815,118656,118657],{"start":143},[818,118658,118659],{},"方式二(命令行安装)",[57,118661,118663],{"className":118573,"code":118662,"language":118575,"meta":62,"style":62},"# 列出可安装的 Linux 版本\n#（需要科学手段）\nwsl --list --online\n",[64,118664,118665,118670,118675],{"__ignoreMap":62},[67,118666,118667],{"class":69,"line":70},[67,118668,118669],{},"# 列出可安装的 Linux 版本\n",[67,118671,118672],{"class":69,"line":143},[67,118673,118674],{},"#（需要科学手段）\n",[67,118676,118677],{"class":69,"line":149},[67,118678,118679],{},"wsl --list --online\n",[19,118681,118682],{},[725,118683],{"alt":62,"src":118684},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-019.png",[19,118686,118687],{},"选择对应发行版并安装",[57,118689,118691],{"className":118573,"code":118690,"language":118575,"meta":62,"style":62},"# Ubuntu安装完毕后需要重启系统\nwsl --install -d Ubuntu-24.04\n",[64,118692,118693,118698],{"__ignoreMap":62},[67,118694,118695],{"class":69,"line":70},[67,118696,118697],{},"# Ubuntu安装完毕后需要重启系统\n",[67,118699,118700],{"class":69,"line":143},[67,118701,118702],{},"wsl --install -d Ubuntu-24.04\n",[40,118704,118706],{"id":118705},"_2324-查看系统状态","2.3.2.4 查看系统状态",[57,118708,118710],{"className":118573,"code":118709,"language":118575,"meta":62,"style":62},"# 查看 wsl\nwsl -l\n# 查看 wsl 运行版本或模式\nwsl -l -v\n\n\n# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\nwsl --set-version \u003Cdistro> 2\n# 选择要注销的版本 （如果想卸载再用此命令）\nwsl --unregister \u003Cdistro>\n",[64,118711,118712,118717,118722,118727,118732,118736,118740,118745,118750,118755],{"__ignoreMap":62},[67,118713,118714],{"class":69,"line":70},[67,118715,118716],{},"# 查看 wsl\n",[67,118718,118719],{"class":69,"line":143},[67,118720,118721],{},"wsl -l\n",[67,118723,118724],{"class":69,"line":149},[67,118725,118726],{},"# 查看 wsl 运行版本或模式\n",[67,118728,118729],{"class":69,"line":155},[67,118730,118731],{},"wsl -l -v\n",[67,118733,118734],{"class":69,"line":161},[67,118735,177],{"emptyLinePlaceholder":176},[67,118737,118738],{"class":69,"line":167},[67,118739,177],{"emptyLinePlaceholder":176},[67,118741,118742],{"class":69,"line":173},[67,118743,118744],{},"# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\n",[67,118746,118747],{"class":69,"line":180},[67,118748,118749],{},"wsl --set-version \u003Cdistro> 2\n",[67,118751,118752],{"class":69,"line":186},[67,118753,118754],{},"# 选择要注销的版本 （如果想卸载再用此命令）\n",[67,118756,118757],{"class":69,"line":444},[67,118758,118759],{},"wsl --unregister \u003Cdistro>\n",[19,118761,118762],{},"输出Version为2即正常",[19,118764,118765],{},[725,118766],{"alt":62,"src":118767},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-020.png",[40,118769,118771],{"id":118770},"_2325-设置用户名与密码","2.3.2.5 设置用户名与密码",[19,118773,118774],{},"直接在Powershell里输入wsl命令进入子系统",[57,118776,118778],{"className":118573,"code":118777,"language":118575,"meta":62,"style":62},"# 进入子系统\nwsl\n",[64,118779,118780,118785],{"__ignoreMap":62},[67,118781,118782],{"class":69,"line":70},[67,118783,118784],{},"# 进入子系统\n",[67,118786,118787],{"class":69,"line":143},[67,118788,118789],{},"wsl\n",[19,118791,118792],{},"输入用户名(随便设置，建议字母+数字，或者纯字母)",[19,118794,118795],{},"输入密码(建议低于6位的数字，并且在输入密码时，终端上不会显示输入的字符，但是已经正常输入了)",[19,118797,118798],{},[725,118799],{"alt":62,"src":118800},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-021.png",[14,118802,118804],{"id":118803},"_233-配置各种环境","2.3.3 配置各种环境",[40,118806,118808],{"id":118807},"_2331-换源","2.3.3.1 换源",[19,118810,118811],{},"(同实体机LINUX，往下找教程)",[40,118813,118815],{"id":118814},"_2332-英伟达显卡","2.3.3.2 英伟达显卡",[23626,118817,118819],{"id":118818},"_23321-显卡驱动","2.3.3.2.1 显卡驱动",[19,118821,118822],{},"不用安装，只要你的Windows安装了驱动，你的WSL2就已经安装好驱动了。",[19,118824,118825],{},[725,118826],{"alt":62,"src":118827},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-022.png",[19,118829,118830],{},[725,118831],{"alt":62,"src":118832},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-023.png",[23626,118834,118836],{"id":118835},"_23322-cuda","2.3.3.2.2 CUDA",[19,118838,118839,118840],{},"前往 NVIDIA CUDA Toolkit 下载页面：",[28,118841,118842],{"href":118842,"rel":118843},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcuda-downloads",[32],[19,118845,118846,118849],{},[725,118847],{"alt":62,"src":118848},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-024.png",[725,118850],{"alt":62,"src":118851},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-025.png",[19,118853,118854],{},"在下方的网站，选择合适的版本。",[19,118856,118857,118858],{},"WSL2 专属 CUDA 指南：",[28,118859,118860],{"href":118860,"rel":118861},"https:\u002F\u002Fdocs.nvidia.com\u002Fcuda\u002Fwsl-user-guide\u002Findex.html",[32],[19,118863,118864],{},[336,118865,118866],{},"(同实体机LINUX，往下找教程，唯一与实体机不同的地方如下图)",[19,118868,118869],{},[725,118870],{"alt":62,"src":118871},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-026.png",[19,118873,118874],{},"挨行敲一遍",[19,118876,118877],{},[725,118878],{"alt":62,"src":118879},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-027.png",[19,118881,118882,118883,118886],{},"敲完后，输入",[64,118884,118885],{},"nvcc -V","检测是否安装成功，如果出现下图，证明没配置环境。",[19,118888,118889],{},[725,118890],{"alt":62,"src":118891},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-028.png",[19,118893,118894,118895,118898],{},"（请详看下方教程的",[336,118896,118897],{},"安装CUDA的配置环境来看","如何配置环境）",[23626,118900,118902],{"id":118901},"_23323-cudnn","2.3.3.2.3 cuDNN",[19,118904,118811],{},[19,118906,118907],{},[725,118908],{"alt":62,"src":118909},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-029.png",[40,118911,118913],{"id":118912},"_2333-vscode远程开发","2.3.3.3 VScode远程开发",[19,118915,118916],{},"(一定要把工程放在Linux中开发，别放在Win磁盘中，否则I\u002FO效率会很低)",[19,118918,118919],{},"安装该插件(WSL2有自己的远程开发插件，无需使用SSH）。",[19,118921,118922],{},[725,118923],{"alt":62,"src":118924},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-030.png",[19,118926,118927],{},"连接WSL2",[19,118929,118930],{},[725,118931],{"alt":62,"src":118932},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-031.png",[19,118934,118935],{},"远程开发成功。",[19,118937,118938],{},[725,118939],{"alt":62,"src":118940},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-032.png",[19,118942,118943],{},[725,118944],{"alt":62,"src":118945},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-033.png",[19,118947,118948],{},[725,118949],{"alt":62,"src":118950},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-034.png",[40,118952,118954],{"id":118953},"_2334-linux终端使用windows软件","2.3.3.4 Linux终端使用Windows软件",[19,118956,118957],{},[725,118958],{"alt":62,"src":118959},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-035.png",[40,118961,118963],{"id":118962},"_2335-opengl有问题","2.3.3.5 OpenGL有问题",[57,118965,118967],{"className":117833,"code":118966,"language":117835,"meta":62,"style":62},"sudo apt update\nsudo apt upgrade\nsudo apt install mesa-utils\n\n#然后重启wsl2即可\n",[64,118968,118969,118977,118985,118996,119000],{"__ignoreMap":62},[67,118970,118971,118973,118975],{"class":69,"line":70},[67,118972,298],{"class":112},[67,118974,117854],{"class":84},[67,118976,303],{"class":84},[67,118978,118979,118981,118983],{"class":69,"line":143},[67,118980,298],{"class":112},[67,118982,117854],{"class":84},[67,118984,117870],{"class":84},[67,118986,118987,118989,118991,118993],{"class":69,"line":149},[67,118988,298],{"class":112},[67,118990,117854],{"class":84},[67,118992,312],{"class":84},[67,118994,118995],{"class":84}," mesa-utils\n",[67,118997,118998],{"class":69,"line":155},[67,118999,177],{"emptyLinePlaceholder":176},[67,119001,119002],{"class":69,"line":161},[67,119003,119004],{"class":202},"#然后重启wsl2即可\n",[779,119006,119007],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-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":62,"searchDepth":143,"depth":143,"links":119009},[119010,119011,119016],{"id":118287,"depth":143,"text":118288},{"id":118300,"depth":143,"text":118301,"children":119012},[119013,119014,119015],{"id":118304,"depth":149,"text":118305},{"id":118351,"depth":149,"text":118352},{"id":118412,"depth":149,"text":118413},{"id":118448,"depth":143,"text":118449,"children":119017},[119018,119019,119020],{"id":118452,"depth":149,"text":118453},{"id":118514,"depth":149,"text":118515},{"id":118803,"depth":149,"text":118804},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch2-linux",{"title":118279,"description":24093},"wiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程","z8-bvEu-95_o87t1vYlvhP_0vkUfK8DDJy87xhuIF4E",{"id":119027,"title":119028,"body":119029,"description":24093,"extension":787,"meta":121965,"navigation":176,"path":121966,"seo":121967,"stem":121968,"__hash__":121969},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置.md","3. 安装必备配置",{"type":7,"value":119030,"toc":121937},[119031,119034,119038,119044,119048,119054,119058,119246,119249,119254,119258,119262,119265,119268,119274,119279,119282,119285,119290,119323,119328,119332,119409,119412,119417,119421,119424,119463,119466,119475,119493,119498,119505,119622,119627,119630,119657,119662,119666,119675,119725,119732,119736,119739,119753,119760,119794,119799,119803,119826,119829,119834,119838,119841,119844,119847,119889,119893,119896,119899,119940,119944,119948,119951,119956,119961,119964,119987,119990,119998,120003,120006,120011,120016,120019,120024,120028,120033,120056,120061,120123,120131,120136,120141,120144,120149,120152,120157,120162,120180,120185,120191,120196,120210,120214,120217,120220,120223,120266,120269,120274,120375,120378,120383,120387,120391,120428,120432,120436,120440,120486,120490,120535,120539,120546,120554,120609,120612,120689,120692,120715,120719,120722,120727,120732,120740,120743,120748,120753,120758,120761,120766,120775,120778,120783,120786,120857,120862,120865,120870,120873,120878,120881,120886,120889,120894,120899,120902,120977,120980,120993,120998,121001,121015,121018,121047,121052,121081,121084,121089,121093,121098,121107,121110,121115,121118,121123,121126,121129,121134,121137,121142,121147,121150,121155,121158,121283,121288,121318,121321,121326,121331,121348,121351,121394,121397,121424,121429,121442,121585,121589,121594,121608,121611,121662,121665,121695,121698,121714,121719,121733,121736,121803,121808,121817,121822,121825,121837,121842,121849,121873,121876,121881,121884,121903,121908,121915,121927,121934],[10,119032,119028],{"id":119033},"_3-安装必备配置",[803,119035,119037],{"id":119036},"_31-软件包换源以debian系的发行版为例","3.1 软件包换源（以Debian系的发行版为例）",[57,119039,119042],{"className":119040,"code":119041,"language":5906},[5904],"  打开下方网站（注意，该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",[64,119043,119041],{"__ignoreMap":62},[14,119045,119047],{"id":119046},"_311-ubuntu2204及debian10及以下版本","3.1.1 Ubuntu22.04(及Debian10)及以下版本",[57,119049,119052],{"className":119050,"code":119051,"language":5906},[5904],"  输入以下命令\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",[64,119053,119051],{"__ignoreMap":62},[14,119055,119057],{"id":119056},"_312-ubuntu2404及debian12及以上版本","3.1.2 Ubuntu24.04(及Debian12)及以上版本",[57,119059,119063],{"className":119060,"code":119061,"language":119062,"meta":62,"style":62},"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",[64,119064,119065,119073,119084,119096,119110,119114,119124,119129,119133,119137,119142,119146,119158,119162,119167,119171,119182,119186,119202,119206,119217,119221,119226,119230,119238],{"__ignoreMap":62},[67,119066,119067,119069,119071],{"class":69,"line":70},[67,119068,298],{"class":112},[67,119070,117854],{"class":84},[67,119072,303],{"class":84},[67,119074,119075,119077,119079,119081],{"class":69,"line":143},[67,119076,298],{"class":112},[67,119078,117854],{"class":84},[67,119080,312],{"class":84},[67,119082,119083],{"class":84}," vim\n",[67,119085,119086,119088,119091,119093],{"class":69,"line":149},[67,119087,298],{"class":112},[67,119089,119090],{"class":84}," rm",[67,119092,26034],{"class":208},[67,119094,119095],{"class":84}," \u002Fetc\u002Fapt\u002Fsources.list\n",[67,119097,119098,119100,119102,119104,119107],{"class":69,"line":155},[67,119099,298],{"class":112},[67,119101,119090],{"class":84},[67,119103,26034],{"class":208},[67,119105,119106],{"class":84}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002F",[67,119108,119109],{"class":208},"**\n",[67,119111,119112],{"class":69,"line":161},[67,119113,177],{"emptyLinePlaceholder":176},[67,119115,119116,119118,119121],{"class":69,"line":167},[67,119117,298],{"class":112},[67,119119,119120],{"class":84}," vim",[67,119122,119123],{"class":84}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fubuntu.sources\n",[67,119125,119126],{"class":69,"line":173},[67,119127,119128],{"class":84},"```\n",[67,119130,119131],{"class":69,"line":180},[67,119132,177],{"emptyLinePlaceholder":176},[67,119134,119135],{"class":69,"line":186},[67,119136,177],{"emptyLinePlaceholder":176},[67,119138,119139],{"class":69,"line":444},[67,119140,119141],{"class":112},"选择好Ubuntu版本后，复制下方的内容。\n",[67,119143,119144],{"class":69,"line":2335},[67,119145,177],{"emptyLinePlaceholder":176},[67,119147,119148,119150,119153,119156],{"class":69,"line":2340},[67,119149,1086],{"class":73},[67,119151,119152],{"class":84},"[](",[67,119154,119155],{"class":112},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-044.png",[67,119157,870],{"class":84},[67,119159,119160],{"class":69,"line":2346},[67,119161,177],{"emptyLinePlaceholder":176},[67,119163,119164],{"class":69,"line":2351},[67,119165,119166],{"class":112},"粘贴进去\n",[67,119168,119169],{"class":69,"line":2365},[67,119170,177],{"emptyLinePlaceholder":176},[67,119172,119173,119175,119177,119180],{"class":69,"line":2370},[67,119174,1086],{"class":73},[67,119176,119152],{"class":84},[67,119178,119179],{"class":112},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-045.png",[67,119181,870],{"class":84},[67,119183,119184],{"class":69,"line":2376},[67,119185,177],{"emptyLinePlaceholder":176},[67,119187,119188,119191,119194,119197,119199],{"class":69,"line":2397},[67,119189,119190],{"class":112},"按一下ESC，然后英文冒号，输入",[67,119192,119193],{"class":84}," `",[67,119195,119196],{"class":112},":wq!",[67,119198,1828],{"class":84},[67,119200,119201],{"class":112},"然后回车\n",[67,119203,119204],{"class":69,"line":2402},[67,119205,177],{"emptyLinePlaceholder":176},[67,119207,119208,119210,119212,119215],{"class":69,"line":2416},[67,119209,1086],{"class":73},[67,119211,119152],{"class":84},[67,119213,119214],{"class":112},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-046.png",[67,119216,870],{"class":84},[67,119218,119219],{"class":69,"line":2421},[67,119220,177],{"emptyLinePlaceholder":176},[67,119222,119223],{"class":69,"line":2450},[67,119224,119225],{"class":112},"输入以下命令\n",[67,119227,119228],{"class":69,"line":2455},[67,119229,177],{"emptyLinePlaceholder":176},[67,119231,119232,119235],{"class":69,"line":2472},[67,119233,119234],{"class":84},"```",[67,119236,119237],{"class":112},"Bash\n",[67,119239,119240,119242,119244],{"class":69,"line":2477},[67,119241,298],{"class":112},[67,119243,117854],{"class":84},[67,119245,303],{"class":84},[19,119247,119248],{},"这里被替换成对应学校则成功",[19,119250,119251],{},[725,119252],{"alt":62,"src":119253},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-047.png",[803,119255,119257],{"id":119256},"_32-卸载恶心的snapubuntu及其衍生版","3.2 卸载恶心的snap(Ubuntu及其衍生版)",[14,119259,119261],{"id":119260},"_321-安装非firefox浏览器","3.2.1 安装非firefox浏览器",[19,119263,119264],{},"卸载snap前，请先安装一个浏览器（以Google Chrome为例）(这里是因为Ubuntu默认安装的是snap版本的FireFox)",[19,119266,119267],{},"以下是Google上海服务器的Chrome官网（无需挂梯）",[19,119269,119270],{},[28,119271,119272],{"href":119272,"rel":119273},"https:\u002F\u002Fwww.google.com\u002Fchrome\u002F",[32],[19,119275,119276],{},[725,119277],{"alt":62,"src":119278},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-048.png",[19,119280,119281],{},"咱们这里是Ubuntu所以是Debian系的系统，所以选deb扩展名的程序包。（也就是红色框框）",[19,119283,119284],{},"红帽系则需要安装的是rpm扩展名程序包。（也就是蓝色框框）",[19,119286,119287],{},[725,119288],{"alt":62,"src":119289},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-049.png",[57,119291,119293],{"className":117833,"code":119292,"language":117835,"meta":62,"style":62},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\ncd ~\u002FDownloads\n#下方chrome安装包名不一定是这个，根据名字来看\nsudo apt install .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[64,119294,119295,119300,119307,119312],{"__ignoreMap":62},[67,119296,119297],{"class":69,"line":70},[67,119298,119299],{"class":202},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\n",[67,119301,119302,119304],{"class":69,"line":143},[67,119303,101813],{"class":208},[67,119305,119306],{"class":84}," ~\u002FDownloads\n",[67,119308,119309],{"class":69,"line":149},[67,119310,119311],{"class":202},"#下方chrome安装包名不一定是这个，根据名字来看\n",[67,119313,119314,119316,119318,119320],{"class":69,"line":155},[67,119315,298],{"class":112},[67,119317,117854],{"class":84},[67,119319,312],{"class":84},[67,119321,119322],{"class":84}," .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[19,119324,119325],{},[725,119326],{"alt":62,"src":119327},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-050.png",[14,119329,119331],{"id":119330},"_322-查看snap包应用数量","3.2.2 查看snap包应用数量",[57,119333,119335],{"className":117833,"code":119334,"language":117835,"meta":62,"style":62},"# 老版\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",[64,119336,119337,119342,119350,119361,119366,119370,119375,119385,119393,119404],{"__ignoreMap":62},[67,119338,119339],{"class":69,"line":70},[67,119340,119341],{"class":202},"# 老版\n",[67,119343,119344,119346,119348],{"class":69,"line":143},[67,119345,298],{"class":112},[67,119347,117854],{"class":84},[67,119349,303],{"class":84},[67,119351,119352,119354,119356,119358],{"class":69,"line":149},[67,119353,298],{"class":112},[67,119355,117854],{"class":84},[67,119357,312],{"class":84},[67,119359,119360],{"class":84}," neofetch\n",[67,119362,119363],{"class":69,"line":155},[67,119364,119365],{"class":112},"neofetch\n",[67,119367,119368],{"class":69,"line":161},[67,119369,177],{"emptyLinePlaceholder":176},[67,119371,119372],{"class":69,"line":167},[67,119373,119374],{"class":202},"# 新版\n",[67,119376,119377,119379,119382],{"class":69,"line":173},[67,119378,298],{"class":112},[67,119380,119381],{"class":84}," add-apt-repository",[67,119383,119384],{"class":84}," ppa:zhangsongcui3371\u002Ffastfetch\n",[67,119386,119387,119389,119391],{"class":69,"line":180},[67,119388,298],{"class":112},[67,119390,117854],{"class":84},[67,119392,303],{"class":84},[67,119394,119395,119397,119399,119401],{"class":69,"line":186},[67,119396,298],{"class":112},[67,119398,117854],{"class":84},[67,119400,312],{"class":84},[67,119402,119403],{"class":84}," fastfetch\n",[67,119405,119406],{"class":69,"line":444},[67,119407,119408],{"class":112},"fastfetch\n",[19,119410,119411],{},"这里显示，一共有3162个debian的程序，7个snap程序",[19,119413,119414],{},[725,119415],{"alt":62,"src":119416},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-051.png",[14,119418,119420],{"id":119419},"_323-移除snap应用","3.2.3 移除snap应用",[19,119422,119423],{},"系统在启动时，会自动启动Snap相关服务，我们先禁用掉这些服务",[57,119425,119427],{"className":117833,"code":119426,"language":117835,"meta":62,"style":62},"sudo systemctl disable snapd.service\nsudo systemctl disable snapd.socket\nsudo systemctl disable snapd.seeded.service\n",[64,119428,119429,119441,119452],{"__ignoreMap":62},[67,119430,119431,119433,119435,119438],{"class":69,"line":70},[67,119432,298],{"class":112},[67,119434,577],{"class":84},[67,119436,119437],{"class":84}," disable",[67,119439,119440],{"class":84}," snapd.service\n",[67,119442,119443,119445,119447,119449],{"class":69,"line":143},[67,119444,298],{"class":112},[67,119446,577],{"class":84},[67,119448,119437],{"class":84},[67,119450,119451],{"class":84}," snapd.socket\n",[67,119453,119454,119456,119458,119460],{"class":69,"line":149},[67,119455,298],{"class":112},[67,119457,577],{"class":84},[67,119459,119437],{"class":84},[67,119461,119462],{"class":84}," snapd.seeded.service\n",[19,119464,119465],{},"然后查看snap应用列表",[19,119467,119468,119469,119474],{},"根据你安装的选择不同（最小安装或普通安装），有",[28,119470,119473],{"href":119471,"rel":119472},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=%E4%B8%8D%E5%90%8C%E7%9A%84&spm=1001.2101.3001.7020",[32],"不同的","Snap软件会被预装到系统，在删除Snap服务之前，我们需要移除Snap安装的这些",[57,119476,119478],{"className":117833,"code":119477,"language":117835,"meta":62,"style":62},"# 查询当前系统上snap安装了哪些app\nsnap list\n",[64,119479,119480,119485],{"__ignoreMap":62},[67,119481,119482],{"class":69,"line":70},[67,119483,119484],{"class":202},"# 查询当前系统上snap安装了哪些app\n",[67,119486,119487,119490],{"class":69,"line":143},[67,119488,119489],{"class":112},"snap",[67,119491,119492],{"class":84}," list\n",[19,119494,119495],{},[725,119496],{"alt":62,"src":119497},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-052.png",[19,119499,119500,119501,119504],{},"卸载掉图中所有应用，按照 ",[336,119502,119503],{},"先删除应用软件，再删除非应用软件"," 的顺序进行删除",[57,119506,119508],{"className":117833,"code":119507,"language":117835,"meta":62,"style":62},"#移除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",[64,119509,119510,119515,119527,119532,119543,119548,119559,119564,119575,119580,119584,119589,119600,119611],{"__ignoreMap":62},[67,119511,119512],{"class":69,"line":70},[67,119513,119514],{"class":202},"#移除snap-store，如果是Kubuntu，则没有这个东西，测不需要卸载\n",[67,119516,119517,119519,119522,119524],{"class":69,"line":143},[67,119518,298],{"class":112},[67,119520,119521],{"class":84}," snap",[67,119523,119],{"class":84},[67,119525,119526],{"class":84}," snap-store\n",[67,119528,119529],{"class":69,"line":149},[67,119530,119531],{"class":202},"#移除firefox浏览器\n",[67,119533,119534,119536,119538,119540],{"class":69,"line":155},[67,119535,298],{"class":112},[67,119537,119521],{"class":84},[67,119539,119],{"class":84},[67,119541,119542],{"class":84}," firefox\n",[67,119544,119545],{"class":69,"line":161},[67,119546,119547],{"class":202},"#移除gnome-42-2204\n",[67,119549,119550,119552,119554,119556],{"class":69,"line":167},[67,119551,298],{"class":112},[67,119553,119521],{"class":84},[67,119555,119],{"class":84},[67,119557,119558],{"class":84}," gnome-42-2204\n",[67,119560,119561],{"class":69,"line":173},[67,119562,119563],{"class":202},"#移除gtk-common-themes\n",[67,119565,119566,119568,119570,119572],{"class":69,"line":180},[67,119567,298],{"class":112},[67,119569,119521],{"class":84},[67,119571,119],{"class":84},[67,119573,119574],{"class":84}," gtk-common-themes\n",[67,119576,119577],{"class":69,"line":186},[67,119578,119579],{"class":202},"#移除其它...\n",[67,119581,119582],{"class":69,"line":444},[67,119583,3395],{"class":77},[67,119585,119586],{"class":69,"line":2335},[67,119587,119588],{"class":202},"#移除core22,bare以及snapd\n",[67,119590,119591,119593,119595,119597],{"class":69,"line":2340},[67,119592,298],{"class":112},[67,119594,119521],{"class":84},[67,119596,119],{"class":84},[67,119598,119599],{"class":84}," core22\n",[67,119601,119602,119604,119606,119608],{"class":69,"line":2346},[67,119603,298],{"class":112},[67,119605,119521],{"class":84},[67,119607,119],{"class":84},[67,119609,119610],{"class":84}," bare\n",[67,119612,119613,119615,119617,119619],{"class":69,"line":2351},[67,119614,298],{"class":112},[67,119616,119521],{"class":84},[67,119618,119],{"class":84},[67,119620,119621],{"class":84}," snapd\n",[19,119623,119624],{},[725,119625],{"alt":62,"src":119626},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-053.png",[19,119628,119629],{},"输入以下命令查看是否还有snap包",[57,119631,119633],{"className":117833,"code":119632,"language":117835,"meta":62,"style":62},"snap list\n# 老版\nneofetch\n# 新版\nfastfetch\n",[64,119634,119635,119641,119645,119649,119653],{"__ignoreMap":62},[67,119636,119637,119639],{"class":69,"line":70},[67,119638,119489],{"class":112},[67,119640,119492],{"class":84},[67,119642,119643],{"class":69,"line":143},[67,119644,119341],{"class":202},[67,119646,119647],{"class":69,"line":149},[67,119648,119365],{"class":112},[67,119650,119651],{"class":69,"line":155},[67,119652,119374],{"class":202},[67,119654,119655],{"class":69,"line":161},[67,119656,119408],{"class":112},[19,119658,119659],{},[725,119660],{"alt":62,"src":119661},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-054.png",[14,119663,119665],{"id":119664},"_324-移除snap","3.2.4 移除snap",[19,119667,119668,119669,119674],{},"在删除掉",[28,119670,119673],{"href":119671,"rel":119672},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=Snap%E5%AE%89%E8%A3%85&spm=1001.2101.3001.7020",[32],"Snap安装","的软件后，下一步就是把Snap本身也删除掉，这里需要使用Apt来实现",[57,119676,119678],{"className":117833,"code":119677,"language":117835,"meta":62,"style":62}," #使用apt移除掉snap\nsudo apt autoremove --purge snapd\n#移除snapd的一些目录\nsudo rm -rf \u002Fvar\u002Fcache\u002Fsnapd\nsudo rm -rf ~\u002Fsnap\n",[64,119679,119680,119685,119698,119703,119714],{"__ignoreMap":62},[67,119681,119682],{"class":69,"line":70},[67,119683,119684],{"class":202}," #使用apt移除掉snap\n",[67,119686,119687,119689,119691,119693,119696],{"class":69,"line":143},[67,119688,298],{"class":112},[67,119690,117854],{"class":84},[67,119692,118162],{"class":84},[67,119694,119695],{"class":208}," --purge",[67,119697,119621],{"class":84},[67,119699,119700],{"class":69,"line":149},[67,119701,119702],{"class":202},"#移除snapd的一些目录\n",[67,119704,119705,119707,119709,119711],{"class":69,"line":155},[67,119706,298],{"class":112},[67,119708,119090],{"class":84},[67,119710,26034],{"class":208},[67,119712,119713],{"class":84}," \u002Fvar\u002Fcache\u002Fsnapd\n",[67,119715,119716,119718,119720,119722],{"class":69,"line":161},[67,119717,298],{"class":112},[67,119719,119090],{"class":84},[67,119721,26034],{"class":208},[67,119723,119724],{"class":84}," ~\u002Fsnap\n",[19,119726,119727,119728,119731],{},"至此，其实snap已经被删除掉了。但是这个并不足够，如果你使用apt安装一些软件 ",[64,119729,119730],{},"sudo apt install firefox","时，会自动下载并重新安装snap服务。因为Ubuntu源中的一些软件已经是snap版本，而非deb版本，下载snap版本时，会自动检查并在必要时重新安装snap服务。这也是Canonical为了推广自己的Snap Store而做的一些额外的努力吧。(这一点最被很多人不喜欢)",[14,119733,119735],{"id":119734},"_325-禁止系统自动安装snap","3.2.5 禁止系统自动安装snap",[19,119737,119738],{},"我们可以利用APT可配置禁用安装哪些依赖的特性，来实现禁止重新自动安装Snap服务",[57,119740,119742],{"className":117833,"code":119741,"language":117835,"meta":62,"style":62},"sudo vim \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[64,119743,119744],{"__ignoreMap":62},[67,119745,119746,119748,119750],{"class":69,"line":70},[67,119747,298],{"class":112},[67,119749,119120],{"class":84},[67,119751,119752],{"class":84}," \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[19,119754,119755,119756,119759],{},"按insert进入编辑模式，然后复制以下内容，最后按ESC，切换为英文输入法模式，然后敲 ",[64,119757,119758],{},":wq"," 回车",[57,119761,119763],{"className":117833,"code":119762,"language":117835,"meta":62,"style":62},"Package: snapd\nPin: release a=*\nPin-Priority: -10\n",[64,119764,119765,119772,119786],{"__ignoreMap":62},[67,119766,119767,119770],{"class":69,"line":70},[67,119768,119769],{"class":112},"Package:",[67,119771,119621],{"class":84},[67,119773,119774,119777,119780,119783],{"class":69,"line":143},[67,119775,119776],{"class":112},"Pin:",[67,119778,119779],{"class":84}," release",[67,119781,119782],{"class":84}," a=",[67,119784,119785],{"class":208},"*\n",[67,119787,119788,119791],{"class":69,"line":149},[67,119789,119790],{"class":112},"Pin-Priority:",[67,119792,119793],{"class":208}," -10\n",[19,119795,119796],{},[725,119797],{"alt":62,"src":119798},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-055.png",[14,119800,119802],{"id":119801},"_326-测试是否成功","3.2.6 测试是否成功",[57,119804,119806],{"className":117833,"code":119805,"language":117835,"meta":62,"style":62},"sudo apt update\nsudo apt install firefox\n",[64,119807,119808,119816],{"__ignoreMap":62},[67,119809,119810,119812,119814],{"class":69,"line":70},[67,119811,298],{"class":112},[67,119813,117854],{"class":84},[67,119815,303],{"class":84},[67,119817,119818,119820,119822,119824],{"class":69,"line":143},[67,119819,298],{"class":112},[67,119821,117854],{"class":84},[67,119823,312],{"class":84},[67,119825,119542],{"class":84},[19,119827,119828],{},"这里提示snapd无法被安装，就证明成功了",[19,119830,119831],{},[725,119832],{"alt":62,"src":119833},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-056.png",[14,119835,119837],{"id":119836},"_327-重新安装firefox浏览器没大有必要","3.2.7 重新安装FireFox浏览器（没大有必要）",[19,119839,119840],{},"我个人其实更偏好Google Chrome浏览器，浏览器是从Chrome官网下载deb进行安装的。所以我有浏览器了，就没必要安装火狐浏览器了，",[19,119842,119843],{},"但如果你确实喜欢Firefox，在删除掉Snap后，其实没法再通过Snap或Apt来安装Firefox了，而Firefox官网提供的下载，又没有deb包，没有桌面快捷方式，不是非常方便。",[19,119845,119846],{},"所以，你可以考虑使用Mozilla提供的源来安装debian版本的Firefox",[57,119848,119850],{"className":117833,"code":119849,"language":117835,"meta":62,"style":62},"# 添加Mozilla提供的源\nsudo add-apt-repository ppa:mozillateam\u002Fppa\n# 安装Firefox\nsudo apt update\nsudo apt install firefox\n",[64,119851,119852,119857,119866,119871,119879],{"__ignoreMap":62},[67,119853,119854],{"class":69,"line":70},[67,119855,119856],{"class":202},"# 添加Mozilla提供的源\n",[67,119858,119859,119861,119863],{"class":69,"line":143},[67,119860,298],{"class":112},[67,119862,119381],{"class":84},[67,119864,119865],{"class":84}," ppa:mozillateam\u002Fppa\n",[67,119867,119868],{"class":69,"line":149},[67,119869,119870],{"class":202},"# 安装Firefox\n",[67,119872,119873,119875,119877],{"class":69,"line":155},[67,119874,298],{"class":112},[67,119876,117854],{"class":84},[67,119878,303],{"class":84},[67,119880,119881,119883,119885,119887],{"class":69,"line":161},[67,119882,298],{"class":112},[67,119884,117854],{"class":84},[67,119886,312],{"class":84},[67,119888,119542],{"class":84},[14,119890,119892],{"id":119891},"_328-跨ubuntu大版本更新","3.2.8 跨Ubuntu大版本更新",[19,119894,119895],{},"跨Ubuntu大版本更新，是指从Ubuntu22.04LTS更新到Ubuntu24.04LTS这种大版本更新。",[19,119897,119898],{},"跨Ubuntu大版本更新时，建议恢复snap，等更新完毕后再删掉snap，以防止Canonical公司从中作妖。",[57,119900,119902],{"className":117833,"code":119901,"language":117835,"meta":62,"style":62},"#删掉禁止安装snap的配置文件\nsudo rm -rf \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\nsudo apt update\n\nsudo apt dist-update\n",[64,119903,119904,119909,119919,119927,119931],{"__ignoreMap":62},[67,119905,119906],{"class":69,"line":70},[67,119907,119908],{"class":202},"#删掉禁止安装snap的配置文件\n",[67,119910,119911,119913,119915,119917],{"class":69,"line":143},[67,119912,298],{"class":112},[67,119914,119090],{"class":84},[67,119916,26034],{"class":208},[67,119918,119752],{"class":84},[67,119920,119921,119923,119925],{"class":69,"line":149},[67,119922,298],{"class":112},[67,119924,117854],{"class":84},[67,119926,303],{"class":84},[67,119928,119929],{"class":69,"line":155},[67,119930,177],{"emptyLinePlaceholder":176},[67,119932,119933,119935,119937],{"class":69,"line":161},[67,119934,298],{"class":112},[67,119936,117854],{"class":84},[67,119938,119939],{"class":84}," dist-update\n",[803,119941,119943],{"id":119942},"_33-中文输入法","3.3 中文输入法",[14,119945,119947],{"id":119946},"_331-搜狗ubuntu2204及以下","3.3.1 搜狗(Ubuntu22.04及以下)",[19,119949,119950],{},"官网下载搜狗输入法",[19,119952,119953],{},[725,119954],{"alt":62,"src":119955},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-057.png",[19,119957,119958],{},[725,119959],{"alt":62,"src":119960},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-058.png",[19,119962,119963],{},"打开终端输入如下",[57,119965,119967],{"className":117833,"code":119966,"language":117835,"meta":62,"style":62},"cd ~\u002FDownloads\u002F\nsudo apt install .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[64,119968,119969,119976],{"__ignoreMap":62},[67,119970,119971,119973],{"class":69,"line":70},[67,119972,101813],{"class":208},[67,119974,119975],{"class":84}," ~\u002FDownloads\u002F\n",[67,119977,119978,119980,119982,119984],{"class":69,"line":143},[67,119979,298],{"class":112},[67,119981,117854],{"class":84},[67,119983,312],{"class":84},[67,119985,119986],{"class":84}," .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[19,119988,119989],{},"打开Fcitx",[19,119991,119992,119995],{},[725,119993],{"alt":62,"src":119994},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-059.png",[725,119996],{"alt":62,"src":119997},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-060.png",[19,119999,120000],{},[725,120001],{"alt":62,"src":120002},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-061.png",[19,120004,120005],{},"添加搜狗输入法",[19,120007,120008],{},[725,120009],{"alt":62,"src":120010},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-062.png",[19,120012,120013],{},[725,120014],{"alt":62,"src":120015},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-063.png",[19,120017,120018],{},"将搜狗输入法设置为唯一输入法",[19,120020,120021],{},[725,120022],{"alt":62,"src":120023},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-064.png",[14,120025,120027],{"id":120026},"_332-fcitx5ubuntu2204及以上debian12及以上","3.3.2 Fcitx5(Ubuntu22.04及以上、Debian12及以上)",[815,120029,120030],{},[818,120031,120032],{},"卸载旧输入法",[57,120034,120036],{"className":119060,"code":120035,"language":119062,"meta":62,"style":62},"sudo apt purge fcitx* ibus*\n",[64,120037,120038],{"__ignoreMap":62},[67,120039,120040,120042,120044,120046,120049,120051,120054],{"class":69,"line":70},[67,120041,298],{"class":112},[67,120043,117854],{"class":84},[67,120045,118195],{"class":84},[67,120047,120048],{"class":84}," fcitx",[67,120050,1312],{"class":208},[67,120052,120053],{"class":84}," ibus",[67,120055,119785],{"class":208},[815,120057,120058],{"start":143},[818,120059,120060],{},"安装Fcitx5",[57,120062,120064],{"className":117833,"code":120063,"language":117835,"meta":62,"style":62},"# 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",[64,120065,120066,120071,120085,120089,120094,120103,120111],{"__ignoreMap":62},[67,120067,120068],{"class":69,"line":70},[67,120069,120070],{"class":202},"# Ubuntu22.04及以上、Debian12及以上\n",[67,120072,120073,120075,120077,120079,120082],{"class":69,"line":143},[67,120074,298],{"class":112},[67,120076,117854],{"class":84},[67,120078,312],{"class":84},[67,120080,120081],{"class":84}," fcitx5",[67,120083,120084],{"class":84}," fcitx5-chinese-addons\n",[67,120086,120087],{"class":69,"line":149},[67,120088,177],{"emptyLinePlaceholder":176},[67,120090,120091],{"class":69,"line":155},[67,120092,120093],{"class":202},"# Ubuntu20.04\n",[67,120095,120096,120098,120100],{"class":69,"line":161},[67,120097,298],{"class":112},[67,120099,119381],{"class":84},[67,120101,120102],{"class":84}," ppa:zhsj\u002Ffcitx5\n",[67,120104,120105,120107,120109],{"class":69,"line":167},[67,120106,298],{"class":112},[67,120108,117854],{"class":84},[67,120110,303],{"class":84},[67,120112,120113,120115,120117,120119,120121],{"class":69,"line":173},[67,120114,298],{"class":112},[67,120116,117854],{"class":84},[67,120118,312],{"class":84},[67,120120,120081],{"class":84},[67,120122,120084],{"class":84},[815,120124,120125,120128],{"start":149},[818,120126,120127],{},"Reboot System",[818,120129,120130],{},"启动Fcitx5",[19,120132,120133],{},[725,120134],{"alt":62,"src":120135},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-065.png",[815,120137,120138],{"start":161},[818,120139,120140],{},"修改一些设置",[19,120142,120143],{},"将Pinyin和Keyboard - English US加入到左边。",[19,120145,120146],{},[725,120147],{"alt":62,"src":120148},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-066.png",[19,120150,120151],{},"添加快捷键以便于更好切换中英文",[19,120153,120154],{},[725,120155],{"alt":62,"src":120156},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-067.png",[815,120158,120159],{"start":167},[818,120160,120161],{},"重启",[57,120163,120165],{"className":119060,"code":120164,"language":119062,"meta":62,"style":62},"sudo shutdown -r now\n",[64,120166,120167],{"__ignoreMap":62},[67,120168,120169,120171,120174,120177],{"class":69,"line":70},[67,120170,298],{"class":112},[67,120172,120173],{"class":84}," shutdown",[67,120175,120176],{"class":208}," -r",[67,120178,120179],{"class":84}," now\n",[815,120181,120182],{"start":173},[818,120183,120184],{},"使用Fcitx5工具箱优化Fcitx5(进入Github自己看说明书安装)",[19,120186,120187],{},[28,120188,120189],{"href":120189,"rel":120190},"https:\u002F\u002Fgithub.com\u002Ffcitx\u002Ffcitx5",[32],[815,120192,120193],{"start":180},[818,120194,120195],{},"再重启",[57,120197,120198],{"className":119060,"code":120164,"language":119062,"meta":62,"style":62},[64,120199,120200],{"__ignoreMap":62},[67,120201,120202,120204,120206,120208],{"class":69,"line":70},[67,120203,298],{"class":112},[67,120205,120173],{"class":84},[67,120207,120176],{"class":208},[67,120209,120179],{"class":84},[803,120211,120213],{"id":120212},"_34-pip3源替换","3.4 pip3源替换",[19,120215,120216],{},"非Debian系发行版需要做。",[19,120218,120219],{},"像Ubuntu、Debian这类使用apt工具的发行版不需要此操作。",[19,120221,120222],{},"使用dnf的系统也可能不用做。",[57,120224,120226],{"className":117833,"code":120225,"language":117835,"meta":62,"style":62},"# 检查是否已安装 pip\npip3 --version\n# 如果未安装，先安装 pip3（见下方）\n# 配置 pip 使用清华源\npip3 config set global.index-url https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[64,120227,120228,120233,120240,120245,120250],{"__ignoreMap":62},[67,120229,120230],{"class":69,"line":70},[67,120231,120232],{"class":202},"# 检查是否已安装 pip\n",[67,120234,120235,120238],{"class":69,"line":143},[67,120236,120237],{"class":112},"pip3",[67,120239,356],{"class":208},[67,120241,120242],{"class":69,"line":149},[67,120243,120244],{"class":202},"# 如果未安装，先安装 pip3（见下方）\n",[67,120246,120247],{"class":69,"line":155},[67,120248,120249],{"class":202},"# 配置 pip 使用清华源\n",[67,120251,120252,120254,120257,120260,120263],{"class":69,"line":161},[67,120253,120237],{"class":112},[67,120255,120256],{"class":84}," config",[67,120258,120259],{"class":84}," set",[67,120261,120262],{"class":84}," global.index-url",[67,120264,120265],{"class":84}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[19,120267,120268],{},"按图中顺序敲，但是不出意外的话，会报错，因为大部分发行版不自带pip，所以请接着往下看。",[19,120270,120271],{},[725,120272],{"alt":62,"src":120273},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-068.png",[57,120275,120277],{"className":117833,"code":120276,"language":117835,"meta":62,"style":62},"#安装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",[64,120278,120279,120284,120292,120303,120307,120312,120331,120335,120340,120352,120356,120361],{"__ignoreMap":62},[67,120280,120281],{"class":69,"line":70},[67,120282,120283],{"class":202},"#安装pip3\n",[67,120285,120286,120288,120290],{"class":69,"line":143},[67,120287,298],{"class":112},[67,120289,117854],{"class":84},[67,120291,303],{"class":84},[67,120293,120294,120296,120298,120300],{"class":69,"line":149},[67,120295,298],{"class":112},[67,120297,116],{"class":84},[67,120299,312],{"class":84},[67,120301,120302],{"class":84}," python3-pip\n",[67,120304,120305],{"class":69,"line":155},[67,120306,177],{"emptyLinePlaceholder":176},[67,120308,120309],{"class":69,"line":161},[67,120310,120311],{"class":202},"#更新pip3\n",[67,120313,120314,120316,120318,120320,120322,120324,120327,120329],{"class":69,"line":167},[67,120315,101416],{"class":112},[67,120317,101419],{"class":208},[67,120319,101442],{"class":84},[67,120321,312],{"class":84},[67,120323,494],{"class":208},[67,120325,120326],{"class":84}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple",[67,120328,101447],{"class":208},[67,120330,101450],{"class":84},[67,120332,120333],{"class":69,"line":173},[67,120334,177],{"emptyLinePlaceholder":176},[67,120336,120337],{"class":69,"line":180},[67,120338,120339],{"class":202},"#设置pip源为清华源\n",[67,120341,120342,120344,120346,120348,120350],{"class":69,"line":186},[67,120343,120237],{"class":112},[67,120345,120256],{"class":84},[67,120347,120259],{"class":84},[67,120349,120262],{"class":84},[67,120351,120265],{"class":84},[67,120353,120354],{"class":69,"line":444},[67,120355,177],{"emptyLinePlaceholder":176},[67,120357,120358],{"class":69,"line":2335},[67,120359,120360],{"class":202},"#测试\n",[67,120362,120363,120365,120367,120369,120371,120373],{"class":69,"line":2340},[67,120364,101416],{"class":112},[67,120366,101419],{"class":208},[67,120368,101442],{"class":84},[67,120370,312],{"class":84},[67,120372,101447],{"class":208},[67,120374,101450],{"class":84},[19,120376,120377],{},"成功的话，会看到Looking后面是tsinghua字样。",[19,120379,120380],{},[725,120381],{"alt":62,"src":120382},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-069.png",[803,120384,120386],{"id":120385},"_35-显卡驱动安装","3.5 显卡驱动安装",[14,120388,120390],{"id":120389},"_351-卸载显卡驱动卸载干净","3.5.1 卸载显卡驱动(卸载干净)",[57,120392,120394],{"className":119060,"code":120393,"language":119062,"meta":62,"style":62},"# 如果是使用apt安装的驱动\nsudo apt-get remove --purge nvidia*\n# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\nsudo \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[64,120395,120396,120401,120416,120421],{"__ignoreMap":62},[67,120397,120398],{"class":69,"line":70},[67,120399,120400],{"class":202},"# 如果是使用apt安装的驱动\n",[67,120402,120403,120405,120407,120409,120411,120414],{"class":69,"line":143},[67,120404,298],{"class":112},[67,120406,116],{"class":84},[67,120408,119],{"class":84},[67,120410,119695],{"class":208},[67,120412,120413],{"class":84}," nvidia",[67,120415,119785],{"class":208},[67,120417,120418],{"class":69,"line":149},[67,120419,120420],{"class":202},"# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\n",[67,120422,120423,120425],{"class":69,"line":155},[67,120424,298],{"class":112},[67,120426,120427],{"class":84}," \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[14,120429,120431],{"id":120430},"_352-安装显卡驱动","3.5.2 安装显卡驱动",[40,120433,120435],{"id":120434},"_3521-apt安装英伟达驱动方式一","3.5.2.1 APT安装英伟达驱动（方式一）",[23626,120437,120439],{"id":120438},"_35211-ubuntu","3.5.2.1.1 Ubuntu",[57,120441,120443],{"className":119060,"code":120442,"language":119062,"meta":62,"style":62},"# 安装英伟达驱动\nsudo apt install nvidia-driver-版本号\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[64,120444,120445,120450,120461,120466,120476,120481],{"__ignoreMap":62},[67,120446,120447],{"class":69,"line":70},[67,120448,120449],{"class":202},"# 安装英伟达驱动\n",[67,120451,120452,120454,120456,120458],{"class":69,"line":143},[67,120453,298],{"class":112},[67,120455,117854],{"class":84},[67,120457,312],{"class":84},[67,120459,120460],{"class":84}," nvidia-driver-版本号\n",[67,120462,120463],{"class":69,"line":149},[67,120464,120465],{"class":202},"# 重启 \n",[67,120467,120468,120470,120472,120474],{"class":69,"line":155},[67,120469,298],{"class":112},[67,120471,120173],{"class":84},[67,120473,120176],{"class":208},[67,120475,120179],{"class":84},[67,120477,120478],{"class":69,"line":161},[67,120479,120480],{"class":202},"# 检查驱动是否安装成功\n",[67,120482,120483],{"class":69,"line":167},[67,120484,120485],{"class":112},"nvidia-smi\n",[23626,120487,120489],{"id":120488},"_35212-debian","3.5.2.1.2 Debian",[57,120491,120493],{"className":119060,"code":120492,"language":119062,"meta":62,"style":62},"# 安装英伟达驱动\nsudo apt install nvidia-driver nvidia-settings\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[64,120494,120495,120499,120513,120517,120527,120531],{"__ignoreMap":62},[67,120496,120497],{"class":69,"line":70},[67,120498,120449],{"class":202},[67,120500,120501,120503,120505,120507,120510],{"class":69,"line":143},[67,120502,298],{"class":112},[67,120504,117854],{"class":84},[67,120506,312],{"class":84},[67,120508,120509],{"class":84}," nvidia-driver",[67,120511,120512],{"class":84}," nvidia-settings\n",[67,120514,120515],{"class":69,"line":149},[67,120516,120465],{"class":202},[67,120518,120519,120521,120523,120525],{"class":69,"line":155},[67,120520,298],{"class":112},[67,120522,120173],{"class":84},[67,120524,120176],{"class":208},[67,120526,120179],{"class":84},[67,120528,120529],{"class":69,"line":161},[67,120530,120480],{"class":202},[67,120532,120533],{"class":69,"line":167},[67,120534,120485],{"class":112},[40,120536,120538],{"id":120537},"_3522-官网下载驱动方式二","3.5.2.2 官网下载驱动（方式二）",[19,120540,120541,120542,120545],{},"使用这种方式安装，需要先禁用掉nouveau，请先往下翻，找到",[336,120543,120544],{},"常见问题","那节内容里的禁用nouveau，将nouveau禁用。",[19,120547,120548,120549],{},"用以下命令停止可视化桌面环境（用ctrl alt f*也可以）",[24270,120550,120551],{},[336,120552,120553],{},"（也可以不禁用桌面环境，直接进行下一步。）",[57,120555,120557],{"className":119060,"code":120556,"language":119062,"meta":62,"style":62},"# 通用的命令（sudo telinit 5是打开图形界面）\nsudo telinit 3\n# ubuntu 使用下方命令\nsudo service lightdm stop\n# Fedora 使用下方命令\nsudo systemctl isolate multi-user.target\n",[64,120558,120559,120564,120574,120579,120592,120597],{"__ignoreMap":62},[67,120560,120561],{"class":69,"line":70},[67,120562,120563],{"class":202},"# 通用的命令（sudo telinit 5是打开图形界面）\n",[67,120565,120566,120568,120571],{"class":69,"line":143},[67,120567,298],{"class":112},[67,120569,120570],{"class":84}," telinit",[67,120572,120573],{"class":208}," 3\n",[67,120575,120576],{"class":69,"line":149},[67,120577,120578],{"class":202},"# ubuntu 使用下方命令\n",[67,120580,120581,120583,120586,120589],{"class":69,"line":155},[67,120582,298],{"class":112},[67,120584,120585],{"class":84}," service",[67,120587,120588],{"class":84}," lightdm",[67,120590,120591],{"class":84}," stop\n",[67,120593,120594],{"class":69,"line":161},[67,120595,120596],{"class":202},"# Fedora 使用下方命令\n",[67,120598,120599,120601,120603,120606],{"class":69,"line":167},[67,120600,298],{"class":112},[67,120602,577],{"class":84},[67,120604,120605],{"class":84}," isolate",[67,120607,120608],{"class":84}," multi-user.target\n",[19,120610,120611],{},"之后会进入一个新的命令行会话，使用当前的用户名密码登录。(不用使用root用户)",[57,120613,120615],{"className":119060,"code":120614,"language":119062,"meta":62,"style":62},"# 编译环境+准备工作\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",[64,120616,120617,120622,120633,120638,120645,120650,120662,120667,120674,120679],{"__ignoreMap":62},[67,120618,120619],{"class":69,"line":70},[67,120620,120621],{"class":202},"# 编译环境+准备工作\n",[67,120623,120624,120626,120628,120630],{"class":69,"line":143},[67,120625,298],{"class":112},[67,120627,117854],{"class":84},[67,120629,312],{"class":84},[67,120631,120632],{"class":84}," build-essential\n",[67,120634,120635],{"class":69,"line":149},[67,120636,120637],{"class":202},"# 进入到.run目录中\n",[67,120639,120640,120642],{"class":69,"line":155},[67,120641,101813],{"class":208},[67,120643,120644],{"class":84}," \u002Fhome\u002Ftungchiahui\u002FDownloads\u002F\n",[67,120646,120647],{"class":69,"line":161},[67,120648,120649],{"class":202},"# 给驱动文件增加可执行权限：\n",[67,120651,120652,120654,120656,120659],{"class":69,"line":167},[67,120653,298],{"class":112},[67,120655,25292],{"class":84},[67,120657,120658],{"class":84}," a+x",[67,120660,120661],{"class":84}," NVIDIA-Linux-x86_64-550.107.02.run\n",[67,120663,120664],{"class":69,"line":173},[67,120665,120666],{"class":202},"# 然后执行安装：\n",[67,120668,120669,120671],{"class":69,"line":180},[67,120670,298],{"class":112},[67,120672,120673],{"class":84}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run\n",[67,120675,120676],{"class":69,"line":186},[67,120677,120678],{"class":202},"# 如果有异常则：(一般不用下方这条，会导致OPENGL没法被安装，这样ROS有些功能无法使用)\n",[67,120680,120681,120683,120686],{"class":69,"line":444},[67,120682,298],{"class":112},[67,120684,120685],{"class":84}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run",[67,120687,120688],{"class":208},"  --no-opengl-files\n",[19,120690,120691],{},"安装完毕重启即可",[57,120693,120695],{"className":119060,"code":120694,"language":119062,"meta":62,"style":62},"# 重启 \nsudo reboot\n# 检查驱动是否安装成功\nnvidia-smi\n",[64,120696,120697,120701,120707,120711],{"__ignoreMap":62},[67,120698,120699],{"class":69,"line":70},[67,120700,120465],{"class":202},[67,120702,120703,120705],{"class":69,"line":143},[67,120704,298],{"class":112},[67,120706,713],{"class":84},[67,120708,120709],{"class":69,"line":149},[67,120710,120480],{"class":202},[67,120712,120713],{"class":69,"line":155},[67,120714,120485],{"class":112},[14,120716,120718],{"id":120717},"_353-安装cuda","3.5.3 安装CUDA",[19,120720,120721],{},"（此教程以Debian 12 Bookworm和RTX3060Laptop为例）(Ubuntu也类似)",[19,120723,120724],{},[725,120725],{"alt":62,"src":120726},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-070.png",[815,120728,120729],{},[818,120730,120731],{},"先查看显卡驱动所支持的最高CUDA版本",[57,120733,120734],{"className":119060,"code":120485,"language":119062,"meta":62,"style":62},[64,120735,120736],{"__ignoreMap":62},[67,120737,120738],{"class":69,"line":70},[67,120739,120485],{"class":112},[19,120741,120742],{},"左边是英伟达驱动版本，右边是所支持CUDA的最高版本，注意是最高版本，比这个版本低的CUDA都是可以安装的。(不用追求最高，稳定即可，虽然都很稳定)",[19,120744,120745],{},[725,120746],{"alt":62,"src":120747},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-071.png",[815,120749,120750],{"start":143},[818,120751,120752],{},"下载CUDA并安装CUDA",[19,120754,118839,120755],{},[28,120756,118842],{"href":118842,"rel":120757},[32],[19,120759,120760],{},"选择一个版本，这里以CUDA12.4为例（绿色框住的都是我这台电脑对应可安装的版本，而红色框则不能）",[19,120762,120763],{},[725,120764],{"alt":62,"src":120765},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-072.png",[19,120767,120768,120769,120774],{},"我这里是Intel CPU(X86_64架构或者叫amd64架构)，所以选择X86_64。（AMD和Intel全是X86的，如果分不清，请看",[28,120770,120773],{"href":120771,"rel":120772},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FPqsGwcPCuidbN6k13jfcGWtWn0b",[32],"Vinci机器人队单片机教程","）",[19,120776,120777],{},"我是Debian12，所以选择了Debian12 ,(你是Ubuntu要选择Ubuntu)如下图所示，建议选择runfile文件进行安装。",[19,120779,120780],{},[725,120781],{"alt":62,"src":120782},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-073.png",[19,120784,120785],{},"将最下方框框里的命令敲入终端",[57,120787,120789],{"className":119060,"code":120788,"language":119062,"meta":62,"style":62},"# 在当前文件夹下创建一个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",[64,120790,120791,120796,120805,120810,120817,120822,120830,120835,120846,120851],{"__ignoreMap":62},[67,120792,120793],{"class":69,"line":70},[67,120794,120795],{"class":202},"# 在当前文件夹下创建一个ttt的子文件夹\n",[67,120797,120798,120800,120802],{"class":69,"line":143},[67,120799,101803],{"class":112},[67,120801,29753],{"class":208},[67,120803,120804],{"class":84}," .\u002Fttt\n",[67,120806,120807],{"class":69,"line":149},[67,120808,120809],{"class":202},"# 进入ttt文件夹\n",[67,120811,120812,120814],{"class":69,"line":155},[67,120813,101813],{"class":208},[67,120815,120816],{"class":84}," ttt\n",[67,120818,120819],{"class":69,"line":161},[67,120820,120821],{"class":202},"# 输入复制的第一条命令（用来下载cuda的runfile文件）\n",[67,120823,120824,120827],{"class":69,"line":167},[67,120825,120826],{"class":112},"wget",[67,120828,120829],{"class":84}," https:\u002F\u002Fdeveloper.download.nvidia.com\u002Fcompute\u002Fcuda\u002F12.4.0\u002Flocal_installers\u002Fcuda_12.4.0_550.54.14_linux.run\n",[67,120831,120832],{"class":69,"line":173},[67,120833,120834],{"class":202},"# 给予权限\n",[67,120836,120837,120839,120841,120843],{"class":69,"line":180},[67,120838,298],{"class":112},[67,120840,25292],{"class":84},[67,120842,120658],{"class":84},[67,120844,120845],{"class":84}," .\u002Fcuda_12.4.0_550.54.14_linux.run\n",[67,120847,120848],{"class":69,"line":186},[67,120849,120850],{"class":202},"# 运行脚本\n",[67,120852,120853,120855],{"class":69,"line":444},[67,120854,298],{"class":112},[67,120856,120845],{"class":84},[19,120858,120859],{},[725,120860],{"alt":62,"src":120861},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-074.png",[19,120863,120864],{},"正在安装中：",[19,120866,120867],{},[725,120868],{"alt":62,"src":120869},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-075.png",[19,120871,120872],{},"输入accept接受即可",[19,120874,120875],{},[725,120876],{"alt":62,"src":120877},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-076.png",[19,120879,120880],{},"因为我们已经安装了驱动，所以删掉该项，Install即可。",[19,120882,120883],{},[725,120884],{"alt":62,"src":120885},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-077.png",[19,120887,120888],{},"等待片刻后，一般不出红色字体就是安装成功了，可以读读英语确认一下。(顺便确定一下位置)",[19,120890,120891],{},[725,120892],{"alt":62,"src":120893},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-078.png",[815,120895,120896],{"start":149},[818,120897,120898],{},"配置环境",[19,120900,120901],{},"根据上方确认一下路径，比如我上面红色框起来的为",[57,120903,120905],{"className":119060,"code":120904,"language":119062,"meta":62,"style":62},"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",[64,120906,120907,120923,120938],{"__ignoreMap":62},[67,120908,120909,120912,120915,120918,120921],{"class":69,"line":70},[67,120910,120911],{"class":112},"Please",[67,120913,120914],{"class":84}," make",[67,120916,120917],{"class":84}," sure",[67,120919,120920],{"class":84}," that",[67,120922,3395],{"class":77},[67,120924,120925,120927,120930,120933,120936],{"class":69,"line":143},[67,120926,52808],{"class":112},[67,120928,120929],{"class":84},"   PATH",[67,120931,120932],{"class":84}," includes",[67,120934,120935],{"class":84}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin",[67,120937,3395],{"class":77},[67,120939,120940,120942,120945,120947,120950,120953,120955,120958,120961,120964,120967,120969,120972,120974],{"class":69,"line":149},[67,120941,52808],{"class":112},[67,120943,120944],{"class":84},"   LD_LIBRARY_PATH",[67,120946,120932],{"class":84},[67,120948,120949],{"class":84}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64,",[67,120951,120952],{"class":84}," or,",[67,120954,5928],{"class":84},[67,120956,120957],{"class":84}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64",[67,120959,120960],{"class":84}," to",[67,120962,120963],{"class":84}," \u002Fetc\u002Fld.so.conf",[67,120965,120966],{"class":84}," and",[67,120968,27767],{"class":84},[67,120970,120971],{"class":84}," ldconfig",[67,120973,65141],{"class":84},[67,120975,120976],{"class":84}," root\n",[19,120978,120979],{},"如果刚才忘记查看了，也可以使用下方命令查看路径：",[57,120981,120983],{"className":119060,"code":120982,"language":119062,"meta":62,"style":62},"which nvcc\n",[64,120984,120985],{"__ignoreMap":62},[67,120986,120987,120990],{"class":69,"line":70},[67,120988,120989],{"class":208},"which",[67,120991,120992],{"class":84}," nvcc\n",[19,120994,120995],{},[725,120996],{"alt":62,"src":120997},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-079.png",[19,120999,121000],{},"所以我进行以下操作：",[57,121002,121004],{"className":119060,"code":121003,"language":119062,"meta":62,"style":62},"sudo vim ~\u002F.bashrc\n",[64,121005,121006],{"__ignoreMap":62},[67,121007,121008,121010,121012],{"class":69,"line":70},[67,121009,298],{"class":112},[67,121011,119120],{"class":84},[67,121013,121014],{"class":84}," ~\u002F.bashrc\n",[19,121016,121017],{},"复制下面这一串到~\u002F.bashrc文件中，并保存，不会用vim编辑器的请自行百度。",[57,121019,121021],{"className":119060,"code":121020,"language":119062,"meta":62,"style":62},"export PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\nexport LD_LIBRARY_PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[64,121022,121023,121035],{"__ignoreMap":62},[67,121024,121025,121027,121030,121032],{"class":69,"line":70},[67,121026,25754],{"class":73},[67,121028,121029],{"class":77}," PATH",[67,121031,909],{"class":73},[67,121033,121034],{"class":77},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\n",[67,121036,121037,121039,121042,121044],{"class":69,"line":143},[67,121038,25754],{"class":73},[67,121040,121041],{"class":77}," LD_LIBRARY_PATH",[67,121043,909],{"class":73},[67,121045,121046],{"class":77},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[19,121048,121049],{},[725,121050],{"alt":62,"src":121051},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-080.png",[57,121053,121055],{"className":119060,"code":121054,"language":119062,"meta":62,"style":62},"# 刷新当前终端的环境变量\nsource ~\u002F.bashrc\n# 验证CUDA是否安装成功\nnvcc -V\n",[64,121056,121057,121062,121068,121073],{"__ignoreMap":62},[67,121058,121059],{"class":69,"line":70},[67,121060,121061],{"class":202},"# 刷新当前终端的环境变量\n",[67,121063,121064,121066],{"class":69,"line":143},[67,121065,101430],{"class":208},[67,121067,121014],{"class":84},[67,121069,121070],{"class":69,"line":149},[67,121071,121072],{"class":202},"# 验证CUDA是否安装成功\n",[67,121074,121075,121078],{"class":69,"line":155},[67,121076,121077],{"class":112},"nvcc",[67,121079,121080],{"class":208}," -V\n",[19,121082,121083],{},"出现下图这种则安装成功。",[19,121085,121086],{},[725,121087],{"alt":62,"src":121088},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-081.png",[14,121090,121092],{"id":121091},"_354-安装cudnn","3.5.4 安装cuDNN",[815,121094,121095],{},[818,121096,121097],{},"据安装好的CUDA版本选择合适的cuDNN版本进行下载，注意这里是需要注册登录的：",[19,121099,121100,121101,121106],{},"前往 NVIDIA cuDNN 下载页面：",[28,121102,121105],{"href":121103,"rel":121104},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn%EF%BC%88%E9%9C%80%E8%A6%81%E6%B3%A8%E5%86%8C",[32],"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn（需要注册"," NVIDIA 开发者账号并登录）",[19,121108,121109],{},"因为我是CUDA12.4，所以下方红圈版本都是可以安装的，越新越好。",[19,121111,121112],{},[725,121113],{"alt":62,"src":121114},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-082.png",[19,121116,121117],{},"红色是X86架构的所有Linux通用的，所以我选择红色的。",[19,121119,121120],{},[725,121121],{"alt":62,"src":121122},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-083.png",[19,121124,121125],{},"绿色的是X86架构的Ubuntu，是Ubuntu且CPU为X86架构的可以选择下载。",[19,121127,121128],{},"蓝色的是arm64(aarch64)架构的Ubuntu，是Ubuntu且CPU为arm64(aarch64)架构的可以选择下载。",[19,121130,121131],{},[336,121132,121133],{},"我这里选择所有Linux X86_64最通用的办法：",[19,121135,121136],{},"下载好的：",[19,121138,121139],{},[725,121140],{"alt":62,"src":121141},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-084.png",[815,121143,121144],{"start":143},[818,121145,121146],{},"安装cuDNN",[19,121148,121149],{},"找到该文件所在目录，并打开终端，cd到该目录。",[19,121151,121152],{},[725,121153],{"alt":62,"src":121154},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-085.png",[19,121156,121157],{},"解压文件，并复制到对应位置完成安装",[57,121159,121161],{"className":119060,"code":121160,"language":119062,"meta":62,"style":62},"# 解压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",[64,121162,121163,121168,121179,121184,121191,121196,121212,121226,121231,121242,121251,121255,121271],{"__ignoreMap":62},[67,121164,121165],{"class":69,"line":70},[67,121166,121167],{"class":202},"# 解压cuDNN文件\n",[67,121169,121170,121173,121176],{"class":69,"line":143},[67,121171,121172],{"class":112},"tar",[67,121174,121175],{"class":208}," -xvf",[67,121177,121178],{"class":84}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive.tar.xz\n",[67,121180,121181],{"class":69,"line":149},[67,121182,121183],{"class":202},"# cd进文件夹\n",[67,121185,121186,121188],{"class":69,"line":155},[67,121187,101813],{"class":208},[67,121189,121190],{"class":84}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive\n",[67,121192,121193],{"class":69,"line":161},[67,121194,121195],{"class":202},"# 复制cuDNN文件到CUDA目录\n",[67,121197,121198,121200,121202,121205,121207,121210],{"class":69,"line":167},[67,121199,298],{"class":112},[67,121201,28398],{"class":84},[67,121203,121204],{"class":84}," include\u002Fcudnn",[67,121206,1312],{"class":208},[67,121208,121209],{"class":84},"    \u002Fusr\u002Flocal\u002Fcuda\u002Finclude",[67,121211,3395],{"class":77},[67,121213,121214,121216,121218,121221,121223],{"class":69,"line":173},[67,121215,298],{"class":112},[67,121217,28398],{"class":84},[67,121219,121220],{"class":84}," lib\u002Flibcudnn",[67,121222,1312],{"class":208},[67,121224,121225],{"class":84},"    \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\n",[67,121227,121228],{"class":69,"line":180},[67,121229,121230],{"class":202},"# 对比一下有没有缺文件\n",[67,121232,121233,121235,121238,121240],{"class":69,"line":186},[67,121234,27298],{"class":112},[67,121236,121237],{"class":84}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn",[67,121239,1312],{"class":208},[67,121241,3395],{"class":77},[67,121243,121244,121246,121249],{"class":69,"line":444},[67,121245,27298],{"class":112},[67,121247,121248],{"class":84}," \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\u002Flibcudnn",[67,121250,119785],{"class":208},[67,121252,121253],{"class":69,"line":2335},[67,121254,120834],{"class":202},[67,121256,121257,121259,121261,121264,121266,121268],{"class":69,"line":2340},[67,121258,298],{"class":112},[67,121260,25292],{"class":84},[67,121262,121263],{"class":84}," a+r",[67,121265,121237],{"class":84},[67,121267,1312],{"class":208},[67,121269,121270],{"class":77},"   \n",[67,121272,121273,121275,121277,121279,121281],{"class":69,"line":2346},[67,121274,298],{"class":112},[67,121276,25292],{"class":84},[67,121278,121263],{"class":84},[67,121280,121248],{"class":84},[67,121282,119785],{"class":208},[815,121284,121285],{"start":149},[818,121286,121287],{},"检查是否安装成功",[57,121289,121291],{"className":119060,"code":121290,"language":119062,"meta":62,"style":62},"# 检查cuDNN版本命令\ncat \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h | grep CUDNN_MAJOR -A 2\n",[64,121292,121293,121298],{"__ignoreMap":62},[67,121294,121295],{"class":69,"line":70},[67,121296,121297],{"class":202},"# 检查cuDNN版本命令\n",[67,121299,121300,121303,121306,121308,121310,121313,121316],{"class":69,"line":143},[67,121301,121302],{"class":112},"cat",[67,121304,121305],{"class":84}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h",[67,121307,266],{"class":73},[67,121309,30773],{"class":112},[67,121311,121312],{"class":84}," CUDNN_MAJOR",[67,121314,121315],{"class":208}," -A",[67,121317,48260],{"class":208},[19,121319,121320],{},"出现下图这样的就是安装成功了",[19,121322,121323],{},[725,121324],{"alt":62,"src":121325},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-086.png",[815,121327,121328],{"start":155},[818,121329,121330],{},"软链接(一般不需要)",[57,121332,121334],{"className":119060,"code":121333,"language":119062,"meta":62,"style":62},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\nsudo ldconfig\n",[64,121335,121336,121341],{"__ignoreMap":62},[67,121337,121338],{"class":69,"line":70},[67,121339,121340],{"class":202},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\n",[67,121342,121343,121345],{"class":69,"line":143},[67,121344,298],{"class":112},[67,121346,121347],{"class":84}," ldconfig\n",[19,121349,121350],{},"如果出现下列提示，则需要软链接**(如果没有下列提示，则什么都不需要做)**",[57,121352,121357],{"className":121353,"code":121354,"language":121355,"meta":121356,"style":62},"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",[64,121358,121359,121364,121369,121374,121379,121384,121389],{"__ignoreMap":62},[67,121360,121361],{"class":69,"line":70},[67,121362,121363],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_train.so.8 is not a symbolic link  \n",[67,121365,121366],{"class":69,"line":143},[67,121367,121368],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_train.so.8 is not a symbolic link  \n",[67,121370,121371],{"class":69,"line":149},[67,121372,121373],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_infer.so.8 is not a symbolic link  \n",[67,121375,121376],{"class":69,"line":155},[67,121377,121378],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_infer.so.8 is not a symbolic link  \n",[67,121380,121381],{"class":69,"line":161},[67,121382,121383],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_infer.so.8 is not a symbolic link  \n",[67,121385,121386],{"class":69,"line":167},[67,121387,121388],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn.so.8 is not a symbolic link  \n",[67,121390,121391],{"class":69,"line":173},[67,121392,121393],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_train.so.8 is not a symbolic link\n",[19,121395,121396],{},"运行下方的命令",[57,121398,121400],{"className":119060,"code":121399,"language":119062,"meta":62,"style":62},"# cd进入CUDA路径\ncd \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n # 查看本路径下的需要软链接的文件名\n ls\n",[64,121401,121402,121407,121414,121419],{"__ignoreMap":62},[67,121403,121404],{"class":69,"line":70},[67,121405,121406],{"class":202},"# cd进入CUDA路径\n",[67,121408,121409,121411],{"class":69,"line":143},[67,121410,101813],{"class":208},[67,121412,121413],{"class":84}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n",[67,121415,121416],{"class":69,"line":149},[67,121417,121418],{"class":202}," # 查看本路径下的需要软链接的文件名\n",[67,121420,121421],{"class":69,"line":155},[67,121422,121423],{"class":112}," ls\n",[19,121425,121426],{},[725,121427],{"alt":62,"src":121428},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-087.png",[19,121430,121431,121432,19127,121435,19127,121438,121441],{},"如上图，我需要将",[64,121433,121434],{},"libcudnn_xxx_xxxxx.so.8.9.7",[64,121436,121437],{},"libcudnn_xxx_xxxxx.so.8",[64,121439,121440],{},"libcudnn_xxx_xxxxx.so","软链接",[57,121443,121445],{"className":119060,"code":121444,"language":119062,"meta":62,"style":62},"# 创建符号链接。对于每个 .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",[64,121446,121447,121452,121468,121482,121496,121510,121524,121538,121552,121557,121563,121568],{"__ignoreMap":62},[67,121448,121449],{"class":69,"line":70},[67,121450,121451],{"class":202},"# 创建符号链接。对于每个 .so.8 文件，需要创建一个指向该文件的符号链接，通常链接的名称是不包含 .8 的文件名。\n",[67,121453,121454,121456,121459,121462,121465],{"class":69,"line":143},[67,121455,298],{"class":112},[67,121457,121458],{"class":84}," ln",[67,121460,121461],{"class":208}," -sf",[67,121463,121464],{"class":84}," libcudnn_cnn_train.so.8.9.7",[67,121466,121467],{"class":84}," libcudnn_cnn_train.so.8\n",[67,121469,121470,121472,121474,121476,121479],{"class":69,"line":149},[67,121471,298],{"class":112},[67,121473,121458],{"class":84},[67,121475,121461],{"class":208},[67,121477,121478],{"class":84}," libcudnn_adv_infer.so.8.9.7",[67,121480,121481],{"class":84}," libcudnn_adv_infer.so.8\n",[67,121483,121484,121486,121488,121490,121493],{"class":69,"line":155},[67,121485,298],{"class":112},[67,121487,121458],{"class":84},[67,121489,121461],{"class":208},[67,121491,121492],{"class":84}," libcudnn_adv_train.so.8.9.7",[67,121494,121495],{"class":84}," libcudnn_adv_train.so.8\n",[67,121497,121498,121500,121502,121504,121507],{"class":69,"line":161},[67,121499,298],{"class":112},[67,121501,121458],{"class":84},[67,121503,121461],{"class":208},[67,121505,121506],{"class":84}," libcudnn_cnn_infer.so.8.9.7",[67,121508,121509],{"class":84}," libcudnn_cnn_infer.so.8\n",[67,121511,121512,121514,121516,121518,121521],{"class":69,"line":167},[67,121513,298],{"class":112},[67,121515,121458],{"class":84},[67,121517,121461],{"class":208},[67,121519,121520],{"class":84}," libcudnn.so.8.9.7",[67,121522,121523],{"class":84}," libcudnn.so.8\n",[67,121525,121526,121528,121530,121532,121535],{"class":69,"line":173},[67,121527,298],{"class":112},[67,121529,121458],{"class":84},[67,121531,121461],{"class":208},[67,121533,121534],{"class":84}," libcudnn_ops_infer.so.8.9.7",[67,121536,121537],{"class":84}," libcudnn_ops_infer.so.8\n",[67,121539,121540,121542,121544,121546,121549],{"class":69,"line":180},[67,121541,298],{"class":112},[67,121543,121458],{"class":84},[67,121545,121461],{"class":208},[67,121547,121548],{"class":84}," libcudnn_ops_train.so.8.9.7",[67,121550,121551],{"class":84}," libcudnn_ops_train.so.8\n",[67,121553,121554],{"class":69,"line":186},[67,121555,121556],{"class":202},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何提示，说明配置已经完成。）\n",[67,121558,121559,121561],{"class":69,"line":444},[67,121560,298],{"class":112},[67,121562,121347],{"class":84},[67,121564,121565],{"class":69,"line":2335},[67,121566,121567],{"class":202},"# 使用 ls -l 来确认符号链接是否创建成功：(再次确认链接）\n",[67,121569,121570,121572,121575,121578,121580,121583],{"class":69,"line":2340},[67,121571,27298],{"class":112},[67,121573,121574],{"class":208}," -l",[67,121576,121577],{"class":84}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_",[67,121579,1312],{"class":208},[67,121581,121582],{"class":84},".so",[67,121584,119785],{"class":208},[14,121586,121588],{"id":121587},"_355-常见问题","3.5.5 常见问题",[815,121590,121591],{},[818,121592,121593],{},"禁用开源驱动nouveau，nouveau经常会引起卡顿黑屏，所以要禁用",[57,121595,121597],{"className":119060,"code":121596,"language":119062,"meta":62,"style":62},"sudo vim \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[64,121598,121599],{"__ignoreMap":62},[67,121600,121601,121603,121605],{"class":69,"line":70},[67,121602,298],{"class":112},[67,121604,119120],{"class":84},[67,121606,121607],{"class":84}," \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[19,121609,121610],{},"blacklist-nouveau.conf文件内容如下：",[57,121612,121614],{"className":119060,"code":121613,"language":119062,"meta":62,"style":62},"blacklist nouveau\nblacklist lbm-nouveau\noptions nouveau modeset=0\nalias nouveau off\nalias lbm-nouveau off\n",[64,121615,121616,121624,121631,121643,121653],{"__ignoreMap":62},[67,121617,121618,121621],{"class":69,"line":70},[67,121619,121620],{"class":112},"blacklist",[67,121622,121623],{"class":84}," nouveau\n",[67,121625,121626,121628],{"class":69,"line":143},[67,121627,121620],{"class":112},[67,121629,121630],{"class":84}," lbm-nouveau\n",[67,121632,121633,121635,121638,121641],{"class":69,"line":149},[67,121634,116467],{"class":112},[67,121636,121637],{"class":84}," nouveau",[67,121639,121640],{"class":84}," modeset=",[67,121642,3805],{"class":208},[67,121644,121645,121648,121650],{"class":69,"line":155},[67,121646,121647],{"class":208},"alias",[67,121649,121637],{"class":84},[67,121651,121652],{"class":84}," off\n",[67,121654,121655,121657,121660],{"class":69,"line":161},[67,121656,121647],{"class":208},[67,121658,121659],{"class":84}," lbm-nouveau",[67,121661,121652],{"class":84},[19,121663,121664],{},"接着运行下方命令",[57,121666,121668],{"className":119060,"code":121667,"language":119062,"meta":62,"style":62},"sudo update-initramfs -u\n或者\nsudo dracut --force\n",[64,121669,121670,121680,121685],{"__ignoreMap":62},[67,121671,121672,121674,121677],{"class":69,"line":70},[67,121673,298],{"class":112},[67,121675,121676],{"class":84}," update-initramfs",[67,121678,121679],{"class":208}," -u\n",[67,121681,121682],{"class":69,"line":143},[67,121683,121684],{"class":112},"或者\n",[67,121686,121687,121689,121692],{"class":69,"line":149},[67,121688,298],{"class":112},[67,121690,121691],{"class":84}," dracut",[67,121693,121694],{"class":208}," --force\n",[19,121696,121697],{},"重启后，查询nouveau是否还开着，如果什么都不出现，说明禁用成功。",[57,121699,121701],{"className":119060,"code":121700,"language":119062,"meta":62,"style":62},"lsmod | grep nouveau\n",[64,121702,121703],{"__ignoreMap":62},[67,121704,121705,121708,121710,121712],{"class":69,"line":70},[67,121706,121707],{"class":112},"lsmod",[67,121709,266],{"class":73},[67,121711,30773],{"class":112},[67,121713,121623],{"class":84},[815,121715,121716],{"start":143},[818,121717,121718],{},"无法调节屏幕亮度，无法使用HDMI插口(这是因为xorg文件没配置)",[57,121720,121722],{"className":119060,"code":121721,"language":119062,"meta":62,"style":62},"sudo vim \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[64,121723,121724],{"__ignoreMap":62},[67,121725,121726,121728,121730],{"class":69,"line":70},[67,121727,298],{"class":112},[67,121729,119120],{"class":84},[67,121731,121732],{"class":84}," \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[19,121734,121735],{},"并把10-nvidia.conf里的内容修改为下方内容并保存，然后重启即可。",[57,121737,121739],{"className":119060,"code":121738,"language":119062,"meta":62,"style":62},"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",[64,121740,121741,121749,121757,121765,121772,121780,121790,121798],{"__ignoreMap":62},[67,121742,121743,121746],{"class":69,"line":70},[67,121744,121745],{"class":112},"Section",[67,121747,121748],{"class":84}," \"OutputClass\"\n",[67,121750,121751,121754],{"class":69,"line":143},[67,121752,121753],{"class":112},"   Identifier",[67,121755,121756],{"class":84}," \"nvidia\"\n",[67,121758,121759,121762],{"class":69,"line":149},[67,121760,121761],{"class":112},"   MatchDriver",[67,121763,121764],{"class":84}," \"nvidia-drm\"\n",[67,121766,121767,121770],{"class":69,"line":155},[67,121768,121769],{"class":112},"   Driver",[67,121771,121756],{"class":84},[67,121773,121774,121777],{"class":69,"line":161},[67,121775,121776],{"class":112},"   Option",[67,121778,121779],{"class":84}," \"AllowEmptyInitialConfiguration\"\n",[67,121781,121782,121784,121787],{"class":69,"line":167},[67,121783,121776],{"class":112},[67,121785,121786],{"class":84}," \"PrimaryGPU\"",[67,121788,121789],{"class":84}," \"yes\"\n",[67,121791,121792,121795],{"class":69,"line":173},[67,121793,121794],{"class":112},"   ModulePath",[67,121796,121797],{"class":84}," \"\u002Fusr\u002Flib\u002Fx86_64-linux-gnu\u002Fnvidia\u002Fxorg\"\n",[67,121799,121800],{"class":69,"line":180},[67,121801,121802],{"class":112},"EndSection\n",[815,121804,121805],{"start":149},[818,121806,121807],{},"安装N卡驱动提示错误",[57,121809,121811],{"className":121353,"code":121810,"language":121355,"meta":121356,"style":62},"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",[64,121812,121813],{"__ignoreMap":62},[67,121814,121815],{"class":69,"line":70},[67,121816,121810],{},[815,121818,121819],{},[818,121820,121821],{},"检查当前运行的内核版本：",[19,121823,121824],{},"运行以下命令以查看你当前正在使用的内核版本：",[57,121826,121828],{"className":117833,"code":121827,"language":117835,"meta":62,"style":62},"uname -r\n",[64,121829,121830],{"__ignoreMap":62},[67,121831,121832,121834],{"class":69,"line":70},[67,121833,70741],{"class":112},[67,121835,121836],{"class":208}," -r\n",[815,121838,121839],{"start":143},[818,121840,121841],{},"安装内核开发文件：",[19,121843,121844,121845,121848],{},"确保你已经安装了与当前内核版本相匹配的 ",[64,121846,121847],{},"kernel-devel"," 包。运行以下命令来安装：",[57,121850,121852],{"className":117833,"code":121851,"language":117835,"meta":62,"style":62},"sudo dnf install kernel-devel-$(uname -r)\n",[64,121853,121854],{"__ignoreMap":62},[67,121855,121856,121858,121860,121862,121865,121867,121869,121871],{"class":69,"line":70},[67,121857,298],{"class":112},[67,121859,378],{"class":84},[67,121861,312],{"class":84},[67,121863,121864],{"class":84}," kernel-devel-",[67,121866,237],{"class":77},[67,121868,70741],{"class":112},[67,121870,120176],{"class":208},[67,121872,870],{"class":77},[19,121874,121875],{},"这将自动安装与你当前内核版本匹配的内核开发包。",[815,121877,121878],{"start":149},[818,121879,121880],{},"安装内核源代码（如果需要）：",[19,121882,121883],{},"如果需要访问完整的内核源代码，你可以运行以下命令来安装它：",[57,121885,121887],{"className":117833,"code":121886,"language":117835,"meta":62,"style":62},"sudo dnf install kernel-headers kernel-source\n",[64,121888,121889],{"__ignoreMap":62},[67,121890,121891,121893,121895,121897,121900],{"class":69,"line":70},[67,121892,298],{"class":112},[67,121894,378],{"class":84},[67,121896,312],{"class":84},[67,121898,121899],{"class":84}," kernel-headers",[67,121901,121902],{"class":84}," kernel-source\n",[815,121904,121905],{"start":155},[818,121906,121907],{},"检查安装：",[19,121909,121910,121911,121914],{},"安装完成后，确认路径是否正确。内核源文件通常位于 ",[64,121912,121913],{},"\u002Fusr\u002Fsrc\u002Fkernels\u002F"," 目录下，你可以使用以下命令来检查该目录是否存在：",[57,121916,121918],{"className":117833,"code":121917,"language":117835,"meta":62,"style":62},"ls \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[64,121919,121920],{"__ignoreMap":62},[67,121921,121922,121924],{"class":69,"line":70},[67,121923,27298],{"class":112},[67,121925,121926],{"class":84}," \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[19,121928,121929,121930,121933],{},"如果仍然遇到问题，可以通过 ",[64,121931,121932],{},"--kernel-source-path"," 选项手动指定内核源文件路径。",[779,121935,121936],{},"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":62,"searchDepth":143,"depth":143,"links":121938},[121939,121943,121953,121957,121958],{"id":119036,"depth":143,"text":119037,"children":121940},[121941,121942],{"id":119046,"depth":149,"text":119047},{"id":119056,"depth":149,"text":119057},{"id":119256,"depth":143,"text":119257,"children":121944},[121945,121946,121947,121948,121949,121950,121951,121952],{"id":119260,"depth":149,"text":119261},{"id":119330,"depth":149,"text":119331},{"id":119419,"depth":149,"text":119420},{"id":119664,"depth":149,"text":119665},{"id":119734,"depth":149,"text":119735},{"id":119801,"depth":149,"text":119802},{"id":119836,"depth":149,"text":119837},{"id":119891,"depth":149,"text":119892},{"id":119942,"depth":143,"text":119943,"children":121954},[121955,121956],{"id":119946,"depth":149,"text":119947},{"id":120026,"depth":149,"text":120027},{"id":120212,"depth":143,"text":120213},{"id":120385,"depth":143,"text":120386,"children":121959},[121960,121961,121962,121963,121964],{"id":120389,"depth":149,"text":120390},{"id":120430,"depth":149,"text":120431},{"id":120717,"depth":149,"text":120718},{"id":121091,"depth":149,"text":121092},{"id":121587,"depth":149,"text":121588},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch3",{"title":119028,"description":24093},"wiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置","WWF6akXAqWzKqM4dMry9y9TJVEbZQNwxOIpkPoo5nX0",{"id":121971,"title":121972,"body":121973,"description":24093,"extension":787,"meta":122313,"navigation":176,"path":122314,"seo":122315,"stem":122316,"__hash__":122317},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累).md","4. 命令教程(长期积累)",{"type":7,"value":121974,"toc":122311},[121975,121978,121983,121986,122232,122237,122240,122276,122279,122308],[10,121976,121972],{"id":121977},"_4-命令教程长期积累",[815,121979,121980],{},[818,121981,121982],{},"大多数命令",[19,121984,121985],{},"常用 Linux 命令速查：",[57,121987,121989],{"className":117833,"code":121988,"language":117835,"meta":62,"style":62},"# 文件与目录\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",[64,121990,121991,121996,122003,122010,122018,122025,122032,122040,122048,122055,122062,122070,122074,122079,122086,122094,122101,122105,122110,122117,122125,122133,122141,122149,122153,122158,122166,122173,122180,122188,122196,122200,122205,122214,122223],{"__ignoreMap":62},[67,121992,121993],{"class":69,"line":70},[67,121994,121995],{"class":202},"# 文件与目录\n",[67,121997,121998,122000],{"class":69,"line":143},[67,121999,27298],{"class":112},[67,122001,122002],{"class":202},"        # 列出目录内容\n",[67,122004,122005,122007],{"class":69,"line":149},[67,122006,101813],{"class":208},[67,122008,122009],{"class":202},"        # 切换目录\n",[67,122011,122012,122015],{"class":69,"line":155},[67,122013,122014],{"class":208},"pwd",[67,122016,122017],{"class":202},"       # 显示当前路径\n",[67,122019,122020,122022],{"class":69,"line":161},[67,122021,101803],{"class":112},[67,122023,122024],{"class":202},"     # 创建目录\n",[67,122026,122027,122029],{"class":69,"line":167},[67,122028,26031],{"class":112},[67,122030,122031],{"class":202},"        # 删除文件或目录\n",[67,122033,122034,122037],{"class":69,"line":173},[67,122035,122036],{"class":112},"cp",[67,122038,122039],{"class":202},"        # 复制文件或目录\n",[67,122041,122042,122045],{"class":69,"line":180},[67,122043,122044],{"class":112},"mv",[67,122046,122047],{"class":202},"        # 移动\u002F重命名文件或目录\n",[67,122049,122050,122052],{"class":69,"line":186},[67,122051,101820],{"class":112},[67,122053,122054],{"class":202},"     # 创建空文件\n",[67,122056,122057,122059],{"class":69,"line":444},[67,122058,121302],{"class":112},[67,122060,122061],{"class":202},"       # 查看文件内容\n",[67,122063,122064,122067],{"class":69,"line":2335},[67,122065,122066],{"class":112},"head\u002Ftail",[67,122068,122069],{"class":202}," # 查看文件头部\u002F尾部\n",[67,122071,122072],{"class":69,"line":2340},[67,122073,177],{"emptyLinePlaceholder":176},[67,122075,122076],{"class":69,"line":2346},[67,122077,122078],{"class":202},"# 权限管理\n",[67,122080,122081,122083],{"class":69,"line":2351},[67,122082,25324],{"class":112},[67,122084,122085],{"class":202},"     # 修改文件权限\n",[67,122087,122088,122091],{"class":69,"line":2365},[67,122089,122090],{"class":112},"chown",[67,122092,122093],{"class":202},"     # 修改文件所有者\n",[67,122095,122096,122098],{"class":69,"line":2370},[67,122097,298],{"class":112},[67,122099,122100],{"class":202},"      # 以管理员身份执行\n",[67,122102,122103],{"class":69,"line":2376},[67,122104,177],{"emptyLinePlaceholder":176},[67,122106,122107],{"class":69,"line":2397},[67,122108,122109],{"class":202},"# 系统信息\n",[67,122111,122112,122114],{"class":69,"line":2402},[67,122113,70741],{"class":112},[67,122115,122116],{"class":202},"     # 系统信息\n",[67,122118,122119,122122],{"class":69,"line":2416},[67,122120,122121],{"class":112},"df",[67,122123,122124],{"class":202},"        # 磁盘使用情况\n",[67,122126,122127,122130],{"class":69,"line":2421},[67,122128,122129],{"class":112},"free",[67,122131,122132],{"class":202},"      # 内存使用情况\n",[67,122134,122135,122138],{"class":69,"line":2450},[67,122136,122137],{"class":112},"top\u002Fhtop",[67,122139,122140],{"class":202},"  # 进程监控\n",[67,122142,122143,122146],{"class":69,"line":2455},[67,122144,122145],{"class":112},"ps",[67,122147,122148],{"class":202},"        # 查看进程\n",[67,122150,122151],{"class":69,"line":2472},[67,122152,177],{"emptyLinePlaceholder":176},[67,122154,122155],{"class":69,"line":2477},[67,122156,122157],{"class":202},"# 网络\n",[67,122159,122160,122163],{"class":69,"line":2482},[67,122161,122162],{"class":112},"ping",[67,122164,122165],{"class":202},"      # 测试网络连通性\n",[67,122167,122168,122170],{"class":69,"line":2487},[67,122169,27386],{"class":112},[67,122171,122172],{"class":202},"      # 发送 HTTP 请求\n",[67,122174,122175,122177],{"class":69,"line":2501},[67,122176,120826],{"class":112},[67,122178,122179],{"class":202},"      # 下载文件\n",[67,122181,122182,122185],{"class":69,"line":2506},[67,122183,122184],{"class":112},"ssh",[67,122186,122187],{"class":202},"       # 远程登录\n",[67,122189,122190,122193],{"class":69,"line":3298},[67,122191,122192],{"class":112},"scp",[67,122194,122195],{"class":202},"       # 远程文件传输\n",[67,122197,122198],{"class":69,"line":3312},[67,122199,177],{"emptyLinePlaceholder":176},[67,122201,122202],{"class":69,"line":3320},[67,122203,122204],{"class":202},"# 包管理（Debian\u002FUbuntu）\n",[67,122206,122207,122209,122211],{"class":69,"line":3325},[67,122208,117905],{"class":112},[67,122210,117884],{"class":84},[67,122212,122213],{"class":202},"   # 更新软件源\n",[67,122215,122216,122218,122220],{"class":69,"line":3331},[67,122217,117905],{"class":112},[67,122219,312],{"class":84},[67,122221,122222],{"class":202},"  # 安装软件包\n",[67,122224,122225,122227,122229],{"class":69,"line":3337},[67,122226,117905],{"class":112},[67,122228,119],{"class":84},[67,122230,122231],{"class":202},"   # 卸载软件包\n",[815,122233,122234],{"start":143},[818,122235,122236],{},"KDE Dolphin 以root打开",[19,122238,122239],{},"kde5",[57,122241,122243],{"className":117833,"code":122242,"language":117835,"meta":62,"style":62},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=5 KDE_FULL_SESSION=true dolphin\n",[64,122244,122245],{"__ignoreMap":62},[67,122246,122247,122250,122253,122256,122258,122260,122263,122266,122268,122271,122273],{"class":69,"line":70},[67,122248,122249],{"class":112},"pkexec",[67,122251,122252],{"class":84}," env",[67,122254,122255],{"class":84}," DISPLAY=",[67,122257,28680],{"class":77},[67,122259,28738],{"class":84},[67,122261,122262],{"class":77},"$XAUTHORITY ",[67,122264,122265],{"class":84},"KDE_SESSION_VERSION=",[67,122267,1177],{"class":208},[67,122269,122270],{"class":84}," KDE_FULL_SESSION=",[67,122272,2086],{"class":208},[67,122274,122275],{"class":84}," dolphin\n",[19,122277,122278],{},"kde6",[57,122280,122282],{"className":117833,"code":122281,"language":117835,"meta":62,"style":62},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=6 KDE_FULL_SESSION=true dolphin\n",[64,122283,122284],{"__ignoreMap":62},[67,122285,122286,122288,122290,122292,122294,122296,122298,122300,122302,122304,122306],{"class":69,"line":70},[67,122287,122249],{"class":112},[67,122289,122252],{"class":84},[67,122291,122255],{"class":84},[67,122293,28680],{"class":77},[67,122295,28738],{"class":84},[67,122297,122262],{"class":77},[67,122299,122265],{"class":84},[67,122301,1202],{"class":208},[67,122303,122270],{"class":84},[67,122305,2086],{"class":208},[67,122307,122275],{"class":84},[779,122309,122310],{},"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":62,"searchDepth":143,"depth":143,"links":122312},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch4-()",{"title":121972,"description":24093},"wiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累)","-0A6CbI0z8eUQ30QPo9buhLpXQXBgXgQ7JWiF4O_YiE",{"id":122319,"title":122320,"body":122321,"description":24093,"extension":787,"meta":122335,"navigation":176,"path":122336,"seo":122337,"stem":122338,"__hash__":122339},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置.md","5. 各种环境配置",{"type":7,"value":122322,"toc":122333},[122323,122326],[10,122324,122320],{"id":122325},"_5-各种环境配置",[19,122327,122328],{},[28,122329,122332],{"href":122330,"rel":122331},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FFQszwXIR5iQgCfk7pRwc9rYpnqg",[32],"电控组环境搭建大全",{"title":62,"searchDepth":143,"depth":143,"links":122334},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch5",{"title":122320,"description":24093},"wiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置","yOHCbneTdzOs8sgJI44X3D1tralTicDJM2N-2uZmoZQ",{"id":122341,"title":122342,"body":122343,"description":24093,"extension":787,"meta":122691,"navigation":176,"path":122692,"seo":122693,"stem":122694,"__hash__":122695},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能.md","6. 拓展功能",{"type":7,"value":122344,"toc":122683},[122345,122348,122352,122356,122360,122365,122372,122376,122669,122673,122680],[10,122346,122342],{"id":122347},"_6-拓展功能",[803,122349,122351],{"id":122350},"_61-wine","6.1 Wine",[803,122353,122355],{"id":122354},"_62-android","6.2 Android",[14,122357,122359],{"id":122358},"_621-i卡a卡","6.2.1 I卡、A卡",[815,122361,122362],{},[818,122363,122364],{},"Wayland-Waydroid(体验超级好)",[19,122366,122367,122368],{},"Waydroid 官网与安装指南：",[28,122369,122370],{"href":122370,"rel":122371},"https:\u002F\u002Fwaydro.id\u002F",[32],[14,122373,122375],{"id":122374},"_622-n卡so-nvidia-fxxk-u","6.2.2 N卡(So Nvidia Fxxk U!)",[815,122377,122378],{},[818,122379,122380,122381,122383,122384,122388,122390,122393,122398,122595],{},"QEMU-KVM虚拟机 + BlissOS-X86",[54253,122382],{},"BlissOS 官网下载：",[28,122385,122386],{"href":122386,"rel":122387},"https:\u002F\u002Fblissos.org\u002F",[32],[54253,122389],{},[725,122391],{"alt":62,"src":122392},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-088.png",[815,122394,122395],{"start":149},[818,122396,122397],{},"比较推荐的配置",[57,122399,122401],{"className":117833,"code":122400,"language":117835,"meta":62,"style":62},"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",[64,122402,122403,122410,122420,122430,122440,122452,122462,122469,122479,122488,122497,122507,122517,122526,122536,122546,122558,122568,122577,122587],{"__ignoreMap":62},[67,122404,122405,122408],{"class":69,"line":70},[67,122406,122407],{"class":112},"qemu-system-x86_64",[67,122409,212],{"class":208},[67,122411,122412,122415,122418],{"class":69,"line":143},[67,122413,122414],{"class":208},"        -M",[67,122416,122417],{"class":84}," q35,vmport=off",[67,122419,212],{"class":208},[67,122421,122422,122425,122428],{"class":69,"line":149},[67,122423,122424],{"class":208},"        -accel",[67,122426,122427],{"class":84}," kvm",[67,122429,212],{"class":208},[67,122431,122432,122435,122438],{"class":69,"line":155},[67,122433,122434],{"class":208},"        -cpu",[67,122436,122437],{"class":84}," qemu64,+sse3,+sse4.2",[67,122439,212],{"class":208},[67,122441,122442,122445,122448,122450],{"class":69,"line":161},[67,122443,122444],{"class":208},"        -smp",[67,122446,122447],{"class":84}," 8,cores=",[67,122449,1151],{"class":208},[67,122451,212],{"class":208},[67,122453,122454,122457,122460],{"class":69,"line":167},[67,122455,122456],{"class":208},"        -m",[67,122458,122459],{"class":84}," 6G",[67,122461,212],{"class":208},[67,122463,122464,122467],{"class":69,"line":173},[67,122465,122466],{"class":208},"        -usb",[67,122468,212],{"class":208},[67,122470,122471,122474,122477],{"class":69,"line":180},[67,122472,122473],{"class":208},"        -device",[67,122475,122476],{"class":84}," virtio-tablet",[67,122478,212],{"class":208},[67,122480,122481,122483,122486],{"class":69,"line":186},[67,122482,122473],{"class":208},[67,122484,122485],{"class":84}," virtio-keyboard",[67,122487,212],{"class":208},[67,122489,122490,122492,122495],{"class":69,"line":444},[67,122491,122473],{"class":208},[67,122493,122494],{"class":84}," usb-tablet",[67,122496,212],{"class":208},[67,122498,122499,122502,122505],{"class":69,"line":2335},[67,122500,122501],{"class":208},"        -bios",[67,122503,122504],{"class":84}," OVMF-pure-efi64.fd",[67,122506,212],{"class":208},[67,122508,122509,122512,122515],{"class":69,"line":2340},[67,122510,122511],{"class":208},"        -net",[67,122513,122514],{"class":84}," user,hostfwd=tcp::5555-:5555,hostfwd=tcp::8022-:8022",[67,122516,212],{"class":208},[67,122518,122519,122521,122524],{"class":69,"line":2346},[67,122520,122511],{"class":208},[67,122522,122523],{"class":84}," nic,model=virtio",[67,122525,212],{"class":208},[67,122527,122528,122531,122534],{"class":69,"line":2351},[67,122529,122530],{"class":208},"        -audio",[67,122532,122533],{"class":84}," sdl,model=hda",[67,122535,212],{"class":208},[67,122537,122538,122541,122544],{"class":69,"line":2365},[67,122539,122540],{"class":208},"        -display",[67,122542,122543],{"class":84}," sdl,gl=on,show-cursor=on",[67,122545,212],{"class":208},[67,122547,122548,122550,122553,122556],{"class":69,"line":2370},[67,122549,122473],{"class":208},[67,122551,122552],{"class":84}," virtio-vga-gl,xres=1920,yres=",[67,122554,122555],{"class":208},"1080",[67,122557,212],{"class":208},[67,122559,122560,122563,122566],{"class":69,"line":2376},[67,122561,122562],{"class":208},"        -drive",[67,122564,122565],{"class":84}," file=disk.qcow2,media=disk,if=virtio,cache=writeback",[67,122567,212],{"class":208},[67,122569,122570,122572,122575],{"class":69,"line":2397},[67,122571,122562],{"class":208},[67,122573,122574],{"class":84}," file=Bliss-v16.9.7-x86_64-OFFICIAL-gapps-20240911.iso,media=cdrom",[67,122576,212],{"class":208},[67,122578,122579,122582,122585],{"class":69,"line":2402},[67,122580,122581],{"class":208},"        -monitor",[67,122583,122584],{"class":84}," stdio",[67,122586,212],{"class":208},[67,122588,122589,122592],{"class":69,"line":2416},[67,122590,122591],{"class":208},"        -serial",[67,122593,122594],{"class":84}," none\n",[815,122596,122597],{"start":161},[818,122598,122599,122600],{},"常用操作：",[815,122601,122602,122605,122661],{},[818,122603,122604],{},"全屏：Ctrl+Alt+F",[818,122606,122607,122608,122613],{},"adb调试",[815,122609,122610],{},[818,122611,122612],{},"使Linux与Android用ADB连接。",[57,122614,122616],{"className":117833,"code":122615,"language":117835,"meta":62,"style":62},"# 连接安卓\nadb connect 127.0.0.1\n# 打开shell\nadb -s 127.0.0.1:5555 shell\n# 使用root权限\nsu\n",[64,122617,122618,122623,122634,122639,122651,122656],{"__ignoreMap":62},[67,122619,122620],{"class":69,"line":70},[67,122621,122622],{"class":202},"# 连接安卓\n",[67,122624,122625,122628,122631],{"class":69,"line":143},[67,122626,122627],{"class":112},"adb",[67,122629,122630],{"class":84}," connect",[67,122632,122633],{"class":208}," 127.0.0.1\n",[67,122635,122636],{"class":69,"line":149},[67,122637,122638],{"class":202},"# 打开shell\n",[67,122640,122641,122643,122645,122648],{"class":69,"line":155},[67,122642,122627],{"class":112},[67,122644,27420],{"class":208},[67,122646,122647],{"class":84}," 127.0.0.1:5555",[67,122649,122650],{"class":84}," shell\n",[67,122652,122653],{"class":69,"line":161},[67,122654,122655],{"class":202},"# 使用root权限\n",[67,122657,122658],{"class":69,"line":167},[67,122659,122660],{"class":112},"su\n",[818,122662,122663,122664],{},"中文输入法",[815,122665,122666],{},[818,122667,122668],{},"可以下载google输入法：按Shift+space进行中英文切换（这样有效防止与linux本机的中英文切换冲突）",[803,122670,122672],{"id":122671},"_63-好看点的uefi启动界面refind","6.3 好看点的UEFI启动界面rEFInd",[19,122674,122675,122676],{},"rEFInd 官网与文档：",[28,122677,122678],{"href":122678,"rel":122679},"https:\u002F\u002Fwww.rodsbooks.com\u002Frefind\u002F",[32],[779,122681,122682],{},"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":62,"searchDepth":143,"depth":143,"links":122684},[122685,122686,122690],{"id":122350,"depth":143,"text":122351},{"id":122354,"depth":143,"text":122355,"children":122687},[122688,122689],{"id":122358,"depth":149,"text":122359},{"id":122374,"depth":149,"text":122375},{"id":122671,"depth":143,"text":122672},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch6",{"title":122342,"description":24093},"wiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能","QYYeVozwQSLjdsxnTnMgRQGi_b8v38BhBh0gp8PtboY",{"id":122697,"title":122698,"body":122699,"description":24093,"extension":787,"meta":125998,"navigation":176,"path":125999,"seo":126000,"stem":126001,"__hash__":126002},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作.md","7. 其他操作",{"type":7,"value":122700,"toc":125972},[122701,122704,122708,122711,122718,122968,122971,123043,123046,123050,123054,123059,123062,123065,123068,123073,123076,123079,123082,123087,123090,123095,123098,123101,123106,123109,123114,123117,123121,123125,123128,123133,123136,123150,123153,123156,123165,123168,123177,123180,123183,123192,123195,123204,123207,123210,123219,123222,123225,123240,123243,123246,123255,123260,123263,123266,123275,123278,123287,123290,123299,123302,123311,123316,123319,123327,123332,123335,123344,123347,123355,123360,123363,123372,123375,123378,123382,123385,123390,123393,123398,123412,123417,123422,123433,123438,123444,123449,123464,123469,123472,123477,123482,123487,123495,123500,123507,123512,123523,123528,123531,123535,123538,123541,123546,123549,123568,123573,123576,123585,123590,123593,123615,123618,123648,123651,123656,123659,123673,123678,123697,123700,123703,123708,123720,123725,123730,123733,123738,123741,123756,123759,123764,123769,123773,123778,123818,123821,123825,123831,123837,123842,123845,123852,123857,123864,123867,123870,123877,123891,123894,123954,123957,123971,123983,123986,123989,123992,124056,124059,124062,124065,124085,124088,124093,124100,124104,124107,124111,124116,124121,124125,124128,124131,124173,124178,124181,124203,124218,124220,124225,124237,124297,124299,124301,124355,124357,124359,124365,124370,124373,124378,124382,124385,124447,124452,124455,124457,124461,124473,124555,124557,124559,124613,124619,124621,124625,124630,124632,124637,124641,124661,124696,124700,124703,124706,124709,124716,124719,124731,124734,124749,124752,124771,124819,124822,124839,124842,124856,124861,124864,124873,124888,124900,124938,124943,124952,124957,124962,124988,124997,125001,125005,125010,125013,125017,125021,125026,125029,125034,125037,125042,125045,125050,125053,125057,125062,125065,125070,125073,125077,125082,125085,125090,125093,125098,125101,125105,125110,125113,125118,125121,125126,125129,125133,125138,125141,125146,125149,125154,125157,125162,125165,125170,125173,125178,125181,125185,125190,125193,125198,125205,125209,125214,125217,125222,125225,125229,125234,125237,125240,125243,125246,125249,125253,125256,125266,125271,125276,125298,125303,125308,125315,125319,125324,125327,125330,125335,125338,125341,125344,125347,125350,125353,125356,125359,125362,125365,125368,125371,125376,125381,125386,125391,125396,125401,125406,125409,125413,125416,125420,125425,125430,125435,125440,125444,125450,125458,125463,125466,125471,125486,125489,125494,125528,125543,125546,125601,125627,125639,125642,125651,125654,125669,125674,125677,125683,125688,125691,125696,125699,125704,125709,125716,125719,125734,125737,125772,125777,125785,125823,125826,125829,125834,125837,125842,125853,125887,125892,125895,125904,125909,125915,125918,125923,125932,125937,125940,125943,125948,125956,125959,125964,125969],[10,122702,122698],{"id":122703},"_7-其他操作",[803,122705,122707],{"id":122706},"_71-工控机如何连wifi","7.1 工控机如何连wifi",[19,122709,122710],{},"当我们工控机从一个环境移动到另一个环境，且新的环境的wifi我们没有连接过，我们没有屏幕如何让工控机连上网呢？",[19,122712,122713,122714,122717],{},"进入工控机的硬盘目录，进入",[64,122715,122716],{},"\u002Fetc\u002Fnetplan\u002F","，底下有很多yaml,找到一个最符合下方格式的yaml:",[57,122719,122723],{"className":122720,"code":122721,"language":122722,"meta":62,"style":62},"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",[64,122724,122725,122733,122744,122751,122758,122770,122777,122789,122800,122811,122818,122825,122832,122844,122856,122863,122875,122887,122894,122906,122918,122930,122941,122948,122959],{"__ignoreMap":62},[67,122726,122727,122730],{"class":69,"line":70},[67,122728,122729],{"class":51837},"network",[67,122731,122732],{"class":77},": \n",[67,122734,122735,122738,122740,122742],{"class":69,"line":143},[67,122736,122737],{"class":51837},"  version",[67,122739,51974],{"class":77},[67,122741,939],{"class":208},[67,122743,3395],{"class":77},[67,122745,122746,122749],{"class":69,"line":149},[67,122747,122748],{"class":51837},"  wifis",[67,122750,122732],{"class":77},[67,122752,122753,122756],{"class":69,"line":155},[67,122754,122755],{"class":51837},"    NM-6f414fe0-2658-48ff-89ee-c7981b87bc96",[67,122757,122732],{"class":77},[67,122759,122760,122763,122765,122768],{"class":69,"line":161},[67,122761,122762],{"class":51837},"      renderer",[67,122764,51974],{"class":77},[67,122766,122767],{"class":84},"NetworkManager",[67,122769,3395],{"class":77},[67,122771,122772,122775],{"class":69,"line":167},[67,122773,122774],{"class":51837},"      match",[67,122776,122732],{"class":77},[67,122778,122779,122782,122784,122787],{"class":69,"line":173},[67,122780,122781],{"class":51837},"        name",[67,122783,51974],{"class":77},[67,122785,122786],{"class":84},"\"wlan0\"",[67,122788,3395],{"class":77},[67,122790,122791,122794,122796,122798],{"class":69,"line":180},[67,122792,122793],{"class":51837},"      dhcp4",[67,122795,51974],{"class":77},[67,122797,2086],{"class":208},[67,122799,3395],{"class":77},[67,122801,122802,122805,122807,122809],{"class":69,"line":186},[67,122803,122804],{"class":51837},"      dhcp6",[67,122806,51974],{"class":77},[67,122808,2086],{"class":208},[67,122810,3395],{"class":77},[67,122812,122813,122816],{"class":69,"line":444},[67,122814,122815],{"class":51837},"      access-points",[67,122817,122732],{"class":77},[67,122819,122820,122823],{"class":69,"line":2335},[67,122821,122822],{"class":84},"        \"EMIS_Vinci_Robocon_5G\"",[67,122824,122732],{"class":77},[67,122826,122827,122830],{"class":69,"line":2340},[67,122828,122829],{"class":51837},"          auth",[67,122831,122732],{"class":77},[67,122833,122834,122837,122839,122842],{"class":69,"line":2346},[67,122835,122836],{"class":51837},"            key-management",[67,122838,51974],{"class":77},[67,122840,122841],{"class":84},"\"psk\"",[67,122843,3395],{"class":77},[67,122845,122846,122849,122851,122854],{"class":69,"line":2351},[67,122847,122848],{"class":51837},"            password",[67,122850,51974],{"class":77},[67,122852,122853],{"class":84},"\"vinci666\"",[67,122855,3395],{"class":77},[67,122857,122858,122861],{"class":69,"line":2365},[67,122859,122860],{"class":51837},"          networkmanager",[67,122862,122732],{"class":77},[67,122864,122865,122868,122870,122873],{"class":69,"line":2370},[67,122866,122867],{"class":51837},"            uuid",[67,122869,51974],{"class":77},[67,122871,122872],{"class":84},"\"6f414fe0-2658-48ff-89ee-c7981b87bc96\"",[67,122874,3395],{"class":77},[67,122876,122877,122880,122882,122885],{"class":69,"line":2376},[67,122878,122879],{"class":51837},"            name",[67,122881,51974],{"class":77},[67,122883,122884],{"class":84},"\"EMIS_Vinci_Robocon_5G\"",[67,122886,3395],{"class":77},[67,122888,122889,122892],{"class":69,"line":2397},[67,122890,122891],{"class":51837},"            passthrough",[67,122893,122732],{"class":77},[67,122895,122896,122899,122901,122904],{"class":69,"line":2402},[67,122897,122898],{"class":51837},"              wifi-security.auth-alg",[67,122900,51974],{"class":77},[67,122902,122903],{"class":84},"\"open\"",[67,122905,3395],{"class":77},[67,122907,122908,122911,122913,122916],{"class":69,"line":2416},[67,122909,122910],{"class":51837},"              ipv6.addr-gen-mode",[67,122912,51974],{"class":77},[67,122914,122915],{"class":84},"\"default\"",[67,122917,3395],{"class":77},[67,122919,122920,122923,122925,122928],{"class":69,"line":2421},[67,122921,122922],{"class":51837},"              ipv6.ip6-privacy",[67,122924,51974],{"class":77},[67,122926,122927],{"class":84},"\"-1\"",[67,122929,3395],{"class":77},[67,122931,122932,122935,122937,122939],{"class":69,"line":2450},[67,122933,122934],{"class":51837},"              proxy._",[67,122936,51974],{"class":77},[67,122938,8371],{"class":84},[67,122940,3395],{"class":77},[67,122942,122943,122946],{"class":69,"line":2455},[67,122944,122945],{"class":51837},"      networkmanager",[67,122947,122732],{"class":77},[67,122949,122950,122953,122955,122957],{"class":69,"line":2472},[67,122951,122952],{"class":51837},"        uuid",[67,122954,51974],{"class":77},[67,122956,122872],{"class":84},[67,122958,3395],{"class":77},[67,122960,122961,122963,122965],{"class":69,"line":2477},[67,122962,122781],{"class":51837},[67,122964,51974],{"class":77},[67,122966,122967],{"class":84},"\"EMIS_Vinci_Robocon_5G\"\n",[19,122969,122970],{},"将其改为新wifi的名和密码：",[57,122972,122974],{"className":122720,"code":122973,"language":122722,"meta":62,"style":62},"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",[64,122975,122976,122982,122991,122997,123004,123013,123021,123027,123033],{"__ignoreMap":62},[67,122977,122978,122980],{"class":69,"line":70},[67,122979,122729],{"class":51837},[67,122981,4459],{"class":77},[67,122983,122984,122986,122988],{"class":69,"line":143},[67,122985,122737],{"class":51837},[67,122987,51974],{"class":77},[67,122989,122990],{"class":208},"2\n",[67,122992,122993,122995],{"class":69,"line":149},[67,122994,122748],{"class":51837},[67,122996,4459],{"class":77},[67,122998,122999,123002],{"class":69,"line":155},[67,123000,123001],{"class":51837},"    wlan0",[67,123003,4459],{"class":77},[67,123005,123006,123008,123010],{"class":69,"line":161},[67,123007,122793],{"class":51837},[67,123009,51974],{"class":77},[67,123011,123012],{"class":208},"true\n",[67,123014,123015,123017,123019],{"class":69,"line":167},[67,123016,122804],{"class":51837},[67,123018,51974],{"class":77},[67,123020,123012],{"class":208},[67,123022,123023,123025],{"class":69,"line":173},[67,123024,122815],{"class":51837},[67,123026,4459],{"class":77},[67,123028,123029,123031],{"class":69,"line":180},[67,123030,122822],{"class":84},[67,123032,4459],{"class":77},[67,123034,123035,123038,123040],{"class":69,"line":186},[67,123036,123037],{"class":51837},"          password",[67,123039,51974],{"class":77},[67,123041,123042],{"class":84},"\"vinci666\"\n",[19,123044,123045],{},"工控机开机即可连上网。",[803,123047,123049],{"id":123048},"_72-ssh远程开发","7.2 SSH远程开发",[14,123051,123053],{"id":123052},"_721-环境准备","7.2.1 环境准备",[19,123055,123056],{},[336,123057,123058],{},"1.硬件准备",[19,123060,123061],{},"首先要有一台工控机（X68小型电脑，专业工控机，树莓派等等）。",[19,123063,123064],{},"控制系统的硬件载体是具有多样性的，常用的多是基于ARM、x86等架构的处理器，比如：PC、工控机、树莓派、NVIDIA Jetson...。不同的处理器都存在一定的优缺点，PC和工控机，处理器性能强大，但是功耗高、体积大、灵活性差，嵌入式系统则反之。对于我们而言，可以根据机器人平台的电气、载重、空间以及用途等诸多要素自主选择合适的控制系统。",[19,123066,123067],{},"无论选用何种处理器，只要是要进行机器人的开发，安装了ROS或者ROS2，那么对于开发人员而言，在使用上，没有任何本质的区别，或者换言之，作为软件工程师，部分场景下无需关注于硬件的选型。",[19,123069,123070],{},[336,123071,123072],{},"2.设置固定IP",[19,123074,123075],{},"远程连接时，不管使用何种工具，需要根据IP地址定位到被连接的主机，再通过账号和密码登录该主机，因此，我们需要先获取该IP地址。并且每次连接时，都需要使用到IP，为了保证连接的便利性和稳定性，最好将被连接主机的IP地址设置为固定IP，具体操作如下。",[19,123077,123078],{},"1.进入设置界面",[19,123080,123081],{},"启动被连接的主机（启动时需要连接显示器或使用HDMI采集卡，并且配置完SSH远程访问之后，可以不再使用显示器或HDMI采集卡），并进入设置界面。",[19,123083,123084],{},[725,123085],{"alt":62,"src":123086},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-089.png",[19,123088,123089],{},"2.配置所连接的网络",[19,123091,123092],{},[725,123093],{"alt":62,"src":123094},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-090.png",[19,123096,123097],{},"3.设置固定IP",[19,123099,123100],{},"查看当前IP地址。",[19,123102,123103],{},[725,123104],{"alt":62,"src":123105},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-091.png",[19,123107,123108],{},"设置固定IP。",[19,123110,123111],{},[725,123112],{"alt":62,"src":123113},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-092.png",[19,123115,123116],{},"至此，IP配置完毕。",[14,123118,123120],{"id":123119},"_722-环境搭建","7.2.2 环境搭建",[19,123122,123123],{},[336,123124,26462],{},[19,123126,123127],{},"SSH（Secure Shell）是一种通用的、功能强大的、基于软件的网络安全解决方案。计算机每次向网络发送数据时，SSH都会自动对其进行加密。数据到达目的地时，SSH自动对加密数据进行解密。整个过程都是透明的，使用OpenSSH工具将会增进你的系统安全性。SSH安装容易、使用简单。",[19,123129,123130],{},[336,123131,123132],{},"实现",[19,123134,123135],{},"SSH实现架构上分为客户端和服务器端两大部分，客户端是数据的发送方，服务端是数据的接收方，当前场景下，我们需要从本地主机发送数据到远程主机，那么本地主机需要安装并启动SSH客户端，而远程主机则需要安装并启动SSH服务端，整个实现具体流程如下：",[815,123137,123138,123141,123144,123147],{},[818,123139,123140],{},"本地主机安装SSH客户端，远程主机安装SSH服务端；",[818,123142,123143],{},"远程主机启动SSH服务；",[818,123145,123146],{},"本地主机登陆远程主机；",[818,123148,123149],{},"实现数据传输。",[19,123151,123152],{},"1.安装SSH客户端与服务端",[19,123154,123155],{},"默认情况下，Ubuntu系统已经安装了SSH客户端，因此只需要在远程主机安装SSH服务端即可，安装命令如下：",[57,123157,123159],{"className":121353,"code":123158,"language":121355,"meta":121356,"style":62}," sudo apt install openssh-server\n",[64,123160,123161],{"__ignoreMap":62},[67,123162,123163],{"class":69,"line":70},[67,123164,123158],{},[19,123166,123167],{},"如果SSH客户端需要自行安装，那么调用如下命令:",[57,123169,123171],{"className":121353,"code":123170,"language":121355,"meta":121356,"style":62},"sudo apt install openssh-client\n",[64,123172,123173],{"__ignoreMap":62},[67,123174,123175],{"class":69,"line":70},[67,123176,123170],{},[19,123178,123179],{},"2.远程主机启动SSH服务",[19,123181,123182],{},"远程主机启动 ssh 服务命令如下：",[57,123184,123186],{"className":121353,"code":123185,"language":121355,"meta":121356,"style":62},"sudo \u002Fetc\u002Finit.d\u002Fssh start\n",[64,123187,123188],{"__ignoreMap":62},[67,123189,123190],{"class":69,"line":70},[67,123191,123185],{},[19,123193,123194],{},"启动后可使用如下命令查看服务是否正常运行：",[57,123196,123198],{"className":121353,"code":123197,"language":121355,"meta":121356,"style":62},"ps -e | grep ssh\n",[64,123199,123200],{"__ignoreMap":62},[67,123201,123202],{"class":69,"line":70},[67,123203,123197],{},[19,123205,123206],{},"如果启动成功，会包含 sshd 程序。",[19,123208,123209],{},"以后需要频繁的使用ssh远程登录，为了简化实现，可以将远程主机的ssh服务设置为开机自启动，命令如下：",[57,123211,123213],{"className":121353,"code":123212,"language":121355,"meta":121356,"style":62},"sudo systemctl enable ssh\n",[64,123214,123215],{"__ignoreMap":62},[67,123216,123217],{"class":69,"line":70},[67,123218,123212],{},[19,123220,123221],{},"3.本地远程登录",[19,123223,123224],{},"登录远程主机可以调用如下命令:",[57,123226,123228],{"className":117833,"code":123227,"language":117835,"meta":62,"style":62},"ssh -X 用户名@ip地址\n",[64,123229,123230],{"__ignoreMap":62},[67,123231,123232,123234,123237],{"class":69,"line":70},[67,123233,122184],{"class":112},[67,123235,123236],{"class":208}," -X",[67,123238,123239],{"class":84}," 用户名@ip地址\n",[19,123241,123242],{},"然后根据提示，录入登陆密码，即可成功登录。",[19,123244,123245],{},"如果退出，可以调用exit命令：",[57,123247,123249],{"className":121353,"code":123248,"language":121355,"meta":121356,"style":62},"exit\n",[64,123250,123251],{"__ignoreMap":62},[67,123252,123253],{"class":69,"line":70},[67,123254,123248],{},[19,123256,123257],{},[336,123258,123259],{},"4.实现数据传输",[19,123261,123262],{},"通过SSH在本地主机只需调用相关指令，便可方便的实现与远程主机的数据上传或下载，指令格式如下所示：",[19,123264,123265],{},"上传文件指令格式如下：",[57,123267,123269],{"className":121353,"code":123268,"language":121355,"meta":121356,"style":62},"scp 本地文件路径 账号@ip:路径\n",[64,123270,123271],{"__ignoreMap":62},[67,123272,123273],{"class":69,"line":70},[67,123274,123268],{},[19,123276,123277],{},"上传文件夹指令格式如下：",[57,123279,123281],{"className":121353,"code":123280,"language":121355,"meta":121356,"style":62},"scp -r 本地文件夹路径 账号@ip:路径\n",[64,123282,123283],{"__ignoreMap":62},[67,123284,123285],{"class":69,"line":70},[67,123286,123280],{},[19,123288,123289],{},"下载文件指令格式如下：",[57,123291,123293],{"className":121353,"code":123292,"language":121355,"meta":121356,"style":62},"scp 账号@ip:路径 本地文件夹路径\n",[64,123294,123295],{"__ignoreMap":62},[67,123296,123297],{"class":69,"line":70},[67,123298,123292],{},[19,123300,123301],{},"下载文件夹指令格式如下：",[57,123303,123305],{"className":121353,"code":123304,"language":121355,"meta":121356,"style":62},"scp -r 账号@ip:路径 本地文件夹路径\n",[64,123306,123307],{"__ignoreMap":62},[67,123308,123309],{"class":69,"line":70},[67,123310,123304],{},[19,123312,123313],{},[336,123314,123315],{},"优化",[19,123317,123318],{},"每次远程登录时，都需要输入密码，使用不方便，可以借助密钥简化登录过程，实现免密登录，提高操作效率。实现思想是：生成一对公钥私钥，私钥存储在本地，公钥上传至服务器，每次登录时，本地直接上传私钥到服务器，服务器有匹配的公钥就认为是合法用户，直接创建SSH连接即可。具体实现步骤只有两步：",[815,123320,123321,123324],{},[818,123322,123323],{},"本地生成密钥对；",[818,123325,123326],{},"将公钥上传至远程主机。",[19,123328,123329],{},[336,123330,123331],{},"1.生成密钥对",[19,123333,123334],{},"本地客户端生成公私钥：（一路回车默认即可）",[57,123336,123338],{"className":121353,"code":123337,"language":121355,"meta":121356,"style":62},"ssh-keygen\n",[64,123339,123340],{"__ignoreMap":62},[67,123341,123342],{"class":69,"line":70},[67,123343,123337],{},[19,123345,123346],{},"上面这个命令会在用户目录.ssh文件夹下创建公私钥：",[815,123348,123349,123352],{},[818,123350,123351],{},"id_rsa （私钥）；",[818,123353,123354],{},"id_rsa.pub (公钥)。",[19,123356,123357],{},[336,123358,123359],{},"2.公钥上传",[19,123361,123362],{},"上传指令如下：",[57,123364,123366],{"className":121353,"code":123365,"language":121355,"meta":121356,"style":62},"ssh-copy-id -i ~\u002F.ssh\u002Fid_rsa.pub 账号@ip\n",[64,123367,123368],{"__ignoreMap":62},[67,123369,123370],{"class":69,"line":70},[67,123371,123365],{},[19,123373,123374],{},"上面这条指令是将本地公钥上传到远程主机的ssh目录下，该目录下有文件authorized_keys保存了公钥内容。",[19,123376,123377],{},"以后再远程登录就无需录入密码了。",[14,123379,123381],{"id":123380},"_723-使用vscode优化","7.2.3 使用VScode优化",[19,123383,123384],{},"上一节，我们介绍了ssh远程连接的使用，但是如果只是纯粹使用ssh也存在一些不足，比如：编辑文件内容时，需要使用vi编辑器，且在一个终端内，无法同时编辑多个文件。本节将介绍一更为实用的功能——VSCode结合插件实现远程开发，这使我们可以以图形化的方式实现远程开发，比ssh的使用更方便快捷，可以大大的提高程序开发效率。",[19,123386,123387],{},[336,123388,123389],{},"1.准备工作",[19,123391,123392],{},"VScode远程开发依赖于ssh，请首先按照上一节内容配置ssh远程连接。",[19,123394,123395],{},[336,123396,123397],{},"2.为VScode安装远程开发插件",[19,123399,123400,123401,123404,123405,123408,123409,28922],{},"启动VScode，首先点击侧边栏的扩展按钮，然后在",[64,123402,123403],{},"扩展：商店","的搜索栏输入",[64,123406,123407],{},"Remote Development","并点击同名插件，最后在右侧显示区中点击",[64,123410,123411],{},"安装",[19,123413,123414],{},[725,123415],{"alt":62,"src":123416},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-093.png",[19,123418,123419],{},[336,123420,123421],{},"3.配置远程连接",[19,123423,123424,123425,123428,123429,123432],{},"步骤1：使用快捷键",[64,123426,123427],{},"ctrl + shift + p","打开命令输入窗口，并输入",[64,123430,123431],{},"Remote-SSH:Connect to Host...","，弹出列表中选择与之同名的选项。",[19,123434,123435],{},[725,123436],{"alt":62,"src":123437},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-094.png",[19,123439,123440,123441,28922],{},"步骤2：步骤1完成将弹出一个新的命令窗口如下，选择下拉列表中的 ",[64,123442,123443],{},"Add New SSH Host",[19,123445,123446],{},[725,123447],{"alt":62,"src":123448},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-095.png",[19,123450,123451,123452,123455,123456,123459,123460,123463],{},"步骤3：步骤2完成又将弹出一个新的命令窗口，在其中输入：",[64,123453,123454],{},"ssh +X ubuntu@192.168.43.164","，其中，",[64,123457,123458],{},"ubuntu","需要替换为你的登录用户名，",[64,123461,123462],{},"192.18.43.164"," 则替换为被远程连接主机的ip地址。",[19,123465,123466],{},[725,123467],{"alt":62,"src":123468},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-096.png",[19,123470,123471],{},"步骤4：选择步骤3完成后的弹窗列表中的第一个选项(或直接回车)，即可完成配置，配置成功后会有提示信息。",[19,123473,123474],{},[725,123475],{"alt":62,"src":123476},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-097.png",[19,123478,123479],{},[725,123480],{"alt":62,"src":123481},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-098.png",[19,123483,123484],{},[336,123485,123486],{},"4.使用",[19,123488,123489,123490,123428,123492,123494],{},"步骤1：继续使用快捷键",[64,123491,123427],{},[64,123493,123431],{},"，此时列表中将显示步骤3中配置的ip地址，直接选择，选择后，VScode将打开一个新的窗口。",[19,123496,123497],{},[725,123498],{"alt":62,"src":123499},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-099.png",[19,123501,123502,123503,123506],{},"或者，也可以点击侧边栏的",[64,123504,123505],{},"远程资源管理器","，在弹出的服务器列表中选择要连接的服务器，并右击，选择在本窗口或新窗口中实现远程连接。",[19,123508,123509],{},[725,123510],{"alt":62,"src":123511},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-100.png",[19,123513,123514,123515,123518,123519,123522],{},"步骤2：选择菜单栏的",[64,123516,123517],{},"文件","下的",[64,123520,123521],{},"打开文件夹","，在弹窗列表中选择需要打开的文件夹并点击确定即可。",[19,123524,123525],{},[725,123526],{"alt":62,"src":123527},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-101.png",[19,123529,123530],{},"最终，我们就可以像操作本地文件一样实现远程开发了。",[803,123532,123534],{"id":123533},"_73-远程桌面","7.3 远程桌面",[19,123536,123537],{},"因为用X11转发效率太低太低，所以还是要选用远程访问桌面的形式来看Rviz2和Gazebo等等（如果有需求的话）",[19,123539,123540],{},"我们选择使用VNC来看。",[815,123542,123543],{},[818,123544,123545],{},"安装VNC服务器：",[19,123547,123548],{},"这里以TigerVNC为例进行安装：",[57,123550,123552],{"className":117833,"code":123551,"language":117835,"meta":62,"style":62},"sudo apt install tigervnc-standalone-server tigervnc-common\n",[64,123553,123554],{"__ignoreMap":62},[67,123555,123556,123558,123560,123562,123565],{"class":69,"line":70},[67,123557,298],{"class":112},[67,123559,117854],{"class":84},[67,123561,312],{"class":84},[67,123563,123564],{"class":84}," tigervnc-standalone-server",[67,123566,123567],{"class":84}," tigervnc-common\n",[815,123569,123570],{"start":143},[818,123571,123572],{},"设置VNC密码：",[19,123574,123575],{},"为VNC用户设置密码，运行以下命令：",[57,123577,123579],{"className":117833,"code":123578,"language":117835,"meta":62,"style":62},"vncpasswd\n",[64,123580,123581],{"__ignoreMap":62},[67,123582,123583],{"class":69,"line":70},[67,123584,123578],{"class":112},[815,123586,123587],{"start":149},[818,123588,123589],{},"配置VNC启动脚本:",[19,123591,123592],{},"创建VNC配置文件，在用户家目录内的.vnc文件夹中创建启动文件：",[57,123594,123596],{"className":117833,"code":123595,"language":117835,"meta":62,"style":62},"mkdir -p ~\u002F.vnc\nnano ~\u002F.vnc\u002Fxstartup\n",[64,123597,123598,123607],{"__ignoreMap":62},[67,123599,123600,123602,123604],{"class":69,"line":70},[67,123601,101803],{"class":112},[67,123603,29753],{"class":208},[67,123605,123606],{"class":84}," ~\u002F.vnc\n",[67,123608,123609,123612],{"class":69,"line":143},[67,123610,123611],{"class":112},"nano",[67,123613,123614],{"class":84}," ~\u002F.vnc\u002Fxstartup\n",[19,123616,123617],{},"在打开的编辑器里面输入以下内容（以GNOME为例）：",[57,123619,123621],{"className":117833,"code":123620,"language":117835,"meta":62,"style":62},"#!\u002Fbin\u002Fsh\nunset SESSION_MANAGER\nunset DBUS_SESSION_BUS_ADDRESS\ngnome-session\n",[64,123622,123623,123628,123636,123643],{"__ignoreMap":62},[67,123624,123625],{"class":69,"line":70},[67,123626,123627],{"class":202},"#!\u002Fbin\u002Fsh\n",[67,123629,123630,123633],{"class":69,"line":143},[67,123631,123632],{"class":208},"unset",[67,123634,123635],{"class":84}," SESSION_MANAGER\n",[67,123637,123638,123640],{"class":69,"line":149},[67,123639,123632],{"class":208},[67,123641,123642],{"class":84}," DBUS_SESSION_BUS_ADDRESS\n",[67,123644,123645],{"class":69,"line":155},[67,123646,123647],{"class":112},"gnome-session\n",[19,123649,123650],{},"保存并退出（在nano中按Ctrl + O保存，然后按Ctrl + X退出）。",[815,123652,123653],{"start":155},[818,123654,123655],{},"给予执行权限：",[19,123657,123658],{},"为xstartup文件设置执行权限：",[57,123660,123662],{"className":117833,"code":123661,"language":117835,"meta":62,"style":62},"chmod +x ~\u002F.vnc\u002Fxstartup\n",[64,123663,123664],{"__ignoreMap":62},[67,123665,123666,123668,123671],{"class":69,"line":70},[67,123667,25324],{"class":112},[67,123669,123670],{"class":84}," +x",[67,123672,123614],{"class":84},[815,123674,123675],{"start":161},[818,123676,123677],{},"启动VNC服务器：",[57,123679,123681],{"className":117833,"code":123680,"language":117835,"meta":62,"style":62},"vncserver -geometry 1920x1080 -localhost=0\n",[64,123682,123683],{"__ignoreMap":62},[67,123684,123685,123688,123691,123694],{"class":69,"line":70},[67,123686,123687],{"class":112},"vncserver",[67,123689,123690],{"class":208}," -geometry",[67,123692,123693],{"class":84}," 1920x1080",[67,123695,123696],{"class":208}," -localhost=0\n",[19,123698,123699],{},"geometry 选项指定窗口大小，localhost 选项设为 0 以开放连接。(设为1是只允许本地连接)",[19,123701,123702],{},"你将看到类似于:1的输出，这表示VNC会话的显示编号。例如，如果输出为:1，则VNC监听的端口为5901（5900 + 显示编号）。",[815,123704,123705],{"start":167},[818,123706,123707],{},"查看已开启的VNC服务器：",[57,123709,123711],{"className":117833,"code":123710,"language":117835,"meta":62,"style":62},"vncserver -list\n",[64,123712,123713],{"__ignoreMap":62},[67,123714,123715,123717],{"class":69,"line":70},[67,123716,123687],{"class":112},[67,123718,123719],{"class":208}," -list\n",[19,123721,123722],{},[725,123723],{"alt":62,"src":123724},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-102.png",[815,123726,123727],{"start":173},[818,123728,123729],{},"连接到VNC服务器：",[19,123731,123732],{},"使用VNC客户端（如vncviewer）连接到VNC服务器，输入你的服务器IP和端口。例如，如果服务器IP为192.168.31.10，且显示编号为1，你应该连接到192.168.31.10:1，或者直接输入192.168.31.10:5901。",[815,123734,123735],{"start":180},[818,123736,123737],{},"停止VNC服务器：",[19,123739,123740],{},"如果需要停止VNC服务器，可以使用以下命令：",[57,123742,123744],{"className":117833,"code":123743,"language":117835,"meta":62,"style":62},"vncserver -kill :1\n",[64,123745,123746],{"__ignoreMap":62},[67,123747,123748,123750,123753],{"class":69,"line":70},[67,123749,123687],{"class":112},[67,123751,123752],{"class":208}," -kill",[67,123754,123755],{"class":84}," :1\n",[19,123757,123758],{},"将:1替换为你实际使用的显示编号。",[19,123760,123761],{},[725,123762],{"alt":62,"src":123763},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-103.png",[19,123765,123766],{},[725,123767],{"alt":62,"src":123768},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-104.png",[803,123770,123772],{"id":123771},"_74-usb端口设置","7.4 USB端口设置",[19,123774,123775],{},[336,123776,123777],{},"首先先配置好权限",[57,123779,123781],{"className":117833,"code":123780,"language":117835,"meta":62,"style":62},"# 将用户权限提高\nsudo usermod -aG dialout $USER\nnewgrp dialout\n# 查看下面命令是否输出dialout（若输出才正常）\ngroups\n",[64,123782,123783,123788,123801,123808,123813],{"__ignoreMap":62},[67,123784,123785],{"class":69,"line":70},[67,123786,123787],{"class":202},"# 将用户权限提高\n",[67,123789,123790,123792,123794,123796,123799],{"class":69,"line":143},[67,123791,298],{"class":112},[67,123793,640],{"class":84},[67,123795,643],{"class":208},[67,123797,123798],{"class":84}," dialout",[67,123800,648],{"class":77},[67,123802,123803,123805],{"class":69,"line":149},[67,123804,667],{"class":112},[67,123806,123807],{"class":84}," dialout\n",[67,123809,123810],{"class":69,"line":155},[67,123811,123812],{"class":202},"# 查看下面命令是否输出dialout（若输出才正常）\n",[67,123814,123815],{"class":69,"line":161},[67,123816,123817],{"class":112},"groups\n",[19,123819,123820],{},"因为我们插拔USB设备，他的端口号可能会一直变，所以我们要给他的tty起一个固定的别名。",[14,123822,123824],{"id":123823},"_741-根据usb设备绑定端口多个不同设备","7.4.1 根据USB设备绑定端口(多个不同设备)",[19,123826,123827,123830],{},[336,123828,123829],{},"需求："," Ubuntu系统中现接入雷达和智能小车，请为二者绑定端口。",[19,123832,123833,123836],{},[336,123834,123835],{},"实现原理："," 可以通过USB设备本身的“标识”实现端口绑定。",[19,123838,123839],{},[336,123840,123841],{},"流程如下：",[19,123843,123844],{},"（1）.查找设备idVendor和idProduct",[19,123846,123847,123848,123851],{},"接入两个USB设备，在终端调用指令",[64,123849,123850],{},"lsusb","查看显示系统中以及连接到系统的USB设备信息。",[19,123853,123854],{},[725,123855],{"alt":62,"src":123856},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-105.png",[19,123858,123859,123860,123863],{},"如上图所示，红色方框内数据为USB设备，ID后面的",[64,123861,123862],{},"1a86:7523","分别为USB的idVendor和idProduct（两个参数之间使用”：“分隔）。",[19,123865,123866],{},"另外：可以通过重新插拔比较的方式确定哪些数据对应接入的USB设备。",[19,123868,123869],{},"（2）.编写映射规则",[19,123871,123872,123873,123876],{},"在",[64,123874,123875],{},"\u002Fetc\u002Fudev\u002Frules.d","目录下新建文件xxx.rules（文件名自定义）",[57,123878,123880],{"className":117833,"code":123879,"language":117835,"meta":62,"style":62},"sudo vim \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[64,123881,123882],{"__ignoreMap":62},[67,123883,123884,123886,123888],{"class":69,"line":70},[67,123885,298],{"class":112},[67,123887,119120],{"class":84},[67,123889,123890],{"class":84}," \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[19,123892,123893],{},"输入如下内容：",[57,123895,123897],{"className":117833,"code":123896,"language":117835,"meta":62,"style":62},"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",[64,123898,123899,123929],{"__ignoreMap":62},[67,123900,123901,123904,123906,123909,123912,123915,123918,123920,123923,123926],{"class":69,"line":70},[67,123902,123903],{"class":77},"KERNEL",[67,123905,909],{"class":73},[67,123907,123908],{"class":84},"=\"ttyUSB*\",",[67,123910,123911],{"class":112}," ATTRS",[67,123913,123914],{"class":84},"{idVendor}==",[67,123916,123917],{"class":112},"\"10c4\"",[67,123919,1236],{"class":112},[67,123921,123922],{"class":84}," ATTRS{idProduct}==\"ea60\",",[67,123924,123925],{"class":84}," MODE:=\"0777\",",[67,123927,123928],{"class":84}," SYMLINK+=\"mylidar\"\n",[67,123930,123931,123933,123935,123937,123939,123941,123944,123946,123949,123951],{"class":69,"line":143},[67,123932,123903],{"class":77},[67,123934,909],{"class":73},[67,123936,123908],{"class":84},[67,123938,123911],{"class":112},[67,123940,123914],{"class":84},[67,123942,123943],{"class":112},"\"1a86\"",[67,123945,1236],{"class":112},[67,123947,123948],{"class":84}," ATTRS{idProduct}==\"7523\",",[67,123950,123925],{"class":84},[67,123952,123953],{"class":84}," SYMLINK+=\"mycar\"\n",[19,123955,123956],{},"代码解释：",[1863,123958,123959,123962,123965,123968],{},[818,123960,123961],{},"KERNEL是内核固定名称，这里统一是“ttyUSB*”；",[818,123963,123964],{},"MODE是节点权限，通常改为“0777”，表示可读写可运行；",[818,123966,123967],{},"SYMLINK是符号连接，即绑定的别名；",[818,123969,123970],{},"ATTRS是设备厂商的唯一标识，idVendor和idProduct正好组成上面通过lsusb查找到的设备ID。",[19,123972,123973,123974,123977,123980],{},"***小提示：***",[24270,123975,123976],{},"一般的USB设备供应商都会提供类似的脚本文件，对于调用者而言，直接复制该文件到",[64,123978,123979],{},"\u002Fetc\u002Fudev\u002Frule.d",[24270,123981,123982],{},"目录即可。",[19,123984,123985],{},"表格 还在加载中，请等待加载完成后再尝试复制",[19,123987,123988],{},"（3）.使规则生效",[19,123990,123991],{},"在终端下输入如下指令：",[57,123993,123995],{"className":117833,"code":123994,"language":117835,"meta":62,"style":62},"# Ubuntu用下方命令\nsudo service udev reload\nsudo service udev restart\n\n#Fedora用下方命令\nsudo udevadm control --reload\nsudo udevadm trigger\n",[64,123996,123997,124002,124014,124025,124029,124034,124047],{"__ignoreMap":62},[67,123998,123999],{"class":69,"line":70},[67,124000,124001],{"class":202},"# Ubuntu用下方命令\n",[67,124003,124004,124006,124008,124011],{"class":69,"line":143},[67,124005,298],{"class":112},[67,124007,120585],{"class":84},[67,124009,124010],{"class":84}," udev",[67,124012,124013],{"class":84}," reload\n",[67,124015,124016,124018,124020,124022],{"class":69,"line":149},[67,124017,298],{"class":112},[67,124019,120585],{"class":84},[67,124021,124010],{"class":84},[67,124023,124024],{"class":84}," restart\n",[67,124026,124027],{"class":69,"line":155},[67,124028,177],{"emptyLinePlaceholder":176},[67,124030,124031],{"class":69,"line":161},[67,124032,124033],{"class":202},"#Fedora用下方命令\n",[67,124035,124036,124038,124041,124044],{"class":69,"line":167},[67,124037,298],{"class":112},[67,124039,124040],{"class":84}," udevadm",[67,124042,124043],{"class":84}," control",[67,124045,124046],{"class":208}," --reload\n",[67,124048,124049,124051,124053],{"class":69,"line":173},[67,124050,298],{"class":112},[67,124052,124040],{"class":84},[67,124054,124055],{"class":84}," trigger\n",[19,124057,124058],{},"再重新插拔设备即可。",[19,124060,124061],{},"（4）.测试",[19,124063,124064],{},"终端下输入如下指令",[57,124066,124068],{"className":117833,"code":124067,"language":117835,"meta":62,"style":62},"ll \u002Fdev | grep ttyUSB\n",[64,124069,124070],{"__ignoreMap":62},[67,124071,124072,124075,124078,124080,124082],{"class":69,"line":70},[67,124073,124074],{"class":112},"ll",[67,124076,124077],{"class":84}," \u002Fdev",[67,124079,266],{"class":73},[67,124081,30773],{"class":112},[67,124083,124084],{"class":84}," ttyUSB\n",[19,124086,124087],{},"运行结果如下：",[19,124089,124090],{},[725,124091],{"alt":62,"src":124092},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-106.png",[19,124094,124095,124096,124099],{},"也可以多次插拔USB设备，会发现设备端口",[64,124097,124098],{},"ttyUSBn","中的n编号会变动，但是别名是始终可以指向对应的USB设备的。至此，就可以使用别名来关联所需使用的USB设备了。",[19,124101,124102],{},[336,124103,118501],{},[19,124105,124106],{},"上述实现也存在一定的局限性，当Ubuntu接入两台或多台相同型号的USB设备时，由于设备ID是一样的，该种实现方式只会对其中的一台设备生效，这种情况下，就需要通过第二种策略来实现端口的绑定了。",[14,124108,124110],{"id":124109},"_742-根据主机硬件绑定端口多个相同设备","7.4.2 根据主机硬件绑定端口（多个相同设备)",[19,124112,124113,124115],{},[336,124114,123829],{}," 无人车中现接入一前一后两台相同型号的雷达，请为二者绑定端口。",[19,124117,124118,124120],{},[336,124119,123835],{}," USB设备所连接主机的USB接口也是有其“标识”的，可以通过这个标识实现端口绑定。",[19,124122,124123],{},[336,124124,123841],{},[19,124126,124127],{},"（1）.查看所连接的主机USB接口的KERNELS",[19,124129,124130],{},"调用如下指令查看第一台雷达的USB信息：",[57,124132,124134],{"className":117833,"code":124133,"language":117835,"meta":62,"style":62},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB0 | grep KERNELS\nudevadm info --attribute-walk --name=\u002Fdev\u002FttyACM0 | grep KERNELS\n",[64,124135,124136,124156],{"__ignoreMap":62},[67,124137,124138,124141,124143,124146,124149,124151,124153],{"class":69,"line":70},[67,124139,124140],{"class":112},"udevadm",[67,124142,70358],{"class":84},[67,124144,124145],{"class":208}," --attribute-walk",[67,124147,124148],{"class":208}," --name=\u002Fdev\u002FttyUSB0",[67,124150,266],{"class":73},[67,124152,30773],{"class":112},[67,124154,124155],{"class":84}," KERNELS\n",[67,124157,124158,124160,124162,124164,124167,124169,124171],{"class":69,"line":143},[67,124159,124140],{"class":112},[67,124161,70358],{"class":84},[67,124163,124145],{"class":208},[67,124165,124166],{"class":208}," --name=\u002Fdev\u002FttyACM0",[67,124168,266],{"class":73},[67,124170,30773],{"class":112},[67,124172,124155],{"class":84},[19,124174,124175],{},[725,124176],{"alt":62,"src":124177},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-107.png",[19,124179,124180],{},"调用如下指令查看第二台雷达的USB信息：",[57,124182,124184],{"className":117833,"code":124183,"language":117835,"meta":62,"style":62},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB1 | grep KERNELS\n",[64,124185,124186],{"__ignoreMap":62},[67,124187,124188,124190,124192,124194,124197,124199,124201],{"class":69,"line":70},[67,124189,124140],{"class":112},[67,124191,70358],{"class":84},[67,124193,124145],{"class":208},[67,124195,124196],{"class":208}," --name=\u002Fdev\u002FttyUSB1",[67,124198,266],{"class":73},[67,124200,30773],{"class":112},[67,124202,124155],{"class":84},[19,124204,124205,124206,124209,124210,124213,124214,124217],{},"运行结果相比较不同的KERNELS，第一台雷达端口地址为",[64,124207,124208],{},"KERNELS==1-1.3:1.0","，第二个雷达端口地址为",[64,124211,124212],{},"KERNELS==1-1.4:1.0","。可以使用此数据作为不同端口的“",[336,124215,124216],{},"唯一性标识","”。",[19,124219,123869],{},[19,124221,123872,124222,124224],{},[64,124223,123875],{},"目录下新建文件xxx.rules（文件名自定义），输入如下内容：",[57,124226,124227],{"className":117833,"code":123879,"language":117835,"meta":62,"style":62},[64,124228,124229],{"__ignoreMap":62},[67,124230,124231,124233,124235],{"class":69,"line":70},[67,124232,298],{"class":112},[67,124234,119120],{"class":84},[67,124236,123890],{"class":84},[57,124238,124240],{"className":117833,"code":124239,"language":117835,"meta":62,"style":62},"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",[64,124241,124242,124271],{"__ignoreMap":62},[67,124243,124244,124246,124248,124250,124253,124255,124258,124261,124263,124266,124268],{"class":69,"line":70},[67,124245,123903],{"class":77},[67,124247,909],{"class":73},[67,124249,123908],{"class":84},[67,124251,124252],{"class":77}," KERNELS",[67,124254,909],{"class":73},[67,124256,124257],{"class":84},"=\"1-1.3:1.0\",",[67,124259,124260],{"class":112}," MODE:",[67,124262,909],{"class":84},[67,124264,124265],{"class":112},"\"0777\"",[67,124267,1236],{"class":112},[67,124269,124270],{"class":84}," SYMLINK+=\"rplidar_front\"\n",[67,124272,124273,124275,124277,124279,124281,124283,124286,124288,124290,124292,124294],{"class":69,"line":143},[67,124274,123903],{"class":77},[67,124276,909],{"class":73},[67,124278,123908],{"class":84},[67,124280,124252],{"class":77},[67,124282,909],{"class":73},[67,124284,124285],{"class":84},"=\"1-1.4:1.0\",",[67,124287,124260],{"class":112},[67,124289,909],{"class":84},[67,124291,124265],{"class":112},[67,124293,1236],{"class":112},[67,124295,124296],{"class":84}," SYMLINK+=\"rplidar_back\"\n",[19,124298,123988],{},[19,124300,123991],{},[57,124302,124303],{"className":117833,"code":123994,"language":117835,"meta":62,"style":62},[64,124304,124305,124309,124319,124329,124333,124337,124347],{"__ignoreMap":62},[67,124306,124307],{"class":69,"line":70},[67,124308,124001],{"class":202},[67,124310,124311,124313,124315,124317],{"class":69,"line":143},[67,124312,298],{"class":112},[67,124314,120585],{"class":84},[67,124316,124010],{"class":84},[67,124318,124013],{"class":84},[67,124320,124321,124323,124325,124327],{"class":69,"line":149},[67,124322,298],{"class":112},[67,124324,120585],{"class":84},[67,124326,124010],{"class":84},[67,124328,124024],{"class":84},[67,124330,124331],{"class":69,"line":155},[67,124332,177],{"emptyLinePlaceholder":176},[67,124334,124335],{"class":69,"line":161},[67,124336,124033],{"class":202},[67,124338,124339,124341,124343,124345],{"class":69,"line":167},[67,124340,298],{"class":112},[67,124342,124040],{"class":84},[67,124344,124043],{"class":84},[67,124346,124046],{"class":208},[67,124348,124349,124351,124353],{"class":69,"line":173},[67,124350,298],{"class":112},[67,124352,124040],{"class":84},[67,124354,124055],{"class":84},[19,124356,124058],{},[19,124358,124061],{},[19,124360,124064,124361,124364],{},[64,124362,124363],{},"ll \u002Fdev | grep ttyUSB","，运行结果如下：",[19,124366,124367],{},[725,124368],{"alt":62,"src":124369},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-108.png",[19,124371,124372],{},"至此，就可以使用别名来关联所需使用的USB设备了。",[19,124374,124375,124377],{},[336,124376,118501],{}," USB设备必须连接在主机的指定端口上，否则，会导致端口绑定失败，或产生逻辑错误。(而且增加新设备可能会导致端口改变)",[14,124379,124381],{"id":124380},"_743-根据其他属性绑定端口","7.4.3 根据其他属性绑定端口",[19,124383,124384],{},"（1）.查看所连接的主机USB接口的信息",[57,124386,124388],{"className":117833,"code":124387,"language":117835,"meta":62,"style":62},"udevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyACM0)\nudevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyUSB0)\n",[64,124389,124390,124420],{"__ignoreMap":62},[67,124391,124392,124394,124396,124399,124401,124403,124405,124407,124410,124413,124415,124418],{"class":69,"line":70},[67,124393,124140],{"class":112},[67,124395,70358],{"class":84},[67,124397,124398],{"class":208}," -a",[67,124400,29753],{"class":208},[67,124402,28959],{"class":77},[67,124404,124140],{"class":112},[67,124406,70358],{"class":84},[67,124408,124409],{"class":208}," -q",[67,124411,124412],{"class":84}," path",[67,124414,25825],{"class":208},[67,124416,124417],{"class":84}," \u002Fdev\u002FttyACM0",[67,124419,870],{"class":77},[67,124421,124422,124424,124426,124428,124430,124432,124434,124436,124438,124440,124442,124445],{"class":69,"line":143},[67,124423,124140],{"class":112},[67,124425,70358],{"class":84},[67,124427,124398],{"class":208},[67,124429,29753],{"class":208},[67,124431,28959],{"class":77},[67,124433,124140],{"class":112},[67,124435,70358],{"class":84},[67,124437,124409],{"class":208},[67,124439,124412],{"class":84},[67,124441,25825],{"class":208},[67,124443,124444],{"class":84}," \u002Fdev\u002FttyUSB0",[67,124446,870],{"class":77},[19,124448,124449],{},[725,124450],{"alt":62,"src":124451},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-109.png",[19,124453,124454],{},"这些数据都是不会变的，所以可以拿这些数据来做标识",[19,124456,123869],{},[19,124458,123872,124459,124224],{},[64,124460,123875],{},[57,124462,124463],{"className":117833,"code":123879,"language":117835,"meta":62,"style":62},[64,124464,124465],{"__ignoreMap":62},[67,124466,124467,124469,124471],{"class":69,"line":70},[67,124468,298],{"class":112},[67,124470,119120],{"class":84},[67,124472,123890],{"class":84},[57,124474,124476],{"className":117833,"code":124475,"language":117835,"meta":62,"style":62},"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",[64,124477,124478,124506,124532],{"__ignoreMap":62},[67,124479,124480,124482,124484,124487,124489,124491,124493,124495,124498,124501,124503],{"class":69,"line":70},[67,124481,123903],{"class":77},[67,124483,909],{"class":73},[67,124485,124486],{"class":84},"=\"ttyACM*\",",[67,124488,123911],{"class":112},[67,124490,123914],{"class":84},[67,124492,123943],{"class":112},[67,124494,1236],{"class":112},[67,124496,124497],{"class":84}," ATTRS{idProduct}==\"55d4\",",[67,124499,124500],{"class":84}," ATTRS{serial}==\"0001\",",[67,124502,123925],{"class":84},[67,124504,124505],{"class":84}," SYMLINK+=\"ttyACM_MCU\"\n",[67,124507,124508,124510,124512,124514,124516,124518,124520,124522,124524,124527,124529],{"class":69,"line":143},[67,124509,123903],{"class":77},[67,124511,909],{"class":73},[67,124513,124486],{"class":84},[67,124515,123911],{"class":112},[67,124517,123914],{"class":84},[67,124519,123943],{"class":112},[67,124521,1236],{"class":112},[67,124523,124497],{"class":84},[67,124525,124526],{"class":84}," ATTRS{serial}==\"0002\",",[67,124528,123925],{"class":84},[67,124530,124531],{"class":84}," SYMLINK+=\"ttyACM_Lidar\"\n",[67,124533,124534,124536,124538,124540,124542,124544,124546,124548,124550,124552],{"class":69,"line":149},[67,124535,123903],{"class":77},[67,124537,909],{"class":73},[67,124539,123908],{"class":84},[67,124541,123911],{"class":112},[67,124543,123914],{"class":84},[67,124545,123943],{"class":112},[67,124547,1236],{"class":112},[67,124549,123948],{"class":84},[67,124551,123925],{"class":84},[67,124553,124554],{"class":84}," SYMLINK+=\"ttyUSB_IMU\"\n",[19,124556,123988],{},[19,124558,123991],{},[57,124560,124561],{"className":117833,"code":123994,"language":117835,"meta":62,"style":62},[64,124562,124563,124567,124577,124587,124591,124595,124605],{"__ignoreMap":62},[67,124564,124565],{"class":69,"line":70},[67,124566,124001],{"class":202},[67,124568,124569,124571,124573,124575],{"class":69,"line":143},[67,124570,298],{"class":112},[67,124572,120585],{"class":84},[67,124574,124010],{"class":84},[67,124576,124013],{"class":84},[67,124578,124579,124581,124583,124585],{"class":69,"line":149},[67,124580,298],{"class":112},[67,124582,120585],{"class":84},[67,124584,124010],{"class":84},[67,124586,124024],{"class":84},[67,124588,124589],{"class":69,"line":155},[67,124590,177],{"emptyLinePlaceholder":176},[67,124592,124593],{"class":69,"line":161},[67,124594,124033],{"class":202},[67,124596,124597,124599,124601,124603],{"class":69,"line":167},[67,124598,298],{"class":112},[67,124600,124040],{"class":84},[67,124602,124043],{"class":84},[67,124604,124046],{"class":208},[67,124606,124607,124609,124611],{"class":69,"line":173},[67,124608,298],{"class":112},[67,124610,124040],{"class":84},[67,124612,124055],{"class":84},[19,124614,124615,124616],{},"再重新插拔设备即可，或者 ",[336,124617,124618],{},"直接重启系统。",[19,124620,124061],{},[19,124622,124064,124623,124364],{},[64,124624,124363],{},[19,124626,124627],{},[725,124628],{"alt":62,"src":124629},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-110.png",[19,124631,124372],{},[19,124633,124634,124636],{},[336,124635,118501],{}," 一些设备可能没有串口号等。",[14,124638,124640],{"id":124639},"_744-其他注意事项","7.4.4 其他注意事项",[19,124642,124643,124644,124646,124647,124650,124651,19127,124654,124657,124658,124660],{},"并非所有的USB设备端口号都是",[64,124645,124098],{},"的格式，比如Arduino的端口号可能是",[64,124648,124649],{},"ttyACMn","，而对于USB摄像头而言，一台设备则对应两个端口号，分别是",[64,124652,124653],{},"videon",[64,124655,124656],{},"video(n+1)","，并且启用摄像头设备一般使用的是",[64,124659,124653],{},"端口，绑定时需要关联的也是该接口。",[19,124662,124663,124664,124667,124668,124671,124672,124674,124675,124678,124679,124682,124683,124686,124687,124686,124690,124686,124693,28922],{},"但是无论是外接何种USB设备，也不管采用上述两种方案的哪一种进行端口绑定，其原理都是类似的，只是实现细节不同而已。如果是外接的Arduino设备，那么需要在rules文件中的将",[64,124665,124666],{},"KERNEL==\"ttyUSB*\"","修改为",[64,124669,124670],{},"KERNEL==\"ttyACM*\"","，如果外接的是USB摄像头，那么则需要在rules文件中的将",[64,124673,124666],{},"修改为类似于",[64,124676,124677],{},"KERNEL==\"video[0,2,4,6]\"","的格式，其中",[64,124680,124681],{},"video[0,2,4,6]","表示可以绑定的端口为",[64,124684,124685],{},"video0","或",[64,124688,124689],{},"video2",[64,124691,124692],{},"video4",[64,124694,124695],{},"video6",[803,124697,124699],{"id":124698},"_75-挂载内网网页","7.5 挂载内网网页",[19,124701,124702],{},"可以把本地的网页挂载到路由器端，或者同内网段其他设备上，甚至可以挂载在本地。",[19,124704,124705],{},"下面以安卓设备为例子，由于安卓设备暂时不能直接打开html,所以我们可以把html挂载到本地服务器，再通过浏览器查看。",[19,124707,124708],{},"由于安卓系统基于Linux内核，所以我们可以下载一个叫termux的app来敲一些Linux命令：",[19,124710,124711,124712],{},"Termux 下载地址（F-Droid）：",[28,124713,124714],{"href":124714,"rel":124715},"https:\u002F\u002Ff-droid.org\u002Fpackages\u002Fcom.termux\u002F",[32],[19,124717,124718],{},"首先打开app后，先更新软件缓存：",[57,124720,124722],{"className":117833,"code":124721,"language":117835,"meta":62,"style":62},"pkg update\n",[64,124723,124724],{"__ignoreMap":62},[67,124725,124726,124729],{"class":69,"line":70},[67,124727,124728],{"class":112},"pkg",[67,124730,303],{"class":84},[19,124732,124733],{},"然后换源",[57,124735,124737],{"className":117833,"code":124736,"language":117835,"meta":62,"style":62},"nano $PREFIX\u002Fetc\u002Fapt\u002Fsources.list\n",[64,124738,124739],{"__ignoreMap":62},[67,124740,124741,124743,124746],{"class":69,"line":70},[67,124742,123611],{"class":112},[67,124744,124745],{"class":77}," $PREFIX",[67,124747,124748],{"class":84},"\u002Fetc\u002Fapt\u002Fsources.list\n",[19,124750,124751],{},"将该文件内容替换为下面：",[57,124753,124755],{"className":117833,"code":124754,"language":117835,"meta":62,"style":62},"deb https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24 stable main\n",[64,124756,124757],{"__ignoreMap":62},[67,124758,124759,124762,124765,124768],{"class":69,"line":70},[67,124760,124761],{"class":112},"deb",[67,124763,124764],{"class":84}," https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24",[67,124766,124767],{"class":84}," stable",[67,124769,124770],{"class":84}," main\n",[1863,124772,124773,124800],{},[818,124774,124775,124776,124778,124779],{},"如果你使用的是",[64,124777,123611],{},"编辑器：",[1863,124780,124781,124788,124794],{},[818,124782,124783,124784,124787],{},"按 ",[64,124785,124786],{},"Ctrl+O"," 保存文件。",[818,124789,124783,124790,124793],{},[64,124791,124792],{},"Enter"," 确认文件名。",[818,124795,124783,124796,124799],{},[64,124797,124798],{},"Ctrl+X"," 退出编辑器。",[818,124801,124775,124802,124778,124805],{},[64,124803,124804],{},"vim",[1863,124806,124807,124813],{},[818,124808,124783,124809,124812],{},[64,124810,124811],{},"Esc"," 退出编辑模式。",[818,124814,124815,124816,124818],{},"输入 ",[64,124817,119758],{}," 保存并退出。",[19,124820,124821],{},"接下来重新更新软件源：",[57,124823,124825],{"className":117833,"code":124824,"language":117835,"meta":62,"style":62},"pkg update && pkg upgrade\n",[64,124826,124827],{"__ignoreMap":62},[67,124828,124829,124831,124833,124835,124837],{"class":69,"line":70},[67,124830,124728],{"class":112},[67,124832,117884],{"class":84},[67,124834,246],{"class":77},[67,124836,124728],{"class":112},[67,124838,117870],{"class":84},[19,124840,124841],{},"安装python：",[57,124843,124845],{"className":117833,"code":124844,"language":117835,"meta":62,"style":62},"pkg install python\n",[64,124846,124847],{"__ignoreMap":62},[67,124848,124849,124851,124853],{"class":69,"line":70},[67,124850,124728],{"class":112},[67,124852,312],{"class":84},[67,124854,124855],{"class":84}," python\n",[19,124857,124858,537],{},[336,124859,124860],{},"通过Termux访问设备存储",[19,124862,124863],{},"如果文件在安卓设备上，可以使用Termux的文件管理器访问设备的存储：",[57,124865,124867],{"className":117833,"code":124866,"language":117835,"meta":62,"style":62},"termux-setup-storage\n",[64,124868,124869],{"__ignoreMap":62},[67,124870,124871],{"class":69,"line":70},[67,124872,124866],{"class":112},[815,124874,124875],{},[818,124876,124877,537,124880],{},[336,124878,124879],{},"进入HTML文件所在的目录",[815,124881,124882],{},[818,124883,124884,124885,124887],{},"使用",[64,124886,101813],{},"命令进入HTML文件所在的目录：",[57,124889,124891],{"className":117833,"code":124890,"language":117835,"meta":62,"style":62},"cd ~\u002Fyour_html_folder\n",[64,124892,124893],{"__ignoreMap":62},[67,124894,124895,124897],{"class":69,"line":70},[67,124896,101813],{"class":208},[67,124898,124899],{"class":84}," ~\u002Fyour_html_folder\n",[815,124901,124902],{"start":143},[818,124903,124904,537,124907,124912,124929],{},[336,124905,124906],{},"启动Python HTTP服务器",[815,124908,124909],{},[818,124910,124911],{},"运行以下命令启动一个简单的HTTP服务器：",[57,124913,124915],{"className":117833,"code":124914,"language":117835,"meta":62,"style":62},"python -m http.server 8000\n",[64,124916,124917],{"__ignoreMap":62},[67,124918,124919,124921,124923,124926],{"class":69,"line":70},[67,124920,30917],{"class":112},[67,124922,101419],{"class":208},[67,124924,124925],{"class":84}," http.server",[67,124927,124928],{"class":208}," 8000\n",[815,124930,124931],{"start":149},[818,124932,124933,124934,124937],{},"这会在端口",[64,124935,124936],{},"8000","上启动一个Web服务器。",[1863,124939,124940],{},[818,124941,124942],{},"启动服务器后，Termux会显示日志信息，例如：",[57,124944,124946],{"className":121353,"code":124945,"language":121355,"meta":121356,"style":62},"Serving HTTP on 0.0.0.0 port 8000 (http:\u002F\u002F0.0.0.0:8000\u002F) ...\n",[64,124947,124948],{"__ignoreMap":62},[67,124949,124950],{"class":69,"line":70},[67,124951,124945],{},[1863,124953,124954],{},[818,124955,124956],{},"这表示服务器已成功启动。",[19,124958,124959],{},[336,124960,124961],{},"在浏览器中访问HTML文件",[815,124963,124964],{},[818,124965,124966,537,124969,124974],{},[336,124967,124968],{},"在同一设备上访问",[815,124970,124971],{},[818,124972,124973],{},"打开安卓设备上的浏览器（如Chrome），输入以下地址：",[57,124975,124978],{"className":124976,"code":124977,"language":72201,"meta":62,"style":62},"language-JSON shiki shiki-themes github-light github-dark","http:\u002F\u002Flocalhost:8000\n",[64,124979,124980],{"__ignoreMap":62},[67,124981,124982,124985],{"class":69,"line":70},[67,124983,124984],{"class":77},"http:",[67,124986,124987],{"class":202},"\u002F\u002Flocalhost:8000\n",[1863,124989,124990],{},[818,124991,124992,124993,124996],{},"如果HTML文件中有",[64,124994,124995],{},"index.html","，它会自动加载；否则，你需要手动点击文件链接。",[803,124998,125000],{"id":124999},"_76-linux重点知识","7.6 Linux重点知识",[14,125002,125004],{"id":125003},"_761-关于点的说明","7.6.1 关于点的说明",[19,125006,125007],{},[725,125008],{"alt":62,"src":125009},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-111.png",[19,125011,125012],{},"一点本目录，两点上目录",[14,125014,125016],{"id":125015},"_762-目录","7.6.2 目录",[40,125018,125020],{"id":125019},"_7621-系统启动必须","7.6.2.1 系统启动必须",[19,125022,125023],{},[336,125024,125025],{},"\u002Fboot:",[19,125027,125028],{},"存放启动linux时使用的一些核心文件，包括一些连接文件和镜像文件",[19,125030,125031],{},[336,125032,125033],{},"\u002Fetc:",[19,125035,125036],{},"存放所有的系统需要的配置文件和子目录列表，更改目录下的文件可能会导致系统不能启动",[19,125038,125039],{},[336,125040,125041],{},"\u002Flib：",[19,125043,125044],{},"存放基本代码库（比如c++库），其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库",[19,125046,125047],{},[336,125048,125049],{},"\u002Fsys:",[19,125051,125052],{},"这是linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统 sysfs 。sysfs文件系统集成了下面3种文件系统的信息：针对进程信息的proc文件系统、针对设备的devfs文件系统以及针对伪终端的devpts文件系统。该文件系统是内核设备树的一个直观反映。当一个内核对象被创建的时候，对应的文件和目录也在内核对象子系统中",[40,125054,125056],{"id":125055},"_7622-指令集合","7.6.2.2 指令集合",[19,125058,125059],{},[336,125060,125061],{},"\u002Fbin:",[19,125063,125064],{},"为二进制文件的缩写，存放最经常使用的命令",[19,125066,125067],{},[336,125068,125069],{},"\u002Fsbin:",[19,125071,125072],{},"只有系统管理员才能使用的程序和指令",[40,125074,125076],{"id":125075},"_7623-外部文件管理","7.6.2.3 外部文件管理",[19,125078,125079],{},[336,125080,125081],{},"\u002Fdev:",[19,125083,125084],{},"Device（设备）的缩写，存放linux的外部设备，在linux中访问设备和访问文件的方式是相同的",[19,125086,125087],{},[336,125088,125089],{},"\u002Fmedia:",[19,125091,125092],{},"类windows的其他设备，例如U盘、光驱等等，识别后linux会把设备放到这个目录下",[19,125094,125095],{},[336,125096,125097],{},"\u002Fmnt:",[19,125099,125100],{},"临时挂载别的文件系统，我们可以将光驱挂载在\u002Fmnt\u002F上，然后进入该目录就可以查看光驱里的内容",[40,125102,125104],{"id":125103},"_7624-临时文件","7.6.2.4 临时文件",[19,125106,125107],{},[336,125108,125109],{},"\u002Frun:",[19,125111,125112],{},"是一个临时文件系统，存储系统启动以来的信息。当系统重启时，这个目录下的文件应该被删掉或清除。如果你的系统上有 \u002Fvar\u002Frun 目录，应该让它指向 run",[19,125114,125115],{},[336,125116,125117],{},"\u002Flost+found:",[19,125119,125120],{},"一般情况下为空的，系统非法关机后，这里就存放一些文件",[19,125122,125123],{},[336,125124,125125],{},"\u002Ftmp:",[19,125127,125128],{},"这个目录是用来存放一些临时文件的",[40,125130,125132],{"id":125131},"_7625-账户","7.6.2.5 账户",[19,125134,125135],{},[336,125136,125137],{},"\u002Froot：",[19,125139,125140],{},"系统管理员的用户主目录",[19,125142,125143,537],{},[336,125144,125145],{},"\u002Fhome",[19,125147,125148],{},"用户的主目录，以用户的账号命名的",[19,125150,125151,537],{},[336,125152,125153],{},"\u002Fusr",[19,125155,125156],{},"用户的很多应用程序和文件都放在这个目录下，类似于windows下的program files目录",[19,125158,125159],{},[336,125160,125161],{},"\u002Fusr\u002Fbin：",[19,125163,125164],{},"系统用户使用的应用程序与指令",[19,125166,125167],{},[336,125168,125169],{},"\u002Fusr\u002Fsbin：",[19,125171,125172],{},"超级用户使用的比较高级的管理程序和系统守护程序",[19,125174,125175],{},[336,125176,125177],{},"\u002Fusr\u002Fsrc：",[19,125179,125180],{},"内核源代码默认的放置目录",[40,125182,125184],{"id":125183},"_7626-运行过程要用","7.6.2.6 运行过程要用",[19,125186,125187],{},[336,125188,125189],{},"\u002Fvar：",[19,125191,125192],{},"存放经常修改的数据，比如程序运行的日志文件（\u002Fvar\u002Flog 目录下）",[19,125194,125195],{},[336,125196,125197],{},"\u002Fproc:",[19,125199,125200,125201,125204],{},"管理 ",[336,125202,125203],{},"内存空间！"," 虚拟的目录，是系统内存的映射，我们可以直接访问这个目录来，获取系统信息。这个目录的内容不在硬盘上而是在内存里，我们也可以直接修改里面的某些文件来做修改",[40,125206,125208],{"id":125207},"_7627-扩展用的","7.6.2.7 扩展用的",[19,125210,125211],{},[336,125212,125213],{},"\u002Fopt:",[19,125215,125216],{},"默认是空的，我们安装额外软件可以放在这个里面",[19,125218,125219],{},[336,125220,125221],{},"\u002Fsrv:",[19,125223,125224],{},"存放服务启动后需要提取的数据（不用服务器就是空）",[14,125226,125228],{"id":125227},"_763-终端利用ssh登陆远程服务器","7.6.3 终端利用ssh登陆远程服务器",[19,125230,125231],{},[725,125232],{"alt":62,"src":125233},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-112.png",[19,125235,125236],{},"windows-->linux:",[19,125238,125239],{},"远程传输文件:scp- r 本地文件目录 服务器的用户名@服务器IP:\u002Ftmp",[19,125241,125242],{},"必须传入到服务器的\u002Ftmp这个路径下，因为只有这个路径有写入权限，可以上传之后移动到你的文件到你需要的指定目录",[19,125244,125245],{},"linux传输文件到windows",[19,125247,125248],{},"scp- r 服务器的用户名@服务器IP:\u002Ftmp 本地的文件目录",[14,125250,125252],{"id":125251},"_764-易忘知识","7.6.4 易忘知识",[19,125254,125255],{},"操作系统内核查看",[57,125257,125258],{"className":117833,"code":121827,"language":117835,"meta":62,"style":62},[64,125259,125260],{"__ignoreMap":62},[67,125261,125262,125264],{"class":69,"line":70},[67,125263,70741],{"class":112},[67,125265,121836],{"class":208},[19,125267,125268],{},[725,125269],{"alt":62,"src":125270},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-113.png",[19,125272,125273],{},[725,125274],{"alt":62,"src":125275},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-114.png",[57,125277,125279],{"className":117833,"code":125278,"language":117835,"meta":62,"style":62},"mv mvtest mvtest2 \nmv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[64,125280,125281,125293],{"__ignoreMap":62},[67,125282,125283,125285,125288,125291],{"class":69,"line":70},[67,125284,122044],{"class":112},[67,125286,125287],{"class":84}," mvtest",[67,125289,125290],{"class":84}," mvtest2",[67,125292,3395],{"class":77},[67,125294,125295],{"class":69,"line":143},[67,125296,125297],{"class":112},"mv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[19,125299,125300],{},[725,125301],{"alt":62,"src":125302},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-115.png",[19,125304,125305],{},[725,125306],{"alt":62,"src":125307},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-116.png",[19,125309,125310,125311,125314],{},"当前目录中共有3个文件，每个占用4KB，目录本身因元数据占用4KB，总计16KB。通过 ",[64,125312,125313],{},"du -a"," 可以快速查看磁盘使用细节。",[14,125316,125318],{"id":125317},"_765-vim","7.6.5 Vim",[19,125320,125321],{},[725,125322],{"alt":62,"src":125323},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-117.png",[19,125325,125326],{},"（vim是一个linux使用非常广泛的编辑器，不是编译器）vscode就是编辑器，vim编辑器几乎支持所有编程语言，所以非常好用！",[19,125328,125329],{},"一开始进去为命令模式，此时点击输入的字母为命令",[19,125331,125332],{},[336,125333,125334],{},"1.命令模式：",[19,125336,125337],{},"i 切换到输入模式，在光标当前位置开始输入文本",[19,125339,125340],{},"x 删除当前光标所在处的字符",[19,125342,125343],{},"：切换到底线命令模式，以在最底一行输入命令",[19,125345,125346],{},"a 进行插入模式，在光标下一个位置输入文本",[19,125348,125349],{},"o 在当前的下方插入一个新行，并进入插入模式",[19,125351,125352],{},"0 在当前行的上方插入一个新行，并进入插入模式",[19,125354,125355],{},"dd 剪切当前行",[19,125357,125358],{},"yy 复制当前行",[19,125360,125361],{},"p 粘贴剪贴板内容到光标下方",[19,125363,125364],{},"P 粘贴剪贴板内容到光标上方",[19,125366,125367],{},"u 撤销上一次操作",[19,125369,125370],{},"ctrl+r 重做上一次操作",[19,125372,125373,125375],{},[1651,125374],{}," 保存文件",[19,125377,125378,125380],{},[1501,125379],{}," 退出Vim编辑器",[19,125382,125383,125385],{},[1501,125384],{},"! 强制退出Vim编辑器，不保存修改",[19,125387,125388],{},[336,125389,125390],{},"2.输入模式：",[19,125392,125393],{},[725,125394],{"alt":62,"src":125395},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-118.png",[19,125397,125398],{},[336,125399,125400],{},"3.底线命令模式：",[19,125402,125403],{},[725,125404],{"alt":62,"src":125405},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-119.png",[19,125407,125408],{},"按下esc可以退出底线命令模式",[14,125410,125412],{"id":125411},"_766-apt","7.6.6 apt",[19,125414,125415],{},"为Linux的Debian和Ubuntu中的shell前端软件包管理器",[14,125417,125419],{"id":125418},"_767-home与root的区别","7.6.7 home与root的区别",[19,125421,125422],{},[725,125423],{"alt":62,"src":125424},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-120.png",[19,125426,125427],{},[725,125428],{"alt":62,"src":125429},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-121.png",[19,125431,125432],{},[725,125433],{"alt":62,"src":125434},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-122.png",[19,125436,125437],{},[725,125438],{"alt":62,"src":125439},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-123.png",[14,125441,125443],{"id":125442},"_768-linux系统如何安装软件5-补充","7.6.8 linux系统如何安装软件：.5 补充",[19,125445,125446],{},[28,125447,125448],{"href":125448,"rel":125449},"https:\u002F\u002Fme.tungchiahui.cn\u002Flinux-tutorial\u002F#%E5%BD%BB%E5%BA%95%E5%88%A0%E9%99%A4linux",[32],[815,125451,125452,125455],{},[818,125453,125454],{},"下载安装包+指令的形式进行安装 以fedora系统为例子： sudo dnf install 安装包",[818,125456,125457],{},"下载程序压缩包并进行解压，配置图标启动文件，以安装pycharm为例进行说明：： 1️⃣解压压缩包：可以手动解压；也可以通过终端进行解压tar (tar -help看有啥选项)",[19,125459,125460],{},[725,125461],{"alt":62,"src":125462},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-124.png",[19,125464,125465],{},"解压后的文件放到自己存放的位置 2️⃣查找启动文件，判断程序压缩包是正常的，在解压文件下的bin目录进行查看，在终端输入pycharm.sh或者pycharm来判断是否启动",[19,125467,125468],{},[725,125469],{"alt":62,"src":125470},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-125.png",[57,125472,125474],{"className":121353,"code":125473,"language":121355,"meta":121356,"style":62},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n.\u002Fpycharm.sh\n",[64,125475,125476,125481],{"__ignoreMap":62},[67,125477,125478],{"class":69,"line":70},[67,125479,125480],{},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n",[67,125482,125483],{"class":69,"line":143},[67,125484,125485],{},".\u002Fpycharm.sh\n",[19,125487,125488],{},"3️⃣创建.desktop文件",[19,125490,125491],{},[336,125492,125493],{},"原理：",[1863,125495,125496,125506],{},[818,125497,125498,125499,125505],{},"Linux 桌面环境（GNOME、KDE、XFCE 等）通过 ",[336,125500,125501,125504],{},[64,125502,125503],{},".desktop"," 文件"," 来识别应用。",[818,125507,125508,125510,125511],{},[64,125509,125503],{}," 文件相当于一个“应用注册表”，告诉系统：",[1863,125512,125513,125516,125519,125522,125525],{},[818,125514,125515],{},"应用名字（Name）",[818,125517,125518],{},"图标（Icon）",[818,125520,125521],{},"执行命令（Exec）",[818,125523,125524],{},"分类（Categories）",[818,125526,125527],{},"是否需要终端（Terminal）",[57,125529,125531],{"className":121353,"code":125530,"language":121355,"meta":121356,"style":62},"cd ~\u002F.local\u002Fshare\u002Fapplications\nnano pycharm.desktop\n",[64,125532,125533,125538],{"__ignoreMap":62},[67,125534,125535],{"class":69,"line":70},[67,125536,125537],{},"cd ~\u002F.local\u002Fshare\u002Fapplications\n",[67,125539,125540],{"class":69,"line":143},[67,125541,125542],{},"nano pycharm.desktop\n",[19,125544,125545],{},"nano是一个命令行下的编辑器，也可以使用vim",[57,125547,125549],{"className":121353,"code":125548,"language":121355,"meta":121356,"style":62},"[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",[64,125550,125551,125556,125561,125566,125571,125576,125581,125586,125591,125596],{"__ignoreMap":62},[67,125552,125553],{"class":69,"line":70},[67,125554,125555],{},"[Desktop Entry]\n",[67,125557,125558],{"class":69,"line":143},[67,125559,125560],{},"Version=1.0\n",[67,125562,125563],{"class":69,"line":149},[67,125564,125565],{},"Type=Application\n",[67,125567,125568],{"class":69,"line":155},[67,125569,125570],{},"Name=PyCharm\n",[67,125572,125573],{"class":69,"line":161},[67,125574,125575],{},"Icon=\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.svg\n",[67,125577,125578],{"class":69,"line":167},[67,125579,125580],{},"Exec=\"\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.sh\" %f\n",[67,125582,125583],{"class":69,"line":173},[67,125584,125585],{},"Comment=JetBrains PyCharm IDE\n",[67,125587,125588],{"class":69,"line":180},[67,125589,125590],{},"Categories=Development;IDE;\n",[67,125592,125593],{"class":69,"line":186},[67,125594,125595],{},"Terminal=false\n",[67,125597,125598],{"class":69,"line":444},[67,125599,125600],{},"StartupWMClass=jetbrains-pycharm\n",[1863,125602,125603,125609,125615,125621],{},[818,125604,125605,125608],{},[64,125606,125607],{},"Exec"," → 点击图标时执行的命令",[818,125610,125611,125614],{},[64,125612,125613],{},"Icon"," → 显示在菜单和桌面上的图标",[818,125616,125617,125620],{},[64,125618,125619],{},"Terminal=false"," → 不打开终端",[818,125622,125623,125626],{},[64,125624,125625],{},"StartupWMClass"," → GNOME 用它区分窗口实例，如果桌面环境是kde的话可以不用设置",[125628,125629,125630],"blockquote",{},[19,125631,125632,125633,125635,125636],{},"可以理解成 ",[64,125634,125503],{}," 文件是 Linux 的 ",[336,125637,125638],{},"快捷方式配置文件",[19,125640,125641],{},"4️⃣设置可执行权限",[57,125643,125645],{"className":121353,"code":125644,"language":121355,"meta":121356,"style":62},"chmod +x ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop\n",[64,125646,125647],{"__ignoreMap":62},[67,125648,125649],{"class":69,"line":70},[67,125650,125644],{},[19,125652,125653],{},"5️⃣桌面图标启动的话如下：",[57,125655,125657],{"className":121353,"code":125656,"language":121355,"meta":121356,"style":62},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\nchmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[64,125658,125659,125664],{"__ignoreMap":62},[67,125660,125661],{"class":69,"line":70},[67,125662,125663],{},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\n",[67,125665,125666],{"class":69,"line":143},[67,125667,125668],{},"chmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[815,125670,125671],{"start":149},[818,125672,125673],{},"下载Appimage文件实现软件的安装",[19,125675,125676],{},"1️⃣先下载appimage",[19,125678,125679],{},[28,125680,125681],{"href":125681,"rel":125682},"https:\u002F\u002Fy.qq.com\u002Fdownload\u002Fdownload.html",[32],[19,125684,125685],{},[725,125686],{"alt":62,"src":125687},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-126.png",[19,125689,125690],{},"2️⃣下载图标，可以去google下载qq音乐图标，.svg透明的图标",[19,125692,125693],{},[725,125694],{"alt":62,"src":125695},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-127.png",[19,125697,125698],{},"当然.png格式的也没问题，或者都可以在linux系统上更换使用图标",[19,125700,125701],{},[725,125702],{"alt":62,"src":125703},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-128.png",[19,125705,125706],{},[725,125707],{"alt":62,"src":125708},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-129.png",[19,125710,125711,125712,125715],{},"3️⃣给他们放在",[64,125713,125714],{},"\u002Fhome\u002F用户名","的某个文件夹中（可以自己定）",[19,125717,125718],{},"4️⃣给软件执行权限",[57,125720,125722],{"className":121353,"code":125721,"language":121355,"meta":121356,"style":62},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\nsudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[64,125723,125724,125729],{"__ignoreMap":62},[67,125725,125726],{"class":69,"line":70},[67,125727,125728],{},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\n",[67,125730,125731],{"class":69,"line":143},[67,125732,125733],{},"sudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[19,125735,125736],{},"5️⃣配置图标启动文件并添加执行权限（也可以继续使用nano）",[57,125738,125740],{"className":117833,"code":125739,"language":117835,"meta":62,"style":62},"cd ~\u002F.local\u002Fshare\u002Fapplications\u002F\ntouch .\u002Fqqmusic.desktop\nvim .\u002Fqqmusic.desktop\nsudo chmod +x .\u002Fqqmusic.desktop\n",[64,125741,125742,125749,125756,125762],{"__ignoreMap":62},[67,125743,125744,125746],{"class":69,"line":70},[67,125745,101813],{"class":208},[67,125747,125748],{"class":84}," ~\u002F.local\u002Fshare\u002Fapplications\u002F\n",[67,125750,125751,125753],{"class":69,"line":143},[67,125752,101820],{"class":112},[67,125754,125755],{"class":84}," .\u002Fqqmusic.desktop\n",[67,125757,125758,125760],{"class":69,"line":149},[67,125759,124804],{"class":112},[67,125761,125755],{"class":84},[67,125763,125764,125766,125768,125770],{"class":69,"line":155},[67,125765,298],{"class":112},[67,125767,25292],{"class":84},[67,125769,123670],{"class":84},[67,125771,125755],{"class":84},[19,125773,125774,125776],{},[64,125775,101820],{},"：一个 Linux 命令，主要功能是：",[1863,125778,125779,125782],{},[818,125780,125781],{},"如果文件不存在，就创建一个新的空文件",[818,125783,125784],{},"如果文件已存在，就更新该文件的最后修改时间",[57,125786,125788],{"className":121353,"code":125787,"language":121355,"meta":121356,"style":62},"[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",[64,125789,125790,125794,125799,125804,125809,125813,125818],{"__ignoreMap":62},[67,125791,125792],{"class":69,"line":70},[67,125793,125555],{},[67,125795,125796],{"class":69,"line":143},[67,125797,125798],{},"Name=QQ音乐\n",[67,125800,125801],{"class":69,"line":149},[67,125802,125803],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage\n",[67,125805,125806],{"class":69,"line":155},[67,125807,125808],{},"Icon=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002FQQ_Music2023.svg\n",[67,125810,125811],{"class":69,"line":161},[67,125812,125565],{},[67,125814,125815],{"class":69,"line":167},[67,125816,125817],{},"Categories=Audio;Music;Player;\n",[67,125819,125820],{"class":69,"line":173},[67,125821,125822],{},"Comment=QQ Music Client for Linux\n",[19,125824,125825],{},"将文件复制进去",[19,125827,125828],{},"6️⃣此时找到软件就可以打开了，如果找不到，请重启，部分不先进的发行版刷新图标列表不会很快",[19,125830,125831],{},[725,125832],{"alt":62,"src":125833},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-130.png",[19,125835,125836],{},"6️⃣如果点击图标打不开就禁用沙盒-->如果QQ音乐闪退，这个只是QQ音乐自己软件的问题，按下图这样做",[19,125838,125839],{},[725,125840],{"alt":62,"src":125841},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-131.png",[19,125843,125844,125845,125848,125849,125852],{},"如果你用的不是KDE，那么也可以直接修改",[64,125846,125847],{},"qqmuic.desktop","：在exec的末尾加上",[64,125850,125851],{},"--no-sandbox","（通过禁用安全沙盒机制，赋予应用程序更高的系统权限，从而解决因权限限制导致的运行问题）",[57,125854,125856],{"className":121353,"code":125855,"language":121355,"meta":121356,"style":62},"[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",[64,125857,125858,125862,125866,125871,125875,125879,125883],{"__ignoreMap":62},[67,125859,125860],{"class":69,"line":70},[67,125861,125555],{},[67,125863,125864],{"class":69,"line":143},[67,125865,125798],{},[67,125867,125868],{"class":69,"line":149},[67,125869,125870],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage --no-sandbox\n",[67,125872,125873],{"class":69,"line":155},[67,125874,125808],{},[67,125876,125877],{"class":69,"line":161},[67,125878,125565],{},[67,125880,125881],{"class":69,"line":167},[67,125882,125817],{},[67,125884,125885],{"class":69,"line":173},[67,125886,125822],{},[19,125888,125889],{},[725,125890],{"alt":62,"src":125891},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-132.png",[19,125893,125894],{},"在qq音乐中如果缺字体,那么请安装字体(这个字体是多种语言合一的字体)",[57,125896,125898],{"className":121353,"code":125897,"language":121355,"meta":121356,"style":62},"sudo dnf install google-noto-sans-cjk-fonts google-noto-serif-cjk-fonts\n",[64,125899,125900],{"__ignoreMap":62},[67,125901,125902],{"class":69,"line":70},[67,125903,125897],{},[815,125905,125906],{"start":155},[818,125907,125908],{},"去Flathub上安装软件",[19,125910,125911],{},[28,125912,125913],{"href":125913,"rel":125914},"https:\u002F\u002Fflathub.org\u002F",[32],[19,125916,125917],{},"1️⃣去上面的官网搜索软件+下载软件",[19,125919,125920],{},[725,125921],{"alt":62,"src":125922},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-133.png",[57,125924,125926],{"className":121353,"code":125925,"language":121355,"meta":121356,"style":62},"flatpak install flathub com.obsproject.Studio\n",[64,125927,125928],{"__ignoreMap":62},[67,125929,125930],{"class":69,"line":70},[67,125931,125925],{},[19,125933,125934],{},[725,125935],{"alt":62,"src":125936},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-134.png",[19,125938,125939],{},"2️⃣运行软件",[19,125941,125942],{},"a.官方方式：",[19,125944,125945],{},[725,125946],{"alt":62,"src":125947},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-135.png",[57,125949,125950],{"className":121353,"code":125925,"language":121355,"meta":121356,"style":62},[64,125951,125952],{"__ignoreMap":62},[67,125953,125954],{"class":69,"line":70},[67,125955,125925],{},[19,125957,125958],{},"b.当普通软件运行：",[19,125960,125961],{},[725,125962],{"alt":62,"src":125963},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-136.png",[19,125965,125966],{},[725,125967],{"alt":62,"src":125968},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-137.png",[779,125970,125971],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-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":62,"searchDepth":143,"depth":143,"links":125973},[125974,125975,125980,125981,125987,125988],{"id":122706,"depth":143,"text":122707},{"id":123048,"depth":143,"text":123049,"children":125976},[125977,125978,125979],{"id":123052,"depth":149,"text":123053},{"id":123119,"depth":149,"text":123120},{"id":123380,"depth":149,"text":123381},{"id":123533,"depth":143,"text":123534},{"id":123771,"depth":143,"text":123772,"children":125982},[125983,125984,125985,125986],{"id":123823,"depth":149,"text":123824},{"id":124109,"depth":149,"text":124110},{"id":124380,"depth":149,"text":124381},{"id":124639,"depth":149,"text":124640},{"id":124698,"depth":143,"text":124699},{"id":124999,"depth":143,"text":125000,"children":125989},[125990,125991,125992,125993,125994,125995,125996,125997],{"id":125003,"depth":149,"text":125004},{"id":125015,"depth":149,"text":125016},{"id":125227,"depth":149,"text":125228},{"id":125251,"depth":149,"text":125252},{"id":125317,"depth":149,"text":125318},{"id":125411,"depth":149,"text":125412},{"id":125418,"depth":149,"text":125419},{"id":125442,"depth":149,"text":125443},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch7",{"title":122698,"description":24093},"wiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作","Tg_tkQ2Az3_kc3_lK0-lGPJwMQaWApXJmN_fHk_Iamg",{"id":126004,"title":126005,"body":126006,"description":24093,"extension":787,"meta":126010,"navigation":176,"path":126011,"seo":126012,"stem":126013,"__hash__":126014},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Findex.md","Linux基本操作",{"type":7,"value":126007,"toc":126008},[],{"title":62,"searchDepth":143,"depth":143,"links":126009},[],{"category":30800},"\u002Fwiki\u002F2025-01-27-linux",{"title":126005,"description":24093},"wiki\u002F2025-01-27-Linux基本操作\u002Findex","PoJlKpO2vYd20qfiK6eHUbmqhxxbLAcr2GCjNoWrzB0",{"id":126016,"title":126017,"body":126018,"description":126022,"extension":787,"meta":126413,"navigation":176,"path":126414,"seo":126415,"stem":126416,"__hash__":126417},"wiki\u002Fwiki\u002F2025-01-09-Genesis-AI项目.md","Genesis AI项目",{"type":7,"value":126019,"toc":126411},[126020,126023,126027,126044,126047,126100,126104,126106,126146,126155,126159,126162,126403,126408],[19,126021,126022],{},"项目简介：Genesis是一个开源的生成式物理引擎，由卡内基梅隆大学等20多个研究机构经过两年合作开发而成，旨在为通用机器人、具身人工智能和物理人工智能应用提供支持。通过使用genesis对机器人及工程环境仿真实现实验内容。",[10,126024,126026],{"id":126025},"_1ubuntu环境配置","1.Ubuntu环境配置",[815,126028,126029,126032,126035,126038,126041],{},[818,126030,126031],{},"ubuntu环境换源",[818,126033,126034],{},"安装cuda",[818,126036,126037],{},"安装miniconda",[818,126039,126040],{},"安装pytorch",[818,126042,126043],{},"安装genesis",[19,126045,126046],{},"参考链接：",[57,126048,126050],{"className":59,"code":126049,"language":61,"meta":62,"style":62},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare=blogdetail&sharetype=blogdetail&sharerId=144728092&sharerefer=PC&sharesource=qq_69379513&sharefrom=from_link\n",[64,126051,126052],{"__ignoreMap":62},[67,126053,126054,126057,126060,126063,126065,126068,126071,126073,126076,126079,126081,126084,126087,126089,126092,126095,126097],{"class":69,"line":70},[67,126055,126056],{"class":112},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare",[67,126058,126059],{"class":84},"=blogdetail",[67,126061,126062],{"class":77},"&sharetype",[67,126064,909],{"class":73},[67,126066,126067],{"class":84},"blogdetail",[67,126069,126070],{"class":77},"&sharerId",[67,126072,909],{"class":73},[67,126074,126075],{"class":84},"144728092",[67,126077,126078],{"class":77},"&sharerefer",[67,126080,909],{"class":73},[67,126082,126083],{"class":84},"PC",[67,126085,126086],{"class":77},"&sharesource",[67,126088,909],{"class":73},[67,126090,126091],{"class":84},"qq_69379513",[67,126093,126094],{"class":77},"&sharefrom",[67,126096,909],{"class":73},[67,126098,126099],{"class":84},"from_link\n",[10,126101,126103],{"id":126102},"_2genesis-报错issue","2.Genesis 报错issue",[19,126105,126046],{},[57,126107,126108],{"className":59,"code":126049,"language":61,"meta":62,"style":62},[64,126109,126110],{"__ignoreMap":62},[67,126111,126112,126114,126116,126118,126120,126122,126124,126126,126128,126130,126132,126134,126136,126138,126140,126142,126144],{"class":69,"line":70},[67,126113,126056],{"class":112},[67,126115,126059],{"class":84},[67,126117,126062],{"class":77},[67,126119,909],{"class":73},[67,126121,126067],{"class":84},[67,126123,126070],{"class":77},[67,126125,909],{"class":73},[67,126127,126075],{"class":84},[67,126129,126078],{"class":77},[67,126131,909],{"class":73},[67,126133,126083],{"class":84},[67,126135,126086],{"class":77},[67,126137,909],{"class":73},[67,126139,126091],{"class":84},[67,126141,126094],{"class":77},[67,126143,909],{"class":73},[67,126145,126099],{"class":84},[57,126147,126149],{"className":59,"code":126148,"language":61,"meta":62,"style":62},"https:\u002F\u002Fgithub.com\u002FGenesis-Embodied-AI\u002FGenesis\u002Fissues\u002F43\n",[64,126150,126151],{"__ignoreMap":62},[67,126152,126153],{"class":69,"line":70},[67,126154,126148],{"class":112},[10,126156,126158],{"id":126157},"_3genesis-项目运行结果","3.Genesis 项目运行结果",[19,126160,126161],{},"hello_robot.py",[57,126163,126165],{"className":30915,"code":126164,"language":30917,"meta":62,"style":62},"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",[64,126166,126167,126173,126188,126192,126204,126216,126220,126233,126237,126256,126266,126276,126290,126294,126298,126303,126307,126317,126324,126338,126345,126355,126360,126364,126382,126387,126391,126398],{"__ignoreMap":62},[67,126168,126169,126171],{"class":69,"line":70},[67,126170,30929],{"class":73},[67,126172,45842],{"class":77},[67,126174,126175,126178,126181,126183,126185],{"class":69,"line":143},[67,126176,126177],{"class":77},"os.environ[",[67,126179,126180],{"class":84},"'PYOPENGL_PLATFORM'",[67,126182,5162],{"class":77},[67,126184,909],{"class":73},[67,126186,126187],{"class":84}," 'glx'\n",[67,126189,126190],{"class":69,"line":149},[67,126191,177],{"emptyLinePlaceholder":176},[67,126193,126194,126196,126199,126201],{"class":69,"line":155},[67,126195,30929],{"class":73},[67,126197,126198],{"class":77}," genesis ",[67,126200,31920],{"class":73},[67,126202,126203],{"class":77}," gs\n",[67,126205,126206,126208,126211,126213],{"class":69,"line":161},[67,126207,31274],{"class":73},[67,126209,126210],{"class":77}," pynput ",[67,126212,30929],{"class":73},[67,126214,126215],{"class":77}," keyboard\n",[67,126217,126218],{"class":69,"line":167},[67,126219,177],{"emptyLinePlaceholder":176},[67,126221,126222,126225,126228,126230],{"class":69,"line":173},[67,126223,126224],{"class":77},"gs.init(",[67,126226,126227],{"class":5935},"backend",[67,126229,909],{"class":73},[67,126231,126232],{"class":77},"gs.gpu)\n",[67,126234,126235],{"class":69,"line":180},[67,126236,177],{"emptyLinePlaceholder":176},[67,126238,126239,126242,126244,126247,126250,126252,126254],{"class":69,"line":186},[67,126240,126241],{"class":77},"scene ",[67,126243,909],{"class":73},[67,126245,126246],{"class":77}," gs.Scene(",[67,126248,126249],{"class":5935},"show_viewer",[67,126251,909],{"class":73},[67,126253,32013],{"class":208},[67,126255,870],{"class":77},[67,126257,126258,126261,126263],{"class":69,"line":444},[67,126259,126260],{"class":77},"plane ",[67,126262,909],{"class":73},[67,126264,126265],{"class":77}," scene.add_entity(gs.morphs.Plane())\n",[67,126267,126268,126271,126273],{"class":69,"line":2335},[67,126269,126270],{"class":77},"franka ",[67,126272,909],{"class":73},[67,126274,126275],{"class":77}," scene.add_entity(\n",[67,126277,126278,126281,126283,126285,126288],{"class":69,"line":2340},[67,126279,126280],{"class":77},"    gs.morphs.MJCF(",[67,126282,45891],{"class":5935},[67,126284,909],{"class":73},[67,126286,126287],{"class":84},"'xml\u002Ffranka_emika_panda\u002Fpanda.xml'",[67,126289,38584],{"class":77},[67,126291,126292],{"class":69,"line":2346},[67,126293,870],{"class":77},[67,126295,126296],{"class":69,"line":2351},[67,126297,177],{"emptyLinePlaceholder":176},[67,126299,126300],{"class":69,"line":2365},[67,126301,126302],{"class":77},"scene.build()\n",[67,126304,126305],{"class":69,"line":2370},[67,126306,177],{"emptyLinePlaceholder":176},[67,126308,126309,126311,126314],{"class":69,"line":2376},[67,126310,32484],{"class":73},[67,126312,126313],{"class":112}," on_press",[67,126315,126316],{"class":77},"(key):\n",[67,126318,126319,126322],{"class":69,"line":2397},[67,126320,126321],{"class":73},"    try",[67,126323,4459],{"class":77},[67,126325,126326,126328,126331,126333,126336],{"class":69,"line":2402},[67,126327,3218],{"class":73},[67,126329,126330],{"class":77}," key.char ",[67,126332,3670],{"class":73},[67,126334,126335],{"class":84}," 'q'",[67,126337,4459],{"class":77},[67,126339,126340,126342],{"class":69,"line":2416},[67,126341,16449],{"class":73},[67,126343,126344],{"class":208}," False\n",[67,126346,126347,126350,126353],{"class":69,"line":2421},[67,126348,126349],{"class":73},"    except",[67,126351,126352],{"class":208}," AttributeError",[67,126354,4459],{"class":77},[67,126356,126357],{"class":69,"line":2450},[67,126358,126359],{"class":73},"        pass\n",[67,126361,126362],{"class":69,"line":2455},[67,126363,177],{"emptyLinePlaceholder":176},[67,126365,126366,126369,126371,126374,126377,126379],{"class":69,"line":2472},[67,126367,126368],{"class":77},"listener ",[67,126370,909],{"class":73},[67,126372,126373],{"class":77}," keyboard.Listener(",[67,126375,126376],{"class":5935},"on_press",[67,126378,909],{"class":73},[67,126380,126381],{"class":77},"on_press)\n",[67,126383,126384],{"class":69,"line":2477},[67,126385,126386],{"class":77},"listener.start()\n",[67,126388,126389],{"class":69,"line":2482},[67,126390,177],{"emptyLinePlaceholder":176},[67,126392,126393,126395],{"class":69,"line":2487},[67,126394,109200],{"class":73},[67,126396,126397],{"class":77}," listener.running:\n",[67,126399,126400],{"class":69,"line":2501},[67,126401,126402],{"class":77},"    scene.step()\n",[19,126404,126405],{},[725,126406],{"alt":62,"src":126407},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-09-Genesis-AI%E9%A1%B9%E7%9B%AE-001.png",[779,126409,126410],{},"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":62,"searchDepth":143,"depth":143,"links":126412},[],{"category":24095},"\u002Fwiki\u002F2025-01-09-genesis-ai",{"title":126017,"description":126022},"wiki\u002F2025-01-09-Genesis-AI项目","Dtwo2HcGkJ6rJoZHinCc3gXtagXcGTSkaByZcrG9fHc",{"id":126419,"title":126420,"body":126421,"description":24093,"extension":787,"meta":126436,"navigation":176,"path":126437,"seo":126438,"stem":126439,"__hash__":126440},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识.md","1. 基础知识",{"type":7,"value":126422,"toc":126433},[126423,126426,126430],[10,126424,126420],{"id":126425},"_1-基础知识",[803,126427,126429],{"id":126428},"_11-js的组成","1.1 js的组成",[19,126431,126432],{},"ECMAScript（JS的基础）与 Web APIs（分为 DOM 页面文档对象模型和 BOM 浏览器对象模型）。",{"title":62,"searchDepth":143,"depth":143,"links":126434},[126435],{"id":126428,"depth":143,"text":126429},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch01",{"title":126420,"description":24093},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识","Fx7-0TjX81PM8o5Hlfy2WWNjwvP67bOnqk3Cd2fyvJ8",{"id":126442,"title":126443,"body":126444,"description":24093,"extension":787,"meta":126583,"navigation":176,"path":126584,"seo":126585,"stem":126586,"__hash__":126587},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容.md","2. vscode必备内容",{"type":7,"value":126445,"toc":126571},[126446,126449,126453,126456,126460,126470,126474,126477,126480,126483,126487,126494,126500,126504,126510,126521,126525,126528,126532,126535,126539,126542,126546,126549,126553,126556,126559,126562,126565,126568],[10,126447,126443],{"id":126448},"_2-vscode必备内容",[803,126450,126452],{"id":126451},"_21-标签分类","2.1 标签分类",[19,126454,126455],{},"标签有双标签和单标签：双标签＜html＞＜\u002Fhtml＞两者是成对存在的，分为开始标签和结束标签；单标签如：＜br \u002F＞。",[803,126457,126459],{"id":126458},"_22-快速生成html骨架","2.2 快速生成HTML骨架",[19,126461,126462,126463,126465,126466,126469],{},"使用 VSCode 时，基本结构不用一个一个输入，可以输入 ",[64,126464,1086],{}," 然后按 ",[64,126467,126468],{},"Tab","，快速自动生成基本结构。",[803,126471,126473],{"id":126472},"_23-预览插件与实时预览","2.3 预览插件与实时预览",[19,126475,126476],{},"VSCode 预览页面可右键选择 Open In Default Browser，需要安装 open in browser 插件。",[19,126478,126479],{},"Live Server实时预览插件，在修改标签后看网页界面时，不需要手动刷新就可以实现自动刷新",[19,126481,126482],{},"Live Server必须在vscode打开的文件夹中的文件程序中才能使用",[803,126484,126486],{"id":126485},"_24-视图缩放","2.4 视图缩放",[19,126488,126489,126490,126493],{},"缩放视图 ",[64,126491,126492],{},"ctrl+"," 可实现代码增大。",[19,126495,126496,126499],{},[64,126497,126498],{},"ctrl-"," 可实现代码减小。",[803,126501,126503],{"id":126502},"_25-新建与保存快捷键","2.5 新建与保存快捷键",[19,126505,126506,126507,28922],{},"VSCode 新建文件快捷键为 ",[64,126508,126509],{},"ctrl+N",[19,126511,126512,126513,126516,126517,126520],{},"保存快捷键为 ",[64,126514,126515],{},"ctrl+S","，将文本保存为 ",[64,126518,126519],{},".html"," 文件。",[803,126522,126524],{"id":126523},"_26-auto-rename-tag","2.6 Auto Rename Tag",[19,126526,126527],{},"VSCode 中 Auto Rename Tag 双击前标签，改动之后，后标签都会同步修改。",[803,126529,126531],{"id":126530},"_27-vscode-icons","2.7 vscode-icons",[19,126533,126534],{},"vscode-icons 可以实现不同后缀图标显示，便于快速识别文件类型。",[803,126536,126538],{"id":126537},"_28-easy-less","2.8 Easy LESS",[19,126540,126541],{},"Easy LESS 插件可以编译 less 文件。我们写的 less 不能直接引入到 html 文件中，通过这个插件可以自动生成 css 文件。",[803,126543,126545],{"id":126544},"_29-会了吧插件","2.9 会了吧插件",[19,126547,126548],{},"会了吧插件可以展示代码中英语单词的意思。",[803,126550,126552],{"id":126551},"_210-vscode常用快捷键","2.10 vscode常用快捷键",[19,126554,126555],{},"①快速复制:shift+alt+下箭头(上箭头）或者ctrl+C然后ctrl+V",[19,126557,126558],{},"②选定多个相同的单词:ctrl+D",[19,126560,126561],{},"③添加多个光标:ctrl+Alt+上箭头(下箭头）",[19,126563,126564],{},"④全局替换某些单词:ctrl+h",[19,126566,126567],{},"⑤快速定位到某一行:ctrl+g",[19,126569,126570],{},"⑥选择某一区块:按住Shift+alt然后拖动鼠标",{"title":62,"searchDepth":143,"depth":143,"links":126572},[126573,126574,126575,126576,126577,126578,126579,126580,126581,126582],{"id":126451,"depth":143,"text":126452},{"id":126458,"depth":143,"text":126459},{"id":126472,"depth":143,"text":126473},{"id":126485,"depth":143,"text":126486},{"id":126502,"depth":143,"text":126503},{"id":126523,"depth":143,"text":126524},{"id":126530,"depth":143,"text":126531},{"id":126537,"depth":143,"text":126538},{"id":126544,"depth":143,"text":126545},{"id":126551,"depth":143,"text":126552},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch02-vscode",{"title":126443,"description":24093},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容","P9smz6dHOMWyfVooCL02EBMbE4RKCFhGZKfr19IQtY4",{"id":126589,"title":126590,"body":126591,"description":24093,"extension":787,"meta":126750,"navigation":176,"path":126751,"seo":126752,"stem":126753,"__hash__":126754},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签.md","3. HTML文本与容器标签",{"type":7,"value":126592,"toc":126742},[126593,126596,126600,126610,126616,126622,126626,126635,126639,126644,126647,126650,126654,126657,126667,126676,126685,126694,126704,126711,126716,126721,126734],[10,126594,126590],{"id":126595},"_3-html文本与容器标签",[803,126597,126599],{"id":126598},"_31-标题标签","3.1 标题标签",[19,126601,126602,126605,126606,126609],{},[64,126603,126604],{},"\u003Ch1>","我是一级标签",[64,126607,126608],{},"\u003C\u002Fh1>"," h为head的缩写，是头部、标题，作为标题使用，以此类推",[19,126611,126612,126605,126614],{},[64,126613,126604],{},[64,126615,126608],{},[19,126617,123872,126618,126621],{},[64,126619,126620],{},"\u003C\u002Fh>","后写的内容是不会在这一行就行展现的，他会在下一行来进行展现",[803,126623,126625],{"id":126624},"_32-段落标签","3.2 段落标签",[19,126627,126628,126631,126632],{},[64,126629,126630],{},"\u003Cp>","....",[64,126633,126634],{},"\u003C\u002Fp>",[803,126636,126638],{"id":126637},"_33-换行标签","3.3 换行标签",[19,126640,126641],{},[64,126642,126643],{},"\u003Cbr \u002F>",[19,126645,126646],{},"具有强制换行的作用",[19,126648,126649],{},"单标签",[803,126651,126653],{"id":126652},"_34-文本格式化标签","3.4 文本格式化标签",[19,126655,126656],{},"提供粗体、斜体和下划线等效果",[19,126658,126659,126660,83076,126663,126666],{},"加粗：",[64,126661,126662],{},"\u003Cstrong>...\u003C\u002Fstrong>",[64,126664,126665],{},"\u003Cb>.....\u003C\u002Fb>","，前者相对后者在语义上更强烈。",[19,126668,126669,126670,83076,126673,126666],{},"斜体：",[64,126671,126672],{},"\u003Cem>...\u003C\u002Fem>",[64,126674,126675],{},"\u003Ci>...\u003C\u002Fi>",[19,126677,126678,126679,83076,126682,126666],{},"删除线：",[64,126680,126681],{},"\u003Cdel>...\u003C\u002Fdel>",[64,126683,126684],{},"\u003Cs>...\u003C\u002Fs>",[19,126686,126687,126688,83076,126691,126666],{},"下划线：",[64,126689,126690],{},"\u003Cins>...\u003C\u002Fins>",[64,126692,126693],{},"\u003Cu>...\u003C\u002Fu>",[803,126695,126697,126698,19127,126701,103230],{"id":126696},"_35-div和span标签","3.5 ",[64,126699,126700],{},"\u003Cdiv>",[64,126702,126703],{},"\u003Cspan>",[19,126705,126706,101555,126708,126710],{},[64,126707,126700],{},[64,126709,126703],{}," 是没有语义的，它们就是一个盒子，用来装内容，是网页布局的基础。",[19,126712,126713],{},[64,126714,126715],{},"\u003Cdiv>这是头部\u003C\u002Fdiv>",[19,126717,126718],{},[64,126719,126720],{},"\u003Cspan>今日价格\u003C\u002Fspan>",[19,126722,126723,126724,126726,126727,126729,126730,126733],{},"两者特点：①",[64,126725,126700],{}," 标签用来布局，但一行通常只放一个 ",[64,126728,126700],{},"。可以理解为一个大盒子，独占一行，在 ",[64,126731,126732],{},"\u003C\u002Fdiv>"," 后再写内容会换到下一行显示。",[19,126735,77786,126736,126738,126739,126741],{},[64,126737,126703],{}," 标签也可用于布局，一行可以放多个 ",[64,126740,126703],{},"，可理解为小盒子。",{"title":62,"searchDepth":143,"depth":143,"links":126743},[126744,126745,126746,126747,126748],{"id":126598,"depth":143,"text":126599},{"id":126624,"depth":143,"text":126625},{"id":126637,"depth":143,"text":126638},{"id":126652,"depth":143,"text":126653},{"id":126696,"depth":143,"text":126749},"3.5 \u003Cdiv>和\u003Cspan>标签",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch03-html",{"title":126590,"description":24093},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签","wtuhs31JaNMAgjeyllTRtJ-HSKIZNuZi1VTfL57zQys",{"id":126756,"title":126757,"body":126758,"description":24093,"extension":787,"meta":126955,"navigation":176,"path":126956,"seo":126957,"stem":126958,"__hash__":126959},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接.md","4. HTML图像与链接",{"type":7,"value":126759,"toc":126947},[126760,126763,126767,126770,126776,126783,126789,126795,126798,126801,126804,126807,126810,126813,126816,126820,126823,126826,126829,126835,126841,126847,126854,126858,126864,126870,126873,126876,126882,126888,126894,126897,126900,126904,126907,126917,126923,126927,126936,126940,126943],[10,126761,126757],{"id":126762},"_4-html图像与链接",[803,126764,126766],{"id":126765},"_41-图像标签","4.1 图像标签",[19,126768,126769],{},"（1）标签",[19,126771,126772,126775],{},[64,126773,126774],{},"\u003Cimg src=\"图像URL\"\u002F>"," 单标签",[19,126777,126778,126779,126782],{},"src是",[64,126780,126781],{},"\u003Cimg>","标签的必须属性，他用于指定图像文件的路径和文件名，所属属性：简单理解为就是属于这个图像标签的特性",[19,126784,126785,126786],{},"alt:文本，替换文本。图像不能显示的文字 ",[64,126787,126788],{},"\u003Cimg src=\"11.png\" alt=\"1\" \u002F>",[19,126790,126791,126792],{},"title:文本，提示文本。鼠标放在图像上，显示的文字 ",[64,126793,126794],{},"\u003Cimg src=\"1.png\" alt=\"1\" title=\"预推免信息\" \u002F>",[19,126796,126797],{},"width:像素，设置图像的宽度",[19,126799,126800],{},"height:像素，设置图像的高度",[19,126802,126803],{},"border：像素，设置图像的边框粗细",[19,126805,126806],{},"（2）图像标签属性的注意点：",[19,126808,126809],{},"①图像标签可以拥有多个属性，必须写在标签名的后面",[19,126811,126812],{},"②属性前后不分前后顺序，标签名与属性、属性与属性之间均以空格分开",[19,126814,126815],{},"③属性采取键值对的格式，即key=“value”的格式，属性=“属性值”",[803,126817,126819],{"id":126818},"_42-路径注意要点","4.2 路径注意要点：",[19,126821,126822],{},"（1）目录文件夹：就是普通的文件夹，里边存放着我们做页面所需的相关材料，比如图片、CSS、JS、HTML等",[19,126824,126825],{},"（2）根目录：就是打开文件夹的第一层根目录",[19,126827,126828],{},"（3）相对路径：以引用文件所在位置为参考基础，而建立出的目录路径，简单来说就是图片相对于Html页面的位置",[19,126830,126831,126832],{},"①同一级路径：图像文件位于HTML文件同一级，如",[64,126833,126834],{},"\u003Cimg src=\"baidu.gif\"\u002F>",[19,126836,126837,126838],{},"②下一级路径：\u002F 图像位于HTML文件下一级，如",[64,126839,126840],{},"\u003Cimg src=\"images\u002Fbaidu.gif\"\u002F>",[19,126842,126843,126844],{},"③上一级路径： ..\u002F 图像位于HTML文件上一级，如",[64,126845,126846],{},"\u003Cimg src=\"..\u002F..\u002Fpublic\u002Fimages\u002Fbaidu.gif\"\u002F>",[19,126848,126849,126850,257],{},"（4）绝对路径：指目录下的绝对地址，直接到达目标位置，通常是从盘符开始的路径。例如：\"D:\\web\\img\\logo.gif\"或者完整的网络地址\"",[28,126851,126852],{"href":126852,"rel":126853},"http:\u002F\u002Fwww.itcast.cn\u002Fimages\u002Flogo.gif",[32],[803,126855,126857],{"id":126856},"_43-超链接标签","4.3 超链接标签",[19,126859,126860,126863],{},[64,126861,126862],{},"\u003Ca>","标签用于定义超链接，作用是从一个页面链接到另一个页面",[19,126865,126866,126867],{},"①语法格式：",[64,126868,126869],{},"\u003Ca herf=\"跳转目标\" target=\"目标窗口的弹出方式\">文本或图像\u003C\u002Fa>",[19,126871,126872],{},"②属性：href：用于指定链接目标的url地址，（必须属性）当标签应用herf属性时，它就具有了超链接的功能",[19,126874,126875],{},"target：用于指定链接页面的打开方式，其中_self为默认值，_blank为在新窗口的打开方式",[19,126877,126878,126879],{},"③链接分类：外部链接：",[64,126880,126881],{},"\u003Ca herf=\"http:\u002F\u002Fwww.baidu.com\">百度\u003C\u002Fa>",[19,126883,126884,126885],{},"内部链接：网站内部页面之间的相互链接，直接链接内部页面名称即可，例如",[64,126886,126887],{},"\u003Ca href=\"index.html\">\u003C\u002Fa>",[19,126889,126890,126891],{},"空链接：如果当时没有确定链接目标时，",[64,126892,126893],{},"\u003Ca href=\"#\">首页\u003C\u002Fa>",[19,126895,126896],{},"下载链接：如果href里面地址是一个文件或者压缩包，会下载这个文件",[19,126898,126899],{},"网页元素链接：在网页中的各种网页元素，如文本、图像、表格、音频、视频等都可添加超链接",[803,126901,126903],{"id":126902},"_44-锚点链接","4.4 锚点链接",[19,126905,126906],{},"点我们点击链接，可以快速定位到页面中的某个位置",[19,126908,126909,126910,126913,126914],{},"①在链接文本的href属性中，设置属性值为#名字的形式，如",[64,126911,126912],{},"\u003Ca href=\"#two\">","第二级",[64,126915,126916],{},"\u003C\u002Fa>",[19,126918,126919,126920],{},"②找到目标位置标签，里边添加一个 id 属性，如 ",[64,126921,126922],{},"\u003Ch3 id=\"two\">第二集\u003C\u002Fh3>",[803,126924,126926],{"id":126925},"_45-注释标签","4.5 注释标签",[19,126928,126929,126932,126933],{},[64,126930,126931],{},"\u003C!-- 注释内容 -->"," 快捷键为 ",[64,126934,126935],{},"ctrl+\u002F",[803,126937,126939],{"id":126938},"_46-特殊字符","4.6 特殊字符",[19,126941,126942],{},"可以实现添加多个空格",[725,126944],{"style":126945,"src":126946},"max-width:100%","\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-001.png",{"title":62,"searchDepth":143,"depth":143,"links":126948},[126949,126950,126951,126952,126953,126954],{"id":126765,"depth":143,"text":126766},{"id":126818,"depth":143,"text":126819},{"id":126856,"depth":143,"text":126857},{"id":126902,"depth":143,"text":126903},{"id":126925,"depth":143,"text":126926},{"id":126938,"depth":143,"text":126939},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch04-html",{"title":126757,"description":24093},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接","oVGVb72OKY9l9qkhNnjbDtFdhzjkOyiCgMJ-1MDqiDs",{"id":126961,"title":126962,"body":126963,"description":24093,"extension":787,"meta":127256,"navigation":176,"path":127257,"seo":127258,"stem":127259,"__hash__":127260},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单.md","5. HTML表格列表与表单",{"type":7,"value":126964,"toc":127247},[126965,126968,126972,126975,126978,126981,126984,126987,126990,126993,126996,126999,127019,127025,127029,127032,127035,127038,127041,127044,127047,127051,127054,127057,127060,127063,127076,127081,127084,127087,127102,127105,127108,127111,127114,127117,127121,127124,127131,127134,127137,127140,127143,127146,127152,127155,127158,127164,127167,127170,127173,127179,127182,127185,127199,127206,127209,127212,127219,127228,127231,127234,127237,127241,127244],[10,126966,126962],{"id":126967},"_5-html表格列表与表单",[803,126969,126971],{"id":126970},"_51-表格标签","5.1 表格标签",[19,126973,126974],{},"①表格的作用：表格主要是用于显示、展示数据，因为它可以使数据显示的非常的规整，可读性非常好。",[19,126976,126977],{},"特别是后台展示数据的时候，能够熟练运用表格就显得很重要。一个清爽简约的表格能够把繁杂的数据处理的很有条理。",[19,126979,126980],{},"②表格基本语法：",[725,126982],{"style":126945,"src":126983},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-002.png",[19,126985,126986],{},"③表头单元格标签：一般表头单元格位于第一行或者第一列，表头单元格里面的文本内容加粗居中显示",[725,126988],{"style":126945,"src":126989},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-003.png",[19,126991,126992],{},"④表格属性：表格属性实际在开发中不常用，基本都是用css来实现的",[725,126994],{"style":126945,"src":126995},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-004.png",[19,126997,126998],{},"⑤表格结构标签：解决表格过长问题，将表格分割成表格头部和表格主体",[19,127000,127001,127004,127005,127007,127008,127011,127012,127014,127015,127018],{},[64,127002,127003],{},"\u003Cthead>","标签表格的头部区域，用于定义表格的头部，",[64,127006,127003],{},"内部必须拥有",[64,127009,127010],{},"\u003Ctr>","标签，一般位于第一行，",[64,127013,127003],{},"比",[64,127016,127017],{},"\u003Cth>","范围广",[19,127020,127021,127024],{},[64,127022,127023],{},"\u003Ctbody>","标签表格的主体区域，用于定义表格的主体，用于放数据文本",[803,127026,127028],{"id":127027},"_52-合并单元格","5.2 合并单元格",[19,127030,127031],{},"（1）合并单元格方式：",[19,127033,127034],{},"①跨行合并：rowspan=\"合并单元格的个数\"",[19,127036,127037],{},"②跨列合并：colspan=\"合并单元格的个数\"",[19,127039,127040],{},"（2）目标单元格：",[19,127042,127043],{},"①跨行：最上侧单元格为目标单元格，写合并单元格",[19,127045,127046],{},"②跨列：最左侧单元格为目标单元格，写合并单元格",[803,127048,127050],{"id":127049},"_53-列表标签","5.3 列表标签",[19,127052,127053],{},"（1）分类：无序列表、有序列表、自定义列表",[19,127055,127056],{},"①无序列表：",[725,127058],{"style":126945,"src":127059},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-005.png",[19,127061,127062],{},"无序列表的各个列表项之间顺序级别之分，是并列的",[19,127064,127065,127068,127069,127072,127073,127075],{},[64,127066,127067],{},"\u003Cul>``\u003C\u002Ful>","中只能嵌套",[64,127070,127071],{},"\u003Cli>``\u003C\u002Fli>","，直接在",[64,127074,127067],{},"中输入其他标签或文字是不对的",[19,127077,127078,127080],{},[64,127079,127071],{},"之间相当于一个容器，可以容纳所有元素",[19,127082,127083],{},"无序列表会带有自己的样式属性，但实际还是用css来设置",[19,127085,127086],{},"在css中去除前边的小圆点采用如下代码:",[57,127088,127092],{"className":127089,"code":127090,"language":127091,"meta":62,"style":62},"language-Css shiki shiki-themes github-light github-dark","list-style: none;\n","Css",[64,127093,127094],{"__ignoreMap":62},[67,127095,127096,127099],{"class":69,"line":70},[67,127097,127098],{"class":51837},"list-style",[67,127100,127101],{"class":77},": none;\n",[19,127103,127104],{},"②有序列表：",[725,127106],{"style":126945,"src":127107},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-006.png",[19,127109,127110],{},"③自定义列表：",[725,127112],{"style":126945,"src":127113},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-007.png",[725,127115],{"style":126945,"src":127116},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-008.png",[803,127118,127120],{"id":127119},"_54-表单标签","5.4 表单标签",[19,127122,127123],{},"一个完整表单通常由表单域、表单控件（也称表单元素）和提示信息3个部分组成",[19,127125,127126,127127,127130],{},"（1）表单域：包含单元素的区域，",[64,127128,127129],{},"\u003Cform>","标签可以实现信息的收集和传递。",[725,127132],{"style":126945,"src":127133},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-009.png",[19,127135,127136],{},"autocomplete属性是历史记录，记录表单输入信息，有两个值，一个off，一个on，为true时过几天点击表单，获得焦点时会显示前几天输入的信息",[19,127138,127139],{},"表单元素提交必须有name属性",[19,127141,127142],{},"注意点：①写表单元素前，应该有表单域把他们进行包含；②表单域是form标签",[19,127144,127145],{},"(2)表单控件：可以定义各种表单元素，这些表单元素就是允许用户在表单中输入或选择的内容控件",[19,127147,77763,127148,127151],{},[64,127149,127150],{},"\u003Cinput>","输入表单元素",[725,127153],{"style":126945,"src":127154},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-010.png",[725,127156],{"style":126945,"src":127157},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-011.png",[19,127159,127160,127161],{},"单选按钮：",[64,127162,127163],{},"\u003Cinput type=\"radio\" name=\"danxuan\">",[725,127165],{"style":126945,"src":127166},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-012.png",[19,127168,127169],{},"写法差异源于不同版本的 HTML 或 XHTML 规范",[725,127171],{"style":126945,"src":127172},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-013.png",[19,127174,127175,127178],{},[336,127176,127177],{},"注意点"," ：name和value是每个表单元素都有的属性值，主要给后台人员使用；name表单元素的名字，要求单选按钮和复选按钮有相同的name值；checked属性主要针对于单选按钮和复选框，主要作用一打开页面，就要可以默认选中某个表单元素；maxlength是用户可以在表单输入的最大字符数",[19,127180,127181],{},"②select下拉表单元素：可以节约页面控件",[725,127183],{"style":126945,"src":127184},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-014.png",[19,127186,127187,614,127189,127192,127193,127195,127196,127198],{},[336,127188,893],{},[64,127190,127191],{},"\u003Cselect>","中至少包含一对",[64,127194,103251],{},"；在",[64,127197,103251],{},"中定义selected=\"selected\"时，当前项即为默认中选项",[19,127200,127201,127202,127205],{},"③",[64,127203,127204],{},"\u003Ctextarea>",":适用于输入内容较多的场景",[725,127207],{"style":126945,"src":127208},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-015.png",[19,127210,127211],{},"3行20列",[803,127213,127215,127216,103230],{"id":127214},"_55-lable标签","5.5 ",[64,127217,127218],{},"\u003Clable>",[19,127220,127221,127222,127224,127225,127227],{},"它不是表单标签，但常常与表单标签搭配使用，",[64,127223,127218],{},"标签用于绑定一个表单标签，当点击",[64,127226,127218],{},"标签内的文本",[19,127229,127230],{},"时，浏览器就会自动将焦点（光标）转到或者选择对应的表单元素上，以增加用户体验",[725,127232],{"style":126945,"src":127233},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-016.png",[725,127235],{"style":126945,"src":127236},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-017.png",[803,127238,127240],{"id":127239},"_56-实例","5.6 实例",[725,127242],{"style":126945,"src":127243},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-018.png",[779,127245,127246],{},"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":62,"searchDepth":143,"depth":143,"links":127248},[127249,127250,127251,127252,127253,127255],{"id":126970,"depth":143,"text":126971},{"id":127027,"depth":143,"text":127028},{"id":127049,"depth":143,"text":127050},{"id":127119,"depth":143,"text":127120},{"id":127214,"depth":143,"text":127254},"5.5 \u003Clable>标签",{"id":127239,"depth":143,"text":127240},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch05-html",{"title":126962,"description":24093},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单","Px1T0DDoabk2X89anH-m0Cv6Hve9q1VFyw7W5L-GpEw",{"id":127262,"title":127263,"body":127264,"description":24093,"extension":787,"meta":127813,"navigation":176,"path":127814,"seo":127815,"stem":127816,"__hash__":127817},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式.md","6. CSS语法与文本样式",{"type":7,"value":127265,"toc":127788},[127266,127269,127273,127276,127279,127283,127286,127289,127292,127295,127298,127301,127304,127308,127311,127315,127318,127321,127324,127328,127331,127334,127337,127343,127346,127349,127352,127355,127358,127361,127364,127397,127401,127404,127407,127410,127414,127417,127420,127423,127426,127429,127433,127436,127439,127442,127446,127449,127453,127456,127460,127463,127468,127472,127475,127479,127482,127485,127488,127491,127518,127521,127525,127528,127531,127536,127539,127542,127546,127549,127554,127557,127560,127563,127567,127570,127573,127576,127580,127583,127586,127589,127593,127597,127600,127640,127643,127647,127654,127657,127661,127664,127710,127714,127717,127720,127723,127751,127755,127758,127785],[10,127267,127263],{"id":127268},"_6-css语法与文本样式",[803,127270,127272],{"id":127271},"_61-css语法规范","6.1 css语法规范",[19,127274,127275],{},"由两部分组成，选择器及一条或多条声明",[725,127277],{"style":126945,"src":127278},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-019.png",[19,127280,127281],{},[336,127282,893],{},[19,127284,127285],{},"①选择器是用于指定css样式的HTML标签，花括号是对该对象设置的具体样式",[19,127287,127288],{},"②属性与属性值以“键值对”的形式出现",[19,127290,127291],{},"③属性是对指定的对象设置的样式属性，例如字体大小、文本颜色等",[19,127293,127294],{},"④属性和属性值之间用英文“;”分开",[725,127296],{"style":126945,"src":127297},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-020.png",[725,127299],{"style":126945,"src":127300},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-021.png",[725,127302],{"style":126945,"src":127303},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-022.png",[803,127305,127307],{"id":127306},"_62-css选择器","6.2 css选择器",[19,127309,127310],{},"可以分为基础选择器和复合选择器：①基础选择器由单个选择器组成；②基础选择器包括：标签选择器、类选择器、id选择器和通配符选择器",[14,127312,127314],{"id":127313},"_621-标签选择器","6.2.1 标签选择器",[19,127316,127317],{},"①优点：能快速为页面中同类型的标签统一设置样式",[19,127319,127320],{},"②缺点：不能设计差异化样式，只能选择全部的当前标签",[725,127322],{"style":126945,"src":127323},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-023.png",[14,127325,127327],{"id":127326},"_622-类选择器","6.2.2 类选择器",[19,127329,127330],{},"①类选择器口诀：样式点定义 结构类（class）调用 一个或多个 开发最常用",[19,127332,127333],{},"②样例",[725,127335],{"style":126945,"src":127336},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-024.png",[19,127338,127339,127340,127342],{},"③ ",[336,127341,127177],{}," ：类选择器用\".\"进行标识，后面紧跟类名（自己命名的）；",[19,127344,127345],{},"可以理解为给这个标签起了个名字，来表示；",[19,127347,127348],{},"长名称或词组可以使用横线来为选择器命名；",[19,127350,127351],{},"不要使用纯数字、中文等命名，尽量使用英文字母来表示；",[19,127353,127354],{},"命名要有意义；",[725,127356],{"style":126945,"src":127357},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-025.png",[19,127359,127360],{},"类选择器也可以指定特殊的元素p.center{}",[19,127362,127363],{},"p.center和.center都对",[57,127365,127367],{"className":127089,"code":127366,"language":127091,"meta":62,"style":62},"\u002F* 类选择器指定特殊元素 *\u002F\np.center {\n  text-align: center;\n}\n",[64,127368,127369,127374,127383,127393],{"__ignoreMap":62},[67,127370,127371],{"class":69,"line":70},[67,127372,127373],{"class":202},"\u002F* 类选择器指定特殊元素 *\u002F\n",[67,127375,127376,127378,127381],{"class":69,"line":143},[67,127377,19],{"class":51837},[67,127379,127380],{"class":112},".center",[67,127382,16289],{"class":77},[67,127384,127385,127387,127389,127391],{"class":69,"line":149},[67,127386,71063],{"class":208},[67,127388,51974],{"class":77},[67,127390,52129],{"class":208},[67,127392,2017],{"class":77},[67,127394,127395],{"class":69,"line":155},[67,127396,2288],{"class":77},[14,127398,127400],{"id":127399},"_623-多类名使用","6.2.3 多类名使用",[19,127402,127403],{},"①使用方式：在标签class属性中写多个类名；多个类名中间必须用空格分开；这个标签就可以分别具有这些类名的样式",[725,127405],{"style":126945,"src":127406},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-026.png",[19,127408,127409],{},"②多类名开发使用场景：可以把一些标签元素相同的样式（共同的部分）放到一个类里面；这些标签都可以调用这个公共的类，然后再调用自己独有的类；可以节省CSS代码，统一修改也非常方便；开发中要多使用",[14,127411,127413],{"id":127412},"_624-id选择器","6.2.4 id选择器",[19,127415,127416],{},"id选择器可以为标有特定id的HTML元素指定特定的样式",[19,127418,127419],{},"HTML元素以id属性来设置id选择器，css中id选择器以\"#\"来定义",[725,127421],{"style":126945,"src":127422},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-027.png",[19,127424,127425],{},"①口诀：样式#定义，结构id调用，只能给一个标签调用，别人切勿使用",[19,127427,127428],{},"②区别：类选择器可以调用多次；id选择器不能重复调用；类选择器在修改样式中用的最多，id选择器一般用于页面唯一性的元素上，经常和js搭配使用",[14,127430,127432],{"id":127431},"_625-通配符选择器","6.2.5 通配符选择器",[19,127434,127435],{},"定义用\"*\"，他表示选取页面中所有元素（标签）",[19,127437,127438],{},"* {",[19,127440,127441],{},"color=\"red\"}",[14,127443,127445],{"id":127444},"_626-总结","6.2.6 总结",[725,127447],{"style":126945,"src":127448},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-028.png",[803,127450,127452],{"id":127451},"_63-css字体属性","6.3 css字体属性",[19,127454,127455],{},"Fonts字体用于定义字体系列、大小、粗细、和文字样式（如斜体）",[14,127457,127459],{"id":127458},"_631-字体系列","6.3.1 字体系列",[19,127461,127462],{},"font-family: '宋体';",[19,127464,127465,127467],{},[336,127466,893],{}," 各种字体之间必须使用英文状态下的逗号隔开；一般情况，如果有空格隔开的多个单词组成的字体，加引号；尽量使用系统默认自带的字体，保证任何用户浏览器中都能正确使用",[14,127469,127471],{"id":127470},"_632-字体大小","6.3.2 字体大小",[19,127473,127474],{},"font-size: 20px",[19,127476,127477,537],{},[336,127478,127177],{},[19,127480,127481],{},"①px（像素）大小是网页的最常用单位",[19,127483,127484],{},"②谷歌浏览器默认为16px",[19,127486,127487],{},"③不同浏览器默认显示的字号大小不一致，尽量给定明确值，不要默认",[19,127489,127490],{},"④可以给body指定整个页面的大小：会自动引用",[57,127492,127494],{"className":127089,"code":127493,"language":127091,"meta":62,"style":62},"body {\n  font-size: 16px;\n}\n",[64,127495,127496,127502,127514],{"__ignoreMap":62},[67,127497,127498,127500],{"class":69,"line":70},[67,127499,52337],{"class":51837},[67,127501,16289],{"class":77},[67,127503,127504,127506,127508,127510,127512],{"class":69,"line":143},[67,127505,71163],{"class":208},[67,127507,51974],{"class":77},[67,127509,1457],{"class":208},[67,127511,52029],{"class":73},[67,127513,2017],{"class":77},[67,127515,127516],{"class":69,"line":149},[67,127517,2288],{"class":77},[19,127519,127520],{},"⑤标题标签比较特殊，需要单独指定大小",[14,127522,127524],{"id":127523},"_633-字体粗细","6.3.3 字体粗细",[19,127526,127527],{},"font-weight: bold;",[19,127529,127530],{},"font-weight: 100；",[19,127532,127533,127535],{},[336,127534,893],{}," ①粗体文字变细：尽量别用normal，多用数字",[19,127537,127538],{},"font-weight= 400;",[19,127540,127541],{},"②属性值100-700，400等同于normal，而700等同于bold，后面不需要跟单位",[14,127543,127545],{"id":127544},"_634-文字样式","6.3.4 文字样式",[19,127547,127548],{},"font-style: normal；",[19,127550,127551,537],{},[336,127552,127553],{},"属性值",[19,127555,127556],{},"①normal：默认值，浏览器会显示标准的字体样式 font-style：normal；",[19,127558,127559],{},"②italic：浏览器会显示斜体的字体样式",[725,127561],{"style":126945,"src":127562},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-029.png",[14,127564,127566],{"id":127565},"_635-字体符合属性","6.3.5 字体符合属性",[725,127568],{"style":126945,"src":127569},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-030.png",[725,127571],{"style":126945,"src":127572},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-031.png",[19,127574,127575],{},"以上都对√，第一个用的是类选择器，第二个用的是标签选择器",[19,127577,127578,537],{},[336,127579,127177],{},[19,127581,127582],{},"①样式font-style 粗细font-weight 大小\u002F行高font-size\u002Fline-height 字体font-family",[19,127584,127585],{},"②使用font属性时，必须按照语法格式书写，不能更换顺序，并且各个属性以空格隔开",[19,127587,127588],{},"③不需要设置大的属性可以省略（取默认值），但必须保留font-size和font-family属性，否则font属性将不起作用",[803,127590,127592],{"id":127591},"_64-css-test文本属性","6.4 css test文本属性",[14,127594,127596],{"id":127595},"_641-文本颜色","6.4.1 文本颜色",[19,127598,127599],{},"定义文本的外观，比如文本的颜色、对齐文本、装饰文本、文本缩进、行间距等",[57,127601,127603],{"className":127089,"code":127602,"language":127091,"meta":62,"style":62},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\np {\n  color: red;\n  \u002F* color: #ff0000; *\u002F\n  \u002F* color: rgb(255, 0, 0); *\u002F\n}\n",[64,127604,127605,127610,127616,127626,127631,127636],{"__ignoreMap":62},[67,127606,127607],{"class":69,"line":70},[67,127608,127609],{"class":202},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\n",[67,127611,127612,127614],{"class":69,"line":143},[67,127613,19],{"class":51837},[67,127615,16289],{"class":77},[67,127617,127618,127620,127622,127624],{"class":69,"line":149},[67,127619,71442],{"class":208},[67,127621,51974],{"class":77},[67,127623,57958],{"class":208},[67,127625,2017],{"class":77},[67,127627,127628],{"class":69,"line":155},[67,127629,127630],{"class":202},"  \u002F* color: #ff0000; *\u002F\n",[67,127632,127633],{"class":69,"line":161},[67,127634,127635],{"class":202},"  \u002F* color: rgb(255, 0, 0); *\u002F\n",[67,127637,127638],{"class":69,"line":167},[67,127639,2288],{"class":77},[725,127641],{"style":126945,"src":127642},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-032.png",[14,127644,127646],{"id":127645},"_642-对齐文本","6.4.2 对齐文本",[19,127648,127649,127650,127653],{},"text-align属于用于设置元素内文本内容的 ",[336,127651,127652],{},"水平对齐"," 方式",[19,127655,127656],{},"属性值：left：左对齐（默认值）；right：右对齐；center：居中对齐",[14,127658,127660],{"id":127659},"_643-装饰文本","6.4.3 装饰文本",[19,127662,127663],{},"text-decoration属性规定添加到文本的修饰，可以给文本添加下划线、删除线、上划线等",[57,127665,127667],{"className":127089,"code":127666,"language":127091,"meta":62,"style":62},"a {\n  text-decoration: none;\n}\np {\n  text-decoration: underline;\n}\n",[64,127668,127669,127675,127685,127689,127695,127706],{"__ignoreMap":62},[67,127670,127671,127673],{"class":69,"line":70},[67,127672,28],{"class":51837},[67,127674,16289],{"class":77},[67,127676,127677,127679,127681,127683],{"class":69,"line":143},[67,127678,71039],{"class":208},[67,127680,51974],{"class":77},[67,127682,55274],{"class":208},[67,127684,2017],{"class":77},[67,127686,127687],{"class":69,"line":149},[67,127688,2288],{"class":77},[67,127690,127691,127693],{"class":69,"line":155},[67,127692,19],{"class":51837},[67,127694,16289],{"class":77},[67,127696,127697,127699,127701,127704],{"class":69,"line":161},[67,127698,71039],{"class":208},[67,127700,51974],{"class":77},[67,127702,127703],{"class":208},"underline",[67,127705,2017],{"class":77},[67,127707,127708],{"class":69,"line":167},[67,127709,2288],{"class":77},[14,127711,127713],{"id":127712},"_644-文本缩进","6.4.4 文本缩进",[19,127715,127716],{},"实现文本的第一行首行缩进自己指定的距离",[19,127718,127719],{},"20px往右边走；-20px往左边走",[19,127721,127722],{},"em是一个相对单位，就是当前元素（font-size）1个文字的大小，如果当前元素没有设置大小，则会按照父元素的1个文字大小，如果此时写了2em则是当前元素2个文字大小的距离",[57,127724,127726],{"className":127089,"code":127725,"language":127091,"meta":62,"style":62},"p {\n  text-indent: 2em;\n}\n",[64,127727,127728,127734,127747],{"__ignoreMap":62},[67,127729,127730,127732],{"class":69,"line":70},[67,127731,19],{"class":51837},[67,127733,16289],{"class":77},[67,127735,127736,127739,127741,127743,127745],{"class":69,"line":143},[67,127737,127738],{"class":208},"  text-indent",[67,127740,51974],{"class":77},[67,127742,939],{"class":208},[67,127744,24270],{"class":73},[67,127746,2017],{"class":77},[67,127748,127749],{"class":69,"line":149},[67,127750,2288],{"class":77},[14,127752,127754],{"id":127753},"_645-行间距","6.4.5 行间距",[19,127756,127757],{},"行间距可以理解为由上间距、下间距和文字高度组成，实际代码改变的是上下间距的大小实现行间距改变的",[57,127759,127761],{"className":127089,"code":127760,"language":127091,"meta":62,"style":62},"p {\n  line-height: 1.6;\n}\n",[64,127762,127763,127769,127781],{"__ignoreMap":62},[67,127764,127765,127767],{"class":69,"line":70},[67,127766,19],{"class":51837},[67,127768,16289],{"class":77},[67,127770,127771,127774,127776,127779],{"class":69,"line":143},[67,127772,127773],{"class":208},"  line-height",[67,127775,51974],{"class":77},[67,127777,127778],{"class":208},"1.6",[67,127780,2017],{"class":77},[67,127782,127783],{"class":69,"line":149},[67,127784,2288],{"class":77},[779,127786,127787],{},"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":62,"searchDepth":143,"depth":143,"links":127789},[127790,127791,127799,127806],{"id":127271,"depth":143,"text":127272},{"id":127306,"depth":143,"text":127307,"children":127792},[127793,127794,127795,127796,127797,127798],{"id":127313,"depth":149,"text":127314},{"id":127326,"depth":149,"text":127327},{"id":127399,"depth":149,"text":127400},{"id":127412,"depth":149,"text":127413},{"id":127431,"depth":149,"text":127432},{"id":127444,"depth":149,"text":127445},{"id":127451,"depth":143,"text":127452,"children":127800},[127801,127802,127803,127804,127805],{"id":127458,"depth":149,"text":127459},{"id":127470,"depth":149,"text":127471},{"id":127523,"depth":149,"text":127524},{"id":127544,"depth":149,"text":127545},{"id":127565,"depth":149,"text":127566},{"id":127591,"depth":143,"text":127592,"children":127807},[127808,127809,127810,127811,127812],{"id":127595,"depth":149,"text":127596},{"id":127645,"depth":149,"text":127646},{"id":127659,"depth":149,"text":127660},{"id":127712,"depth":149,"text":127713},{"id":127753,"depth":149,"text":127754},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch06-css",{"title":127263,"description":24093},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式","edNbSUYKLIJ_C-TlXm4kGf1NOqNSGo0jc2I9MN2stKg",{"id":127819,"title":127820,"body":127821,"description":24093,"extension":787,"meta":128470,"navigation":176,"path":128471,"seo":128472,"stem":128473,"__hash__":128474},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶.md","7. CSS引入方式与选择器进阶",{"type":7,"value":127822,"toc":128451},[127823,127826,127830,127834,127894,127898,127908,127911,127914,127918,127943,127947,127950,127953,127956,127959,127962,127966,127969,127972,128014,128017,128043,128049,128052,128056,128060,128066,128069,128072,128075,128078,128081,128084,128129,128133,128136,128139,128143,128147,128176,128179,128184,128187,128190,128193,128196,128200,128204,128207,128209,128212,128216,128219,128223,128226,128229,128232,128236,128240,128246,128256,128259,128262,128265,128268,128271,128394,128402,128410,128448],[10,127824,127820],{"id":127825},"_7-css引入方式与选择器进阶",[803,127827,127829],{"id":127828},"_71-css引入方式","7.1 css引入方式",[14,127831,127833],{"id":127832},"_711-内部样式表嵌入式","7.1.1 内部样式表（嵌入式）",[57,127835,127839],{"className":127836,"code":127837,"language":127838,"meta":62,"style":62},"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",[64,127840,127841,127849,127856,127868,127881,127886],{"__ignoreMap":62},[67,127842,127843,127845,127847],{"class":69,"line":70},[67,127844,1766],{"class":77},[67,127846,779],{"class":51837},[67,127848,51844],{"class":77},[67,127850,127851,127854],{"class":69,"line":143},[67,127852,127853],{"class":51837},"  h1",[67,127855,16289],{"class":77},[67,127857,127858,127861,127863,127866],{"class":69,"line":149},[67,127859,127860],{"class":208},"    color",[67,127862,51974],{"class":77},[67,127864,127865],{"class":208},"blue",[67,127867,2017],{"class":77},[67,127869,127870,127873,127875,127877,127879],{"class":69,"line":155},[67,127871,127872],{"class":208},"    font-size",[67,127874,51974],{"class":77},[67,127876,1656],{"class":208},[67,127878,52029],{"class":73},[67,127880,2017],{"class":77},[67,127882,127883],{"class":69,"line":161},[67,127884,127885],{"class":77},"  }\n",[67,127887,127888,127890,127892],{"class":69,"line":167},[67,127889,52322],{"class":77},[67,127891,779],{"class":51837},[67,127893,51844],{"class":77},[19,127895,127896,537],{},[336,127897,127177],{},[19,127899,77763,127900,127903,127904,127907],{},[64,127901,127902],{},"\u003Cstyle>","理论上可以放在HTML文档的任意位置，但一般会放在",[64,127905,127906],{},"\u003Chead>","标签中",[19,127909,127910],{},"②通过这种方式可以方便控制整个页面的元素样式设置",[19,127912,127913],{},"③代码结构清晰，但是并没有实现结构与样式的完全分离",[14,127915,127917],{"id":127916},"_712-行内样式表行内式","7.1.2 行内样式表（行内式）",[57,127919,127921],{"className":127836,"code":127920,"language":127838,"meta":62,"style":62},"\u003Cp style=\"color: red; font-size: 16px;\">这是一个段落\u003C\u002Fp>\n",[64,127922,127923],{"__ignoreMap":62},[67,127924,127925,127927,127929,127931,127933,127936,127939,127941],{"class":69,"line":70},[67,127926,1766],{"class":77},[67,127928,19],{"class":51837},[67,127930,63163],{"class":112},[67,127932,909],{"class":77},[67,127934,127935],{"class":84},"\"color: red; font-size: 16px;\"",[67,127937,127938],{"class":77},">这是一个段落\u003C\u002F",[67,127940,19],{"class":51837},[67,127942,51844],{"class":77},[19,127944,127945,537],{},[336,127946,127177],{},[19,127948,127949],{},"①style其实就是标签的属性",[19,127951,127952],{},"②在双引号中间，写法要符合css规范",[19,127954,127955],{},"③可以控制当前的标签设置样式",[19,127957,127958],{},"④书写繁琐，简单时才用",[19,127960,127961],{},"⑤使用行内样式表设定css，通常也被称为行内式引入",[14,127963,127965],{"id":127964},"_713-外部样式表链接式","7.1.3 外部样式表（链接式）",[19,127967,127968],{},"使用最多，单独建一个css文件，然后html引用",[19,127970,127971],{},"①css文件部分： style.css",[57,127973,127975],{"className":127089,"code":127974,"language":127091,"meta":62,"style":62},"\u002F* style.css *\u002F\nh1 {\n  color: blue;\n  font-size: 24px;\n}\n",[64,127976,127977,127982,127988,127998,128010],{"__ignoreMap":62},[67,127978,127979],{"class":69,"line":70},[67,127980,127981],{"class":202},"\u002F* style.css *\u002F\n",[67,127983,127984,127986],{"class":69,"line":143},[67,127985,10],{"class":51837},[67,127987,16289],{"class":77},[67,127989,127990,127992,127994,127996],{"class":69,"line":149},[67,127991,71442],{"class":208},[67,127993,51974],{"class":77},[67,127995,127865],{"class":208},[67,127997,2017],{"class":77},[67,127999,128000,128002,128004,128006,128008],{"class":69,"line":155},[67,128001,71163],{"class":208},[67,128003,51974],{"class":77},[67,128005,1656],{"class":208},[67,128007,52029],{"class":73},[67,128009,2017],{"class":77},[67,128011,128012],{"class":69,"line":161},[67,128013,2288],{"class":77},[19,128015,128016],{},"②html部分",[57,128018,128020],{"className":127836,"code":128019,"language":127838,"meta":62,"style":62},"\u003Clink rel=\"stylesheet\" href=\"style.css\">\n",[64,128021,128022],{"__ignoreMap":62},[67,128023,128024,128026,128028,128030,128032,128034,128036,128038,128041],{"class":69,"line":70},[67,128025,1766],{"class":77},[67,128027,69542],{"class":51837},[67,128029,69545],{"class":112},[67,128031,909],{"class":77},[67,128033,69550],{"class":84},[67,128035,61594],{"class":112},[67,128037,909],{"class":77},[67,128039,128040],{"class":84},"\"style.css\"",[67,128042,51844],{"class":77},[19,128044,128045,128048],{},[64,128046,128047],{},"\u003Chr>","水平线标签（但是不常用！）",[19,128050,128051],{},"ctrl+0回到页面原来大小",[803,128053,128055],{"id":128054},"_72-emmet语法-可以实现快速生成html结构语法和快速生成css样式语法","7.2 Emmet语法 可以实现快速生成HTML结构语法和快速生成CSS样式语法",[14,128057,128059],{"id":128058},"_721-快速生成html","7.2.1 快速生成html",[19,128061,128062,128063],{},"①生成标签直接输入标签名按tab键即可比如div然后tab键，就可以生成",[64,128064,128065],{},"\u003Cdiv>``\u003C\u002Fdiv>",[19,128067,128068],{},"②如果想要生成多个相同标签加上*就可以了比如div*3就可以快速生成3个div",[19,128070,128071],{},"③如果有父子级关系的标签，可以用>比如ul>li就可以了",[19,128073,128074],{},"④如果有兄弟关系的标签，用+就可以了比如div+p",[19,128076,128077],{},"⑤如果生成带有类名或者id名字的，直接写.demo或者#twotab键就可以了",[19,128079,128080],{},"⑥如果生成的div类名是有顺序的，可以用自增符号$",[19,128082,128083],{},"⑦如果想要在生成的标签内部写内容可以用{}表示",[57,128085,128087],{"className":127836,"code":128086,"language":127838,"meta":62,"style":62},"\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",[64,128088,128089,128094,128099,128104,128109,128114,128119,128124],{"__ignoreMap":62},[67,128090,128091],{"class":69,"line":70},[67,128092,128093],{"class":202},"\u003C!-- Emmet 语法示例 -->\n",[67,128095,128096],{"class":69,"line":143},[67,128097,128098],{"class":202},"\u003C!-- div*3        → 生成3个div -->\n",[67,128100,128101],{"class":69,"line":149},[67,128102,128103],{"class":202},"\u003C!-- ul>li*5      → ul下生成5个li -->\n",[67,128105,128106],{"class":69,"line":155},[67,128107,128108],{"class":202},"\u003C!-- div+p        → 兄弟div和p -->\n",[67,128110,128111],{"class":69,"line":161},[67,128112,128113],{"class":202},"\u003C!-- .demo        → \u003Cdiv class=\"demo\">\u003C\u002Fdiv> -->\n",[67,128115,128116],{"class":69,"line":167},[67,128117,128118],{"class":202},"\u003C!-- #two         → \u003Cdiv id=\"two\">\u003C\u002Fdiv> -->\n",[67,128120,128121],{"class":69,"line":173},[67,128122,128123],{"class":202},"\u003C!-- .demo$*3     → demo1, demo2, demo3 -->\n",[67,128125,128126],{"class":69,"line":180},[67,128127,128128],{"class":202},"\u003C!-- div{内容}     → \u003Cdiv>内容\u003C\u002Fdiv> -->\n",[14,128130,128132],{"id":128131},"_722-快速生成css","7.2.2 快速生成css",[19,128134,128135],{},"简写开头",[19,128137,128138],{},"①比如w200按tab可以生成width:200px; ②比如lh26px按tab可以生成line-height:26px;",[803,128140,128142],{"id":128141},"_73-css复合选择器","7.3 css复合选择器",[14,128144,128146],{"id":128145},"_731-后代选择器","7.3.1 后代选择器",[57,128148,128150],{"className":127089,"code":128149,"language":127091,"meta":62,"style":62},".parent .child {\n  color: blue;\n}\n",[64,128151,128152,128162,128172],{"__ignoreMap":62},[67,128153,128154,128157,128160],{"class":69,"line":70},[67,128155,128156],{"class":112},".parent",[67,128158,128159],{"class":112}," .child",[67,128161,16289],{"class":77},[67,128163,128164,128166,128168,128170],{"class":69,"line":143},[67,128165,71442],{"class":208},[67,128167,51974],{"class":77},[67,128169,127865],{"class":208},[67,128171,2017],{"class":77},[67,128173,128174],{"class":69,"line":149},[67,128175,2288],{"class":77},[19,128177,128178],{},"元素1 元素2 {样式声明}",[19,128180,128181],{},[336,128182,128183],{},"注意点:",[19,128185,128186],{},"①元素1和元素2中间用空格隔开",[19,128188,128189],{},"②元素1是父级，元素2是子级，最终选择的是元素2",[19,128191,128192],{},"③元素2可以是儿子，也可以是孙子等，只要是元素1的后代即可",[19,128194,128195],{},"④元素1和元素2可以是任意基础选择器",[14,128197,128199],{"id":128198},"_732-子选择器-元素1-元素2-样式声明","7.3.2 子选择器 元素1 > 元素2 {样式声明}",[19,128201,128202],{},[336,128203,128183],{},[19,128205,128206],{},"①元素1和元素2中间用大于号隔开",[19,128208,128189],{},[19,128210,128211],{},"③元素2必须是亲儿子，其孙子、重孙之类都不归他管.你也可以叫他亲儿子选择器",[14,128213,128215],{"id":128214},"_733-并集选择器","7.3.3 并集选择器",[19,128217,128218],{},"元素1，元素2 {样式声明}",[19,128220,128221],{},[336,128222,128183],{},[19,128224,128225],{},"①元素1和元素2中间用逗号隔开",[19,128227,128228],{},"②逗号可以理解为和的意思",[19,128230,128231],{},"③并集选择器通常用于集体声明",[14,128233,128235],{"id":128234},"_734-链接伪类选择器","7.3.4 链接伪类选择器",[19,128237,128238],{},[336,128239,128183],{},[19,128241,128242,128243,128245],{},"①为了确保生效，请按照 LVHA 的循顺序声明 ",[69542,128244],{},"－:visited－:hover－:active。",[19,128247,128248,128249,128252,128253,26449],{},"②伪类选择器书写最大的特点是用冒号（:）表示，比如 ",[128250,128251],"hover",{}," 、 ",[128254,128255],"first-child",{},[19,128257,128258],{},"③ 因为 a 链接在浏览器中具有默认样式，所以我们实际工作中都需要给链接单独指定样式",[19,128260,128261],{},"link对没访问的进行设置",[19,128263,128264],{},"vistied对已访问的进行改变",[19,128266,128267],{},"hover鼠标经过就会变",[19,128269,128270],{},"active常按(点)就会变",[57,128272,128274],{"className":127089,"code":128273,"language":127091,"meta":62,"style":62},"\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",[64,128275,128276,128281,128290,128300,128310,128314,128323,128334,128338,128346,128356,128366,128370,128379,128390],{"__ignoreMap":62},[67,128277,128278],{"class":69,"line":70},[67,128279,128280],{"class":202},"\u002F* 链接伪类选择器 —— 按 LVHA 顺序 *\u002F\n",[67,128282,128283,128285,128288],{"class":69,"line":143},[67,128284,28],{"class":51837},[67,128286,128287],{"class":112},":link",[67,128289,16289],{"class":77},[67,128291,128292,128294,128296,128298],{"class":69,"line":149},[67,128293,71442],{"class":208},[67,128295,51974],{"class":77},[67,128297,62906],{"class":208},[67,128299,2017],{"class":77},[67,128301,128302,128304,128306,128308],{"class":69,"line":155},[67,128303,71039],{"class":208},[67,128305,51974],{"class":77},[67,128307,55274],{"class":208},[67,128309,2017],{"class":77},[67,128311,128312],{"class":69,"line":161},[67,128313,2288],{"class":77},[67,128315,128316,128318,128321],{"class":69,"line":167},[67,128317,28],{"class":51837},[67,128319,128320],{"class":112},":visited",[67,128322,16289],{"class":77},[67,128324,128325,128327,128329,128332],{"class":69,"line":173},[67,128326,71442],{"class":208},[67,128328,51974],{"class":77},[67,128330,128331],{"class":208},"purple",[67,128333,2017],{"class":77},[67,128335,128336],{"class":69,"line":180},[67,128337,2288],{"class":77},[67,128339,128340,128342,128344],{"class":69,"line":186},[67,128341,28],{"class":51837},[67,128343,61477],{"class":112},[67,128345,16289],{"class":77},[67,128347,128348,128350,128352,128354],{"class":69,"line":444},[67,128349,71442],{"class":208},[67,128351,51974],{"class":77},[67,128353,55426],{"class":208},[67,128355,2017],{"class":77},[67,128357,128358,128360,128362,128364],{"class":69,"line":2335},[67,128359,71039],{"class":208},[67,128361,51974],{"class":77},[67,128363,127703],{"class":208},[67,128365,2017],{"class":77},[67,128367,128368],{"class":69,"line":2340},[67,128369,2288],{"class":77},[67,128371,128372,128374,128377],{"class":69,"line":2346},[67,128373,28],{"class":51837},[67,128375,128376],{"class":112},":active",[67,128378,16289],{"class":77},[67,128380,128381,128383,128385,128388],{"class":69,"line":2351},[67,128382,71442],{"class":208},[67,128384,51974],{"class":77},[67,128386,128387],{"class":208},"green",[67,128389,2017],{"class":77},[67,128391,128392],{"class":69,"line":2365},[67,128393,2288],{"class":77},[14,128395,128397,128398,128401],{"id":128396},"_735-伪类选择器","7.3.5 ",[128399,128400],"focus",{},"伪类选择器",[19,128403,128404,128406,128407,128409],{},[128399,128405],{}," 伪类选择器用于选取获得焦点的表单元素。 焦点就是光标，一般情况 ",[64,128408,127150],{}," 类表单元素才能获取，因此这个选择器也主要针对于表单元素来说。",[57,128411,128413],{"className":127089,"code":128412,"language":127091,"meta":62,"style":62},"input:focus {\n  border-color: skyblue;\n  outline: none;\n}\n",[64,128414,128415,128423,128434,128444],{"__ignoreMap":62},[67,128416,128417,128419,128421],{"class":69,"line":70},[67,128418,54358],{"class":51837},[67,128420,62437],{"class":112},[67,128422,16289],{"class":77},[67,128424,128425,128428,128430,128432],{"class":69,"line":143},[67,128426,128427],{"class":208},"  border-color",[67,128429,51974],{"class":77},[67,128431,55426],{"class":208},[67,128433,2017],{"class":77},[67,128435,128436,128438,128440,128442],{"class":69,"line":149},[67,128437,71335],{"class":208},[67,128439,51974],{"class":77},[67,128441,55274],{"class":208},[67,128443,2017],{"class":77},[67,128445,128446],{"class":69,"line":155},[67,128447,2288],{"class":77},[779,128449,128450],{},"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":62,"searchDepth":143,"depth":143,"links":128452},[128453,128458,128462],{"id":127828,"depth":143,"text":127829,"children":128454},[128455,128456,128457],{"id":127832,"depth":149,"text":127833},{"id":127916,"depth":149,"text":127917},{"id":127964,"depth":149,"text":127965},{"id":128054,"depth":143,"text":128055,"children":128459},[128460,128461],{"id":128058,"depth":149,"text":128059},{"id":128131,"depth":149,"text":128132},{"id":128141,"depth":143,"text":128142,"children":128463},[128464,128465,128466,128467,128468],{"id":128145,"depth":149,"text":128146},{"id":128198,"depth":149,"text":128199},{"id":128214,"depth":149,"text":128215},{"id":128234,"depth":149,"text":128235},{"id":128396,"depth":149,"text":128469},"7.3.5 伪类选择器",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch07-css",{"title":127820,"description":24093},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶","5XV5_YAJT4dZrDp1IubvvQckZ5rLDX2qDFIIitfWb20",{"id":128476,"title":128477,"body":128478,"description":24093,"extension":787,"meta":130401,"navigation":176,"path":130402,"seo":130403,"stem":130404,"__hash__":130405},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性.md","8. CSS显示模式与背景特性",{"type":7,"value":128479,"toc":130375},[128480,128483,128487,128496,128500,128526,128531,128534,128537,128540,128543,128547,128550,128560,128568,128572,128607,128612,128615,128618,128621,128624,128628,128631,128640,128644,128657,128662,128665,128668,128671,128675,128678,128682,128685,128740,128743,128774,128777,128831,128835,128838,129004,129127,129130,129133,129136,129139,129143,129146,129150,129153,129156,129160,129163,129194,129221,129249,129252,129256,129282,129325,129329,129423,129426,129453,129456,129459,129462,129465,129468,129471,129474,129477,129480,129484,129541,129568,129572,129620,129624,129665,129667,129670,129673,129676,129679,129683,129775,129778,129781,129784,129788,129911,130112,130116,130120,130123,130126,130129,130133,130136,130139,130164,130167,130170,130173,130176,130179,130183,130191,130253,130256,130314,130317,130320,130323,130326,130329,130332,130335,130372],[10,128481,128477],{"id":128482},"_8-css显示模式与背景特性",[803,128484,128486],{"id":128485},"_81-css元素显示模式","8.1 css元素显示模式",[19,128488,128489,128490,128492,128493,128495],{},"显示模式的作用是更好布局页面，元素显示模式就是元素（标签）以什么方式进行显示，比如",[64,128491,126700],{},"自己占一行，比如一行可以放多个",[64,128494,126703],{},"，HTML 元素一般分为块元素和行内元素两种类型",[14,128497,128499],{"id":128498},"_811-块元素","8.1.1 块元素",[19,128501,128502,128503,128505,128506,1072,128509,1072,128511,1072,128513,1072,128516,1072,128519,128522,128523,128525],{},"常见的块元素有",[64,128504,126604],{},"~",[64,128507,128508],{},"\u003Ch6>",[64,128510,126630],{},[64,128512,126700],{},[64,128514,128515],{},"\u003Cul>",[64,128517,128518],{},"\u003Col>",[64,128520,128521],{},"\u003Cli>","等，其中 ",[64,128524,126700],{}," 标签是最典型的块元素",[19,128527,128528],{},[336,128529,128530],{},"块级元素的特点：",[19,128532,128533],{},"① 比较霸道，自己独占一行。",[19,128535,128536],{},"② 高度，宽度、外边距以及内边距都可以控制。",[19,128538,128539],{},"③ 宽度默认是容器（父级宽度）的100%。",[19,128541,128542],{},"④ 是一个容器及盒子，里面可以放行内或者块级元素。",[19,128544,128545],{},[336,128546,893],{},[19,128548,128549],{},"①文字类的元素内不能使用块级元素",[19,128551,77786,128552,128554,128555,128557,128558],{},[64,128553,126630],{}," 标签主要用于存放文字，因此 ",[64,128556,126630],{}," 里面不能放块级元素，特别是不能放",[64,128559,126700],{},[19,128561,128562,128563,128505,128565,128567],{},"⑥同理， ",[64,128564,126604],{},[64,128566,128508],{},"等都是文字类块级标签，里面也不能放其他块级元素",[14,128569,128571],{"id":128570},"_812-行内元素","8.1.2 行内元素",[19,128573,128574,128575,1072,128577,1072,128580,1072,128583,1072,128586,1072,128589,1072,128592,1072,128595,1072,128598,1072,128601,128603,128604,128606],{},"常见的行内元素有 ",[64,128576,126862],{},[64,128578,128579],{},"\u003Cstrong>",[64,128581,128582],{},"\u003Cb>",[64,128584,128585],{},"\u003Cem>",[64,128587,128588],{},"\u003Ci>",[64,128590,128591],{},"\u003Cdel>",[64,128593,128594],{},"\u003Cs>",[64,128596,128597],{},"\u003Cins>",[64,128599,128600],{},"\u003Cu>",[64,128602,126703],{}," 等，其中 ",[64,128605,126703],{}," 标签是最典型的行内元素。有的地方也将行内元素称为内联元素。",[19,128608,128609],{},[336,128610,128611],{},"特点：",[19,128613,128614],{},"① 相邻行内元素在一行上，一行可以显示多个。",[19,128616,128617],{},"② 高、宽直接设置是无效的。",[19,128619,128620],{},"③ 默认宽度就是它本身内容的宽度。",[19,128622,128623],{},"④ 行内元素只能容纳文本或其他行内元素。",[19,128625,128626],{},[336,128627,893],{},[19,128629,128630],{},"① 链接里面不能再放链接，也就是a里面不能再放a",[19,128632,128633,128634,128636,128637,128639],{},"②特殊情况链接 ",[64,128635,126862],{}," 里面可以放块级元素，但是给 ",[64,128638,126862],{}," 转换一下块级模式最安全",[14,128641,128643],{"id":128642},"_813-行内块元素","8.1.3 行内块元素",[19,128645,128646,128647,1072,128650,1072,128653,128656],{},"在行内元素中有几个特殊的标签 —— ",[64,128648,128649],{},"\u003Cimg \u002F>",[64,128651,128652],{},"\u003Cinput \u002F>",[64,128654,128655],{},"\u003Ctd>","，它们同时具有块元素和行内元素的特点。有些资料称它们为行内块元素",[19,128658,128659],{},[336,128660,128661],{},"行内块元素的特点：",[19,128663,128664],{},"① 和相邻行内元素（行内块）在一行上，但是他们之间会有空白缝隙。一行可以显示多个（行内元素特点）",[19,128666,128667],{},"② 默认宽度就是它本身内容的宽度（行内元素特点）",[19,128669,128670],{},"③ 高度，行高、外边距以及内边距都可以控制（块级元素特点）",[14,128672,128674],{"id":128673},"_814-总结","8.1.4 总结",[725,128676],{"style":126945,"src":128677},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-033.png",[14,128679,128681],{"id":128680},"_815-元素显示模式的转换","8.1.5 元素显示模式的转换",[19,128683,128684],{},"①转换为块元素：display:block;",[57,128686,128688],{"className":127089,"code":128687,"language":127091,"meta":62,"style":62},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\na {\n  display: block;\n  width: 100px;\n  height: 40px;\n}\n",[64,128689,128690,128695,128701,128712,128724,128736],{"__ignoreMap":62},[67,128691,128692],{"class":69,"line":70},[67,128693,128694],{"class":202},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\n",[67,128696,128697,128699],{"class":69,"line":143},[67,128698,28],{"class":51837},[67,128700,16289],{"class":77},[67,128702,128703,128706,128708,128710],{"class":69,"line":149},[67,128704,128705],{"class":208},"  display",[67,128707,51974],{"class":77},[67,128709,61406],{"class":208},[67,128711,2017],{"class":77},[67,128713,128714,128716,128718,128720,128722],{"class":69,"line":155},[67,128715,71105],{"class":208},[67,128717,51974],{"class":77},[67,128719,1169],{"class":208},[67,128721,52029],{"class":73},[67,128723,2017],{"class":77},[67,128725,128726,128728,128730,128732,128734],{"class":69,"line":161},[67,128727,71325],{"class":208},[67,128729,51974],{"class":77},[67,128731,1259],{"class":208},[67,128733,52029],{"class":73},[67,128735,2017],{"class":77},[67,128737,128738],{"class":69,"line":167},[67,128739,2288],{"class":77},[19,128741,128742],{},"②转换为行内元素：display:inline;",[57,128744,128746],{"className":127089,"code":128745,"language":127091,"meta":62,"style":62},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\ndiv {\n  display: inline;\n}\n",[64,128747,128748,128753,128759,128770],{"__ignoreMap":62},[67,128749,128750],{"class":69,"line":70},[67,128751,128752],{"class":202},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\n",[67,128754,128755,128757],{"class":69,"line":143},[67,128756,52148],{"class":51837},[67,128758,16289],{"class":77},[67,128760,128761,128763,128765,128768],{"class":69,"line":149},[67,128762,128705],{"class":208},[67,128764,51974],{"class":77},[67,128766,128767],{"class":208},"inline",[67,128769,2017],{"class":77},[67,128771,128772],{"class":69,"line":155},[67,128773,2288],{"class":77},[19,128775,128776],{},"③转换为行内块：display:inline-block;",[57,128778,128780],{"className":127089,"code":128779,"language":127091,"meta":62,"style":62},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\nspan {\n  display: inline-block;\n  width: 80px;\n  height: 30px;\n}\n",[64,128781,128782,128787,128793,128803,128815,128827],{"__ignoreMap":62},[67,128783,128784],{"class":69,"line":70},[67,128785,128786],{"class":202},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\n",[67,128788,128789,128791],{"class":69,"line":143},[67,128790,67],{"class":51837},[67,128792,16289],{"class":77},[67,128794,128795,128797,128799,128801],{"class":69,"line":149},[67,128796,128705],{"class":208},[67,128798,51974],{"class":77},[67,128800,72920],{"class":208},[67,128802,2017],{"class":77},[67,128804,128805,128807,128809,128811,128813],{"class":69,"line":155},[67,128806,71105],{"class":208},[67,128808,51974],{"class":77},[67,128810,1468],{"class":208},[67,128812,52029],{"class":73},[67,128814,2017],{"class":77},[67,128816,128817,128819,128821,128823,128825],{"class":69,"line":161},[67,128818,71325],{"class":208},[67,128820,51974],{"class":77},[67,128822,1807],{"class":208},[67,128824,52029],{"class":73},[67,128826,2017],{"class":77},[67,128828,128829],{"class":69,"line":167},[67,128830,2288],{"class":77},[14,128832,128834],{"id":128833},"_816-小米侧边栏","8.1.6 小米侧边栏",[725,128836],{"style":126945,"src":128837},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-034.png",[57,128839,128841],{"className":127836,"code":128840,"language":127838,"meta":62,"style":62},"\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",[64,128842,128843,128848,128863,128882,128901,128920,128939,128958,128977,128996],{"__ignoreMap":62},[67,128844,128845],{"class":69,"line":70},[67,128846,128847],{"class":202},"\u003C!-- 小米侧边栏案例 -->\n",[67,128849,128850,128852,128854,128856,128858,128861],{"class":69,"line":143},[67,128851,1766],{"class":77},[67,128853,52148],{"class":51837},[67,128855,54023],{"class":112},[67,128857,909],{"class":77},[67,128859,128860],{"class":84},"\"sidebar\"",[67,128862,51844],{"class":77},[67,128864,128865,128867,128869,128871,128873,128875,128878,128880],{"class":69,"line":149},[67,128866,52681],{"class":77},[67,128868,28],{"class":51837},[67,128870,61594],{"class":112},[67,128872,909],{"class":77},[67,128874,61599],{"class":84},[67,128876,128877],{"class":77},">手机 电话卡\u003C\u002F",[67,128879,28],{"class":51837},[67,128881,51844],{"class":77},[67,128883,128884,128886,128888,128890,128892,128894,128897,128899],{"class":69,"line":155},[67,128885,52681],{"class":77},[67,128887,28],{"class":51837},[67,128889,61594],{"class":112},[67,128891,909],{"class":77},[67,128893,61599],{"class":84},[67,128895,128896],{"class":77},">电视 盒子\u003C\u002F",[67,128898,28],{"class":51837},[67,128900,51844],{"class":77},[67,128902,128903,128905,128907,128909,128911,128913,128916,128918],{"class":69,"line":161},[67,128904,52681],{"class":77},[67,128906,28],{"class":51837},[67,128908,61594],{"class":112},[67,128910,909],{"class":77},[67,128912,61599],{"class":84},[67,128914,128915],{"class":77},">笔记本 平板\u003C\u002F",[67,128917,28],{"class":51837},[67,128919,51844],{"class":77},[67,128921,128922,128924,128926,128928,128930,128932,128935,128937],{"class":69,"line":167},[67,128923,52681],{"class":77},[67,128925,28],{"class":51837},[67,128927,61594],{"class":112},[67,128929,909],{"class":77},[67,128931,61599],{"class":84},[67,128933,128934],{"class":77},">出行 穿戴\u003C\u002F",[67,128936,28],{"class":51837},[67,128938,51844],{"class":77},[67,128940,128941,128943,128945,128947,128949,128951,128954,128956],{"class":69,"line":173},[67,128942,52681],{"class":77},[67,128944,28],{"class":51837},[67,128946,61594],{"class":112},[67,128948,909],{"class":77},[67,128950,61599],{"class":84},[67,128952,128953],{"class":77},">智能 路由器\u003C\u002F",[67,128955,28],{"class":51837},[67,128957,51844],{"class":77},[67,128959,128960,128962,128964,128966,128968,128970,128973,128975],{"class":69,"line":180},[67,128961,52681],{"class":77},[67,128963,28],{"class":51837},[67,128965,61594],{"class":112},[67,128967,909],{"class":77},[67,128969,61599],{"class":84},[67,128971,128972],{"class":77},">健康 儿童\u003C\u002F",[67,128974,28],{"class":51837},[67,128976,51844],{"class":77},[67,128978,128979,128981,128983,128985,128987,128989,128992,128994],{"class":69,"line":186},[67,128980,52681],{"class":77},[67,128982,28],{"class":51837},[67,128984,61594],{"class":112},[67,128986,909],{"class":77},[67,128988,61599],{"class":84},[67,128990,128991],{"class":77},">耳机 音响\u003C\u002F",[67,128993,28],{"class":51837},[67,128995,51844],{"class":77},[67,128997,128998,129000,129002],{"class":69,"line":444},[67,128999,52322],{"class":77},[67,129001,52148],{"class":51837},[67,129003,51844],{"class":77},[57,129005,129007],{"className":127089,"code":129006,"language":127091,"meta":62,"style":62},".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",[64,129008,129009,129018,129028,129041,129053,129065,129077,129087,129098,129102,129112,129123],{"__ignoreMap":62},[67,129010,129011,129014,129016],{"class":69,"line":70},[67,129012,129013],{"class":112},".sidebar",[67,129015,2122],{"class":51837},[67,129017,16289],{"class":77},[67,129019,129020,129022,129024,129026],{"class":69,"line":143},[67,129021,128705],{"class":208},[67,129023,51974],{"class":77},[67,129025,61406],{"class":208},[67,129027,2017],{"class":77},[67,129029,129030,129032,129034,129037,129039],{"class":69,"line":149},[67,129031,71105],{"class":208},[67,129033,51974],{"class":77},[67,129035,129036],{"class":208},"234",[67,129038,52029],{"class":73},[67,129040,2017],{"class":77},[67,129042,129043,129045,129047,129049,129051],{"class":69,"line":155},[67,129044,71325],{"class":208},[67,129046,51974],{"class":77},[67,129048,1309],{"class":208},[67,129050,52029],{"class":73},[67,129052,2017],{"class":77},[67,129054,129055,129057,129059,129061,129063],{"class":69,"line":161},[67,129056,127773],{"class":208},[67,129058,51974],{"class":77},[67,129060,1309],{"class":208},[67,129062,52029],{"class":73},[67,129064,2017],{"class":77},[67,129066,129067,129069,129071,129073,129075],{"class":69,"line":167},[67,129068,71360],{"class":208},[67,129070,51974],{"class":77},[67,129072,1807],{"class":208},[67,129074,52029],{"class":73},[67,129076,2017],{"class":77},[67,129078,129079,129081,129083,129085],{"class":69,"line":173},[67,129080,71442],{"class":208},[67,129082,51974],{"class":77},[67,129084,61379],{"class":208},[67,129086,2017],{"class":77},[67,129088,129089,129091,129093,129096],{"class":69,"line":180},[67,129090,71415],{"class":208},[67,129092,51974],{"class":77},[67,129094,129095],{"class":208},"#55585a",[67,129097,2017],{"class":77},[67,129099,129100],{"class":69,"line":186},[67,129101,2288],{"class":77},[67,129103,129104,129106,129108,129110],{"class":69,"line":444},[67,129105,129013],{"class":112},[67,129107,2122],{"class":51837},[67,129109,61477],{"class":112},[67,129111,16289],{"class":77},[67,129113,129114,129116,129118,129121],{"class":69,"line":2335},[67,129115,71415],{"class":208},[67,129117,51974],{"class":77},[67,129119,129120],{"class":208},"#ff6700",[67,129122,2017],{"class":77},[67,129124,129125],{"class":69,"line":2340},[67,129126,2288],{"class":77},[725,129128],{"style":126945,"src":129129},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-035.png",[19,129131,129132],{},"行高=盒子高度：实现文字的垂直居中",[19,129134,129135],{},"原理讲解：",[725,129137],{"style":126945,"src":129138},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-036.png",[803,129140,129142],{"id":129141},"_82-css背景","8.2 css背景",[19,129144,129145],{},"背景属性可以设置背景颜色、背景图片、背景平铺、背景图片位置、背景图像固定等",[14,129147,129149],{"id":129148},"_821-背景颜色","8.2.1 背景颜色",[19,129151,129152],{},"background-color:颜色值;",[19,129154,129155],{},"一般情况下元素背景颜色默认值是 transparent（透明）",[14,129157,129159],{"id":129158},"_822-背景图片","8.2.2 背景图片",[19,129161,129162],{},"用于logo 或者一些装饰性的小图片或者是超大的背景图片, 优点是非常便于控制位置. (精灵图也是一种运用场景)",[57,129164,129166],{"className":127089,"code":129165,"language":127091,"meta":62,"style":62},"div {\n  background-image: url(images\u002Fbg.png);\n}\n",[64,129167,129168,129174,129190],{"__ignoreMap":62},[67,129169,129170,129172],{"class":69,"line":70},[67,129171,52148],{"class":51837},[67,129173,16289],{"class":77},[67,129175,129176,129179,129181,129183,129185,129188],{"class":69,"line":143},[67,129177,129178],{"class":208},"  background-image",[67,129180,51974],{"class":77},[67,129182,62263],{"class":208},[67,129184,864],{"class":77},[67,129186,129187],{"class":5935},"images\u002Fbg.png",[67,129189,3440],{"class":77},[67,129191,129192],{"class":69,"line":149},[67,129193,2288],{"class":77},[998,129195,129196,129205],{},[1001,129197,129198],{},[1004,129199,129200,129203],{},[1007,129201,129202],{"align":24453},"参数值",[1007,129204,103233],{"align":24453},[1044,129206,129207,129214],{},[1004,129208,129209,129211],{},[1049,129210,55274],{"align":24453},[1049,129212,129213],{"align":24453},"无背景图（默认的）",[1004,129215,129216,129218],{},[1049,129217,62263],{"align":24453},[1049,129219,129220],{"align":24453},"使用绝对或相对地址指定背景图像",[57,129222,129223],{"className":127089,"code":129165,"language":127091,"meta":62,"style":62},[64,129224,129225,129231,129245],{"__ignoreMap":62},[67,129226,129227,129229],{"class":69,"line":70},[67,129228,52148],{"class":51837},[67,129230,16289],{"class":77},[67,129232,129233,129235,129237,129239,129241,129243],{"class":69,"line":143},[67,129234,129178],{"class":208},[67,129236,51974],{"class":77},[67,129238,62263],{"class":208},[67,129240,864],{"class":77},[67,129242,129187],{"class":5935},[67,129244,3440],{"class":77},[67,129246,129247],{"class":69,"line":149},[67,129248,2288],{"class":77},[19,129250,129251],{},"注意：背景图片后面的地址，不能忘记加url,也不能加引号",[14,129253,129255],{"id":129254},"_823-背景平铺","8.2.3 背景平铺",[57,129257,129259],{"className":127089,"code":129258,"language":127091,"meta":62,"style":62},"div {\n  background-repeat: no-repeat;\n}\n",[64,129260,129261,129267,129278],{"__ignoreMap":62},[67,129262,129263,129265],{"class":69,"line":70},[67,129264,52148],{"class":51837},[67,129266,16289],{"class":77},[67,129268,129269,129272,129274,129276],{"class":69,"line":143},[67,129270,129271],{"class":208},"  background-repeat",[67,129273,51974],{"class":77},[67,129275,62273],{"class":208},[67,129277,2017],{"class":77},[67,129279,129280],{"class":69,"line":149},[67,129281,2288],{"class":77},[998,129283,129284,129292],{},[1001,129285,129286],{},[1004,129287,129288,129290],{},[1007,129289,129202],{"align":24453},[1007,129291,103233],{"align":24453},[1044,129293,129294,129302,129309,129317],{},[1004,129295,129296,129299],{},[1049,129297,129298],{"align":24453},"repeat",[1049,129300,129301],{"align":24453},"背景图像在纵向和横向上平铺（默认的）",[1004,129303,129304,129306],{},[1049,129305,62273],{"align":24453},[1049,129307,129308],{"align":24453},"背景图像不平铺",[1004,129310,129311,129314],{},[1049,129312,129313],{"align":24453},"repeat-x",[1049,129315,129316],{"align":24453},"背景图像在横向上平铺",[1004,129318,129319,129322],{},[1049,129320,129321],{"align":24453},"repeat-y",[1049,129323,129324],{"align":24453},"背景图像在纵向平铺",[14,129326,129328],{"id":129327},"_824-背景图片位置","8.2.4 背景图片位置",[57,129330,129332],{"className":127089,"code":129331,"language":127091,"meta":62,"style":62},"\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",[64,129333,129334,129339,129345,129359,129363,129368,129374,129390,129394,129399,129405,129419],{"__ignoreMap":62},[67,129335,129336],{"class":69,"line":70},[67,129337,129338],{"class":202},"\u002F* 方位名词 *\u002F\n",[67,129340,129341,129343],{"class":69,"line":143},[67,129342,52148],{"class":51837},[67,129344,16289],{"class":77},[67,129346,129347,129350,129352,129354,129357],{"class":69,"line":149},[67,129348,129349],{"class":208},"  background-position",[67,129351,51974],{"class":77},[67,129353,52129],{"class":208},[67,129355,129356],{"class":208}," top",[67,129358,2017],{"class":77},[67,129360,129361],{"class":69,"line":155},[67,129362,2288],{"class":77},[67,129364,129365],{"class":69,"line":161},[67,129366,129367],{"class":202},"\u002F* 精确单位 *\u002F\n",[67,129369,129370,129372],{"class":69,"line":167},[67,129371,52148],{"class":51837},[67,129373,16289],{"class":77},[67,129375,129376,129378,129380,129382,129384,129386,129388],{"class":69,"line":173},[67,129377,129349],{"class":208},[67,129379,51974],{"class":77},[67,129381,1556],{"class":208},[67,129383,52029],{"class":73},[67,129385,58041],{"class":208},[67,129387,52029],{"class":73},[67,129389,2017],{"class":77},[67,129391,129392],{"class":69,"line":180},[67,129393,2288],{"class":77},[67,129395,129396],{"class":69,"line":186},[67,129397,129398],{"class":202},"\u002F* 混合单位 *\u002F\n",[67,129400,129401,129403],{"class":69,"line":444},[67,129402,52148],{"class":51837},[67,129404,16289],{"class":77},[67,129406,129407,129409,129411,129413,129415,129417],{"class":69,"line":2335},[67,129408,129349],{"class":208},[67,129410,51974],{"class":77},[67,129412,1556],{"class":208},[67,129414,52029],{"class":73},[67,129416,17861],{"class":208},[67,129418,2017],{"class":77},[67,129420,129421],{"class":69,"line":2340},[67,129422,2288],{"class":77},[19,129424,129425],{},"参数代表的意思是：x 坐标和 y 坐标。 可以使用 方位名词 或者 精确单位",[998,129427,129428,129436],{},[1001,129429,129430],{},[1004,129431,129432,129434],{},[1007,129433,129202],{"align":24453},[1007,129435,26578],{"align":24453},[1044,129437,129438,129445],{},[1004,129439,129440,129442],{},[1049,129441,52505],{"align":24453},[1049,129443,129444],{"align":24453},"百分数|由浮点数和单位标识符组成的长度值",[1004,129446,129447,129450],{},[1049,129448,129449],{"align":24453},"position",[1049,129451,129452],{"align":24453},"top|center|bottom|left|center|right 方位名词",[19,129454,129455],{},"其他说明：",[19,129457,129458],{},"①参数是方位名词",[19,129460,129461],{},"如果指定的两个值都是方位名词，则两个值前后顺序无关，比如 left top 和 top left 效果一致",[19,129463,129464],{},"如果只指定了一个方位名词，另一个值省略，则第二个值默认居中对齐",[19,129466,129467],{},"②参数是精确单位",[19,129469,129470],{},"如果参数值是精确坐标，那么第一个肯定是 x 坐标，第二个一定是 y 坐标",[19,129472,129473],{},"如果只指定一个数值，那该数值一定是 x 坐标，另一个默认垂直居中",[19,129475,129476],{},"③参数是混合单位",[19,129478,129479],{},"如果指定的两个值是精确单位和方位名词混合使用，则第一个值是 x 坐标，第二个值是 y 坐标",[14,129481,129483],{"id":129482},"_825-背景图片固定","8.2.5 背景图片固定",[57,129485,129487],{"className":127089,"code":129486,"language":127091,"meta":62,"style":62},"\u002F* 背景滚动（默认） *\u002F\ndiv {\n  background-attachment: scroll;\n}\n\u002F* 背景固定 *\u002F\ndiv {\n  background-attachment: fixed;\n}\n",[64,129488,129489,129494,129500,129512,129516,129521,129527,129537],{"__ignoreMap":62},[67,129490,129491],{"class":69,"line":70},[67,129492,129493],{"class":202},"\u002F* 背景滚动（默认） *\u002F\n",[67,129495,129496,129498],{"class":69,"line":143},[67,129497,52148],{"class":51837},[67,129499,16289],{"class":77},[67,129501,129502,129505,129507,129510],{"class":69,"line":149},[67,129503,129504],{"class":208},"  background-attachment",[67,129506,51974],{"class":77},[67,129508,129509],{"class":208},"scroll",[67,129511,2017],{"class":77},[67,129513,129514],{"class":69,"line":155},[67,129515,2288],{"class":77},[67,129517,129518],{"class":69,"line":161},[67,129519,129520],{"class":202},"\u002F* 背景固定 *\u002F\n",[67,129522,129523,129525],{"class":69,"line":167},[67,129524,52148],{"class":51837},[67,129526,16289],{"class":77},[67,129528,129529,129531,129533,129535],{"class":69,"line":173},[67,129530,129504],{"class":208},[67,129532,51974],{"class":77},[67,129534,86770],{"class":208},[67,129536,2017],{"class":77},[67,129538,129539],{"class":69,"line":180},[67,129540,2288],{"class":77},[998,129542,129543,129552],{},[1001,129544,129545],{},[1004,129546,129547,129550],{},[1007,129548,129549],{"align":24453},"参数",[1007,129551,103233],{"align":24453},[1044,129553,129554,129561],{},[1004,129555,129556,129558],{},[1049,129557,129509],{"align":24453},[1049,129559,129560],{"align":24453},"背景图像是随对象内容滚动",[1004,129562,129563,129565],{},[1049,129564,86770],{"align":24453},[1049,129566,129567],{"align":24453},"背景图像固定",[14,129569,129571],{"id":129570},"_826-背景样式合写","8.2.6 背景样式合写",[57,129573,129575],{"className":127089,"code":129574,"language":127091,"meta":62,"style":62},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\ndiv {\n  background: #fff url(images\u002Fbg.png) no-repeat fixed center top;\n}\n",[64,129576,129577,129582,129588,129616],{"__ignoreMap":62},[67,129578,129579],{"class":69,"line":70},[67,129580,129581],{"class":202},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\n",[67,129583,129584,129586],{"class":69,"line":143},[67,129585,52148],{"class":51837},[67,129587,16289],{"class":77},[67,129589,129590,129592,129594,129596,129599,129601,129603,129605,129607,129610,129612,129614],{"class":69,"line":149},[67,129591,71148],{"class":208},[67,129593,51974],{"class":77},[67,129595,61379],{"class":208},[67,129597,129598],{"class":208}," url",[67,129600,864],{"class":77},[67,129602,129187],{"class":5935},[67,129604,14432],{"class":77},[67,129606,62273],{"class":208},[67,129608,129609],{"class":208}," fixed",[67,129611,17861],{"class":208},[67,129613,129356],{"class":208},[67,129615,2017],{"class":77},[67,129617,129618],{"class":69,"line":155},[67,129619,2288],{"class":77},[14,129621,129623],{"id":129622},"_827-背景色半透明","8.2.7 背景色半透明",[57,129625,129627],{"className":127089,"code":129626,"language":127091,"meta":62,"style":62},"div {\n  background: rgba(0, 0, 0, 0.3);\n}\n",[64,129628,129629,129635,129661],{"__ignoreMap":62},[67,129630,129631,129633],{"class":69,"line":70},[67,129632,52148],{"class":51837},[67,129634,16289],{"class":77},[67,129636,129637,129639,129641,129643,129645,129647,129649,129651,129653,129655,129657,129659],{"class":69,"line":143},[67,129638,71148],{"class":208},[67,129640,51974],{"class":77},[67,129642,55647],{"class":208},[67,129644,864],{"class":77},[67,129646,1051],{"class":208},[67,129648,13153],{"class":77},[67,129650,1051],{"class":208},[67,129652,13153],{"class":77},[67,129654,1051],{"class":208},[67,129656,13153],{"class":77},[67,129658,101058],{"class":208},[67,129660,3440],{"class":77},[67,129662,129663],{"class":69,"line":149},[67,129664,2288],{"class":77},[19,129666,99933],{},[19,129668,129669],{},"①最后一个参数是 alpha 透明度，取值范围在 0~1之间",[19,129671,129672],{},"②我们习惯把 0.3 的 0 省略掉，写为 background: rgba(0, 0, 0, .3);",[19,129674,129675],{},"③背景半透明是指盒子背景半透明，盒子里面的内容不受影响",[19,129677,129678],{},"④CSS3 新增属性，是 IE9+ 版本浏览器才支持的，但是现在实际开发,我们不太关注兼容性写法了,可以放心使用",[14,129680,129682],{"id":129681},"_828-总结","8.2.8 总结",[998,129684,129685,129696],{},[1001,129686,129687],{},[1004,129688,129689,129692,129694],{},[1007,129690,129691],{"align":24453},"属性",[1007,129693,103233],{"align":24453},[1007,129695,1012],{"align":24453},[1044,129697,129698,129709,129720,129731,129742,129753,129764],{},[1004,129699,129700,129703,129706],{},[1049,129701,129702],{"align":24453},"background-color",[1049,129704,129705],{"align":24453},"背景颜色",[1049,129707,129708],{"align":24453},"预定义的颜色值\u002F十六进制\u002FRGB代码",[1004,129710,129711,129714,129717],{},[1049,129712,129713],{"align":24453},"background-image",[1049,129715,129716],{"align":24453},"背景图片",[1049,129718,129719],{"align":24453},"url(图片路径)",[1004,129721,129722,129725,129728],{},[1049,129723,129724],{"align":24453},"background-repeat",[1049,129726,129727],{"align":24453},"是否平铺",[1049,129729,129730],{"align":24453},"repeat\u002Fno-repeat\u002Frepeat-x\u002Frepeat-y",[1004,129732,129733,129736,129739],{},[1049,129734,129735],{"align":24453},"background-position",[1049,129737,129738],{"align":24453},"背景位置",[1049,129740,129741],{"align":24453},"length\u002Fposition 分别是x和y坐标",[1004,129743,129744,129747,129750],{},[1049,129745,129746],{"align":24453},"background-attachment",[1049,129748,129749],{"align":24453},"背景附着",[1049,129751,129752],{"align":24453},"scroll(背景滚动) \u002Ffixed (背景固定)",[1004,129754,129755,129758,129761],{},[1049,129756,129757],{"align":24453},"背景简写",[1049,129759,129760],{"align":24453},"书写更简单",[1049,129762,129763],{"align":24453},"背景颜色 背景图片地址 背景平铺 背景滚动 背景位置；",[1004,129765,129766,129769,129772],{},[1049,129767,129768],{"align":24453},"背景半透明",[1049,129770,129771],{"align":24453},"背景颜色半透明",[1049,129773,129774],{"align":24453},"background: rgba(0,0,0.3); 后面必须是4个值",[19,129776,129777],{},"颜色渐变：",[725,129779],{"style":126945,"src":129780},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-037.png",[725,129782],{"style":126945,"src":129783},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-038.png",[14,129785,129787],{"id":129786},"_829-案例-五彩导航栏","8.2.9 案例-五彩导航栏",[57,129789,129791],{"className":127836,"code":129790,"language":127838,"meta":62,"style":62},"\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",[64,129792,129793,129808,129827,129846,129865,129884,129903],{"__ignoreMap":62},[67,129794,129795,129797,129799,129801,129803,129806],{"class":69,"line":70},[67,129796,1766],{"class":77},[67,129798,52148],{"class":51837},[67,129800,54023],{"class":112},[67,129802,909],{"class":77},[67,129804,129805],{"class":84},"\"nav\"",[67,129807,51844],{"class":77},[67,129809,129810,129812,129814,129816,129818,129820,129823,129825],{"class":69,"line":143},[67,129811,52681],{"class":77},[67,129813,28],{"class":51837},[67,129815,61594],{"class":112},[67,129817,909],{"class":77},[67,129819,61599],{"class":84},[67,129821,129822],{"class":77},">五彩导航1\u003C\u002F",[67,129824,28],{"class":51837},[67,129826,51844],{"class":77},[67,129828,129829,129831,129833,129835,129837,129839,129842,129844],{"class":69,"line":149},[67,129830,52681],{"class":77},[67,129832,28],{"class":51837},[67,129834,61594],{"class":112},[67,129836,909],{"class":77},[67,129838,61599],{"class":84},[67,129840,129841],{"class":77},">五彩导航2\u003C\u002F",[67,129843,28],{"class":51837},[67,129845,51844],{"class":77},[67,129847,129848,129850,129852,129854,129856,129858,129861,129863],{"class":69,"line":155},[67,129849,52681],{"class":77},[67,129851,28],{"class":51837},[67,129853,61594],{"class":112},[67,129855,909],{"class":77},[67,129857,61599],{"class":84},[67,129859,129860],{"class":77},">五彩导航3\u003C\u002F",[67,129862,28],{"class":51837},[67,129864,51844],{"class":77},[67,129866,129867,129869,129871,129873,129875,129877,129880,129882],{"class":69,"line":161},[67,129868,52681],{"class":77},[67,129870,28],{"class":51837},[67,129872,61594],{"class":112},[67,129874,909],{"class":77},[67,129876,61599],{"class":84},[67,129878,129879],{"class":77},">五彩导航4\u003C\u002F",[67,129881,28],{"class":51837},[67,129883,51844],{"class":77},[67,129885,129886,129888,129890,129892,129894,129896,129899,129901],{"class":69,"line":167},[67,129887,52681],{"class":77},[67,129889,28],{"class":51837},[67,129891,61594],{"class":112},[67,129893,909],{"class":77},[67,129895,61599],{"class":84},[67,129897,129898],{"class":77},">五彩导航5\u003C\u002F",[67,129900,28],{"class":51837},[67,129902,51844],{"class":77},[67,129904,129905,129907,129909],{"class":69,"line":173},[67,129906,52322],{"class":77},[67,129908,52148],{"class":51837},[67,129910,51844],{"class":77},[57,129912,129914],{"className":127089,"code":129913,"language":127091,"meta":62,"style":62},".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",[64,129915,129916,129925,129935,129947,129959,129969,129981,129991,129995,130020,130043,130066,130089],{"__ignoreMap":62},[67,129917,129918,129921,129923],{"class":69,"line":70},[67,129919,129920],{"class":112},".nav",[67,129922,2122],{"class":51837},[67,129924,16289],{"class":77},[67,129926,129927,129929,129931,129933],{"class":69,"line":143},[67,129928,128705],{"class":208},[67,129930,51974],{"class":77},[67,129932,72920],{"class":208},[67,129934,2017],{"class":77},[67,129936,129937,129939,129941,129943,129945],{"class":69,"line":149},[67,129938,71105],{"class":208},[67,129940,51974],{"class":77},[67,129942,1673],{"class":208},[67,129944,52029],{"class":73},[67,129946,2017],{"class":77},[67,129948,129949,129951,129953,129955,129957],{"class":69,"line":155},[67,129950,71325],{"class":208},[67,129952,51974],{"class":77},[67,129954,1712],{"class":208},[67,129956,52029],{"class":73},[67,129958,2017],{"class":77},[67,129960,129961,129963,129965,129967],{"class":69,"line":161},[67,129962,71063],{"class":208},[67,129964,51974],{"class":77},[67,129966,52129],{"class":208},[67,129968,2017],{"class":77},[67,129970,129971,129973,129975,129977,129979],{"class":69,"line":167},[67,129972,127773],{"class":208},[67,129974,51974],{"class":77},[67,129976,1712],{"class":208},[67,129978,52029],{"class":73},[67,129980,2017],{"class":77},[67,129982,129983,129985,129987,129989],{"class":69,"line":173},[67,129984,71442],{"class":208},[67,129986,51974],{"class":77},[67,129988,61379],{"class":208},[67,129990,2017],{"class":77},[67,129992,129993],{"class":69,"line":180},[67,129994,2288],{"class":77},[67,129996,129997,129999,130001,130004,130006,130008,130011,130013,130015,130017],{"class":69,"line":186},[67,129998,129920],{"class":112},[67,130000,2122],{"class":51837},[67,130002,130003],{"class":112},":nth-child",[67,130005,864],{"class":77},[67,130007,1077],{"class":208},[67,130009,130010],{"class":77},") { ",[67,130012,129702],{"class":208},[67,130014,51974],{"class":77},[67,130016,129120],{"class":208},[67,130018,130019],{"class":77},"; }\n",[67,130021,130022,130024,130026,130028,130030,130032,130034,130036,130038,130041],{"class":69,"line":444},[67,130023,129920],{"class":112},[67,130025,2122],{"class":51837},[67,130027,130003],{"class":112},[67,130029,864],{"class":77},[67,130031,939],{"class":208},[67,130033,130010],{"class":77},[67,130035,129702],{"class":208},[67,130037,51974],{"class":77},[67,130039,130040],{"class":208},"#ff0000",[67,130042,130019],{"class":77},[67,130044,130045,130047,130049,130051,130053,130055,130057,130059,130061,130064],{"class":69,"line":2335},[67,130046,129920],{"class":112},[67,130048,2122],{"class":51837},[67,130050,130003],{"class":112},[67,130052,864],{"class":77},[67,130054,933],{"class":208},[67,130056,130010],{"class":77},[67,130058,129702],{"class":208},[67,130060,51974],{"class":77},[67,130062,130063],{"class":208},"#00a4ff",[67,130065,130019],{"class":77},[67,130067,130068,130070,130072,130074,130076,130078,130080,130082,130084,130087],{"class":69,"line":2340},[67,130069,129920],{"class":112},[67,130071,2122],{"class":51837},[67,130073,130003],{"class":112},[67,130075,864],{"class":77},[67,130077,1151],{"class":208},[67,130079,130010],{"class":77},[67,130081,129702],{"class":208},[67,130083,51974],{"class":77},[67,130085,130086],{"class":208},"#ff00ff",[67,130088,130019],{"class":77},[67,130090,130091,130093,130095,130097,130099,130101,130103,130105,130107,130110],{"class":69,"line":2346},[67,130092,129920],{"class":112},[67,130094,2122],{"class":51837},[67,130096,130003],{"class":112},[67,130098,864],{"class":77},[67,130100,1177],{"class":208},[67,130102,130010],{"class":77},[67,130104,129702],{"class":208},[67,130106,51974],{"class":77},[67,130108,130109],{"class":208},"#00ff00",[67,130111,130019],{"class":77},[803,130113,130115],{"id":130114},"_83-css三大特性","8.3 css三大特性",[14,130117,130119],{"id":130118},"_831-层叠性","8.3.1 层叠性",[19,130121,130122],{},"为了解决样式冲突问题",[19,130124,130125],{},"原则：①样式冲突，遵循的原则是就近原则，哪个样式离结构近，就执行哪个样式",[19,130127,130128],{},"   ②样式不冲突，不会层叠",[14,130130,130132],{"id":130131},"_832-继承性","8.3.2 继承性",[19,130134,130135],{},"子标签会继承父标签的某些样式，如文本颜色和字号。恰当地使用继承可以简化代码，降低 CSS 样式的复杂性",[19,130137,130138],{},"子元素可以继承父元素的样式：text-, font-, line-和color属性",[57,130140,130142],{"className":127089,"code":130141,"language":127091,"meta":62,"style":62},"p {\n  color: #333;\n}\n",[64,130143,130144,130150,130160],{"__ignoreMap":62},[67,130145,130146,130148],{"class":69,"line":70},[67,130147,19],{"class":51837},[67,130149,16289],{"class":77},[67,130151,130152,130154,130156,130158],{"class":69,"line":143},[67,130153,71442],{"class":208},[67,130155,51974],{"class":77},[67,130157,62906],{"class":208},[67,130159,2017],{"class":77},[67,130161,130162],{"class":69,"line":149},[67,130163,2288],{"class":77},[725,130165],{"style":126945,"src":130166},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-039.png",[19,130168,130169],{},"解释：①行高可以跟单位也可以不跟单位",[19,130171,130172],{},"②如果子元素没有设置行高，则会继承父元素的行高为 1.5",[19,130174,130175],{},"③此时子元素的行高是：当前子元素的文字大小 * 1.5",[19,130177,130178],{},"④body 行高 1.5 这样写法最大的优势就是里面子元素可以根据自己文字大小自动调整行高",[14,130180,130182],{"id":130181},"_833-优先级","8.3.3 优先级",[815,130184,130185,130188],{},[818,130186,130187],{},"选择器相同，则执行层叠性",[818,130189,130190],{},"选择器不同，则根据选择器权重执行",[998,130192,130193,130203],{},[1001,130194,130195],{},[1004,130196,130197,130200],{},[1007,130198,130199],{"align":24453},"选择器",[1007,130201,130202],{"align":24453},"选择器权重",[1044,130204,130205,130213,130221,130229,130237,130245],{},[1004,130206,130207,130210],{},[1049,130208,130209],{"align":24453},"继承 或者*",[1049,130211,130212],{"align":24453},"0，0，0，0",[1004,130214,130215,130218],{},[1049,130216,130217],{"align":24453},"标签选择器",[1049,130219,130220],{"align":24453},"0，0，0，1",[1004,130222,130223,130226],{},[1049,130224,130225],{"align":24453},"类选择器，伪类选择器",[1049,130227,130228],{"align":24453},"0，0，1，0",[1004,130230,130231,130234],{},[1049,130232,130233],{"align":24453},"ID选择器",[1049,130235,130236],{"align":24453},"0，1，0，0",[1004,130238,130239,130242],{},[1049,130240,130241],{"align":24453},"行内样式",[1049,130243,130244],{"align":24453},"1，0，0，0",[1004,130246,130247,130250],{},[1049,130248,130249],{"align":24453},"！important",[1049,130251,130252],{"align":24453},"无穷大",[19,130254,130255],{},"! important用法：",[57,130257,130259],{"className":127089,"code":130258,"language":127091,"meta":62,"style":62},"\u002F* !important 拥有最高优先级 *\u002F\ndiv {\n  color: pink !important;\n}\n\u002F* 以下规则不会生效，因为上面有 !important *\u002F\ndiv {\n  color: red;\n}\n",[64,130260,130261,130266,130272,130285,130289,130294,130300,130310],{"__ignoreMap":62},[67,130262,130263],{"class":69,"line":70},[67,130264,130265],{"class":202},"\u002F* !important 拥有最高优先级 *\u002F\n",[67,130267,130268,130270],{"class":69,"line":143},[67,130269,52148],{"class":51837},[67,130271,16289],{"class":77},[67,130273,130274,130276,130278,130280,130283],{"class":69,"line":149},[67,130275,71442],{"class":208},[67,130277,51974],{"class":77},[67,130279,52182],{"class":208},[67,130281,130282],{"class":73}," !important",[67,130284,2017],{"class":77},[67,130286,130287],{"class":69,"line":155},[67,130288,2288],{"class":77},[67,130290,130291],{"class":69,"line":161},[67,130292,130293],{"class":202},"\u002F* 以下规则不会生效，因为上面有 !important *\u002F\n",[67,130295,130296,130298],{"class":69,"line":167},[67,130297,52148],{"class":51837},[67,130299,16289],{"class":77},[67,130301,130302,130304,130306,130308],{"class":69,"line":173},[67,130303,71442],{"class":208},[67,130305,51974],{"class":77},[67,130307,57958],{"class":208},[67,130309,2017],{"class":77},[67,130311,130312],{"class":69,"line":180},[67,130313,2288],{"class":77},[19,130315,130316],{},"优先级注意点：",[19,130318,130319],{},"①权重是有4组数字组成,但是不会有进位",[19,130321,130322],{},"②可以理解为类选择器永远大于元素选择器, id选择器永远大于类选择器,以此类推..",[19,130324,130325],{},"③等级判断从左向右，如果某一位数值相同，则判断下一位数值",[19,130327,130328],{},"④可以简单记忆法: 通配符和继承权重为0, 标签选择器为1,类(伪类)选择器为 10, id选择器 100, 行内样式表为 1000, !important 无穷大.",[19,130330,130331],{},"⑤继承的权重是0， 如果该元素没有直接选中，不管父元素权重多高，子元素得到的权重都是 0",[19,130333,130334],{},"⑥复合选择器",[998,130336,130337,130347],{},[1001,130338,130339],{},[1004,130340,130341,130344],{},[1007,130342,130343],{"align":24453},"div ul li",[1007,130345,130346],{"align":24453},"0,0,0,3",[1044,130348,130349,130357,130365],{},[1004,130350,130351,130354],{},[1049,130352,130353],{"align":24453},".nav ul li",[1049,130355,130356],{"align":24453},"0,0,1,1这是个带有类选择器的后代选择器，有继承关系，实际最后权重就是一个类选择器加上一个标签选择器",[1004,130358,130359,130362],{},[1049,130360,130361],{"align":24453},"a:hover",[1049,130363,130364],{"align":24453},"0,0,1,1",[1004,130366,130367,130370],{},[1049,130368,130369],{"align":24453},".nav a",[1049,130371,130364],{"align":24453},[779,130373,130374],{},"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":62,"searchDepth":143,"depth":143,"links":130376},[130377,130385,130396],{"id":128485,"depth":143,"text":128486,"children":130378},[130379,130380,130381,130382,130383,130384],{"id":128498,"depth":149,"text":128499},{"id":128570,"depth":149,"text":128571},{"id":128642,"depth":149,"text":128643},{"id":128673,"depth":149,"text":128674},{"id":128680,"depth":149,"text":128681},{"id":128833,"depth":149,"text":128834},{"id":129141,"depth":143,"text":129142,"children":130386},[130387,130388,130389,130390,130391,130392,130393,130394,130395],{"id":129148,"depth":149,"text":129149},{"id":129158,"depth":149,"text":129159},{"id":129254,"depth":149,"text":129255},{"id":129327,"depth":149,"text":129328},{"id":129482,"depth":149,"text":129483},{"id":129570,"depth":149,"text":129571},{"id":129622,"depth":149,"text":129623},{"id":129681,"depth":149,"text":129682},{"id":129786,"depth":149,"text":129787},{"id":130114,"depth":143,"text":130115,"children":130397},[130398,130399,130400],{"id":130118,"depth":149,"text":130119},{"id":130131,"depth":149,"text":130132},{"id":130181,"depth":149,"text":130182},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch08-css",{"title":128477,"description":24093},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性","WYPqfeTLjHk3Kq5wyAvb9PzM-XrgcbuLbMXucvM7Pf4",{"id":130407,"title":130408,"body":130409,"description":24093,"extension":787,"meta":131999,"navigation":176,"path":132000,"seo":132001,"stem":132002,"__hash__":132003},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图.md","9. CSS盒模型浮动与切图",{"type":7,"value":130410,"toc":131978},[130411,130414,130418,130421,130424,130427,130430,130433,130436,130439,130443,130451,130488,130524,130527,130541,130546,130580,130583,130676,130681,130684,130714,130717,130722,130730,130734,130741,130787,130831,130836,130839,130842,130845,130848,130851,130854,130856,130859,130863,130868,130912,130917,130920,130923,130960,130965,130968,130971,130974,130977,131009,131012,131015,131018,131050,131053,131056,131059,131063,131066,131098,131101,131105,131125,131128,131136,131139,131143,131148,131151,131183,131188,131191,131229,131233,131238,131241,131244,131275,131278,131295,131300,131352,131412,131417,131471,131509,131513,131517,131520,131524,131532,131535,131537,131548,131553,131601,131635,131638,131641,131644,131647,131691,131694,131697,131700,131703,131706,131709,131753,131756,131759,131762,131765,131768,131771,131777,131780,131824,131827,131830,131833,131836,131839,131883,131886,131888,131891,131895,131899,131937,131941,131944,131947,131951,131959,131963,131966,131969,131972,131975],[10,130412,130408],{"id":130413},"_9-css盒模型浮动与切图",[803,130415,130417],{"id":130416},"_91-盒子模型","9.1 盒子模型",[19,130419,130420],{},"利用盒子来设计网页",[19,130422,130423],{},"盒子包含：边框、外边距、内边距、实际内容",[19,130425,130426],{},"网页布局设置：",[19,130428,130429],{},"①先准备相关的网页元素，网页元素基本都是盒子box",[19,130431,130432],{},"②利用css设置好盒子样式，然后摆放到相应位置",[19,130434,130435],{},"③往盒子里装内容",[725,130437],{"style":126945,"src":130438},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-040.png",[14,130440,130442],{"id":130441},"_911-边框border","9.1.1 边框（border）",[815,130444,130445,130448],{},[818,130446,130447],{},"border可以设置元素的边框。边框有三部分组成：边框宽度(粗细) 边框样式 边框颜色；",[818,130449,130450],{},"语法",[57,130452,130454],{"className":127089,"code":130453,"language":127091,"meta":62,"style":62},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\ndiv {\n  border: 1px solid #ccc;\n}\n",[64,130455,130456,130461,130467,130484],{"__ignoreMap":62},[67,130457,130458],{"class":69,"line":70},[67,130459,130460],{"class":202},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\n",[67,130462,130463,130465],{"class":69,"line":143},[67,130464,52148],{"class":51837},[67,130466,16289],{"class":77},[67,130468,130469,130471,130473,130475,130477,130479,130482],{"class":69,"line":149},[67,130470,71433],{"class":208},[67,130472,51974],{"class":77},[67,130474,1077],{"class":208},[67,130476,52029],{"class":73},[67,130478,52058],{"class":208},[67,130480,130481],{"class":208}," #ccc",[67,130483,2017],{"class":77},[67,130485,130486],{"class":69,"line":155},[67,130487,2288],{"class":77},[998,130489,130490,130498],{},[1001,130491,130492],{},[1004,130493,130494,130496],{},[1007,130495,129691],{"align":24453},[1007,130497,103233],{"align":24453},[1044,130499,130500,130508,130516],{},[1004,130501,130502,130505],{},[1049,130503,130504],{"align":24453},"border-width",[1049,130506,130507],{"align":24453},"定义边框粗细，单位是px",[1004,130509,130510,130513],{},[1049,130511,130512],{"align":24453},"border-style",[1049,130514,130515],{"align":24453},"边框的样式",[1004,130517,130518,130521],{},[1049,130519,130520],{"align":24453},"border-color",[1049,130522,130523],{"align":24453},"边框的颜色",[19,130525,130526],{},"边框样式 border-style 可以设置如下值：",[1863,130528,130529,130532,130535,130538],{},[818,130530,130531],{},"none：没有边框即忽略所有边框的宽度（默认值）",[818,130533,130534],{},"solid：边框为单实线(最为常用的)",[818,130536,130537],{},"dashed：边框为虚线",[818,130539,130540],{},"dotted：边框为点线",[815,130542,130543],{"start":149},[818,130544,130545],{},"边框的合写分写",[57,130547,130548],{"className":127089,"code":130453,"language":127091,"meta":62,"style":62},[64,130549,130550,130554,130560,130576],{"__ignoreMap":62},[67,130551,130552],{"class":69,"line":70},[67,130553,130460],{"class":202},[67,130555,130556,130558],{"class":69,"line":143},[67,130557,52148],{"class":51837},[67,130559,16289],{"class":77},[67,130561,130562,130564,130566,130568,130570,130572,130574],{"class":69,"line":149},[67,130563,71433],{"class":208},[67,130565,51974],{"class":77},[67,130567,1077],{"class":208},[67,130569,52029],{"class":73},[67,130571,52058],{"class":208},[67,130573,130481],{"class":208},[67,130575,2017],{"class":77},[67,130577,130578],{"class":69,"line":155},[67,130579,2288],{"class":77},[19,130581,130582],{},"边框分开写法：",[57,130584,130586],{"className":127089,"code":130585,"language":127091,"meta":62,"style":62},"\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",[64,130587,130588,130593,130599,130617,130635,130654,130672],{"__ignoreMap":62},[67,130589,130590],{"class":69,"line":70},[67,130591,130592],{"class":202},"\u002F* 边框分开写法 *\u002F\n",[67,130594,130595,130597],{"class":69,"line":143},[67,130596,52148],{"class":51837},[67,130598,16289],{"class":77},[67,130600,130601,130604,130606,130608,130610,130612,130615],{"class":69,"line":149},[67,130602,130603],{"class":208},"  border-top",[67,130605,51974],{"class":77},[67,130607,1077],{"class":208},[67,130609,52029],{"class":73},[67,130611,52058],{"class":208},[67,130613,130614],{"class":208}," #000",[67,130616,2017],{"class":77},[67,130618,130619,130622,130624,130626,130628,130630,130633],{"class":69,"line":155},[67,130620,130621],{"class":208},"  border-right",[67,130623,51974],{"class":77},[67,130625,939],{"class":208},[67,130627,52029],{"class":73},[67,130629,62778],{"class":208},[67,130631,130632],{"class":208}," #333",[67,130634,2017],{"class":77},[67,130636,130637,130640,130642,130644,130646,130649,130652],{"class":69,"line":161},[67,130638,130639],{"class":208},"  border-bottom",[67,130641,51974],{"class":77},[67,130643,933],{"class":208},[67,130645,52029],{"class":73},[67,130647,130648],{"class":208}," dotted",[67,130650,130651],{"class":208}," #666",[67,130653,2017],{"class":77},[67,130655,130656,130659,130661,130663,130665,130667,130670],{"class":69,"line":167},[67,130657,130658],{"class":208},"  border-left",[67,130660,51974],{"class":77},[67,130662,1077],{"class":208},[67,130664,52029],{"class":73},[67,130666,52058],{"class":208},[67,130668,130669],{"class":208}," #999",[67,130671,2017],{"class":77},[67,130673,130674],{"class":69,"line":173},[67,130675,2288],{"class":77},[815,130677,130678],{"start":155},[818,130679,130680],{},"表格的细线边框",[19,130682,130683],{},"border-collapse 属性控制浏览器绘制表格边框的方式。它控制相邻单元格的边框",[57,130685,130687],{"className":127089,"code":130686,"language":127091,"meta":62,"style":62},"\u002F* 表格细线边框合并 *\u002F\ntable {\n  border-collapse: collapse;\n}\n",[64,130688,130689,130694,130700,130710],{"__ignoreMap":62},[67,130690,130691],{"class":69,"line":70},[67,130692,130693],{"class":202},"\u002F* 表格细线边框合并 *\u002F\n",[67,130695,130696,130698],{"class":69,"line":143},[67,130697,998],{"class":51837},[67,130699,16289],{"class":77},[67,130701,130702,130704,130706,130708],{"class":69,"line":149},[67,130703,71115],{"class":208},[67,130705,51974],{"class":77},[67,130707,65572],{"class":208},[67,130709,2017],{"class":77},[67,130711,130712],{"class":69,"line":155},[67,130713,2288],{"class":77},[19,130715,130716],{},"要知道如果不进行合并的话，单元格之间边框如果原来每个边框1像素，现在就变成了1+1=2像素，边框就会变宽了，所以此时非常合并单元格，保持1像素 border-collapse:collapse",[815,130718,130719],{"start":161},[818,130720,130721],{},"解决边框额外增加盒子的实际大小的方法：",[1863,130723,130724,130727],{},[818,130725,130726],{},"测量盒子大小的时候,不量边框",[818,130728,130729],{},"如果测量的时候包含了边框,则需要 width\u002Fheight 减去边框宽度",[14,130731,130733],{"id":130732},"_912-内边距","9.1.2 内边距",[815,130735,130736,130739],{},[818,130737,130738],{},"padding 属性用于设置内边距，即边框与内容之间的距离",[818,130740,130450],{},[998,130742,130743,130753],{},[1001,130744,130745],{},[1004,130746,130747,130750],{},[1007,130748,130749],{"align":24453},"值的个数",[1007,130751,130752],{"align":24453},"表达意思",[1044,130754,130755,130763,130771,130779],{},[1004,130756,130757,130760],{},[1049,130758,130759],{"align":24453},"padding: 5px;",[1049,130761,130762],{"align":24453},"1个值，代表上下左右都有5个元素",[1004,130764,130765,130768],{},[1049,130766,130767],{"align":24453},"padding: 5px 10px;",[1049,130769,130770],{"align":24453},"2个值，代表上下内边距为5像素，左右内边距为10像素",[1004,130772,130773,130776],{},[1049,130774,130775],{"align":24453},"padding: 5px 10px 20px;",[1049,130777,130778],{"align":24453},"3个值，代表上内边距5像素，左右内边距为10像素，下内边距为20像素",[1004,130780,130781,130784],{},[1049,130782,130783],{"align":24453},"padding: 5px 10px 20px 30px;",[1049,130785,130786],{"align":24453},"4个值，上是5像素，右是10像素，下是20像素，左是30像素，顺时针",[998,130788,130789,130797],{},[1001,130790,130791],{},[1004,130792,130793,130795],{},[1007,130794,129691],{"align":24453},[1007,130796,103233],{"align":24453},[1044,130798,130799,130807,130815,130823],{},[1004,130800,130801,130804],{},[1049,130802,130803],{"align":24453},"padding-left",[1049,130805,130806],{"align":24453},"左内边距",[1004,130808,130809,130812],{},[1049,130810,130811],{"align":24453},"padding-right",[1049,130813,130814],{"align":24453},"右内边距",[1004,130816,130817,130820],{},[1049,130818,130819],{"align":24453},"padding-top",[1049,130821,130822],{"align":24453},"上内边距",[1004,130824,130825,130828],{},[1049,130826,130827],{"align":24453},"padding-bottom",[1049,130829,130830],{"align":24453},"下内边距",[815,130832,130833],{"start":149},[818,130834,130835],{},"内边距会影响盒子的实际大小",[19,130837,130838],{},"当我们给盒子指定 padding 值之后，发生了 2 件事情：",[19,130840,130841],{},"①内容和边框有了距离，添加了内边距",[19,130843,130844],{},"②padding影响了盒子实际大小",[19,130846,130847],{},"内边距对盒子大小的影响：",[19,130849,130850],{},"①如果盒子已经有了宽度和高度，此时再指定内边框，会影响盒子的实际大小，会撑大盒子",[19,130852,130853],{},"②如何盒子本身没有指定width\u002Fheight属性, 则此时padding不会撑开盒子大小",[19,130855,95757],{},[19,130857,130858],{},"如果保证盒子跟效果图大小保持一致，则让 width\u002Fheight 减去多出来的内边距大小即可",[14,130860,130862],{"id":130861},"_913-外边距","9.1.3 外边距",[815,130864,130865],{},[818,130866,130867],{},"控制盒子与盒子之间的距离",[998,130869,130870,130878],{},[1001,130871,130872],{},[1004,130873,130874,130876],{},[1007,130875,129691],{"align":24453},[1007,130877,103233],{"align":24453},[1044,130879,130880,130888,130896,130904],{},[1004,130881,130882,130885],{},[1049,130883,130884],{"align":24453},"margin-left",[1049,130886,130887],{"align":24453},"左外边距",[1004,130889,130890,130893],{},[1049,130891,130892],{"align":24453},"margin-right",[1049,130894,130895],{"align":24453},"右外边距",[1004,130897,130898,130901],{},[1049,130899,130900],{"align":24453},"margin-top",[1049,130902,130903],{"align":24453},"上外边距",[1004,130905,130906,130909],{},[1049,130907,130908],{"align":24453},"margin-bottom",[1049,130910,130911],{"align":24453},"下外边距",[815,130913,130914],{"start":143},[818,130915,130916],{},"外边距可以让块级盒子水平居中的两个条件：",[19,130918,130919],{},"①盒子必须指定了宽度（width）",[19,130921,130922],{},"②盒子左右的外边距都设置为 auto",[57,130924,130926],{"className":127089,"code":130925,"language":127091,"meta":62,"style":62},"\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[64,130927,130928,130933,130940,130956],{"__ignoreMap":62},[67,130929,130930],{"class":69,"line":70},[67,130931,130932],{"class":202},"\u002F* margin 复合写法（同上） *\u002F\n",[67,130934,130935,130938],{"class":69,"line":143},[67,130936,130937],{"class":112},".box",[67,130939,16289],{"class":77},[67,130941,130942,130944,130946,130948,130950,130953],{"class":69,"line":149},[67,130943,71007],{"class":208},[67,130945,51974],{"class":77},[67,130947,1051],{"class":208},[67,130949,52093],{"class":208},[67,130951,130952],{"class":77},";  ",[67,130954,130955],{"class":202},"\u002F* 块级盒子水平居中 *\u002F\n",[67,130957,130958],{"class":69,"line":155},[67,130959,2288],{"class":77},[815,130961,130962],{"start":149},[818,130963,130964],{},"外边距塌陷问题",[19,130966,130967],{},"当盒子中嵌套盒子时，让子盒子与父盒子进行隔开时，对子盒子使用margin时，子盒子并不产生影响，子盒子与父盒子没有隔开，父盒子产生了影响，发生了类似于塌陷的效果",[725,130969],{"style":126945,"src":130970},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-041.png",[19,130972,130973],{},"解决方案：",[19,130975,130976],{},"①可以为父亲元素定义上边距",[57,130978,130979],{"className":127089,"code":130925,"language":127091,"meta":62,"style":62},[64,130980,130981,130985,130991,131005],{"__ignoreMap":62},[67,130982,130983],{"class":69,"line":70},[67,130984,130932],{"class":202},[67,130986,130987,130989],{"class":69,"line":143},[67,130988,130937],{"class":112},[67,130990,16289],{"class":77},[67,130992,130993,130995,130997,130999,131001,131003],{"class":69,"line":149},[67,130994,71007],{"class":208},[67,130996,51974],{"class":77},[67,130998,1051],{"class":208},[67,131000,52093],{"class":208},[67,131002,130952],{"class":77},[67,131004,130955],{"class":202},[67,131006,131007],{"class":69,"line":155},[67,131008,2288],{"class":77},[19,131010,131011],{},"②可以为父亲元素定义上内边距",[19,131013,131014],{},"③可以为父亲元素添加overflow:hidden",[725,131016],{"style":126945,"src":131017},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-042.png",[57,131019,131020],{"className":127089,"code":130925,"language":127091,"meta":62,"style":62},[64,131021,131022,131026,131032,131046],{"__ignoreMap":62},[67,131023,131024],{"class":69,"line":70},[67,131025,130932],{"class":202},[67,131027,131028,131030],{"class":69,"line":143},[67,131029,130937],{"class":112},[67,131031,16289],{"class":77},[67,131033,131034,131036,131038,131040,131042,131044],{"class":69,"line":149},[67,131035,71007],{"class":208},[67,131037,51974],{"class":77},[67,131039,1051],{"class":208},[67,131041,52093],{"class":208},[67,131043,130952],{"class":77},[67,131045,130955],{"class":202},[67,131047,131048],{"class":69,"line":155},[67,131049,2288],{"class":77},[725,131051],{"style":126945,"src":131052},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-043.png",[19,131054,131055],{},"以后如果父盒子给定了宽高，子盒子要实现在父盒子中的居中效果，如果不给父盒子上边框，子盒子的margin对于竖直方向就会失效，但是水平方向不会失效",[19,131057,131058],{},"解决方式：子盒子使用定位；父盒子加边框；父盒子使用overflow:hidden",[14,131060,131062],{"id":131061},"_914-清除内外边距","9.1.4 清除内外边距",[19,131064,131065],{},"网页元素很多都带有默认的内外边距，而且不同浏览器默认的也不一致。因此我们在布局前，首先要清除下网页元素的内外边距",[57,131067,131068],{"className":127089,"code":130925,"language":127091,"meta":62,"style":62},[64,131069,131070,131074,131080,131094],{"__ignoreMap":62},[67,131071,131072],{"class":69,"line":70},[67,131073,130932],{"class":202},[67,131075,131076,131078],{"class":69,"line":143},[67,131077,130937],{"class":112},[67,131079,16289],{"class":77},[67,131081,131082,131084,131086,131088,131090,131092],{"class":69,"line":149},[67,131083,71007],{"class":208},[67,131085,51974],{"class":77},[67,131087,1051],{"class":208},[67,131089,52093],{"class":208},[67,131091,130952],{"class":77},[67,131093,130955],{"class":202},[67,131095,131096],{"class":69,"line":155},[67,131097,2288],{"class":77},[19,131099,131100],{},"注意：行内元素为了照顾兼容性，尽量只设置左右内外边距，不要设置上下内外边距。但是转换为块级和行内块元素就可以了",[14,131102,131104],{"id":131103},"_915-常用ps的基本操作","9.1.5 常用ps的基本操作",[1863,131106,131107,131110,131113,131116,131119,131122],{},[818,131108,131109],{},"文件→打开 ：可以打开我们要测量的图片",[818,131111,131112],{},"Ctrl+R：可以打开标尺，或者 视图→标尺",[818,131114,131115],{},"右击标尺，把里面的单位改为像素",[818,131117,131118],{},"Ctrl+ 加号(+)可以放大视图， Ctrl+ 减号(-)可以缩小视图",[818,131120,131121],{},"按住空格键，鼠标可以变成小手，拖动 PS 视图",[818,131123,131124],{},"用选区拖动 可以测量大小",[725,131126],{"style":126945,"src":131127},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-044.png",[1863,131129,131130,131133],{},[818,131131,131132],{},"Ctrl+ D 可以取消选区，或者在旁边空白处点击一下也可以取消选区",[818,131134,131135],{},"吸管取色工具",[725,131137],{"style":126945,"src":131138},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-045.png",[14,131140,131142],{"id":131141},"_916-案例","9.1.6 案例",[815,131144,131145],{},[818,131146,131147],{},"小米商品",[725,131149],{"style":126945,"src":131150},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-046.png",[57,131152,131153],{"className":127089,"code":130925,"language":127091,"meta":62,"style":62},[64,131154,131155,131159,131165,131179],{"__ignoreMap":62},[67,131156,131157],{"class":69,"line":70},[67,131158,130932],{"class":202},[67,131160,131161,131163],{"class":69,"line":143},[67,131162,130937],{"class":112},[67,131164,16289],{"class":77},[67,131166,131167,131169,131171,131173,131175,131177],{"class":69,"line":149},[67,131168,71007],{"class":208},[67,131170,51974],{"class":77},[67,131172,1051],{"class":208},[67,131174,52093],{"class":208},[67,131176,130952],{"class":77},[67,131178,130955],{"class":202},[67,131180,131181],{"class":69,"line":155},[67,131182,2288],{"class":77},[815,131184,131185],{"start":143},[818,131186,131187],{},"快报模块",[725,131189],{"style":126945,"src":131190},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-047.png",[57,131192,131194],{"className":127836,"code":131193,"language":127838,"meta":62,"style":62},"\u003C!-- HTML 代码示例 -->\n\u003Cdiv class=\"example\">\n  示例内容\n\u003C\u002Fdiv>\n",[64,131195,131196,131201,131216,131221],{"__ignoreMap":62},[67,131197,131198],{"class":69,"line":70},[67,131199,131200],{"class":202},"\u003C!-- HTML 代码示例 -->\n",[67,131202,131203,131205,131207,131209,131211,131214],{"class":69,"line":143},[67,131204,1766],{"class":77},[67,131206,52148],{"class":51837},[67,131208,54023],{"class":112},[67,131210,909],{"class":77},[67,131212,131213],{"class":84},"\"example\"",[67,131215,51844],{"class":77},[67,131217,131218],{"class":69,"line":149},[67,131219,131220],{"class":77},"  示例内容\n",[67,131222,131223,131225,131227],{"class":69,"line":155},[67,131224,52322],{"class":77},[67,131226,52148],{"class":51837},[67,131228,51844],{"class":77},[14,131230,131232],{"id":131231},"_917-盒子模型css中所用到的其他样式","9.1.7 盒子模型css中所用到的其他样式",[815,131234,131235],{},[818,131236,131237],{},"圆角边框",[19,131239,131240],{},"圆角边框的原理为拿着设定半径的圆去矩形等形状的角位置去截弧",[725,131242],{"style":126945,"src":131243},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-048.png",[57,131245,131247],{"className":127089,"code":131246,"language":127091,"meta":62,"style":62},"div {\n  border: 1px solid #ccc;\n}\n",[64,131248,131249,131255,131271],{"__ignoreMap":62},[67,131250,131251,131253],{"class":69,"line":70},[67,131252,52148],{"class":51837},[67,131254,16289],{"class":77},[67,131256,131257,131259,131261,131263,131265,131267,131269],{"class":69,"line":143},[67,131258,71433],{"class":208},[67,131260,51974],{"class":77},[67,131262,1077],{"class":208},[67,131264,52029],{"class":73},[67,131266,52058],{"class":208},[67,131268,130481],{"class":208},[67,131270,2017],{"class":77},[67,131272,131273],{"class":69,"line":149},[67,131274,2288],{"class":77},[19,131276,131277],{},"解释:",[1863,131279,131280,131283,131286,131289,131292],{},[818,131281,131282],{},"参数值可以为数值或百分比的形式",[818,131284,131285],{},"如果是正方形，想要设置为一个圆，把数值修改为高度或者宽度的一半即可，或者直接写为 50%",[818,131287,131288],{},"该属性是一个简写属性，可以跟四个值，分别代表左上角、右上角、右下角、左下角",[818,131290,131291],{},"分开写：border-top-left-radius、border-top-right-radius、border-bottom-right-radius 和border-bottom-left-radius",[818,131293,131294],{},"兼容性 ie9+ 浏览器支持, 但是不会影响页面布局,可以放心使用",[815,131296,131297],{"start":143},[818,131298,131299],{},"盒子阴影",[57,131301,131303],{"className":127089,"code":131302,"language":127091,"meta":62,"style":62},"div {\n  box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);\n}\n",[64,131304,131305,131311,131348],{"__ignoreMap":62},[67,131306,131307,131309],{"class":69,"line":70},[67,131308,52148],{"class":51837},[67,131310,16289],{"class":77},[67,131312,131313,131316,131318,131320,131322,131324,131326,131328,131330,131332,131334,131336,131338,131340,131342,131344,131346],{"class":69,"line":143},[67,131314,131315],{"class":208},"  box-shadow",[67,131317,51974],{"class":77},[67,131319,1051],{"class":208},[67,131321,15472],{"class":208},[67,131323,52029],{"class":73},[67,131325,2760],{"class":208},[67,131327,52029],{"class":73},[67,131329,79304],{"class":208},[67,131331,864],{"class":77},[67,131333,1051],{"class":208},[67,131335,13153],{"class":77},[67,131337,1051],{"class":208},[67,131339,13153],{"class":77},[67,131341,1051],{"class":208},[67,131343,13153],{"class":77},[67,131345,86747],{"class":208},[67,131347,3440],{"class":77},[67,131349,131350],{"class":69,"line":149},[67,131351,2288],{"class":77},[998,131353,131354,131362],{},[1001,131355,131356],{},[1004,131357,131358,131360],{},[1007,131359,1012],{"align":24453},[1007,131361,28026],{"align":24453},[1044,131363,131364,131372,131380,131388,131396,131404],{},[1004,131365,131366,131369],{},[1049,131367,131368],{"align":24453},"h-shadow",[1049,131370,131371],{"align":24453},"必需,水平阴影的位置,允许负值",[1004,131373,131374,131377],{},[1049,131375,131376],{"align":24453},"v-shadow",[1049,131378,131379],{"align":24453},"必需,垂直阴影的位置,允许负值",[1004,131381,131382,131385],{},[1049,131383,131384],{"align":24453},"blur",[1049,131386,131387],{"align":24453},"可选,模糊距离,就是影子的虚实",[1004,131389,131390,131393],{},[1049,131391,131392],{"align":24453},"spread",[1049,131394,131395],{"align":24453},"可选,阴影尺寸",[1004,131397,131398,131401],{},[1049,131399,131400],{"align":24453},"color",[1049,131402,131403],{"align":24453},"可选,阴影的颜色",[1004,131405,131406,131409],{},[1049,131407,131408],{"align":24453},"inset",[1049,131410,131411],{"align":24453},"可选,将外部阴影(outset)改为内部阴影",[815,131413,131414],{"start":149},[818,131415,131416],{},"文字阴影",[57,131418,131420],{"className":127089,"code":131419,"language":127091,"meta":62,"style":62},"p {\n  text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.3);\n}\n",[64,131421,131422,131428,131467],{"__ignoreMap":62},[67,131423,131424,131426],{"class":69,"line":70},[67,131425,19],{"class":51837},[67,131427,16289],{"class":77},[67,131429,131430,131433,131435,131437,131439,131441,131443,131445,131447,131449,131451,131453,131455,131457,131459,131461,131463,131465],{"class":69,"line":143},[67,131431,131432],{"class":208},"  text-shadow",[67,131434,51974],{"class":77},[67,131436,1077],{"class":208},[67,131438,52029],{"class":73},[67,131440,25828],{"class":208},[67,131442,52029],{"class":73},[67,131444,15472],{"class":208},[67,131446,52029],{"class":73},[67,131448,79304],{"class":208},[67,131450,864],{"class":77},[67,131452,1051],{"class":208},[67,131454,13153],{"class":77},[67,131456,1051],{"class":208},[67,131458,13153],{"class":77},[67,131460,1051],{"class":208},[67,131462,13153],{"class":77},[67,131464,101058],{"class":208},[67,131466,3440],{"class":77},[67,131468,131469],{"class":69,"line":149},[67,131470,2288],{"class":77},[998,131472,131473,131481],{},[1001,131474,131475],{},[1004,131476,131477,131479],{},[1007,131478,1012],{"align":24453},[1007,131480,28026],{"align":24453},[1044,131482,131483,131489,131496,131503],{},[1004,131484,131485,131487],{},[1049,131486,131368],{"align":24453},[1049,131488,131371],{"align":24453},[1004,131490,131491,131493],{},[1049,131492,131376],{"align":24453},[1049,131494,131495],{"align":24453},"必需,垂直阴影位置,允许负值",[1004,131497,131498,131500],{},[1049,131499,131384],{"align":24453},[1049,131501,131502],{"align":24453},"可选,模糊的距离",[1004,131504,131505,131507],{},[1049,131506,131400],{"align":24453},[1049,131508,131403],{"align":24453},[803,131510,131512],{"id":131511},"_92-浮动","9.2 浮动",[14,131514,131516],{"id":131515},"_921-浮动介绍","9.2.1 浮动介绍",[19,131518,131519],{},"在16.2中详细介绍",[14,131521,131523],{"id":131522},"_922-清除浮动","9.2.2 清除浮动",[815,131525,131526,131529],{},[818,131527,131528],{},"原因：由于父级盒子很多情况下，不方便给高度，但是子盒子浮动又不占有位置，最后父级盒子高度为 0 时，就会影响下面的标准流盒子",[818,131530,131531],{},"清除浮动的本质",[19,131533,131534],{},"清除浮动的本质是清除浮动元素造成的影响：浮动的子标签无法撑开父盒子的高度",[19,131536,9744],{},[1863,131538,131539,131542,131545],{},[818,131540,131541],{},"如果父盒子本身有高度，则不需要清除浮动",[818,131543,131544],{},"清除浮动之后，父级就会根据浮动的子盒子自动检测高度",[818,131546,131547],{},"父级有了高度，就不会影响下面的标准流了",[815,131549,131550],{"start":149},[818,131551,131552],{},"清除浮动样式",[57,131554,131556],{"className":127089,"code":131555,"language":127091,"meta":62,"style":62},".left {\n  float: left;\n}\n.right {\n  float: right;\n}\n",[64,131557,131558,131565,131576,131580,131587,131597],{"__ignoreMap":62},[67,131559,131560,131563],{"class":69,"line":70},[67,131561,131562],{"class":112},".left",[67,131564,16289],{"class":77},[67,131566,131567,131570,131572,131574],{"class":69,"line":143},[67,131568,131569],{"class":208},"  float",[67,131571,51974],{"class":77},[67,131573,24453],{"class":208},[67,131575,2017],{"class":77},[67,131577,131578],{"class":69,"line":149},[67,131579,2288],{"class":77},[67,131581,131582,131585],{"class":69,"line":155},[67,131583,131584],{"class":112},".right",[67,131586,16289],{"class":77},[67,131588,131589,131591,131593,131595],{"class":69,"line":161},[67,131590,131569],{"class":208},[67,131592,51974],{"class":77},[67,131594,73059],{"class":208},[67,131596,2017],{"class":77},[67,131598,131599],{"class":69,"line":167},[67,131600,2288],{"class":77},[998,131602,131603,131611],{},[1001,131604,131605],{},[1004,131606,131607,131609],{},[1007,131608,127553],{"align":24453},[1007,131610,28026],{"align":24453},[1044,131612,131613,131620,131627],{},[1004,131614,131615,131617],{},[1049,131616,24453],{"align":24453},[1049,131618,131619],{"align":24453},"不允许左侧有浮动元素（清除左侧浮动的影响）",[1004,131621,131622,131624],{},[1049,131623,73059],{"align":24453},[1049,131625,131626],{"align":24453},"不允许右侧有浮动元素（清除右侧浮动的影响）",[1004,131628,131629,131632],{},[1049,131630,131631],{"align":24453},"both",[1049,131633,131634],{"align":24453},"同时清除左右侧浮动的影响",[19,131636,131637],{},"法一",[19,131639,131640],{},"额外标签法也称为隔墙法",[19,131642,131643],{},"使用方式：",[19,131645,131646],{},"额外标签法会在浮动元素末尾添加一个空的标签。",[57,131648,131649],{"className":127089,"code":131555,"language":127091,"meta":62,"style":62},[64,131650,131651,131657,131667,131671,131677,131687],{"__ignoreMap":62},[67,131652,131653,131655],{"class":69,"line":70},[67,131654,131562],{"class":112},[67,131656,16289],{"class":77},[67,131658,131659,131661,131663,131665],{"class":69,"line":143},[67,131660,131569],{"class":208},[67,131662,51974],{"class":77},[67,131664,24453],{"class":208},[67,131666,2017],{"class":77},[67,131668,131669],{"class":69,"line":149},[67,131670,2288],{"class":77},[67,131672,131673,131675],{"class":69,"line":155},[67,131674,131584],{"class":112},[67,131676,16289],{"class":77},[67,131678,131679,131681,131683,131685],{"class":69,"line":161},[67,131680,131569],{"class":208},[67,131682,51974],{"class":77},[67,131684,73059],{"class":208},[67,131686,2017],{"class":77},[67,131688,131689],{"class":69,"line":167},[67,131690,2288],{"class":77},[19,131692,131693],{},"both这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方",[19,131695,131696],{},"优点： 通俗易懂，书写方便",[19,131698,131699],{},"缺点： 添加许多无意义的标签，结构化较差",[19,131701,131702],{},"注意： 要求这个新的空标签必须是块级元素。",[19,131704,131705],{},"法二",[19,131707,131708],{},"父级添加overflow属性",[57,131710,131711],{"className":127089,"code":131555,"language":127091,"meta":62,"style":62},[64,131712,131713,131719,131729,131733,131739,131749],{"__ignoreMap":62},[67,131714,131715,131717],{"class":69,"line":70},[67,131716,131562],{"class":112},[67,131718,16289],{"class":77},[67,131720,131721,131723,131725,131727],{"class":69,"line":143},[67,131722,131569],{"class":208},[67,131724,51974],{"class":77},[67,131726,24453],{"class":208},[67,131728,2017],{"class":77},[67,131730,131731],{"class":69,"line":149},[67,131732,2288],{"class":77},[67,131734,131735,131737],{"class":69,"line":155},[67,131736,131584],{"class":112},[67,131738,16289],{"class":77},[67,131740,131741,131743,131745,131747],{"class":69,"line":161},[67,131742,131569],{"class":208},[67,131744,51974],{"class":77},[67,131746,73059],{"class":208},[67,131748,2017],{"class":77},[67,131750,131751],{"class":69,"line":167},[67,131752,2288],{"class":77},[19,131754,131755],{},"overflow: hidden;",[19,131757,131758],{},"优点：代码简洁",[19,131760,131761],{},"缺点：无法显示溢出的部分",[19,131763,131764],{},"注意：是给父元素添加代码",[19,131766,131767],{},"法三",[19,131769,131770],{},"父级添加after伪元素",[19,131772,131773,131776],{},[131774,131775],"after",{}," 方式是额外标签法的升级版",[19,131778,131779],{},"使用的时候复制就可以",[57,131781,131782],{"className":127089,"code":131555,"language":127091,"meta":62,"style":62},[64,131783,131784,131790,131800,131804,131810,131820],{"__ignoreMap":62},[67,131785,131786,131788],{"class":69,"line":70},[67,131787,131562],{"class":112},[67,131789,16289],{"class":77},[67,131791,131792,131794,131796,131798],{"class":69,"line":143},[67,131793,131569],{"class":208},[67,131795,51974],{"class":77},[67,131797,24453],{"class":208},[67,131799,2017],{"class":77},[67,131801,131802],{"class":69,"line":149},[67,131803,2288],{"class":77},[67,131805,131806,131808],{"class":69,"line":155},[67,131807,131584],{"class":112},[67,131809,16289],{"class":77},[67,131811,131812,131814,131816,131818],{"class":69,"line":161},[67,131813,131569],{"class":208},[67,131815,51974],{"class":77},[67,131817,73059],{"class":208},[67,131819,2017],{"class":77},[67,131821,131822],{"class":69,"line":167},[67,131823,2288],{"class":77},[19,131825,131826],{},"优点：没有增加标签，结构更简单",[19,131828,131829],{},"缺点：照顾低版本浏览器",[19,131831,131832],{},"代表网站： 百度、淘宝网、网易等",[19,131834,131835],{},"法四",[19,131837,131838],{},"父级添加双伪元素",[57,131840,131841],{"className":127089,"code":131555,"language":127091,"meta":62,"style":62},[64,131842,131843,131849,131859,131863,131869,131879],{"__ignoreMap":62},[67,131844,131845,131847],{"class":69,"line":70},[67,131846,131562],{"class":112},[67,131848,16289],{"class":77},[67,131850,131851,131853,131855,131857],{"class":69,"line":143},[67,131852,131569],{"class":208},[67,131854,51974],{"class":77},[67,131856,24453],{"class":208},[67,131858,2017],{"class":77},[67,131860,131861],{"class":69,"line":149},[67,131862,2288],{"class":77},[67,131864,131865,131867],{"class":69,"line":155},[67,131866,131584],{"class":112},[67,131868,16289],{"class":77},[67,131870,131871,131873,131875,131877],{"class":69,"line":161},[67,131872,131569],{"class":208},[67,131874,51974],{"class":77},[67,131876,73059],{"class":208},[67,131878,2017],{"class":77},[67,131880,131881],{"class":69,"line":167},[67,131882,2288],{"class":77},[19,131884,131885],{},"优点：代码更简洁",[19,131887,131829],{},[19,131889,131890],{},"代表网站：小米、腾讯等",[803,131892,131894],{"id":131893},"_93-ps切图","9.3 PS切图",[14,131896,131898],{"id":131897},"_931-常见图片格式","9.3.1 常见图片格式",[998,131900,131901,131911],{},[1001,131902,131903],{},[1004,131904,131905,131908],{},[1007,131906,131907],{"align":24453},"jpg图像格式",[1007,131909,131910],{"align":24453},"对色彩的信息保留较好，高清，颜色较多，产品类的图片经常用",[1044,131912,131913,131921,131929],{},[1004,131914,131915,131918],{},[1049,131916,131917],{"align":24453},"gif图像格式",[1049,131919,131920],{"align":24453},"最多只能储存256色，通常用来显示简单图形及字体，但是可以保存透明背景和动画效果，实际经常用于一些图片小动画效果",[1004,131922,131923,131926],{},[1049,131924,131925],{"align":24453},"png图像格式",[1049,131927,131928],{"align":24453},"是一种新型的网络图形格式，结合了GIF和JPEG的优点，具有存储形式丰富的特点，能够保持透明背景。如果想要切成背景透明的图片，选择png格式",[1004,131930,131931,131934],{},[1049,131932,131933],{"align":24453},"PSD图像格式",[1049,131935,131936],{"align":24453},"Photoshop的专用格式，里面可以存放图层、通道、遮罩等多种设计稿，对前端人员来说，最大的优点，可以直接从上面复制文字，获得图片，还可以测量大小和距离，不能直接放到页面",[14,131938,131940],{"id":131939},"_932-图层切图","9.3.2 图层切图",[19,131942,131943],{},"最简单的切图方式：右击图层 → 导出 → 切片",[19,131945,131946],{},"按住shift选中两个图层->图层菜单->合并图层",[14,131948,131950],{"id":131949},"_933-切片切图","9.3.3 切片切图",[1863,131952,131953,131956],{},[818,131954,131955],{},"利用切片工具手动划出",[818,131957,131958],{},"文件菜单 → 存储为 web 设备所用格式 → 选择我们要的图片格式 → 存储",[14,131960,131962],{"id":131961},"_934-切图步骤","9.3.4 切图步骤",[19,131964,131965],{},"用切片工具选中：",[725,131967],{"style":126945,"src":131968},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-049.png",[19,131970,131971],{},"文件 -> 导出",[725,131973],{"style":126945,"src":131974},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-050.png",[779,131976,131977],{},"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":62,"searchDepth":143,"depth":143,"links":131979},[131980,131989,131993],{"id":130416,"depth":143,"text":130417,"children":131981},[131982,131983,131984,131985,131986,131987,131988],{"id":130441,"depth":149,"text":130442},{"id":130732,"depth":149,"text":130733},{"id":130861,"depth":149,"text":130862},{"id":131061,"depth":149,"text":131062},{"id":131103,"depth":149,"text":131104},{"id":131141,"depth":149,"text":131142},{"id":131231,"depth":149,"text":131232},{"id":131511,"depth":143,"text":131512,"children":131990},[131991,131992],{"id":131515,"depth":149,"text":131516},{"id":131522,"depth":149,"text":131523},{"id":131893,"depth":143,"text":131894,"children":131994},[131995,131996,131997,131998],{"id":131897,"depth":149,"text":131898},{"id":131939,"depth":149,"text":131940},{"id":131949,"depth":149,"text":131950},{"id":131961,"depth":149,"text":131962},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch09-css",{"title":130408,"description":24093},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图","ylnbHzfjeKRot9DLo6XlwzZ1JmiwKHwMG_dAza53z78",{"id":132005,"title":132006,"body":132007,"description":24093,"extension":787,"meta":132648,"navigation":176,"path":132649,"seo":132650,"stem":132651,"__hash__":132652},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例.md","10. CSS规范与学成在线案例",{"type":7,"value":132008,"toc":132636},[132009,132012,132016,132042,132076,132080,132084,132087,132129,132136,132146,132154,132156,132159,132162,132165,132172,132186,132190,132193,132222,132226,132229,132243,132247,132250,132278,132282,132285,132311,132315,132320,132353,132358,132386,132390,132407,132453,132458,132502,132519,132626,132634],[10,132010,132006],{"id":132011},"_10-css规范与学成在线案例",[803,132013,132015],{"id":132014},"_101-css属性书写顺序","10.1 CSS属性书写顺序",[815,132017,132018,132024,132030,132036],{},[818,132019,132020,132023],{},[336,132021,132022],{},"布局定位属性"," ：display \u002F position \u002F float \u002F clear \u002F visibility \u002F overflow（建议 display 第一个写，毕竟关系到模式）",[818,132025,132026,132029],{},[336,132027,132028],{},"自身属性"," ：width \u002F height \u002F margin \u002F padding \u002F border \u002F background",[818,132031,132032,132035],{},[336,132033,132034],{},"文本属性"," ：color \u002F font \u002F text-decoration \u002F text-align \u002F vertical-align \u002F white- space \u002F break-word",[818,132037,132038,132041],{},[336,132039,132040],{},"其他属性（CSS3）"," ：content \u002F cursor \u002F border-radius \u002F box-shadow \u002F text-shadow \u002F background:linear-gradient …",[57,132043,132044],{"className":127089,"code":130453,"language":127091,"meta":62,"style":62},[64,132045,132046,132050,132056,132072],{"__ignoreMap":62},[67,132047,132048],{"class":69,"line":70},[67,132049,130460],{"class":202},[67,132051,132052,132054],{"class":69,"line":143},[67,132053,52148],{"class":51837},[67,132055,16289],{"class":77},[67,132057,132058,132060,132062,132064,132066,132068,132070],{"class":69,"line":149},[67,132059,71433],{"class":208},[67,132061,51974],{"class":77},[67,132063,1077],{"class":208},[67,132065,52029],{"class":73},[67,132067,52058],{"class":208},[67,132069,130481],{"class":208},[67,132071,2017],{"class":77},[67,132073,132074],{"class":69,"line":155},[67,132075,2288],{"class":77},[803,132077,132079],{"id":132078},"_102-学成在线案例反思总结","10.2 学成在线案例反思总结",[14,132081,132083],{"id":132082},"_1021-header头部制作","10.2.1 header头部制作",[725,132085],{"style":126945,"src":132086},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-051.png",[1863,132088,132089,132096,132103,132109,132116,132123],{},[818,132090,132091,132092,132095],{},"1号是版心盒子 ",[336,132093,132094],{},"header"," 1200 * 42 的盒子水平居中对齐, 上下给一个margin值就好了",[818,132097,132098,132099,132102],{},"版心盒子 里面包含 2号盒子 ",[336,132100,132101],{},"logo"," 图标",[818,132104,132105,132106,132108],{},"版心盒子 里面包含 3号盒子 ",[336,132107,54250],{}," 导航栏",[818,132110,132111,132112,132115],{},"版心盒子 里面包含 4号盒子 ",[336,132113,132114],{},"search"," 搜索框",[818,132117,132118,132119,132122],{},"版心盒子 里面包含 5号盒子 ",[336,132120,132121],{},"user"," 个人信息",[818,132124,132125,132126],{},"注意，要求里面的 ",[336,132127,132128],{},"4个子盒子 必须都浮动",[815,132130,132131],{},[818,132132,132133],{},[336,132134,132135],{},"导航栏注意点:",[19,132137,132138,132139,132142,132143],{},"实际开发中， ",[336,132140,132141],{},"重要的****导航栏","，我们不会直接用链接a ，而是 ",[336,132144,132145],{},"用 li 包含链接(li+a)的做法",[1863,132147,132148,132151],{},[818,132149,132150],{},"li+a 语义更清晰，一看这就是有条理的列表型内容",[818,132152,132153],{},"如果直接用a，搜索引擎容易辨别为有堆砌关键字嫌疑（故意堆砌关键字容易被搜索引擎有降权的风险），从而影响网站排名",[19,132155,9744],{},[19,132157,132158],{},"  ①让导航栏一行显示, 给 li 加浮动, 因为 li 是块级元素, 需要一行显示",[19,132160,132161],{},"  ②这个nav导航栏可以不给宽度,将来可以继续添加其余文字",[19,132163,132164],{},"  ③因为导航栏里面文字不一样多,所以最好给链接 a 左右padding 撑开盒子,而不是指定宽度",[815,132166,132167],{"start":143},[818,132168,132169],{},[336,132170,132171],{},"4号盒子search的细节：",[1863,132173,132174,132177,132180],{},[818,132175,132176],{},"search 搜索框的意思: 一个 search 大盒子里面包含 2个 表单",[818,132178,132179],{},"技巧：input和button都，属于行内块元素，会有缝隙，使用浮动，可以去缝隙",[818,132181,132182,132185],{},[64,132183,132184],{},"\u003Cbutton>``\u003C\u002Fbutton>","按钮不能忘，按钮要手动去除边框",[14,132187,132189],{"id":132188},"_1022-banner制作","10.2.2 banner制作",[725,132191],{"style":126945,"src":132192},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-052.png",[1863,132194,132195,132202,132208,132215],{},[818,132196,132197,132198,132201],{},"1号盒子是通栏的大盒子 ",[336,132199,132200],{},"banner"," ， 不给宽度，给高度，给一个蓝色背景",[818,132203,132204,132205,132207],{},"2号盒子是版心 ",[336,132206,1651],{}," ， 要水平居中对齐",[818,132209,132210,132211,132214],{},"3号盒子版心内，左对齐 ",[336,132212,132213],{},"subnav"," 侧导航栏",[818,132216,132217,132218,132221],{},"4号盒子版心内，右对齐 ",[336,132219,132220],{},"course"," 课程",[14,132223,132225],{"id":132224},"_1023-精品推荐小模块","10.2.3 精品推荐小模块",[725,132227],{"style":126945,"src":132228},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-053.png",[1863,132230,132231,132234,132237,132240],{},[818,132232,132233],{},"大盒子水平居中 goods 精品 ，注意此处有个盒子阴影",[818,132235,132236],{},"1号盒子是标题 H3 左侧浮动",[818,132238,132239],{},"2号盒子 里面放链接 左侧浮动goods-item距离可以控制链接的 左右外边距（注意行内元素只给左右内外边距）",[818,132241,132242],{},"3号盒子 右浮动 mod 修改",[14,132244,132246],{"id":132245},"_1024-精品推荐大模块","10.2.4 精品推荐大模块",[725,132248],{"style":126945,"src":132249},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-054.png",[1863,132251,132252,132258,132265,132272,132275],{},[818,132253,132254,132255,132257],{},"1号盒子为最大的盒子 ",[336,132256,54251],{}," 版心水平居中对齐",[818,132259,132260,132261,132264],{},"2号盒子为上面部分 ",[336,132262,132263],{},"box-hd"," -- 里面 左侧标题H3 左浮动 右侧 链接 a 右浮动",[818,132266,132267,132268,132271],{},"3号盒子为底下部分 ",[336,132269,132270],{},"box-bd"," --- 里面是无序列表 有 10个 小li 组成",[818,132273,132274],{},"小li 外边距的问题， 在使用li的时候可能因为外边距的问题导致最后一个li盒子在这一行是放不开的，此时可以对ul进行处理，让ul大一点，大的那一块反正是外边距，所以不会有任何的影响，这样就不需要再单独写类选择器，对放不下的li盒子进行处理",[818,132276,132277],{},"复习点：我们用到清除浮动，因为 box-hd 里面的盒子个数不一定是多少，所以我们就不给高度了，但是里面的盒子浮动会影响下面的布局，因此需要清除浮动。",[14,132279,132281],{"id":132280},"_1025-底部模块制作","10.2.5 底部模块制作",[725,132283],{"style":126945,"src":132284},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-055.png",[1863,132286,132287,132294,132297,132304],{},[818,132288,132289,132290,132293],{},"1号盒子通栏大盒子 底部 ",[336,132291,132292],{},"footer"," 给高度 底色是白色",[818,132295,132296],{},"2号盒子版心水平居中",[818,132298,132299,132300,132303],{},"3号盒子版权 ",[336,132301,132302],{},"copyright"," 左对齐",[818,132305,132306,132307,132310],{},"4号盒子 链接组 ",[336,132308,132309],{},"links"," 右对齐",[14,132312,132314],{"id":132313},"_1026-代码模块","10.2.6 代码模块",[815,132316,132317],{},[818,132318,132319],{},"html部分",[57,132321,132323],{"className":127836,"code":132322,"language":127838,"meta":62,"style":62},"\u003Ca href=\"https:\u002F\u002Fexample.com\" target=\"_blank\">链接文字\u003C\u002Fa>\n",[64,132324,132325],{"__ignoreMap":62},[67,132326,132327,132329,132331,132333,132335,132338,132341,132343,132346,132349,132351],{"class":69,"line":70},[67,132328,1766],{"class":77},[67,132330,28],{"class":51837},[67,132332,61594],{"class":112},[67,132334,909],{"class":77},[67,132336,132337],{"class":84},"\"https:\u002F\u002Fexample.com\"",[67,132339,132340],{"class":112}," target",[67,132342,909],{"class":77},[67,132344,132345],{"class":84},"\"_blank\"",[67,132347,132348],{"class":77},">链接文字\u003C\u002F",[67,132350,28],{"class":51837},[67,132352,51844],{"class":77},[815,132354,132355],{"start":143},[818,132356,132357],{},"css部分",[57,132359,132360],{"className":127836,"code":132322,"language":127838,"meta":62,"style":62},[64,132361,132362],{"__ignoreMap":62},[67,132363,132364,132366,132368,132370,132372,132374,132376,132378,132380,132382,132384],{"class":69,"line":70},[67,132365,1766],{"class":77},[67,132367,28],{"class":51837},[67,132369,61594],{"class":112},[67,132371,909],{"class":77},[67,132373,132337],{"class":84},[67,132375,132340],{"class":112},[67,132377,909],{"class":77},[67,132379,132345],{"class":84},[67,132381,132348],{"class":77},[67,132383,28],{"class":51837},[67,132385,51844],{"class":77},[14,132387,132389],{"id":132388},"_1027-收获","10.2.7 收获",[815,132391,132392,132395,132398,132401,132404],{},[818,132393,132394],{},"先确定版心，然后写一个类选择器，直接后边的就直接调用这个类选择器就可以",[818,132396,132397],{},"在设置导航栏时，对于横的导航栏对li设置浮动，对a设置大小就可以，对于竖的导航栏对li设置宽高，以后这样做，保证书写规范",[818,132399,132400],{},"行内块元素之间有空隙，解决的一个好方法是设置浮动",[818,132402,132403],{},"设置用户的时候要灵活使用img标签，一个盒子放头像和名字",[818,132405,132406],{},"遗忘代码",[57,132408,132410],{"className":127089,"code":132409,"language":127091,"meta":62,"style":62},"div, p, h1, ul, li {\n  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n  display: block;\n}\n",[64,132411,132412,132434,132439,132449],{"__ignoreMap":62},[67,132413,132414,132416,132418,132420,132422,132424,132426,132428,132430,132432],{"class":69,"line":70},[67,132415,52148],{"class":51837},[67,132417,13153],{"class":77},[67,132419,19],{"class":51837},[67,132421,13153],{"class":77},[67,132423,10],{"class":51837},[67,132425,13153],{"class":77},[67,132427,1863],{"class":51837},[67,132429,13153],{"class":77},[67,132431,818],{"class":51837},[67,132433,16289],{"class":77},[67,132435,132436],{"class":69,"line":143},[67,132437,132438],{"class":202},"  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n",[67,132440,132441,132443,132445,132447],{"class":69,"line":149},[67,132442,128705],{"class":208},[67,132444,51974],{"class":77},[67,132446,61406],{"class":208},[67,132448,2017],{"class":77},[67,132450,132451],{"class":69,"line":155},[67,132452,2288],{"class":77},[815,132454,132455],{"start":167},[818,132456,132457],{},"html引css的程序",[57,132459,132460],{"className":127089,"code":132409,"language":127091,"meta":62,"style":62},[64,132461,132462,132484,132488,132498],{"__ignoreMap":62},[67,132463,132464,132466,132468,132470,132472,132474,132476,132478,132480,132482],{"class":69,"line":70},[67,132465,52148],{"class":51837},[67,132467,13153],{"class":77},[67,132469,19],{"class":51837},[67,132471,13153],{"class":77},[67,132473,10],{"class":51837},[67,132475,13153],{"class":77},[67,132477,1863],{"class":51837},[67,132479,13153],{"class":77},[67,132481,818],{"class":51837},[67,132483,16289],{"class":77},[67,132485,132486],{"class":69,"line":143},[67,132487,132438],{"class":202},[67,132489,132490,132492,132494,132496],{"class":69,"line":149},[67,132491,128705],{"class":208},[67,132493,51974],{"class":77},[67,132495,61406],{"class":208},[67,132497,2017],{"class":77},[67,132499,132500],{"class":69,"line":155},[67,132501,2288],{"class":77},[815,132503,132504,132507,132510,132513,132516],{"start":173},[818,132505,132506],{},"浮动的盒子不会有外边距合并问题",[818,132508,132509],{},"子盒子没有设置宽高，是直接继承父盒子的宽高的，此时给子盒子设置padding,是不会撑大父盒子的，可以理解为已经约束了子盒子，子盒子在确定空间中再如何动，也不会打破空间",[818,132511,132512],{},"ctrl+g快速定位行；shift+alt多个光标",[818,132514,132515],{},"学习上方各个模块的选择器起名方法，以后就这样用",[818,132517,132518],{},"在写选择器时尽量写全一些，例如",[57,132520,132522],{"className":127089,"code":132521,"language":127091,"meta":62,"style":62},"\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",[64,132523,132524,132529,132545,132550,132565,132570,132585,132590,132605,132610],{"__ignoreMap":62},[67,132525,132526],{"class":69,"line":70},[67,132527,132528],{"class":202},"\u002F* 静态定位（默认） *\u002F\n",[67,132530,132531,132534,132536,132538,132540,132543],{"class":69,"line":143},[67,132532,132533],{"class":112},".static",[67,132535,80344],{"class":77},[67,132537,129449],{"class":208},[67,132539,51974],{"class":77},[67,132541,132542],{"class":208},"static",[67,132544,130019],{"class":77},[67,132546,132547],{"class":69,"line":149},[67,132548,132549],{"class":202},"\u002F* 相对定位 *\u002F\n",[67,132551,132552,132555,132557,132559,132561,132563],{"class":69,"line":155},[67,132553,132554],{"class":112},".relative",[67,132556,80344],{"class":77},[67,132558,129449],{"class":208},[67,132560,51974],{"class":77},[67,132562,55301],{"class":208},[67,132564,130019],{"class":77},[67,132566,132567],{"class":69,"line":161},[67,132568,132569],{"class":202},"\u002F* 绝对定位 *\u002F\n",[67,132571,132572,132575,132577,132579,132581,132583],{"class":69,"line":167},[67,132573,132574],{"class":112},".absolute",[67,132576,80344],{"class":77},[67,132578,129449],{"class":208},[67,132580,51974],{"class":77},[67,132582,55368],{"class":208},[67,132584,130019],{"class":77},[67,132586,132587],{"class":69,"line":173},[67,132588,132589],{"class":202},"\u002F* 固定定位 *\u002F\n",[67,132591,132592,132595,132597,132599,132601,132603],{"class":69,"line":180},[67,132593,132594],{"class":112},".fixed",[67,132596,80344],{"class":77},[67,132598,129449],{"class":208},[67,132600,51974],{"class":77},[67,132602,86770],{"class":208},[67,132604,130019],{"class":77},[67,132606,132607],{"class":69,"line":186},[67,132608,132609],{"class":202},"\u002F* 粘性定位 *\u002F\n",[67,132611,132612,132615,132617,132619,132621,132624],{"class":69,"line":444},[67,132613,132614],{"class":112},".sticky",[67,132616,80344],{"class":77},[67,132618,129449],{"class":208},[67,132620,51974],{"class":77},[67,132622,132623],{"class":208},"sticky",[67,132625,130019],{"class":77},[815,132627,132628,132631],{"start":2340},[818,132629,132630],{},"一定要用好注释",[818,132632,132633],{},"浮动的盒子不会有外边距合并的问题",[779,132635,131977],{},{"title":62,"searchDepth":143,"depth":143,"links":132637},[132638,132639],{"id":132014,"depth":143,"text":132015},{"id":132078,"depth":143,"text":132079,"children":132640},[132641,132642,132643,132644,132645,132646,132647],{"id":132082,"depth":149,"text":132083},{"id":132188,"depth":149,"text":132189},{"id":132224,"depth":149,"text":132225},{"id":132245,"depth":149,"text":132246},{"id":132280,"depth":149,"text":132281},{"id":132313,"depth":149,"text":132314},{"id":132388,"depth":149,"text":132389},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch10-css",{"title":132006,"description":24093},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例","FzyF0-YC56Akf2OLJPi7lkaiI8deiVEFNwhHCIOG39Y",{"id":132654,"title":132655,"body":132656,"description":24093,"extension":787,"meta":134142,"navigation":176,"path":134143,"seo":134144,"stem":134145,"__hash__":134146},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系.md","11. 传统布局与定位体系",{"type":7,"value":132657,"toc":134134},[132658,132661,132665,132669,132680,132684,132701,132745,132778,132781,132798,132801,132804,132848,132852,132856,132859,132862,132866,132869,132880,132943,132984,132987,133002,133056,133064,133067,133078,133132,133158,133161,133174,133228,133260,133314,133337,133391,133394,133397,133404,133458,133479,133533,133536,133539,133624,133632,133689,133712,133716,133719,133737,133741,133760,133814,133852,133856,133859,133862,133884,133888,133896,133899,133904,133915,133918,133922,133936,133980,133983,133987,133990,133995,134021,134026,134103,134106,134110,134113,134116,134119,134122,134125,134128,134131],[10,132659,132655],{"id":132660},"_11-传统布局与定位体系",[803,132662,132664],{"id":132663},"_111-传统网页布局的三种方式","11.1 传统网页布局的三种方式",[14,132666,132668],{"id":132667},"_1111-普通流标准流","11.1.1 普通流（标准流）",[1863,132670,132671,132674,132677],{},[818,132672,132673],{},"所谓的标准流: 就是标签按照规定好默认方式排列",[818,132675,132676],{},"块级元素会独占一行，从上向下顺序排列。常用元素：div、hr、p、h1~h6、ul、ol、dl、form、table",[818,132678,132679],{},"行内元素会按照顺序，从左到右顺序排列，碰到父元素边缘则自动换行。常用元素：span、a、i、em 等",[14,132681,132683],{"id":132682},"_1112-浮动","11.1.2 浮动",[1863,132685,132686,132689,132692,132695,132698],{},[818,132687,132688],{},"float 属性用于创建浮动框，将其移动到一边，直到左边缘或右边缘触及包含块或另一个浮动框的边缘",[818,132690,132691],{},"浮动可以改变元素标签默认的排列方式",[818,132693,132694],{},"浮动最典型的应用：可以让多个块级元素一行内排列显示",[818,132696,132697],{},"网页布局第一准则：多个块级元素纵向排列找标准流，多个块级元素横向排列找浮动",[818,132699,132700],{},"在使用行内块转换时盒子之间是有空隙的",[57,132702,132703],{"className":127089,"code":131555,"language":127091,"meta":62,"style":62},[64,132704,132705,132711,132721,132725,132731,132741],{"__ignoreMap":62},[67,132706,132707,132709],{"class":69,"line":70},[67,132708,131562],{"class":112},[67,132710,16289],{"class":77},[67,132712,132713,132715,132717,132719],{"class":69,"line":143},[67,132714,131569],{"class":208},[67,132716,51974],{"class":77},[67,132718,24453],{"class":208},[67,132720,2017],{"class":77},[67,132722,132723],{"class":69,"line":149},[67,132724,2288],{"class":77},[67,132726,132727,132729],{"class":69,"line":155},[67,132728,131584],{"class":112},[67,132730,16289],{"class":77},[67,132732,132733,132735,132737,132739],{"class":69,"line":161},[67,132734,131569],{"class":208},[67,132736,51974],{"class":77},[67,132738,73059],{"class":208},[67,132740,2017],{"class":77},[67,132742,132743],{"class":69,"line":167},[67,132744,2288],{"class":77},[998,132746,132747,132755],{},[1001,132748,132749],{},[1004,132750,132751,132753],{},[1007,132752,127553],{"align":24453},[1007,132754,28026],{"align":24453},[1044,132756,132757,132764,132771],{},[1004,132758,132759,132761],{},[1049,132760,55274],{"align":24453},[1049,132762,132763],{"align":24453},"元素不浮动（默认值）",[1004,132765,132766,132768],{},[1049,132767,24453],{"align":24453},[1049,132769,132770],{"align":24453},"元素向左浮动",[1004,132772,132773,132775],{},[1049,132774,73059],{"align":24453},[1049,132776,132777],{"align":24453},"元素向右浮动",[19,132779,132780],{},"浮动重点：",[1863,132782,132783,132786,132789,132792,132795],{},[818,132784,132785],{},"浮动元素会脱离标准流(脱标：浮动的盒子不再保留原先的位置)",[818,132787,132788],{},"浮动的元素会一行内显示并且元素顶部对齐",[818,132790,132791],{},"浮动的元素是互相贴靠在一起的（不会有缝隙），如果父级宽度装不下这些浮动的盒子，多出的盒子会另起一行对齐",[818,132793,132794],{},"浮动的元素会具有行内块元素的特性：①浮动元素的大小根据内容来决定；②浮动的盒子之间没有缝隙(行内元素有了浮动，则不需要转换块级\\行内块元素就可以直接给高度和宽度)",[818,132796,132797],{},"行内块元素如果没有设置宽度，则盒子大小受内容影响，内容多则就宽",[19,132799,132800],{},"设计策略：先用标准流父元素排列上下位置, 之后内部子元素采取浮动排列左右位置. 符合网页布局第一准侧",[19,132802,132803],{},"浮动的盒子只会影响浮动盒子后面的标准流,不会影响前面的标准流",[57,132805,132806],{"className":127089,"code":131555,"language":127091,"meta":62,"style":62},[64,132807,132808,132814,132824,132828,132834,132844],{"__ignoreMap":62},[67,132809,132810,132812],{"class":69,"line":70},[67,132811,131562],{"class":112},[67,132813,16289],{"class":77},[67,132815,132816,132818,132820,132822],{"class":69,"line":143},[67,132817,131569],{"class":208},[67,132819,51974],{"class":77},[67,132821,24453],{"class":208},[67,132823,2017],{"class":77},[67,132825,132826],{"class":69,"line":149},[67,132827,2288],{"class":77},[67,132829,132830,132832],{"class":69,"line":155},[67,132831,131584],{"class":112},[67,132833,16289],{"class":77},[67,132835,132836,132838,132840,132842],{"class":69,"line":161},[67,132837,131569],{"class":208},[67,132839,51974],{"class":77},[67,132841,73059],{"class":208},[67,132843,2017],{"class":77},[67,132845,132846],{"class":69,"line":167},[67,132847,2288],{"class":77},[14,132849,132851],{"id":132850},"_1113-定位","11.1.3 定位",[40,132853,132855],{"id":132854},"_11131-使用场景","11.1.3.1 使用场景",[19,132857,132858],{},"①某个元素可以自由的在一个盒子内移动位置，并且压住其他盒子",[19,132860,132861],{},"②当我们滚动窗口的时候，盒子是固定屏幕某个位置的",[40,132863,132865],{"id":132864},"_11132-定位组成","11.1.3.2 定位组成",[19,132867,132868],{},"定位 = 定位模式 + 边偏移",[815,132870,132871],{},[818,132872,132873,132876,132877],{},[336,132874,132875],{},"定位模式："," 用于指定一个元素在文档中的定位方式通过 position属性定义元素的 ",[336,132878,132879],{},"定位模式",[57,132881,132883],{"className":127089,"code":132882,"language":127091,"meta":62,"style":62},".box {\n  position: relative;  \u002F* 定位模式 *\u002F\n  top: 10px;           \u002F* 边偏移：上 *\u002F\n  left: 20px;          \u002F* 边偏移：左 *\u002F\n}\n",[64,132884,132885,132891,132905,132922,132939],{"__ignoreMap":62},[67,132886,132887,132889],{"class":69,"line":70},[67,132888,130937],{"class":112},[67,132890,16289],{"class":77},[67,132892,132893,132896,132898,132900,132902],{"class":69,"line":143},[67,132894,132895],{"class":208},"  position",[67,132897,51974],{"class":77},[67,132899,55301],{"class":208},[67,132901,130952],{"class":77},[67,132903,132904],{"class":202},"\u002F* 定位模式 *\u002F\n",[67,132906,132907,132910,132912,132914,132916,132919],{"class":69,"line":149},[67,132908,132909],{"class":208},"  top",[67,132911,51974],{"class":77},[67,132913,1303],{"class":208},[67,132915,52029],{"class":73},[67,132917,132918],{"class":77},";           ",[67,132920,132921],{"class":202},"\u002F* 边偏移：上 *\u002F\n",[67,132923,132924,132927,132929,132931,132933,132936],{"class":69,"line":155},[67,132925,132926],{"class":208},"  left",[67,132928,51974],{"class":77},[67,132930,1556],{"class":208},[67,132932,52029],{"class":73},[67,132934,132935],{"class":77},";          ",[67,132937,132938],{"class":202},"\u002F* 边偏移：左 *\u002F\n",[67,132940,132941],{"class":69,"line":161},[67,132942,2288],{"class":77},[998,132944,132945,132954],{},[1001,132946,132947],{},[1004,132948,132949,132951],{},[1007,132950,1012],{"align":24453},[1007,132952,132953],{"align":24453},"语义",[1044,132955,132956,132963,132970,132977],{},[1004,132957,132958,132960],{},[1049,132959,132542],{"align":24453},[1049,132961,132962],{"align":24453},"静态定位",[1004,132964,132965,132967],{},[1049,132966,55301],{"align":24453},[1049,132968,132969],{"align":24453},"相对定位",[1004,132971,132972,132974],{},[1049,132973,55368],{"align":24453},[1049,132975,132976],{"align":24453},"绝对定位",[1004,132978,132979,132981],{},[1049,132980,86770],{"align":24453},[1049,132982,132983],{"align":24453},"固定定位",[19,132985,132986],{},"（1）静态定位：",[1863,132988,132989,133000],{},[818,132990,132991,132992,132995,132996,132999],{},"静态定位是元素的 ",[336,132993,132994],{},"默认定位方式"," ， ",[336,132997,132998],{},"无定位的意思"," 。它相当于 border 里面的none，静态定位static，不要定位的时候用",[818,133001,5900],{},[57,133003,133004],{"className":127089,"code":132882,"language":127091,"meta":62,"style":62},[64,133005,133006,133012,133024,133038,133052],{"__ignoreMap":62},[67,133007,133008,133010],{"class":69,"line":70},[67,133009,130937],{"class":112},[67,133011,16289],{"class":77},[67,133013,133014,133016,133018,133020,133022],{"class":69,"line":143},[67,133015,132895],{"class":208},[67,133017,51974],{"class":77},[67,133019,55301],{"class":208},[67,133021,130952],{"class":77},[67,133023,132904],{"class":202},[67,133025,133026,133028,133030,133032,133034,133036],{"class":69,"line":149},[67,133027,132909],{"class":208},[67,133029,51974],{"class":77},[67,133031,1303],{"class":208},[67,133033,52029],{"class":73},[67,133035,132918],{"class":77},[67,133037,132921],{"class":202},[67,133039,133040,133042,133044,133046,133048,133050],{"class":69,"line":155},[67,133041,132926],{"class":208},[67,133043,51974],{"class":77},[67,133045,1556],{"class":208},[67,133047,52029],{"class":73},[67,133049,132935],{"class":77},[67,133051,132938],{"class":202},[67,133053,133054],{"class":69,"line":161},[67,133055,2288],{"class":77},[1863,133057,133058,133061],{},[818,133059,133060],{},"静态定位 按照标准流特性摆放位置，它没有边偏移,可以理解为静态定位就是标准流",[818,133062,133063],{},"静态定位在布局时我们几乎不用的",[19,133065,133066],{},"（2）相对定位",[1863,133068,133069,133076],{},[818,133070,133071,133072,133075],{},"相对定位是元素在移动位置的时候，是相对于它自己 ",[336,133073,133074],{},"原来的位置"," 来说的（自恋型）",[818,133077,5900],{},[57,133079,133080],{"className":127089,"code":132882,"language":127091,"meta":62,"style":62},[64,133081,133082,133088,133100,133114,133128],{"__ignoreMap":62},[67,133083,133084,133086],{"class":69,"line":70},[67,133085,130937],{"class":112},[67,133087,16289],{"class":77},[67,133089,133090,133092,133094,133096,133098],{"class":69,"line":143},[67,133091,132895],{"class":208},[67,133093,51974],{"class":77},[67,133095,55301],{"class":208},[67,133097,130952],{"class":77},[67,133099,132904],{"class":202},[67,133101,133102,133104,133106,133108,133110,133112],{"class":69,"line":149},[67,133103,132909],{"class":208},[67,133105,51974],{"class":77},[67,133107,1303],{"class":208},[67,133109,52029],{"class":73},[67,133111,132918],{"class":77},[67,133113,132921],{"class":202},[67,133115,133116,133118,133120,133122,133124,133126],{"class":69,"line":155},[67,133117,132926],{"class":208},[67,133119,51974],{"class":77},[67,133121,1556],{"class":208},[67,133123,52029],{"class":73},[67,133125,132935],{"class":77},[67,133127,132938],{"class":202},[67,133129,133130],{"class":69,"line":161},[67,133131,2288],{"class":77},[1863,133133,133134],{},[818,133135,133136,133137,133139,133140,133142,133143,133146,133147,133150,133151,133153,133154,133157],{},"相对定位的特点：",[54253,133138],{},"  ①它是相对于自己原来的位置来移动的（移动位置的时候参照点是自己原来的位置）",[54253,133141],{},"  ② ",[336,133144,133145],{},"原来"," 在标准流的 ",[336,133148,133149],{},"位置"," 继续占有，后面的盒子仍然以标准流的方式对待它，原来的位置和现在的位置都不影响后面盒子的位置",[54253,133152],{},"  ③因此， ",[336,133155,133156],{},"相对定位并没有脱标"," 。它最典型的应用是给绝对定位当爹的,相对定位是用来限制绝对定位的",[19,133159,133160],{},"（3）绝对定位",[1863,133162,133163,133172],{},[818,133164,133165,133167,133168,133171],{},[336,133166,132976],{}," 是元素在移动位置的时候，是相对于它 ",[336,133169,133170],{},"祖先元素"," 来说的（拼爹型）",[818,133173,5900],{},[57,133175,133176],{"className":127089,"code":132882,"language":127091,"meta":62,"style":62},[64,133177,133178,133184,133196,133210,133224],{"__ignoreMap":62},[67,133179,133180,133182],{"class":69,"line":70},[67,133181,130937],{"class":112},[67,133183,16289],{"class":77},[67,133185,133186,133188,133190,133192,133194],{"class":69,"line":143},[67,133187,132895],{"class":208},[67,133189,51974],{"class":77},[67,133191,55301],{"class":208},[67,133193,130952],{"class":77},[67,133195,132904],{"class":202},[67,133197,133198,133200,133202,133204,133206,133208],{"class":69,"line":149},[67,133199,132909],{"class":208},[67,133201,51974],{"class":77},[67,133203,1303],{"class":208},[67,133205,52029],{"class":73},[67,133207,132918],{"class":77},[67,133209,132921],{"class":202},[67,133211,133212,133214,133216,133218,133220,133222],{"class":69,"line":155},[67,133213,132926],{"class":208},[67,133215,51974],{"class":77},[67,133217,1556],{"class":208},[67,133219,52029],{"class":73},[67,133221,132935],{"class":77},[67,133223,132938],{"class":202},[67,133225,133226],{"class":69,"line":161},[67,133227,2288],{"class":77},[1863,133229,133230,133245,133254,133257],{},[818,133231,133232,133233,133235,133236,133238,133239,133241,133242,133244],{},"绝对定位的特点：",[54253,133234],{},"  ①如果没有祖先元素或者祖先元素没有定位，则以浏览器为准定位",[54253,133237],{},"  ②如果祖先元素有定位（相对、绝对、固定定位），则以最近一级的有定位祖先元素为参考点移动位置",[54253,133240],{},"  ③绝对定位不再占有原先的位置。所以绝对定位是脱离标准流的。可以理解为绝对定位比浮动飘的更高（脱标）",[54253,133243],{},"  (4)固定定位",[818,133246,133247,133249,133250,133253],{},[336,133248,132983],{}," 是元素 ",[336,133251,133252],{},"固定于浏览器可视区的位置"," 。（认死理型）",[818,133255,133256],{},"主要使用场景：可以在浏览器页面滚动时元素的位置不会改变",[818,133258,133259],{},"语法:",[57,133261,133262],{"className":127089,"code":132882,"language":127091,"meta":62,"style":62},[64,133263,133264,133270,133282,133296,133310],{"__ignoreMap":62},[67,133265,133266,133268],{"class":69,"line":70},[67,133267,130937],{"class":112},[67,133269,16289],{"class":77},[67,133271,133272,133274,133276,133278,133280],{"class":69,"line":143},[67,133273,132895],{"class":208},[67,133275,51974],{"class":77},[67,133277,55301],{"class":208},[67,133279,130952],{"class":77},[67,133281,132904],{"class":202},[67,133283,133284,133286,133288,133290,133292,133294],{"class":69,"line":149},[67,133285,132909],{"class":208},[67,133287,51974],{"class":77},[67,133289,1303],{"class":208},[67,133291,52029],{"class":73},[67,133293,132918],{"class":77},[67,133295,132921],{"class":202},[67,133297,133298,133300,133302,133304,133306,133308],{"class":69,"line":155},[67,133299,132926],{"class":208},[67,133301,51974],{"class":77},[67,133303,1556],{"class":208},[67,133305,52029],{"class":73},[67,133307,132935],{"class":77},[67,133309,132938],{"class":202},[67,133311,133312],{"class":69,"line":161},[67,133313,2288],{"class":77},[1863,133315,133316,133325],{},[818,133317,133318,133319,133321,133322,133324],{},"特点:",[54253,133320],{},"  ①.以浏览器的可视窗口为参照点移动元素,跟父元素没有任何关系,不随滚动条滚动",[54253,133323],{},"  ②固定定位不再占有原先的位置,完全脱标",[818,133326,133327,133328,133330,133331,133333,133334,133336],{},"固定在版心位置的方法:",[54253,133329],{},"  ①让固定定位的盒子 left: 50%. 走到浏览器可视区（也可以看做版心） 的一半位置",[54253,133332],{},"  ②让固定定位的盒子 margin-left: 版心宽度的一半距离。 多走版心宽度的一半位置",[54253,133335],{},"  实例：",[57,133338,133339],{"className":127089,"code":132882,"language":127091,"meta":62,"style":62},[64,133340,133341,133347,133359,133373,133387],{"__ignoreMap":62},[67,133342,133343,133345],{"class":69,"line":70},[67,133344,130937],{"class":112},[67,133346,16289],{"class":77},[67,133348,133349,133351,133353,133355,133357],{"class":69,"line":143},[67,133350,132895],{"class":208},[67,133352,51974],{"class":77},[67,133354,55301],{"class":208},[67,133356,130952],{"class":77},[67,133358,132904],{"class":202},[67,133360,133361,133363,133365,133367,133369,133371],{"class":69,"line":149},[67,133362,132909],{"class":208},[67,133364,51974],{"class":77},[67,133366,1303],{"class":208},[67,133368,52029],{"class":73},[67,133370,132918],{"class":77},[67,133372,132921],{"class":202},[67,133374,133375,133377,133379,133381,133383,133385],{"class":69,"line":155},[67,133376,132926],{"class":208},[67,133378,51974],{"class":77},[67,133380,1556],{"class":208},[67,133382,52029],{"class":73},[67,133384,132935],{"class":77},[67,133386,132938],{"class":202},[67,133388,133389],{"class":69,"line":161},[67,133390,2288],{"class":77},[725,133392],{"style":126945,"src":133393},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-056.png",[19,133395,133396],{},"(5)粘性定位",[1863,133398,133399,133402],{},[818,133400,133401],{},"粘性定位可以被认为是相对定位和固定定位的混合",[818,133403,5900],{},[57,133405,133406],{"className":127089,"code":132882,"language":127091,"meta":62,"style":62},[64,133407,133408,133414,133426,133440,133454],{"__ignoreMap":62},[67,133409,133410,133412],{"class":69,"line":70},[67,133411,130937],{"class":112},[67,133413,16289],{"class":77},[67,133415,133416,133418,133420,133422,133424],{"class":69,"line":143},[67,133417,132895],{"class":208},[67,133419,51974],{"class":77},[67,133421,55301],{"class":208},[67,133423,130952],{"class":77},[67,133425,132904],{"class":202},[67,133427,133428,133430,133432,133434,133436,133438],{"class":69,"line":149},[67,133429,132909],{"class":208},[67,133431,51974],{"class":77},[67,133433,1303],{"class":208},[67,133435,52029],{"class":73},[67,133437,132918],{"class":77},[67,133439,132921],{"class":202},[67,133441,133442,133444,133446,133448,133450,133452],{"class":69,"line":155},[67,133443,132926],{"class":208},[67,133445,51974],{"class":77},[67,133447,1556],{"class":208},[67,133449,52029],{"class":73},[67,133451,132935],{"class":77},[67,133453,132938],{"class":202},[67,133455,133456],{"class":69,"line":161},[67,133457,2288],{"class":77},[1863,133459,133460],{},[818,133461,133462,133463,133465,133466,133468,133469,133471,133472,133475,133476,133478],{},"粘性定位的特点：",[54253,133464],{},"  ①以浏览器的可视窗口为参照点移动元素（固定定位特点）",[54253,133467],{},"  ②粘性定位占有原先的位置（相对定位特点）",[54253,133470],{},"  ③必须添加 top 、left、right、bottom ",[336,133473,133474],{},"其中一个"," 才有效",[54253,133477],{},"  ④跟页面滚动搭配使用。 兼容性较差，IE 不支持",[57,133480,133481],{"className":127089,"code":132882,"language":127091,"meta":62,"style":62},[64,133482,133483,133489,133501,133515,133529],{"__ignoreMap":62},[67,133484,133485,133487],{"class":69,"line":70},[67,133486,130937],{"class":112},[67,133488,16289],{"class":77},[67,133490,133491,133493,133495,133497,133499],{"class":69,"line":143},[67,133492,132895],{"class":208},[67,133494,51974],{"class":77},[67,133496,55301],{"class":208},[67,133498,130952],{"class":77},[67,133500,132904],{"class":202},[67,133502,133503,133505,133507,133509,133511,133513],{"class":69,"line":149},[67,133504,132909],{"class":208},[67,133506,51974],{"class":77},[67,133508,1303],{"class":208},[67,133510,52029],{"class":73},[67,133512,132918],{"class":77},[67,133514,132921],{"class":202},[67,133516,133517,133519,133521,133523,133525,133527],{"class":69,"line":155},[67,133518,132926],{"class":208},[67,133520,51974],{"class":77},[67,133522,1556],{"class":208},[67,133524,52029],{"class":73},[67,133526,132935],{"class":77},[67,133528,132938],{"class":202},[67,133530,133531],{"class":69,"line":161},[67,133532,2288],{"class":77},[725,133534],{"style":126945,"src":133535},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-057.png",[19,133537,133538],{},"(6)总结",[998,133540,133541,133556],{},[1001,133542,133543],{},[1004,133544,133545,133547,133550,133553],{},[1007,133546,132879],{"align":24453},[1007,133548,133549],{"align":24453},"是否脱标",[1007,133551,133552],{"align":24453},"移动位置",[1007,133554,133555],{"align":24453},"是否常用",[1044,133557,133558,133571,133585,133599,133612],{},[1004,133559,133560,133563,133565,133568],{},[1049,133561,133562],{"align":24453},"Static 静态定位",[1049,133564,105215],{"align":24453},[1049,133566,133567],{"align":24453},"不能使用边偏移",[1049,133569,133570],{"align":24453},"很少",[1004,133572,133573,133576,133579,133582],{},[1049,133574,133575],{"align":24453},"Relative 相对定位",[1049,133577,133578],{"align":24453},"否(占有位置)",[1049,133580,133581],{"align":24453},"相对于自身位置移动",[1049,133583,133584],{"align":24453},"基本单独使用",[1004,133586,133587,133590,133593,133596],{},[1049,133588,133589],{"align":24453},"Absolute 绝对定位",[1049,133591,133592],{"align":24453},"是(不占有位置)",[1049,133594,133595],{"align":24453},"带有定位的父级",[1049,133597,133598],{"align":24453},"要和定位父级元素搭配使用",[1004,133600,133601,133604,133606,133609],{},[1049,133602,133603],{"align":24453},"Fixed 固定定位",[1049,133605,133592],{"align":24453},[1049,133607,133608],{"align":24453},"浏览器可视区",[1049,133610,133611],{"align":24453},"单独使用,不需要父级",[1004,133613,133614,133617,133619,133621],{},[1049,133615,133616],{"align":24453},"Sticky 粘性定位",[1049,133618,133578],{"align":24453},[1049,133620,133608],{"align":24453},[1049,133622,133623],{"align":24453},"当前阶段少",[815,133625,133626],{"start":143},[818,133627,133628,133631],{},[336,133629,133630],{},"边偏移"," 则决定了该元素的最终位置",[998,133633,133634,133645],{},[1001,133635,133636],{},[1004,133637,133638,133641,133643],{},[1007,133639,133640],{"align":24453},"边偏移属性",[1007,133642,28029],{"align":24453},[1007,133644,28026],{"align":24453},[1044,133646,133647,133658,133669,133679],{},[1004,133648,133649,133652,133655],{},[1049,133650,133651],{"align":24453},"top",[1049,133653,133654],{"align":24453},"top: 80px;",[1049,133656,133657],{"align":24453},"顶端偏移量，定义元素相对于父元素上边线的距离",[1004,133659,133660,133663,133666],{},[1049,133661,133662],{"align":24453},"bottom",[1049,133664,133665],{"align":24453},"bottom: 80px ;",[1049,133667,133668],{"align":24453},"底部偏移量，定义元素相对于其父元素下边线的距离",[1004,133670,133671,133673,133676],{},[1049,133672,24453],{"align":24453},[1049,133674,133675],{"align":24453},"left: 80px ;",[1049,133677,133678],{"align":24453},"左侧偏移量，定义元素相对于其父元素左边线的距离",[1004,133680,133681,133683,133686],{},[1049,133682,73059],{"align":24453},[1049,133684,133685],{"align":24453},"right: 80px ;",[1049,133687,133688],{"align":24453},"右侧偏移量，定义元素相对于其父元素右边线的距离",[1863,133690,133691],{},[818,133692,9744,133693,133695,133696,133698,133699,133701,133702,133705,133706,133708,133709,133711],{},[54253,133694],{},"  ① ",[336,133697,133630],{}," 需要和 ",[336,133700,132879],{}," 联合使用， ",[336,133703,133704],{},"单独使用无效"," ；",[54253,133707],{},"  ②top和bottom不要同时使用",[54253,133710],{},"  ③left和right不要同时使用",[40,133713,133715],{"id":133714},"_11133-定位口诀-子绝父相","11.1.3.3 定位口诀-子绝父相",[19,133717,133718],{},"子级是绝对定位的话，父级要用相对定位",[1863,133720,133721,133724,133727,133730],{},[818,133722,133723],{},"子级绝对定位，不会占有位置，可以放到父盒子里面的任何一个地方，不会影响其他的兄弟盒子",[818,133725,133726],{},"父盒子需要加定位限制子盒子在父盒子内显示",[818,133728,133729],{},"父盒子布局时，需要占有位置，因此父亲只能是相对定位",[818,133731,133732,133733,133736],{},"子绝父相不是永远不变的，如果父元素不需要占有位置， ",[336,133734,133735],{},"子绝父绝"," 也会遇到",[40,133738,133740],{"id":133739},"_11134-堆叠顺序z-index","11.1.3.4 堆叠顺序(z-index)",[1863,133742,133743,133758],{},[818,133744,133745,133746,133749,133750,133753,133754,133757],{},"在使用 ",[336,133747,133748],{},"定位"," 布局时，可能会 ",[336,133751,133752],{},"出现盒子重叠的情况"," 。此时，可以使用 ",[336,133755,133756],{},"z-index"," 来控制盒子的前后次序 (z轴)",[818,133759,5900],{},[57,133761,133762],{"className":127089,"code":132882,"language":127091,"meta":62,"style":62},[64,133763,133764,133770,133782,133796,133810],{"__ignoreMap":62},[67,133765,133766,133768],{"class":69,"line":70},[67,133767,130937],{"class":112},[67,133769,16289],{"class":77},[67,133771,133772,133774,133776,133778,133780],{"class":69,"line":143},[67,133773,132895],{"class":208},[67,133775,51974],{"class":77},[67,133777,55301],{"class":208},[67,133779,130952],{"class":77},[67,133781,132904],{"class":202},[67,133783,133784,133786,133788,133790,133792,133794],{"class":69,"line":149},[67,133785,132909],{"class":208},[67,133787,51974],{"class":77},[67,133789,1303],{"class":208},[67,133791,52029],{"class":73},[67,133793,132918],{"class":77},[67,133795,132921],{"class":202},[67,133797,133798,133800,133802,133804,133806,133808],{"class":69,"line":155},[67,133799,132926],{"class":208},[67,133801,51974],{"class":77},[67,133803,1556],{"class":208},[67,133805,52029],{"class":73},[67,133807,132935],{"class":77},[67,133809,132938],{"class":202},[67,133811,133812],{"class":69,"line":161},[67,133813,2288],{"class":77},[1863,133815,133816],{},[818,133817,133818,133819,133695,133821,133823,133824,128252,133827,83076,133830,133832,133833,133835,133836,133839,133840,133705,133843,133845,133846,133849,133851],{},"z-index的特性",[54253,133820],{},[336,133822,127553],{}," ： ",[336,133825,133826],{},"正整数",[336,133828,133829],{},"负整数",[336,133831,1051],{}," ，默认值是 0，数值越大，盒子越靠上；",[54253,133834],{},"  ②如果 ",[336,133837,133838],{},"属性值相同"," ，则按照书写顺序， ",[336,133841,133842],{},"后来居上",[54253,133844],{},"  ③数字后面 ",[336,133847,133848],{},"不能加单位",[54253,133850],{},"  ④z-index 只能应用于相对定位,绝对定位和固定定位的元素,其他标准流,浮动和静态定位无效(只有定位的盒子才有z-index属性)",[40,133853,133855],{"id":133854},"_11135-绝对定位盒子居中","11.1.3.5 绝对定位盒子居中",[19,133857,133858],{},"加了绝对定位\u002F固定定位的盒子不能通过设置margin:auto;设置水平居中",[19,133860,133861],{},"方法:",[1863,133863,133864,133874],{},[818,133865,133866,133867,133870,133871],{},"left: 50%; 让 ",[336,133868,133869],{},"盒子的左侧"," 移动到 ",[336,133872,133873],{},"父级元素的水平中心位置",[818,133875,133876,133877,133880,133881],{},"margin-left: -100px; 让盒子 ",[336,133878,133879],{},"向左"," 移动 ",[336,133882,133883],{},"自身宽度的一半",[40,133885,133887],{"id":133886},"_11136-定位特殊特性","11.1.3.6 定位特殊特性",[815,133889,133890,133893],{},[818,133891,133892],{},"行内元素添加绝对或者固定定位，可以直接设置高度和宽度",[818,133894,133895],{},"块级元素添加绝对或者固定定位，如果不给宽度或者高度，默认大小是内容的大小",[19,133897,133898],{},"也就是说绝对定位和固定定位和浮动类似",[815,133900,133901],{"start":149},[818,133902,133903],{},"display 是显示模式， 可以改变显示模式有以下方式:",[1863,133905,133906,133909,133912],{},[818,133907,133908],{},"可以用inline-block 转换为行内块",[818,133910,133911],{},"可以用浮动 float 默认转换为行内块（类似，并不完全一样，因为浮动是脱标的）",[818,133913,133914],{},"绝对定位和固定定位也和浮动类似， 默认转换为行内块",[19,133916,133917],{},"一个行内的盒子,如果加了浮动,固定定位和绝对定位,不用转换,就可以给这个盒子直接设置宽度和高度等",[40,133919,133921],{"id":133920},"_11137-绝对定位固定定位会完全压住盒子","11.1.3.7 绝对定位(固定定位)会完全压住盒子",[815,133923,133924,133927,133930,133933],{},[818,133925,133926],{},"浮动元素不同，只会压住它下面标准流的盒子，但是不会压住下面标准流盒子里面的文字",[818,133928,133929],{},"绝对定位（固定定位）会压住下面标准流所有的内容",[818,133931,133932],{},"浮动之所以不会压住文字，因为浮动产生的目的最初是为了做文字环绕效果的。 文字会围绕浮动元素",[818,133934,133935],{},"以前浮动就是为了文字环绕效果，现在已经经常用于布局了",[57,133937,133938],{"className":127089,"code":131555,"language":127091,"meta":62,"style":62},[64,133939,133940,133946,133956,133960,133966,133976],{"__ignoreMap":62},[67,133941,133942,133944],{"class":69,"line":70},[67,133943,131562],{"class":112},[67,133945,16289],{"class":77},[67,133947,133948,133950,133952,133954],{"class":69,"line":143},[67,133949,131569],{"class":208},[67,133951,51974],{"class":77},[67,133953,24453],{"class":208},[67,133955,2017],{"class":77},[67,133957,133958],{"class":69,"line":149},[67,133959,2288],{"class":77},[67,133961,133962,133964],{"class":69,"line":155},[67,133963,131584],{"class":112},[67,133965,16289],{"class":77},[67,133967,133968,133970,133972,133974],{"class":69,"line":161},[67,133969,131569],{"class":208},[67,133971,51974],{"class":77},[67,133973,73059],{"class":208},[67,133975,2017],{"class":77},[67,133977,133978],{"class":69,"line":167},[67,133979,2288],{"class":77},[725,133981],{"style":126945,"src":133982},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-058.png",[40,133984,133986],{"id":133985},"_11138-轮播图","11.1.3.8 轮播图",[725,133988],{"style":126945,"src":133989},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-059.png",[815,133991,133992],{},[818,133993,133994],{},"制作顺序:",[1863,133996,133997,134000,134003,134012],{},[818,133998,133999],{},"大盒子我们类名为： tb-promo 淘宝广告",[818,134001,134002],{},"里面先放一张图片",[818,134004,134005,134006,134008,134009,134011],{},"左右两个按钮 用链接就好了。 左箭头 prev 右箭头 next",[54253,134007],{},"  ①左按钮样式（border-radius：左上，右上，右下，左下）",[54253,134010],{},"  ②右按钮定位，提取左右按钮共同的样式代码（并集选择器）",[818,134013,134014,134015,134017,134018,134020],{},"底侧小圆点ul 继续做。 类名为 promo-nav",[54253,134016],{},"  ①中间长方形椭圆 ul的定位（水平居中，离底部15px）",[54253,134019],{},"  ②长方形需要五个小圆点，ul无序列表，li浮动，椭圆中小圆点的样式",[815,134022,134023],{"start":143},[818,134024,134025],{},"代码模块",[57,134027,134029],{"className":127089,"code":134028,"language":127091,"meta":62,"style":62},"\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",[64,134030,134031,134036,134043,134053,134063,134073,134077,134082,134089,134099],{"__ignoreMap":62},[67,134032,134033],{"class":69,"line":70},[67,134034,134035],{"class":202},"\u002F* 绝对定位：相对于最近的有定位的祖先元素移动 *\u002F\n",[67,134037,134038,134041],{"class":69,"line":143},[67,134039,134040],{"class":112},".son",[67,134042,16289],{"class":77},[67,134044,134045,134047,134049,134051],{"class":69,"line":149},[67,134046,132895],{"class":208},[67,134048,51974],{"class":77},[67,134050,55368],{"class":208},[67,134052,2017],{"class":77},[67,134054,134055,134057,134059,134061],{"class":69,"line":155},[67,134056,132909],{"class":208},[67,134058,51974],{"class":77},[67,134060,1051],{"class":208},[67,134062,2017],{"class":77},[67,134064,134065,134067,134069,134071],{"class":69,"line":161},[67,134066,132926],{"class":208},[67,134068,51974],{"class":77},[67,134070,1051],{"class":208},[67,134072,2017],{"class":77},[67,134074,134075],{"class":69,"line":167},[67,134076,2288],{"class":77},[67,134078,134079],{"class":69,"line":173},[67,134080,134081],{"class":202},"\u002F* 父元素需要加 relative（子绝父相） *\u002F\n",[67,134083,134084,134087],{"class":69,"line":180},[67,134085,134086],{"class":112},".father",[67,134088,16289],{"class":77},[67,134090,134091,134093,134095,134097],{"class":69,"line":186},[67,134092,132895],{"class":208},[67,134094,51974],{"class":77},[67,134096,55301],{"class":208},[67,134098,2017],{"class":77},[67,134100,134101],{"class":69,"line":444},[67,134102,2288],{"class":77},[19,134104,134105],{},"总结收获:主要学习的地方是相同属性使用并集选择器",[14,134107,134109],{"id":134108},"_1114-定位数值的移动","11.1.4 定位数值的移动",[725,134111],{"style":126945,"src":134112},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-060.png",[19,134114,134115],{},"✨ 黄金口诀：",[19,134117,134118],{},"\"TOP正下负上，LEFT正右负左\"",[19,134120,134121],{},"\"RIGHT正左负右，BOTTOM正上负下",[19,134123,134124],{},"可以理解为正数就是相反方向移动，负值相同方向移动",[19,134126,134127],{},"✨ 简单记：",[19,134129,134130],{},"margin的四个方向，正值都是增加该方向的外边距（即向外推开），负值都是减少外边距（即向内拉近）",[779,134132,134133],{},"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":62,"searchDepth":143,"depth":143,"links":134135},[134136],{"id":132663,"depth":143,"text":132664,"children":134137},[134138,134139,134140,134141],{"id":132667,"depth":149,"text":132668},{"id":132682,"depth":149,"text":132683},{"id":132850,"depth":149,"text":132851},{"id":134108,"depth":149,"text":134109},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch11",{"title":132655,"description":24093},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系","SZd3SJiZURVo5OmRpYbIFmG1fddK7JxCa-sd5nbDotk",{"id":134148,"title":134149,"body":134150,"description":24093,"extension":787,"meta":135573,"navigation":176,"path":135574,"seo":135575,"stem":135576,"__hash__":135577},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源.md","12. 显示隐藏与图形资源",{"type":7,"value":134151,"toc":135552},[134152,134155,134159,134167,134171,134176,134184,134196,134200,134205,134213,134224,134228,134233,134274,134282,134286,134289,134292,134295,134389,134392,134486,134489,134583,134586,134589,134624,134627,134630,134660,134663,134666,134669,134672,134675,134678,134681,134751,134754,134758,134762,134803,134807,134813,134816,134819,134823,134826,134829,134832,134913,134916,134919,134923,134927,134930,134933,134936,134939,134942,134948,134957,134961,134980,134984,134994,134997,135000,135003,135006,135009,135012,135015,135018,135027,135031,135040,135043,135048,135101,135106,135272,135275,135278,135283,135286,135289,135292,135295,135300,135448,135451,135454,135459,135462,135467,135501,135504,135507,135511,135514,135521,135524,135527,135530,135533,135536,135539,135542,135546,135549],[10,134153,134149],{"id":134154},"_12-显示隐藏与图形资源",[803,134156,134158],{"id":134157},"_121-元素的显示和隐藏","12.1 元素的显示和隐藏",[1863,134160,134161,134164],{},[818,134162,134163],{},"目的:让一个元素在页面中消失或者显示出来",[818,134165,134166],{},"场景:类似网站广告，当我们点击关闭就不见了，但是我们重新刷新页面，会重新出现！",[14,134168,134170],{"id":134169},"_1211-display-显示","12.1.1 display 显示",[815,134172,134173],{},[818,134174,134175],{},"display 设置或检索对象是否及如何显示",[1863,134177,134178,134181],{},[818,134179,134180],{},"display: none;隐藏对象",[818,134182,134183],{},"display: block; 除了转换为块级元素之外，同时还有显示元素的意思",[815,134185,134186,134193],{"start":143},[818,134187,134188,134189,134192],{},"特点： display 隐藏元素后， ",[336,134190,134191],{},"不再占"," 有原来的位置",[818,134194,134195],{},"在js中使用非常的广泛",[14,134197,134199],{"id":134198},"_1212-visibility可见性","12.1.2 visibility可见性",[815,134201,134202],{},[818,134203,134204],{},"visibility 属性用于指定一个元素应可见还是隐藏",[1863,134206,134207,134210],{},[818,134208,134209],{},"visibility： visible；元素可见",[818,134211,134212],{},"visibility：hidden；元素隐藏",[815,134214,134215,134218,134221],{"start":143},[818,134216,134217],{},"如果隐藏元素想要原来位置， 就用 visibility：hidden；",[818,134219,134220],{},"如果隐藏元素不想要原来位置， 就用 display：none； (用处更多）",[818,134222,134223],{},"隐藏后继续占有原有位置",[14,134225,134227],{"id":134226},"_1213-overflow溢出","12.1.3 overflow溢出",[1863,134229,134230],{},[818,134231,134232],{},"overflow 属性指定了如果内容溢出一个元素的框（超过其指定高度及宽度） 时，会发生什么",[998,134234,134235,134243],{},[1001,134236,134237],{},[1004,134238,134239,134241],{},[1007,134240,127553],{"align":24453},[1007,134242,28026],{"align":24453},[1044,134244,134245,134253,134260,134267],{},[1004,134246,134247,134250],{},[1049,134248,134249],{"align":24453},"visible",[1049,134251,134252],{"align":24453},"不剪切内容也不添加滚动条，默认的，溢出的也显示出来，写不写overflow:hidden；是都显示溢出的文字的",[1004,134254,134255,134257],{},[1049,134256,62251],{"align":24453},[1049,134258,134259],{"align":24453},"不显示超过对象尺寸的内容，超出的部分隐藏掉",[1004,134261,134262,134264],{},[1049,134263,129509],{"align":24453},[1049,134265,134266],{"align":24453},"不管超出内容否，总是显示滚动条",[1004,134268,134269,134271],{},[1049,134270,73200],{"align":24453},[1049,134272,134273],{"align":24453},"超出自动显示滚动条，不超出不显示滚动条",[1863,134275,134276,134279],{},[818,134277,134278],{},"一般情况下，我们都不想让溢出的内容显示出来，因为溢出的部分会影响布局",[818,134280,134281],{},"但是如果有定位的盒子， 请慎用overflow:hidden； 因为它会隐藏多余的部分，如果对父盒子使用overflow:hidden;的话，那子盒子使用绝对定位时如果多出去一块，则会造成子盒子一部分不显示（就是有时候可能小盒子有一部分是在大盒子外边的，使用overflow:hidden后超出大盒子的就不再显示，会导致小盒子显示不全，所以这时候就不能加overflow:hidden）",[14,134283,134285],{"id":134284},"_1214-案例收获","12.1.4 案例收获",[725,134287],{"style":126945,"src":134288},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-061.png",[19,134290,134291],{},"问题：没做出来动态效果，使用hover没实现",[19,134293,134294],{},"收获：在做这类效果的时候，不要再盒子里再放盒子了，可以直接使用背景background来做中间的播放按钮，把它放在阴影盒子中就欧克，其次在使用hover时，做成滚动到大盒子时，阴影盒子显示",[57,134296,134297],{"className":127089,"code":132521,"language":127091,"meta":62,"style":62},[64,134298,134299,134303,134317,134321,134335,134339,134353,134357,134371,134375],{"__ignoreMap":62},[67,134300,134301],{"class":69,"line":70},[67,134302,132528],{"class":202},[67,134304,134305,134307,134309,134311,134313,134315],{"class":69,"line":143},[67,134306,132533],{"class":112},[67,134308,80344],{"class":77},[67,134310,129449],{"class":208},[67,134312,51974],{"class":77},[67,134314,132542],{"class":208},[67,134316,130019],{"class":77},[67,134318,134319],{"class":69,"line":149},[67,134320,132549],{"class":202},[67,134322,134323,134325,134327,134329,134331,134333],{"class":69,"line":155},[67,134324,132554],{"class":112},[67,134326,80344],{"class":77},[67,134328,129449],{"class":208},[67,134330,51974],{"class":77},[67,134332,55301],{"class":208},[67,134334,130019],{"class":77},[67,134336,134337],{"class":69,"line":161},[67,134338,132569],{"class":202},[67,134340,134341,134343,134345,134347,134349,134351],{"class":69,"line":167},[67,134342,132574],{"class":112},[67,134344,80344],{"class":77},[67,134346,129449],{"class":208},[67,134348,51974],{"class":77},[67,134350,55368],{"class":208},[67,134352,130019],{"class":77},[67,134354,134355],{"class":69,"line":173},[67,134356,132589],{"class":202},[67,134358,134359,134361,134363,134365,134367,134369],{"class":69,"line":180},[67,134360,132594],{"class":112},[67,134362,80344],{"class":77},[67,134364,129449],{"class":208},[67,134366,51974],{"class":77},[67,134368,86770],{"class":208},[67,134370,130019],{"class":77},[67,134372,134373],{"class":69,"line":186},[67,134374,132609],{"class":202},[67,134376,134377,134379,134381,134383,134385,134387],{"class":69,"line":444},[67,134378,132614],{"class":112},[67,134380,80344],{"class":77},[67,134382,129449],{"class":208},[67,134384,51974],{"class":77},[67,134386,132623],{"class":208},[67,134388,130019],{"class":77},[19,134390,134391],{},"完整代码：",[57,134393,134394],{"className":127089,"code":132521,"language":127091,"meta":62,"style":62},[64,134395,134396,134400,134414,134418,134432,134436,134450,134454,134468,134472],{"__ignoreMap":62},[67,134397,134398],{"class":69,"line":70},[67,134399,132528],{"class":202},[67,134401,134402,134404,134406,134408,134410,134412],{"class":69,"line":143},[67,134403,132533],{"class":112},[67,134405,80344],{"class":77},[67,134407,129449],{"class":208},[67,134409,51974],{"class":77},[67,134411,132542],{"class":208},[67,134413,130019],{"class":77},[67,134415,134416],{"class":69,"line":149},[67,134417,132549],{"class":202},[67,134419,134420,134422,134424,134426,134428,134430],{"class":69,"line":155},[67,134421,132554],{"class":112},[67,134423,80344],{"class":77},[67,134425,129449],{"class":208},[67,134427,51974],{"class":77},[67,134429,55301],{"class":208},[67,134431,130019],{"class":77},[67,134433,134434],{"class":69,"line":161},[67,134435,132569],{"class":202},[67,134437,134438,134440,134442,134444,134446,134448],{"class":69,"line":167},[67,134439,132574],{"class":112},[67,134441,80344],{"class":77},[67,134443,129449],{"class":208},[67,134445,51974],{"class":77},[67,134447,55368],{"class":208},[67,134449,130019],{"class":77},[67,134451,134452],{"class":69,"line":173},[67,134453,132589],{"class":202},[67,134455,134456,134458,134460,134462,134464,134466],{"class":69,"line":180},[67,134457,132594],{"class":112},[67,134459,80344],{"class":77},[67,134461,129449],{"class":208},[67,134463,51974],{"class":77},[67,134465,86770],{"class":208},[67,134467,130019],{"class":77},[67,134469,134470],{"class":69,"line":186},[67,134471,132609],{"class":202},[67,134473,134474,134476,134478,134480,134482,134484],{"class":69,"line":444},[67,134475,132614],{"class":112},[67,134477,80344],{"class":77},[67,134479,129449],{"class":208},[67,134481,51974],{"class":77},[67,134483,132623],{"class":208},[67,134485,130019],{"class":77},[19,134487,134488],{},"分布思路重点详解：",[57,134490,134491],{"className":127089,"code":132521,"language":127091,"meta":62,"style":62},[64,134492,134493,134497,134511,134515,134529,134533,134547,134551,134565,134569],{"__ignoreMap":62},[67,134494,134495],{"class":69,"line":70},[67,134496,132528],{"class":202},[67,134498,134499,134501,134503,134505,134507,134509],{"class":69,"line":143},[67,134500,132533],{"class":112},[67,134502,80344],{"class":77},[67,134504,129449],{"class":208},[67,134506,51974],{"class":77},[67,134508,132542],{"class":208},[67,134510,130019],{"class":77},[67,134512,134513],{"class":69,"line":149},[67,134514,132549],{"class":202},[67,134516,134517,134519,134521,134523,134525,134527],{"class":69,"line":155},[67,134518,132554],{"class":112},[67,134520,80344],{"class":77},[67,134522,129449],{"class":208},[67,134524,51974],{"class":77},[67,134526,55301],{"class":208},[67,134528,130019],{"class":77},[67,134530,134531],{"class":69,"line":161},[67,134532,132569],{"class":202},[67,134534,134535,134537,134539,134541,134543,134545],{"class":69,"line":167},[67,134536,132574],{"class":112},[67,134538,80344],{"class":77},[67,134540,129449],{"class":208},[67,134542,51974],{"class":77},[67,134544,55368],{"class":208},[67,134546,130019],{"class":77},[67,134548,134549],{"class":69,"line":173},[67,134550,132589],{"class":202},[67,134552,134553,134555,134557,134559,134561,134563],{"class":69,"line":180},[67,134554,132594],{"class":112},[67,134556,80344],{"class":77},[67,134558,129449],{"class":208},[67,134560,51974],{"class":77},[67,134562,86770],{"class":208},[67,134564,130019],{"class":77},[67,134566,134567],{"class":69,"line":186},[67,134568,132609],{"class":202},[67,134570,134571,134573,134575,134577,134579,134581],{"class":69,"line":444},[67,134572,132614],{"class":112},[67,134574,80344],{"class":77},[67,134576,129449],{"class":208},[67,134578,51974],{"class":77},[67,134580,132623],{"class":208},[67,134582,130019],{"class":77},[725,134584],{"style":126945,"src":134585},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-062.png",[19,134587,134588],{},"图片太大，盒子太小，此时需要修改图片的大小",[57,134590,134592],{"className":127836,"code":134591,"language":127838,"meta":62,"style":62},"\u003Cimg src=\"images\u002Fpic.jpg\" alt=\"描述文字\" title=\"悬停提示\">\n",[64,134593,134594],{"__ignoreMap":62},[67,134595,134596,134598,134600,134602,134604,134607,134609,134611,134614,134617,134619,134622],{"class":69,"line":70},[67,134597,1766],{"class":77},[67,134599,725],{"class":51837},[67,134601,55776],{"class":112},[67,134603,909],{"class":77},[67,134605,134606],{"class":84},"\"images\u002Fpic.jpg\"",[67,134608,55784],{"class":112},[67,134610,909],{"class":77},[67,134612,134613],{"class":84},"\"描述文字\"",[67,134615,134616],{"class":112}," title",[67,134618,909],{"class":77},[67,134620,134621],{"class":84},"\"悬停提示\"",[67,134623,51844],{"class":77},[725,134625],{"style":126945,"src":134626},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-063.png",[19,134628,134629],{},"制造遮罩层",[57,134631,134632],{"className":127836,"code":134591,"language":127838,"meta":62,"style":62},[64,134633,134634],{"__ignoreMap":62},[67,134635,134636,134638,134640,134642,134644,134646,134648,134650,134652,134654,134656,134658],{"class":69,"line":70},[67,134637,1766],{"class":77},[67,134639,725],{"class":51837},[67,134641,55776],{"class":112},[67,134643,909],{"class":77},[67,134645,134606],{"class":84},[67,134647,55784],{"class":112},[67,134649,909],{"class":77},[67,134651,134613],{"class":84},[67,134653,134616],{"class":112},[67,134655,909],{"class":77},[67,134657,134621],{"class":84},[67,134659,51844],{"class":77},[19,134661,134662],{},"此时是这样的为标准流",[725,134664],{"style":126945,"src":134665},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-064.png",[19,134667,134668],{},"还要子绝父相，不然子盒子会以浏览器为准，不以盒子为准",[19,134670,134671],{},"中间播放按钮作为背景展示就可以，不用再加盒子了",[19,134673,134674],{},"让他在中间，用center(background-position)",[19,134676,134677],{},"将需要变的尽可能放到一个盒子中",[19,134679,134680],{},"放大盒子上内部盒子发生变化",[57,134682,134684],{"className":127089,"code":134683,"language":127091,"meta":62,"style":62},".parent {\n  position: relative;\n}\n.child {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n}\n",[64,134685,134686,134692,134702,134706,134713,134723,134735,134747],{"__ignoreMap":62},[67,134687,134688,134690],{"class":69,"line":70},[67,134689,128156],{"class":112},[67,134691,16289],{"class":77},[67,134693,134694,134696,134698,134700],{"class":69,"line":143},[67,134695,132895],{"class":208},[67,134697,51974],{"class":77},[67,134699,55301],{"class":208},[67,134701,2017],{"class":77},[67,134703,134704],{"class":69,"line":149},[67,134705,2288],{"class":77},[67,134707,134708,134711],{"class":69,"line":155},[67,134709,134710],{"class":112},".child",[67,134712,16289],{"class":77},[67,134714,134715,134717,134719,134721],{"class":69,"line":161},[67,134716,132895],{"class":208},[67,134718,51974],{"class":77},[67,134720,55368],{"class":208},[67,134722,2017],{"class":77},[67,134724,134725,134727,134729,134731,134733],{"class":69,"line":167},[67,134726,132909],{"class":208},[67,134728,51974],{"class":77},[67,134730,1512],{"class":208},[67,134732,1186],{"class":73},[67,134734,2017],{"class":77},[67,134736,134737,134739,134741,134743,134745],{"class":69,"line":173},[67,134738,132926],{"class":208},[67,134740,51974],{"class":77},[67,134742,1512],{"class":208},[67,134744,1186],{"class":73},[67,134746,2017],{"class":77},[67,134748,134749],{"class":69,"line":180},[67,134750,2288],{"class":77},[19,134752,134753],{},"当鼠标放到使用tudou这个类选择器盒子上时，使用mask类选择器的盒子会显现内容",[803,134755,134757],{"id":134756},"_122-精灵图","12.2 精灵图",[14,134759,134761],{"id":134760},"_1221-理解","12.2.1 理解",[815,134763,134764,134782],{},[818,134765,134766,134767,132995,134770,134773,134774,134777,134778,134781],{},"目的： ",[336,134768,134769],{},"为了有效地减少服务器接收和发送请求的次数",[336,134771,134772],{},"提高"," 页面的 ",[336,134775,134776],{},"加载速度"," ，出现了 ",[336,134779,134780],{},"CSS 精灵技术"," （也称 CSS Sprites、CSS 雪碧），将网页中的一些小背景图像整合到一张大图中 ，这样服务器只需一次请求就可以了",[818,134783,134784,134785,134787,134788,134790,134791,134793,134794,134796,134797,134799,134800,134802],{},"使用精灵图核心：",[54253,134786],{},"  ①精灵技术主要针对于背景图片使用。就是把多个小背景图片整合到一张大图片中",[54253,134789],{},"  ②这个大图片也称为 sprites 精灵图 或者 雪碧图",[54253,134792],{},"  ③移动背景图片位置， 此时可以使用 background-position",[54253,134795],{},"  ④移动的距离就是这个目标图片的 x 和 y 坐标。注意网页中的坐标有所不同",[54253,134798],{},"  ⑤因为一般情况下都是往上往左移动，所以数值是负值",[54253,134801],{},"  ⑥使用精灵图的时候需要精确测量，每个小背景图片的大小和位置",[14,134804,134806],{"id":134805},"_1222-扒图","12.2.2 扒图",[57,134808,134811],{"className":134809,"code":134810,"language":5906},[5904],"\u003Cimg style=\"max-width:100%\" src=\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-065.png\">\n",[64,134812,134810],{"__ignoreMap":62},[725,134814],{"style":126945,"src":134815},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-066.png",[725,134817],{"style":126945,"src":134818},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-067.png",[14,134820,134822],{"id":134821},"_1223-精灵图的实现","12.2.3 精灵图的实现",[725,134824],{"style":126945,"src":134825},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-068.png",[19,134827,134828],{},"打开FW软件，使用切片命令，将想实现精灵图的位置进行切片操作，然后下方会出现坐标",[725,134830],{"style":126945,"src":134831},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-069.png",[57,134833,134835],{"className":127089,"code":134834,"language":127091,"meta":62,"style":62},"\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",[64,134836,134837,134842,134849,134861,134873,134892,134909],{"__ignoreMap":62},[67,134838,134839],{"class":69,"line":70},[67,134840,134841],{"class":202},"\u002F* 精灵图使用：通过 background-position 定位 *\u002F\n",[67,134843,134844,134847],{"class":69,"line":143},[67,134845,134846],{"class":112},".icon",[67,134848,16289],{"class":77},[67,134850,134851,134853,134855,134857,134859],{"class":69,"line":149},[67,134852,71105],{"class":208},[67,134854,51974],{"class":77},[67,134856,1556],{"class":208},[67,134858,52029],{"class":73},[67,134860,2017],{"class":77},[67,134862,134863,134865,134867,134869,134871],{"class":69,"line":155},[67,134864,71325],{"class":208},[67,134866,51974],{"class":77},[67,134868,1556],{"class":208},[67,134870,52029],{"class":73},[67,134872,2017],{"class":77},[67,134874,134875,134877,134879,134881,134883,134886,134888,134890],{"class":69,"line":161},[67,134876,71148],{"class":208},[67,134878,51974],{"class":77},[67,134880,62263],{"class":208},[67,134882,864],{"class":77},[67,134884,134885],{"class":5935},"sprites.png",[67,134887,14432],{"class":77},[67,134889,62273],{"class":208},[67,134891,2017],{"class":77},[67,134893,134894,134896,134898,134900,134902,134905,134907],{"class":69,"line":167},[67,134895,129349],{"class":208},[67,134897,51974],{"class":77},[67,134899,52300],{"class":208},[67,134901,52029],{"class":73},[67,134903,134904],{"class":208}," -20",[67,134906,52029],{"class":73},[67,134908,2017],{"class":77},[67,134910,134911],{"class":69,"line":173},[67,134912,2288],{"class":77},[725,134914],{"style":126945,"src":134915},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-070.png",[19,134917,134918],{},"在前端中坐标轴的正方向是右和下",[803,134920,134922],{"id":134921},"_123-字体图标","12.3 字体图标",[14,134924,134926],{"id":134925},"_1231-字体图标与精灵图的对比","12.3.1 字体图标与精灵图的对比",[19,134928,134929],{},"字体图标使用场景： 主要用于显示网页中通用、常用的一些小图标。",[19,134931,134932],{},"精灵图是有诸多优点的，但是缺点很明显。",[19,134934,134935],{},"1.图片文件还是比较大的。",[19,134937,134938],{},"2.图片本身放大和缩小会失真。",[19,134940,134941],{},"3.一旦图片制作完毕想要更换非常复杂。",[19,134943,134944,134945,26449],{},"此时，有一种技术的出现很好的解决了以上问题，就是 ",[336,134946,134947],{},"字体图标 iconfont",[19,134949,134950,134953,134954,28922],{},[336,134951,134952],{},"字体图标"," 可以为前端工程师提供一种方便高效的图标使用方式，",[336,134955,134956],{},"展示的是图标，本质属于字体",[14,134958,134960],{"id":134959},"_1232-字体图标的优点","12.3.2 字体图标的优点",[1863,134962,134963,134968,134971,134974,134977],{},[818,134964,134965,134967],{},[336,134966,26585],{}," ：一个图标字体要比一系列的图像要小。一旦字体加载了，图标就会马上渲染出来，减少了服务器请求",[818,134969,134970],{},"灵活性：本质其实是文字，可以很随意的改变颜色、产生阴影、透明效果、旋转等",[818,134972,134973],{},"兼容性：几乎支持所有的浏览器，请放心使用",[818,134975,134976],{},"注意： 字体图标不能替代精灵技术，只是对工作中图标部分技术的提升和优化",[818,134978,134979],{},"样式结构比较简单，样式比较复杂的小图片的话还是得用精灵图来进行做",[14,134981,134983],{"id":134982},"_1233-字体库下载网站","12.3.3 字体库下载网站",[1863,134985,134986],{},[818,134987,134988,134989],{},"icomoon字体库：",[28,134990,134993],{"href":134991,"rel":134992},"http:\u002F\u002Ficomoon.io\u002F",[32],"http:\u002F\u002Ficomoon.io",[19,134995,134996],{},"进去之后点icomoon app",[725,134998],{"style":126945,"src":134999},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-071.png",[19,135001,135002],{},"可以对其编辑：",[725,135004],{"style":126945,"src":135005},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-072.png",[19,135007,135008],{},"生成字体：",[725,135010],{"style":126945,"src":135011},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-073.png",[19,135013,135014],{},"下载：",[725,135016],{"style":126945,"src":135017},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-074.png",[1863,135019,135020],{},[818,135021,135022,135023],{},"阿里iconfont字体库： ",[28,135024,135025],{"href":135025,"rel":135026},"http:\u002F\u002Fwww.iconfont.cn\u002F",[32],[14,135028,135030],{"id":135029},"_1234-字体图标的引入","12.3.4 字体图标的引入",[815,135032,135033],{},[818,135034,135035,135036,135039],{},"把下载包里面的 ",[336,135037,135038],{},"fonts"," 文件夹放入页面根目录下",[725,135041],{"style":126945,"src":135042},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-075.png",[815,135044,135045],{"start":143},[818,135046,135047],{},"字体文件格式",[998,135049,135050,135059],{},[1001,135051,135052],{},[1004,135053,135054,135057],{},[1007,135055,135056],{"align":24453},"格式",[1007,135058,24457],{"align":24453},[1044,135060,135061,135071,135081,135091],{},[1004,135062,135063,135068],{},[1049,135064,135065],{"align":24453},[336,135066,135067],{},".ttf",[1049,135069,135070],{"align":24453},"ttf字体是Windows和Mac的最常见的字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome4+、Safari3+、Opera10+、iOS Mobile、Safari4.2+",[1004,135072,135073,135078],{},[1049,135074,135075],{"align":24453},[336,135076,135077],{},".woff",[1049,135079,135080],{"align":24453},"woff字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome6+、Safari3.6+、Opera11.1+",[1004,135082,135083,135088],{},[1049,135084,135085],{"align":24453},[336,135086,135087],{},".eot",[1049,135089,135090],{"align":24453},"eot字体是IE专用字体，支持这种字体的浏览器有IE4+",[1004,135092,135093,135098],{},[1049,135094,135095],{"align":24453},[336,135096,135097],{},"svg",[1049,135099,135100],{"align":24453},"svg字体是基于SVG字体渲染的一种格式，支持这种字体的浏览器有Chrome4+、Safari3.1+、Opera10.0+、iOS Mobile Safari3.2+",[815,135102,135103],{"start":149},[818,135104,135105],{},"在 CSS 样式中全局声明字体： 简单理解把这些字体文件通过css引入到我们页面中",[57,135107,135109],{"className":127089,"code":135108,"language":127091,"meta":62,"style":62},"\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",[64,135110,135111,135116,135123,135135,135151,135176,135197,135217,135237,135241,135247,135257,135268],{"__ignoreMap":62},[67,135112,135113],{"class":69,"line":70},[67,135114,135115],{"class":202},"\u002F* 引入字体图标 *\u002F\n",[67,135117,135118,135121],{"class":69,"line":143},[67,135119,135120],{"class":73},"@font-face",[67,135122,16289],{"class":77},[67,135124,135125,135128,135130,135133],{"class":69,"line":149},[67,135126,135127],{"class":208},"  font-family",[67,135129,51974],{"class":77},[67,135131,135132],{"class":84},"'icomoon'",[67,135134,2017],{"class":77},[67,135136,135137,135140,135142,135144,135146,135149],{"class":69,"line":155},[67,135138,135139],{"class":208},"  src",[67,135141,51974],{"class":77},[67,135143,62263],{"class":208},[67,135145,864],{"class":77},[67,135147,135148],{"class":84},"'fonts\u002Ficomoon.eot'",[67,135150,3440],{"class":77},[67,135152,135153,135155,135157,135159,135161,135164,135166,135169,135171,135174],{"class":69,"line":161},[67,135154,135139],{"class":208},[67,135156,51974],{"class":77},[67,135158,62263],{"class":208},[67,135160,864],{"class":77},[67,135162,135163],{"class":84},"'fonts\u002Ficomoon.eot?#iefix'",[67,135165,14432],{"class":77},[67,135167,135168],{"class":208},"format",[67,135170,864],{"class":77},[67,135172,135173],{"class":84},"'embedded-opentype'",[67,135175,38584],{"class":77},[67,135177,135178,135181,135183,135186,135188,135190,135192,135195],{"class":69,"line":167},[67,135179,135180],{"class":208},"       url",[67,135182,864],{"class":77},[67,135184,135185],{"class":84},"'fonts\u002Ficomoon.woff'",[67,135187,14432],{"class":77},[67,135189,135168],{"class":208},[67,135191,864],{"class":77},[67,135193,135194],{"class":84},"'woff'",[67,135196,38584],{"class":77},[67,135198,135199,135201,135203,135206,135208,135210,135212,135215],{"class":69,"line":173},[67,135200,135180],{"class":208},[67,135202,864],{"class":77},[67,135204,135205],{"class":84},"'fonts\u002Ficomoon.ttf'",[67,135207,14432],{"class":77},[67,135209,135168],{"class":208},[67,135211,864],{"class":77},[67,135213,135214],{"class":84},"'truetype'",[67,135216,38584],{"class":77},[67,135218,135219,135221,135223,135226,135228,135230,135232,135235],{"class":69,"line":180},[67,135220,135180],{"class":208},[67,135222,864],{"class":77},[67,135224,135225],{"class":84},"'fonts\u002Ficomoon.svg#icomoon'",[67,135227,14432],{"class":77},[67,135229,135168],{"class":208},[67,135231,864],{"class":77},[67,135233,135234],{"class":84},"'svg'",[67,135236,3440],{"class":77},[67,135238,135239],{"class":69,"line":186},[67,135240,2288],{"class":77},[67,135242,135243,135245],{"class":69,"line":444},[67,135244,134846],{"class":112},[67,135246,16289],{"class":77},[67,135248,135249,135251,135253,135255],{"class":69,"line":2335},[67,135250,135127],{"class":208},[67,135252,51974],{"class":77},[67,135254,135132],{"class":84},[67,135256,2017],{"class":77},[67,135258,135259,135262,135264,135266],{"class":69,"line":2340},[67,135260,135261],{"class":208},"  font-style",[67,135263,51974],{"class":77},[67,135265,64378],{"class":208},[67,135267,2017],{"class":77},[67,135269,135270],{"class":69,"line":2346},[67,135271,2288],{"class":77},[19,135273,135274],{},"字体声明也可以在下载的字体文件中找到style.css中复制，也可以复制上边的内容",[725,135276],{"style":126945,"src":135277},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-076.png",[815,135279,135280],{"start":155},[818,135281,135282],{},"添加字体",[725,135284],{"style":126945,"src":135285},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-077.png",[19,135287,135288],{},"复制：",[725,135290],{"style":126945,"src":135291},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-078.png",[19,135293,135294],{},"还有谁需要就把声明加在谁那里一份 font-family:'icomoon'",[815,135296,135297],{"start":161},[818,135298,135299],{},"代码展示：",[57,135301,135302],{"className":127089,"code":135108,"language":127091,"meta":62,"style":62},[64,135303,135304,135308,135314,135324,135338,135360,135378,135396,135414,135418,135424,135434,135444],{"__ignoreMap":62},[67,135305,135306],{"class":69,"line":70},[67,135307,135115],{"class":202},[67,135309,135310,135312],{"class":69,"line":143},[67,135311,135120],{"class":73},[67,135313,16289],{"class":77},[67,135315,135316,135318,135320,135322],{"class":69,"line":149},[67,135317,135127],{"class":208},[67,135319,51974],{"class":77},[67,135321,135132],{"class":84},[67,135323,2017],{"class":77},[67,135325,135326,135328,135330,135332,135334,135336],{"class":69,"line":155},[67,135327,135139],{"class":208},[67,135329,51974],{"class":77},[67,135331,62263],{"class":208},[67,135333,864],{"class":77},[67,135335,135148],{"class":84},[67,135337,3440],{"class":77},[67,135339,135340,135342,135344,135346,135348,135350,135352,135354,135356,135358],{"class":69,"line":161},[67,135341,135139],{"class":208},[67,135343,51974],{"class":77},[67,135345,62263],{"class":208},[67,135347,864],{"class":77},[67,135349,135163],{"class":84},[67,135351,14432],{"class":77},[67,135353,135168],{"class":208},[67,135355,864],{"class":77},[67,135357,135173],{"class":84},[67,135359,38584],{"class":77},[67,135361,135362,135364,135366,135368,135370,135372,135374,135376],{"class":69,"line":167},[67,135363,135180],{"class":208},[67,135365,864],{"class":77},[67,135367,135185],{"class":84},[67,135369,14432],{"class":77},[67,135371,135168],{"class":208},[67,135373,864],{"class":77},[67,135375,135194],{"class":84},[67,135377,38584],{"class":77},[67,135379,135380,135382,135384,135386,135388,135390,135392,135394],{"class":69,"line":173},[67,135381,135180],{"class":208},[67,135383,864],{"class":77},[67,135385,135205],{"class":84},[67,135387,14432],{"class":77},[67,135389,135168],{"class":208},[67,135391,864],{"class":77},[67,135393,135214],{"class":84},[67,135395,38584],{"class":77},[67,135397,135398,135400,135402,135404,135406,135408,135410,135412],{"class":69,"line":180},[67,135399,135180],{"class":208},[67,135401,864],{"class":77},[67,135403,135225],{"class":84},[67,135405,14432],{"class":77},[67,135407,135168],{"class":208},[67,135409,864],{"class":77},[67,135411,135234],{"class":84},[67,135413,3440],{"class":77},[67,135415,135416],{"class":69,"line":186},[67,135417,2288],{"class":77},[67,135419,135420,135422],{"class":69,"line":444},[67,135421,134846],{"class":112},[67,135423,16289],{"class":77},[67,135425,135426,135428,135430,135432],{"class":69,"line":2335},[67,135427,135127],{"class":208},[67,135429,51974],{"class":77},[67,135431,135132],{"class":84},[67,135433,2017],{"class":77},[67,135435,135436,135438,135440,135442],{"class":69,"line":2340},[67,135437,135261],{"class":208},[67,135439,51974],{"class":77},[67,135441,64378],{"class":208},[67,135443,2017],{"class":77},[67,135445,135446],{"class":69,"line":2346},[67,135447,2288],{"class":77},[725,135449],{"style":126945,"src":135450},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-079.png",[19,135452,135453],{},"更加细节展示：",[815,135455,135456],{},[818,135457,135458],{},"html 标签内添加小图标",[725,135460],{"style":126945,"src":135461},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-080.png",[815,135463,135464],{"start":143},[818,135465,135466],{},"给标签定义字体",[57,135468,135469],{"className":127836,"code":131193,"language":127838,"meta":62,"style":62},[64,135470,135471,135475,135489,135493],{"__ignoreMap":62},[67,135472,135473],{"class":69,"line":70},[67,135474,131200],{"class":202},[67,135476,135477,135479,135481,135483,135485,135487],{"class":69,"line":143},[67,135478,1766],{"class":77},[67,135480,52148],{"class":51837},[67,135482,54023],{"class":112},[67,135484,909],{"class":77},[67,135486,131213],{"class":84},[67,135488,51844],{"class":77},[67,135490,135491],{"class":69,"line":149},[67,135492,131220],{"class":77},[67,135494,135495,135497,135499],{"class":69,"line":155},[67,135496,52322],{"class":77},[67,135498,52148],{"class":51837},[67,135500,51844],{"class":77},[19,135502,135503],{},"注意：务必保证 这个字体和上面@font-face里面的字体保持一致",[725,135505],{"style":126945,"src":135506},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-081.png",[14,135508,135510],{"id":135509},"_1235-字体图标的追加","12.3.5 字体图标的追加",[19,135512,135513],{},"如果工作中，原来的字体图标不够用了，我们需要添加新的字体图标到原来的字体文件中",[19,135515,135516,135517,135520],{},"把压缩包里面的 ",[336,135518,135519],{},"selection.json"," 从新上传，然后选中自己想要新的图标，从新下载压缩包，并替换原来的文件即可",[19,135522,135523],{},"打开网站，点下方：",[725,135525],{"style":126945,"src":135526},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-082.png",[725,135528],{"style":126945,"src":135529},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-083.png",[725,135531],{"style":126945,"src":135532},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-084.png",[19,135534,135535],{},"点yes重新加载",[19,135537,135538],{},"然后重复之前的操作就可以实现了",[19,135540,135541],{},"下载最新的文件夹，原来的文件夹可以是删除了！",[14,135543,135545],{"id":135544},"_1236-字体图标的加载原理","12.3.6 字体图标的加载原理",[725,135547],{"style":126945,"src":135548},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-085.png",[779,135550,135551],{},"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":62,"searchDepth":143,"depth":143,"links":135553},[135554,135560,135565],{"id":134157,"depth":143,"text":134158,"children":135555},[135556,135557,135558,135559],{"id":134169,"depth":149,"text":134170},{"id":134198,"depth":149,"text":134199},{"id":134226,"depth":149,"text":134227},{"id":134284,"depth":149,"text":134285},{"id":134756,"depth":143,"text":134757,"children":135561},[135562,135563,135564],{"id":134760,"depth":149,"text":134761},{"id":134805,"depth":149,"text":134806},{"id":134821,"depth":149,"text":134822},{"id":134921,"depth":143,"text":134922,"children":135566},[135567,135568,135569,135570,135571,135572],{"id":134925,"depth":149,"text":134926},{"id":134959,"depth":149,"text":134960},{"id":134982,"depth":149,"text":134983},{"id":135029,"depth":149,"text":135030},{"id":135509,"depth":149,"text":135510},{"id":135544,"depth":149,"text":135545},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch12",{"title":134149,"description":24093},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源","K0tmUhpNlTpbP1LvirxUmLGoqR4EIlK4Id82_j0Cg-Q",{"id":135579,"title":135580,"body":135581,"description":24093,"extension":787,"meta":136808,"navigation":176,"path":136809,"seo":136810,"stem":136811,"__hash__":136812},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧.md","13. 界面样式与布局技巧",{"type":7,"value":135582,"toc":136789},[135583,135586,135590,135593,135607,135675,135705,135708,135712,135716,135818,135865,135869,135872,135875,135909,135912,135915,135918,135921,135924,135927,135930,135932,135935,135938,135941,135944,135947,135950,135953,135981,135984,135988,135991,135998,136001,136004,136030,136033,136037,136040,136043,136050,136054,136057,136059,136091,136094,136097,136109,136115,136118,136121,136124,136126,136130,136133,136136,136139,136184,136188,136190,136193,136200,136242,136245,136249,136254,136268,136272,136275,136278,136281,136284,136287,136321,136324,136327,136381,136384,136387,136390,136393,136445,136448,136451,136500,136504,136506,136509,136512,136515,136518,136521,136579,136582,136588,136591,136594,136626,136629,136633,136637,136640,136672,136676,136679,136723,136727,136730,136733,136736,136739,136742,136745,136748,136750,136753,136755,136758,136761,136764,136767,136772,136775,136777,136780,136783,136786],[10,135584,135580],{"id":135585},"_13-界面样式与布局技巧",[803,135587,135589],{"id":135588},"_131-css三角","13.1 css三角",[19,135591,135592],{},"原理概括：只设置边框，需要朝向哪边的三角就让其他的边框进行透明",[1863,135594,135595,135598,135601,135604],{},[818,135596,135597],{},"用css 边框可以模拟三角效果",[818,135599,135600],{},"宽度高度为0",[818,135602,135603],{},"4个边框都要写， 只保留需要的边框颜色，其余的不能省略，都改为 transparent 透明就好了",[818,135605,135606],{},"为了照顾兼容性 低版本的浏览器，加上 font-size: 0; line-height: 0;",[57,135608,135610],{"className":127089,"code":135609,"language":127091,"meta":62,"style":62},"\u002F* CSS 实现三角形 *\u002F\n.triangle {\n  width: 0;\n  height: 0;\n  border: 10px solid transparent;\n  border-bottom-color: #333;\n}\n",[64,135611,135612,135617,135624,135634,135644,135660,135671],{"__ignoreMap":62},[67,135613,135614],{"class":69,"line":70},[67,135615,135616],{"class":202},"\u002F* CSS 实现三角形 *\u002F\n",[67,135618,135619,135622],{"class":69,"line":143},[67,135620,135621],{"class":112},".triangle",[67,135623,16289],{"class":77},[67,135625,135626,135628,135630,135632],{"class":69,"line":149},[67,135627,71105],{"class":208},[67,135629,51974],{"class":77},[67,135631,1051],{"class":208},[67,135633,2017],{"class":77},[67,135635,135636,135638,135640,135642],{"class":69,"line":155},[67,135637,71325],{"class":208},[67,135639,51974],{"class":77},[67,135641,1051],{"class":208},[67,135643,2017],{"class":77},[67,135645,135646,135648,135650,135652,135654,135656,135658],{"class":69,"line":161},[67,135647,71433],{"class":208},[67,135649,51974],{"class":77},[67,135651,1303],{"class":208},[67,135653,52029],{"class":73},[67,135655,52058],{"class":208},[67,135657,64528],{"class":208},[67,135659,2017],{"class":77},[67,135661,135662,135665,135667,135669],{"class":69,"line":167},[67,135663,135664],{"class":208},"  border-bottom-color",[67,135666,51974],{"class":77},[67,135668,62906],{"class":208},[67,135670,2017],{"class":77},[67,135672,135673],{"class":69,"line":173},[67,135674,2288],{"class":77},[57,135676,135677],{"className":127089,"code":131246,"language":127091,"meta":62,"style":62},[64,135678,135679,135685,135701],{"__ignoreMap":62},[67,135680,135681,135683],{"class":69,"line":70},[67,135682,52148],{"class":51837},[67,135684,16289],{"class":77},[67,135686,135687,135689,135691,135693,135695,135697,135699],{"class":69,"line":143},[67,135688,71433],{"class":208},[67,135690,51974],{"class":77},[67,135692,1077],{"class":208},[67,135694,52029],{"class":73},[67,135696,52058],{"class":208},[67,135698,130481],{"class":208},[67,135700,2017],{"class":77},[67,135702,135703],{"class":69,"line":149},[67,135704,2288],{"class":77},[725,135706],{"style":126945,"src":135707},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-086.png",[803,135709,135711],{"id":135710},"_132-css用户界面样式","13.2 css用户界面样式",[14,135713,135715],{"id":135714},"_1321-鼠标样式","13.2.1 鼠标样式",[57,135717,135719],{"className":127089,"code":135718,"language":127091,"meta":62,"style":62},"\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",[64,135720,135721,135726,135745,135763,135782,135799],{"__ignoreMap":62},[67,135722,135723],{"class":69,"line":70},[67,135724,135725],{"class":202},"\u002F* 鼠标样式 *\u002F\n",[67,135727,135728,135730,135732,135735,135737,135739,135742],{"class":69,"line":143},[67,135729,52148],{"class":51837},[67,135731,80344],{"class":77},[67,135733,135734],{"class":208},"cursor",[67,135736,51974],{"class":77},[67,135738,62567],{"class":208},[67,135740,135741],{"class":77},"; }   ",[67,135743,135744],{"class":202},"\u002F* 手型 *\u002F\n",[67,135746,135747,135749,135751,135753,135755,135758,135760],{"class":69,"line":149},[67,135748,52148],{"class":51837},[67,135750,80344],{"class":77},[67,135752,135734],{"class":208},[67,135754,51974],{"class":77},[67,135756,135757],{"class":208},"default",[67,135759,135741],{"class":77},[67,135761,135762],{"class":202},"\u002F* 默认 *\u002F\n",[67,135764,135765,135767,135769,135771,135773,135776,135779],{"class":69,"line":155},[67,135766,52148],{"class":51837},[67,135768,80344],{"class":77},[67,135770,135734],{"class":208},[67,135772,51974],{"class":77},[67,135774,135775],{"class":208},"move",[67,135777,135778],{"class":77},"; }      ",[67,135780,135781],{"class":202},"\u002F* 移动 *\u002F\n",[67,135783,135784,135786,135788,135790,135792,135794,135796],{"class":69,"line":161},[67,135785,52148],{"class":51837},[67,135787,80344],{"class":77},[67,135789,135734],{"class":208},[67,135791,51974],{"class":77},[67,135793,5906],{"class":208},[67,135795,135778],{"class":77},[67,135797,135798],{"class":202},"\u002F* 文本 *\u002F\n",[67,135800,135801,135803,135805,135807,135809,135812,135815],{"class":69,"line":167},[67,135802,52148],{"class":51837},[67,135804,80344],{"class":77},[67,135806,135734],{"class":208},[67,135808,51974],{"class":77},[67,135810,135811],{"class":208},"not-allowed",[67,135813,135814],{"class":77},"; } ",[67,135816,135817],{"class":202},"\u002F* 禁止 *\u002F\n",[998,135819,135820,135828],{},[1001,135821,135822],{},[1004,135823,135824,135826],{},[1007,135825,127553],{"align":24453},[1007,135827,28026],{"align":24453},[1044,135829,135830,135837,135844,135851,135858],{},[1004,135831,135832,135834],{},[1049,135833,135757],{"align":24453},[1049,135835,135836],{"align":24453},"小白 默认",[1004,135838,135839,135841],{},[1049,135840,62567],{"align":24453},[1049,135842,135843],{"align":24453},"小手",[1004,135845,135846,135848],{},[1049,135847,135775],{"align":24453},[1049,135849,135850],{"align":24453},"移动",[1004,135852,135853,135855],{},[1049,135854,5906],{"align":24453},[1049,135856,135857],{"align":24453},"文本",[1004,135859,135860,135862],{},[1049,135861,135811],{"align":24453},[1049,135863,135864],{"align":24453},"禁止",[14,135866,135868],{"id":135867},"_1322-轮廓线-outline","13.2.2 轮廓线 outline",[19,135870,135871],{},"去除表单轮廓线",[19,135873,135874],{},"给表单添加 outline: 0; 或者 outline: none; 样式之后，就可以去掉默认的蓝色边框",[57,135876,135877],{"className":127089,"code":130453,"language":127091,"meta":62,"style":62},[64,135878,135879,135883,135889,135905],{"__ignoreMap":62},[67,135880,135881],{"class":69,"line":70},[67,135882,130460],{"class":202},[67,135884,135885,135887],{"class":69,"line":143},[67,135886,52148],{"class":51837},[67,135888,16289],{"class":77},[67,135890,135891,135893,135895,135897,135899,135901,135903],{"class":69,"line":149},[67,135892,71433],{"class":208},[67,135894,51974],{"class":77},[67,135896,1077],{"class":208},[67,135898,52029],{"class":73},[67,135900,52058],{"class":208},[67,135902,130481],{"class":208},[67,135904,2017],{"class":77},[67,135906,135907],{"class":69,"line":155},[67,135908,2288],{"class":77},[19,135910,135911],{},"文本域：",[725,135913],{"style":126945,"src":135914},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-087.png",[19,135916,135917],{},"此时会有一个空白区域",[725,135919],{"style":126945,"src":135920},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-088.png",[19,135922,135923],{},"写在同一行就不会出现这个问题",[725,135925],{"style":126945,"src":135926},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-089.png",[19,135928,135929],{},"文本域是行内块元素，一定记住！！！",[19,135931,98770],{},[725,135933],{"style":126945,"src":135934},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-090.png",[19,135936,135937],{},"文本域尽量放在一行",[19,135939,135940],{},"知识回顾：cols是列，rols是行",[725,135942],{"style":126945,"src":135943},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-091.png",[19,135945,135946],{},"它可以进行拖动，显然这是我们不愿意看到的",[725,135948],{"style":126945,"src":135949},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-092.png",[19,135951,135952],{},"使用resize进行解决",[57,135954,135956],{"className":127089,"code":135955,"language":127091,"meta":62,"style":62},"input {\n  outline: none;  \u002F* 取消表单轮廓线 *\u002F\n}\n",[64,135957,135958,135964,135977],{"__ignoreMap":62},[67,135959,135960,135962],{"class":69,"line":70},[67,135961,54358],{"class":51837},[67,135963,16289],{"class":77},[67,135965,135966,135968,135970,135972,135974],{"class":69,"line":143},[67,135967,71335],{"class":208},[67,135969,51974],{"class":77},[67,135971,55274],{"class":208},[67,135973,130952],{"class":77},[67,135975,135976],{"class":202},"\u002F* 取消表单轮廓线 *\u002F\n",[67,135978,135979],{"class":69,"line":149},[67,135980,2288],{"class":77},[19,135982,135983],{},"此时就无法通过右下方实现拖动了",[14,135985,135987],{"id":135986},"_1323-vertical-align-属性应用","13.2.3 vertical-align 属性应用",[19,135989,135990],{},"实现一个盒子中的文字和图片对齐",[19,135992,135993,135994,135997],{},"用于设置一个元素的 ",[336,135995,135996],{},"垂直对齐方式"," ，但是它只针对于行内元素或者行内块元素有效",[19,135999,136000],{},"图片和文字默认是基线对齐",[725,136002],{"style":126945,"src":136003},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-093.png",[57,136005,136006],{"className":127089,"code":135955,"language":127091,"meta":62,"style":62},[64,136007,136008,136014,136026],{"__ignoreMap":62},[67,136009,136010,136012],{"class":69,"line":70},[67,136011,54358],{"class":51837},[67,136013,16289],{"class":77},[67,136015,136016,136018,136020,136022,136024],{"class":69,"line":143},[67,136017,71335],{"class":208},[67,136019,51974],{"class":77},[67,136021,55274],{"class":208},[67,136023,130952],{"class":77},[67,136025,135976],{"class":202},[67,136027,136028],{"class":69,"line":149},[67,136029,2288],{"class":77},[725,136031],{"style":126945,"src":136032},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-094.png",[40,136034,136036],{"id":136035},"_13231-图片表单和文字对齐","13.2.3.1 图片、表单和文字对齐",[19,136038,136039],{},"图片、表单都属于行内块元素，默认的 vertical-align 是基线对齐",[725,136041],{"style":126945,"src":136042},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-095.png",[19,136044,136045,136046,136049],{},"此时可以给图片、表单这些行内块元素的 ",[336,136047,136048],{},"vertical-align 属性设置为 middle"," 就可以让文字和图片垂直居中对齐了",[40,136051,136053],{"id":136052},"_13232-解决图片底部默认空白缝隙问题","13.2.3.2 解决图片底部默认空白缝隙问题",[19,136055,136056],{},"bug：图片底侧会有一个空白缝隙，原因是行内块元素会和文字的基线对齐。",[19,136058,15350],{},[57,136060,136062],{"className":127089,"code":136061,"language":127091,"meta":62,"style":62},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\nimg {\n  vertical-align: middle;\n}\n",[64,136063,136064,136069,136075,136087],{"__ignoreMap":62},[67,136065,136066],{"class":69,"line":70},[67,136067,136068],{"class":202},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\n",[67,136070,136071,136073],{"class":69,"line":143},[67,136072,725],{"class":51837},[67,136074,16289],{"class":77},[67,136076,136077,136080,136082,136085],{"class":69,"line":149},[67,136078,136079],{"class":208},"  vertical-align",[67,136081,51974],{"class":77},[67,136083,136084],{"class":208},"middle",[67,136086,2017],{"class":77},[67,136088,136089],{"class":69,"line":155},[67,136090,2288],{"class":77},[725,136092],{"style":126945,"src":136093},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-096.png",[19,136095,136096],{},"主要解决方法有两种：",[815,136098,136099],{},[818,136100,136101,136104,136105,136108],{},[336,136102,136103],{},"给图片"," 添加 ",[336,136106,136107],{},"vertical-align:middle | top| bottom"," 等。 （提倡使用的）",[19,136110,136111,136112],{},"2.把图片转换为块级元素 ",[336,136113,136114],{},"display: block",[19,136116,136117],{},"两个块级盒子里边放了img图片，此时两个图片一个在上一个在下，但是是有间隙的，不像两个块级元素那样之间是没有间隙， 这是因为对齐方式的原因，加一句",[19,136119,136120],{},"img {",[19,136122,136123],{},"vertical-align:middle;",[19,136125,1802],{},[14,136127,136129],{"id":136128},"_1324-溢出文字用省略号显示","13.2.4 溢出文字用省略号显示",[19,136131,136132],{},"效果：",[725,136134],{"style":126945,"src":136135},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-097.png",[19,136137,136138],{},"单行文本溢出显示省略号--必须满足三个条件：",[57,136140,136142],{"className":127089,"code":136141,"language":127091,"meta":62,"style":62},"\u002F* 解决图片底部空白缝隙 *\u002F\nimg {\n  vertical-align: middle;\n  \u002F* 或 *\u002F\n  display: block;\n}\n",[64,136143,136144,136149,136155,136165,136170,136180],{"__ignoreMap":62},[67,136145,136146],{"class":69,"line":70},[67,136147,136148],{"class":202},"\u002F* 解决图片底部空白缝隙 *\u002F\n",[67,136150,136151,136153],{"class":69,"line":143},[67,136152,725],{"class":51837},[67,136154,16289],{"class":77},[67,136156,136157,136159,136161,136163],{"class":69,"line":149},[67,136158,136079],{"class":208},[67,136160,51974],{"class":77},[67,136162,136084],{"class":208},[67,136164,2017],{"class":77},[67,136166,136167],{"class":69,"line":155},[67,136168,136169],{"class":202},"  \u002F* 或 *\u002F\n",[67,136171,136172,136174,136176,136178],{"class":69,"line":161},[67,136173,128705],{"class":208},[67,136175,51974],{"class":77},[67,136177,61406],{"class":208},[67,136179,2017],{"class":77},[67,136181,136182],{"class":69,"line":167},[67,136183,2288],{"class":77},[14,136185,136187],{"id":136186},"_1325-多行文本溢出显示省略号","13.2.5 多行文本溢出显示省略号",[19,136189,136132],{},[725,136191],{"style":126945,"src":136192},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-098.png",[19,136194,136195,136196,136199],{},"多行文本溢出显示省略号， ",[336,136197,136198],{},"有较大兼容性问题"," ，适合于webKit浏览器或移动端（移动端大部分是webkit内核）",[57,136201,136202],{"className":127089,"code":136141,"language":127091,"meta":62,"style":62},[64,136203,136204,136208,136214,136224,136228,136238],{"__ignoreMap":62},[67,136205,136206],{"class":69,"line":70},[67,136207,136148],{"class":202},[67,136209,136210,136212],{"class":69,"line":143},[67,136211,725],{"class":51837},[67,136213,16289],{"class":77},[67,136215,136216,136218,136220,136222],{"class":69,"line":149},[67,136217,136079],{"class":208},[67,136219,51974],{"class":77},[67,136221,136084],{"class":208},[67,136223,2017],{"class":77},[67,136225,136226],{"class":69,"line":155},[67,136227,136169],{"class":202},[67,136229,136230,136232,136234,136236],{"class":69,"line":161},[67,136231,128705],{"class":208},[67,136233,51974],{"class":77},[67,136235,61406],{"class":208},[67,136237,2017],{"class":77},[67,136239,136240],{"class":69,"line":167},[67,136241,2288],{"class":77},[19,136243,136244],{},"由于后台人员可以操作每行多少字，所以最好从后台出发来实现该功能",[803,136246,136248],{"id":136247},"_133-常见布局技巧","13.3 常见布局技巧",[19,136250,136251],{},[336,136252,136253],{},"巧妙利用一个技术更快更好的布局：",[815,136255,136256,136259,136262,136265],{},[818,136257,136258],{},"margin负值的运用",[818,136260,136261],{},"文字围绕浮动元素",[818,136263,136264],{},"行内块的巧妙运用",[818,136266,136267],{},"CSS三角强化",[14,136269,136271],{"id":136270},"_1331-margin负值的运用","13.3.1 margin负值的运用",[19,136273,136274],{},"应用场景：",[725,136276],{"style":126945,"src":136277},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-099.png",[725,136279],{"style":126945,"src":136280},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-100.png",[19,136282,136283],{},"每个盒子都加边框，第一个的最右侧与第二个的最左侧会进行重合，通过margin负值可以解决该问题",[19,136285,136286],{},"1.让每个盒子margin 往左侧移动 -1px 正好压住相邻盒子边框",[57,136288,136289],{"className":127089,"code":130453,"language":127091,"meta":62,"style":62},[64,136290,136291,136295,136301,136317],{"__ignoreMap":62},[67,136292,136293],{"class":69,"line":70},[67,136294,130460],{"class":202},[67,136296,136297,136299],{"class":69,"line":143},[67,136298,52148],{"class":51837},[67,136300,16289],{"class":77},[67,136302,136303,136305,136307,136309,136311,136313,136315],{"class":69,"line":149},[67,136304,71433],{"class":208},[67,136306,51974],{"class":77},[67,136308,1077],{"class":208},[67,136310,52029],{"class":73},[67,136312,52058],{"class":208},[67,136314,130481],{"class":208},[67,136316,2017],{"class":77},[67,136318,136319],{"class":69,"line":155},[67,136320,2288],{"class":77},[725,136322],{"style":126945,"src":136323},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-101.png",[19,136325,136326],{},"2.鼠标经过某个盒子的时候，提高当前盒子的层级即可（如果没有有定位，则加相对定位（保留位置），如果有定位，则加z-index）",[57,136328,136330],{"className":127089,"code":136329,"language":127091,"meta":62,"style":62},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n.box {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[64,136331,136332,136337,136343,136353,136365,136377],{"__ignoreMap":62},[67,136333,136334],{"class":69,"line":70},[67,136335,136336],{"class":202},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n",[67,136338,136339,136341],{"class":69,"line":143},[67,136340,130937],{"class":112},[67,136342,16289],{"class":77},[67,136344,136345,136347,136349,136351],{"class":69,"line":149},[67,136346,132895],{"class":208},[67,136348,51974],{"class":77},[67,136350,55301],{"class":208},[67,136352,2017],{"class":77},[67,136354,136355,136357,136359,136361,136363],{"class":69,"line":155},[67,136356,132909],{"class":208},[67,136358,51974],{"class":77},[67,136360,1303],{"class":208},[67,136362,52029],{"class":73},[67,136364,2017],{"class":77},[67,136366,136367,136369,136371,136373,136375],{"class":69,"line":161},[67,136368,132926],{"class":208},[67,136370,51974],{"class":77},[67,136372,1556],{"class":208},[67,136374,52029],{"class":73},[67,136376,2017],{"class":77},[67,136378,136379],{"class":69,"line":167},[67,136380,2288],{"class":77},[19,136382,136383],{},"加上上述代码会发现：",[725,136385],{"style":126945,"src":136386},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-102.png",[19,136388,136389],{},"只有最后一个盒子边框显示的全，其他盒子右侧边框显示不全",[19,136391,136392],{},"解决方式1： 加相对定位，可以理解为在保留原位置的同时飞的更高一些了",[57,136394,136395],{"className":127089,"code":136329,"language":127091,"meta":62,"style":62},[64,136396,136397,136401,136407,136417,136429,136441],{"__ignoreMap":62},[67,136398,136399],{"class":69,"line":70},[67,136400,136336],{"class":202},[67,136402,136403,136405],{"class":69,"line":143},[67,136404,130937],{"class":112},[67,136406,16289],{"class":77},[67,136408,136409,136411,136413,136415],{"class":69,"line":149},[67,136410,132895],{"class":208},[67,136412,51974],{"class":77},[67,136414,55301],{"class":208},[67,136416,2017],{"class":77},[67,136418,136419,136421,136423,136425,136427],{"class":69,"line":155},[67,136420,132909],{"class":208},[67,136422,51974],{"class":77},[67,136424,1303],{"class":208},[67,136426,52029],{"class":73},[67,136428,2017],{"class":77},[67,136430,136431,136433,136435,136437,136439],{"class":69,"line":161},[67,136432,132926],{"class":208},[67,136434,51974],{"class":77},[67,136436,1556],{"class":208},[67,136438,52029],{"class":73},[67,136440,2017],{"class":77},[67,136442,136443],{"class":69,"line":167},[67,136444,2288],{"class":77},[19,136446,136447],{},"解决方式2：",[19,136449,136450],{},"父盒子每个都是相对定位的话，用z-index提高层级就可以",[57,136452,136454],{"className":127089,"code":136453,"language":127091,"meta":62,"style":62},"div {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[64,136455,136456,136462,136472,136484,136496],{"__ignoreMap":62},[67,136457,136458,136460],{"class":69,"line":70},[67,136459,52148],{"class":51837},[67,136461,16289],{"class":77},[67,136463,136464,136466,136468,136470],{"class":69,"line":143},[67,136465,132895],{"class":208},[67,136467,51974],{"class":77},[67,136469,55301],{"class":208},[67,136471,2017],{"class":77},[67,136473,136474,136476,136478,136480,136482],{"class":69,"line":149},[67,136475,132909],{"class":208},[67,136477,51974],{"class":77},[67,136479,1303],{"class":208},[67,136481,52029],{"class":73},[67,136483,2017],{"class":77},[67,136485,136486,136488,136490,136492,136494],{"class":69,"line":155},[67,136487,132926],{"class":208},[67,136489,51974],{"class":77},[67,136491,1556],{"class":208},[67,136493,52029],{"class":73},[67,136495,2017],{"class":77},[67,136497,136498],{"class":69,"line":161},[67,136499,2288],{"class":77},[14,136501,136503],{"id":136502},"_1332-文字围绕浮动元素","13.3.2 文字围绕浮动元素",[19,136505,136274],{},[725,136507],{"style":126945,"src":136508},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-103.png",[19,136510,136511],{},"实现结构图：",[725,136513],{"style":126945,"src":136514},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-104.png",[19,136516,136517],{},"巧妙运用浮动元素不会压住文字的特性",[19,136519,136520],{},"代码显示：",[57,136522,136524],{"className":127089,"code":136523,"language":127091,"meta":62,"style":62},".box {\n  float: left;\n}\n```Css\n\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[64,136525,136526,136532,136542,136546,136551,136555,136561,136575],{"__ignoreMap":62},[67,136527,136528,136530],{"class":69,"line":70},[67,136529,130937],{"class":112},[67,136531,16289],{"class":77},[67,136533,136534,136536,136538,136540],{"class":69,"line":143},[67,136535,131569],{"class":208},[67,136537,51974],{"class":77},[67,136539,24453],{"class":208},[67,136541,2017],{"class":77},[67,136543,136544],{"class":69,"line":149},[67,136545,2288],{"class":77},[67,136547,136548],{"class":69,"line":155},[67,136549,136550],{"class":77},"```Css\n",[67,136552,136553],{"class":69,"line":161},[67,136554,130932],{"class":202},[67,136556,136557,136559],{"class":69,"line":167},[67,136558,130937],{"class":112},[67,136560,16289],{"class":77},[67,136562,136563,136565,136567,136569,136571,136573],{"class":69,"line":173},[67,136564,71007],{"class":208},[67,136566,51974],{"class":77},[67,136568,1051],{"class":208},[67,136570,52093],{"class":208},[67,136572,130952],{"class":77},[67,136574,130955],{"class":202},[67,136576,136577],{"class":69,"line":180},[67,136578,2288],{"class":77},[19,136580,136581],{},"div, p, h1, ul, li {\n\u002F* 块级元素：独占一行，可设宽高 *\u002F\ndisplay: block;\n}",[57,136583,136586],{"className":136584,"code":136585,"language":5906},[5904],"\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",[64,136587,136585],{"__ignoreMap":62},[725,136589],{"style":126945,"src":136590},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-108.png",[19,136592,136593],{},"最终展示结果：",[57,136595,136596],{"className":127089,"code":130925,"language":127091,"meta":62,"style":62},[64,136597,136598,136602,136608,136622],{"__ignoreMap":62},[67,136599,136600],{"class":69,"line":70},[67,136601,130932],{"class":202},[67,136603,136604,136606],{"class":69,"line":143},[67,136605,130937],{"class":112},[67,136607,16289],{"class":77},[67,136609,136610,136612,136614,136616,136618,136620],{"class":69,"line":149},[67,136611,71007],{"class":208},[67,136613,51974],{"class":77},[67,136615,1051],{"class":208},[67,136617,52093],{"class":208},[67,136619,130952],{"class":77},[67,136621,130955],{"class":202},[67,136623,136624],{"class":69,"line":155},[67,136625,2288],{"class":77},[725,136627],{"style":126945,"src":136628},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-109.png",[803,136630,136632],{"id":136631},"_134-css-三角强化-案例","13.4 CSS 三角强化 案例",[14,136634,136636],{"id":136635},"_1341-原理","13.4.1 原理",[725,136638],{"style":126945,"src":136639},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-110.png",[57,136641,136642],{"className":127089,"code":130925,"language":127091,"meta":62,"style":62},[64,136643,136644,136648,136654,136668],{"__ignoreMap":62},[67,136645,136646],{"class":69,"line":70},[67,136647,130932],{"class":202},[67,136649,136650,136652],{"class":69,"line":143},[67,136651,130937],{"class":112},[67,136653,16289],{"class":77},[67,136655,136656,136658,136660,136662,136664,136666],{"class":69,"line":149},[67,136657,71007],{"class":208},[67,136659,51974],{"class":77},[67,136661,1051],{"class":208},[67,136663,52093],{"class":208},[67,136665,130952],{"class":77},[67,136667,130955],{"class":202},[67,136669,136670],{"class":69,"line":155},[67,136671,2288],{"class":77},[14,136673,136675],{"id":136674},"_1342-实例","13.4.2 实例",[725,136677],{"style":126945,"src":136678},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-111.png",[57,136680,136681],{"className":127089,"code":131555,"language":127091,"meta":62,"style":62},[64,136682,136683,136689,136699,136703,136709,136719],{"__ignoreMap":62},[67,136684,136685,136687],{"class":69,"line":70},[67,136686,131562],{"class":112},[67,136688,16289],{"class":77},[67,136690,136691,136693,136695,136697],{"class":69,"line":143},[67,136692,131569],{"class":208},[67,136694,51974],{"class":77},[67,136696,24453],{"class":208},[67,136698,2017],{"class":77},[67,136700,136701],{"class":69,"line":149},[67,136702,2288],{"class":77},[67,136704,136705,136707],{"class":69,"line":155},[67,136706,131584],{"class":112},[67,136708,16289],{"class":77},[67,136710,136711,136713,136715,136717],{"class":69,"line":161},[67,136712,131569],{"class":208},[67,136714,51974],{"class":77},[67,136716,73059],{"class":208},[67,136718,2017],{"class":77},[67,136720,136721],{"class":69,"line":167},[67,136722,2288],{"class":77},[803,136724,136726],{"id":136725},"_135-css的初始化","13.5 css的初始化",[19,136728,136729],{},"不同浏览器对有些标签的默认值是不同的，为了消除不同浏览器对HTML文本呈现的差异，照顾浏览器的兼容，我们需要对CSS 初始化",[19,136731,136732],{},"简单理解： CSS初始化是指重设浏览器的样式。 (也称为CSS reset）",[19,136734,136735],{},"每个网页都必须首先进行 CSS初始化。",[19,136737,136738],{},"这里我们以 京东CSS初始化代码为例。",[19,136740,136741],{},"在网页右键查看网页源代码",[19,136743,136744],{},"找到css的link引入语句",[19,136746,136747],{},"然后ctrl+f 输入body",[19,136749,77763],{},[725,136751],{"style":126945,"src":136752},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-112.png",[19,136754,77786],{},[725,136756],{"style":126945,"src":136757},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-113.png",[19,136759,136760],{},"③打开了网页上传压缩的代码",[725,136762],{"style":126945,"src":136763},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-114.png",[19,136765,136766],{},"④从body前可以查看这个网页的初始化代码",[19,136768,136769],{},[336,136770,136771],{},"Unicode编码字体：",[19,136773,136774],{},"把中文字体的名称用相应的Unicode编码来代替，这样就可以有效的避免浏览器解释CSS代码时候出现乱码的问题。",[19,136776,83744],{},[19,136778,136779],{},"黑体 \\9ED1\\4F53",[19,136781,136782],{},"宋体 \\5B8B\\4F53",[19,136784,136785],{},"微软雅黑 \\5FAE\\8F6F\\96C5\\9ED1",[779,136787,136788],{},"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":62,"searchDepth":143,"depth":143,"links":136790},[136791,136792,136799,136803,136807],{"id":135588,"depth":143,"text":135589},{"id":135710,"depth":143,"text":135711,"children":136793},[136794,136795,136796,136797,136798],{"id":135714,"depth":149,"text":135715},{"id":135867,"depth":149,"text":135868},{"id":135986,"depth":149,"text":135987},{"id":136128,"depth":149,"text":136129},{"id":136186,"depth":149,"text":136187},{"id":136247,"depth":143,"text":136248,"children":136800},[136801,136802],{"id":136270,"depth":149,"text":136271},{"id":136502,"depth":149,"text":136503},{"id":136631,"depth":143,"text":136632,"children":136804},[136805,136806],{"id":136635,"depth":149,"text":136636},{"id":136674,"depth":149,"text":136675},{"id":136725,"depth":143,"text":136726},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch13",{"title":135580,"description":24093},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧","1U_cCgoCgAuImhvNFSJfV4PAZyUz5cp-t86rdHeziCk",{"id":136814,"title":136815,"body":136816,"description":24093,"extension":787,"meta":138502,"navigation":176,"path":138503,"seo":138504,"stem":138505,"__hash__":138506},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性.md","14. HTML5与CSS3新特性",{"type":7,"value":136817,"toc":138491},[136818,136821,136825,136829,136832,136839,136842,136845,136883,136886,136888,136902,136906,136915,136919,136924,136927,136930,136933,136968,136973,136976,137006,137009,137014,137017,137020,137050,137053,137107,137110,137114,137119,137131,137134,137138,137168,137171,137176,137179,137209,137212,137216,137233,137237,137241,137244,137277,137280,137284,137287,137290,137293,137296,137299,137410,137413,137416,137419,137521,137524,137528,137532,137536,137539,137579,137582,137584,137600,137604,137607,137612,137693,137696,137699,137825,137830,137833,137841,137844,137849,137934,137937,137941,137944,137947,137951,137971,137976,138060,138063,138068,138071,138074,138152,138155,138158,138161,138164,138167,138172,138175,138178,138250,138253,138258,138261,138358,138361,138367,138370,138373,138376,138379,138382,138385,138388,138391,138395,138400,138403,138436,138441,138444,138485,138488],[10,136819,136815],{"id":136820},"_14-html5与css3新特性",[803,136822,136824],{"id":136823},"_141-html5的新特性","14.1 HTML5的新特性",[14,136826,136828],{"id":136827},"_1411-基本标签","14.1.1 基本标签",[19,136830,136831],{},"HTML5 的新增特性主要是针对于以前的不足，增加了一些新的标签、新的表单和新的表单属性等",[19,136833,136834,136835,136838],{},"这些新特性都有兼容性问题，基本是 ",[336,136836,136837],{},"IE9+ 以上版本的浏览器"," 才支持，如果不考虑兼容性问题，可以大量使用这些新特性",[19,136840,136841],{},"以前布局，我们基本用 div 来做。div 对于搜索引擎来说，是没有语义的",[19,136843,136844],{},"现在使用的是新特性：",[1863,136846,136847,136853,136859,136865,136871,136877],{},[818,136848,136849,136852],{},[64,136850,136851],{},"\u003Cheader>"," 头部标签",[818,136854,136855,136858],{},[64,136856,136857],{},"\u003Cnav>"," 导航标签",[818,136860,136861,136864],{},[64,136862,136863],{},"\u003Carticle>"," 内容标签",[818,136866,136867,136870],{},[64,136868,136869],{},"\u003Csection>"," 定义文档某个区域",[818,136872,136873,136876],{},[64,136874,136875],{},"\u003Caside>"," 侧边栏标签",[818,136878,136879,136882],{},[64,136880,136881],{},"\u003Cfooter>"," 尾部标签",[725,136884],{"style":126945,"src":136885},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-115.png",[19,136887,893],{},[1863,136889,136890,136893,136896,136899],{},[818,136891,136892],{},"这种语义化标准主要是针对搜索引擎的",[818,136894,136895],{},"这些标签页面中可以经常使用",[818,136897,136898],{},"在IE9中，需要把这些元素转换为块级元素",[818,136900,136901],{},"移动端更喜欢使用这些标签",[14,136903,136905],{"id":136904},"_1412-多媒体标签","14.1.2 多媒体标签",[19,136907,136908,136909,136911,136912,136914],{},"音频 ",[336,136910,28711],{}," 和视频 ",[336,136913,28720],{}," 两个标签",[40,136916,136918],{"id":136917},"_14121-视频标签-video","14.1.2.1 视频标签- video",[815,136920,136921],{},[818,136922,136923],{},"支持格式：",[725,136925],{"style":126945,"src":136926},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-116.png",[19,136928,136929],{},"尽量使用MP4，兼容性好",[19,136931,136932],{},"用MP4就可以",[57,136934,136936],{"className":127836,"code":136935,"language":127838,"meta":62,"style":62},"\u003Cvideo src=\"movie.mp4\" controls autoplay muted loop>\u003C\u002Fvideo>\n",[64,136937,136938],{"__ignoreMap":62},[67,136939,136940,136942,136944,136946,136948,136951,136953,136956,136959,136962,136964,136966],{"class":69,"line":70},[67,136941,1766],{"class":77},[67,136943,28720],{"class":51837},[67,136945,55776],{"class":112},[67,136947,909],{"class":77},[67,136949,136950],{"class":84},"\"movie.mp4\"",[67,136952,92960],{"class":112},[67,136954,136955],{"class":112}," autoplay",[67,136957,136958],{"class":112}," muted",[67,136960,136961],{"class":112}," loop",[67,136963,55851],{"class":77},[67,136965,28720],{"class":51837},[67,136967,51844],{"class":77},[815,136969,136970],{"start":143},[818,136971,136972],{},"兼容写法",[19,136974,136975],{},"由于各个浏览器的支持情况不同，所以我们会有一种兼容性的写法，这种写法了解一下即可",[57,136977,136978],{"className":127836,"code":136935,"language":127838,"meta":62,"style":62},[64,136979,136980],{"__ignoreMap":62},[67,136981,136982,136984,136986,136988,136990,136992,136994,136996,136998,137000,137002,137004],{"class":69,"line":70},[67,136983,1766],{"class":77},[67,136985,28720],{"class":51837},[67,136987,55776],{"class":112},[67,136989,909],{"class":77},[67,136991,136950],{"class":84},[67,136993,92960],{"class":112},[67,136995,136955],{"class":112},[67,136997,136958],{"class":112},[67,136999,136961],{"class":112},[67,137001,55851],{"class":77},[67,137003,28720],{"class":51837},[67,137005,51844],{"class":77},[19,137007,137008],{},"面这种写法，浏览器会匹配video标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[815,137010,137011],{"start":149},[818,137012,137013],{},"video常用属性",[725,137015],{"style":126945,"src":137016},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-117.png",[19,137018,137019],{},"poster属性后面是跟的等待加载图片的地址",[57,137021,137022],{"className":127836,"code":134591,"language":127838,"meta":62,"style":62},[64,137023,137024],{"__ignoreMap":62},[67,137025,137026,137028,137030,137032,137034,137036,137038,137040,137042,137044,137046,137048],{"class":69,"line":70},[67,137027,1766],{"class":77},[67,137029,725],{"class":51837},[67,137031,55776],{"class":112},[67,137033,909],{"class":77},[67,137035,134606],{"class":84},[67,137037,55784],{"class":112},[67,137039,909],{"class":77},[67,137041,134613],{"class":84},[67,137043,134616],{"class":112},[67,137045,909],{"class":77},[67,137047,134621],{"class":84},[67,137049,51844],{"class":77},[19,137051,137052],{},"谷歌浏览器为了避免移动端自动播放视频导致消耗较大的流量问题，对自动播放进行了禁用，解决方式：",[57,137054,137056],{"className":127089,"code":137055,"language":127091,"meta":62,"style":62},"\u002F* 2D 位移 *\u002F\ndiv {\n  transform: translate(100px, 50px);\n  \u002F* transform: translateX(100px);  仅水平 *\u002F\n  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n}\n",[64,137057,137058,137063,137069,137093,137098,137103],{"__ignoreMap":62},[67,137059,137060],{"class":69,"line":70},[67,137061,137062],{"class":202},"\u002F* 2D 位移 *\u002F\n",[67,137064,137065,137067],{"class":69,"line":143},[67,137066,52148],{"class":51837},[67,137068,16289],{"class":77},[67,137070,137071,137074,137076,137079,137081,137083,137085,137087,137089,137091],{"class":69,"line":149},[67,137072,137073],{"class":208},"  transform",[67,137075,51974],{"class":77},[67,137077,137078],{"class":208},"translate",[67,137080,864],{"class":77},[67,137082,1169],{"class":208},[67,137084,52029],{"class":73},[67,137086,13153],{"class":77},[67,137088,1512],{"class":208},[67,137090,52029],{"class":73},[67,137092,3440],{"class":77},[67,137094,137095],{"class":69,"line":155},[67,137096,137097],{"class":202},"  \u002F* transform: translateX(100px);  仅水平 *\u002F\n",[67,137099,137100],{"class":69,"line":161},[67,137101,137102],{"class":202},"  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n",[67,137104,137105],{"class":69,"line":167},[67,137106,2288],{"class":77},[19,137108,137109],{},"muted:自动静音属性",[40,137111,137113],{"id":137112},"_14122-音频标签audio","14.1.2.2 音频标签audio",[815,137115,137116],{},[818,137117,137118],{},"基本使用",[19,137120,137121,137122,137127,137128],{},"当前 ",[336,137123,137124],{},[64,137125,137126],{},"\u003Caudio>"," 元素支持三种视频格式： 尽量使用 ",[336,137129,137130],{},"mp3格式",[725,137132],{"style":126945,"src":137133},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-118.png",[815,137135,137136],{"start":143},[818,137137,136972],{},[57,137139,137140],{"className":127836,"code":136935,"language":127838,"meta":62,"style":62},[64,137141,137142],{"__ignoreMap":62},[67,137143,137144,137146,137148,137150,137152,137154,137156,137158,137160,137162,137164,137166],{"class":69,"line":70},[67,137145,1766],{"class":77},[67,137147,28720],{"class":51837},[67,137149,55776],{"class":112},[67,137151,909],{"class":77},[67,137153,136950],{"class":84},[67,137155,92960],{"class":112},[67,137157,136955],{"class":112},[67,137159,136958],{"class":112},[67,137161,136961],{"class":112},[67,137163,55851],{"class":77},[67,137165,28720],{"class":51837},[67,137167,51844],{"class":77},[19,137169,137170],{},"上面这种写法，浏览器会匹配audio标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[815,137172,137173],{"start":149},[818,137174,137175],{},"常用属性",[725,137177],{"style":126945,"src":137178},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-119.png",[57,137180,137181],{"className":127836,"code":136935,"language":127838,"meta":62,"style":62},[64,137182,137183],{"__ignoreMap":62},[67,137184,137185,137187,137189,137191,137193,137195,137197,137199,137201,137203,137205,137207],{"class":69,"line":70},[67,137186,1766],{"class":77},[67,137188,28720],{"class":51837},[67,137190,55776],{"class":112},[67,137192,909],{"class":77},[67,137194,136950],{"class":84},[67,137196,92960],{"class":112},[67,137198,136955],{"class":112},[67,137200,136958],{"class":112},[67,137202,136961],{"class":112},[67,137204,55851],{"class":77},[67,137206,28720],{"class":51837},[67,137208,51844],{"class":77},[19,137210,137211],{},"谷歌也把音频的自动播放功能给禁用了：只能通过js来解决",[40,137213,137215],{"id":137214},"_14123-总结","14.1.2.3 总结",[1863,137217,137218,137221,137224,137227,137230],{},[818,137219,137220],{},"音频标签和视频标签使用方式基本一致",[818,137222,137223],{},"浏览器支持情况不同",[818,137225,137226],{},"谷歌浏览器把音频和视频自动播放禁止了",[818,137228,137229],{},"我们可以给视频标签添加 muted 属性来静音播放视频，音频不可以（可以通过JavaScript解决）",[818,137231,137232],{},"视频标签是重点，我们经常设置自动播放，不使用 controls 控件，循环和设置大小属性",[14,137234,137236],{"id":137235},"_1413-表单元素","14.1.3 表单元素",[40,137238,137240],{"id":137239},"_14131-html5新增input类型","14.1.3.1 HTML5新增input类型",[725,137242],{"style":126945,"src":137243},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-120.png",[57,137245,137247],{"className":127836,"code":137246,"language":127838,"meta":62,"style":62},"\u003Cinput type=\"text\" name=\"username\" placeholder=\"请输入用户名\">\n",[64,137248,137249],{"__ignoreMap":62},[67,137250,137251,137253,137255,137257,137259,137261,137263,137265,137268,137270,137272,137275],{"class":69,"line":70},[67,137252,1766],{"class":77},[67,137254,54358],{"class":51837},[67,137256,54361],{"class":112},[67,137258,909],{"class":77},[67,137260,63236],{"class":84},[67,137262,15637],{"class":112},[67,137264,909],{"class":77},[67,137266,137267],{"class":84},"\"username\"",[67,137269,61557],{"class":112},[67,137271,909],{"class":77},[67,137273,137274],{"class":84},"\"请输入用户名\"",[67,137276,51844],{"class":77},[725,137278],{"style":126945,"src":137279},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-121.png",[40,137281,137283],{"id":137282},"_14132-html5新增表单属性","14.1.3.2 HTML5新增表单属性",[725,137285],{"style":126945,"src":137286},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-122.png",[19,137288,137289],{},"使用autocomplete时需要给name值，可以理解为name就是用于连接服务器的",[19,137291,137292],{},"快捷操作：",[725,137294],{"style":126945,"src":137295},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-123.png",[19,137297,137298],{},"例子1：",[57,137300,137302],{"className":127836,"code":137301,"language":127838,"meta":62,"style":62},"\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",[64,137303,137304,137327,137354,137383,137402],{"__ignoreMap":62},[67,137305,137306,137308,137310,137312,137314,137317,137320,137322,137325],{"class":69,"line":70},[67,137307,1766],{"class":77},[67,137309,67162],{"class":51837},[67,137311,67165],{"class":112},[67,137313,909],{"class":77},[67,137315,137316],{"class":84},"\"\u002Fsubmit\"",[67,137318,137319],{"class":112}," method",[67,137321,909],{"class":77},[67,137323,137324],{"class":84},"\"post\"",[67,137326,51844],{"class":77},[67,137328,137329,137331,137333,137335,137337,137339,137341,137343,137345,137347,137349,137352],{"class":69,"line":143},[67,137330,52681],{"class":77},[67,137332,54358],{"class":51837},[67,137334,54361],{"class":112},[67,137336,909],{"class":77},[67,137338,63236],{"class":84},[67,137340,15637],{"class":112},[67,137342,909],{"class":77},[67,137344,137267],{"class":84},[67,137346,61557],{"class":112},[67,137348,909],{"class":77},[67,137350,137351],{"class":84},"\"用户名\"",[67,137353,51844],{"class":77},[67,137355,137356,137358,137360,137362,137364,137367,137369,137371,137374,137376,137378,137381],{"class":69,"line":149},[67,137357,52681],{"class":77},[67,137359,54358],{"class":51837},[67,137361,54361],{"class":112},[67,137363,909],{"class":77},[67,137365,137366],{"class":84},"\"password\"",[67,137368,15637],{"class":112},[67,137370,909],{"class":77},[67,137372,137373],{"class":84},"\"pwd\"",[67,137375,61557],{"class":112},[67,137377,909],{"class":77},[67,137379,137380],{"class":84},"\"密码\"",[67,137382,51844],{"class":77},[67,137384,137385,137387,137389,137391,137393,137395,137398,137400],{"class":69,"line":155},[67,137386,52681],{"class":77},[67,137388,54424],{"class":51837},[67,137390,54361],{"class":112},[67,137392,909],{"class":77},[67,137394,67185],{"class":84},[67,137396,137397],{"class":77},">提交\u003C\u002F",[67,137399,54424],{"class":51837},[67,137401,51844],{"class":77},[67,137403,137404,137406,137408],{"class":69,"line":161},[67,137405,52322],{"class":77},[67,137407,67162],{"class":51837},[67,137409,51844],{"class":77},[725,137411],{"style":126945,"src":137412},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-124.png",[19,137414,137415],{},"value是表单域的内容",[19,137417,137418],{},"例子2：",[57,137420,137421],{"className":127836,"code":137301,"language":127838,"meta":62,"style":62},[64,137422,137423,137443,137469,137495,137513],{"__ignoreMap":62},[67,137424,137425,137427,137429,137431,137433,137435,137437,137439,137441],{"class":69,"line":70},[67,137426,1766],{"class":77},[67,137428,67162],{"class":51837},[67,137430,67165],{"class":112},[67,137432,909],{"class":77},[67,137434,137316],{"class":84},[67,137436,137319],{"class":112},[67,137438,909],{"class":77},[67,137440,137324],{"class":84},[67,137442,51844],{"class":77},[67,137444,137445,137447,137449,137451,137453,137455,137457,137459,137461,137463,137465,137467],{"class":69,"line":143},[67,137446,52681],{"class":77},[67,137448,54358],{"class":51837},[67,137450,54361],{"class":112},[67,137452,909],{"class":77},[67,137454,63236],{"class":84},[67,137456,15637],{"class":112},[67,137458,909],{"class":77},[67,137460,137267],{"class":84},[67,137462,61557],{"class":112},[67,137464,909],{"class":77},[67,137466,137351],{"class":84},[67,137468,51844],{"class":77},[67,137470,137471,137473,137475,137477,137479,137481,137483,137485,137487,137489,137491,137493],{"class":69,"line":149},[67,137472,52681],{"class":77},[67,137474,54358],{"class":51837},[67,137476,54361],{"class":112},[67,137478,909],{"class":77},[67,137480,137366],{"class":84},[67,137482,15637],{"class":112},[67,137484,909],{"class":77},[67,137486,137373],{"class":84},[67,137488,61557],{"class":112},[67,137490,909],{"class":77},[67,137492,137380],{"class":84},[67,137494,51844],{"class":77},[67,137496,137497,137499,137501,137503,137505,137507,137509,137511],{"class":69,"line":155},[67,137498,52681],{"class":77},[67,137500,54424],{"class":51837},[67,137502,54361],{"class":112},[67,137504,909],{"class":77},[67,137506,67185],{"class":84},[67,137508,137397],{"class":77},[67,137510,54424],{"class":51837},[67,137512,51844],{"class":77},[67,137514,137515,137517,137519],{"class":69,"line":161},[67,137516,52322],{"class":77},[67,137518,67162],{"class":51837},[67,137520,51844],{"class":77},[725,137522],{"style":126945,"src":137523},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-125.png",[803,137525,137527],{"id":137526},"_142-css新特性","14.2 CSS新特性",[14,137529,137531],{"id":137530},"_1421-新增选择器","14.2.1 新增选择器",[40,137533,137535],{"id":137534},"_14211-属性选择器","14.2.1.1 属性选择器",[725,137537],{"style":126945,"src":137538},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-126.png",[57,137540,137542],{"className":127089,"code":137541,"language":127091,"meta":62,"style":62},"input[type=\"text\"] {\n  border: 1px solid #999;\n}\n",[64,137543,137544,137559,137575],{"__ignoreMap":62},[67,137545,137546,137548,137550,137552,137554,137556],{"class":69,"line":70},[67,137547,54358],{"class":51837},[67,137549,1746],{"class":77},[67,137551,103644],{"class":112},[67,137553,909],{"class":73},[67,137555,63236],{"class":84},[67,137557,137558],{"class":77},"] {\n",[67,137560,137561,137563,137565,137567,137569,137571,137573],{"class":69,"line":143},[67,137562,71433],{"class":208},[67,137564,51974],{"class":77},[67,137566,1077],{"class":208},[67,137568,52029],{"class":73},[67,137570,52058],{"class":208},[67,137572,130669],{"class":208},[67,137574,2017],{"class":77},[67,137576,137577],{"class":69,"line":149},[67,137578,2288],{"class":77},[725,137580],{"style":126945,"src":137581},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-127.png",[19,137583,893],{},[1863,137585,137586,137589,137592,137595],{},[818,137587,137588],{},"属性选择器，按照字面意思，都是根据标签中的属性来选择元素",[818,137590,137591],{},"属性选择器可以根据元素特定属性的来选择元素。 这样就可以不用借助于类或者id选择器",[818,137593,137594],{},"属性选择器也可以选择出来自定义的属性",[818,137596,137597,137599],{},[336,137598,9744],{}," 类选择器、属性选择器、伪类选择器，权重为 10",[40,137601,137603],{"id":137602},"_14212-结构伪类选择器","14.2.1.2 结构伪类选择器",[725,137605],{"style":126945,"src":137606},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-128.png",[815,137608,137609],{},[818,137610,137611],{},"fist-child",[57,137613,137615],{"className":127089,"code":137614,"language":127091,"meta":62,"style":62},"\u002F* 属性选择器 *\u002F\ninput[type=\"text\"] { }\ninput[class^=\"icon\"] { }  \u002F* 以 icon 开头 *\u002F\ninput[class$=\"icon\"] { }  \u002F* 以 icon 结尾 *\u002F\ninput[class*=\"icon\"] { }  \u002F* 包含 icon *\u002F\n",[64,137616,137617,137622,137637,137657,137675],{"__ignoreMap":62},[67,137618,137619],{"class":69,"line":70},[67,137620,137621],{"class":202},"\u002F* 属性选择器 *\u002F\n",[67,137623,137624,137626,137628,137630,137632,137634],{"class":69,"line":143},[67,137625,54358],{"class":51837},[67,137627,1746],{"class":77},[67,137629,103644],{"class":112},[67,137631,909],{"class":73},[67,137633,63236],{"class":84},[67,137635,137636],{"class":77},"] { }\n",[67,137638,137639,137641,137643,137645,137648,137651,137654],{"class":69,"line":149},[67,137640,54358],{"class":51837},[67,137642,1746],{"class":77},[67,137644,15411],{"class":112},[67,137646,137647],{"class":73},"^=",[67,137649,137650],{"class":84},"\"icon\"",[67,137652,137653],{"class":77},"] { }  ",[67,137655,137656],{"class":202},"\u002F* 以 icon 开头 *\u002F\n",[67,137658,137659,137661,137663,137665,137668,137670,137672],{"class":69,"line":155},[67,137660,54358],{"class":51837},[67,137662,1746],{"class":77},[67,137664,15411],{"class":112},[67,137666,137667],{"class":73},"$=",[67,137669,137650],{"class":84},[67,137671,137653],{"class":77},[67,137673,137674],{"class":202},"\u002F* 以 icon 结尾 *\u002F\n",[67,137676,137677,137679,137681,137683,137686,137688,137690],{"class":69,"line":161},[67,137678,54358],{"class":51837},[67,137680,1746],{"class":77},[67,137682,15411],{"class":112},[67,137684,137685],{"class":73},"*=",[67,137687,137650],{"class":84},[67,137689,137653],{"class":77},[67,137691,137692],{"class":202},"\u002F* 包含 icon *\u002F\n",[19,137694,137695],{},"ul的第一个儿子文本为红色",[19,137697,137698],{},"一定要在冒号前加空格，不然就是选中所有的了",[57,137700,137702],{"className":127089,"code":137701,"language":127091,"meta":62,"style":62},".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",[64,137703,137704,137710,137720,137724,137728,137733,137746,137759,137775,137792,137809],{"__ignoreMap":62},[67,137705,137706,137708],{"class":69,"line":70},[67,137707,127380],{"class":112},[67,137709,16289],{"class":77},[67,137711,137712,137714,137716,137718],{"class":69,"line":143},[67,137713,71442],{"class":208},[67,137715,51974],{"class":77},[67,137717,57958],{"class":208},[67,137719,2017],{"class":77},[67,137721,137722],{"class":69,"line":149},[67,137723,2288],{"class":77},[67,137725,137726],{"class":69,"line":155},[67,137727,136550],{"class":77},[67,137729,137730],{"class":69,"line":161},[67,137731,137732],{"class":202},"\u002F* 结构伪类选择器 *\u002F\n",[67,137734,137735,137737,137740,137743],{"class":69,"line":167},[67,137736,818],{"class":51837},[67,137738,137739],{"class":112},":first-child",[67,137741,137742],{"class":77}," { }           ",[67,137744,137745],{"class":202},"\u002F* 第一个 *\u002F\n",[67,137747,137748,137750,137753,137756],{"class":69,"line":173},[67,137749,818],{"class":51837},[67,137751,137752],{"class":112},":last-child",[67,137754,137755],{"class":77}," { }            ",[67,137757,137758],{"class":202},"\u002F* 最后一个 *\u002F\n",[67,137760,137761,137763,137765,137767,137769,137772],{"class":69,"line":180},[67,137762,818],{"class":51837},[67,137764,130003],{"class":112},[67,137766,864],{"class":77},[67,137768,939],{"class":208},[67,137770,137771],{"class":77},") { }          ",[67,137773,137774],{"class":202},"\u002F* 第2个 *\u002F\n",[67,137776,137777,137779,137781,137783,137786,137789],{"class":69,"line":186},[67,137778,818],{"class":51837},[67,137780,130003],{"class":112},[67,137782,864],{"class":77},[67,137784,137785],{"class":208},"2n",[67,137787,137788],{"class":77},") { }         ",[67,137790,137791],{"class":202},"\u002F* 偶数 *\u002F\n",[67,137793,137794,137796,137798,137800,137803,137806],{"class":69,"line":444},[67,137795,818],{"class":51837},[67,137797,130003],{"class":112},[67,137799,864],{"class":77},[67,137801,137802],{"class":208},"2n+1",[67,137804,137805],{"class":77},") { }       ",[67,137807,137808],{"class":202},"\u002F* 奇数 *\u002F\n",[67,137810,137811,137813,137815,137817,137820,137822],{"class":69,"line":2335},[67,137812,818],{"class":51837},[67,137814,130003],{"class":112},[67,137816,864],{"class":77},[67,137818,137819],{"class":208},"-n+3",[67,137821,137805],{"class":77},[67,137823,137824],{"class":202},"\u002F* 前3个 *\u002F\n",[52148,137826,137829],{"className":137827},[137828],"example","\n  示例内容\n",[19,137831,137832],{},"此时有1会执行操作，确定为第一个孩子:光头强，但是它是p标签，然后接着与前边进行匹配，前面是div与p是不匹配的，所以此时是不输出任何结果的，不会使第一个孩子的背景变为蓝色",[1863,137834,137835],{},[818,137836,137837,137840],{},[64,137838,137839],{},"E:nth-of-type(n)"," 匹配同类型中的第n个同级兄弟元素E，也就是说，对父元素里面指定子元素进行排序选择。 先去匹配E ，然后再根据E 找第n个孩子",[19,137842,137843],{},"也就是说它选择的是熊大",[815,137845,137846],{"start":167},[818,137847,137848],{},"权重",[57,137850,137852],{"className":127089,"code":137851,"language":127091,"meta":62,"style":62},"\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",[64,137853,137854,137858,137868,137878,137892,137906,137920],{"__ignoreMap":62},[67,137855,137856],{"class":69,"line":70},[67,137857,137732],{"class":202},[67,137859,137860,137862,137864,137866],{"class":69,"line":143},[67,137861,818],{"class":51837},[67,137863,137739],{"class":112},[67,137865,137742],{"class":77},[67,137867,137745],{"class":202},[67,137869,137870,137872,137874,137876],{"class":69,"line":149},[67,137871,818],{"class":51837},[67,137873,137752],{"class":112},[67,137875,137755],{"class":77},[67,137877,137758],{"class":202},[67,137879,137880,137882,137884,137886,137888,137890],{"class":69,"line":155},[67,137881,818],{"class":51837},[67,137883,130003],{"class":112},[67,137885,864],{"class":77},[67,137887,939],{"class":208},[67,137889,137771],{"class":77},[67,137891,137774],{"class":202},[67,137893,137894,137896,137898,137900,137902,137904],{"class":69,"line":161},[67,137895,818],{"class":51837},[67,137897,130003],{"class":112},[67,137899,864],{"class":77},[67,137901,137785],{"class":208},[67,137903,137788],{"class":77},[67,137905,137791],{"class":202},[67,137907,137908,137910,137912,137914,137916,137918],{"class":69,"line":167},[67,137909,818],{"class":51837},[67,137911,130003],{"class":112},[67,137913,864],{"class":77},[67,137915,137802],{"class":208},[67,137917,137805],{"class":77},[67,137919,137808],{"class":202},[67,137921,137922,137924,137926,137928,137930,137932],{"class":69,"line":173},[67,137923,818],{"class":51837},[67,137925,130003],{"class":112},[67,137927,864],{"class":77},[67,137929,137819],{"class":208},[67,137931,137805],{"class":77},[67,137933,137824],{"class":202},[19,137935,137936],{},"这个的权重为12，:nth-of-type(1)为结构伪类选择器，权重为10，div为标签选择器为1，section也为标签选择器权重也为1,也就是上述总权重为12",[40,137938,137940],{"id":137939},"_14213-伪元素选择器","14.2.1.3 伪元素选择器",[19,137942,137943],{},"伪元素选择器可以帮助我们利用CSS创建新标签元素，而不需要HTML标签，从而简化HTML结构",[725,137945],{"style":126945,"src":137946},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-130.png",[815,137948,137949],{},[818,137950,893],{},[1863,137952,137953,137956,137959,137962,137965,137968],{},[818,137954,137955],{},"before 和 after 创建一个元素，但是属于行内元素（也就是宽高不起作用，需要转换模式才会起作用）",[818,137957,137958],{},"新创建的这个元素在文档树中是找不到的（在网页F12中查看文档树），找不到这个盒子，所以我们称为伪元素",[818,137960,137961],{},"语法： element::before {}",[818,137963,137964],{},"before 和 after 必须有 content 属性",[818,137966,137967],{},"before 在父元素内容里面的前面创建元素，after 在父元素内容里面的后面插入元素，内容是放到中间的，不会影响本身的内容",[818,137969,137970],{},"伪元素选择器和标签选择器一样，权重为 1",[815,137972,137973],{"start":143},[818,137974,137975],{},"实例",[57,137977,137978],{"className":127089,"code":137851,"language":127091,"meta":62,"style":62},[64,137979,137980,137984,137994,138004,138018,138032,138046],{"__ignoreMap":62},[67,137981,137982],{"class":69,"line":70},[67,137983,137732],{"class":202},[67,137985,137986,137988,137990,137992],{"class":69,"line":143},[67,137987,818],{"class":51837},[67,137989,137739],{"class":112},[67,137991,137742],{"class":77},[67,137993,137745],{"class":202},[67,137995,137996,137998,138000,138002],{"class":69,"line":149},[67,137997,818],{"class":51837},[67,137999,137752],{"class":112},[67,138001,137755],{"class":77},[67,138003,137758],{"class":202},[67,138005,138006,138008,138010,138012,138014,138016],{"class":69,"line":155},[67,138007,818],{"class":51837},[67,138009,130003],{"class":112},[67,138011,864],{"class":77},[67,138013,939],{"class":208},[67,138015,137771],{"class":77},[67,138017,137774],{"class":202},[67,138019,138020,138022,138024,138026,138028,138030],{"class":69,"line":161},[67,138021,818],{"class":51837},[67,138023,130003],{"class":112},[67,138025,864],{"class":77},[67,138027,137785],{"class":208},[67,138029,137788],{"class":77},[67,138031,137791],{"class":202},[67,138033,138034,138036,138038,138040,138042,138044],{"class":69,"line":167},[67,138035,818],{"class":51837},[67,138037,130003],{"class":112},[67,138039,864],{"class":77},[67,138041,137802],{"class":208},[67,138043,137805],{"class":77},[67,138045,137808],{"class":202},[67,138047,138048,138050,138052,138054,138056,138058],{"class":69,"line":173},[67,138049,818],{"class":51837},[67,138051,130003],{"class":112},[67,138053,864],{"class":77},[67,138055,137819],{"class":208},[67,138057,137805],{"class":77},[67,138059,137824],{"class":202},[725,138061],{"style":126945,"src":138062},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-131.png",[815,138064,138065],{"start":149},[818,138066,138067],{},"使用场景1",[725,138069],{"style":126945,"src":138070},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-132.png",[19,138072,138073],{},"不需要再加盒子来整红色那部分了",[57,138075,138077],{"className":127089,"code":138076,"language":127091,"meta":62,"style":62},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\ndiv::before {\n  content: \"\";\n  display: block;\n}\ndiv::after {\n  content: \"→\";\n  color: #999;\n}\n",[64,138078,138079,138084,138093,138104,138114,138118,138127,138138,138148],{"__ignoreMap":62},[67,138080,138081],{"class":69,"line":70},[67,138082,138083],{"class":202},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\n",[67,138085,138086,138088,138091],{"class":69,"line":143},[67,138087,52148],{"class":51837},[67,138089,138090],{"class":112},"::before",[67,138092,16289],{"class":77},[67,138094,138095,138098,138100,138102],{"class":69,"line":149},[67,138096,138097],{"class":208},"  content",[67,138099,51974],{"class":77},[67,138101,8371],{"class":84},[67,138103,2017],{"class":77},[67,138105,138106,138108,138110,138112],{"class":69,"line":155},[67,138107,128705],{"class":208},[67,138109,51974],{"class":77},[67,138111,61406],{"class":208},[67,138113,2017],{"class":77},[67,138115,138116],{"class":69,"line":161},[67,138117,2288],{"class":77},[67,138119,138120,138122,138125],{"class":69,"line":167},[67,138121,52148],{"class":51837},[67,138123,138124],{"class":112},"::after",[67,138126,16289],{"class":77},[67,138128,138129,138131,138133,138136],{"class":69,"line":173},[67,138130,138097],{"class":208},[67,138132,51974],{"class":77},[67,138134,138135],{"class":84},"\"→\"",[67,138137,2017],{"class":77},[67,138139,138140,138142,138144,138146],{"class":69,"line":180},[67,138141,71442],{"class":208},[67,138143,51974],{"class":77},[67,138145,62607],{"class":208},[67,138147,2017],{"class":77},[67,138149,138150],{"class":69,"line":186},[67,138151,2288],{"class":77},[725,138153],{"style":126945,"src":138154},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-133.png",[19,138156,138157],{},"如果使用字体图标时可以不复制后边的矩形框，复制前边的数字也是可以的",[725,138159],{"style":126945,"src":138160},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-134.png",[19,138162,138163],{},"但是在引用时需要先转义一下",[19,138165,138166],{},"content='\\e930'",[815,138168,138169],{"start":155},[818,138170,138171],{},"使用场景2",[19,138173,138174],{},"仿土豆效果",[19,138176,138177],{},"通过使用伪元素选择器可以减少body中盒子的数量",[57,138179,138180],{"className":127089,"code":138076,"language":127091,"meta":62,"style":62},[64,138181,138182,138186,138194,138204,138214,138218,138226,138236,138246],{"__ignoreMap":62},[67,138183,138184],{"class":69,"line":70},[67,138185,138083],{"class":202},[67,138187,138188,138190,138192],{"class":69,"line":143},[67,138189,52148],{"class":51837},[67,138191,138090],{"class":112},[67,138193,16289],{"class":77},[67,138195,138196,138198,138200,138202],{"class":69,"line":149},[67,138197,138097],{"class":208},[67,138199,51974],{"class":77},[67,138201,8371],{"class":84},[67,138203,2017],{"class":77},[67,138205,138206,138208,138210,138212],{"class":69,"line":155},[67,138207,128705],{"class":208},[67,138209,51974],{"class":77},[67,138211,61406],{"class":208},[67,138213,2017],{"class":77},[67,138215,138216],{"class":69,"line":161},[67,138217,2288],{"class":77},[67,138219,138220,138222,138224],{"class":69,"line":167},[67,138221,52148],{"class":51837},[67,138223,138124],{"class":112},[67,138225,16289],{"class":77},[67,138227,138228,138230,138232,138234],{"class":69,"line":173},[67,138229,138097],{"class":208},[67,138231,51974],{"class":77},[67,138233,138135],{"class":84},[67,138235,2017],{"class":77},[67,138237,138238,138240,138242,138244],{"class":69,"line":180},[67,138239,71442],{"class":208},[67,138241,51974],{"class":77},[67,138243,62607],{"class":208},[67,138245,2017],{"class":77},[67,138247,138248],{"class":69,"line":186},[67,138249,2288],{"class":77},[725,138251],{"style":126945,"src":138252},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-135.png",[815,138254,138255],{"start":161},[818,138256,138257],{},"使用场景3",[19,138259,138260],{},"清除浮动：原因回顾，大盒子没有设置高度，里边的两个盒子都设置浮动之后，大盒子会塌陷",[57,138262,138264],{"className":127089,"code":138263,"language":127091,"meta":62,"style":62},".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",[64,138265,138266,138272,138282,138286,138290,138294,138302,138312,138322,138326,138334,138344,138354],{"__ignoreMap":62},[67,138267,138268,138270],{"class":69,"line":70},[67,138269,130937],{"class":112},[67,138271,16289],{"class":77},[67,138273,138274,138276,138278,138280],{"class":69,"line":143},[67,138275,131569],{"class":208},[67,138277,51974],{"class":77},[67,138279,24453],{"class":208},[67,138281,2017],{"class":77},[67,138283,138284],{"class":69,"line":149},[67,138285,2288],{"class":77},[67,138287,138288],{"class":69,"line":155},[67,138289,136550],{"class":77},[67,138291,138292],{"class":69,"line":161},[67,138293,138083],{"class":202},[67,138295,138296,138298,138300],{"class":69,"line":167},[67,138297,52148],{"class":51837},[67,138299,138090],{"class":112},[67,138301,16289],{"class":77},[67,138303,138304,138306,138308,138310],{"class":69,"line":173},[67,138305,138097],{"class":208},[67,138307,51974],{"class":77},[67,138309,8371],{"class":84},[67,138311,2017],{"class":77},[67,138313,138314,138316,138318,138320],{"class":69,"line":180},[67,138315,128705],{"class":208},[67,138317,51974],{"class":77},[67,138319,61406],{"class":208},[67,138321,2017],{"class":77},[67,138323,138324],{"class":69,"line":186},[67,138325,2288],{"class":77},[67,138327,138328,138330,138332],{"class":69,"line":444},[67,138329,52148],{"class":51837},[67,138331,138124],{"class":112},[67,138333,16289],{"class":77},[67,138335,138336,138338,138340,138342],{"class":69,"line":2335},[67,138337,138097],{"class":208},[67,138339,51974],{"class":77},[67,138341,138135],{"class":84},[67,138343,2017],{"class":77},[67,138345,138346,138348,138350,138352],{"class":69,"line":2340},[67,138347,71442],{"class":208},[67,138349,51974],{"class":77},[67,138351,62607],{"class":208},[67,138353,2017],{"class":77},[67,138355,138356],{"class":69,"line":2346},[67,138357,2288],{"class":77},[19,138359,138360],{},"div {\nmargin: 0 auto;\n}",[57,138362,138365],{"className":138363,"code":138364,"language":5906},[5904],"\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",[64,138366,138364],{"__ignoreMap":62},[19,138368,138369],{},"如果想让多个元素都发生变化",[19,138371,138372],{},"不能如下操作：",[19,138374,138375],{},"transition: width 2s ease 0.5s;",[19,138377,138378],{},"transition: height 2s ease 0.5s;不对！！！",[19,138380,138381],{},"上方会样式冲突，导致不显示任何过渡效果",[19,138383,138384],{},"使用如下：加逗号隔开",[19,138386,138387],{},"transition: width 2s ease 0.5s, height 2s ease 0.5s, background-color 2s ease;",[19,138389,138390],{},"transition all 2s ease;",[14,138392,138394],{"id":138393},"_1426-过渡练习","14.2.6 过渡练习",[815,138396,138397],{},[818,138398,138399],{},"进度条",[725,138401],{"style":126945,"src":138402},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-141.png",[57,138404,138406],{"className":127089,"code":138405,"language":127091,"meta":62,"style":62},"div {\n  transition: all 0.3s ease;\n}\n",[64,138407,138408,138414,138432],{"__ignoreMap":62},[67,138409,138410,138412],{"class":69,"line":70},[67,138411,52148],{"class":51837},[67,138413,16289],{"class":77},[67,138415,138416,138419,138421,138423,138426,138428,138430],{"class":69,"line":143},[67,138417,138418],{"class":208},"  transition",[67,138420,51974],{"class":77},[67,138422,28658],{"class":208},[67,138424,138425],{"class":208}," 0.3",[67,138427,1551],{"class":73},[67,138429,79217],{"class":208},[67,138431,2017],{"class":77},[67,138433,138434],{"class":69,"line":149},[67,138435,2288],{"class":77},[815,138437,138438],{"start":143},[818,138439,138440],{},"小米logo",[19,138442,138443],{},"当将鼠标放到图标时，mi-logo会往右侧过渡；mi-home出现",[57,138445,138447],{"className":127089,"code":138446,"language":127091,"meta":62,"style":62},"\u002F* CSS3 过渡 *\u002F\ndiv {\n  transition: all 0.3s ease;\n  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n}\n",[64,138448,138449,138454,138460,138476,138481],{"__ignoreMap":62},[67,138450,138451],{"class":69,"line":70},[67,138452,138453],{"class":202},"\u002F* CSS3 过渡 *\u002F\n",[67,138455,138456,138458],{"class":69,"line":143},[67,138457,52148],{"class":51837},[67,138459,16289],{"class":77},[67,138461,138462,138464,138466,138468,138470,138472,138474],{"class":69,"line":149},[67,138463,138418],{"class":208},[67,138465,51974],{"class":77},[67,138467,28658],{"class":208},[67,138469,138425],{"class":208},[67,138471,1551],{"class":73},[67,138473,79217],{"class":208},[67,138475,2017],{"class":77},[67,138477,138478],{"class":69,"line":155},[67,138479,138480],{"class":202},"  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n",[67,138482,138483],{"class":69,"line":161},[67,138484,2288],{"class":77},[19,138486,138487],{},"理解：在设计的时候可以多考虑使用伪元素选择器，动画的时候不要想着只通过一个hover就可以实现，可以让before和after都添加hover来进行运动",[779,138489,138490],{},"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":62,"searchDepth":143,"depth":143,"links":138492},[138493,138498],{"id":136823,"depth":143,"text":136824,"children":138494},[138495,138496,138497],{"id":136827,"depth":149,"text":136828},{"id":136904,"depth":149,"text":136905},{"id":137235,"depth":149,"text":137236},{"id":137526,"depth":143,"text":137527,"children":138499},[138500,138501],{"id":137530,"depth":149,"text":137531},{"id":138393,"depth":149,"text":138394},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch14-html5css3",{"title":136815,"description":24093},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性","Bc1GNkPQVYZHk_zaMCAK05mQQ3fn_HZ43TEY42Pt3dw",{"id":138508,"title":138509,"body":138510,"description":24093,"extension":787,"meta":140254,"navigation":176,"path":140255,"seo":140256,"stem":140257,"__hash__":140258},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块.md","15. 品优购项目上篇-搭建与公共模块",{"type":7,"value":138511,"toc":140235},[138512,138515,138519,138522,138528,138534,138538,138540,138543,138546,138549,138552,138555,138558,138561,138565,138569,138572,138575,138578,138582,138585,138588,138593,138596,138599,138602,138606,138609,138618,138621,138624,138628,138631,138634,138639,138646,138660,138668,138675,138680,138683,138686,138689,138696,138700,138706,138712,138715,138718,138723,138729,138731,138739,138744,138747,138753,138755,138760,138765,138768,138770,138775,138778,138783,138788,138822,138826,138830,138833,138837,138840,138926,138929,138966,138969,139005,139009,139014,139027,139081,139083,139111,139113,139141,139147,139161,139163,139207,139209,139253,139256,139263,139274,139276,139303,139305,139331,139338,139354,139356,139450,139452,139546,139553,139556,139561,139567,139641,139644,139646,139682,139684,139720,139723,139730,139749,139752,139755,139757,139782,139784,139808,139811,139814,139844,139848,139851,139914,139916,139982,139984,140048,140051,140083,140085,140111,140113,140139,140142,140173,140175,140201,140203,140229,140232],[10,138513,138509],{"id":138514},"_15-品优购项目上篇-搭建与公共模块",[803,138516,138518],{"id":138517},"_151-项目规划","15.1 项目规划",[725,138520],{"style":126945,"src":138521},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-142.png",[19,138523,138524,138527],{},[336,138525,138526],{},"原型图："," 页面的布局，告知我们开发人员，整个页面的结构是怎样的，说白了就是什么地方放什么内容",[19,138529,138530,138533],{},[336,138531,138532],{},"效果图："," 告知我们开发人员，最终做出来的成品应该是什么样子，相比原型图，效果图里面包含内容，风格，字体大小等等",[803,138535,138537],{"id":138536},"_152-项目介绍","15.2 项目介绍",[19,138539,138526],{},[725,138541],{"style":126945,"src":138542},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-143.png",[19,138544,138545],{},"主页：",[725,138547],{"style":126945,"src":138548},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-144.png",[19,138550,138551],{},"列表页：",[725,138553],{"style":126945,"src":138554},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-145.png",[19,138556,138557],{},"注册页：",[725,138559],{"style":126945,"src":138560},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-146.png",[803,138562,138564],{"id":138563},"_153-项目搭建工作","15.3 项目搭建工作",[14,138566,138568],{"id":138567},"_1531-创建的文件夹如下称为项目结构","15.3.1 创建的文件夹如下（称为项目结构）",[725,138570],{"style":126945,"src":138571},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-147.png",[19,138573,138574],{},"经常更换的图片要放到upload文件夹中",[19,138576,138577],{},"不经常换的放到images文件夹中",[14,138579,138581],{"id":138580},"_1532-创建文件如下","15.3.2 创建文件如下",[725,138583],{"style":126945,"src":138584},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-148.png",[725,138586],{"style":126945,"src":138587},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-149.png",[19,138589,138590],{},[336,138591,138592],{},"初始化样式：",[19,138594,138595],{},"有些网站初始化的不太提倡 * { margin: 0; padding: 0; }",[19,138597,138598],{},"比如新浪： html,body,ul,li,ol,dl,dd,dt,p,h1,h2,h3,h4,h5,h6,form,fieldset,legend,img{margin:0;padding:0}",[19,138600,138601],{},"通配符选择器写代码的时候简单，但是浏览器渲染的时候没有后边类似于新浪这样的效率高",[14,138603,138605],{"id":138604},"_1533-项目模块化开发","15.3.3 项目模块化开发",[19,138607,138608],{},"所谓的模块化：将一个项目按照功能划分，一个功能一个模块，互不影响，模块化开发具有重复使用、更换方便等优点",[19,138610,138611,138612,138617],{},"这里最典型的应用就是 ",[336,138613,138614],{},[64,138615,138616],{},"common.css"," 公共样式。写好一个样式，其余的页面用到这些相同的样式",[725,138619],{"style":126945,"src":138620},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-150.png",[19,138622,138623],{},"通过link方法来引入",[14,138625,138627],{"id":138626},"_1534-网站-favicon-图标","15.3.4 网站 favicon 图标",[725,138629],{"style":126945,"src":138630},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-151.png",[19,138632,138633],{},"favicon.ico 一般用于作为缩略的网站标志，它显示在浏览器的地址栏或者标签上。目前主要的浏览器都支持 favicon.ico 图标",[815,138635,138636],{},[818,138637,138638],{},"制作favicon图标",[19,138640,138641,138642,138645],{},"①把品优购图标切成 ",[64,138643,138644],{},"png"," 图片",[19,138647,138648,138649,138651,138652,138655,138656],{},"②把 ",[64,138650,138644],{}," 图片转换为 ",[64,138653,138654],{},"ico"," 图标，这需要借助于第三方转换网站，例如比特虫：",[28,138657,138658],{"href":138658,"rel":138659},"http:\u002F\u002Fwww.bitbug.net\u002F",[32],[815,138661,138662,138665],{"start":143},[818,138663,138664],{},"favicon图标放到网站根目录下",[818,138666,138667],{},"HTML页面引入favicon",[19,138669,138670,138671,138674],{},"在html 页面里面的 ",[64,138672,138673],{},"\u003Chead> \u003C\u002Fhead>","元素之间引入代码",[19,138676,138677],{},[64,138678,138679],{},"\u003Clink rel=\"shortcut icon\" href=\"favicon.ico\" type=\"image\u002Fx-icon\"\u002F>",[19,138681,138682],{},"复制这行代码或者在生成这个的网站进行复制",[725,138684],{"style":126945,"src":138685},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-152.png",[19,138687,138688],{},"在网站后边输入\u002Ffavicon.ico就可以得到这个网站的图标",[19,138690,138691,138692],{},"例如:",[28,138693,138694],{"href":138694,"rel":138695},"https:\u002F\u002Fwww.jd.com\u002Ffavicon.ico",[32],[14,138697,138699],{"id":138698},"_1535-tdk三大标签seo优化","15.3.5 TDK三大标签SEO优化",[19,138701,138702,138705],{},[336,138703,138704],{},"SEO（Search Engine Optimization）"," 汉译为搜索引擎优化，是一种利用搜索引擎的规则提高网站在有关搜索引擎内自然排名的方式。",[19,138707,138708,138711],{},[336,138709,138710],{},"SEO"," 的目的是对网站进行深度的优化，从而帮助网站获取免费的流量，进而在搜索引擎上提升网站的排名，提高网站的知名度。",[19,138713,138714],{},"页面必须有三个标签用来符合 SEO 优化",[725,138716],{"style":126945,"src":138717},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-153.png",[815,138719,138720],{},[818,138721,138722],{},"title网站标题",[19,138724,138725,138728],{},[336,138726,138727],{},"建议："," 网站名（产品名）- 网站的介绍 （尽量不要超过30个汉字）",[19,138730,69327],{},[1863,138732,138733,138736],{},[818,138734,138735],{},"京东(JD.COM)-综合网购首选-正品低价、品质保障、配送及时、轻松购物！",[818,138737,138738],{},"小米商城 - 小米5s、红米Note 4、小米MIX、小米笔记本官方网站",[815,138740,138741],{"start":143},[818,138742,138743],{},"description网站描述",[19,138745,138746],{},"简要说明我们网站主要是做什么的",[19,138748,138749,138752],{},[336,138750,138751],{},"我们提倡"," ，description 作为网站的总体业务和主题概括，多采用“我们是…”、“我们提供…”、“×××网作为…”、“电话：010…”之类语句",[19,138754,69327],{},[19,138756,138757],{},[64,138758,138759],{},"\u003Cmeta name=\"description\" content=\"京东JD.COM-专业的综合网上购物商城,销售家电、数码通讯、电脑、家居百货、服装服饰、母婴、图书、食品等数万个品牌优质商品.便捷、诚信的服务，为您提供愉悦的网上购物体验!\" \u002F>",[815,138761,138762],{"start":149},[818,138763,138764],{},"keywords关键词",[19,138766,138767],{},"keywords 最好限制为 6～8 个关键词，关键词之间用英文逗号隔开，采用 关键词1,关键词2 的形式",[19,138769,69327],{},[19,138771,138772],{},[64,138773,138774],{},"\u003Cmeta name= \" keywords\" content=\"网上购物,网上商城,手机,笔记本,电脑,MP3,CD,VCD,DV,相机,数码,配件,手表,存储卡,京东\" \u002F>",[19,138776,138777],{},"这里它是电商所以写的多，把最好产品往前写，越好的产品权重越高",[19,138779,138780],{},[336,138781,138782],{},"对于我们前端人员来说，我们只需要准备好这三个标签，具体里面的内容，有专门的 SEO 人员准备",[815,138784,138785],{"start":155},[818,138786,138787],{},"代码总结",[57,138789,138790],{"className":127836,"code":131193,"language":127838,"meta":62,"style":62},[64,138791,138792,138796,138810,138814],{"__ignoreMap":62},[67,138793,138794],{"class":69,"line":70},[67,138795,131200],{"class":202},[67,138797,138798,138800,138802,138804,138806,138808],{"class":69,"line":143},[67,138799,1766],{"class":77},[67,138801,52148],{"class":51837},[67,138803,54023],{"class":112},[67,138805,909],{"class":77},[67,138807,131213],{"class":84},[67,138809,51844],{"class":77},[67,138811,138812],{"class":69,"line":149},[67,138813,131220],{"class":77},[67,138815,138816,138818,138820],{"class":69,"line":155},[67,138817,52322],{"class":77},[67,138819,52148],{"class":51837},[67,138821,51844],{"class":77},[803,138823,138825],{"id":138824},"_154-项目公共部分制作","15.4 项目公共部分制作",[14,138827,138829],{"id":138828},"_1541-常用模块类命名","15.4.1 常用模块类命名",[725,138831],{"style":126945,"src":138832},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-154.png",[14,138834,138836],{"id":138835},"_1542-快捷导航-shortcut-制作","15.4.2 快捷导航 shortcut 制作",[19,138838,138839],{},"布局思路：",[1863,138841,138842,138845,138848,138870,138903],{},[818,138843,138844],{},"通栏的盒子命名为 shortcut ，是快捷导航的意思。 注意这里的行高，可以继承给里面的子盒子",[818,138846,138847],{},"里面包含版心的盒子",[818,138849,138850,138851],{},"版心盒子里面包含 1 号左侧盒子左浮动",[1863,138852,138853,138861,138867],{},[818,138854,138855,138856,22217,138858,138860],{},"1 号盒子 里面包含一个",[64,138857,1863],{},[64,138859,1863],{},"包裹li，第一个li里面包裹文字就行，因为不能点击，第二个li包含两个a标签",[818,138862,138863,138864,138866],{},"里面的内容是水平排列，所以需要给",[64,138865,818],{},"设置浮动",[818,138868,138869],{},"文字要垂直居中，我们可以给 shortcut设置行高，因为行高可以继承，里面的孩子就不需要设置了",[818,138871,138872,138873],{},"版心盒子里面包含 2 号右侧盒子右浮动",[1863,138874,138875,138889,138894],{},[818,138876,138877,138878,22217,138880,138882,138883,138885,138886,138888],{},"2 号盒子 里面包含一个",[64,138879,1863],{},[64,138881,1863],{},"包裹",[64,138884,818],{},"，中间的",[64,138887,1777],{},"可以用样式去设置，也可以用字符 |",[818,138890,138891,138892,138866],{},"里面内容水平排列，给",[64,138893,818],{},[818,138895,138896,138897,138899,138900,138902],{},"找到里面所有偶数的 ",[64,138898,818],{}," 设置样式（偶数的 ",[64,138901,818],{}," 显示是一个 | 竖线，所以需要单独选择出来设置样式，利用nth-child就可以实现）",[818,138904,138905,138906],{},"需要用到字体图标",[1863,138907,138908,138914,138917,138920,138923],{},[818,138909,138910,138911],{},"利用伪元素的方式来实现字体图标，给需要添加的标签设置类名为 ： ",[64,138912,138913],{},"arrow-icon",[818,138915,138916],{},"先要引入字体图片的资源",[818,138918,138919],{},"在样式里面利用 font-face 来进行声明",[818,138921,138922],{},"在伪元素的 content属性设置 图标的编码",[818,138924,138925],{},"给伪元素设置font-family属性",[19,138927,138928],{},"结构实例代码：",[57,138930,138932],{"className":127089,"code":138931,"language":127091,"meta":62,"style":62},"div::before {\n  content: \"\";\n  display: block;\n}\n",[64,138933,138934,138942,138952,138962],{"__ignoreMap":62},[67,138935,138936,138938,138940],{"class":69,"line":70},[67,138937,52148],{"class":51837},[67,138939,138090],{"class":112},[67,138941,16289],{"class":77},[67,138943,138944,138946,138948,138950],{"class":69,"line":143},[67,138945,138097],{"class":208},[67,138947,51974],{"class":77},[67,138949,8371],{"class":84},[67,138951,2017],{"class":77},[67,138953,138954,138956,138958,138960],{"class":69,"line":149},[67,138955,128705],{"class":208},[67,138957,51974],{"class":77},[67,138959,61406],{"class":208},[67,138961,2017],{"class":77},[67,138963,138964],{"class":69,"line":155},[67,138965,2288],{"class":77},[19,138967,138968],{},"样式实例代码：",[57,138970,138971],{"className":127089,"code":138931,"language":127091,"meta":62,"style":62},[64,138972,138973,138981,138991,139001],{"__ignoreMap":62},[67,138974,138975,138977,138979],{"class":69,"line":70},[67,138976,52148],{"class":51837},[67,138978,138090],{"class":112},[67,138980,16289],{"class":77},[67,138982,138983,138985,138987,138989],{"class":69,"line":143},[67,138984,138097],{"class":208},[67,138986,51974],{"class":77},[67,138988,8371],{"class":84},[67,138990,2017],{"class":77},[67,138992,138993,138995,138997,138999],{"class":69,"line":149},[67,138994,128705],{"class":208},[67,138996,51974],{"class":77},[67,138998,61406],{"class":208},[67,139000,2017],{"class":77},[67,139002,139003],{"class":69,"line":155},[67,139004,2288],{"class":77},[14,139006,139008],{"id":139007},"_1543-header-头部模块搭建","15.4.3 header 头部模块搭建",[1863,139010,139011],{},[818,139012,139013],{},"header 盒子必须要有高度",[19,139015,139016,139017,139019,139020],{},"1 号盒子是 ",[64,139018,132101],{}," 标志定位，在正常开发过程中， ",[336,139021,139022,139023,139026],{},"logo的布局其实是有讲究的，需要进行 ",[64,139024,139025],{},"logoSEO","的优化 （★★★）",[1863,139028,139029,139037,139045,139072],{},[818,139030,139031,139033,139034,139036],{},[64,139032,132101],{}," 里面首先放一个 ",[64,139035,10],{}," 标签，目的是为了提权，告诉搜索引擎，这个地方很重要",[818,139038,139039,139041,139042,139044],{},[64,139040,10],{}," 里面再放一个链接，可以返回首页的，把 ",[64,139043,132101],{}," 的背景图片给链接即可",[818,139046,139047,139048],{},"为了搜索引擎收录我们，我们链接里面要放文字（网站名称），但是文字不要显示出来",[1863,139049,139050,139065],{},[818,139051,139052,139053,139056,139057,139060,139061,139064],{},"方法1：",[64,139054,139055],{},"text-indent"," 移到盒子外面（",[64,139058,139059],{},"text-indent: -9999px",") ，然后 ",[64,139062,139063],{},"overflow:hidden"," ，淘宝的做法",[818,139066,139067,139068,139071],{},"方法2：直接给 ",[64,139069,139070],{},"font-size: 0;"," 就看不到文字了，京东的做法",[818,139073,139074,139075,139077,139078,139080],{},"最后给链接一个 ",[64,139076,51944],{}," 属性，这样鼠标放到 ",[64,139079,132101],{}," 上就可以看到提示文字了",[19,139082,138928],{},[57,139084,139085],{"className":127836,"code":132322,"language":127838,"meta":62,"style":62},[64,139086,139087],{"__ignoreMap":62},[67,139088,139089,139091,139093,139095,139097,139099,139101,139103,139105,139107,139109],{"class":69,"line":70},[67,139090,1766],{"class":77},[67,139092,28],{"class":51837},[67,139094,61594],{"class":112},[67,139096,909],{"class":77},[67,139098,132337],{"class":84},[67,139100,132340],{"class":112},[67,139102,909],{"class":77},[67,139104,132345],{"class":84},[67,139106,132348],{"class":77},[67,139108,28],{"class":51837},[67,139110,51844],{"class":77},[19,139112,138968],{},[57,139114,139115],{"className":127836,"code":132322,"language":127838,"meta":62,"style":62},[64,139116,139117],{"__ignoreMap":62},[67,139118,139119,139121,139123,139125,139127,139129,139131,139133,139135,139137,139139],{"class":69,"line":70},[67,139120,1766],{"class":77},[67,139122,28],{"class":51837},[67,139124,61594],{"class":112},[67,139126,909],{"class":77},[67,139128,132337],{"class":84},[67,139130,132340],{"class":112},[67,139132,909],{"class":77},[67,139134,132345],{"class":84},[67,139136,132348],{"class":77},[67,139138,28],{"class":51837},[67,139140,51844],{"class":77},[19,139142,139143,139144,139146],{},"2 号盒子是 ",[64,139145,132114],{}," 搜索模块定位",[1863,139148,139149,139152,139155,139158],{},[818,139150,139151],{},"search盒子利用定位的方式放在对应的位置",[818,139153,139154],{},"search盒子设置绝对定位，header盒子设置相对定位",[818,139156,139157],{},"search盒子里面包含两个子元素，一个是输入框，一个是按钮，分别跟定固定的宽高（搜索框 宽度：454px；按钮宽度：80px）",[818,139159,139160],{},"输入框和按钮本来就是行内块元素，在一行显示，但是中间会有间隙，所以我们可以让让这两个元素浮动起来",[19,139162,138928],{},[57,139164,139165],{"className":127089,"code":132409,"language":127091,"meta":62,"style":62},[64,139166,139167,139189,139193,139203],{"__ignoreMap":62},[67,139168,139169,139171,139173,139175,139177,139179,139181,139183,139185,139187],{"class":69,"line":70},[67,139170,52148],{"class":51837},[67,139172,13153],{"class":77},[67,139174,19],{"class":51837},[67,139176,13153],{"class":77},[67,139178,10],{"class":51837},[67,139180,13153],{"class":77},[67,139182,1863],{"class":51837},[67,139184,13153],{"class":77},[67,139186,818],{"class":51837},[67,139188,16289],{"class":77},[67,139190,139191],{"class":69,"line":143},[67,139192,132438],{"class":202},[67,139194,139195,139197,139199,139201],{"class":69,"line":149},[67,139196,128705],{"class":208},[67,139198,51974],{"class":77},[67,139200,61406],{"class":208},[67,139202,2017],{"class":77},[67,139204,139205],{"class":69,"line":155},[67,139206,2288],{"class":77},[19,139208,138968],{},[57,139210,139211],{"className":127089,"code":132409,"language":127091,"meta":62,"style":62},[64,139212,139213,139235,139239,139249],{"__ignoreMap":62},[67,139214,139215,139217,139219,139221,139223,139225,139227,139229,139231,139233],{"class":69,"line":70},[67,139216,52148],{"class":51837},[67,139218,13153],{"class":77},[67,139220,19],{"class":51837},[67,139222,13153],{"class":77},[67,139224,10],{"class":51837},[67,139226,13153],{"class":77},[67,139228,1863],{"class":51837},[67,139230,13153],{"class":77},[67,139232,818],{"class":51837},[67,139234,16289],{"class":77},[67,139236,139237],{"class":69,"line":143},[67,139238,132438],{"class":202},[67,139240,139241,139243,139245,139247],{"class":69,"line":149},[67,139242,128705],{"class":208},[67,139244,51974],{"class":77},[67,139246,61406],{"class":208},[67,139248,2017],{"class":77},[67,139250,139251],{"class":69,"line":155},[67,139252,2288],{"class":77},[19,139254,139255],{},"这里为了避免给大盒子加边框子，小盒子不加边框塞进大盒子后，他们之间会有神奇的空隙问题，当浏览器缩放一定程度没有空隙，但是大部分都会有空隙问题，避免该问题，通过不给大盒子边框，给小盒子边框来解决",[19,139257,139258,139259,139262],{},"3 号盒子是 ",[64,139260,139261],{},"hotwords"," 热词模块定位",[1863,139264,139265,139268,139271],{},[818,139266,139267],{},"热词模块怎么简单怎么来，直接在里面放a标签即可",[818,139269,139270],{},"给里面所有的a标签设置 左右10px的外边距",[818,139272,139273],{},"给第一个a标签设置文字变红色（#c81623）",[19,139275,138928],{},[57,139277,139279],{"className":127089,"code":139278,"language":127091,"meta":62,"style":62},"div {\n  margin: 0 auto;\n}\n",[64,139280,139281,139287,139299],{"__ignoreMap":62},[67,139282,139283,139285],{"class":69,"line":70},[67,139284,52148],{"class":51837},[67,139286,16289],{"class":77},[67,139288,139289,139291,139293,139295,139297],{"class":69,"line":143},[67,139290,71007],{"class":208},[67,139292,51974],{"class":77},[67,139294,1051],{"class":208},[67,139296,52093],{"class":208},[67,139298,2017],{"class":77},[67,139300,139301],{"class":69,"line":149},[67,139302,2288],{"class":77},[19,139304,138968],{},[57,139306,139307],{"className":127089,"code":139278,"language":127091,"meta":62,"style":62},[64,139308,139309,139315,139327],{"__ignoreMap":62},[67,139310,139311,139313],{"class":69,"line":70},[67,139312,52148],{"class":51837},[67,139314,16289],{"class":77},[67,139316,139317,139319,139321,139323,139325],{"class":69,"line":143},[67,139318,71007],{"class":208},[67,139320,51974],{"class":77},[67,139322,1051],{"class":208},[67,139324,52093],{"class":208},[67,139326,2017],{"class":77},[67,139328,139329],{"class":69,"line":149},[67,139330,2288],{"class":77},[19,139332,139333,139334,139337],{},"4 号盒子是 ",[64,139335,139336],{},"shopcar"," 购物车模块",[1863,139339,139340,139345,139348,139351],{},[818,139341,123872,139342,139344],{},[64,139343,139336],{},"里面添加一个before伪元素和after伪元素，分别放置 购物车的图标和 右箭头",[818,139346,139347],{},"count 统计部分用绝对定位做",[818,139349,139350],{},"count 统计部分不要给宽度，因为可能买的件数比较多，让件数撑开就好了，给一个高度",[818,139352,139353],{},"一定注意左下角不是圆角，其余三个是圆角 写法： border-radius: 7px 7px 7px 0;",[19,139355,138928],{},[57,139357,139358],{"className":127089,"code":132521,"language":127091,"meta":62,"style":62},[64,139359,139360,139364,139378,139382,139396,139400,139414,139418,139432,139436],{"__ignoreMap":62},[67,139361,139362],{"class":69,"line":70},[67,139363,132528],{"class":202},[67,139365,139366,139368,139370,139372,139374,139376],{"class":69,"line":143},[67,139367,132533],{"class":112},[67,139369,80344],{"class":77},[67,139371,129449],{"class":208},[67,139373,51974],{"class":77},[67,139375,132542],{"class":208},[67,139377,130019],{"class":77},[67,139379,139380],{"class":69,"line":149},[67,139381,132549],{"class":202},[67,139383,139384,139386,139388,139390,139392,139394],{"class":69,"line":155},[67,139385,132554],{"class":112},[67,139387,80344],{"class":77},[67,139389,129449],{"class":208},[67,139391,51974],{"class":77},[67,139393,55301],{"class":208},[67,139395,130019],{"class":77},[67,139397,139398],{"class":69,"line":161},[67,139399,132569],{"class":202},[67,139401,139402,139404,139406,139408,139410,139412],{"class":69,"line":167},[67,139403,132574],{"class":112},[67,139405,80344],{"class":77},[67,139407,129449],{"class":208},[67,139409,51974],{"class":77},[67,139411,55368],{"class":208},[67,139413,130019],{"class":77},[67,139415,139416],{"class":69,"line":173},[67,139417,132589],{"class":202},[67,139419,139420,139422,139424,139426,139428,139430],{"class":69,"line":180},[67,139421,132594],{"class":112},[67,139423,80344],{"class":77},[67,139425,129449],{"class":208},[67,139427,51974],{"class":77},[67,139429,86770],{"class":208},[67,139431,130019],{"class":77},[67,139433,139434],{"class":69,"line":186},[67,139435,132609],{"class":202},[67,139437,139438,139440,139442,139444,139446,139448],{"class":69,"line":444},[67,139439,132614],{"class":112},[67,139441,80344],{"class":77},[67,139443,129449],{"class":208},[67,139445,51974],{"class":77},[67,139447,132623],{"class":208},[67,139449,130019],{"class":77},[19,139451,138968],{},[57,139453,139454],{"className":127089,"code":132521,"language":127091,"meta":62,"style":62},[64,139455,139456,139460,139474,139478,139492,139496,139510,139514,139528,139532],{"__ignoreMap":62},[67,139457,139458],{"class":69,"line":70},[67,139459,132528],{"class":202},[67,139461,139462,139464,139466,139468,139470,139472],{"class":69,"line":143},[67,139463,132533],{"class":112},[67,139465,80344],{"class":77},[67,139467,129449],{"class":208},[67,139469,51974],{"class":77},[67,139471,132542],{"class":208},[67,139473,130019],{"class":77},[67,139475,139476],{"class":69,"line":149},[67,139477,132549],{"class":202},[67,139479,139480,139482,139484,139486,139488,139490],{"class":69,"line":155},[67,139481,132554],{"class":112},[67,139483,80344],{"class":77},[67,139485,129449],{"class":208},[67,139487,51974],{"class":77},[67,139489,55301],{"class":208},[67,139491,130019],{"class":77},[67,139493,139494],{"class":69,"line":161},[67,139495,132569],{"class":202},[67,139497,139498,139500,139502,139504,139506,139508],{"class":69,"line":167},[67,139499,132574],{"class":112},[67,139501,80344],{"class":77},[67,139503,129449],{"class":208},[67,139505,51974],{"class":77},[67,139507,55368],{"class":208},[67,139509,130019],{"class":77},[67,139511,139512],{"class":69,"line":173},[67,139513,132589],{"class":202},[67,139515,139516,139518,139520,139522,139524,139526],{"class":69,"line":180},[67,139517,132594],{"class":112},[67,139519,80344],{"class":77},[67,139521,129449],{"class":208},[67,139523,51974],{"class":77},[67,139525,86770],{"class":208},[67,139527,130019],{"class":77},[67,139529,139530],{"class":69,"line":186},[67,139531,132609],{"class":202},[67,139533,139534,139536,139538,139540,139542,139544],{"class":69,"line":444},[67,139535,132614],{"class":112},[67,139537,80344],{"class":77},[67,139539,129449],{"class":208},[67,139541,51974],{"class":77},[67,139543,132623],{"class":208},[67,139545,130019],{"class":77},[14,139547,139549,139550,139552],{"id":139548},"_1544-nav导航模块制作","15.4.4 ",[64,139551,54250],{},"导航模块制作",[725,139554],{"style":126945,"src":139555},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-155.png",[19,139557,139558,139560],{},[64,139559,54250],{}," 盒子通栏有高度，而且有个下边框，里面包含版心，版心里面包含 1 号盒子 和 2号盒子",[19,139562,139563,139564],{},"1 号盒子左侧浮动，",[64,139565,139566],{},"dropdown",[1863,139568,139569,139579,139587,139593,139601,139611,139619,139630],{},[818,139570,139571,139572,101555,139575,139578],{},"1号盒子有讲究，根据相关性 里面包含 ",[64,139573,139574],{},".dt",[64,139576,139577],{},".dd"," 两个盒子",[818,139580,139581,139583,139584,139586],{},[64,139582,139574],{}," 内容是全部商品分类，然后把这个盒子的宽高设置跟父亲一样，这样就把 ",[64,139585,139577],{}," 挤到下面去了",[818,139588,139589,139590,139592],{},"给 ",[64,139591,139577],{}," 盒子设置宽度 和 高度，以及背景颜色",[818,139594,139589,139595,139597,139598,120774],{},[64,139596,139577],{}," 盒子里面定义 无序列表 （",[64,139599,139600],{},"ul > li > a",[818,139602,139603,139604,139606,139607,139610],{},"每个 ",[64,139605,818],{}," 都有一个高度（",[64,139608,139609],{},"31px","），宽度可以不用设置，让文字垂直居中，左边设置2个像素的margin值",[818,139612,139589,139613,139615,139616,120774],{},[64,139614,818],{}," 里面的a设置文字大小（",[64,139617,139618],{},"14px",[818,139620,139589,139621,139623,139624,139626,139627,139629],{},[64,139622,818],{}," 设置 ",[64,139625,128250],{},"，当鼠标移入的时候，让",[64,139628,818],{},"的背景变成白色，让里面的文字变成红色",[818,139631,139632,139634,139635,139637,139638,139640],{},[64,139633,818],{}," 右侧的三角 就可以利用 伪元素来实现，给伪元素设置字体图标，利用定位的方式放在",[64,139636,818],{},"的右侧，那么给",[64,139639,818],{},"设置相对定位",[19,139642,139643],{},"一定要注意相关性",[19,139645,138928],{},[57,139647,139648],{"className":127089,"code":138931,"language":127091,"meta":62,"style":62},[64,139649,139650,139658,139668,139678],{"__ignoreMap":62},[67,139651,139652,139654,139656],{"class":69,"line":70},[67,139653,52148],{"class":51837},[67,139655,138090],{"class":112},[67,139657,16289],{"class":77},[67,139659,139660,139662,139664,139666],{"class":69,"line":143},[67,139661,138097],{"class":208},[67,139663,51974],{"class":77},[67,139665,8371],{"class":84},[67,139667,2017],{"class":77},[67,139669,139670,139672,139674,139676],{"class":69,"line":149},[67,139671,128705],{"class":208},[67,139673,51974],{"class":77},[67,139675,61406],{"class":208},[67,139677,2017],{"class":77},[67,139679,139680],{"class":69,"line":155},[67,139681,2288],{"class":77},[19,139683,138968],{},[57,139685,139686],{"className":127089,"code":138931,"language":127091,"meta":62,"style":62},[64,139687,139688,139696,139706,139716],{"__ignoreMap":62},[67,139689,139690,139692,139694],{"class":69,"line":70},[67,139691,52148],{"class":51837},[67,139693,138090],{"class":112},[67,139695,16289],{"class":77},[67,139697,139698,139700,139702,139704],{"class":69,"line":143},[67,139699,138097],{"class":208},[67,139701,51974],{"class":77},[67,139703,8371],{"class":84},[67,139705,2017],{"class":77},[67,139707,139708,139710,139712,139714],{"class":69,"line":149},[67,139709,128705],{"class":208},[67,139711,51974],{"class":77},[67,139713,61406],{"class":208},[67,139715,2017],{"class":77},[67,139717,139718],{"class":69,"line":155},[67,139719,2288],{"class":77},[19,139721,139722],{},"尽量使用伪元素选择器添加后边的那个符号吧，当时使用的是em盒子加浮动做的",[19,139724,139725,139726,139729],{},"2 号盒子左侧浮动，",[64,139727,139728],{},"navitems"," 导航栏组",[1863,139731,139732,139737,139746],{},[818,139733,139734,139735],{},"里面结构是 ",[64,139736,139600],{},[818,139738,139739,139740,139742,139743,139745],{},"导航栏都是能点击的，所以我们不能给定宽度，给",[64,139741,28],{},"左右的",[64,139744,31420],{},"把两侧撑开",[818,139747,139748],{},"让文字垂直居中（行高等于高度）",[725,139750],{"style":126945,"src":139751},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-156.png",[19,139753,139754],{},"在制作导航栏是将li变为浮动，对a设置高度，这样就可以实现上图中的效果，并不一定非得点击文字才行，点击文字的周围也是可以的",[19,139756,138928],{},[57,139758,139760],{"className":127089,"code":139759,"language":127091,"meta":62,"style":62},".box {\n  float: left;\n}\n",[64,139761,139762,139768,139778],{"__ignoreMap":62},[67,139763,139764,139766],{"class":69,"line":70},[67,139765,130937],{"class":112},[67,139767,16289],{"class":77},[67,139769,139770,139772,139774,139776],{"class":69,"line":143},[67,139771,131569],{"class":208},[67,139773,51974],{"class":77},[67,139775,24453],{"class":208},[67,139777,2017],{"class":77},[67,139779,139780],{"class":69,"line":149},[67,139781,2288],{"class":77},[19,139783,138968],{},[57,139785,139786],{"className":127089,"code":139759,"language":127091,"meta":62,"style":62},[64,139787,139788,139794,139804],{"__ignoreMap":62},[67,139789,139790,139792],{"class":69,"line":70},[67,139791,130937],{"class":112},[67,139793,16289],{"class":77},[67,139795,139796,139798,139800,139802],{"class":69,"line":143},[67,139797,131569],{"class":208},[67,139799,51974],{"class":77},[67,139801,24453],{"class":208},[67,139803,2017],{"class":77},[67,139805,139806],{"class":69,"line":149},[67,139807,2288],{"class":77},[19,139809,139810],{},"补充一下下边这个美观问题，把大盒子的左边边框给挡住了，解决方法是给家用电器这个的大盒子一个magin，让它下去一些，就ok",[725,139812],{"style":126945,"src":139813},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-157.png",[57,139815,139816],{"className":127089,"code":131246,"language":127091,"meta":62,"style":62},[64,139817,139818,139824,139840],{"__ignoreMap":62},[67,139819,139820,139822],{"class":69,"line":70},[67,139821,52148],{"class":51837},[67,139823,16289],{"class":77},[67,139825,139826,139828,139830,139832,139834,139836,139838],{"class":69,"line":143},[67,139827,71433],{"class":208},[67,139829,51974],{"class":77},[67,139831,1077],{"class":208},[67,139833,52029],{"class":73},[67,139835,52058],{"class":208},[67,139837,130481],{"class":208},[67,139839,2017],{"class":77},[67,139841,139842],{"class":69,"line":149},[67,139843,2288],{"class":77},[14,139845,139847],{"id":139846},"_1545-footer底部模块制作","15.4.5 footer底部模块制作",[725,139849],{"style":126945,"src":139850},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-158.png",[1863,139852,139853,139858,139863],{},[818,139854,139855,139857],{},[64,139856,132292],{}," 页面底部盒子通栏给一个高度（415px）和灰色的背景",[818,139859,139860,139862],{},[64,139861,132292],{}," 里面有一个大的版心",[818,139864,139865,139866,139869,139870],{},"版心里面包含 1 号盒子，",[64,139867,139868],{},"mod_service"," 是服务模块，mod 是模块的意思",[1863,139871,139872,139877,139890,139906,139911],{},[818,139873,139589,139874,139876],{},[64,139875,139868],{}," 设置高度（80px）和下边框",[818,139878,139879,139880,139883,139884,139886,139887,139889],{},"在里面定义 ",[64,139881,139882],{},"ul > li"," ,每个",[64,139885,818],{}," 宽度是300px 高度是 50px，给每个",[64,139888,818],{},"设置35px的左内边距",[818,139891,139892,139893,139895,139896,139898,139899,139901,139902,19127,139904,120774],{},"在每个",[64,139894,818],{},"里面，放一个 ",[64,139897,23626],{},"（里面放图标），一个",[64,139900,52148],{},"（里面放",[64,139903,52148],{},[64,139905,19],{},[818,139907,139589,139908,139910],{},[64,139909,23626],{},"设置浮动，让h5与这个div左右排列",[818,139912,139913],{},"通过精灵图技术（核心思路：利用background-position来实现），把图标设置给h5",[19,139915,138928],{},[57,139917,139919],{"className":127089,"code":139918,"language":127091,"meta":62,"style":62},".icon {\n  width: 20px;\n  height: 20px;\n  background: url(sprites.png) no-repeat -10px -20px;\n}\n",[64,139920,139921,139927,139939,139951,139978],{"__ignoreMap":62},[67,139922,139923,139925],{"class":69,"line":70},[67,139924,134846],{"class":112},[67,139926,16289],{"class":77},[67,139928,139929,139931,139933,139935,139937],{"class":69,"line":143},[67,139930,71105],{"class":208},[67,139932,51974],{"class":77},[67,139934,1556],{"class":208},[67,139936,52029],{"class":73},[67,139938,2017],{"class":77},[67,139940,139941,139943,139945,139947,139949],{"class":69,"line":149},[67,139942,71325],{"class":208},[67,139944,51974],{"class":77},[67,139946,1556],{"class":208},[67,139948,52029],{"class":73},[67,139950,2017],{"class":77},[67,139952,139953,139955,139957,139959,139961,139963,139965,139967,139970,139972,139974,139976],{"class":69,"line":155},[67,139954,71148],{"class":208},[67,139956,51974],{"class":77},[67,139958,62263],{"class":208},[67,139960,864],{"class":77},[67,139962,134885],{"class":5935},[67,139964,14432],{"class":77},[67,139966,62273],{"class":208},[67,139968,139969],{"class":208}," -10",[67,139971,52029],{"class":73},[67,139973,134904],{"class":208},[67,139975,52029],{"class":73},[67,139977,2017],{"class":77},[67,139979,139980],{"class":69,"line":161},[67,139981,2288],{"class":77},[19,139983,138968],{},[57,139985,139986],{"className":127089,"code":139918,"language":127091,"meta":62,"style":62},[64,139987,139988,139994,140006,140018,140044],{"__ignoreMap":62},[67,139989,139990,139992],{"class":69,"line":70},[67,139991,134846],{"class":112},[67,139993,16289],{"class":77},[67,139995,139996,139998,140000,140002,140004],{"class":69,"line":143},[67,139997,71105],{"class":208},[67,139999,51974],{"class":77},[67,140001,1556],{"class":208},[67,140003,52029],{"class":73},[67,140005,2017],{"class":77},[67,140007,140008,140010,140012,140014,140016],{"class":69,"line":149},[67,140009,71325],{"class":208},[67,140011,51974],{"class":77},[67,140013,1556],{"class":208},[67,140015,52029],{"class":73},[67,140017,2017],{"class":77},[67,140019,140020,140022,140024,140026,140028,140030,140032,140034,140036,140038,140040,140042],{"class":69,"line":155},[67,140021,71148],{"class":208},[67,140023,51974],{"class":77},[67,140025,62263],{"class":208},[67,140027,864],{"class":77},[67,140029,134885],{"class":5935},[67,140031,14432],{"class":77},[67,140033,62273],{"class":208},[67,140035,139969],{"class":208},[67,140037,52029],{"class":73},[67,140039,134904],{"class":208},[67,140041,52029],{"class":73},[67,140043,2017],{"class":77},[67,140045,140046],{"class":69,"line":161},[67,140047,2288],{"class":77},[19,140049,140050],{},"版心里面包含 2 号盒子，mod_help 是帮助模块",[1863,140052,140053,140056,140062,140068,140080],{},[818,140054,140055],{},"给 mod_help 设置 50px的左内边距和20px的上内边距，给定高度（185px）",[818,140057,140058,140059,120774],{},"里面的布局利用 自定义列表来实现（",[64,140060,140061],{},"dl > dt + dd",[818,140063,139589,140064,140067],{},[64,140065,140066],{},"dl"," 设置浮动，让其可以水平排列，给每个dl盒子设置宽度",[818,140069,139589,140070,140073,140074,19127,140076,140079],{},[64,140071,140072],{},"dt"," 设置文字大小（16px），设置下外边距（10px），让",[64,140075,140072],{},[64,140077,140078],{},"dd","之间有些距离",[818,140081,140082],{},"最后一个 dl 结构和样式不一样，需要单独设置",[19,140084,138928],{},[57,140086,140087],{"className":127089,"code":139278,"language":127091,"meta":62,"style":62},[64,140088,140089,140095,140107],{"__ignoreMap":62},[67,140090,140091,140093],{"class":69,"line":70},[67,140092,52148],{"class":51837},[67,140094,16289],{"class":77},[67,140096,140097,140099,140101,140103,140105],{"class":69,"line":143},[67,140098,71007],{"class":208},[67,140100,51974],{"class":77},[67,140102,1051],{"class":208},[67,140104,52093],{"class":208},[67,140106,2017],{"class":77},[67,140108,140109],{"class":69,"line":149},[67,140110,2288],{"class":77},[19,140112,138968],{},[57,140114,140115],{"className":127089,"code":139278,"language":127091,"meta":62,"style":62},[64,140116,140117,140123,140135],{"__ignoreMap":62},[67,140118,140119,140121],{"class":69,"line":70},[67,140120,52148],{"class":51837},[67,140122,16289],{"class":77},[67,140124,140125,140127,140129,140131,140133],{"class":69,"line":143},[67,140126,71007],{"class":208},[67,140128,51974],{"class":77},[67,140130,1051],{"class":208},[67,140132,52093],{"class":208},[67,140134,2017],{"class":77},[67,140136,140137],{"class":69,"line":149},[67,140138,2288],{"class":77},[19,140140,140141],{},"版心里面包含 3 号盒子，mod_copyright 是版权模块",[1863,140143,140144,140153,140156,140167],{},[818,140145,140146,140147,140149,140150,140152],{},"分为上下两块，上面是 ",[64,140148,132309],{}," 友情链接，下面是 ",[64,140151,132302],{},"，给mod_copyright 大盒子设置 文字水平居中，20px的上内边距，让上面内容和下面内容之间有些间隙",[818,140154,140155],{},"把内容分别复制到相应模块中",[818,140157,139589,140158,140160,140161,140163,140164,140166],{},[64,140159,132309],{}," 设置 15px 的下外边距，给",[64,140162,132309],{}," 里面 的 ",[64,140165,28],{}," 标签设置 左右 3px 的外边距",[818,140168,140169,140170,140172],{},"给",[64,140171,132302],{}," 设置 20px 的行高",[19,140174,138928],{},[57,140176,140177],{"className":127089,"code":139278,"language":127091,"meta":62,"style":62},[64,140178,140179,140185,140197],{"__ignoreMap":62},[67,140180,140181,140183],{"class":69,"line":70},[67,140182,52148],{"class":51837},[67,140184,16289],{"class":77},[67,140186,140187,140189,140191,140193,140195],{"class":69,"line":143},[67,140188,71007],{"class":208},[67,140190,51974],{"class":77},[67,140192,1051],{"class":208},[67,140194,52093],{"class":208},[67,140196,2017],{"class":77},[67,140198,140199],{"class":69,"line":149},[67,140200,2288],{"class":77},[19,140202,138968],{},[57,140204,140205],{"className":127089,"code":139278,"language":127091,"meta":62,"style":62},[64,140206,140207,140213,140225],{"__ignoreMap":62},[67,140208,140209,140211],{"class":69,"line":70},[67,140210,52148],{"class":51837},[67,140212,16289],{"class":77},[67,140214,140215,140217,140219,140221,140223],{"class":69,"line":143},[67,140216,71007],{"class":208},[67,140218,51974],{"class":77},[67,140220,1051],{"class":208},[67,140222,52093],{"class":208},[67,140224,2017],{"class":77},[67,140226,140227],{"class":69,"line":149},[67,140228,2288],{"class":77},[19,140230,140231],{},"回顾：对于每行文字的间隔采用line-height （行高）来处理",[779,140233,140234],{},"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":62,"searchDepth":143,"depth":143,"links":140236},[140237,140238,140239,140246],{"id":138517,"depth":143,"text":138518},{"id":138536,"depth":143,"text":138537},{"id":138563,"depth":143,"text":138564,"children":140240},[140241,140242,140243,140244,140245],{"id":138567,"depth":149,"text":138568},{"id":138580,"depth":149,"text":138581},{"id":138604,"depth":149,"text":138605},{"id":138626,"depth":149,"text":138627},{"id":138698,"depth":149,"text":138699},{"id":138824,"depth":143,"text":138825,"children":140247},[140248,140249,140250,140251,140253],{"id":138828,"depth":149,"text":138829},{"id":138835,"depth":149,"text":138836},{"id":139007,"depth":149,"text":139008},{"id":139548,"depth":149,"text":140252},"15.4.4 nav导航模块制作",{"id":139846,"depth":149,"text":139847},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch15",{"title":138509,"description":24093},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块","dZrS8fvj_jmt1HT4kUOuOHSl-QqUov_mqMeo26p1bR8",{"id":140260,"title":140261,"body":140262,"description":24093,"extension":787,"meta":142664,"navigation":176,"path":142665,"seo":142666,"stem":142667,"__hash__":142668},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发.md","16. 品优购项目下篇-主体与页面开发",{"type":7,"value":140263,"toc":142641},[140264,140267,140271,140275,140287,140290,140293,140296,140307,140309,140333,140335,140359,140364,140367,140369,140405,140407,140443,140446,140451,140454,140457,140460,140490,140497,140500,140510,140512,140546,140549,140583,140589,140606,140608,140644,140646,140682,140687,140712,140714,140740,140742,140766,140773,140776,140840,140842,140884,140886,140926,140933,140938,140940,140970,140972,141002,141006,141009,141016,141028,141030,141056,141058,141082,141085,141087,141111,141117,141127,141129,141159,141161,141191,141198,141239,141241,141277,141279,141315,141319,141322,141325,141328,141334,141339,141342,141365,141368,141392,141395,141419,141424,141427,141430,141433,141436,141439,141513,141515,141545,141547,141577,141580,141583,141615,141619,141623,141637,141646,141649,141654,141656,141750,141752,141846,141869,141871,141895,141897,141921,141928,141931,141941,141943,141967,141972,141980,141982,142012,142017,142057,142059,142085,142087,142113,142117,142120,142125,142128,142132,142140,142147,142155,142157,142187,142189,142219,142227,142230,142233,142235,142265,142267,142297,142300,142305,142307,142331,142333,142357,142360,142445,142447,142471,142473,142497,142501,142503,142527,142529,142563,142567,142581,142584,142589,142592,142597,142600,142630,142638],[10,140265,140261],{"id":140266},"_16-品优购项目下篇-主体与页面开发",[803,140268,140270],{"id":140269},"_161-项目主体模块制作","16.1 项目主体模块制作",[14,140272,140274],{"id":140273},"_1611-首页制作","16.1.1 首页制作",[19,140276,140277,140279,140280,140282,140283,140286],{},[336,140278,102595],{}," 主体模块是 ",[336,140281,74595],{}," 里面专有的，注意需要新的样式文件 ",[336,140284,140285],{},"index.css，"," 就不要写在common.css中了",[725,140288],{"style":126945,"src":140289},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-159.png",[725,140291],{"style":126945,"src":140292},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-160.png",[19,140294,140295],{},"画红色线处才是main主体部分，左边那部分是与公共部分带有联系的，所以归于公共部分",[1863,140297,140298,140301,140304],{},[818,140299,140300],{},"main 盒子宽度为 980 像素，高度是455像素，位置距离左边 220px (margin-left ) ，这样就会被公共部分给挡住了，给高度就不用清除浮动",[818,140302,140303],{},"main 里面包含左侧盒子，宽度为 721像素，左浮动，focus 焦点图模块",[818,140305,140306],{},"main 里面包含右侧盒子，宽度为 250像素，右浮动，newsflash 新闻快报模块",[19,140308,138928],{},[57,140310,140311],{"className":127089,"code":139759,"language":127091,"meta":62,"style":62},[64,140312,140313,140319,140329],{"__ignoreMap":62},[67,140314,140315,140317],{"class":69,"line":70},[67,140316,130937],{"class":112},[67,140318,16289],{"class":77},[67,140320,140321,140323,140325,140327],{"class":69,"line":143},[67,140322,131569],{"class":208},[67,140324,51974],{"class":77},[67,140326,24453],{"class":208},[67,140328,2017],{"class":77},[67,140330,140331],{"class":69,"line":149},[67,140332,2288],{"class":77},[19,140334,138968],{},[57,140336,140337],{"className":127089,"code":139759,"language":127091,"meta":62,"style":62},[64,140338,140339,140345,140355],{"__ignoreMap":62},[67,140340,140341,140343],{"class":69,"line":70},[67,140342,130937],{"class":112},[67,140344,16289],{"class":77},[67,140346,140347,140349,140351,140353],{"class":69,"line":143},[67,140348,131569],{"class":208},[67,140350,51974],{"class":77},[67,140352,24453],{"class":208},[67,140354,2017],{"class":77},[67,140356,140357],{"class":69,"line":149},[67,140358,2288],{"class":77},[815,140360,140361],{},[818,140362,140363],{},"左侧focus模块制作",[725,140365],{"style":126945,"src":140366},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-161.png",[19,140368,138928],{},[57,140370,140371],{"className":127089,"code":128412,"language":127091,"meta":62,"style":62},[64,140372,140373,140381,140391,140401],{"__ignoreMap":62},[67,140374,140375,140377,140379],{"class":69,"line":70},[67,140376,54358],{"class":51837},[67,140378,62437],{"class":112},[67,140380,16289],{"class":77},[67,140382,140383,140385,140387,140389],{"class":69,"line":143},[67,140384,128427],{"class":208},[67,140386,51974],{"class":77},[67,140388,55426],{"class":208},[67,140390,2017],{"class":77},[67,140392,140393,140395,140397,140399],{"class":69,"line":149},[67,140394,71335],{"class":208},[67,140396,51974],{"class":77},[67,140398,55274],{"class":208},[67,140400,2017],{"class":77},[67,140402,140403],{"class":69,"line":155},[67,140404,2288],{"class":77},[19,140406,138968],{},[57,140408,140409],{"className":127089,"code":128412,"language":127091,"meta":62,"style":62},[64,140410,140411,140419,140429,140439],{"__ignoreMap":62},[67,140412,140413,140415,140417],{"class":69,"line":70},[67,140414,54358],{"class":51837},[67,140416,62437],{"class":112},[67,140418,16289],{"class":77},[67,140420,140421,140423,140425,140427],{"class":69,"line":143},[67,140422,128427],{"class":208},[67,140424,51974],{"class":77},[67,140426,55426],{"class":208},[67,140428,2017],{"class":77},[67,140430,140431,140433,140435,140437],{"class":69,"line":149},[67,140432,71335],{"class":208},[67,140434,51974],{"class":77},[67,140436,55274],{"class":208},[67,140438,2017],{"class":77},[67,140440,140441],{"class":69,"line":155},[67,140442,2288],{"class":77},[19,140444,140445],{},"对于经常换的图片要放在ul中li内，用img来表示，就不要拿它来当背景整了",[815,140447,140448],{"start":143},[818,140449,140450],{},"右侧newsflash模块制作",[725,140452],{"style":126945,"src":140453},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-162.png",[19,140455,140456],{},"右侧的模块 分为上中下三个盒子",[19,140458,140459],{},"结构代码：",[57,140461,140462],{"className":127836,"code":134591,"language":127838,"meta":62,"style":62},[64,140463,140464],{"__ignoreMap":62},[67,140465,140466,140468,140470,140472,140474,140476,140478,140480,140482,140484,140486,140488],{"class":69,"line":70},[67,140467,1766],{"class":77},[67,140469,725],{"class":51837},[67,140471,55776],{"class":112},[67,140473,909],{"class":77},[67,140475,134606],{"class":84},[67,140477,55784],{"class":112},[67,140479,909],{"class":77},[67,140481,134613],{"class":84},[67,140483,134616],{"class":112},[67,140485,909],{"class":77},[67,140487,134621],{"class":84},[67,140489,51844],{"class":77},[19,140491,140492,140493,140496],{},"1 号盒子为 ",[64,140494,140495],{},"news"," 新闻模块 高度为 165px",[725,140498],{"style":126945,"src":140499},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-163.png",[19,140501,140502,140503,140506,140507],{},"分为上下两个结构，但是两个模块都用 div，上面是 ",[64,140504,140505],{},"news-hd","，下面是 ",[64,140508,140509],{},"news-bd",[19,140511,140459],{},[57,140513,140514],{"className":127836,"code":131193,"language":127838,"meta":62,"style":62},[64,140515,140516,140520,140534,140538],{"__ignoreMap":62},[67,140517,140518],{"class":69,"line":70},[67,140519,131200],{"class":202},[67,140521,140522,140524,140526,140528,140530,140532],{"class":69,"line":143},[67,140523,1766],{"class":77},[67,140525,52148],{"class":51837},[67,140527,54023],{"class":112},[67,140529,909],{"class":77},[67,140531,131213],{"class":84},[67,140533,51844],{"class":77},[67,140535,140536],{"class":69,"line":149},[67,140537,131220],{"class":77},[67,140539,140540,140542,140544],{"class":69,"line":155},[67,140541,52322],{"class":77},[67,140543,52148],{"class":51837},[67,140545,51844],{"class":77},[19,140547,140548],{},"样式代码：",[57,140550,140551],{"className":127836,"code":131193,"language":127838,"meta":62,"style":62},[64,140552,140553,140557,140571,140575],{"__ignoreMap":62},[67,140554,140555],{"class":69,"line":70},[67,140556,131200],{"class":202},[67,140558,140559,140561,140563,140565,140567,140569],{"class":69,"line":143},[67,140560,1766],{"class":77},[67,140562,52148],{"class":51837},[67,140564,54023],{"class":112},[67,140566,909],{"class":77},[67,140568,131213],{"class":84},[67,140570,51844],{"class":77},[67,140572,140573],{"class":69,"line":149},[67,140574,131220],{"class":77},[67,140576,140577,140579,140581],{"class":69,"line":155},[67,140578,52322],{"class":77},[67,140580,52148],{"class":51837},[67,140582,51844],{"class":77},[19,140584,140585,140586,140588],{},"上面是",[64,140587,140505],{},"，设置高度是 33px，设置下边框",[1863,140590,140591,140597],{},[818,140592,140593,140594,140596],{},"里面放一个",[64,140595,23626],{}," 标题",[818,140598,140599,140600,140602,140603,140605],{},"放一个a",[64,140601,103230],{},"，内容是 更多，然后让 ",[64,140604,28],{}," 进行右浮动，三角用伪元素设置字体图标就好",[19,140607,140459],{},[57,140609,140610],{"className":127089,"code":138931,"language":127091,"meta":62,"style":62},[64,140611,140612,140620,140630,140640],{"__ignoreMap":62},[67,140613,140614,140616,140618],{"class":69,"line":70},[67,140615,52148],{"class":51837},[67,140617,138090],{"class":112},[67,140619,16289],{"class":77},[67,140621,140622,140624,140626,140628],{"class":69,"line":143},[67,140623,138097],{"class":208},[67,140625,51974],{"class":77},[67,140627,8371],{"class":84},[67,140629,2017],{"class":77},[67,140631,140632,140634,140636,140638],{"class":69,"line":149},[67,140633,128705],{"class":208},[67,140635,51974],{"class":77},[67,140637,61406],{"class":208},[67,140639,2017],{"class":77},[67,140641,140642],{"class":69,"line":155},[67,140643,2288],{"class":77},[19,140645,140548],{},[57,140647,140648],{"className":127089,"code":138931,"language":127091,"meta":62,"style":62},[64,140649,140650,140658,140668,140678],{"__ignoreMap":62},[67,140651,140652,140654,140656],{"class":69,"line":70},[67,140653,52148],{"class":51837},[67,140655,138090],{"class":112},[67,140657,16289],{"class":77},[67,140659,140660,140662,140664,140666],{"class":69,"line":143},[67,140661,138097],{"class":208},[67,140663,51974],{"class":77},[67,140665,8371],{"class":84},[67,140667,2017],{"class":77},[67,140669,140670,140672,140674,140676],{"class":69,"line":149},[67,140671,128705],{"class":208},[67,140673,51974],{"class":77},[67,140675,61406],{"class":208},[67,140677,2017],{"class":77},[67,140679,140680],{"class":69,"line":155},[67,140681,2288],{"class":77},[19,140683,140684,140685],{},"下面是",[64,140686,140509],{},[1863,140688,140689,140697],{},[818,140690,140691,140692,101555,140694,140696],{},"里面包含 ",[64,140693,1863],{},[64,140695,818],{}," 还有链接",[818,140698,140169,140699,140701,140702,140704,140705,140708,140709],{},[64,140700,818],{},"设置高度，24px，设置单行文字溢出省略： 1. 设置 ",[64,140703,131755],{}," 2.设置 ",[64,140706,140707],{},"white-space: nowrap;"," 3. 设置 ",[64,140710,140711],{},"text-overflow: ellipsis;",[19,140713,140459],{},[57,140715,140717],{"className":127089,"code":140716,"language":127091,"meta":62,"style":62},"div {\n  overflow: hidden;\n}\n",[64,140718,140719,140725,140736],{"__ignoreMap":62},[67,140720,140721,140723],{"class":69,"line":70},[67,140722,52148],{"class":51837},[67,140724,16289],{"class":77},[67,140726,140727,140730,140732,140734],{"class":69,"line":143},[67,140728,140729],{"class":208},"  overflow",[67,140731,51974],{"class":77},[67,140733,62251],{"class":208},[67,140735,2017],{"class":77},[67,140737,140738],{"class":69,"line":149},[67,140739,2288],{"class":77},[19,140741,140548],{},[57,140743,140744],{"className":127089,"code":140716,"language":127091,"meta":62,"style":62},[64,140745,140746,140752,140762],{"__ignoreMap":62},[67,140747,140748,140750],{"class":69,"line":70},[67,140749,52148],{"class":51837},[67,140751,16289],{"class":77},[67,140753,140754,140756,140758,140760],{"class":69,"line":143},[67,140755,140729],{"class":208},[67,140757,51974],{"class":77},[67,140759,62251],{"class":208},[67,140761,2017],{"class":77},[67,140763,140764],{"class":69,"line":149},[67,140765,2288],{"class":77},[19,140767,140768,140769,140772],{},"2 号盒子为 ",[64,140770,140771],{},"lifeservice"," 生活服务模块 高度为 209px",[725,140774],{"style":126945,"src":140775},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-164.png",[1863,140777,140778,140781,140791,140815,140826],{},[818,140779,140780],{},"设置边框（左右下边框）",[818,140782,140783,140784,140787,140788,140790],{},"里面的内容 是 ",[64,140785,140786],{},"ul > 12*li","，给",[64,140789,818],{},"设置宽 63px，高71px，设置 右边和下边的边框，设置浮动",[818,140792,140793,140794],{},"这样设置后，第四个li会装不开，掉下来，解决办法如下",[1863,140795,140796,140801,140810],{},[818,140797,140798,140800],{},[64,140799,140771],{}," 盒子宽度为 250 ，但是装不开里面的 4 个小 li",[818,140802,140803,140804,140806,140807,140809],{},"可以让 ",[64,140805,140771],{}," 里面的 ",[64,140808,1863],{}," 宽度为 252，就可以装的下 4 个 小 li",[818,140811,140812,140814],{},[64,140813,140771],{}," 盒子 overflow 隐藏多余的部分就可以了",[818,140816,117004,140817,140819,140820,140822,140823,140825],{},[64,140818,818],{}," 里面放一个 ",[64,140821,1298],{},"（里面放图标），下面的文本用 ",[64,140824,19],{}," 标签包裹",[818,140827,139589,140828,140830,140831,140833,140834,139623,140836,140839],{},[64,140829,1298],{}," 设置 24px宽和28px的高（注意 ",[64,140832,1298],{}," 是行内元素， 转成行内块），给 ",[64,140835,818],{},[64,140837,140838],{},"text-align:center"," 让里面内容居中显示",[19,140841,140459],{},[57,140843,140845],{"className":127089,"code":140844,"language":127091,"meta":62,"style":62},"span, a, em, strong {\n  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n  display: inline;\n}\n",[64,140846,140847,140865,140870,140880],{"__ignoreMap":62},[67,140848,140849,140851,140853,140855,140857,140859,140861,140863],{"class":69,"line":70},[67,140850,67],{"class":51837},[67,140852,13153],{"class":77},[67,140854,28],{"class":51837},[67,140856,13153],{"class":77},[67,140858,24270],{"class":51837},[67,140860,13153],{"class":77},[67,140862,336],{"class":51837},[67,140864,16289],{"class":77},[67,140866,140867],{"class":69,"line":143},[67,140868,140869],{"class":202},"  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n",[67,140871,140872,140874,140876,140878],{"class":69,"line":149},[67,140873,128705],{"class":208},[67,140875,51974],{"class":77},[67,140877,128767],{"class":208},[67,140879,2017],{"class":77},[67,140881,140882],{"class":69,"line":155},[67,140883,2288],{"class":77},[19,140885,140548],{},[57,140887,140888],{"className":127089,"code":140844,"language":127091,"meta":62,"style":62},[64,140889,140890,140908,140912,140922],{"__ignoreMap":62},[67,140891,140892,140894,140896,140898,140900,140902,140904,140906],{"class":69,"line":70},[67,140893,67],{"class":51837},[67,140895,13153],{"class":77},[67,140897,28],{"class":51837},[67,140899,13153],{"class":77},[67,140901,24270],{"class":51837},[67,140903,13153],{"class":77},[67,140905,336],{"class":51837},[67,140907,16289],{"class":77},[67,140909,140910],{"class":69,"line":143},[67,140911,140869],{"class":202},[67,140913,140914,140916,140918,140920],{"class":69,"line":149},[67,140915,128705],{"class":208},[67,140917,51974],{"class":77},[67,140919,128767],{"class":208},[67,140921,2017],{"class":77},[67,140923,140924],{"class":69,"line":155},[67,140925,2288],{"class":77},[19,140927,140928,140929,140932],{},"3 号盒子为 ",[64,140930,140931],{},"bargain"," 特价商品",[1863,140934,140935],{},[818,140936,140937],{},"这个比较简单，直接插入一张图片即可",[19,140939,140459],{},[57,140941,140942],{"className":127836,"code":134591,"language":127838,"meta":62,"style":62},[64,140943,140944],{"__ignoreMap":62},[67,140945,140946,140948,140950,140952,140954,140956,140958,140960,140962,140964,140966,140968],{"class":69,"line":70},[67,140947,1766],{"class":77},[67,140949,725],{"class":51837},[67,140951,55776],{"class":112},[67,140953,909],{"class":77},[67,140955,134606],{"class":84},[67,140957,55784],{"class":112},[67,140959,909],{"class":77},[67,140961,134613],{"class":84},[67,140963,134616],{"class":112},[67,140965,909],{"class":77},[67,140967,134621],{"class":84},[67,140969,51844],{"class":77},[19,140971,140548],{},[57,140973,140974],{"className":127836,"code":134591,"language":127838,"meta":62,"style":62},[64,140975,140976],{"__ignoreMap":62},[67,140977,140978,140980,140982,140984,140986,140988,140990,140992,140994,140996,140998,141000],{"class":69,"line":70},[67,140979,1766],{"class":77},[67,140981,725],{"class":51837},[67,140983,55776],{"class":112},[67,140985,909],{"class":77},[67,140987,134606],{"class":84},[67,140989,55784],{"class":112},[67,140991,909],{"class":77},[67,140993,134613],{"class":84},[67,140995,134616],{"class":112},[67,140997,909],{"class":77},[67,140999,134621],{"class":84},[67,141001,51844],{"class":77},[14,141003,141005],{"id":141004},"_1612-推荐模块制作","16.1.2 推荐模块制作",[725,141007],{"style":126945,"src":141008},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-165.png",[19,141010,141011,141012,141015],{},"大盒子 ",[64,141013,141014],{},"recom"," 推荐模块 recommend",[1863,141017,141018],{},[818,141019,141020,141021,141023,141024,141027],{},"给这个 ",[64,141022,141014],{}," 大盒子 设置版心，设置 163px的高，背景颜色（",[64,141025,141026],{},"#ebebeb","），设置距离上边 12px",[19,141029,140459],{},[57,141031,141033],{"className":127089,"code":141032,"language":127091,"meta":62,"style":62},"div {\n  background-color: #f0f0f0;\n}\n",[64,141034,141035,141041,141052],{"__ignoreMap":62},[67,141036,141037,141039],{"class":69,"line":70},[67,141038,52148],{"class":51837},[67,141040,16289],{"class":77},[67,141042,141043,141045,141047,141050],{"class":69,"line":143},[67,141044,71415],{"class":208},[67,141046,51974],{"class":77},[67,141048,141049],{"class":208},"#f0f0f0",[67,141051,2017],{"class":77},[67,141053,141054],{"class":69,"line":149},[67,141055,2288],{"class":77},[19,141057,140548],{},[57,141059,141060],{"className":127089,"code":141032,"language":127091,"meta":62,"style":62},[64,141061,141062,141068,141078],{"__ignoreMap":62},[67,141063,141064,141066],{"class":69,"line":70},[67,141065,52148],{"class":51837},[67,141067,16289],{"class":77},[67,141069,141070,141072,141074,141076],{"class":69,"line":143},[67,141071,71415],{"class":208},[67,141073,51974],{"class":77},[67,141075,141049],{"class":208},[67,141077,2017],{"class":77},[67,141079,141080],{"class":69,"line":149},[67,141081,2288],{"class":77},[19,141083,141084],{},"里面包含 2 个盒子， 浮动即可",[19,141086,140459],{},[57,141088,141089],{"className":127089,"code":139759,"language":127091,"meta":62,"style":62},[64,141090,141091,141097,141107],{"__ignoreMap":62},[67,141092,141093,141095],{"class":69,"line":70},[67,141094,130937],{"class":112},[67,141096,16289],{"class":77},[67,141098,141099,141101,141103,141105],{"class":69,"line":143},[67,141100,131569],{"class":208},[67,141102,51974],{"class":77},[67,141104,24453],{"class":208},[67,141106,2017],{"class":77},[67,141108,141109],{"class":69,"line":149},[67,141110,2288],{"class":77},[19,141112,141113,141114],{},"1 号盒子 ",[64,141115,141116],{},"recom_hd",[1863,141118,141119,141122],{},[818,141120,141121],{},"设置宽度205px，高度163px",[818,141123,140593,141124,141126],{},[64,141125,725],{},"标签，插入图片即可",[19,141128,140459],{},[57,141130,141131],{"className":127836,"code":134591,"language":127838,"meta":62,"style":62},[64,141132,141133],{"__ignoreMap":62},[67,141134,141135,141137,141139,141141,141143,141145,141147,141149,141151,141153,141155,141157],{"class":69,"line":70},[67,141136,1766],{"class":77},[67,141138,725],{"class":51837},[67,141140,55776],{"class":112},[67,141142,909],{"class":77},[67,141144,134606],{"class":84},[67,141146,55784],{"class":112},[67,141148,909],{"class":77},[67,141150,134613],{"class":84},[67,141152,134616],{"class":112},[67,141154,909],{"class":77},[67,141156,134621],{"class":84},[67,141158,51844],{"class":77},[19,141160,140548],{},[57,141162,141163],{"className":127836,"code":134591,"language":127838,"meta":62,"style":62},[64,141164,141165],{"__ignoreMap":62},[67,141166,141167,141169,141171,141173,141175,141177,141179,141181,141183,141185,141187,141189],{"class":69,"line":70},[67,141168,1766],{"class":77},[67,141170,725],{"class":51837},[67,141172,55776],{"class":112},[67,141174,909],{"class":77},[67,141176,134606],{"class":84},[67,141178,55784],{"class":112},[67,141180,909],{"class":77},[67,141182,134613],{"class":84},[67,141184,134616],{"class":112},[67,141186,909],{"class":77},[67,141188,134621],{"class":84},[67,141190,51844],{"class":77},[19,141192,141193,141194,141197],{},"2 号盒子 ",[64,141195,141196],{},"recom_bd"," ，注意里面的小竖线",[1863,141199,141200,141211,141214,141219,141224],{},[818,141201,141202,141203,141205,141206,141208,141209],{},"右侧结构里面放 ",[64,141204,1863],{}," 包含 4个 ",[64,141207,818],{},"，每个li里面包含一个",[64,141210,725],{},[818,141212,141213],{},"直接利用切片工具把里面的内容当成一张图片",[818,141215,139589,141216,141218],{},[64,141217,818],{}," 设置浮动",[818,141220,139589,141221,141223],{},[64,141222,725],{}," 设置宽高，宽度 248px，高度 163px",[818,141225,141226,141227,140787,141230,141232,141233,141235,141236],{},"小竖线利用伪元素来实现，给每一个li设置一个 after 伪元素，然后给这个伪元素设置绝对定位，设置",[64,141228,141229],{},"top 10px",[64,141231,818],{},"设置相对定位（注意，最后一个",[64,141234,818],{},"不用设置伪元素），可以利用 ",[64,141237,141238],{},"nth-child(-n+3){...}",[19,141240,140459],{},[57,141242,141243],{"className":127089,"code":138931,"language":127091,"meta":62,"style":62},[64,141244,141245,141253,141263,141273],{"__ignoreMap":62},[67,141246,141247,141249,141251],{"class":69,"line":70},[67,141248,52148],{"class":51837},[67,141250,138090],{"class":112},[67,141252,16289],{"class":77},[67,141254,141255,141257,141259,141261],{"class":69,"line":143},[67,141256,138097],{"class":208},[67,141258,51974],{"class":77},[67,141260,8371],{"class":84},[67,141262,2017],{"class":77},[67,141264,141265,141267,141269,141271],{"class":69,"line":149},[67,141266,128705],{"class":208},[67,141268,51974],{"class":77},[67,141270,61406],{"class":208},[67,141272,2017],{"class":77},[67,141274,141275],{"class":69,"line":155},[67,141276,2288],{"class":77},[19,141278,140548],{},[57,141280,141281],{"className":127089,"code":138931,"language":127091,"meta":62,"style":62},[64,141282,141283,141291,141301,141311],{"__ignoreMap":62},[67,141284,141285,141287,141289],{"class":69,"line":70},[67,141286,52148],{"class":51837},[67,141288,138090],{"class":112},[67,141290,16289],{"class":77},[67,141292,141293,141295,141297,141299],{"class":69,"line":143},[67,141294,138097],{"class":208},[67,141296,51974],{"class":77},[67,141298,8371],{"class":84},[67,141300,2017],{"class":77},[67,141302,141303,141305,141307,141309],{"class":69,"line":149},[67,141304,128705],{"class":208},[67,141306,51974],{"class":77},[67,141308,61406],{"class":208},[67,141310,2017],{"class":77},[67,141312,141313],{"class":69,"line":155},[67,141314,2288],{"class":77},[14,141316,141318],{"id":141317},"_1613-家用电器模块制作","16.1.3 家用电器模块制作",[725,141320],{"style":126945,"src":141321},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-166.png",[19,141323,141324],{},"注意这个 floor ，不要给高度，内容有多少，算多少",[19,141326,141327],{},"第一楼是家用电器模块： 里面包含两个盒子",[19,141329,141330,141333],{},[64,141331,141332],{},"box_hd"," 制作",[19,141335,141113,141336,141338],{},[64,141337,141332],{},"，给一个高度，有个下边框，里面分为左右 2 个盒子",[725,141340],{"style":126945,"src":141341},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-167.png",[1863,141343,141344,141349,141354,141357],{},[818,141345,141346,141348],{},[64,141347,141332],{}," 给 30px 的高度，2个像素的下边框",[818,141350,141351,141352],{},"里面放一个左侧 h3 的盒子，右侧一个div盒子，div盒子里面放 ",[64,141353,139600],{},[818,141355,141356],{},"左侧盒左浮动，右侧盒子右浮动",[818,141358,141359,141361,141362,141364],{},[64,141360,28],{},"标签之间的距离用左右的",[64,141363,31420],{},"撑开即可",[19,141366,141367],{},"结构代码",[57,141369,141370],{"className":127089,"code":139759,"language":127091,"meta":62,"style":62},[64,141371,141372,141378,141388],{"__ignoreMap":62},[67,141373,141374,141376],{"class":69,"line":70},[67,141375,130937],{"class":112},[67,141377,16289],{"class":77},[67,141379,141380,141382,141384,141386],{"class":69,"line":143},[67,141381,131569],{"class":208},[67,141383,51974],{"class":77},[67,141385,24453],{"class":208},[67,141387,2017],{"class":77},[67,141389,141390],{"class":69,"line":149},[67,141391,2288],{"class":77},[19,141393,141394],{},"样式代码",[57,141396,141397],{"className":127089,"code":139759,"language":127091,"meta":62,"style":62},[64,141398,141399,141405,141415],{"__ignoreMap":62},[67,141400,141401,141403],{"class":69,"line":70},[67,141402,130937],{"class":112},[67,141404,16289],{"class":77},[67,141406,141407,141409,141411,141413],{"class":69,"line":143},[67,141408,131569],{"class":208},[67,141410,51974],{"class":77},[67,141412,24453],{"class":208},[67,141414,2017],{"class":77},[67,141416,141417],{"class":69,"line":149},[67,141418,2288],{"class":77},[19,141420,141421,141333],{},[64,141422,141423],{},"box_bd",[19,141425,141426],{},"2 号盒子 box_bd，不要给高度",[725,141428],{"style":126945,"src":141429},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-168.png",[19,141431,141432],{},"这里边塞的都是现有的图片，给图片加上a超链接就可以实现跳转了，所以这个模块看似复杂，实际一点也不复杂，塞现有图片即可",[19,141434,141435],{},"还有这边为了简化css，对内部的五个盒子使用得1类名不用子代选择器，就仅仅类选择器就可以，这样只需要复制做好的家电模块，改一下名改一下图就又增加了新的模块",[19,141437,141438],{},"比如ul下li中有a，对a使用了类选择器.aa,在css中写的时候就不需要写成ul li .aa，直接写.aa就ok了",[1863,141440,141441,141453,141469],{},[818,141442,141443,141445,141446,141449,141450,141452],{},[64,141444,141423],{}," 属于是tab栏的内容区域，所以在这个里面先嵌套一个盒子 ",[64,141447,141448],{},"tab_content","，在",[64,141451,141448],{}," 里面包裹tab选项卡对应的内容",[818,141454,141455,141456,141459,141460,141462,141463,141465,141466,141468],{},"内容被一个大盒子包裹（",[64,141457,141458],{},"tab_list_item","），里面是 ",[64,141461,1863],{}," 包裹 5个 ",[64,141464,818],{},"，每个",[64,141467,818],{},"设置对应的宽度，然后设置浮动",[818,141470,141471,141472,141474,141475,141477,141478],{},"而这5个",[64,141473,818],{},"的宽度是不一致的，在这里我们的做法是 先把宽度的样式列出来，然后给对应的",[64,141476,818],{},"设置",[1863,141479,141480,141498,141501],{},[818,141481,141482,141483,141485,141486,141488,141489,141491,141492,141494,141495,141497],{},"第一个小 ",[64,141484,818],{}," 分为上下结构，上面是 ",[64,141487,1863],{}," 包裹 ",[64,141490,818],{}," ，",[64,141493,818],{},"里面包裹 ",[64,141496,28],{},"，下面插入一张图片",[818,141499,141500],{},"上面的li设置宽高，设置浮动，这样就排列下来了",[818,141502,141503,141504,141506,141507,141509,141510,141512],{},"后面的小 ",[64,141505,818],{}," 里面先放一个",[64,141508,28],{},"标签，然后在",[64,141511,28],{},"标签里面插入图片即可",[19,141514,141367],{},[57,141516,141517],{"className":127836,"code":134591,"language":127838,"meta":62,"style":62},[64,141518,141519],{"__ignoreMap":62},[67,141520,141521,141523,141525,141527,141529,141531,141533,141535,141537,141539,141541,141543],{"class":69,"line":70},[67,141522,1766],{"class":77},[67,141524,725],{"class":51837},[67,141526,55776],{"class":112},[67,141528,909],{"class":77},[67,141530,134606],{"class":84},[67,141532,55784],{"class":112},[67,141534,909],{"class":77},[67,141536,134613],{"class":84},[67,141538,134616],{"class":112},[67,141540,909],{"class":77},[67,141542,134621],{"class":84},[67,141544,51844],{"class":77},[19,141546,141394],{},[57,141548,141549],{"className":127836,"code":134591,"language":127838,"meta":62,"style":62},[64,141550,141551],{"__ignoreMap":62},[67,141552,141553,141555,141557,141559,141561,141563,141565,141567,141569,141571,141573,141575],{"class":69,"line":70},[67,141554,1766],{"class":77},[67,141556,725],{"class":51837},[67,141558,55776],{"class":112},[67,141560,909],{"class":77},[67,141562,134606],{"class":84},[67,141564,55784],{"class":112},[67,141566,909],{"class":77},[67,141568,134613],{"class":84},[67,141570,134616],{"class":112},[67,141572,909],{"class":77},[67,141574,134621],{"class":84},[67,141576,51844],{"class":77},[19,141578,141579],{},"tab栏切换需求！！！！！！介绍：",[725,141581],{"style":126945,"src":141582},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-169.png",[1863,141584,141585,141593,141599,141602],{},[818,141586,141587,141590,141591],{},[64,141588,141589],{},"tab","栏的布局是 ",[64,141592,139600],{},[818,141594,141595,141596,141598],{},"有多少个",[64,141597,141589],{},"选项卡，那么对应就有多少个内容",[818,141600,141601],{},"但是每一次只会显示一个内容块，其他内容进行的隐藏",[818,141603,141604,141605,141608,141609,141611,141612,141614],{},"等后面我们学习了",[64,141606,141607],{},"js","之后，我们就会配合",[64,141610,141607],{},"来实现，",[64,141613,141589],{},"栏的切换",[803,141616,141618],{"id":141617},"_162-列表制作","16.2 列表制作",[14,141620,141622],{"id":141621},"_1621-准备工作","16.2.1 准备工作",[1863,141624,141625,141628,141631,141634],{},[818,141626,141627],{},"列表页面是新的页面，我们需要新建页面文件 list.html",[818,141629,141630],{},"因为列表页的头部和底部基本一致，所以我们需要把首页中的头部和底部的结构复制过来",[818,141632,141633],{},"头部和底部的样式也需要，因此 list.html 中还需要引入 common.css",[818,141635,141636],{},"需要新的 list.css 样式文件，这是列表页专门的样式文件",[14,141638,141640,141641,101555,141643,141645],{"id":141639},"_1622-列表页-header-和-nav-修改","16.2.2 列表页 ",[64,141642,132094],{},[64,141644,54250],{}," 修改",[725,141647],{"style":126945,"src":141648},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-170.png",[1863,141650,141651],{},[818,141652,141653],{},"秒杀盒子 sk（ second kill ） 定位即可",[19,141655,140459],{},[57,141657,141658],{"className":127089,"code":132521,"language":127091,"meta":62,"style":62},[64,141659,141660,141664,141678,141682,141696,141700,141714,141718,141732,141736],{"__ignoreMap":62},[67,141661,141662],{"class":69,"line":70},[67,141663,132528],{"class":202},[67,141665,141666,141668,141670,141672,141674,141676],{"class":69,"line":143},[67,141667,132533],{"class":112},[67,141669,80344],{"class":77},[67,141671,129449],{"class":208},[67,141673,51974],{"class":77},[67,141675,132542],{"class":208},[67,141677,130019],{"class":77},[67,141679,141680],{"class":69,"line":149},[67,141681,132549],{"class":202},[67,141683,141684,141686,141688,141690,141692,141694],{"class":69,"line":155},[67,141685,132554],{"class":112},[67,141687,80344],{"class":77},[67,141689,129449],{"class":208},[67,141691,51974],{"class":77},[67,141693,55301],{"class":208},[67,141695,130019],{"class":77},[67,141697,141698],{"class":69,"line":161},[67,141699,132569],{"class":202},[67,141701,141702,141704,141706,141708,141710,141712],{"class":69,"line":167},[67,141703,132574],{"class":112},[67,141705,80344],{"class":77},[67,141707,129449],{"class":208},[67,141709,51974],{"class":77},[67,141711,55368],{"class":208},[67,141713,130019],{"class":77},[67,141715,141716],{"class":69,"line":173},[67,141717,132589],{"class":202},[67,141719,141720,141722,141724,141726,141728,141730],{"class":69,"line":180},[67,141721,132594],{"class":112},[67,141723,80344],{"class":77},[67,141725,129449],{"class":208},[67,141727,51974],{"class":77},[67,141729,86770],{"class":208},[67,141731,130019],{"class":77},[67,141733,141734],{"class":69,"line":186},[67,141735,132609],{"class":202},[67,141737,141738,141740,141742,141744,141746,141748],{"class":69,"line":444},[67,141739,132614],{"class":112},[67,141741,80344],{"class":77},[67,141743,129449],{"class":208},[67,141745,51974],{"class":77},[67,141747,132623],{"class":208},[67,141749,130019],{"class":77},[19,141751,140548],{},[57,141753,141754],{"className":127089,"code":132521,"language":127091,"meta":62,"style":62},[64,141755,141756,141760,141774,141778,141792,141796,141810,141814,141828,141832],{"__ignoreMap":62},[67,141757,141758],{"class":69,"line":70},[67,141759,132528],{"class":202},[67,141761,141762,141764,141766,141768,141770,141772],{"class":69,"line":143},[67,141763,132533],{"class":112},[67,141765,80344],{"class":77},[67,141767,129449],{"class":208},[67,141769,51974],{"class":77},[67,141771,132542],{"class":208},[67,141773,130019],{"class":77},[67,141775,141776],{"class":69,"line":149},[67,141777,132549],{"class":202},[67,141779,141780,141782,141784,141786,141788,141790],{"class":69,"line":155},[67,141781,132554],{"class":112},[67,141783,80344],{"class":77},[67,141785,129449],{"class":208},[67,141787,51974],{"class":77},[67,141789,55301],{"class":208},[67,141791,130019],{"class":77},[67,141793,141794],{"class":69,"line":161},[67,141795,132569],{"class":202},[67,141797,141798,141800,141802,141804,141806,141808],{"class":69,"line":167},[67,141799,132574],{"class":112},[67,141801,80344],{"class":77},[67,141803,129449],{"class":208},[67,141805,51974],{"class":77},[67,141807,55368],{"class":208},[67,141809,130019],{"class":77},[67,141811,141812],{"class":69,"line":173},[67,141813,132589],{"class":202},[67,141815,141816,141818,141820,141822,141824,141826],{"class":69,"line":180},[67,141817,132594],{"class":112},[67,141819,80344],{"class":77},[67,141821,129449],{"class":208},[67,141823,51974],{"class":77},[67,141825,86770],{"class":208},[67,141827,130019],{"class":77},[67,141829,141830],{"class":69,"line":186},[67,141831,132609],{"class":202},[67,141833,141834,141836,141838,141840,141842,141844],{"class":69,"line":444},[67,141835,132614],{"class":112},[67,141837,80344],{"class":77},[67,141839,129449],{"class":208},[67,141841,51974],{"class":77},[67,141843,132623],{"class":208},[67,141845,130019],{"class":77},[1863,141847,141848,141859],{},[818,141849,141850,141851,141854,141855,101555,141857],{},"1 号盒子左侧浮动 ",[64,141852,141853],{},"sk_list"," 里面包含 ",[64,141856,1863],{},[64,141858,818],{},[818,141860,141861,141862,141854,141865,101555,141867],{},"2 号盒子左侧浮动 ",[64,141863,141864],{},"sk_con",[64,141866,1863],{},[64,141868,818],{},[19,141870,140459],{},[57,141872,141873],{"className":127089,"code":139759,"language":127091,"meta":62,"style":62},[64,141874,141875,141881,141891],{"__ignoreMap":62},[67,141876,141877,141879],{"class":69,"line":70},[67,141878,130937],{"class":112},[67,141880,16289],{"class":77},[67,141882,141883,141885,141887,141889],{"class":69,"line":143},[67,141884,131569],{"class":208},[67,141886,51974],{"class":77},[67,141888,24453],{"class":208},[67,141890,2017],{"class":77},[67,141892,141893],{"class":69,"line":149},[67,141894,2288],{"class":77},[19,141896,140548],{},[57,141898,141899],{"className":127089,"code":139759,"language":127091,"meta":62,"style":62},[64,141900,141901,141907,141917],{"__ignoreMap":62},[67,141902,141903,141905],{"class":69,"line":70},[67,141904,130937],{"class":112},[67,141906,16289],{"class":77},[67,141908,141909,141911,141913,141915],{"class":69,"line":143},[67,141910,131569],{"class":208},[67,141912,51974],{"class":77},[67,141914,24453],{"class":208},[67,141916,2017],{"class":77},[67,141918,141919],{"class":69,"line":149},[67,141920,2288],{"class":77},[14,141922,141924,141925],{"id":141923},"_1623-列表页主体-sk_container","16.2.3 列表页主体 ",[64,141926,141927],{},"sk_container",[725,141929],{"style":126945,"src":141930},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-171.png",[1863,141932,141933,141938],{},[818,141934,141113,141935,141937],{},[64,141936,141927],{}," 给宽度 1200，不要给高度",[818,141939,141940],{},"一定不要忘记清除浮动",[19,141942,140459],{},[57,141944,141945],{"className":127089,"code":139759,"language":127091,"meta":62,"style":62},[64,141946,141947,141953,141963],{"__ignoreMap":62},[67,141948,141949,141951],{"class":69,"line":70},[67,141950,130937],{"class":112},[67,141952,16289],{"class":77},[67,141954,141955,141957,141959,141961],{"class":69,"line":143},[67,141956,131569],{"class":208},[67,141958,51974],{"class":77},[67,141960,24453],{"class":208},[67,141962,2017],{"class":77},[67,141964,141965],{"class":69,"line":149},[67,141966,2288],{"class":77},[815,141968,141969],{},[818,141970,141971],{},"sk_hd制作",[1863,141973,141974],{},[818,141975,141193,141976,141979],{},[64,141977,141978],{},"sk_hd"," ，插入图片即可",[19,141981,140459],{},[57,141983,141984],{"className":127836,"code":134591,"language":127838,"meta":62,"style":62},[64,141985,141986],{"__ignoreMap":62},[67,141987,141988,141990,141992,141994,141996,141998,142000,142002,142004,142006,142008,142010],{"class":69,"line":70},[67,141989,1766],{"class":77},[67,141991,725],{"class":51837},[67,141993,55776],{"class":112},[67,141995,909],{"class":77},[67,141997,134606],{"class":84},[67,141999,55784],{"class":112},[67,142001,909],{"class":77},[67,142003,134613],{"class":84},[67,142005,134616],{"class":112},[67,142007,909],{"class":77},[67,142009,134621],{"class":84},[67,142011,51844],{"class":77},[815,142013,142014],{"start":143},[818,142015,142016],{},"sk_bd制作",[1863,142018,142019],{},[818,142020,142021,142022,142025,142026,101555,142028,142030],{},"3 号盒子 ",[64,142023,142024],{},"sk_bd"," ，里面包含很多的 ",[64,142027,1863],{},[64,142029,818],{},[1863,142031,142032,142041],{},[818,142033,142034,142035,142037,142038,142040],{},"当鼠标移入到 ",[64,142036,818],{}," 上面的时候显示红色的边框，在这里先给 ",[64,142039,818],{}," 设置透明的边框，当鼠标移入的时候 设置为红色即可",[818,142042,142043,142044,142046,142047,142049,142050,142053,142054,142056],{},"由于给每个 ",[64,142045,818],{}," 都设置了外边距，导致一行的最后一个 ",[64,142048,818],{}," 掉了下来，在这里我们利用 ",[64,142051,142052],{},"nth-child(4n)"," 来选择出来每一行最后一个 ",[64,142055,818],{},"，去掉外边距就好了",[19,142058,140459],{},[57,142060,142061],{"className":127089,"code":139278,"language":127091,"meta":62,"style":62},[64,142062,142063,142069,142081],{"__ignoreMap":62},[67,142064,142065,142067],{"class":69,"line":70},[67,142066,52148],{"class":51837},[67,142068,16289],{"class":77},[67,142070,142071,142073,142075,142077,142079],{"class":69,"line":143},[67,142072,71007],{"class":208},[67,142074,51974],{"class":77},[67,142076,1051],{"class":208},[67,142078,52093],{"class":208},[67,142080,2017],{"class":77},[67,142082,142083],{"class":69,"line":149},[67,142084,2288],{"class":77},[19,142086,140548],{},[57,142088,142089],{"className":127089,"code":139278,"language":127091,"meta":62,"style":62},[64,142090,142091,142097,142109],{"__ignoreMap":62},[67,142092,142093,142095],{"class":69,"line":70},[67,142094,52148],{"class":51837},[67,142096,16289],{"class":77},[67,142098,142099,142101,142103,142105,142107],{"class":69,"line":143},[67,142100,71007],{"class":208},[67,142102,51974],{"class":77},[67,142104,1051],{"class":208},[67,142106,52093],{"class":208},[67,142108,2017],{"class":77},[67,142110,142111],{"class":69,"line":149},[67,142112,2288],{"class":77},[803,142114,142116],{"id":142115},"_163-注册页面制作","16.3 注册页面制作",[725,142118],{"style":126945,"src":142119},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-172.png",[19,142121,142122,142124],{},[336,142123,9744],{}," 注册页面比较隐私，为了保护用户信息，我们不需要对当前页面做SEO优化",[725,142126],{"style":126945,"src":142127},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-173.png",[14,142129,142131],{"id":142130},"_1631-准备工作","16.3.1 准备工作",[1863,142133,142134,142137],{},[818,142135,142136],{},"创建register.html，引入 base.css，引入favicon图标",[818,142138,142139],{},"创建register.css ，在html页面进行引入",[14,142141,142143,142144,142146],{"id":142142},"_1632-header-头部实现","16.3.2 ",[64,142145,132094],{}," 头部实现",[1863,142148,142149,142152],{},[818,142150,142151],{},"整个内容用 版心 进行包裹",[818,142153,142154],{},"第一个头部区域怎么简单怎么来，用一个header盒子包裹链接，链接里面放图片即可",[19,142156,140459],{},[57,142158,142159],{"className":127836,"code":134591,"language":127838,"meta":62,"style":62},[64,142160,142161],{"__ignoreMap":62},[67,142162,142163,142165,142167,142169,142171,142173,142175,142177,142179,142181,142183,142185],{"class":69,"line":70},[67,142164,1766],{"class":77},[67,142166,725],{"class":51837},[67,142168,55776],{"class":112},[67,142170,909],{"class":77},[67,142172,134606],{"class":84},[67,142174,55784],{"class":112},[67,142176,909],{"class":77},[67,142178,134613],{"class":84},[67,142180,134616],{"class":112},[67,142182,909],{"class":77},[67,142184,134621],{"class":84},[67,142186,51844],{"class":77},[19,142188,140548],{},[57,142190,142191],{"className":127836,"code":134591,"language":127838,"meta":62,"style":62},[64,142192,142193],{"__ignoreMap":62},[67,142194,142195,142197,142199,142201,142203,142205,142207,142209,142211,142213,142215,142217],{"class":69,"line":70},[67,142196,1766],{"class":77},[67,142198,725],{"class":51837},[67,142200,55776],{"class":112},[67,142202,909],{"class":77},[67,142204,134606],{"class":84},[67,142206,55784],{"class":112},[67,142208,909],{"class":77},[67,142210,134613],{"class":84},[67,142212,134616],{"class":112},[67,142214,909],{"class":77},[67,142216,134621],{"class":84},[67,142218,51844],{"class":77},[14,142220,142222,142223,142226],{"id":142221},"_1633-registerarea-主体模块实现","16.3.3 ",[64,142224,142225],{},"registerarea"," 主体模块实现",[725,142228],{"style":126945,"src":142229},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-174.png",[19,142231,142232],{},"整个大盒子 高度为 522px，设置4个边框",[19,142234,140459],{},[57,142236,142237],{"className":127089,"code":131246,"language":127091,"meta":62,"style":62},[64,142238,142239,142245,142261],{"__ignoreMap":62},[67,142240,142241,142243],{"class":69,"line":70},[67,142242,52148],{"class":51837},[67,142244,16289],{"class":77},[67,142246,142247,142249,142251,142253,142255,142257,142259],{"class":69,"line":143},[67,142248,71433],{"class":208},[67,142250,51974],{"class":77},[67,142252,1077],{"class":208},[67,142254,52029],{"class":73},[67,142256,52058],{"class":208},[67,142258,130481],{"class":208},[67,142260,2017],{"class":77},[67,142262,142263],{"class":69,"line":149},[67,142264,2288],{"class":77},[19,142266,140548],{},[57,142268,142269],{"className":127089,"code":131246,"language":127091,"meta":62,"style":62},[64,142270,142271,142277,142293],{"__ignoreMap":62},[67,142272,142273,142275],{"class":69,"line":70},[67,142274,52148],{"class":51837},[67,142276,16289],{"class":77},[67,142278,142279,142281,142283,142285,142287,142289,142291],{"class":69,"line":143},[67,142280,71433],{"class":208},[67,142282,51974],{"class":77},[67,142284,1077],{"class":208},[67,142286,52029],{"class":73},[67,142288,52058],{"class":208},[67,142290,130481],{"class":208},[67,142292,2017],{"class":77},[67,142294,142295],{"class":69,"line":149},[67,142296,2288],{"class":77},[19,142298,142299],{},"1号盒子 是一个 h3 标签，放标题",[1863,142301,142302],{},[818,142303,142304],{},"里面放 注册新用户 的文字，然后包一个 div的标签，让div标签右浮动",[19,142306,140459],{},[57,142308,142309],{"className":127089,"code":139759,"language":127091,"meta":62,"style":62},[64,142310,142311,142317,142327],{"__ignoreMap":62},[67,142312,142313,142315],{"class":69,"line":70},[67,142314,130937],{"class":112},[67,142316,16289],{"class":77},[67,142318,142319,142321,142323,142325],{"class":69,"line":143},[67,142320,131569],{"class":208},[67,142322,51974],{"class":77},[67,142324,24453],{"class":208},[67,142326,2017],{"class":77},[67,142328,142329],{"class":69,"line":149},[67,142330,2288],{"class":77},[19,142332,140548],{},[57,142334,142335],{"className":127089,"code":139759,"language":127091,"meta":62,"style":62},[64,142336,142337,142343,142353],{"__ignoreMap":62},[67,142338,142339,142341],{"class":69,"line":70},[67,142340,130937],{"class":112},[67,142342,16289],{"class":77},[67,142344,142345,142347,142349,142351],{"class":69,"line":143},[67,142346,131569],{"class":208},[67,142348,51974],{"class":77},[67,142350,24453],{"class":208},[67,142352,2017],{"class":77},[67,142354,142355],{"class":69,"line":149},[67,142356,2288],{"class":77},[19,142358,142359],{},"2号盒子 里面放注册的内容",[1863,142361,142362,142365,142374,142388,142401,142404,142407,142425,142439],{},[818,142363,142364],{},"先用一个盒子，把整个内容包裹起来，设置盒子宽度（600px），让这个盒子距上边50px，水平居中显示",[818,142366,142367,142368,142370,142371,142373],{},"里面的内容利用 ",[64,142369,1863],{}," 包含 ",[64,142372,818],{}," 来实现的（不需要用表格）",[818,142375,139603,142376,142378,142379,142381,142382,142384,142385,142387],{},[64,142377,818],{}," 里面，左侧放 ",[64,142380,34145],{}," 标签， 中间放",[64,142383,54358],{}," 标签， 右侧放 ",[64,142386,67],{}," 提示信息",[818,142389,142390,142391,142393,142394,142396,142397,142400],{},"左侧 ",[64,142392,34145],{},"里面的文字都是右对齐，我们可以给",[64,142395,34145],{},"设置一个宽度（88px），然后利用",[64,142398,142399],{},"text-align"," 来设置右对齐",[818,142402,142403],{},"input 表单设置 宽度 242px，高度 37px，设置边框",[818,142405,142406],{},"右侧 span修饰一下文字颜色",[818,142408,142409,142410],{},"提示信息的样式优化",[1863,142411,142412,142415,142418],{},[818,142413,142414],{},"定义一个 错误的样式，定义一个 正确的样式，然后给对应的盒子设置类名",[818,142416,142417],{},"在span里面放一个小盒子，这个小盒子用来显示 图标的，设置一下宽高 （20x20）",[818,142419,142420,142421,142424],{},"插入图片了之后，默认与文字是基线对齐，通过 ",[64,142422,142423],{},"vertical-algin"," 来设置 图片与文字对齐方式",[818,142426,142427,142428],{},"安装程度的布局，在第4个小 li 里面放 三个盒子，分别放 弱、中、强",[1863,142429,142430,142436],{},[818,142431,142432,142433,142435],{},"设置 ",[64,142434,24270],{}," 的 左右 12px 的内边距，设置一下文字颜色",[818,142437,142438],{},"分别设置 背景颜色",[818,142440,142441,142442,142444],{},"同意协议 和 完成注册 都是用 ",[64,142443,818],{}," 进行包裹",[19,142446,140459],{},[57,142448,142449],{"className":127089,"code":141032,"language":127091,"meta":62,"style":62},[64,142450,142451,142457,142467],{"__ignoreMap":62},[67,142452,142453,142455],{"class":69,"line":70},[67,142454,52148],{"class":51837},[67,142456,16289],{"class":77},[67,142458,142459,142461,142463,142465],{"class":69,"line":143},[67,142460,71415],{"class":208},[67,142462,51974],{"class":77},[67,142464,141049],{"class":208},[67,142466,2017],{"class":77},[67,142468,142469],{"class":69,"line":149},[67,142470,2288],{"class":77},[19,142472,140548],{},[57,142474,142475],{"className":127089,"code":141032,"language":127091,"meta":62,"style":62},[64,142476,142477,142483,142493],{"__ignoreMap":62},[67,142478,142479,142481],{"class":69,"line":70},[67,142480,52148],{"class":51837},[67,142482,16289],{"class":77},[67,142484,142485,142487,142489,142491],{"class":69,"line":143},[67,142486,71415],{"class":208},[67,142488,51974],{"class":77},[67,142490,141049],{"class":208},[67,142492,2017],{"class":77},[67,142494,142495],{"class":69,"line":149},[67,142496,2288],{"class":77},[14,142498,142500],{"id":142499},"_1634-底部实现","16.3.4 底部实现",[19,142502,140459],{},[57,142504,142505],{"className":127089,"code":141032,"language":127091,"meta":62,"style":62},[64,142506,142507,142513,142523],{"__ignoreMap":62},[67,142508,142509,142511],{"class":69,"line":70},[67,142510,52148],{"class":51837},[67,142512,16289],{"class":77},[67,142514,142515,142517,142519,142521],{"class":69,"line":143},[67,142516,71415],{"class":208},[67,142518,51974],{"class":77},[67,142520,141049],{"class":208},[67,142522,2017],{"class":77},[67,142524,142525],{"class":69,"line":149},[67,142526,2288],{"class":77},[19,142528,140548],{},[57,142530,142531],{"className":127836,"code":131193,"language":127838,"meta":62,"style":62},[64,142532,142533,142537,142551,142555],{"__ignoreMap":62},[67,142534,142535],{"class":69,"line":70},[67,142536,131200],{"class":202},[67,142538,142539,142541,142543,142545,142547,142549],{"class":69,"line":143},[67,142540,1766],{"class":77},[67,142542,52148],{"class":51837},[67,142544,54023],{"class":112},[67,142546,909],{"class":77},[67,142548,131213],{"class":84},[67,142550,51844],{"class":77},[67,142552,142553],{"class":69,"line":149},[67,142554,131220],{"class":77},[67,142556,142557,142559,142561],{"class":69,"line":155},[67,142558,52322],{"class":77},[67,142560,52148],{"class":51837},[67,142562,51844],{"class":77},[803,142564,142566],{"id":142565},"_164-项目总结","16.4 项目总结",[815,142568,142569,142572,142575,142578],{},[818,142570,142571],{},"大盒子添加水平居中后，它的子盒子也会水平居中",[818,142573,142574],{},"一般情况下，a包含有宽度的盒子，a需要转换为块级元素",[818,142576,142577],{},"一个盒子里边的子盒子进行浮动的时候，如果在父盒子中放不开，则会导致子盒子放不下的跑到下边去",[818,142579,142580],{},"出现下图注意点，多半是因为文字环绕浮动的盒子了，解决方式就是在这个浮动盒子的父盒子设置为多余父盒子的部分进行隐藏：overflow:hidden;隐藏掉多余的部分，外边的文字就没有浮动盒子了，就可以实现位置的 空置，文字就不在环绕了",[725,142582],{"style":126945,"src":142583},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-175.png",[815,142585,142586],{"start":161},[818,142587,142588],{},"对于行内块元素，如果要类似于下边图片的效果，可以使用padding来撑开盒子，不要用margin，这个是处理盒子之间的问题",[725,142590],{"style":126945,"src":142591},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-176.png",[815,142593,142594],{"start":167},[818,142595,142596],{},"对于提交按钮不要使用button，要使用input，参数选择submit，在里边的value中写的字，在给input设置宽度和高度后，这个文字会居中",[725,142598],{"style":126945,"src":142599},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-177.png",[57,142601,142602],{"className":127836,"code":137246,"language":127838,"meta":62,"style":62},[64,142603,142604],{"__ignoreMap":62},[67,142605,142606,142608,142610,142612,142614,142616,142618,142620,142622,142624,142626,142628],{"class":69,"line":70},[67,142607,1766],{"class":77},[67,142609,54358],{"class":51837},[67,142611,54361],{"class":112},[67,142613,909],{"class":77},[67,142615,63236],{"class":84},[67,142617,15637],{"class":112},[67,142619,909],{"class":77},[67,142621,137267],{"class":84},[67,142623,61557],{"class":112},[67,142625,909],{"class":77},[67,142627,137274],{"class":84},[67,142629,51844],{"class":77},[815,142631,142632,142635],{"start":173},[818,142633,142634],{},"如果图片过大，想要缩放它的话，只需要设置宽度或者高度其中一个就可以，另一个参数就会等比缩放",[818,142636,142637],{},"使用a链接，鼠标放上去提示信息，在a中使用title属性",[779,142639,142640],{},"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":62,"searchDepth":143,"depth":143,"links":142642},[142643,142648,142655,142663],{"id":140269,"depth":143,"text":140270,"children":142644},[142645,142646,142647],{"id":140273,"depth":149,"text":140274},{"id":141004,"depth":149,"text":141005},{"id":141317,"depth":149,"text":141318},{"id":141617,"depth":143,"text":141618,"children":142649},[142650,142651,142653],{"id":141621,"depth":149,"text":141622},{"id":141639,"depth":149,"text":142652},"16.2.2 列表页 header 和 nav 修改",{"id":141923,"depth":149,"text":142654},"16.2.3 列表页主体 sk_container",{"id":142115,"depth":143,"text":142116,"children":142656},[142657,142658,142660,142662],{"id":142130,"depth":149,"text":142131},{"id":142142,"depth":149,"text":142659},"16.3.2 header 头部实现",{"id":142221,"depth":149,"text":142661},"16.3.3 registerarea 主体模块实现",{"id":142499,"depth":149,"text":142500},{"id":142565,"depth":143,"text":142566},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch16",{"title":140261,"description":24093},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发","kRJOBRy9l0VcQGyFjUTtaqBcx5fbxBnGM_Nor-phNrY",{"id":142670,"title":142671,"body":142672,"description":24093,"extension":787,"meta":142780,"navigation":176,"path":142781,"seo":142782,"stem":142783,"__hash__":142784},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布.md","17. Web服务器与网站发布",{"type":7,"value":142673,"toc":142775},[142674,142677,142681,142684,142687,142696,142705,142709,142714,142721,142739,142742,142745,142748,142751,142754,142757,142760,142763,142766,142769,142772],[10,142675,142671],{"id":142676},"_17-web服务器与网站发布",[803,142678,142680],{"id":142679},"_171-web服务器","17.1 Web服务器",[19,142682,142683],{},"把自己网站上传到服务器上，可以让其他人访问",[725,142685],{"style":126945,"src":142686},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-178.png",[19,142688,142689,142692,142693],{},[336,142690,142691],{},"服务器"," （我们也会称之为主机）是提供计算服务的设备，它也是一台计算机。在网络环境下，根据服务器提供的服务类型不同，服务器又分为文件服务器、数据库服务器、应用程序服务器、 ",[336,142694,142695],{},"Web 服务器等",[19,142697,142698,142699,101555,142702,26449],{},"根据服务器在网络中所在的位置不同，又可分为 ",[336,142700,142701],{},"本地服务器（自己电脑设置为服务器，就是本地服务器）",[336,142703,142704],{},"远程服务器",[14,142706,142708],{"id":142707},"_1711-将自己的网站上传到远程服务器","17.1.1 将自己的网站上传到远程服务器（★★★）",[19,142710,142711],{},[336,142712,142713],{},"注意：一般稳定的服务器都是需要收费的。 比如：阿里云",[19,142715,142716,142717],{},"这里给大家推荐一个免费的远程服务器（免费空间） ",[28,142718,142719],{"href":142719,"rel":142720},"http:\u002F\u002Ffree.3v.do\u002F",[32],[1863,142722,142723,142726,142729,142736],{},[818,142724,142725],{},"去免费空间网站注册账号。",[818,142727,142728],{},"记录下主机名、用户名、密码、域名。",[818,142730,142731,142732,142735],{},"利用 ",[64,142733,142734],{},"utftp"," 软件 上传网站到远程服务器",[818,142737,142738],{},"在浏览器中输入域名，即可访问我们的品优购网站了",[19,142740,142741],{},"使用软件上传，对上传软件文件进行解压",[725,142743],{"style":126945,"src":142744},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-179.png",[725,142746],{"style":126945,"src":142747},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-180.png",[19,142749,142750],{},"输入刚刚申请的服务器账号信息：",[725,142752],{"style":126945,"src":142753},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-181.png",[725,142755],{"style":126945,"src":142756},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-182.png",[725,142758],{"style":126945,"src":142759},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-183.png",[725,142761],{"style":126945,"src":142762},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-184.png",[19,142764,142765],{},"将内容拖过去即可，左边是电脑文件，右边是服务器",[725,142767],{"style":126945,"src":142768},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-185.png",[19,142770,142771],{},"浏览器输入域名即可访问",[19,142773,142774],{},"首页一定必须是index",{"title":62,"searchDepth":143,"depth":143,"links":142776},[142777],{"id":142679,"depth":143,"text":142680,"children":142778},[142779],{"id":142707,"depth":149,"text":142708},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch17-web",{"title":142671,"description":24093},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布","cCpziV1cqCY-g-yi7uFqH5oT2wBaRMsy1XAXBDnoXXo",{"id":142786,"title":142787,"body":142788,"description":24093,"extension":787,"meta":143715,"navigation":176,"path":143716,"seo":143717,"stem":143718,"__hash__":143719},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换.md","18. 2D动画与3D转换",{"type":7,"value":142789,"toc":143698},[142790,142793,142797,142800,142803,142814,142817,142821,142825,142830,142833,142836,142839,142842,142846,142872,142876,142880,142883,142886,142890,142923,142927,142930,142933,142997,143001,143005,143008,143011,143014,143018,143063,143067,143070,143100,143104,143108,143111,143114,143118,143121,143190,143193,143301,143303,143309,143313,143316,143319,143415,143418,143422,143446,143450,143453,143457,143460,143464,143467,143470,143473,143476,143480,143483,143486,143490,143494,143497,143500,143503,143506,143510,143513,143517,143520,143523,143568,143572,143576,143579,143582,143585,143617,143621,143624,143658,143662,143665,143695],[10,142791,142787],{"id":142792},"_18-2d动画与3d转换",[803,142794,142796],{"id":142795},"_181-css3-2d转换","18.1 CSS3 2D转换",[19,142798,142799],{},"**转换（transform）**是CSS3中具有颠覆性的特征之一，可以实现元素的位移、旋转、缩放等效果",[19,142801,142802],{},"转换（transform）你可以简单理解为变形",[1863,142804,142805,142808,142811],{},[818,142806,142807],{},"移动：translate",[818,142809,142810],{},"旋转：rotate",[818,142812,142813],{},"缩放：scale",[725,142815],{"style":126945,"src":142816},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-186.png",[14,142818,142820],{"id":142819},"_1811-2d-转换之移动-translate","18.1.1 2D 转换之移动 translate",[40,142822,142824],{"id":142823},"_18111-translate介绍","18.1.1.1 translate介绍",[19,142826,142827,142828],{},"2D移动是2D转换里面的一种功能，可以改变元素在页面中的位置，类似",[336,142829,133748],{},[725,142831],{"style":126945,"src":142832},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-187.png",[19,142834,142835],{},"translate最大的优点就是不会影响其他元素的位置，可以凭借这一优点去整过渡效果transition",[19,142837,142838],{},"对于行内元素无效",[19,142840,142841],{},"总结：移动盒子的位置三种方法：定位、盒子的外边距、2d转换移动",[40,142843,142845],{"id":142844},"_18112-盒子实现水平居中","18.1.1.2 盒子实现水平居中",[57,142847,142848],{"className":127089,"code":139278,"language":127091,"meta":62,"style":62},[64,142849,142850,142856,142868],{"__ignoreMap":62},[67,142851,142852,142854],{"class":69,"line":70},[67,142853,52148],{"class":51837},[67,142855,16289],{"class":77},[67,142857,142858,142860,142862,142864,142866],{"class":69,"line":143},[67,142859,71007],{"class":208},[67,142861,51974],{"class":77},[67,142863,1051],{"class":208},[67,142865,52093],{"class":208},[67,142867,2017],{"class":77},[67,142869,142870],{"class":69,"line":149},[67,142871,2288],{"class":77},[14,142873,142875],{"id":142874},"_1812-2d-转换之旋转-rotate","18.1.2 2D 转换之旋转 rotate",[40,142877,142879],{"id":142878},"_18121-rotate介绍","18.1.2.1 rotate介绍",[19,142881,142882],{},"2D旋转指的是让元素在2维平面内顺时针旋转或者逆时针旋转",[725,142884],{"style":126945,"src":142885},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-188.png",[40,142887,142889],{"id":142888},"_18122-旋转效果","18.1.2.2 旋转效果",[57,142891,142893],{"className":127089,"code":142892,"language":127091,"meta":62,"style":62},"div {\n  transform: rotate(45deg);\n}\n",[64,142894,142895,142901,142919],{"__ignoreMap":62},[67,142896,142897,142899],{"class":69,"line":70},[67,142898,52148],{"class":51837},[67,142900,16289],{"class":77},[67,142902,142903,142905,142907,142910,142912,142914,142917],{"class":69,"line":143},[67,142904,137073],{"class":208},[67,142906,51974],{"class":77},[67,142908,142909],{"class":208},"rotate",[67,142911,864],{"class":77},[67,142913,1386],{"class":208},[67,142915,142916],{"class":73},"deg",[67,142918,3440],{"class":77},[67,142920,142921],{"class":69,"line":149},[67,142922,2288],{"class":77},[40,142924,142926],{"id":142925},"_18123-三角做法","18.1.2.3 三角做法",[19,142928,142929],{},"该下标当经过最外层大盒子时会实现向上反转",[725,142931],{"style":126945,"src":142932},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-189.png",[57,142934,142935],{"className":127089,"code":135609,"language":127091,"meta":62,"style":62},[64,142936,142937,142941,142947,142957,142967,142983,142993],{"__ignoreMap":62},[67,142938,142939],{"class":69,"line":70},[67,142940,135616],{"class":202},[67,142942,142943,142945],{"class":69,"line":143},[67,142944,135621],{"class":112},[67,142946,16289],{"class":77},[67,142948,142949,142951,142953,142955],{"class":69,"line":149},[67,142950,71105],{"class":208},[67,142952,51974],{"class":77},[67,142954,1051],{"class":208},[67,142956,2017],{"class":77},[67,142958,142959,142961,142963,142965],{"class":69,"line":155},[67,142960,71325],{"class":208},[67,142962,51974],{"class":77},[67,142964,1051],{"class":208},[67,142966,2017],{"class":77},[67,142968,142969,142971,142973,142975,142977,142979,142981],{"class":69,"line":161},[67,142970,71433],{"class":208},[67,142972,51974],{"class":77},[67,142974,1303],{"class":208},[67,142976,52029],{"class":73},[67,142978,52058],{"class":208},[67,142980,64528],{"class":208},[67,142982,2017],{"class":77},[67,142984,142985,142987,142989,142991],{"class":69,"line":167},[67,142986,135664],{"class":208},[67,142988,51974],{"class":77},[67,142990,62906],{"class":208},[67,142992,2017],{"class":77},[67,142994,142995],{"class":69,"line":173},[67,142996,2288],{"class":77},[14,142998,143000],{"id":142999},"_1813-2d-转换中心点-transform-origin","18.1.3 2D 转换中心点 transform-origin",[40,143002,143004],{"id":143003},"_18131-transform-origin介绍","18.1.3.1 transform-origin介绍",[19,143006,143007],{},"设置中心点",[725,143009],{"style":126945,"src":143010},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-190.png",[19,143012,143013],{},"设置像素时这个中心点也是相对于这个大盒子来说的",[40,143015,143017],{"id":143016},"_18132-盒子不同中心旋转","18.1.3.2 盒子不同中心旋转",[57,143019,143021],{"className":127089,"code":143020,"language":127091,"meta":62,"style":62},"\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",[64,143022,143023,143028,143034,143049,143054,143059],{"__ignoreMap":62},[67,143024,143025],{"class":69,"line":70},[67,143026,143027],{"class":202},"\u002F* 转换中心点 *\u002F\n",[67,143029,143030,143032],{"class":69,"line":143},[67,143031,52148],{"class":51837},[67,143033,16289],{"class":77},[67,143035,143036,143039,143041,143043,143045,143047],{"class":69,"line":149},[67,143037,143038],{"class":208},"  transform-origin",[67,143040,51974],{"class":77},[67,143042,52129],{"class":208},[67,143044,17861],{"class":208},[67,143046,130952],{"class":77},[67,143048,135762],{"class":202},[67,143050,143051],{"class":69,"line":155},[67,143052,143053],{"class":202},"  \u002F* transform-origin: 50% 50%; *\u002F\n",[67,143055,143056],{"class":69,"line":161},[67,143057,143058],{"class":202},"  \u002F* transform-origin: left top; *\u002F\n",[67,143060,143061],{"class":69,"line":167},[67,143062,2288],{"class":77},[40,143064,143066],{"id":143065},"_18133-旋转案例","18.1.3.3 旋转案例",[725,143068],{"style":126945,"src":143069},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-191.png",[57,143071,143072],{"className":127089,"code":142892,"language":127091,"meta":62,"style":62},[64,143073,143074,143080,143096],{"__ignoreMap":62},[67,143075,143076,143078],{"class":69,"line":70},[67,143077,52148],{"class":51837},[67,143079,16289],{"class":77},[67,143081,143082,143084,143086,143088,143090,143092,143094],{"class":69,"line":143},[67,143083,137073],{"class":208},[67,143085,51974],{"class":77},[67,143087,142909],{"class":208},[67,143089,864],{"class":77},[67,143091,1386],{"class":208},[67,143093,142916],{"class":73},[67,143095,3440],{"class":77},[67,143097,143098],{"class":69,"line":149},[67,143099,2288],{"class":77},[14,143101,143103],{"id":143102},"_1814-2d-转换之缩放scale","18.1.4 2D 转换之缩放scale",[40,143105,143107],{"id":143106},"_18141-scale介绍","18.1.4.1 scale介绍",[19,143109,143110],{},"缩放，顾名思义，可以放大和缩小。 只要给元素添加上了这个属性就能控制它放大还是缩小",[725,143112],{"style":126945,"src":143113},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-192.png",[40,143115,143117],{"id":143116},"_18142-分页按钮","18.1.4.2 分页按钮",[725,143119],{"style":126945,"src":143120},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-193.png",[57,143122,143124],{"className":127089,"code":143123,"language":127091,"meta":62,"style":62},"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",[64,143125,143126,143132,143148,143152,143156,143161,143167,143181,143186],{"__ignoreMap":62},[67,143127,143128,143130],{"class":69,"line":70},[67,143129,52148],{"class":51837},[67,143131,16289],{"class":77},[67,143133,143134,143136,143138,143141,143143,143146],{"class":69,"line":143},[67,143135,137073],{"class":208},[67,143137,51974],{"class":77},[67,143139,143140],{"class":208},"scale",[67,143142,864],{"class":77},[67,143144,143145],{"class":208},"1.2",[67,143147,3440],{"class":77},[67,143149,143150],{"class":69,"line":149},[67,143151,2288],{"class":77},[67,143153,143154],{"class":69,"line":155},[67,143155,136550],{"class":77},[67,143157,143158],{"class":69,"line":161},[67,143159,143160],{"class":202},"\u002F* 2D 缩放 *\u002F\n",[67,143162,143163,143165],{"class":69,"line":167},[67,143164,52148],{"class":51837},[67,143166,16289],{"class":77},[67,143168,143169,143171,143173,143175,143177,143179],{"class":69,"line":173},[67,143170,137073],{"class":208},[67,143172,51974],{"class":77},[67,143174,143140],{"class":208},[67,143176,864],{"class":77},[67,143178,143145],{"class":208},[67,143180,3440],{"class":77},[67,143182,143183],{"class":69,"line":180},[67,143184,143185],{"class":202},"  \u002F* transform: scale(1.2, 0.8);  宽1.2倍，高0.8倍 *\u002F\n",[67,143187,143188],{"class":69,"line":186},[67,143189,2288],{"class":77},[19,143191,143192],{},"@keyframes slide {\nfrom { transform: translateX(0); }\nto { transform: translateX(100px); }\n}\ndiv {\nanimation: slide 1s ease infinite;\n}",[57,143194,143196],{"className":127089,"code":143195,"language":127091,"meta":62,"style":62},"\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",[64,143197,143198,143203,143213,143234,143255,143259,143264,143270,143297],{"__ignoreMap":62},[67,143199,143200],{"class":69,"line":70},[67,143201,143202],{"class":202},"\u002F* 定义动画 *\u002F\n",[67,143204,143205,143208,143211],{"class":69,"line":143},[67,143206,143207],{"class":73},"@keyframes",[67,143209,143210],{"class":5935}," move",[67,143212,16289],{"class":77},[67,143214,143215,143218,143220,143222,143224,143227,143229,143231],{"class":69,"line":149},[67,143216,143217],{"class":112},"  0%",[67,143219,80344],{"class":77},[67,143221,48671],{"class":208},[67,143223,51974],{"class":77},[67,143225,143226],{"class":208},"translateX",[67,143228,864],{"class":77},[67,143230,1051],{"class":208},[67,143232,143233],{"class":77},"); }\n",[67,143235,143236,143239,143241,143243,143245,143247,143249,143251,143253],{"class":69,"line":155},[67,143237,143238],{"class":112},"  100%",[67,143240,80344],{"class":77},[67,143242,48671],{"class":208},[67,143244,51974],{"class":77},[67,143246,143226],{"class":208},[67,143248,864],{"class":77},[67,143250,1169],{"class":208},[67,143252,52029],{"class":73},[67,143254,143233],{"class":77},[67,143256,143257],{"class":69,"line":161},[67,143258,2288],{"class":77},[67,143260,143261],{"class":69,"line":167},[67,143262,143263],{"class":202},"\u002F* 调用动画 *\u002F\n",[67,143265,143266,143268],{"class":69,"line":173},[67,143267,52148],{"class":51837},[67,143269,16289],{"class":77},[67,143271,143272,143275,143277,143279,143281,143283,143285,143287,143289,143292,143295],{"class":69,"line":180},[67,143273,143274],{"class":208},"  animation",[67,143276,51974],{"class":77},[67,143278,135775],{"class":208},[67,143280,25828],{"class":208},[67,143282,1551],{"class":73},[67,143284,79217],{"class":208},[67,143286,4813],{"class":208},[67,143288,1551],{"class":73},[67,143290,143291],{"class":208}," infinite",[67,143293,143294],{"class":208}," alternate",[67,143296,2017],{"class":77},[67,143298,143299],{"class":69,"line":186},[67,143300,2288],{"class":77},[19,143302,143192],{},[57,143304,143307],{"className":143305,"code":143306,"language":5906},[5904],"\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",[64,143308,143306],{"__ignoreMap":62},[40,143310,143312],{"id":143311},"_18222-奔跑的熊大","18.2.2.2 奔跑的熊大",[19,143314,143315],{},"这个需要用到动画效果，同时要使用steps，一步一步的展示，不可以用ease等值，这个图片一般很大，上边集成了运动的多个状态",[725,143317],{"style":126945,"src":143318},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-203.png",[57,143320,143321],{"className":127089,"code":143195,"language":127091,"meta":62,"style":62},[64,143322,143323,143327,143335,143353,143373,143377,143381,143387,143411],{"__ignoreMap":62},[67,143324,143325],{"class":69,"line":70},[67,143326,143202],{"class":202},[67,143328,143329,143331,143333],{"class":69,"line":143},[67,143330,143207],{"class":73},[67,143332,143210],{"class":5935},[67,143334,16289],{"class":77},[67,143336,143337,143339,143341,143343,143345,143347,143349,143351],{"class":69,"line":149},[67,143338,143217],{"class":112},[67,143340,80344],{"class":77},[67,143342,48671],{"class":208},[67,143344,51974],{"class":77},[67,143346,143226],{"class":208},[67,143348,864],{"class":77},[67,143350,1051],{"class":208},[67,143352,143233],{"class":77},[67,143354,143355,143357,143359,143361,143363,143365,143367,143369,143371],{"class":69,"line":155},[67,143356,143238],{"class":112},[67,143358,80344],{"class":77},[67,143360,48671],{"class":208},[67,143362,51974],{"class":77},[67,143364,143226],{"class":208},[67,143366,864],{"class":77},[67,143368,1169],{"class":208},[67,143370,52029],{"class":73},[67,143372,143233],{"class":77},[67,143374,143375],{"class":69,"line":161},[67,143376,2288],{"class":77},[67,143378,143379],{"class":69,"line":167},[67,143380,143263],{"class":202},[67,143382,143383,143385],{"class":69,"line":173},[67,143384,52148],{"class":51837},[67,143386,16289],{"class":77},[67,143388,143389,143391,143393,143395,143397,143399,143401,143403,143405,143407,143409],{"class":69,"line":180},[67,143390,143274],{"class":208},[67,143392,51974],{"class":77},[67,143394,135775],{"class":208},[67,143396,25828],{"class":208},[67,143398,1551],{"class":73},[67,143400,79217],{"class":208},[67,143402,4813],{"class":208},[67,143404,1551],{"class":73},[67,143406,143291],{"class":208},[67,143408,143294],{"class":208},[67,143410,2017],{"class":77},[67,143412,143413],{"class":69,"line":186},[67,143414,2288],{"class":77},[19,143416,143417],{},"背景如果跟父盒子一样的话，往左走100%会使得背景露出来，此时不要忘记背景平铺：repeat-x,repeat-y",[14,143419,143421],{"id":143420},"_1823-知识点回顾","18.2.3 知识点回顾",[57,143423,143424],{"className":127089,"code":129258,"language":127091,"meta":62,"style":62},[64,143425,143426,143432,143442],{"__ignoreMap":62},[67,143427,143428,143430],{"class":69,"line":70},[67,143429,52148],{"class":51837},[67,143431,16289],{"class":77},[67,143433,143434,143436,143438,143440],{"class":69,"line":143},[67,143435,129271],{"class":208},[67,143437,51974],{"class":77},[67,143439,62273],{"class":208},[67,143441,2017],{"class":77},[67,143443,143444],{"class":69,"line":149},[67,143445,2288],{"class":77},[803,143447,143449],{"id":143448},"_183-3d-转换","18.3 3D 转换",[19,143451,143452],{},"我们生活的环境是3D的，照片就是3D物体在2D平面呈现的例子",[14,143454,143456],{"id":143455},"_1831-坐标轴认识","18.3.1 坐标轴认识",[725,143458],{"style":126945,"src":143459},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-204.png",[14,143461,143463],{"id":143462},"_1832-3d移动-translate3d","18.3.2 3D移动 translate3d",[725,143465],{"style":126945,"src":143466},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-205.png",[19,143468,143469],{},"x,y,z如果没有移动量的话，不要不写，不可省略",[19,143471,143472],{},"translate3d的效果需要搭配透视perspective来使用",[725,143474],{"style":126945,"src":143475},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-206.png",[14,143477,143479],{"id":143478},"_1833-透视-perspective","18.3.3 透视 perspective",[725,143481],{"style":126945,"src":143482},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-207.png",[19,143484,143485],{},"透视写在父盒子上，单位为像素",[14,143487,143489],{"id":143488},"_1834-3d旋转-rotate3d","18.3.4 3D旋转 rotate3d",[40,143491,143493],{"id":143492},"_18341-分开解释","18.3.4.1 分开解释",[725,143495],{"style":126945,"src":143496},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-208.png",[725,143498],{"style":126945,"src":143499},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-209.png",[725,143501],{"style":126945,"src":143502},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-210.png",[19,143504,143505],{},"总结来说就是左手原则",[40,143507,143509],{"id":143508},"_18342-rotate3d介绍","18.3.4.2 rotate3d介绍",[725,143511],{"style":126945,"src":143512},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-211.png",[14,143514,143516],{"id":143515},"_1835-3d呈现-transfrom-style","18.3.5 3D呈现 transfrom-style",[725,143518],{"style":126945,"src":143519},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-212.png",[725,143521],{"style":126945,"src":143522},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-213.png",[57,143524,143526],{"className":127089,"code":143525,"language":127091,"meta":62,"style":62},"div {\n  perspective: 500px;\n  transform: rotateX(45deg);\n}\n",[64,143527,143528,143534,143547,143564],{"__ignoreMap":62},[67,143529,143530,143532],{"class":69,"line":70},[67,143531,52148],{"class":51837},[67,143533,16289],{"class":77},[67,143535,143536,143539,143541,143543,143545],{"class":69,"line":143},[67,143537,143538],{"class":208},"  perspective",[67,143540,51974],{"class":77},[67,143542,65611],{"class":208},[67,143544,52029],{"class":73},[67,143546,2017],{"class":77},[67,143548,143549,143551,143553,143556,143558,143560,143562],{"class":69,"line":149},[67,143550,137073],{"class":208},[67,143552,51974],{"class":77},[67,143554,143555],{"class":208},"rotateX",[67,143557,864],{"class":77},[67,143559,1386],{"class":208},[67,143561,142916],{"class":73},[67,143563,3440],{"class":77},[67,143565,143566],{"class":69,"line":155},[67,143567,2288],{"class":77},[14,143569,143571],{"id":143570},"_1836-案例","18.3.6 案例",[40,143573,143575],{"id":143574},"_18361-两面反转的盒子","18.3.6.1 两面反转的盒子",[725,143577],{"style":126945,"src":143578},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-214.png",[725,143580],{"style":126945,"src":143581},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-215.png",[725,143583],{"style":126945,"src":143584},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-216.png",[57,143586,143588],{"className":127089,"code":143587,"language":127091,"meta":62,"style":62},"\u002F* 3D 透视（加在父元素上） *\u002F\n.father {\n  perspective: 500px;\n}\n",[64,143589,143590,143595,143601,143613],{"__ignoreMap":62},[67,143591,143592],{"class":69,"line":70},[67,143593,143594],{"class":202},"\u002F* 3D 透视（加在父元素上） *\u002F\n",[67,143596,143597,143599],{"class":69,"line":143},[67,143598,134086],{"class":112},[67,143600,16289],{"class":77},[67,143602,143603,143605,143607,143609,143611],{"class":69,"line":149},[67,143604,143538],{"class":208},[67,143606,51974],{"class":77},[67,143608,65611],{"class":208},[67,143610,52029],{"class":73},[67,143612,2017],{"class":77},[67,143614,143615],{"class":69,"line":155},[67,143616,2288],{"class":77},[40,143618,143620],{"id":143619},"_18362-3d导航栏","18.3.6.2 3D导航栏",[725,143622],{"style":126945,"src":143623},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-217.png",[57,143625,143626],{"className":127836,"code":131193,"language":127838,"meta":62,"style":62},[64,143627,143628,143632,143646,143650],{"__ignoreMap":62},[67,143629,143630],{"class":69,"line":70},[67,143631,131200],{"class":202},[67,143633,143634,143636,143638,143640,143642,143644],{"class":69,"line":143},[67,143635,1766],{"class":77},[67,143637,52148],{"class":51837},[67,143639,54023],{"class":112},[67,143641,909],{"class":77},[67,143643,131213],{"class":84},[67,143645,51844],{"class":77},[67,143647,143648],{"class":69,"line":149},[67,143649,131220],{"class":77},[67,143651,143652,143654,143656],{"class":69,"line":155},[67,143653,52322],{"class":77},[67,143655,52148],{"class":51837},[67,143657,51844],{"class":77},[40,143659,143661],{"id":143660},"_18363-旋转木马","18.3.6.3 旋转木马",[725,143663],{"style":126945,"src":143664},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-218.png",[57,143666,143667],{"className":127089,"code":142892,"language":127091,"meta":62,"style":62},[64,143668,143669,143675,143691],{"__ignoreMap":62},[67,143670,143671,143673],{"class":69,"line":70},[67,143672,52148],{"class":51837},[67,143674,16289],{"class":77},[67,143676,143677,143679,143681,143683,143685,143687,143689],{"class":69,"line":143},[67,143678,137073],{"class":208},[67,143680,51974],{"class":77},[67,143682,142909],{"class":208},[67,143684,864],{"class":77},[67,143686,1386],{"class":208},[67,143688,142916],{"class":73},[67,143690,3440],{"class":77},[67,143692,143693],{"class":69,"line":149},[67,143694,2288],{"class":77},[779,143696,143697],{},"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":62,"searchDepth":143,"depth":143,"links":143699},[143700,143707],{"id":142795,"depth":143,"text":142796,"children":143701},[143702,143703,143704,143705,143706],{"id":142819,"depth":149,"text":142820},{"id":142874,"depth":149,"text":142875},{"id":142999,"depth":149,"text":143000},{"id":143102,"depth":149,"text":143103},{"id":143420,"depth":149,"text":143421},{"id":143448,"depth":143,"text":143449,"children":143708},[143709,143710,143711,143712,143713,143714],{"id":143455,"depth":149,"text":143456},{"id":143462,"depth":149,"text":143463},{"id":143478,"depth":149,"text":143479},{"id":143488,"depth":149,"text":143489},{"id":143515,"depth":149,"text":143516},{"id":143570,"depth":149,"text":143571},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch18-2d3d",{"title":142787,"description":24093},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换","1_0Tn58EtT3Zxiv54Fdr4nuYTjJFUVecbnj1dyl9_b0",{"id":143721,"title":143722,"body":143723,"description":24093,"extension":787,"meta":143926,"navigation":176,"path":143927,"seo":143928,"stem":143929,"__hash__":143930},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口.md","19. 移动端基础-前缀现状与视口",{"type":7,"value":143724,"toc":143915},[143725,143728,143732,143735,143738,143742,143745,143748,143751,143755,143758,143762,143765,143769,143772,143776,143790,143794,143819,143822,143825,143842,143846,143850,143853,143856,143860,143863,143866,143884,143888,143891,143905,143909,143912],[10,143726,143722],{"id":143727},"_19-移动端基础-前缀现状与视口",[803,143729,143731],{"id":143730},"_191-浏览器私有前缀","19.1 浏览器私有前缀",[725,143733],{"style":126945,"src":143734},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-219.png",[19,143736,143737],{},"意思就是加个前缀，增加兼容性",[803,143739,143741],{"id":143740},"_192-移动端现状认识","19.2 移动端现状认识",[725,143743],{"style":126945,"src":143744},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-220.png",[19,143746,143747],{},"调试方法：",[725,143749],{"style":126945,"src":143750},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-221.png",[803,143752,143754],{"id":143753},"_193-视口","19.3 视口",[19,143756,143757],{},"**视口（viewport）**就是浏览器显示页面内容的屏幕区域。 视口可以分为布局视口、视觉视口和理想视口",[14,143759,143761],{"id":143760},"_1931-布局视口-layout-viewport","19.3.1 布局视口 layout viewport",[725,143763],{"style":126945,"src":143764},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-222.png",[14,143766,143768],{"id":143767},"_1932-视觉视口-visual-viewport","19.3.2 视觉视口 visual viewport",[725,143770],{"style":126945,"src":143771},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-223.png",[14,143773,143775],{"id":143774},"_1933-理想视口-ideal-viewport","19.3.3 理想视口 ideal viewport",[1863,143777,143778,143781,143784,143787],{},[818,143779,143780],{},"为了使网站在移动端有最理想的浏览和阅读宽度而设定",[818,143782,143783],{},"理想视口，对设备来讲，是最理想的视口尺寸",[818,143785,143786],{},"需要手动添写meta视口标签通知浏览器操作",[818,143788,143789],{},"meta视口标签的主要目的：布局视口的宽度应该与理想视口的宽度一致，简单理解就是设备有多宽，我们布局的视口就多宽",[14,143791,143793],{"id":143792},"_1934-meta视口标签","19.3.4 meta视口标签",[57,143795,143797],{"className":127836,"code":143796,"language":127838,"meta":62,"style":62},"\u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n",[64,143798,143799],{"__ignoreMap":62},[67,143800,143801,143803,143805,143807,143809,143811,143813,143815,143817],{"class":69,"line":70},[67,143802,1766],{"class":77},[67,143804,51881],{"class":51837},[67,143806,15637],{"class":112},[67,143808,909],{"class":77},[67,143810,51928],{"class":84},[67,143812,51908],{"class":112},[67,143814,909],{"class":77},[67,143816,51935],{"class":84},[67,143818,51844],{"class":77},[725,143820],{"style":126945,"src":143821},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-224.png",[19,143823,143824],{},"标准视口设置：",[815,143826,143827,143830,143833,143836,143839],{},[818,143828,143829],{},"视口宽度和设备保持一致",[818,143831,143832],{},"视口的默认缩放比例1.0",[818,143834,143835],{},"不允许用户自行缩放",[818,143837,143838],{},"最大允许的缩放比例1.0",[818,143840,143841],{},"最小允许的缩放比例1.0",[14,143843,143845],{"id":143844},"_1935-二倍图","19.3.5 二倍图",[40,143847,143849],{"id":143848},"_19351-物理像素物理像素比","19.3.5.1 物理像素&物理像素比",[725,143851],{"style":126945,"src":143852},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-225.png",[725,143854],{"style":126945,"src":143855},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-226.png",[40,143857,143859],{"id":143858},"_19352-多倍图","19.3.5.2 多倍图",[725,143861],{"style":126945,"src":143862},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-227.png",[19,143864,143865],{},"二倍图法，代码如下：",[57,143867,143869],{"className":127089,"code":143868,"language":127091,"meta":62,"style":62},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\nbackground-size: 50% 50%;\n",[64,143870,143871,143876],{"__ignoreMap":62},[67,143872,143873],{"class":69,"line":70},[67,143874,143875],{"class":202},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\n",[67,143877,143878,143881],{"class":69,"line":143},[67,143879,143880],{"class":51837},"background-size",[67,143882,143883],{"class":77},": 50% 50%;\n",[40,143885,143887],{"id":143886},"_19353-背景缩放-background-size","19.3.5.3 背景缩放 background-size",[725,143889],{"style":126945,"src":143890},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-228.png",[815,143892,143893,143896,143899,143902],{},[818,143894,143895],{},"如果只写一个参数，肯定是宽度，高度省略了，会进行等比缩放",[818,143897,143898],{},"里边的单位可以跟百分比% 是相对于父盒子来说的",[818,143900,143901],{},"cover运行的时候就是沿着宽高方向进行放大背景，所以会可能导致部分背景图片显示不全，正方形时就可以显示全",[818,143903,143904],{},"contain它是高度和宽度等比例拉伸，当宽度或高度 铺满div盒子就不再进行拉伸了，div可能有部分空白区域",[40,143906,143908],{"id":143907},"_19354-二倍精灵图做法","19.3.5.4 二倍精灵图做法",[725,143910],{"style":126945,"src":143911},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-229.png",[779,143913,143914],{},"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":62,"searchDepth":143,"depth":143,"links":143916},[143917,143918,143919],{"id":143730,"depth":143,"text":143731},{"id":143740,"depth":143,"text":143741},{"id":143753,"depth":143,"text":143754,"children":143920},[143921,143922,143923,143924,143925],{"id":143760,"depth":149,"text":143761},{"id":143767,"depth":149,"text":143768},{"id":143774,"depth":149,"text":143775},{"id":143792,"depth":149,"text":143793},{"id":143844,"depth":149,"text":143845},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch19",{"title":143722,"description":24093},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口","I7YPWmMspOfCCPUuENRXhFE3PC_6s5-J1ZyI4ciWtnM",{"id":143932,"title":143933,"body":143934,"description":24093,"extension":787,"meta":144811,"navigation":176,"path":144812,"seo":144813,"stem":144814,"__hash__":144815},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇.md","20. 移动端布局实战上篇",{"type":7,"value":143935,"toc":144795},[143936,143939,143943,143950,143953,143960,143963,143968,143971,143975,143979,143986,143989,143992,143996,143999,144002,144005,144008,144011,144015,144018,144022,144024,144027,144030,144033,144036,144038,144041,144043,144073,144075,144105,144109,144112,144116,144119,144136,144139,144142,144218,144220,144223,144226,144229,144232,144234,144237,144240,144244,144266,144269,144272,144276,144279,144285,144288,144292,144295,144298,144302,144305,144308,144311,144315,144318,144321,144324,144327,144331,144334,144338,144345,144348,144351,144354,144357,144367,144370,144373,144380,144383,144387,144390,144393,144397,144400,144403,144406,144451,144454,144457,144460,144462,144591,144593,144631,144634,144637,144639,144757,144759,144793],[10,143937,143933],{"id":143938},"_20-移动端布局实战上篇",[803,143940,143942],{"id":143941},"_201-移动端主流方案","20.1 移动端主流方案",[815,143944,143945],{},[818,143946,143947],{},[336,143948,143949],{},"单独移动端页面（主流）",[725,143951],{"style":126945,"src":143952},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-230.png",[815,143954,143955],{"start":143},[818,143956,143957],{},[336,143958,143959],{},"响应式兼容PC移动端",[725,143961],{"style":126945,"src":143962},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-231.png",[815,143964,143965],{"start":149},[818,143966,143967],{},"两种页面选型布局方式",[725,143969],{"style":126945,"src":143970},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-232.png",[803,143972,143974],{"id":143973},"_202-移动端技术解决方案","20.2 移动端技术解决方案",[14,143976,143978],{"id":143977},"_2021-css初始化-normalizecss","20.2.1 CSS初始化 normalize.css",[19,143980,143981,143982],{},"官网地址： ",[28,143983,143984],{"href":143984,"rel":143985},"http:\u002F\u002Fnecolas.github.io\u002Fnormalize.css\u002F",[32],[725,143987],{"style":126945,"src":143988},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-233.png",[725,143990],{"style":126945,"src":143991},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-234.png",[14,143993,143995],{"id":143994},"_2022-css3-盒子模型-box-sizing","20.2.2 CSS3 盒子模型 box-sizing",[725,143997],{"style":126945,"src":143998},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-235.png",[725,144000],{"style":126945,"src":144001},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-236.png",[19,144003,144004],{},"去除高亮：",[19,144006,144007],{},"在用a元素的时候在pc端没事，但是在手机端一点会有颜色背景，去除的方式是",[19,144009,144010],{},"-webkit- tap-highlight-color: transparent;",[803,144012,144014],{"id":144013},"_203-流式布局百分比布局","20.3 流式布局（百分比布局）",[725,144016],{"style":126945,"src":144017},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-237.png",[803,144019,144021],{"id":144020},"_204-流式布局案例","20.4 流式布局案例",[19,144023,893],{},[19,144025,144026],{},"移动端在进行大盒子中左右两个盒子大小固定不变，中间盒子随着大盒子的放大而变大，变小而变小，此时可以一定要学会使用定位，定位非常非常重要，如果想让大盒子不动，不随着页面向下的滑动而改变，此时对大盒子使用固定定位，并将宽度设置为100%，高度自己定，左右两个盒子设置为固定定位，并给定其确定的宽和高，让它不会随意浏览器的缩放而改变，对中间盒子采用标准流做法，给它设定一个magin，让它与左右盒子相隔，宽度设为100%，高度设为确定值，设置magin是因为那两个左右盒子是绝对定位，它会盖住中间盒子两边的部分的。",[19,144028,144029],{},"也可以使用flex布局来实现，给左右盒子设置好宽高，对大盒子使用flex布局，然后中间剩余部分全给中间盒子即可实现！",[19,144031,144032],{},"图片格式：",[725,144034],{"style":126945,"src":144035},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-238.png",[19,144037,136132],{},[725,144039],{"style":126945,"src":144040},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-239.png",[19,144042,140459],{},[57,144044,144045],{"className":127836,"code":134591,"language":127838,"meta":62,"style":62},[64,144046,144047],{"__ignoreMap":62},[67,144048,144049,144051,144053,144055,144057,144059,144061,144063,144065,144067,144069,144071],{"class":69,"line":70},[67,144050,1766],{"class":77},[67,144052,725],{"class":51837},[67,144054,55776],{"class":112},[67,144056,909],{"class":77},[67,144058,134606],{"class":84},[67,144060,55784],{"class":112},[67,144062,909],{"class":77},[67,144064,134613],{"class":84},[67,144066,134616],{"class":112},[67,144068,909],{"class":77},[67,144070,134621],{"class":84},[67,144072,51844],{"class":77},[19,144074,140548],{},[57,144076,144077],{"className":127836,"code":134591,"language":127838,"meta":62,"style":62},[64,144078,144079],{"__ignoreMap":62},[67,144080,144081,144083,144085,144087,144089,144091,144093,144095,144097,144099,144101,144103],{"class":69,"line":70},[67,144082,1766],{"class":77},[67,144084,725],{"class":51837},[67,144086,55776],{"class":112},[67,144088,909],{"class":77},[67,144090,134606],{"class":84},[67,144092,55784],{"class":112},[67,144094,909],{"class":77},[67,144096,134613],{"class":84},[67,144098,134616],{"class":112},[67,144100,909],{"class":77},[67,144102,134621],{"class":84},[67,144104,51844],{"class":77},[803,144106,144108],{"id":144107},"_205-flex布局","20.5 flex布局",[725,144110],{"style":126945,"src":144111},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-240.png",[14,144113,144115],{"id":144114},"_2051-布局原理","20.5.1 布局原理",[19,144117,144118],{},"flex 是 flexible Box 的缩写，意为\"弹性布局\"，用来为盒状模型提供最大的灵活性，任何一个容器都可以指定为 flex 布局",[1863,144120,144121,144124,144127,144130,144133],{},[818,144122,144123],{},"当我们为父盒子设为 flex 布局以后，子元素的 float、clear 和 vertical-align 属性将失效",[818,144125,144126],{},"伸缩布局 = 弹性布局 = 伸缩盒布局 = 弹性盒布局 =flex布局",[818,144128,144129],{},"采用 Flex 布局的元素，称为 Flex 容器（flex container），简称\"容器\"。它的所有子元素自动成为容器成员，称为 Flex 项目（flex item），简称\"项目\"",[818,144131,144132],{},"总结来说就是：就是通过给父盒子添加flex属性，来控制子盒子的位置和排列方式",[818,144134,144135],{},"flex可以直接将行内元素变成类似于浮动的效果，就有宽高了",[19,144137,144138],{},"父盒子被设置为弹性布局后，如果不给它设置宽度的话，父盒子的宽度就是子盒子撑开的宽度，如果有两个子盒子，第一个子盒子设置了宽高，第二个盒子宽度设为100%，则第二个盒子的宽度就是第一个盒子的宽度。父盒子由第一个盒子撑开",[19,144140,144141],{},"在弹性布局中如果是个单选标签，可以使用下边的方式进行布局：",[57,144143,144145],{"className":127089,"code":144144,"language":127091,"meta":62,"style":62},"\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",[64,144146,144147,144152,144159,144169,144181,144192,144203,144214],{"__ignoreMap":62},[67,144148,144149],{"class":69,"line":70},[67,144150,144151],{"class":202},"\u002F* Flex 弹性布局 *\u002F\n",[67,144153,144154,144157],{"class":69,"line":143},[67,144155,144156],{"class":112},".container",[67,144158,16289],{"class":77},[67,144160,144161,144163,144165,144167],{"class":69,"line":149},[67,144162,128705],{"class":208},[67,144164,51974],{"class":77},[67,144166,52014],{"class":208},[67,144168,2017],{"class":77},[67,144170,144171,144174,144176,144179],{"class":69,"line":155},[67,144172,144173],{"class":208},"  flex-direction",[67,144175,51974],{"class":77},[67,144177,144178],{"class":208},"row",[67,144180,2017],{"class":77},[67,144182,144183,144186,144188,144190],{"class":69,"line":161},[67,144184,144185],{"class":208},"  justify-content",[67,144187,51974],{"class":77},[67,144189,52205],{"class":208},[67,144191,2017],{"class":77},[67,144193,144194,144197,144199,144201],{"class":69,"line":167},[67,144195,144196],{"class":208},"  align-items",[67,144198,51974],{"class":77},[67,144200,52129],{"class":208},[67,144202,2017],{"class":77},[67,144204,144205,144208,144210,144212],{"class":69,"line":173},[67,144206,144207],{"class":208},"  flex-wrap",[67,144209,51974],{"class":77},[67,144211,79147],{"class":208},[67,144213,2017],{"class":77},[67,144215,144216],{"class":69,"line":180},[67,144217,2288],{"class":77},[19,144219,70990],{},[19,144221,144222],{},".form-item .male-label {",[19,144224,144225],{},"   margin-right: 20px;",[19,144227,144228],{},"   display: inline-flex;",[19,144230,144231],{},"   align-items: center;",[19,144233,1802],{},[725,144235],{"style":126945,"src":144236},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-241.png",[725,144238],{"style":126945,"src":144239},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-242.png",[14,144241,144243],{"id":144242},"_2052-常见父项属性","20.5.2 常见父项属性",[815,144245,144246,144249,144252,144255,144258,144261,144264],{},[818,144247,144248],{},"flex-direction：设置主轴的方向",[818,144250,144251],{},"justify-content：设置主轴上的子元素排列方式",[818,144253,144254],{},"flex-wrap：设置子元素是否换行",[818,144256,144257],{},"align-content：设置侧轴上的子元素的排列方式（多行）",[818,144259,144260],{},"align-items：设置侧轴上的子元素排列方式（单行）",[818,144262,144263],{},"flex-flow：复合属性，相当于同时设置了 flex-direction 和 flex-wrap",[818,144265,144248],{},[725,144267],{"style":126945,"src":144268},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-243.png",[725,144270],{"style":126945,"src":144271},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-244.png",[815,144273,144274],{"start":143},[818,144275,144251],{},[725,144277],{"style":126945,"src":144278},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-245.png",[19,144280,144281,144284],{},[64,144282,144283],{},"space-evenly","：所有间距都完全相等（包括两端和元素之间）",[19,144286,144287],{},"跟着主轴走",[815,144289,144290],{"start":149},[818,144291,144254],{},[725,144293],{"style":126945,"src":144294},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-246.png",[19,144296,144297],{},"flex布局中是默认不换行的，当父亲盒子宽100px，高100px，内部的5个四盒子设置 宽为30px，高30px，如果排列方式按照默认，则按照x轴来进行排，从左到右的方式来进行排列，则子盒子不会换行，子盒子的宽度将会失效，然后会自动调整宽度以适应这个父盒子，会将父盒子沿这个轴塞满",[815,144299,144300],{"start":155},[818,144301,144257],{},[725,144303],{"style":126945,"src":144304},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-247.png",[19,144306,144307],{},"搭配前边的主轴排列方式就可以实现对主轴与侧轴的操作",[19,144309,144310],{},"stretch:沿着侧轴拉伸，但是要首先去掉侧轴方向的宽或高：若侧轴为y轴，则去掉高度大小",[815,144312,144313],{"start":161},[818,144314,144260],{},[725,144316],{"style":126945,"src":144317},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-248.png",[19,144319,144320],{},"align-items与align-content之间的区别：",[19,144322,144323],{},"单找items，多找content",[725,144325],{"style":126945,"src":144326},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-249.png",[815,144328,144329],{"start":167},[818,144330,144263],{},[725,144332],{"style":126945,"src":144333},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-250.png",[14,144335,144337],{"id":144336},"_2053-flex布局子项常见属性","20.5.3 flex布局子项常见属性",[815,144339,144340],{},[818,144341,144342],{},[336,144343,144344],{},"flex 属性",[19,144346,144347],{},"flex 属性定义子项目分配剩余空间，用flex来表示占多少份数",[725,144349],{"style":126945,"src":144350},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-251.png",[19,144352,144353],{},"可以理解为没站位的剩余空间 ，数字表示的含义理解为：数字\u002F总元素",[19,144355,144356],{},"flex后边也可以跟百分比，通常用于父盒子不给高度，宽度为100%，想让子盒子换行和撑开的情况，li没有宽度，此时用flex：1；是不太起作用的，他不会换行，这是因为没有宽度，此时可以通过给子盒子使用flex: 20%;让子盒子平均为大盒子宽度的百分之50,这时候给父盒子加上flex-wrap: wrap;就管用了，就可以实现换行了",[815,144358,144359],{"start":143},[818,144360,144361,614,144364],{},[336,144362,144363],{},"align-self",[336,144365,144366],{},"控制子项自己在侧轴上的排列方式",[725,144368],{"style":126945,"src":144369},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-252.png",[19,144371,144372],{},"单个子盒子在父盒子侧轴上的排列方式",[815,144374,144375],{"start":149},[818,144376,144377,144379],{},[336,144378,95834],{}," 属性定义项目的排列顺序",[725,144381],{"style":126945,"src":144382},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-253.png",[14,144384,144386],{"id":144385},"_2054-背景线性渐变","20.5.4 背景线性渐变",[725,144388],{"style":126945,"src":144389},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-254.png",[19,144391,144392],{},"必须要添加浏览器的私有前缀",[14,144394,144396],{"id":144395},"_2055-携程网首页案例","20.5.5 携程网首页案例",[19,144398,144399],{},"学到最重要的知识：",[19,144401,144402],{},"flex处理这样的布局思路",[725,144404],{"style":126945,"src":144405},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-255.png",[57,144407,144409],{"className":127089,"code":144408,"language":127091,"meta":62,"style":62},".container {\n  display: flex;\n  justify-content: center;\n  align-items: center;\n}\n",[64,144410,144411,144417,144427,144437,144447],{"__ignoreMap":62},[67,144412,144413,144415],{"class":69,"line":70},[67,144414,144156],{"class":112},[67,144416,16289],{"class":77},[67,144418,144419,144421,144423,144425],{"class":69,"line":143},[67,144420,128705],{"class":208},[67,144422,51974],{"class":77},[67,144424,52014],{"class":208},[67,144426,2017],{"class":77},[67,144428,144429,144431,144433,144435],{"class":69,"line":149},[67,144430,144185],{"class":208},[67,144432,51974],{"class":77},[67,144434,52129],{"class":208},[67,144436,2017],{"class":77},[67,144438,144439,144441,144443,144445],{"class":69,"line":155},[67,144440,144196],{"class":208},[67,144442,51974],{"class":77},[67,144444,52129],{"class":208},[67,144446,2017],{"class":77},[67,144448,144449],{"class":69,"line":161},[67,144450,2288],{"class":77},[19,144452,144453],{},"对上述的布局思路的多个多个背景图片替换的方式如下：一定要学会思路！！！",[19,144455,144456],{},"使用属性选择器",[725,144458],{"style":126945,"src":144459},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-256.png",[19,144461,69426],{},[57,144463,144465],{"className":127836,"code":144464,"language":127838,"meta":62,"style":62},"\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",[64,144466,144467,144472,144486,144491,144511,144516,144535,144540,144559,144564,144583],{"__ignoreMap":62},[67,144468,144469],{"class":69,"line":70},[67,144470,144471],{"class":202},"\u003C!-- 携程网移动端案例结构 -->\n",[67,144473,144474,144476,144478,144480,144482,144484],{"class":69,"line":143},[67,144475,1766],{"class":77},[67,144477,52148],{"class":51837},[67,144479,54023],{"class":112},[67,144481,909],{"class":77},[67,144483,92860],{"class":84},[67,144485,51844],{"class":77},[67,144487,144488],{"class":69,"line":149},[67,144489,144490],{"class":202},"  \u003C!-- 搜索栏 -->\n",[67,144492,144493,144495,144497,144499,144501,144504,144507,144509],{"class":69,"line":155},[67,144494,52681],{"class":77},[67,144496,52148],{"class":51837},[67,144498,54023],{"class":112},[67,144500,909],{"class":77},[67,144502,144503],{"class":84},"\"search-index\"",[67,144505,144506],{"class":77},">...\u003C\u002F",[67,144508,52148],{"class":51837},[67,144510,51844],{"class":77},[67,144512,144513],{"class":69,"line":161},[67,144514,144515],{"class":202},"  \u003C!-- 焦点图 -->\n",[67,144517,144518,144520,144522,144524,144526,144529,144531,144533],{"class":69,"line":167},[67,144519,52681],{"class":77},[67,144521,52148],{"class":51837},[67,144523,54023],{"class":112},[67,144525,909],{"class":77},[67,144527,144528],{"class":84},"\"focus\"",[67,144530,144506],{"class":77},[67,144532,52148],{"class":51837},[67,144534,51844],{"class":77},[67,144536,144537],{"class":69,"line":173},[67,144538,144539],{"class":202},"  \u003C!-- 主导航 -->\n",[67,144541,144542,144544,144546,144548,144550,144553,144555,144557],{"class":69,"line":180},[67,144543,52681],{"class":77},[67,144545,52148],{"class":51837},[67,144547,54023],{"class":112},[67,144549,909],{"class":77},[67,144551,144552],{"class":84},"\"local-nav\"",[67,144554,144506],{"class":77},[67,144556,52148],{"class":51837},[67,144558,51844],{"class":77},[67,144560,144561],{"class":69,"line":186},[67,144562,144563],{"class":202},"  \u003C!-- 子导航 -->\n",[67,144565,144566,144568,144570,144572,144574,144577,144579,144581],{"class":69,"line":444},[67,144567,52681],{"class":77},[67,144569,52148],{"class":51837},[67,144571,54023],{"class":112},[67,144573,909],{"class":77},[67,144575,144576],{"class":84},"\"nav-common\"",[67,144578,144506],{"class":77},[67,144580,52148],{"class":51837},[67,144582,51844],{"class":77},[67,144584,144585,144587,144589],{"class":69,"line":2335},[67,144586,52322],{"class":77},[67,144588,52148],{"class":51837},[67,144590,51844],{"class":77},[19,144592,70990],{},[57,144594,144595],{"className":127089,"code":137541,"language":127091,"meta":62,"style":62},[64,144596,144597,144611,144627],{"__ignoreMap":62},[67,144598,144599,144601,144603,144605,144607,144609],{"class":69,"line":70},[67,144600,54358],{"class":51837},[67,144602,1746],{"class":77},[67,144604,103644],{"class":112},[67,144606,909],{"class":73},[67,144608,63236],{"class":84},[67,144610,137558],{"class":77},[67,144612,144613,144615,144617,144619,144621,144623,144625],{"class":69,"line":143},[67,144614,71433],{"class":208},[67,144616,51974],{"class":77},[67,144618,1077],{"class":208},[67,144620,52029],{"class":73},[67,144622,52058],{"class":208},[67,144624,130669],{"class":208},[67,144626,2017],{"class":77},[67,144628,144629],{"class":69,"line":149},[67,144630,2288],{"class":77},[19,144632,144633],{},"总代码和效果展示：",[725,144635],{"style":126945,"src":144636},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-257.png",[19,144638,69426],{},[57,144640,144641],{"className":127836,"code":144464,"language":127838,"meta":62,"style":62},[64,144642,144643,144647,144661,144665,144683,144687,144705,144709,144727,144731,144749],{"__ignoreMap":62},[67,144644,144645],{"class":69,"line":70},[67,144646,144471],{"class":202},[67,144648,144649,144651,144653,144655,144657,144659],{"class":69,"line":143},[67,144650,1766],{"class":77},[67,144652,52148],{"class":51837},[67,144654,54023],{"class":112},[67,144656,909],{"class":77},[67,144658,92860],{"class":84},[67,144660,51844],{"class":77},[67,144662,144663],{"class":69,"line":149},[67,144664,144490],{"class":202},[67,144666,144667,144669,144671,144673,144675,144677,144679,144681],{"class":69,"line":155},[67,144668,52681],{"class":77},[67,144670,52148],{"class":51837},[67,144672,54023],{"class":112},[67,144674,909],{"class":77},[67,144676,144503],{"class":84},[67,144678,144506],{"class":77},[67,144680,52148],{"class":51837},[67,144682,51844],{"class":77},[67,144684,144685],{"class":69,"line":161},[67,144686,144515],{"class":202},[67,144688,144689,144691,144693,144695,144697,144699,144701,144703],{"class":69,"line":167},[67,144690,52681],{"class":77},[67,144692,52148],{"class":51837},[67,144694,54023],{"class":112},[67,144696,909],{"class":77},[67,144698,144528],{"class":84},[67,144700,144506],{"class":77},[67,144702,52148],{"class":51837},[67,144704,51844],{"class":77},[67,144706,144707],{"class":69,"line":173},[67,144708,144539],{"class":202},[67,144710,144711,144713,144715,144717,144719,144721,144723,144725],{"class":69,"line":180},[67,144712,52681],{"class":77},[67,144714,52148],{"class":51837},[67,144716,54023],{"class":112},[67,144718,909],{"class":77},[67,144720,144552],{"class":84},[67,144722,144506],{"class":77},[67,144724,52148],{"class":51837},[67,144726,51844],{"class":77},[67,144728,144729],{"class":69,"line":186},[67,144730,144563],{"class":202},[67,144732,144733,144735,144737,144739,144741,144743,144745,144747],{"class":69,"line":444},[67,144734,52681],{"class":77},[67,144736,52148],{"class":51837},[67,144738,54023],{"class":112},[67,144740,909],{"class":77},[67,144742,144576],{"class":84},[67,144744,144506],{"class":77},[67,144746,52148],{"class":51837},[67,144748,51844],{"class":77},[67,144750,144751,144753,144755],{"class":69,"line":2335},[67,144752,52322],{"class":77},[67,144754,52148],{"class":51837},[67,144756,51844],{"class":77},[19,144758,70990],{},[57,144760,144761],{"className":127836,"code":131193,"language":127838,"meta":62,"style":62},[64,144762,144763,144767,144781,144785],{"__ignoreMap":62},[67,144764,144765],{"class":69,"line":70},[67,144766,131200],{"class":202},[67,144768,144769,144771,144773,144775,144777,144779],{"class":69,"line":143},[67,144770,1766],{"class":77},[67,144772,52148],{"class":51837},[67,144774,54023],{"class":112},[67,144776,909],{"class":77},[67,144778,131213],{"class":84},[67,144780,51844],{"class":77},[67,144782,144783],{"class":69,"line":149},[67,144784,131220],{"class":77},[67,144786,144787,144789,144791],{"class":69,"line":155},[67,144788,52322],{"class":77},[67,144790,52148],{"class":51837},[67,144792,51844],{"class":77},[779,144794,138490],{},{"title":62,"searchDepth":143,"depth":143,"links":144796},[144797,144798,144802,144803,144804],{"id":143941,"depth":143,"text":143942},{"id":143973,"depth":143,"text":143974,"children":144799},[144800,144801],{"id":143977,"depth":149,"text":143978},{"id":143994,"depth":149,"text":143995},{"id":144013,"depth":143,"text":144014},{"id":144020,"depth":143,"text":144021},{"id":144107,"depth":143,"text":144108,"children":144805},[144806,144807,144808,144809,144810],{"id":144114,"depth":149,"text":144115},{"id":144242,"depth":149,"text":144243},{"id":144336,"depth":149,"text":144337},{"id":144385,"depth":149,"text":144386},{"id":144395,"depth":149,"text":144396},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch20",{"title":143933,"description":24093},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇","cQcqj5e9hR6NoF8kN47rpTyWJSyfRUI7ogbrP5czAbc",{"id":144817,"title":144818,"body":144819,"description":24093,"extension":787,"meta":146046,"navigation":176,"path":146047,"seo":146048,"stem":146049,"__hash__":146050},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇.md","21. 移动端布局实战下篇",{"type":7,"value":144820,"toc":146024},[144821,144824,144828,144832,144835,144838,144842,144847,144850,144853,144856,144859,144862,144919,144922,144927,144930,144933,144937,144948,144952,144955,144958,144965,144970,144974,144977,144983,144986,144990,144993,145000,145003,145006,145013,145016,145023,145026,145029,145036,145039,145042,145044,145061,145065,145068,145071,145074,145078,145081,145084,145087,145090,145093,145096,145098,145101,145104,145166,145169,145279,145286,145292,145295,145298,145302,145305,145309,145314,145317,145324,145327,145333,145338,145341,145344,145347,145350,145353,145356,145359,145362,145418,145420,145446,145450,145453,145456,145459,145467,145470,145473,145477,145533,145536,145540,145546,145557,145560,145565,145568,145571,145577,145580,145583,145586,145589,145592,145595,145598,145601,145626,145632,145635,145638,145641,145644,145647,145650,145655,145658,145661,145664,145672,145675,145682,145685,145688,145690,145714,145716,145719,145722,145725,145728,145731,145734,145737,145771,145774,145777,145811,145818,145821,145824,145827,145830,145833,145836,145843,145846,145849,145852,145855,145862,145865,145868,145875,145878,145881,145885,145888,145891,145894,145897,145900,145903,145906,145909,145911,145935,145937,145961,145965,145976,145979,145982,145985,145988,145991,145994,145997,146000,146003,146006,146009,146012,146015,146018,146021],[10,144822,144818],{"id":144823},"_21-移动端布局实战下篇",[803,144825,144827],{"id":144826},"_211-rem适配布局","21.1 rem适配布局",[14,144829,144831],{"id":144830},"_2111-rem单位","21.1.1 rem单位",[725,144833],{"style":126945,"src":144834},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-258.png",[19,144836,144837],{},"也就是父盒子font-size设置为12px的话，子盒子的font-size设为10em，则子盒子文字大小为120px",[14,144839,144841],{"id":144840},"_2112-媒体查询","21.1.2 媒体查询",[815,144843,144844],{},[818,144845,144846],{},"参数介绍",[725,144848],{"style":126945,"src":144849},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-259.png",[725,144851],{"style":126945,"src":144852},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-260.png",[725,144854],{"style":126945,"src":144855},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-261.png",[725,144857],{"style":126945,"src":144858},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-262.png",[725,144860],{"style":126945,"src":144861},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-263.png",[57,144863,144865],{"className":127089,"code":144864,"language":127091,"meta":62,"style":62},"\u002F* 媒体查询 *\u002F\n@media (max-width: 768px) {\n  .container {\n    width: 100%;\n  }\n}\n",[64,144866,144867,144872,144891,144898,144911,144915],{"__ignoreMap":62},[67,144868,144869],{"class":69,"line":70},[67,144870,144871],{"class":202},"\u002F* 媒体查询 *\u002F\n",[67,144873,144874,144877,144879,144882,144884,144887,144889],{"class":69,"line":143},[67,144875,144876],{"class":73},"@media",[67,144878,2381],{"class":77},[67,144880,144881],{"class":208},"max-width",[67,144883,51974],{"class":77},[67,144885,144886],{"class":208},"768",[67,144888,52029],{"class":73},[67,144890,13160],{"class":77},[67,144892,144893,144896],{"class":69,"line":149},[67,144894,144895],{"class":112},"  .container",[67,144897,16289],{"class":77},[67,144899,144900,144903,144905,144907,144909],{"class":69,"line":155},[67,144901,144902],{"class":208},"    width",[67,144904,51974],{"class":77},[67,144906,1169],{"class":208},[67,144908,1186],{"class":73},[67,144910,2017],{"class":77},[67,144912,144913],{"class":69,"line":161},[67,144914,127885],{"class":77},[67,144916,144917],{"class":69,"line":167},[67,144918,2288],{"class":77},[19,144920,144921],{},"媒体查询一般按照从大到小或者 从小到大的顺序来",[815,144923,144924],{"start":143},[818,144925,144926],{},"引入资源",[725,144928],{"style":126945,"src":144929},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-264.png",[19,144931,144932],{},"引入资源就是针对不同的屏幕尺寸 调用不同的css文件",[14,144934,144936],{"id":144935},"_2113-媒体查询rem实现元素动态大小变化","21.1.3 媒体查询+rem实现元素动态大小变化",[1863,144938,144939,144942,144945],{},[818,144940,144941],{},"rem单位是跟着html来走的，有了rem页面元素可以设置不同大小尺寸",[818,144943,144944],{},"媒体查询可以根据不同设备宽度来修改样式",[818,144946,144947],{},"媒体查询+rem 就可以实现不同设备宽度，实现页面元素大小的动态变化",[803,144949,144951],{"id":144950},"_212-less基础","21.2 Less基础",[19,144953,144954],{},"css冗余度较高，不利于复用，没有很好的计算能力",[19,144956,144957],{},"Less可以解决该问题，它是css的扩展语言",[19,144959,144960,144961],{},"Less中文网址： ",[28,144962,144963],{"href":144963,"rel":144964},"http:\u002F\u002Flesscss.cn\u002F",[32],[19,144966,144967],{},[336,144968,144969],{},"Less 是一门 CSS 预处理语言，它扩展了CSS的动态特性",[14,144971,144973],{"id":144972},"_2121-less安装","21.2.1 less安装",[19,144975,144976],{},"如果使用vscode，则无需进行下方安装步骤",[19,144978,144979],{},[28,144980,144981],{"href":144981,"rel":144982},"http:\u002F\u002Fnodejs.cn\u002Fdownload\u002F",[32],[725,144984],{"style":126945,"src":144985},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-265.png",[14,144987,144989],{"id":144988},"_2122-less使用","21.2.2 less使用",[19,144991,144992],{},"我们首先新建一个后缀名为less的文件， 在这个less文件里面书写less语句",[815,144994,144995],{},[818,144996,144997],{},[336,144998,144999],{},"Less 变量",[725,145001],{"style":126945,"src":145002},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-266.png",[725,145004],{"style":126945,"src":145005},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-267.png",[815,145007,145008],{"start":143},[818,145009,145010],{},[336,145011,145012],{},"Less 编译",[725,145014],{"style":126945,"src":145015},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-268.png",[815,145017,145018],{"start":149},[818,145019,145020],{},[336,145021,145022],{},"Less 嵌套",[725,145024],{"style":126945,"src":145025},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-269.png",[725,145027],{"style":126945,"src":145028},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-270.png",[815,145030,145031],{"start":155},[818,145032,145033],{},[336,145034,145035],{},"Less 运算",[725,145037],{"style":126945,"src":145038},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-271.png",[19,145040,145041],{},"运算的时候不需要加单位，比如第一个+5之后就是宽度变为15px了",[19,145043,893],{},[1863,145045,145046,145049,145052,145055,145058],{},[818,145047,145048],{},"乘号（*）和除号（\u002F）的写法",[818,145050,145051],{},"运算符中间左右有个空格隔开 1px + 5",[818,145053,145054],{},"对于两个不同的单位的值之间的运算，运算结果的值取第一个值的单位",[818,145056,145057],{},"如果两个值之间只有一个值有单位，则运算结果就取该单位",[818,145059,145060],{},"注意在进行除法运算时一定要加括号，不然无法运算！",[803,145062,145064],{"id":145063},"_213-rem-适配方案","21.3 rem 适配方案",[19,145066,145067],{},"① 按照设计稿与设备宽度的比例，动态计算并设置 html 根标签的 font-size 大小（媒体查询）",[19,145069,145070],{},"② CSS 中，设计稿元素的宽、高、相对位置等取值，按照同等比例换算为 rem 为单位的值；",[725,145072],{"style":126945,"src":145073},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-272.png",[14,145075,145077],{"id":145076},"_2131-rem-实际开发适配方案1","21.3.1 rem 实际开发适配方案1",[19,145079,145080],{},"rem + 媒体查询 + less 技术",[725,145082],{"style":126945,"src":145083},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-273.png",[19,145085,145086],{},"这里可以这样理解，这个屏幕分成15份，也就是说由15份的文字组成，750px页面上文字的大小就是50px，要保持比例相同，那么在320px屏幕上的文字应该也得保证有15个，每个文字的大小就是21.33px，文字的个数由自己来定，那么只需要将页面中的文字大小设置为这15个字大小的倍数就可以了，知道倍数之后就保证了在不同屏幕上的展示比例不变",[19,145088,145089],{},"也可以理解为获得设计网页html尺寸与手机不同类型屏幕尺寸的比例，这个比例就可以保证设计网页在手机屏幕尺寸的正常显示",[725,145091],{"style":126945,"src":145092},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-274.png",[19,145094,145095],{},"写的时候每个元素都需要加（xxxrem \u002F @baseFront）",[19,145097,15350],{},[725,145099],{"style":126945,"src":145100},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-275.png",[19,145102,145103],{},"index.html:",[57,145105,145107],{"className":127089,"code":145106,"language":127091,"meta":62,"style":62},"\u002F* rem 适配方案 *\u002F\nhtml {\n  font-size: 62.5%;  \u002F* 1rem = 10px *\u002F\n}\n.box {\n  width: 10rem;  \u002F* 100px *\u002F\n}\n",[64,145108,145109,145114,145120,145136,145140,145146,145162],{"__ignoreMap":62},[67,145110,145111],{"class":69,"line":70},[67,145112,145113],{"class":202},"\u002F* rem 适配方案 *\u002F\n",[67,145115,145116,145118],{"class":69,"line":143},[67,145117,51172],{"class":51837},[67,145119,16289],{"class":77},[67,145121,145122,145124,145126,145129,145131,145133],{"class":69,"line":149},[67,145123,71163],{"class":208},[67,145125,51974],{"class":77},[67,145127,145128],{"class":208},"62.5",[67,145130,1186],{"class":73},[67,145132,130952],{"class":77},[67,145134,145135],{"class":202},"\u002F* 1rem = 10px *\u002F\n",[67,145137,145138],{"class":69,"line":155},[67,145139,2288],{"class":77},[67,145141,145142,145144],{"class":69,"line":161},[67,145143,130937],{"class":112},[67,145145,16289],{"class":77},[67,145147,145148,145150,145152,145154,145157,145159],{"class":69,"line":167},[67,145149,71105],{"class":208},[67,145151,51974],{"class":77},[67,145153,1303],{"class":208},[67,145155,145156],{"class":73},"rem",[67,145158,130952],{"class":77},[67,145160,145161],{"class":202},"\u002F* 100px *\u002F\n",[67,145163,145164],{"class":69,"line":173},[67,145165,2288],{"class":77},[19,145167,145168],{},"common.less",[57,145170,145172],{"className":127089,"code":145171,"language":127091,"meta":62,"style":62},"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",[64,145173,145174,145180,145195,145199,145205,145219,145223,145227,145231,145237,145251,145255,145261,145275],{"__ignoreMap":62},[67,145175,145176,145178],{"class":69,"line":70},[67,145177,51172],{"class":51837},[67,145179,16289],{"class":77},[67,145181,145182,145184,145186,145188,145190,145192],{"class":69,"line":143},[67,145183,71163],{"class":208},[67,145185,51974],{"class":77},[67,145187,145128],{"class":208},[67,145189,1186],{"class":73},[67,145191,106],{"class":77},[67,145193,145194],{"class":202},"\u002F* 10px *\u002F\n",[67,145196,145197],{"class":69,"line":149},[67,145198,2288],{"class":77},[67,145200,145201,145203],{"class":69,"line":155},[67,145202,52148],{"class":51837},[67,145204,16289],{"class":77},[67,145206,145207,145209,145211,145213,145215,145217],{"class":69,"line":161},[67,145208,71105],{"class":208},[67,145210,51974],{"class":77},[67,145212,1303],{"class":208},[67,145214,145156],{"class":73},[67,145216,106],{"class":77},[67,145218,145161],{"class":202},[67,145220,145221],{"class":69,"line":167},[67,145222,2288],{"class":77},[67,145224,145225],{"class":69,"line":173},[67,145226,136550],{"class":77},[67,145228,145229],{"class":69,"line":180},[67,145230,145113],{"class":202},[67,145232,145233,145235],{"class":69,"line":186},[67,145234,51172],{"class":51837},[67,145236,16289],{"class":77},[67,145238,145239,145241,145243,145245,145247,145249],{"class":69,"line":444},[67,145240,71163],{"class":208},[67,145242,51974],{"class":77},[67,145244,145128],{"class":208},[67,145246,1186],{"class":73},[67,145248,130952],{"class":77},[67,145250,145135],{"class":202},[67,145252,145253],{"class":69,"line":2335},[67,145254,2288],{"class":77},[67,145256,145257,145259],{"class":69,"line":2340},[67,145258,130937],{"class":112},[67,145260,16289],{"class":77},[67,145262,145263,145265,145267,145269,145271,145273],{"class":69,"line":2346},[67,145264,71105],{"class":208},[67,145266,51974],{"class":77},[67,145268,1303],{"class":208},[67,145270,145156],{"class":73},[67,145272,130952],{"class":77},[67,145274,145161],{"class":202},[67,145276,145277],{"class":69,"line":2351},[67,145278,2288],{"class":77},[19,145280,145281,145282,145285],{},"html {\nfont-size: 62.5%; \u002F* 10px ",[24270,145283,145284],{},"\u002F\n}\ndiv {\nwidth: 10rem; \u002F"," 100px *\u002F\n}",[57,145287,145290],{"className":145288,"code":145289,"language":5906},[5904],"\n初始化样式：normalize.css(直接复制下载即可)\n\n```Css\n* {\n  margin: 0;\n  padding: 0;\n  box-sizing: border-box;\n}\n",[64,145291,145289],{"__ignoreMap":62},[19,145293,145294],{},"less保存时会自动变成.css文件",[19,145296,145297],{},"好好搞懂上述代码写法",[14,145299,145301],{"id":145300},"_2132-样式导入样式","21.3.2 样式导入样式",[725,145303],{"style":126945,"src":145304},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-276.png",[14,145306,145308],{"id":145307},"_2133-rem-适配方案2","21.3.3 rem 适配方案2",[815,145310,145311],{},[818,145312,145313],{},"准备工作",[725,145315],{"style":126945,"src":145316},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-277.png",[19,145318,145319,145320],{},"github地址：",[28,145321,145322],{"href":145322,"rel":145323},"https:\u002F\u002Fgithub.com\u002Famfe\u002Flib-flexible",[32],[19,145325,145326],{},"下载之后，将index.js文件拖到项目中就可以了",[19,145328,145329,145330],{},"js文件引入到index.html中使用的是",[64,145331,145332],{},"\u003Cscript src=\"js\u002Fflexible.js\">\u003C\u002Fscript>",[815,145334,145335],{"start":143},[818,145336,145337],{},"vscode插件",[725,145339],{"style":126945,"src":145340},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-278.png",[19,145342,145343],{},"js这个flexible是将整个浏览页面设计成了10等分，也就是说按照750px的设计尺寸，body的大小为75px，所以body的宽度应为10rem，由于这里不在使用媒体查询，就没有最大界面限制了，所以给body设置为margin：0 auto;是不显示的，要加一个最大宽度，即max-width",[19,145345,145346],{},"在下面布局时每个盒子的大小都是依据html（手机的尺寸界面）来变的，都要转化成rem单位，每个宽度除75不好算，这个插件可以帮助我们来算，插件就是下面的效果",[725,145348],{"style":126945,"src":145349},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-279.png",[19,145351,145352],{},"使用之前需要先修改一下html字体大小基准值，应该改为75px",[725,145354],{"style":126945,"src":145355},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-280.png",[19,145357,145358],{},"修改成75就可以，alt+z为快捷键",[19,145360,145361],{},"index.css：",[57,145363,145364],{"className":127089,"code":145106,"language":127091,"meta":62,"style":62},[64,145365,145366,145370,145376,145390,145394,145400,145414],{"__ignoreMap":62},[67,145367,145368],{"class":69,"line":70},[67,145369,145113],{"class":202},[67,145371,145372,145374],{"class":69,"line":143},[67,145373,51172],{"class":51837},[67,145375,16289],{"class":77},[67,145377,145378,145380,145382,145384,145386,145388],{"class":69,"line":149},[67,145379,71163],{"class":208},[67,145381,51974],{"class":77},[67,145383,145128],{"class":208},[67,145385,1186],{"class":73},[67,145387,130952],{"class":77},[67,145389,145135],{"class":202},[67,145391,145392],{"class":69,"line":155},[67,145393,2288],{"class":77},[67,145395,145396,145398],{"class":69,"line":161},[67,145397,130937],{"class":112},[67,145399,16289],{"class":77},[67,145401,145402,145404,145406,145408,145410,145412],{"class":69,"line":167},[67,145403,71105],{"class":208},[67,145405,51974],{"class":77},[67,145407,1303],{"class":208},[67,145409,145156],{"class":73},[67,145411,130952],{"class":77},[67,145413,145161],{"class":202},[67,145415,145416],{"class":69,"line":173},[67,145417,2288],{"class":77},[19,145419,145103],{},[57,145421,145422],{"className":127089,"code":127493,"language":127091,"meta":62,"style":62},[64,145423,145424,145430,145442],{"__ignoreMap":62},[67,145425,145426,145428],{"class":69,"line":70},[67,145427,52337],{"class":51837},[67,145429,16289],{"class":77},[67,145431,145432,145434,145436,145438,145440],{"class":69,"line":143},[67,145433,71163],{"class":208},[67,145435,51974],{"class":77},[67,145437,1457],{"class":208},[67,145439,52029],{"class":73},[67,145441,2017],{"class":77},[67,145443,145444],{"class":69,"line":149},[67,145445,2288],{"class":77},[803,145447,145449],{"id":145448},"_214-响应式开发","21.4 响应式开发",[19,145451,145452],{},"他的开发原理就是使用媒体查询针对不同宽度的设备进行布局和样式的设置，从而适配不同设备的目的。",[725,145454],{"style":126945,"src":145455},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-281.png",[19,145457,145458],{},"做法：",[1863,145460,145461,145464],{},[818,145462,145463],{},"响应式需要一个父级做为布局容器，来配合子级元素来实现变化效果",[818,145465,145466],{},"原理就是在不同屏幕下，通过媒体查询来改变这个布局容器的大小，再改变里面子元素的排列方式和大小，从而实现不同屏幕下，看到不同的页面布局和样式变化，通过父亲来改变孩子的大小",[725,145468],{"style":126945,"src":145469},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-282.png",[19,145471,145472],{},"布局容器比页面稍微小一点是为了美观好看，由于小一点点，距离两边会有空隙，美观",[14,145474,145476],{"id":145475},"_2141-简单代码示范","21.4.1 简单代码示范",[57,145478,145479],{"className":127089,"code":145106,"language":127091,"meta":62,"style":62},[64,145480,145481,145485,145491,145505,145509,145515,145529],{"__ignoreMap":62},[67,145482,145483],{"class":69,"line":70},[67,145484,145113],{"class":202},[67,145486,145487,145489],{"class":69,"line":143},[67,145488,51172],{"class":51837},[67,145490,16289],{"class":77},[67,145492,145493,145495,145497,145499,145501,145503],{"class":69,"line":149},[67,145494,71163],{"class":208},[67,145496,51974],{"class":77},[67,145498,145128],{"class":208},[67,145500,1186],{"class":73},[67,145502,130952],{"class":77},[67,145504,145135],{"class":202},[67,145506,145507],{"class":69,"line":155},[67,145508,2288],{"class":77},[67,145510,145511,145513],{"class":69,"line":161},[67,145512,130937],{"class":112},[67,145514,16289],{"class":77},[67,145516,145517,145519,145521,145523,145525,145527],{"class":69,"line":167},[67,145518,71105],{"class":208},[67,145520,51974],{"class":77},[67,145522,1303],{"class":208},[67,145524,145156],{"class":73},[67,145526,130952],{"class":77},[67,145528,145161],{"class":202},[67,145530,145531],{"class":69,"line":173},[67,145532,2288],{"class":77},[19,145534,145535],{},"父盒子一般命名为container",[14,145537,145539],{"id":145538},"_2142-bootstrap前端开发框架","21.4.2 Bootstrap前端开发框架",[19,145541,145542,145543],{},"Bootstrap 来自 Twitter（推特），是目前最受欢迎的前端框架。Bootstrap 是基于 HTML、CSS 和JAVASCRIPT的，它简洁灵活，",[336,145544,145545],{},"使得 Web 开发更加快捷",[1863,145547,145548],{},[818,145549,145550,145551],{},"官网：",[336,145552,145553],{},[28,145554,145555],{"href":145555,"rel":145556},"http:\u002F\u002Fgetbootstrap.com\u002F",[32],[19,145558,145559],{},"可以直接去官网拿现成的东西",[815,145561,145562],{},[818,145563,145564],{},"Bootstrap的使用",[19,145566,145567],{},"控制权在框架本身，使用者要按照框架所规定的某种规范进行开发",[19,145569,145570],{},"Bootstrap 使用四步曲：",[19,145572,145573,145576],{},[336,145574,145575],{},"1. 创建文件夹结构"," 2. 创建 html 骨架结构 3. 引入相关样式文件 4. 书写内容",[725,145578],{"style":126945,"src":145579},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-283.png",[19,145581,145582],{},"打开Bootstrap官网，然后下载",[725,145584],{"style":126945,"src":145585},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-284.png",[725,145587],{"style":126945,"src":145588},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-285.png",[19,145590,145591],{},"这里边的小图标都是用类选择器写的，需要啥就复制这些类名就ok，它的效果就是给我们的标签创立了元素伪类选择器，使用的before,修改位置时，我们要对这个标签的元素伪类选择器来进行修改，只需要改变移动的量就可以，因为这个类的效果就已经进行了元素伪类选择器的设置",[19,145593,145594],{},"下载后会得到一个压缩包，然后解压一下，复制里边的js css fonts文件",[19,145596,145597],{},"在项目文件夹中新建一个bootstrap文件夹，然后将那些文件粘贴进去",[725,145599],{"style":126945,"src":145600},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-286.png",[57,145602,145604],{"className":127089,"code":145603,"language":127091,"meta":62,"style":62},".center {\n  color: red;\n}\n",[64,145605,145606,145612,145622],{"__ignoreMap":62},[67,145607,145608,145610],{"class":69,"line":70},[67,145609,127380],{"class":112},[67,145611,16289],{"class":77},[67,145613,145614,145616,145618,145620],{"class":69,"line":143},[67,145615,71442],{"class":208},[67,145617,51974],{"class":77},[67,145619,57958],{"class":208},[67,145621,2017],{"class":77},[67,145623,145624],{"class":69,"line":149},[67,145625,2288],{"class":77},[19,145627,145628,145631],{},[64,145629,145630],{},"\u003C!--[if lt IE 9]>"," 是条件注释：如果小于 IE9，引入下边两个文件",[725,145633],{"style":126945,"src":145634},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-287.png",[725,145636],{"style":126945,"src":145637},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-288.png",[725,145639],{"style":126945,"src":145640},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-289.png",[19,145642,145643],{},"bootstrap中的代码是通过类实现的，也就是说我们可以自己建立盒子，然后用他的类选择器，在微调，就可以实现自己想要的效果了，如果没效果，往往可能权重不够，加！important增加权重看看能否解决",[725,145645],{"style":126945,"src":145646},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-290.png",[19,145648,145649],{},"bootstrap也是通过normalize.css进行初始化的，这说明在进行项目的时候不用再引入normalize.css这个文件进行了。bootstrap内部带有初始化的引入",[815,145651,145652],{"start":143},[818,145653,145654],{},"布局容器",[725,145656],{"style":126945,"src":145657},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-291.png",[19,145659,145660],{},"这样就可以不用媒体查询了，直接用类就可以实现（这个类选择器包含了不同屏幕尺寸的宽度，可以理解为这个里边对各个尺寸进行了从小到大的媒体查询，使用这个类就完全ok，不需要媒体查询）",[19,145662,145663],{},"container-fluid用于移动式布局比较方便",[815,145665,145666],{"start":149},[818,145667,145668,145669],{},"bootstrap ",[336,145670,145671],{},"栅格系统原理",[725,145673],{"style":126945,"src":145674},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-292.png",[815,145676,145677],{"start":155},[818,145678,145679],{},[336,145680,145681],{},"栅格选项参数",[725,145683],{"style":126945,"src":145684},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-293.png",[19,145686,145687],{},".col-lg-3表示再大桌面显示器上每个盒子占三份，也就是4个小盒子各占四分之一",[19,145689,15350],{},[57,145691,145692],{"className":127089,"code":145603,"language":127091,"meta":62,"style":62},[64,145693,145694,145700,145710],{"__ignoreMap":62},[67,145695,145696,145698],{"class":69,"line":70},[67,145697,127380],{"class":112},[67,145699,16289],{"class":77},[67,145701,145702,145704,145706,145708],{"class":69,"line":143},[67,145703,71442],{"class":208},[67,145705,51974],{"class":77},[67,145707,57958],{"class":208},[67,145709,2017],{"class":77},[67,145711,145712],{"class":69,"line":149},[67,145713,2288],{"class":77},[19,145715,136132],{},[725,145717],{"style":126945,"src":145718},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-294.png",[19,145720,145721],{},"再强调一下：这个响应式布局可以实现一行内容如何分，在这个界面是这样分的，当缩小或放大一定页面就一行内容展示的可能变多，也可能变少，这就是响应式布局",[19,145723,145724],{},"然后总列份为12份，然后后边的数字就表示了占的列份，也就是占的宽度为多少",[19,145726,145727],{},"如果孩子的份数相加等于12， 则孩子能占满整个 container布局容器的宽度",[19,145729,145730],{},"如果孩子的份数相加小于12，则占不满整个container的宽度，会在右侧留有宽度",[19,145732,145733],{},"如果孩子的份数相加大于12，多余的那一列，会另起一行来显示",[19,145735,145736],{},"汇总展示说明：",[57,145738,145739],{"className":127836,"code":131193,"language":127838,"meta":62,"style":62},[64,145740,145741,145745,145759,145763],{"__ignoreMap":62},[67,145742,145743],{"class":69,"line":70},[67,145744,131200],{"class":202},[67,145746,145747,145749,145751,145753,145755,145757],{"class":69,"line":143},[67,145748,1766],{"class":77},[67,145750,52148],{"class":51837},[67,145752,54023],{"class":112},[67,145754,909],{"class":77},[67,145756,131213],{"class":84},[67,145758,51844],{"class":77},[67,145760,145761],{"class":69,"line":149},[67,145762,131220],{"class":77},[67,145764,145765,145767,145769],{"class":69,"line":155},[67,145766,52322],{"class":77},[67,145768,52148],{"class":51837},[67,145770,51844],{"class":77},[725,145772],{"style":126945,"src":145773},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-295.png",[19,145775,145776],{},"一行中的内容在不同页面展示不同个数的效果代码写法如下：",[57,145778,145779],{"className":127836,"code":131193,"language":127838,"meta":62,"style":62},[64,145780,145781,145785,145799,145803],{"__ignoreMap":62},[67,145782,145783],{"class":69,"line":70},[67,145784,131200],{"class":202},[67,145786,145787,145789,145791,145793,145795,145797],{"class":69,"line":143},[67,145788,1766],{"class":77},[67,145790,52148],{"class":51837},[67,145792,54023],{"class":112},[67,145794,909],{"class":77},[67,145796,131213],{"class":84},[67,145798,51844],{"class":77},[67,145800,145801],{"class":69,"line":149},[67,145802,131220],{"class":77},[67,145804,145805,145807,145809],{"class":69,"line":155},[67,145806,52322],{"class":77},[67,145808,52148],{"class":51837},[67,145810,51844],{"class":77},[815,145812,145813],{"start":161},[818,145814,145815],{},[336,145816,145817],{},"列嵌套",[725,145819],{"style":126945,"src":145820},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-296.png",[19,145822,145823],{},"我们列嵌套最好加1个行row，这样可以取消父元素的padding值 而且高度自动和父级一样高，此时就是每个子盒子的padding值了",[19,145825,145826],{},"没加row内部这样：",[725,145828],{"style":126945,"src":145829},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-297.png",[19,145831,145832],{},"加上row之后内部为：",[725,145834],{"style":126945,"src":145835},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-298.png",[815,145837,145838],{"start":167},[818,145839,145840],{},[336,145841,145842],{},"列偏移",[725,145844],{"style":126945,"src":145845},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-299.png",[19,145847,145848],{},"不要用margin，如果用这个的话会导致响应式失效，我们要的就是在不同界面上变化不同，但是比例相同，还有margin的值也不好确定，不能值卡死，所以不要用padding!!!",[19,145850,145851],{},"要加偏移量，即偏移份数",[19,145853,145854],{},"偏移的份数=12-两个盒子的份数",[815,145856,145857],{"start":173},[818,145858,145859],{},[336,145860,145861],{},"列排序",[725,145863],{"style":126945,"src":145864},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-300.png",[19,145866,145867],{},"pull拉左；push推右",[815,145869,145870],{"start":180},[818,145871,145872],{},[336,145873,145874],{},"响应式工具",[725,145876],{"style":126945,"src":145877},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-301.png",[19,145879,145880],{},"与之相反的，是visible-xs visible-sm visible-md visible-lg是显示页面的内容",[14,145882,145884],{"id":145883},"_2143-响应式小项目","21.4.3 响应式小项目",[19,145886,145887],{},"在使用无序列表时可以通过对ul进行，取消li前边的点不用非得在li上进行操作，要知道继承性，反正要对ul进行操作了，所以直接给ul写就行，可以避免代码的冗余",[19,145889,145890],{},"ul {",[19,145892,145893],{},"list-style: none;",[19,145895,145896],{},"margin:0;",[19,145898,145899],{},"padding:0; }",[725,145901],{"style":126945,"src":145902},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-302.png",[725,145904],{"style":126945,"src":145905},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-303.png",[19,145907,145908],{},"要灵活用好浮动！！！，样式优先去网站上找类名，然后直接复制，提高自己开发的效率，当屏幕缩放内容改变的时候不要忘记媒体查询",[19,145910,69426],{},[57,145912,145913],{"className":127089,"code":139759,"language":127091,"meta":62,"style":62},[64,145914,145915,145921,145931],{"__ignoreMap":62},[67,145916,145917,145919],{"class":69,"line":70},[67,145918,130937],{"class":112},[67,145920,16289],{"class":77},[67,145922,145923,145925,145927,145929],{"class":69,"line":143},[67,145924,131569],{"class":208},[67,145926,51974],{"class":77},[67,145928,24453],{"class":208},[67,145930,2017],{"class":77},[67,145932,145933],{"class":69,"line":149},[67,145934,2288],{"class":77},[19,145936,70990],{},[57,145938,145939],{"className":127089,"code":139759,"language":127091,"meta":62,"style":62},[64,145940,145941,145947,145957],{"__ignoreMap":62},[67,145942,145943,145945],{"class":69,"line":70},[67,145944,130937],{"class":112},[67,145946,16289],{"class":77},[67,145948,145949,145951,145953,145955],{"class":69,"line":143},[67,145950,131569],{"class":208},[67,145952,51974],{"class":77},[67,145954,24453],{"class":208},[67,145956,2017],{"class":77},[67,145958,145959],{"class":69,"line":149},[67,145960,2288],{"class":77},[803,145962,145964],{"id":145963},"_215-swiper-插件使用","21.5 swiper 插件使用",[1863,145966,145967,145970,145973],{},[818,145968,145969],{},"下载需要的css和js文件html页面中 引入相关文件",[818,145971,145972],{},"官网找到类似案例，复制html结构，css样式 js 语法",[818,145974,145975],{},"根据需求定制修改模块",[725,145977],{"style":126945,"src":145978},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-304.png",[19,145980,145981],{},"解压后将这两部分放到项目中",[725,145983],{"style":126945,"src":145984},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-305.png",[19,145986,145987],{},"这个插件可以帮助我们实现轮播图效果",[19,145989,145990],{},"用法：",[725,145992],{"style":126945,"src":145993},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-306.png",[19,145995,145996],{},"找到自己喜欢的",[725,145998],{"style":126945,"src":145999},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-307.png",[19,146001,146002],{},"右键，查看网页源代码",[725,146004],{"style":126945,"src":146005},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-308.png",[19,146007,146008],{},"复制人家的结构内容",[19,146010,146011],{},"然后去看API文档：",[725,146013],{"style":126945,"src":146014},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-309.png",[19,146016,146017],{},"可以看看如何修改样式",[19,146019,146020],{},"现成的轮播图效果，直接需要啥取啥就行，然后再稍微进行修改即可",[779,146022,146023],{},"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":62,"searchDepth":143,"depth":143,"links":146025},[146026,146031,146035,146040,146045],{"id":144826,"depth":143,"text":144827,"children":146027},[146028,146029,146030],{"id":144830,"depth":149,"text":144831},{"id":144840,"depth":149,"text":144841},{"id":144935,"depth":149,"text":144936},{"id":144950,"depth":143,"text":144951,"children":146032},[146033,146034],{"id":144972,"depth":149,"text":144973},{"id":144988,"depth":149,"text":144989},{"id":145063,"depth":143,"text":145064,"children":146036},[146037,146038,146039],{"id":145076,"depth":149,"text":145077},{"id":145300,"depth":149,"text":145301},{"id":145307,"depth":149,"text":145308},{"id":145448,"depth":143,"text":145449,"children":146041},[146042,146043,146044],{"id":145475,"depth":149,"text":145476},{"id":145538,"depth":149,"text":145539},{"id":145883,"depth":149,"text":145884},{"id":145963,"depth":143,"text":145964},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch21",{"title":144818,"description":24093},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇","dcPQ5dNoub6Mo7yPfx2viTiSO8ON7T0MmDcFGjTm7xo",{"id":146052,"title":146053,"body":146054,"description":24093,"extension":787,"meta":146274,"navigation":176,"path":146275,"seo":146276,"stem":146277,"__hash__":146278},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位.md","22. 代码提交与新型相对单位",{"type":7,"value":146055,"toc":146270},[146056,146059,146063,146066,146081,146086,146089,146094,146129,146134,146146,146151,146164,146169,146186,146191,146211,146216,146234,146237,146240,146243,146246,146250,146253,146256,146259,146262,146265,146268],[10,146057,146053],{"id":146058},"_22-代码提交与新型相对单位",[803,146060,146062],{"id":146061},"_221-网页提交码云国内版github可以理解为","22.1 网页提交码云（国内版github可以理解为）",[19,146064,146065],{},"法1：",[815,146067,146068,146075,146078],{},[818,146069,146070,146071],{},"登录网站注册：",[28,146072,146073],{"href":146073,"rel":146074},"https:\u002F\u002Fgitee.com\u002F",[32],[818,146076,146077],{},"码云创建新的仓库",[818,146079,146080],{},"利用git 提交 把本地网站提交到 码云新建的仓库里面",[1863,146082,146083],{},[818,146084,146085],{},"在网站根目录右键-- Git Bash Here",[725,146087],{"style":126945,"src":146088},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-310.png",[1863,146090,146091],{},[818,146092,146093],{},"如果是第一次利用git提交，请配置好全局选项",[57,146095,146097],{"className":117833,"code":146096,"language":117835,"meta":62,"style":62},"git config --global user.name \"你的名字\"\ngit config --global user.email \"你的邮箱\"\n",[64,146098,146099,146115],{"__ignoreMap":62},[67,146100,146101,146104,146106,146109,146112],{"class":69,"line":70},[67,146102,146103],{"class":112},"git",[67,146105,120256],{"class":84},[67,146107,146108],{"class":208}," --global",[67,146110,146111],{"class":84}," user.name",[67,146113,146114],{"class":84}," \"你的名字\"\n",[67,146116,146117,146119,146121,146123,146126],{"class":69,"line":143},[67,146118,146103],{"class":112},[67,146120,120256],{"class":84},[67,146122,146108],{"class":208},[67,146124,146125],{"class":84}," user.email",[67,146127,146128],{"class":84}," \"你的邮箱\"\n",[1863,146130,146131],{},[818,146132,146133],{},"初始化仓库",[57,146135,146137],{"className":117833,"code":146136,"language":117835,"meta":62,"style":62},"git init\n",[64,146138,146139],{"__ignoreMap":62},[67,146140,146141,146143],{"class":69,"line":70},[67,146142,146103],{"class":112},[67,146144,146145],{"class":84}," init\n",[1863,146147,146148],{},[818,146149,146150],{},"把本地文件放到暂存区",[57,146152,146154],{"className":117833,"code":146153,"language":117835,"meta":62,"style":62},"git add .\n",[64,146155,146156],{"__ignoreMap":62},[67,146157,146158,146160,146162],{"class":69,"line":70},[67,146159,146103],{"class":112},[67,146161,5928],{"class":84},[67,146163,29278],{"class":84},[1863,146165,146166],{},[818,146167,146168],{},"把本地文件放到本地仓库里面",[57,146170,146172],{"className":117833,"code":146171,"language":117835,"meta":62,"style":62},"git commit -m \"first commit\"\n",[64,146173,146174],{"__ignoreMap":62},[67,146175,146176,146178,146181,146183],{"class":69,"line":70},[67,146177,146103],{"class":112},[67,146179,146180],{"class":84}," commit",[67,146182,101419],{"class":208},[67,146184,146185],{"class":84}," \"first commit\"\n",[1863,146187,146188],{},[818,146189,146190],{},"链接远程仓库",[57,146192,146194],{"className":117833,"code":146193,"language":117835,"meta":62,"style":62},"git remote add origin https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[64,146195,146196],{"__ignoreMap":62},[67,146197,146198,146200,146203,146205,146208],{"class":69,"line":70},[67,146199,146103],{"class":112},[67,146201,146202],{"class":84}," remote",[67,146204,5928],{"class":84},[67,146206,146207],{"class":84}," origin",[67,146209,146210],{"class":84}," https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[1863,146212,146213],{},[818,146214,146215],{},"把本地仓库的文件推送到远程仓库 push",[57,146217,146219],{"className":117833,"code":146218,"language":117835,"meta":62,"style":62},"git push -u origin master\n",[64,146220,146221],{"__ignoreMap":62},[67,146222,146223,146225,146227,146229,146231],{"class":69,"line":70},[67,146224,146103],{"class":112},[67,146226,29553],{"class":84},[67,146228,28827],{"class":208},[67,146230,146207],{"class":84},[67,146232,146233],{"class":84}," master\n",[725,146235],{"style":126945,"src":146236},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-311.png",[19,146238,146239],{},"上方方法暂未实现，后边学完git后在整",[19,146241,146242],{},"法2：也可以通过下方方式进行上传代码，这个在创建代码库的时候选择readme，然后进去这个页面后选择上传文件就可以了",[725,146244],{"style":126945,"src":146245},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-312.png",[803,146247,146249],{"id":146248},"_222-新型相对单位","22.2 新型相对单位",[725,146251],{"style":126945,"src":146252},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-313.png",[725,146254],{"style":126945,"src":146255},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-314.png",[19,146257,146258],{},"这里与rem的区别是为了方便计算，将窗口设置为100份",[19,146260,146261],{},"基本不用vh,手机的屏幕高度尺寸太大了，混用的话会可能导致撑破盒子，我们更关心的是屏幕宽度的变化，所以基本只用vw",[725,146263],{"style":126945,"src":146264},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-315.png",[19,146266,146267],{},"还有个单位vmin和vmax，是为了实现手机横屏显示的影响。vmin就是取手机视口宽高的最小值来算比例，vmax就是取的是视口宽高的最大值来算比例",[779,146269,24671],{},{"title":62,"searchDepth":143,"depth":143,"links":146271},[146272,146273],{"id":146061,"depth":143,"text":146062},{"id":146248,"depth":143,"text":146249},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch22",{"title":146053,"description":24093},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位","BIsIqmwMkxYSF1NrxtVu3evm093xKcUzMC5FtpDkMLY",{"id":146280,"title":146281,"body":146282,"description":146286,"extension":787,"meta":146287,"navigation":176,"path":146288,"seo":146289,"stem":146290,"__hash__":146291},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Findex.md","Html和CSS学习",{"type":7,"value":146283,"toc":146284},[],{"title":62,"searchDepth":143,"depth":143,"links":146285},[],"自己正经开始学编程的第一门语言！",{"category":93376},"\u002Fwiki\u002F2024-10-10-htmlcss",{"title":146281,"description":146286},"wiki\u002F2024-10-10-Html和CSS学习\u002Findex","ViZSWnRAqyl24AANwdRP-nrvSQaYwh0RLeDemyU8XvI",{"id":146293,"title":146294,"body":146295,"description":24093,"extension":787,"meta":147442,"navigation":176,"path":147443,"seo":147444,"stem":147445,"__hash__":147446},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序.md","1. Python环境与第一个程序",{"type":7,"value":146296,"toc":147418},[146297,146300,146304,146307,146310,146335,146338,146344,146348,146351,146378,146381,146421,146424,146436,146439,146445,146449,146453,146480,146497,146504,146508,146511,146537,146540,146544,146547,146587,146590,146607,146613,146617,146622,146666,146669,146687,146690,146758,146762,146769,146772,146787,146790,146799,146802,146813,146816,146825,146828,146845,146848,146863,146867,146871,146874,146876,146896,146900,146903,146906,146917,146920,146926,146930,146936,146963,146966,146978,146981,146992,146995,147001,147005,147011,147061,147064,147106,147109,147142,147145,147179,147183,147186,147206,147209,147245,147248,147261,147265,147269,147275,147278,147291,147295,147298,147304,147307,147311,147314,147317,147366,147370,147386,147392,147399,147405,147415],[10,146298,146294],{"id":146299},"_1-python环境与第一个程序",[803,146301,146303],{"id":146302},"_11-什么是python","1.1 什么是Python",[19,146305,146306],{},"Python 是一种解释型、高级、通用编程语言。它的语法接近自然语言，适合做自动化脚本、数据处理、Web 后端、人工智能、爬虫、测试工具、运维工具和教学入门。",[19,146308,146309],{},"理解 Python 时抓住三个关键词：",[815,146311,146312,146315,146318],{},[818,146313,146314],{},"解释型：代码通常由解释器一行行执行，不需要像 C\u002FC++ 那样先手动编译出可执行文件。",[818,146316,146317],{},"动态类型：变量不用提前声明类型，运行时根据赋值对象确定类型。",[818,146319,146320,146321,1072,146324,1072,146327,1072,146330,1072,146332,28922],{},"标准库丰富：安装 Python 后自带很多模块，如 ",[64,146322,146323],{},"os",[64,146325,146326],{},"sys",[64,146328,146329],{},"json",[64,146331,58397],{},[64,146333,146334],{},"datetime",[19,146336,146337],{},"Python 程序的运行链路：",[57,146339,146342],{"className":146340,"code":146341,"language":5906,"meta":62},[5904],"编写 .py 文件 -> Python 解释器读取代码 -> 转换为字节码 -> 虚拟机执行 -> 输出结果\n",[64,146343,146341],{"__ignoreMap":62},[803,146345,146347],{"id":146346},"_12-python解释器","1.2 Python解释器",[19,146349,146350],{},"解释器就是运行 Python 代码的软件。终端中常用命令如下：",[57,146352,146354],{"className":59,"code":146353,"language":61,"meta":62,"style":62},"python --version\npython3 --version\npython\npython3\n",[64,146355,146356,146362,146368,146373],{"__ignoreMap":62},[67,146357,146358,146360],{"class":69,"line":70},[67,146359,30917],{"class":112},[67,146361,356],{"class":208},[67,146363,146364,146366],{"class":69,"line":143},[67,146365,101416],{"class":112},[67,146367,356],{"class":208},[67,146369,146370],{"class":69,"line":149},[67,146371,146372],{"class":112},"python\n",[67,146374,146375],{"class":69,"line":155},[67,146376,146377],{"class":112},"python3\n",[19,146379,146380],{},"进入交互模式后，可以直接输入表达式：",[57,146382,146384],{"className":30915,"code":146383,"language":30917,"meta":62,"style":62},">>> 1 + 2\n3\n>>> print(\"hello python\")\nhello python\n",[64,146385,146386,146397,146402,146416],{"__ignoreMap":62},[67,146387,146388,146391,146393,146395],{"class":69,"line":70},[67,146389,146390],{"class":73},">>>",[67,146392,25828],{"class":208},[67,146394,46103],{"class":73},[67,146396,48260],{"class":208},[67,146398,146399],{"class":69,"line":143},[67,146400,146401],{"class":208},"3\n",[67,146403,146404,146406,146409,146411,146414],{"class":69,"line":149},[67,146405,146390],{"class":73},[67,146407,146408],{"class":208}," print",[67,146410,864],{"class":77},[67,146412,146413],{"class":84},"\"hello python\"",[67,146415,870],{"class":77},[67,146417,146418],{"class":69,"line":155},[67,146419,146420],{"class":77},"hello python\n",[19,146422,146423],{},"退出交互模式：",[57,146425,146427],{"className":30915,"code":146426,"language":30917,"meta":62,"style":62},"exit()\n",[64,146428,146429],{"__ignoreMap":62},[67,146430,146431,146434],{"class":69,"line":70},[67,146432,146433],{"class":208},"exit",[67,146435,2698],{"class":77},[19,146437,146438],{},"或使用快捷键：",[57,146440,146443],{"className":146441,"code":146442,"language":5906,"meta":62},[5904],"Windows: Ctrl + Z 然后回车\nmacOS\u002FLinux: Ctrl + D\n",[64,146444,146442],{"__ignoreMap":62},[803,146446,146448],{"id":146447},"_13-安装python","1.3 安装Python",[14,146450,146452],{"id":146451},"_131-windows安装","1.3.1 Windows安装",[815,146454,146455,146462,146465,146471,146477],{},[818,146456,146457,146458],{},"打开 Python 官网：",[28,146459,146460],{"href":146460,"rel":146461},"https:\u002F\u002Fwww.python.org\u002Fdownloads\u002F",[32],[818,146463,146464],{},"下载 Windows Installer。",[818,146466,146467,146468,28922],{},"安装时勾选 ",[64,146469,146470],{},"Add Python to PATH",[818,146472,146473,146474,28922],{},"点击 ",[64,146475,146476],{},"Install Now",[818,146478,146479],{},"安装完成后打开命令提示符验证：",[57,146481,146483],{"className":59,"code":146482,"language":61,"meta":62,"style":62},"python --version\npip --version\n",[64,146484,146485,146491],{"__ignoreMap":62},[67,146486,146487,146489],{"class":69,"line":70},[67,146488,30917],{"class":112},[67,146490,356],{"class":208},[67,146492,146493,146495],{"class":69,"line":143},[67,146494,24546],{"class":112},[67,146496,356],{"class":208},[19,146498,146499,146500,146503],{},"如果提示 ",[64,146501,146502],{},"python 不是内部或外部命令","，通常是 PATH 没配置好。可以重新安装并勾选 PATH，或在系统环境变量中加入 Python 安装目录。",[14,146505,146507],{"id":146506},"_132-macos安装","1.3.2 macOS安装",[19,146509,146510],{},"macOS 自带的 Python 版本可能不适合开发，建议安装新版：",[57,146512,146514],{"className":59,"code":146513,"language":61,"meta":62,"style":62},"brew install python\npython3 --version\npip3 --version\n",[64,146515,146516,146525,146531],{"__ignoreMap":62},[67,146517,146518,146521,146523],{"class":69,"line":70},[67,146519,146520],{"class":112},"brew",[67,146522,312],{"class":84},[67,146524,124855],{"class":84},[67,146526,146527,146529],{"class":69,"line":143},[67,146528,101416],{"class":112},[67,146530,356],{"class":208},[67,146532,146533,146535],{"class":69,"line":149},[67,146534,120237],{"class":112},[67,146536,356],{"class":208},[19,146538,146539],{},"如果没有 Homebrew，可以直接从 Python 官网下载 macOS 安装包。",[14,146541,146543],{"id":146542},"_133-linux安装","1.3.3 Linux安装",[19,146545,146546],{},"Ubuntu\u002FDebian：",[57,146548,146550],{"className":59,"code":146549,"language":61,"meta":62,"style":62},"sudo apt update\nsudo apt install python3 python3-pip python3-venv\npython3 --version\npip3 --version\n",[64,146551,146552,146560,146575,146581],{"__ignoreMap":62},[67,146553,146554,146556,146558],{"class":69,"line":70},[67,146555,298],{"class":112},[67,146557,117854],{"class":84},[67,146559,303],{"class":84},[67,146561,146562,146564,146566,146568,146570,146572],{"class":69,"line":143},[67,146563,298],{"class":112},[67,146565,117854],{"class":84},[67,146567,312],{"class":84},[67,146569,104940],{"class":84},[67,146571,101335],{"class":84},[67,146573,146574],{"class":84}," python3-venv\n",[67,146576,146577,146579],{"class":69,"line":149},[67,146578,101416],{"class":112},[67,146580,356],{"class":208},[67,146582,146583,146585],{"class":69,"line":155},[67,146584,120237],{"class":112},[67,146586,356],{"class":208},[19,146588,146589],{},"Fedora：",[57,146591,146593],{"className":59,"code":146592,"language":61,"meta":62,"style":62},"sudo dnf install python3 python3-pip\n",[64,146594,146595],{"__ignoreMap":62},[67,146596,146597,146599,146601,146603,146605],{"class":69,"line":70},[67,146598,298],{"class":112},[67,146600,378],{"class":84},[67,146602,312],{"class":84},[67,146604,104940],{"class":84},[67,146606,120302],{"class":84},[19,146608,146609,146610,146612],{},"Linux 上通常使用 ",[64,146611,101416],{}," 命令，避免和系统旧版本 Python 冲突。",[803,146614,146616],{"id":146615},"_14-pip包管理器","1.4 pip包管理器",[19,146618,146619,146621],{},[64,146620,24546],{}," 用来安装第三方库。",[57,146623,146625],{"className":59,"code":146624,"language":61,"meta":62,"style":62},"pip install requests\npip uninstall requests\npip show requests\npip list\npip freeze\n",[64,146626,146627,146636,146645,146653,146659],{"__ignoreMap":62},[67,146628,146629,146631,146633],{"class":69,"line":70},[67,146630,24546],{"class":112},[67,146632,312],{"class":84},[67,146634,146635],{"class":84}," requests\n",[67,146637,146638,146640,146643],{"class":69,"line":143},[67,146639,24546],{"class":112},[67,146641,146642],{"class":84}," uninstall",[67,146644,146635],{"class":84},[67,146646,146647,146649,146651],{"class":69,"line":149},[67,146648,24546],{"class":112},[67,146650,118111],{"class":84},[67,146652,146635],{"class":84},[67,146654,146655,146657],{"class":69,"line":155},[67,146656,24546],{"class":112},[67,146658,119492],{"class":84},[67,146660,146661,146663],{"class":69,"line":161},[67,146662,24546],{"class":112},[67,146664,146665],{"class":84}," freeze\n",[19,146667,146668],{},"国内网络较慢时可以临时使用镜像：",[57,146670,146672],{"className":59,"code":146671,"language":61,"meta":62,"style":62},"pip install requests -i https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[64,146673,146674],{"__ignoreMap":62},[67,146675,146676,146678,146680,146683,146685],{"class":69,"line":70},[67,146677,24546],{"class":112},[67,146679,312],{"class":84},[67,146681,146682],{"class":84}," requests",[67,146684,494],{"class":208},[67,146686,120265],{"class":84},[19,146688,146689],{},"常见第三方库：",[998,146691,146692,146701],{},[1001,146693,146694],{},[1004,146695,146696,146699],{},[1007,146697,146698],{},"库",[1007,146700,103233],{},[1044,146702,146703,146711,146718,146726,146734,146742,146750],{},[1004,146704,146705,146708],{},[1049,146706,146707],{},"requests",[1049,146709,146710],{},"网络请求",[1004,146712,146713,146715],{},[1049,146714,101163],{},[1049,146716,146717],{},"数值计算",[1004,146719,146720,146723],{},[1049,146721,146722],{},"pandas",[1049,146724,146725],{},"表格数据处理",[1004,146727,146728,146731],{},[1049,146729,146730],{},"matplotlib",[1049,146732,146733],{},"绘图",[1004,146735,146736,146739],{},[1049,146737,146738],{},"pyecharts",[1049,146740,146741],{},"ECharts 图表",[1004,146743,146744,146747],{},[1049,146745,146746],{},"flask",[1049,146748,146749],{},"Web 后端",[1004,146751,146752,146755],{},[1049,146753,146754],{},"pytest",[1049,146756,146757],{},"自动化测试",[803,146759,146761],{"id":146760},"_15-虚拟环境","1.5 虚拟环境",[19,146763,146764,146765,146768],{},"虚拟环境用于隔离不同项目的依赖。一个项目需要 ",[64,146766,146767],{},"pyecharts==2.x","，另一个项目需要别的版本，直接全局安装容易冲突，所以建议每个项目创建自己的虚拟环境。",[19,146770,146771],{},"创建虚拟环境：",[57,146773,146775],{"className":59,"code":146774,"language":61,"meta":62,"style":62},"python -m venv .venv\n",[64,146776,146777],{"__ignoreMap":62},[67,146778,146779,146781,146783,146785],{"class":69,"line":70},[67,146780,30917],{"class":112},[67,146782,101419],{"class":208},[67,146784,101422],{"class":84},[67,146786,101425],{"class":84},[19,146788,146789],{},"Windows 激活：",[57,146791,146793],{"className":59,"code":146792,"language":61,"meta":62,"style":62},".venv\\Scripts\\activate\n",[64,146794,146795],{"__ignoreMap":62},[67,146796,146797],{"class":69,"line":70},[67,146798,146792],{"class":112},[19,146800,146801],{},"macOS\u002FLinux 激活：",[57,146803,146805],{"className":59,"code":146804,"language":61,"meta":62,"style":62},"source .venv\u002Fbin\u002Factivate\n",[64,146806,146807],{"__ignoreMap":62},[67,146808,146809,146811],{"class":69,"line":70},[67,146810,101430],{"class":208},[67,146812,101433],{"class":84},[19,146814,146815],{},"退出虚拟环境：",[57,146817,146819],{"className":59,"code":146818,"language":61,"meta":62,"style":62},"deactivate\n",[64,146820,146821],{"__ignoreMap":62},[67,146822,146823],{"class":69,"line":70},[67,146824,146818],{"class":112},[19,146826,146827],{},"保存依赖：",[57,146829,146831],{"className":59,"code":146830,"language":61,"meta":62,"style":62},"pip freeze > requirements.txt\n",[64,146832,146833],{"__ignoreMap":62},[67,146834,146835,146837,146840,146842],{"class":69,"line":70},[67,146836,24546],{"class":112},[67,146838,146839],{"class":84}," freeze",[67,146841,282],{"class":73},[67,146843,146844],{"class":84}," requirements.txt\n",[19,146846,146847],{},"安装依赖：",[57,146849,146851],{"className":59,"code":146850,"language":61,"meta":62,"style":62},"pip install -r requirements.txt\n",[64,146852,146853],{"__ignoreMap":62},[67,146854,146855,146857,146859,146861],{"class":69,"line":70},[67,146856,24546],{"class":112},[67,146858,312],{"class":84},[67,146860,120176],{"class":208},[67,146862,146844],{"class":84},[803,146864,146866],{"id":146865},"_16-开发工具","1.6 开发工具",[14,146868,146870],{"id":146869},"_161-pycharm","1.6.1 PyCharm",[19,146872,146873],{},"PyCharm 适合新手，因为运行按钮、项目解释器、文件结构都比较直观。",[19,146875,122599],{},[815,146877,146878,146881,146884,146890,146893],{},[818,146879,146880],{},"New Project：创建项目。",[818,146882,146883],{},"Add Interpreter：选择 Python 解释器或虚拟环境。",[818,146885,146886,146887,126520],{},"New Python File：创建 ",[64,146888,146889],{},".py",[818,146891,146892],{},"Run：运行当前文件。",[818,146894,146895],{},"Debug：断点调试。",[14,146897,146899],{"id":146898},"_162-vs-code","1.6.2 VS Code",[19,146901,146902],{},"VS Code 轻量，适合后续多语言开发。",[19,146904,146905],{},"建议安装插件：",[815,146907,146908,146911,146914],{},[818,146909,146910],{},"Python。",[818,146912,146913],{},"Pylance。",[818,146915,146916],{},"Jupyter。",[19,146918,146919],{},"选择解释器：",[57,146921,146924],{"className":146922,"code":146923,"language":5906,"meta":62},[5904],"Ctrl + Shift + P -> Python: Select Interpreter\n",[64,146925,146923],{"__ignoreMap":62},[803,146927,146929],{"id":146928},"_17-第一个python程序","1.7 第一个Python程序",[19,146931,146932,146933,25331],{},"创建文件 ",[64,146934,146935],{},"hello.py",[57,146937,146939],{"className":30915,"code":146938,"language":30917,"meta":62,"style":62},"print(\"Hello World\")\nprint(\"你好，Python\")\n",[64,146940,146941,146952],{"__ignoreMap":62},[67,146942,146943,146945,146947,146950],{"class":69,"line":70},[67,146944,30952],{"class":208},[67,146946,864],{"class":77},[67,146948,146949],{"class":84},"\"Hello World\"",[67,146951,870],{"class":77},[67,146953,146954,146956,146958,146961],{"class":69,"line":143},[67,146955,30952],{"class":208},[67,146957,864],{"class":77},[67,146959,146960],{"class":84},"\"你好，Python\"",[67,146962,870],{"class":77},[19,146964,146965],{},"在终端运行：",[57,146967,146969],{"className":59,"code":146968,"language":61,"meta":62,"style":62},"python hello.py\n",[64,146970,146971],{"__ignoreMap":62},[67,146972,146973,146975],{"class":69,"line":70},[67,146974,30917],{"class":112},[67,146976,146977],{"class":84}," hello.py\n",[19,146979,146980],{},"或：",[57,146982,146984],{"className":59,"code":146983,"language":61,"meta":62,"style":62},"python3 hello.py\n",[64,146985,146986],{"__ignoreMap":62},[67,146987,146988,146990],{"class":69,"line":70},[67,146989,101416],{"class":112},[67,146991,146977],{"class":84},[19,146993,146994],{},"输出：",[57,146996,146999],{"className":146997,"code":146998,"language":5906,"meta":62},[5904],"Hello World\n你好，Python\n",[64,147000,146998],{"__ignoreMap":62},[803,147002,147004],{"id":147003},"_18-print函数","1.8 print函数",[19,147006,147007,147010],{},[64,147008,147009],{},"print()"," 用来输出内容。",[57,147012,147014],{"className":30915,"code":147013,"language":30917,"meta":62,"style":62},"print(\"hello\")\nprint(100)\nprint(3.14)\nprint(\"年龄:\", 18)\n",[64,147015,147016,147026,147036,147046],{"__ignoreMap":62},[67,147017,147018,147020,147022,147024],{"class":69,"line":70},[67,147019,30952],{"class":208},[67,147021,864],{"class":77},[67,147023,6563],{"class":84},[67,147025,870],{"class":77},[67,147027,147028,147030,147032,147034],{"class":69,"line":143},[67,147029,30952],{"class":208},[67,147031,864],{"class":77},[67,147033,1169],{"class":208},[67,147035,870],{"class":77},[67,147037,147038,147040,147042,147044],{"class":69,"line":149},[67,147039,30952],{"class":208},[67,147041,864],{"class":77},[67,147043,912],{"class":208},[67,147045,870],{"class":77},[67,147047,147048,147050,147052,147055,147057,147059],{"class":69,"line":155},[67,147049,30952],{"class":208},[67,147051,864],{"class":77},[67,147053,147054],{"class":84},"\"年龄:\"",[67,147056,13153],{"class":77},[67,147058,1506],{"class":208},[67,147060,870],{"class":77},[19,147062,147063],{},"多个内容用逗号隔开，默认中间加空格：",[57,147065,147067],{"className":30915,"code":147066,"language":30917,"meta":62,"style":62},"name = \"张三\"\nage = 18\nprint(\"姓名:\", name, \"年龄:\", age)\n",[64,147068,147069,147079,147089],{"__ignoreMap":62},[67,147070,147071,147074,147076],{"class":69,"line":70},[67,147072,147073],{"class":77},"name ",[67,147075,909],{"class":73},[67,147077,147078],{"class":84}," \"张三\"\n",[67,147080,147081,147084,147086],{"class":69,"line":143},[67,147082,147083],{"class":77},"age ",[67,147085,909],{"class":73},[67,147087,147088],{"class":208}," 18\n",[67,147090,147091,147093,147095,147098,147101,147103],{"class":69,"line":149},[67,147092,30952],{"class":208},[67,147094,864],{"class":77},[67,147096,147097],{"class":84},"\"姓名:\"",[67,147099,147100],{"class":77},", name, ",[67,147102,147054],{"class":84},[67,147104,147105],{"class":77},", age)\n",[19,147107,147108],{},"修改分隔符：",[57,147110,147112],{"className":30915,"code":147111,"language":30917,"meta":62,"style":62},"print(\"2024\", \"10\", \"10\", sep=\"-\")\n",[64,147113,147114],{"__ignoreMap":62},[67,147115,147116,147118,147120,147123,147125,147127,147129,147131,147133,147136,147138,147140],{"class":69,"line":70},[67,147117,30952],{"class":208},[67,147119,864],{"class":77},[67,147121,147122],{"class":84},"\"2024\"",[67,147124,13153],{"class":77},[67,147126,54853],{"class":84},[67,147128,13153],{"class":77},[67,147130,54853],{"class":84},[67,147132,13153],{"class":77},[67,147134,147135],{"class":5935},"sep",[67,147137,909],{"class":73},[67,147139,33020],{"class":84},[67,147141,870],{"class":77},[19,147143,147144],{},"修改结尾符：",[57,147146,147148],{"className":30915,"code":147147,"language":30917,"meta":62,"style":62},"print(\"hello\", end=\" \")\nprint(\"python\")\n",[64,147149,147150,147168],{"__ignoreMap":62},[67,147151,147152,147154,147156,147158,147160,147162,147164,147166],{"class":69,"line":70},[67,147153,30952],{"class":208},[67,147155,864],{"class":77},[67,147157,6563],{"class":84},[67,147159,13153],{"class":77},[67,147161,46338],{"class":5935},[67,147163,909],{"class":73},[67,147165,5078],{"class":84},[67,147167,870],{"class":77},[67,147169,147170,147172,147174,147177],{"class":69,"line":143},[67,147171,30952],{"class":208},[67,147173,864],{"class":77},[67,147175,147176],{"class":84},"\"python\"",[67,147178,870],{"class":77},[803,147180,147182],{"id":147181},"_19-脚本运行和交互运行","1.9 脚本运行和交互运行",[19,147184,147185],{},"交互运行适合临时验证：",[57,147187,147189],{"className":30915,"code":147188,"language":30917,"meta":62,"style":62},">>> 10 * 3\n30\n",[64,147190,147191,147201],{"__ignoreMap":62},[67,147192,147193,147195,147197,147199],{"class":69,"line":70},[67,147194,146390],{"class":73},[67,147196,2760],{"class":208},[67,147198,7237],{"class":73},[67,147200,120573],{"class":208},[67,147202,147203],{"class":69,"line":143},[67,147204,147205],{"class":208},"30\n",[19,147207,147208],{},"脚本运行适合保存程序：",[57,147210,147212],{"className":30915,"code":147211,"language":30917,"meta":62,"style":62},"price = 8\ncount = 5\nprint(price * count)\n",[64,147213,147214,147224,147233],{"__ignoreMap":62},[67,147215,147216,147219,147221],{"class":69,"line":70},[67,147217,147218],{"class":77},"price ",[67,147220,909],{"class":73},[67,147222,147223],{"class":208}," 8\n",[67,147225,147226,147229,147231],{"class":69,"line":143},[67,147227,147228],{"class":77},"count ",[67,147230,909],{"class":73},[67,147232,54964],{"class":208},[67,147234,147235,147237,147240,147242],{"class":69,"line":149},[67,147236,30952],{"class":208},[67,147238,147239],{"class":77},"(price ",[67,147241,1312],{"class":73},[67,147243,147244],{"class":77}," count)\n",[19,147246,147247],{},"实际学习中推荐：",[815,147249,147250,147253,147258],{},[818,147251,147252],{},"临时试一个语法，用交互模式。",[818,147254,147255,147256,126520],{},"写完整练习，用 ",[64,147257,146889],{},[818,147259,147260],{},"写项目，用独立目录和虚拟环境。",[803,147262,147264],{"id":147263},"_110-常见错误","1.10 常见错误",[14,147266,147268],{"id":147267},"_1101-命令找不到","1.10.1 命令找不到",[57,147270,147273],{"className":147271,"code":147272,"language":5906,"meta":62},[5904],"python: command not found\n",[64,147274,147272],{"__ignoreMap":62},[19,147276,147277],{},"原因：",[815,147279,147280,147283,147286],{},[818,147281,147282],{},"没安装 Python。",[818,147284,147285],{},"PATH 没配置。",[818,147287,147288,147289,28922],{},"Linux\u002FmacOS 应该使用 ",[64,147290,101416],{},[14,147292,147294],{"id":147293},"_1102-文件名冲突","1.10.2 文件名冲突",[19,147296,147297],{},"不要把文件命名为：",[57,147299,147302],{"className":147300,"code":147301,"language":5906,"meta":62},[5904],"random.py\njson.py\ntime.py\nrequests.py\n",[64,147303,147301],{"__ignoreMap":62},[19,147305,147306],{},"这些名字可能和标准库或第三方库冲突，导致导入模块异常。",[14,147308,147310],{"id":147309},"_1103-中文乱码","1.10.3 中文乱码",[19,147312,147313],{},"Python 3 默认源文件编码是 UTF-8。仍然建议编辑器保存为 UTF-8。",[19,147315,147316],{},"如果读写文件出现乱码，要明确指定编码：",[57,147318,147320],{"className":30915,"code":147319,"language":30917,"meta":62,"style":62},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as f:\n    content = f.read()\n",[64,147321,147322,147356],{"__ignoreMap":62},[67,147323,147324,147326,147329,147331,147334,147336,147339,147341,147344,147346,147349,147351,147353],{"class":69,"line":70},[67,147325,108370],{"class":73},[67,147327,147328],{"class":208}," open",[67,147330,864],{"class":77},[67,147332,147333],{"class":84},"\"data.txt\"",[67,147335,13153],{"class":77},[67,147337,147338],{"class":84},"\"r\"",[67,147340,13153],{"class":77},[67,147342,147343],{"class":5935},"encoding",[67,147345,909],{"class":73},[67,147347,147348],{"class":84},"\"utf-8\"",[67,147350,14432],{"class":77},[67,147352,31920],{"class":73},[67,147354,147355],{"class":77}," f:\n",[67,147357,147358,147361,147363],{"class":69,"line":143},[67,147359,147360],{"class":77},"    content ",[67,147362,909],{"class":73},[67,147364,147365],{"class":77}," f.read()\n",[803,147367,147369],{"id":147368},"_111-本章练习","1.11 本章练习",[815,147371,147372,147375,147381],{},[818,147373,147374],{},"安装 Python，并在终端输出版本号。",[818,147376,147377,147378,147380],{},"新建 ",[64,147379,146935],{},"，输出自己的姓名、年龄、学习目标。",[818,147382,104903,147383,147385],{},[64,147384,147009],{}," 输出下面格式：",[57,147387,147390],{"className":147388,"code":147389,"language":5906,"meta":62},[5904],"姓名: 小明\n年龄: 18\n目标: 学会Python\n",[64,147391,147389],{"__ignoreMap":62},[815,147393,147394],{"start":155},[818,147395,104903,147396,147398],{},[64,147397,147135],{}," 输出日期：",[57,147400,147403],{"className":147401,"code":147402,"language":5906,"meta":62},[5904],"2024-10-10\n",[64,147404,147402],{"__ignoreMap":62},[815,147406,147407],{"start":161},[818,147408,104903,147409,147411,147412,147414],{},[64,147410,46338],{}," 让两次 ",[64,147413,147009],{}," 输出在同一行。",[779,147416,147417],{},"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":62,"searchDepth":143,"depth":143,"links":147419},[147420,147421,147422,147427,147428,147429,147433,147434,147435,147436,147441],{"id":146302,"depth":143,"text":146303},{"id":146346,"depth":143,"text":146347},{"id":146447,"depth":143,"text":146448,"children":147423},[147424,147425,147426],{"id":146451,"depth":149,"text":146452},{"id":146506,"depth":149,"text":146507},{"id":146542,"depth":149,"text":146543},{"id":146615,"depth":143,"text":146616},{"id":146760,"depth":143,"text":146761},{"id":146865,"depth":143,"text":146866,"children":147430},[147431,147432],{"id":146869,"depth":149,"text":146870},{"id":146898,"depth":149,"text":146899},{"id":146928,"depth":143,"text":146929},{"id":147003,"depth":143,"text":147004},{"id":147181,"depth":143,"text":147182},{"id":147263,"depth":143,"text":147264,"children":147437},[147438,147439,147440],{"id":147267,"depth":149,"text":147268},{"id":147293,"depth":149,"text":147294},{"id":147309,"depth":149,"text":147310},{"id":147368,"depth":143,"text":147369},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch1-python",{"title":146294,"description":24093},"wiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序","48XQBvj-lv6PiPUmONIPH9uzA2A9QouK3fZD6RTbf9U",{"id":147448,"title":147449,"body":147450,"description":24093,"extension":787,"meta":149854,"navigation":176,"path":149855,"seo":149856,"stem":149857,"__hash__":149858},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图.md","10. JSON与pyecharts折线图",{"type":7,"value":147451,"toc":149839},[147452,147455,147459,147462,147465,147482,147485,147527,147530,147534,147537,147540,147577,147580,147614,147617,147709,147713,147727,147730,147757,147760,147764,147867,147874,147877,147894,147898,147905,148094,148097,148170,148174,148177,148261,148264,148296,148300,148504,148507,148511,148517,148619,148622,148878,148882,148885,148888,148902,148904,149090,149094,149456,149462,149466,149469,149593,149596,149775,149778,149782,149815,149819,149836],[10,147453,147449],{"id":147454},"_10-json与pyecharts折线图",[803,147456,147458],{"id":147457},"_101-数据可视化","10.1 数据可视化",[19,147460,147461],{},"数据可视化就是把数据转换成图表，让趋势、对比和异常更容易观察。",[19,147463,147464],{},"常见图表：",[815,147466,147467,147470,147473,147476,147479],{},[818,147468,147469],{},"折线图：看趋势。",[818,147471,147472],{},"柱状图：看分类对比。",[818,147474,147475],{},"饼图：看占比。",[818,147477,147478],{},"地图：看地域分布。",[818,147480,147481],{},"散点图：看两个变量之间的关系。",[19,147483,147484],{},"Python 可视化常用库：",[998,147486,147487,147495],{},[1001,147488,147489],{},[1004,147490,147491,147493],{},[1007,147492,146698],{},[1007,147494,24457],{},[1044,147496,147497,147504,147512,147519],{},[1004,147498,147499,147501],{},[1049,147500,146730],{},[1049,147502,147503],{},"基础、经典、可定制",[1004,147505,147506,147509],{},[1049,147507,147508],{},"seaborn",[1049,147510,147511],{},"统计图表更美观",[1004,147513,147514,147516],{},[1049,147515,146738],{},[1049,147517,147518],{},"生成交互式网页图表",[1004,147520,147521,147524],{},[1049,147522,147523],{},"plotly",[1049,147525,147526],{},"交互图表能力强",[19,147528,147529],{},"黑马入门课程常用 pyecharts 做可视化案例，因为它能快速生成漂亮的 HTML 图表。",[803,147531,147533],{"id":147532},"_102-json回顾","10.2 JSON回顾",[19,147535,147536],{},"JSON 是一种文本格式，常用于接口数据、配置文件和可视化数据。",[19,147538,147539],{},"Python 字典：",[57,147541,147543],{"className":30915,"code":147542,"language":30917,"meta":62,"style":62},"data = {\n    \"name\": \"北京\",\n    \"value\": 100\n}\n",[64,147544,147545,147553,147564,147573],{"__ignoreMap":62},[67,147546,147547,147549,147551],{"class":69,"line":70},[67,147548,102195],{"class":77},[67,147550,909],{"class":73},[67,147552,16289],{"class":77},[67,147554,147555,147558,147560,147562],{"class":69,"line":143},[67,147556,147557],{"class":84},"    \"name\"",[67,147559,51974],{"class":77},[67,147561,69806],{"class":84},[67,147563,32003],{"class":77},[67,147565,147566,147569,147571],{"class":69,"line":149},[67,147567,147568],{"class":84},"    \"value\"",[67,147570,51974],{"class":77},[67,147572,97995],{"class":208},[67,147574,147575],{"class":69,"line":155},[67,147576,2288],{"class":77},[19,147578,147579],{},"JSON 字符串：",[57,147581,147584],{"className":147582,"code":147583,"language":146329,"meta":62,"style":62},"language-json shiki shiki-themes github-light github-dark","{\n  \"name\": \"北京\",\n  \"value\": 100\n}\n",[64,147585,147586,147590,147601,147610],{"__ignoreMap":62},[67,147587,147588],{"class":69,"line":70},[67,147589,2269],{"class":77},[67,147591,147592,147595,147597,147599],{"class":69,"line":143},[67,147593,147594],{"class":208},"  \"name\"",[67,147596,51974],{"class":77},[67,147598,69806],{"class":84},[67,147600,32003],{"class":77},[67,147602,147603,147606,147608],{"class":69,"line":149},[67,147604,147605],{"class":208},"  \"value\"",[67,147607,51974],{"class":77},[67,147609,97995],{"class":208},[67,147611,147612],{"class":69,"line":155},[67,147613,2288],{"class":77},[19,147615,147616],{},"Python 与 JSON 的转换：",[57,147618,147620],{"className":30915,"code":147619,"language":30917,"meta":62,"style":62},"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",[64,147621,147622,147629,147633,147658,147662,147681,147688,147692,147702],{"__ignoreMap":62},[67,147623,147624,147626],{"class":69,"line":70},[67,147625,30929],{"class":73},[67,147627,147628],{"class":77}," json\n",[67,147630,147631],{"class":69,"line":143},[67,147632,177],{"emptyLinePlaceholder":176},[67,147634,147635,147637,147639,147641,147643,147645,147647,147649,147652,147654,147656],{"class":69,"line":149},[67,147636,102195],{"class":77},[67,147638,909],{"class":73},[67,147640,5167],{"class":77},[67,147642,63216],{"class":84},[67,147644,51974],{"class":77},[67,147646,69806],{"class":84},[67,147648,13153],{"class":77},[67,147650,147651],{"class":84},"\"value\"",[67,147653,51974],{"class":77},[67,147655,1169],{"class":208},[67,147657,2288],{"class":77},[67,147659,147660],{"class":69,"line":155},[67,147661,177],{"emptyLinePlaceholder":176},[67,147663,147664,147667,147669,147672,147675,147677,147679],{"class":69,"line":161},[67,147665,147666],{"class":77},"json_text ",[67,147668,909],{"class":73},[67,147670,147671],{"class":77}," json.dumps(data, ",[67,147673,147674],{"class":5935},"ensure_ascii",[67,147676,909],{"class":73},[67,147678,34524],{"class":208},[67,147680,870],{"class":77},[67,147682,147683,147685],{"class":69,"line":167},[67,147684,30952],{"class":208},[67,147686,147687],{"class":77},"(json_text)\n",[67,147689,147690],{"class":69,"line":173},[67,147691,177],{"emptyLinePlaceholder":176},[67,147693,147694,147697,147699],{"class":69,"line":180},[67,147695,147696],{"class":77},"new_data ",[67,147698,909],{"class":73},[67,147700,147701],{"class":77}," json.loads(json_text)\n",[67,147703,147704,147706],{"class":69,"line":186},[67,147705,30952],{"class":208},[67,147707,147708],{"class":77},"(new_data)\n",[803,147710,147712],{"id":147711},"_103-安装pyecharts","10.3 安装pyecharts",[57,147714,147716],{"className":59,"code":147715,"language":61,"meta":62,"style":62},"pip install pyecharts\n",[64,147717,147718],{"__ignoreMap":62},[67,147719,147720,147722,147724],{"class":69,"line":70},[67,147721,24546],{"class":112},[67,147723,312],{"class":84},[67,147725,147726],{"class":84}," pyecharts\n",[19,147728,147729],{},"验证：",[57,147731,147733],{"className":30915,"code":147732,"language":30917,"meta":62,"style":62},"import pyecharts\n\nprint(pyecharts.__version__)\n",[64,147734,147735,147741,147745],{"__ignoreMap":62},[67,147736,147737,147739],{"class":69,"line":70},[67,147738,30929],{"class":73},[67,147740,147726],{"class":77},[67,147742,147743],{"class":69,"line":143},[67,147744,177],{"emptyLinePlaceholder":176},[67,147746,147747,147749,147752,147755],{"class":69,"line":149},[67,147748,30952],{"class":208},[67,147750,147751],{"class":77},"(pyecharts.",[67,147753,147754],{"class":208},"__version__",[67,147756,870],{"class":77},[19,147758,147759],{},"如果使用虚拟环境，要先激活环境再安装。",[803,147761,147763],{"id":147762},"_104-第一个折线图","10.4 第一个折线图",[57,147765,147767],{"className":30915,"code":147766,"language":30917,"meta":62,"style":62},"from pyecharts.charts import Line\n\nline = Line()\nline.add_xaxis([\"周一\", \"周二\", \"周三\", \"周四\", \"周五\"])\nline.add_yaxis(\"销售额\", [100, 120, 90, 150, 180])\nline.render(\"line.html\")\n",[64,147768,147769,147781,147785,147795,147825,147857],{"__ignoreMap":62},[67,147770,147771,147773,147776,147778],{"class":69,"line":70},[67,147772,31274],{"class":73},[67,147774,147775],{"class":77}," pyecharts.charts ",[67,147777,30929],{"class":73},[67,147779,147780],{"class":77}," Line\n",[67,147782,147783],{"class":69,"line":143},[67,147784,177],{"emptyLinePlaceholder":176},[67,147786,147787,147790,147792],{"class":69,"line":149},[67,147788,147789],{"class":77},"line ",[67,147791,909],{"class":73},[67,147793,147794],{"class":77}," Line()\n",[67,147796,147797,147800,147803,147805,147808,147810,147813,147815,147818,147820,147823],{"class":69,"line":155},[67,147798,147799],{"class":77},"line.add_xaxis([",[67,147801,147802],{"class":84},"\"周一\"",[67,147804,13153],{"class":77},[67,147806,147807],{"class":84},"\"周二\"",[67,147809,13153],{"class":77},[67,147811,147812],{"class":84},"\"周三\"",[67,147814,13153],{"class":77},[67,147816,147817],{"class":84},"\"周四\"",[67,147819,13153],{"class":77},[67,147821,147822],{"class":84},"\"周五\"",[67,147824,5376],{"class":77},[67,147826,147827,147830,147833,147835,147837,147839,147841,147843,147845,147847,147850,147852,147855],{"class":69,"line":161},[67,147828,147829],{"class":77},"line.add_yaxis(",[67,147831,147832],{"class":84},"\"销售额\"",[67,147834,78055],{"class":77},[67,147836,1169],{"class":208},[67,147838,13153],{"class":77},[67,147840,1673],{"class":208},[67,147842,13153],{"class":77},[67,147844,1718],{"class":208},[67,147846,13153],{"class":77},[67,147848,147849],{"class":208},"150",[67,147851,13153],{"class":77},[67,147853,147854],{"class":208},"180",[67,147856,5376],{"class":77},[67,147858,147859,147862,147865],{"class":69,"line":167},[67,147860,147861],{"class":77},"line.render(",[67,147863,147864],{"class":84},"\"line.html\"",[67,147866,870],{"class":77},[19,147868,147869,147870,147873],{},"运行后会生成 ",[64,147871,147872],{},"line.html","，用浏览器打开即可看到图表。",[19,147875,147876],{},"核心步骤：",[815,147878,147879,147882,147885,147888,147891],{},[818,147880,147881],{},"导入图表类。",[818,147883,147884],{},"创建图表对象。",[818,147886,147887],{},"添加 x 轴数据。",[818,147889,147890],{},"添加 y 轴数据。",[818,147892,147893],{},"渲染为 HTML。",[803,147895,147897],{"id":147896},"_105-全局配置","10.5 全局配置",[19,147899,147900,147901,147904],{},"常用配置在 ",[64,147902,147903],{},"pyecharts.options"," 中。",[57,147906,147908],{"className":30915,"code":147907,"language":30917,"meta":62,"style":62},"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",[64,147909,147910,147927,147937,147941,147949,147973,148001,148006,148025,148044,148062,148082,148086],{"__ignoreMap":62},[67,147911,147912,147914,147917,147919,147922,147924],{"class":69,"line":70},[67,147913,31274],{"class":73},[67,147915,147916],{"class":77}," pyecharts ",[67,147918,30929],{"class":73},[67,147920,147921],{"class":77}," options ",[67,147923,31920],{"class":73},[67,147925,147926],{"class":77}," opts\n",[67,147928,147929,147931,147933,147935],{"class":69,"line":143},[67,147930,31274],{"class":73},[67,147932,147775],{"class":77},[67,147934,30929],{"class":73},[67,147936,147780],{"class":77},[67,147938,147939],{"class":69,"line":149},[67,147940,177],{"emptyLinePlaceholder":176},[67,147942,147943,147945,147947],{"class":69,"line":155},[67,147944,147789],{"class":77},[67,147946,909],{"class":73},[67,147948,147794],{"class":77},[67,147950,147951,147953,147955,147957,147959,147961,147963,147965,147967,147969,147971],{"class":69,"line":161},[67,147952,147799],{"class":77},[67,147954,147802],{"class":84},[67,147956,13153],{"class":77},[67,147958,147807],{"class":84},[67,147960,13153],{"class":77},[67,147962,147812],{"class":84},[67,147964,13153],{"class":77},[67,147966,147817],{"class":84},[67,147968,13153],{"class":77},[67,147970,147822],{"class":84},[67,147972,5376],{"class":77},[67,147974,147975,147977,147979,147981,147983,147985,147987,147989,147991,147993,147995,147997,147999],{"class":69,"line":167},[67,147976,147829],{"class":77},[67,147978,147832],{"class":84},[67,147980,78055],{"class":77},[67,147982,1169],{"class":208},[67,147984,13153],{"class":77},[67,147986,1673],{"class":208},[67,147988,13153],{"class":77},[67,147990,1718],{"class":208},[67,147992,13153],{"class":77},[67,147994,147849],{"class":208},[67,147996,13153],{"class":77},[67,147998,147854],{"class":208},[67,148000,5376],{"class":77},[67,148002,148003],{"class":69,"line":173},[67,148004,148005],{"class":77},"line.set_global_opts(\n",[67,148007,148008,148011,148013,148016,148018,148020,148023],{"class":69,"line":180},[67,148009,148010],{"class":5935},"    title_opts",[67,148012,909],{"class":73},[67,148014,148015],{"class":77},"opts.TitleOpts(",[67,148017,51944],{"class":5935},[67,148019,909],{"class":73},[67,148021,148022],{"class":84},"\"一周销售额\"",[67,148024,38584],{"class":77},[67,148026,148027,148030,148032,148035,148037,148039,148042],{"class":69,"line":186},[67,148028,148029],{"class":5935},"    xaxis_opts",[67,148031,909],{"class":73},[67,148033,148034],{"class":77},"opts.AxisOpts(",[67,148036,80347],{"class":5935},[67,148038,909],{"class":73},[67,148040,148041],{"class":84},"\"日期\"",[67,148043,38584],{"class":77},[67,148045,148046,148049,148051,148053,148055,148057,148060],{"class":69,"line":444},[67,148047,148048],{"class":5935},"    yaxis_opts",[67,148050,909],{"class":73},[67,148052,148034],{"class":77},[67,148054,80347],{"class":5935},[67,148056,909],{"class":73},[67,148058,148059],{"class":84},"\"金额\"",[67,148061,38584],{"class":77},[67,148063,148064,148067,148069,148072,148075,148077,148080],{"class":69,"line":2335},[67,148065,148066],{"class":5935},"    tooltip_opts",[67,148068,909],{"class":73},[67,148070,148071],{"class":77},"opts.TooltipOpts(",[67,148073,148074],{"class":5935},"trigger",[67,148076,909],{"class":73},[67,148078,148079],{"class":84},"\"axis\"",[67,148081,38584],{"class":77},[67,148083,148084],{"class":69,"line":2340},[67,148085,870],{"class":77},[67,148087,148088,148090,148092],{"class":69,"line":2346},[67,148089,147861],{"class":77},[67,148091,147864],{"class":84},[67,148093,870],{"class":77},[19,148095,148096],{},"常见全局配置：",[998,148098,148099,148108],{},[1001,148100,148101],{},[1004,148102,148103,148106],{},[1007,148104,148105],{},"配置",[1007,148107,103233],{},[1044,148109,148110,148120,148130,148140,148150,148160],{},[1004,148111,148112,148117],{},[1049,148113,148114],{},[64,148115,148116],{},"TitleOpts",[1049,148118,148119],{},"标题",[1004,148121,148122,148127],{},[1049,148123,148124],{},[64,148125,148126],{},"LegendOpts",[1049,148128,148129],{},"图例",[1004,148131,148132,148137],{},[1049,148133,148134],{},[64,148135,148136],{},"TooltipOpts",[1049,148138,148139],{},"提示框",[1004,148141,148142,148147],{},[1049,148143,148144],{},[64,148145,148146],{},"AxisOpts",[1049,148148,148149],{},"坐标轴",[1004,148151,148152,148157],{},[1049,148153,148154],{},[64,148155,148156],{},"VisualMapOpts",[1049,148158,148159],{},"视觉映射",[1004,148161,148162,148167],{},[1049,148163,148164],{},[64,148165,148166],{},"DataZoomOpts",[1049,148168,148169],{},"区域缩放",[803,148171,148173],{"id":148172},"_106-系列配置","10.6 系列配置",[19,148175,148176],{},"系列配置作用于某一组数据。",[57,148178,148180],{"className":30915,"code":148179,"language":30917,"meta":62,"style":62},"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",[64,148181,148182,148187,148198,148227,148238,148257],{"__ignoreMap":62},[67,148183,148184],{"class":69,"line":70},[67,148185,148186],{"class":77},"line.add_yaxis(\n",[67,148188,148189,148192,148194,148196],{"class":69,"line":143},[67,148190,148191],{"class":5935},"    series_name",[67,148193,909],{"class":73},[67,148195,147832],{"class":84},[67,148197,32003],{"class":77},[67,148199,148200,148203,148205,148207,148209,148211,148213,148215,148217,148219,148221,148223,148225],{"class":69,"line":149},[67,148201,148202],{"class":5935},"    y_axis",[67,148204,909],{"class":73},[67,148206,1746],{"class":77},[67,148208,1169],{"class":208},[67,148210,13153],{"class":77},[67,148212,1673],{"class":208},[67,148214,13153],{"class":77},[67,148216,1718],{"class":208},[67,148218,13153],{"class":77},[67,148220,147849],{"class":208},[67,148222,13153],{"class":77},[67,148224,147854],{"class":208},[67,148226,88373],{"class":77},[67,148228,148229,148232,148234,148236],{"class":69,"line":155},[67,148230,148231],{"class":5935},"    is_smooth",[67,148233,909],{"class":73},[67,148235,32013],{"class":208},[67,148237,32003],{"class":77},[67,148239,148240,148243,148245,148248,148251,148253,148255],{"class":69,"line":161},[67,148241,148242],{"class":5935},"    label_opts",[67,148244,909],{"class":73},[67,148246,148247],{"class":77},"opts.LabelOpts(",[67,148249,148250],{"class":5935},"is_show",[67,148252,909],{"class":73},[67,148254,32013],{"class":208},[67,148256,38584],{"class":77},[67,148258,148259],{"class":69,"line":167},[67,148260,870],{"class":77},[19,148262,148263],{},"常用参数：",[815,148265,148266,148272,148278,148284,148290],{},[818,148267,148268,148271],{},[64,148269,148270],{},"series_name","：系列名称。",[818,148273,148274,148277],{},[64,148275,148276],{},"y_axis","：y 轴数据。",[818,148279,148280,148283],{},[64,148281,148282],{},"is_smooth","：是否平滑曲线。",[818,148285,148286,148289],{},[64,148287,148288],{},"label_opts","：标签配置。",[818,148291,148292,148295],{},[64,148293,148294],{},"symbol_size","：标记点大小。",[803,148297,148299],{"id":148298},"_107-多条折线","10.7 多条折线",[57,148301,148303],{"className":30915,"code":148302,"language":30917,"meta":62,"style":62},"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",[64,148304,148305,148319,148329,148333,148362,148366,148374,148379,148417,148454,148458,148475,148491,148495],{"__ignoreMap":62},[67,148306,148307,148309,148311,148313,148315,148317],{"class":69,"line":70},[67,148308,31274],{"class":73},[67,148310,147916],{"class":77},[67,148312,30929],{"class":73},[67,148314,147921],{"class":77},[67,148316,31920],{"class":73},[67,148318,147926],{"class":77},[67,148320,148321,148323,148325,148327],{"class":69,"line":143},[67,148322,31274],{"class":73},[67,148324,147775],{"class":77},[67,148326,30929],{"class":73},[67,148328,147780],{"class":77},[67,148330,148331],{"class":69,"line":149},[67,148332,177],{"emptyLinePlaceholder":176},[67,148334,148335,148338,148340,148342,148344,148346,148348,148350,148352,148354,148356,148358,148360],{"class":69,"line":155},[67,148336,148337],{"class":77},"dates ",[67,148339,909],{"class":73},[67,148341,52763],{"class":77},[67,148343,147802],{"class":84},[67,148345,13153],{"class":77},[67,148347,147807],{"class":84},[67,148349,13153],{"class":77},[67,148351,147812],{"class":84},[67,148353,13153],{"class":77},[67,148355,147817],{"class":84},[67,148357,13153],{"class":77},[67,148359,147822],{"class":84},[67,148361,33783],{"class":77},[67,148363,148364],{"class":69,"line":161},[67,148365,177],{"emptyLinePlaceholder":176},[67,148367,148368,148370,148372],{"class":69,"line":167},[67,148369,147789],{"class":77},[67,148371,909],{"class":73},[67,148373,147794],{"class":77},[67,148375,148376],{"class":69,"line":173},[67,148377,148378],{"class":77},"line.add_xaxis(dates)\n",[67,148380,148381,148383,148386,148388,148390,148392,148395,148397,148399,148401,148403,148405,148407,148409,148411,148413,148415],{"class":69,"line":180},[67,148382,147829],{"class":77},[67,148384,148385],{"class":84},"\"线上销售\"",[67,148387,78055],{"class":77},[67,148389,1169],{"class":208},[67,148391,13153],{"class":77},[67,148393,148394],{"class":208},"130",[67,148396,13153],{"class":77},[67,148398,1673],{"class":208},[67,148400,13153],{"class":77},[67,148402,21765],{"class":208},[67,148404,13153],{"class":77},[67,148406,2445],{"class":208},[67,148408,112739],{"class":77},[67,148410,148282],{"class":5935},[67,148412,909],{"class":73},[67,148414,32013],{"class":208},[67,148416,870],{"class":77},[67,148418,148419,148421,148424,148426,148428,148430,148432,148434,148436,148438,148440,148442,148444,148446,148448,148450,148452],{"class":69,"line":186},[67,148420,147829],{"class":77},[67,148422,148423],{"class":84},"\"线下销售\"",[67,148425,78055],{"class":77},[67,148427,1468],{"class":208},[67,148429,13153],{"class":77},[67,148431,1718],{"class":208},[67,148433,13153],{"class":77},[67,148435,1169],{"class":208},[67,148437,13153],{"class":77},[67,148439,1673],{"class":208},[67,148441,13153],{"class":77},[67,148443,147849],{"class":208},[67,148445,112739],{"class":77},[67,148447,148282],{"class":5935},[67,148449,909],{"class":73},[67,148451,32013],{"class":208},[67,148453,870],{"class":77},[67,148455,148456],{"class":69,"line":444},[67,148457,148005],{"class":77},[67,148459,148460,148462,148464,148466,148468,148470,148473],{"class":69,"line":2335},[67,148461,148010],{"class":5935},[67,148463,909],{"class":73},[67,148465,148015],{"class":77},[67,148467,51944],{"class":5935},[67,148469,909],{"class":73},[67,148471,148472],{"class":84},"\"线上线下销售趋势\"",[67,148474,38584],{"class":77},[67,148476,148477,148479,148481,148483,148485,148487,148489],{"class":69,"line":2340},[67,148478,148066],{"class":5935},[67,148480,909],{"class":73},[67,148482,148071],{"class":77},[67,148484,148074],{"class":5935},[67,148486,909],{"class":73},[67,148488,148079],{"class":84},[67,148490,38584],{"class":77},[67,148492,148493],{"class":69,"line":2346},[67,148494,870],{"class":77},[67,148496,148497,148499,148502],{"class":69,"line":2351},[67,148498,147861],{"class":77},[67,148500,148501],{"class":84},"\"sales.html\"",[67,148503,870],{"class":77},[19,148505,148506],{},"多条折线适合比较不同指标或不同地区。",[803,148508,148510],{"id":148509},"_108-从json文件读取数据","10.8 从JSON文件读取数据",[19,148512,148513,148514,25331],{},"假设 ",[64,148515,148516],{},"sales.json",[57,148518,148520],{"className":147582,"code":148519,"language":146329,"meta":62,"style":62},"[\n  {\"date\": \"周一\", \"online\": 100, \"offline\": 80},\n  {\"date\": \"周二\", \"online\": 130, \"offline\": 90},\n  {\"date\": \"周三\", \"online\": 120, \"offline\": 100}\n]\n",[64,148521,148522,148527,148559,148587,148615],{"__ignoreMap":62},[67,148523,148524],{"class":69,"line":70},[67,148525,148526],{"class":77},"[\n",[67,148528,148529,148532,148535,148537,148539,148541,148544,148546,148548,148550,148553,148555,148557],{"class":69,"line":143},[67,148530,148531],{"class":77},"  {",[67,148533,148534],{"class":208},"\"date\"",[67,148536,51974],{"class":77},[67,148538,147802],{"class":84},[67,148540,13153],{"class":77},[67,148542,148543],{"class":208},"\"online\"",[67,148545,51974],{"class":77},[67,148547,1169],{"class":208},[67,148549,13153],{"class":77},[67,148551,148552],{"class":208},"\"offline\"",[67,148554,51974],{"class":77},[67,148556,1468],{"class":208},[67,148558,5649],{"class":77},[67,148560,148561,148563,148565,148567,148569,148571,148573,148575,148577,148579,148581,148583,148585],{"class":69,"line":149},[67,148562,148531],{"class":77},[67,148564,148534],{"class":208},[67,148566,51974],{"class":77},[67,148568,147807],{"class":84},[67,148570,13153],{"class":77},[67,148572,148543],{"class":208},[67,148574,51974],{"class":77},[67,148576,148394],{"class":208},[67,148578,13153],{"class":77},[67,148580,148552],{"class":208},[67,148582,51974],{"class":77},[67,148584,1718],{"class":208},[67,148586,5649],{"class":77},[67,148588,148589,148591,148593,148595,148597,148599,148601,148603,148605,148607,148609,148611,148613],{"class":69,"line":155},[67,148590,148531],{"class":77},[67,148592,148534],{"class":208},[67,148594,51974],{"class":77},[67,148596,147812],{"class":84},[67,148598,13153],{"class":77},[67,148600,148543],{"class":208},[67,148602,51974],{"class":77},[67,148604,1673],{"class":208},[67,148606,13153],{"class":77},[67,148608,148552],{"class":208},[67,148610,51974],{"class":77},[67,148612,1169],{"class":208},[67,148614,2288],{"class":77},[67,148616,148617],{"class":69,"line":161},[67,148618,33783],{"class":77},[19,148620,148621],{},"读取并绘图：",[57,148623,148625],{"className":30915,"code":148624,"language":30917,"meta":62,"style":62},"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",[64,148626,148627,148633,148647,148657,148661,148693,148706,148710,148718,148727,148736,148740,148752,148761,148770,148779,148783,148791,148795,148812,148829,148833,148850,148866,148870],{"__ignoreMap":62},[67,148628,148629,148631],{"class":69,"line":70},[67,148630,30929],{"class":73},[67,148632,147628],{"class":77},[67,148634,148635,148637,148639,148641,148643,148645],{"class":69,"line":143},[67,148636,31274],{"class":73},[67,148638,147916],{"class":77},[67,148640,30929],{"class":73},[67,148642,147921],{"class":77},[67,148644,31920],{"class":73},[67,148646,147926],{"class":77},[67,148648,148649,148651,148653,148655],{"class":69,"line":149},[67,148650,31274],{"class":73},[67,148652,147775],{"class":77},[67,148654,30929],{"class":73},[67,148656,147780],{"class":77},[67,148658,148659],{"class":69,"line":155},[67,148660,177],{"emptyLinePlaceholder":176},[67,148662,148663,148665,148667,148669,148672,148674,148676,148678,148680,148682,148684,148686,148688,148691],{"class":69,"line":161},[67,148664,108370],{"class":73},[67,148666,147328],{"class":208},[67,148668,864],{"class":77},[67,148670,148671],{"class":84},"\"sales.json\"",[67,148673,13153],{"class":77},[67,148675,147338],{"class":84},[67,148677,13153],{"class":77},[67,148679,147343],{"class":5935},[67,148681,909],{"class":73},[67,148683,147348],{"class":84},[67,148685,14432],{"class":77},[67,148687,31920],{"class":73},[67,148689,148690],{"class":5935}," file",[67,148692,4459],{"class":77},[67,148694,148695,148697,148699,148702,148704],{"class":69,"line":167},[67,148696,101958],{"class":77},[67,148698,909],{"class":73},[67,148700,148701],{"class":77}," json.load(",[67,148703,45891],{"class":5935},[67,148705,870],{"class":77},[67,148707,148708],{"class":69,"line":173},[67,148709,177],{"emptyLinePlaceholder":176},[67,148711,148712,148714,148716],{"class":69,"line":180},[67,148713,148337],{"class":77},[67,148715,909],{"class":73},[67,148717,52375],{"class":77},[67,148719,148720,148723,148725],{"class":69,"line":186},[67,148721,148722],{"class":77},"online_sales ",[67,148724,909],{"class":73},[67,148726,52375],{"class":77},[67,148728,148729,148732,148734],{"class":69,"line":444},[67,148730,148731],{"class":77},"offline_sales ",[67,148733,909],{"class":73},[67,148735,52375],{"class":77},[67,148737,148738],{"class":69,"line":2335},[67,148739,177],{"emptyLinePlaceholder":176},[67,148741,148742,148744,148747,148749],{"class":69,"line":2340},[67,148743,74],{"class":73},[67,148745,148746],{"class":77}," item ",[67,148748,81],{"class":73},[67,148750,148751],{"class":77}," data:\n",[67,148753,148754,148757,148759],{"class":69,"line":2346},[67,148755,148756],{"class":77},"    dates.append(item[",[67,148758,148534],{"class":84},[67,148760,5376],{"class":77},[67,148762,148763,148766,148768],{"class":69,"line":2351},[67,148764,148765],{"class":77},"    online_sales.append(item[",[67,148767,148543],{"class":84},[67,148769,5376],{"class":77},[67,148771,148772,148775,148777],{"class":69,"line":2365},[67,148773,148774],{"class":77},"    offline_sales.append(item[",[67,148776,148552],{"class":84},[67,148778,5376],{"class":77},[67,148780,148781],{"class":69,"line":2370},[67,148782,177],{"emptyLinePlaceholder":176},[67,148784,148785,148787,148789],{"class":69,"line":2376},[67,148786,147789],{"class":77},[67,148788,909],{"class":73},[67,148790,147794],{"class":77},[67,148792,148793],{"class":69,"line":2397},[67,148794,148378],{"class":77},[67,148796,148797,148799,148801,148804,148806,148808,148810],{"class":69,"line":2402},[67,148798,147829],{"class":77},[67,148800,148385],{"class":84},[67,148802,148803],{"class":77},", online_sales, ",[67,148805,148282],{"class":5935},[67,148807,909],{"class":73},[67,148809,32013],{"class":208},[67,148811,870],{"class":77},[67,148813,148814,148816,148818,148821,148823,148825,148827],{"class":69,"line":2416},[67,148815,147829],{"class":77},[67,148817,148423],{"class":84},[67,148819,148820],{"class":77},", offline_sales, ",[67,148822,148282],{"class":5935},[67,148824,909],{"class":73},[67,148826,32013],{"class":208},[67,148828,870],{"class":77},[67,148830,148831],{"class":69,"line":2421},[67,148832,148005],{"class":77},[67,148834,148835,148837,148839,148841,148843,148845,148848],{"class":69,"line":2450},[67,148836,148010],{"class":5935},[67,148838,909],{"class":73},[67,148840,148015],{"class":77},[67,148842,51944],{"class":5935},[67,148844,909],{"class":73},[67,148846,148847],{"class":84},"\"销售趋势\"",[67,148849,38584],{"class":77},[67,148851,148852,148854,148856,148858,148860,148862,148864],{"class":69,"line":2455},[67,148853,148066],{"class":5935},[67,148855,909],{"class":73},[67,148857,148071],{"class":77},[67,148859,148074],{"class":5935},[67,148861,909],{"class":73},[67,148863,148079],{"class":84},[67,148865,38584],{"class":77},[67,148867,148868],{"class":69,"line":2472},[67,148869,870],{"class":77},[67,148871,148872,148874,148876],{"class":69,"line":2477},[67,148873,147861],{"class":77},[67,148875,148501],{"class":84},[67,148877,870],{"class":77},[803,148879,148881],{"id":148880},"_109-数据清洗","10.9 数据清洗",[19,148883,148884],{},"真实数据经常不整齐，需要清洗。",[19,148886,148887],{},"常见问题：",[815,148889,148890,148893,148896,148899],{},[818,148891,148892],{},"数字是字符串。",[818,148894,148895],{},"字段缺失。",[818,148897,148898],{},"空值。",[818,148900,148901],{},"日期格式不统一。",[19,148903,15852],{},[57,148905,148907],{"className":30915,"code":148906,"language":30917,"meta":62,"style":62},"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",[64,148908,148909,148918,148941,148961,148982,148986,148990,148998,149007,149011,149022,149036,149045,149050,149054,149062,149072,149076,149083],{"__ignoreMap":62},[67,148910,148911,148914,148916],{"class":69,"line":70},[67,148912,148913],{"class":77},"raw_data ",[67,148915,909],{"class":73},[67,148917,55984],{"class":77},[67,148919,148920,148923,148925,148927,148929,148931,148934,148936,148939],{"class":69,"line":143},[67,148921,148922],{"class":77},"    {",[67,148924,148534],{"class":84},[67,148926,51974],{"class":77},[67,148928,147802],{"class":84},[67,148930,13153],{"class":77},[67,148932,148933],{"class":84},"\"sales\"",[67,148935,51974],{"class":77},[67,148937,148938],{"class":84},"\"100\"",[67,148940,5649],{"class":77},[67,148942,148943,148945,148947,148949,148951,148953,148955,148957,148959],{"class":69,"line":149},[67,148944,148922],{"class":77},[67,148946,148534],{"class":84},[67,148948,51974],{"class":77},[67,148950,147807],{"class":84},[67,148952,13153],{"class":77},[67,148954,148933],{"class":84},[67,148956,51974],{"class":77},[67,148958,8371],{"class":84},[67,148960,5649],{"class":77},[67,148962,148963,148965,148967,148969,148971,148973,148975,148977,148980],{"class":69,"line":155},[67,148964,148922],{"class":77},[67,148966,148534],{"class":84},[67,148968,51974],{"class":77},[67,148970,147812],{"class":84},[67,148972,13153],{"class":77},[67,148974,148933],{"class":84},[67,148976,51974],{"class":77},[67,148978,148979],{"class":84},"\"120\"",[67,148981,5649],{"class":77},[67,148983,148984],{"class":69,"line":161},[67,148985,33783],{"class":77},[67,148987,148988],{"class":69,"line":167},[67,148989,177],{"emptyLinePlaceholder":176},[67,148991,148992,148994,148996],{"class":69,"line":173},[67,148993,148337],{"class":77},[67,148995,909],{"class":73},[67,148997,52375],{"class":77},[67,148999,149000,149003,149005],{"class":69,"line":180},[67,149001,149002],{"class":77},"sales ",[67,149004,909],{"class":73},[67,149006,52375],{"class":77},[67,149008,149009],{"class":69,"line":186},[67,149010,177],{"emptyLinePlaceholder":176},[67,149012,149013,149015,149017,149019],{"class":69,"line":444},[67,149014,74],{"class":73},[67,149016,148746],{"class":77},[67,149018,81],{"class":73},[67,149020,149021],{"class":77}," raw_data:\n",[67,149023,149024,149027,149029,149032,149034],{"class":69,"line":2335},[67,149025,149026],{"class":77},"    value ",[67,149028,909],{"class":73},[67,149030,149031],{"class":77}," item.get(",[67,149033,148933],{"class":84},[67,149035,870],{"class":77},[67,149037,149038,149040,149042],{"class":69,"line":2340},[67,149039,3821],{"class":73},[67,149041,39467],{"class":73},[67,149043,149044],{"class":77}," value:\n",[67,149046,149047],{"class":69,"line":2346},[67,149048,149049],{"class":73},"        continue\n",[67,149051,149052],{"class":69,"line":2351},[67,149053,177],{"emptyLinePlaceholder":176},[67,149055,149056,149058,149060],{"class":69,"line":2365},[67,149057,148756],{"class":77},[67,149059,148534],{"class":84},[67,149061,5376],{"class":77},[67,149063,149064,149067,149069],{"class":69,"line":2370},[67,149065,149066],{"class":77},"    sales.append(",[67,149068,867],{"class":208},[67,149070,149071],{"class":77},"(value))\n",[67,149073,149074],{"class":69,"line":2376},[67,149075,177],{"emptyLinePlaceholder":176},[67,149077,149078,149080],{"class":69,"line":2397},[67,149079,30952],{"class":208},[67,149081,149082],{"class":77},"(dates)\n",[67,149084,149085,149087],{"class":69,"line":2402},[67,149086,30952],{"class":208},[67,149088,149089],{"class":77},"(sales)\n",[803,149091,149093],{"id":149092},"_1010-小案例每日销售额折线图","10.10 小案例：每日销售额折线图",[57,149095,149097],{"className":30915,"code":149096,"language":30917,"meta":62,"style":62},"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",[64,149098,149099,149113,149123,149127,149135,149156,149178,149200,149222,149244,149248,149252,149274,149295,149299,149307,149311,149315,149325,149334,149344,149360,149364,149368,149385,149401,149417,149433,149443,149447],{"__ignoreMap":62},[67,149100,149101,149103,149105,149107,149109,149111],{"class":69,"line":70},[67,149102,31274],{"class":73},[67,149104,147916],{"class":77},[67,149106,30929],{"class":73},[67,149108,147921],{"class":77},[67,149110,31920],{"class":73},[67,149112,147926],{"class":77},[67,149114,149115,149117,149119,149121],{"class":69,"line":143},[67,149116,31274],{"class":73},[67,149118,147775],{"class":77},[67,149120,30929],{"class":73},[67,149122,147780],{"class":77},[67,149124,149125],{"class":69,"line":149},[67,149126,177],{"emptyLinePlaceholder":176},[67,149128,149129,149131,149133],{"class":69,"line":155},[67,149130,149002],{"class":77},[67,149132,909],{"class":73},[67,149134,55984],{"class":77},[67,149136,149137,149139,149141,149143,149146,149148,149150,149152,149154],{"class":69,"line":161},[67,149138,148922],{"class":77},[67,149140,148534],{"class":84},[67,149142,51974],{"class":77},[67,149144,149145],{"class":84},"\"2024-10-01\"",[67,149147,13153],{"class":77},[67,149149,84621],{"class":84},[67,149151,51974],{"class":77},[67,149153,92560],{"class":208},[67,149155,5649],{"class":77},[67,149157,149158,149160,149162,149164,149167,149169,149171,149173,149176],{"class":69,"line":167},[67,149159,148922],{"class":77},[67,149161,148534],{"class":84},[67,149163,51974],{"class":77},[67,149165,149166],{"class":84},"\"2024-10-02\"",[67,149168,13153],{"class":77},[67,149170,84621],{"class":84},[67,149172,51974],{"class":77},[67,149174,149175],{"class":208},"1800",[67,149177,5649],{"class":77},[67,149179,149180,149182,149184,149186,149189,149191,149193,149195,149198],{"class":69,"line":173},[67,149181,148922],{"class":77},[67,149183,148534],{"class":84},[67,149185,51974],{"class":77},[67,149187,149188],{"class":84},"\"2024-10-03\"",[67,149190,13153],{"class":77},[67,149192,84621],{"class":84},[67,149194,51974],{"class":77},[67,149196,149197],{"class":208},"1500",[67,149199,5649],{"class":77},[67,149201,149202,149204,149206,149208,149211,149213,149215,149217,149220],{"class":69,"line":180},[67,149203,148922],{"class":77},[67,149205,148534],{"class":84},[67,149207,51974],{"class":77},[67,149209,149210],{"class":84},"\"2024-10-04\"",[67,149212,13153],{"class":77},[67,149214,84621],{"class":84},[67,149216,51974],{"class":77},[67,149218,149219],{"class":208},"2100",[67,149221,5649],{"class":77},[67,149223,149224,149226,149228,149230,149233,149235,149237,149239,149242],{"class":69,"line":186},[67,149225,148922],{"class":77},[67,149227,148534],{"class":84},[67,149229,51974],{"class":77},[67,149231,149232],{"class":84},"\"2024-10-05\"",[67,149234,13153],{"class":77},[67,149236,84621],{"class":84},[67,149238,51974],{"class":77},[67,149240,149241],{"class":208},"2600",[67,149243,5649],{"class":77},[67,149245,149246],{"class":69,"line":444},[67,149247,33783],{"class":77},[67,149249,149250],{"class":69,"line":2335},[67,149251,177],{"emptyLinePlaceholder":176},[67,149253,149254,149256,149258,149261,149263,149265,149267,149269,149271],{"class":69,"line":2340},[67,149255,148337],{"class":77},[67,149257,909],{"class":73},[67,149259,149260],{"class":77}," [item[",[67,149262,148534],{"class":84},[67,149264,5162],{"class":77},[67,149266,74],{"class":73},[67,149268,148746],{"class":77},[67,149270,81],{"class":73},[67,149272,149273],{"class":77}," sales]\n",[67,149275,149276,149279,149281,149283,149285,149287,149289,149291,149293],{"class":69,"line":2346},[67,149277,149278],{"class":77},"amounts ",[67,149280,909],{"class":73},[67,149282,149260],{"class":77},[67,149284,84621],{"class":84},[67,149286,5162],{"class":77},[67,149288,74],{"class":73},[67,149290,148746],{"class":77},[67,149292,81],{"class":73},[67,149294,149273],{"class":77},[67,149296,149297],{"class":69,"line":2351},[67,149298,177],{"emptyLinePlaceholder":176},[67,149300,149301,149303,149305],{"class":69,"line":2365},[67,149302,147789],{"class":77},[67,149304,909],{"class":73},[67,149306,147794],{"class":77},[67,149308,149309],{"class":69,"line":2370},[67,149310,148378],{"class":77},[67,149312,149313],{"class":69,"line":2376},[67,149314,148186],{"class":77},[67,149316,149317,149319,149321,149323],{"class":69,"line":2397},[67,149318,148191],{"class":5935},[67,149320,909],{"class":73},[67,149322,147832],{"class":84},[67,149324,32003],{"class":77},[67,149326,149327,149329,149331],{"class":69,"line":2402},[67,149328,148202],{"class":5935},[67,149330,909],{"class":73},[67,149332,149333],{"class":77},"amounts,\n",[67,149335,149336,149338,149340,149342],{"class":69,"line":2416},[67,149337,148231],{"class":5935},[67,149339,909],{"class":73},[67,149341,32013],{"class":208},[67,149343,32003],{"class":77},[67,149345,149346,149348,149350,149352,149354,149356,149358],{"class":69,"line":2421},[67,149347,148242],{"class":5935},[67,149349,909],{"class":73},[67,149351,148247],{"class":77},[67,149353,148250],{"class":5935},[67,149355,909],{"class":73},[67,149357,32013],{"class":208},[67,149359,38584],{"class":77},[67,149361,149362],{"class":69,"line":2450},[67,149363,870],{"class":77},[67,149365,149366],{"class":69,"line":2455},[67,149367,148005],{"class":77},[67,149369,149370,149372,149374,149376,149378,149380,149383],{"class":69,"line":2472},[67,149371,148010],{"class":5935},[67,149373,909],{"class":73},[67,149375,148015],{"class":77},[67,149377,51944],{"class":5935},[67,149379,909],{"class":73},[67,149381,149382],{"class":84},"\"每日销售额\"",[67,149384,38584],{"class":77},[67,149386,149387,149389,149391,149393,149395,149397,149399],{"class":69,"line":2477},[67,149388,148029],{"class":5935},[67,149390,909],{"class":73},[67,149392,148034],{"class":77},[67,149394,80347],{"class":5935},[67,149396,909],{"class":73},[67,149398,148041],{"class":84},[67,149400,38584],{"class":77},[67,149402,149403,149405,149407,149409,149411,149413,149415],{"class":69,"line":2482},[67,149404,148048],{"class":5935},[67,149406,909],{"class":73},[67,149408,148034],{"class":77},[67,149410,80347],{"class":5935},[67,149412,909],{"class":73},[67,149414,148059],{"class":84},[67,149416,38584],{"class":77},[67,149418,149419,149421,149423,149425,149427,149429,149431],{"class":69,"line":2487},[67,149420,148066],{"class":5935},[67,149422,909],{"class":73},[67,149424,148071],{"class":77},[67,149426,148074],{"class":5935},[67,149428,909],{"class":73},[67,149430,148079],{"class":84},[67,149432,38584],{"class":77},[67,149434,149435,149438,149440],{"class":69,"line":2501},[67,149436,149437],{"class":5935},"    datazoom_opts",[67,149439,909],{"class":73},[67,149441,149442],{"class":77},"[opts.DataZoomOpts()],\n",[67,149444,149445],{"class":69,"line":2506},[67,149446,870],{"class":77},[67,149448,149449,149451,149454],{"class":69,"line":3298},[67,149450,147861],{"class":77},[67,149452,149453],{"class":84},"\"daily_sales.html\"",[67,149455,870],{"class":77},[19,149457,149458,149461],{},[64,149459,149460],{},"datazoom_opts"," 可以让图表支持拖拽缩放，数据量大时很有用。",[803,149463,149465],{"id":149464},"_1011-小案例疫情趋势折线图结构","10.11 小案例：疫情趋势折线图结构",[19,149467,149468],{},"如果数据结构如下：",[57,149470,149472],{"className":30915,"code":149471,"language":30917,"meta":62,"style":62},"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",[64,149473,149474,149482,149490,149512,149533,149538,149545,149565,149585,149589],{"__ignoreMap":62},[67,149475,149476,149478,149480],{"class":69,"line":70},[67,149477,102195],{"class":77},[67,149479,909],{"class":73},[67,149481,16289],{"class":77},[67,149483,149484,149487],{"class":69,"line":143},[67,149485,149486],{"class":84},"    \"北京\"",[67,149488,149489],{"class":77},": [\n",[67,149491,149492,149494,149496,149498,149501,149503,149506,149508,149510],{"class":69,"line":149},[67,149493,5636],{"class":77},[67,149495,148534],{"class":84},[67,149497,51974],{"class":77},[67,149499,149500],{"class":84},"\"2024-01-01\"",[67,149502,13153],{"class":77},[67,149504,149505],{"class":84},"\"confirm\"",[67,149507,51974],{"class":77},[67,149509,1303],{"class":208},[67,149511,5649],{"class":77},[67,149513,149514,149516,149518,149520,149523,149525,149527,149529,149531],{"class":69,"line":155},[67,149515,5636],{"class":77},[67,149517,148534],{"class":84},[67,149519,51974],{"class":77},[67,149521,149522],{"class":84},"\"2024-01-02\"",[67,149524,13153],{"class":77},[67,149526,149505],{"class":84},[67,149528,51974],{"class":77},[67,149530,1355],{"class":208},[67,149532,5649],{"class":77},[67,149534,149535],{"class":69,"line":161},[67,149536,149537],{"class":77},"    ],\n",[67,149539,149540,149543],{"class":69,"line":167},[67,149541,149542],{"class":84},"    \"上海\"",[67,149544,149489],{"class":77},[67,149546,149547,149549,149551,149553,149555,149557,149559,149561,149563],{"class":69,"line":173},[67,149548,5636],{"class":77},[67,149550,148534],{"class":84},[67,149552,51974],{"class":77},[67,149554,149500],{"class":84},[67,149556,13153],{"class":77},[67,149558,149505],{"class":84},[67,149560,51974],{"class":77},[67,149562,1253],{"class":208},[67,149564,5649],{"class":77},[67,149566,149567,149569,149571,149573,149575,149577,149579,149581,149583],{"class":69,"line":180},[67,149568,5636],{"class":77},[67,149570,148534],{"class":84},[67,149572,51974],{"class":77},[67,149574,149522],{"class":84},[67,149576,13153],{"class":77},[67,149578,149505],{"class":84},[67,149580,51974],{"class":77},[67,149582,1380],{"class":208},[67,149584,5649],{"class":77},[67,149586,149587],{"class":69,"line":186},[67,149588,149537],{"class":77},[67,149590,149591],{"class":69,"line":444},[67,149592,2288],{"class":77},[19,149594,149595],{},"绘制多地区趋势：",[57,149597,149599],{"className":30915,"code":149598,"language":30917,"meta":62,"style":62},"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",[64,149600,149601,149615,149625,149629,149654,149658,149666,149670,149674,149686,149708,149721,149725,149729,149746,149762,149766],{"__ignoreMap":62},[67,149602,149603,149605,149607,149609,149611,149613],{"class":69,"line":70},[67,149604,31274],{"class":73},[67,149606,147916],{"class":77},[67,149608,30929],{"class":73},[67,149610,147921],{"class":77},[67,149612,31920],{"class":73},[67,149614,147926],{"class":77},[67,149616,149617,149619,149621,149623],{"class":69,"line":143},[67,149618,31274],{"class":73},[67,149620,147775],{"class":77},[67,149622,30929],{"class":73},[67,149624,147780],{"class":77},[67,149626,149627],{"class":69,"line":149},[67,149628,177],{"emptyLinePlaceholder":176},[67,149630,149631,149633,149635,149637,149639,149641,149643,149645,149647,149650,149652],{"class":69,"line":155},[67,149632,148337],{"class":77},[67,149634,909],{"class":73},[67,149636,149260],{"class":77},[67,149638,148534],{"class":84},[67,149640,5162],{"class":77},[67,149642,74],{"class":73},[67,149644,148746],{"class":77},[67,149646,81],{"class":73},[67,149648,149649],{"class":77}," data[",[67,149651,69806],{"class":84},[67,149653,78064],{"class":77},[67,149655,149656],{"class":69,"line":161},[67,149657,177],{"emptyLinePlaceholder":176},[67,149659,149660,149662,149664],{"class":69,"line":167},[67,149661,147789],{"class":77},[67,149663,909],{"class":73},[67,149665,147794],{"class":77},[67,149667,149668],{"class":69,"line":173},[67,149669,148378],{"class":77},[67,149671,149672],{"class":69,"line":180},[67,149673,177],{"emptyLinePlaceholder":176},[67,149675,149676,149678,149681,149683],{"class":69,"line":186},[67,149677,74],{"class":73},[67,149679,149680],{"class":77}," city, records ",[67,149682,81],{"class":73},[67,149684,149685],{"class":77}," data.items():\n",[67,149687,149688,149691,149693,149695,149697,149699,149701,149703,149705],{"class":69,"line":444},[67,149689,149690],{"class":77},"    values ",[67,149692,909],{"class":73},[67,149694,149260],{"class":77},[67,149696,149505],{"class":84},[67,149698,5162],{"class":77},[67,149700,74],{"class":73},[67,149702,148746],{"class":77},[67,149704,81],{"class":73},[67,149706,149707],{"class":77}," records]\n",[67,149709,149710,149713,149715,149717,149719],{"class":69,"line":2335},[67,149711,149712],{"class":77},"    line.add_yaxis(city, values, ",[67,149714,148282],{"class":5935},[67,149716,909],{"class":73},[67,149718,32013],{"class":208},[67,149720,870],{"class":77},[67,149722,149723],{"class":69,"line":2340},[67,149724,177],{"emptyLinePlaceholder":176},[67,149726,149727],{"class":69,"line":2346},[67,149728,148005],{"class":77},[67,149730,149731,149733,149735,149737,149739,149741,149744],{"class":69,"line":2351},[67,149732,148010],{"class":5935},[67,149734,909],{"class":73},[67,149736,148015],{"class":77},[67,149738,51944],{"class":5935},[67,149740,909],{"class":73},[67,149742,149743],{"class":84},"\"多地区趋势图\"",[67,149745,38584],{"class":77},[67,149747,149748,149750,149752,149754,149756,149758,149760],{"class":69,"line":2365},[67,149749,148066],{"class":5935},[67,149751,909],{"class":73},[67,149753,148071],{"class":77},[67,149755,148074],{"class":5935},[67,149757,909],{"class":73},[67,149759,148079],{"class":84},[67,149761,38584],{"class":77},[67,149763,149764],{"class":69,"line":2370},[67,149765,870],{"class":77},[67,149767,149768,149770,149773],{"class":69,"line":2376},[67,149769,147861],{"class":77},[67,149771,149772],{"class":84},"\"trend.html\"",[67,149774,870],{"class":77},[19,149776,149777],{},"这种思路适合一批地区、一批商品或一批指标的趋势对比。",[803,149779,149781],{"id":149780},"_1012-易错点","10.12 易错点",[815,149783,149784,149790,149796,149806,149812],{},[818,149785,149786,149789],{},[64,149787,149788],{},"add_xaxis()"," 的数据数量要和 y 轴数量对应。",[818,149791,149792,149795],{},[64,149793,149794],{},"render()"," 生成的是 HTML，不是图片。",[818,149797,149798,149799,149802,149803,28922],{},"JSON 字符串用 ",[64,149800,149801],{},"json.loads()","，JSON 文件用 ",[64,149804,149805],{},"json.load()",[818,149807,149808,149809,28922],{},"中文 JSON 保存时加 ",[64,149810,149811],{},"ensure_ascii=False",[818,149813,149814],{},"pyecharts 图表不能在纯终端里直接显示，需要浏览器打开 HTML。",[803,149816,149818],{"id":149817},"_1013-本章练习","10.13 本章练习",[815,149820,149821,149824,149827,149830,149833],{},[818,149822,149823],{},"安装 pyecharts 并生成第一个折线图。",[818,149825,149826],{},"用 JSON 文件保存一周销售数据，并读取绘制图表。",[818,149828,149829],{},"绘制两条折线，对比线上和线下销售额。",[818,149831,149832],{},"给折线图添加标题、坐标轴名称、提示框和缩放条。",[818,149834,149835],{},"对含有空值的销售数据进行清洗后再绘图。",[779,149837,149838],{},"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":62,"searchDepth":143,"depth":143,"links":149840},[149841,149842,149843,149844,149845,149846,149847,149848,149849,149850,149851,149852,149853],{"id":147457,"depth":143,"text":147458},{"id":147532,"depth":143,"text":147533},{"id":147711,"depth":143,"text":147712},{"id":147762,"depth":143,"text":147763},{"id":147896,"depth":143,"text":147897},{"id":148172,"depth":143,"text":148173},{"id":148298,"depth":143,"text":148299},{"id":148509,"depth":143,"text":148510},{"id":148880,"depth":143,"text":148881},{"id":149092,"depth":143,"text":149093},{"id":149464,"depth":143,"text":149465},{"id":149780,"depth":143,"text":149781},{"id":149817,"depth":143,"text":149818},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch10-jsonpyecharts",{"title":147449,"description":24093},"wiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图","StYaXLIht8VuaOlNFrmS7a-kIxJDRawZKxKfnvgi7JI",{"id":149860,"title":149861,"body":149862,"description":24093,"extension":787,"meta":152222,"navigation":176,"path":152223,"seo":152224,"stem":152225,"__hash__":152226},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础.md","11. 面向对象基础",{"type":7,"value":149863,"toc":152199},[149864,149867,149871,149874,149877,149953,149956,150047,150050,150054,150057,150101,150114,150118,150121,150188,150191,150195,150198,150282,150290,150294,150299,150440,150443,150454,150460,150466,150580,150584,150587,150590,150843,150846,150850,150853,150957,150960,150964,151115,151119,151126,151239,151243,151246,151352,151355,151359,151362,151393,151396,151501,151504,151508,151512,151522,151590,151594,151601,151665,151668,151672,151678,151774,151783,151787,152111,152120,152124,152152,152156,152196],[10,149865,149861],{"id":149866},"_11-面向对象基础",[803,149868,149870],{"id":149869},"_111-什么是面向对象","11.1 什么是面向对象",[19,149872,149873],{},"面向对象是一种组织代码的方式。它把数据和操作数据的函数放在一起，形成对象。",[19,149875,149876],{},"面向过程：",[57,149878,149880],{"className":30915,"code":149879,"language":30917,"meta":62,"style":62},"name = \"小明\"\nage = 18\n\ndef introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\nintroduce(name, age)\n",[64,149881,149882,149891,149899,149903,149913,149944,149948],{"__ignoreMap":62},[67,149883,149884,149886,149888],{"class":69,"line":70},[67,149885,147073],{"class":77},[67,149887,909],{"class":73},[67,149889,149890],{"class":84}," \"小明\"\n",[67,149892,149893,149895,149897],{"class":69,"line":143},[67,149894,147083],{"class":77},[67,149896,909],{"class":73},[67,149898,147088],{"class":208},[67,149900,149901],{"class":69,"line":149},[67,149902,177],{"emptyLinePlaceholder":176},[67,149904,149905,149907,149910],{"class":69,"line":155},[67,149906,32484],{"class":73},[67,149908,149909],{"class":112}," introduce",[67,149911,149912],{"class":77},"(name, age):\n",[67,149914,149915,149917,149919,149921,149924,149926,149928,149930,149933,149935,149937,149939,149942],{"class":69,"line":161},[67,149916,31836],{"class":208},[67,149918,864],{"class":77},[67,149920,915],{"class":73},[67,149922,149923],{"class":84},"\"我叫",[67,149925,1752],{"class":208},[67,149927,80347],{"class":77},[67,149929,1802],{"class":208},[67,149931,149932],{"class":84},"，今年",[67,149934,1752],{"class":208},[67,149936,70758],{"class":77},[67,149938,1802],{"class":208},[67,149940,149941],{"class":84},"岁\"",[67,149943,870],{"class":77},[67,149945,149946],{"class":69,"line":167},[67,149947,177],{"emptyLinePlaceholder":176},[67,149949,149950],{"class":69,"line":173},[67,149951,149952],{"class":77},"introduce(name, age)\n",[19,149954,149955],{},"面向对象：",[57,149957,149959],{"className":30915,"code":149958,"language":30917,"meta":62,"style":62},"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",[64,149960,149961,149969,149977,150006,150010,150014,150024,150033,150042],{"__ignoreMap":62},[67,149962,149963,149965,149967],{"class":69,"line":70},[67,149964,15411],{"class":73},[67,149966,8617],{"class":112},[67,149968,4459],{"class":77},[67,149970,149971,149973,149975],{"class":69,"line":143},[67,149972,31338],{"class":73},[67,149974,149909],{"class":112},[67,149976,31344],{"class":77},[67,149978,149979,149981,149983,149985,149987,149990,149992,149994,149996,149998,150000,150002,150004],{"class":69,"line":149},[67,149980,32988],{"class":208},[67,149982,864],{"class":77},[67,149984,915],{"class":73},[67,149986,149923],{"class":84},[67,149988,149989],{"class":208},"{self",[67,149991,80838],{"class":77},[67,149993,1802],{"class":208},[67,149995,149932],{"class":84},[67,149997,149989],{"class":208},[67,149999,80850],{"class":77},[67,150001,1802],{"class":208},[67,150003,149941],{"class":84},[67,150005,870],{"class":77},[67,150007,150008],{"class":69,"line":155},[67,150009,177],{"emptyLinePlaceholder":176},[67,150011,150012],{"class":69,"line":161},[67,150013,177],{"emptyLinePlaceholder":176},[67,150015,150016,150019,150021],{"class":69,"line":167},[67,150017,150018],{"class":77},"student ",[67,150020,909],{"class":73},[67,150022,150023],{"class":77}," Student()\n",[67,150025,150026,150029,150031],{"class":69,"line":173},[67,150027,150028],{"class":77},"student.name ",[67,150030,909],{"class":73},[67,150032,149890],{"class":84},[67,150034,150035,150038,150040],{"class":69,"line":180},[67,150036,150037],{"class":77},"student.age ",[67,150039,909],{"class":73},[67,150041,147088],{"class":208},[67,150043,150044],{"class":69,"line":186},[67,150045,150046],{"class":77},"student.introduce()\n",[19,150048,150049],{},"面向对象更适合数据结构和行为绑定在一起的场景，例如学生、用户、订单、商品、账户。",[803,150051,150053],{"id":150052},"_112-类和对象","11.2 类和对象",[19,150055,150056],{},"类是模板，对象是根据模板创建出来的具体实例。",[57,150058,150060],{"className":30915,"code":150059,"language":30917,"meta":62,"style":62},"class Student:\n    pass\n\n\nstudent1 = Student()\nstudent2 = Student()\n",[64,150061,150062,150070,150075,150079,150083,150092],{"__ignoreMap":62},[67,150063,150064,150066,150068],{"class":69,"line":70},[67,150065,15411],{"class":73},[67,150067,8617],{"class":112},[67,150069,4459],{"class":77},[67,150071,150072],{"class":69,"line":143},[67,150073,150074],{"class":73},"    pass\n",[67,150076,150077],{"class":69,"line":149},[67,150078,177],{"emptyLinePlaceholder":176},[67,150080,150081],{"class":69,"line":155},[67,150082,177],{"emptyLinePlaceholder":176},[67,150084,150085,150088,150090],{"class":69,"line":161},[67,150086,150087],{"class":77},"student1 ",[67,150089,909],{"class":73},[67,150091,150023],{"class":77},[67,150093,150094,150097,150099],{"class":69,"line":167},[67,150095,150096],{"class":77},"student2 ",[67,150098,909],{"class":73},[67,150100,150023],{"class":77},[19,150102,150103,150106,150107,101555,150110,150113],{},[64,150104,150105],{},"Student"," 是类，",[64,150108,150109],{},"student1",[64,150111,150112],{},"student2"," 是对象。",[803,150115,150117],{"id":150116},"_113-属性","11.3 属性",[19,150119,150120],{},"属性是对象保存的数据。",[57,150122,150124],{"className":30915,"code":150123,"language":30917,"meta":62,"style":62},"class Student:\n    pass\n\n\nstudent = Student()\nstudent.name = \"小明\"\nstudent.age = 18\n\nprint(student.name)\nprint(student.age)\n",[64,150125,150126,150134,150138,150142,150146,150154,150162,150170,150174,150181],{"__ignoreMap":62},[67,150127,150128,150130,150132],{"class":69,"line":70},[67,150129,15411],{"class":73},[67,150131,8617],{"class":112},[67,150133,4459],{"class":77},[67,150135,150136],{"class":69,"line":143},[67,150137,150074],{"class":73},[67,150139,150140],{"class":69,"line":149},[67,150141,177],{"emptyLinePlaceholder":176},[67,150143,150144],{"class":69,"line":155},[67,150145,177],{"emptyLinePlaceholder":176},[67,150147,150148,150150,150152],{"class":69,"line":161},[67,150149,150018],{"class":77},[67,150151,909],{"class":73},[67,150153,150023],{"class":77},[67,150155,150156,150158,150160],{"class":69,"line":167},[67,150157,150028],{"class":77},[67,150159,909],{"class":73},[67,150161,149890],{"class":84},[67,150163,150164,150166,150168],{"class":69,"line":173},[67,150165,150037],{"class":77},[67,150167,909],{"class":73},[67,150169,147088],{"class":208},[67,150171,150172],{"class":69,"line":180},[67,150173,177],{"emptyLinePlaceholder":176},[67,150175,150176,150178],{"class":69,"line":186},[67,150177,30952],{"class":208},[67,150179,150180],{"class":77},"(student.name)\n",[67,150182,150183,150185],{"class":69,"line":444},[67,150184,30952],{"class":208},[67,150186,150187],{"class":77},"(student.age)\n",[19,150189,150190],{},"这种写法可以用，但实际项目中更推荐使用构造方法初始化属性。",[803,150192,150194],{"id":150193},"_114-方法","11.4 方法",[19,150196,150197],{},"类中的函数叫方法。",[57,150199,150200],{"className":30915,"code":149958,"language":30917,"meta":62,"style":62},[64,150201,150202,150210,150218,150246,150250,150254,150262,150270,150278],{"__ignoreMap":62},[67,150203,150204,150206,150208],{"class":69,"line":70},[67,150205,15411],{"class":73},[67,150207,8617],{"class":112},[67,150209,4459],{"class":77},[67,150211,150212,150214,150216],{"class":69,"line":143},[67,150213,31338],{"class":73},[67,150215,149909],{"class":112},[67,150217,31344],{"class":77},[67,150219,150220,150222,150224,150226,150228,150230,150232,150234,150236,150238,150240,150242,150244],{"class":69,"line":149},[67,150221,32988],{"class":208},[67,150223,864],{"class":77},[67,150225,915],{"class":73},[67,150227,149923],{"class":84},[67,150229,149989],{"class":208},[67,150231,80838],{"class":77},[67,150233,1802],{"class":208},[67,150235,149932],{"class":84},[67,150237,149989],{"class":208},[67,150239,80850],{"class":77},[67,150241,1802],{"class":208},[67,150243,149941],{"class":84},[67,150245,870],{"class":77},[67,150247,150248],{"class":69,"line":155},[67,150249,177],{"emptyLinePlaceholder":176},[67,150251,150252],{"class":69,"line":161},[67,150253,177],{"emptyLinePlaceholder":176},[67,150255,150256,150258,150260],{"class":69,"line":167},[67,150257,150018],{"class":77},[67,150259,909],{"class":73},[67,150261,150023],{"class":77},[67,150263,150264,150266,150268],{"class":69,"line":173},[67,150265,150028],{"class":77},[67,150267,909],{"class":73},[67,150269,149890],{"class":84},[67,150271,150272,150274,150276],{"class":69,"line":180},[67,150273,150037],{"class":77},[67,150275,909],{"class":73},[67,150277,147088],{"class":208},[67,150279,150280],{"class":69,"line":186},[67,150281,150046],{"class":77},[19,150283,150284,150286,150287,150289],{},[64,150285,31360],{}," 表示当前对象。调用方法时不需要手动传入 ",[64,150288,31360],{},"，Python 会自动传。",[803,150291,150293],{"id":150292},"_115-构造方法__init__","11.5 构造方法__init__",[19,150295,150296,150298],{},[64,150297,31366],{}," 在对象创建时自动执行，用于初始化属性。",[57,150300,150302],{"className":30915,"code":150301,"language":30917,"meta":62,"style":62},"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",[64,150303,150304,150312,150321,150333,150345,150356,150360,150368,150406,150410,150414,150436],{"__ignoreMap":62},[67,150305,150306,150308,150310],{"class":69,"line":70},[67,150307,15411],{"class":73},[67,150309,8617],{"class":112},[67,150311,4459],{"class":77},[67,150313,150314,150316,150318],{"class":69,"line":143},[67,150315,31338],{"class":73},[67,150317,31341],{"class":208},[67,150319,150320],{"class":77},"(self, name, age, score):\n",[67,150322,150323,150325,150328,150330],{"class":69,"line":149},[67,150324,31382],{"class":208},[67,150326,150327],{"class":77},".name ",[67,150329,909],{"class":73},[67,150331,150332],{"class":77}," name\n",[67,150334,150335,150337,150340,150342],{"class":69,"line":155},[67,150336,31382],{"class":208},[67,150338,150339],{"class":77},".age ",[67,150341,909],{"class":73},[67,150343,150344],{"class":77}," age\n",[67,150346,150347,150349,150352,150354],{"class":69,"line":161},[67,150348,31382],{"class":208},[67,150350,150351],{"class":77},".score ",[67,150353,909],{"class":73},[67,150355,2302],{"class":77},[67,150357,150358],{"class":69,"line":167},[67,150359,177],{"emptyLinePlaceholder":176},[67,150361,150362,150364,150366],{"class":69,"line":173},[67,150363,31338],{"class":73},[67,150365,149909],{"class":112},[67,150367,31344],{"class":77},[67,150369,150370,150372,150374,150376,150378,150380,150382,150384,150386,150388,150390,150392,150395,150397,150400,150402,150404],{"class":69,"line":180},[67,150371,32988],{"class":208},[67,150373,864],{"class":77},[67,150375,915],{"class":73},[67,150377,149923],{"class":84},[67,150379,149989],{"class":208},[67,150381,80838],{"class":77},[67,150383,1802],{"class":208},[67,150385,149932],{"class":84},[67,150387,149989],{"class":208},[67,150389,80850],{"class":77},[67,150391,1802],{"class":208},[67,150393,150394],{"class":84},"岁，成绩",[67,150396,149989],{"class":208},[67,150398,150399],{"class":77},".score",[67,150401,1802],{"class":208},[67,150403,257],{"class":84},[67,150405,870],{"class":77},[67,150407,150408],{"class":69,"line":186},[67,150409,177],{"emptyLinePlaceholder":176},[67,150411,150412],{"class":69,"line":444},[67,150413,177],{"emptyLinePlaceholder":176},[67,150415,150416,150418,150420,150423,150426,150428,150430,150432,150434],{"class":69,"line":2335},[67,150417,150018],{"class":77},[67,150419,909],{"class":73},[67,150421,150422],{"class":77}," Student(",[67,150424,150425],{"class":84},"\"小明\"",[67,150427,13153],{"class":77},[67,150429,1506],{"class":208},[67,150431,13153],{"class":77},[67,150433,1845],{"class":208},[67,150435,870],{"class":77},[67,150437,150438],{"class":69,"line":2340},[67,150439,150046],{"class":77},[19,150441,150442],{},"构造方法的好处：",[815,150444,150445,150448,150451],{},[818,150446,150447],{},"创建对象时必须提供必要数据。",[818,150449,150450],{},"属性初始化集中，不容易漏。",[818,150452,150453],{},"对象状态更完整。",[803,150455,150457,150458],{"id":150456},"_116-str","11.6 ",[336,150459,2026],{},[19,150461,150462,150463,28922],{},"直接打印对象时，默认输出不直观。可以定义 ",[64,150464,150465],{},"__str__",[57,150467,150469],{"className":30915,"code":150468,"language":30917,"meta":62,"style":62},"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",[64,150470,150471,150479,150488,150498,150508,150512,150521,150549,150553,150557,150573],{"__ignoreMap":62},[67,150472,150473,150475,150477],{"class":69,"line":70},[67,150474,15411],{"class":73},[67,150476,8617],{"class":112},[67,150478,4459],{"class":77},[67,150480,150481,150483,150485],{"class":69,"line":143},[67,150482,31338],{"class":73},[67,150484,31341],{"class":208},[67,150486,150487],{"class":77},"(self, name, age):\n",[67,150489,150490,150492,150494,150496],{"class":69,"line":149},[67,150491,31382],{"class":208},[67,150493,150327],{"class":77},[67,150495,909],{"class":73},[67,150497,150332],{"class":77},[67,150499,150500,150502,150504,150506],{"class":69,"line":155},[67,150501,31382],{"class":208},[67,150503,150339],{"class":77},[67,150505,909],{"class":73},[67,150507,150344],{"class":77},[67,150509,150510],{"class":69,"line":161},[67,150511,177],{"emptyLinePlaceholder":176},[67,150513,150514,150516,150519],{"class":69,"line":167},[67,150515,31338],{"class":73},[67,150517,150518],{"class":208}," __str__",[67,150520,31344],{"class":77},[67,150522,150523,150525,150528,150531,150533,150535,150537,150540,150542,150544,150546],{"class":69,"line":173},[67,150524,15469],{"class":73},[67,150526,150527],{"class":73}," f",[67,150529,150530],{"class":84},"\"Student(name=",[67,150532,149989],{"class":208},[67,150534,80838],{"class":77},[67,150536,1802],{"class":208},[67,150538,150539],{"class":84},", age=",[67,150541,149989],{"class":208},[67,150543,80850],{"class":77},[67,150545,1802],{"class":208},[67,150547,150548],{"class":84},")\"\n",[67,150550,150551],{"class":69,"line":180},[67,150552,177],{"emptyLinePlaceholder":176},[67,150554,150555],{"class":69,"line":186},[67,150556,177],{"emptyLinePlaceholder":176},[67,150558,150559,150561,150563,150565,150567,150569,150571],{"class":69,"line":444},[67,150560,150018],{"class":77},[67,150562,909],{"class":73},[67,150564,150422],{"class":77},[67,150566,150425],{"class":84},[67,150568,13153],{"class":77},[67,150570,1506],{"class":208},[67,150572,870],{"class":77},[67,150574,150575,150577],{"class":69,"line":2335},[67,150576,30952],{"class":208},[67,150578,150579],{"class":77},"(student)\n",[803,150581,150583],{"id":150582},"_117-封装","11.7 封装",[19,150585,150586],{},"封装就是把数据和方法放到类中，并控制访问方式。",[19,150588,150589],{},"Python 中以双下划线开头的属性通常视为私有属性。",[57,150591,150593],{"className":30915,"code":150592,"language":30917,"meta":62,"style":62},"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",[64,150594,150595,150604,150613,150625,150637,150641,150650,150659,150663,150673,150686,150697,150702,150713,150717,150726,150738,150749,150753,150766,150777,150781,150792,150796,150800,150818,150827,150836],{"__ignoreMap":62},[67,150596,150597,150599,150602],{"class":69,"line":70},[67,150598,15411],{"class":73},[67,150600,150601],{"class":112}," Account",[67,150603,4459],{"class":77},[67,150605,150606,150608,150610],{"class":69,"line":143},[67,150607,31338],{"class":73},[67,150609,31341],{"class":208},[67,150611,150612],{"class":77},"(self, owner, balance):\n",[67,150614,150615,150617,150620,150622],{"class":69,"line":149},[67,150616,31382],{"class":208},[67,150618,150619],{"class":77},".owner ",[67,150621,909],{"class":73},[67,150623,150624],{"class":77}," owner\n",[67,150626,150627,150629,150632,150634],{"class":69,"line":155},[67,150628,31382],{"class":208},[67,150630,150631],{"class":77},".__balance ",[67,150633,909],{"class":73},[67,150635,150636],{"class":77}," balance\n",[67,150638,150639],{"class":69,"line":161},[67,150640,177],{"emptyLinePlaceholder":176},[67,150642,150643,150645,150648],{"class":69,"line":167},[67,150644,31338],{"class":73},[67,150646,150647],{"class":112}," get_balance",[67,150649,31344],{"class":77},[67,150651,150652,150654,150656],{"class":69,"line":173},[67,150653,15469],{"class":73},[67,150655,39410],{"class":208},[67,150657,150658],{"class":77},".__balance\n",[67,150660,150661],{"class":69,"line":180},[67,150662,177],{"emptyLinePlaceholder":176},[67,150664,150665,150667,150670],{"class":69,"line":186},[67,150666,31338],{"class":73},[67,150668,150669],{"class":112}," deposit",[67,150671,150672],{"class":77},"(self, money):\n",[67,150674,150675,150677,150680,150682,150684],{"class":69,"line":444},[67,150676,3218],{"class":73},[67,150678,150679],{"class":77}," money ",[67,150681,2311],{"class":73},[67,150683,4813],{"class":208},[67,150685,4459],{"class":77},[67,150687,150688,150690,150692,150695],{"class":69,"line":2335},[67,150689,35187],{"class":208},[67,150691,864],{"class":77},[67,150693,150694],{"class":84},"\"存款金额必须大于0\"",[67,150696,870],{"class":77},[67,150698,150699],{"class":69,"line":2340},[67,150700,150701],{"class":73},"            return\n",[67,150703,150704,150706,150708,150710],{"class":69,"line":2346},[67,150705,31382],{"class":208},[67,150707,150631],{"class":77},[67,150709,10196],{"class":73},[67,150711,150712],{"class":77}," money\n",[67,150714,150715],{"class":69,"line":2351},[67,150716,177],{"emptyLinePlaceholder":176},[67,150718,150719,150721,150724],{"class":69,"line":2365},[67,150720,31338],{"class":73},[67,150722,150723],{"class":112}," withdraw",[67,150725,150672],{"class":77},[67,150727,150728,150730,150732,150734,150736],{"class":69,"line":2370},[67,150729,3218],{"class":73},[67,150731,150679],{"class":77},[67,150733,2311],{"class":73},[67,150735,4813],{"class":208},[67,150737,4459],{"class":77},[67,150739,150740,150742,150744,150747],{"class":69,"line":2376},[67,150741,35187],{"class":208},[67,150743,864],{"class":77},[67,150745,150746],{"class":84},"\"取款金额必须大于0\"",[67,150748,870],{"class":77},[67,150750,150751],{"class":69,"line":2397},[67,150752,150701],{"class":73},[67,150754,150755,150757,150759,150761,150763],{"class":69,"line":2402},[67,150756,3218],{"class":73},[67,150758,150679],{"class":77},[67,150760,1816],{"class":73},[67,150762,39410],{"class":208},[67,150764,150765],{"class":77},".__balance:\n",[67,150767,150768,150770,150772,150775],{"class":69,"line":2416},[67,150769,35187],{"class":208},[67,150771,864],{"class":77},[67,150773,150774],{"class":84},"\"余额不足\"",[67,150776,870],{"class":77},[67,150778,150779],{"class":69,"line":2421},[67,150780,150701],{"class":73},[67,150782,150783,150785,150787,150790],{"class":69,"line":2450},[67,150784,31382],{"class":208},[67,150786,150631],{"class":77},[67,150788,150789],{"class":73},"-=",[67,150791,150712],{"class":77},[67,150793,150794],{"class":69,"line":2455},[67,150795,177],{"emptyLinePlaceholder":176},[67,150797,150798],{"class":69,"line":2472},[67,150799,177],{"emptyLinePlaceholder":176},[67,150801,150802,150805,150807,150810,150812,150814,150816],{"class":69,"line":2477},[67,150803,150804],{"class":77},"account ",[67,150806,909],{"class":73},[67,150808,150809],{"class":77}," Account(",[67,150811,150425],{"class":84},[67,150813,13153],{"class":77},[67,150815,7129],{"class":208},[67,150817,870],{"class":77},[67,150819,150820,150823,150825],{"class":69,"line":2482},[67,150821,150822],{"class":77},"account.deposit(",[67,150824,2445],{"class":208},[67,150826,870],{"class":77},[67,150828,150829,150832,150834],{"class":69,"line":2487},[67,150830,150831],{"class":77},"account.withdraw(",[67,150833,1169],{"class":208},[67,150835,870],{"class":77},[67,150837,150838,150840],{"class":69,"line":2501},[67,150839,30952],{"class":208},[67,150841,150842],{"class":77},"(account.get_balance())\n",[19,150844,150845],{},"封装的意义是避免外部随意修改内部状态。",[803,150847,150849],{"id":150848},"_118-继承","11.8 继承",[19,150851,150852],{},"继承可以让子类复用父类的属性和方法。",[57,150854,150856],{"className":30915,"code":150855,"language":30917,"meta":62,"style":62},"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",[64,150857,150858,150867,150876,150887,150891,150895,150909,150918,150929,150933,150937,150947,150952],{"__ignoreMap":62},[67,150859,150860,150862,150865],{"class":69,"line":70},[67,150861,15411],{"class":73},[67,150863,150864],{"class":112}," Animal",[67,150866,4459],{"class":77},[67,150868,150869,150871,150874],{"class":69,"line":143},[67,150870,31338],{"class":73},[67,150872,150873],{"class":112}," eat",[67,150875,31344],{"class":77},[67,150877,150878,150880,150882,150885],{"class":69,"line":149},[67,150879,32988],{"class":208},[67,150881,864],{"class":77},[67,150883,150884],{"class":84},"\"吃东西\"",[67,150886,870],{"class":77},[67,150888,150889],{"class":69,"line":155},[67,150890,177],{"emptyLinePlaceholder":176},[67,150892,150893],{"class":69,"line":161},[67,150894,177],{"emptyLinePlaceholder":176},[67,150896,150897,150899,150902,150904,150907],{"class":69,"line":167},[67,150898,15411],{"class":73},[67,150900,150901],{"class":112}," Dog",[67,150903,864],{"class":77},[67,150905,150906],{"class":112},"Animal",[67,150908,31323],{"class":77},[67,150910,150911,150913,150916],{"class":69,"line":173},[67,150912,31338],{"class":73},[67,150914,150915],{"class":112}," bark",[67,150917,31344],{"class":77},[67,150919,150920,150922,150924,150927],{"class":69,"line":180},[67,150921,32988],{"class":208},[67,150923,864],{"class":77},[67,150925,150926],{"class":84},"\"汪汪\"",[67,150928,870],{"class":77},[67,150930,150931],{"class":69,"line":186},[67,150932,177],{"emptyLinePlaceholder":176},[67,150934,150935],{"class":69,"line":444},[67,150936,177],{"emptyLinePlaceholder":176},[67,150938,150939,150942,150944],{"class":69,"line":2335},[67,150940,150941],{"class":77},"dog ",[67,150943,909],{"class":73},[67,150945,150946],{"class":77}," Dog()\n",[67,150948,150949],{"class":69,"line":2340},[67,150950,150951],{"class":77},"dog.eat()\n",[67,150953,150954],{"class":69,"line":2346},[67,150955,150956],{"class":77},"dog.bark()\n",[19,150958,150959],{},"子类可以扩展新方法，也可以重写父类方法。",[803,150961,150963],{"id":150962},"_119-方法重写","11.9 方法重写",[57,150965,150967],{"className":30915,"code":150966,"language":30917,"meta":62,"style":62},"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",[64,150968,150969,150977,150986,150997,151001,151005,151017,151025,151035,151039,151043,151056,151064,151075,151079,151083,151091,151101,151105,151110],{"__ignoreMap":62},[67,150970,150971,150973,150975],{"class":69,"line":70},[67,150972,15411],{"class":73},[67,150974,150864],{"class":112},[67,150976,4459],{"class":77},[67,150978,150979,150981,150984],{"class":69,"line":143},[67,150980,31338],{"class":73},[67,150982,150983],{"class":112}," speak",[67,150985,31344],{"class":77},[67,150987,150988,150990,150992,150995],{"class":69,"line":149},[67,150989,32988],{"class":208},[67,150991,864],{"class":77},[67,150993,150994],{"class":84},"\"动物叫\"",[67,150996,870],{"class":77},[67,150998,150999],{"class":69,"line":155},[67,151000,177],{"emptyLinePlaceholder":176},[67,151002,151003],{"class":69,"line":161},[67,151004,177],{"emptyLinePlaceholder":176},[67,151006,151007,151009,151011,151013,151015],{"class":69,"line":167},[67,151008,15411],{"class":73},[67,151010,150901],{"class":112},[67,151012,864],{"class":77},[67,151014,150906],{"class":112},[67,151016,31323],{"class":77},[67,151018,151019,151021,151023],{"class":69,"line":173},[67,151020,31338],{"class":73},[67,151022,150983],{"class":112},[67,151024,31344],{"class":77},[67,151026,151027,151029,151031,151033],{"class":69,"line":180},[67,151028,32988],{"class":208},[67,151030,864],{"class":77},[67,151032,150926],{"class":84},[67,151034,870],{"class":77},[67,151036,151037],{"class":69,"line":186},[67,151038,177],{"emptyLinePlaceholder":176},[67,151040,151041],{"class":69,"line":444},[67,151042,177],{"emptyLinePlaceholder":176},[67,151044,151045,151047,151050,151052,151054],{"class":69,"line":2335},[67,151046,15411],{"class":73},[67,151048,151049],{"class":112}," Cat",[67,151051,864],{"class":77},[67,151053,150906],{"class":112},[67,151055,31323],{"class":77},[67,151057,151058,151060,151062],{"class":69,"line":2340},[67,151059,31338],{"class":73},[67,151061,150983],{"class":112},[67,151063,31344],{"class":77},[67,151065,151066,151068,151070,151073],{"class":69,"line":2346},[67,151067,32988],{"class":208},[67,151069,864],{"class":77},[67,151071,151072],{"class":84},"\"喵喵\"",[67,151074,870],{"class":77},[67,151076,151077],{"class":69,"line":2351},[67,151078,177],{"emptyLinePlaceholder":176},[67,151080,151081],{"class":69,"line":2365},[67,151082,177],{"emptyLinePlaceholder":176},[67,151084,151085,151087,151089],{"class":69,"line":2370},[67,151086,150941],{"class":77},[67,151088,909],{"class":73},[67,151090,150946],{"class":77},[67,151092,151093,151096,151098],{"class":69,"line":2376},[67,151094,151095],{"class":77},"cat ",[67,151097,909],{"class":73},[67,151099,151100],{"class":77}," Cat()\n",[67,151102,151103],{"class":69,"line":2397},[67,151104,177],{"emptyLinePlaceholder":176},[67,151106,151107],{"class":69,"line":2402},[67,151108,151109],{"class":77},"dog.speak()\n",[67,151111,151112],{"class":69,"line":2416},[67,151113,151114],{"class":77},"cat.speak()\n",[803,151116,151118],{"id":151117},"_1110-super","11.10 super",[19,151120,151121,151122,151125],{},"子类可以通过 ",[64,151123,151124],{},"super()"," 调用父类方法。",[57,151127,151129],{"className":30915,"code":151128,"language":30917,"meta":62,"style":62},"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",[64,151130,151131,151139,151148,151158,151162,151166,151178,151187,151198,151208,151212,151216,151232],{"__ignoreMap":62},[67,151132,151133,151135,151137],{"class":69,"line":70},[67,151134,15411],{"class":73},[67,151136,16286],{"class":112},[67,151138,4459],{"class":77},[67,151140,151141,151143,151145],{"class":69,"line":143},[67,151142,31338],{"class":73},[67,151144,31341],{"class":208},[67,151146,151147],{"class":77},"(self, name):\n",[67,151149,151150,151152,151154,151156],{"class":69,"line":149},[67,151151,31382],{"class":208},[67,151153,150327],{"class":77},[67,151155,909],{"class":73},[67,151157,150332],{"class":77},[67,151159,151160],{"class":69,"line":155},[67,151161,177],{"emptyLinePlaceholder":176},[67,151163,151164],{"class":69,"line":161},[67,151165,177],{"emptyLinePlaceholder":176},[67,151167,151168,151170,151172,151174,151176],{"class":69,"line":167},[67,151169,15411],{"class":73},[67,151171,8617],{"class":112},[67,151173,864],{"class":77},[67,151175,19763],{"class":112},[67,151177,31323],{"class":77},[67,151179,151180,151182,151184],{"class":69,"line":173},[67,151181,31338],{"class":73},[67,151183,31341],{"class":208},[67,151185,151186],{"class":77},"(self, name, score):\n",[67,151188,151189,151191,151193,151195],{"class":69,"line":180},[67,151190,31354],{"class":208},[67,151192,17978],{"class":77},[67,151194,31366],{"class":208},[67,151196,151197],{"class":77},"(name)\n",[67,151199,151200,151202,151204,151206],{"class":69,"line":186},[67,151201,31382],{"class":208},[67,151203,150351],{"class":77},[67,151205,909],{"class":73},[67,151207,2302],{"class":77},[67,151209,151210],{"class":69,"line":444},[67,151211,177],{"emptyLinePlaceholder":176},[67,151213,151214],{"class":69,"line":2335},[67,151215,177],{"emptyLinePlaceholder":176},[67,151217,151218,151220,151222,151224,151226,151228,151230],{"class":69,"line":2340},[67,151219,150018],{"class":77},[67,151221,909],{"class":73},[67,151223,150422],{"class":77},[67,151225,150425],{"class":84},[67,151227,13153],{"class":77},[67,151229,1845],{"class":208},[67,151231,870],{"class":77},[67,151233,151234,151236],{"class":69,"line":2346},[67,151235,30952],{"class":208},[67,151237,151238],{"class":77},"(student.name, student.score)\n",[803,151240,151242],{"id":151241},"_1111-多态","11.11 多态",[19,151244,151245],{},"多态指不同对象响应同一个方法，表现出不同结果。",[57,151247,151249],{"className":30915,"code":151248,"language":30917,"meta":62,"style":62},"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",[64,151250,151251,151259,151267,151277,151281,151285,151293,151301,151311,151315,151319,151329,151334,151338,151342,151347],{"__ignoreMap":62},[67,151252,151253,151255,151257],{"class":69,"line":70},[67,151254,15411],{"class":73},[67,151256,150901],{"class":112},[67,151258,4459],{"class":77},[67,151260,151261,151263,151265],{"class":69,"line":143},[67,151262,31338],{"class":73},[67,151264,150983],{"class":112},[67,151266,31344],{"class":77},[67,151268,151269,151271,151273,151275],{"class":69,"line":149},[67,151270,32988],{"class":208},[67,151272,864],{"class":77},[67,151274,150926],{"class":84},[67,151276,870],{"class":77},[67,151278,151279],{"class":69,"line":155},[67,151280,177],{"emptyLinePlaceholder":176},[67,151282,151283],{"class":69,"line":161},[67,151284,177],{"emptyLinePlaceholder":176},[67,151286,151287,151289,151291],{"class":69,"line":167},[67,151288,15411],{"class":73},[67,151290,151049],{"class":112},[67,151292,4459],{"class":77},[67,151294,151295,151297,151299],{"class":69,"line":173},[67,151296,31338],{"class":73},[67,151298,150983],{"class":112},[67,151300,31344],{"class":77},[67,151302,151303,151305,151307,151309],{"class":69,"line":180},[67,151304,32988],{"class":208},[67,151306,864],{"class":77},[67,151308,151072],{"class":84},[67,151310,870],{"class":77},[67,151312,151313],{"class":69,"line":186},[67,151314,177],{"emptyLinePlaceholder":176},[67,151316,151317],{"class":69,"line":444},[67,151318,177],{"emptyLinePlaceholder":176},[67,151320,151321,151323,151326],{"class":69,"line":2335},[67,151322,32484],{"class":73},[67,151324,151325],{"class":112}," make_sound",[67,151327,151328],{"class":77},"(animal):\n",[67,151330,151331],{"class":69,"line":2340},[67,151332,151333],{"class":77},"    animal.speak()\n",[67,151335,151336],{"class":69,"line":2346},[67,151337,177],{"emptyLinePlaceholder":176},[67,151339,151340],{"class":69,"line":2351},[67,151341,177],{"emptyLinePlaceholder":176},[67,151343,151344],{"class":69,"line":2365},[67,151345,151346],{"class":77},"make_sound(Dog())\n",[67,151348,151349],{"class":69,"line":2370},[67,151350,151351],{"class":77},"make_sound(Cat())\n",[19,151353,151354],{},"Python 更关注对象是否有需要的方法，而不是对象具体是什么类。",[803,151356,151358],{"id":151357},"_1112-类属性和实例属性","11.12 类属性和实例属性",[19,151360,151361],{},"实例属性属于对象：",[57,151363,151365],{"className":30915,"code":151364,"language":30917,"meta":62,"style":62},"class Student:\n    def __init__(self, name):\n        self.name = name\n",[64,151366,151367,151375,151383],{"__ignoreMap":62},[67,151368,151369,151371,151373],{"class":69,"line":70},[67,151370,15411],{"class":73},[67,151372,8617],{"class":112},[67,151374,4459],{"class":77},[67,151376,151377,151379,151381],{"class":69,"line":143},[67,151378,31338],{"class":73},[67,151380,31341],{"class":208},[67,151382,151147],{"class":77},[67,151384,151385,151387,151389,151391],{"class":69,"line":149},[67,151386,31382],{"class":208},[67,151388,150327],{"class":77},[67,151390,909],{"class":73},[67,151392,150332],{"class":77},[19,151394,151395],{},"类属性属于类，所有对象共享：",[57,151397,151399],{"className":30915,"code":151398,"language":30917,"meta":62,"style":62},"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",[64,151400,151401,151409,151419,151423,151431,151441,151445,151449,151462,151476,151480,151487,151494],{"__ignoreMap":62},[67,151402,151403,151405,151407],{"class":69,"line":70},[67,151404,15411],{"class":73},[67,151406,8617],{"class":112},[67,151408,4459],{"class":77},[67,151410,151411,151414,151416],{"class":69,"line":143},[67,151412,151413],{"class":77},"    school ",[67,151415,909],{"class":73},[67,151417,151418],{"class":84}," \"黑马学校\"\n",[67,151420,151421],{"class":69,"line":149},[67,151422,177],{"emptyLinePlaceholder":176},[67,151424,151425,151427,151429],{"class":69,"line":155},[67,151426,31338],{"class":73},[67,151428,31341],{"class":208},[67,151430,151147],{"class":77},[67,151432,151433,151435,151437,151439],{"class":69,"line":161},[67,151434,31382],{"class":208},[67,151436,150327],{"class":77},[67,151438,909],{"class":73},[67,151440,150332],{"class":77},[67,151442,151443],{"class":69,"line":167},[67,151444,177],{"emptyLinePlaceholder":176},[67,151446,151447],{"class":69,"line":173},[67,151448,177],{"emptyLinePlaceholder":176},[67,151450,151451,151454,151456,151458,151460],{"class":69,"line":180},[67,151452,151453],{"class":77},"s1 ",[67,151455,909],{"class":73},[67,151457,150422],{"class":77},[67,151459,150425],{"class":84},[67,151461,870],{"class":77},[67,151463,151464,151467,151469,151471,151474],{"class":69,"line":186},[67,151465,151466],{"class":77},"s2 ",[67,151468,909],{"class":73},[67,151470,150422],{"class":77},[67,151472,151473],{"class":84},"\"小红\"",[67,151475,870],{"class":77},[67,151477,151478],{"class":69,"line":444},[67,151479,177],{"emptyLinePlaceholder":176},[67,151481,151482,151484],{"class":69,"line":2335},[67,151483,30952],{"class":208},[67,151485,151486],{"class":77},"(s1.school)\n",[67,151488,151489,151491],{"class":69,"line":2340},[67,151490,30952],{"class":208},[67,151492,151493],{"class":77},"(s2.school)\n",[67,151495,151496,151498],{"class":69,"line":2346},[67,151497,30952],{"class":208},[67,151499,151500],{"class":77},"(Student.school)\n",[19,151502,151503],{},"如果每个对象都不同，用实例属性。如果所有对象共享，用类属性。",[803,151505,151507],{"id":151506},"_1113-类方法和静态方法","11.13 类方法和静态方法",[14,151509,151511],{"id":151510},"_11131-类方法","11.13.1 类方法",[19,151513,151514,151515,151518,151519,28922],{},"类方法使用 ",[64,151516,151517],{},"@classmethod","，第一个参数通常是 ",[64,151520,151521],{},"cls",[57,151523,151525],{"className":30915,"code":151524,"language":30917,"meta":62,"style":62},"class Student:\n    school = \"黑马学校\"\n\n    @classmethod\n    def get_school(cls):\n        return cls.school\n\n\nprint(Student.get_school())\n",[64,151526,151527,151535,151543,151547,151555,151565,151575,151579,151583],{"__ignoreMap":62},[67,151528,151529,151531,151533],{"class":69,"line":70},[67,151530,15411],{"class":73},[67,151532,8617],{"class":112},[67,151534,4459],{"class":77},[67,151536,151537,151539,151541],{"class":69,"line":143},[67,151538,151413],{"class":77},[67,151540,909],{"class":73},[67,151542,151418],{"class":84},[67,151544,151545],{"class":69,"line":149},[67,151546,177],{"emptyLinePlaceholder":176},[67,151548,151549,151552],{"class":69,"line":155},[67,151550,151551],{"class":112},"    @",[67,151553,151554],{"class":208},"classmethod\n",[67,151556,151557,151559,151562],{"class":69,"line":161},[67,151558,31338],{"class":73},[67,151560,151561],{"class":112}," get_school",[67,151563,151564],{"class":77},"(cls):\n",[67,151566,151567,151569,151572],{"class":69,"line":167},[67,151568,15469],{"class":73},[67,151570,151571],{"class":208}," cls",[67,151573,151574],{"class":77},".school\n",[67,151576,151577],{"class":69,"line":173},[67,151578,177],{"emptyLinePlaceholder":176},[67,151580,151581],{"class":69,"line":180},[67,151582,177],{"emptyLinePlaceholder":176},[67,151584,151585,151587],{"class":69,"line":186},[67,151586,30952],{"class":208},[67,151588,151589],{"class":77},"(Student.get_school())\n",[14,151591,151593],{"id":151592},"_11132-静态方法","11.13.2 静态方法",[19,151595,151596,151597,151600],{},"静态方法使用 ",[64,151598,151599],{},"@staticmethod","，不需要访问实例和类。",[57,151602,151604],{"className":30915,"code":151603,"language":30917,"meta":62,"style":62},"class MathUtils:\n    @staticmethod\n    def add(a, b):\n        return a + b\n\n\nprint(MathUtils.add(1, 2))\n",[64,151605,151606,151615,151622,151631,151642,151646,151650],{"__ignoreMap":62},[67,151607,151608,151610,151613],{"class":69,"line":70},[67,151609,15411],{"class":73},[67,151611,151612],{"class":112}," MathUtils",[67,151614,4459],{"class":77},[67,151616,151617,151619],{"class":69,"line":143},[67,151618,151551],{"class":112},[67,151620,151621],{"class":208},"staticmethod\n",[67,151623,151624,151626,151628],{"class":69,"line":149},[67,151625,31338],{"class":73},[67,151627,5928],{"class":112},[67,151629,151630],{"class":77},"(a, b):\n",[67,151632,151633,151635,151637,151639],{"class":69,"line":155},[67,151634,15469],{"class":73},[67,151636,11587],{"class":77},[67,151638,1338],{"class":73},[67,151640,151641],{"class":77}," b\n",[67,151643,151644],{"class":69,"line":161},[67,151645,177],{"emptyLinePlaceholder":176},[67,151647,151648],{"class":69,"line":167},[67,151649,177],{"emptyLinePlaceholder":176},[67,151651,151652,151654,151657,151659,151661,151663],{"class":69,"line":173},[67,151653,30952],{"class":208},[67,151655,151656],{"class":77},"(MathUtils.add(",[67,151658,1077],{"class":208},[67,151660,13153],{"class":77},[67,151662,939],{"class":208},[67,151664,31034],{"class":77},[19,151666,151667],{},"静态方法本质上是放在类命名空间里的普通函数。",[803,151669,151671],{"id":151670},"_1114-dataclass","11.14 dataclass",[19,151673,151674,151677],{},[64,151675,151676],{},"dataclass"," 可以快速定义主要用于保存数据的类。",[57,151679,151681],{"className":30915,"code":151680,"language":30917,"meta":62,"style":62},"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",[64,151682,151683,151695,151699,151703,151708,151716,151724,151732,151740,151744,151748,151768],{"__ignoreMap":62},[67,151684,151685,151687,151690,151692],{"class":69,"line":70},[67,151686,31274],{"class":73},[67,151688,151689],{"class":77}," dataclasses ",[67,151691,30929],{"class":73},[67,151693,151694],{"class":77}," dataclass\n",[67,151696,151697],{"class":69,"line":143},[67,151698,177],{"emptyLinePlaceholder":176},[67,151700,151701],{"class":69,"line":149},[67,151702,177],{"emptyLinePlaceholder":176},[67,151704,151705],{"class":69,"line":155},[67,151706,151707],{"class":112},"@dataclass\n",[67,151709,151710,151712,151714],{"class":69,"line":161},[67,151711,15411],{"class":73},[67,151713,8617],{"class":112},[67,151715,4459],{"class":77},[67,151717,151718,151721],{"class":69,"line":167},[67,151719,151720],{"class":77},"    name: ",[67,151722,151723],{"class":208},"str\n",[67,151725,151726,151729],{"class":69,"line":173},[67,151727,151728],{"class":77},"    age: ",[67,151730,151731],{"class":208},"int\n",[67,151733,151734,151737],{"class":69,"line":180},[67,151735,151736],{"class":77},"    score: ",[67,151738,151739],{"class":208},"float\n",[67,151741,151742],{"class":69,"line":186},[67,151743,177],{"emptyLinePlaceholder":176},[67,151745,151746],{"class":69,"line":444},[67,151747,177],{"emptyLinePlaceholder":176},[67,151749,151750,151752,151754,151756,151758,151760,151762,151764,151766],{"class":69,"line":2335},[67,151751,150018],{"class":77},[67,151753,909],{"class":73},[67,151755,150422],{"class":77},[67,151757,150425],{"class":84},[67,151759,13153],{"class":77},[67,151761,1506],{"class":208},[67,151763,13153],{"class":77},[67,151765,1845],{"class":208},[67,151767,870],{"class":77},[67,151769,151770,151772],{"class":69,"line":2340},[67,151771,30952],{"class":208},[67,151773,150579],{"class":77},[19,151775,151776,151777,1072,151779,151782],{},"它会自动生成 ",[64,151778,31366],{},[64,151780,151781],{},"__repr__"," 等方法。适合数据模型类。",[803,151784,151786],{"id":151785},"_1115-小案例学生类","11.15 小案例：学生类",[57,151788,151790],{"className":30915,"code":151789,"language":30917,"meta":62,"style":62},"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",[64,151791,151792,151800,151809,151821,151831,151841,151851,151855,151864,151877,151881,151890,151896,151908,151920,151932,151944,151948,151952,151958,151968,151977,151987,151995,152003,152012,152016,152020,152028,152064,152068,152072,152097,152104],{"__ignoreMap":62},[67,151793,151794,151796,151798],{"class":69,"line":70},[67,151795,15411],{"class":73},[67,151797,8617],{"class":112},[67,151799,4459],{"class":77},[67,151801,151802,151804,151806],{"class":69,"line":143},[67,151803,31338],{"class":73},[67,151805,31341],{"class":208},[67,151807,151808],{"class":77},"(self, student_id, name, age, score):\n",[67,151810,151811,151813,151816,151818],{"class":69,"line":149},[67,151812,31382],{"class":208},[67,151814,151815],{"class":77},".student_id ",[67,151817,909],{"class":73},[67,151819,151820],{"class":77}," student_id\n",[67,151822,151823,151825,151827,151829],{"class":69,"line":155},[67,151824,31382],{"class":208},[67,151826,150327],{"class":77},[67,151828,909],{"class":73},[67,151830,150332],{"class":77},[67,151832,151833,151835,151837,151839],{"class":69,"line":161},[67,151834,31382],{"class":208},[67,151836,150339],{"class":77},[67,151838,909],{"class":73},[67,151840,150344],{"class":77},[67,151842,151843,151845,151847,151849],{"class":69,"line":167},[67,151844,31382],{"class":208},[67,151846,150351],{"class":77},[67,151848,909],{"class":73},[67,151850,2302],{"class":77},[67,151852,151853],{"class":69,"line":173},[67,151854,177],{"emptyLinePlaceholder":176},[67,151856,151857,151859,151862],{"class":69,"line":180},[67,151858,31338],{"class":73},[67,151860,151861],{"class":112}," is_passed",[67,151863,31344],{"class":77},[67,151865,151866,151868,151870,151872,151874],{"class":69,"line":186},[67,151867,15469],{"class":73},[67,151869,39410],{"class":208},[67,151871,150351],{"class":77},[67,151873,2433],{"class":73},[67,151875,151876],{"class":208}," 60\n",[67,151878,151879],{"class":69,"line":444},[67,151880,177],{"emptyLinePlaceholder":176},[67,151882,151883,151885,151888],{"class":69,"line":2335},[67,151884,31338],{"class":73},[67,151886,151887],{"class":112}," to_dict",[67,151889,31344],{"class":77},[67,151891,151892,151894],{"class":69,"line":2340},[67,151893,15469],{"class":73},[67,151895,16289],{"class":77},[67,151897,151898,151901,151903,151905],{"class":69,"line":2346},[67,151899,151900],{"class":84},"            \"student_id\"",[67,151902,51974],{"class":77},[67,151904,31360],{"class":208},[67,151906,151907],{"class":77},".student_id,\n",[67,151909,151910,151913,151915,151917],{"class":69,"line":2351},[67,151911,151912],{"class":84},"            \"name\"",[67,151914,51974],{"class":77},[67,151916,31360],{"class":208},[67,151918,151919],{"class":77},".name,\n",[67,151921,151922,151925,151927,151929],{"class":69,"line":2365},[67,151923,151924],{"class":84},"            \"age\"",[67,151926,51974],{"class":77},[67,151928,31360],{"class":208},[67,151930,151931],{"class":77},".age,\n",[67,151933,151934,151937,151939,151941],{"class":69,"line":2370},[67,151935,151936],{"class":84},"            \"score\"",[67,151938,51974],{"class":77},[67,151940,31360],{"class":208},[67,151942,151943],{"class":77},".score,\n",[67,151945,151946],{"class":69,"line":2376},[67,151947,3250],{"class":77},[67,151949,151950],{"class":69,"line":2397},[67,151951,177],{"emptyLinePlaceholder":176},[67,151953,151954,151956],{"class":69,"line":2402},[67,151955,151551],{"class":112},[67,151957,151554],{"class":208},[67,151959,151960,151962,151965],{"class":69,"line":2416},[67,151961,31338],{"class":73},[67,151963,151964],{"class":112}," from_dict",[67,151966,151967],{"class":77},"(cls, data):\n",[67,151969,151970,151972,151974],{"class":69,"line":2421},[67,151971,15469],{"class":73},[67,151973,151571],{"class":208},[67,151975,151976],{"class":77},"(\n",[67,151978,151979,151982,151985],{"class":69,"line":2450},[67,151980,151981],{"class":77},"            data[",[67,151983,151984],{"class":84},"\"student_id\"",[67,151986,88373],{"class":77},[67,151988,151989,151991,151993],{"class":69,"line":2455},[67,151990,151981],{"class":77},[67,151992,63216],{"class":84},[67,151994,88373],{"class":77},[67,151996,151997,151999,152001],{"class":69,"line":2472},[67,151998,151981],{"class":77},[67,152000,69661],{"class":84},[67,152002,88373],{"class":77},[67,152004,152005,152007,152010],{"class":69,"line":2477},[67,152006,151981],{"class":77},[67,152008,152009],{"class":84},"\"score\"",[67,152011,88373],{"class":77},[67,152013,152014],{"class":69,"line":2482},[67,152015,38663],{"class":77},[67,152017,152018],{"class":69,"line":2487},[67,152019,177],{"emptyLinePlaceholder":176},[67,152021,152022,152024,152026],{"class":69,"line":2501},[67,152023,31338],{"class":73},[67,152025,150518],{"class":208},[67,152027,31344],{"class":77},[67,152029,152030,152032,152034,152036,152038,152041,152043,152046,152048,152050,152052,152054,152056,152058,152060,152062],{"class":69,"line":2506},[67,152031,15469],{"class":73},[67,152033,150527],{"class":73},[67,152035,257],{"class":84},[67,152037,149989],{"class":208},[67,152039,152040],{"class":77},".student_id",[67,152042,1802],{"class":208},[67,152044,152045],{"class":208}," {self",[67,152047,80838],{"class":77},[67,152049,1802],{"class":208},[67,152051,152045],{"class":208},[67,152053,80850],{"class":77},[67,152055,1802],{"class":208},[67,152057,152045],{"class":208},[67,152059,150399],{"class":77},[67,152061,1802],{"class":208},[67,152063,25842],{"class":84},[67,152065,152066],{"class":69,"line":3298},[67,152067,177],{"emptyLinePlaceholder":176},[67,152069,152070],{"class":69,"line":3312},[67,152071,177],{"emptyLinePlaceholder":176},[67,152073,152074,152076,152078,152080,152083,152085,152087,152089,152091,152093,152095],{"class":69,"line":3320},[67,152075,150018],{"class":77},[67,152077,909],{"class":73},[67,152079,150422],{"class":77},[67,152081,152082],{"class":84},"\"001\"",[67,152084,13153],{"class":77},[67,152086,150425],{"class":84},[67,152088,13153],{"class":77},[67,152090,1506],{"class":208},[67,152092,13153],{"class":77},[67,152094,1845],{"class":208},[67,152096,870],{"class":77},[67,152098,152099,152101],{"class":69,"line":3325},[67,152100,30952],{"class":208},[67,152102,152103],{"class":77},"(student.is_passed())\n",[67,152105,152106,152108],{"class":69,"line":3331},[67,152107,30952],{"class":208},[67,152109,152110],{"class":77},"(student.to_dict())\n",[19,152112,152113,101555,152116,152119],{},[64,152114,152115],{},"to_dict()",[64,152117,152118],{},"from_dict()"," 适合对象与 JSON 数据之间转换。",[803,152121,152123],{"id":152122},"_1116-易错点","11.16 易错点",[815,152125,152126,152132,152138,152143,152146,152149],{},[818,152127,152128,152129,28922],{},"类名推荐使用大驼峰，如 ",[64,152130,152131],{},"StudentManager",[818,152133,152134,152135,152137],{},"方法第一个参数必须写 ",[64,152136,31360],{},"，调用时不用传。",[818,152139,152140,152142],{},[64,152141,31366],{}," 不是普通方法，它在创建对象时自动执行。",[818,152144,152145],{},"私有属性不是绝对安全，只是约定和名称改写。",[818,152147,152148],{},"不要为了面向对象而面向对象，简单脚本用函数就够。",[818,152150,152151],{},"类中方法太多时，说明职责可能过重。",[803,152153,152155],{"id":152154},"_1117-本章练习","11.17 本章练习",[815,152157,152158,152164,152170,152175,152188],{},[818,152159,152160,152161,152163],{},"定义 ",[64,152162,150105],{}," 类，包含姓名、年龄、成绩和自我介绍方法。",[818,152165,152160,152166,152169],{},[64,152167,152168],{},"Account"," 类，实现存款、取款、查询余额。",[818,152171,152160,152172,152174],{},[64,152173,17943],{}," 类，计算圆的周长和面积。",[818,152176,152160,152177,1072,152180,152183,152184,152187],{},[64,152178,152179],{},"Dog",[64,152181,152182],{},"Cat"," 类，并用同一个函数调用它们的 ",[64,152185,152186],{},"speak()"," 方法。",[818,152189,104903,152190,152192,152193,28922],{},[64,152191,151676],{}," 定义一个商品类 ",[64,152194,152195],{},"Product",[779,152197,152198],{},"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":62,"searchDepth":143,"depth":143,"links":152200},[152201,152202,152203,152204,152205,152206,152208,152209,152210,152211,152212,152213,152214,152218,152219,152220,152221],{"id":149869,"depth":143,"text":149870},{"id":150052,"depth":143,"text":150053},{"id":150116,"depth":143,"text":150117},{"id":150193,"depth":143,"text":150194},{"id":150292,"depth":143,"text":150293},{"id":150456,"depth":143,"text":152207},"11.6 str",{"id":150582,"depth":143,"text":150583},{"id":150848,"depth":143,"text":150849},{"id":150962,"depth":143,"text":150963},{"id":151117,"depth":143,"text":151118},{"id":151241,"depth":143,"text":151242},{"id":151357,"depth":143,"text":151358},{"id":151506,"depth":143,"text":151507,"children":152215},[152216,152217],{"id":151510,"depth":149,"text":151511},{"id":151592,"depth":149,"text":151593},{"id":151670,"depth":143,"text":151671},{"id":151785,"depth":143,"text":151786},{"id":152122,"depth":143,"text":152123},{"id":152154,"depth":143,"text":152155},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch11",{"title":149861,"description":24093},"wiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础","jI-8dVPoe9zfDV8hNTDJz4nf951g6PNIKIqDAy4hYic",{"id":152228,"title":152229,"body":152230,"description":24093,"extension":787,"meta":155543,"navigation":176,"path":155544,"seo":155545,"stem":155546,"__hash__":155547},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线.md","12. 综合案例与复习路线",{"type":7,"value":152231,"toc":155519},[152232,152235,152239,152242,152245,152274,152277,152285,152289,152293,152296,152319,152322,152328,152332,153778,153781,153802,153806,153809,153821,153824,154008,154011,154137,154140,154144,154148,154284,154288,154374,154378,154460,154464,154501,154505,154694,154698,154701,154931,154935,154938,155119,155122,155126,155129,155135,155138,155164,155168,155171,155185,155188,155213,155216,155230,155233,155250,155253,155270,155273,155290,155294,155320,155324,155347,155351,155354,155356,155362,155364,155385,155388,155394,155400,155404,155407,155483,155486,155490,155516],[10,152233,152229],{"id":152234},"_12-综合案例与复习路线",[803,152236,152238],{"id":152237},"_121-综合项目应该练什么","12.1 综合项目应该练什么",[19,152240,152241],{},"学完基础语法后，不要只刷零散语法题，应该做小项目，把知识串起来。",[19,152243,152244],{},"一个合格的入门综合项目最好覆盖：",[815,152246,152247,152250,152253,152256,152259,152262,152265,152268,152271],{},[818,152248,152249],{},"输入输出。",[818,152251,152252],{},"判断和循环。",[818,152254,152255],{},"函数拆分。",[818,152257,152258],{},"列表、字典等容器。",[818,152260,152261],{},"文件持久化。",[818,152263,152264],{},"异常处理。",[818,152266,152267],{},"模块拆分。",[818,152269,152270],{},"可选：面向对象。",[818,152272,152273],{},"可选：数据可视化。",[19,152275,152276],{},"本章整理两个方向：",[815,152278,152279,152282],{},[818,152280,152281],{},"学生管理系统。",[818,152283,152284],{},"销售数据统计和可视化。",[803,152286,152288],{"id":152287},"_122-项目一学生管理系统","12.2 项目一：学生管理系统",[14,152290,152292],{"id":152291},"_1221-需求","12.2.1 需求",[19,152294,152295],{},"实现一个命令行学生管理系统：",[815,152297,152298,152301,152304,152307,152310,152313,152316],{},[818,152299,152300],{},"添加学生。",[818,152302,152303],{},"删除学生。",[818,152305,152306],{},"修改学生。",[818,152308,152309],{},"查询学生。",[818,152311,152312],{},"显示所有学生。",[818,152314,152315],{},"保存到 JSON 文件。",[818,152317,152318],{},"程序启动时自动读取 JSON 文件。",[19,152320,152321],{},"学生字段：",[57,152323,152326],{"className":152324,"code":152325,"language":5906,"meta":62},[5904],"学号 student_id\n姓名 name\n年龄 age\n成绩 score\n",[64,152327,152325],{"__ignoreMap":62},[803,152329,152331],{"id":152330},"_123-函数版学生管理系统","12.3 函数版学生管理系统",[57,152333,152335],{"className":30915,"code":152334,"language":30917,"meta":62,"style":62},"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",[64,152336,152337,152343,152353,152357,152371,152375,152379,152388,152400,152406,152410,152416,152447,152457,152464,152475,152481,152485,152489,152499,152530,152556,152560,152564,152573,152584,152595,152606,152617,152628,152639,152650,152654,152658,152668,152680,152696,152703,152710,152714,152718,152728,152736,152743,152756,152766,152777,152781,152785,152794,152802,152808,152820,152828,152839,152843,152847,152856,152872,152876,152883,152894,152899,152903,152919,152934,152949,152953,152958,152966,152974,152982,152990,152994,152999,153010,153014,153018,153027,153042,153052,153056,153068,153079,153083,153087,153092,153096,153107,153111,153115,153124,153139,153147,153151,153163,153173,153177,153181,153196,153209,153222,153226,153239,153251,153263,153267,153271,153282,153286,153290,153299,153314,153322,153326,153338,153348,153352,153356,153361,153365,153369,153379,153385,153407,153426,153445,153464,153469,153473,153477,153486,153494,153505,153509,153513,153539,153549,153554,153558,153562,153570,153580,153584,153592,153597,153613,153617,153631,153636,153650,153655,153668,153673,153686,153691,153704,153709,153722,153733,153737,153743,153754,153758,153762,153774],{"__ignoreMap":62},[67,152338,152339,152341],{"class":69,"line":70},[67,152340,30929],{"class":73},[67,152342,147628],{"class":77},[67,152344,152345,152347,152349,152351],{"class":69,"line":143},[67,152346,31274],{"class":73},[67,152348,108848],{"class":77},[67,152350,30929],{"class":73},[67,152352,108853],{"class":77},[67,152354,152355],{"class":69,"line":149},[67,152356,177],{"emptyLinePlaceholder":176},[67,152358,152359,152362,152364,152366,152369],{"class":69,"line":155},[67,152360,152361],{"class":208},"DATA_FILE",[67,152363,14282],{"class":73},[67,152365,109082],{"class":77},[67,152367,152368],{"class":84},"\"students.json\"",[67,152370,870],{"class":77},[67,152372,152373],{"class":69,"line":161},[67,152374,177],{"emptyLinePlaceholder":176},[67,152376,152377],{"class":69,"line":167},[67,152378,177],{"emptyLinePlaceholder":176},[67,152380,152381,152383,152386],{"class":69,"line":173},[67,152382,32484],{"class":73},[67,152384,152385],{"class":112}," load_students",[67,152387,32490],{"class":77},[67,152389,152390,152392,152394,152397],{"class":69,"line":180},[67,152391,3821],{"class":73},[67,152393,39467],{"class":73},[67,152395,152396],{"class":208}," DATA_FILE",[67,152398,152399],{"class":77},".exists():\n",[67,152401,152402,152404],{"class":69,"line":186},[67,152403,15469],{"class":73},[67,152405,52375],{"class":77},[67,152407,152408],{"class":69,"line":444},[67,152409,177],{"emptyLinePlaceholder":176},[67,152411,152412,152414],{"class":69,"line":2335},[67,152413,126321],{"class":73},[67,152415,4459],{"class":77},[67,152417,152418,152421,152423,152425,152427,152429,152431,152433,152435,152437,152439,152441,152443,152445],{"class":69,"line":2340},[67,152419,152420],{"class":73},"        with",[67,152422,147328],{"class":208},[67,152424,864],{"class":77},[67,152426,152361],{"class":208},[67,152428,13153],{"class":77},[67,152430,147338],{"class":84},[67,152432,13153],{"class":77},[67,152434,147343],{"class":5935},[67,152436,909],{"class":73},[67,152438,147348],{"class":84},[67,152440,14432],{"class":77},[67,152442,31920],{"class":73},[67,152444,148690],{"class":5935},[67,152446,4459],{"class":77},[67,152448,152449,152451,152453,152455],{"class":69,"line":2346},[67,152450,16449],{"class":73},[67,152452,148701],{"class":77},[67,152454,45891],{"class":5935},[67,152456,870],{"class":77},[67,152458,152459,152461],{"class":69,"line":2351},[67,152460,126349],{"class":73},[67,152462,152463],{"class":77}," json.JSONDecodeError:\n",[67,152465,152466,152468,152470,152473],{"class":69,"line":2365},[67,152467,32988],{"class":208},[67,152469,864],{"class":77},[67,152471,152472],{"class":84},"\"数据文件格式错误，已使用空数据启动\"",[67,152474,870],{"class":77},[67,152476,152477,152479],{"class":69,"line":2370},[67,152478,15469],{"class":73},[67,152480,52375],{"class":77},[67,152482,152483],{"class":69,"line":2376},[67,152484,177],{"emptyLinePlaceholder":176},[67,152486,152487],{"class":69,"line":2397},[67,152488,177],{"emptyLinePlaceholder":176},[67,152490,152491,152493,152496],{"class":69,"line":2402},[67,152492,32484],{"class":73},[67,152494,152495],{"class":112}," save_students",[67,152497,152498],{"class":77},"(students):\n",[67,152500,152501,152503,152505,152507,152509,152511,152514,152516,152518,152520,152522,152524,152526,152528],{"class":69,"line":2416},[67,152502,34715],{"class":73},[67,152504,147328],{"class":208},[67,152506,864],{"class":77},[67,152508,152361],{"class":208},[67,152510,13153],{"class":77},[67,152512,152513],{"class":84},"\"w\"",[67,152515,13153],{"class":77},[67,152517,147343],{"class":5935},[67,152519,909],{"class":73},[67,152521,147348],{"class":84},[67,152523,14432],{"class":77},[67,152525,31920],{"class":73},[67,152527,148690],{"class":5935},[67,152529,4459],{"class":77},[67,152531,152532,152535,152537,152539,152541,152543,152545,152547,152550,152552,152554],{"class":69,"line":2421},[67,152533,152534],{"class":77},"        json.dump(students, ",[67,152536,45891],{"class":5935},[67,152538,13153],{"class":77},[67,152540,147674],{"class":5935},[67,152542,909],{"class":73},[67,152544,34524],{"class":208},[67,152546,13153],{"class":77},[67,152548,152549],{"class":5935},"indent",[67,152551,909],{"class":73},[67,152553,939],{"class":208},[67,152555,870],{"class":77},[67,152557,152558],{"class":69,"line":2450},[67,152559,177],{"emptyLinePlaceholder":176},[67,152561,152562],{"class":69,"line":2455},[67,152563,177],{"emptyLinePlaceholder":176},[67,152565,152566,152568,152571],{"class":69,"line":2472},[67,152567,32484],{"class":73},[67,152569,152570],{"class":112}," show_menu",[67,152572,32490],{"class":77},[67,152574,152575,152577,152579,152582],{"class":69,"line":2477},[67,152576,31836],{"class":208},[67,152578,864],{"class":77},[67,152580,152581],{"class":84},"\"====== 学生管理系统 ======\"",[67,152583,870],{"class":77},[67,152585,152586,152588,152590,152593],{"class":69,"line":2482},[67,152587,31836],{"class":208},[67,152589,864],{"class":77},[67,152591,152592],{"class":84},"\"1. 添加学生\"",[67,152594,870],{"class":77},[67,152596,152597,152599,152601,152604],{"class":69,"line":2487},[67,152598,31836],{"class":208},[67,152600,864],{"class":77},[67,152602,152603],{"class":84},"\"2. 删除学生\"",[67,152605,870],{"class":77},[67,152607,152608,152610,152612,152615],{"class":69,"line":2501},[67,152609,31836],{"class":208},[67,152611,864],{"class":77},[67,152613,152614],{"class":84},"\"3. 修改学生\"",[67,152616,870],{"class":77},[67,152618,152619,152621,152623,152626],{"class":69,"line":2506},[67,152620,31836],{"class":208},[67,152622,864],{"class":77},[67,152624,152625],{"class":84},"\"4. 查询学生\"",[67,152627,870],{"class":77},[67,152629,152630,152632,152634,152637],{"class":69,"line":3298},[67,152631,31836],{"class":208},[67,152633,864],{"class":77},[67,152635,152636],{"class":84},"\"5. 显示所有学生\"",[67,152638,870],{"class":77},[67,152640,152641,152643,152645,152648],{"class":69,"line":3312},[67,152642,31836],{"class":208},[67,152644,864],{"class":77},[67,152646,152647],{"class":84},"\"0. 退出系统\"",[67,152649,870],{"class":77},[67,152651,152652],{"class":69,"line":3320},[67,152653,177],{"emptyLinePlaceholder":176},[67,152655,152656],{"class":69,"line":3325},[67,152657,177],{"emptyLinePlaceholder":176},[67,152659,152660,152662,152665],{"class":69,"line":3331},[67,152661,32484],{"class":73},[67,152663,152664],{"class":112}," find_student",[67,152666,152667],{"class":77},"(students, student_id):\n",[67,152669,152670,152672,152675,152677],{"class":69,"line":3337},[67,152671,3921],{"class":73},[67,152673,152674],{"class":77}," student ",[67,152676,81],{"class":73},[67,152678,152679],{"class":77}," students:\n",[67,152681,152682,152684,152687,152689,152691,152693],{"class":69,"line":3342},[67,152683,3218],{"class":73},[67,152685,152686],{"class":77}," student[",[67,152688,151984],{"class":84},[67,152690,5162],{"class":77},[67,152692,3670],{"class":73},[67,152694,152695],{"class":77}," student_id:\n",[67,152697,152698,152700],{"class":69,"line":8667},[67,152699,16449],{"class":73},[67,152701,152702],{"class":77}," student\n",[67,152704,152705,152707],{"class":69,"line":8691},[67,152706,4810],{"class":73},[67,152708,152709],{"class":208}," None\n",[67,152711,152712],{"class":69,"line":8696},[67,152713,177],{"emptyLinePlaceholder":176},[67,152715,152716],{"class":69,"line":8702},[67,152717,177],{"emptyLinePlaceholder":176},[67,152719,152720,152722,152725],{"class":69,"line":8729},[67,152721,32484],{"class":73},[67,152723,152724],{"class":112}," input_int",[67,152726,152727],{"class":77},"(prompt):\n",[67,152729,152730,152732,152734],{"class":69,"line":8734},[67,152731,2973],{"class":73},[67,152733,95829],{"class":208},[67,152735,4459],{"class":77},[67,152737,152738,152741],{"class":69,"line":8740},[67,152739,152740],{"class":73},"        try",[67,152742,4459],{"class":77},[67,152744,152745,152747,152749,152751,152753],{"class":69,"line":8752},[67,152746,16449],{"class":73},[67,152748,3104],{"class":208},[67,152750,864],{"class":77},[67,152752,54358],{"class":208},[67,152754,152755],{"class":77},"(prompt))\n",[67,152757,152758,152761,152764],{"class":69,"line":8764},[67,152759,152760],{"class":73},"        except",[67,152762,152763],{"class":208}," ValueError",[67,152765,4459],{"class":77},[67,152767,152768,152770,152772,152775],{"class":69,"line":8776},[67,152769,35187],{"class":208},[67,152771,864],{"class":77},[67,152773,152774],{"class":84},"\"请输入整数\"",[67,152776,870],{"class":77},[67,152778,152779],{"class":69,"line":10435},[67,152780,177],{"emptyLinePlaceholder":176},[67,152782,152783],{"class":69,"line":10459},[67,152784,177],{"emptyLinePlaceholder":176},[67,152786,152787,152789,152792],{"class":69,"line":10482},[67,152788,32484],{"class":73},[67,152790,152791],{"class":112}," input_float",[67,152793,152727],{"class":77},[67,152795,152796,152798,152800],{"class":69,"line":10506},[67,152797,2973],{"class":73},[67,152799,95829],{"class":208},[67,152801,4459],{"class":77},[67,152803,152804,152806],{"class":69,"line":10511},[67,152805,152740],{"class":73},[67,152807,4459],{"class":77},[67,152809,152810,152812,152814,152816,152818],{"class":69,"line":10516},[67,152811,16449],{"class":73},[67,152813,110334],{"class":208},[67,152815,864],{"class":77},[67,152817,54358],{"class":208},[67,152819,152755],{"class":77},[67,152821,152822,152824,152826],{"class":69,"line":10521},[67,152823,152760],{"class":73},[67,152825,152763],{"class":208},[67,152827,4459],{"class":77},[67,152829,152830,152832,152834,152837],{"class":69,"line":10530},[67,152831,35187],{"class":208},[67,152833,864],{"class":77},[67,152835,152836],{"class":84},"\"请输入数字\"",[67,152838,870],{"class":77},[67,152840,152841],{"class":69,"line":10535},[67,152842,177],{"emptyLinePlaceholder":176},[67,152844,152845],{"class":69,"line":10541},[67,152846,177],{"emptyLinePlaceholder":176},[67,152848,152849,152851,152854],{"class":69,"line":10562},[67,152850,32484],{"class":73},[67,152852,152853],{"class":112}," add_student",[67,152855,152498],{"class":77},[67,152857,152858,152861,152863,152865,152867,152870],{"class":69,"line":10568},[67,152859,152860],{"class":77},"    student_id ",[67,152862,909],{"class":73},[67,152864,61142],{"class":208},[67,152866,864],{"class":77},[67,152868,152869],{"class":84},"\"请输入学号:\"",[67,152871,870],{"class":77},[67,152873,152874],{"class":69,"line":10582},[67,152875,177],{"emptyLinePlaceholder":176},[67,152877,152878,152880],{"class":69,"line":10588},[67,152879,3821],{"class":73},[67,152881,152882],{"class":77}," find_student(students, student_id):\n",[67,152884,152885,152887,152889,152892],{"class":69,"line":10615},[67,152886,32988],{"class":208},[67,152888,864],{"class":77},[67,152890,152891],{"class":84},"\"学号已存在\"",[67,152893,870],{"class":77},[67,152895,152896],{"class":69,"line":10624},[67,152897,152898],{"class":73},"        return\n",[67,152900,152901],{"class":69,"line":10630},[67,152902,177],{"emptyLinePlaceholder":176},[67,152904,152905,152908,152910,152912,152914,152917],{"class":69,"line":10638},[67,152906,152907],{"class":77},"    name ",[67,152909,909],{"class":73},[67,152911,61142],{"class":208},[67,152913,864],{"class":77},[67,152915,152916],{"class":84},"\"请输入姓名:\"",[67,152918,870],{"class":77},[67,152920,152921,152924,152926,152929,152932],{"class":69,"line":10643},[67,152922,152923],{"class":77},"    age ",[67,152925,909],{"class":73},[67,152927,152928],{"class":77}," input_int(",[67,152930,152931],{"class":84},"\"请输入年龄:\"",[67,152933,870],{"class":77},[67,152935,152936,152939,152941,152944,152947],{"class":69,"line":17321},[67,152937,152938],{"class":77},"    score ",[67,152940,909],{"class":73},[67,152942,152943],{"class":77}," input_float(",[67,152945,152946],{"class":84},"\"请输入成绩:\"",[67,152948,870],{"class":77},[67,152950,152951],{"class":69,"line":17327},[67,152952,177],{"emptyLinePlaceholder":176},[67,152954,152955],{"class":69,"line":17350},[67,152956,152957],{"class":77},"    students.append({\n",[67,152959,152960,152963],{"class":69,"line":17356},[67,152961,152962],{"class":84},"        \"student_id\"",[67,152964,152965],{"class":77},": student_id,\n",[67,152967,152968,152971],{"class":69,"line":17379},[67,152969,152970],{"class":84},"        \"name\"",[67,152972,152973],{"class":77},": name,\n",[67,152975,152976,152979],{"class":69,"line":17393},[67,152977,152978],{"class":84},"        \"age\"",[67,152980,152981],{"class":77},": age,\n",[67,152983,152984,152987],{"class":69,"line":17413},[67,152985,152986],{"class":84},"        \"score\"",[67,152988,152989],{"class":77},": score,\n",[67,152991,152992],{"class":69,"line":17419},[67,152993,33998],{"class":77},[67,152995,152996],{"class":69,"line":17430},[67,152997,152998],{"class":77},"    save_students(students)\n",[67,153000,153001,153003,153005,153008],{"class":69,"line":17453},[67,153002,31836],{"class":208},[67,153004,864],{"class":77},[67,153006,153007],{"class":84},"\"添加成功\"",[67,153009,870],{"class":77},[67,153011,153012],{"class":69,"line":17475},[67,153013,177],{"emptyLinePlaceholder":176},[67,153015,153016],{"class":69,"line":17480},[67,153017,177],{"emptyLinePlaceholder":176},[67,153019,153020,153022,153025],{"class":69,"line":17486},[67,153021,32484],{"class":73},[67,153023,153024],{"class":112}," delete_student",[67,153026,152498],{"class":77},[67,153028,153029,153031,153033,153035,153037,153040],{"class":69,"line":17500},[67,153030,152860],{"class":77},[67,153032,909],{"class":73},[67,153034,61142],{"class":208},[67,153036,864],{"class":77},[67,153038,153039],{"class":84},"\"请输入要删除的学号:\"",[67,153041,870],{"class":77},[67,153043,153044,153047,153049],{"class":69,"line":17513},[67,153045,153046],{"class":77},"    student ",[67,153048,909],{"class":73},[67,153050,153051],{"class":77}," find_student(students, student_id)\n",[67,153053,153054],{"class":69,"line":17518},[67,153055,177],{"emptyLinePlaceholder":176},[67,153057,153058,153060,153062,153064,153066],{"class":69,"line":17532},[67,153059,3821],{"class":73},[67,153061,152674],{"class":77},[67,153063,39464],{"class":73},[67,153065,39470],{"class":208},[67,153067,4459],{"class":77},[67,153069,153070,153072,153074,153077],{"class":69,"line":17537},[67,153071,32988],{"class":208},[67,153073,864],{"class":77},[67,153075,153076],{"class":84},"\"学生不存在\"",[67,153078,870],{"class":77},[67,153080,153081],{"class":69,"line":17543},[67,153082,152898],{"class":73},[67,153084,153085],{"class":69,"line":17548},[67,153086,177],{"emptyLinePlaceholder":176},[67,153088,153089],{"class":69,"line":17562},[67,153090,153091],{"class":77},"    students.remove(student)\n",[67,153093,153094],{"class":69,"line":17567},[67,153095,152998],{"class":77},[67,153097,153098,153100,153102,153105],{"class":69,"line":17572},[67,153099,31836],{"class":208},[67,153101,864],{"class":77},[67,153103,153104],{"class":84},"\"删除成功\"",[67,153106,870],{"class":77},[67,153108,153109],{"class":69,"line":17586},[67,153110,177],{"emptyLinePlaceholder":176},[67,153112,153113],{"class":69,"line":17598},[67,153114,177],{"emptyLinePlaceholder":176},[67,153116,153117,153119,153122],{"class":69,"line":17603},[67,153118,32484],{"class":73},[67,153120,153121],{"class":112}," update_student",[67,153123,152498],{"class":77},[67,153125,153126,153128,153130,153132,153134,153137],{"class":69,"line":17616},[67,153127,152860],{"class":77},[67,153129,909],{"class":73},[67,153131,61142],{"class":208},[67,153133,864],{"class":77},[67,153135,153136],{"class":84},"\"请输入要修改的学号:\"",[67,153138,870],{"class":77},[67,153140,153141,153143,153145],{"class":69,"line":17621},[67,153142,153046],{"class":77},[67,153144,909],{"class":73},[67,153146,153051],{"class":77},[67,153148,153149],{"class":69,"line":17626},[67,153150,177],{"emptyLinePlaceholder":176},[67,153152,153153,153155,153157,153159,153161],{"class":69,"line":17631},[67,153154,3821],{"class":73},[67,153156,152674],{"class":77},[67,153158,39464],{"class":73},[67,153160,39470],{"class":208},[67,153162,4459],{"class":77},[67,153164,153165,153167,153169,153171],{"class":69,"line":17644},[67,153166,32988],{"class":208},[67,153168,864],{"class":77},[67,153170,153076],{"class":84},[67,153172,870],{"class":77},[67,153174,153175],{"class":69,"line":17649},[67,153176,152898],{"class":73},[67,153178,153179],{"class":69,"line":33170},[67,153180,177],{"emptyLinePlaceholder":176},[67,153182,153183,153185,153187,153189,153191,153194],{"class":69,"line":33176},[67,153184,152907],{"class":77},[67,153186,909],{"class":73},[67,153188,61142],{"class":208},[67,153190,864],{"class":77},[67,153192,153193],{"class":84},"\"请输入新姓名:\"",[67,153195,870],{"class":77},[67,153197,153198,153200,153202,153204,153207],{"class":69,"line":33182},[67,153199,152923],{"class":77},[67,153201,909],{"class":73},[67,153203,152928],{"class":77},[67,153205,153206],{"class":84},"\"请输入新年龄:\"",[67,153208,870],{"class":77},[67,153210,153211,153213,153215,153217,153220],{"class":69,"line":33188},[67,153212,152938],{"class":77},[67,153214,909],{"class":73},[67,153216,152943],{"class":77},[67,153218,153219],{"class":84},"\"请输入新成绩:\"",[67,153221,870],{"class":77},[67,153223,153224],{"class":69,"line":33194},[67,153225,177],{"emptyLinePlaceholder":176},[67,153227,153228,153231,153233,153235,153237],{"class":69,"line":33205},[67,153229,153230],{"class":77},"    student[",[67,153232,63216],{"class":84},[67,153234,5162],{"class":77},[67,153236,909],{"class":73},[67,153238,150332],{"class":77},[67,153240,153241,153243,153245,153247,153249],{"class":69,"line":33211},[67,153242,153230],{"class":77},[67,153244,69661],{"class":84},[67,153246,5162],{"class":77},[67,153248,909],{"class":73},[67,153250,150344],{"class":77},[67,153252,153253,153255,153257,153259,153261],{"class":69,"line":33231},[67,153254,153230],{"class":77},[67,153256,152009],{"class":84},[67,153258,5162],{"class":77},[67,153260,909],{"class":73},[67,153262,2302],{"class":77},[67,153264,153265],{"class":69,"line":33237},[67,153266,177],{"emptyLinePlaceholder":176},[67,153268,153269],{"class":69,"line":33248},[67,153270,152998],{"class":77},[67,153272,153273,153275,153277,153280],{"class":69,"line":33254},[67,153274,31836],{"class":208},[67,153276,864],{"class":77},[67,153278,153279],{"class":84},"\"修改成功\"",[67,153281,870],{"class":77},[67,153283,153284],{"class":69,"line":33260},[67,153285,177],{"emptyLinePlaceholder":176},[67,153287,153288],{"class":69,"line":33266},[67,153289,177],{"emptyLinePlaceholder":176},[67,153291,153292,153294,153297],{"class":69,"line":33272},[67,153293,32484],{"class":73},[67,153295,153296],{"class":112}," query_student",[67,153298,152498],{"class":77},[67,153300,153301,153303,153305,153307,153309,153312],{"class":69,"line":33278},[67,153302,152860],{"class":77},[67,153304,909],{"class":73},[67,153306,61142],{"class":208},[67,153308,864],{"class":77},[67,153310,153311],{"class":84},"\"请输入要查询的学号:\"",[67,153313,870],{"class":77},[67,153315,153316,153318,153320],{"class":69,"line":33284},[67,153317,153046],{"class":77},[67,153319,909],{"class":73},[67,153321,153051],{"class":77},[67,153323,153324],{"class":69,"line":33290},[67,153325,177],{"emptyLinePlaceholder":176},[67,153327,153328,153330,153332,153334,153336],{"class":69,"line":33310},[67,153329,3821],{"class":73},[67,153331,152674],{"class":77},[67,153333,39464],{"class":73},[67,153335,39470],{"class":208},[67,153337,4459],{"class":77},[67,153339,153340,153342,153344,153346],{"class":69,"line":33316},[67,153341,32988],{"class":208},[67,153343,864],{"class":77},[67,153345,153076],{"class":84},[67,153347,870],{"class":77},[67,153349,153350],{"class":69,"line":33332},[67,153351,152898],{"class":73},[67,153353,153354],{"class":69,"line":33338},[67,153355,177],{"emptyLinePlaceholder":176},[67,153357,153358],{"class":69,"line":33352},[67,153359,153360],{"class":77},"    print_student(student)\n",[67,153362,153363],{"class":69,"line":33358},[67,153364,177],{"emptyLinePlaceholder":176},[67,153366,153367],{"class":69,"line":33373},[67,153368,177],{"emptyLinePlaceholder":176},[67,153370,153371,153373,153376],{"class":69,"line":33379},[67,153372,32484],{"class":73},[67,153374,153375],{"class":112}," print_student",[67,153377,153378],{"class":77},"(student):\n",[67,153380,153381,153383],{"class":69,"line":33388},[67,153382,31836],{"class":208},[67,153384,151976],{"class":77},[67,153386,153387,153390,153392,153394,153397,153400,153402,153405],{"class":69,"line":33394},[67,153388,153389],{"class":73},"        f",[67,153391,257],{"class":84},[67,153393,1752],{"class":208},[67,153395,153396],{"class":77},"student[",[67,153398,153399],{"class":84},"'student_id'",[67,153401,1796],{"class":77},[67,153403,153404],{"class":208},"}\\t",[67,153406,25842],{"class":84},[67,153408,153409,153411,153413,153415,153417,153420,153422,153424],{"class":69,"line":33403},[67,153410,153389],{"class":73},[67,153412,257],{"class":84},[67,153414,1752],{"class":208},[67,153416,153396],{"class":77},[67,153418,153419],{"class":84},"'name'",[67,153421,1796],{"class":77},[67,153423,153404],{"class":208},[67,153425,25842],{"class":84},[67,153427,153428,153430,153432,153434,153436,153439,153441,153443],{"class":69,"line":33409},[67,153429,153389],{"class":73},[67,153431,257],{"class":84},[67,153433,1752],{"class":208},[67,153435,153396],{"class":77},[67,153437,153438],{"class":84},"'age'",[67,153440,1796],{"class":77},[67,153442,153404],{"class":208},[67,153444,25842],{"class":84},[67,153446,153447,153449,153451,153453,153455,153458,153460,153462],{"class":69,"line":33415},[67,153448,153389],{"class":73},[67,153450,257],{"class":84},[67,153452,1752],{"class":208},[67,153454,153396],{"class":77},[67,153456,153457],{"class":84},"'score'",[67,153459,1796],{"class":77},[67,153461,1802],{"class":208},[67,153463,25842],{"class":84},[67,153465,153466],{"class":69,"line":33424},[67,153467,153468],{"class":77},"    )\n",[67,153470,153471],{"class":69,"line":33430},[67,153472,177],{"emptyLinePlaceholder":176},[67,153474,153475],{"class":69,"line":33441},[67,153476,177],{"emptyLinePlaceholder":176},[67,153478,153479,153481,153484],{"class":69,"line":33447},[67,153480,32484],{"class":73},[67,153482,153483],{"class":112}," show_all_students",[67,153485,152498],{"class":77},[67,153487,153488,153490,153492],{"class":69,"line":33466},[67,153489,3821],{"class":73},[67,153491,39467],{"class":73},[67,153493,152679],{"class":77},[67,153495,153496,153498,153500,153503],{"class":69,"line":33472},[67,153497,32988],{"class":208},[67,153499,864],{"class":77},[67,153501,153502],{"class":84},"\"暂无学生\"",[67,153504,870],{"class":77},[67,153506,153507],{"class":69,"line":33483},[67,153508,152898],{"class":73},[67,153510,153511],{"class":69,"line":33489},[67,153512,177],{"emptyLinePlaceholder":176},[67,153514,153515,153517,153519,153522,153524,153527,153529,153532,153534,153537],{"class":69,"line":33509},[67,153516,31836],{"class":208},[67,153518,864],{"class":77},[67,153520,153521],{"class":84},"\"学号",[67,153523,1957],{"class":208},[67,153525,153526],{"class":84},"姓名",[67,153528,1957],{"class":208},[67,153530,153531],{"class":84},"年龄",[67,153533,1957],{"class":208},[67,153535,153536],{"class":84},"成绩\"",[67,153538,870],{"class":77},[67,153540,153541,153543,153545,153547],{"class":69,"line":33525},[67,153542,3921],{"class":73},[67,153544,152674],{"class":77},[67,153546,81],{"class":73},[67,153548,152679],{"class":77},[67,153550,153551],{"class":69,"line":33531},[67,153552,153553],{"class":77},"        print_student(student)\n",[67,153555,153556],{"class":69,"line":33545},[67,153557,177],{"emptyLinePlaceholder":176},[67,153559,153560],{"class":69,"line":33551},[67,153561,177],{"emptyLinePlaceholder":176},[67,153563,153564,153566,153568],{"class":69,"line":33557},[67,153565,32484],{"class":73},[67,153567,2695],{"class":112},[67,153569,32490],{"class":77},[67,153571,153572,153575,153577],{"class":69,"line":33568},[67,153573,153574],{"class":77},"    students ",[67,153576,909],{"class":73},[67,153578,153579],{"class":77}," load_students()\n",[67,153581,153582],{"class":69,"line":33574},[67,153583,177],{"emptyLinePlaceholder":176},[67,153585,153586,153588,153590],{"class":69,"line":33580},[67,153587,2973],{"class":73},[67,153589,95829],{"class":208},[67,153591,4459],{"class":77},[67,153593,153594],{"class":69,"line":33590},[67,153595,153596],{"class":77},"        show_menu()\n",[67,153598,153599,153602,153604,153606,153608,153611],{"class":69,"line":33596},[67,153600,153601],{"class":77},"        choice ",[67,153603,909],{"class":73},[67,153605,61142],{"class":208},[67,153607,864],{"class":77},[67,153609,153610],{"class":84},"\"请输入操作:\"",[67,153612,870],{"class":77},[67,153614,153615],{"class":69,"line":33607},[67,153616,177],{"emptyLinePlaceholder":176},[67,153618,153619,153621,153624,153626,153629],{"class":69,"line":33613},[67,153620,3218],{"class":73},[67,153622,153623],{"class":77}," choice ",[67,153625,3670],{"class":73},[67,153627,153628],{"class":84}," \"1\"",[67,153630,4459],{"class":77},[67,153632,153633],{"class":69,"line":33623},[67,153634,153635],{"class":77},"            add_student(students)\n",[67,153637,153638,153641,153643,153645,153648],{"class":69,"line":33628},[67,153639,153640],{"class":73},"        elif",[67,153642,153623],{"class":77},[67,153644,3670],{"class":73},[67,153646,153647],{"class":84}," \"2\"",[67,153649,4459],{"class":77},[67,153651,153652],{"class":69,"line":33634},[67,153653,153654],{"class":77},"            delete_student(students)\n",[67,153656,153657,153659,153661,153663,153666],{"class":69,"line":33683},[67,153658,153640],{"class":73},[67,153660,153623],{"class":77},[67,153662,3670],{"class":73},[67,153664,153665],{"class":84}," \"3\"",[67,153667,4459],{"class":77},[67,153669,153670],{"class":69,"line":33730},[67,153671,153672],{"class":77},"            update_student(students)\n",[67,153674,153675,153677,153679,153681,153684],{"class":69,"line":33735},[67,153676,153640],{"class":73},[67,153678,153623],{"class":77},[67,153680,3670],{"class":73},[67,153682,153683],{"class":84}," \"4\"",[67,153685,4459],{"class":77},[67,153687,153688],{"class":69,"line":33741},[67,153689,153690],{"class":77},"            query_student(students)\n",[67,153692,153693,153695,153697,153699,153702],{"class":69,"line":33760},[67,153694,153640],{"class":73},[67,153696,153623],{"class":77},[67,153698,3670],{"class":73},[67,153700,153701],{"class":84}," \"5\"",[67,153703,4459],{"class":77},[67,153705,153706],{"class":69,"line":33766},[67,153707,153708],{"class":77},"            show_all_students(students)\n",[67,153710,153711,153713,153715,153717,153720],{"class":69,"line":33786},[67,153712,153640],{"class":73},[67,153714,153623],{"class":77},[67,153716,3670],{"class":73},[67,153718,153719],{"class":84}," \"0\"",[67,153721,4459],{"class":77},[67,153723,153724,153726,153728,153731],{"class":69,"line":33792},[67,153725,35187],{"class":208},[67,153727,864],{"class":77},[67,153729,153730],{"class":84},"\"退出系统\"",[67,153732,870],{"class":77},[67,153734,153735],{"class":69,"line":33798},[67,153736,115635],{"class":73},[67,153738,153739,153741],{"class":69,"line":33808},[67,153740,3255],{"class":73},[67,153742,4459],{"class":77},[67,153744,153745,153747,153749,153752],{"class":69,"line":33813},[67,153746,35187],{"class":208},[67,153748,864],{"class":77},[67,153750,153751],{"class":84},"\"输入错误\"",[67,153753,870],{"class":77},[67,153755,153756],{"class":69,"line":33819},[67,153757,177],{"emptyLinePlaceholder":176},[67,153759,153760],{"class":69,"line":33835},[67,153761,177],{"emptyLinePlaceholder":176},[67,153763,153764,153766,153768,153770,153772],{"class":69,"line":33880},[67,153765,2254],{"class":73},[67,153767,31757],{"class":208},[67,153769,102096],{"class":73},[67,153771,102099],{"class":84},[67,153773,4459],{"class":77},[67,153775,153776],{"class":69,"line":33886},[67,153777,102106],{"class":77},[19,153779,153780],{},"这个项目串联了：",[815,153782,153783,153786,153789,153792,153795,153797],{},[818,153784,153785],{},"菜单循环。",[818,153787,153788],{},"函数封装。",[818,153790,153791],{},"列表字典。",[818,153793,153794],{},"JSON 读写。",[818,153796,152264],{},[818,153798,153799,28922],{},[64,153800,153801],{},"if __name__ == \"__main__\"",[803,153803,153805],{"id":153804},"_124-面向对象版设计思路","12.4 面向对象版设计思路",[19,153807,153808],{},"可以进一步拆成两个类：",[815,153810,153811,153816],{},[818,153812,153813,153815],{},[64,153814,150105],{},"：表示单个学生。",[818,153817,153818,153820],{},[64,153819,152131],{},"：负责学生增删改查和文件保存。",[19,153822,153823],{},"示意代码：",[57,153825,153827],{"className":30915,"code":153826,"language":30917,"meta":62,"style":62},"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",[64,153828,153829,153839,153843,153847,153851,153859,153866,153872,153878,153884,153888,153896,153902,153912,153922,153932,153942,153946,153950,153956,153964,153972,153980,153988,153996,154004],{"__ignoreMap":62},[67,153830,153831,153833,153835,153837],{"class":69,"line":70},[67,153832,31274],{"class":73},[67,153834,151689],{"class":77},[67,153836,30929],{"class":73},[67,153838,151694],{"class":77},[67,153840,153841],{"class":69,"line":143},[67,153842,177],{"emptyLinePlaceholder":176},[67,153844,153845],{"class":69,"line":149},[67,153846,177],{"emptyLinePlaceholder":176},[67,153848,153849],{"class":69,"line":155},[67,153850,151707],{"class":112},[67,153852,153853,153855,153857],{"class":69,"line":161},[67,153854,15411],{"class":73},[67,153856,8617],{"class":112},[67,153858,4459],{"class":77},[67,153860,153861,153864],{"class":69,"line":167},[67,153862,153863],{"class":77},"    student_id: ",[67,153865,151723],{"class":208},[67,153867,153868,153870],{"class":69,"line":173},[67,153869,151720],{"class":77},[67,153871,151723],{"class":208},[67,153873,153874,153876],{"class":69,"line":180},[67,153875,151728],{"class":77},[67,153877,151731],{"class":208},[67,153879,153880,153882],{"class":69,"line":186},[67,153881,151736],{"class":77},[67,153883,151739],{"class":208},[67,153885,153886],{"class":69,"line":444},[67,153887,177],{"emptyLinePlaceholder":176},[67,153889,153890,153892,153894],{"class":69,"line":2335},[67,153891,31338],{"class":73},[67,153893,151887],{"class":112},[67,153895,31344],{"class":77},[67,153897,153898,153900],{"class":69,"line":2340},[67,153899,15469],{"class":73},[67,153901,16289],{"class":77},[67,153903,153904,153906,153908,153910],{"class":69,"line":2346},[67,153905,151900],{"class":84},[67,153907,51974],{"class":77},[67,153909,31360],{"class":208},[67,153911,151907],{"class":77},[67,153913,153914,153916,153918,153920],{"class":69,"line":2351},[67,153915,151912],{"class":84},[67,153917,51974],{"class":77},[67,153919,31360],{"class":208},[67,153921,151919],{"class":77},[67,153923,153924,153926,153928,153930],{"class":69,"line":2365},[67,153925,151924],{"class":84},[67,153927,51974],{"class":77},[67,153929,31360],{"class":208},[67,153931,151931],{"class":77},[67,153933,153934,153936,153938,153940],{"class":69,"line":2370},[67,153935,151936],{"class":84},[67,153937,51974],{"class":77},[67,153939,31360],{"class":208},[67,153941,151943],{"class":77},[67,153943,153944],{"class":69,"line":2376},[67,153945,3250],{"class":77},[67,153947,153948],{"class":69,"line":2397},[67,153949,177],{"emptyLinePlaceholder":176},[67,153951,153952,153954],{"class":69,"line":2402},[67,153953,151551],{"class":112},[67,153955,151554],{"class":208},[67,153957,153958,153960,153962],{"class":69,"line":2416},[67,153959,31338],{"class":73},[67,153961,151964],{"class":112},[67,153963,151967],{"class":77},[67,153965,153966,153968,153970],{"class":69,"line":2421},[67,153967,15469],{"class":73},[67,153969,151571],{"class":208},[67,153971,151976],{"class":77},[67,153973,153974,153976,153978],{"class":69,"line":2450},[67,153975,151981],{"class":77},[67,153977,151984],{"class":84},[67,153979,88373],{"class":77},[67,153981,153982,153984,153986],{"class":69,"line":2455},[67,153983,151981],{"class":77},[67,153985,63216],{"class":84},[67,153987,88373],{"class":77},[67,153989,153990,153992,153994],{"class":69,"line":2472},[67,153991,151981],{"class":77},[67,153993,69661],{"class":84},[67,153995,88373],{"class":77},[67,153997,153998,154000,154002],{"class":69,"line":2477},[67,153999,151981],{"class":77},[67,154001,152009],{"class":84},[67,154003,88373],{"class":77},[67,154005,154006],{"class":69,"line":2482},[67,154007,38663],{"class":77},[19,154009,154010],{},"管理器示意：",[57,154012,154014],{"className":30915,"code":154013,"language":30917,"meta":62,"style":62},"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",[64,154015,154016,154025,154033,154044,154048,154058,154071,154082,154089,154095,154099,154108,154117,154123,154130],{"__ignoreMap":62},[67,154017,154018,154020,154023],{"class":69,"line":70},[67,154019,15411],{"class":73},[67,154021,154022],{"class":112}," StudentManager",[67,154024,4459],{"class":77},[67,154026,154027,154029,154031],{"class":69,"line":143},[67,154028,31338],{"class":73},[67,154030,31341],{"class":208},[67,154032,31344],{"class":77},[67,154034,154035,154037,154040,154042],{"class":69,"line":149},[67,154036,31382],{"class":208},[67,154038,154039],{"class":77},".students ",[67,154041,909],{"class":73},[67,154043,52375],{"class":77},[67,154045,154046],{"class":69,"line":155},[67,154047,177],{"emptyLinePlaceholder":176},[67,154049,154050,154052,154055],{"class":69,"line":161},[67,154051,31338],{"class":73},[67,154053,154054],{"class":112}," find_by_id",[67,154056,154057],{"class":77},"(self, student_id):\n",[67,154059,154060,154062,154064,154066,154068],{"class":69,"line":167},[67,154061,4123],{"class":73},[67,154063,152674],{"class":77},[67,154065,81],{"class":73},[67,154067,39410],{"class":208},[67,154069,154070],{"class":77},".students:\n",[67,154072,154073,154075,154078,154080],{"class":69,"line":173},[67,154074,5361],{"class":73},[67,154076,154077],{"class":77}," student.student_id ",[67,154079,3670],{"class":73},[67,154081,152695],{"class":77},[67,154083,154084,154087],{"class":69,"line":180},[67,154085,154086],{"class":73},"                return",[67,154088,152702],{"class":77},[67,154090,154091,154093],{"class":69,"line":186},[67,154092,15469],{"class":73},[67,154094,152709],{"class":208},[67,154096,154097],{"class":69,"line":444},[67,154098,177],{"emptyLinePlaceholder":176},[67,154100,154101,154103,154105],{"class":69,"line":2335},[67,154102,31338],{"class":73},[67,154104,5928],{"class":112},[67,154106,154107],{"class":77},"(self, student):\n",[67,154109,154110,154112,154114],{"class":69,"line":2340},[67,154111,3218],{"class":73},[67,154113,39410],{"class":208},[67,154115,154116],{"class":77},".find_by_id(student.student_id):\n",[67,154118,154119,154121],{"class":69,"line":2346},[67,154120,16449],{"class":73},[67,154122,126344],{"class":208},[67,154124,154125,154127],{"class":69,"line":2351},[67,154126,31382],{"class":208},[67,154128,154129],{"class":77},".students.append(student)\n",[67,154131,154132,154134],{"class":69,"line":2365},[67,154133,15469],{"class":73},[67,154135,154136],{"class":208}," True\n",[19,154138,154139],{},"如果项目逻辑越来越多，面向对象版会比纯函数版更容易扩展。",[803,154141,154143],{"id":154142},"_125-项目二销售数据统计","12.5 项目二：销售数据统计",[14,154145,154147],{"id":154146},"_1251-数据结构","12.5.1 数据结构",[57,154149,154151],{"className":30915,"code":154150,"language":30917,"meta":62,"style":62},"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",[64,154152,154153,154161,154192,154222,154251,154280],{"__ignoreMap":62},[67,154154,154155,154157,154159],{"class":69,"line":70},[67,154156,149002],{"class":77},[67,154158,909],{"class":73},[67,154160,55984],{"class":77},[67,154162,154163,154165,154167,154169,154171,154173,154176,154178,154181,154183,154185,154187,154190],{"class":69,"line":143},[67,154164,148922],{"class":77},[67,154166,148534],{"class":84},[67,154168,51974],{"class":77},[67,154170,149145],{"class":84},[67,154172,13153],{"class":77},[67,154174,154175],{"class":84},"\"category\"",[67,154177,51974],{"class":77},[67,154179,154180],{"class":84},"\"手机\"",[67,154182,13153],{"class":77},[67,154184,84621],{"class":84},[67,154186,51974],{"class":77},[67,154188,154189],{"class":208},"12000",[67,154191,5649],{"class":77},[67,154193,154194,154196,154198,154200,154202,154204,154206,154208,154211,154213,154215,154217,154220],{"class":69,"line":149},[67,154195,148922],{"class":77},[67,154197,148534],{"class":84},[67,154199,51974],{"class":77},[67,154201,149145],{"class":84},[67,154203,13153],{"class":77},[67,154205,154175],{"class":84},[67,154207,51974],{"class":77},[67,154209,154210],{"class":84},"\"电脑\"",[67,154212,13153],{"class":77},[67,154214,84621],{"class":84},[67,154216,51974],{"class":77},[67,154218,154219],{"class":208},"18000",[67,154221,5649],{"class":77},[67,154223,154224,154226,154228,154230,154232,154234,154236,154238,154240,154242,154244,154246,154249],{"class":69,"line":155},[67,154225,148922],{"class":77},[67,154227,148534],{"class":84},[67,154229,51974],{"class":77},[67,154231,149166],{"class":84},[67,154233,13153],{"class":77},[67,154235,154175],{"class":84},[67,154237,51974],{"class":77},[67,154239,154180],{"class":84},[67,154241,13153],{"class":77},[67,154243,84621],{"class":84},[67,154245,51974],{"class":77},[67,154247,154248],{"class":208},"15000",[67,154250,5649],{"class":77},[67,154252,154253,154255,154257,154259,154261,154263,154265,154267,154269,154271,154273,154275,154278],{"class":69,"line":161},[67,154254,148922],{"class":77},[67,154256,148534],{"class":84},[67,154258,51974],{"class":77},[67,154260,149166],{"class":84},[67,154262,13153],{"class":77},[67,154264,154175],{"class":84},[67,154266,51974],{"class":77},[67,154268,154210],{"class":84},[67,154270,13153],{"class":77},[67,154272,84621],{"class":84},[67,154274,51974],{"class":77},[67,154276,154277],{"class":208},"16000",[67,154279,5649],{"class":77},[67,154281,154282],{"class":69,"line":167},[67,154283,33783],{"class":77},[14,154285,154287],{"id":154286},"_1252-按日期统计","12.5.2 按日期统计",[57,154289,154291],{"className":30915,"code":154290,"language":30917,"meta":62,"style":62},"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",[64,154292,154293,154302,154306,154317,154331,154344,154363,154367],{"__ignoreMap":62},[67,154294,154295,154298,154300],{"class":69,"line":70},[67,154296,154297],{"class":77},"daily_total ",[67,154299,909],{"class":73},[67,154301,88405],{"class":77},[67,154303,154304],{"class":69,"line":143},[67,154305,177],{"emptyLinePlaceholder":176},[67,154307,154308,154310,154312,154314],{"class":69,"line":149},[67,154309,74],{"class":73},[67,154311,148746],{"class":77},[67,154313,81],{"class":73},[67,154315,154316],{"class":77}," sales:\n",[67,154318,154319,154322,154324,154327,154329],{"class":69,"line":155},[67,154320,154321],{"class":77},"    date ",[67,154323,909],{"class":73},[67,154325,154326],{"class":77}," item[",[67,154328,148534],{"class":84},[67,154330,33783],{"class":77},[67,154332,154333,154336,154338,154340,154342],{"class":69,"line":161},[67,154334,154335],{"class":77},"    amount ",[67,154337,909],{"class":73},[67,154339,154326],{"class":77},[67,154341,84621],{"class":84},[67,154343,33783],{"class":77},[67,154345,154346,154349,154351,154354,154356,154358,154360],{"class":69,"line":167},[67,154347,154348],{"class":77},"    daily_total[date] ",[67,154350,909],{"class":73},[67,154352,154353],{"class":77}," daily_total.get(date, ",[67,154355,1051],{"class":208},[67,154357,14432],{"class":77},[67,154359,1338],{"class":73},[67,154361,154362],{"class":77}," amount\n",[67,154364,154365],{"class":69,"line":173},[67,154366,177],{"emptyLinePlaceholder":176},[67,154368,154369,154371],{"class":69,"line":180},[67,154370,30952],{"class":208},[67,154372,154373],{"class":77},"(daily_total)\n",[14,154375,154377],{"id":154376},"_1253-按类别统计","12.5.3 按类别统计",[57,154379,154381],{"className":30915,"code":154380,"language":30917,"meta":62,"style":62},"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",[64,154382,154383,154392,154396,154406,154419,154431,154449,154453],{"__ignoreMap":62},[67,154384,154385,154388,154390],{"class":69,"line":70},[67,154386,154387],{"class":77},"category_total ",[67,154389,909],{"class":73},[67,154391,88405],{"class":77},[67,154393,154394],{"class":69,"line":143},[67,154395,177],{"emptyLinePlaceholder":176},[67,154397,154398,154400,154402,154404],{"class":69,"line":149},[67,154399,74],{"class":73},[67,154401,148746],{"class":77},[67,154403,81],{"class":73},[67,154405,154316],{"class":77},[67,154407,154408,154411,154413,154415,154417],{"class":69,"line":155},[67,154409,154410],{"class":77},"    category ",[67,154412,909],{"class":73},[67,154414,154326],{"class":77},[67,154416,154175],{"class":84},[67,154418,33783],{"class":77},[67,154420,154421,154423,154425,154427,154429],{"class":69,"line":161},[67,154422,154335],{"class":77},[67,154424,909],{"class":73},[67,154426,154326],{"class":77},[67,154428,84621],{"class":84},[67,154430,33783],{"class":77},[67,154432,154433,154436,154438,154441,154443,154445,154447],{"class":69,"line":167},[67,154434,154435],{"class":77},"    category_total[category] ",[67,154437,909],{"class":73},[67,154439,154440],{"class":77}," category_total.get(category, ",[67,154442,1051],{"class":208},[67,154444,14432],{"class":77},[67,154446,1338],{"class":73},[67,154448,154362],{"class":77},[67,154450,154451],{"class":69,"line":173},[67,154452,177],{"emptyLinePlaceholder":176},[67,154454,154455,154457],{"class":69,"line":180},[67,154456,30952],{"class":208},[67,154458,154459],{"class":77},"(category_total)\n",[14,154461,154463],{"id":154462},"_1254-找销售额最高的一天","12.5.4 找销售额最高的一天",[57,154465,154467],{"className":30915,"code":154466,"language":30917,"meta":62,"style":62},"top_date, top_amount = max(daily_total.items(), key=lambda item: item[1])\nprint(top_date, top_amount)\n",[64,154468,154469,154494],{"__ignoreMap":62},[67,154470,154471,154474,154476,154478,154481,154484,154487,154490,154492],{"class":69,"line":70},[67,154472,154473],{"class":77},"top_date, top_amount ",[67,154475,909],{"class":73},[67,154477,6670],{"class":208},[67,154479,154480],{"class":77},"(daily_total.items(), ",[67,154482,154483],{"class":5935},"key",[67,154485,154486],{"class":73},"=lambda",[67,154488,154489],{"class":77}," item: item[",[67,154491,1077],{"class":208},[67,154493,5376],{"class":77},[67,154495,154496,154498],{"class":69,"line":143},[67,154497,30952],{"class":208},[67,154499,154500],{"class":77},"(top_date, top_amount)\n",[803,154502,154504],{"id":154503},"_126-绘制柱状图","12.6 绘制柱状图",[57,154506,154508],{"className":30915,"code":154507,"language":30917,"meta":62,"style":62},"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",[64,154509,154510,154524,154535,154539,154547,154559,154571,154582,154586,154590,154600,154611,154625,154630,154647,154664,154680,154684],{"__ignoreMap":62},[67,154511,154512,154514,154516,154518,154520,154522],{"class":69,"line":70},[67,154513,31274],{"class":73},[67,154515,147916],{"class":77},[67,154517,30929],{"class":73},[67,154519,147921],{"class":77},[67,154521,31920],{"class":73},[67,154523,147926],{"class":77},[67,154525,154526,154528,154530,154532],{"class":69,"line":143},[67,154527,31274],{"class":73},[67,154529,147775],{"class":77},[67,154531,30929],{"class":73},[67,154533,154534],{"class":77}," Bar\n",[67,154536,154537],{"class":69,"line":149},[67,154538,177],{"emptyLinePlaceholder":176},[67,154540,154541,154543,154545],{"class":69,"line":155},[67,154542,154387],{"class":77},[67,154544,909],{"class":73},[67,154546,16289],{"class":77},[67,154548,154549,154552,154554,154557],{"class":69,"line":161},[67,154550,154551],{"class":84},"    \"手机\"",[67,154553,51974],{"class":77},[67,154555,154556],{"class":208},"27000",[67,154558,32003],{"class":77},[67,154560,154561,154564,154566,154569],{"class":69,"line":167},[67,154562,154563],{"class":84},"    \"电脑\"",[67,154565,51974],{"class":77},[67,154567,154568],{"class":208},"34000",[67,154570,32003],{"class":77},[67,154572,154573,154576,154578,154580],{"class":69,"line":173},[67,154574,154575],{"class":84},"    \"耳机\"",[67,154577,51974],{"class":77},[67,154579,124936],{"class":208},[67,154581,32003],{"class":77},[67,154583,154584],{"class":69,"line":180},[67,154585,2288],{"class":77},[67,154587,154588],{"class":69,"line":186},[67,154589,177],{"emptyLinePlaceholder":176},[67,154591,154592,154595,154597],{"class":69,"line":444},[67,154593,154594],{"class":77},"bar ",[67,154596,909],{"class":73},[67,154598,154599],{"class":77}," Bar()\n",[67,154601,154602,154605,154608],{"class":69,"line":2335},[67,154603,154604],{"class":77},"bar.add_xaxis(",[67,154606,154607],{"class":208},"list",[67,154609,154610],{"class":77},"(category_total.keys()))\n",[67,154612,154613,154616,154618,154620,154622],{"class":69,"line":2340},[67,154614,154615],{"class":77},"bar.add_yaxis(",[67,154617,147832],{"class":84},[67,154619,13153],{"class":77},[67,154621,154607],{"class":208},[67,154623,154624],{"class":77},"(category_total.values()))\n",[67,154626,154627],{"class":69,"line":2346},[67,154628,154629],{"class":77},"bar.set_global_opts(\n",[67,154631,154632,154634,154636,154638,154640,154642,154645],{"class":69,"line":2351},[67,154633,148010],{"class":5935},[67,154635,909],{"class":73},[67,154637,148015],{"class":77},[67,154639,51944],{"class":5935},[67,154641,909],{"class":73},[67,154643,154644],{"class":84},"\"品类销售额\"",[67,154646,38584],{"class":77},[67,154648,154649,154651,154653,154655,154657,154659,154662],{"class":69,"line":2365},[67,154650,148029],{"class":5935},[67,154652,909],{"class":73},[67,154654,148034],{"class":77},[67,154656,80347],{"class":5935},[67,154658,909],{"class":73},[67,154660,154661],{"class":84},"\"品类\"",[67,154663,38584],{"class":77},[67,154665,154666,154668,154670,154672,154674,154676,154678],{"class":69,"line":2370},[67,154667,148048],{"class":5935},[67,154669,909],{"class":73},[67,154671,148034],{"class":77},[67,154673,80347],{"class":5935},[67,154675,909],{"class":73},[67,154677,147832],{"class":84},[67,154679,38584],{"class":77},[67,154681,154682],{"class":69,"line":2376},[67,154683,870],{"class":77},[67,154685,154686,154689,154692],{"class":69,"line":2397},[67,154687,154688],{"class":77},"bar.render(",[67,154690,154691],{"class":84},"\"category_sales.html\"",[67,154693,870],{"class":77},[803,154695,154697],{"id":154696},"_127-绘制时间线柱状图","12.7 绘制时间线柱状图",[19,154699,154700],{},"时间线适合展示不同日期、月份、年份的数据变化。",[57,154702,154704],{"className":30915,"code":154703,"language":30917,"meta":62,"style":62},"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",[64,154705,154706,154720,154731,154735,154743,154767,154790,154815,154819,154823,154833,154837,154848,154857,154867,154881,154912,154917,154921],{"__ignoreMap":62},[67,154707,154708,154710,154712,154714,154716,154718],{"class":69,"line":70},[67,154709,31274],{"class":73},[67,154711,147916],{"class":77},[67,154713,30929],{"class":73},[67,154715,147921],{"class":77},[67,154717,31920],{"class":73},[67,154719,147926],{"class":77},[67,154721,154722,154724,154726,154728],{"class":69,"line":143},[67,154723,31274],{"class":73},[67,154725,147775],{"class":77},[67,154727,30929],{"class":73},[67,154729,154730],{"class":77}," Bar, Timeline\n",[67,154732,154733],{"class":69,"line":149},[67,154734,177],{"emptyLinePlaceholder":176},[67,154736,154737,154739,154741],{"class":69,"line":155},[67,154738,102195],{"class":77},[67,154740,909],{"class":73},[67,154742,16289],{"class":77},[67,154744,154745,154748,154751,154753,154755,154757,154759,154761,154763,154765],{"class":69,"line":161},[67,154746,154747],{"class":84},"    \"2024-10-01\"",[67,154749,154750],{"class":77},": {",[67,154752,154180],{"class":84},[67,154754,51974],{"class":77},[67,154756,154189],{"class":208},[67,154758,13153],{"class":77},[67,154760,154210],{"class":84},[67,154762,51974],{"class":77},[67,154764,154219],{"class":208},[67,154766,5649],{"class":77},[67,154768,154769,154772,154774,154776,154778,154780,154782,154784,154786,154788],{"class":69,"line":167},[67,154770,154771],{"class":84},"    \"2024-10-02\"",[67,154773,154750],{"class":77},[67,154775,154180],{"class":84},[67,154777,51974],{"class":77},[67,154779,154248],{"class":208},[67,154781,13153],{"class":77},[67,154783,154210],{"class":84},[67,154785,51974],{"class":77},[67,154787,154277],{"class":208},[67,154789,5649],{"class":77},[67,154791,154792,154795,154797,154799,154801,154804,154806,154808,154810,154813],{"class":69,"line":173},[67,154793,154794],{"class":84},"    \"2024-10-03\"",[67,154796,154750],{"class":77},[67,154798,154180],{"class":84},[67,154800,51974],{"class":77},[67,154802,154803],{"class":208},"17000",[67,154805,13153],{"class":77},[67,154807,154210],{"class":84},[67,154809,51974],{"class":77},[67,154811,154812],{"class":208},"19000",[67,154814,5649],{"class":77},[67,154816,154817],{"class":69,"line":180},[67,154818,2288],{"class":77},[67,154820,154821],{"class":69,"line":186},[67,154822,177],{"emptyLinePlaceholder":176},[67,154824,154825,154828,154830],{"class":69,"line":444},[67,154826,154827],{"class":77},"timeline ",[67,154829,909],{"class":73},[67,154831,154832],{"class":77}," Timeline()\n",[67,154834,154835],{"class":69,"line":2335},[67,154836,177],{"emptyLinePlaceholder":176},[67,154838,154839,154841,154844,154846],{"class":69,"line":2340},[67,154840,74],{"class":73},[67,154842,154843],{"class":77}," date, category_data ",[67,154845,81],{"class":73},[67,154847,149685],{"class":77},[67,154849,154850,154853,154855],{"class":69,"line":2346},[67,154851,154852],{"class":77},"    bar ",[67,154854,909],{"class":73},[67,154856,154599],{"class":77},[67,154858,154859,154862,154864],{"class":69,"line":2351},[67,154860,154861],{"class":77},"    bar.add_xaxis(",[67,154863,154607],{"class":208},[67,154865,154866],{"class":77},"(category_data.keys()))\n",[67,154868,154869,154872,154874,154876,154878],{"class":69,"line":2365},[67,154870,154871],{"class":77},"    bar.add_yaxis(",[67,154873,147832],{"class":84},[67,154875,13153],{"class":77},[67,154877,154607],{"class":208},[67,154879,154880],{"class":77},"(category_data.values()))\n",[67,154882,154883,154886,154889,154891,154893,154895,154897,154899,154901,154903,154905,154907,154910],{"class":69,"line":2370},[67,154884,154885],{"class":77},"    bar.set_global_opts(",[67,154887,154888],{"class":5935},"title_opts",[67,154890,909],{"class":73},[67,154892,148015],{"class":77},[67,154894,51944],{"class":5935},[67,154896,909],{"class":73},[67,154898,915],{"class":73},[67,154900,257],{"class":84},[67,154902,1752],{"class":208},[67,154904,74463],{"class":77},[67,154906,1802],{"class":208},[67,154908,154909],{"class":84},"销售额\"",[67,154911,31034],{"class":77},[67,154913,154914],{"class":69,"line":2376},[67,154915,154916],{"class":77},"    timeline.add(bar, date)\n",[67,154918,154919],{"class":69,"line":2397},[67,154920,177],{"emptyLinePlaceholder":176},[67,154922,154923,154926,154929],{"class":69,"line":2402},[67,154924,154925],{"class":77},"timeline.render(",[67,154927,154928],{"class":84},"\"timeline_sales.html\"",[67,154930,870],{"class":77},[803,154932,154934],{"id":154933},"_128-绘制地图","12.8 绘制地图",[19,154936,154937],{},"地图适合展示地区数据。",[57,154939,154941],{"className":30915,"code":154940,"language":30917,"meta":62,"style":62},"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",[64,154942,154943,154957,154968,154972,154980,154993,155005,155018,155031,155035,155039,155049,155064,155069,155086,155105,155109],{"__ignoreMap":62},[67,154944,154945,154947,154949,154951,154953,154955],{"class":69,"line":70},[67,154946,31274],{"class":73},[67,154948,147916],{"class":77},[67,154950,30929],{"class":73},[67,154952,147921],{"class":77},[67,154954,31920],{"class":73},[67,154956,147926],{"class":77},[67,154958,154959,154961,154963,154965],{"class":69,"line":143},[67,154960,31274],{"class":73},[67,154962,147775],{"class":77},[67,154964,30929],{"class":73},[67,154966,154967],{"class":77}," Map\n",[67,154969,154970],{"class":69,"line":149},[67,154971,177],{"emptyLinePlaceholder":176},[67,154973,154974,154976,154978],{"class":69,"line":155},[67,154975,102195],{"class":77},[67,154977,909],{"class":73},[67,154979,55984],{"class":77},[67,154981,154982,154985,154987,154989,154991],{"class":69,"line":161},[67,154983,154984],{"class":77},"    (",[67,154986,69806],{"class":84},[67,154988,13153],{"class":77},[67,154990,1673],{"class":208},[67,154992,38584],{"class":77},[67,154994,154995,154997,154999,155001,155003],{"class":69,"line":167},[67,154996,154984],{"class":77},[67,154998,69826],{"class":84},[67,155000,13153],{"class":77},[67,155002,147849],{"class":208},[67,155004,38584],{"class":77},[67,155006,155007,155009,155012,155014,155016],{"class":69,"line":173},[67,155008,154984],{"class":77},[67,155010,155011],{"class":84},"\"广东\"",[67,155013,13153],{"class":77},[67,155015,2445],{"class":208},[67,155017,38584],{"class":77},[67,155019,155020,155022,155025,155027,155029],{"class":69,"line":180},[67,155021,154984],{"class":77},[67,155023,155024],{"class":84},"\"浙江\"",[67,155026,13153],{"class":77},[67,155028,147854],{"class":208},[67,155030,38584],{"class":77},[67,155032,155033],{"class":69,"line":186},[67,155034,33783],{"class":77},[67,155036,155037],{"class":69,"line":444},[67,155038,177],{"emptyLinePlaceholder":176},[67,155040,155041,155044,155046],{"class":69,"line":2335},[67,155042,155043],{"class":77},"map_chart ",[67,155045,909],{"class":73},[67,155047,155048],{"class":77}," Map()\n",[67,155050,155051,155054,155056,155059,155062],{"class":69,"line":2340},[67,155052,155053],{"class":77},"map_chart.add(",[67,155055,147832],{"class":84},[67,155057,155058],{"class":77},", data, ",[67,155060,155061],{"class":84},"\"china\"",[67,155063,870],{"class":77},[67,155065,155066],{"class":69,"line":2346},[67,155067,155068],{"class":77},"map_chart.set_global_opts(\n",[67,155070,155071,155073,155075,155077,155079,155081,155084],{"class":69,"line":2351},[67,155072,148010],{"class":5935},[67,155074,909],{"class":73},[67,155076,148015],{"class":77},[67,155078,51944],{"class":5935},[67,155080,909],{"class":73},[67,155082,155083],{"class":84},"\"地区销售额\"",[67,155085,38584],{"class":77},[67,155087,155088,155091,155093,155096,155099,155101,155103],{"class":69,"line":2365},[67,155089,155090],{"class":5935},"    visualmap_opts",[67,155092,909],{"class":73},[67,155094,155095],{"class":77},"opts.VisualMapOpts(",[67,155097,155098],{"class":5935},"max_",[67,155100,909],{"class":73},[67,155102,2445],{"class":208},[67,155104,38584],{"class":77},[67,155106,155107],{"class":69,"line":2370},[67,155108,870],{"class":77},[67,155110,155111,155114,155117],{"class":69,"line":2376},[67,155112,155113],{"class":77},"map_chart.render(",[67,155115,155116],{"class":84},"\"map_sales.html\"",[67,155118,870],{"class":77},[19,155120,155121],{},"地图数据的地区名称要和 pyecharts 内置地图名称匹配，否则可能显示不出来。",[803,155123,155125],{"id":155124},"_129-项目拆分建议","12.9 项目拆分建议",[19,155127,155128],{},"当代码超过一个文件时，可以这样组织：",[57,155130,155133],{"className":155131,"code":155132,"language":5906,"meta":62},[5904],"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",[64,155134,155132],{"__ignoreMap":62},[19,155136,155137],{},"职责：",[815,155139,155140,155146,155152,155158],{},[818,155141,155142,155145],{},[64,155143,155144],{},"main.py","：程序入口。",[818,155147,155148,155151],{},[64,155149,155150],{},"file_utils.py","：读写 JSON。",[818,155153,155154,155157],{},[64,155155,155156],{},"sales_service.py","：统计销售数据。",[818,155159,155160,155163],{},[64,155161,155162],{},"chart_builder.py","：生成图表。",[803,155165,155167],{"id":155166},"_1210-python基础复习清单","12.10 Python基础复习清单",[19,155169,155170],{},"语法基础：",[815,155172,155173,155176,155179,155182],{},[818,155174,155175],{},"会写变量、注释、输入输出。",[818,155177,155178],{},"会使用 int、float、str、bool。",[818,155180,155181],{},"会做类型转换。",[818,155183,155184],{},"会使用 f-string 格式化输出。",[19,155186,155187],{},"流程控制：",[815,155189,155190,155196,155202,155210],{},[818,155191,155192,155193,28922],{},"会写 ",[64,155194,155195],{},"if elif else",[818,155197,155192,155198,101555,155200,28922],{},[64,155199,109200],{},[64,155201,74],{},[818,155203,155204,155205,101555,155207,28922],{},"理解 ",[64,155206,2775],{},[64,155208,155209],{},"continue",[818,155211,155212],{},"能写嵌套循环。",[19,155214,155215],{},"函数：",[815,155217,155218,155221,155224,155227],{},[818,155219,155220],{},"会定义和调用函数。",[818,155222,155223],{},"理解参数和返回值。",[818,155225,155226],{},"知道局部变量和全局变量。",[818,155228,155229],{},"会使用默认参数、关键字参数、不定长参数。",[19,155231,155232],{},"容器：",[815,155234,155235,155238,155241,155244,155247],{},[818,155236,155237],{},"会使用列表增删改查。",[818,155239,155240],{},"会遍历列表、字典。",[818,155242,155243],{},"会使用切片。",[818,155245,155246],{},"会用集合去重。",[818,155248,155249],{},"会处理列表嵌套字典。",[19,155251,155252],{},"文件和模块：",[815,155254,155255,155258,155261,155264,155267],{},[818,155256,155257],{},"会读写文本文件。",[818,155259,155260],{},"会读写 JSON。",[818,155262,155263],{},"会捕获常见异常。",[818,155265,155266],{},"会导入模块和第三方包。",[818,155268,155269],{},"会创建简单包结构。",[19,155271,155272],{},"项目能力：",[815,155274,155275,155278,155281,155284,155287],{},[818,155276,155277],{},"能把代码拆成函数。",[818,155279,155280],{},"能把数据保存到文件。",[818,155282,155283],{},"能处理用户输入错误。",[818,155285,155286],{},"能写一个完整菜单程序。",[818,155288,155289],{},"能用 pyecharts 生成图表。",[803,155291,155293],{"id":155292},"_1211-推荐练习顺序","12.11 推荐练习顺序",[815,155295,155296,155299,155302,155305,155308,155311,155314,155317],{},[818,155297,155298],{},"猜数字游戏。",[818,155300,155301],{},"ATM 菜单程序。",[818,155303,155304],{},"学生成绩统计。",[818,155306,155307],{},"学生管理系统函数版。",[818,155309,155310],{},"学生管理系统文件持久化版。",[818,155312,155313],{},"学生管理系统面向对象版。",[818,155315,155316],{},"销售数据统计。",[818,155318,155319],{},"销售数据可视化。",[803,155321,155323],{"id":155322},"_1212-常见学习误区","12.12 常见学习误区",[815,155325,155326,155329,155332,155335,155338,155341,155344],{},[818,155327,155328],{},"只看视频不敲代码。",[818,155330,155331],{},"一报错就复制错误去搜，不先读报错位置。",[818,155333,155334],{},"变量名随便写，后续自己看不懂。",[818,155336,155337],{},"所有代码都写在一个文件一个函数里。",[818,155339,155340],{},"不保存练习代码，复习时没有材料。",[818,155342,155343],{},"还没掌握列表字典就急着学框架。",[818,155345,155346],{},"不会读官方文档，只依赖教程。",[803,155348,155350],{"id":155349},"_1213-如何读报错","12.13 如何读报错",[19,155352,155353],{},"报错通常从下往上看最后几行。",[19,155355,15852],{},[57,155357,155360],{"className":155358,"code":155359,"language":5906,"meta":62},[5904],"ValueError: invalid literal for int() with base 10: 'abc'\n",[64,155361,155359],{"__ignoreMap":62},[19,155363,25312],{},[815,155365,155366,155372,155382],{},[818,155367,155368,155369,28922],{},"异常类型是 ",[64,155370,155371],{},"ValueError",[818,155373,107882,155374,155377,155378,155381],{},[64,155375,155376],{},"int()"," 无法把 ",[64,155379,155380],{},"'abc'"," 转成整数。",[818,155383,155384],{},"应该检查输入内容或增加异常处理。",[19,155386,155387],{},"再看文件名和行号：",[57,155389,155392],{"className":155390,"code":155391,"language":5906,"meta":62},[5904],"File \"main.py\", line 10, in \u003Cmodule>\n",[64,155393,155391],{"__ignoreMap":62},[19,155395,155396,155397,155399],{},"表示错误发生在 ",[64,155398,155144],{}," 第 10 行。",[803,155401,155403],{"id":155402},"_1214-后续学习方向","12.14 后续学习方向",[19,155405,155406],{},"Python 基础完成后，可以按兴趣选择方向：",[815,155408,155409,155421,155430,155442,155453,155462,155472],{},[818,155410,155411,155412,1072,155415,1072,155418,28922],{},"自动化办公：",[64,155413,155414],{},"openpyxl",[64,155416,155417],{},"python-docx",[64,155419,155420],{},"pdfplumber",[818,155422,155423,155424,1072,155426,1072,155428,28922],{},"数据分析：",[64,155425,101163],{},[64,155427,146722],{},[64,155429,146730],{},[818,155431,155432,155433,1072,155436,1072,155439,28922],{},"Web 后端：",[64,155434,155435],{},"Flask",[64,155437,155438],{},"FastAPI",[64,155440,155441],{},"Django",[818,155443,155444,155445,1072,155447,1072,155450,28922],{},"爬虫：",[64,155446,146707],{},[64,155448,155449],{},"BeautifulSoup",[64,155451,155452],{},"Scrapy",[818,155454,155455,155456,1072,155458,155461],{},"测试开发：",[64,155457,146754],{},[64,155459,155460],{},"selenium","、接口测试。",[818,155463,155464,155465,1072,155467,1072,155469,28922],{},"人工智能：",[64,155466,101163],{},[64,155468,146722],{},[64,155470,155471],{},"pytorch",[818,155473,155474,155475,1072,155477,1072,155480,28922],{},"运维脚本：",[64,155476,146323],{},[64,155478,155479],{},"subprocess",[64,155481,155482],{},"paramiko",[19,155484,155485],{},"不要所有方向同时学。先把 Python 基础和一个小项目做扎实，再选择方向。",[803,155487,155489],{"id":155488},"_1215-结课练习","12.15 结课练习",[815,155491,155492,155495,155498,155501,155504,155507,155510,155513],{},[818,155493,155494],{},"完成函数版学生管理系统。",[818,155496,155497],{},"给学生管理系统增加 JSON 持久化。",[818,155499,155500],{},"给学生管理系统增加异常处理。",[818,155502,155503],{},"把学生管理系统改成面向对象版。",[818,155505,155506],{},"使用 pyecharts 绘制学生成绩柱状图。",[818,155508,155509],{},"读取销售 JSON 数据，统计每日销售额并绘制折线图。",[818,155511,155512],{},"按品类统计销售额并绘制柱状图。",[818,155514,155515],{},"写一份自己的 Python 学习路线图。",[779,155517,155518],{},"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":62,"searchDepth":143,"depth":143,"links":155520},[155521,155522,155525,155526,155527,155533,155534,155535,155536,155537,155538,155539,155540,155541,155542],{"id":152237,"depth":143,"text":152238},{"id":152287,"depth":143,"text":152288,"children":155523},[155524],{"id":152291,"depth":149,"text":152292},{"id":152330,"depth":143,"text":152331},{"id":153804,"depth":143,"text":153805},{"id":154142,"depth":143,"text":154143,"children":155528},[155529,155530,155531,155532],{"id":154146,"depth":149,"text":154147},{"id":154286,"depth":149,"text":154287},{"id":154376,"depth":149,"text":154377},{"id":154462,"depth":149,"text":154463},{"id":154503,"depth":143,"text":154504},{"id":154696,"depth":143,"text":154697},{"id":154933,"depth":143,"text":154934},{"id":155124,"depth":143,"text":155125},{"id":155166,"depth":143,"text":155167},{"id":155292,"depth":143,"text":155293},{"id":155322,"depth":143,"text":155323},{"id":155349,"depth":143,"text":155350},{"id":155402,"depth":143,"text":155403},{"id":155488,"depth":143,"text":155489},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch12",{"title":152229,"description":24093},"wiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线","h907wRG7YTTH927q6GLXFHGSldmwlkML7UOavkE6n1E",{"id":155549,"title":155550,"body":155551,"description":24093,"extension":787,"meta":158020,"navigation":176,"path":158021,"seo":158022,"stem":158023,"__hash__":158024},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串.md","2. 基础语法、变量与字符串",{"type":7,"value":155552,"toc":157995},[155553,155556,155560,155563,155566,155586,155589,155612,155615,155618,155640,155643,155665,155669,155672,155712,155715,155836,155840,155843,155883,155886,155910,155913,155917,155920,155934,155967,155970,156005,156008,156031,156034,156067,156070,156072,156078,156153,156156,156162,156179,156219,156223,156226,156272,156274,156312,156315,156350,156353,156388,156391,156423,156426,156445,156449,156453,156566,156568,156643,156647,156693,156696,156722,156731,156735,156738,156801,156809,156837,156841,156881,156946,156950,156953,156992,156995,157040,157043,157104,157108,157135,157138,157166,157169,157173,157177,157242,157245,157283,157286,157318,157322,157421,157425,157428,157501,157504,157552,157556,157562,157602,157605,157652,157655,157704,157708,157710,157724,157726,157907,157911,157938,157958,157965,157969,157986,157992],[10,155554,155550],{"id":155555},"_2-基础语法变量与字符串",[803,155557,155559],{"id":155558},"_21-注释","2.1 注释",[19,155561,155562],{},"注释是给人看的说明文字，不会被 Python 执行。",[19,155564,155565],{},"单行注释：",[57,155567,155569],{"className":30915,"code":155568,"language":30917,"meta":62,"style":62},"# 这是单行注释\nprint(\"hello\")\n",[64,155570,155571,155576],{"__ignoreMap":62},[67,155572,155573],{"class":69,"line":70},[67,155574,155575],{"class":202},"# 这是单行注释\n",[67,155577,155578,155580,155582,155584],{"class":69,"line":143},[67,155579,30952],{"class":208},[67,155581,864],{"class":77},[67,155583,6563],{"class":84},[67,155585,870],{"class":77},[19,155587,155588],{},"多行说明常用三引号：",[57,155590,155592],{"className":30915,"code":155591,"language":30917,"meta":62,"style":62},"\"\"\"\n这是多行说明。\n常用于文件顶部说明、函数说明等。\n\"\"\"\n",[64,155593,155594,155598,155603,155608],{"__ignoreMap":62},[67,155595,155596],{"class":69,"line":70},[67,155597,96235],{"class":84},[67,155599,155600],{"class":69,"line":143},[67,155601,155602],{"class":84},"这是多行说明。\n",[67,155604,155605],{"class":69,"line":149},[67,155606,155607],{"class":84},"常用于文件顶部说明、函数说明等。\n",[67,155609,155610],{"class":69,"line":155},[67,155611,96235],{"class":84},[19,155613,155614],{},"实际写代码时，注释不要解释显而易见的内容，而要解释意图。",[19,155616,155617],{},"不好：",[57,155619,155621],{"className":30915,"code":155620,"language":30917,"meta":62,"style":62},"# age 加 1\nage = age + 1\n",[64,155622,155623,155628],{"__ignoreMap":62},[67,155624,155625],{"class":69,"line":70},[67,155626,155627],{"class":202},"# age 加 1\n",[67,155629,155630,155632,155634,155636,155638],{"class":69,"line":143},[67,155631,147083],{"class":77},[67,155633,909],{"class":73},[67,155635,16424],{"class":77},[67,155637,1338],{"class":73},[67,155639,56236],{"class":208},[19,155641,155642],{},"较好：",[57,155644,155646],{"className":30915,"code":155645,"language":30917,"meta":62,"style":62},"# 用户过完生日后，年龄增加一岁\nage = age + 1\n",[64,155647,155648,155653],{"__ignoreMap":62},[67,155649,155650],{"class":69,"line":70},[67,155651,155652],{"class":202},"# 用户过完生日后，年龄增加一岁\n",[67,155654,155655,155657,155659,155661,155663],{"class":69,"line":143},[67,155656,147083],{"class":77},[67,155658,909],{"class":73},[67,155660,16424],{"class":77},[67,155662,1338],{"class":73},[67,155664,56236],{"class":208},[803,155666,155668],{"id":155667},"_22-字面量","2.2 字面量",[19,155670,155671],{},"字面量就是代码中直接写出来的数据。",[57,155673,155675],{"className":30915,"code":155674,"language":30917,"meta":62,"style":62},"100          # 整数\n3.14         # 小数\n\"hello\"      # 字符串\nTrue         # 布尔值\nNone         # 空值\n",[64,155676,155677,155684,155691,155698,155705],{"__ignoreMap":62},[67,155678,155679,155681],{"class":69,"line":70},[67,155680,1169],{"class":208},[67,155682,155683],{"class":202},"          # 整数\n",[67,155685,155686,155688],{"class":69,"line":143},[67,155687,912],{"class":208},[67,155689,155690],{"class":202},"         # 小数\n",[67,155692,155693,155695],{"class":69,"line":149},[67,155694,6563],{"class":84},[67,155696,155697],{"class":202},"      # 字符串\n",[67,155699,155700,155702],{"class":69,"line":155},[67,155701,32013],{"class":208},[67,155703,155704],{"class":202},"         # 布尔值\n",[67,155706,155707,155709],{"class":69,"line":161},[67,155708,96223],{"class":208},[67,155710,155711],{"class":202},"         # 空值\n",[19,155713,155714],{},"常见字面量类型：",[998,155716,155717,155727],{},[1001,155718,155719],{},[1004,155720,155721,155723,155725],{},[1007,155722,24454],{},[1007,155724,28029],{},[1007,155726,26578],{},[1044,155728,155729,155740,155751,155762,155774,155786,155798,155811,155823],{},[1004,155730,155731,155733,155737],{},[1049,155732,867],{},[1049,155734,155735],{},[64,155736,1169],{},[1049,155738,155739],{},"整数",[1004,155741,155742,155744,155748],{},[1049,155743,903],{},[1049,155745,155746],{},[64,155747,912],{},[1049,155749,155750],{},"浮点数",[1004,155752,155753,155755,155759],{},[1049,155754,2026],{},[1049,155756,155757],{},[64,155758,6563],{},[1049,155760,155761],{},"字符串",[1004,155763,155764,155766,155772],{},[1049,155765,2078],{},[1049,155767,155768,1072,155770],{},[64,155769,32013],{},[64,155771,34524],{},[1049,155773,66552],{},[1004,155775,155776,155779,155783],{},[1049,155777,155778],{},"NoneType",[1049,155780,155781],{},[64,155782,96223],{},[1049,155784,155785],{},"空值",[1004,155787,155788,155790,155795],{},[1049,155789,154607],{},[1049,155791,155792],{},[64,155793,155794],{},"[1, 2, 3]",[1049,155796,155797],{},"列表",[1004,155799,155800,155803,155808],{},[1049,155801,155802],{},"tuple",[1049,155804,155805],{},[64,155806,155807],{},"(1, 2, 3)",[1049,155809,155810],{},"元组",[1004,155812,155813,155815,155820],{},[1049,155814,115083],{},[1049,155816,155817],{},[64,155818,155819],{},"{\"name\": \"张三\"}",[1049,155821,155822],{},"字典",[1004,155824,155825,155828,155833],{},[1049,155826,155827],{},"set",[1049,155829,155830],{},[64,155831,155832],{},"{1, 2, 3}",[1049,155834,155835],{},"集合",[803,155837,155839],{"id":155838},"_23-变量","2.3 变量",[19,155841,155842],{},"变量是保存数据的名字。",[57,155844,155846],{"className":30915,"code":155845,"language":30917,"meta":62,"style":62},"name = \"小明\"\nage = 18\nheight = 1.75\nis_student = True\n",[64,155847,155848,155856,155864,155874],{"__ignoreMap":62},[67,155849,155850,155852,155854],{"class":69,"line":70},[67,155851,147073],{"class":77},[67,155853,909],{"class":73},[67,155855,149890],{"class":84},[67,155857,155858,155860,155862],{"class":69,"line":143},[67,155859,147083],{"class":77},[67,155861,909],{"class":73},[67,155863,147088],{"class":208},[67,155865,155866,155869,155871],{"class":69,"line":149},[67,155867,155868],{"class":77},"height ",[67,155870,909],{"class":73},[67,155872,155873],{"class":208}," 1.75\n",[67,155875,155876,155879,155881],{"class":69,"line":155},[67,155877,155878],{"class":77},"is_student ",[67,155880,909],{"class":73},[67,155882,154136],{"class":208},[19,155884,155885],{},"Python 的变量不需要提前声明类型：",[57,155887,155889],{"className":30915,"code":155888,"language":30917,"meta":62,"style":62},"score = 100\nscore = \"满分\"\n",[64,155890,155891,155901],{"__ignoreMap":62},[67,155892,155893,155896,155898],{"class":69,"line":70},[67,155894,155895],{"class":77},"score ",[67,155897,909],{"class":73},[67,155899,155900],{"class":208}," 100\n",[67,155902,155903,155905,155907],{"class":69,"line":143},[67,155904,155895],{"class":77},[67,155906,909],{"class":73},[67,155908,155909],{"class":84}," \"满分\"\n",[19,155911,155912],{},"这虽然合法，但不建议在同一段逻辑里频繁改变变量含义，否则代码难读。",[803,155914,155916],{"id":155915},"_24-变量命名规则","2.4 变量命名规则",[19,155918,155919],{},"硬性规则：",[815,155921,155922,155925,155928,155931],{},[818,155923,155924],{},"只能由字母、数字、下划线组成。",[818,155926,155927],{},"不能以数字开头。",[818,155929,155930],{},"不能使用 Python 关键字。",[818,155932,155933],{},"区分大小写。",[57,155935,155937],{"className":30915,"code":155936,"language":30917,"meta":62,"style":62},"user_name = \"张三\"\nage2 = 18\n_token = \"abc\"\n",[64,155938,155939,155948,155957],{"__ignoreMap":62},[67,155940,155941,155944,155946],{"class":69,"line":70},[67,155942,155943],{"class":77},"user_name ",[67,155945,909],{"class":73},[67,155947,147078],{"class":84},[67,155949,155950,155953,155955],{"class":69,"line":143},[67,155951,155952],{"class":77},"age2 ",[67,155954,909],{"class":73},[67,155956,147088],{"class":208},[67,155958,155959,155962,155964],{"class":69,"line":149},[67,155960,155961],{"class":77},"_token ",[67,155963,909],{"class":73},[67,155965,155966],{"class":84}," \"abc\"\n",[19,155968,155969],{},"错误写法：",[57,155971,155973],{"className":30915,"code":155972,"language":30917,"meta":62,"style":62},"2age = 18\nuser-name = \"张三\"\nclass = \"一班\"\n",[64,155974,155975,155984,155996],{"__ignoreMap":62},[67,155976,155977,155980,155982],{"class":69,"line":70},[67,155978,155979],{"class":77940},"2age",[67,155981,14282],{"class":73},[67,155983,147088],{"class":208},[67,155985,155986,155988,155990,155992,155994],{"class":69,"line":143},[67,155987,132121],{"class":77},[67,155989,1389],{"class":73},[67,155991,147073],{"class":77},[67,155993,909],{"class":73},[67,155995,147078],{"class":84},[67,155997,155998,156000,156002],{"class":69,"line":149},[67,155999,15411],{"class":73},[67,156001,14282],{"class":73},[67,156003,156004],{"class":84}," \"一班\"\n",[19,156006,156007],{},"查看关键字：",[57,156009,156011],{"className":30915,"code":156010,"language":30917,"meta":62,"style":62},"import keyword\n\nprint(keyword.kwlist)\n",[64,156012,156013,156020,156024],{"__ignoreMap":62},[67,156014,156015,156017],{"class":69,"line":70},[67,156016,30929],{"class":73},[67,156018,156019],{"class":77}," keyword\n",[67,156021,156022],{"class":69,"line":143},[67,156023,177],{"emptyLinePlaceholder":176},[67,156025,156026,156028],{"class":69,"line":149},[67,156027,30952],{"class":208},[67,156029,156030],{"class":77},"(keyword.kwlist)\n",[19,156032,156033],{},"推荐命名风格：",[57,156035,156037],{"className":30915,"code":156036,"language":30917,"meta":62,"style":62},"student_name = \"小明\"\ntotal_price = 99.8\nis_finished = False\n",[64,156038,156039,156048,156058],{"__ignoreMap":62},[67,156040,156041,156044,156046],{"class":69,"line":70},[67,156042,156043],{"class":77},"student_name ",[67,156045,909],{"class":73},[67,156047,149890],{"class":84},[67,156049,156050,156053,156055],{"class":69,"line":143},[67,156051,156052],{"class":77},"total_price ",[67,156054,909],{"class":73},[67,156056,156057],{"class":208}," 99.8\n",[67,156059,156060,156063,156065],{"class":69,"line":149},[67,156061,156062],{"class":77},"is_finished ",[67,156064,909],{"class":73},[67,156066,126344],{"class":208},[19,156068,156069],{},"Python 中变量名通常使用小写字母和下划线，也叫 snake_case。",[803,156071,51269],{"id":51268},[19,156073,104903,156074,156077],{},[64,156075,156076],{},"type()"," 查看数据类型：",[57,156079,156081],{"className":30915,"code":156080,"language":30917,"meta":62,"style":62},"print(type(100))\nprint(type(3.14))\nprint(type(\"hello\"))\nprint(type(True))\nprint(type(None))\n",[64,156082,156083,156097,156111,156125,156139],{"__ignoreMap":62},[67,156084,156085,156087,156089,156091,156093,156095],{"class":69,"line":70},[67,156086,30952],{"class":208},[67,156088,864],{"class":77},[67,156090,103644],{"class":208},[67,156092,864],{"class":77},[67,156094,1169],{"class":208},[67,156096,31034],{"class":77},[67,156098,156099,156101,156103,156105,156107,156109],{"class":69,"line":143},[67,156100,30952],{"class":208},[67,156102,864],{"class":77},[67,156104,103644],{"class":208},[67,156106,864],{"class":77},[67,156108,912],{"class":208},[67,156110,31034],{"class":77},[67,156112,156113,156115,156117,156119,156121,156123],{"class":69,"line":149},[67,156114,30952],{"class":208},[67,156116,864],{"class":77},[67,156118,103644],{"class":208},[67,156120,864],{"class":77},[67,156122,6563],{"class":84},[67,156124,31034],{"class":77},[67,156126,156127,156129,156131,156133,156135,156137],{"class":69,"line":155},[67,156128,30952],{"class":208},[67,156130,864],{"class":77},[67,156132,103644],{"class":208},[67,156134,864],{"class":77},[67,156136,32013],{"class":208},[67,156138,31034],{"class":77},[67,156140,156141,156143,156145,156147,156149,156151],{"class":69,"line":161},[67,156142,30952],{"class":208},[67,156144,864],{"class":77},[67,156146,103644],{"class":208},[67,156148,864],{"class":77},[67,156150,96223],{"class":208},[67,156152,31034],{"class":77},[19,156154,156155],{},"输出类似：",[57,156157,156160],{"className":156158,"code":156159,"language":5906,"meta":62},[5904],"\u003Cclass 'int'>\n\u003Cclass 'float'>\n\u003Cclass 'str'>\n\u003Cclass 'bool'>\n\u003Cclass 'NoneType'>\n",[64,156161,156159],{"__ignoreMap":62},[19,156163,9744,156164,107820,156166,156168,156169,156171,156172,22217,156174,156171,156176,156178],{},[64,156165,2078],{},[64,156167,867],{}," 的子类，",[64,156170,32013],{}," 可以当作 ",[64,156173,1077],{},[64,156175,34524],{},[64,156177,1051],{},"，但业务代码中不要滥用。",[57,156180,156182],{"className":30915,"code":156181,"language":30917,"meta":62,"style":62},"print(True + 1)   # 2\nprint(False + 1)  # 1\n",[64,156183,156184,156202],{"__ignoreMap":62},[67,156185,156186,156188,156190,156192,156194,156196,156199],{"class":69,"line":70},[67,156187,30952],{"class":208},[67,156189,864],{"class":77},[67,156191,32013],{"class":208},[67,156193,46103],{"class":73},[67,156195,25828],{"class":208},[67,156197,156198],{"class":77},")   ",[67,156200,156201],{"class":202},"# 2\n",[67,156203,156204,156206,156208,156210,156212,156214,156216],{"class":69,"line":143},[67,156205,30952],{"class":208},[67,156207,864],{"class":77},[67,156209,34524],{"class":208},[67,156211,46103],{"class":73},[67,156213,25828],{"class":208},[67,156215,46345],{"class":77},[67,156217,156218],{"class":202},"# 1\n",[803,156220,156222],{"id":156221},"_26-类型转换","2.6 类型转换",[19,156224,156225],{},"常用转换函数：",[57,156227,156229],{"className":30915,"code":156228,"language":30917,"meta":62,"style":62},"int(\"10\")\nfloat(\"3.14\")\nstr(100)\nbool(1)\n",[64,156230,156231,156241,156252,156262],{"__ignoreMap":62},[67,156232,156233,156235,156237,156239],{"class":69,"line":70},[67,156234,867],{"class":208},[67,156236,864],{"class":77},[67,156238,54853],{"class":84},[67,156240,870],{"class":77},[67,156242,156243,156245,156247,156250],{"class":69,"line":143},[67,156244,903],{"class":208},[67,156246,864],{"class":77},[67,156248,156249],{"class":84},"\"3.14\"",[67,156251,870],{"class":77},[67,156253,156254,156256,156258,156260],{"class":69,"line":149},[67,156255,2026],{"class":208},[67,156257,864],{"class":77},[67,156259,1169],{"class":208},[67,156261,870],{"class":77},[67,156263,156264,156266,156268,156270],{"class":69,"line":155},[67,156265,2078],{"class":208},[67,156267,864],{"class":77},[67,156269,1077],{"class":208},[67,156271,870],{"class":77},[19,156273,15852],{},[57,156275,156277],{"className":30915,"code":156276,"language":30917,"meta":62,"style":62},"age = \"18\"\nage = int(age)\nprint(age + 1)\n",[64,156278,156279,156288,156299],{"__ignoreMap":62},[67,156280,156281,156283,156285],{"class":69,"line":70},[67,156282,147083],{"class":77},[67,156284,909],{"class":73},[67,156286,156287],{"class":84}," \"18\"\n",[67,156289,156290,156292,156294,156296],{"class":69,"line":143},[67,156291,147083],{"class":77},[67,156293,909],{"class":73},[67,156295,3104],{"class":208},[67,156297,156298],{"class":77},"(age)\n",[67,156300,156301,156303,156306,156308,156310],{"class":69,"line":149},[67,156302,30952],{"class":208},[67,156304,156305],{"class":77},"(age ",[67,156307,1338],{"class":73},[67,156309,25828],{"class":208},[67,156311,870],{"class":77},[19,156313,156314],{},"输入得到的内容永远是字符串：",[57,156316,156318],{"className":30915,"code":156317,"language":30917,"meta":62,"style":62},"num = input(\"请输入数字:\")\nprint(type(num))  # str\n",[64,156319,156320,156336],{"__ignoreMap":62},[67,156321,156322,156325,156327,156329,156331,156334],{"class":69,"line":70},[67,156323,156324],{"class":77},"num ",[67,156326,909],{"class":73},[67,156328,61142],{"class":208},[67,156330,864],{"class":77},[67,156332,156333],{"class":84},"\"请输入数字:\"",[67,156335,870],{"class":77},[67,156337,156338,156340,156342,156344,156347],{"class":69,"line":143},[67,156339,30952],{"class":208},[67,156341,864],{"class":77},[67,156343,103644],{"class":208},[67,156345,156346],{"class":77},"(num))  ",[67,156348,156349],{"class":202},"# str\n",[19,156351,156352],{},"如果要做数学运算，必须转换：",[57,156354,156356],{"className":30915,"code":156355,"language":30917,"meta":62,"style":62},"num = int(input(\"请输入数字:\"))\nprint(num + 10)\n",[64,156357,156358,156376],{"__ignoreMap":62},[67,156359,156360,156362,156364,156366,156368,156370,156372,156374],{"class":69,"line":70},[67,156361,156324],{"class":77},[67,156363,909],{"class":73},[67,156365,3104],{"class":208},[67,156367,864],{"class":77},[67,156369,54358],{"class":208},[67,156371,864],{"class":77},[67,156373,156333],{"class":84},[67,156375,31034],{"class":77},[67,156377,156378,156380,156382,156384,156386],{"class":69,"line":143},[67,156379,30952],{"class":208},[67,156381,46156],{"class":77},[67,156383,1338],{"class":73},[67,156385,2760],{"class":208},[67,156387,870],{"class":77},[19,156389,156390],{},"常见错误：",[57,156392,156394],{"className":30915,"code":156393,"language":30917,"meta":62,"style":62},"int(\"3.14\")   # 错误\nint(\"abc\")    # 错误\n",[64,156395,156396,156409],{"__ignoreMap":62},[67,156397,156398,156400,156402,156404,156406],{"class":69,"line":70},[67,156399,867],{"class":208},[67,156401,864],{"class":77},[67,156403,156249],{"class":84},[67,156405,156198],{"class":77},[67,156407,156408],{"class":202},"# 错误\n",[67,156410,156411,156413,156415,156418,156421],{"class":69,"line":143},[67,156412,867],{"class":208},[67,156414,864],{"class":77},[67,156416,156417],{"class":84},"\"abc\"",[67,156419,156420],{"class":77},")    ",[67,156422,156408],{"class":202},[19,156424,156425],{},"正确写法：",[57,156427,156429],{"className":30915,"code":156428,"language":30917,"meta":62,"style":62},"num = float(\"3.14\")\n",[64,156430,156431],{"__ignoreMap":62},[67,156432,156433,156435,156437,156439,156441,156443],{"class":69,"line":70},[67,156434,156324],{"class":77},[67,156436,909],{"class":73},[67,156438,110334],{"class":208},[67,156440,864],{"class":77},[67,156442,156249],{"class":84},[67,156444,870],{"class":77},[803,156446,156448],{"id":156447},"_27-运算符","2.7 运算符",[14,156450,156452],{"id":156451},"_271-算术运算符","2.7.1 算术运算符",[998,156454,156455,156466],{},[1001,156456,156457],{},[1004,156458,156459,156462,156464],{},[1007,156460,156461],{},"运算符",[1007,156463,26578],{},[1007,156465,28029],{},[1044,156467,156468,156482,156496,156510,156524,156538,156552],{},[1004,156469,156470,156474,156477],{},[1049,156471,156472],{},[64,156473,1338],{},[1049,156475,156476],{},"加法",[1049,156478,156479],{},[64,156480,156481],{},"1 + 2",[1004,156483,156484,156488,156491],{},[1049,156485,156486],{},[64,156487,1389],{},[1049,156489,156490],{},"减法",[1049,156492,156493],{},[64,156494,156495],{},"5 - 3",[1004,156497,156498,156502,156505],{},[1049,156499,156500],{},[64,156501,1312],{},[1049,156503,156504],{},"乘法",[1049,156506,156507],{},[64,156508,156509],{},"2 * 3",[1004,156511,156512,156516,156519],{},[1049,156513,156514],{},[64,156515,1440],{},[1049,156517,156518],{},"除法，结果是浮点数",[1049,156520,156521],{},[64,156522,156523],{},"5 \u002F 2",[1004,156525,156526,156530,156533],{},[1049,156527,156528],{},[64,156529,33866],{},[1049,156531,156532],{},"整除",[1049,156534,156535],{},[64,156536,156537],{},"5 \u002F\u002F 2",[1004,156539,156540,156544,156547],{},[1049,156541,156542],{},[64,156543,1186],{},[1049,156545,156546],{},"取余",[1049,156548,156549],{},[64,156550,156551],{},"5 % 2",[1004,156553,156554,156558,156561],{},[1049,156555,156556],{},[64,156557,11379],{},[1049,156559,156560],{},"幂运算",[1049,156562,156563],{},[64,156564,156565],{},"2 ** 3",[19,156567,15852],{},[57,156569,156571],{"className":30915,"code":156570,"language":30917,"meta":62,"style":62},"print(5 \u002F 2)   # 2.5\nprint(5 \u002F\u002F 2)  # 2\nprint(5 % 2)   # 1\nprint(2 ** 3)  # 8\n",[64,156572,156573,156591,156608,156625],{"__ignoreMap":62},[67,156574,156575,156577,156579,156581,156584,156586,156588],{"class":69,"line":70},[67,156576,30952],{"class":208},[67,156578,864],{"class":77},[67,156580,1177],{"class":208},[67,156582,156583],{"class":73}," \u002F",[67,156585,15472],{"class":208},[67,156587,156198],{"class":77},[67,156589,156590],{"class":202},"# 2.5\n",[67,156592,156593,156595,156597,156599,156602,156604,156606],{"class":69,"line":143},[67,156594,30952],{"class":208},[67,156596,864],{"class":77},[67,156598,1177],{"class":208},[67,156600,156601],{"class":73}," \u002F\u002F",[67,156603,15472],{"class":208},[67,156605,46345],{"class":77},[67,156607,156201],{"class":202},[67,156609,156610,156612,156614,156616,156619,156621,156623],{"class":69,"line":149},[67,156611,30952],{"class":208},[67,156613,864],{"class":77},[67,156615,1177],{"class":208},[67,156617,156618],{"class":73}," %",[67,156620,15472],{"class":208},[67,156622,156198],{"class":77},[67,156624,156218],{"class":202},[67,156626,156627,156629,156631,156633,156636,156638,156640],{"class":69,"line":155},[67,156628,30952],{"class":208},[67,156630,864],{"class":77},[67,156632,939],{"class":208},[67,156634,156635],{"class":73}," **",[67,156637,78607],{"class":208},[67,156639,46345],{"class":77},[67,156641,156642],{"class":202},"# 8\n",[14,156644,156646],{"id":156645},"_272-赋值运算符","2.7.2 赋值运算符",[57,156648,156650],{"className":30915,"code":156649,"language":30917,"meta":62,"style":62},"num = 10\nnum += 5\nnum -= 2\nnum *= 3\nnum \u002F= 2\n",[64,156651,156652,156660,156668,156676,156684],{"__ignoreMap":62},[67,156653,156654,156656,156658],{"class":69,"line":70},[67,156655,156324],{"class":77},[67,156657,909],{"class":73},[67,156659,58965],{"class":208},[67,156661,156662,156664,156666],{"class":69,"line":143},[67,156663,156324],{"class":77},[67,156665,10196],{"class":73},[67,156667,54964],{"class":208},[67,156669,156670,156672,156674],{"class":69,"line":149},[67,156671,156324],{"class":77},[67,156673,150789],{"class":73},[67,156675,48260],{"class":208},[67,156677,156678,156680,156682],{"class":69,"line":155},[67,156679,156324],{"class":77},[67,156681,137685],{"class":73},[67,156683,120573],{"class":208},[67,156685,156686,156688,156691],{"class":69,"line":161},[67,156687,156324],{"class":77},[67,156689,156690],{"class":73},"\u002F=",[67,156692,48260],{"class":208},[19,156694,156695],{},"等价关系：",[57,156697,156699],{"className":30915,"code":156698,"language":30917,"meta":62,"style":62},"num += 1\nnum = num + 1\n",[64,156700,156701,156709],{"__ignoreMap":62},[67,156702,156703,156705,156707],{"class":69,"line":70},[67,156704,156324],{"class":77},[67,156706,10196],{"class":73},[67,156708,56236],{"class":208},[67,156710,156711,156713,156715,156718,156720],{"class":69,"line":143},[67,156712,156324],{"class":77},[67,156714,909],{"class":73},[67,156716,156717],{"class":77}," num ",[67,156719,1338],{"class":73},[67,156721,56236],{"class":208},[19,156723,156724,156725,101555,156728,28922],{},"Python 没有 ",[64,156726,156727],{},"num++",[64,156729,156730],{},"num--",[14,156732,156734],{"id":156733},"_273-比较运算符","2.7.3 比较运算符",[19,156736,156737],{},"比较运算结果是布尔值。",[57,156739,156741],{"className":30915,"code":156740,"language":30917,"meta":62,"style":62},"print(10 > 5)\nprint(10 >= 10)\nprint(10 == 8)\nprint(10 != 8)\n",[64,156742,156743,156757,156772,156786],{"__ignoreMap":62},[67,156744,156745,156747,156749,156751,156753,156755],{"class":69,"line":70},[67,156746,30952],{"class":208},[67,156748,864],{"class":77},[67,156750,1303],{"class":208},[67,156752,282],{"class":73},[67,156754,2870],{"class":208},[67,156756,870],{"class":77},[67,156758,156759,156761,156763,156765,156768,156770],{"class":69,"line":143},[67,156760,30952],{"class":208},[67,156762,864],{"class":77},[67,156764,1303],{"class":208},[67,156766,156767],{"class":73}," >=",[67,156769,2760],{"class":208},[67,156771,870],{"class":77},[67,156773,156774,156776,156778,156780,156782,156784],{"class":69,"line":149},[67,156775,30952],{"class":208},[67,156777,864],{"class":77},[67,156779,1303],{"class":208},[67,156781,102096],{"class":73},[67,156783,2805],{"class":208},[67,156785,870],{"class":77},[67,156787,156788,156790,156792,156794,156797,156799],{"class":69,"line":155},[67,156789,30952],{"class":208},[67,156791,864],{"class":77},[67,156793,1303],{"class":208},[67,156795,156796],{"class":73}," !=",[67,156798,2805],{"class":208},[67,156800,870],{"class":77},[19,156802,156803,156804,156806,156807,28922],{},"注意：判断相等用 ",[64,156805,3670],{},"，赋值用 ",[64,156808,909],{},[57,156810,156812],{"className":30915,"code":156811,"language":30917,"meta":62,"style":62},"age = 18       # 赋值\nage == 18      # 判断是否相等\n",[64,156813,156814,156826],{"__ignoreMap":62},[67,156815,156816,156818,156820,156823],{"class":69,"line":70},[67,156817,147083],{"class":77},[67,156819,909],{"class":73},[67,156821,156822],{"class":208}," 18",[67,156824,156825],{"class":202},"       # 赋值\n",[67,156827,156828,156830,156832,156834],{"class":69,"line":143},[67,156829,147083],{"class":77},[67,156831,3670],{"class":73},[67,156833,156822],{"class":208},[67,156835,156836],{"class":202},"      # 判断是否相等\n",[14,156838,156840],{"id":156839},"_274-逻辑运算符","2.7.4 逻辑运算符",[998,156842,156843,156851],{},[1001,156844,156845],{},[1004,156846,156847,156849],{},[1007,156848,156461],{},[1007,156850,26578],{},[1044,156852,156853,156862,156871],{},[1004,156854,156855,156859],{},[1049,156856,156857],{},[64,156858,30999],{},[1049,156860,156861],{},"并且",[1004,156863,156864,156868],{},[1049,156865,156866],{},[64,156867,115627],{},[1049,156869,156870],{},"或者",[1004,156872,156873,156878],{},[1049,156874,156875],{},[64,156876,156877],{},"not",[1049,156879,156880],{},"取反",[57,156882,156884],{"className":30915,"code":156883,"language":30917,"meta":62,"style":62},"age = 20\nhas_ticket = True\n\nprint(age >= 18 and has_ticket)\nprint(age \u003C 18 or has_ticket)\nprint(not has_ticket)\n",[64,156885,156886,156894,156903,156907,156922,156936],{"__ignoreMap":62},[67,156887,156888,156890,156892],{"class":69,"line":70},[67,156889,147083],{"class":77},[67,156891,909],{"class":73},[67,156893,88602],{"class":208},[67,156895,156896,156899,156901],{"class":69,"line":143},[67,156897,156898],{"class":77},"has_ticket ",[67,156900,909],{"class":73},[67,156902,154136],{"class":208},[67,156904,156905],{"class":69,"line":149},[67,156906,177],{"emptyLinePlaceholder":176},[67,156908,156909,156911,156913,156915,156917,156919],{"class":69,"line":155},[67,156910,30952],{"class":208},[67,156912,156305],{"class":77},[67,156914,2433],{"class":73},[67,156916,156822],{"class":208},[67,156918,120966],{"class":73},[67,156920,156921],{"class":77}," has_ticket)\n",[67,156923,156924,156926,156928,156930,156932,156934],{"class":69,"line":161},[67,156925,30952],{"class":208},[67,156927,156305],{"class":77},[67,156929,1766],{"class":73},[67,156931,156822],{"class":208},[67,156933,114738],{"class":73},[67,156935,156921],{"class":77},[67,156937,156938,156940,156942,156944],{"class":69,"line":167},[67,156939,30952],{"class":208},[67,156941,864],{"class":77},[67,156943,156877],{"class":73},[67,156945,156921],{"class":77},[803,156947,156949],{"id":156948},"_28-字符串定义","2.8 字符串定义",[19,156951,156952],{},"三种常见写法：",[57,156954,156956],{"className":30915,"code":156955,"language":30917,"meta":62,"style":62},"name1 = '小明'\nname2 = \"小明\"\ntext = \"\"\"这是多行字符串\n可以换行\"\"\"\n",[64,156957,156958,156968,156977,156987],{"__ignoreMap":62},[67,156959,156960,156963,156965],{"class":69,"line":70},[67,156961,156962],{"class":77},"name1 ",[67,156964,909],{"class":73},[67,156966,156967],{"class":84}," '小明'\n",[67,156969,156970,156973,156975],{"class":69,"line":143},[67,156971,156972],{"class":77},"name2 ",[67,156974,909],{"class":73},[67,156976,149890],{"class":84},[67,156978,156979,156982,156984],{"class":69,"line":149},[67,156980,156981],{"class":77},"text ",[67,156983,909],{"class":73},[67,156985,156986],{"class":84}," \"\"\"这是多行字符串\n",[67,156988,156989],{"class":69,"line":155},[67,156990,156991],{"class":84},"可以换行\"\"\"\n",[19,156993,156994],{},"字符串中包含引号：",[57,156996,156998],{"className":30915,"code":156997,"language":30917,"meta":62,"style":62},"msg = \"他说:'你好'\"\nmsg2 = '他说:\"你好\"'\nmsg3 = \"他说:\\\"你好\\\"\"\n",[64,156999,157000,157010,157020],{"__ignoreMap":62},[67,157001,157002,157005,157007],{"class":69,"line":70},[67,157003,157004],{"class":77},"msg ",[67,157006,909],{"class":73},[67,157008,157009],{"class":84}," \"他说:'你好'\"\n",[67,157011,157012,157015,157017],{"class":69,"line":143},[67,157013,157014],{"class":77},"msg2 ",[67,157016,909],{"class":73},[67,157018,157019],{"class":84}," '他说:\"你好\"'\n",[67,157021,157022,157025,157027,157030,157033,157036,157038],{"class":69,"line":149},[67,157023,157024],{"class":77},"msg3 ",[67,157026,909],{"class":73},[67,157028,157029],{"class":84}," \"他说:",[67,157031,157032],{"class":208},"\\\"",[67,157034,157035],{"class":84},"你好",[67,157037,157032],{"class":208},[67,157039,25842],{"class":84},[19,157041,157042],{},"常见转义字符：",[998,157044,157045,157054],{},[1001,157046,157047],{},[1004,157048,157049,157052],{},[1007,157050,157051],{},"写法",[1007,157053,101237],{},[1044,157055,157056,157066,157075,157085,157094],{},[1004,157057,157058,157063],{},[1049,157059,157060],{},[64,157061,157062],{},"\\n",[1049,157064,157065],{},"换行",[1004,157067,157068,157072],{},[1049,157069,157070],{},[64,157071,1957],{},[1049,157073,157074],{},"制表符",[1004,157076,157077,157082],{},[1049,157078,157079],{},[64,157080,157081],{},"\\\\",[1049,157083,157084],{},"反斜杠",[1004,157086,157087,157091],{},[1049,157088,157089],{},[64,157090,157032],{},[1049,157092,157093],{},"双引号",[1004,157095,157096,157101],{},[1049,157097,157098],{},[64,157099,157100],{},"\\'",[1049,157102,157103],{},"单引号",[803,157105,157107],{"id":157106},"_29-字符串拼接","2.9 字符串拼接",[57,157109,157111],{"className":30915,"code":157110,"language":30917,"meta":62,"style":62},"name = \"小明\"\nprint(\"你好，\" + name)\n",[64,157112,157113,157121],{"__ignoreMap":62},[67,157114,157115,157117,157119],{"class":69,"line":70},[67,157116,147073],{"class":77},[67,157118,909],{"class":73},[67,157120,149890],{"class":84},[67,157122,157123,157125,157127,157130,157132],{"class":69,"line":143},[67,157124,30952],{"class":208},[67,157126,864],{"class":77},[67,157128,157129],{"class":84},"\"你好，\"",[67,157131,46103],{"class":73},[67,157133,157134],{"class":77}," name)\n",[19,157136,157137],{},"字符串只能和字符串拼接：",[57,157139,157141],{"className":30915,"code":157140,"language":30917,"meta":62,"style":62},"age = 18\nprint(\"年龄:\" + str(age))\n",[64,157142,157143,157151],{"__ignoreMap":62},[67,157144,157145,157147,157149],{"class":69,"line":70},[67,157146,147083],{"class":77},[67,157148,909],{"class":73},[67,157150,147088],{"class":208},[67,157152,157153,157155,157157,157159,157161,157163],{"class":69,"line":143},[67,157154,30952],{"class":208},[67,157156,864],{"class":77},[67,157158,147054],{"class":84},[67,157160,46103],{"class":73},[67,157162,74456],{"class":208},[67,157164,157165],{"class":77},"(age))\n",[19,157167,157168],{},"更推荐使用格式化字符串。",[803,157170,157172],{"id":157171},"_210-字符串格式化","2.10 字符串格式化",[14,157174,157176],{"id":157175},"_2101-百分号格式化","2.10.1 百分号格式化",[57,157178,157180],{"className":30915,"code":157179,"language":30917,"meta":62,"style":62},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(\"姓名:%s 年龄:%d 分数:%.1f\" % (name, age, score))\n",[64,157181,157182,157190,157198,157207,157211],{"__ignoreMap":62},[67,157183,157184,157186,157188],{"class":69,"line":70},[67,157185,147073],{"class":77},[67,157187,909],{"class":73},[67,157189,149890],{"class":84},[67,157191,157192,157194,157196],{"class":69,"line":143},[67,157193,147083],{"class":77},[67,157195,909],{"class":73},[67,157197,147088],{"class":208},[67,157199,157200,157202,157204],{"class":69,"line":149},[67,157201,155895],{"class":77},[67,157203,909],{"class":73},[67,157205,157206],{"class":208}," 95.5\n",[67,157208,157209],{"class":69,"line":155},[67,157210,177],{"emptyLinePlaceholder":176},[67,157212,157213,157215,157217,157220,157223,157226,157229,157232,157235,157237,157239],{"class":69,"line":161},[67,157214,30952],{"class":208},[67,157216,864],{"class":77},[67,157218,157219],{"class":84},"\"姓名:",[67,157221,157222],{"class":208},"%s",[67,157224,157225],{"class":84}," 年龄:",[67,157227,157228],{"class":208},"%d",[67,157230,157231],{"class":84}," 分数:",[67,157233,157234],{"class":208},"%.1f",[67,157236,257],{"class":84},[67,157238,156618],{"class":73},[67,157240,157241],{"class":77}," (name, age, score))\n",[19,157243,157244],{},"常用占位符：",[998,157246,157247,157256],{},[1001,157248,157249],{},[1004,157250,157251,157254],{},[1007,157252,157253],{},"占位符",[1007,157255,26578],{},[1044,157257,157258,157266,157274],{},[1004,157259,157260,157264],{},[1049,157261,157262],{},[64,157263,157222],{},[1049,157265,155761],{},[1004,157267,157268,157272],{},[1049,157269,157270],{},[64,157271,157228],{},[1049,157273,155739],{},[1004,157275,157276,157281],{},[1049,157277,157278],{},[64,157279,157280],{},"%f",[1049,157282,155750],{},[19,157284,157285],{},"精度控制：",[57,157287,157289],{"className":30915,"code":157288,"language":30917,"meta":62,"style":62},"price = 12.3456\nprint(\"%.2f\" % price)\n",[64,157290,157291,157300],{"__ignoreMap":62},[67,157292,157293,157295,157297],{"class":69,"line":70},[67,157294,147218],{"class":77},[67,157296,909],{"class":73},[67,157298,157299],{"class":208}," 12.3456\n",[67,157301,157302,157304,157306,157308,157311,157313,157315],{"class":69,"line":143},[67,157303,30952],{"class":208},[67,157305,864],{"class":77},[67,157307,257],{"class":84},[67,157309,157310],{"class":208},"%.2f",[67,157312,257],{"class":84},[67,157314,156618],{"class":73},[67,157316,157317],{"class":77}," price)\n",[14,157319,157321],{"id":157320},"_2102-format方法","2.10.2 format方法",[57,157323,157325],{"className":30915,"code":157324,"language":30917,"meta":62,"style":62},"name = \"小明\"\nage = 18\n\nprint(\"姓名:{} 年龄:{}\".format(name, age))\nprint(\"姓名:{0} 年龄:{1}\".format(name, age))\nprint(\"姓名:{name} 年龄:{age}\".format(name=name, age=age))\n",[64,157326,157327,157335,157343,157347,157366,157386],{"__ignoreMap":62},[67,157328,157329,157331,157333],{"class":69,"line":70},[67,157330,147073],{"class":77},[67,157332,909],{"class":73},[67,157334,149890],{"class":84},[67,157336,157337,157339,157341],{"class":69,"line":143},[67,157338,147083],{"class":77},[67,157340,909],{"class":73},[67,157342,147088],{"class":208},[67,157344,157345],{"class":69,"line":149},[67,157346,177],{"emptyLinePlaceholder":176},[67,157348,157349,157351,157353,157355,157357,157359,157361,157363],{"class":69,"line":155},[67,157350,30952],{"class":208},[67,157352,864],{"class":77},[67,157354,157219],{"class":84},[67,157356,32996],{"class":208},[67,157358,157225],{"class":84},[67,157360,32996],{"class":208},[67,157362,257],{"class":84},[67,157364,157365],{"class":77},".format(name, age))\n",[67,157367,157368,157370,157372,157374,157377,157379,157382,157384],{"class":69,"line":161},[67,157369,30952],{"class":208},[67,157371,864],{"class":77},[67,157373,157219],{"class":84},[67,157375,157376],{"class":208},"{0}",[67,157378,157225],{"class":84},[67,157380,157381],{"class":208},"{1}",[67,157383,257],{"class":84},[67,157385,157365],{"class":77},[67,157387,157388,157390,157392,157394,157397,157399,157402,157404,157407,157409,157411,157414,157416,157418],{"class":69,"line":167},[67,157389,30952],{"class":208},[67,157391,864],{"class":77},[67,157393,157219],{"class":84},[67,157395,157396],{"class":208},"{name}",[67,157398,157225],{"class":84},[67,157400,157401],{"class":208},"{age}",[67,157403,257],{"class":84},[67,157405,157406],{"class":77},".format(",[67,157408,80347],{"class":5935},[67,157410,909],{"class":73},[67,157412,157413],{"class":77},"name, ",[67,157415,70758],{"class":5935},[67,157417,909],{"class":73},[67,157419,157420],{"class":77},"age))\n",[14,157422,157424],{"id":157423},"_2103-f-string","2.10.3 f-string",[19,157426,157427],{},"推荐写法：",[57,157429,157431],{"className":30915,"code":157430,"language":30917,"meta":62,"style":62},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(f\"姓名:{name} 年龄:{age} 分数:{score:.1f}\")\n",[64,157432,157433,157441,157449,157457,157461],{"__ignoreMap":62},[67,157434,157435,157437,157439],{"class":69,"line":70},[67,157436,147073],{"class":77},[67,157438,909],{"class":73},[67,157440,149890],{"class":84},[67,157442,157443,157445,157447],{"class":69,"line":143},[67,157444,147083],{"class":77},[67,157446,909],{"class":73},[67,157448,147088],{"class":208},[67,157450,157451,157453,157455],{"class":69,"line":149},[67,157452,155895],{"class":77},[67,157454,909],{"class":73},[67,157456,157206],{"class":208},[67,157458,157459],{"class":69,"line":155},[67,157460,177],{"emptyLinePlaceholder":176},[67,157462,157463,157465,157467,157469,157471,157473,157475,157477,157479,157481,157483,157485,157487,157489,157492,157495,157497,157499],{"class":69,"line":161},[67,157464,30952],{"class":208},[67,157466,864],{"class":77},[67,157468,915],{"class":73},[67,157470,157219],{"class":84},[67,157472,1752],{"class":208},[67,157474,80347],{"class":77},[67,157476,1802],{"class":208},[67,157478,157225],{"class":84},[67,157480,1752],{"class":208},[67,157482,70758],{"class":77},[67,157484,1802],{"class":208},[67,157486,157231],{"class":84},[67,157488,1752],{"class":208},[67,157490,157491],{"class":77},"score",[67,157493,157494],{"class":73},":.1f",[67,157496,1802],{"class":208},[67,157498,257],{"class":84},[67,157500,870],{"class":77},[19,157502,157503],{},"表达式也可以放进去：",[57,157505,157507],{"className":30915,"code":157506,"language":30917,"meta":62,"style":62},"price = 8\ncount = 5\nprint(f\"总价:{price * count}元\")\n",[64,157508,157509,157517,157525],{"__ignoreMap":62},[67,157510,157511,157513,157515],{"class":69,"line":70},[67,157512,147218],{"class":77},[67,157514,909],{"class":73},[67,157516,147223],{"class":208},[67,157518,157519,157521,157523],{"class":69,"line":143},[67,157520,147228],{"class":77},[67,157522,909],{"class":73},[67,157524,54964],{"class":208},[67,157526,157527,157529,157531,157533,157536,157538,157540,157542,157545,157547,157550],{"class":69,"line":149},[67,157528,30952],{"class":208},[67,157530,864],{"class":77},[67,157532,915],{"class":73},[67,157534,157535],{"class":84},"\"总价:",[67,157537,1752],{"class":208},[67,157539,147218],{"class":77},[67,157541,1312],{"class":73},[67,157543,157544],{"class":77}," count",[67,157546,1802],{"class":208},[67,157548,157549],{"class":84},"元\"",[67,157551,870],{"class":77},[803,157553,157555],{"id":157554},"_211-input输入","2.11 input输入",[19,157557,157558,157561],{},[64,157559,157560],{},"input()"," 会暂停程序，等待用户输入。",[57,157563,157565],{"className":30915,"code":157564,"language":30917,"meta":62,"style":62},"name = input(\"请输入姓名:\")\nprint(f\"你好，{name}\")\n",[64,157566,157567,157581],{"__ignoreMap":62},[67,157568,157569,157571,157573,157575,157577,157579],{"class":69,"line":70},[67,157570,147073],{"class":77},[67,157572,909],{"class":73},[67,157574,61142],{"class":208},[67,157576,864],{"class":77},[67,157578,152916],{"class":84},[67,157580,870],{"class":77},[67,157582,157583,157585,157587,157589,157592,157594,157596,157598,157600],{"class":69,"line":143},[67,157584,30952],{"class":208},[67,157586,864],{"class":77},[67,157588,915],{"class":73},[67,157590,157591],{"class":84},"\"你好，",[67,157593,1752],{"class":208},[67,157595,80347],{"class":77},[67,157597,1802],{"class":208},[67,157599,257],{"class":84},[67,157601,870],{"class":77},[19,157603,157604],{},"输入整数：",[57,157606,157608],{"className":30915,"code":157607,"language":30917,"meta":62,"style":62},"age = int(input(\"请输入年龄:\"))\nprint(f\"明年你{age + 1}岁\")\n",[64,157609,157610,157628],{"__ignoreMap":62},[67,157611,157612,157614,157616,157618,157620,157622,157624,157626],{"class":69,"line":70},[67,157613,147083],{"class":77},[67,157615,909],{"class":73},[67,157617,3104],{"class":208},[67,157619,864],{"class":77},[67,157621,54358],{"class":208},[67,157623,864],{"class":77},[67,157625,152931],{"class":84},[67,157627,31034],{"class":77},[67,157629,157630,157632,157634,157636,157639,157641,157643,157645,157648,157650],{"class":69,"line":143},[67,157631,30952],{"class":208},[67,157633,864],{"class":77},[67,157635,915],{"class":73},[67,157637,157638],{"class":84},"\"明年你",[67,157640,1752],{"class":208},[67,157642,147083],{"class":77},[67,157644,1338],{"class":73},[67,157646,157647],{"class":208}," 1}",[67,157649,149941],{"class":84},[67,157651,870],{"class":77},[19,157653,157654],{},"输入小数：",[57,157656,157658],{"className":30915,"code":157657,"language":30917,"meta":62,"style":62},"height = float(input(\"请输入身高:\"))\nprint(f\"身高:{height:.2f}米\")\n",[64,157659,157660,157679],{"__ignoreMap":62},[67,157661,157662,157664,157666,157668,157670,157672,157674,157677],{"class":69,"line":70},[67,157663,155868],{"class":77},[67,157665,909],{"class":73},[67,157667,110334],{"class":208},[67,157669,864],{"class":77},[67,157671,54358],{"class":208},[67,157673,864],{"class":77},[67,157675,157676],{"class":84},"\"请输入身高:\"",[67,157678,31034],{"class":77},[67,157680,157681,157683,157685,157687,157690,157692,157694,157697,157699,157702],{"class":69,"line":143},[67,157682,30952],{"class":208},[67,157684,864],{"class":77},[67,157686,915],{"class":73},[67,157688,157689],{"class":84},"\"身高:",[67,157691,1752],{"class":208},[67,157693,25693],{"class":77},[67,157695,157696],{"class":73},":.2f",[67,157698,1802],{"class":208},[67,157700,157701],{"class":84},"米\"",[67,157703,870],{"class":77},[803,157705,157707],{"id":157706},"_212-小案例购物金额计算","2.12 小案例：购物金额计算",[19,157709,123829],{},[815,157711,157712,157715,157718,157721],{},[818,157713,157714],{},"输入商品单价。",[818,157716,157717],{},"输入购买数量。",[818,157719,157720],{},"输入折扣，例如 0.8 表示八折。",[818,157722,157723],{},"输出最终金额，保留两位小数。",[19,157725,10753],{},[57,157727,157729],{"className":30915,"code":157728,"language":30917,"meta":62,"style":62},"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",[64,157730,157731,157750,157769,157789,157793,157813,157817,157840,157861,157883],{"__ignoreMap":62},[67,157732,157733,157735,157737,157739,157741,157743,157745,157748],{"class":69,"line":70},[67,157734,147218],{"class":77},[67,157736,909],{"class":73},[67,157738,110334],{"class":208},[67,157740,864],{"class":77},[67,157742,54358],{"class":208},[67,157744,864],{"class":77},[67,157746,157747],{"class":84},"\"请输入商品单价:\"",[67,157749,31034],{"class":77},[67,157751,157752,157754,157756,157758,157760,157762,157764,157767],{"class":69,"line":143},[67,157753,147228],{"class":77},[67,157755,909],{"class":73},[67,157757,3104],{"class":208},[67,157759,864],{"class":77},[67,157761,54358],{"class":208},[67,157763,864],{"class":77},[67,157765,157766],{"class":84},"\"请输入购买数量:\"",[67,157768,31034],{"class":77},[67,157770,157771,157774,157776,157778,157780,157782,157784,157787],{"class":69,"line":149},[67,157772,157773],{"class":77},"discount ",[67,157775,909],{"class":73},[67,157777,110334],{"class":208},[67,157779,864],{"class":77},[67,157781,54358],{"class":208},[67,157783,864],{"class":77},[67,157785,157786],{"class":84},"\"请输入折扣:\"",[67,157788,31034],{"class":77},[67,157790,157791],{"class":69,"line":155},[67,157792,177],{"emptyLinePlaceholder":176},[67,157794,157795,157798,157800,157803,157805,157808,157810],{"class":69,"line":161},[67,157796,157797],{"class":77},"total ",[67,157799,909],{"class":73},[67,157801,157802],{"class":77}," price ",[67,157804,1312],{"class":73},[67,157806,157807],{"class":77}," count ",[67,157809,1312],{"class":73},[67,157811,157812],{"class":77}," discount\n",[67,157814,157815],{"class":69,"line":167},[67,157816,177],{"emptyLinePlaceholder":176},[67,157818,157819,157821,157823,157825,157828,157830,157832,157834,157836,157838],{"class":69,"line":173},[67,157820,30952],{"class":208},[67,157822,864],{"class":77},[67,157824,915],{"class":73},[67,157826,157827],{"class":84},"\"商品单价:",[67,157829,1752],{"class":208},[67,157831,80352],{"class":77},[67,157833,157696],{"class":73},[67,157835,1802],{"class":208},[67,157837,257],{"class":84},[67,157839,870],{"class":77},[67,157841,157842,157844,157846,157848,157851,157853,157855,157857,157859],{"class":69,"line":180},[67,157843,30952],{"class":208},[67,157845,864],{"class":77},[67,157847,915],{"class":73},[67,157849,157850],{"class":84},"\"购买数量:",[67,157852,1752],{"class":208},[67,157854,84971],{"class":77},[67,157856,1802],{"class":208},[67,157858,257],{"class":84},[67,157860,870],{"class":77},[67,157862,157863,157865,157867,157869,157872,157874,157877,157879,157881],{"class":69,"line":186},[67,157864,30952],{"class":208},[67,157866,864],{"class":77},[67,157868,915],{"class":73},[67,157870,157871],{"class":84},"\"折扣:",[67,157873,1752],{"class":208},[67,157875,157876],{"class":77},"discount",[67,157878,1802],{"class":208},[67,157880,257],{"class":84},[67,157882,870],{"class":77},[67,157884,157885,157887,157889,157891,157894,157896,157899,157901,157903,157905],{"class":69,"line":444},[67,157886,30952],{"class":208},[67,157888,864],{"class":77},[67,157890,915],{"class":73},[67,157892,157893],{"class":84},"\"应付金额:",[67,157895,1752],{"class":208},[67,157897,157898],{"class":77},"total",[67,157900,157696],{"class":73},[67,157902,1802],{"class":208},[67,157904,157549],{"class":84},[67,157906,870],{"class":77},[803,157908,157910],{"id":157909},"_213-易错点","2.13 易错点",[815,157912,157913,157918,157924,157932,157935],{},[818,157914,157915,157917],{},[64,157916,157560],{}," 的结果是字符串，做运算前要转换。",[818,157919,157920,157921,28922],{},"字符串拼接时，数字要先 ",[64,157922,157923],{},"str()",[818,157925,157926,157928,157929,157931],{},[64,157927,909],{}," 是赋值，",[64,157930,3670],{}," 是比较。",[818,157933,157934],{},"Python 没有自增自减运算符。",[818,157936,157937],{},"浮点数计算可能有精度误差：",[57,157939,157941],{"className":30915,"code":157940,"language":30917,"meta":62,"style":62},"print(0.1 + 0.2)\n",[64,157942,157943],{"__ignoreMap":62},[67,157944,157945,157947,157949,157951,157953,157956],{"class":69,"line":70},[67,157946,30952],{"class":208},[67,157948,864],{"class":77},[67,157950,86747],{"class":208},[67,157952,46103],{"class":73},[67,157954,157955],{"class":208}," 0.2",[67,157957,870],{"class":77},[19,157959,157960,157961,157964],{},"金额计算如果要求严格，可以后续学习 ",[64,157962,157963],{},"decimal"," 模块。",[803,157966,157968],{"id":157967},"_214-本章练习","2.14 本章练习",[815,157970,157971,157974,157977,157980,157983],{},[818,157972,157973],{},"输入姓名、年龄、身高，使用 f-string 输出个人信息。",[818,157975,157976],{},"输入圆的半径，计算面积，保留两位小数。",[818,157978,157979],{},"输入工资和奖金，计算总收入。",[818,157981,157982],{},"输入摄氏温度，转换为华氏温度。",[818,157984,157985],{},"写一个 BMI 计算程序：",[57,157987,157990],{"className":157988,"code":157989,"language":5906,"meta":62},[5904],"BMI = 体重kg \u002F 身高m ** 2\n",[64,157991,157989],{"__ignoreMap":62},[779,157993,157994],{},"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":62,"searchDepth":143,"depth":143,"links":157996},[157997,157998,157999,158000,158001,158002,158003,158009,158010,158011,158016,158017,158018,158019],{"id":155558,"depth":143,"text":155559},{"id":155667,"depth":143,"text":155668},{"id":155838,"depth":143,"text":155839},{"id":155915,"depth":143,"text":155916},{"id":51268,"depth":143,"text":51269},{"id":156221,"depth":143,"text":156222},{"id":156447,"depth":143,"text":156448,"children":158004},[158005,158006,158007,158008],{"id":156451,"depth":149,"text":156452},{"id":156645,"depth":149,"text":156646},{"id":156733,"depth":149,"text":156734},{"id":156839,"depth":149,"text":156840},{"id":156948,"depth":143,"text":156949},{"id":157106,"depth":143,"text":157107},{"id":157171,"depth":143,"text":157172,"children":158012},[158013,158014,158015],{"id":157175,"depth":149,"text":157176},{"id":157320,"depth":149,"text":157321},{"id":157423,"depth":149,"text":157424},{"id":157554,"depth":143,"text":157555},{"id":157706,"depth":143,"text":157707},{"id":157909,"depth":143,"text":157910},{"id":157967,"depth":143,"text":157968},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch2",{"title":155550,"description":24093},"wiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串","I4Lu1y1Wu68M1sbt4yv1esO-sQz1pWvuN3Svu2Ad3mo",{"id":158026,"title":158027,"body":158028,"description":24093,"extension":787,"meta":159664,"navigation":176,"path":159665,"seo":159666,"stem":159667,"__hash__":159668},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch3-判断语句.md","3. 判断语句",{"type":7,"value":158029,"toc":159645},[158030,158033,158037,158040,158055,158058,158086,158090,158140,158142,158158,158161,158187,158190,158194,158261,158264,158280,158284,158287,158405,158408,158415,158464,158470,158474,158477,158590,158593,158597,158601,158604,158654,158658,158661,158711,158715,158718,158756,158760,158763,158809,158812,158847,158851,158856,158859,158905,158907,158974,158978,158984,159095,159104,159108,159110,159121,159123,159289,159293,159295,159309,159311,159525,159529,159548,159565,159568,159614,159618,159642],[10,158031,158027],{"id":158032},"_3-判断语句",[803,158034,158036],{"id":158035},"_31-布尔值","3.1 布尔值",[19,158038,158039],{},"判断语句依赖布尔值：",[57,158041,158043],{"className":30915,"code":158042,"language":30917,"meta":62,"style":62},"True\nFalse\n",[64,158044,158045,158050],{"__ignoreMap":62},[67,158046,158047],{"class":69,"line":70},[67,158048,158049],{"class":208},"True\n",[67,158051,158052],{"class":69,"line":143},[67,158053,158054],{"class":208},"False\n",[19,158056,158057],{},"比较表达式会产生布尔值：",[57,158059,158061],{"className":30915,"code":158060,"language":30917,"meta":62,"style":62},"age = 18\nprint(age >= 18)  # True\n",[64,158062,158063,158071],{"__ignoreMap":62},[67,158064,158065,158067,158069],{"class":69,"line":70},[67,158066,147083],{"class":77},[67,158068,909],{"class":73},[67,158070,147088],{"class":208},[67,158072,158073,158075,158077,158079,158081,158083],{"class":69,"line":143},[67,158074,30952],{"class":208},[67,158076,156305],{"class":77},[67,158078,2433],{"class":73},[67,158080,156822],{"class":208},[67,158082,46345],{"class":77},[67,158084,158085],{"class":202},"# True\n",[803,158087,158089],{"id":158088},"_32-if基础语法","3.2 if基础语法",[57,158091,158093],{"className":30915,"code":158092,"language":30917,"meta":62,"style":62},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"可以进入网吧\")\n",[64,158094,158095,158113,158117,158129],{"__ignoreMap":62},[67,158096,158097,158099,158101,158103,158105,158107,158109,158111],{"class":69,"line":70},[67,158098,147083],{"class":77},[67,158100,909],{"class":73},[67,158102,3104],{"class":208},[67,158104,864],{"class":77},[67,158106,54358],{"class":208},[67,158108,864],{"class":77},[67,158110,152931],{"class":84},[67,158112,31034],{"class":77},[67,158114,158115],{"class":69,"line":143},[67,158116,177],{"emptyLinePlaceholder":176},[67,158118,158119,158121,158123,158125,158127],{"class":69,"line":149},[67,158120,2254],{"class":73},[67,158122,16424],{"class":77},[67,158124,2433],{"class":73},[67,158126,156822],{"class":208},[67,158128,4459],{"class":77},[67,158130,158131,158133,158135,158138],{"class":69,"line":155},[67,158132,31836],{"class":208},[67,158134,864],{"class":77},[67,158136,158137],{"class":84},"\"可以进入网吧\"",[67,158139,870],{"class":77},[19,158141,9744],{},[815,158143,158144,158149,158152,158155],{},[818,158145,158146,158148],{},[64,158147,2254],{}," 后面是条件表达式。",[818,158150,158151],{},"条件后面必须写冒号。",[818,158153,158154],{},"条件成立时执行缩进代码块。",[818,158156,158157],{},"Python 用缩进表示代码层级，一般使用 4 个空格。",[19,158159,158160],{},"错误示例：",[57,158162,158164],{"className":30915,"code":158163,"language":30917,"meta":62,"style":62},"if age >= 18\n    print(\"可以进入\")\n",[64,158165,158166,158176],{"__ignoreMap":62},[67,158167,158168,158170,158172,158174],{"class":69,"line":70},[67,158169,2254],{"class":73},[67,158171,16424],{"class":77},[67,158173,2433],{"class":73},[67,158175,147088],{"class":208},[67,158177,158178,158180,158182,158185],{"class":69,"line":143},[67,158179,31836],{"class":208},[67,158181,864],{"class":77},[67,158183,158184],{"class":84},"\"可以进入\"",[67,158186,870],{"class":77},[19,158188,158189],{},"缺少冒号。",[803,158191,158193],{"id":158192},"_33-if-else","3.3 if else",[57,158195,158197],{"className":30915,"code":158196,"language":30917,"meta":62,"style":62},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"成年人\")\nelse:\n    print(\"未成年人\")\n",[64,158198,158199,158217,158221,158233,158244,158250],{"__ignoreMap":62},[67,158200,158201,158203,158205,158207,158209,158211,158213,158215],{"class":69,"line":70},[67,158202,147083],{"class":77},[67,158204,909],{"class":73},[67,158206,3104],{"class":208},[67,158208,864],{"class":77},[67,158210,54358],{"class":208},[67,158212,864],{"class":77},[67,158214,152931],{"class":84},[67,158216,31034],{"class":77},[67,158218,158219],{"class":69,"line":143},[67,158220,177],{"emptyLinePlaceholder":176},[67,158222,158223,158225,158227,158229,158231],{"class":69,"line":149},[67,158224,2254],{"class":73},[67,158226,16424],{"class":77},[67,158228,2433],{"class":73},[67,158230,156822],{"class":208},[67,158232,4459],{"class":77},[67,158234,158235,158237,158239,158242],{"class":69,"line":155},[67,158236,31836],{"class":208},[67,158238,864],{"class":77},[67,158240,158241],{"class":84},"\"成年人\"",[67,158243,870],{"class":77},[67,158245,158246,158248],{"class":69,"line":161},[67,158247,2424],{"class":73},[67,158249,4459],{"class":77},[67,158251,158252,158254,158256,158259],{"class":69,"line":167},[67,158253,31836],{"class":208},[67,158255,864],{"class":77},[67,158257,158258],{"class":84},"\"未成年人\"",[67,158260,870],{"class":77},[19,158262,158263],{},"执行逻辑：",[815,158265,158266,158272,158277],{},[818,158267,158268,158269,158271],{},"条件成立，执行 ",[64,158270,2254],{}," 代码块。",[818,158273,158274,158275,158271],{},"条件不成立，执行 ",[64,158276,2424],{},[818,158278,158279],{},"两个代码块只会执行其中一个。",[803,158281,158283],{"id":158282},"_34-if-elif-else","3.4 if elif else",[19,158285,158286],{},"多条件判断：",[57,158288,158290],{"className":30915,"code":158289,"language":30917,"meta":62,"style":62},"score = int(input(\"请输入成绩:\"))\n\nif score >= 90:\n    print(\"优秀\")\nelif score >= 80:\n    print(\"良好\")\nelif score >= 60:\n    print(\"及格\")\nelse:\n    print(\"不及格\")\n",[64,158291,158292,158310,158314,158328,158339,158353,158364,158377,158388,158394],{"__ignoreMap":62},[67,158293,158294,158296,158298,158300,158302,158304,158306,158308],{"class":69,"line":70},[67,158295,155895],{"class":77},[67,158297,909],{"class":73},[67,158299,3104],{"class":208},[67,158301,864],{"class":77},[67,158303,54358],{"class":208},[67,158305,864],{"class":77},[67,158307,152946],{"class":84},[67,158309,31034],{"class":77},[67,158311,158312],{"class":69,"line":143},[67,158313,177],{"emptyLinePlaceholder":176},[67,158315,158316,158318,158321,158323,158326],{"class":69,"line":149},[67,158317,2254],{"class":73},[67,158319,158320],{"class":77}," score ",[67,158322,2433],{"class":73},[67,158324,158325],{"class":208}," 90",[67,158327,4459],{"class":77},[67,158329,158330,158332,158334,158337],{"class":69,"line":155},[67,158331,31836],{"class":208},[67,158333,864],{"class":77},[67,158335,158336],{"class":84},"\"优秀\"",[67,158338,870],{"class":77},[67,158340,158341,158344,158346,158348,158351],{"class":69,"line":161},[67,158342,158343],{"class":73},"elif",[67,158345,158320],{"class":77},[67,158347,2433],{"class":73},[67,158349,158350],{"class":208}," 80",[67,158352,4459],{"class":77},[67,158354,158355,158357,158359,158362],{"class":69,"line":167},[67,158356,31836],{"class":208},[67,158358,864],{"class":77},[67,158360,158361],{"class":84},"\"良好\"",[67,158363,870],{"class":77},[67,158365,158366,158368,158370,158372,158375],{"class":69,"line":173},[67,158367,158343],{"class":73},[67,158369,158320],{"class":77},[67,158371,2433],{"class":73},[67,158373,158374],{"class":208}," 60",[67,158376,4459],{"class":77},[67,158378,158379,158381,158383,158386],{"class":69,"line":180},[67,158380,31836],{"class":208},[67,158382,864],{"class":77},[67,158384,158385],{"class":84},"\"及格\"",[67,158387,870],{"class":77},[67,158389,158390,158392],{"class":69,"line":186},[67,158391,2424],{"class":73},[67,158393,4459],{"class":77},[67,158395,158396,158398,158400,158403],{"class":69,"line":444},[67,158397,31836],{"class":208},[67,158399,864],{"class":77},[67,158401,158402],{"class":84},"\"不及格\"",[67,158404,870],{"class":77},[19,158406,158407],{},"注意判断顺序很重要。",[19,158409,158410,158411,158414],{},"如果把 ",[64,158412,158413],{},"score >= 60"," 放在最前面：",[57,158416,158418],{"className":30915,"code":158417,"language":30917,"meta":62,"style":62},"if score >= 60:\n    print(\"及格\")\nelif score >= 90:\n    print(\"优秀\")\n",[64,158419,158420,158432,158442,158454],{"__ignoreMap":62},[67,158421,158422,158424,158426,158428,158430],{"class":69,"line":70},[67,158423,2254],{"class":73},[67,158425,158320],{"class":77},[67,158427,2433],{"class":73},[67,158429,158374],{"class":208},[67,158431,4459],{"class":77},[67,158433,158434,158436,158438,158440],{"class":69,"line":143},[67,158435,31836],{"class":208},[67,158437,864],{"class":77},[67,158439,158385],{"class":84},[67,158441,870],{"class":77},[67,158443,158444,158446,158448,158450,158452],{"class":69,"line":149},[67,158445,158343],{"class":73},[67,158447,158320],{"class":77},[67,158449,2433],{"class":73},[67,158451,158325],{"class":208},[67,158453,4459],{"class":77},[67,158455,158456,158458,158460,158462],{"class":69,"line":155},[67,158457,31836],{"class":208},[67,158459,864],{"class":77},[67,158461,158336],{"class":84},[67,158463,870],{"class":77},[19,158465,158466,158467,158469],{},"成绩 95 会先满足 ",[64,158468,158413],{},"，后面的优秀分支就不会执行。",[803,158471,158473],{"id":158472},"_35-判断语句嵌套","3.5 判断语句嵌套",[19,158475,158476],{},"嵌套判断就是在一个判断内部再写判断。",[57,158478,158480],{"className":30915,"code":158479,"language":30917,"meta":62,"style":62},"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",[64,158481,158482,158500,158515,158519,158531,158545,158555,158562,158573,158579],{"__ignoreMap":62},[67,158483,158484,158486,158488,158490,158492,158494,158496,158498],{"class":69,"line":70},[67,158485,147083],{"class":77},[67,158487,909],{"class":73},[67,158489,3104],{"class":208},[67,158491,864],{"class":77},[67,158493,54358],{"class":208},[67,158495,864],{"class":77},[67,158497,152931],{"class":84},[67,158499,31034],{"class":77},[67,158501,158502,158504,158506,158508,158510,158513],{"class":69,"line":143},[67,158503,156898],{"class":77},[67,158505,909],{"class":73},[67,158507,61142],{"class":208},[67,158509,864],{"class":77},[67,158511,158512],{"class":84},"\"是否有票(y\u002Fn):\"",[67,158514,870],{"class":77},[67,158516,158517],{"class":69,"line":149},[67,158518,177],{"emptyLinePlaceholder":176},[67,158520,158521,158523,158525,158527,158529],{"class":69,"line":155},[67,158522,2254],{"class":73},[67,158524,16424],{"class":77},[67,158526,2433],{"class":73},[67,158528,156822],{"class":208},[67,158530,4459],{"class":77},[67,158532,158533,158535,158538,158540,158543],{"class":69,"line":161},[67,158534,3821],{"class":73},[67,158536,158537],{"class":77}," has_ticket ",[67,158539,3670],{"class":73},[67,158541,158542],{"class":84}," \"y\"",[67,158544,4459],{"class":77},[67,158546,158547,158549,158551,158553],{"class":69,"line":167},[67,158548,32988],{"class":208},[67,158550,864],{"class":77},[67,158552,158184],{"class":84},[67,158554,870],{"class":77},[67,158556,158557,158560],{"class":69,"line":173},[67,158558,158559],{"class":73},"    else",[67,158561,4459],{"class":77},[67,158563,158564,158566,158568,158571],{"class":69,"line":180},[67,158565,32988],{"class":208},[67,158567,864],{"class":77},[67,158569,158570],{"class":84},"\"请先买票\"",[67,158572,870],{"class":77},[67,158574,158575,158577],{"class":69,"line":186},[67,158576,2424],{"class":73},[67,158578,4459],{"class":77},[67,158580,158581,158583,158585,158588],{"class":69,"line":444},[67,158582,31836],{"class":208},[67,158584,864],{"class":77},[67,158586,158587],{"class":84},"\"未成年人禁止进入\"",[67,158589,870],{"class":77},[19,158591,158592],{},"嵌套层级不要太深，超过 3 层就应该考虑拆成函数或调整条件。",[803,158594,158596],{"id":158595},"_36-逻辑运算组合条件","3.6 逻辑运算组合条件",[14,158598,158600],{"id":158599},"_361-and","3.6.1 and",[19,158602,158603],{},"两个条件都成立才成立。",[57,158605,158607],{"className":30915,"code":158606,"language":30917,"meta":62,"style":62},"age = 20\nhas_ticket = True\n\nif age >= 18 and has_ticket:\n    print(\"可以进入\")\n",[64,158608,158609,158617,158625,158629,158644],{"__ignoreMap":62},[67,158610,158611,158613,158615],{"class":69,"line":70},[67,158612,147083],{"class":77},[67,158614,909],{"class":73},[67,158616,88602],{"class":208},[67,158618,158619,158621,158623],{"class":69,"line":143},[67,158620,156898],{"class":77},[67,158622,909],{"class":73},[67,158624,154136],{"class":208},[67,158626,158627],{"class":69,"line":149},[67,158628,177],{"emptyLinePlaceholder":176},[67,158630,158631,158633,158635,158637,158639,158641],{"class":69,"line":155},[67,158632,2254],{"class":73},[67,158634,16424],{"class":77},[67,158636,2433],{"class":73},[67,158638,156822],{"class":208},[67,158640,120966],{"class":73},[67,158642,158643],{"class":77}," has_ticket:\n",[67,158645,158646,158648,158650,158652],{"class":69,"line":161},[67,158647,31836],{"class":208},[67,158649,864],{"class":77},[67,158651,158184],{"class":84},[67,158653,870],{"class":77},[14,158655,158657],{"id":158656},"_362-or","3.6.2 or",[19,158659,158660],{},"只要一个条件成立就成立。",[57,158662,158664],{"className":30915,"code":158663,"language":30917,"meta":62,"style":62},"is_vip = False\ncoupon = True\n\nif is_vip or coupon:\n    print(\"可以享受优惠\")\n",[64,158665,158666,158675,158684,158688,158700],{"__ignoreMap":62},[67,158667,158668,158671,158673],{"class":69,"line":70},[67,158669,158670],{"class":77},"is_vip ",[67,158672,909],{"class":73},[67,158674,126344],{"class":208},[67,158676,158677,158680,158682],{"class":69,"line":143},[67,158678,158679],{"class":77},"coupon ",[67,158681,909],{"class":73},[67,158683,154136],{"class":208},[67,158685,158686],{"class":69,"line":149},[67,158687,177],{"emptyLinePlaceholder":176},[67,158689,158690,158692,158695,158697],{"class":69,"line":155},[67,158691,2254],{"class":73},[67,158693,158694],{"class":77}," is_vip ",[67,158696,115627],{"class":73},[67,158698,158699],{"class":77}," coupon:\n",[67,158701,158702,158704,158706,158709],{"class":69,"line":161},[67,158703,31836],{"class":208},[67,158705,864],{"class":77},[67,158707,158708],{"class":84},"\"可以享受优惠\"",[67,158710,870],{"class":77},[14,158712,158714],{"id":158713},"_363-not","3.6.3 not",[19,158716,158717],{},"取反。",[57,158719,158721],{"className":30915,"code":158720,"language":30917,"meta":62,"style":62},"is_closed = False\n\nif not is_closed:\n    print(\"店铺营业中\")\n",[64,158722,158723,158732,158736,158745],{"__ignoreMap":62},[67,158724,158725,158728,158730],{"class":69,"line":70},[67,158726,158727],{"class":77},"is_closed ",[67,158729,909],{"class":73},[67,158731,126344],{"class":208},[67,158733,158734],{"class":69,"line":143},[67,158735,177],{"emptyLinePlaceholder":176},[67,158737,158738,158740,158742],{"class":69,"line":149},[67,158739,2254],{"class":73},[67,158741,39467],{"class":73},[67,158743,158744],{"class":77}," is_closed:\n",[67,158746,158747,158749,158751,158754],{"class":69,"line":155},[67,158748,31836],{"class":208},[67,158750,864],{"class":77},[67,158752,158753],{"class":84},"\"店铺营业中\"",[67,158755,870],{"class":77},[803,158757,158759],{"id":158758},"_37-链式比较","3.7 链式比较",[19,158761,158762],{},"Python 支持链式比较：",[57,158764,158766],{"className":30915,"code":158765,"language":30917,"meta":62,"style":62},"score = 85\n\nif 0 \u003C= score \u003C= 100:\n    print(\"成绩合法\")\n",[64,158767,158768,158777,158781,158798],{"__ignoreMap":62},[67,158769,158770,158772,158774],{"class":69,"line":70},[67,158771,155895],{"class":77},[67,158773,909],{"class":73},[67,158775,158776],{"class":208}," 85\n",[67,158778,158779],{"class":69,"line":143},[67,158780,177],{"emptyLinePlaceholder":176},[67,158782,158783,158785,158787,158790,158792,158794,158796],{"class":69,"line":149},[67,158784,2254],{"class":73},[67,158786,4813],{"class":208},[67,158788,158789],{"class":73}," \u003C=",[67,158791,158320],{"class":77},[67,158793,2311],{"class":73},[67,158795,6473],{"class":208},[67,158797,4459],{"class":77},[67,158799,158800,158802,158804,158807],{"class":69,"line":155},[67,158801,31836],{"class":208},[67,158803,864],{"class":77},[67,158805,158806],{"class":84},"\"成绩合法\"",[67,158808,870],{"class":77},[19,158810,158811],{},"等价于：",[57,158813,158815],{"className":30915,"code":158814,"language":30917,"meta":62,"style":62},"if score >= 0 and score \u003C= 100:\n    print(\"成绩合法\")\n",[64,158816,158817,158837],{"__ignoreMap":62},[67,158818,158819,158821,158823,158825,158827,158829,158831,158833,158835],{"class":69,"line":70},[67,158820,2254],{"class":73},[67,158822,158320],{"class":77},[67,158824,2433],{"class":73},[67,158826,4813],{"class":208},[67,158828,120966],{"class":73},[67,158830,158320],{"class":77},[67,158832,2311],{"class":73},[67,158834,6473],{"class":208},[67,158836,4459],{"class":77},[67,158838,158839,158841,158843,158845],{"class":69,"line":143},[67,158840,31836],{"class":208},[67,158842,864],{"class":77},[67,158844,158806],{"class":84},[67,158846,870],{"class":77},[803,158848,158850],{"id":158849},"_38-真值和假值","3.8 真值和假值",[19,158852,117004,158853,158855],{},[64,158854,2254],{}," 中，不只有布尔值能做条件。很多对象也能被判断为真或假。",[19,158857,158858],{},"假值：",[57,158860,158862],{"className":30915,"code":158861,"language":30917,"meta":62,"style":62},"False\nNone\n0\n0.0\n\"\"\n[]\n()\n{}\nset()\n",[64,158863,158864,158868,158873,158877,158881,158886,158890,158894,158899],{"__ignoreMap":62},[67,158865,158866],{"class":69,"line":70},[67,158867,158054],{"class":208},[67,158869,158870],{"class":69,"line":143},[67,158871,158872],{"class":208},"None\n",[67,158874,158875],{"class":69,"line":149},[67,158876,3805],{"class":208},[67,158878,158879],{"class":69,"line":155},[67,158880,32879],{"class":208},[67,158882,158883],{"class":69,"line":161},[67,158884,158885],{"class":84},"\"\"\n",[67,158887,158888],{"class":69,"line":167},[67,158889,32894],{"class":77},[67,158891,158892],{"class":69,"line":173},[67,158893,2698],{"class":77},[67,158895,158896],{"class":69,"line":180},[67,158897,158898],{"class":77},"{}\n",[67,158900,158901,158903],{"class":69,"line":186},[67,158902,155827],{"class":208},[67,158904,2698],{"class":77},[19,158906,15852],{},[57,158908,158910],{"className":30915,"code":158909,"language":30917,"meta":62,"style":62},"name = input(\"请输入姓名:\")\n\nif name:\n    print(f\"你好，{name}\")\nelse:\n    print(\"姓名不能为空\")\n",[64,158911,158912,158926,158930,158937,158957,158963],{"__ignoreMap":62},[67,158913,158914,158916,158918,158920,158922,158924],{"class":69,"line":70},[67,158915,147073],{"class":77},[67,158917,909],{"class":73},[67,158919,61142],{"class":208},[67,158921,864],{"class":77},[67,158923,152916],{"class":84},[67,158925,870],{"class":77},[67,158927,158928],{"class":69,"line":143},[67,158929,177],{"emptyLinePlaceholder":176},[67,158931,158932,158934],{"class":69,"line":149},[67,158933,2254],{"class":73},[67,158935,158936],{"class":77}," name:\n",[67,158938,158939,158941,158943,158945,158947,158949,158951,158953,158955],{"class":69,"line":155},[67,158940,31836],{"class":208},[67,158942,864],{"class":77},[67,158944,915],{"class":73},[67,158946,157591],{"class":84},[67,158948,1752],{"class":208},[67,158950,80347],{"class":77},[67,158952,1802],{"class":208},[67,158954,257],{"class":84},[67,158956,870],{"class":77},[67,158958,158959,158961],{"class":69,"line":161},[67,158960,2424],{"class":73},[67,158962,4459],{"class":77},[67,158964,158965,158967,158969,158972],{"class":69,"line":167},[67,158966,31836],{"class":208},[67,158968,864],{"class":77},[67,158970,158971],{"class":84},"\"姓名不能为空\"",[67,158973,870],{"class":77},[803,158975,158977],{"id":158976},"_39-match语句","3.9 match语句",[19,158979,158980,158981,158983],{},"Python 3.10 开始支持 ",[64,158982,71802],{},"。它适合处理固定选项。",[57,158985,158987],{"className":30915,"code":158986,"language":30917,"meta":62,"style":62},"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",[64,158988,158989,159005,159009,159016,159026,159037,159046,159057,159066,159077,159084],{"__ignoreMap":62},[67,158990,158991,158994,158996,158998,159000,159003],{"class":69,"line":70},[67,158992,158993],{"class":77},"command ",[67,158995,909],{"class":73},[67,158997,61142],{"class":208},[67,158999,864],{"class":77},[67,159001,159002],{"class":84},"\"请输入命令:\"",[67,159004,870],{"class":77},[67,159006,159007],{"class":69,"line":143},[67,159008,177],{"emptyLinePlaceholder":176},[67,159010,159011,159013],{"class":69,"line":149},[67,159012,71802],{"class":73},[67,159014,159015],{"class":77}," command:\n",[67,159017,159018,159021,159024],{"class":69,"line":155},[67,159019,159020],{"class":73},"    case",[67,159022,159023],{"class":84}," \"start\"",[67,159025,4459],{"class":77},[67,159027,159028,159030,159032,159035],{"class":69,"line":161},[67,159029,32988],{"class":208},[67,159031,864],{"class":77},[67,159033,159034],{"class":84},"\"启动\"",[67,159036,870],{"class":77},[67,159038,159039,159041,159044],{"class":69,"line":167},[67,159040,159020],{"class":73},[67,159042,159043],{"class":84}," \"stop\"",[67,159045,4459],{"class":77},[67,159047,159048,159050,159052,159055],{"class":69,"line":173},[67,159049,32988],{"class":208},[67,159051,864],{"class":77},[67,159053,159054],{"class":84},"\"停止\"",[67,159056,870],{"class":77},[67,159058,159059,159061,159064],{"class":69,"line":180},[67,159060,159020],{"class":73},[67,159062,159063],{"class":84}," \"restart\"",[67,159065,4459],{"class":77},[67,159067,159068,159070,159072,159075],{"class":69,"line":186},[67,159069,32988],{"class":208},[67,159071,864],{"class":77},[67,159073,159074],{"class":84},"\"重启\"",[67,159076,870],{"class":77},[67,159078,159079,159081],{"class":69,"line":444},[67,159080,159020],{"class":73},[67,159082,159083],{"class":77}," _:\n",[67,159085,159086,159088,159090,159093],{"class":69,"line":2335},[67,159087,32988],{"class":208},[67,159089,864],{"class":77},[67,159091,159092],{"class":84},"\"未知命令\"",[67,159094,870],{"class":77},[19,159096,159097,159098,159100,159101,159103],{},"入门阶段掌握 ",[64,159099,155195],{}," 更重要，",[64,159102,71802],{}," 可以作为补充。",[803,159105,159107],{"id":159106},"_310-小案例成绩等级","3.10 小案例：成绩等级",[19,159109,123829],{},[815,159111,159112,159115,159118],{},[818,159113,159114],{},"输入成绩。",[818,159116,159117],{},"判断成绩是否合法。",[818,159119,159120],{},"输出等级。",[19,159122,10753],{},[57,159124,159126],{"className":30915,"code":159125,"language":30917,"meta":62,"style":62},"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",[64,159127,159128,159146,159150,159168,159179,159191,159202,159214,159225,159238,159249,159261,159272,159278],{"__ignoreMap":62},[67,159129,159130,159132,159134,159136,159138,159140,159142,159144],{"class":69,"line":70},[67,159131,155895],{"class":77},[67,159133,909],{"class":73},[67,159135,110334],{"class":208},[67,159137,864],{"class":77},[67,159139,54358],{"class":208},[67,159141,864],{"class":77},[67,159143,152946],{"class":84},[67,159145,31034],{"class":77},[67,159147,159148],{"class":69,"line":143},[67,159149,177],{"emptyLinePlaceholder":176},[67,159151,159152,159154,159156,159158,159160,159162,159164,159166],{"class":69,"line":149},[67,159153,2254],{"class":73},[67,159155,39467],{"class":73},[67,159157,4813],{"class":208},[67,159159,158789],{"class":73},[67,159161,158320],{"class":77},[67,159163,2311],{"class":73},[67,159165,6473],{"class":208},[67,159167,4459],{"class":77},[67,159169,159170,159172,159174,159177],{"class":69,"line":155},[67,159171,31836],{"class":208},[67,159173,864],{"class":77},[67,159175,159176],{"class":84},"\"成绩不合法\"",[67,159178,870],{"class":77},[67,159180,159181,159183,159185,159187,159189],{"class":69,"line":161},[67,159182,158343],{"class":73},[67,159184,158320],{"class":77},[67,159186,2433],{"class":73},[67,159188,158325],{"class":208},[67,159190,4459],{"class":77},[67,159192,159193,159195,159197,159200],{"class":69,"line":167},[67,159194,31836],{"class":208},[67,159196,864],{"class":77},[67,159198,159199],{"class":84},"\"等级:A\"",[67,159201,870],{"class":77},[67,159203,159204,159206,159208,159210,159212],{"class":69,"line":173},[67,159205,158343],{"class":73},[67,159207,158320],{"class":77},[67,159209,2433],{"class":73},[67,159211,158350],{"class":208},[67,159213,4459],{"class":77},[67,159215,159216,159218,159220,159223],{"class":69,"line":180},[67,159217,31836],{"class":208},[67,159219,864],{"class":77},[67,159221,159222],{"class":84},"\"等级:B\"",[67,159224,870],{"class":77},[67,159226,159227,159229,159231,159233,159236],{"class":69,"line":186},[67,159228,158343],{"class":73},[67,159230,158320],{"class":77},[67,159232,2433],{"class":73},[67,159234,159235],{"class":208}," 70",[67,159237,4459],{"class":77},[67,159239,159240,159242,159244,159247],{"class":69,"line":444},[67,159241,31836],{"class":208},[67,159243,864],{"class":77},[67,159245,159246],{"class":84},"\"等级:C\"",[67,159248,870],{"class":77},[67,159250,159251,159253,159255,159257,159259],{"class":69,"line":2335},[67,159252,158343],{"class":73},[67,159254,158320],{"class":77},[67,159256,2433],{"class":73},[67,159258,158374],{"class":208},[67,159260,4459],{"class":77},[67,159262,159263,159265,159267,159270],{"class":69,"line":2340},[67,159264,31836],{"class":208},[67,159266,864],{"class":77},[67,159268,159269],{"class":84},"\"等级:D\"",[67,159271,870],{"class":77},[67,159273,159274,159276],{"class":69,"line":2346},[67,159275,2424],{"class":73},[67,159277,4459],{"class":77},[67,159279,159280,159282,159284,159287],{"class":69,"line":2351},[67,159281,31836],{"class":208},[67,159283,864],{"class":77},[67,159285,159286],{"class":84},"\"等级:E\"",[67,159288,870],{"class":77},[803,159290,159292],{"id":159291},"_311-小案例会员折扣","3.11 小案例：会员折扣",[19,159294,123829],{},[815,159296,159297,159300,159303,159306],{},[818,159298,159299],{},"输入消费金额。",[818,159301,159302],{},"输入会员等级，普通、银卡、金卡。",[818,159304,159305],{},"普通不打折，银卡 9 折，金卡 8 折。",[818,159307,159308],{},"满 500 再减 50。",[19,159310,10753],{},[57,159312,159314],{"className":30915,"code":159313,"language":30917,"meta":62,"style":62},"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",[64,159315,159316,159336,159352,159356,159364,159368,159382,159392,159405,159414,159427,159435,159441,159452,159456,159470,159474,159488,159498,159502],{"__ignoreMap":62},[67,159317,159318,159321,159323,159325,159327,159329,159331,159334],{"class":69,"line":70},[67,159319,159320],{"class":77},"amount ",[67,159322,909],{"class":73},[67,159324,110334],{"class":208},[67,159326,864],{"class":77},[67,159328,54358],{"class":208},[67,159330,864],{"class":77},[67,159332,159333],{"class":84},"\"请输入消费金额:\"",[67,159335,31034],{"class":77},[67,159337,159338,159341,159343,159345,159347,159350],{"class":69,"line":143},[67,159339,159340],{"class":77},"level ",[67,159342,909],{"class":73},[67,159344,61142],{"class":208},[67,159346,864],{"class":77},[67,159348,159349],{"class":84},"\"请输入会员等级(普通\u002F银卡\u002F金卡):\"",[67,159351,870],{"class":77},[67,159353,159354],{"class":69,"line":149},[67,159355,177],{"emptyLinePlaceholder":176},[67,159357,159358,159360,159362],{"class":69,"line":155},[67,159359,157773],{"class":77},[67,159361,909],{"class":73},[67,159363,56236],{"class":208},[67,159365,159366],{"class":69,"line":161},[67,159367,177],{"emptyLinePlaceholder":176},[67,159369,159370,159372,159375,159377,159380],{"class":69,"line":167},[67,159371,2254],{"class":73},[67,159373,159374],{"class":77}," level ",[67,159376,3670],{"class":73},[67,159378,159379],{"class":84}," \"银卡\"",[67,159381,4459],{"class":77},[67,159383,159384,159387,159389],{"class":69,"line":173},[67,159385,159386],{"class":77},"    discount ",[67,159388,909],{"class":73},[67,159390,159391],{"class":208}," 0.9\n",[67,159393,159394,159396,159398,159400,159403],{"class":69,"line":180},[67,159395,158343],{"class":73},[67,159397,159374],{"class":77},[67,159399,3670],{"class":73},[67,159401,159402],{"class":84}," \"金卡\"",[67,159404,4459],{"class":77},[67,159406,159407,159409,159411],{"class":69,"line":186},[67,159408,159386],{"class":77},[67,159410,909],{"class":73},[67,159412,159413],{"class":208}," 0.8\n",[67,159415,159416,159418,159420,159422,159425],{"class":69,"line":444},[67,159417,158343],{"class":73},[67,159419,159374],{"class":77},[67,159421,3670],{"class":73},[67,159423,159424],{"class":84}," \"普通\"",[67,159426,4459],{"class":77},[67,159428,159429,159431,159433],{"class":69,"line":2335},[67,159430,159386],{"class":77},[67,159432,909],{"class":73},[67,159434,56236],{"class":208},[67,159436,159437,159439],{"class":69,"line":2340},[67,159438,2424],{"class":73},[67,159440,4459],{"class":77},[67,159442,159443,159445,159447,159450],{"class":69,"line":2346},[67,159444,31836],{"class":208},[67,159446,864],{"class":77},[67,159448,159449],{"class":84},"\"会员等级输入错误，按普通会员计算\"",[67,159451,870],{"class":77},[67,159453,159454],{"class":69,"line":2351},[67,159455,177],{"emptyLinePlaceholder":176},[67,159457,159458,159461,159463,159466,159468],{"class":69,"line":2365},[67,159459,159460],{"class":77},"pay ",[67,159462,909],{"class":73},[67,159464,159465],{"class":77}," amount ",[67,159467,1312],{"class":73},[67,159469,157812],{"class":77},[67,159471,159472],{"class":69,"line":2370},[67,159473,177],{"emptyLinePlaceholder":176},[67,159475,159476,159478,159481,159483,159486],{"class":69,"line":2376},[67,159477,2254],{"class":73},[67,159479,159480],{"class":77}," pay ",[67,159482,2433],{"class":73},[67,159484,159485],{"class":208}," 500",[67,159487,4459],{"class":77},[67,159489,159490,159493,159495],{"class":69,"line":2397},[67,159491,159492],{"class":77},"    pay ",[67,159494,150789],{"class":73},[67,159496,159497],{"class":208}," 50\n",[67,159499,159500],{"class":69,"line":2402},[67,159501,177],{"emptyLinePlaceholder":176},[67,159503,159504,159506,159508,159510,159512,159514,159517,159519,159521,159523],{"class":69,"line":2416},[67,159505,30952],{"class":208},[67,159507,864],{"class":77},[67,159509,915],{"class":73},[67,159511,157893],{"class":84},[67,159513,1752],{"class":208},[67,159515,159516],{"class":77},"pay",[67,159518,157696],{"class":73},[67,159520,1802],{"class":208},[67,159522,157549],{"class":84},[67,159524,870],{"class":77},[803,159526,159528],{"id":159527},"_312-易错点","3.12 易错点",[815,159530,159531,159534,159537,159540,159545],{},[818,159532,159533],{},"冒号不能漏。",[818,159535,159536],{},"缩进必须统一，不能一会儿 Tab 一会儿空格。",[818,159538,159539],{},"多分支判断要注意顺序。",[818,159541,159542,159543,28922],{},"判断相等用 ",[64,159544,3670],{},[818,159546,159547],{},"字符串比较区分大小写：",[57,159549,159551],{"className":30915,"code":159550,"language":30917,"meta":62,"style":62},"\"Y\" == \"y\"  # False\n",[64,159552,159553],{"__ignoreMap":62},[67,159554,159555,159558,159560,159562],{"class":69,"line":70},[67,159556,159557],{"class":84},"\"Y\"",[67,159559,102096],{"class":73},[67,159561,158542],{"class":84},[67,159563,159564],{"class":202},"  # False\n",[19,159566,159567],{},"可转换后再判断：",[57,159569,159571],{"className":30915,"code":159570,"language":30917,"meta":62,"style":62},"answer = input(\"是否继续(y\u002Fn):\").lower()\nif answer == \"y\":\n    print(\"继续\")\n",[64,159572,159573,159590,159603],{"__ignoreMap":62},[67,159574,159575,159578,159580,159582,159584,159587],{"class":69,"line":70},[67,159576,159577],{"class":77},"answer ",[67,159579,909],{"class":73},[67,159581,61142],{"class":208},[67,159583,864],{"class":77},[67,159585,159586],{"class":84},"\"是否继续(y\u002Fn):\"",[67,159588,159589],{"class":77},").lower()\n",[67,159591,159592,159594,159597,159599,159601],{"class":69,"line":143},[67,159593,2254],{"class":73},[67,159595,159596],{"class":77}," answer ",[67,159598,3670],{"class":73},[67,159600,158542],{"class":84},[67,159602,4459],{"class":77},[67,159604,159605,159607,159609,159612],{"class":69,"line":149},[67,159606,31836],{"class":208},[67,159608,864],{"class":77},[67,159610,159611],{"class":84},"\"继续\"",[67,159613,870],{"class":77},[803,159615,159617],{"id":159616},"_313-本章练习","3.13 本章练习",[815,159619,159620,159623,159626,159629,159639],{},[818,159621,159622],{},"输入年龄，判断是否成年。",[818,159624,159625],{},"输入年份，判断是否为闰年。",[818,159627,159628],{},"输入三个数字，输出最大值。",[818,159630,159631,159632,159635,159636,159638],{},"写登录判断：用户名是 ",[64,159633,159634],{},"admin"," 且密码是 ",[64,159637,15801],{}," 才登录成功。",[818,159640,159641],{},"写 BMI 判断程序，根据 BMI 输出偏瘦、正常、偏胖、肥胖。",[779,159643,159644],{},"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":62,"searchDepth":143,"depth":143,"links":159646},[159647,159648,159649,159650,159651,159652,159657,159658,159659,159660,159661,159662,159663],{"id":158035,"depth":143,"text":158036},{"id":158088,"depth":143,"text":158089},{"id":158192,"depth":143,"text":158193},{"id":158282,"depth":143,"text":158283},{"id":158472,"depth":143,"text":158473},{"id":158595,"depth":143,"text":158596,"children":159653},[159654,159655,159656],{"id":158599,"depth":149,"text":158600},{"id":158656,"depth":149,"text":158657},{"id":158713,"depth":149,"text":158714},{"id":158758,"depth":143,"text":158759},{"id":158849,"depth":143,"text":158850},{"id":158976,"depth":143,"text":158977},{"id":159106,"depth":143,"text":159107},{"id":159291,"depth":143,"text":159292},{"id":159527,"depth":143,"text":159528},{"id":159616,"depth":143,"text":159617},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch3",{"title":158027,"description":24093},"wiki\u002F2024-10-10-python教程\u002Fch3-判断语句","oDk8-y3MbhdWOUdgOWXuIP5YOyzaLgeTq9n7H6mCe_M",{"id":159670,"title":159671,"body":159672,"description":24093,"extension":787,"meta":161441,"navigation":176,"path":161442,"seo":161443,"stem":161444,"__hash__":161445},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch4-循环语句.md","4. 循环语句",{"type":7,"value":159673,"toc":161421},[159674,159677,159681,159687,159690,159707,159711,159713,159730,159732,159777,159779,159796,159800,159803,159869,159872,159890,159894,160055,160064,160068,160072,160077,160124,160126,160132,160136,160141,160188,160190,160196,160200,160205,160241,160244,160291,160295,160301,160359,160364,160395,160400,160404,160459,160462,160534,160537,160596,160600,160603,160678,160681,160685,160791,160794,160820,160824,160836,160905,160908,161000,161004,161006,161017,161019,161149,161153,161355,161363,161367,161397,161401,161418],[10,159675,159671],{"id":159676},"_4-循环语句",[803,159678,159680],{"id":159679},"_41-为什么需要循环","4.1 为什么需要循环",[19,159682,159683,159684,159686],{},"如果要输出 1 到 100，不应该写 100 行 ",[64,159685,147009],{},"，而应该用循环。",[19,159688,159689],{},"循环适合处理重复任务：",[815,159691,159692,159695,159698,159701,159704],{},[818,159693,159694],{},"重复输出。",[818,159696,159697],{},"重复输入。",[818,159699,159700],{},"遍历数据。",[818,159702,159703],{},"持续执行菜单。",[818,159705,159706],{},"批量处理文件或数据。",[803,159708,159710],{"id":159709},"_42-while循环","4.2 while循环",[19,159712,5900],{},[57,159714,159716],{"className":30915,"code":159715,"language":30917,"meta":62,"style":62},"while 条件:\n    循环体\n",[64,159717,159718,159725],{"__ignoreMap":62},[67,159719,159720,159722],{"class":69,"line":70},[67,159721,109200],{"class":73},[67,159723,159724],{"class":77}," 条件:\n",[67,159726,159727],{"class":69,"line":143},[67,159728,159729],{"class":77},"    循环体\n",[19,159731,15852],{},[57,159733,159735],{"className":30915,"code":159734,"language":30917,"meta":62,"style":62},"i = 1\n\nwhile i \u003C= 5:\n    print(i)\n    i += 1\n",[64,159736,159737,159745,159749,159761,159768],{"__ignoreMap":62},[67,159738,159739,159741,159743],{"class":69,"line":70},[67,159740,100685],{"class":77},[67,159742,909],{"class":73},[67,159744,56236],{"class":208},[67,159746,159747],{"class":69,"line":143},[67,159748,177],{"emptyLinePlaceholder":176},[67,159750,159751,159753,159755,159757,159759],{"class":69,"line":149},[67,159752,109200],{"class":73},[67,159754,10157],{"class":77},[67,159756,2311],{"class":73},[67,159758,2870],{"class":208},[67,159760,4459],{"class":77},[67,159762,159763,159765],{"class":69,"line":155},[67,159764,31836],{"class":208},[67,159766,159767],{"class":77},"(i)\n",[67,159769,159770,159773,159775],{"class":69,"line":161},[67,159771,159772],{"class":77},"    i ",[67,159774,10196],{"class":73},[67,159776,56236],{"class":208},[19,159778,81466],{},[815,159780,159781,159787,159790,159793],{},[818,159782,159783,159784,28922],{},"判断条件 ",[64,159785,159786],{},"i \u003C= 5",[818,159788,159789],{},"条件成立，执行循环体。",[818,159791,159792],{},"执行完后回到条件判断。",[818,159794,159795],{},"条件不成立，退出循环。",[803,159797,159799],{"id":159798},"_43-while累加","4.3 while累加",[19,159801,159802],{},"计算 1 到 100 的和：",[57,159804,159806],{"className":30915,"code":159805,"language":30917,"meta":62,"style":62},"i = 1\ntotal = 0\n\nwhile i \u003C= 100:\n    total += i\n    i += 1\n\nprint(total)\n",[64,159807,159808,159816,159824,159828,159840,159850,159858,159862],{"__ignoreMap":62},[67,159809,159810,159812,159814],{"class":69,"line":70},[67,159811,100685],{"class":77},[67,159813,909],{"class":73},[67,159815,56236],{"class":208},[67,159817,159818,159820,159822],{"class":69,"line":143},[67,159819,157797],{"class":77},[67,159821,909],{"class":73},[67,159823,47870],{"class":208},[67,159825,159826],{"class":69,"line":149},[67,159827,177],{"emptyLinePlaceholder":176},[67,159829,159830,159832,159834,159836,159838],{"class":69,"line":155},[67,159831,109200],{"class":73},[67,159833,10157],{"class":77},[67,159835,2311],{"class":73},[67,159837,6473],{"class":208},[67,159839,4459],{"class":77},[67,159841,159842,159845,159847],{"class":69,"line":161},[67,159843,159844],{"class":77},"    total ",[67,159846,10196],{"class":73},[67,159848,159849],{"class":77}," i\n",[67,159851,159852,159854,159856],{"class":69,"line":167},[67,159853,159772],{"class":77},[67,159855,10196],{"class":73},[67,159857,56236],{"class":208},[67,159859,159860],{"class":69,"line":173},[67,159861,177],{"emptyLinePlaceholder":176},[67,159863,159864,159866],{"class":69,"line":180},[67,159865,30952],{"class":208},[67,159867,159868],{"class":77},"(total)\n",[19,159870,159871],{},"核心思想：",[815,159873,159874,159879,159884],{},[818,159875,159876,159878],{},[64,159877,1298],{}," 控制循环次数。",[818,159880,159881,159883],{},[64,159882,157898],{}," 保存累加结果。",[818,159885,159886,159887,159889],{},"每轮循环都要更新 ",[64,159888,1298],{},"，否则可能死循环。",[803,159891,159893],{"id":159892},"_44-while猜数字","4.4 while猜数字",[57,159895,159897],{"className":30915,"code":159896,"language":30917,"meta":62,"style":62},"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",[64,159898,159899,159905,159909,159926,159934,159938,159946,159966,159975,159979,159991,160002,160012,160023,160029,160051],{"__ignoreMap":62},[67,159900,159901,159903],{"class":69,"line":70},[67,159902,30929],{"class":73},[67,159904,45865],{"class":77},[67,159906,159907],{"class":69,"line":143},[67,159908,177],{"emptyLinePlaceholder":176},[67,159910,159911,159913,159915,159918,159920,159922,159924],{"class":69,"line":149},[67,159912,159577],{"class":77},[67,159914,909],{"class":73},[67,159916,159917],{"class":77}," random.randint(",[67,159919,1077],{"class":208},[67,159921,13153],{"class":77},[67,159923,1169],{"class":208},[67,159925,870],{"class":77},[67,159927,159928,159930,159932],{"class":69,"line":155},[67,159929,147228],{"class":77},[67,159931,909],{"class":73},[67,159933,47870],{"class":208},[67,159935,159936],{"class":69,"line":161},[67,159937,177],{"emptyLinePlaceholder":176},[67,159939,159940,159942,159944],{"class":69,"line":167},[67,159941,109200],{"class":73},[67,159943,95829],{"class":208},[67,159945,4459],{"class":77},[67,159947,159948,159951,159953,159955,159957,159959,159961,159964],{"class":69,"line":173},[67,159949,159950],{"class":77},"    guess ",[67,159952,909],{"class":73},[67,159954,3104],{"class":208},[67,159956,864],{"class":77},[67,159958,54358],{"class":208},[67,159960,864],{"class":77},[67,159962,159963],{"class":84},"\"请输入1到100之间的数字:\"",[67,159965,31034],{"class":77},[67,159967,159968,159971,159973],{"class":69,"line":180},[67,159969,159970],{"class":77},"    count ",[67,159972,10196],{"class":73},[67,159974,56236],{"class":208},[67,159976,159977],{"class":69,"line":186},[67,159978,177],{"emptyLinePlaceholder":176},[67,159980,159981,159983,159986,159988],{"class":69,"line":444},[67,159982,3821],{"class":73},[67,159984,159985],{"class":77}," guess ",[67,159987,1816],{"class":73},[67,159989,159990],{"class":77}," answer:\n",[67,159992,159993,159995,159997,160000],{"class":69,"line":2335},[67,159994,32988],{"class":208},[67,159996,864],{"class":77},[67,159998,159999],{"class":84},"\"猜大了\"",[67,160001,870],{"class":77},[67,160003,160004,160006,160008,160010],{"class":69,"line":2340},[67,160005,39830],{"class":73},[67,160007,159985],{"class":77},[67,160009,1766],{"class":73},[67,160011,159990],{"class":77},[67,160013,160014,160016,160018,160021],{"class":69,"line":2346},[67,160015,32988],{"class":208},[67,160017,864],{"class":77},[67,160019,160020],{"class":84},"\"猜小了\"",[67,160022,870],{"class":77},[67,160024,160025,160027],{"class":69,"line":2351},[67,160026,158559],{"class":73},[67,160028,4459],{"class":77},[67,160030,160031,160033,160035,160037,160040,160042,160044,160046,160049],{"class":69,"line":2365},[67,160032,32988],{"class":208},[67,160034,864],{"class":77},[67,160036,915],{"class":73},[67,160038,160039],{"class":84},"\"猜对了，一共猜了",[67,160041,1752],{"class":208},[67,160043,84971],{"class":77},[67,160045,1802],{"class":208},[67,160047,160048],{"class":84},"次\"",[67,160050,870],{"class":77},[67,160052,160053],{"class":69,"line":2370},[67,160054,32164],{"class":73},[19,160056,160057,160060,160061,160063],{},[64,160058,160059],{},"while True"," 表示无限循环，通常配合 ",[64,160062,2775],{}," 使用。",[803,160065,160067],{"id":160066},"_45-break和continue","4.5 break和continue",[14,160069,160071],{"id":160070},"_451-break","4.5.1 break",[19,160073,160074,160076],{},[64,160075,2775],{}," 直接结束整个循环。",[57,160078,160080],{"className":30915,"code":160079,"language":30917,"meta":62,"style":62},"for i in range(1, 6):\n    if i == 3:\n        break\n    print(i)\n",[64,160081,160082,160102,160114,160118],{"__ignoreMap":62},[67,160083,160084,160086,160088,160090,160092,160094,160096,160098,160100],{"class":69,"line":70},[67,160085,74],{"class":73},[67,160087,10157],{"class":77},[67,160089,81],{"class":73},[67,160091,32980],{"class":208},[67,160093,864],{"class":77},[67,160095,1077],{"class":208},[67,160097,13153],{"class":77},[67,160099,1202],{"class":208},[67,160101,31323],{"class":77},[67,160103,160104,160106,160108,160110,160112],{"class":69,"line":143},[67,160105,3821],{"class":73},[67,160107,10157],{"class":77},[67,160109,3670],{"class":73},[67,160111,78607],{"class":208},[67,160113,4459],{"class":77},[67,160115,160116],{"class":69,"line":149},[67,160117,32164],{"class":73},[67,160119,160120,160122],{"class":69,"line":155},[67,160121,31836],{"class":208},[67,160123,159767],{"class":77},[19,160125,146994],{},[57,160127,160130],{"className":160128,"code":160129,"language":5906,"meta":62},[5904],"1\n2\n",[64,160131,160129],{"__ignoreMap":62},[14,160133,160135],{"id":160134},"_452-continue","4.5.2 continue",[19,160137,160138,160140],{},[64,160139,155209],{}," 跳过本轮剩余代码，进入下一轮循环。",[57,160142,160144],{"className":30915,"code":160143,"language":30917,"meta":62,"style":62},"for i in range(1, 6):\n    if i == 3:\n        continue\n    print(i)\n",[64,160145,160146,160166,160178,160182],{"__ignoreMap":62},[67,160147,160148,160150,160152,160154,160156,160158,160160,160162,160164],{"class":69,"line":70},[67,160149,74],{"class":73},[67,160151,10157],{"class":77},[67,160153,81],{"class":73},[67,160155,32980],{"class":208},[67,160157,864],{"class":77},[67,160159,1077],{"class":208},[67,160161,13153],{"class":77},[67,160163,1202],{"class":208},[67,160165,31323],{"class":77},[67,160167,160168,160170,160172,160174,160176],{"class":69,"line":143},[67,160169,3821],{"class":73},[67,160171,10157],{"class":77},[67,160173,3670],{"class":73},[67,160175,78607],{"class":208},[67,160177,4459],{"class":77},[67,160179,160180],{"class":69,"line":149},[67,160181,149049],{"class":73},[67,160183,160184,160186],{"class":69,"line":155},[67,160185,31836],{"class":208},[67,160187,159767],{"class":77},[19,160189,146994],{},[57,160191,160194],{"className":160192,"code":160193,"language":5906,"meta":62},[5904],"1\n2\n4\n5\n",[64,160195,160193],{"__ignoreMap":62},[803,160197,160199],{"id":160198},"_46-for循环","4.6 for循环",[19,160201,160202,160204],{},[64,160203,74],{}," 常用于遍历序列。",[57,160206,160208],{"className":30915,"code":160207,"language":30917,"meta":62,"style":62},"name = \"python\"\n\nfor ch in name:\n    print(ch)\n",[64,160209,160210,160219,160223,160234],{"__ignoreMap":62},[67,160211,160212,160214,160216],{"class":69,"line":70},[67,160213,147073],{"class":77},[67,160215,909],{"class":73},[67,160217,160218],{"class":84}," \"python\"\n",[67,160220,160221],{"class":69,"line":143},[67,160222,177],{"emptyLinePlaceholder":176},[67,160224,160225,160227,160230,160232],{"class":69,"line":149},[67,160226,74],{"class":73},[67,160228,160229],{"class":77}," ch ",[67,160231,81],{"class":73},[67,160233,158936],{"class":77},[67,160235,160236,160238],{"class":69,"line":155},[67,160237,31836],{"class":208},[67,160239,160240],{"class":77},"(ch)\n",[19,160242,160243],{},"遍历列表：",[57,160245,160247],{"className":30915,"code":160246,"language":30917,"meta":62,"style":62},"students = [\"小明\", \"小红\", \"小刚\"]\n\nfor student in students:\n    print(student)\n",[64,160248,160249,160271,160275,160285],{"__ignoreMap":62},[67,160250,160251,160254,160256,160258,160260,160262,160264,160266,160269],{"class":69,"line":70},[67,160252,160253],{"class":77},"students ",[67,160255,909],{"class":73},[67,160257,52763],{"class":77},[67,160259,150425],{"class":84},[67,160261,13153],{"class":77},[67,160263,151473],{"class":84},[67,160265,13153],{"class":77},[67,160267,160268],{"class":84},"\"小刚\"",[67,160270,33783],{"class":77},[67,160272,160273],{"class":69,"line":143},[67,160274,177],{"emptyLinePlaceholder":176},[67,160276,160277,160279,160281,160283],{"class":69,"line":149},[67,160278,74],{"class":73},[67,160280,152674],{"class":77},[67,160282,81],{"class":73},[67,160284,152679],{"class":77},[67,160286,160287,160289],{"class":69,"line":155},[67,160288,31836],{"class":208},[67,160290,150579],{"class":77},[803,160292,160294],{"id":160293},"_47-range函数","4.7 range函数",[19,160296,160297,160300],{},[64,160298,160299],{},"range()"," 用于生成整数序列。",[57,160302,160304],{"className":30915,"code":160303,"language":30917,"meta":62,"style":62},"range(5)          # 0,1,2,3,4\nrange(1, 5)       # 1,2,3,4\nrange(1, 10, 2)   # 1,3,5,7,9\n",[64,160305,160306,160320,160338],{"__ignoreMap":62},[67,160307,160308,160310,160312,160314,160317],{"class":69,"line":70},[67,160309,33953],{"class":208},[67,160311,864],{"class":77},[67,160313,1177],{"class":208},[67,160315,160316],{"class":77},")          ",[67,160318,160319],{"class":202},"# 0,1,2,3,4\n",[67,160321,160322,160324,160326,160328,160330,160332,160335],{"class":69,"line":143},[67,160323,33953],{"class":208},[67,160325,864],{"class":77},[67,160327,1077],{"class":208},[67,160329,13153],{"class":77},[67,160331,1177],{"class":208},[67,160333,160334],{"class":77},")       ",[67,160336,160337],{"class":202},"# 1,2,3,4\n",[67,160339,160340,160342,160344,160346,160348,160350,160352,160354,160356],{"class":69,"line":149},[67,160341,33953],{"class":208},[67,160343,864],{"class":77},[67,160345,1077],{"class":208},[67,160347,13153],{"class":77},[67,160349,1303],{"class":208},[67,160351,13153],{"class":77},[67,160353,939],{"class":208},[67,160355,156198],{"class":77},[67,160357,160358],{"class":202},"# 1,3,5,7,9\n",[19,160360,160361,160362,25331],{},"配合 ",[64,160363,74],{},[57,160365,160367],{"className":30915,"code":160366,"language":30917,"meta":62,"style":62},"for i in range(1, 6):\n    print(i)\n",[64,160368,160369,160389],{"__ignoreMap":62},[67,160370,160371,160373,160375,160377,160379,160381,160383,160385,160387],{"class":69,"line":70},[67,160372,74],{"class":73},[67,160374,10157],{"class":77},[67,160376,81],{"class":73},[67,160378,32980],{"class":208},[67,160380,864],{"class":77},[67,160382,1077],{"class":208},[67,160384,13153],{"class":77},[67,160386,1202],{"class":208},[67,160388,31323],{"class":77},[67,160390,160391,160393],{"class":69,"line":143},[67,160392,31836],{"class":208},[67,160394,159767],{"class":77},[19,160396,9744,160397,160399],{},[64,160398,33953],{}," 的结束值不包含在内。",[803,160401,160403],{"id":160402},"_48-for循环求和","4.8 for循环求和",[57,160405,160407],{"className":30915,"code":160406,"language":30917,"meta":62,"style":62},"total = 0\n\nfor i in range(1, 101):\n    total += i\n\nprint(total)\n",[64,160408,160409,160417,160421,160441,160449,160453],{"__ignoreMap":62},[67,160410,160411,160413,160415],{"class":69,"line":70},[67,160412,157797],{"class":77},[67,160414,909],{"class":73},[67,160416,47870],{"class":208},[67,160418,160419],{"class":69,"line":143},[67,160420,177],{"emptyLinePlaceholder":176},[67,160422,160423,160425,160427,160429,160431,160433,160435,160437,160439],{"class":69,"line":149},[67,160424,74],{"class":73},[67,160426,10157],{"class":77},[67,160428,81],{"class":73},[67,160430,32980],{"class":208},[67,160432,864],{"class":77},[67,160434,1077],{"class":208},[67,160436,13153],{"class":77},[67,160438,1195],{"class":208},[67,160440,31323],{"class":77},[67,160442,160443,160445,160447],{"class":69,"line":155},[67,160444,159844],{"class":77},[67,160446,10196],{"class":73},[67,160448,159849],{"class":77},[67,160450,160451],{"class":69,"line":161},[67,160452,177],{"emptyLinePlaceholder":176},[67,160454,160455,160457],{"class":69,"line":167},[67,160456,30952],{"class":208},[67,160458,159868],{"class":77},[19,160460,160461],{},"求偶数和：",[57,160463,160465],{"className":30915,"code":160464,"language":30917,"meta":62,"style":62},"total = 0\n\nfor i in range(1, 101):\n    if i % 2 == 0:\n        total += i\n\nprint(total)\n",[64,160466,160467,160475,160479,160499,160515,160524,160528],{"__ignoreMap":62},[67,160468,160469,160471,160473],{"class":69,"line":70},[67,160470,157797],{"class":77},[67,160472,909],{"class":73},[67,160474,47870],{"class":208},[67,160476,160477],{"class":69,"line":143},[67,160478,177],{"emptyLinePlaceholder":176},[67,160480,160481,160483,160485,160487,160489,160491,160493,160495,160497],{"class":69,"line":149},[67,160482,74],{"class":73},[67,160484,10157],{"class":77},[67,160486,81],{"class":73},[67,160488,32980],{"class":208},[67,160490,864],{"class":77},[67,160492,1077],{"class":208},[67,160494,13153],{"class":77},[67,160496,1195],{"class":208},[67,160498,31323],{"class":77},[67,160500,160501,160503,160505,160507,160509,160511,160513],{"class":69,"line":155},[67,160502,3821],{"class":73},[67,160504,10157],{"class":77},[67,160506,1186],{"class":73},[67,160508,15472],{"class":208},[67,160510,102096],{"class":73},[67,160512,4813],{"class":208},[67,160514,4459],{"class":77},[67,160516,160517,160520,160522],{"class":69,"line":161},[67,160518,160519],{"class":77},"        total ",[67,160521,10196],{"class":73},[67,160523,159849],{"class":77},[67,160525,160526],{"class":69,"line":167},[67,160527,177],{"emptyLinePlaceholder":176},[67,160529,160530,160532],{"class":69,"line":173},[67,160531,30952],{"class":208},[67,160533,159868],{"class":77},[19,160535,160536],{},"也可以：",[57,160538,160540],{"className":30915,"code":160539,"language":30917,"meta":62,"style":62},"total = 0\n\nfor i in range(2, 101, 2):\n    total += i\n\nprint(total)\n",[64,160541,160542,160550,160554,160578,160586,160590],{"__ignoreMap":62},[67,160543,160544,160546,160548],{"class":69,"line":70},[67,160545,157797],{"class":77},[67,160547,909],{"class":73},[67,160549,47870],{"class":208},[67,160551,160552],{"class":69,"line":143},[67,160553,177],{"emptyLinePlaceholder":176},[67,160555,160556,160558,160560,160562,160564,160566,160568,160570,160572,160574,160576],{"class":69,"line":149},[67,160557,74],{"class":73},[67,160559,10157],{"class":77},[67,160561,81],{"class":73},[67,160563,32980],{"class":208},[67,160565,864],{"class":77},[67,160567,939],{"class":208},[67,160569,13153],{"class":77},[67,160571,1195],{"class":208},[67,160573,13153],{"class":77},[67,160575,939],{"class":208},[67,160577,31323],{"class":77},[67,160579,160580,160582,160584],{"class":69,"line":155},[67,160581,159844],{"class":77},[67,160583,10196],{"class":73},[67,160585,159849],{"class":77},[67,160587,160588],{"class":69,"line":161},[67,160589,177],{"emptyLinePlaceholder":176},[67,160591,160592,160594],{"class":69,"line":167},[67,160593,30952],{"class":208},[67,160595,159868],{"class":77},[803,160597,160599],{"id":160598},"_49-循环嵌套","4.9 循环嵌套",[19,160601,160602],{},"嵌套循环就是循环里面再写循环。",[57,160604,160606],{"className":30915,"code":160605,"language":30917,"meta":62,"style":62},"for i in range(1, 4):\n    for j in range(1, 4):\n        print(f\"i={i}, j={j}\")\n",[64,160607,160608,160628,160648],{"__ignoreMap":62},[67,160609,160610,160612,160614,160616,160618,160620,160622,160624,160626],{"class":69,"line":70},[67,160611,74],{"class":73},[67,160613,10157],{"class":77},[67,160615,81],{"class":73},[67,160617,32980],{"class":208},[67,160619,864],{"class":77},[67,160621,1077],{"class":208},[67,160623,13153],{"class":77},[67,160625,1151],{"class":208},[67,160627,31323],{"class":77},[67,160629,160630,160632,160634,160636,160638,160640,160642,160644,160646],{"class":69,"line":143},[67,160631,3921],{"class":73},[67,160633,10219],{"class":77},[67,160635,81],{"class":73},[67,160637,32980],{"class":208},[67,160639,864],{"class":77},[67,160641,1077],{"class":208},[67,160643,13153],{"class":77},[67,160645,1151],{"class":208},[67,160647,31323],{"class":77},[67,160649,160650,160652,160654,160656,160659,160661,160663,160665,160668,160670,160672,160674,160676],{"class":69,"line":149},[67,160651,32988],{"class":208},[67,160653,864],{"class":77},[67,160655,915],{"class":73},[67,160657,160658],{"class":84},"\"i=",[67,160660,1752],{"class":208},[67,160662,1298],{"class":77},[67,160664,1802],{"class":208},[67,160666,160667],{"class":84},", j=",[67,160669,1752],{"class":208},[67,160671,1324],{"class":77},[67,160673,1802],{"class":208},[67,160675,257],{"class":84},[67,160677,870],{"class":77},[19,160679,160680],{},"外层循环执行一次，内层循环执行完整一轮。",[803,160682,160684],{"id":160683},"_410-九九乘法表","4.10 九九乘法表",[57,160686,160688],{"className":30915,"code":160687,"language":30917,"meta":62,"style":62},"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",[64,160689,160690,160710,160733,160785],{"__ignoreMap":62},[67,160691,160692,160694,160696,160698,160700,160702,160704,160706,160708],{"class":69,"line":70},[67,160693,74],{"class":73},[67,160695,10157],{"class":77},[67,160697,81],{"class":73},[67,160699,32980],{"class":208},[67,160701,864],{"class":77},[67,160703,1077],{"class":208},[67,160705,13153],{"class":77},[67,160707,1303],{"class":208},[67,160709,31323],{"class":77},[67,160711,160712,160714,160716,160718,160720,160722,160724,160727,160729,160731],{"class":69,"line":143},[67,160713,3921],{"class":73},[67,160715,10219],{"class":77},[67,160717,81],{"class":73},[67,160719,32980],{"class":208},[67,160721,864],{"class":77},[67,160723,1077],{"class":208},[67,160725,160726],{"class":77},", i ",[67,160728,1338],{"class":73},[67,160730,25828],{"class":208},[67,160732,31323],{"class":77},[67,160734,160735,160737,160739,160741,160743,160745,160747,160749,160751,160753,160755,160757,160759,160761,160763,160765,160767,160769,160771,160773,160775,160777,160779,160781,160783],{"class":69,"line":149},[67,160736,32988],{"class":208},[67,160738,864],{"class":77},[67,160740,915],{"class":73},[67,160742,257],{"class":84},[67,160744,1752],{"class":208},[67,160746,1324],{"class":77},[67,160748,1802],{"class":208},[67,160750,1312],{"class":84},[67,160752,1752],{"class":208},[67,160754,1298],{"class":77},[67,160756,1802],{"class":208},[67,160758,909],{"class":84},[67,160760,1752],{"class":208},[67,160762,100685],{"class":77},[67,160764,1312],{"class":73},[67,160766,4130],{"class":77},[67,160768,1802],{"class":208},[67,160770,257],{"class":84},[67,160772,13153],{"class":77},[67,160774,46338],{"class":5935},[67,160776,909],{"class":73},[67,160778,257],{"class":84},[67,160780,1957],{"class":208},[67,160782,257],{"class":84},[67,160784,870],{"class":77},[67,160786,160787,160789],{"class":69,"line":155},[67,160788,31836],{"class":208},[67,160790,2698],{"class":77},[19,160792,160793],{},"关键点：",[815,160795,160796,160802,160808,160814],{},[818,160797,160798,160799,160801],{},"外层 ",[64,160800,1298],{}," 控制行。",[818,160803,160804,160805,160807],{},"内层 ",[64,160806,1324],{}," 控制列。",[818,160809,160810,160811,160813],{},"每行结束后用 ",[64,160812,147009],{}," 换行。",[818,160815,160816,160819],{},[64,160817,160818],{},"end=\"\\t\""," 让同一行的内容横向排列。",[803,160821,160823],{"id":160822},"_411-循环else","4.11 循环else",[19,160825,160826,160827,160829,160830,160832,160833,160835],{},"Python 的循环可以带 ",[64,160828,2424],{},"。当循环正常结束时执行 ",[64,160831,2424],{},"，如果被 ",[64,160834,2775],{}," 打断，则不执行。",[57,160837,160839],{"className":30915,"code":160838,"language":30917,"meta":62,"style":62},"for i in range(1, 6):\n    if i == 10:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[64,160840,160841,160861,160873,160884,160888,160894],{"__ignoreMap":62},[67,160842,160843,160845,160847,160849,160851,160853,160855,160857,160859],{"class":69,"line":70},[67,160844,74],{"class":73},[67,160846,10157],{"class":77},[67,160848,81],{"class":73},[67,160850,32980],{"class":208},[67,160852,864],{"class":77},[67,160854,1077],{"class":208},[67,160856,13153],{"class":77},[67,160858,1202],{"class":208},[67,160860,31323],{"class":77},[67,160862,160863,160865,160867,160869,160871],{"class":69,"line":143},[67,160864,3821],{"class":73},[67,160866,10157],{"class":77},[67,160868,3670],{"class":73},[67,160870,2760],{"class":208},[67,160872,4459],{"class":77},[67,160874,160875,160877,160879,160882],{"class":69,"line":149},[67,160876,32988],{"class":208},[67,160878,864],{"class":77},[67,160880,160881],{"class":84},"\"找到了\"",[67,160883,870],{"class":77},[67,160885,160886],{"class":69,"line":155},[67,160887,32164],{"class":73},[67,160889,160890,160892],{"class":69,"line":161},[67,160891,2424],{"class":73},[67,160893,4459],{"class":77},[67,160895,160896,160898,160900,160903],{"class":69,"line":167},[67,160897,31836],{"class":208},[67,160899,864],{"class":77},[67,160901,160902],{"class":84},"\"没找到\"",[67,160904,870],{"class":77},[19,160906,160907],{},"常用于搜索。",[57,160909,160911],{"className":30915,"code":160910,"language":30917,"meta":62,"style":62},"names = [\"小明\", \"小红\", \"小刚\"]\ntarget = \"小李\"\n\nfor name in names:\n    if name == target:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[64,160912,160913,160934,160943,160947,160959,160970,160980,160984,160990],{"__ignoreMap":62},[67,160914,160915,160918,160920,160922,160924,160926,160928,160930,160932],{"class":69,"line":70},[67,160916,160917],{"class":77},"names ",[67,160919,909],{"class":73},[67,160921,52763],{"class":77},[67,160923,150425],{"class":84},[67,160925,13153],{"class":77},[67,160927,151473],{"class":84},[67,160929,13153],{"class":77},[67,160931,160268],{"class":84},[67,160933,33783],{"class":77},[67,160935,160936,160938,160940],{"class":69,"line":143},[67,160937,112115],{"class":77},[67,160939,909],{"class":73},[67,160941,160942],{"class":84}," \"小李\"\n",[67,160944,160945],{"class":69,"line":149},[67,160946,177],{"emptyLinePlaceholder":176},[67,160948,160949,160951,160954,160956],{"class":69,"line":155},[67,160950,74],{"class":73},[67,160952,160953],{"class":77}," name ",[67,160955,81],{"class":73},[67,160957,160958],{"class":77}," names:\n",[67,160960,160961,160963,160965,160967],{"class":69,"line":161},[67,160962,3821],{"class":73},[67,160964,160953],{"class":77},[67,160966,3670],{"class":73},[67,160968,160969],{"class":77}," target:\n",[67,160971,160972,160974,160976,160978],{"class":69,"line":167},[67,160973,32988],{"class":208},[67,160975,864],{"class":77},[67,160977,160881],{"class":84},[67,160979,870],{"class":77},[67,160981,160982],{"class":69,"line":173},[67,160983,32164],{"class":73},[67,160985,160986,160988],{"class":69,"line":180},[67,160987,2424],{"class":73},[67,160989,4459],{"class":77},[67,160991,160992,160994,160996,160998],{"class":69,"line":186},[67,160993,31836],{"class":208},[67,160995,864],{"class":77},[67,160997,160902],{"class":84},[67,160999,870],{"class":77},[803,161001,161003],{"id":161002},"_412-小案例登录重试","4.12 小案例：登录重试",[19,161005,123829],{},[815,161007,161008,161011,161014],{},[818,161009,161010],{},"用户最多输入 3 次密码。",[818,161012,161013],{},"密码正确则登录成功。",[818,161015,161016],{},"3 次都错误则锁定账号。",[19,161018,10753],{},[57,161020,161022],{"className":30915,"code":161021,"language":30917,"meta":62,"style":62},"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",[64,161023,161024,161034,161038,161054,161070,161074,161086,161097,161101,161107,161132,161138],{"__ignoreMap":62},[67,161025,161026,161029,161031],{"class":69,"line":70},[67,161027,161028],{"class":77},"password ",[67,161030,909],{"class":73},[67,161032,161033],{"class":84}," \"123456\"\n",[67,161035,161036],{"class":69,"line":143},[67,161037,177],{"emptyLinePlaceholder":176},[67,161039,161040,161042,161044,161046,161048,161050,161052],{"class":69,"line":149},[67,161041,74],{"class":73},[67,161043,10157],{"class":77},[67,161045,81],{"class":73},[67,161047,32980],{"class":208},[67,161049,864],{"class":77},[67,161051,933],{"class":208},[67,161053,31323],{"class":77},[67,161055,161056,161059,161061,161063,161065,161068],{"class":69,"line":155},[67,161057,161058],{"class":77},"    user_password ",[67,161060,909],{"class":73},[67,161062,61142],{"class":208},[67,161064,864],{"class":77},[67,161066,161067],{"class":84},"\"请输入密码:\"",[67,161069,870],{"class":77},[67,161071,161072],{"class":69,"line":161},[67,161073,177],{"emptyLinePlaceholder":176},[67,161075,161076,161078,161081,161083],{"class":69,"line":167},[67,161077,3821],{"class":73},[67,161079,161080],{"class":77}," user_password ",[67,161082,3670],{"class":73},[67,161084,161085],{"class":77}," password:\n",[67,161087,161088,161090,161092,161095],{"class":69,"line":173},[67,161089,32988],{"class":208},[67,161091,864],{"class":77},[67,161093,161094],{"class":84},"\"登录成功\"",[67,161096,870],{"class":77},[67,161098,161099],{"class":69,"line":180},[67,161100,32164],{"class":73},[67,161102,161103,161105],{"class":69,"line":186},[67,161104,158559],{"class":73},[67,161106,4459],{"class":77},[67,161108,161109,161111,161113,161115,161118,161121,161123,161125,161127,161130],{"class":69,"line":444},[67,161110,32988],{"class":208},[67,161112,864],{"class":77},[67,161114,915],{"class":73},[67,161116,161117],{"class":84},"\"密码错误，还剩",[67,161119,161120],{"class":208},"{2",[67,161122,52808],{"class":73},[67,161124,3752],{"class":77},[67,161126,1802],{"class":208},[67,161128,161129],{"class":84},"次机会\"",[67,161131,870],{"class":77},[67,161133,161134,161136],{"class":69,"line":2335},[67,161135,2424],{"class":73},[67,161137,4459],{"class":77},[67,161139,161140,161142,161144,161147],{"class":69,"line":2340},[67,161141,31836],{"class":208},[67,161143,864],{"class":77},[67,161145,161146],{"class":84},"\"账号已锁定\"",[67,161148,870],{"class":77},[803,161150,161152],{"id":161151},"_413-小案例菜单程序","4.13 小案例：菜单程序",[57,161154,161156],{"className":30915,"code":161155,"language":30917,"meta":62,"style":62},"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",[64,161157,161158,161166,161177,161188,161199,161210,161221,161225,161240,161244,161256,161267,161279,161290,161302,161313,161325,161335,161339,161345],{"__ignoreMap":62},[67,161159,161160,161162,161164],{"class":69,"line":70},[67,161161,109200],{"class":73},[67,161163,95829],{"class":208},[67,161165,4459],{"class":77},[67,161167,161168,161170,161172,161175],{"class":69,"line":143},[67,161169,31836],{"class":208},[67,161171,864],{"class":77},[67,161173,161174],{"class":84},"\"====== 菜单 ======\"",[67,161176,870],{"class":77},[67,161178,161179,161181,161183,161186],{"class":69,"line":149},[67,161180,31836],{"class":208},[67,161182,864],{"class":77},[67,161184,161185],{"class":84},"\"1. 查询余额\"",[67,161187,870],{"class":77},[67,161189,161190,161192,161194,161197],{"class":69,"line":155},[67,161191,31836],{"class":208},[67,161193,864],{"class":77},[67,161195,161196],{"class":84},"\"2. 存款\"",[67,161198,870],{"class":77},[67,161200,161201,161203,161205,161208],{"class":69,"line":161},[67,161202,31836],{"class":208},[67,161204,864],{"class":77},[67,161206,161207],{"class":84},"\"3. 取款\"",[67,161209,870],{"class":77},[67,161211,161212,161214,161216,161219],{"class":69,"line":167},[67,161213,31836],{"class":208},[67,161215,864],{"class":77},[67,161217,161218],{"class":84},"\"0. 退出\"",[67,161220,870],{"class":77},[67,161222,161223],{"class":69,"line":173},[67,161224,177],{"emptyLinePlaceholder":176},[67,161226,161227,161230,161232,161234,161236,161238],{"class":69,"line":180},[67,161228,161229],{"class":77},"    choice ",[67,161231,909],{"class":73},[67,161233,61142],{"class":208},[67,161235,864],{"class":77},[67,161237,153610],{"class":84},[67,161239,870],{"class":77},[67,161241,161242],{"class":69,"line":186},[67,161243,177],{"emptyLinePlaceholder":176},[67,161245,161246,161248,161250,161252,161254],{"class":69,"line":444},[67,161247,3821],{"class":73},[67,161249,153623],{"class":77},[67,161251,3670],{"class":73},[67,161253,153628],{"class":84},[67,161255,4459],{"class":77},[67,161257,161258,161260,161262,161265],{"class":69,"line":2335},[67,161259,32988],{"class":208},[67,161261,864],{"class":77},[67,161263,161264],{"class":84},"\"余额为1000元\"",[67,161266,870],{"class":77},[67,161268,161269,161271,161273,161275,161277],{"class":69,"line":2340},[67,161270,39830],{"class":73},[67,161272,153623],{"class":77},[67,161274,3670],{"class":73},[67,161276,153647],{"class":84},[67,161278,4459],{"class":77},[67,161280,161281,161283,161285,161288],{"class":69,"line":2346},[67,161282,32988],{"class":208},[67,161284,864],{"class":77},[67,161286,161287],{"class":84},"\"存款功能\"",[67,161289,870],{"class":77},[67,161291,161292,161294,161296,161298,161300],{"class":69,"line":2351},[67,161293,39830],{"class":73},[67,161295,153623],{"class":77},[67,161297,3670],{"class":73},[67,161299,153665],{"class":84},[67,161301,4459],{"class":77},[67,161303,161304,161306,161308,161311],{"class":69,"line":2365},[67,161305,32988],{"class":208},[67,161307,864],{"class":77},[67,161309,161310],{"class":84},"\"取款功能\"",[67,161312,870],{"class":77},[67,161314,161315,161317,161319,161321,161323],{"class":69,"line":2370},[67,161316,39830],{"class":73},[67,161318,153623],{"class":77},[67,161320,3670],{"class":73},[67,161322,153719],{"class":84},[67,161324,4459],{"class":77},[67,161326,161327,161329,161331,161333],{"class":69,"line":2376},[67,161328,32988],{"class":208},[67,161330,864],{"class":77},[67,161332,153730],{"class":84},[67,161334,870],{"class":77},[67,161336,161337],{"class":69,"line":2397},[67,161338,32164],{"class":73},[67,161340,161341,161343],{"class":69,"line":2402},[67,161342,158559],{"class":73},[67,161344,4459],{"class":77},[67,161346,161347,161349,161351,161353],{"class":69,"line":2416},[67,161348,32988],{"class":208},[67,161350,864],{"class":77},[67,161352,153751],{"class":84},[67,161354,870],{"class":77},[19,161356,161357,161358,161360,161361,28922],{},"菜单类程序通常使用 ",[64,161359,160059],{},"，用户选择退出时 ",[64,161362,2775],{},[803,161364,161366],{"id":161365},"_414-易错点","4.14 易错点",[815,161368,161369,161374,161380,161388,161394],{},[818,161370,161371,161373],{},[64,161372,109200],{}," 循环必须更新控制变量。",[818,161375,161376,161379],{},[64,161377,161378],{},"range(1, 10)"," 不包含 10。",[818,161381,161382,161384,161385,161387],{},[64,161383,2775],{}," 结束整个循环，",[64,161386,155209],{}," 只跳过本轮。",[818,161389,161390,161391,161393],{},"嵌套循环中，",[64,161392,2775],{}," 只跳出当前所在的一层循环。",[818,161395,161396],{},"不要在循环中频繁写重复代码，能封装函数就封装函数。",[803,161398,161400],{"id":161399},"_415-本章练习","4.15 本章练习",[815,161402,161403,161406,161409,161412,161415],{},[818,161404,161405],{},"输出 1 到 100。",[818,161407,161408],{},"计算 1 到 100 的偶数和。",[818,161410,161411],{},"输出 100 以内能被 3 和 5 同时整除的数。",[818,161413,161414],{},"编写猜数字游戏，限制最多猜 7 次。",[818,161416,161417],{},"编写菜单程序，实现查看余额、存款、取款、退出。",[779,161419,161420],{},"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":62,"searchDepth":143,"depth":143,"links":161422},[161423,161424,161425,161426,161427,161431,161432,161433,161434,161435,161436,161437,161438,161439,161440],{"id":159679,"depth":143,"text":159680},{"id":159709,"depth":143,"text":159710},{"id":159798,"depth":143,"text":159799},{"id":159892,"depth":143,"text":159893},{"id":160066,"depth":143,"text":160067,"children":161428},[161429,161430],{"id":160070,"depth":149,"text":160071},{"id":160134,"depth":149,"text":160135},{"id":160198,"depth":143,"text":160199},{"id":160293,"depth":143,"text":160294},{"id":160402,"depth":143,"text":160403},{"id":160598,"depth":143,"text":160599},{"id":160683,"depth":143,"text":160684},{"id":160822,"depth":143,"text":160823},{"id":161002,"depth":143,"text":161003},{"id":161151,"depth":143,"text":161152},{"id":161365,"depth":143,"text":161366},{"id":161399,"depth":143,"text":161400},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch4",{"title":159671,"description":24093},"wiki\u002F2024-10-10-python教程\u002Fch4-循环语句","lNHBoZHnAH-b1ogDfanr4dZuyXln9CGVy502nnjUB3Q",{"id":161447,"title":161448,"body":161449,"description":24093,"extension":787,"meta":163454,"navigation":176,"path":163455,"seo":163456,"stem":163457,"__hash__":163458},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch5-函数基础.md","5. 函数基础",{"type":7,"value":161450,"toc":163434},[161451,161454,161458,161461,161464,161478,161481,161495,161499,161501,161520,161522,161569,161571,161585,161589,161663,161666,161670,161673,161732,161740,161743,161796,161799,161803,161808,161863,161871,161921,161925,161930,161938,162037,162043,162047,162052,162055,162066,162107,162120,162124,162127,162163,162166,162179,162182,162242,162246,162250,162253,162304,162308,162311,162358,162364,162430,162433,162437,162440,162556,162559,162563,162566,162672,162676,162679,162717,162720,162762,162765,162825,162828,162832,163296,163299,163303,163330,163336,163397,163401,163431],[10,161452,161448],{"id":161453},"_5-函数基础",[803,161455,161457],{"id":161456},"_51-为什么需要函数","5.1 为什么需要函数",[19,161459,161460],{},"函数用于封装一段可以重复使用的代码。",[19,161462,161463],{},"不使用函数的问题：",[815,161465,161466,161469,161472,161475],{},[818,161467,161468],{},"重复代码多。",[818,161470,161471],{},"修改逻辑时容易漏改。",[818,161473,161474],{},"主流程不清晰。",[818,161476,161477],{},"程序越写越长，难以维护。",[19,161479,161480],{},"使用函数后的好处：",[815,161482,161483,161486,161489,161492],{},[818,161484,161485],{},"提高复用性。",[818,161487,161488],{},"提高可读性。",[818,161490,161491],{},"便于调试。",[818,161493,161494],{},"便于分工。",[803,161496,161498],{"id":161497},"_52-函数定义","5.2 函数定义",[19,161500,5900],{},[57,161502,161504],{"className":30915,"code":161503,"language":30917,"meta":62,"style":62},"def 函数名():\n    函数体\n",[64,161505,161506,161515],{"__ignoreMap":62},[67,161507,161508,161510,161513],{"class":69,"line":70},[67,161509,32484],{"class":73},[67,161511,161512],{"class":112}," 函数名",[67,161514,32490],{"class":77},[67,161516,161517],{"class":69,"line":143},[67,161518,161519],{"class":77},"    函数体\n",[19,161521,15852],{},[57,161523,161525],{"className":30915,"code":161524,"language":30917,"meta":62,"style":62},"def say_hello():\n    print(\"hello\")\n    print(\"python\")\n\n\nsay_hello()\n",[64,161526,161527,161536,161546,161556,161560,161564],{"__ignoreMap":62},[67,161528,161529,161531,161534],{"class":69,"line":70},[67,161530,32484],{"class":73},[67,161532,161533],{"class":112}," say_hello",[67,161535,32490],{"class":77},[67,161537,161538,161540,161542,161544],{"class":69,"line":143},[67,161539,31836],{"class":208},[67,161541,864],{"class":77},[67,161543,6563],{"class":84},[67,161545,870],{"class":77},[67,161547,161548,161550,161552,161554],{"class":69,"line":149},[67,161549,31836],{"class":208},[67,161551,864],{"class":77},[67,161553,147176],{"class":84},[67,161555,870],{"class":77},[67,161557,161558],{"class":69,"line":155},[67,161559,177],{"emptyLinePlaceholder":176},[67,161561,161562],{"class":69,"line":161},[67,161563,177],{"emptyLinePlaceholder":176},[67,161565,161566],{"class":69,"line":167},[67,161567,161568],{"class":77},"say_hello()\n",[19,161570,9744],{},[815,161572,161573,161576,161579,161582],{},[818,161574,161575],{},"函数必须先定义，再调用。",[818,161577,161578],{},"函数名遵循变量命名规则。",[818,161580,161581],{},"函数体需要缩进。",[818,161583,161584],{},"函数不调用就不会执行。",[803,161586,161588],{"id":161587},"_53-函数调用","5.3 函数调用",[57,161590,161592],{"className":30915,"code":161591,"language":30917,"meta":62,"style":62},"def print_menu():\n    print(\"1. 查询\")\n    print(\"2. 添加\")\n    print(\"3. 删除\")\n    print(\"0. 退出\")\n\n\nprint_menu()\nprint_menu()\n",[64,161593,161594,161603,161614,161625,161636,161646,161650,161654,161659],{"__ignoreMap":62},[67,161595,161596,161598,161601],{"class":69,"line":70},[67,161597,32484],{"class":73},[67,161599,161600],{"class":112}," print_menu",[67,161602,32490],{"class":77},[67,161604,161605,161607,161609,161612],{"class":69,"line":143},[67,161606,31836],{"class":208},[67,161608,864],{"class":77},[67,161610,161611],{"class":84},"\"1. 查询\"",[67,161613,870],{"class":77},[67,161615,161616,161618,161620,161623],{"class":69,"line":149},[67,161617,31836],{"class":208},[67,161619,864],{"class":77},[67,161621,161622],{"class":84},"\"2. 添加\"",[67,161624,870],{"class":77},[67,161626,161627,161629,161631,161634],{"class":69,"line":155},[67,161628,31836],{"class":208},[67,161630,864],{"class":77},[67,161632,161633],{"class":84},"\"3. 删除\"",[67,161635,870],{"class":77},[67,161637,161638,161640,161642,161644],{"class":69,"line":161},[67,161639,31836],{"class":208},[67,161641,864],{"class":77},[67,161643,161218],{"class":84},[67,161645,870],{"class":77},[67,161647,161648],{"class":69,"line":167},[67,161649,177],{"emptyLinePlaceholder":176},[67,161651,161652],{"class":69,"line":173},[67,161653,177],{"emptyLinePlaceholder":176},[67,161655,161656],{"class":69,"line":180},[67,161657,161658],{"class":77},"print_menu()\n",[67,161660,161661],{"class":69,"line":186},[67,161662,161658],{"class":77},[19,161664,161665],{},"函数可以多次调用，每次调用都会执行函数体。",[803,161667,161669],{"id":161668},"_54-参数","5.4 参数",[19,161671,161672],{},"参数用于向函数传递数据。",[57,161674,161676],{"className":30915,"code":161675,"language":30917,"meta":62,"style":62},"def say_hello(name):\n    print(f\"你好，{name}\")\n\n\nsay_hello(\"小明\")\nsay_hello(\"小红\")\n",[64,161677,161678,161687,161707,161711,161715,161724],{"__ignoreMap":62},[67,161679,161680,161682,161684],{"class":69,"line":70},[67,161681,32484],{"class":73},[67,161683,161533],{"class":112},[67,161685,161686],{"class":77},"(name):\n",[67,161688,161689,161691,161693,161695,161697,161699,161701,161703,161705],{"class":69,"line":143},[67,161690,31836],{"class":208},[67,161692,864],{"class":77},[67,161694,915],{"class":73},[67,161696,157591],{"class":84},[67,161698,1752],{"class":208},[67,161700,80347],{"class":77},[67,161702,1802],{"class":208},[67,161704,257],{"class":84},[67,161706,870],{"class":77},[67,161708,161709],{"class":69,"line":149},[67,161710,177],{"emptyLinePlaceholder":176},[67,161712,161713],{"class":69,"line":155},[67,161714,177],{"emptyLinePlaceholder":176},[67,161716,161717,161720,161722],{"class":69,"line":161},[67,161718,161719],{"class":77},"say_hello(",[67,161721,150425],{"class":84},[67,161723,870],{"class":77},[67,161725,161726,161728,161730],{"class":69,"line":167},[67,161727,161719],{"class":77},[67,161729,151473],{"class":84},[67,161731,870],{"class":77},[19,161733,161734,161736,161737,161739],{},[64,161735,80347],{}," 是形参，",[64,161738,150425],{}," 是实参。",[19,161741,161742],{},"多个参数：",[57,161744,161746],{"className":30915,"code":161745,"language":30917,"meta":62,"style":62},"def add(a, b):\n    result = a + b\n    print(result)\n\n\nadd(10, 20)\n",[64,161747,161748,161756,161769,161775,161779,161783],{"__ignoreMap":62},[67,161749,161750,161752,161754],{"class":69,"line":70},[67,161751,32484],{"class":73},[67,161753,5928],{"class":112},[67,161755,151630],{"class":77},[67,161757,161758,161761,161763,161765,161767],{"class":69,"line":143},[67,161759,161760],{"class":77},"    result ",[67,161762,909],{"class":73},[67,161764,11587],{"class":77},[67,161766,1338],{"class":73},[67,161768,151641],{"class":77},[67,161770,161771,161773],{"class":69,"line":149},[67,161772,31836],{"class":208},[67,161774,77122],{"class":77},[67,161776,161777],{"class":69,"line":155},[67,161778,177],{"emptyLinePlaceholder":176},[67,161780,161781],{"class":69,"line":161},[67,161782,177],{"emptyLinePlaceholder":176},[67,161784,161785,161788,161790,161792,161794],{"class":69,"line":167},[67,161786,161787],{"class":77},"add(",[67,161789,1303],{"class":208},[67,161791,13153],{"class":77},[67,161793,1556],{"class":208},[67,161795,870],{"class":77},[19,161797,161798],{},"调用时参数数量必须匹配。",[803,161800,161802],{"id":161801},"_55-返回值","5.5 返回值",[19,161804,161805,161807],{},[64,161806,17763],{}," 用于把函数内部的结果返回给调用者。",[57,161809,161811],{"className":30915,"code":161810,"language":30917,"meta":62,"style":62},"def add(a, b):\n    return a + b\n\n\nresult = add(10, 20)\nprint(result)\n",[64,161812,161813,161821,161831,161835,161839,161857],{"__ignoreMap":62},[67,161814,161815,161817,161819],{"class":69,"line":70},[67,161816,32484],{"class":73},[67,161818,5928],{"class":112},[67,161820,151630],{"class":77},[67,161822,161823,161825,161827,161829],{"class":69,"line":143},[67,161824,4810],{"class":73},[67,161826,11587],{"class":77},[67,161828,1338],{"class":73},[67,161830,151641],{"class":77},[67,161832,161833],{"class":69,"line":149},[67,161834,177],{"emptyLinePlaceholder":176},[67,161836,161837],{"class":69,"line":155},[67,161838,177],{"emptyLinePlaceholder":176},[67,161840,161841,161844,161846,161849,161851,161853,161855],{"class":69,"line":161},[67,161842,161843],{"class":77},"result ",[67,161845,909],{"class":73},[67,161847,161848],{"class":77}," add(",[67,161850,1303],{"class":208},[67,161852,13153],{"class":77},[67,161854,1556],{"class":208},[67,161856,870],{"class":77},[67,161858,161859,161861],{"class":69,"line":167},[67,161860,30952],{"class":208},[67,161862,77122],{"class":77},[19,161864,161865,161866,161868,161869,28922],{},"如果函数没有写 ",[64,161867,17763],{},"，默认返回 ",[64,161870,96223],{},[57,161872,161874],{"className":30915,"code":161873,"language":30917,"meta":62,"style":62},"def say_hello():\n    print(\"hello\")\n\n\nresult = say_hello()\nprint(result)  # None\n",[64,161875,161876,161884,161894,161898,161902,161911],{"__ignoreMap":62},[67,161877,161878,161880,161882],{"class":69,"line":70},[67,161879,32484],{"class":73},[67,161881,161533],{"class":112},[67,161883,32490],{"class":77},[67,161885,161886,161888,161890,161892],{"class":69,"line":143},[67,161887,31836],{"class":208},[67,161889,864],{"class":77},[67,161891,6563],{"class":84},[67,161893,870],{"class":77},[67,161895,161896],{"class":69,"line":149},[67,161897,177],{"emptyLinePlaceholder":176},[67,161899,161900],{"class":69,"line":155},[67,161901,177],{"emptyLinePlaceholder":176},[67,161903,161904,161906,161908],{"class":69,"line":161},[67,161905,161843],{"class":77},[67,161907,909],{"class":73},[67,161909,161910],{"class":77}," say_hello()\n",[67,161912,161913,161915,161918],{"class":69,"line":167},[67,161914,30952],{"class":208},[67,161916,161917],{"class":77},"(result)  ",[67,161919,161920],{"class":202},"# None\n",[803,161922,161924],{"id":161923},"_56-return的作用","5.6 return的作用",[19,161926,161927,161929],{},[64,161928,17763],{}," 有两个作用：",[815,161931,161932,161935],{},[818,161933,161934],{},"返回结果。",[818,161936,161937],{},"结束函数。",[57,161939,161941],{"className":30915,"code":161940,"language":30917,"meta":62,"style":62},"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",[64,161942,161943,161953,161965,161972,161976,161988,161995,161999,162006,162010,162014,162025],{"__ignoreMap":62},[67,161944,161945,161947,161950],{"class":69,"line":70},[67,161946,32484],{"class":73},[67,161948,161949],{"class":112}," check_age",[67,161951,161952],{"class":77},"(age):\n",[67,161954,161955,161957,161959,161961,161963],{"class":69,"line":143},[67,161956,3821],{"class":73},[67,161958,16424],{"class":77},[67,161960,1766],{"class":73},[67,161962,4813],{"class":208},[67,161964,4459],{"class":77},[67,161966,161967,161969],{"class":69,"line":149},[67,161968,15469],{"class":73},[67,161970,161971],{"class":84}," \"年龄不合法\"\n",[67,161973,161974],{"class":69,"line":155},[67,161975,177],{"emptyLinePlaceholder":176},[67,161977,161978,161980,161982,161984,161986],{"class":69,"line":161},[67,161979,3821],{"class":73},[67,161981,16424],{"class":77},[67,161983,2433],{"class":73},[67,161985,156822],{"class":208},[67,161987,4459],{"class":77},[67,161989,161990,161992],{"class":69,"line":167},[67,161991,15469],{"class":73},[67,161993,161994],{"class":84}," \"成年人\"\n",[67,161996,161997],{"class":69,"line":173},[67,161998,177],{"emptyLinePlaceholder":176},[67,162000,162001,162003],{"class":69,"line":180},[67,162002,4810],{"class":73},[67,162004,162005],{"class":84}," \"未成年人\"\n",[67,162007,162008],{"class":69,"line":186},[67,162009,177],{"emptyLinePlaceholder":176},[67,162011,162012],{"class":69,"line":444},[67,162013,177],{"emptyLinePlaceholder":176},[67,162015,162016,162018,162021,162023],{"class":69,"line":2335},[67,162017,30952],{"class":208},[67,162019,162020],{"class":77},"(check_age(",[67,162022,1556],{"class":208},[67,162024,31034],{"class":77},[67,162026,162027,162029,162031,162033,162035],{"class":69,"line":2340},[67,162028,30952],{"class":208},[67,162030,162020],{"class":77},[67,162032,1389],{"class":73},[67,162034,1077],{"class":208},[67,162036,31034],{"class":77},[19,162038,162039,162040,162042],{},"函数执行到 ",[64,162041,17763],{}," 后，后面的代码不会继续执行。",[803,162044,162046],{"id":162045},"_57-none","5.7 None",[19,162048,162049,162051],{},[64,162050,96223],{}," 表示空值或没有结果。",[19,162053,162054],{},"常见使用场景：",[815,162056,162057,162060,162063],{},[818,162058,162059],{},"函数没有返回值。",[818,162061,162062],{},"变量暂时没有具体值。",[818,162064,162065],{},"表示查询不到结果。",[57,162067,162069],{"className":30915,"code":162068,"language":30917,"meta":62,"style":62},"result = None\n\nif result is None:\n    print(\"没有数据\")\n",[64,162070,162071,162079,162083,162096],{"__ignoreMap":62},[67,162072,162073,162075,162077],{"class":69,"line":70},[67,162074,161843],{"class":77},[67,162076,909],{"class":73},[67,162078,152709],{"class":208},[67,162080,162081],{"class":69,"line":143},[67,162082,177],{"emptyLinePlaceholder":176},[67,162084,162085,162087,162090,162092,162094],{"class":69,"line":149},[67,162086,2254],{"class":73},[67,162088,162089],{"class":77}," result ",[67,162091,39464],{"class":73},[67,162093,39470],{"class":208},[67,162095,4459],{"class":77},[67,162097,162098,162100,162102,162105],{"class":69,"line":155},[67,162099,31836],{"class":208},[67,162101,864],{"class":77},[67,162103,162104],{"class":84},"\"没有数据\"",[67,162106,870],{"class":77},[19,162108,162109,162110,162112,162113,162116,162117,28922],{},"判断 ",[64,162111,96223],{}," 推荐使用 ",[64,162114,162115],{},"is None","，不要写成 ",[64,162118,162119],{},"== None",[803,162121,162123],{"id":162122},"_58-函数文档字符串","5.8 函数文档字符串",[19,162125,162126],{},"函数内部第一行可以写文档字符串，用来说明函数用途。",[57,162128,162130],{"className":30915,"code":162129,"language":30917,"meta":62,"style":62},"def calculate_bmi(weight, height):\n    \"\"\"根据体重和身高计算BMI。\"\"\"\n    return weight \u002F height ** 2\n",[64,162131,162132,162142,162147],{"__ignoreMap":62},[67,162133,162134,162136,162139],{"class":69,"line":70},[67,162135,32484],{"class":73},[67,162137,162138],{"class":112}," calculate_bmi",[67,162140,162141],{"class":77},"(weight, height):\n",[67,162143,162144],{"class":69,"line":143},[67,162145,162146],{"class":84},"    \"\"\"根据体重和身高计算BMI。\"\"\"\n",[67,162148,162149,162151,162154,162156,162159,162161],{"class":69,"line":149},[67,162150,4810],{"class":73},[67,162152,162153],{"class":77}," weight ",[67,162155,1440],{"class":73},[67,162157,162158],{"class":77}," height ",[67,162160,11379],{"class":73},[67,162162,48260],{"class":208},[19,162164,162165],{},"查看说明：",[57,162167,162169],{"className":30915,"code":162168,"language":30917,"meta":62,"style":62},"help(calculate_bmi)\n",[64,162170,162171],{"__ignoreMap":62},[67,162172,162173,162176],{"class":69,"line":70},[67,162174,162175],{"class":208},"help",[67,162177,162178],{"class":77},"(calculate_bmi)\n",[19,162180,162181],{},"较完整的写法：",[57,162183,162185],{"className":30915,"code":162184,"language":30917,"meta":62,"style":62},"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",[64,162186,162187,162195,162200,162205,162209,162214,162219,162224,162228],{"__ignoreMap":62},[67,162188,162189,162191,162193],{"class":69,"line":70},[67,162190,32484],{"class":73},[67,162192,162138],{"class":112},[67,162194,162141],{"class":77},[67,162196,162197],{"class":69,"line":143},[67,162198,162199],{"class":84},"    \"\"\"\n",[67,162201,162202],{"class":69,"line":149},[67,162203,162204],{"class":84},"    计算BMI。\n",[67,162206,162207],{"class":69,"line":155},[67,162208,177],{"emptyLinePlaceholder":176},[67,162210,162211],{"class":69,"line":161},[67,162212,162213],{"class":84},"    :param weight: 体重，单位kg\n",[67,162215,162216],{"class":69,"line":167},[67,162217,162218],{"class":84},"    :param height: 身高，单位m\n",[67,162220,162221],{"class":69,"line":173},[67,162222,162223],{"class":84},"    :return: BMI数值\n",[67,162225,162226],{"class":69,"line":180},[67,162227,162199],{"class":84},[67,162229,162230,162232,162234,162236,162238,162240],{"class":69,"line":186},[67,162231,4810],{"class":73},[67,162233,162153],{"class":77},[67,162235,1440],{"class":73},[67,162237,162158],{"class":77},[67,162239,11379],{"class":73},[67,162241,48260],{"class":208},[803,162243,162245],{"id":162244},"_59-变量作用域","5.9 变量作用域",[14,162247,162249],{"id":162248},"_591-局部变量","5.9.1 局部变量",[19,162251,162252],{},"在函数内部定义的变量，只能在函数内部使用。",[57,162254,162256],{"className":30915,"code":162255,"language":30917,"meta":62,"style":62},"def test():\n    num = 10\n    print(num)\n\n\ntest()\nprint(num)  # 报错\n",[64,162257,162258,162267,162275,162281,162285,162289,162294],{"__ignoreMap":62},[67,162259,162260,162262,162265],{"class":69,"line":70},[67,162261,32484],{"class":73},[67,162263,162264],{"class":112}," test",[67,162266,32490],{"class":77},[67,162268,162269,162271,162273],{"class":69,"line":143},[67,162270,46130],{"class":77},[67,162272,909],{"class":73},[67,162274,58965],{"class":208},[67,162276,162277,162279],{"class":69,"line":149},[67,162278,31836],{"class":208},[67,162280,877],{"class":77},[67,162282,162283],{"class":69,"line":155},[67,162284,177],{"emptyLinePlaceholder":176},[67,162286,162287],{"class":69,"line":161},[67,162288,177],{"emptyLinePlaceholder":176},[67,162290,162291],{"class":69,"line":167},[67,162292,162293],{"class":77},"test()\n",[67,162295,162296,162298,162301],{"class":69,"line":173},[67,162297,30952],{"class":208},[67,162299,162300],{"class":77},"(num)  ",[67,162302,162303],{"class":202},"# 报错\n",[14,162305,162307],{"id":162306},"_592-全局变量","5.9.2 全局变量",[19,162309,162310],{},"在函数外部定义的变量，可以在函数内部读取。",[57,162312,162314],{"className":30915,"code":162313,"language":30917,"meta":62,"style":62},"name = \"小明\"\n\n\ndef say_hello():\n    print(name)\n\n\nsay_hello()\n",[64,162315,162316,162324,162328,162332,162340,162346,162350,162354],{"__ignoreMap":62},[67,162317,162318,162320,162322],{"class":69,"line":70},[67,162319,147073],{"class":77},[67,162321,909],{"class":73},[67,162323,149890],{"class":84},[67,162325,162326],{"class":69,"line":143},[67,162327,177],{"emptyLinePlaceholder":176},[67,162329,162330],{"class":69,"line":149},[67,162331,177],{"emptyLinePlaceholder":176},[67,162333,162334,162336,162338],{"class":69,"line":155},[67,162335,32484],{"class":73},[67,162337,161533],{"class":112},[67,162339,32490],{"class":77},[67,162341,162342,162344],{"class":69,"line":161},[67,162343,31836],{"class":208},[67,162345,151197],{"class":77},[67,162347,162348],{"class":69,"line":167},[67,162349,177],{"emptyLinePlaceholder":176},[67,162351,162352],{"class":69,"line":173},[67,162353,177],{"emptyLinePlaceholder":176},[67,162355,162356],{"class":69,"line":180},[67,162357,161568],{"class":77},[19,162359,162360,162361,28922],{},"如果要在函数内部修改全局变量，需要 ",[64,162362,162363],{},"global",[57,162365,162367],{"className":30915,"code":162366,"language":30917,"meta":62,"style":62},"count = 0\n\n\ndef add_count():\n    global count\n    count += 1\n\n\nadd_count()\nprint(count)\n",[64,162368,162369,162377,162381,162385,162394,162402,162410,162414,162418,162423],{"__ignoreMap":62},[67,162370,162371,162373,162375],{"class":69,"line":70},[67,162372,147228],{"class":77},[67,162374,909],{"class":73},[67,162376,47870],{"class":208},[67,162378,162379],{"class":69,"line":143},[67,162380,177],{"emptyLinePlaceholder":176},[67,162382,162383],{"class":69,"line":149},[67,162384,177],{"emptyLinePlaceholder":176},[67,162386,162387,162389,162392],{"class":69,"line":155},[67,162388,32484],{"class":73},[67,162390,162391],{"class":112}," add_count",[67,162393,32490],{"class":77},[67,162395,162396,162399],{"class":69,"line":161},[67,162397,162398],{"class":73},"    global",[67,162400,162401],{"class":77}," count\n",[67,162403,162404,162406,162408],{"class":69,"line":167},[67,162405,159970],{"class":77},[67,162407,10196],{"class":73},[67,162409,56236],{"class":208},[67,162411,162412],{"class":69,"line":173},[67,162413,177],{"emptyLinePlaceholder":176},[67,162415,162416],{"class":69,"line":180},[67,162417,177],{"emptyLinePlaceholder":176},[67,162419,162420],{"class":69,"line":186},[67,162421,162422],{"class":77},"add_count()\n",[67,162424,162425,162427],{"class":69,"line":444},[67,162426,30952],{"class":208},[67,162428,162429],{"class":77},"(count)\n",[19,162431,162432],{},"不建议大量使用全局变量，项目变大后很难维护。",[803,162434,162436],{"id":162435},"_510-函数嵌套调用","5.10 函数嵌套调用",[19,162438,162439],{},"一个函数中可以调用另一个函数。",[57,162441,162443],{"className":30915,"code":162442,"language":30917,"meta":62,"style":62},"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",[64,162444,162445,162454,162468,162472,162476,162485,162490,162510,162531,162535,162539,162543],{"__ignoreMap":62},[67,162446,162447,162449,162452],{"class":69,"line":70},[67,162448,32484],{"class":73},[67,162450,162451],{"class":112}," print_line",[67,162453,32490],{"class":77},[67,162455,162456,162458,162460,162462,162464,162466],{"class":69,"line":143},[67,162457,31836],{"class":208},[67,162459,864],{"class":77},[67,162461,33020],{"class":84},[67,162463,7237],{"class":73},[67,162465,79202],{"class":208},[67,162467,870],{"class":77},[67,162469,162470],{"class":69,"line":149},[67,162471,177],{"emptyLinePlaceholder":176},[67,162473,162474],{"class":69,"line":155},[67,162475,177],{"emptyLinePlaceholder":176},[67,162477,162478,162480,162483],{"class":69,"line":161},[67,162479,32484],{"class":73},[67,162481,162482],{"class":112}," print_info",[67,162484,149912],{"class":77},[67,162486,162487],{"class":69,"line":167},[67,162488,162489],{"class":77},"    print_line()\n",[67,162491,162492,162494,162496,162498,162500,162502,162504,162506,162508],{"class":69,"line":173},[67,162493,31836],{"class":208},[67,162495,864],{"class":77},[67,162497,915],{"class":73},[67,162499,157219],{"class":84},[67,162501,1752],{"class":208},[67,162503,80347],{"class":77},[67,162505,1802],{"class":208},[67,162507,257],{"class":84},[67,162509,870],{"class":77},[67,162511,162512,162514,162516,162518,162521,162523,162525,162527,162529],{"class":69,"line":180},[67,162513,31836],{"class":208},[67,162515,864],{"class":77},[67,162517,915],{"class":73},[67,162519,162520],{"class":84},"\"年龄:",[67,162522,1752],{"class":208},[67,162524,70758],{"class":77},[67,162526,1802],{"class":208},[67,162528,257],{"class":84},[67,162530,870],{"class":77},[67,162532,162533],{"class":69,"line":186},[67,162534,162489],{"class":77},[67,162536,162537],{"class":69,"line":444},[67,162538,177],{"emptyLinePlaceholder":176},[67,162540,162541],{"class":69,"line":2335},[67,162542,177],{"emptyLinePlaceholder":176},[67,162544,162545,162548,162550,162552,162554],{"class":69,"line":2340},[67,162546,162547],{"class":77},"print_info(",[67,162549,150425],{"class":84},[67,162551,13153],{"class":77},[67,162553,1506],{"class":208},[67,162555,870],{"class":77},[19,162557,162558],{},"这种方式可以把小功能组合成大功能。",[803,162560,162562],{"id":162561},"_511-参数检查","5.11 参数检查",[19,162564,162565],{},"函数内部可以检查参数是否合法。",[57,162567,162569],{"className":30915,"code":162568,"language":30917,"meta":62,"style":62},"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",[64,162570,162571,162580,162592,162598,162608,162612,162616,162633,162637,162649,162660,162666],{"__ignoreMap":62},[67,162572,162573,162575,162578],{"class":69,"line":70},[67,162574,32484],{"class":73},[67,162576,162577],{"class":112}," divide",[67,162579,151630],{"class":77},[67,162581,162582,162584,162586,162588,162590],{"class":69,"line":143},[67,162583,3821],{"class":73},[67,162585,11600],{"class":77},[67,162587,3670],{"class":73},[67,162589,4813],{"class":208},[67,162591,4459],{"class":77},[67,162593,162594,162596],{"class":69,"line":149},[67,162595,15469],{"class":73},[67,162597,152709],{"class":208},[67,162599,162600,162602,162604,162606],{"class":69,"line":155},[67,162601,4810],{"class":73},[67,162603,11587],{"class":77},[67,162605,1440],{"class":73},[67,162607,151641],{"class":77},[67,162609,162610],{"class":69,"line":161},[67,162611,177],{"emptyLinePlaceholder":176},[67,162613,162614],{"class":69,"line":167},[67,162615,177],{"emptyLinePlaceholder":176},[67,162617,162618,162620,162622,162625,162627,162629,162631],{"class":69,"line":173},[67,162619,161843],{"class":77},[67,162621,909],{"class":73},[67,162623,162624],{"class":77}," divide(",[67,162626,1303],{"class":208},[67,162628,13153],{"class":77},[67,162630,1051],{"class":208},[67,162632,870],{"class":77},[67,162634,162635],{"class":69,"line":180},[67,162636,177],{"emptyLinePlaceholder":176},[67,162638,162639,162641,162643,162645,162647],{"class":69,"line":186},[67,162640,2254],{"class":73},[67,162642,162089],{"class":77},[67,162644,39464],{"class":73},[67,162646,39470],{"class":208},[67,162648,4459],{"class":77},[67,162650,162651,162653,162655,162658],{"class":69,"line":444},[67,162652,31836],{"class":208},[67,162654,864],{"class":77},[67,162656,162657],{"class":84},"\"除数不能为0\"",[67,162659,870],{"class":77},[67,162661,162662,162664],{"class":69,"line":2335},[67,162663,2424],{"class":73},[67,162665,4459],{"class":77},[67,162667,162668,162670],{"class":69,"line":2340},[67,162669,31836],{"class":208},[67,162671,77122],{"class":77},[803,162673,162675],{"id":162674},"_512-类型提示","5.12 类型提示",[19,162677,162678],{},"类型提示不会强制限制运行，但能让编辑器提示更准确。",[57,162680,162682],{"className":30915,"code":162681,"language":30917,"meta":62,"style":62},"def add(a: int, b: int) -> int:\n    return a + b\n",[64,162683,162684,162707],{"__ignoreMap":62},[67,162685,162686,162688,162690,162693,162695,162698,162700,162703,162705],{"class":69,"line":70},[67,162687,32484],{"class":73},[67,162689,5928],{"class":112},[67,162691,162692],{"class":77},"(a: ",[67,162694,867],{"class":208},[67,162696,162697],{"class":77},", b: ",[67,162699,867],{"class":208},[67,162701,162702],{"class":77},") -> ",[67,162704,867],{"class":208},[67,162706,4459],{"class":77},[67,162708,162709,162711,162713,162715],{"class":69,"line":143},[67,162710,4810],{"class":73},[67,162712,11587],{"class":77},[67,162714,1338],{"class":73},[67,162716,151641],{"class":77},[19,162718,162719],{},"字符串参数：",[57,162721,162723],{"className":30915,"code":162722,"language":30917,"meta":62,"style":62},"def say_hello(name: str) -> None:\n    print(f\"你好，{name}\")\n",[64,162724,162725,162742],{"__ignoreMap":62},[67,162726,162727,162729,162731,162734,162736,162738,162740],{"class":69,"line":70},[67,162728,32484],{"class":73},[67,162730,161533],{"class":112},[67,162732,162733],{"class":77},"(name: ",[67,162735,2026],{"class":208},[67,162737,162702],{"class":77},[67,162739,96223],{"class":208},[67,162741,4459],{"class":77},[67,162743,162744,162746,162748,162750,162752,162754,162756,162758,162760],{"class":69,"line":143},[67,162745,31836],{"class":208},[67,162747,864],{"class":77},[67,162749,915],{"class":73},[67,162751,157591],{"class":84},[67,162753,1752],{"class":208},[67,162755,80347],{"class":77},[67,162757,1802],{"class":208},[67,162759,257],{"class":84},[67,162761,870],{"class":77},[19,162763,162764],{},"列表参数：",[57,162766,162768],{"className":30915,"code":162767,"language":30917,"meta":62,"style":62},"def get_total(numbers: list[int]) -> int:\n    total = 0\n    for number in numbers:\n        total += number\n    return total\n",[64,162769,162770,162789,162797,162809,162818],{"__ignoreMap":62},[67,162771,162772,162774,162777,162780,162782,162785,162787],{"class":69,"line":70},[67,162773,32484],{"class":73},[67,162775,162776],{"class":112}," get_total",[67,162778,162779],{"class":77},"(numbers: list[",[67,162781,867],{"class":208},[67,162783,162784],{"class":77},"]) -> ",[67,162786,867],{"class":208},[67,162788,4459],{"class":77},[67,162790,162791,162793,162795],{"class":69,"line":143},[67,162792,159844],{"class":77},[67,162794,909],{"class":73},[67,162796,47870],{"class":208},[67,162798,162799,162801,162804,162806],{"class":69,"line":149},[67,162800,3921],{"class":73},[67,162802,162803],{"class":77}," number ",[67,162805,81],{"class":73},[67,162807,162808],{"class":77}," numbers:\n",[67,162810,162811,162813,162815],{"class":69,"line":155},[67,162812,160519],{"class":77},[67,162814,10196],{"class":73},[67,162816,162817],{"class":77}," number\n",[67,162819,162820,162822],{"class":69,"line":161},[67,162821,4810],{"class":73},[67,162823,162824],{"class":77}," total\n",[19,162826,162827],{},"学习初期可以先掌握基础语法，后续写项目时逐渐加类型提示。",[803,162829,162831],{"id":162830},"_513-小案例atm函数拆分","5.13 小案例：ATM函数拆分",[57,162833,162835],{"className":30915,"code":162834,"language":30917,"meta":62,"style":62},"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",[64,162836,162837,162847,162851,162855,162863,162874,162884,162894,162904,162914,162918,162922,162931,162953,162957,162961,162970,162976,162996,163008,163019,163023,163032,163043,163048,163052,163056,163065,163071,163090,163102,163112,163116,163127,163137,163141,163149,163160,163164,163168,163172,163180,163185,163199,163203,163215,163220,163232,163237,163249,163254,163266,163276,163280,163286],{"__ignoreMap":62},[67,162838,162839,162842,162844],{"class":69,"line":70},[67,162840,162841],{"class":77},"balance ",[67,162843,909],{"class":73},[67,162845,162846],{"class":208}," 1000\n",[67,162848,162849],{"class":69,"line":143},[67,162850,177],{"emptyLinePlaceholder":176},[67,162852,162853],{"class":69,"line":149},[67,162854,177],{"emptyLinePlaceholder":176},[67,162856,162857,162859,162861],{"class":69,"line":155},[67,162858,32484],{"class":73},[67,162860,152570],{"class":112},[67,162862,32490],{"class":77},[67,162864,162865,162867,162869,162872],{"class":69,"line":161},[67,162866,31836],{"class":208},[67,162868,864],{"class":77},[67,162870,162871],{"class":84},"\"====== ATM ======\"",[67,162873,870],{"class":77},[67,162875,162876,162878,162880,162882],{"class":69,"line":167},[67,162877,31836],{"class":208},[67,162879,864],{"class":77},[67,162881,161185],{"class":84},[67,162883,870],{"class":77},[67,162885,162886,162888,162890,162892],{"class":69,"line":173},[67,162887,31836],{"class":208},[67,162889,864],{"class":77},[67,162891,161196],{"class":84},[67,162893,870],{"class":77},[67,162895,162896,162898,162900,162902],{"class":69,"line":180},[67,162897,31836],{"class":208},[67,162899,864],{"class":77},[67,162901,161207],{"class":84},[67,162903,870],{"class":77},[67,162905,162906,162908,162910,162912],{"class":69,"line":186},[67,162907,31836],{"class":208},[67,162909,864],{"class":77},[67,162911,161218],{"class":84},[67,162913,870],{"class":77},[67,162915,162916],{"class":69,"line":444},[67,162917,177],{"emptyLinePlaceholder":176},[67,162919,162920],{"class":69,"line":2335},[67,162921,177],{"emptyLinePlaceholder":176},[67,162923,162924,162926,162929],{"class":69,"line":2340},[67,162925,32484],{"class":73},[67,162927,162928],{"class":112}," show_balance",[67,162930,32490],{"class":77},[67,162932,162933,162935,162937,162939,162942,162944,162947,162949,162951],{"class":69,"line":2346},[67,162934,31836],{"class":208},[67,162936,864],{"class":77},[67,162938,915],{"class":73},[67,162940,162941],{"class":84},"\"当前余额:",[67,162943,1752],{"class":208},[67,162945,162946],{"class":77},"balance",[67,162948,1802],{"class":208},[67,162950,157549],{"class":84},[67,162952,870],{"class":77},[67,162954,162955],{"class":69,"line":2351},[67,162956,177],{"emptyLinePlaceholder":176},[67,162958,162959],{"class":69,"line":2365},[67,162960,177],{"emptyLinePlaceholder":176},[67,162962,162963,162965,162968],{"class":69,"line":2370},[67,162964,32484],{"class":73},[67,162966,162967],{"class":112}," save_money",[67,162969,32490],{"class":77},[67,162971,162972,162974],{"class":69,"line":2376},[67,162973,162398],{"class":73},[67,162975,150636],{"class":77},[67,162977,162978,162981,162983,162985,162987,162989,162991,162994],{"class":69,"line":2397},[67,162979,162980],{"class":77},"    money ",[67,162982,909],{"class":73},[67,162984,110334],{"class":208},[67,162986,864],{"class":77},[67,162988,54358],{"class":208},[67,162990,864],{"class":77},[67,162992,162993],{"class":84},"\"请输入存款金额:\"",[67,162995,31034],{"class":77},[67,162997,162998,163000,163002,163004,163006],{"class":69,"line":2402},[67,162999,3821],{"class":73},[67,163001,150679],{"class":77},[67,163003,2311],{"class":73},[67,163005,4813],{"class":208},[67,163007,4459],{"class":77},[67,163009,163010,163012,163014,163017],{"class":69,"line":2416},[67,163011,32988],{"class":208},[67,163013,864],{"class":77},[67,163015,163016],{"class":84},"\"金额必须大于0\"",[67,163018,870],{"class":77},[67,163020,163021],{"class":69,"line":2421},[67,163022,152898],{"class":73},[67,163024,163025,163028,163030],{"class":69,"line":2450},[67,163026,163027],{"class":77},"    balance ",[67,163029,10196],{"class":73},[67,163031,150712],{"class":77},[67,163033,163034,163036,163038,163041],{"class":69,"line":2455},[67,163035,31836],{"class":208},[67,163037,864],{"class":77},[67,163039,163040],{"class":84},"\"存款成功\"",[67,163042,870],{"class":77},[67,163044,163045],{"class":69,"line":2472},[67,163046,163047],{"class":77},"    show_balance()\n",[67,163049,163050],{"class":69,"line":2477},[67,163051,177],{"emptyLinePlaceholder":176},[67,163053,163054],{"class":69,"line":2482},[67,163055,177],{"emptyLinePlaceholder":176},[67,163057,163058,163060,163063],{"class":69,"line":2487},[67,163059,32484],{"class":73},[67,163061,163062],{"class":112}," withdraw_money",[67,163064,32490],{"class":77},[67,163066,163067,163069],{"class":69,"line":2501},[67,163068,162398],{"class":73},[67,163070,150636],{"class":77},[67,163072,163073,163075,163077,163079,163081,163083,163085,163088],{"class":69,"line":2506},[67,163074,162980],{"class":77},[67,163076,909],{"class":73},[67,163078,110334],{"class":208},[67,163080,864],{"class":77},[67,163082,54358],{"class":208},[67,163084,864],{"class":77},[67,163086,163087],{"class":84},"\"请输入取款金额:\"",[67,163089,31034],{"class":77},[67,163091,163092,163094,163096,163098,163100],{"class":69,"line":3298},[67,163093,3821],{"class":73},[67,163095,150679],{"class":77},[67,163097,2311],{"class":73},[67,163099,4813],{"class":208},[67,163101,4459],{"class":77},[67,163103,163104,163106,163108,163110],{"class":69,"line":3312},[67,163105,32988],{"class":208},[67,163107,864],{"class":77},[67,163109,163016],{"class":84},[67,163111,870],{"class":77},[67,163113,163114],{"class":69,"line":3320},[67,163115,152898],{"class":73},[67,163117,163118,163120,163122,163124],{"class":69,"line":3325},[67,163119,3821],{"class":73},[67,163121,150679],{"class":77},[67,163123,1816],{"class":73},[67,163125,163126],{"class":77}," balance:\n",[67,163128,163129,163131,163133,163135],{"class":69,"line":3331},[67,163130,32988],{"class":208},[67,163132,864],{"class":77},[67,163134,150774],{"class":84},[67,163136,870],{"class":77},[67,163138,163139],{"class":69,"line":3337},[67,163140,152898],{"class":73},[67,163142,163143,163145,163147],{"class":69,"line":3342},[67,163144,163027],{"class":77},[67,163146,150789],{"class":73},[67,163148,150712],{"class":77},[67,163150,163151,163153,163155,163158],{"class":69,"line":8667},[67,163152,31836],{"class":208},[67,163154,864],{"class":77},[67,163156,163157],{"class":84},"\"取款成功\"",[67,163159,870],{"class":77},[67,163161,163162],{"class":69,"line":8691},[67,163163,163047],{"class":77},[67,163165,163166],{"class":69,"line":8696},[67,163167,177],{"emptyLinePlaceholder":176},[67,163169,163170],{"class":69,"line":8702},[67,163171,177],{"emptyLinePlaceholder":176},[67,163173,163174,163176,163178],{"class":69,"line":8729},[67,163175,109200],{"class":73},[67,163177,95829],{"class":208},[67,163179,4459],{"class":77},[67,163181,163182],{"class":69,"line":8734},[67,163183,163184],{"class":77},"    show_menu()\n",[67,163186,163187,163189,163191,163193,163195,163197],{"class":69,"line":8740},[67,163188,161229],{"class":77},[67,163190,909],{"class":73},[67,163192,61142],{"class":208},[67,163194,864],{"class":77},[67,163196,153610],{"class":84},[67,163198,870],{"class":77},[67,163200,163201],{"class":69,"line":8752},[67,163202,177],{"emptyLinePlaceholder":176},[67,163204,163205,163207,163209,163211,163213],{"class":69,"line":8764},[67,163206,3821],{"class":73},[67,163208,153623],{"class":77},[67,163210,3670],{"class":73},[67,163212,153628],{"class":84},[67,163214,4459],{"class":77},[67,163216,163217],{"class":69,"line":8776},[67,163218,163219],{"class":77},"        show_balance()\n",[67,163221,163222,163224,163226,163228,163230],{"class":69,"line":10435},[67,163223,39830],{"class":73},[67,163225,153623],{"class":77},[67,163227,3670],{"class":73},[67,163229,153647],{"class":84},[67,163231,4459],{"class":77},[67,163233,163234],{"class":69,"line":10459},[67,163235,163236],{"class":77},"        save_money()\n",[67,163238,163239,163241,163243,163245,163247],{"class":69,"line":10482},[67,163240,39830],{"class":73},[67,163242,153623],{"class":77},[67,163244,3670],{"class":73},[67,163246,153665],{"class":84},[67,163248,4459],{"class":77},[67,163250,163251],{"class":69,"line":10506},[67,163252,163253],{"class":77},"        withdraw_money()\n",[67,163255,163256,163258,163260,163262,163264],{"class":69,"line":10511},[67,163257,39830],{"class":73},[67,163259,153623],{"class":77},[67,163261,3670],{"class":73},[67,163263,153719],{"class":84},[67,163265,4459],{"class":77},[67,163267,163268,163270,163272,163274],{"class":69,"line":10516},[67,163269,32988],{"class":208},[67,163271,864],{"class":77},[67,163273,153730],{"class":84},[67,163275,870],{"class":77},[67,163277,163278],{"class":69,"line":10521},[67,163279,32164],{"class":73},[67,163281,163282,163284],{"class":69,"line":10530},[67,163283,158559],{"class":73},[67,163285,4459],{"class":77},[67,163287,163288,163290,163292,163294],{"class":69,"line":10535},[67,163289,32988],{"class":208},[67,163291,864],{"class":77},[67,163293,153751],{"class":84},[67,163295,870],{"class":77},[19,163297,163298],{},"这个案例展示了函数拆分的价值：主流程只负责调度，具体业务交给函数。",[803,163300,163302],{"id":163301},"_514-易错点","5.14 易错点",[815,163304,163305,163308,163311,163316,163321,163324],{},[818,163306,163307],{},"函数定义后必须调用才会执行。",[818,163309,163310],{},"函数名后面有括号才是调用。",[818,163312,163313,163315],{},[64,163314,17763],{}," 后面的代码不会执行。",[818,163317,163318,163319,28922],{},"没有返回值的函数默认返回 ",[64,163320,96223],{},[818,163322,163323],{},"局部变量不能在函数外部访问。",[818,163325,163326,163327,163329],{},"不要滥用 ",[64,163328,162363],{},"，更好的方式是让函数返回新值。",[19,163331,163332,163333,163335],{},"例如不用 ",[64,163334,162363],{}," 改写存款：",[57,163337,163339],{"className":30915,"code":163338,"language":30917,"meta":62,"style":62},"def save_money(balance, money):\n    return balance + money\n\n\nbalance = 1000\nbalance = save_money(balance, 200)\nprint(balance)\n",[64,163340,163341,163350,163361,163365,163369,163377,163390],{"__ignoreMap":62},[67,163342,163343,163345,163347],{"class":69,"line":70},[67,163344,32484],{"class":73},[67,163346,162967],{"class":112},[67,163348,163349],{"class":77},"(balance, money):\n",[67,163351,163352,163354,163357,163359],{"class":69,"line":143},[67,163353,4810],{"class":73},[67,163355,163356],{"class":77}," balance ",[67,163358,1338],{"class":73},[67,163360,150712],{"class":77},[67,163362,163363],{"class":69,"line":149},[67,163364,177],{"emptyLinePlaceholder":176},[67,163366,163367],{"class":69,"line":155},[67,163368,177],{"emptyLinePlaceholder":176},[67,163370,163371,163373,163375],{"class":69,"line":161},[67,163372,162841],{"class":77},[67,163374,909],{"class":73},[67,163376,162846],{"class":208},[67,163378,163379,163381,163383,163386,163388],{"class":69,"line":167},[67,163380,162841],{"class":77},[67,163382,909],{"class":73},[67,163384,163385],{"class":77}," save_money(balance, ",[67,163387,2445],{"class":208},[67,163389,870],{"class":77},[67,163391,163392,163394],{"class":69,"line":173},[67,163393,30952],{"class":208},[67,163395,163396],{"class":77},"(balance)\n",[803,163398,163400],{"id":163399},"_515-本章练习","5.15 本章练习",[815,163402,163403,163410,163416,163422,163428],{},[818,163404,163405,163406,163409],{},"定义函数 ",[64,163407,163408],{},"print_student(name, age)","，输出学生信息。",[818,163411,163405,163412,163415],{},[64,163413,163414],{},"get_max(a, b, c)","，返回三个数中的最大值。",[818,163417,163405,163418,163421],{},[64,163419,163420],{},"is_even(num)","，判断一个数是否为偶数。",[818,163423,163405,163424,163427],{},[64,163425,163426],{},"calculate_bmi(weight, height)","，返回 BMI。",[818,163429,163430],{},"把第 4 章的菜单程序拆分成多个函数。",[779,163432,163433],{},"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":62,"searchDepth":143,"depth":143,"links":163435},[163436,163437,163438,163439,163440,163441,163442,163443,163444,163448,163449,163450,163451,163452,163453],{"id":161456,"depth":143,"text":161457},{"id":161497,"depth":143,"text":161498},{"id":161587,"depth":143,"text":161588},{"id":161668,"depth":143,"text":161669},{"id":161801,"depth":143,"text":161802},{"id":161923,"depth":143,"text":161924},{"id":162045,"depth":143,"text":162046},{"id":162122,"depth":143,"text":162123},{"id":162244,"depth":143,"text":162245,"children":163445},[163446,163447],{"id":162248,"depth":149,"text":162249},{"id":162306,"depth":149,"text":162307},{"id":162435,"depth":143,"text":162436},{"id":162561,"depth":143,"text":162562},{"id":162674,"depth":143,"text":162675},{"id":162830,"depth":143,"text":162831},{"id":163301,"depth":143,"text":163302},{"id":163399,"depth":143,"text":163400},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch5",{"title":161448,"description":24093},"wiki\u002F2024-10-10-python教程\u002Fch5-函数基础","Eht1XzIe9875ocKpFbsjhzVr6wLsbs8TqR7KqoAw9_M",{"id":163460,"title":163461,"body":163462,"description":24093,"extension":787,"meta":166506,"navigation":176,"path":166507,"seo":166508,"stem":166509,"__hash__":166510},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch6-数据容器.md","6. 数据容器",{"type":7,"value":163463,"toc":166487},[163464,163467,163471,163474,163477,163581,163584,163588,163591,163671,163674,163678,163681,163741,163744,163780,163783,163798,163802,163875,163878,163933,163936,164006,164009,164093,164103,164161,164165,164210,164213,164239,164242,164348,164352,164355,164397,164400,164464,164467,164471,164474,164535,164538,164568,164571,164609,164613,164616,164625,164628,164752,164755,164796,164800,164803,164814,164854,164857,164872,164877,164880,164947,164950,165040,165044,165047,165095,165098,165125,165127,165157,165160,165180,165183,165214,165217,165250,165254,165257,165281,165284,165308,165311,165335,165339,165342,165472,165475,165555,165558,165633,165637,165640,165690,165693,165735,165738,165762,165764,165788,165791,165846,165849,165915,165919,165922,165925,165963,165966,166019,166022,166068,166071,166104,166107,166111,166430,166434,166463,166467,166484],[10,163465,163461],{"id":163466},"_6-数据容器",[803,163468,163470],{"id":163469},"_61-什么是数据容器","6.1 什么是数据容器",[19,163472,163473],{},"数据容器用于一次保存多个数据。",[19,163475,163476],{},"常见容器：",[998,163478,163479,163496],{},[1001,163480,163481],{},[1004,163482,163483,163485,163488,163491,163494],{},[1007,163484,26480],{},[1007,163486,163487],{},"是否有序",[1007,163489,163490],{},"是否可变",[1007,163492,163493],{},"是否允许重复",[1007,163495,28029],{},[1044,163497,163498,163516,163532,163547,163564],{},[1004,163499,163500,163503,163506,163509,163512],{},[1049,163501,163502],{},"list列表",[1049,163504,163505],{},"有序",[1049,163507,163508],{},"可变",[1049,163510,163511],{},"允许",[1049,163513,163514],{},[64,163515,155794],{},[1004,163517,163518,163521,163523,163526,163528],{},[1049,163519,163520],{},"tuple元组",[1049,163522,163505],{},[1049,163524,163525],{},"不可变",[1049,163527,163511],{},[1049,163529,163530],{},[64,163531,155807],{},[1004,163533,163534,163537,163539,163541,163543],{},[1049,163535,163536],{},"str字符串",[1049,163538,163505],{},[1049,163540,163525],{},[1049,163542,163511],{},[1049,163544,163545],{},[64,163546,156417],{},[1004,163548,163549,163552,163555,163557,163560],{},[1049,163550,163551],{},"set集合",[1049,163553,163554],{},"无序",[1049,163556,163508],{},[1049,163558,163559],{},"不允许",[1049,163561,163562],{},[64,163563,155832],{},[1004,163565,163566,163569,163571,163573,163576],{},[1049,163567,163568],{},"dict字典",[1049,163570,163505],{},[1049,163572,163508],{},[1049,163574,163575],{},"key不允许重复",[1049,163577,163578],{},[64,163579,163580],{},"{\"name\": \"小明\"}",[19,163582,163583],{},"Python 3.7 之后，字典保持插入顺序。",[803,163585,163587],{"id":163586},"_62-列表list","6.2 列表list",[19,163589,163590],{},"列表用于保存一组有顺序的数据。",[57,163592,163594],{"className":30915,"code":163593,"language":30917,"meta":62,"style":62},"names = [\"小明\", \"小红\", \"小刚\"]\nnumbers = [1, 2, 3, 4]\nmixed = [\"小明\", 18, True]\nempty = []\n",[64,163595,163596,163616,163641,163662],{"__ignoreMap":62},[67,163597,163598,163600,163602,163604,163606,163608,163610,163612,163614],{"class":69,"line":70},[67,163599,160917],{"class":77},[67,163601,909],{"class":73},[67,163603,52763],{"class":77},[67,163605,150425],{"class":84},[67,163607,13153],{"class":77},[67,163609,151473],{"class":84},[67,163611,13153],{"class":77},[67,163613,160268],{"class":84},[67,163615,33783],{"class":77},[67,163617,163618,163621,163623,163625,163627,163629,163631,163633,163635,163637,163639],{"class":69,"line":143},[67,163619,163620],{"class":77},"numbers ",[67,163622,909],{"class":73},[67,163624,52763],{"class":77},[67,163626,1077],{"class":208},[67,163628,13153],{"class":77},[67,163630,939],{"class":208},[67,163632,13153],{"class":77},[67,163634,933],{"class":208},[67,163636,13153],{"class":77},[67,163638,1151],{"class":208},[67,163640,33783],{"class":77},[67,163642,163643,163646,163648,163650,163652,163654,163656,163658,163660],{"class":69,"line":149},[67,163644,163645],{"class":77},"mixed ",[67,163647,909],{"class":73},[67,163649,52763],{"class":77},[67,163651,150425],{"class":84},[67,163653,13153],{"class":77},[67,163655,1506],{"class":208},[67,163657,13153],{"class":77},[67,163659,32013],{"class":208},[67,163661,33783],{"class":77},[67,163663,163664,163667,163669],{"class":69,"line":155},[67,163665,163666],{"class":77},"empty ",[67,163668,909],{"class":73},[67,163670,52375],{"class":77},[19,163672,163673],{},"推荐一个列表中保存同类数据，代码更清晰。",[803,163675,163677],{"id":163676},"_63-列表索引","6.3 列表索引",[19,163679,163680],{},"正向索引从 0 开始：",[57,163682,163684],{"className":30915,"code":163683,"language":30917,"meta":62,"style":62},"names = [\"小明\", \"小红\", \"小刚\"]\n\nprint(names[0])\nprint(names[1])\nprint(names[2])\n",[64,163685,163686,163706,163710,163721,163731],{"__ignoreMap":62},[67,163687,163688,163690,163692,163694,163696,163698,163700,163702,163704],{"class":69,"line":70},[67,163689,160917],{"class":77},[67,163691,909],{"class":73},[67,163693,52763],{"class":77},[67,163695,150425],{"class":84},[67,163697,13153],{"class":77},[67,163699,151473],{"class":84},[67,163701,13153],{"class":77},[67,163703,160268],{"class":84},[67,163705,33783],{"class":77},[67,163707,163708],{"class":69,"line":143},[67,163709,177],{"emptyLinePlaceholder":176},[67,163711,163712,163714,163717,163719],{"class":69,"line":149},[67,163713,30952],{"class":208},[67,163715,163716],{"class":77},"(names[",[67,163718,1051],{"class":208},[67,163720,5376],{"class":77},[67,163722,163723,163725,163727,163729],{"class":69,"line":155},[67,163724,30952],{"class":208},[67,163726,163716],{"class":77},[67,163728,1077],{"class":208},[67,163730,5376],{"class":77},[67,163732,163733,163735,163737,163739],{"class":69,"line":161},[67,163734,30952],{"class":208},[67,163736,163716],{"class":77},[67,163738,939],{"class":208},[67,163740,5376],{"class":77},[19,163742,163743],{},"反向索引从 -1 开始：",[57,163745,163747],{"className":30915,"code":163746,"language":30917,"meta":62,"style":62},"print(names[-1])  # 小刚\nprint(names[-2])  # 小红\n",[64,163748,163749,163765],{"__ignoreMap":62},[67,163750,163751,163753,163755,163757,163759,163762],{"class":69,"line":70},[67,163752,30952],{"class":208},[67,163754,163716],{"class":77},[67,163756,1389],{"class":73},[67,163758,1077],{"class":208},[67,163760,163761],{"class":77},"])  ",[67,163763,163764],{"class":202},"# 小刚\n",[67,163766,163767,163769,163771,163773,163775,163777],{"class":69,"line":143},[67,163768,30952],{"class":208},[67,163770,163716],{"class":77},[67,163772,1389],{"class":73},[67,163774,939],{"class":208},[67,163776,163761],{"class":77},[67,163778,163779],{"class":202},"# 小红\n",[19,163781,163782],{},"索引越界会报错：",[57,163784,163786],{"className":30915,"code":163785,"language":30917,"meta":62,"style":62},"print(names[3])\n",[64,163787,163788],{"__ignoreMap":62},[67,163789,163790,163792,163794,163796],{"class":69,"line":70},[67,163791,30952],{"class":208},[67,163793,163716],{"class":77},[67,163795,933],{"class":208},[67,163797,5376],{"class":77},[803,163799,163801],{"id":163800},"_64-列表常用方法","6.4 列表常用方法",[57,163803,163805],{"className":30915,"code":163804,"language":30917,"meta":62,"style":62},"names = [\"小明\", \"小红\"]\n\nnames.append(\"小刚\")\nnames.insert(1, \"小李\")\nnames.extend([\"小王\", \"小赵\"])\n\nprint(names)\n",[64,163806,163807,163823,163827,163836,163850,163864,163868],{"__ignoreMap":62},[67,163808,163809,163811,163813,163815,163817,163819,163821],{"class":69,"line":70},[67,163810,160917],{"class":77},[67,163812,909],{"class":73},[67,163814,52763],{"class":77},[67,163816,150425],{"class":84},[67,163818,13153],{"class":77},[67,163820,151473],{"class":84},[67,163822,33783],{"class":77},[67,163824,163825],{"class":69,"line":143},[67,163826,177],{"emptyLinePlaceholder":176},[67,163828,163829,163832,163834],{"class":69,"line":149},[67,163830,163831],{"class":77},"names.append(",[67,163833,160268],{"class":84},[67,163835,870],{"class":77},[67,163837,163838,163841,163843,163845,163848],{"class":69,"line":155},[67,163839,163840],{"class":77},"names.insert(",[67,163842,1077],{"class":208},[67,163844,13153],{"class":77},[67,163846,163847],{"class":84},"\"小李\"",[67,163849,870],{"class":77},[67,163851,163852,163855,163857,163859,163862],{"class":69,"line":161},[67,163853,163854],{"class":77},"names.extend([",[67,163856,9402],{"class":84},[67,163858,13153],{"class":77},[67,163860,163861],{"class":84},"\"小赵\"",[67,163863,5376],{"class":77},[67,163865,163866],{"class":69,"line":167},[67,163867,177],{"emptyLinePlaceholder":176},[67,163869,163870,163872],{"class":69,"line":173},[67,163871,30952],{"class":208},[67,163873,163874],{"class":77},"(names)\n",[19,163876,163877],{},"删除元素：",[57,163879,163881],{"className":30915,"code":163880,"language":30917,"meta":62,"style":62},"names.remove(\"小红\")\nlast = names.pop()\nfirst = names.pop(0)\ndel names[0]\nnames.clear()\n",[64,163882,163883,163892,163902,163916,163928],{"__ignoreMap":62},[67,163884,163885,163888,163890],{"class":69,"line":70},[67,163886,163887],{"class":77},"names.remove(",[67,163889,151473],{"class":84},[67,163891,870],{"class":77},[67,163893,163894,163897,163899],{"class":69,"line":143},[67,163895,163896],{"class":77},"last ",[67,163898,909],{"class":73},[67,163900,163901],{"class":77}," names.pop()\n",[67,163903,163904,163907,163909,163912,163914],{"class":69,"line":149},[67,163905,163906],{"class":77},"first ",[67,163908,909],{"class":73},[67,163910,163911],{"class":77}," names.pop(",[67,163913,1051],{"class":208},[67,163915,870],{"class":77},[67,163917,163918,163921,163924,163926],{"class":69,"line":155},[67,163919,163920],{"class":73},"del",[67,163922,163923],{"class":77}," names[",[67,163925,1051],{"class":208},[67,163927,33783],{"class":77},[67,163929,163930],{"class":69,"line":161},[67,163931,163932],{"class":77},"names.clear()\n",[19,163934,163935],{},"查询和统计：",[57,163937,163939],{"className":30915,"code":163938,"language":30917,"meta":62,"style":62},"numbers = [1, 2, 3, 2, 4]\n\nprint(numbers.index(3))\nprint(numbers.count(2))\nprint(len(numbers))\n",[64,163940,163941,163969,163973,163984,163995],{"__ignoreMap":62},[67,163942,163943,163945,163947,163949,163951,163953,163955,163957,163959,163961,163963,163965,163967],{"class":69,"line":70},[67,163944,163620],{"class":77},[67,163946,909],{"class":73},[67,163948,52763],{"class":77},[67,163950,1077],{"class":208},[67,163952,13153],{"class":77},[67,163954,939],{"class":208},[67,163956,13153],{"class":77},[67,163958,933],{"class":208},[67,163960,13153],{"class":77},[67,163962,939],{"class":208},[67,163964,13153],{"class":77},[67,163966,1151],{"class":208},[67,163968,33783],{"class":77},[67,163970,163971],{"class":69,"line":143},[67,163972,177],{"emptyLinePlaceholder":176},[67,163974,163975,163977,163980,163982],{"class":69,"line":149},[67,163976,30952],{"class":208},[67,163978,163979],{"class":77},"(numbers.index(",[67,163981,933],{"class":208},[67,163983,31034],{"class":77},[67,163985,163986,163988,163991,163993],{"class":69,"line":155},[67,163987,30952],{"class":208},[67,163989,163990],{"class":77},"(numbers.count(",[67,163992,939],{"class":208},[67,163994,31034],{"class":77},[67,163996,163997,163999,164001,164003],{"class":69,"line":161},[67,163998,30952],{"class":208},[67,164000,864],{"class":77},[67,164002,8077],{"class":208},[67,164004,164005],{"class":77},"(numbers))\n",[19,164007,164008],{},"排序：",[57,164010,164012],{"className":30915,"code":164011,"language":30917,"meta":62,"style":62},"numbers = [3, 1, 5, 2]\n\nnumbers.sort()\nprint(numbers)\n\nnumbers.sort(reverse=True)\nprint(numbers)\n\nnumbers.reverse()\nprint(numbers)\n",[64,164013,164014,164038,164042,164047,164054,164058,164072,164078,164082,164087],{"__ignoreMap":62},[67,164015,164016,164018,164020,164022,164024,164026,164028,164030,164032,164034,164036],{"class":69,"line":70},[67,164017,163620],{"class":77},[67,164019,909],{"class":73},[67,164021,52763],{"class":77},[67,164023,933],{"class":208},[67,164025,13153],{"class":77},[67,164027,1077],{"class":208},[67,164029,13153],{"class":77},[67,164031,1177],{"class":208},[67,164033,13153],{"class":77},[67,164035,939],{"class":208},[67,164037,33783],{"class":77},[67,164039,164040],{"class":69,"line":143},[67,164041,177],{"emptyLinePlaceholder":176},[67,164043,164044],{"class":69,"line":149},[67,164045,164046],{"class":77},"numbers.sort()\n",[67,164048,164049,164051],{"class":69,"line":155},[67,164050,30952],{"class":208},[67,164052,164053],{"class":77},"(numbers)\n",[67,164055,164056],{"class":69,"line":161},[67,164057,177],{"emptyLinePlaceholder":176},[67,164059,164060,164063,164066,164068,164070],{"class":69,"line":167},[67,164061,164062],{"class":77},"numbers.sort(",[67,164064,164065],{"class":5935},"reverse",[67,164067,909],{"class":73},[67,164069,32013],{"class":208},[67,164071,870],{"class":77},[67,164073,164074,164076],{"class":69,"line":173},[67,164075,30952],{"class":208},[67,164077,164053],{"class":77},[67,164079,164080],{"class":69,"line":180},[67,164081,177],{"emptyLinePlaceholder":176},[67,164083,164084],{"class":69,"line":186},[67,164085,164086],{"class":77},"numbers.reverse()\n",[67,164088,164089,164091],{"class":69,"line":444},[67,164090,30952],{"class":208},[67,164092,164053],{"class":77},[19,164094,164095,164098,164099,164102],{},[64,164096,164097],{},"sort()"," 会修改原列表，",[64,164100,164101],{},"sorted()"," 返回新列表。",[57,164104,164106],{"className":30915,"code":164105,"language":30917,"meta":62,"style":62},"numbers = [3, 1, 5, 2]\nnew_numbers = sorted(numbers)\n\nprint(numbers)\nprint(new_numbers)\n",[64,164107,164108,164132,164144,164148,164154],{"__ignoreMap":62},[67,164109,164110,164112,164114,164116,164118,164120,164122,164124,164126,164128,164130],{"class":69,"line":70},[67,164111,163620],{"class":77},[67,164113,909],{"class":73},[67,164115,52763],{"class":77},[67,164117,933],{"class":208},[67,164119,13153],{"class":77},[67,164121,1077],{"class":208},[67,164123,13153],{"class":77},[67,164125,1177],{"class":208},[67,164127,13153],{"class":77},[67,164129,939],{"class":208},[67,164131,33783],{"class":77},[67,164133,164134,164137,164139,164142],{"class":69,"line":143},[67,164135,164136],{"class":77},"new_numbers ",[67,164138,909],{"class":73},[67,164140,164141],{"class":208}," sorted",[67,164143,164053],{"class":77},[67,164145,164146],{"class":69,"line":149},[67,164147,177],{"emptyLinePlaceholder":176},[67,164149,164150,164152],{"class":69,"line":155},[67,164151,30952],{"class":208},[67,164153,164053],{"class":77},[67,164155,164156,164158],{"class":69,"line":161},[67,164157,30952],{"class":208},[67,164159,164160],{"class":77},"(new_numbers)\n",[803,164162,164164],{"id":164163},"_65-列表遍历","6.5 列表遍历",[57,164166,164168],{"className":30915,"code":164167,"language":30917,"meta":62,"style":62},"names = [\"小明\", \"小红\", \"小刚\"]\n\nfor name in names:\n    print(name)\n",[64,164169,164170,164190,164194,164204],{"__ignoreMap":62},[67,164171,164172,164174,164176,164178,164180,164182,164184,164186,164188],{"class":69,"line":70},[67,164173,160917],{"class":77},[67,164175,909],{"class":73},[67,164177,52763],{"class":77},[67,164179,150425],{"class":84},[67,164181,13153],{"class":77},[67,164183,151473],{"class":84},[67,164185,13153],{"class":77},[67,164187,160268],{"class":84},[67,164189,33783],{"class":77},[67,164191,164192],{"class":69,"line":143},[67,164193,177],{"emptyLinePlaceholder":176},[67,164195,164196,164198,164200,164202],{"class":69,"line":149},[67,164197,74],{"class":73},[67,164199,160953],{"class":77},[67,164201,81],{"class":73},[67,164203,160958],{"class":77},[67,164205,164206,164208],{"class":69,"line":155},[67,164207,31836],{"class":208},[67,164209,151197],{"class":77},[19,164211,164212],{},"需要索引时：",[57,164214,164216],{"className":30915,"code":164215,"language":30917,"meta":62,"style":62},"for index, name in enumerate(names):\n    print(index, name)\n",[64,164217,164218,164232],{"__ignoreMap":62},[67,164219,164220,164222,164225,164227,164229],{"class":69,"line":70},[67,164221,74],{"class":73},[67,164223,164224],{"class":77}," index, name ",[67,164226,81],{"class":73},[67,164228,32143],{"class":208},[67,164230,164231],{"class":77},"(names):\n",[67,164233,164234,164236],{"class":69,"line":143},[67,164235,31836],{"class":208},[67,164237,164238],{"class":77},"(index, name)\n",[19,164240,164241],{},"统计总分：",[57,164243,164245],{"className":30915,"code":164244,"language":30917,"meta":62,"style":62},"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",[64,164246,164247,164272,164280,164284,164295,164303,164307,164324],{"__ignoreMap":62},[67,164248,164249,164252,164254,164256,164258,164260,164262,164264,164266,164268,164270],{"class":69,"line":70},[67,164250,164251],{"class":77},"scores ",[67,164253,909],{"class":73},[67,164255,52763],{"class":77},[67,164257,1718],{"class":208},[67,164259,13153],{"class":77},[67,164261,1592],{"class":208},[67,164263,13153],{"class":77},[67,164265,1112],{"class":208},[67,164267,13153],{"class":77},[67,164269,1417],{"class":208},[67,164271,33783],{"class":77},[67,164273,164274,164276,164278],{"class":69,"line":143},[67,164275,157797],{"class":77},[67,164277,909],{"class":73},[67,164279,47870],{"class":208},[67,164281,164282],{"class":69,"line":149},[67,164283,177],{"emptyLinePlaceholder":176},[67,164285,164286,164288,164290,164292],{"class":69,"line":155},[67,164287,74],{"class":73},[67,164289,158320],{"class":77},[67,164291,81],{"class":73},[67,164293,164294],{"class":77}," scores:\n",[67,164296,164297,164299,164301],{"class":69,"line":161},[67,164298,159844],{"class":77},[67,164300,10196],{"class":73},[67,164302,2302],{"class":77},[67,164304,164305],{"class":69,"line":167},[67,164306,177],{"emptyLinePlaceholder":176},[67,164308,164309,164312,164314,164317,164319,164321],{"class":69,"line":173},[67,164310,164311],{"class":77},"avg ",[67,164313,909],{"class":73},[67,164315,164316],{"class":77}," total ",[67,164318,1440],{"class":73},[67,164320,8050],{"class":208},[67,164322,164323],{"class":77},"(scores)\n",[67,164325,164326,164328,164330,164332,164335,164337,164340,164342,164344,164346],{"class":69,"line":180},[67,164327,30952],{"class":208},[67,164329,864],{"class":77},[67,164331,915],{"class":73},[67,164333,164334],{"class":84},"\"平均分:",[67,164336,1752],{"class":208},[67,164338,164339],{"class":77},"avg",[67,164341,157696],{"class":73},[67,164343,1802],{"class":208},[67,164345,257],{"class":84},[67,164347,870],{"class":77},[803,164349,164351],{"id":164350},"_66-元组tuple","6.6 元组tuple",[19,164353,164354],{},"元组和列表类似，但不可修改。",[57,164356,164358],{"className":30915,"code":164357,"language":30917,"meta":62,"style":62},"point = (10, 20)\ninfo = (\"小明\", 18, \"北京\")\n",[64,164359,164360,164377],{"__ignoreMap":62},[67,164361,164362,164365,164367,164369,164371,164373,164375],{"class":69,"line":70},[67,164363,164364],{"class":77},"point ",[67,164366,909],{"class":73},[67,164368,2381],{"class":77},[67,164370,1303],{"class":208},[67,164372,13153],{"class":77},[67,164374,1556],{"class":208},[67,164376,870],{"class":77},[67,164378,164379,164381,164383,164385,164387,164389,164391,164393,164395],{"class":69,"line":143},[67,164380,116851],{"class":77},[67,164382,909],{"class":73},[67,164384,2381],{"class":77},[67,164386,150425],{"class":84},[67,164388,13153],{"class":77},[67,164390,1506],{"class":208},[67,164392,13153],{"class":77},[67,164394,69806],{"class":84},[67,164396,870],{"class":77},[19,164398,164399],{},"单元素元组必须加逗号：",[57,164401,164403],{"className":30915,"code":164402,"language":30917,"meta":62,"style":62},"t1 = (10,)\nt2 = (10)\n\nprint(type(t1))  # tuple\nprint(type(t2))  # int\n",[64,164404,164405,164419,164432,164436,164450],{"__ignoreMap":62},[67,164406,164407,164410,164412,164414,164416],{"class":69,"line":70},[67,164408,164409],{"class":77},"t1 ",[67,164411,909],{"class":73},[67,164413,2381],{"class":77},[67,164415,1303],{"class":208},[67,164417,164418],{"class":77},",)\n",[67,164420,164421,164424,164426,164428,164430],{"class":69,"line":143},[67,164422,164423],{"class":77},"t2 ",[67,164425,909],{"class":73},[67,164427,2381],{"class":77},[67,164429,1303],{"class":208},[67,164431,870],{"class":77},[67,164433,164434],{"class":69,"line":149},[67,164435,177],{"emptyLinePlaceholder":176},[67,164437,164438,164440,164442,164444,164447],{"class":69,"line":155},[67,164439,30952],{"class":208},[67,164441,864],{"class":77},[67,164443,103644],{"class":208},[67,164445,164446],{"class":77},"(t1))  ",[67,164448,164449],{"class":202},"# tuple\n",[67,164451,164452,164454,164456,164458,164461],{"class":69,"line":161},[67,164453,30952],{"class":208},[67,164455,864],{"class":77},[67,164457,103644],{"class":208},[67,164459,164460],{"class":77},"(t2))  ",[67,164462,164463],{"class":202},"# int\n",[19,164465,164466],{},"元组适合保存不希望被修改的数据，如坐标、配置项。",[803,164468,164470],{"id":164469},"_67-字符串str","6.7 字符串str",[19,164472,164473],{},"字符串也是序列，可以索引、切片和遍历。",[57,164475,164477],{"className":30915,"code":164476,"language":30917,"meta":62,"style":62},"text = \"python\"\n\nprint(text[0])\nprint(text[-1])\n\nfor ch in text:\n    print(ch)\n",[64,164478,164479,164487,164491,164502,164514,164518,164529],{"__ignoreMap":62},[67,164480,164481,164483,164485],{"class":69,"line":70},[67,164482,156981],{"class":77},[67,164484,909],{"class":73},[67,164486,160218],{"class":84},[67,164488,164489],{"class":69,"line":143},[67,164490,177],{"emptyLinePlaceholder":176},[67,164492,164493,164495,164498,164500],{"class":69,"line":149},[67,164494,30952],{"class":208},[67,164496,164497],{"class":77},"(text[",[67,164499,1051],{"class":208},[67,164501,5376],{"class":77},[67,164503,164504,164506,164508,164510,164512],{"class":69,"line":155},[67,164505,30952],{"class":208},[67,164507,164497],{"class":77},[67,164509,1389],{"class":73},[67,164511,1077],{"class":208},[67,164513,5376],{"class":77},[67,164515,164516],{"class":69,"line":161},[67,164517,177],{"emptyLinePlaceholder":176},[67,164519,164520,164522,164524,164526],{"class":69,"line":167},[67,164521,74],{"class":73},[67,164523,160229],{"class":77},[67,164525,81],{"class":73},[67,164527,164528],{"class":77}," text:\n",[67,164530,164531,164533],{"class":69,"line":173},[67,164532,31836],{"class":208},[67,164534,160240],{"class":77},[19,164536,164537],{},"字符串不可变：",[57,164539,164541],{"className":30915,"code":164540,"language":30917,"meta":62,"style":62},"text = \"python\"\ntext[0] = \"P\"  # 报错\n",[64,164542,164543,164551],{"__ignoreMap":62},[67,164544,164545,164547,164549],{"class":69,"line":70},[67,164546,156981],{"class":77},[67,164548,909],{"class":73},[67,164550,160218],{"class":84},[67,164552,164553,164556,164558,164560,164562,164565],{"class":69,"line":143},[67,164554,164555],{"class":77},"text[",[67,164557,1051],{"class":208},[67,164559,5162],{"class":77},[67,164561,909],{"class":73},[67,164563,164564],{"class":84}," \"P\"",[67,164566,164567],{"class":202},"  # 报错\n",[19,164569,164570],{},"如果要得到新字符串：",[57,164572,164574],{"className":30915,"code":164573,"language":30917,"meta":62,"style":62},"text = \"python\"\ntext = \"P\" + text[1:]\nprint(text)\n",[64,164575,164576,164584,164602],{"__ignoreMap":62},[67,164577,164578,164580,164582],{"class":69,"line":70},[67,164579,156981],{"class":77},[67,164581,909],{"class":73},[67,164583,160218],{"class":84},[67,164585,164586,164588,164590,164592,164594,164597,164599],{"class":69,"line":143},[67,164587,156981],{"class":77},[67,164589,909],{"class":73},[67,164591,164564],{"class":84},[67,164593,46103],{"class":73},[67,164595,164596],{"class":77}," text[",[67,164598,1077],{"class":208},[67,164600,164601],{"class":77},":]\n",[67,164603,164604,164606],{"class":69,"line":149},[67,164605,30952],{"class":208},[67,164607,164608],{"class":77},"(text)\n",[803,164610,164612],{"id":164611},"_68-切片","6.8 切片",[19,164614,164615],{},"切片用于从序列中取一部分。",[57,164617,164619],{"className":30915,"code":164618,"language":30917,"meta":62,"style":62},"序列[开始:结束:步长]\n",[64,164620,164621],{"__ignoreMap":62},[67,164622,164623],{"class":69,"line":70},[67,164624,164618],{"class":77},[19,164626,164627],{},"结束位置不包含。",[57,164629,164631],{"className":30915,"code":164630,"language":30917,"meta":62,"style":62},"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",[64,164632,164633,164670,164674,164693,164708,164722,164736],{"__ignoreMap":62},[67,164634,164635,164638,164640,164642,164644,164646,164648,164650,164652,164654,164656,164658,164660,164662,164664,164666,164668],{"class":69,"line":70},[67,164636,164637],{"class":77},"nums ",[67,164639,909],{"class":73},[67,164641,52763],{"class":77},[67,164643,1051],{"class":208},[67,164645,13153],{"class":77},[67,164647,1077],{"class":208},[67,164649,13153],{"class":77},[67,164651,939],{"class":208},[67,164653,13153],{"class":77},[67,164655,933],{"class":208},[67,164657,13153],{"class":77},[67,164659,1151],{"class":208},[67,164661,13153],{"class":77},[67,164663,1177],{"class":208},[67,164665,13153],{"class":77},[67,164667,1202],{"class":208},[67,164669,33783],{"class":77},[67,164671,164672],{"class":69,"line":143},[67,164673,177],{"emptyLinePlaceholder":176},[67,164675,164676,164678,164681,164683,164685,164687,164690],{"class":69,"line":149},[67,164677,30952],{"class":208},[67,164679,164680],{"class":77},"(nums[",[67,164682,1077],{"class":208},[67,164684,1715],{"class":77},[67,164686,1151],{"class":208},[67,164688,164689],{"class":77},"])    ",[67,164691,164692],{"class":202},"# [1, 2, 3]\n",[67,164694,164695,164697,164700,164702,164705],{"class":69,"line":155},[67,164696,30952],{"class":208},[67,164698,164699],{"class":77},"(nums[:",[67,164701,933],{"class":208},[67,164703,164704],{"class":77},"])     ",[67,164706,164707],{"class":202},"# [0, 1, 2]\n",[67,164709,164710,164712,164714,164716,164719],{"class":69,"line":161},[67,164711,30952],{"class":208},[67,164713,164680],{"class":77},[67,164715,933],{"class":208},[67,164717,164718],{"class":77},":])     ",[67,164720,164721],{"class":202},"# [3, 4, 5, 6]\n",[67,164723,164724,164726,164729,164731,164733],{"class":69,"line":167},[67,164725,30952],{"class":208},[67,164727,164728],{"class":77},"(nums[::",[67,164730,939],{"class":208},[67,164732,164689],{"class":77},[67,164734,164735],{"class":202},"# [0, 2, 4, 6]\n",[67,164737,164738,164740,164742,164744,164746,164749],{"class":69,"line":173},[67,164739,30952],{"class":208},[67,164741,164728],{"class":77},[67,164743,1389],{"class":73},[67,164745,1077],{"class":208},[67,164747,164748],{"class":77},"])   ",[67,164750,164751],{"class":202},"# 反转\n",[19,164753,164754],{},"字符串切片：",[57,164756,164758],{"className":30915,"code":164757,"language":30917,"meta":62,"style":62},"text = \"abcdef\"\nprint(text[1:4])\nprint(text[::-1])\n",[64,164759,164760,164769,164783],{"__ignoreMap":62},[67,164761,164762,164764,164766],{"class":69,"line":70},[67,164763,156981],{"class":77},[67,164765,909],{"class":73},[67,164767,164768],{"class":84}," \"abcdef\"\n",[67,164770,164771,164773,164775,164777,164779,164781],{"class":69,"line":143},[67,164772,30952],{"class":208},[67,164774,164497],{"class":77},[67,164776,1077],{"class":208},[67,164778,1715],{"class":77},[67,164780,1151],{"class":208},[67,164782,5376],{"class":77},[67,164784,164785,164787,164790,164792,164794],{"class":69,"line":149},[67,164786,30952],{"class":208},[67,164788,164789],{"class":77},"(text[::",[67,164791,1389],{"class":73},[67,164793,1077],{"class":208},[67,164795,5376],{"class":77},[803,164797,164799],{"id":164798},"_69-集合set","6.9 集合set",[19,164801,164802],{},"集合特点：",[815,164804,164805,164808,164811],{},[818,164806,164807],{},"无序。",[818,164809,164810],{},"元素不重复。",[818,164812,164813],{},"可以做交集、并集、差集。",[57,164815,164817],{"className":30915,"code":164816,"language":30917,"meta":62,"style":62},"nums = {1, 2, 3, 3, 4}\nprint(nums)\n",[64,164818,164819,164847],{"__ignoreMap":62},[67,164820,164821,164823,164825,164827,164829,164831,164833,164835,164837,164839,164841,164843,164845],{"class":69,"line":70},[67,164822,164637],{"class":77},[67,164824,909],{"class":73},[67,164826,5167],{"class":77},[67,164828,1077],{"class":208},[67,164830,13153],{"class":77},[67,164832,939],{"class":208},[67,164834,13153],{"class":77},[67,164836,933],{"class":208},[67,164838,13153],{"class":77},[67,164840,933],{"class":208},[67,164842,13153],{"class":77},[67,164844,1151],{"class":208},[67,164846,2288],{"class":77},[67,164848,164849,164851],{"class":69,"line":143},[67,164850,30952],{"class":208},[67,164852,164853],{"class":77},"(nums)\n",[19,164855,164856],{},"创建空集合：",[57,164858,164860],{"className":30915,"code":164859,"language":30917,"meta":62,"style":62},"s = set()\n",[64,164861,164862],{"__ignoreMap":62},[67,164863,164864,164866,164868,164870],{"class":69,"line":70},[67,164865,11297],{"class":77},[67,164867,909],{"class":73},[67,164869,120259],{"class":208},[67,164871,2698],{"class":77},[19,164873,9744,164874,164876],{},[64,164875,32996],{}," 是空字典，不是空集合。",[19,164878,164879],{},"集合常用操作：",[57,164881,164883],{"className":30915,"code":164882,"language":30917,"meta":62,"style":62},"s = {1, 2, 3}\n\ns.add(4)\ns.remove(2)\ns.discard(10)\nprint(len(s))\n",[64,164884,164885,164905,164909,164918,164927,164936],{"__ignoreMap":62},[67,164886,164887,164889,164891,164893,164895,164897,164899,164901,164903],{"class":69,"line":70},[67,164888,11297],{"class":77},[67,164890,909],{"class":73},[67,164892,5167],{"class":77},[67,164894,1077],{"class":208},[67,164896,13153],{"class":77},[67,164898,939],{"class":208},[67,164900,13153],{"class":77},[67,164902,933],{"class":208},[67,164904,2288],{"class":77},[67,164906,164907],{"class":69,"line":143},[67,164908,177],{"emptyLinePlaceholder":176},[67,164910,164911,164914,164916],{"class":69,"line":149},[67,164912,164913],{"class":77},"s.add(",[67,164915,1151],{"class":208},[67,164917,870],{"class":77},[67,164919,164920,164923,164925],{"class":69,"line":155},[67,164921,164922],{"class":77},"s.remove(",[67,164924,939],{"class":208},[67,164926,870],{"class":77},[67,164928,164929,164932,164934],{"class":69,"line":161},[67,164930,164931],{"class":77},"s.discard(",[67,164933,1303],{"class":208},[67,164935,870],{"class":77},[67,164937,164938,164940,164942,164944],{"class":69,"line":167},[67,164939,30952],{"class":208},[67,164941,864],{"class":77},[67,164943,8077],{"class":208},[67,164945,164946],{"class":77},"(s))\n",[19,164948,164949],{},"交并差：",[57,164951,164953],{"className":30915,"code":164952,"language":30917,"meta":62,"style":62},"a = {1, 2, 3}\nb = {3, 4, 5}\n\nprint(a & b)  # 交集\nprint(a | b)  # 并集\nprint(a - b)  # 差集\n",[64,164954,164955,164975,164995,164999,165014,165027],{"__ignoreMap":62},[67,164956,164957,164959,164961,164963,164965,164967,164969,164971,164973],{"class":69,"line":70},[67,164958,11637],{"class":77},[67,164960,909],{"class":73},[67,164962,5167],{"class":77},[67,164964,1077],{"class":208},[67,164966,13153],{"class":77},[67,164968,939],{"class":208},[67,164970,13153],{"class":77},[67,164972,933],{"class":208},[67,164974,2288],{"class":77},[67,164976,164977,164979,164981,164983,164985,164987,164989,164991,164993],{"class":69,"line":143},[67,164978,11663],{"class":77},[67,164980,909],{"class":73},[67,164982,5167],{"class":77},[67,164984,933],{"class":208},[67,164986,13153],{"class":77},[67,164988,1151],{"class":208},[67,164990,13153],{"class":77},[67,164992,1177],{"class":208},[67,164994,2288],{"class":77},[67,164996,164997],{"class":69,"line":149},[67,164998,177],{"emptyLinePlaceholder":176},[67,165000,165001,165003,165006,165008,165011],{"class":69,"line":155},[67,165002,30952],{"class":208},[67,165004,165005],{"class":77},"(a ",[67,165007,1211],{"class":73},[67,165009,165010],{"class":77}," b)  ",[67,165012,165013],{"class":202},"# 交集\n",[67,165015,165016,165018,165020,165022,165024],{"class":69,"line":161},[67,165017,30952],{"class":208},[67,165019,165005],{"class":77},[67,165021,1777],{"class":73},[67,165023,165010],{"class":77},[67,165025,165026],{"class":202},"# 并集\n",[67,165028,165029,165031,165033,165035,165037],{"class":69,"line":167},[67,165030,30952],{"class":208},[67,165032,165005],{"class":77},[67,165034,1389],{"class":73},[67,165036,165010],{"class":77},[67,165038,165039],{"class":202},"# 差集\n",[803,165041,165043],{"id":165042},"_610-字典dict","6.10 字典dict",[19,165045,165046],{},"字典通过 key-value 保存数据。",[57,165048,165050],{"className":30915,"code":165049,"language":30917,"meta":62,"style":62},"student = {\n    \"name\": \"小明\",\n    \"age\": 18,\n    \"score\": 95\n}\n",[64,165051,165052,165060,165070,165081,165091],{"__ignoreMap":62},[67,165053,165054,165056,165058],{"class":69,"line":70},[67,165055,150018],{"class":77},[67,165057,909],{"class":73},[67,165059,16289],{"class":77},[67,165061,165062,165064,165066,165068],{"class":69,"line":143},[67,165063,147557],{"class":84},[67,165065,51974],{"class":77},[67,165067,150425],{"class":84},[67,165069,32003],{"class":77},[67,165071,165072,165075,165077,165079],{"class":69,"line":149},[67,165073,165074],{"class":84},"    \"age\"",[67,165076,51974],{"class":77},[67,165078,1506],{"class":208},[67,165080,32003],{"class":77},[67,165082,165083,165086,165088],{"class":69,"line":155},[67,165084,165085],{"class":84},"    \"score\"",[67,165087,51974],{"class":77},[67,165089,165090],{"class":208},"95\n",[67,165092,165093],{"class":69,"line":161},[67,165094,2288],{"class":77},[19,165096,165097],{},"获取值：",[57,165099,165101],{"className":30915,"code":165100,"language":30917,"meta":62,"style":62},"print(student[\"name\"])\nprint(student.get(\"name\"))\n",[64,165102,165103,165114],{"__ignoreMap":62},[67,165104,165105,165107,165110,165112],{"class":69,"line":70},[67,165106,30952],{"class":208},[67,165108,165109],{"class":77},"(student[",[67,165111,63216],{"class":84},[67,165113,5376],{"class":77},[67,165115,165116,165118,165121,165123],{"class":69,"line":143},[67,165117,30952],{"class":208},[67,165119,165120],{"class":77},"(student.get(",[67,165122,63216],{"class":84},[67,165124,31034],{"class":77},[19,165126,16105],{},[57,165128,165130],{"className":30915,"code":165129,"language":30917,"meta":62,"style":62},"student[\"address\"]     # key不存在会报错\nstudent.get(\"address\") # key不存在返回None\n",[64,165131,165132,165145],{"__ignoreMap":62},[67,165133,165134,165136,165139,165142],{"class":69,"line":70},[67,165135,153396],{"class":77},[67,165137,165138],{"class":84},"\"address\"",[67,165140,165141],{"class":77},"]     ",[67,165143,165144],{"class":202},"# key不存在会报错\n",[67,165146,165147,165150,165152,165154],{"class":69,"line":143},[67,165148,165149],{"class":77},"student.get(",[67,165151,165138],{"class":84},[67,165153,14432],{"class":77},[67,165155,165156],{"class":202},"# key不存在返回None\n",[19,165158,165159],{},"设置默认值：",[57,165161,165163],{"className":30915,"code":165162,"language":30917,"meta":62,"style":62},"print(student.get(\"address\", \"未知\"))\n",[64,165164,165165],{"__ignoreMap":62},[67,165166,165167,165169,165171,165173,165175,165178],{"class":69,"line":70},[67,165168,30952],{"class":208},[67,165170,165120],{"class":77},[67,165172,165138],{"class":84},[67,165174,13153],{"class":77},[67,165176,165177],{"class":84},"\"未知\"",[67,165179,31034],{"class":77},[19,165181,165182],{},"新增和修改：",[57,165184,165186],{"className":30915,"code":165185,"language":30917,"meta":62,"style":62},"student[\"age\"] = 19\nstudent[\"address\"] = \"北京\"\n",[64,165187,165188,165201],{"__ignoreMap":62},[67,165189,165190,165192,165194,165196,165198],{"class":69,"line":70},[67,165191,153396],{"class":77},[67,165193,69661],{"class":84},[67,165195,5162],{"class":77},[67,165197,909],{"class":73},[67,165199,165200],{"class":208}," 19\n",[67,165202,165203,165205,165207,165209,165211],{"class":69,"line":143},[67,165204,153396],{"class":77},[67,165206,165138],{"class":84},[67,165208,5162],{"class":77},[67,165210,909],{"class":73},[67,165212,165213],{"class":84}," \"北京\"\n",[19,165215,165216],{},"删除：",[57,165218,165220],{"className":30915,"code":165219,"language":30917,"meta":62,"style":62},"score = student.pop(\"score\")\ndel student[\"age\"]\nstudent.clear()\n",[64,165221,165222,165235,165245],{"__ignoreMap":62},[67,165223,165224,165226,165228,165231,165233],{"class":69,"line":70},[67,165225,155895],{"class":77},[67,165227,909],{"class":73},[67,165229,165230],{"class":77}," student.pop(",[67,165232,152009],{"class":84},[67,165234,870],{"class":77},[67,165236,165237,165239,165241,165243],{"class":69,"line":143},[67,165238,163920],{"class":73},[67,165240,152686],{"class":77},[67,165242,69661],{"class":84},[67,165244,33783],{"class":77},[67,165246,165247],{"class":69,"line":149},[67,165248,165249],{"class":77},"student.clear()\n",[803,165251,165253],{"id":165252},"_611-字典遍历","6.11 字典遍历",[19,165255,165256],{},"遍历 key：",[57,165258,165260],{"className":30915,"code":165259,"language":30917,"meta":62,"style":62},"for key in student:\n    print(key, student[key])\n",[64,165261,165262,165274],{"__ignoreMap":62},[67,165263,165264,165266,165269,165271],{"class":69,"line":70},[67,165265,74],{"class":73},[67,165267,165268],{"class":77}," key ",[67,165270,81],{"class":73},[67,165272,165273],{"class":77}," student:\n",[67,165275,165276,165278],{"class":69,"line":143},[67,165277,31836],{"class":208},[67,165279,165280],{"class":77},"(key, student[key])\n",[19,165282,165283],{},"遍历 value：",[57,165285,165287],{"className":30915,"code":165286,"language":30917,"meta":62,"style":62},"for value in student.values():\n    print(value)\n",[64,165288,165289,165301],{"__ignoreMap":62},[67,165290,165291,165293,165296,165298],{"class":69,"line":70},[67,165292,74],{"class":73},[67,165294,165295],{"class":77}," value ",[67,165297,81],{"class":73},[67,165299,165300],{"class":77}," student.values():\n",[67,165302,165303,165305],{"class":69,"line":143},[67,165304,31836],{"class":208},[67,165306,165307],{"class":77},"(value)\n",[19,165309,165310],{},"遍历 key 和 value：",[57,165312,165314],{"className":30915,"code":165313,"language":30917,"meta":62,"style":62},"for key, value in student.items():\n    print(key, value)\n",[64,165315,165316,165328],{"__ignoreMap":62},[67,165317,165318,165320,165323,165325],{"class":69,"line":70},[67,165319,74],{"class":73},[67,165321,165322],{"class":77}," key, value ",[67,165324,81],{"class":73},[67,165326,165327],{"class":77}," student.items():\n",[67,165329,165330,165332],{"class":69,"line":143},[67,165331,31836],{"class":208},[67,165333,165334],{"class":77},"(key, value)\n",[803,165336,165338],{"id":165337},"_612-嵌套容器","6.12 嵌套容器",[19,165340,165341],{},"列表中保存字典，是项目中最常见的结构之一。",[57,165343,165345],{"className":30915,"code":165344,"language":30917,"meta":62,"style":62},"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",[64,165346,165347,165355,165383,165411,165439,165443,165447,165457],{"__ignoreMap":62},[67,165348,165349,165351,165353],{"class":69,"line":70},[67,165350,160253],{"class":77},[67,165352,909],{"class":73},[67,165354,55984],{"class":77},[67,165356,165357,165359,165361,165363,165365,165367,165369,165371,165373,165375,165377,165379,165381],{"class":69,"line":143},[67,165358,148922],{"class":77},[67,165360,63216],{"class":84},[67,165362,51974],{"class":77},[67,165364,150425],{"class":84},[67,165366,13153],{"class":77},[67,165368,69661],{"class":84},[67,165370,51974],{"class":77},[67,165372,1506],{"class":208},[67,165374,13153],{"class":77},[67,165376,152009],{"class":84},[67,165378,51974],{"class":77},[67,165380,1845],{"class":208},[67,165382,5649],{"class":77},[67,165384,165385,165387,165389,165391,165393,165395,165397,165399,165401,165403,165405,165407,165409],{"class":69,"line":149},[67,165386,148922],{"class":77},[67,165388,63216],{"class":84},[67,165390,51974],{"class":77},[67,165392,151473],{"class":84},[67,165394,13153],{"class":77},[67,165396,69661],{"class":84},[67,165398,51974],{"class":77},[67,165400,1481],{"class":208},[67,165402,13153],{"class":77},[67,165404,152009],{"class":84},[67,165406,51974],{"class":77},[67,165408,1667],{"class":208},[67,165410,5649],{"class":77},[67,165412,165413,165415,165417,165419,165421,165423,165425,165427,165429,165431,165433,165435,165437],{"class":69,"line":155},[67,165414,148922],{"class":77},[67,165416,63216],{"class":84},[67,165418,51974],{"class":77},[67,165420,160268],{"class":84},[67,165422,13153],{"class":77},[67,165424,69661],{"class":84},[67,165426,51974],{"class":77},[67,165428,1531],{"class":208},[67,165430,13153],{"class":77},[67,165432,152009],{"class":84},[67,165434,51974],{"class":77},[67,165436,1264],{"class":208},[67,165438,5649],{"class":77},[67,165440,165441],{"class":69,"line":161},[67,165442,33783],{"class":77},[67,165444,165445],{"class":69,"line":167},[67,165446,177],{"emptyLinePlaceholder":176},[67,165448,165449,165451,165453,165455],{"class":69,"line":173},[67,165450,74],{"class":73},[67,165452,152674],{"class":77},[67,165454,81],{"class":73},[67,165456,152679],{"class":77},[67,165458,165459,165461,165463,165465,165468,165470],{"class":69,"line":180},[67,165460,31836],{"class":208},[67,165462,165109],{"class":77},[67,165464,63216],{"class":84},[67,165466,165467],{"class":77},"], student[",[67,165469,152009],{"class":84},[67,165471,5376],{"class":77},[19,165473,165474],{},"统计平均分：",[57,165476,165478],{"className":30915,"code":165477,"language":30917,"meta":62,"style":62},"total = 0\n\nfor student in students:\n    total += student[\"score\"]\n\navg = total \u002F len(students)\nprint(f\"平均分:{avg:.2f}\")\n",[64,165479,165480,165488,165492,165502,165514,165518,165533],{"__ignoreMap":62},[67,165481,165482,165484,165486],{"class":69,"line":70},[67,165483,157797],{"class":77},[67,165485,909],{"class":73},[67,165487,47870],{"class":208},[67,165489,165490],{"class":69,"line":143},[67,165491,177],{"emptyLinePlaceholder":176},[67,165493,165494,165496,165498,165500],{"class":69,"line":149},[67,165495,74],{"class":73},[67,165497,152674],{"class":77},[67,165499,81],{"class":73},[67,165501,152679],{"class":77},[67,165503,165504,165506,165508,165510,165512],{"class":69,"line":155},[67,165505,159844],{"class":77},[67,165507,10196],{"class":73},[67,165509,152686],{"class":77},[67,165511,152009],{"class":84},[67,165513,33783],{"class":77},[67,165515,165516],{"class":69,"line":161},[67,165517,177],{"emptyLinePlaceholder":176},[67,165519,165520,165522,165524,165526,165528,165530],{"class":69,"line":167},[67,165521,164311],{"class":77},[67,165523,909],{"class":73},[67,165525,164316],{"class":77},[67,165527,1440],{"class":73},[67,165529,8050],{"class":208},[67,165531,165532],{"class":77},"(students)\n",[67,165534,165535,165537,165539,165541,165543,165545,165547,165549,165551,165553],{"class":69,"line":173},[67,165536,30952],{"class":208},[67,165538,864],{"class":77},[67,165540,915],{"class":73},[67,165542,164334],{"class":84},[67,165544,1752],{"class":208},[67,165546,164339],{"class":77},[67,165548,157696],{"class":73},[67,165550,1802],{"class":208},[67,165552,257],{"class":84},[67,165554,870],{"class":77},[19,165556,165557],{},"查找学生：",[57,165559,165561],{"className":30915,"code":165560,"language":30917,"meta":62,"style":62},"target = input(\"请输入学生姓名:\")\n\nfor student in students:\n    if student[\"name\"] == target:\n        print(student)\n        break\nelse:\n    print(\"没有找到\")\n",[64,165562,165563,165578,165582,165592,165606,165612,165616,165622],{"__ignoreMap":62},[67,165564,165565,165567,165569,165571,165573,165576],{"class":69,"line":70},[67,165566,112115],{"class":77},[67,165568,909],{"class":73},[67,165570,61142],{"class":208},[67,165572,864],{"class":77},[67,165574,165575],{"class":84},"\"请输入学生姓名:\"",[67,165577,870],{"class":77},[67,165579,165580],{"class":69,"line":143},[67,165581,177],{"emptyLinePlaceholder":176},[67,165583,165584,165586,165588,165590],{"class":69,"line":149},[67,165585,74],{"class":73},[67,165587,152674],{"class":77},[67,165589,81],{"class":73},[67,165591,152679],{"class":77},[67,165593,165594,165596,165598,165600,165602,165604],{"class":69,"line":155},[67,165595,3821],{"class":73},[67,165597,152686],{"class":77},[67,165599,63216],{"class":84},[67,165601,5162],{"class":77},[67,165603,3670],{"class":73},[67,165605,160969],{"class":77},[67,165607,165608,165610],{"class":69,"line":161},[67,165609,32988],{"class":208},[67,165611,150579],{"class":77},[67,165613,165614],{"class":69,"line":167},[67,165615,32164],{"class":73},[67,165617,165618,165620],{"class":69,"line":173},[67,165619,2424],{"class":73},[67,165621,4459],{"class":77},[67,165623,165624,165626,165628,165631],{"class":69,"line":180},[67,165625,31836],{"class":208},[67,165627,864],{"class":77},[67,165629,165630],{"class":84},"\"没有找到\"",[67,165632,870],{"class":77},[803,165634,165636],{"id":165635},"_613-容器通用操作","6.13 容器通用操作",[19,165638,165639],{},"长度：",[57,165641,165643],{"className":30915,"code":165642,"language":30917,"meta":62,"style":62},"len([1, 2, 3])\nlen(\"abc\")\nlen({\"name\": \"小明\"})\n",[64,165644,165645,165664,165674],{"__ignoreMap":62},[67,165646,165647,165649,165652,165654,165656,165658,165660,165662],{"class":69,"line":70},[67,165648,8077],{"class":208},[67,165650,165651],{"class":77},"([",[67,165653,1077],{"class":208},[67,165655,13153],{"class":77},[67,165657,939],{"class":208},[67,165659,13153],{"class":77},[67,165661,933],{"class":208},[67,165663,5376],{"class":77},[67,165665,165666,165668,165670,165672],{"class":69,"line":143},[67,165667,8077],{"class":208},[67,165669,864],{"class":77},[67,165671,156417],{"class":84},[67,165673,870],{"class":77},[67,165675,165676,165678,165681,165683,165685,165687],{"class":69,"line":149},[67,165677,8077],{"class":208},[67,165679,165680],{"class":77},"({",[67,165682,63216],{"class":84},[67,165684,51974],{"class":77},[67,165686,150425],{"class":84},[67,165688,165689],{"class":77},"})\n",[19,165691,165692],{},"最大最小：",[57,165694,165696],{"className":30915,"code":165695,"language":30917,"meta":62,"style":62},"max([1, 2, 3])\nmin([1, 2, 3])\n",[64,165697,165698,165716],{"__ignoreMap":62},[67,165699,165700,165702,165704,165706,165708,165710,165712,165714],{"class":69,"line":70},[67,165701,6734],{"class":208},[67,165703,165651],{"class":77},[67,165705,1077],{"class":208},[67,165707,13153],{"class":77},[67,165709,939],{"class":208},[67,165711,13153],{"class":77},[67,165713,933],{"class":208},[67,165715,5376],{"class":77},[67,165717,165718,165721,165723,165725,165727,165729,165731,165733],{"class":69,"line":143},[67,165719,165720],{"class":208},"min",[67,165722,165651],{"class":77},[67,165724,1077],{"class":208},[67,165726,13153],{"class":77},[67,165728,939],{"class":208},[67,165730,13153],{"class":77},[67,165732,933],{"class":208},[67,165734,5376],{"class":77},[19,165736,165737],{},"求和：",[57,165739,165741],{"className":30915,"code":165740,"language":30917,"meta":62,"style":62},"sum([1, 2, 3])\n",[64,165742,165743],{"__ignoreMap":62},[67,165744,165745,165748,165750,165752,165754,165756,165758,165760],{"class":69,"line":70},[67,165746,165747],{"class":208},"sum",[67,165749,165651],{"class":77},[67,165751,1077],{"class":208},[67,165753,13153],{"class":77},[67,165755,939],{"class":208},[67,165757,13153],{"class":77},[67,165759,933],{"class":208},[67,165761,5376],{"class":77},[19,165763,164008],{},[57,165765,165767],{"className":30915,"code":165766,"language":30917,"meta":62,"style":62},"sorted([3, 1, 2])\n",[64,165768,165769],{"__ignoreMap":62},[67,165770,165771,165774,165776,165778,165780,165782,165784,165786],{"class":69,"line":70},[67,165772,165773],{"class":208},"sorted",[67,165775,165651],{"class":77},[67,165777,933],{"class":208},[67,165779,13153],{"class":77},[67,165781,1077],{"class":208},[67,165783,13153],{"class":77},[67,165785,939],{"class":208},[67,165787,5376],{"class":77},[19,165789,165790],{},"类型转换：",[57,165792,165794],{"className":30915,"code":165793,"language":30917,"meta":62,"style":62},"list(\"abc\")\ntuple([1, 2, 3])\nset([1, 1, 2, 3])\n",[64,165795,165796,165806,165824],{"__ignoreMap":62},[67,165797,165798,165800,165802,165804],{"class":69,"line":70},[67,165799,154607],{"class":208},[67,165801,864],{"class":77},[67,165803,156417],{"class":84},[67,165805,870],{"class":77},[67,165807,165808,165810,165812,165814,165816,165818,165820,165822],{"class":69,"line":143},[67,165809,155802],{"class":208},[67,165811,165651],{"class":77},[67,165813,1077],{"class":208},[67,165815,13153],{"class":77},[67,165817,939],{"class":208},[67,165819,13153],{"class":77},[67,165821,933],{"class":208},[67,165823,5376],{"class":77},[67,165825,165826,165828,165830,165832,165834,165836,165838,165840,165842,165844],{"class":69,"line":149},[67,165827,155827],{"class":208},[67,165829,165651],{"class":77},[67,165831,1077],{"class":208},[67,165833,13153],{"class":77},[67,165835,1077],{"class":208},[67,165837,13153],{"class":77},[67,165839,939],{"class":208},[67,165841,13153],{"class":77},[67,165843,933],{"class":208},[67,165845,5376],{"class":77},[19,165847,165848],{},"成员判断：",[57,165850,165852],{"className":30915,"code":165851,"language":30917,"meta":62,"style":62},"print(\"a\" in \"abc\")\nprint(1 in [1, 2, 3])\nprint(\"name\" in {\"name\": \"小明\"})\n",[64,165853,165854,165871,165895],{"__ignoreMap":62},[67,165855,165856,165858,165860,165863,165866,165869],{"class":69,"line":70},[67,165857,30952],{"class":208},[67,165859,864],{"class":77},[67,165861,165862],{"class":84},"\"a\"",[67,165864,165865],{"class":73}," in",[67,165867,165868],{"class":84}," \"abc\"",[67,165870,870],{"class":77},[67,165872,165873,165875,165877,165879,165881,165883,165885,165887,165889,165891,165893],{"class":69,"line":143},[67,165874,30952],{"class":208},[67,165876,864],{"class":77},[67,165878,1077],{"class":208},[67,165880,165865],{"class":73},[67,165882,52763],{"class":77},[67,165884,1077],{"class":208},[67,165886,13153],{"class":77},[67,165888,939],{"class":208},[67,165890,13153],{"class":77},[67,165892,933],{"class":208},[67,165894,5376],{"class":77},[67,165896,165897,165899,165901,165903,165905,165907,165909,165911,165913],{"class":69,"line":149},[67,165898,30952],{"class":208},[67,165900,864],{"class":77},[67,165902,63216],{"class":84},[67,165904,165865],{"class":73},[67,165906,5167],{"class":77},[67,165908,63216],{"class":84},[67,165910,51974],{"class":77},[67,165912,150425],{"class":84},[67,165914,165689],{"class":77},[803,165916,165918],{"id":165917},"_614-推导式","6.14 推导式",[19,165920,165921],{},"推导式用于快速生成容器。",[19,165923,165924],{},"列表推导式：",[57,165926,165928],{"className":30915,"code":165927,"language":30917,"meta":62,"style":62},"nums = [i for i in range(1, 6)]\nprint(nums)\n",[64,165929,165930,165957],{"__ignoreMap":62},[67,165931,165932,165934,165936,165939,165941,165943,165945,165947,165949,165951,165953,165955],{"class":69,"line":70},[67,165933,164637],{"class":77},[67,165935,909],{"class":73},[67,165937,165938],{"class":77}," [i ",[67,165940,74],{"class":73},[67,165942,10157],{"class":77},[67,165944,81],{"class":73},[67,165946,32980],{"class":208},[67,165948,864],{"class":77},[67,165950,1077],{"class":208},[67,165952,13153],{"class":77},[67,165954,1202],{"class":208},[67,165956,97837],{"class":77},[67,165958,165959,165961],{"class":69,"line":143},[67,165960,30952],{"class":208},[67,165962,164853],{"class":77},[19,165964,165965],{},"带条件：",[57,165967,165969],{"className":30915,"code":165968,"language":30917,"meta":62,"style":62},"even_nums = [i for i in range(1, 101) if i % 2 == 0]\nprint(even_nums)\n",[64,165970,165971,166012],{"__ignoreMap":62},[67,165972,165973,165976,165978,165980,165982,165984,165986,165988,165990,165992,165994,165996,165998,166000,166002,166004,166006,166008,166010],{"class":69,"line":70},[67,165974,165975],{"class":77},"even_nums ",[67,165977,909],{"class":73},[67,165979,165938],{"class":77},[67,165981,74],{"class":73},[67,165983,10157],{"class":77},[67,165985,81],{"class":73},[67,165987,32980],{"class":208},[67,165989,864],{"class":77},[67,165991,1077],{"class":208},[67,165993,13153],{"class":77},[67,165995,1195],{"class":208},[67,165997,14432],{"class":77},[67,165999,2254],{"class":73},[67,166001,10157],{"class":77},[67,166003,1186],{"class":73},[67,166005,15472],{"class":208},[67,166007,102096],{"class":73},[67,166009,4813],{"class":208},[67,166011,33783],{"class":77},[67,166013,166014,166016],{"class":69,"line":143},[67,166015,30952],{"class":208},[67,166017,166018],{"class":77},"(even_nums)\n",[19,166020,166021],{},"字典推导式：",[57,166023,166025],{"className":30915,"code":166024,"language":30917,"meta":62,"style":62},"squares = {i: i ** 2 for i in range(1, 6)}\nprint(squares)\n",[64,166026,166027,166061],{"__ignoreMap":62},[67,166028,166029,166032,166034,166037,166039,166041,166044,166046,166048,166050,166052,166054,166056,166058],{"class":69,"line":70},[67,166030,166031],{"class":77},"squares ",[67,166033,909],{"class":73},[67,166035,166036],{"class":77}," {i: i ",[67,166038,11379],{"class":73},[67,166040,15472],{"class":208},[67,166042,166043],{"class":73}," for",[67,166045,10157],{"class":77},[67,166047,81],{"class":73},[67,166049,32980],{"class":208},[67,166051,864],{"class":77},[67,166053,1077],{"class":208},[67,166055,13153],{"class":77},[67,166057,1202],{"class":208},[67,166059,166060],{"class":77},")}\n",[67,166062,166063,166065],{"class":69,"line":143},[67,166064,30952],{"class":208},[67,166066,166067],{"class":77},"(squares)\n",[19,166069,166070],{},"集合推导式：",[57,166072,166074],{"className":30915,"code":166073,"language":30917,"meta":62,"style":62},"chars = {ch for ch in \"hello\"}\nprint(chars)\n",[64,166075,166076,166097],{"__ignoreMap":62},[67,166077,166078,166081,166083,166086,166088,166090,166092,166095],{"class":69,"line":70},[67,166079,166080],{"class":77},"chars ",[67,166082,909],{"class":73},[67,166084,166085],{"class":77}," {ch ",[67,166087,74],{"class":73},[67,166089,160229],{"class":77},[67,166091,81],{"class":73},[67,166093,166094],{"class":84}," \"hello\"",[67,166096,2288],{"class":77},[67,166098,166099,166101],{"class":69,"line":143},[67,166100,30952],{"class":208},[67,166102,166103],{"class":77},"(chars)\n",[19,166105,166106],{},"推导式适合简单逻辑，复杂逻辑还是写普通循环。",[803,166108,166110],{"id":166109},"_615-小案例学生成绩统计","6.15 小案例：学生成绩统计",[57,166112,166114],{"className":30915,"code":166113,"language":30917,"meta":62,"style":62},"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",[64,166115,166116,166124,166144,166164,166184,166204,166208,166212,166220,166234,166243,166247,166257,166269,166273,166293,166302,166306,166322,166327,166331,166345,166349,166371,166407],{"__ignoreMap":62},[67,166117,166118,166120,166122],{"class":69,"line":70},[67,166119,160253],{"class":77},[67,166121,909],{"class":73},[67,166123,55984],{"class":77},[67,166125,166126,166128,166130,166132,166134,166136,166138,166140,166142],{"class":69,"line":143},[67,166127,148922],{"class":77},[67,166129,63216],{"class":84},[67,166131,51974],{"class":77},[67,166133,150425],{"class":84},[67,166135,13153],{"class":77},[67,166137,152009],{"class":84},[67,166139,51974],{"class":77},[67,166141,1845],{"class":208},[67,166143,5649],{"class":77},[67,166145,166146,166148,166150,166152,166154,166156,166158,166160,166162],{"class":69,"line":149},[67,166147,148922],{"class":77},[67,166149,63216],{"class":84},[67,166151,51974],{"class":77},[67,166153,151473],{"class":84},[67,166155,13153],{"class":77},[67,166157,152009],{"class":84},[67,166159,51974],{"class":77},[67,166161,1667],{"class":208},[67,166163,5649],{"class":77},[67,166165,166166,166168,166170,166172,166174,166176,166178,166180,166182],{"class":69,"line":155},[67,166167,148922],{"class":77},[67,166169,63216],{"class":84},[67,166171,51974],{"class":77},[67,166173,160268],{"class":84},[67,166175,13153],{"class":77},[67,166177,152009],{"class":84},[67,166179,51974],{"class":77},[67,166181,1264],{"class":208},[67,166183,5649],{"class":77},[67,166185,166186,166188,166190,166192,166194,166196,166198,166200,166202],{"class":69,"line":161},[67,166187,148922],{"class":77},[67,166189,63216],{"class":84},[67,166191,51974],{"class":77},[67,166193,163847],{"class":84},[67,166195,13153],{"class":77},[67,166197,152009],{"class":84},[67,166199,51974],{"class":77},[67,166201,1738],{"class":208},[67,166203,5649],{"class":77},[67,166205,166206],{"class":69,"line":167},[67,166207,33783],{"class":77},[67,166209,166210],{"class":69,"line":173},[67,166211,177],{"emptyLinePlaceholder":176},[67,166213,166214,166216,166218],{"class":69,"line":180},[67,166215,157797],{"class":77},[67,166217,909],{"class":73},[67,166219,47870],{"class":208},[67,166221,166222,166225,166227,166230,166232],{"class":69,"line":186},[67,166223,166224],{"class":77},"max_student ",[67,166226,909],{"class":73},[67,166228,166229],{"class":77}," students[",[67,166231,1051],{"class":208},[67,166233,33783],{"class":77},[67,166235,166236,166239,166241],{"class":69,"line":444},[67,166237,166238],{"class":77},"passed ",[67,166240,909],{"class":73},[67,166242,52375],{"class":77},[67,166244,166245],{"class":69,"line":2335},[67,166246,177],{"emptyLinePlaceholder":176},[67,166248,166249,166251,166253,166255],{"class":69,"line":2340},[67,166250,74],{"class":73},[67,166252,152674],{"class":77},[67,166254,81],{"class":73},[67,166256,152679],{"class":77},[67,166258,166259,166261,166263,166265,166267],{"class":69,"line":2346},[67,166260,159844],{"class":77},[67,166262,10196],{"class":73},[67,166264,152686],{"class":77},[67,166266,152009],{"class":84},[67,166268,33783],{"class":77},[67,166270,166271],{"class":69,"line":2351},[67,166272,177],{"emptyLinePlaceholder":176},[67,166274,166275,166277,166279,166281,166283,166285,166288,166290],{"class":69,"line":2365},[67,166276,3821],{"class":73},[67,166278,152686],{"class":77},[67,166280,152009],{"class":84},[67,166282,5162],{"class":77},[67,166284,1816],{"class":73},[67,166286,166287],{"class":77}," max_student[",[67,166289,152009],{"class":84},[67,166291,166292],{"class":77},"]:\n",[67,166294,166295,166298,166300],{"class":69,"line":2370},[67,166296,166297],{"class":77},"        max_student ",[67,166299,909],{"class":73},[67,166301,152702],{"class":77},[67,166303,166304],{"class":69,"line":2376},[67,166305,177],{"emptyLinePlaceholder":176},[67,166307,166308,166310,166312,166314,166316,166318,166320],{"class":69,"line":2397},[67,166309,3821],{"class":73},[67,166311,152686],{"class":77},[67,166313,152009],{"class":84},[67,166315,5162],{"class":77},[67,166317,2433],{"class":73},[67,166319,158374],{"class":208},[67,166321,4459],{"class":77},[67,166323,166324],{"class":69,"line":2402},[67,166325,166326],{"class":77},"        passed.append(student)\n",[67,166328,166329],{"class":69,"line":2416},[67,166330,177],{"emptyLinePlaceholder":176},[67,166332,166333,166335,166337,166339,166341,166343],{"class":69,"line":2421},[67,166334,164311],{"class":77},[67,166336,909],{"class":73},[67,166338,164316],{"class":77},[67,166340,1440],{"class":73},[67,166342,8050],{"class":208},[67,166344,165532],{"class":77},[67,166346,166347],{"class":69,"line":2450},[67,166348,177],{"emptyLinePlaceholder":176},[67,166350,166351,166353,166355,166357,166359,166361,166363,166365,166367,166369],{"class":69,"line":2455},[67,166352,30952],{"class":208},[67,166354,864],{"class":77},[67,166356,915],{"class":73},[67,166358,164334],{"class":84},[67,166360,1752],{"class":208},[67,166362,164339],{"class":77},[67,166364,157696],{"class":73},[67,166366,1802],{"class":208},[67,166368,257],{"class":84},[67,166370,870],{"class":77},[67,166372,166373,166375,166377,166379,166382,166384,166387,166389,166391,166393,166395,166397,166399,166401,166403,166405],{"class":69,"line":2472},[67,166374,30952],{"class":208},[67,166376,864],{"class":77},[67,166378,915],{"class":73},[67,166380,166381],{"class":84},"\"最高分学生:",[67,166383,1752],{"class":208},[67,166385,166386],{"class":77},"max_student[",[67,166388,153419],{"class":84},[67,166390,1796],{"class":77},[67,166392,1802],{"class":208},[67,166394,5167],{"class":208},[67,166396,166386],{"class":77},[67,166398,153457],{"class":84},[67,166400,1796],{"class":77},[67,166402,1802],{"class":208},[67,166404,257],{"class":84},[67,166406,870],{"class":77},[67,166408,166409,166411,166413,166415,166418,166421,166424,166426,166428],{"class":69,"line":2477},[67,166410,30952],{"class":208},[67,166412,864],{"class":77},[67,166414,915],{"class":73},[67,166416,166417],{"class":84},"\"及格人数:",[67,166419,166420],{"class":208},"{len",[67,166422,166423],{"class":77},"(passed)",[67,166425,1802],{"class":208},[67,166427,257],{"class":84},[67,166429,870],{"class":77},[803,166431,166433],{"id":166432},"_616-易错点","6.16 易错点",[815,166435,166436,166439,166442,166445,166451,166460],{},[818,166437,166438],{},"列表可变，元组和字符串不可变。",[818,166440,166441],{},"切片结束位置不包含。",[818,166443,166444],{},"字典通过 key 取值，不是通过索引。",[818,166446,166447,166448,28922],{},"空集合要用 ",[64,166449,166450],{},"set()",[818,166452,104903,166453,166456,166457,28922],{},[64,166454,166455],{},"student[\"key\"]"," 前要确认 key 存在，或用 ",[64,166458,166459],{},"get()",[818,166461,166462],{},"嵌套容器要先看清楚每一层是什么类型。",[803,166464,166466],{"id":166465},"_617-本章练习","6.17 本章练习",[815,166468,166469,166472,166475,166478,166481],{},[818,166470,166471],{},"定义列表保存 5 个成绩，计算最高分、最低分、平均分。",[818,166473,166474],{},"输入一句话，统计每个字符出现次数。",[818,166476,166477],{},"使用集合去除列表中的重复元素。",[818,166479,166480],{},"使用字典保存一个学生的信息，并实现修改成绩。",[818,166482,166483],{},"使用列表字典结构保存多个学生，实现按姓名查询。",[779,166485,166486],{},"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":62,"searchDepth":143,"depth":143,"links":166488},[166489,166490,166491,166492,166493,166494,166495,166496,166497,166498,166499,166500,166501,166502,166503,166504,166505],{"id":163469,"depth":143,"text":163470},{"id":163586,"depth":143,"text":163587},{"id":163676,"depth":143,"text":163677},{"id":163800,"depth":143,"text":163801},{"id":164163,"depth":143,"text":164164},{"id":164350,"depth":143,"text":164351},{"id":164469,"depth":143,"text":164470},{"id":164611,"depth":143,"text":164612},{"id":164798,"depth":143,"text":164799},{"id":165042,"depth":143,"text":165043},{"id":165252,"depth":143,"text":165253},{"id":165337,"depth":143,"text":165338},{"id":165635,"depth":143,"text":165636},{"id":165917,"depth":143,"text":165918},{"id":166109,"depth":143,"text":166110},{"id":166432,"depth":143,"text":166433},{"id":166465,"depth":143,"text":166466},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch6",{"title":163461,"description":24093},"wiki\u002F2024-10-10-python教程\u002Fch6-数据容器","T8eCc8Q5mua2_dsYsMoauSCMOs5j-QG3lppjk0eGwro",{"id":166512,"title":166513,"body":166514,"description":24093,"extension":787,"meta":168686,"navigation":176,"path":168687,"seo":168688,"stem":168689,"__hash__":168690},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch7-函数进阶.md","7. 函数进阶",{"type":7,"value":166515,"toc":168661},[166516,166519,166523,166526,166606,166609,166630,166633,166637,166640,166702,166705,166722,166726,166729,166774,166776,166784,166788,166791,166873,166876,166879,166904,166907,166930,166934,166937,166939,167001,167004,167006,167057,167061,167065,167071,167176,167180,167186,167257,167261,167264,167332,167335,167415,167419,167425,167461,167464,167467,167577,167583,167587,167590,167662,167665,167669,167673,167678,167740,167744,167749,167817,167821,167826,167942,167946,167949,168029,168032,168036,168039,168143,168145,168160,168163,168167,168305,168313,168317,168319,168330,168332,168590,168594,168626,168630,168658],[10,166517,166513],{"id":166518},"_7-函数进阶",[803,166520,166522],{"id":166521},"_71-多返回值","7.1 多返回值",[19,166524,166525],{},"Python 函数可以返回多个值，本质上返回的是元组。",[57,166527,166529],{"className":30915,"code":166528,"language":30917,"meta":62,"style":62},"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",[64,166530,166531,166540,166548,166556,166565,166572,166576,166580,166589,166595],{"__ignoreMap":62},[67,166532,166533,166535,166538],{"class":69,"line":70},[67,166534,32484],{"class":73},[67,166536,166537],{"class":112}," get_info",[67,166539,32490],{"class":77},[67,166541,166542,166544,166546],{"class":69,"line":143},[67,166543,152907],{"class":77},[67,166545,909],{"class":73},[67,166547,149890],{"class":84},[67,166549,166550,166552,166554],{"class":69,"line":149},[67,166551,152923],{"class":77},[67,166553,909],{"class":73},[67,166555,147088],{"class":208},[67,166557,166558,166560,166562],{"class":69,"line":155},[67,166559,152938],{"class":77},[67,166561,909],{"class":73},[67,166563,166564],{"class":208}," 95\n",[67,166566,166567,166569],{"class":69,"line":161},[67,166568,4810],{"class":73},[67,166570,166571],{"class":77}," name, age, score\n",[67,166573,166574],{"class":69,"line":167},[67,166575,177],{"emptyLinePlaceholder":176},[67,166577,166578],{"class":69,"line":173},[67,166579,177],{"emptyLinePlaceholder":176},[67,166581,166582,166584,166586],{"class":69,"line":180},[67,166583,161843],{"class":77},[67,166585,909],{"class":73},[67,166587,166588],{"class":77}," get_info()\n",[67,166590,166591,166593],{"class":69,"line":186},[67,166592,30952],{"class":208},[67,166594,77122],{"class":77},[67,166596,166597,166599,166601,166603],{"class":69,"line":444},[67,166598,30952],{"class":208},[67,166600,864],{"class":77},[67,166602,103644],{"class":208},[67,166604,166605],{"class":77},"(result))\n",[19,166607,166608],{},"可以直接解包：",[57,166610,166612],{"className":30915,"code":166611,"language":30917,"meta":62,"style":62},"name, age, score = get_info()\nprint(name, age, score)\n",[64,166613,166614,166623],{"__ignoreMap":62},[67,166615,166616,166619,166621],{"class":69,"line":70},[67,166617,166618],{"class":77},"name, age, score ",[67,166620,909],{"class":73},[67,166622,166588],{"class":77},[67,166624,166625,166627],{"class":69,"line":143},[67,166626,30952],{"class":208},[67,166628,166629],{"class":77},"(name, age, score)\n",[19,166631,166632],{},"返回多个值适合函数需要同时给出多个结果时使用。",[803,166634,166636],{"id":166635},"_72-位置参数","7.2 位置参数",[19,166638,166639],{},"位置参数按顺序传递。",[57,166641,166643],{"className":30915,"code":166642,"language":30917,"meta":62,"style":62},"def introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\n\nintroduce(\"小明\", 18)\n",[64,166644,166645,166653,166681,166685,166689],{"__ignoreMap":62},[67,166646,166647,166649,166651],{"class":69,"line":70},[67,166648,32484],{"class":73},[67,166650,149909],{"class":112},[67,166652,149912],{"class":77},[67,166654,166655,166657,166659,166661,166663,166665,166667,166669,166671,166673,166675,166677,166679],{"class":69,"line":143},[67,166656,31836],{"class":208},[67,166658,864],{"class":77},[67,166660,915],{"class":73},[67,166662,149923],{"class":84},[67,166664,1752],{"class":208},[67,166666,80347],{"class":77},[67,166668,1802],{"class":208},[67,166670,149932],{"class":84},[67,166672,1752],{"class":208},[67,166674,70758],{"class":77},[67,166676,1802],{"class":208},[67,166678,149941],{"class":84},[67,166680,870],{"class":77},[67,166682,166683],{"class":69,"line":149},[67,166684,177],{"emptyLinePlaceholder":176},[67,166686,166687],{"class":69,"line":155},[67,166688,177],{"emptyLinePlaceholder":176},[67,166690,166691,166694,166696,166698,166700],{"class":69,"line":161},[67,166692,166693],{"class":77},"introduce(",[67,166695,150425],{"class":84},[67,166697,13153],{"class":77},[67,166699,1506],{"class":208},[67,166701,870],{"class":77},[19,166703,166704],{},"顺序错了就会得到错误含义：",[57,166706,166708],{"className":30915,"code":166707,"language":30917,"meta":62,"style":62},"introduce(18, \"小明\")\n",[64,166709,166710],{"__ignoreMap":62},[67,166711,166712,166714,166716,166718,166720],{"class":69,"line":70},[67,166713,166693],{"class":77},[67,166715,1506],{"class":208},[67,166717,13153],{"class":77},[67,166719,150425],{"class":84},[67,166721,870],{"class":77},[803,166723,166725],{"id":166724},"_73-关键字参数","7.3 关键字参数",[19,166727,166728],{},"关键字参数按参数名传递。",[57,166730,166732],{"className":30915,"code":166731,"language":30917,"meta":62,"style":62},"introduce(name=\"小明\", age=18)\nintroduce(age=18, name=\"小明\")\n",[64,166733,166734,166754],{"__ignoreMap":62},[67,166735,166736,166738,166740,166742,166744,166746,166748,166750,166752],{"class":69,"line":70},[67,166737,166693],{"class":77},[67,166739,80347],{"class":5935},[67,166741,909],{"class":73},[67,166743,150425],{"class":84},[67,166745,13153],{"class":77},[67,166747,70758],{"class":5935},[67,166749,909],{"class":73},[67,166751,1506],{"class":208},[67,166753,870],{"class":77},[67,166755,166756,166758,166760,166762,166764,166766,166768,166770,166772],{"class":69,"line":143},[67,166757,166693],{"class":77},[67,166759,70758],{"class":5935},[67,166761,909],{"class":73},[67,166763,1506],{"class":208},[67,166765,13153],{"class":77},[67,166767,80347],{"class":5935},[67,166769,909],{"class":73},[67,166771,150425],{"class":84},[67,166773,870],{"class":77},[19,166775,118471],{},[815,166777,166778,166781],{},[818,166779,166780],{},"顺序不容易错。",[818,166782,166783],{},"调用时可读性更强。",[803,166785,166787],{"id":166786},"_74-默认参数","7.4 默认参数",[19,166789,166790],{},"默认参数给参数设置默认值。",[57,166792,166794],{"className":30915,"code":166793,"language":30917,"meta":62,"style":62},"def connect(host, port=3306):\n    print(f\"连接{host}:{port}\")\n\n\nconnect(\"localhost\")\nconnect(\"localhost\", 6379)\n",[64,166795,166796,166812,166842,166846,166850,166860],{"__ignoreMap":62},[67,166797,166798,166800,166802,166805,166807,166810],{"class":69,"line":70},[67,166799,32484],{"class":73},[67,166801,122630],{"class":112},[67,166803,166804],{"class":77},"(host, port",[67,166806,909],{"class":73},[67,166808,166809],{"class":208},"3306",[67,166811,31323],{"class":77},[67,166813,166814,166816,166818,166820,166823,166825,166827,166829,166831,166833,166836,166838,166840],{"class":69,"line":143},[67,166815,31836],{"class":208},[67,166817,864],{"class":77},[67,166819,915],{"class":73},[67,166821,166822],{"class":84},"\"连接",[67,166824,1752],{"class":208},[67,166826,27932],{"class":77},[67,166828,1802],{"class":208},[67,166830,1715],{"class":84},[67,166832,1752],{"class":208},[67,166834,166835],{"class":77},"port",[67,166837,1802],{"class":208},[67,166839,257],{"class":84},[67,166841,870],{"class":77},[67,166843,166844],{"class":69,"line":149},[67,166845,177],{"emptyLinePlaceholder":176},[67,166847,166848],{"class":69,"line":155},[67,166849,177],{"emptyLinePlaceholder":176},[67,166851,166852,166855,166858],{"class":69,"line":161},[67,166853,166854],{"class":77},"connect(",[67,166856,166857],{"class":84},"\"localhost\"",[67,166859,870],{"class":77},[67,166861,166862,166864,166866,166868,166871],{"class":69,"line":167},[67,166863,166854],{"class":77},[67,166865,166857],{"class":84},[67,166867,13153],{"class":77},[67,166869,166870],{"class":208},"6379",[67,166872,870],{"class":77},[19,166874,166875],{},"注意：默认参数必须放在非默认参数后面。",[19,166877,166878],{},"错误：",[57,166880,166882],{"className":30915,"code":166881,"language":30917,"meta":62,"style":62},"def connect(port=3306, host):\n    pass\n",[64,166883,166884,166900],{"__ignoreMap":62},[67,166885,166886,166888,166890,166893,166895,166897],{"class":69,"line":70},[67,166887,32484],{"class":73},[67,166889,122630],{"class":112},[67,166891,166892],{"class":77},"(port",[67,166894,909],{"class":73},[67,166896,166809],{"class":208},[67,166898,166899],{"class":77},", host):\n",[67,166901,166902],{"class":69,"line":143},[67,166903,150074],{"class":73},[19,166905,166906],{},"正确：",[57,166908,166910],{"className":30915,"code":166909,"language":30917,"meta":62,"style":62},"def connect(host, port=3306):\n    pass\n",[64,166911,166912,166926],{"__ignoreMap":62},[67,166913,166914,166916,166918,166920,166922,166924],{"class":69,"line":70},[67,166915,32484],{"class":73},[67,166917,122630],{"class":112},[67,166919,166804],{"class":77},[67,166921,909],{"class":73},[67,166923,166809],{"class":208},[67,166925,31323],{"class":77},[67,166927,166928],{"class":69,"line":143},[67,166929,150074],{"class":73},[803,166931,166933],{"id":166932},"_75-默认参数的坑","7.5 默认参数的坑",[19,166935,166936],{},"不要使用可变对象作为默认参数。",[19,166938,158160],{},[57,166940,166942],{"className":30915,"code":166941,"language":30917,"meta":62,"style":62},"def add_item(item, items=[]):\n    items.append(item)\n    return items\n\n\nprint(add_item(\"a\"))\nprint(add_item(\"b\"))\n",[64,166943,166944,166959,166964,166971,166975,166979,166990],{"__ignoreMap":62},[67,166945,166946,166948,166951,166954,166956],{"class":69,"line":70},[67,166947,32484],{"class":73},[67,166949,166950],{"class":112}," add_item",[67,166952,166953],{"class":77},"(item, items",[67,166955,909],{"class":73},[67,166957,166958],{"class":77},"[]):\n",[67,166960,166961],{"class":69,"line":143},[67,166962,166963],{"class":77},"    items.append(item)\n",[67,166965,166966,166968],{"class":69,"line":149},[67,166967,4810],{"class":73},[67,166969,166970],{"class":77}," items\n",[67,166972,166973],{"class":69,"line":155},[67,166974,177],{"emptyLinePlaceholder":176},[67,166976,166977],{"class":69,"line":161},[67,166978,177],{"emptyLinePlaceholder":176},[67,166980,166981,166983,166986,166988],{"class":69,"line":167},[67,166982,30952],{"class":208},[67,166984,166985],{"class":77},"(add_item(",[67,166987,165862],{"class":84},[67,166989,31034],{"class":77},[67,166991,166992,166994,166996,166999],{"class":69,"line":173},[67,166993,30952],{"class":208},[67,166995,166985],{"class":77},[67,166997,166998],{"class":84},"\"b\"",[67,167000,31034],{"class":77},[19,167002,167003],{},"第二次调用会复用第一次的列表。",[19,167005,156425],{},[57,167007,167009],{"className":30915,"code":167008,"language":30917,"meta":62,"style":62},"def add_item(item, items=None):\n    if items is None:\n        items = []\n    items.append(item)\n    return items\n",[64,167010,167011,167025,167038,167047,167051],{"__ignoreMap":62},[67,167012,167013,167015,167017,167019,167021,167023],{"class":69,"line":70},[67,167014,32484],{"class":73},[67,167016,166950],{"class":112},[67,167018,166953],{"class":77},[67,167020,909],{"class":73},[67,167022,96223],{"class":208},[67,167024,31323],{"class":77},[67,167026,167027,167029,167032,167034,167036],{"class":69,"line":143},[67,167028,3821],{"class":73},[67,167030,167031],{"class":77}," items ",[67,167033,39464],{"class":73},[67,167035,39470],{"class":208},[67,167037,4459],{"class":77},[67,167039,167040,167043,167045],{"class":69,"line":149},[67,167041,167042],{"class":77},"        items ",[67,167044,909],{"class":73},[67,167046,52375],{"class":77},[67,167048,167049],{"class":69,"line":155},[67,167050,166963],{"class":77},[67,167052,167053,167055],{"class":69,"line":161},[67,167054,4810],{"class":73},[67,167056,166970],{"class":77},[803,167058,167060],{"id":167059},"_76-不定长参数","7.6 不定长参数",[14,167062,167064],{"id":167063},"_761-args","7.6.1 *args",[19,167066,167067,167070],{},[64,167068,167069],{},"*args"," 接收任意数量的位置参数，得到元组。",[57,167072,167074],{"className":30915,"code":167073,"language":30917,"meta":62,"style":62},"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",[64,167075,167076,167089,167097,167108,167117,167123,167127,167131,167150],{"__ignoreMap":62},[67,167077,167078,167080,167082,167084,167086],{"class":69,"line":70},[67,167079,32484],{"class":73},[67,167081,5928],{"class":112},[67,167083,864],{"class":77},[67,167085,1312],{"class":73},[67,167087,167088],{"class":77},"args):\n",[67,167090,167091,167093,167095],{"class":69,"line":143},[67,167092,159844],{"class":77},[67,167094,909],{"class":73},[67,167096,47870],{"class":208},[67,167098,167099,167101,167103,167105],{"class":69,"line":149},[67,167100,3921],{"class":73},[67,167102,156717],{"class":77},[67,167104,81],{"class":73},[67,167106,167107],{"class":77}," args:\n",[67,167109,167110,167112,167114],{"class":69,"line":155},[67,167111,160519],{"class":77},[67,167113,10196],{"class":73},[67,167115,167116],{"class":77}," num\n",[67,167118,167119,167121],{"class":69,"line":161},[67,167120,4810],{"class":73},[67,167122,162824],{"class":77},[67,167124,167125],{"class":69,"line":167},[67,167126,177],{"emptyLinePlaceholder":176},[67,167128,167129],{"class":69,"line":173},[67,167130,177],{"emptyLinePlaceholder":176},[67,167132,167133,167135,167138,167140,167142,167144,167146,167148],{"class":69,"line":180},[67,167134,30952],{"class":208},[67,167136,167137],{"class":77},"(add(",[67,167139,1077],{"class":208},[67,167141,13153],{"class":77},[67,167143,939],{"class":208},[67,167145,13153],{"class":77},[67,167147,933],{"class":208},[67,167149,31034],{"class":77},[67,167151,167152,167154,167156,167158,167160,167162,167164,167166,167168,167170,167172,167174],{"class":69,"line":186},[67,167153,30952],{"class":208},[67,167155,167137],{"class":77},[67,167157,1077],{"class":208},[67,167159,13153],{"class":77},[67,167161,939],{"class":208},[67,167163,13153],{"class":77},[67,167165,933],{"class":208},[67,167167,13153],{"class":77},[67,167169,1151],{"class":208},[67,167171,13153],{"class":77},[67,167173,1177],{"class":208},[67,167175,31034],{"class":77},[14,167177,167179],{"id":167178},"_762-kwargs","7.6.2 **kwargs",[19,167181,167182,167185],{},[64,167183,167184],{},"**kwargs"," 接收任意数量的关键字参数，得到字典。",[57,167187,167189],{"className":30915,"code":167188,"language":30917,"meta":62,"style":62},"def print_info(**kwargs):\n    for key, value in kwargs.items():\n        print(key, value)\n\n\nprint_info(name=\"小明\", age=18, city=\"北京\")\n",[64,167190,167191,167204,167215,167221,167225,167229],{"__ignoreMap":62},[67,167192,167193,167195,167197,167199,167201],{"class":69,"line":70},[67,167194,32484],{"class":73},[67,167196,162482],{"class":112},[67,167198,864],{"class":77},[67,167200,11379],{"class":73},[67,167202,167203],{"class":77},"kwargs):\n",[67,167205,167206,167208,167210,167212],{"class":69,"line":143},[67,167207,3921],{"class":73},[67,167209,165322],{"class":77},[67,167211,81],{"class":73},[67,167213,167214],{"class":77}," kwargs.items():\n",[67,167216,167217,167219],{"class":69,"line":149},[67,167218,32988],{"class":208},[67,167220,165334],{"class":77},[67,167222,167223],{"class":69,"line":155},[67,167224,177],{"emptyLinePlaceholder":176},[67,167226,167227],{"class":69,"line":161},[67,167228,177],{"emptyLinePlaceholder":176},[67,167230,167231,167233,167235,167237,167239,167241,167243,167245,167247,167249,167251,167253,167255],{"class":69,"line":167},[67,167232,162547],{"class":77},[67,167234,80347],{"class":5935},[67,167236,909],{"class":73},[67,167238,150425],{"class":84},[67,167240,13153],{"class":77},[67,167242,70758],{"class":5935},[67,167244,909],{"class":73},[67,167246,1506],{"class":208},[67,167248,13153],{"class":77},[67,167250,70809],{"class":5935},[67,167252,909],{"class":73},[67,167254,69806],{"class":84},[67,167256,870],{"class":77},[803,167258,167260],{"id":167259},"_77-参数解包","7.7 参数解包",[19,167262,167263],{},"列表或元组解包为位置参数：",[57,167265,167267],{"className":30915,"code":167266,"language":30917,"meta":62,"style":62},"def add(a, b, c):\n    return a + b + c\n\n\nnums = [1, 2, 3]\nprint(add(*nums))\n",[64,167268,167269,167278,167293,167297,167301,167321],{"__ignoreMap":62},[67,167270,167271,167273,167275],{"class":69,"line":70},[67,167272,32484],{"class":73},[67,167274,5928],{"class":112},[67,167276,167277],{"class":77},"(a, b, c):\n",[67,167279,167280,167282,167284,167286,167288,167290],{"class":69,"line":143},[67,167281,4810],{"class":73},[67,167283,11587],{"class":77},[67,167285,1338],{"class":73},[67,167287,11600],{"class":77},[67,167289,1338],{"class":73},[67,167291,167292],{"class":77}," c\n",[67,167294,167295],{"class":69,"line":149},[67,167296,177],{"emptyLinePlaceholder":176},[67,167298,167299],{"class":69,"line":155},[67,167300,177],{"emptyLinePlaceholder":176},[67,167302,167303,167305,167307,167309,167311,167313,167315,167317,167319],{"class":69,"line":161},[67,167304,164637],{"class":77},[67,167306,909],{"class":73},[67,167308,52763],{"class":77},[67,167310,1077],{"class":208},[67,167312,13153],{"class":77},[67,167314,939],{"class":208},[67,167316,13153],{"class":77},[67,167318,933],{"class":208},[67,167320,33783],{"class":77},[67,167322,167323,167325,167327,167329],{"class":69,"line":167},[67,167324,30952],{"class":208},[67,167326,167137],{"class":77},[67,167328,1312],{"class":73},[67,167330,167331],{"class":77},"nums))\n",[19,167333,167334],{},"字典解包为关键字参数：",[57,167336,167338],{"className":30915,"code":167337,"language":30917,"meta":62,"style":62},"def introduce(name, age):\n    print(f\"{name} {age}\")\n\n\ninfo = {\"name\": \"小明\", \"age\": 18}\nintroduce(**info)\n",[64,167339,167340,167348,167374,167378,167382,167406],{"__ignoreMap":62},[67,167341,167342,167344,167346],{"class":69,"line":70},[67,167343,32484],{"class":73},[67,167345,149909],{"class":112},[67,167347,149912],{"class":77},[67,167349,167350,167352,167354,167356,167358,167360,167362,167364,167366,167368,167370,167372],{"class":69,"line":143},[67,167351,31836],{"class":208},[67,167353,864],{"class":77},[67,167355,915],{"class":73},[67,167357,257],{"class":84},[67,167359,1752],{"class":208},[67,167361,80347],{"class":77},[67,167363,1802],{"class":208},[67,167365,5167],{"class":208},[67,167367,70758],{"class":77},[67,167369,1802],{"class":208},[67,167371,257],{"class":84},[67,167373,870],{"class":77},[67,167375,167376],{"class":69,"line":149},[67,167377,177],{"emptyLinePlaceholder":176},[67,167379,167380],{"class":69,"line":155},[67,167381,177],{"emptyLinePlaceholder":176},[67,167383,167384,167386,167388,167390,167392,167394,167396,167398,167400,167402,167404],{"class":69,"line":161},[67,167385,116851],{"class":77},[67,167387,909],{"class":73},[67,167389,5167],{"class":77},[67,167391,63216],{"class":84},[67,167393,51974],{"class":77},[67,167395,150425],{"class":84},[67,167397,13153],{"class":77},[67,167399,69661],{"class":84},[67,167401,51974],{"class":77},[67,167403,1506],{"class":208},[67,167405,2288],{"class":77},[67,167407,167408,167410,167412],{"class":69,"line":167},[67,167409,166693],{"class":77},[67,167411,11379],{"class":73},[67,167413,167414],{"class":77},"info)\n",[803,167416,167418],{"id":167417},"_78-匿名函数lambda","7.8 匿名函数lambda",[19,167420,167421,167424],{},[64,167422,167423],{},"lambda"," 用于定义简单匿名函数。",[57,167426,167428],{"className":30915,"code":167427,"language":30917,"meta":62,"style":62},"add = lambda a, b: a + b\nprint(add(1, 2))\n",[64,167429,167430,167447],{"__ignoreMap":62},[67,167431,167432,167435,167437,167440,167443,167445],{"class":69,"line":70},[67,167433,167434],{"class":77},"add ",[67,167436,909],{"class":73},[67,167438,167439],{"class":73}," lambda",[67,167441,167442],{"class":77}," a, b: a ",[67,167444,1338],{"class":73},[67,167446,151641],{"class":77},[67,167448,167449,167451,167453,167455,167457,167459],{"class":69,"line":143},[67,167450,30952],{"class":208},[67,167452,167137],{"class":77},[67,167454,1077],{"class":208},[67,167456,13153],{"class":77},[67,167458,939],{"class":208},[67,167460,31034],{"class":77},[19,167462,167463],{},"常和排序、过滤等函数一起使用。",[19,167465,167466],{},"按分数排序：",[57,167468,167470],{"className":30915,"code":167469,"language":30917,"meta":62,"style":62},"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",[64,167471,167472,167480,167500,167520,167540,167544,167548,167571],{"__ignoreMap":62},[67,167473,167474,167476,167478],{"class":69,"line":70},[67,167475,160253],{"class":77},[67,167477,909],{"class":73},[67,167479,55984],{"class":77},[67,167481,167482,167484,167486,167488,167490,167492,167494,167496,167498],{"class":69,"line":143},[67,167483,148922],{"class":77},[67,167485,63216],{"class":84},[67,167487,51974],{"class":77},[67,167489,150425],{"class":84},[67,167491,13153],{"class":77},[67,167493,152009],{"class":84},[67,167495,51974],{"class":77},[67,167497,1845],{"class":208},[67,167499,5649],{"class":77},[67,167501,167502,167504,167506,167508,167510,167512,167514,167516,167518],{"class":69,"line":149},[67,167503,148922],{"class":77},[67,167505,63216],{"class":84},[67,167507,51974],{"class":77},[67,167509,151473],{"class":84},[67,167511,13153],{"class":77},[67,167513,152009],{"class":84},[67,167515,51974],{"class":77},[67,167517,1667],{"class":208},[67,167519,5649],{"class":77},[67,167521,167522,167524,167526,167528,167530,167532,167534,167536,167538],{"class":69,"line":155},[67,167523,148922],{"class":77},[67,167525,63216],{"class":84},[67,167527,51974],{"class":77},[67,167529,160268],{"class":84},[67,167531,13153],{"class":77},[67,167533,152009],{"class":84},[67,167535,51974],{"class":77},[67,167537,1264],{"class":208},[67,167539,5649],{"class":77},[67,167541,167542],{"class":69,"line":161},[67,167543,33783],{"class":77},[67,167545,167546],{"class":69,"line":167},[67,167547,177],{"emptyLinePlaceholder":176},[67,167549,167550,167553,167555,167557,167559,167561,167563,167565,167567,167569],{"class":69,"line":173},[67,167551,167552],{"class":77},"students.sort(",[67,167554,154483],{"class":5935},[67,167556,154486],{"class":73},[67,167558,154489],{"class":77},[67,167560,152009],{"class":84},[67,167562,112739],{"class":77},[67,167564,164065],{"class":5935},[67,167566,909],{"class":73},[67,167568,32013],{"class":208},[67,167570,870],{"class":77},[67,167572,167573,167575],{"class":69,"line":180},[67,167574,30952],{"class":208},[67,167576,165532],{"class":77},[19,167578,167579,167580,167582],{},"如果逻辑复杂，不要硬写 ",[64,167581,167423],{},"，定义普通函数更清晰。",[803,167584,167586],{"id":167585},"_79-函数作为参数","7.9 函数作为参数",[19,167588,167589],{},"函数可以作为参数传给另一个函数。",[57,167591,167593],{"className":30915,"code":167592,"language":30917,"meta":62,"style":62},"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",[64,167594,167595,167603,167613,167617,167621,167631,167638,167642,167646],{"__ignoreMap":62},[67,167596,167597,167599,167601],{"class":69,"line":70},[67,167598,32484],{"class":73},[67,167600,5928],{"class":112},[67,167602,151630],{"class":77},[67,167604,167605,167607,167609,167611],{"class":69,"line":143},[67,167606,4810],{"class":73},[67,167608,11587],{"class":77},[67,167610,1338],{"class":73},[67,167612,151641],{"class":77},[67,167614,167615],{"class":69,"line":149},[67,167616,177],{"emptyLinePlaceholder":176},[67,167618,167619],{"class":69,"line":155},[67,167620,177],{"emptyLinePlaceholder":176},[67,167622,167623,167625,167628],{"class":69,"line":161},[67,167624,32484],{"class":73},[67,167626,167627],{"class":112}," calculate",[67,167629,167630],{"class":77},"(a, b, func):\n",[67,167632,167633,167635],{"class":69,"line":167},[67,167634,4810],{"class":73},[67,167636,167637],{"class":77}," func(a, b)\n",[67,167639,167640],{"class":69,"line":173},[67,167641,177],{"emptyLinePlaceholder":176},[67,167643,167644],{"class":69,"line":180},[67,167645,177],{"emptyLinePlaceholder":176},[67,167647,167648,167650,167653,167655,167657,167659],{"class":69,"line":186},[67,167649,30952],{"class":208},[67,167651,167652],{"class":77},"(calculate(",[67,167654,1303],{"class":208},[67,167656,13153],{"class":77},[67,167658,1556],{"class":208},[67,167660,167661],{"class":77},", add))\n",[19,167663,167664],{},"这种思想在排序、回调、框架中经常出现。",[803,167666,167668],{"id":167667},"_710-mapfiltersorted","7.10 map、filter、sorted",[14,167670,167672],{"id":167671},"_7101-map","7.10.1 map",[19,167674,167675,167677],{},[64,167676,74581],{}," 对每个元素执行函数。",[57,167679,167681],{"className":30915,"code":167680,"language":30917,"meta":62,"style":62},"nums = [1, 2, 3, 4]\nresult = map(lambda x: x * 2, nums)\nprint(list(result))\n",[64,167682,167683,167707,167730],{"__ignoreMap":62},[67,167684,167685,167687,167689,167691,167693,167695,167697,167699,167701,167703,167705],{"class":69,"line":70},[67,167686,164637],{"class":77},[67,167688,909],{"class":73},[67,167690,52763],{"class":77},[67,167692,1077],{"class":208},[67,167694,13153],{"class":77},[67,167696,939],{"class":208},[67,167698,13153],{"class":77},[67,167700,933],{"class":208},[67,167702,13153],{"class":77},[67,167704,1151],{"class":208},[67,167706,33783],{"class":77},[67,167708,167709,167711,167713,167716,167718,167720,167723,167725,167727],{"class":69,"line":143},[67,167710,161843],{"class":77},[67,167712,909],{"class":73},[67,167714,167715],{"class":208}," map",[67,167717,864],{"class":77},[67,167719,167423],{"class":73},[67,167721,167722],{"class":77}," x: x ",[67,167724,1312],{"class":73},[67,167726,15472],{"class":208},[67,167728,167729],{"class":77},", nums)\n",[67,167731,167732,167734,167736,167738],{"class":69,"line":149},[67,167733,30952],{"class":208},[67,167735,864],{"class":77},[67,167737,154607],{"class":208},[67,167739,166605],{"class":77},[14,167741,167743],{"id":167742},"_7102-filter","7.10.2 filter",[19,167745,167746,167748],{},[64,167747,80588],{}," 保留满足条件的元素。",[57,167750,167752],{"className":30915,"code":167751,"language":30917,"meta":62,"style":62},"nums = [1, 2, 3, 4, 5]\nresult = filter(lambda x: x % 2 == 0, nums)\nprint(list(result))\n",[64,167753,167754,167782,167807],{"__ignoreMap":62},[67,167755,167756,167758,167760,167762,167764,167766,167768,167770,167772,167774,167776,167778,167780],{"class":69,"line":70},[67,167757,164637],{"class":77},[67,167759,909],{"class":73},[67,167761,52763],{"class":77},[67,167763,1077],{"class":208},[67,167765,13153],{"class":77},[67,167767,939],{"class":208},[67,167769,13153],{"class":77},[67,167771,933],{"class":208},[67,167773,13153],{"class":77},[67,167775,1151],{"class":208},[67,167777,13153],{"class":77},[67,167779,1177],{"class":208},[67,167781,33783],{"class":77},[67,167783,167784,167786,167788,167791,167793,167795,167797,167799,167801,167803,167805],{"class":69,"line":143},[67,167785,161843],{"class":77},[67,167787,909],{"class":73},[67,167789,167790],{"class":208}," filter",[67,167792,864],{"class":77},[67,167794,167423],{"class":73},[67,167796,167722],{"class":77},[67,167798,1186],{"class":73},[67,167800,15472],{"class":208},[67,167802,102096],{"class":73},[67,167804,4813],{"class":208},[67,167806,167729],{"class":77},[67,167808,167809,167811,167813,167815],{"class":69,"line":149},[67,167810,30952],{"class":208},[67,167812,864],{"class":77},[67,167814,154607],{"class":208},[67,167816,166605],{"class":77},[14,167818,167820],{"id":167819},"_7103-sorted","7.10.3 sorted",[19,167822,167823,167825],{},[64,167824,165773],{}," 返回排序后的新列表。",[57,167827,167829],{"className":30915,"code":167828,"language":30917,"meta":62,"style":62},"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",[64,167830,167831,167839,167859,167879,167899,167903,167907,167936],{"__ignoreMap":62},[67,167832,167833,167835,167837],{"class":69,"line":70},[67,167834,160253],{"class":77},[67,167836,909],{"class":73},[67,167838,55984],{"class":77},[67,167840,167841,167843,167845,167847,167849,167851,167853,167855,167857],{"class":69,"line":143},[67,167842,148922],{"class":77},[67,167844,63216],{"class":84},[67,167846,51974],{"class":77},[67,167848,150425],{"class":84},[67,167850,13153],{"class":77},[67,167852,152009],{"class":84},[67,167854,51974],{"class":77},[67,167856,1845],{"class":208},[67,167858,5649],{"class":77},[67,167860,167861,167863,167865,167867,167869,167871,167873,167875,167877],{"class":69,"line":149},[67,167862,148922],{"class":77},[67,167864,63216],{"class":84},[67,167866,51974],{"class":77},[67,167868,151473],{"class":84},[67,167870,13153],{"class":77},[67,167872,152009],{"class":84},[67,167874,51974],{"class":77},[67,167876,1667],{"class":208},[67,167878,5649],{"class":77},[67,167880,167881,167883,167885,167887,167889,167891,167893,167895,167897],{"class":69,"line":155},[67,167882,148922],{"class":77},[67,167884,63216],{"class":84},[67,167886,51974],{"class":77},[67,167888,160268],{"class":84},[67,167890,13153],{"class":77},[67,167892,152009],{"class":84},[67,167894,51974],{"class":77},[67,167896,1264],{"class":208},[67,167898,5649],{"class":77},[67,167900,167901],{"class":69,"line":161},[67,167902,33783],{"class":77},[67,167904,167905],{"class":69,"line":167},[67,167906,177],{"emptyLinePlaceholder":176},[67,167908,167909,167911,167913,167915,167918,167920,167922,167924,167926,167928,167930,167932,167934],{"class":69,"line":173},[67,167910,161843],{"class":77},[67,167912,909],{"class":73},[67,167914,164141],{"class":208},[67,167916,167917],{"class":77},"(students, ",[67,167919,154483],{"class":5935},[67,167921,154486],{"class":73},[67,167923,154489],{"class":77},[67,167925,152009],{"class":84},[67,167927,112739],{"class":77},[67,167929,164065],{"class":5935},[67,167931,909],{"class":73},[67,167933,32013],{"class":208},[67,167935,870],{"class":77},[67,167937,167938,167940],{"class":69,"line":180},[67,167939,30952],{"class":208},[67,167941,77122],{"class":77},[803,167943,167945],{"id":167944},"_711-闭包入门","7.11 闭包入门",[19,167947,167948],{},"闭包指内部函数使用了外部函数的变量，并且外部函数返回内部函数。",[57,167950,167952],{"className":30915,"code":167951,"language":30917,"meta":62,"style":62},"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",[64,167953,167954,167964,167974,167985,167989,167996,168000,168004,168018],{"__ignoreMap":62},[67,167955,167956,167958,167961],{"class":69,"line":70},[67,167957,32484],{"class":73},[67,167959,167960],{"class":112}," outer",[67,167962,167963],{"class":77},"(base):\n",[67,167965,167966,167968,167971],{"class":69,"line":143},[67,167967,31338],{"class":73},[67,167969,167970],{"class":112}," inner",[67,167972,167973],{"class":77},"(num):\n",[67,167975,167976,167978,167981,167983],{"class":69,"line":149},[67,167977,15469],{"class":73},[67,167979,167980],{"class":77}," base ",[67,167982,1338],{"class":73},[67,167984,167116],{"class":77},[67,167986,167987],{"class":69,"line":155},[67,167988,177],{"emptyLinePlaceholder":176},[67,167990,167991,167993],{"class":69,"line":161},[67,167992,4810],{"class":73},[67,167994,167995],{"class":77}," inner\n",[67,167997,167998],{"class":69,"line":167},[67,167999,177],{"emptyLinePlaceholder":176},[67,168001,168002],{"class":69,"line":173},[67,168003,177],{"emptyLinePlaceholder":176},[67,168005,168006,168009,168011,168014,168016],{"class":69,"line":180},[67,168007,168008],{"class":77},"add_10 ",[67,168010,909],{"class":73},[67,168012,168013],{"class":77}," outer(",[67,168015,1303],{"class":208},[67,168017,870],{"class":77},[67,168019,168020,168022,168025,168027],{"class":69,"line":186},[67,168021,30952],{"class":208},[67,168023,168024],{"class":77},"(add_10(",[67,168026,1177],{"class":208},[67,168028,31034],{"class":77},[19,168030,168031],{},"闭包常用于保存状态、构造函数工厂。入门阶段了解即可。",[803,168033,168035],{"id":168034},"_712-装饰器入门","7.12 装饰器入门",[19,168037,168038],{},"装饰器用于在不修改原函数代码的情况下，给函数增加功能。",[57,168040,168042],{"className":30915,"code":168041,"language":30917,"meta":62,"style":62},"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",[64,168043,168044,168053,168062,168073,168078,168089,168093,168100,168104,168108,168113,168121,168131,168135,168139],{"__ignoreMap":62},[67,168045,168046,168048,168050],{"class":69,"line":70},[67,168047,32484],{"class":73},[67,168049,87728],{"class":112},[67,168051,168052],{"class":77},"(func):\n",[67,168054,168055,168057,168060],{"class":69,"line":143},[67,168056,31338],{"class":73},[67,168058,168059],{"class":112}," wrapper",[67,168061,32490],{"class":77},[67,168063,168064,168066,168068,168071],{"class":69,"line":149},[67,168065,32988],{"class":208},[67,168067,864],{"class":77},[67,168069,168070],{"class":84},"\"函数开始执行\"",[67,168072,870],{"class":77},[67,168074,168075],{"class":69,"line":155},[67,168076,168077],{"class":77},"        func()\n",[67,168079,168080,168082,168084,168087],{"class":69,"line":161},[67,168081,32988],{"class":208},[67,168083,864],{"class":77},[67,168085,168086],{"class":84},"\"函数执行结束\"",[67,168088,870],{"class":77},[67,168090,168091],{"class":69,"line":167},[67,168092,177],{"emptyLinePlaceholder":176},[67,168094,168095,168097],{"class":69,"line":173},[67,168096,4810],{"class":73},[67,168098,168099],{"class":77}," wrapper\n",[67,168101,168102],{"class":69,"line":180},[67,168103,177],{"emptyLinePlaceholder":176},[67,168105,168106],{"class":69,"line":186},[67,168107,177],{"emptyLinePlaceholder":176},[67,168109,168110],{"class":69,"line":444},[67,168111,168112],{"class":112},"@log\n",[67,168114,168115,168117,168119],{"class":69,"line":2335},[67,168116,32484],{"class":73},[67,168118,161533],{"class":112},[67,168120,32490],{"class":77},[67,168122,168123,168125,168127,168129],{"class":69,"line":2340},[67,168124,31836],{"class":208},[67,168126,864],{"class":77},[67,168128,6563],{"class":84},[67,168130,870],{"class":77},[67,168132,168133],{"class":69,"line":2346},[67,168134,177],{"emptyLinePlaceholder":176},[67,168136,168137],{"class":69,"line":2351},[67,168138,177],{"emptyLinePlaceholder":176},[67,168140,168141],{"class":69,"line":2365},[67,168142,161568],{"class":77},[19,168144,158811],{},[57,168146,168148],{"className":30915,"code":168147,"language":30917,"meta":62,"style":62},"say_hello = log(say_hello)\n",[64,168149,168150],{"__ignoreMap":62},[67,168151,168152,168155,168157],{"class":69,"line":70},[67,168153,168154],{"class":77},"say_hello ",[67,168156,909],{"class":73},[67,168158,168159],{"class":77}," log(say_hello)\n",[19,168161,168162],{},"装饰器在 Web 框架、权限校验、日志统计中很常见。",[803,168164,168166],{"id":168165},"_713-带参数函数的装饰器","7.13 带参数函数的装饰器",[57,168168,168170],{"className":30915,"code":168169,"language":30917,"meta":62,"style":62},"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",[64,168171,168172,168180,168197,168207,168226,168236,168243,168247,168253,168257,168261,168265,168273,168283,168287,168291],{"__ignoreMap":62},[67,168173,168174,168176,168178],{"class":69,"line":70},[67,168175,32484],{"class":73},[67,168177,87728],{"class":112},[67,168179,168052],{"class":77},[67,168181,168182,168184,168186,168188,168190,168193,168195],{"class":69,"line":143},[67,168183,31338],{"class":73},[67,168185,168059],{"class":112},[67,168187,864],{"class":77},[67,168189,1312],{"class":73},[67,168191,168192],{"class":77},"args, ",[67,168194,11379],{"class":73},[67,168196,167203],{"class":77},[67,168198,168199,168201,168203,168205],{"class":69,"line":149},[67,168200,32988],{"class":208},[67,168202,864],{"class":77},[67,168204,168070],{"class":84},[67,168206,870],{"class":77},[67,168208,168209,168212,168214,168217,168219,168221,168223],{"class":69,"line":155},[67,168210,168211],{"class":77},"        result ",[67,168213,909],{"class":73},[67,168215,168216],{"class":77}," func(",[67,168218,1312],{"class":73},[67,168220,168192],{"class":77},[67,168222,11379],{"class":73},[67,168224,168225],{"class":77},"kwargs)\n",[67,168227,168228,168230,168232,168234],{"class":69,"line":161},[67,168229,32988],{"class":208},[67,168231,864],{"class":77},[67,168233,168086],{"class":84},[67,168235,870],{"class":77},[67,168237,168238,168240],{"class":69,"line":167},[67,168239,15469],{"class":73},[67,168241,168242],{"class":77}," result\n",[67,168244,168245],{"class":69,"line":173},[67,168246,177],{"emptyLinePlaceholder":176},[67,168248,168249,168251],{"class":69,"line":180},[67,168250,4810],{"class":73},[67,168252,168099],{"class":77},[67,168254,168255],{"class":69,"line":186},[67,168256,177],{"emptyLinePlaceholder":176},[67,168258,168259],{"class":69,"line":444},[67,168260,177],{"emptyLinePlaceholder":176},[67,168262,168263],{"class":69,"line":2335},[67,168264,168112],{"class":112},[67,168266,168267,168269,168271],{"class":69,"line":2340},[67,168268,32484],{"class":73},[67,168270,5928],{"class":112},[67,168272,151630],{"class":77},[67,168274,168275,168277,168279,168281],{"class":69,"line":2346},[67,168276,4810],{"class":73},[67,168278,11587],{"class":77},[67,168280,1338],{"class":73},[67,168282,151641],{"class":77},[67,168284,168285],{"class":69,"line":2351},[67,168286,177],{"emptyLinePlaceholder":176},[67,168288,168289],{"class":69,"line":2365},[67,168290,177],{"emptyLinePlaceholder":176},[67,168292,168293,168295,168297,168299,168301,168303],{"class":69,"line":2370},[67,168294,30952],{"class":208},[67,168296,167137],{"class":77},[67,168298,1303],{"class":208},[67,168300,13153],{"class":77},[67,168302,1556],{"class":208},[67,168304,31034],{"class":77},[19,168306,168307,168308,101555,168310,168312],{},"这个写法使用 ",[64,168309,167069],{},[64,168311,167184],{}," 接收原函数的所有参数。",[803,168314,168316],{"id":168315},"_714-小案例通用统计函数","7.14 小案例：通用统计函数",[19,168318,123829],{},[815,168320,168321,168324,168327],{},[818,168322,168323],{},"给定一组学生数据。",[818,168325,168326],{},"封装函数，根据传入规则筛选学生。",[818,168328,168329],{},"筛选及格、优秀、未成年学生。",[19,168331,10753],{},[57,168333,168335],{"className":30915,"code":168334,"language":30917,"meta":62,"style":62},"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",[64,168336,168337,168345,168373,168401,168429,168433,168437,168441,168451,168459,168469,168476,168481,168487,168491,168495,168519,168542,168565,168569,168576,168583],{"__ignoreMap":62},[67,168338,168339,168341,168343],{"class":69,"line":70},[67,168340,160253],{"class":77},[67,168342,909],{"class":73},[67,168344,55984],{"class":77},[67,168346,168347,168349,168351,168353,168355,168357,168359,168361,168363,168365,168367,168369,168371],{"class":69,"line":143},[67,168348,148922],{"class":77},[67,168350,63216],{"class":84},[67,168352,51974],{"class":77},[67,168354,150425],{"class":84},[67,168356,13153],{"class":77},[67,168358,69661],{"class":84},[67,168360,51974],{"class":77},[67,168362,1506],{"class":208},[67,168364,13153],{"class":77},[67,168366,152009],{"class":84},[67,168368,51974],{"class":77},[67,168370,1845],{"class":208},[67,168372,5649],{"class":77},[67,168374,168375,168377,168379,168381,168383,168385,168387,168389,168391,168393,168395,168397,168399],{"class":69,"line":149},[67,168376,148922],{"class":77},[67,168378,63216],{"class":84},[67,168380,51974],{"class":77},[67,168382,151473],{"class":84},[67,168384,13153],{"class":77},[67,168386,69661],{"class":84},[67,168388,51974],{"class":77},[67,168390,1481],{"class":208},[67,168392,13153],{"class":77},[67,168394,152009],{"class":84},[67,168396,51974],{"class":77},[67,168398,1667],{"class":208},[67,168400,5649],{"class":77},[67,168402,168403,168405,168407,168409,168411,168413,168415,168417,168419,168421,168423,168425,168427],{"class":69,"line":155},[67,168404,148922],{"class":77},[67,168406,63216],{"class":84},[67,168408,51974],{"class":77},[67,168410,160268],{"class":84},[67,168412,13153],{"class":77},[67,168414,69661],{"class":84},[67,168416,51974],{"class":77},[67,168418,1531],{"class":208},[67,168420,13153],{"class":77},[67,168422,152009],{"class":84},[67,168424,51974],{"class":77},[67,168426,1738],{"class":208},[67,168428,5649],{"class":77},[67,168430,168431],{"class":69,"line":161},[67,168432,33783],{"class":77},[67,168434,168435],{"class":69,"line":167},[67,168436,177],{"emptyLinePlaceholder":176},[67,168438,168439],{"class":69,"line":173},[67,168440,177],{"emptyLinePlaceholder":176},[67,168442,168443,168445,168448],{"class":69,"line":180},[67,168444,32484],{"class":73},[67,168446,168447],{"class":112}," filter_students",[67,168449,168450],{"class":77},"(students, condition):\n",[67,168452,168453,168455,168457],{"class":69,"line":186},[67,168454,161760],{"class":77},[67,168456,909],{"class":73},[67,168458,52375],{"class":77},[67,168460,168461,168463,168465,168467],{"class":69,"line":444},[67,168462,3921],{"class":73},[67,168464,152674],{"class":77},[67,168466,81],{"class":73},[67,168468,152679],{"class":77},[67,168470,168471,168473],{"class":69,"line":2335},[67,168472,3218],{"class":73},[67,168474,168475],{"class":77}," condition(student):\n",[67,168477,168478],{"class":69,"line":2340},[67,168479,168480],{"class":77},"            result.append(student)\n",[67,168482,168483,168485],{"class":69,"line":2346},[67,168484,4810],{"class":73},[67,168486,168242],{"class":77},[67,168488,168489],{"class":69,"line":2351},[67,168490,177],{"emptyLinePlaceholder":176},[67,168492,168493],{"class":69,"line":2365},[67,168494,177],{"emptyLinePlaceholder":176},[67,168496,168497,168499,168501,168504,168506,168509,168511,168513,168515,168517],{"class":69,"line":2370},[67,168498,166238],{"class":77},[67,168500,909],{"class":73},[67,168502,168503],{"class":77}," filter_students(students, ",[67,168505,167423],{"class":73},[67,168507,168508],{"class":77}," s: s[",[67,168510,152009],{"class":84},[67,168512,5162],{"class":77},[67,168514,2433],{"class":73},[67,168516,158374],{"class":208},[67,168518,870],{"class":77},[67,168520,168521,168524,168526,168528,168530,168532,168534,168536,168538,168540],{"class":69,"line":2376},[67,168522,168523],{"class":77},"excellent ",[67,168525,909],{"class":73},[67,168527,168503],{"class":77},[67,168529,167423],{"class":73},[67,168531,168508],{"class":77},[67,168533,152009],{"class":84},[67,168535,5162],{"class":77},[67,168537,2433],{"class":73},[67,168539,158325],{"class":208},[67,168541,870],{"class":77},[67,168543,168544,168547,168549,168551,168553,168555,168557,168559,168561,168563],{"class":69,"line":2397},[67,168545,168546],{"class":77},"under_age ",[67,168548,909],{"class":73},[67,168550,168503],{"class":77},[67,168552,167423],{"class":73},[67,168554,168508],{"class":77},[67,168556,69661],{"class":84},[67,168558,5162],{"class":77},[67,168560,1766],{"class":73},[67,168562,156822],{"class":208},[67,168564,870],{"class":77},[67,168566,168567],{"class":69,"line":2402},[67,168568,177],{"emptyLinePlaceholder":176},[67,168570,168571,168573],{"class":69,"line":2416},[67,168572,30952],{"class":208},[67,168574,168575],{"class":77},"(passed)\n",[67,168577,168578,168580],{"class":69,"line":2421},[67,168579,30952],{"class":208},[67,168581,168582],{"class":77},"(excellent)\n",[67,168584,168585,168587],{"class":69,"line":2450},[67,168586,30952],{"class":208},[67,168588,168589],{"class":77},"(under_age)\n",[803,168591,168593],{"id":168592},"_715-易错点","7.15 易错点",[815,168595,168596,168599,168607,168612,168623],{},[818,168597,168598],{},"默认参数不要写可变对象。",[818,168600,168601,168603,168604,168606],{},[64,168602,167069],{}," 是元组，",[64,168605,167184],{}," 是字典。",[818,168608,168609,168611],{},[64,168610,167423],{}," 只适合简单表达式。",[818,168613,168614,101555,168616,168618,168619,168622],{},[64,168615,74581],{},[64,168617,80588],{}," 的结果是迭代器，常用 ",[64,168620,168621],{},"list()"," 转换查看。",[818,168624,168625],{},"装饰器会改变函数调用链，初学时先理解执行顺序。",[803,168627,168629],{"id":168628},"_716-本章练习","7.16 本章练习",[815,168631,168632,168639,168645,168650,168655],{},[818,168633,168634,168635,168638],{},"写函数 ",[64,168636,168637],{},"calc(*args)","，返回所有数字的和、最大值、最小值。",[818,168640,168634,168641,168644],{},[64,168642,168643],{},"print_user(**kwargs)","，输出用户所有字段。",[818,168646,104903,168647,168649],{},[64,168648,167423],{}," 对学生列表按年龄排序。",[818,168651,104903,168652,168654],{},[64,168653,80588],{}," 找出成绩不及格的学生。",[818,168656,168657],{},"写一个装饰器，统计函数执行前后的提示信息。",[779,168659,168660],{},"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":62,"searchDepth":143,"depth":143,"links":168662},[168663,168664,168665,168666,168667,168668,168672,168673,168674,168675,168680,168681,168682,168683,168684,168685],{"id":166521,"depth":143,"text":166522},{"id":166635,"depth":143,"text":166636},{"id":166724,"depth":143,"text":166725},{"id":166786,"depth":143,"text":166787},{"id":166932,"depth":143,"text":166933},{"id":167059,"depth":143,"text":167060,"children":168669},[168670,168671],{"id":167063,"depth":149,"text":167064},{"id":167178,"depth":149,"text":167179},{"id":167259,"depth":143,"text":167260},{"id":167417,"depth":143,"text":167418},{"id":167585,"depth":143,"text":167586},{"id":167667,"depth":143,"text":167668,"children":168676},[168677,168678,168679],{"id":167671,"depth":149,"text":167672},{"id":167742,"depth":149,"text":167743},{"id":167819,"depth":149,"text":167820},{"id":167944,"depth":143,"text":167945},{"id":168034,"depth":143,"text":168035},{"id":168165,"depth":143,"text":168166},{"id":168315,"depth":143,"text":168316},{"id":168592,"depth":143,"text":168593},{"id":168628,"depth":143,"text":168629},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch7",{"title":166513,"description":24093},"wiki\u002F2024-10-10-python教程\u002Fch7-函数进阶","vkwD4uN4GcTXYEVJo4HqYbW1G2UwuNGXsRcL7zWXd5Q",{"id":168692,"title":168693,"body":168694,"description":24093,"extension":787,"meta":171213,"navigation":176,"path":171214,"seo":171215,"stem":171216,"__hash__":171217},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch8-文件操作.md","8. 文件操作",{"type":7,"value":168695,"toc":171188},[168696,168699,168703,168706,168709,168740,168744,168748,168751,168778,168782,168785,168836,168839,168854,168857,168892,168896,168898,168922,168925,168985,168989,168993,168996,169053,169056,169076,169080,169083,169146,169150,169153,169209,169216,169240,169244,169247,169310,169314,169319,169370,169373,169377,169382,169449,169452,169534,169538,169543,169594,169597,169601,169604,169607,169615,169618,169664,169667,169713,169717,169723,169767,169770,169816,169819,169859,169862,169923,169927,169930,170020,170023,170165,170168,170235,170239,170242,170245,170386,170389,170467,170470,170646,170650,170652,170663,170665,170864,170868,171112,171116,171150,171154,171185],[10,168697,168693],{"id":168698},"_8-文件操作",[803,168700,168702],{"id":168701},"_81-文件操作的意义","8.1 文件操作的意义",[19,168704,168705],{},"程序运行时，变量保存在内存中。程序结束后，内存数据通常会消失。文件可以把数据保存到磁盘，实现持久化。",[19,168707,168708],{},"常见文件类型：",[815,168710,168711,168717,168723,168729,168735],{},[818,168712,168713,168716],{},[64,168714,168715],{},".txt","：普通文本。",[818,168718,168719,168722],{},[64,168720,168721],{},".csv","：表格文本。",[818,168724,168725,168728],{},[64,168726,168727],{},".json","：结构化数据。",[818,168730,168731,168734],{},[64,168732,168733],{},".log","：日志文件。",[818,168736,168737,168739],{},[64,168738,146889],{},"：Python 源代码。",[803,168741,168743],{"id":168742},"_82-路径","8.2 路径",[14,168745,168747],{"id":168746},"_821-相对路径","8.2.1 相对路径",[19,168749,168750],{},"相对当前运行目录：",[57,168752,168754],{"className":30915,"code":168753,"language":30917,"meta":62,"style":62},"open(\"data.txt\", \"r\", encoding=\"utf-8\")\n",[64,168755,168756],{"__ignoreMap":62},[67,168757,168758,168760,168762,168764,168766,168768,168770,168772,168774,168776],{"class":69,"line":70},[67,168759,87452],{"class":208},[67,168761,864],{"class":77},[67,168763,147333],{"class":84},[67,168765,13153],{"class":77},[67,168767,147338],{"class":84},[67,168769,13153],{"class":77},[67,168771,147343],{"class":5935},[67,168773,909],{"class":73},[67,168775,147348],{"class":84},[67,168777,870],{"class":77},[14,168779,168781],{"id":168780},"_822-绝对路径","8.2.2 绝对路径",[19,168783,168784],{},"从根目录或盘符开始：",[57,168786,168788],{"className":30915,"code":168787,"language":30917,"meta":62,"style":62},"open(\"\u002Fhome\u002Fuser\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\nopen(\"D:\u002Fdata\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\n",[64,168789,168790,168813],{"__ignoreMap":62},[67,168791,168792,168794,168796,168799,168801,168803,168805,168807,168809,168811],{"class":69,"line":70},[67,168793,87452],{"class":208},[67,168795,864],{"class":77},[67,168797,168798],{"class":84},"\"\u002Fhome\u002Fuser\u002Fdata.txt\"",[67,168800,13153],{"class":77},[67,168802,147338],{"class":84},[67,168804,13153],{"class":77},[67,168806,147343],{"class":5935},[67,168808,909],{"class":73},[67,168810,147348],{"class":84},[67,168812,870],{"class":77},[67,168814,168815,168817,168819,168822,168824,168826,168828,168830,168832,168834],{"class":69,"line":143},[67,168816,87452],{"class":208},[67,168818,864],{"class":77},[67,168820,168821],{"class":84},"\"D:\u002Fdata\u002Fdata.txt\"",[67,168823,13153],{"class":77},[67,168825,147338],{"class":84},[67,168827,13153],{"class":77},[67,168829,147343],{"class":5935},[67,168831,909],{"class":73},[67,168833,147348],{"class":84},[67,168835,870],{"class":77},[19,168837,168838],{},"Windows 路径建议写成：",[57,168840,168842],{"className":30915,"code":168841,"language":30917,"meta":62,"style":62},"path = \"D:\u002Fdata\u002Fdata.txt\"\n",[64,168843,168844],{"__ignoreMap":62},[67,168845,168846,168849,168851],{"class":69,"line":70},[67,168847,168848],{"class":77},"path ",[67,168850,909],{"class":73},[67,168852,168853],{"class":84}," \"D:\u002Fdata\u002Fdata.txt\"\n",[19,168855,168856],{},"或原始字符串：",[57,168858,168860],{"className":30915,"code":168859,"language":30917,"meta":62,"style":62},"path = r\"D:\\data\\data.txt\"\n",[64,168861,168862],{"__ignoreMap":62},[67,168863,168864,168866,168868,168870,168872,168875,168878,168881,168883,168885,168887,168890],{"class":69,"line":70},[67,168865,168848],{"class":77},[67,168867,909],{"class":73},[67,168869,17838],{"class":73},[67,168871,257],{"class":84},[67,168873,168874],{"class":48514},"D:",[67,168876,168877],{"class":208},"\\d",[67,168879,168880],{"class":48514},"ata",[67,168882,168877],{"class":208},[67,168884,168880],{"class":48514},[67,168886,240],{"class":208},[67,168888,168889],{"class":48514},"txt",[67,168891,25842],{"class":84},[803,168893,168895],{"id":168894},"_83-open函数","8.3 open函数",[19,168897,5900],{},[57,168899,168901],{"className":30915,"code":168900,"language":30917,"meta":62,"style":62},"file = open(文件路径, 打开模式, encoding=\"utf-8\")\n",[64,168902,168903],{"__ignoreMap":62},[67,168904,168905,168907,168909,168911,168914,168916,168918,168920],{"class":69,"line":70},[67,168906,45891],{"class":5935},[67,168908,14282],{"class":73},[67,168910,147328],{"class":208},[67,168912,168913],{"class":77},"(文件路径, 打开模式, ",[67,168915,147343],{"class":5935},[67,168917,909],{"class":73},[67,168919,147348],{"class":84},[67,168921,870],{"class":77},[19,168923,168924],{},"常见模式：",[998,168926,168927,168936],{},[1001,168928,168929],{},[1004,168930,168931,168934],{},[1007,168932,168933],{},"模式",[1007,168935,26578],{},[1044,168937,168938,168947,168956,168965,168975],{},[1004,168939,168940,168944],{},[1049,168941,168942],{},[64,168943,1526],{},[1049,168945,168946],{},"只读，文件不存在会报错",[1004,168948,168949,168953],{},[1049,168950,168951],{},[64,168952,1651],{},[1049,168954,168955],{},"只写，文件不存在会创建，存在会清空",[1004,168957,168958,168962],{},[1049,168959,168960],{},[64,168961,28],{},[1049,168963,168964],{},"追加，文件不存在会创建",[1004,168966,168967,168972],{},[1049,168968,168969],{},[64,168970,168971],{},"rb",[1049,168973,168974],{},"二进制只读",[1004,168976,168977,168982],{},[1049,168978,168979],{},[64,168980,168981],{},"wb",[1049,168983,168984],{},"二进制只写",[803,168986,168988],{"id":168987},"_84-读取文件","8.4 读取文件",[14,168990,168992],{"id":168991},"_841-read","8.4.1 read",[19,168994,168995],{},"一次读取全部内容：",[57,168997,168999],{"className":30915,"code":168998,"language":30917,"meta":62,"style":62},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\ncontent = file.read()\nprint(content)\nfile.close()\n",[64,169000,169001,169027,169039,169046],{"__ignoreMap":62},[67,169002,169003,169005,169007,169009,169011,169013,169015,169017,169019,169021,169023,169025],{"class":69,"line":70},[67,169004,45891],{"class":5935},[67,169006,14282],{"class":73},[67,169008,147328],{"class":208},[67,169010,864],{"class":77},[67,169012,147333],{"class":84},[67,169014,13153],{"class":77},[67,169016,147338],{"class":84},[67,169018,13153],{"class":77},[67,169020,147343],{"class":5935},[67,169022,909],{"class":73},[67,169024,147348],{"class":84},[67,169026,870],{"class":77},[67,169028,169029,169032,169034,169036],{"class":69,"line":143},[67,169030,169031],{"class":77},"content ",[67,169033,909],{"class":73},[67,169035,148690],{"class":5935},[67,169037,169038],{"class":77},".read()\n",[67,169040,169041,169043],{"class":69,"line":149},[67,169042,30952],{"class":208},[67,169044,169045],{"class":77},"(content)\n",[67,169047,169048,169050],{"class":69,"line":155},[67,169049,45891],{"class":5935},[67,169051,169052],{"class":77},".close()\n",[19,169054,169055],{},"可以指定读取字符数：",[57,169057,169059],{"className":30915,"code":169058,"language":30917,"meta":62,"style":62},"content = file.read(10)\n",[64,169060,169061],{"__ignoreMap":62},[67,169062,169063,169065,169067,169069,169072,169074],{"class":69,"line":70},[67,169064,169031],{"class":77},[67,169066,909],{"class":73},[67,169068,148690],{"class":5935},[67,169070,169071],{"class":77},".read(",[67,169073,1303],{"class":208},[67,169075,870],{"class":77},[14,169077,169079],{"id":169078},"_842-readline","8.4.2 readline",[19,169081,169082],{},"一次读取一行：",[57,169084,169086],{"className":30915,"code":169085,"language":30917,"meta":62,"style":62},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nline = file.readline()\nprint(line)\n\nfile.close()\n",[64,169087,169088,169114,169118,169129,169136,169140],{"__ignoreMap":62},[67,169089,169090,169092,169094,169096,169098,169100,169102,169104,169106,169108,169110,169112],{"class":69,"line":70},[67,169091,45891],{"class":5935},[67,169093,14282],{"class":73},[67,169095,147328],{"class":208},[67,169097,864],{"class":77},[67,169099,147333],{"class":84},[67,169101,13153],{"class":77},[67,169103,147338],{"class":84},[67,169105,13153],{"class":77},[67,169107,147343],{"class":5935},[67,169109,909],{"class":73},[67,169111,147348],{"class":84},[67,169113,870],{"class":77},[67,169115,169116],{"class":69,"line":143},[67,169117,177],{"emptyLinePlaceholder":176},[67,169119,169120,169122,169124,169126],{"class":69,"line":149},[67,169121,147789],{"class":77},[67,169123,909],{"class":73},[67,169125,148690],{"class":5935},[67,169127,169128],{"class":77},".readline()\n",[67,169130,169131,169133],{"class":69,"line":155},[67,169132,30952],{"class":208},[67,169134,169135],{"class":77},"(line)\n",[67,169137,169138],{"class":69,"line":161},[67,169139,177],{"emptyLinePlaceholder":176},[67,169141,169142,169144],{"class":69,"line":167},[67,169143,45891],{"class":5935},[67,169145,169052],{"class":77},[14,169147,169149],{"id":169148},"_843-readlines","8.4.3 readlines",[19,169151,169152],{},"读取所有行，返回列表：",[57,169154,169156],{"className":30915,"code":169155,"language":30917,"meta":62,"style":62},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\nlines = file.readlines()\nprint(lines)\nfile.close()\n",[64,169157,169158,169184,169196,169203],{"__ignoreMap":62},[67,169159,169160,169162,169164,169166,169168,169170,169172,169174,169176,169178,169180,169182],{"class":69,"line":70},[67,169161,45891],{"class":5935},[67,169163,14282],{"class":73},[67,169165,147328],{"class":208},[67,169167,864],{"class":77},[67,169169,147333],{"class":84},[67,169171,13153],{"class":77},[67,169173,147338],{"class":84},[67,169175,13153],{"class":77},[67,169177,147343],{"class":5935},[67,169179,909],{"class":73},[67,169181,147348],{"class":84},[67,169183,870],{"class":77},[67,169185,169186,169189,169191,169193],{"class":69,"line":143},[67,169187,169188],{"class":77},"lines ",[67,169190,909],{"class":73},[67,169192,148690],{"class":5935},[67,169194,169195],{"class":77},".readlines()\n",[67,169197,169198,169200],{"class":69,"line":149},[67,169199,30952],{"class":208},[67,169201,169202],{"class":77},"(lines)\n",[67,169204,169205,169207],{"class":69,"line":155},[67,169206,45891],{"class":5935},[67,169208,169052],{"class":77},[19,169210,169211,169212,169215],{},"每一行通常带有换行符，可以用 ",[64,169213,169214],{},"strip()"," 去掉：",[57,169217,169219],{"className":30915,"code":169218,"language":30917,"meta":62,"style":62},"for line in lines:\n    print(line.strip())\n",[64,169220,169221,169233],{"__ignoreMap":62},[67,169222,169223,169225,169228,169230],{"class":69,"line":70},[67,169224,74],{"class":73},[67,169226,169227],{"class":77}," line ",[67,169229,81],{"class":73},[67,169231,169232],{"class":77}," lines:\n",[67,169234,169235,169237],{"class":69,"line":143},[67,169236,31836],{"class":208},[67,169238,169239],{"class":77},"(line.strip())\n",[14,169241,169243],{"id":169242},"_844-直接遍历文件对象","8.4.4 直接遍历文件对象",[19,169245,169246],{},"推荐读取大文件时使用：",[57,169248,169250],{"className":30915,"code":169249,"language":30917,"meta":62,"style":62},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nfor line in file:\n    print(line.strip())\n\nfile.close()\n",[64,169251,169252,169278,169282,169294,169300,169304],{"__ignoreMap":62},[67,169253,169254,169256,169258,169260,169262,169264,169266,169268,169270,169272,169274,169276],{"class":69,"line":70},[67,169255,45891],{"class":5935},[67,169257,14282],{"class":73},[67,169259,147328],{"class":208},[67,169261,864],{"class":77},[67,169263,147333],{"class":84},[67,169265,13153],{"class":77},[67,169267,147338],{"class":84},[67,169269,13153],{"class":77},[67,169271,147343],{"class":5935},[67,169273,909],{"class":73},[67,169275,147348],{"class":84},[67,169277,870],{"class":77},[67,169279,169280],{"class":69,"line":143},[67,169281,177],{"emptyLinePlaceholder":176},[67,169283,169284,169286,169288,169290,169292],{"class":69,"line":149},[67,169285,74],{"class":73},[67,169287,169227],{"class":77},[67,169289,81],{"class":73},[67,169291,148690],{"class":5935},[67,169293,4459],{"class":77},[67,169295,169296,169298],{"class":69,"line":155},[67,169297,31836],{"class":208},[67,169299,169239],{"class":77},[67,169301,169302],{"class":69,"line":161},[67,169303,177],{"emptyLinePlaceholder":176},[67,169305,169306,169308],{"class":69,"line":167},[67,169307,45891],{"class":5935},[67,169309,169052],{"class":77},[803,169311,169313],{"id":169312},"_85-with语句","8.5 with语句",[19,169315,169316,169318],{},[64,169317,108370],{}," 会自动关闭文件，推荐使用。",[57,169320,169322],{"className":30915,"code":169321,"language":30917,"meta":62,"style":62},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as file:\n    content = file.read()\n    print(content)\n",[64,169323,169324,169354,169364],{"__ignoreMap":62},[67,169325,169326,169328,169330,169332,169334,169336,169338,169340,169342,169344,169346,169348,169350,169352],{"class":69,"line":70},[67,169327,108370],{"class":73},[67,169329,147328],{"class":208},[67,169331,864],{"class":77},[67,169333,147333],{"class":84},[67,169335,13153],{"class":77},[67,169337,147338],{"class":84},[67,169339,13153],{"class":77},[67,169341,147343],{"class":5935},[67,169343,909],{"class":73},[67,169345,147348],{"class":84},[67,169347,14432],{"class":77},[67,169349,31920],{"class":73},[67,169351,148690],{"class":5935},[67,169353,4459],{"class":77},[67,169355,169356,169358,169360,169362],{"class":69,"line":143},[67,169357,147360],{"class":77},[67,169359,909],{"class":73},[67,169361,148690],{"class":5935},[67,169363,169038],{"class":77},[67,169365,169366,169368],{"class":69,"line":149},[67,169367,31836],{"class":208},[67,169369,169045],{"class":77},[19,169371,169372],{},"等价于打开文件、读取、最后关闭，但更安全。",[803,169374,169376],{"id":169375},"_86-写入文件","8.6 写入文件",[19,169378,169379,169381],{},[64,169380,1651],{}," 模式会清空原文件。",[57,169383,169385],{"className":30915,"code":169384,"language":30917,"meta":62,"style":62},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"hello\\n\")\n    file.write(\"python\\n\")\n",[64,169386,169387,169417,169434],{"__ignoreMap":62},[67,169388,169389,169391,169393,169395,169397,169399,169401,169403,169405,169407,169409,169411,169413,169415],{"class":69,"line":70},[67,169390,108370],{"class":73},[67,169392,147328],{"class":208},[67,169394,864],{"class":77},[67,169396,147333],{"class":84},[67,169398,13153],{"class":77},[67,169400,152513],{"class":84},[67,169402,13153],{"class":77},[67,169404,147343],{"class":5935},[67,169406,909],{"class":73},[67,169408,147348],{"class":84},[67,169410,14432],{"class":77},[67,169412,31920],{"class":73},[67,169414,148690],{"class":5935},[67,169416,4459],{"class":77},[67,169418,169419,169422,169425,169428,169430,169432],{"class":69,"line":143},[67,169420,169421],{"class":5935},"    file",[67,169423,169424],{"class":77},".write(",[67,169426,169427],{"class":84},"\"hello",[67,169429,157062],{"class":208},[67,169431,257],{"class":84},[67,169433,870],{"class":77},[67,169435,169436,169438,169440,169443,169445,169447],{"class":69,"line":149},[67,169437,169421],{"class":5935},[67,169439,169424],{"class":77},[67,169441,169442],{"class":84},"\"python",[67,169444,157062],{"class":208},[67,169446,257],{"class":84},[67,169448,870],{"class":77},[19,169450,169451],{},"写入多行：",[57,169453,169455],{"className":30915,"code":169454,"language":30917,"meta":62,"style":62},"lines = [\"小明,18\\n\", \"小红,17\\n\", \"小刚,19\\n\"]\n\nwith open(\"students.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.writelines(lines)\n",[64,169456,169457,169492,169496,169527],{"__ignoreMap":62},[67,169458,169459,169461,169463,169465,169468,169470,169472,169474,169477,169479,169481,169483,169486,169488,169490],{"class":69,"line":70},[67,169460,169188],{"class":77},[67,169462,909],{"class":73},[67,169464,52763],{"class":77},[67,169466,169467],{"class":84},"\"小明,18",[67,169469,157062],{"class":208},[67,169471,257],{"class":84},[67,169473,13153],{"class":77},[67,169475,169476],{"class":84},"\"小红,17",[67,169478,157062],{"class":208},[67,169480,257],{"class":84},[67,169482,13153],{"class":77},[67,169484,169485],{"class":84},"\"小刚,19",[67,169487,157062],{"class":208},[67,169489,257],{"class":84},[67,169491,33783],{"class":77},[67,169493,169494],{"class":69,"line":143},[67,169495,177],{"emptyLinePlaceholder":176},[67,169497,169498,169500,169502,169504,169507,169509,169511,169513,169515,169517,169519,169521,169523,169525],{"class":69,"line":149},[67,169499,108370],{"class":73},[67,169501,147328],{"class":208},[67,169503,864],{"class":77},[67,169505,169506],{"class":84},"\"students.txt\"",[67,169508,13153],{"class":77},[67,169510,152513],{"class":84},[67,169512,13153],{"class":77},[67,169514,147343],{"class":5935},[67,169516,909],{"class":73},[67,169518,147348],{"class":84},[67,169520,14432],{"class":77},[67,169522,31920],{"class":73},[67,169524,148690],{"class":5935},[67,169526,4459],{"class":77},[67,169528,169529,169531],{"class":69,"line":155},[67,169530,169421],{"class":5935},[67,169532,169533],{"class":77},".writelines(lines)\n",[803,169535,169537],{"id":169536},"_87-追加文件","8.7 追加文件",[19,169539,169540,169542],{},[64,169541,28],{}," 模式不会清空原内容，而是在末尾追加。",[57,169544,169546],{"className":30915,"code":169545,"language":30917,"meta":62,"style":62},"with open(\"log.txt\", \"a\", encoding=\"utf-8\") as file:\n    file.write(\"程序启动\\n\")\n",[64,169547,169548,169579],{"__ignoreMap":62},[67,169549,169550,169552,169554,169556,169559,169561,169563,169565,169567,169569,169571,169573,169575,169577],{"class":69,"line":70},[67,169551,108370],{"class":73},[67,169553,147328],{"class":208},[67,169555,864],{"class":77},[67,169557,169558],{"class":84},"\"log.txt\"",[67,169560,13153],{"class":77},[67,169562,165862],{"class":84},[67,169564,13153],{"class":77},[67,169566,147343],{"class":5935},[67,169568,909],{"class":73},[67,169570,147348],{"class":84},[67,169572,14432],{"class":77},[67,169574,31920],{"class":73},[67,169576,148690],{"class":5935},[67,169578,4459],{"class":77},[67,169580,169581,169583,169585,169588,169590,169592],{"class":69,"line":143},[67,169582,169421],{"class":5935},[67,169584,169424],{"class":77},[67,169586,169587],{"class":84},"\"程序启动",[67,169589,157062],{"class":208},[67,169591,257],{"class":84},[67,169593,870],{"class":77},[19,169595,169596],{},"日志类文件常用追加模式。",[803,169598,169600],{"id":169599},"_88-文件编码","8.8 文件编码",[19,169602,169603],{},"编码决定文字如何保存为字节。",[19,169605,169606],{},"常见编码：",[815,169608,169609,169612],{},[818,169610,169611],{},"UTF-8：推荐。",[818,169613,169614],{},"GBK：部分 Windows 中文文件常见。",[19,169616,169617],{},"读取文件乱码时，可以尝试：",[57,169619,169621],{"className":30915,"code":169620,"language":30917,"meta":62,"style":62},"with open(\"data.txt\", \"r\", encoding=\"gbk\") as file:\n    content = file.read()\n",[64,169622,169623,169654],{"__ignoreMap":62},[67,169624,169625,169627,169629,169631,169633,169635,169637,169639,169641,169643,169646,169648,169650,169652],{"class":69,"line":70},[67,169626,108370],{"class":73},[67,169628,147328],{"class":208},[67,169630,864],{"class":77},[67,169632,147333],{"class":84},[67,169634,13153],{"class":77},[67,169636,147338],{"class":84},[67,169638,13153],{"class":77},[67,169640,147343],{"class":5935},[67,169642,909],{"class":73},[67,169644,169645],{"class":84},"\"gbk\"",[67,169647,14432],{"class":77},[67,169649,31920],{"class":73},[67,169651,148690],{"class":5935},[67,169653,4459],{"class":77},[67,169655,169656,169658,169660,169662],{"class":69,"line":143},[67,169657,147360],{"class":77},[67,169659,909],{"class":73},[67,169661,148690],{"class":5935},[67,169663,169038],{"class":77},[19,169665,169666],{},"写文件时建议统一 UTF-8：",[57,169668,169670],{"className":30915,"code":169669,"language":30917,"meta":62,"style":62},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"中文内容\")\n",[64,169671,169672,169702],{"__ignoreMap":62},[67,169673,169674,169676,169678,169680,169682,169684,169686,169688,169690,169692,169694,169696,169698,169700],{"class":69,"line":70},[67,169675,108370],{"class":73},[67,169677,147328],{"class":208},[67,169679,864],{"class":77},[67,169681,147333],{"class":84},[67,169683,13153],{"class":77},[67,169685,152513],{"class":84},[67,169687,13153],{"class":77},[67,169689,147343],{"class":5935},[67,169691,909],{"class":73},[67,169693,147348],{"class":84},[67,169695,14432],{"class":77},[67,169697,31920],{"class":73},[67,169699,148690],{"class":5935},[67,169701,4459],{"class":77},[67,169703,169704,169706,169708,169711],{"class":69,"line":143},[67,169705,169421],{"class":5935},[67,169707,169424],{"class":77},[67,169709,169710],{"class":84},"\"中文内容\"",[67,169712,870],{"class":77},[803,169714,169716],{"id":169715},"_89-pathlib","8.9 pathlib",[19,169718,169719,169722],{},[64,169720,169721],{},"pathlib"," 是现代 Python 推荐的路径处理方式。",[57,169724,169726],{"className":30915,"code":169725,"language":30917,"meta":62,"style":62},"from pathlib import Path\n\npath = Path(\"data\") \u002F \"students.txt\"\nprint(path)\n",[64,169727,169728,169738,169742,169760],{"__ignoreMap":62},[67,169729,169730,169732,169734,169736],{"class":69,"line":70},[67,169731,31274],{"class":73},[67,169733,108848],{"class":77},[67,169735,30929],{"class":73},[67,169737,108853],{"class":77},[67,169739,169740],{"class":69,"line":143},[67,169741,177],{"emptyLinePlaceholder":176},[67,169743,169744,169746,169748,169750,169753,169755,169757],{"class":69,"line":149},[67,169745,168848],{"class":77},[67,169747,909],{"class":73},[67,169749,109082],{"class":77},[67,169751,169752],{"class":84},"\"data\"",[67,169754,14432],{"class":77},[67,169756,1440],{"class":73},[67,169758,169759],{"class":84}," \"students.txt\"\n",[67,169761,169762,169764],{"class":69,"line":155},[67,169763,30952],{"class":208},[67,169765,169766],{"class":77},"(path)\n",[19,169768,169769],{},"创建目录：",[57,169771,169773],{"className":30915,"code":169772,"language":30917,"meta":62,"style":62},"from pathlib import Path\n\ndata_dir = Path(\"data\")\ndata_dir.mkdir(exist_ok=True)\n",[64,169774,169775,169785,169789,169802],{"__ignoreMap":62},[67,169776,169777,169779,169781,169783],{"class":69,"line":70},[67,169778,31274],{"class":73},[67,169780,108848],{"class":77},[67,169782,30929],{"class":73},[67,169784,108853],{"class":77},[67,169786,169787],{"class":69,"line":143},[67,169788,177],{"emptyLinePlaceholder":176},[67,169790,169791,169794,169796,169798,169800],{"class":69,"line":149},[67,169792,169793],{"class":77},"data_dir ",[67,169795,909],{"class":73},[67,169797,109082],{"class":77},[67,169799,169752],{"class":84},[67,169801,870],{"class":77},[67,169803,169804,169807,169810,169812,169814],{"class":69,"line":155},[67,169805,169806],{"class":77},"data_dir.mkdir(",[67,169808,169809],{"class":5935},"exist_ok",[67,169811,909],{"class":73},[67,169813,32013],{"class":208},[67,169815,870],{"class":77},[19,169817,169818],{},"判断文件是否存在：",[57,169820,169822],{"className":30915,"code":169821,"language":30917,"meta":62,"style":62},"path = Path(\"data\u002Fstudents.txt\")\n\nif path.exists():\n    print(\"文件存在\")\n",[64,169823,169824,169837,169841,169848],{"__ignoreMap":62},[67,169825,169826,169828,169830,169832,169835],{"class":69,"line":70},[67,169827,168848],{"class":77},[67,169829,909],{"class":73},[67,169831,109082],{"class":77},[67,169833,169834],{"class":84},"\"data\u002Fstudents.txt\"",[67,169836,870],{"class":77},[67,169838,169839],{"class":69,"line":143},[67,169840,177],{"emptyLinePlaceholder":176},[67,169842,169843,169845],{"class":69,"line":149},[67,169844,2254],{"class":73},[67,169846,169847],{"class":77}," path.exists():\n",[67,169849,169850,169852,169854,169857],{"class":69,"line":155},[67,169851,31836],{"class":208},[67,169853,864],{"class":77},[67,169855,169856],{"class":84},"\"文件存在\"",[67,169858,870],{"class":77},[19,169860,169861],{},"读写文本：",[57,169863,169865],{"className":30915,"code":169864,"language":30917,"meta":62,"style":62},"path = Path(\"data.txt\")\n\npath.write_text(\"hello python\", encoding=\"utf-8\")\ncontent = path.read_text(encoding=\"utf-8\")\nprint(content)\n",[64,169866,169867,169879,169883,169900,169917],{"__ignoreMap":62},[67,169868,169869,169871,169873,169875,169877],{"class":69,"line":70},[67,169870,168848],{"class":77},[67,169872,909],{"class":73},[67,169874,109082],{"class":77},[67,169876,147333],{"class":84},[67,169878,870],{"class":77},[67,169880,169881],{"class":69,"line":143},[67,169882,177],{"emptyLinePlaceholder":176},[67,169884,169885,169888,169890,169892,169894,169896,169898],{"class":69,"line":149},[67,169886,169887],{"class":77},"path.write_text(",[67,169889,146413],{"class":84},[67,169891,13153],{"class":77},[67,169893,147343],{"class":5935},[67,169895,909],{"class":73},[67,169897,147348],{"class":84},[67,169899,870],{"class":77},[67,169901,169902,169904,169906,169909,169911,169913,169915],{"class":69,"line":155},[67,169903,169031],{"class":77},[67,169905,909],{"class":73},[67,169907,169908],{"class":77}," path.read_text(",[67,169910,147343],{"class":5935},[67,169912,909],{"class":73},[67,169914,147348],{"class":84},[67,169916,870],{"class":77},[67,169918,169919,169921],{"class":69,"line":161},[67,169920,30952],{"class":208},[67,169922,169045],{"class":77},[803,169924,169926],{"id":169925},"_810-json文件","8.10 JSON文件",[19,169928,169929],{},"JSON 是常见的数据交换格式，适合保存列表、字典这类结构化数据。",[57,169931,169933],{"className":30915,"code":169932,"language":30917,"meta":62,"style":62},"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",[64,169934,169935,169941,169945,169953,169963,169973,169981,169985,169989,170014],{"__ignoreMap":62},[67,169936,169937,169939],{"class":69,"line":70},[67,169938,30929],{"class":73},[67,169940,147628],{"class":77},[67,169942,169943],{"class":69,"line":143},[67,169944,177],{"emptyLinePlaceholder":176},[67,169946,169947,169949,169951],{"class":69,"line":149},[67,169948,150018],{"class":77},[67,169950,909],{"class":73},[67,169952,16289],{"class":77},[67,169954,169955,169957,169959,169961],{"class":69,"line":155},[67,169956,147557],{"class":84},[67,169958,51974],{"class":77},[67,169960,150425],{"class":84},[67,169962,32003],{"class":77},[67,169964,169965,169967,169969,169971],{"class":69,"line":161},[67,169966,165074],{"class":84},[67,169968,51974],{"class":77},[67,169970,1506],{"class":208},[67,169972,32003],{"class":77},[67,169974,169975,169977,169979],{"class":69,"line":167},[67,169976,165085],{"class":84},[67,169978,51974],{"class":77},[67,169980,165090],{"class":208},[67,169982,169983],{"class":69,"line":173},[67,169984,2288],{"class":77},[67,169986,169987],{"class":69,"line":180},[67,169988,177],{"emptyLinePlaceholder":176},[67,169990,169991,169993,169995,169998,170000,170002,170004,170006,170008,170010,170012],{"class":69,"line":186},[67,169992,156981],{"class":77},[67,169994,909],{"class":73},[67,169996,169997],{"class":77}," json.dumps(student, ",[67,169999,147674],{"class":5935},[67,170001,909],{"class":73},[67,170003,34524],{"class":208},[67,170005,13153],{"class":77},[67,170007,152549],{"class":5935},[67,170009,909],{"class":73},[67,170011,939],{"class":208},[67,170013,870],{"class":77},[67,170015,170016,170018],{"class":69,"line":444},[67,170017,30952],{"class":208},[67,170019,164608],{"class":77},[19,170021,170022],{},"写入 JSON 文件：",[57,170024,170026],{"className":30915,"code":170025,"language":30917,"meta":62,"style":62},"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",[64,170027,170028,170034,170038,170046,170074,170102,170106,170110,170140],{"__ignoreMap":62},[67,170029,170030,170032],{"class":69,"line":70},[67,170031,30929],{"class":73},[67,170033,147628],{"class":77},[67,170035,170036],{"class":69,"line":143},[67,170037,177],{"emptyLinePlaceholder":176},[67,170039,170040,170042,170044],{"class":69,"line":149},[67,170041,160253],{"class":77},[67,170043,909],{"class":73},[67,170045,55984],{"class":77},[67,170047,170048,170050,170052,170054,170056,170058,170060,170062,170064,170066,170068,170070,170072],{"class":69,"line":155},[67,170049,148922],{"class":77},[67,170051,63216],{"class":84},[67,170053,51974],{"class":77},[67,170055,150425],{"class":84},[67,170057,13153],{"class":77},[67,170059,69661],{"class":84},[67,170061,51974],{"class":77},[67,170063,1506],{"class":208},[67,170065,13153],{"class":77},[67,170067,152009],{"class":84},[67,170069,51974],{"class":77},[67,170071,1845],{"class":208},[67,170073,5649],{"class":77},[67,170075,170076,170078,170080,170082,170084,170086,170088,170090,170092,170094,170096,170098,170100],{"class":69,"line":161},[67,170077,148922],{"class":77},[67,170079,63216],{"class":84},[67,170081,51974],{"class":77},[67,170083,151473],{"class":84},[67,170085,13153],{"class":77},[67,170087,69661],{"class":84},[67,170089,51974],{"class":77},[67,170091,1481],{"class":208},[67,170093,13153],{"class":77},[67,170095,152009],{"class":84},[67,170097,51974],{"class":77},[67,170099,1667],{"class":208},[67,170101,5649],{"class":77},[67,170103,170104],{"class":69,"line":167},[67,170105,33783],{"class":77},[67,170107,170108],{"class":69,"line":173},[67,170109,177],{"emptyLinePlaceholder":176},[67,170111,170112,170114,170116,170118,170120,170122,170124,170126,170128,170130,170132,170134,170136,170138],{"class":69,"line":180},[67,170113,108370],{"class":73},[67,170115,147328],{"class":208},[67,170117,864],{"class":77},[67,170119,152368],{"class":84},[67,170121,13153],{"class":77},[67,170123,152513],{"class":84},[67,170125,13153],{"class":77},[67,170127,147343],{"class":5935},[67,170129,909],{"class":73},[67,170131,147348],{"class":84},[67,170133,14432],{"class":77},[67,170135,31920],{"class":73},[67,170137,148690],{"class":5935},[67,170139,4459],{"class":77},[67,170141,170142,170145,170147,170149,170151,170153,170155,170157,170159,170161,170163],{"class":69,"line":186},[67,170143,170144],{"class":77},"    json.dump(students, ",[67,170146,45891],{"class":5935},[67,170148,13153],{"class":77},[67,170150,147674],{"class":5935},[67,170152,909],{"class":73},[67,170154,34524],{"class":208},[67,170156,13153],{"class":77},[67,170158,152549],{"class":5935},[67,170160,909],{"class":73},[67,170162,939],{"class":208},[67,170164,870],{"class":77},[19,170166,170167],{},"读取 JSON 文件：",[57,170169,170171],{"className":30915,"code":170170,"language":30917,"meta":62,"style":62},"import json\n\nwith open(\"students.json\", \"r\", encoding=\"utf-8\") as file:\n    students = json.load(file)\n\nprint(students)\n",[64,170172,170173,170179,170183,170213,170225,170229],{"__ignoreMap":62},[67,170174,170175,170177],{"class":69,"line":70},[67,170176,30929],{"class":73},[67,170178,147628],{"class":77},[67,170180,170181],{"class":69,"line":143},[67,170182,177],{"emptyLinePlaceholder":176},[67,170184,170185,170187,170189,170191,170193,170195,170197,170199,170201,170203,170205,170207,170209,170211],{"class":69,"line":149},[67,170186,108370],{"class":73},[67,170188,147328],{"class":208},[67,170190,864],{"class":77},[67,170192,152368],{"class":84},[67,170194,13153],{"class":77},[67,170196,147338],{"class":84},[67,170198,13153],{"class":77},[67,170200,147343],{"class":5935},[67,170202,909],{"class":73},[67,170204,147348],{"class":84},[67,170206,14432],{"class":77},[67,170208,31920],{"class":73},[67,170210,148690],{"class":5935},[67,170212,4459],{"class":77},[67,170214,170215,170217,170219,170221,170223],{"class":69,"line":155},[67,170216,153574],{"class":77},[67,170218,909],{"class":73},[67,170220,148701],{"class":77},[67,170222,45891],{"class":5935},[67,170224,870],{"class":77},[67,170226,170227],{"class":69,"line":161},[67,170228,177],{"emptyLinePlaceholder":176},[67,170230,170231,170233],{"class":69,"line":167},[67,170232,30952],{"class":208},[67,170234,165532],{"class":77},[803,170236,170238],{"id":170237},"_811-csv文件","8.11 CSV文件",[19,170240,170241],{},"CSV 是逗号分隔值，常用于表格数据。",[19,170243,170244],{},"写入 CSV：",[57,170246,170248],{"className":30915,"code":170247,"language":30917,"meta":62,"style":62},"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",[64,170249,170250,170257,170261,170269,170287,170303,170319,170323,170327,170367,170381],{"__ignoreMap":62},[67,170251,170252,170254],{"class":69,"line":70},[67,170253,30929],{"class":73},[67,170255,170256],{"class":77}," csv\n",[67,170258,170259],{"class":69,"line":143},[67,170260,177],{"emptyLinePlaceholder":176},[67,170262,170263,170265,170267],{"class":69,"line":149},[67,170264,160253],{"class":77},[67,170266,909],{"class":73},[67,170268,55984],{"class":77},[67,170270,170271,170274,170276,170278,170280,170282,170285],{"class":69,"line":155},[67,170272,170273],{"class":77},"    [",[67,170275,73636],{"class":84},[67,170277,13153],{"class":77},[67,170279,73669],{"class":84},[67,170281,13153],{"class":77},[67,170283,170284],{"class":84},"\"成绩\"",[67,170286,88373],{"class":77},[67,170288,170289,170291,170293,170295,170297,170299,170301],{"class":69,"line":161},[67,170290,170273],{"class":77},[67,170292,150425],{"class":84},[67,170294,13153],{"class":77},[67,170296,1506],{"class":208},[67,170298,13153],{"class":77},[67,170300,1845],{"class":208},[67,170302,88373],{"class":77},[67,170304,170305,170307,170309,170311,170313,170315,170317],{"class":69,"line":167},[67,170306,170273],{"class":77},[67,170308,151473],{"class":84},[67,170310,13153],{"class":77},[67,170312,1481],{"class":208},[67,170314,13153],{"class":77},[67,170316,1667],{"class":208},[67,170318,88373],{"class":77},[67,170320,170321],{"class":69,"line":173},[67,170322,33783],{"class":77},[67,170324,170325],{"class":69,"line":180},[67,170326,177],{"emptyLinePlaceholder":176},[67,170328,170329,170331,170333,170335,170338,170340,170342,170344,170346,170348,170350,170352,170355,170357,170359,170361,170363,170365],{"class":69,"line":186},[67,170330,108370],{"class":73},[67,170332,147328],{"class":208},[67,170334,864],{"class":77},[67,170336,170337],{"class":84},"\"students.csv\"",[67,170339,13153],{"class":77},[67,170341,152513],{"class":84},[67,170343,13153],{"class":77},[67,170345,147343],{"class":5935},[67,170347,909],{"class":73},[67,170349,147348],{"class":84},[67,170351,13153],{"class":77},[67,170353,170354],{"class":5935},"newline",[67,170356,909],{"class":73},[67,170358,8371],{"class":84},[67,170360,14432],{"class":77},[67,170362,31920],{"class":73},[67,170364,148690],{"class":5935},[67,170366,4459],{"class":77},[67,170368,170369,170372,170374,170377,170379],{"class":69,"line":444},[67,170370,170371],{"class":77},"    writer ",[67,170373,909],{"class":73},[67,170375,170376],{"class":77}," csv.writer(",[67,170378,45891],{"class":5935},[67,170380,870],{"class":77},[67,170382,170383],{"class":69,"line":2335},[67,170384,170385],{"class":77},"    writer.writerows(students)\n",[19,170387,170388],{},"读取 CSV：",[57,170390,170392],{"className":30915,"code":170391,"language":30917,"meta":62,"style":62},"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",[64,170393,170394,170400,170404,170434,170448,170460],{"__ignoreMap":62},[67,170395,170396,170398],{"class":69,"line":70},[67,170397,30929],{"class":73},[67,170399,170256],{"class":77},[67,170401,170402],{"class":69,"line":143},[67,170403,177],{"emptyLinePlaceholder":176},[67,170405,170406,170408,170410,170412,170414,170416,170418,170420,170422,170424,170426,170428,170430,170432],{"class":69,"line":149},[67,170407,108370],{"class":73},[67,170409,147328],{"class":208},[67,170411,864],{"class":77},[67,170413,170337],{"class":84},[67,170415,13153],{"class":77},[67,170417,147338],{"class":84},[67,170419,13153],{"class":77},[67,170421,147343],{"class":5935},[67,170423,909],{"class":73},[67,170425,147348],{"class":84},[67,170427,14432],{"class":77},[67,170429,31920],{"class":73},[67,170431,148690],{"class":5935},[67,170433,4459],{"class":77},[67,170435,170436,170439,170441,170444,170446],{"class":69,"line":155},[67,170437,170438],{"class":77},"    reader ",[67,170440,909],{"class":73},[67,170442,170443],{"class":77}," csv.reader(",[67,170445,45891],{"class":5935},[67,170447,870],{"class":77},[67,170449,170450,170452,170455,170457],{"class":69,"line":161},[67,170451,3921],{"class":73},[67,170453,170454],{"class":77}," row ",[67,170456,81],{"class":73},[67,170458,170459],{"class":77}," reader:\n",[67,170461,170462,170464],{"class":69,"line":167},[67,170463,32988],{"class":208},[67,170465,170466],{"class":77},"(row)\n",[19,170468,170469],{},"使用字典写入：",[57,170471,170473],{"className":30915,"code":170472,"language":30917,"meta":62,"style":62},"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",[64,170474,170475,170481,170485,170493,170521,170549,170553,170557,170595,170616,170637,170642],{"__ignoreMap":62},[67,170476,170477,170479],{"class":69,"line":70},[67,170478,30929],{"class":73},[67,170480,170256],{"class":77},[67,170482,170483],{"class":69,"line":143},[67,170484,177],{"emptyLinePlaceholder":176},[67,170486,170487,170489,170491],{"class":69,"line":149},[67,170488,160253],{"class":77},[67,170490,909],{"class":73},[67,170492,55984],{"class":77},[67,170494,170495,170497,170499,170501,170503,170505,170507,170509,170511,170513,170515,170517,170519],{"class":69,"line":155},[67,170496,148922],{"class":77},[67,170498,63216],{"class":84},[67,170500,51974],{"class":77},[67,170502,150425],{"class":84},[67,170504,13153],{"class":77},[67,170506,69661],{"class":84},[67,170508,51974],{"class":77},[67,170510,1506],{"class":208},[67,170512,13153],{"class":77},[67,170514,152009],{"class":84},[67,170516,51974],{"class":77},[67,170518,1845],{"class":208},[67,170520,5649],{"class":77},[67,170522,170523,170525,170527,170529,170531,170533,170535,170537,170539,170541,170543,170545,170547],{"class":69,"line":161},[67,170524,148922],{"class":77},[67,170526,63216],{"class":84},[67,170528,51974],{"class":77},[67,170530,151473],{"class":84},[67,170532,13153],{"class":77},[67,170534,69661],{"class":84},[67,170536,51974],{"class":77},[67,170538,1481],{"class":208},[67,170540,13153],{"class":77},[67,170542,152009],{"class":84},[67,170544,51974],{"class":77},[67,170546,1667],{"class":208},[67,170548,5649],{"class":77},[67,170550,170551],{"class":69,"line":167},[67,170552,33783],{"class":77},[67,170554,170555],{"class":69,"line":173},[67,170556,177],{"emptyLinePlaceholder":176},[67,170558,170559,170561,170563,170565,170567,170569,170571,170573,170575,170577,170579,170581,170583,170585,170587,170589,170591,170593],{"class":69,"line":180},[67,170560,108370],{"class":73},[67,170562,147328],{"class":208},[67,170564,864],{"class":77},[67,170566,170337],{"class":84},[67,170568,13153],{"class":77},[67,170570,152513],{"class":84},[67,170572,13153],{"class":77},[67,170574,147343],{"class":5935},[67,170576,909],{"class":73},[67,170578,147348],{"class":84},[67,170580,13153],{"class":77},[67,170582,170354],{"class":5935},[67,170584,909],{"class":73},[67,170586,8371],{"class":84},[67,170588,14432],{"class":77},[67,170590,31920],{"class":73},[67,170592,148690],{"class":5935},[67,170594,4459],{"class":77},[67,170596,170597,170600,170602,170604,170606,170608,170610,170612,170614],{"class":69,"line":186},[67,170598,170599],{"class":77},"    fieldnames ",[67,170601,909],{"class":73},[67,170603,52763],{"class":77},[67,170605,63216],{"class":84},[67,170607,13153],{"class":77},[67,170609,69661],{"class":84},[67,170611,13153],{"class":77},[67,170613,152009],{"class":84},[67,170615,33783],{"class":77},[67,170617,170618,170620,170622,170625,170627,170629,170632,170634],{"class":69,"line":444},[67,170619,170371],{"class":77},[67,170621,909],{"class":73},[67,170623,170624],{"class":77}," csv.DictWriter(",[67,170626,45891],{"class":5935},[67,170628,13153],{"class":77},[67,170630,170631],{"class":5935},"fieldnames",[67,170633,909],{"class":73},[67,170635,170636],{"class":77},"fieldnames)\n",[67,170638,170639],{"class":69,"line":2335},[67,170640,170641],{"class":77},"    writer.writeheader()\n",[67,170643,170644],{"class":69,"line":2340},[67,170645,170385],{"class":77},[803,170647,170649],{"id":170648},"_812-小案例文本词频统计","8.12 小案例：文本词频统计",[19,170651,123829],{},[815,170653,170654,170657,170660],{},[818,170655,170656],{},"读取文本文件。",[818,170658,170659],{},"统计每个单词出现次数。",[818,170661,170662],{},"输出出现次数最多的前 10 个单词。",[19,170664,10753],{},[57,170666,170668],{"className":30915,"code":170667,"language":30917,"meta":62,"style":62},"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",[64,170669,170670,170680,170684,170697,170713,170717,170727,170736,170740,170752,170772,170781,170785,170803,170807,170837,170841,170857],{"__ignoreMap":62},[67,170671,170672,170674,170676,170678],{"class":69,"line":70},[67,170673,31274],{"class":73},[67,170675,108848],{"class":77},[67,170677,30929],{"class":73},[67,170679,108853],{"class":77},[67,170681,170682],{"class":69,"line":143},[67,170683,177],{"emptyLinePlaceholder":176},[67,170685,170686,170688,170690,170692,170695],{"class":69,"line":149},[67,170687,168848],{"class":77},[67,170689,909],{"class":73},[67,170691,109082],{"class":77},[67,170693,170694],{"class":84},"\"article.txt\"",[67,170696,870],{"class":77},[67,170698,170699,170701,170703,170705,170707,170709,170711],{"class":69,"line":155},[67,170700,169031],{"class":77},[67,170702,909],{"class":73},[67,170704,169908],{"class":77},[67,170706,147343],{"class":5935},[67,170708,909],{"class":73},[67,170710,147348],{"class":84},[67,170712,870],{"class":77},[67,170714,170715],{"class":69,"line":161},[67,170716,177],{"emptyLinePlaceholder":176},[67,170718,170719,170722,170724],{"class":69,"line":167},[67,170720,170721],{"class":77},"words ",[67,170723,909],{"class":73},[67,170725,170726],{"class":77}," content.lower().split()\n",[67,170728,170729,170732,170734],{"class":69,"line":173},[67,170730,170731],{"class":77},"counter ",[67,170733,909],{"class":73},[67,170735,88405],{"class":77},[67,170737,170738],{"class":69,"line":180},[67,170739,177],{"emptyLinePlaceholder":176},[67,170741,170742,170744,170747,170749],{"class":69,"line":186},[67,170743,74],{"class":73},[67,170745,170746],{"class":77}," word ",[67,170748,81],{"class":73},[67,170750,170751],{"class":77}," words:\n",[67,170753,170754,170757,170759,170762,170765,170767,170770],{"class":69,"line":444},[67,170755,170756],{"class":77},"    word ",[67,170758,909],{"class":73},[67,170760,170761],{"class":77}," word.strip(",[67,170763,170764],{"class":84},"\".,!?;:",[67,170766,157032],{"class":208},[67,170768,170769],{"class":84},"'()[]\"",[67,170771,870],{"class":77},[67,170773,170774,170776,170778],{"class":69,"line":2335},[67,170775,3821],{"class":73},[67,170777,39467],{"class":73},[67,170779,170780],{"class":77}," word:\n",[67,170782,170783],{"class":69,"line":2340},[67,170784,149049],{"class":73},[67,170786,170787,170790,170792,170795,170797,170799,170801],{"class":69,"line":2346},[67,170788,170789],{"class":77},"    counter[word] ",[67,170791,909],{"class":73},[67,170793,170794],{"class":77}," counter.get(word, ",[67,170796,1051],{"class":208},[67,170798,14432],{"class":77},[67,170800,1338],{"class":73},[67,170802,56236],{"class":208},[67,170804,170805],{"class":69,"line":2351},[67,170806,177],{"emptyLinePlaceholder":176},[67,170808,170809,170812,170814,170816,170819,170821,170823,170825,170827,170829,170831,170833,170835],{"class":69,"line":2365},[67,170810,170811],{"class":77},"items ",[67,170813,909],{"class":73},[67,170815,164141],{"class":208},[67,170817,170818],{"class":77},"(counter.items(), ",[67,170820,154483],{"class":5935},[67,170822,154486],{"class":73},[67,170824,154489],{"class":77},[67,170826,1077],{"class":208},[67,170828,112739],{"class":77},[67,170830,164065],{"class":5935},[67,170832,909],{"class":73},[67,170834,32013],{"class":208},[67,170836,870],{"class":77},[67,170838,170839],{"class":69,"line":2370},[67,170840,177],{"emptyLinePlaceholder":176},[67,170842,170843,170845,170848,170850,170853,170855],{"class":69,"line":2376},[67,170844,74],{"class":73},[67,170846,170847],{"class":77}," word, count ",[67,170849,81],{"class":73},[67,170851,170852],{"class":77}," items[:",[67,170854,1303],{"class":208},[67,170856,166292],{"class":77},[67,170858,170859,170861],{"class":69,"line":2397},[67,170860,31836],{"class":208},[67,170862,170863],{"class":77},"(word, count)\n",[803,170865,170867],{"id":170866},"_813-小案例学生信息持久化","8.13 小案例：学生信息持久化",[57,170869,170871],{"className":30915,"code":170870,"language":30917,"meta":62,"style":62},"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",[64,170872,170873,170879,170889,170893,170905,170909,170913,170921,170931,170937,170941,170971,170981,170985,170989,170997,171027,171051,171055,171059,171067,171096,171101],{"__ignoreMap":62},[67,170874,170875,170877],{"class":69,"line":70},[67,170876,30929],{"class":73},[67,170878,147628],{"class":77},[67,170880,170881,170883,170885,170887],{"class":69,"line":143},[67,170882,31274],{"class":73},[67,170884,108848],{"class":77},[67,170886,30929],{"class":73},[67,170888,108853],{"class":77},[67,170890,170891],{"class":69,"line":149},[67,170892,177],{"emptyLinePlaceholder":176},[67,170894,170895,170897,170899,170901,170903],{"class":69,"line":155},[67,170896,152361],{"class":208},[67,170898,14282],{"class":73},[67,170900,109082],{"class":77},[67,170902,152368],{"class":84},[67,170904,870],{"class":77},[67,170906,170907],{"class":69,"line":161},[67,170908,177],{"emptyLinePlaceholder":176},[67,170910,170911],{"class":69,"line":167},[67,170912,177],{"emptyLinePlaceholder":176},[67,170914,170915,170917,170919],{"class":69,"line":173},[67,170916,32484],{"class":73},[67,170918,152385],{"class":112},[67,170920,32490],{"class":77},[67,170922,170923,170925,170927,170929],{"class":69,"line":180},[67,170924,3821],{"class":73},[67,170926,39467],{"class":73},[67,170928,152396],{"class":208},[67,170930,152399],{"class":77},[67,170932,170933,170935],{"class":69,"line":186},[67,170934,15469],{"class":73},[67,170936,52375],{"class":77},[67,170938,170939],{"class":69,"line":444},[67,170940,177],{"emptyLinePlaceholder":176},[67,170942,170943,170945,170947,170949,170951,170953,170955,170957,170959,170961,170963,170965,170967,170969],{"class":69,"line":2335},[67,170944,34715],{"class":73},[67,170946,147328],{"class":208},[67,170948,864],{"class":77},[67,170950,152361],{"class":208},[67,170952,13153],{"class":77},[67,170954,147338],{"class":84},[67,170956,13153],{"class":77},[67,170958,147343],{"class":5935},[67,170960,909],{"class":73},[67,170962,147348],{"class":84},[67,170964,14432],{"class":77},[67,170966,31920],{"class":73},[67,170968,148690],{"class":5935},[67,170970,4459],{"class":77},[67,170972,170973,170975,170977,170979],{"class":69,"line":2340},[67,170974,15469],{"class":73},[67,170976,148701],{"class":77},[67,170978,45891],{"class":5935},[67,170980,870],{"class":77},[67,170982,170983],{"class":69,"line":2346},[67,170984,177],{"emptyLinePlaceholder":176},[67,170986,170987],{"class":69,"line":2351},[67,170988,177],{"emptyLinePlaceholder":176},[67,170990,170991,170993,170995],{"class":69,"line":2365},[67,170992,32484],{"class":73},[67,170994,152495],{"class":112},[67,170996,152498],{"class":77},[67,170998,170999,171001,171003,171005,171007,171009,171011,171013,171015,171017,171019,171021,171023,171025],{"class":69,"line":2370},[67,171000,34715],{"class":73},[67,171002,147328],{"class":208},[67,171004,864],{"class":77},[67,171006,152361],{"class":208},[67,171008,13153],{"class":77},[67,171010,152513],{"class":84},[67,171012,13153],{"class":77},[67,171014,147343],{"class":5935},[67,171016,909],{"class":73},[67,171018,147348],{"class":84},[67,171020,14432],{"class":77},[67,171022,31920],{"class":73},[67,171024,148690],{"class":5935},[67,171026,4459],{"class":77},[67,171028,171029,171031,171033,171035,171037,171039,171041,171043,171045,171047,171049],{"class":69,"line":2376},[67,171030,152534],{"class":77},[67,171032,45891],{"class":5935},[67,171034,13153],{"class":77},[67,171036,147674],{"class":5935},[67,171038,909],{"class":73},[67,171040,34524],{"class":208},[67,171042,13153],{"class":77},[67,171044,152549],{"class":5935},[67,171046,909],{"class":73},[67,171048,939],{"class":208},[67,171050,870],{"class":77},[67,171052,171053],{"class":69,"line":2397},[67,171054,177],{"emptyLinePlaceholder":176},[67,171056,171057],{"class":69,"line":2402},[67,171058,177],{"emptyLinePlaceholder":176},[67,171060,171061,171063,171065],{"class":69,"line":2416},[67,171062,160253],{"class":77},[67,171064,909],{"class":73},[67,171066,153579],{"class":77},[67,171068,171069,171072,171074,171076,171078,171080,171082,171084,171086,171088,171090,171092,171094],{"class":69,"line":2421},[67,171070,171071],{"class":77},"students.append({",[67,171073,63216],{"class":84},[67,171075,51974],{"class":77},[67,171077,150425],{"class":84},[67,171079,13153],{"class":77},[67,171081,69661],{"class":84},[67,171083,51974],{"class":77},[67,171085,1506],{"class":208},[67,171087,13153],{"class":77},[67,171089,152009],{"class":84},[67,171091,51974],{"class":77},[67,171093,1845],{"class":208},[67,171095,165689],{"class":77},[67,171097,171098],{"class":69,"line":2450},[67,171099,171100],{"class":77},"save_students(students)\n",[67,171102,171103,171105,171107,171110],{"class":69,"line":2455},[67,171104,30952],{"class":208},[67,171106,864],{"class":77},[67,171108,171109],{"class":84},"\"保存成功\"",[67,171111,870],{"class":77},[803,171113,171115],{"id":171114},"_814-易错点","8.14 易错点",[815,171117,171118,171122,171128,171133,171140,171147],{},[818,171119,171120,169381],{},[64,171121,1651],{},[818,171123,171124,171125,28922],{},"读写中文要指定 ",[64,171126,171127],{},"encoding=\"utf-8\"",[818,171129,171130,171131,28922],{},"打开文件后要关闭，推荐使用 ",[64,171132,108370],{},[818,171134,171135,171136,171139],{},"读取大文件不要直接 ",[64,171137,171138],{},"read()"," 全部内容。",[818,171141,171142,171143,171146],{},"Windows 写 CSV 时建议加 ",[64,171144,171145],{},"newline=\"\"","，避免空行。",[818,171148,171149],{},"JSON 只能保存基础数据类型，不能直接保存函数、文件对象等。",[803,171151,171153],{"id":171152},"_815-本章练习","8.15 本章练习",[815,171155,171156,171163,171168,171171,171174],{},[818,171157,171158,171159,171162],{},"写入一个 ",[64,171160,171161],{},"students.txt","，每行保存一个学生姓名。",[818,171164,104892,171165,171167],{},[64,171166,171161],{}," 并输出所有学生。",[818,171169,171170],{},"把学生列表保存为 JSON 文件。",[818,171172,171173],{},"从 JSON 文件读取学生数据，计算平均分。",[818,171175,171176,171177,171180,171181,171184],{},"写一个日志函数 ",[64,171178,171179],{},"write_log(message)","，每次调用向 ",[64,171182,171183],{},"app.log"," 追加一行。",[779,171186,171187],{},"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":62,"searchDepth":143,"depth":143,"links":171189},[171190,171191,171195,171196,171202,171203,171204,171205,171206,171207,171208,171209,171210,171211,171212],{"id":168701,"depth":143,"text":168702},{"id":168742,"depth":143,"text":168743,"children":171192},[171193,171194],{"id":168746,"depth":149,"text":168747},{"id":168780,"depth":149,"text":168781},{"id":168894,"depth":143,"text":168895},{"id":168987,"depth":143,"text":168988,"children":171197},[171198,171199,171200,171201],{"id":168991,"depth":149,"text":168992},{"id":169078,"depth":149,"text":169079},{"id":169148,"depth":149,"text":169149},{"id":169242,"depth":149,"text":169243},{"id":169312,"depth":143,"text":169313},{"id":169375,"depth":143,"text":169376},{"id":169536,"depth":143,"text":169537},{"id":169599,"depth":143,"text":169600},{"id":169715,"depth":143,"text":169716},{"id":169925,"depth":143,"text":169926},{"id":170237,"depth":143,"text":170238},{"id":170648,"depth":143,"text":170649},{"id":170866,"depth":143,"text":170867},{"id":171114,"depth":143,"text":171115},{"id":171152,"depth":143,"text":171153},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch8",{"title":168693,"description":24093},"wiki\u002F2024-10-10-python教程\u002Fch8-文件操作","TCxYv9FRIlOsuS2LeUSgcbxHSxHOruKUW4ZecWBr6Yo",{"id":171219,"title":171220,"body":171221,"description":24093,"extension":787,"meta":173407,"navigation":176,"path":173408,"seo":173409,"stem":173410,"__hash__":173411},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包.md","9. 异常、模块与包",{"type":7,"value":171222,"toc":173374},[171223,171226,171230,171233,171236,171328,171330,171349,171354,171358,171361,171364,171393,171400,171403,171407,171410,171439,171441,171493,171499,171552,171556,171654,171657,171724,171728,171785,171787,171793,171797,171802,171808,171899,171904,171908,171911,171989,171992,172030,172034,172152,172155,172159,172162,172207,172210,172214,172219,172225,172275,172278,172309,172313,172317,172347,172351,172386,172390,172425,172465,172469,172485,172488,172492,172496,172575,172579,172620,172624,172679,172683,172717,172721,172751,172760,172767,172773,172830,172833,172841,172844,172848,172855,172858,172864,172867,172884,172889,172893,172899,172912,172915,172952,172955,172966,172969,172983,172986,173000,173004,173011,173044,173047,173049,173055,173058,173062,173064,173070,173075,173248,173252,173315,173319,173343,173347,173371],[10,171224,171220],{"id":171225},"_9-异常模块与包",[803,171227,171229],{"id":171228},"_91-什么是异常","9.1 什么是异常",[19,171231,171232],{},"异常是程序运行过程中出现的错误。",[19,171234,171235],{},"常见异常：",[998,171237,171238,171247],{},[1001,171239,171240],{},[1004,171241,171242,171245],{},[1007,171243,171244],{},"异常",[1007,171246,26578],{},[1044,171248,171249,171259,171269,171278,171288,171298,171308,171318],{},[1004,171250,171251,171256],{},[1049,171252,171253],{},[64,171254,171255],{},"NameError",[1049,171257,171258],{},"使用了未定义变量",[1004,171260,171261,171266],{},[1049,171262,171263],{},[64,171264,171265],{},"TypeError",[1049,171267,171268],{},"类型不匹配",[1004,171270,171271,171275],{},[1049,171272,171273],{},[64,171274,155371],{},[1049,171276,171277],{},"值不合法",[1004,171279,171280,171285],{},[1049,171281,171282],{},[64,171283,171284],{},"IndexError",[1049,171286,171287],{},"列表索引越界",[1004,171289,171290,171295],{},[1049,171291,171292],{},[64,171293,171294],{},"KeyError",[1049,171296,171297],{},"字典 key 不存在",[1004,171299,171300,171305],{},[1049,171301,171302],{},[64,171303,171304],{},"FileNotFoundError",[1049,171306,171307],{},"文件不存在",[1004,171309,171310,171315],{},[1049,171311,171312],{},[64,171313,171314],{},"ZeroDivisionError",[1049,171316,171317],{},"除数为 0",[1004,171319,171320,171325],{},[1049,171321,171322],{},[64,171323,171324],{},"ImportError",[1049,171326,171327],{},"导入失败",[19,171329,15852],{},[57,171331,171333],{"className":30915,"code":171332,"language":30917,"meta":62,"style":62},"num = int(\"abc\")\n",[64,171334,171335],{"__ignoreMap":62},[67,171336,171337,171339,171341,171343,171345,171347],{"class":69,"line":70},[67,171338,156324],{"class":77},[67,171340,909],{"class":73},[67,171342,3104],{"class":208},[67,171344,864],{"class":77},[67,171346,156417],{"class":84},[67,171348,870],{"class":77},[19,171350,171351,171352,28922],{},"会触发 ",[64,171353,155371],{},[803,171355,171357],{"id":171356},"_92-为什么要处理异常","9.2 为什么要处理异常",[19,171359,171360],{},"如果不处理异常，程序会直接终止。",[19,171362,171363],{},"例如用户输入年龄：",[57,171365,171367],{"className":30915,"code":171366,"language":30917,"meta":62,"style":62},"age = int(input(\"请输入年龄:\"))\nprint(age)\n",[64,171368,171369,171387],{"__ignoreMap":62},[67,171370,171371,171373,171375,171377,171379,171381,171383,171385],{"class":69,"line":70},[67,171372,147083],{"class":77},[67,171374,909],{"class":73},[67,171376,3104],{"class":208},[67,171378,864],{"class":77},[67,171380,54358],{"class":208},[67,171382,864],{"class":77},[67,171384,152931],{"class":84},[67,171386,31034],{"class":77},[67,171388,171389,171391],{"class":69,"line":143},[67,171390,30952],{"class":208},[67,171392,156298],{"class":77},[19,171394,171395,171396,171399],{},"用户输入 ",[64,171397,171398],{},"abc","，程序就会报错退出。",[19,171401,171402],{},"异常处理可以让程序在出错时给出友好提示，并继续运行。",[803,171404,171406],{"id":171405},"_93-try-except","9.3 try except",[19,171408,171409],{},"基础语法：",[57,171411,171413],{"className":30915,"code":171412,"language":30917,"meta":62,"style":62},"try:\n    可能出错的代码\nexcept:\n    出错后的处理代码\n",[64,171414,171415,171422,171427,171434],{"__ignoreMap":62},[67,171416,171417,171420],{"class":69,"line":70},[67,171418,171419],{"class":73},"try",[67,171421,4459],{"class":77},[67,171423,171424],{"class":69,"line":143},[67,171425,171426],{"class":77},"    可能出错的代码\n",[67,171428,171429,171432],{"class":69,"line":149},[67,171430,171431],{"class":73},"except",[67,171433,4459],{"class":77},[67,171435,171436],{"class":69,"line":155},[67,171437,171438],{"class":77},"    出错后的处理代码\n",[19,171440,15852],{},[57,171442,171444],{"className":30915,"code":171443,"language":30917,"meta":62,"style":62},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept:\n    print(\"年龄必须是数字\")\n",[64,171445,171446,171452,171470,171476,171482],{"__ignoreMap":62},[67,171447,171448,171450],{"class":69,"line":70},[67,171449,171419],{"class":73},[67,171451,4459],{"class":77},[67,171453,171454,171456,171458,171460,171462,171464,171466,171468],{"class":69,"line":143},[67,171455,152923],{"class":77},[67,171457,909],{"class":73},[67,171459,3104],{"class":208},[67,171461,864],{"class":77},[67,171463,54358],{"class":208},[67,171465,864],{"class":77},[67,171467,152931],{"class":84},[67,171469,31034],{"class":77},[67,171471,171472,171474],{"class":69,"line":149},[67,171473,31836],{"class":208},[67,171475,156298],{"class":77},[67,171477,171478,171480],{"class":69,"line":155},[67,171479,171431],{"class":73},[67,171481,4459],{"class":77},[67,171483,171484,171486,171488,171491],{"class":69,"line":161},[67,171485,31836],{"class":208},[67,171487,864],{"class":77},[67,171489,171490],{"class":84},"\"年龄必须是数字\"",[67,171492,870],{"class":77},[19,171494,171495,171496,171498],{},"不建议裸写 ",[64,171497,171431],{},"，最好指定异常类型。",[57,171500,171502],{"className":30915,"code":171501,"language":30917,"meta":62,"style":62},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept ValueError:\n    print(\"年龄必须是数字\")\n",[64,171503,171504,171510,171528,171534,171542],{"__ignoreMap":62},[67,171505,171506,171508],{"class":69,"line":70},[67,171507,171419],{"class":73},[67,171509,4459],{"class":77},[67,171511,171512,171514,171516,171518,171520,171522,171524,171526],{"class":69,"line":143},[67,171513,152923],{"class":77},[67,171515,909],{"class":73},[67,171517,3104],{"class":208},[67,171519,864],{"class":77},[67,171521,54358],{"class":208},[67,171523,864],{"class":77},[67,171525,152931],{"class":84},[67,171527,31034],{"class":77},[67,171529,171530,171532],{"class":69,"line":149},[67,171531,31836],{"class":208},[67,171533,156298],{"class":77},[67,171535,171536,171538,171540],{"class":69,"line":155},[67,171537,171431],{"class":73},[67,171539,152763],{"class":208},[67,171541,4459],{"class":77},[67,171543,171544,171546,171548,171550],{"class":69,"line":161},[67,171545,31836],{"class":208},[67,171547,864],{"class":77},[67,171549,171490],{"class":84},[67,171551,870],{"class":77},[803,171553,171555],{"id":171554},"_94-捕获多个异常","9.4 捕获多个异常",[57,171557,171559],{"className":30915,"code":171558,"language":30917,"meta":62,"style":62},"try:\n    nums = [1, 2, 3]\n    index = int(input(\"请输入索引:\"))\n    print(nums[index])\nexcept ValueError:\n    print(\"索引必须是整数\")\nexcept IndexError:\n    print(\"索引越界\")\n",[64,171560,171561,171567,171588,171608,171615,171623,171634,171643],{"__ignoreMap":62},[67,171562,171563,171565],{"class":69,"line":70},[67,171564,171419],{"class":73},[67,171566,4459],{"class":77},[67,171568,171569,171572,171574,171576,171578,171580,171582,171584,171586],{"class":69,"line":143},[67,171570,171571],{"class":77},"    nums ",[67,171573,909],{"class":73},[67,171575,52763],{"class":77},[67,171577,1077],{"class":208},[67,171579,13153],{"class":77},[67,171581,939],{"class":208},[67,171583,13153],{"class":77},[67,171585,933],{"class":208},[67,171587,33783],{"class":77},[67,171589,171590,171593,171595,171597,171599,171601,171603,171606],{"class":69,"line":149},[67,171591,171592],{"class":77},"    index ",[67,171594,909],{"class":73},[67,171596,3104],{"class":208},[67,171598,864],{"class":77},[67,171600,54358],{"class":208},[67,171602,864],{"class":77},[67,171604,171605],{"class":84},"\"请输入索引:\"",[67,171607,31034],{"class":77},[67,171609,171610,171612],{"class":69,"line":155},[67,171611,31836],{"class":208},[67,171613,171614],{"class":77},"(nums[index])\n",[67,171616,171617,171619,171621],{"class":69,"line":161},[67,171618,171431],{"class":73},[67,171620,152763],{"class":208},[67,171622,4459],{"class":77},[67,171624,171625,171627,171629,171632],{"class":69,"line":167},[67,171626,31836],{"class":208},[67,171628,864],{"class":77},[67,171630,171631],{"class":84},"\"索引必须是整数\"",[67,171633,870],{"class":77},[67,171635,171636,171638,171641],{"class":69,"line":173},[67,171637,171431],{"class":73},[67,171639,171640],{"class":208}," IndexError",[67,171642,4459],{"class":77},[67,171644,171645,171647,171649,171652],{"class":69,"line":180},[67,171646,31836],{"class":208},[67,171648,864],{"class":77},[67,171650,171651],{"class":84},"\"索引越界\"",[67,171653,870],{"class":77},[19,171655,171656],{},"多个异常使用相同处理逻辑：",[57,171658,171660],{"className":30915,"code":171659,"language":30917,"meta":62,"style":62},"try:\n    num = int(input(\"请输入数字:\"))\n    print(10 \u002F num)\nexcept (ValueError, ZeroDivisionError):\n    print(\"输入不合法\")\n",[64,171661,171662,171668,171686,171699,171713],{"__ignoreMap":62},[67,171663,171664,171666],{"class":69,"line":70},[67,171665,171419],{"class":73},[67,171667,4459],{"class":77},[67,171669,171670,171672,171674,171676,171678,171680,171682,171684],{"class":69,"line":143},[67,171671,46130],{"class":77},[67,171673,909],{"class":73},[67,171675,3104],{"class":208},[67,171677,864],{"class":77},[67,171679,54358],{"class":208},[67,171681,864],{"class":77},[67,171683,156333],{"class":84},[67,171685,31034],{"class":77},[67,171687,171688,171690,171692,171694,171696],{"class":69,"line":149},[67,171689,31836],{"class":208},[67,171691,864],{"class":77},[67,171693,1303],{"class":208},[67,171695,156583],{"class":73},[67,171697,171698],{"class":77}," num)\n",[67,171700,171701,171703,171705,171707,171709,171711],{"class":69,"line":155},[67,171702,171431],{"class":73},[67,171704,2381],{"class":77},[67,171706,155371],{"class":208},[67,171708,13153],{"class":77},[67,171710,171314],{"class":208},[67,171712,31323],{"class":77},[67,171714,171715,171717,171719,171722],{"class":69,"line":161},[67,171716,31836],{"class":208},[67,171718,864],{"class":77},[67,171720,171721],{"class":84},"\"输入不合法\"",[67,171723,870],{"class":77},[803,171725,171727],{"id":171726},"_95-获取异常信息","9.5 获取异常信息",[57,171729,171731],{"className":30915,"code":171730,"language":30917,"meta":62,"style":62},"try:\n    num = int(\"abc\")\nexcept ValueError as e:\n    print(f\"出错了:{e}\")\n",[64,171732,171733,171739,171753,171764],{"__ignoreMap":62},[67,171734,171735,171737],{"class":69,"line":70},[67,171736,171419],{"class":73},[67,171738,4459],{"class":77},[67,171740,171741,171743,171745,171747,171749,171751],{"class":69,"line":143},[67,171742,46130],{"class":77},[67,171744,909],{"class":73},[67,171746,3104],{"class":208},[67,171748,864],{"class":77},[67,171750,156417],{"class":84},[67,171752,870],{"class":77},[67,171754,171755,171757,171759,171761],{"class":69,"line":149},[67,171756,171431],{"class":73},[67,171758,152763],{"class":208},[67,171760,65141],{"class":73},[67,171762,171763],{"class":77}," e:\n",[67,171765,171766,171768,171770,171772,171775,171777,171779,171781,171783],{"class":69,"line":155},[67,171767,31836],{"class":208},[67,171769,864],{"class":77},[67,171771,915],{"class":73},[67,171773,171774],{"class":84},"\"出错了:",[67,171776,1752],{"class":208},[67,171778,936],{"class":77},[67,171780,1802],{"class":208},[67,171782,257],{"class":84},[67,171784,870],{"class":77},[19,171786,146994],{},[57,171788,171791],{"className":171789,"code":171790,"language":5906,"meta":62},[5904],"出错了:invalid literal for int() with base 10: 'abc'\n",[64,171792,171790],{"__ignoreMap":62},[803,171794,171796],{"id":171795},"_96-else和finally","9.6 else和finally",[19,171798,171799,171801],{},[64,171800,2424],{},"：没有异常时执行。",[19,171803,171804,171807],{},[64,171805,171806],{},"finally","：无论是否异常都会执行。",[57,171809,171811],{"className":30915,"code":171810,"language":30917,"meta":62,"style":62},"try:\n    num = int(input(\"请输入数字:\"))\nexcept ValueError:\n    print(\"输入错误\")\nelse:\n    print(f\"输入正确:{num}\")\nfinally:\n    print(\"程序结束\")\n",[64,171812,171813,171819,171837,171845,171855,171861,171882,171888],{"__ignoreMap":62},[67,171814,171815,171817],{"class":69,"line":70},[67,171816,171419],{"class":73},[67,171818,4459],{"class":77},[67,171820,171821,171823,171825,171827,171829,171831,171833,171835],{"class":69,"line":143},[67,171822,46130],{"class":77},[67,171824,909],{"class":73},[67,171826,3104],{"class":208},[67,171828,864],{"class":77},[67,171830,54358],{"class":208},[67,171832,864],{"class":77},[67,171834,156333],{"class":84},[67,171836,31034],{"class":77},[67,171838,171839,171841,171843],{"class":69,"line":149},[67,171840,171431],{"class":73},[67,171842,152763],{"class":208},[67,171844,4459],{"class":77},[67,171846,171847,171849,171851,171853],{"class":69,"line":155},[67,171848,31836],{"class":208},[67,171850,864],{"class":77},[67,171852,153751],{"class":84},[67,171854,870],{"class":77},[67,171856,171857,171859],{"class":69,"line":161},[67,171858,2424],{"class":73},[67,171860,4459],{"class":77},[67,171862,171863,171865,171867,171869,171872,171874,171876,171878,171880],{"class":69,"line":167},[67,171864,31836],{"class":208},[67,171866,864],{"class":77},[67,171868,915],{"class":73},[67,171870,171871],{"class":84},"\"输入正确:",[67,171873,1752],{"class":208},[67,171875,2388],{"class":77},[67,171877,1802],{"class":208},[67,171879,257],{"class":84},[67,171881,870],{"class":77},[67,171883,171884,171886],{"class":69,"line":173},[67,171885,171806],{"class":73},[67,171887,4459],{"class":77},[67,171889,171890,171892,171894,171897],{"class":69,"line":180},[67,171891,31836],{"class":208},[67,171893,864],{"class":77},[67,171895,171896],{"class":84},"\"程序结束\"",[67,171898,870],{"class":77},[19,171900,171901,171903],{},[64,171902,171806],{}," 常用于释放资源，如关闭文件、关闭网络连接。",[803,171905,171907],{"id":171906},"_97-抛出异常","9.7 抛出异常",[19,171909,171910],{},"程序可以主动抛出异常。",[57,171912,171914],{"className":30915,"code":171913,"language":30917,"meta":62,"style":62},"def set_age(age):\n    if age \u003C 0:\n        raise ValueError(\"年龄不能为负数\")\n    print(f\"年龄:{age}\")\n\n\nset_age(-1)\n",[64,171915,171916,171925,171937,171950,171970,171974,171978],{"__ignoreMap":62},[67,171917,171918,171920,171923],{"class":69,"line":70},[67,171919,32484],{"class":73},[67,171921,171922],{"class":112}," set_age",[67,171924,161952],{"class":77},[67,171926,171927,171929,171931,171933,171935],{"class":69,"line":143},[67,171928,3821],{"class":73},[67,171930,16424],{"class":77},[67,171932,1766],{"class":73},[67,171934,4813],{"class":208},[67,171936,4459],{"class":77},[67,171938,171939,171941,171943,171945,171948],{"class":69,"line":149},[67,171940,103969],{"class":73},[67,171942,152763],{"class":208},[67,171944,864],{"class":77},[67,171946,171947],{"class":84},"\"年龄不能为负数\"",[67,171949,870],{"class":77},[67,171951,171952,171954,171956,171958,171960,171962,171964,171966,171968],{"class":69,"line":155},[67,171953,31836],{"class":208},[67,171955,864],{"class":77},[67,171957,915],{"class":73},[67,171959,162520],{"class":84},[67,171961,1752],{"class":208},[67,171963,70758],{"class":77},[67,171965,1802],{"class":208},[67,171967,257],{"class":84},[67,171969,870],{"class":77},[67,171971,171972],{"class":69,"line":161},[67,171973,177],{"emptyLinePlaceholder":176},[67,171975,171976],{"class":69,"line":167},[67,171977,177],{"emptyLinePlaceholder":176},[67,171979,171980,171983,171985,171987],{"class":69,"line":173},[67,171981,171982],{"class":77},"set_age(",[67,171984,1389],{"class":73},[67,171986,1077],{"class":208},[67,171988,870],{"class":77},[19,171990,171991],{},"调用者可以捕获：",[57,171993,171995],{"className":30915,"code":171994,"language":30917,"meta":62,"style":62},"try:\n    set_age(-1)\nexcept ValueError as e:\n    print(e)\n",[64,171996,171997,172003,172014,172024],{"__ignoreMap":62},[67,171998,171999,172001],{"class":69,"line":70},[67,172000,171419],{"class":73},[67,172002,4459],{"class":77},[67,172004,172005,172008,172010,172012],{"class":69,"line":143},[67,172006,172007],{"class":77},"    set_age(",[67,172009,1389],{"class":73},[67,172011,1077],{"class":208},[67,172013,870],{"class":77},[67,172015,172016,172018,172020,172022],{"class":69,"line":149},[67,172017,171431],{"class":73},[67,172019,152763],{"class":208},[67,172021,65141],{"class":73},[67,172023,171763],{"class":77},[67,172025,172026,172028],{"class":69,"line":155},[67,172027,31836],{"class":208},[67,172029,67536],{"class":77},[803,172031,172033],{"id":172032},"_98-自定义异常","9.8 自定义异常",[57,172035,172037],{"className":30915,"code":172036,"language":30917,"meta":62,"style":62},"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",[64,172038,172039,172053,172057,172061,172065,172073,172083,172094,172104,172108,172112,172118,172135,172146],{"__ignoreMap":62},[67,172040,172041,172043,172046,172048,172051],{"class":69,"line":70},[67,172042,15411],{"class":73},[67,172044,172045],{"class":112}," BalanceNotEnoughError",[67,172047,864],{"class":77},[67,172049,172050],{"class":208},"Exception",[67,172052,31323],{"class":77},[67,172054,172055],{"class":69,"line":143},[67,172056,150074],{"class":73},[67,172058,172059],{"class":69,"line":149},[67,172060,177],{"emptyLinePlaceholder":176},[67,172062,172063],{"class":69,"line":155},[67,172064,177],{"emptyLinePlaceholder":176},[67,172066,172067,172069,172071],{"class":69,"line":161},[67,172068,32484],{"class":73},[67,172070,150723],{"class":112},[67,172072,163349],{"class":77},[67,172074,172075,172077,172079,172081],{"class":69,"line":167},[67,172076,3821],{"class":73},[67,172078,150679],{"class":77},[67,172080,1816],{"class":73},[67,172082,163126],{"class":77},[67,172084,172085,172087,172090,172092],{"class":69,"line":173},[67,172086,103969],{"class":73},[67,172088,172089],{"class":77}," BalanceNotEnoughError(",[67,172091,150774],{"class":84},[67,172093,870],{"class":77},[67,172095,172096,172098,172100,172102],{"class":69,"line":180},[67,172097,4810],{"class":73},[67,172099,163356],{"class":77},[67,172101,1389],{"class":73},[67,172103,150712],{"class":77},[67,172105,172106],{"class":69,"line":186},[67,172107,177],{"emptyLinePlaceholder":176},[67,172109,172110],{"class":69,"line":444},[67,172111,177],{"emptyLinePlaceholder":176},[67,172113,172114,172116],{"class":69,"line":2335},[67,172115,171419],{"class":73},[67,172117,4459],{"class":77},[67,172119,172120,172122,172124,172127,172129,172131,172133],{"class":69,"line":2340},[67,172121,163027],{"class":77},[67,172123,909],{"class":73},[67,172125,172126],{"class":77}," withdraw(",[67,172128,1169],{"class":208},[67,172130,13153],{"class":77},[67,172132,2445],{"class":208},[67,172134,870],{"class":77},[67,172136,172137,172139,172142,172144],{"class":69,"line":2346},[67,172138,171431],{"class":73},[67,172140,172141],{"class":77}," BalanceNotEnoughError ",[67,172143,31920],{"class":73},[67,172145,171763],{"class":77},[67,172147,172148,172150],{"class":69,"line":2351},[67,172149,31836],{"class":208},[67,172151,67536],{"class":77},[19,172153,172154],{},"入门阶段大多数情况使用内置异常即可。",[803,172156,172158],{"id":172157},"_99-traceback","9.9 traceback",[19,172160,172161],{},"调试时可以输出完整异常堆栈。",[57,172163,172165],{"className":30915,"code":172164,"language":30917,"meta":62,"style":62},"import traceback\n\ntry:\n    int(\"abc\")\nexcept ValueError:\n    traceback.print_exc()\n",[64,172166,172167,172174,172178,172184,172194,172202],{"__ignoreMap":62},[67,172168,172169,172171],{"class":69,"line":70},[67,172170,30929],{"class":73},[67,172172,172173],{"class":77}," traceback\n",[67,172175,172176],{"class":69,"line":143},[67,172177,177],{"emptyLinePlaceholder":176},[67,172179,172180,172182],{"class":69,"line":149},[67,172181,171419],{"class":73},[67,172183,4459],{"class":77},[67,172185,172186,172188,172190,172192],{"class":69,"line":155},[67,172187,2707],{"class":208},[67,172189,864],{"class":77},[67,172191,156417],{"class":84},[67,172193,870],{"class":77},[67,172195,172196,172198,172200],{"class":69,"line":161},[67,172197,171431],{"class":73},[67,172199,152763],{"class":208},[67,172201,4459],{"class":77},[67,172203,172204],{"class":69,"line":167},[67,172205,172206],{"class":77},"    traceback.print_exc()\n",[19,172208,172209],{},"日志系统中常把异常堆栈记录到文件。",[803,172211,172213],{"id":172212},"_910-什么是模块","9.10 什么是模块",[19,172215,172216,172217,126520],{},"模块就是一个 ",[64,172218,146889],{},[19,172220,172221,172222,25331],{},"例如创建 ",[64,172223,172224],{},"my_math.py",[57,172226,172228],{"className":30915,"code":172227,"language":30917,"meta":62,"style":62},"def add(a, b):\n    return a + b\n\n\ndef sub(a, b):\n    return a - b\n",[64,172229,172230,172238,172248,172252,172256,172265],{"__ignoreMap":62},[67,172231,172232,172234,172236],{"class":69,"line":70},[67,172233,32484],{"class":73},[67,172235,5928],{"class":112},[67,172237,151630],{"class":77},[67,172239,172240,172242,172244,172246],{"class":69,"line":143},[67,172241,4810],{"class":73},[67,172243,11587],{"class":77},[67,172245,1338],{"class":73},[67,172247,151641],{"class":77},[67,172249,172250],{"class":69,"line":149},[67,172251,177],{"emptyLinePlaceholder":176},[67,172253,172254],{"class":69,"line":155},[67,172255,177],{"emptyLinePlaceholder":176},[67,172257,172258,172260,172263],{"class":69,"line":161},[67,172259,32484],{"class":73},[67,172261,172262],{"class":112}," sub",[67,172264,151630],{"class":77},[67,172266,172267,172269,172271,172273],{"class":69,"line":167},[67,172268,4810],{"class":73},[67,172270,11587],{"class":77},[67,172272,1389],{"class":73},[67,172274,151641],{"class":77},[19,172276,172277],{},"在另一个文件中导入：",[57,172279,172281],{"className":30915,"code":172280,"language":30917,"meta":62,"style":62},"import my_math\n\nprint(my_math.add(1, 2))\n",[64,172282,172283,172290,172294],{"__ignoreMap":62},[67,172284,172285,172287],{"class":69,"line":70},[67,172286,30929],{"class":73},[67,172288,172289],{"class":77}," my_math\n",[67,172291,172292],{"class":69,"line":143},[67,172293,177],{"emptyLinePlaceholder":176},[67,172295,172296,172298,172301,172303,172305,172307],{"class":69,"line":149},[67,172297,30952],{"class":208},[67,172299,172300],{"class":77},"(my_math.add(",[67,172302,1077],{"class":208},[67,172304,13153],{"class":77},[67,172306,939],{"class":208},[67,172308,31034],{"class":77},[803,172310,172312],{"id":172311},"_911-import导入","9.11 import导入",[14,172314,172316],{"id":172315},"_9111-导入模块","9.11.1 导入模块",[57,172318,172320],{"className":30915,"code":172319,"language":30917,"meta":62,"style":62},"import random\n\nprint(random.randint(1, 10))\n",[64,172321,172322,172328,172332],{"__ignoreMap":62},[67,172323,172324,172326],{"class":69,"line":70},[67,172325,30929],{"class":73},[67,172327,45865],{"class":77},[67,172329,172330],{"class":69,"line":143},[67,172331,177],{"emptyLinePlaceholder":176},[67,172333,172334,172336,172339,172341,172343,172345],{"class":69,"line":149},[67,172335,30952],{"class":208},[67,172337,172338],{"class":77},"(random.randint(",[67,172340,1077],{"class":208},[67,172342,13153],{"class":77},[67,172344,1303],{"class":208},[67,172346,31034],{"class":77},[14,172348,172350],{"id":172349},"_9112-导入指定内容","9.11.2 导入指定内容",[57,172352,172354],{"className":30915,"code":172353,"language":30917,"meta":62,"style":62},"from random import randint\n\nprint(randint(1, 10))\n",[64,172355,172356,172367,172371],{"__ignoreMap":62},[67,172357,172358,172360,172362,172364],{"class":69,"line":70},[67,172359,31274],{"class":73},[67,172361,58333],{"class":77},[67,172363,30929],{"class":73},[67,172365,172366],{"class":77}," randint\n",[67,172368,172369],{"class":69,"line":143},[67,172370,177],{"emptyLinePlaceholder":176},[67,172372,172373,172375,172378,172380,172382,172384],{"class":69,"line":149},[67,172374,30952],{"class":208},[67,172376,172377],{"class":77},"(randint(",[67,172379,1077],{"class":208},[67,172381,13153],{"class":77},[67,172383,1303],{"class":208},[67,172385,31034],{"class":77},[14,172387,172389],{"id":172388},"_9113-起别名","9.11.3 起别名",[57,172391,172393],{"className":30915,"code":172392,"language":30917,"meta":62,"style":62},"import random as rd\n\nprint(rd.randint(1, 10))\n",[64,172394,172395,172406,172410],{"__ignoreMap":62},[67,172396,172397,172399,172401,172403],{"class":69,"line":70},[67,172398,30929],{"class":73},[67,172400,58333],{"class":77},[67,172402,31920],{"class":73},[67,172404,172405],{"class":77}," rd\n",[67,172407,172408],{"class":69,"line":143},[67,172409,177],{"emptyLinePlaceholder":176},[67,172411,172412,172414,172417,172419,172421,172423],{"class":69,"line":149},[67,172413,30952],{"class":208},[67,172415,172416],{"class":77},"(rd.randint(",[67,172418,1077],{"class":208},[67,172420,13153],{"class":77},[67,172422,1303],{"class":208},[67,172424,31034],{"class":77},[57,172426,172428],{"className":30915,"code":172427,"language":30917,"meta":62,"style":62},"from random import randint as rint\n\nprint(rint(1, 10))\n",[64,172429,172430,172446,172450],{"__ignoreMap":62},[67,172431,172432,172434,172436,172438,172441,172443],{"class":69,"line":70},[67,172433,31274],{"class":73},[67,172435,58333],{"class":77},[67,172437,30929],{"class":73},[67,172439,172440],{"class":77}," randint ",[67,172442,31920],{"class":73},[67,172444,172445],{"class":77}," rint\n",[67,172447,172448],{"class":69,"line":143},[67,172449,177],{"emptyLinePlaceholder":176},[67,172451,172452,172454,172457,172459,172461,172463],{"class":69,"line":149},[67,172453,30952],{"class":208},[67,172455,172456],{"class":77},"(rint(",[67,172458,1077],{"class":208},[67,172460,13153],{"class":77},[67,172462,1303],{"class":208},[67,172464,31034],{"class":77},[14,172466,172468],{"id":172467},"_9114-不推荐星号导入","9.11.4 不推荐星号导入",[57,172470,172472],{"className":30915,"code":172471,"language":30917,"meta":62,"style":62},"from random import *\n",[64,172473,172474],{"__ignoreMap":62},[67,172475,172476,172478,172480,172482],{"class":69,"line":70},[67,172477,31274],{"class":73},[67,172479,58333],{"class":77},[67,172481,30929],{"class":73},[67,172483,172484],{"class":73}," *\n",[19,172486,172487],{},"这种写法会让当前文件多出很多名字，容易冲突，不利于阅读。",[803,172489,172491],{"id":172490},"_912-常用内置模块","9.12 常用内置模块",[14,172493,172495],{"id":172494},"_9121-random","9.12.1 random",[57,172497,172499],{"className":30915,"code":172498,"language":30917,"meta":62,"style":62},"import random\n\nprint(random.randint(1, 10))\nprint(random.choice([\"小明\", \"小红\", \"小刚\"]))\nprint(random.sample([1, 2, 3, 4, 5], 2))\n",[64,172500,172501,172507,172511,172525,172544],{"__ignoreMap":62},[67,172502,172503,172505],{"class":69,"line":70},[67,172504,30929],{"class":73},[67,172506,45865],{"class":77},[67,172508,172509],{"class":69,"line":143},[67,172510,177],{"emptyLinePlaceholder":176},[67,172512,172513,172515,172517,172519,172521,172523],{"class":69,"line":149},[67,172514,30952],{"class":208},[67,172516,172338],{"class":77},[67,172518,1077],{"class":208},[67,172520,13153],{"class":77},[67,172522,1303],{"class":208},[67,172524,31034],{"class":77},[67,172526,172527,172529,172532,172534,172536,172538,172540,172542],{"class":69,"line":155},[67,172528,30952],{"class":208},[67,172530,172531],{"class":77},"(random.choice([",[67,172533,150425],{"class":84},[67,172535,13153],{"class":77},[67,172537,151473],{"class":84},[67,172539,13153],{"class":77},[67,172541,160268],{"class":84},[67,172543,33680],{"class":77},[67,172545,172546,172548,172551,172553,172555,172557,172559,172561,172563,172565,172567,172569,172571,172573],{"class":69,"line":161},[67,172547,30952],{"class":208},[67,172549,172550],{"class":77},"(random.sample([",[67,172552,1077],{"class":208},[67,172554,13153],{"class":77},[67,172556,939],{"class":208},[67,172558,13153],{"class":77},[67,172560,933],{"class":208},[67,172562,13153],{"class":77},[67,172564,1151],{"class":208},[67,172566,13153],{"class":77},[67,172568,1177],{"class":208},[67,172570,112739],{"class":77},[67,172572,939],{"class":208},[67,172574,31034],{"class":77},[14,172576,172578],{"id":172577},"_9122-time","9.12.2 time",[57,172580,172582],{"className":30915,"code":172581,"language":30917,"meta":62,"style":62},"import time\n\nprint(time.time())\ntime.sleep(1)\nprint(\"1秒后执行\")\n",[64,172583,172584,172590,172594,172601,172609],{"__ignoreMap":62},[67,172585,172586,172588],{"class":69,"line":70},[67,172587,30929],{"class":73},[67,172589,32366],{"class":77},[67,172591,172592],{"class":69,"line":143},[67,172593,177],{"emptyLinePlaceholder":176},[67,172595,172596,172598],{"class":69,"line":149},[67,172597,30952],{"class":208},[67,172599,172600],{"class":77},"(time.time())\n",[67,172602,172603,172605,172607],{"class":69,"line":155},[67,172604,95608],{"class":77},[67,172606,1077],{"class":208},[67,172608,870],{"class":77},[67,172610,172611,172613,172615,172618],{"class":69,"line":161},[67,172612,30952],{"class":208},[67,172614,864],{"class":77},[67,172616,172617],{"class":84},"\"1秒后执行\"",[67,172619,870],{"class":77},[14,172621,172623],{"id":172622},"_9123-datetime","9.12.3 datetime",[57,172625,172627],{"className":30915,"code":172626,"language":30917,"meta":62,"style":62},"from datetime import datetime\n\nnow = datetime.now()\nprint(now)\nprint(now.strftime(\"%Y-%m-%d %H:%M:%S\"))\n",[64,172628,172629,172641,172645,172655,172662],{"__ignoreMap":62},[67,172630,172631,172633,172636,172638],{"class":69,"line":70},[67,172632,31274],{"class":73},[67,172634,172635],{"class":77}," datetime ",[67,172637,30929],{"class":73},[67,172639,172640],{"class":77}," datetime\n",[67,172642,172643],{"class":69,"line":143},[67,172644,177],{"emptyLinePlaceholder":176},[67,172646,172647,172650,172652],{"class":69,"line":149},[67,172648,172649],{"class":77},"now ",[67,172651,909],{"class":73},[67,172653,172654],{"class":77}," datetime.now()\n",[67,172656,172657,172659],{"class":69,"line":155},[67,172658,30952],{"class":208},[67,172660,172661],{"class":77},"(now)\n",[67,172663,172664,172666,172669,172672,172674,172677],{"class":69,"line":161},[67,172665,30952],{"class":208},[67,172667,172668],{"class":77},"(now.strftime(",[67,172670,172671],{"class":84},"\"%Y-%m-",[67,172673,157228],{"class":208},[67,172675,172676],{"class":84}," %H:%M:%S\"",[67,172678,31034],{"class":77},[14,172680,172682],{"id":172681},"_9124-os","9.12.4 os",[57,172684,172686],{"className":30915,"code":172685,"language":30917,"meta":62,"style":62},"import os\n\nprint(os.getcwd())\nprint(os.listdir(\".\"))\n",[64,172687,172688,172694,172698,172705],{"__ignoreMap":62},[67,172689,172690,172692],{"class":69,"line":70},[67,172691,30929],{"class":73},[67,172693,45842],{"class":77},[67,172695,172696],{"class":69,"line":143},[67,172697,177],{"emptyLinePlaceholder":176},[67,172699,172700,172702],{"class":69,"line":149},[67,172701,30952],{"class":208},[67,172703,172704],{"class":77},"(os.getcwd())\n",[67,172706,172707,172709,172712,172715],{"class":69,"line":155},[67,172708,30952],{"class":208},[67,172710,172711],{"class":77},"(os.listdir(",[67,172713,172714],{"class":84},"\".\"",[67,172716,31034],{"class":77},[14,172718,172720],{"id":172719},"_9125-sys","9.12.5 sys",[57,172722,172724],{"className":30915,"code":172723,"language":30917,"meta":62,"style":62},"import sys\n\nprint(sys.version)\nprint(sys.path)\n",[64,172725,172726,172733,172737,172744],{"__ignoreMap":62},[67,172727,172728,172730],{"class":69,"line":70},[67,172729,30929],{"class":73},[67,172731,172732],{"class":77}," sys\n",[67,172734,172735],{"class":69,"line":143},[67,172736,177],{"emptyLinePlaceholder":176},[67,172738,172739,172741],{"class":69,"line":149},[67,172740,30952],{"class":208},[67,172742,172743],{"class":77},"(sys.version)\n",[67,172745,172746,172748],{"class":69,"line":155},[67,172747,30952],{"class":208},[67,172749,172750],{"class":77},"(sys.path)\n",[803,172752,172754,172755,172757,172758,257],{"id":172753},"_913-if-name-main","9.13 if ",[336,172756,80347],{}," == \"",[336,172759,102595],{},[19,172761,172762,172763,172766],{},"模块被直接运行和被导入时，",[64,172764,172765],{},"__name__"," 的值不同。",[19,172768,172769,172770,25331],{},"创建 ",[64,172771,172772],{},"my_module.py",[57,172774,172776],{"className":30915,"code":172775,"language":30917,"meta":62,"style":62},"def add(a, b):\n    return a + b\n\n\nif __name__ == \"__main__\":\n    print(add(1, 2))\n",[64,172777,172778,172786,172796,172800,172804,172816],{"__ignoreMap":62},[67,172779,172780,172782,172784],{"class":69,"line":70},[67,172781,32484],{"class":73},[67,172783,5928],{"class":112},[67,172785,151630],{"class":77},[67,172787,172788,172790,172792,172794],{"class":69,"line":143},[67,172789,4810],{"class":73},[67,172791,11587],{"class":77},[67,172793,1338],{"class":73},[67,172795,151641],{"class":77},[67,172797,172798],{"class":69,"line":149},[67,172799,177],{"emptyLinePlaceholder":176},[67,172801,172802],{"class":69,"line":155},[67,172803,177],{"emptyLinePlaceholder":176},[67,172805,172806,172808,172810,172812,172814],{"class":69,"line":161},[67,172807,2254],{"class":73},[67,172809,31757],{"class":208},[67,172811,102096],{"class":73},[67,172813,102099],{"class":84},[67,172815,4459],{"class":77},[67,172817,172818,172820,172822,172824,172826,172828],{"class":69,"line":167},[67,172819,31836],{"class":208},[67,172821,167137],{"class":77},[67,172823,1077],{"class":208},[67,172825,13153],{"class":77},[67,172827,939],{"class":208},[67,172829,31034],{"class":77},[19,172831,172832],{},"作用：",[815,172834,172835,172838],{},[818,172836,172837],{},"直接运行该文件时，执行测试代码。",[818,172839,172840],{},"被其他文件导入时，不执行测试代码。",[19,172842,172843],{},"这是写模块时很常用的习惯。",[803,172845,172847],{"id":172846},"_914-包","9.14 包",[19,172849,172850,172851,172854],{},"包是包含 ",[64,172852,172853],{},"__init__.py"," 的目录，用于组织多个模块。",[19,172856,172857],{},"目录结构：",[57,172859,172862],{"className":172860,"code":172861,"language":5906,"meta":62},[5904],"project\u002F\n  main.py\n  utils\u002F\n    __init__.py\n    file_utils.py\n    string_utils.py\n",[64,172863,172861],{"__ignoreMap":62},[19,172865,172866],{},"导入：",[57,172868,172870],{"className":30915,"code":172869,"language":30917,"meta":62,"style":62},"from utils.file_utils import read_file\n",[64,172871,172872],{"__ignoreMap":62},[67,172873,172874,172876,172879,172881],{"class":69,"line":70},[67,172875,31274],{"class":73},[67,172877,172878],{"class":77}," utils.file_utils ",[67,172880,30929],{"class":73},[67,172882,172883],{"class":77}," read_file\n",[19,172885,172886,172888],{},[64,172887,172853],{}," 可以为空，也可以写包初始化逻辑。",[803,172890,172892],{"id":172891},"_915-第三方包","9.15 第三方包",[19,172894,172895,172896,172898],{},"第三方包通过 ",[64,172897,24546],{}," 安装。",[57,172900,172902],{"className":59,"code":172901,"language":61,"meta":62,"style":62},"pip install requests\n",[64,172903,172904],{"__ignoreMap":62},[67,172905,172906,172908,172910],{"class":69,"line":70},[67,172907,24546],{"class":112},[67,172909,312],{"class":84},[67,172911,146635],{"class":84},[19,172913,172914],{},"使用：",[57,172916,172918],{"className":30915,"code":172917,"language":30917,"meta":62,"style":62},"import requests\n\nresponse = requests.get(\"https:\u002F\u002Fwww.example.com\")\nprint(response.status_code)\n",[64,172919,172920,172926,172930,172945],{"__ignoreMap":62},[67,172921,172922,172924],{"class":69,"line":70},[67,172923,30929],{"class":73},[67,172925,146635],{"class":77},[67,172927,172928],{"class":69,"line":143},[67,172929,177],{"emptyLinePlaceholder":176},[67,172931,172932,172935,172937,172940,172943],{"class":69,"line":149},[67,172933,172934],{"class":77},"response ",[67,172936,909],{"class":73},[67,172938,172939],{"class":77}," requests.get(",[67,172941,172942],{"class":84},"\"https:\u002F\u002Fwww.example.com\"",[67,172944,870],{"class":77},[67,172946,172947,172949],{"class":69,"line":155},[67,172948,30952],{"class":208},[67,172950,172951],{"class":77},"(response.status_code)\n",[19,172953,172954],{},"查看已安装包：",[57,172956,172958],{"className":59,"code":172957,"language":61,"meta":62,"style":62},"pip list\n",[64,172959,172960],{"__ignoreMap":62},[67,172961,172962,172964],{"class":69,"line":70},[67,172963,24546],{"class":112},[67,172965,119492],{"class":84},[19,172967,172968],{},"导出项目依赖：",[57,172970,172971],{"className":59,"code":146830,"language":61,"meta":62,"style":62},[64,172972,172973],{"__ignoreMap":62},[67,172974,172975,172977,172979,172981],{"class":69,"line":70},[67,172976,24546],{"class":112},[67,172978,146839],{"class":84},[67,172980,282],{"class":73},[67,172982,146844],{"class":84},[19,172984,172985],{},"安装项目依赖：",[57,172987,172988],{"className":59,"code":146850,"language":61,"meta":62,"style":62},[64,172989,172990],{"__ignoreMap":62},[67,172991,172992,172994,172996,172998],{"class":69,"line":70},[67,172993,24546],{"class":112},[67,172995,312],{"class":84},[67,172997,120176],{"class":208},[67,172999,146844],{"class":84},[803,173001,173003],{"id":173002},"_916-模块搜索路径","9.16 模块搜索路径",[19,173005,173006,173007,173010],{},"Python 导入模块时会在 ",[64,173008,173009],{},"sys.path"," 中查找。",[57,173012,173014],{"className":30915,"code":173013,"language":30917,"meta":62,"style":62},"import sys\n\nfor path in sys.path:\n    print(path)\n",[64,173015,173016,173022,173026,173038],{"__ignoreMap":62},[67,173017,173018,173020],{"class":69,"line":70},[67,173019,30929],{"class":73},[67,173021,172732],{"class":77},[67,173023,173024],{"class":69,"line":143},[67,173025,177],{"emptyLinePlaceholder":176},[67,173027,173028,173030,173033,173035],{"class":69,"line":149},[67,173029,74],{"class":73},[67,173031,173032],{"class":77}," path ",[67,173034,81],{"class":73},[67,173036,173037],{"class":77}," sys.path:\n",[67,173039,173040,173042],{"class":69,"line":155},[67,173041,31836],{"class":208},[67,173043,169766],{"class":77},[19,173045,173046],{},"优先查找当前运行目录，所以文件名不要和标准库同名。",[19,173048,158160],{},[57,173050,173053],{"className":173051,"code":173052,"language":5906,"meta":62},[5904],"random.py\njson.py\ntime.py\n",[64,173054,173052],{"__ignoreMap":62},[19,173056,173057],{},"这些文件名可能导致导入异常。",[803,173059,173061],{"id":173060},"_917-小案例工具包拆分","9.17 小案例：工具包拆分",[19,173063,172857],{},[57,173065,173068],{"className":173066,"code":173067,"language":5906,"meta":62},[5904],"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",[64,173069,173067],{"__ignoreMap":62},[19,173071,173072,25331],{},[64,173073,173074],{},"utils\u002Ffile_utils.py",[57,173076,173078],{"className":30915,"code":173077,"language":30917,"meta":62,"style":62},"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",[64,173079,173080,173086,173096,173100,173104,173114,173124,173132,173138,173142,173169,173179,173183,173187,173197,173223],{"__ignoreMap":62},[67,173081,173082,173084],{"class":69,"line":70},[67,173083,30929],{"class":73},[67,173085,147628],{"class":77},[67,173087,173088,173090,173092,173094],{"class":69,"line":143},[67,173089,31274],{"class":73},[67,173091,108848],{"class":77},[67,173093,30929],{"class":73},[67,173095,108853],{"class":77},[67,173097,173098],{"class":69,"line":149},[67,173099,177],{"emptyLinePlaceholder":176},[67,173101,173102],{"class":69,"line":155},[67,173103,177],{"emptyLinePlaceholder":176},[67,173105,173106,173108,173111],{"class":69,"line":161},[67,173107,32484],{"class":73},[67,173109,173110],{"class":112}," read_json",[67,173112,173113],{"class":77},"(path):\n",[67,173115,173116,173119,173121],{"class":69,"line":167},[67,173117,173118],{"class":77},"    path ",[67,173120,909],{"class":73},[67,173122,173123],{"class":77}," Path(path)\n",[67,173125,173126,173128,173130],{"class":69,"line":173},[67,173127,3821],{"class":73},[67,173129,39467],{"class":73},[67,173131,169847],{"class":77},[67,173133,173134,173136],{"class":69,"line":180},[67,173135,15469],{"class":73},[67,173137,52375],{"class":77},[67,173139,173140],{"class":69,"line":186},[67,173141,177],{"emptyLinePlaceholder":176},[67,173143,173144,173146,173148,173151,173153,173155,173157,173159,173161,173163,173165,173167],{"class":69,"line":444},[67,173145,34715],{"class":73},[67,173147,147328],{"class":208},[67,173149,173150],{"class":77},"(path, ",[67,173152,147338],{"class":84},[67,173154,13153],{"class":77},[67,173156,147343],{"class":5935},[67,173158,909],{"class":73},[67,173160,147348],{"class":84},[67,173162,14432],{"class":77},[67,173164,31920],{"class":73},[67,173166,148690],{"class":5935},[67,173168,4459],{"class":77},[67,173170,173171,173173,173175,173177],{"class":69,"line":2335},[67,173172,15469],{"class":73},[67,173174,148701],{"class":77},[67,173176,45891],{"class":5935},[67,173178,870],{"class":77},[67,173180,173181],{"class":69,"line":2340},[67,173182,177],{"emptyLinePlaceholder":176},[67,173184,173185],{"class":69,"line":2346},[67,173186,177],{"emptyLinePlaceholder":176},[67,173188,173189,173191,173194],{"class":69,"line":2351},[67,173190,32484],{"class":73},[67,173192,173193],{"class":112}," write_json",[67,173195,173196],{"class":77},"(path, data):\n",[67,173198,173199,173201,173203,173205,173207,173209,173211,173213,173215,173217,173219,173221],{"class":69,"line":2365},[67,173200,34715],{"class":73},[67,173202,147328],{"class":208},[67,173204,173150],{"class":77},[67,173206,152513],{"class":84},[67,173208,13153],{"class":77},[67,173210,147343],{"class":5935},[67,173212,909],{"class":73},[67,173214,147348],{"class":84},[67,173216,14432],{"class":77},[67,173218,31920],{"class":73},[67,173220,148690],{"class":5935},[67,173222,4459],{"class":77},[67,173224,173225,173228,173230,173232,173234,173236,173238,173240,173242,173244,173246],{"class":69,"line":2370},[67,173226,173227],{"class":77},"        json.dump(data, ",[67,173229,45891],{"class":5935},[67,173231,13153],{"class":77},[67,173233,147674],{"class":5935},[67,173235,909],{"class":73},[67,173237,34524],{"class":208},[67,173239,13153],{"class":77},[67,173241,152549],{"class":5935},[67,173243,909],{"class":73},[67,173245,939],{"class":208},[67,173247,870],{"class":77},[19,173249,173250,25331],{},[64,173251,155144],{},[57,173253,173255],{"className":30915,"code":173254,"language":30917,"meta":62,"style":62},"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",[64,173256,173257,173268,173272,173285,173305],{"__ignoreMap":62},[67,173258,173259,173261,173263,173265],{"class":69,"line":70},[67,173260,31274],{"class":73},[67,173262,172878],{"class":77},[67,173264,30929],{"class":73},[67,173266,173267],{"class":77}," read_json, write_json\n",[67,173269,173270],{"class":69,"line":143},[67,173271,177],{"emptyLinePlaceholder":176},[67,173273,173274,173276,173278,173281,173283],{"class":69,"line":149},[67,173275,160253],{"class":77},[67,173277,909],{"class":73},[67,173279,173280],{"class":77}," read_json(",[67,173282,152368],{"class":84},[67,173284,870],{"class":77},[67,173286,173287,173289,173291,173293,173295,173297,173299,173301,173303],{"class":69,"line":155},[67,173288,171071],{"class":77},[67,173290,63216],{"class":84},[67,173292,51974],{"class":77},[67,173294,150425],{"class":84},[67,173296,13153],{"class":77},[67,173298,152009],{"class":84},[67,173300,51974],{"class":77},[67,173302,1845],{"class":208},[67,173304,165689],{"class":77},[67,173306,173307,173310,173312],{"class":69,"line":161},[67,173308,173309],{"class":77},"write_json(",[67,173311,152368],{"class":84},[67,173313,173314],{"class":77},", students)\n",[803,173316,173318],{"id":173317},"_918-易错点","9.18 易错点",[815,173320,173321,173324,173329,173334,173337,173340],{},[818,173322,173323],{},"异常处理不要把所有错误都吞掉，至少要输出提示。",[818,173325,173326,173327,28922],{},"能指定异常类型就不要裸写 ",[64,173328,171431],{},[818,173330,173331,173333],{},[64,173332,171806],{}," 无论是否出错都会执行。",[818,173335,173336],{},"模块文件名不要和标准库重名。",[818,173338,173339],{},"导入自己写的模块时，要注意运行目录。",[818,173341,173342],{},"第三方包要安装到当前解释器或虚拟环境中。",[803,173344,173346],{"id":173345},"_919-本章练习","9.19 本章练习",[815,173348,173349,173352,173355,173361,173368],{},[818,173350,173351],{},"写一个安全输入整数函数，输入错误时提示并重新输入。",[818,173353,173354],{},"写函数读取文件，如果文件不存在则返回空字符串。",[818,173356,172769,173357,173360],{},[64,173358,173359],{},"math_utils.py","，实现加减乘除函数并导入使用。",[818,173362,173363,173364,173367],{},"创建一个 ",[64,173365,173366],{},"utils"," 包，把 JSON 读写函数放进去。",[818,173369,173370],{},"写一个程序，捕获除零异常和输入格式异常。",[779,173372,173373],{},"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":62,"searchDepth":143,"depth":143,"links":173375},[173376,173377,173378,173379,173380,173381,173382,173383,173384,173385,173386,173392,173399,173401,173402,173403,173404,173405,173406],{"id":171228,"depth":143,"text":171229},{"id":171356,"depth":143,"text":171357},{"id":171405,"depth":143,"text":171406},{"id":171554,"depth":143,"text":171555},{"id":171726,"depth":143,"text":171727},{"id":171795,"depth":143,"text":171796},{"id":171906,"depth":143,"text":171907},{"id":172032,"depth":143,"text":172033},{"id":172157,"depth":143,"text":172158},{"id":172212,"depth":143,"text":172213},{"id":172311,"depth":143,"text":172312,"children":173387},[173388,173389,173390,173391],{"id":172315,"depth":149,"text":172316},{"id":172349,"depth":149,"text":172350},{"id":172388,"depth":149,"text":172389},{"id":172467,"depth":149,"text":172468},{"id":172490,"depth":143,"text":172491,"children":173393},[173394,173395,173396,173397,173398],{"id":172494,"depth":149,"text":172495},{"id":172577,"depth":149,"text":172578},{"id":172622,"depth":149,"text":172623},{"id":172681,"depth":149,"text":172682},{"id":172719,"depth":149,"text":172720},{"id":172753,"depth":143,"text":173400},"9.13 if name == \"main\"",{"id":172846,"depth":143,"text":172847},{"id":172891,"depth":143,"text":172892},{"id":173002,"depth":143,"text":173003},{"id":173060,"depth":143,"text":173061},{"id":173317,"depth":143,"text":173318},{"id":173345,"depth":143,"text":173346},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch9",{"title":171220,"description":24093},"wiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包","8DoHUbhjhl_mmNCItpRjdgW7aUS0tCEWZltQGpr-eIk",{"id":173413,"title":173414,"body":173415,"description":173578,"extension":787,"meta":173579,"navigation":176,"path":173580,"seo":173581,"stem":173582,"__hash__":173583},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Findex.md","Python教程",{"type":7,"value":173416,"toc":173573},[173417,173420,173423,173426,173437,173439,173513,173516,173519,173522,173525,173528,173531,173534,173537,173540,173543],[10,173418,173414],{"id":173419},"python教程",[19,173421,173422],{},"这份笔记参考黑马程序员 Python 快速入门课程的学习路线整理，内容按“先能写、再写对、最后能做小项目”的顺序展开。笔记不是课程逐字稿，而是把知识点、代码模板、易错点和练习整理成适合复习的版本。(用于回顾复习，初版)",[19,173424,173425],{},"建议学习环境：",[815,173427,173428,173431,173434],{},[818,173429,173430],{},"Python 版本：Python 3.10 及以上。",[818,173432,173433],{},"编辑器：PyCharm、VS Code 或系统终端均可。",[818,173435,173436],{},"学习方式：每章先看概念，再手敲代码，最后完成练习。",[803,173438,117615],{"id":117615},[815,173440,173441,173447,173453,173459,173465,173471,173477,173483,173489,173495,173501,173507],{},[818,173442,173443],{},[28,173444,173446],{"href":173445},".\u002Fch1-Python","Python环境与第一个程序",[818,173448,173449],{},[28,173450,173452],{"href":173451},".\u002Fch2","基础语法、变量与字符串",[818,173454,173455],{},[28,173456,173458],{"href":173457},".\u002Fch3","判断语句",[818,173460,173461],{},[28,173462,173464],{"href":173463},".\u002Fch4","循环语句",[818,173466,173467],{},[28,173468,173470],{"href":173469},".\u002Fch5","函数基础",[818,173472,173473],{},[28,173474,173476],{"href":173475},".\u002Fch6","数据容器",[818,173478,173479],{},[28,173480,173482],{"href":173481},".\u002Fch7","函数进阶",[818,173484,173485],{},[28,173486,173488],{"href":173487},".\u002Fch8","文件操作",[818,173490,173491],{},[28,173492,173494],{"href":173493},".\u002Fch9","异常、模块与包",[818,173496,173497],{},[28,173498,173500],{"href":173499},".\u002Fch10-JSONpyecharts","JSON与pyecharts折线图",[818,173502,173503],{},[28,173504,173506],{"href":173505},".\u002Fch11","面向对象基础",[818,173508,173509],{},[28,173510,173512],{"href":173511},".\u002Fch12","综合案例与复习路线",[803,173514,173515],{"id":173515},"学习路线",[19,173517,173518],{},"第一阶段：能运行程序。",[19,173520,173521],{},"重点是安装 Python、理解解释器、掌握变量、输入输出、字符串格式化、判断和循环。完成这一阶段后，应该能写出猜数字、成绩等级、九九乘法表、简单菜单程序。",[19,173523,173524],{},"第二阶段：能组织数据。",[19,173526,173527],{},"重点是列表、元组、字符串、集合、字典、切片、遍历、通用函数和推导式。完成这一阶段后，应该能处理一批学生信息、订单数据、文本统计数据。",[19,173529,173530],{},"第三阶段：能封装逻辑。",[19,173532,173533],{},"重点是函数定义、参数、返回值、作用域、lambda、函数作为参数传递。完成这一阶段后，应该开始把重复代码拆成函数，而不是把所有逻辑写在一个文件里。",[19,173535,173536],{},"第四阶段：能做小项目。",[19,173538,173539],{},"重点是文件读写、JSON、异常处理、模块包、第三方库、面向对象和可视化。完成这一阶段后，应该能写学生管理系统、账单统计、疫情或销售数据可视化这类入门项目。",[803,173541,173542],{"id":173542},"参考资料",[815,173544,173545,173552,173559,173566],{},[818,173546,173547,173548],{},"黑马程序员 Python 入门教程推荐：",[28,173549,173550],{"href":173550,"rel":173551},"https:\u002F\u002Fwww.itheima.com\u002Fnews\u002F20230425\u002F174034.html",[32],[818,173553,173554,173555],{},"Python 官方中文教程：",[28,173556,173557],{"href":173557,"rel":173558},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Ftutorial\u002Findex.html",[32],[818,173560,173561,173562],{},"Python 标准库文档：",[28,173563,173564],{"href":173564,"rel":173565},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Flibrary\u002Findex.html",[32],[818,173567,173568,173569],{},"pyecharts 文档：",[28,173570,173571],{"href":173571,"rel":173572},"https:\u002F\u002Fpyecharts.org\u002F",[32],{"title":62,"searchDepth":143,"depth":143,"links":173574},[173575,173576,173577],{"id":117615,"depth":143,"text":117615},{"id":173515,"depth":143,"text":173515},{"id":173542,"depth":143,"text":173542},"参考黑马程序员 Python 快速入门路线整理的零基础到综合案例笔记",{"category":24095},"\u002Fwiki\u002F2024-10-10-python",{"title":173414,"description":173578},"wiki\u002F2024-10-10-python教程\u002Findex","yzEa8npVBj3xNU8x-4oSrDG7SfzITAVZlXDa1SwCYiA",1781331379005]